Показать сообщение отдельно
Старый 18.11.2012, 18:55   #2561
JohaNBlack

AGFC
Гость
 
Сообщений: n/a

По умолчанию 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);

нормально атакует после разговора. В чем ошибка?

Ответить с цитированием