Показать сообщение отдельно
Старый 03.02.2005, 11:26   #92
Vam

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

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


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