|
Re: Уроки скриптологии
// ************************************************** ************** // Функция реакции людей на повреждение // ************************************************** **************
func void B_AssessDamage() { * *// self - жертва, other - агрессор * *var C_NPC Quarho; * *// Куарходрон * *Quarho = Hlp_GetNpc(NONE_ADDON_111_Quarhodron); * *var C_NPC Rhadem; * *// Радемес * *Rhadem = Hlp_GetNpc(NONE_ADDON_112_Rhademes); * *// Если жертва Куарходрон или Радемес * *if((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Quarho))) ¦¦ ((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Rhadem))) * *{ * * * *// вызов функции реакции на повреждение для призраков * * * *B_GhostSpecialDamage(other,self); * * * *return; * *}; * *// вызов функции реакции на повреждение "Когтем Белиара" * *B_BeliarsWeaponSpecialDamage(other,self); * *// если жертва Альрик получает повреждение после того, как он сдался * *if(self.aivar[AIV_ArenaFight] == AF_AFTER) * *{ * * * *// ГГ нечестно выиграл сражение с Альриком * * * *self.aivar[AIV_ArenaFight] = AF_AFTER_PLUS_DAMAGE; * *}; * *// если у жертвы врагов не было * *if(self.aivar[AIV_EnemyOverride] == TRUE) * *{ * * * *var C_NPC RAV; * * * *// Равен * * * *RAV = Hlp_GetNpc(BDT_1090_Addon_Raven); * * * *// если Равен жертва * * * *if(Hlp_GetInstanceID(self) == (Hlp_GetInstanceID(RAV))) * * * *{ * * * * * *// теперь у Равена есть враг * * * * * *self.aivar[AIV_EnemyOverride] = FALSE; * * * *}; * *}; * *// если жертва находится в состоянии атаки * *if(Npc_IsInState(self,ZS_Attack)) * *{ * * * *// если ГГ агрессор и жертва друг ГГ (Примечание: защита от нанесения повреждений ГГ своему другу, если они вместе с кем-то сражаются) * * * *if(Npc_IsPlayer(other)) && (self.npctype == NPCTYPE_FRIEND) * * * *{ * * * * * *return; * * * *}; * * * *// если ГГ агрессор и жертва член партии ГГ * * * *if(Npc_IsPlayer(other)) && (self.aivar[AIV_PARTYMEMBER] == TRUE) * * * *{ * * * * * *return; * * * *}; * * * *// если НПС агрессор не является НПС, атакованным жертвой * * * *if(Hlp_GetInstanceID(other) != self.aivar[AIV_LASTTARGET]) * * * *{ * * * * * *// если удар жертве нанесен агрессором не первый раз или агрессор не ГГ * * * * * *if(self.aivar[AIV_HitByOtherNpc] == Hlp_GetInstanceID(other)) ¦¦ (Hlp_GetInstanceID(other) != Hlp_GetInstanceID(hero)) * * * * * *{ * * * * * * * *// смена цели (жертва будет атаковать агрессора) * * * * * * * *Npc_SetTarget(self,other); * * * * * *} * * * * * *else * * * * * *{ * * * * * * * *// при первом ударе жертве записывается ID агрессора * * * * * * * *self.aivar[AIV_HitByOtherNpc] = Hlp_GetInstanceID(other); * * * * * *}; * * * *}; * * * *return; * *}; * *// реакция жертвы на врага * *if(B_AssessEnemy()) * *{ * * * *return; * *}; * *// если НПС агрессор не ГГ и причины нападать у него не было * *if(!Npc_IsPlayer(other)) && (other.aivar[AIV_ATTACKREASON] == AR_NONE) * *{ * * * *// жертва атакует НПС агрессора * * * *B_Attack(self,other,AR_NONE,0); * * * *return; * *}; * *// если агрессор нападает с мечом или с кулаками или вышел из режима нападения (спрятал оружие) * *if(Npc_IsInFightMode(other,FMODE_MELEE)) ¦¦ (Npc_IsInFightMode(other,FMODE_FIST)) ¦¦ (Npc_IsInFightMode(other,FMODE_NONE)) * *{ * * * *// если отношения между агрессором и жертвой дружеские или жертва является другом агрессора ГГ * * * *if(Npc_GetAttitude(self,other) == ATT_FRIENDLY) ¦¦ ((self.npctype == NPCTYPE_FRIEND) && Npc_IsPlayer(other)) * * * *{ * * * * * *// если жертва не находится в состоянии реакции на повреждение * * * * * *if(!Npc_IsInState(self,ZS_ReactToDamage)) * * * * * *{ * * * * * * * *// очистка очереди состояний жертвы * * * * * * * *Npc_ClearAIQueue(self); * * * * * * * *// очистка восприятий жертвы * * * * * * * *B_ClearPerceptions(self); * * * * * * * *// перевод жертвы в состояние реакции на повреждение * * * * * * * *AI_StartState(self,ZS_ReactToDamage,0,""); * * * * * * * *return; * * * * * *}; * * * *}; * *}; * *// жертва атакует агрессора * *B_Attack(self,other,AR_ReactToDamage,0); * *return; };
|