|
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; };
|