|
Re: Уроки скриптологии
// ************************************************** *************** // Функция реакции НПС, когда в него целится ГГ оружием дальнего радиуса поражения // ---------------------------------------------------- // Вызывается как реакция на пассивное восприятие PERC_ASSESSTHREAT // ************************************************** ***************
func void B_AssessThreat() { * *// other - ГГ, self - НПС цель * *// если расстояние между ГГ и целью > макс. дальности действия пассивного восприятия * *if(Npc_GetDistToNpc(self,other) > PERC_DIST_INTERMEDIAT) * *{ * * * *return; * *}; * *// если цель не видит ГГ * *if(!Npc_CanSeeNpc(self,other)) * *{ * * * *return; * *}; * *// если оружие, из которого целится ГГ, не может нанести урон цели * *if(!C_NpcIsBotheredByWeapon(self,other)) * *{ * * * *return; * *}; * *// очистка очереди состояний цели * *Npc_ClearAIQueue(self); * *// очистка восприятий цели * *B_ClearPerceptions(self); * *// переход цели в состояние реакции на оружие ГГ * *AI_StartState(self,ZS_ReactToWeapon,0,""); * *return; };
Еще один файл с функцией реакции на обнаженное оружие.
// ************************************************** ************* // Функция реакции НПС, когда ГГ достает оружие // --------------------------------------------------------------- // Вызывается как реакция на пассивное восприятие PERC_DRAWWEAPON и в некоторых других функциях // --------------------------------------------------------------- // Возвращает FALSE, если НПС не реагирует на оружие ГГ, в противном случае - TRUE. // ************************************************** *************
func int B_AssessDrawWeapon() { * *// other - ГГ, self - НПС * *// если ГГ вышел из режима нападения (убрал оружие) * *if(Npc_IsInFightMode(other,FMODE_NONE)) * *{ * * * *return FALSE; * *}; * * *// если расстояние между ГГ и НПС > дистанции начала диалога * *if(Npc_GetDistToNpc(self,other) > PERC_DIST_DIALOG) * *{ * * * *return FALSE; * *}; * *// если оружие ГГ не может нанести урон НПС * *if(!C_NpcIsBotheredByWeapon(self,other)) * *{ * * * *return FALSE; * *}; * *// если НПС уже находится в состоянии реакции на оружие ГГ * *if(Npc_IsInState(self,ZS_ReactToWeapon)) * *{ * * * *return FALSE; * *}; * *// если НПС находится в состоянии наблюдения за ГГ и предыдущее состояние НПС было наблюдение за сражением ГГ * *if(Npc_IsInState(self,ZS_ObservePlayer)) && (Npc_WasInState(self,ZS_WatchFight)) * *{ * * * *return FALSE; * *}; * *// если НПС не видит ГГ * *if(!Npc_CanSeeNpc(self,other)) * *{ * * * * *return FALSE; * *}; * *// очистка очереди состояний НПС * *Npc_ClearAIQueue(self); * *// очистка восприятий НПС * *B_ClearPerceptions(self); * *// переход НПС в состояние реакции на оружие ГГ * *AI_StartState(self,ZS_ReactToWeapon,0,""); * *return TRUE; };
|