|
|
30.08.2010, 12:31
|
#2322
|
|
Re: М: Скриптинг в Готике
2orebaron25:
1.Как создать квест в плане занесения его в дневник. Чтобы он существовал.
|
Посмотрите, как это делается в скриптах, например, у Бабо (Story\Dialoge\DIA_NOV_612_Babo.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Babo_Anliegen_Info() { * * *AI_Output(other,self,"DIA_Babo_Anliegen_15_00"); * * *//Что за просьба? * * *AI_Output(self,other,"DIA_Babo_Anliegen_03_01"); * * *//Ну, один из паладинов, Сержио, сейчас живет в монастыре. * * *AI_Output(self,other,"DIA_Babo_Anliegen_03_02"); * * *//Если ты сможешь убедить его дать мне несколько уроков, тогда я потренирую тебя. * * *AI_Output(other,self,"DIA_Babo_Anliegen_15_03"); * * *//Я посмотрю, что можно сделать. * * *Log_CreateTopic(Topic_BaboTrain,LOG_MISSION); * * *Log_SetTopicStatus(Topic_BaboTrain,LOG_Running); * * *B_LogEntry(Topic_BaboTrain,"Если я смогу убедить паладина Сержио немного потренироваться с Бабо, он научит меня искусству обращения с двуручным оружием."); };
...
func void DIA_Babo_Sergio_Info() { * * *AI_Output(other,self,"DIA_Babo_Sergio_15_00"); * * *//Я поговорил с Сержио. Он будет тренировать тебя по два часа каждое утро, с пяти часов. * * *AI_Output(self,other,"DIA_Babo_Sergio_03_01"); * * *//Спасибо! Какая честь для меня! * * *AI_Output(self,other,"DIA_Babo_Sergio_03_02"); * * *//Если хочешь, я также могу показать тебе несколько секретов боевого искусства. * * *Babo_TeachPlayer = TRUE; * * *Babo_Training = TRUE; * * *B_GivePlayerXP(XP_Ambient * 2); * * *Log_CreateTopic(Topic_KlosterTeacher,LOG_NOTE); * * *B_LogEntry(Topic_KlosterTeacher,"Бабо может обучить меня искусству обращения с двуручным оружием."); };
2.как сделать так чтобы например когда на тебя после диалога нападает тот же лорд Хаген, и когда убиваешь его,он просто падал замертво,а не падал раненым.(как бандюки)
|
Можно сделать это и без присваивания бандитской гильдии - вместо этого непись должен атаковать ГГ с причиной AR_Kill или AR_SuddenEnemyInferno - смотрим скрипты Ульфа (Story\Dialoge\DIA_NOV_602_Ulf.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Ulf_Abrechnung_Lass() { * * *AI_Output(other,self,"DIA_Ulf_Abrechnung_Lass_15_ 00"); * * *//Прекрати, я не хочу убивать тебя. * * *AI_Output(self,other,"DIA_Ulf_Abrechnung_Lass_03_ 01"); * * *//Чушь. Ты же знаешь, что у тебя нет ни единого шанса против меня! Сражайся! * * *AI_StopProcessInfos(self); * * *B_Attack(self,other,AR_KILL,0); };
или Моргахарда (Story\Dialoge\DIA_BDT_1030_Morgahard.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Morgahard_HALLO_attack() { * * *AI_Output(other,self,"DIA_Morgahard_HALLO_attack_ 15_00"); * * *//Хватит хныкать. Доставай свое оружие. Мы положим этому делу конец. * * *AI_Output(self,other,"DIA_Morgahard_HALLO_attack_ 07_01"); * * *//Отлично. Мне все равно нечего терять. * * *AI_StopProcessInfos(self); * * *MorgahardSucked = TRUE; * * *B_Attack(self,other,AR_SuddenEnemyInferno,1); };
|
|
|
30.08.2010, 12:42
|
#2323
|
|
Re: М: Скриптинг в Готике
2orebaron25:
2.как сделать так чтобы например когда на тебя после диалога нападает тот же лорд Хаген, и когда убиваешь его,он просто падал замертво,а не падал раненым.(как бандюки)
|
Для этого НПЦ нужно выставить aivar[AIV_DropDeadAndKill] = TRUE; можно сразу в скрипт НПЦ, можно во время диалога указать self.aivar[AIV_DropDeadAndKill] = TRUE; 2Dimus: Вопрос был о том как сделать, чтобы НПЦ СРАЗУ умирал после избиения, а не том как он должен атаковать.
|
|
|
30.08.2010, 19:02
|
#2324
|
|
Re: М: Скриптинг в Готике
Насчет квеста: Я имел в виду создать само наличие квеста,то есть вставить его в игру.а так я прописывал,и мне выдавало ошибку. Добавление от 08/30/10, в 18:04:30
у меня очередной вопрос: при разговоре с,допустим Кассией, мне нужно чтобы ДРУГОЙ НПС сменил вейпойнт(routine). Как это сделать? Что прописать в диалоге? Добавление от 08/30/10, в 19:22:33
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Jesper_Murder(C_Info) { * * *npc = VLK_446_Jesper; * * *nr = 10; * * *condition = DIA_Jesper_Murder_Condition; * * *information = DIA_Jesper_Murder_Info; * * *permanent = FALSE; * * *important = TRUE; };
func int DIA_Jesper_Murder_Condition() { * * *if(Npc_KnowsInfo(other,DIA_Cassia_Rupert)) * * *{ * * * * * *return TRUE; * * *}; };
func void DIA_Jesper_Murder_Info() { * * *AI_Output(self,other,"DIA_Jesper_Murder_09_30"); * * *//Я слышал что ты нашел убийцу , Руперта. Это правда? * * *AI_Output(other,self,"DIA_Jesper_Murder_15_20"); * * *//Да. * * *AI_Output(self,other,"DIA_Jesper_Murder_09_31"); * * *//Где он? * * *AI_Output(self,other,"DIA_Jesper_Murder_09_32"); * * *//На пристани возле корабля. * * *AI_Output(self,other,"DIA_Jesper_Murder_09_32"); * *//Отлично! Спасибо тебе. * * *B_KillNpc(Rupert); * * *AI_StopProcessInfos(self); };
При компиляции выдает - Unknown identifier (RUPERT) в строке B_KillNpc(RUPERT); что не так?!
|
|
|
31.08.2010, 18:18
|
#2327
|
|
Re: М: Скриптинг в Готике
2orebaron25:
1.при разговоре с,допустим Кассией, мне нужно чтобы ДРУГОЙ НПС сменил вейпойнт(routine). Как это сделать?
|
Выбирай в Npc_Globals.d нужного НПЦ, или создай нужного, например orebaron25 :) Потом в диалоге с Кассией вставляй B_StartOtherRoutine(orebaron25,"Название_рутины");
|
|
|
02.09.2010, 01:20
|
#2330
|
|
Re: М: Скриптинг в Готике
2orebaron25: Квесты - это собственно задания, записываемые в дневник, которые требуется решить игроку. Могут быть как простые из одного диалога, так и сложные из нескольких взаимосвязанных диалогов со множеством условий и вариантов решения. В классических Г1 и Г2а квесты обычно выдавались через диалоги с другими НПЦ. В Г3 квесты могли возникать на пустом месте. В модах ты можешь делать как хочешь. Здесь пример создания диалога с занесением в дневник от DEDROIT.
|
|
|
02.09.2010, 02:26
|
#2331
|
|
Re: М: Скриптинг в Готике
Есть ли вариант, чтобы непись при смене расписания мгновенно переносился на нужный фрипоинт? Суть: ГГ говорит с субъектом А, который находится в доме, после чего субъект В должен очутиться неподалеку от ГГ и задать "провокационные" вопросы, типа какого дьявола он пришел.
такого эффекта не дает, непись лениво идет в хату и ГГ может спокойно удрать до его появления.
|
|
|
02.09.2010, 17:54
|
#2334
|
|
Re: М: Скриптинг в Готике
instance DIA_Fingers_EXIT(C_Info) { npc = VLK_4201_Fingers; nr = 999; condition = DIA_Fingers_EXIT_Condition; information = DIA_Fingers_EXIT_Info; permanent = TRUE; description = Dialog_Ende; };
func int DIA_Fingers_EXIT_Condition() { return TRUE; };
func void DIA_Fingers_EXIT_Info() { AI_StopProcessInfos(self); };
instance DIA_Fingers_PICKPOCKET(C_Info) { npc = SLD_1001_Fingers; nr = 900; condition = DIA_Fingers_PICKPOCKET_Condition; information = DIA_Fingers_PICKPOCKET_Info; permanent = TRUE; description = Pickpocket_60; };
func int DIA_Fingers_PICKPOCKET_Condition() { return C_Beklauen(60,65); };
func void DIA_Fingers_PICKPOCKET_Info() { Info_ClearChoices(DIA_Fingers_PICKPOCKET); Info_AddChoice(DIA_Fingers_PICKPOCKET,Dialog_Back ,DIA_Fingers_PICKPOCKET_B ACK); Info_AddChoice(DIA_Fingers_PICKPOCKET,DIALOG_PICK POCKET,DIA_Fingers_PICKPO CKET_DoIt); };
func void DIA_Fingers_PICKPOCKET_DoIt() { B_Beklauen(); Info_ClearChoices(DIA_Fingers_PICKPOCKET); };
func void DIA_Fingers_PICKPOCKET_BACK() { Info_ClearChoices(DIA_Fingers_PICKPOCKET); };
instance DIA_Fingers_Hello(C_Info) { npc = VLK_4201_Fingers; nr = 2; condition = DIA_Fingers_Hello_Condition; information = DIA_Fingers_Hello_Info; permanent = FALSE; description = "Эй , ты!"; };
func int DIA_Fingers_Hello_Condition() { return TRUE; };
func void DIA_Fingers_Hello() { AI_Output(self,other,"DIA_Fingers_Hello_15_50 "); //Допустим здесь текст. AI_Output(self,other,"DIA_Fingers_Hello_03_00 "); // AI_Output(self,other,"DIA_Fingers_Hello_03_01 "); // AI_Output(other,self,"DIA_Fingers_Hello_15_00 "); // AI_Output(self,other,"DIA_Fingers_Hello_03_02 "); // AI_Output(self,other,"DIA_Fingers_Hello_03_03 "); // AI_Output(self,other,"DIA_Fingers_Hello_03_04 "); // Info_ClearChoices(DIA_Fingers_Hello); };
instance DIA_Fingers_What(C_Info) { npc = VLK_4201_Fingers; nr = 2; condition = DIA_Fingers_What_Condition; information = DIA_Fingers_What_Info; permanent = FALSE; description = "Что ты здесь делаешь?"; };
func int DIA_Fingers_What_Condition() { return TRUE; };
func void DIA_Fingers_What() { AI_Output(other,self,"DIA_Fingers_What_15_01" ); // AI_Output(self,other,"DIA_Fingers_What_03_05" ); // AI_Output(other,self,"DIA_Fingers_What_15_02" ); // AI_Output(self,other,"DIA_Fingers_What_03_06" ); // AI_Output(self,other,"DIA_Fingers_What_03_07" ); // AI_Output(self,other,"DIA_Fingers_What_03_08" ); // AI_Output(other,self,"DIA_Fingers_What_15_03" ); // AI_Output(self,other,"DIA_Fingers_What_03_09" ); // AI_Output(self,other,"DIA_Fingers_What_03_10" ); // AI_Output(self,other,"DIA_Fingers_What_03_11" ); //
Выдает ошибку - Redefined identifier - DIA_FINGERS_HELLO
Что не так?????
|
|
|
02.09.2010, 18:00
|
#2335
|
|
Re: М: Скриптинг в Готике
2orebaron25:
Выдает ошибку - Redefined identifier - DIA_FINGERS_HELLO
|
Функция с одним и тем же именем два раза написана, внимательнее смотри на диалоги.
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Fingers_Hello(C_Info) { * * npc = VLK_4201_Fingers; * * nr = 2; * * condition = DIA_Fingers_Hello_Condition; * * information = DIA_Fingers_Hello_Info; * * permanent = FALSE; * * description = "Эй , ты!"; };
func int DIA_Fingers_Hello_Condition() { * * return TRUE; };
func void DIA_Fingers_Hello() { * * AI_Output(self,other,"DIA_Fingers_Hello_15_50"); * * *//Допустим здесь текст. * * AI_Output(self,other,"DIA_Fingers_Hello_03_00"); * * *// * * AI_Output(self,other,"DIA_Fingers_Hello_03_01"); * * *// * * * AI_Output(other,self,"DIA_Fingers_Hello_15_00"); * * *// * * AI_Output(self,other,"DIA_Fingers_Hello_03_02"); * * *// * * AI_Output(self,other,"DIA_Fingers_Hello_03_03"); * * *// * * AI_Output(self,other,"DIA_Fingers_Hello_03_04"); * * *// * * Info_ClearChoices(DIA_Fingers_Hello); };
Должно быть DIA_Fingers_Hello_Info
|
|
|
09.09.2010, 16:05
|
#2341
|
|
Re: М: Скриптинг в Готике
instance PAL_3333_PalDead(Npc_Default) { * * *name[0] = "Мертвый Паладин"; * * *guild = GIL_PAL; * * *id = 3333; * * *voice = 14; * * *flags = 0; * * *npcType = npctype_main; * * *aivar[AIV_NPCIsRanger] = TRUE; * * *B_SetAttributesToChapter(self,1); * * *fight_tactic = FAI_HUMAN_MASTER; * * *B_CreateAmbientInv(self); * * *B_SetNpcVisual(self,MALE,"Hum_Head_Bald",Face_L_I an,BodyTex_L,It Ar_PAL_M); * * *Mdl_SetModelFatness(self,0); * * *Mdl_ApplyOverlayMds(self,"Humans_Arrogance.mds"); * * *B_GiveNpcTalents(self); * * *B_SetFightSkills(self,70); * * *daily_routine = Rtn_Pal_3333; };
func void Rtn_Pal_3333() { * * *TA_Stand_ArmsCrossed(8,0,16,0,"NW_PAL_DEAD_01"); * * *TA_Stand_ArmsCrossed(16,0,8,0,"NW_PAL_DEAD_01"); };
Вот тебе скрипт одного из неписей. Я их естественно добавил через gothic.src
|
|
|
09.09.2010, 18:42
|
#2344
|
|
Re: М: Скриптинг в Готике
2orebaron25: Это статья от DEDROIT`a, сам по ней учился ;) ВОТ!Только не торопись, пролистай всё с начала :)
|
|
|
13.09.2010, 00:08
|
#2347
|
|
Re: М: Скриптинг в Готике
2orebaron25: Проверяй внимательно ! Файл называется , Non_1000_DeadPaladin.d
Cпойлер(щелкните, чтобы прочесть):
instance Non_1000_DeadPaladin(Npc_Default) { name[0] = "Мёртвый паладин"; guild = GIL_NONE; id = 1000; voice = 12; flags = 0; npcType = NPCTYPE_AMBIENT; B_SetAttributesToChapter(self,4); fight_tactic = FAI_HUMAN_STRONG; EquipItem(self,ItMw_2h_Pal_Sword); B_CreateAmbientInv(self); B_SetNpcVisual(self,MALE,"Hum_Head_FatBald",Face_ N_Wolf,BodyTex_N,ItAr_PAL_M); Mdl_SetModelFatness(self,1); Mdl_ApplyOverlayMds(self,"Humans_Militia.mds" ); B_GiveNpcTalents(self); B_SetFightSkills(self,55); daily_routine = Rtn_Start_1000; };
func void Rtn_Start_1000() { TA_Stand_Guarding(8,0,23,0,"NW_XARDAS_TOWER_IN1_0 2"); TA_Stand_Guarding(23,0,8,0,"NW_XARDAS_TOWER_IN1_0 2"); };
Заносим в Gothic.src В конце прописываем : STORY\NPC\Non_1000_DeadPaladin.d Заходим в Startup.d ищем строку Wld_InsertNpc(NONE_100_Xardas,"NW_XARDAS_STAR T"); и над ней пишем : Wld_InsertNpc(Non_1000_DeadPaladin,"NW_XARDAS_STA RT"); Компилируем, через Spacer II или компилятором от Vam`a. Всё! НПС вставлен.
|
|
|
17.09.2010, 08:49
|
#2349
|
|
Re: М: Скриптинг в Готике
2orebaron25: Давай я тебе для начала кину ссылку на [rul] Там много интересного и познавательного. В частности 14-й пункт третьей статьи
14. Пользователям запрещается обсуждать поиск пиратского программного обеспечения, давать прямые ссылки, позволяющие получить такое программное обеспечение или warez, а также любые другие действия, приравненные к подобным. В случае нарушения администрация вправе применить санкцию в виде бана на 1 неделю, а в случае повтора действий санкцию в виде бана на постоянный срок.
|
|
|
|
08.12.2010, 23:12
|
#2359
|
|
Re: М: Скриптинг в Готике
2zovsna:
У меня следующий вопрос: зачем в файле PC_hero несколько абзацев с характеристиками ГГ для 2, 5, 7, 11 и т.д. уровней?
|
ЕМНИП это тестовые болванки, никакой полезной нагрузки не несут.
Может ли это помочь сделать так, чтобы визуализация ГГ зависела от переменных?
|
Нет
Цель мода - как минимум сделать так, чтобы присоединяясь к БолотномуЛагерю ГГ получал лысую голову и короткие штаны (как в Sammel Mod), максимум - чтобы можно было побриться наголо и татуироваться при помощи диалога с NPC в любой момент игры.
|
За внешность нпц отвечают строчки
Код:
Mdl_SetVisual(self,"HUMANS.MDS");Mdl_SetVisualBody(self,"hum_body_Naked0",4,1,"Hum_Head_Pony",9,0,-1);
Соотвественно, прописав в нужном месте (диалог вступления в БЛ) строчку вроде*
Код:
Mdl_SetVisualBody(hero,"hum_body_Naked0",0,1,"Hum_Head_Bald",76,1,-1);
Мы получим внешность Мильтена для ГГ. Или любого другого НПЦ чья внешность нам известна. Это черновой вариант, just for sample. В идеале еще: 1. придется проводить проверку при каждой загрузке сейва, дабы внешность не откатывалась к предыдущей 2. придется нарисовать текстуру лысого ГГ и разобраться в логике нумерации лиц в 1 готике
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 11:20. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|