Показать сообщение отдельно
Старый 10.02.2005, 10:07   #96
Vam

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

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

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