|
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); };
|