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

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

По умолчанию Re: Уроки скриптологии

// *************************************
// Обработчик состояния заклинания Рой
// *************************************

// ----------------------------------------------------
// self - жертва заклинания
// other - кастующий НПС (агрессор)
// ----------------------------------------------------

// Функция реакции на локальное восприятие магии
func void B_RestartSwarm()
{
* *// если последнее примененное заклинание Рой
* *if(Npc_GetLastHitSpellID(self) == SPL_Swarm)
* *{
* * * *// сбросить время нахождения НПС в этом состоянии
* * * *Npc_SetStateTime(self,0);
* *};
};

// Закончить действие заклинания
func void B_StopSwarm()
{ *
* *// возвратить общую функцию состояния реакции на магию
* *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagi c);
* *// очистить очередь AI состояний НПС
* *Npc_ClearAIQueue(self);
* *// НПС встает
* *AI_StandUp(self);
* *// если жертва человек
* *if (self.guild < GIL_SEPERATOR_HUM)
* *{
* * * *// реакция НПС на повреждение
* * * *B_AssessDamage();
* *}
* *else
* *{
* * * *// установить временно враждебное отношение НПС к ГГ
* * * *Npc_SetTempAttitude(self,ATT_HOSTILE);
* *};
};

// Инициализация состояния
func void ZS_Swarm()
{
* *// установить локальное восприятие на магию
* *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_RestartSwa rm);
* *// остановить проигрывание файла анимации заклинания
* *Npc_StopAni(self,"S_SWARM_VICTIM");
* *// очистить очередь AI состояний НПС
* *Npc_ClearAIQueue(self);
* *// НПС встает
* *AI_StandUp(self);
* *// если состояние тела НПС не прерываемо
* *if(!C_BodyStateContains(self,BS_UNCONSCIOUS))
* *{
* * * *// анимация перехода в бессознательное состояние
* * * *AI_PlayAniBS(self,"T_STAND_2_SWARM_VICTIM",BS_UNC ONSCIOUS);
* *};
* *// сброс времени цикла
* *self.aivar[AIV_SwarmStateTime] = 0;
};

// Функция цикла состояния
func int ZS_Swarm_Loop ()
{ *
* *// если время в состоянии > времени действия заклинания
* *if(Npc_GetStateTime(self) > SPL_TIME_Swarm)
* *{
* * * *// остановить действие заклинания
* * * *B_StopSwarm();
* * * *return LOOP_END;
* *};
* *// если прошла 1 сек
* *if(Npc_GetStateTime(self) != self.aivar[AIV_SwarmStateTime])
* *{
* * * *// если жертва находится в состоянии 2 сек
* * * *if(Npc_GetStateTime(self) == 2)
* * * *{ *
* * * * * *// жертва говорит агрессору (SVM фраза) "Ах, черт!"
* * * * * *B_Say(self,other,"$RunAway");
* * * *}
* * * *// через 6 сек
* * * *else if(Npc_GetStateTime(self) == 6)
* * * *{
* * * * * *// жертва говорит агрессору (SVM фраза) "Ууух!"
* * * * * *B_Say(self,other,"$Aargh_2");
* * * *}
* * * *// через 7 сек
* * * *else if(Npc_GetStateTime(self) == 7)
* * * *{
* * * * * *// жертва говорит агрессору (SVM фраза) "Ууух!"
* * * * * *B_Say (self,other,"$Aargh_3");
* * * *}
* * * *// через 8 сек
* * * *else if(Npc_GetStateTime(self) == 8 )
* * * *{
* * * * * *// жертва говорит агрессору (SVM фраза) "Ууух!"
* * * * * *B_Say(self,other,"$Aargh_1");
* * * *};
* * * *// установить счетчик цикла на текущее время
* * * *self.aivar[AIV_SwarmStateTime] = Npc_GetStateTime(self);
* * * *// если жизнь жертвы > ущерба от заклинания
* * * *if(self.attribute[ATR_HITPOINTS] > SPL_Swarm_DAMAGE)
* * * *{
* * * * * *// нанести жертве урон
* * * * * *B_MagicHurtNpc(other,self,SPL_Swarm_DAMAGE);
* * * *}
* * * *else
* * * *{
* * * * * *// убить жертву
* * * * * *B_MagicHurtNpc(other,self,self.attribute[ATR_HITPOINTS] - 1);
* * * *};
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Swarm_End()
{
};

... ещё файл

// ******************************************
// Обработчик состояния заклинания Смерч
// ******************************************

// ----------------------------------------------------
// self - жертва заклинания
// other - кастующий НПС (агрессор)
// ----------------------------------------------------

// Функция реакции на локальное восприятие магии
func void B_RestartWhirlwind()
{
* *// если последнее примененное заклинание Смерч
* *if(Npc_GetLastHitSpellID(self) == SPL_Whirlwind)
* *{
* * * *// сбросить время нахождения НПС в этом состоянии
* * * *Npc_SetStateTime(self,0);
* *};
};

// Закончить действие заклинания
func void B_StopWhirlwind()
{ *
* *// возвратить общую функцию состояния реакции на магию
* *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagi c);
* *// очистить очередь AI состояний НПС
* *Npc_ClearAIQueue(self);
* *// НПС встает
* *AI_StandUp(self);
* *// если жертва человек
* *if(self.guild < GIL_SEPERATOR_HUM)
* *{
* * * *// реакция НПС на повреждение
* * * *B_AssessDamage();
* *}
* *else
* *{
* * * *// установить временно враждебное отношение НПС к ГГ
* * * *Npc_SetTempAttitude(self,ATT_HOSTILE);
* *};
};

// Инициализация состояния
func void ZS_Whirlwind()
{
* *// установить локальное восприятие на магию
* *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_RestartWhi rlwind);
* *// остановить проигрывание файла анимации заклинания
* *Npc_StopAni(self,"S_WHIRLWIND_VICTIM");
* *// очистить очередь AI состояний НПС
* *Npc_ClearAIQueue(self);
* *// НПС встает
* *AI_StandUp(self);
* *// если состояние тела НПС не прерываемо
* *if(!C_BodyStateContains(self, BS_UNCONSCIOUS))
* *{
* * * *// анимация перехода в бессознательное состояние
* * * *AI_PlayAniBS(self,"T_STAND_2_WHIRLWIND_VICTIM",BS _UNCONSCIOUS);
* *};
* *// сброс счетчика цикла
* *self.aivar[AIV_WhirlwindStateTime] = 0;
};

// Функция цикла состояния
func int ZS_Whirlwind_Loop ()
{ *
* *// если время в состоянии > времени действия заклинания
* *if(Npc_GetStateTime(self) > SPL_TIME_WHIRLWIND)
* *{
* * * *// остановить действие заклинания
* * * *B_StopWhirlwind();
* * * *return LOOP_END;
* *};
* *// если прошла 1 сек
* *if(Npc_GetStateTime(self) != self.aivar[AIV_WhirlwindStateTime])
* *{
* * * *// установить счетчик цикла на текущее время
* * * *self.aivar[AIV_WhirlwindStateTime] = Npc_GetStateTime(self);
* * * *// если жизнь жертвы > ущерба от заклинания
* * * *if(self.attribute[ATR_HITPOINTS] > SPL_Whirlwind_DAMAGE)
* * * *{
* * * * * *// нанести жертве урон
* * * * * *B_MagicHurtNpc(other,self,SPL_Whirlwind_DAMAGE);
* * * *}
* * * *else
* * * *{
* * * * * *// убить жертву
* * * * * *B_MagicHurtNpc(other,self,self.attribute[ATR_HITPOINTS] - 1);
* * * *};
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Whirlwind_End()
{
};

... ещё файл

// ************************************************** *********
// Обработчик состояния Удар молнии
// -----------------------------------------------------------
// В это состояние НПС переводится экзешником, а не скриптами
// ************************************************** *********

// ----------------------------------------------------
// self - жертва заклинания
// other - кастующий НПС (агрессор)
// ----------------------------------------------------

// Закончить действие заклинания
func void B_StopZapped()
{ *
* *// возвратить общую функцию состояния реакции на магию
* *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagi c);
* *// очистить очередь AI состояний НПС
* *Npc_ClearAIQueue(self);
* *// НПС встает
* *AI_StandUp(self);
* *// если жертва человек
* *if(self.guild < GIL_SEPERATOR_HUM)
* *{
* * * *// реакция НПС на повреждение
* * * *B_AssessDamage();
* * * *// продолжить распорядок дня НПС (т.к. не было принудительного перевода НПС в это состояние из скриптов и завершение этого состояния выполняется не из цикла состояния)
* * * *AI_ContinueRoutine(self);
* *}
* *else
* *{
* * * *// установить временно враждебное отношение НПС к ГГ
* * * *Npc_SetTempAttitude(self,ATT_HOSTILE);
* * * *// продолжить распорядок дня НПС
* * * *AI_ContinueRoutine(self);
* *};
};

// Инициализация состояния
func void ZS_Zapped()
{
* *// установить восприятие прекращения действия магии
* *Npc_PercEnable(self,PERC_ASSESSSTOPMAGIC,B_StopZa pped);
* *// если состояние тела НПС не прерываемо
* *if(!Npc_HasBodyFlag(self,BS_FLAG_INTERRUPTABLE))
* *{
* * * *// НПС встает
* * * *AI_StandUp(self);
* *}
* *else
* *{
* * * *// НПС быстро встает
* * * *AI_StandUpQuick(self);
* *};
* *// если жертва человек
* *if(self.guild < GIL_SEPERATOR_HUM)
* *{
* * * *// включить анимацию действия заклинания
* * * *AI_PlayAni(self,"T_STAND_2_LIGHTNING_VICTIM");
* *}; *
};

// Функция цикла состояния
func int ZS_Zapped_Loop()
{ *
* *// если прошла 1 секунда
* *if(Npc_GetStateTime(self) >= 1)
* *{
* * * *// сбросить время состояния
* * * *Npc_SetStateTime(self,0);
* * * *// нанести жертве секундный урон
* * * *B_MagicHurtNpc(other,self,SPL_ZAPPED_DAMAGE_PER_S EC);
* * * *// если жизнь жертвы кончилась
* * * *if(self.attribute[ATR_HITPOINTS] <= 0)
* * * *{
* * * * * *// очистить очередь AI состояний НПС
* * * * * *Npc_ClearAIQueue(self); * *
* * * * * *// НПС встает
* * * * * *AI_StandUp(self);
* * * * * *return LOOP_END;
* * * *};
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Zapped_End()
{
};

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