Показать сообщение отдельно
Старый 12.02.2005, 22:27   #98
Vam

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

По умолчанию Re: Уроки скриптологии

// ************************************************** ***************
// Функция реакции НПС на звук шагов ГГ или на звук упавшего предмета
// -----------------------------------------------------------------
// Вызывается в качестве реакции на пассивное восприятие PERC_ASSESSQUIETSOUND
// ************************************************** ***************

func void B_AssessQuietSound()
{
* *// other - НПС источник шума (ГГ), self - свидетель
* *// если источник шума отсутствует
* *if(!Hlp_IsValidNpc(other))
* *{
* * * *return;
* *};
* *// если расстояние по высоте между источником шума и свидетелем > дистанции реагирования по высоте
* *if(Npc_GetHeightToNpc(self,other) > PERC_DIST_HEIGHT)
* *{
* * * *return;
* *};
* *// если ГГ находится в доме, принадлежащим любой гильдии, и расстояние по высоте между свидетелем и ГГ > дистанции реакции через закрытые двери
* *if(Wld_GetPlayerPortalGuild() >= GIL_NONE) && (Npc_GetHeightToNpc(self,other) > PERC_DIST_INDOOR_HEIGHT)
* *{
* * * *return;
* *};
* *// если есть реакция на вошедшего в помещение
* *if(B_AssessEnterRoom())
* *{
* * * *return;
* *};
* *// если свидетель является охранником ворот
* *if(C_NpcIsGateGuard(self))
* *{
* * * *return;
* *};
* *// если ГГ и свидетель не враги и свидетель не имеет для ГГ важной информации
* *if(Npc_GetAttitude(self,other) != ATT_HOSTILE) && (Npc_CheckInfo(self,1) == FALSE)
* *{
* * * *return;
* *};
* *// если ГГ и свидетель враги
* *if(Npc_GetAttitude(self,other) == ATT_HOSTILE)
* *// и (у свидетеля личных врагов не было или (ГГ переодетый бандит и свидетель бандит))
* *&& ((self.aivar[AIV_EnemyOverride] == TRUE) ¦¦ (C_PlayerIsFakeBandit(self,other) && (self.guild == GIL_BDT)))
* *{
* * * *return;
* *};
* *// если свидетель видит источник звука (моё примечание: возможно здесь ошибка, необходимо поменять условие на противоположное???)
* *if(Npc_CanSeeSource(self))
* *{
* * * *return;
* *}; *
* *// очистка очереди AI команд свидетеля
* *Npc_ClearAIQueue(self);
* *// очистка восприятий свидетеля
* *B_ClearPerceptions(self);
* *// перевод свидетеля в состояние наблюдения за ГГ
* *AI_StartState(self,ZS_ObservePlayer,1,"");
* *return;
}; *


// ************************************************** ************
// Функция реакции НПС на предупреждение
// ---------------------------------------
// Предупреждение посылается только скриптами (вызов функции Npc_SendPassivePerc), ядром не испоьзуется
// ************************************************** ************

func void B_AssessWarn()
{
* *// self - свидетель, other - преступник, victim - жертва
* *// если свидетель жертва
* *if(Hlp_GetInstanceID(victim) == Hlp_GetInstanceID(self))
* *{
* * * *return;
* *};
* *// если свидетель находится в состоянии реакции на обнаженное оружие или наблюдает за ГГ
* *if(Npc_IsInState(self,ZS_ReactToWeapon)) ¦¦ (Npc_IsInState(self,ZS_ObservePlayer))
* *{
* * * *return;
* *};
* *// если преступник монстр
* *if(other.guild > GIL_SEPERATOR_HUM)
* *{
* * * *return;
* *};
* *// если свидетель охранник ворот
* *if(C_NpcIsGateGuard(self))
* *{
* * * *return;
* *};
* *// очистка очереди AI команд свидетеля
* *Npc_ClearAIQueue(self);
* *// очистка восприятий свидетеля
* *B_ClearPerceptions(self);
* *// перевод свидетеля в состояние наблюдения за ГГ
* *AI_StartState(self,ZS_ObservePlayer,0,"");
* *return;
};

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