Показать сообщение отдельно
Старый 19.02.2005, 15:49   #106
Vam

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

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

// ************************************************** **
// Обработчик состояния когда НПС убегает от агрессора
// ----------------------------------------------------
// self - убегающий НПС, other - агрессор
// ************************************************** **

// Функция инициализации состояния
func void ZS_Flee()
{ *
* *// разрешить восприятие примененной магии
* *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagi c); * * * * * *
* *// получить other - агрессор
* *B_ValidateOther();
* *// если загрузки игры не было
* *if(self.aivar[AIV_LOADGAME] == FALSE)
* *{
* * * *// НПС кричит агрессору (SVM фраза "Я сматываюсь!")
* * * *B_Say_Overlay(self,other,"$RUNAWAY");
* *};
* *// НПС прячет оружие
* *AI_RemoveWeapon(self);
* *// НПС переходит на бег
* *AI_SetWalkmode(self,NPC_RUN);
* *// проигрывается анимация убегающего человека
* *Mdl_ApplyOverlayMds(self,"HUMANS_FLEE.MDS");
};

// Цикл состояния убегания
func int ZS_Flee_Loop()
{
* *// получить для НПС цель (инициализировать other агрессором)
* *Npc_GetTarget(self);
* *// если расстояние между НПС и агрессором > дистанции преследования
* *if(Npc_GetDistToNpc(self,other) > FIGHT_DIST_CANCEL)
* *{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *// очистка очереди AI состояний НПС
* * * *Npc_ClearAIQueue(self);
* * * *return LOOP_END; * * * * * * * * * * * * * * * * * *
* *};
* *// если агрессор обездвижен (мертв, безсознания и т.д.)
* *if(C_NpcIsDown(other))
* *{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *// очистка очереди AI состояний НПС
* * * *Npc_ClearAIQueue(self);
* * * *return LOOP_END;
* *};
* *// НПС продолжает убегать
* *AI_Flee(self);
* *return LOOP_CONTINUE;
};

// Функция завершения состояния убегания
func void ZS_Flee_End()
{
* *// прекратить проигрывание анимации убегающего человека
* *Mdl_RemoveOverlayMDS(self,"HUMANS_FLEE.MDS");
* *// НПС останавливается
* *AI_StandUp(self);
* *// вызов функции завершения состояния лечения НПС
* *AI_StartState(self,ZS_HealSelf,1,"");
* *return;
};


... еще описание одного состояния

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

// Инициализация состояния
func void ZS_HealSelf()
{
* *// разрешить НПС минимальный набор восприятий
* *Perception_Set_Minimal();
};

// Цикл состояния
func int ZS_HealSelf_Loop()
{
* *// если текущая жизнь НПС равняется максимальной
* *if(self.attribute[ATR_HITPOINTS] == self.attribute[ATR_HITPOINTS_MAX])
* *{
* * * *// очистка очереди AI состояний НПС
* * * *Npc_ClearAIQueue(self);
* * * *return LOOP_END;
* *};
* *// если НПС имеет "Лечебный эликсир"
* *if(Npc_HasItems(self,ItPo_Health_03) > 0) * * * * *
* *{
* * * *// НПС пьет "Лечебный эликсир"
* * * *AI_UseItem(self,ItPo_Health_03);
* * * *return LOOP_CONTINUE;
* *}
* *// если НПС имеет "Лечебный экстракт"
* *else if(Npc_HasItems(self,ItPo_Health_02) > 0)
* *{
* * * *// НПС пьет "Лечебный экстракт"
* * * *AI_UseItem(self,ItPo_Health_02);
* * * *return LOOP_CONTINUE;
* *}
* *// если НРС имеет "Лечебную эссенцию"
* *else if(Npc_HasItems(self,ItPo_Health_01) > 0)
* *{
* * * *// НПС пьет "Лечебную эссенцию"
* * * *AI_UseItem(self,ItPo_Health_01);
* * * *return LOOP_CONTINUE;
* *}
* *else //иначе
* *{
* * * *// очистка очереди AI состояний НПС
* * * *Npc_ClearAIQueue(self);
* * * *return LOOP_END;
* *};
};

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

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