Показать сообщение отдельно
Старый 29.04.2005, 10:32   #156
Vam

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

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

// *************************
// Молитва статуям Инноса
// *************************

// Функция инициализации состояния
func void ZS_Pray_Innos()
{
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK); * * *
* *// если НПС расположен не на своем вайпоинте
* *if(Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == FALSE)
* *{
* * * *// движение на свой вайпоинт
* * * *AI_GotoWP(self, self.wp);
* *};
};

// Функция цикла состояния
func int ZS_Pray_Innos_Loop()
{
* *// если действие с МОВом не прерываемо и статуя имеется
* *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"INNOS"))
* *{
* * * *// молитва
* * * *AI_UseMob(self,"INNOS",1);
* *};
* *// если прошло > 5 сек и и действие прерываемо
* *if(Npc_GetStateTime(self) > 5) && (C_BodyStateContains(self,BS_MOBINTERACT_INTERRUPT ))
* *{
* * * *// сброс времени состояния
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Pray_Innos_End()
{
* *// прекратить молитву
* *AI_UseMob(self,"INNOS",-1);
};

... ещё файл

// **************************************
// Молитва Инносу на заданной точке PRAY
// **************************************

// Функция инициализации состояния
func void ZS_Pray_Innos_FP()
{
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK);
* *// если расстояние между НПС и его вайпоинтом > дистанции выполнения функций
* *if(Npc_GetDistToWP(self,self.wp) > TA_DIST_SELFWP_MAX)
* *{
* * * *// движение на свой вайпоинт
* * * *AI_GotoWP(self,self.wp);
* *}; * * *
};

// Функция цикла состояния
func int ZS_Pray_Innos_FP_Loop()
{
* *// если НПС на нужном фрипоинте
* *if(Npc_IsOnFP(self,"PRAY"))
* *{
* * * *// если НПС не сидит
* * * *if(!C_BodyStateContains(self,BS_SIT))
* * * *{
* * * * * *// выравнивание
* * * * * *AI_AlignToFP(self);
* * * * * *// анимация молитвы
* * * * * *AI_PlayAniBS(self,"T_STAND_2_PRAY",BS_SIT); * *
* * * *}
* * * *else
* * * *{
* * * * * *// анимация молитвы
* * * * * *AI_PlayAniBS(self,"T_PRAY_RANDOM",BS_SIT);
* * * *}; * * *
* *}
* *// если фрипоинт существует и свободен
* *else if(Wld_IsFPAvailable(self,"PRAY"))
* *{
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"PRAY");
* * * *// встать
* * * *AI_StandUp(self);
* * * *// выровняться
* * * *AI_AlignToFP(self);
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Pray_Innos_FP_End()
{
* *// закончить молитву
* *NPC_StopAni(self,"T_PRAY_RANDOM");
* *// анимация перехода в стоячее состояние
* *AI_PlayAni(self,"T_PRAY_2_STAND"); *
};

... ещё файл

// ************************
// Молитва статуям Белиара
// ************************
// Примечание: В скриптах не используется, может быть удалена c корректировкой файла ТА.d

// Функция инициализации состояния
func void ZS_Pray_Sleeper()
{
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK); * * *
* *// если НПС расположен не на своем вайпоинте
* *if(Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == FALSE)
* *{
* * * *// движение на свой вайпоинт
* * * *AI_GotoWP(self,self.wp);
* *};
};

// Функция цикла состояния
func int ZS_Pray_Sleeper_Loop()
{
* *// если действие с МОВом не прерываемо и статуя имеется
* *if(!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) && (Wld_IsMobAvailable(self,"IDOL"))
* *{
* * * *// молитва
* * * *AI_UseMob(self,"IDOL",1);
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Pray_Sleeper_End()
{
* *// прекратить молитву
* *AI_UseMob(self,"IDOL",-1);
};

... ещё файл

// ****************************************
// Молитва Белиару на заданной точке PRAY
// ****************************************
// Аналогична молитве Инносу на такой же точке
// Примечание: В скриптах не используется, может быть удалена c корректировкой файла ТА.d

func void ZS_Pray_Sleeper_FP()
{
* *Perception_Set_Normal();
* *B_ResetAll(self);
* *AI_SetWalkmode(self,NPC_WALK);
* *if(Npc_GetDistToWP(self,self.wp) > TA_DIST_SELFWP_MAX)
* *{
* * * *AI_GotoWP(self,self.wp);
* *}; * * *
};

func int ZS_Pray_Sleeper_FP_Loop()
{
* *if(Npc_IsOnFP(self,"PRAY"))
* *{ *
* * * *if(!C_BodyStateContains(self,BS_SIT))
* * * *{
* * * * * *AI_PlayAniBS(self,"T_STAND_2_PRAY",BS_SIT); * *
* * * *}
* * * *else
* * * *{
* * * * * *AI_PlayAniBS(self,"T_PRAY_RANDOM",BS_SIT);
* * * *}; * * *
* *}
* *else if(Wld_IsFPAvailable(self,"PRAY"))
* *{
* * * *AI_GotoFP(self,"PRAY");
* * * *AI_StandUp(self);
* * * *AI_AlignToFP(self);
* *};
* *return LOOP_CONTINUE;
};

func void ZS_Pray_Sleeper_FP_End()
{
* *AI_PlayAni(self,"T_PRAY_2_STAND"); *
};

... ещё файл

// *********************
// Проповедь Ватраса
// *********************

// Функция инициализации состояния
func void ZS_Preach_Vatras()
{ *
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// запретить реакцию на тихие звуки
* *Npc_PercDisable(self,PERC_ASSESSQUIETSOUND);
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK); * * *
* *// движение на свой вайпоинт
* *AI_GotoWP(self,self.wp);
* *// выравняться
* *AI_AlignToWP(self);
};

// Функция цикла состояния
func int ZS_Preach_Vatras_loop()
{
* *// если прошло >= 13 сек
* *if(Npc_GetStateTime(self) >= 13)
* *{
* * * *// если кол-во произнесенных фраз > 20
* * * *if(self.aivar[AIV_TAPOSITION] > 20)
* * * *{
* * * * * *// начать с начала
* * * * * *self.aivar[AIV_TAPOSITION] = 0;
* * * *};
* * * *// чтение текста проповеди
* * * *B_Preach_Vatras(self.aivar[AIV_TAPOSITION]);
* * * *// переход на следующую фразу
* * * *self.aivar[AIV_TAPOSITION] = self.aivar[AIV_TAPOSITION] + 1; * * * *
* * * *// сброс времени состояния
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// *********************
// Работа в поле
// *********************

// Функция инициализации состояния
func void ZS_Rake_FP()
{ *
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK);
* *// если расстояние между НПС и его вайпоинтом > дистанции выполнения функций
* *if(Npc_GetDistToWP(self,self.wp) > TA_DIST_SELFWP_MAX)
* *{
* * * *// движение на свой вайпоинт
* * * *AI_GotoWP(self,self.wp);
* *};
* *// если НПС не имеет мотыги
* *if(Npc_HasItems(self,ItMi_Rake) == 0)
* *{
* * * *// создать в инвентаре НПС мотыгу
* * * *CreateInvItem (self,ItMi_Rake);
* *};
* *// сброс флага цикла
* *self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
* *
// Функция цикла состояния
func int ZS_Rake_FP_Loop()
{
* *// если НПС на нужном фрипоинте
* *if(Npc_IsOnFP(self,"PICK"))
* *{ *
* * * *// выравнивание
* * * *AI_AlignToFP(self);
* * * *// если НПС шел на фрипоинт
* * * *if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
* * * *{
* * * * * *// сброс флага
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * *};
* *} *
* *// если фрипоинт существует и свободен
* *else if(Wld_IsFPAvailable(self,"PICK"))
* *{
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"PICK");
* * * *// встать
* * * *AI_StandUp(self);
* * * *// выравняться
* * * *AI_AlignToFP(self);
* * * *// установить флаг перемещения
* * * *self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK;
* *}
* *else // фрипоинт занят
* *{
* * * *// выравняться на вайпоинте
* * * *AI_AlignToWP(self);
* * * *// если НПС шел в точку
* * * *if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
* * * *{
* * * * * *// сброс флага
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * *};
* *};
* *// если флаг сброшен
* *if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
* *{
* * * *// работать мотыгой
* * * *AI_UseItemToState(self,ItMi_Rake,1); * *
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *}; *
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Rake_FP_End()
{
* *// прекратить использовать мотыгу
* *AI_UseItemToState(self,ItMi_Rake,-1);
};

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