|
Re: Уроки скриптологии
// ************************************************** ** // Функция реакции людей на убийство // ************************************************** **
func void B_AssessMurder() { * *// self - свидетель убийства, other - преступник (убийца), victim - жертва (труп) * *// если свидетель убийца * *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(other)) * *{ * * * *return; * *}; * *// если расстояния между (свидетелем и преступником) и (свидетелем и жертвой) > макс. дальности действия восприятия * *if(Npc_GetDistToNpc(self,other) > PERC_DIST_INTERMEDIAT) && (Npc_GetDistToNpc(self,victim) > PERC_DIST_INTERMEDIAT) * *{ * * * *return; * *}; * *// если расстояния по высоте между (свидетелем и преступником) и (свидетелем и жертвой) > дальности реакций НПС * *if(Npc_GetHeightToNpc(self,other) > PERC_DIST_HEIGHT) && (Npc_GetHeightToNpc(self,victim) > PERC_DIST_HEIGHT) * *{ * * * *return; * *}; * *// если свидетель не видит преступника и свидетель не видит жертву * *if(!Npc_CanSeeNpcFreeLOS(self,other)) && (!Npc_CanSeeNpcFreeLOS(self,victim)) * *{ * * * *return; * *}; * *// вызов функции реакции свидетеля на преступника (врага) * *if(B_AssessEnemy()) * *{ * * * *return; * *}; * * * * * * * * * * *// если жертва овца и она убита не "крутым парнем" * *if(victim.guild == GIL_SHEEP) && (victim.aivar[AIV_ToughGuy] == FALSE) * *{ * * * *// если есть причина свидетелю атаковать преступника * * * *if(C_WantToAttackSheepKiller(self,other)) * * * *{ * * * * * *// вызов функции атаки * * * * * *B_Attack(self,other,AR_SheepKiller,0); * * * * * *return; * * * *} * * * *else // в противном случае * * * *{ * * * * * *// если свидетель является охранником ворот * * * * * *if(C_NpcIsGateGuard(self)) * * * * * *{ * * * * * * * *// свидетель запоминает новость, что преступник убил овцу * * * * * * * *B_MemorizePlayerCrime(self,other,CRIME_SHEEPKILLE R); * * * * * *}; * * * *}; * *}; * *// если преступник монстр и жертва монстр * *if(other.guild > GIL_SEPERATOR_HUM) && (victim.guild > GIL_SEPERATOR_HUM) * *{ * * * *return; * *}; * *// если преступник монстр * *if(other.guild > GIL_SEPERATOR_HUM) * *{ * * * *// свидетель атакует монстра * * * *B_Attack(self,other,AR_MonsterMurderedHuman,0); * * * *return; * *}; * *// если жертва монстр * *if(victim.guild > GIL_SEPERATOR_HUM) * *{ * * * *return; * *}; * *// если у свидетеля врагов не было * *if(self.aivar[AIV_EnemyOverride] == TRUE) * *{ * * * * *// теперь у свидетеля есть враг * * * *self.aivar[AIV_EnemyOverride] = FALSE; * * * *// свидетелю разрешено воспринимать все объекты в зоне действия восприятия * * * *Npc_PerceiveAll(self); * * * *// поиск свидетелем цели * * * *Npc_GetNextTarget(self); * * * *// если преступник существует и он не бессознателен * * * *if(Hlp_IsValidNpc(other)) && (!C_NpcIsDown(other)) * * * *{ * * * * * *// свидетель атакует преступника * * * * * *B_Attack(self,other,AR_GuildEnemy,0); * * * * * *return; * * * *}; * * * *return; * *}; * *// если (свидетель враждебен к жертве или свидетель зол на жертву) * *if((Npc_GetAttitude(self,victim) == ATT_HOSTILE) ¦¦ (Npc_GetAttitude(self,victim) == ATT_ANGRY)) * *// и (свидетель друг преступника или свидетель нейтрален к преступнику) * *&& ((Npc_GetAttitude(self,other) == ATT_FRIENDLY) ¦¦ (Npc_GetAttitude(self,other) == ATT_NEUTRAL)) * *{ * * * *return; * *}; * *// если преступник ГГ и свидетель его друг * *if(Npc_IsPlayer(other) && (self.npctype == NPCTYPE_FRIEND)) * *{ * * * *return; * *}; * *// если свидетель не должен реагировать на убийство * *if(!C_WantToAttackMurder(self,other)) * *{ * * * *// если свидетель является охранником ворот * * * *if(C_NpcIsGateGuard(self)) * * * *{ * * * * * *// свидетель запоминает новость, что преступник убийца * * * * * *B_MemorizePlayerCrime(self,other,CRIME_MURDER); * * * *}; * * * *return; * *}; * *// если преступник и жертва являются НПС, которым разрешено убить друг друга * *if(other.aivar[AIV_DropDeadAndKill] == TRUE) ¦¦ (victim.aivar[AIV_DropDeadAndKill] == TRUE) * *{ * * * *return; * *}; * *// если жертва черный маг (ищущий) или (жертва бандит и он не из Лагеря бандитов) * *if(victim.guild == GIL_DMT) ¦¦ ((victim.guild == GIL_BDT) && !C_NpcBelongsToBL(victim)) * *{ * * * *return; * *}; * *// свидетель атакует преступника * *B_Attack(self,other,AR_HumanMurderedHuman,0); * *return; };
|