|
Re: М: Скриптинг в Готике
2UkroLeha: Можно еще впорос? Как перекомпилировать zen с новой моделью mds? Просто у меня есть zen с предметами, вейнетом и прочим. Я обнаружил, что в mds модели в одном месте вода твердая. Исправил, и сейчас мне нужно перекомпилировать zen с новой mds'кой. Год назад я это уже делал, но за это время напрочь забыл, как это делается. Более не актуально, вспомнил. Добавление от 11/18/12, в 12:16:09
AIVAR_ отслеживаются движком, или можно в скриптах ввести свой и нормально использовать? Добавление от 11/18/12, в 19:15:21
Есть скрипт ZS_Intercept:
Cпойлер(щелкните, чтобы прочесть):
func void ZS_Intercept() { Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessSCM ad); Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_Intercept MadAssessDamage); Npc_PercEnable(self,PERC_ASSESSMAGIC,B_InterceptM adAssessMagic); Npc_PercEnable(self,PERC_ASSESSCASTER,B_AssessSCM ad); Npc_PercEnable(self,PERC_ASSESSTHREAT,B_AssessSCM ad); self.senses = SENSE_HEAR | SENSE_SEE; self.senses_range = 1300; Npc_SetPercTime(self,0.5); AI_Standup(self); AI_SetWalkMode(self,NPC_WALK); AI_GotoWP(self,self.wp); AI_AlignToWP(self); };
func int ZS_Intercept_Loop() { AI_Wait(self,1); return LOOP_CONTINUE; };
func void ZS_Intercept_End() { };
func void B_AssessSCMad() { if(Npc_CheckInfo(self,1)) { hero.aivar[AIV_IMPORTANT] = TRUE; B_FullStop(self); AI_StartState(self,ZS_Talk,1,""); return; }; };
func void B_InterceptMadAssessDamage() { if(Npc_CheckInfo(self,1)) { hero.aivar[AIV_IMPORTANT] = TRUE; B_FullStop(self); AI_StartState(self,ZS_Talk,1,""); return; } else { B_FullStop(self); AI_StartState(self,ZS_ReactToDamage,0,""); }; };
func void B_InterceptMadAssessMagic() { if(Npc_CheckInfo(self,1)) { hero.aivar[AIV_IMPORTANT] = TRUE; B_FullStop(self); AI_StartState(self,ZS_Talk,1,""); return; } else { B_FullStop(self); B_AssessMagic(); }; };
и есть файл диалога:
Cпойлер(щелкните, чтобы прочесть):
instance Info_HighPriest1(C_Info) { npc = ORC_Priest_1; nr = 1; condition = Info_HighPriest1_Condition; information = Info_HighPriest1_Info; permanent = 0; important = 1; };
func int Info_HighPriest1_Condition() { return TRUE; };
func void Info_HighPriest1_Info() { B_SelectWeapon(self,other); AI_SetWalkMode(self,NPC_WALK); AI_GotoNpc(self,other); AI_Output(self,other,"Info_HighPriest1_17_01" ); //СМЕЕЕЕЕЕЕРТНЫЫЫЙ! AI_Output(self,other,"Info_HighPriest1_17_02" ); //КАК ОСМЕЕЕЛИЛСЯ ТЫ ПОТРЕВОЖИТЬ МЕНЯ???!!! AI_Output(self,other,"Info_HighPriest1_17_03" ); //ГОТОВЬСЯ УМЕРЕТЬ! AI_Output(other,self,"Info_HighPriest1_15_04" ); //Мы еще посмотрим, кому нужно готовиться, ты, сгнивший кусок мяса! B_LogEntry(CH4_EnterTemple,"Я стою перед Варраг-Нашором, одним из пяти орочьих шаманов, которые привели Спящего в наш мир. Я положу конец его существованию."); AI_StopProcessInfos(self); Npc_SetAttitude(self,ATT_HOSTILE); Npc_SetTempAttitude(self,ATT_HOSTILE); Npc_SetTarget(self,hero); B_Attack(self,other,AR_NONE,1); };
После разговора орк должен атаковать героя, но он тупо стоит и даже не реагирует на удары. Хотя другой НПС с таким же ZS скриптом и с такой вставкой диалоге
Cпойлер(щелкните, чтобы прочесть):
Npc_SetAttitude(self,ATT_HOSTILE); Npc_SetTempAttitude(self,ATT_HOSTILE); Npc_SetTarget(self,hero); B_Attack(self,other,AR_NONE,1);
нормально атакует после разговора. В чем ошибка?
|