Показать сообщение отдельно
Старый 07.02.2005, 09:55   #93
Vam

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

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

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