|
Re: Уроки скриптологии
// ************************************************** ** // Обработчик состояния когда НПС убегает от агрессора // ---------------------------------------------------- // self - убегающий НПС, other - агрессор // ************************************************** **
// Функция инициализации состояния func void ZS_Flee() { * * *// разрешить восприятие примененной магии * *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagi c); * * * * * * * *// получить other - агрессор * *B_ValidateOther(); * *// если загрузки игры не было * *if(self.aivar[AIV_LOADGAME] == FALSE) * *{ * * * *// НПС кричит агрессору (SVM фраза "Я сматываюсь!") * * * *B_Say_Overlay(self,other,"$RUNAWAY"); * *}; * *// НПС прячет оружие * *AI_RemoveWeapon(self); * *// НПС переходит на бег * *AI_SetWalkmode(self,NPC_RUN); * *// проигрывается анимация убегающего человека * *Mdl_ApplyOverlayMds(self,"HUMANS_FLEE.MDS"); };
// Цикл состояния убегания func int ZS_Flee_Loop() { * *// получить для НПС цель (инициализировать other агрессором) * *Npc_GetTarget(self); * *// если расстояние между НПС и агрессором > дистанции преследования * *if(Npc_GetDistToNpc(self,other) > FIGHT_DIST_CANCEL) * *{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// очистка очереди AI состояний НПС * * * *Npc_ClearAIQueue(self); * * * *return LOOP_END; * * * * * * * * * * * * * * * * * * * *}; * *// если агрессор обездвижен (мертв, безсознания и т.д.) * *if(C_NpcIsDown(other)) * *{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *// очистка очереди AI состояний НПС * * * *Npc_ClearAIQueue(self); * * * *return LOOP_END; * *}; * *// НПС продолжает убегать * *AI_Flee(self); * *return LOOP_CONTINUE; };
// Функция завершения состояния убегания func void ZS_Flee_End() { * *// прекратить проигрывание анимации убегающего человека * *Mdl_RemoveOverlayMDS(self,"HUMANS_FLEE.MDS"); * *// НПС останавливается * *AI_StandUp(self); * *// вызов функции завершения состояния лечения НПС * *AI_StartState(self,ZS_HealSelf,1,""); * *return; };
... еще описание одного состояния
// ********************************* // Обработчик состояния лечения НПС // *********************************
// Инициализация состояния func void ZS_HealSelf() { * *// разрешить НПС минимальный набор восприятий * *Perception_Set_Minimal(); };
// Цикл состояния func int ZS_HealSelf_Loop() { * *// если текущая жизнь НПС равняется максимальной * *if(self.attribute[ATR_HITPOINTS] == self.attribute[ATR_HITPOINTS_MAX]) * *{ * * * *// очистка очереди AI состояний НПС * * * *Npc_ClearAIQueue(self); * * * *return LOOP_END; * *}; * *// если НПС имеет "Лечебный эликсир" * *if(Npc_HasItems(self,ItPo_Health_03) > 0) * * * * * * *{ * * * *// НПС пьет "Лечебный эликсир" * * * *AI_UseItem(self,ItPo_Health_03); * * * *return LOOP_CONTINUE; * *} * *// если НПС имеет "Лечебный экстракт" * *else if(Npc_HasItems(self,ItPo_Health_02) > 0) * *{ * * * *// НПС пьет "Лечебный экстракт" * * * *AI_UseItem(self,ItPo_Health_02); * * * *return LOOP_CONTINUE; * *} * *// если НРС имеет "Лечебную эссенцию" * *else if(Npc_HasItems(self,ItPo_Health_01) > 0) * *{ * * * *// НПС пьет "Лечебную эссенцию" * * * *AI_UseItem(self,ItPo_Health_01); * * * *return LOOP_CONTINUE; * *} * *else //иначе * *{ * * * *// очистка очереди AI состояний НПС * * * *Npc_ClearAIQueue(self); * * * *return LOOP_END; * *}; };
// Функция завершения состояния лечения func void ZS_HealSelf_End() { };
|