|
Re: Уроки скриптологии
// *************************************** // Обработчик приготовления пищи в котле // ***************************************
// Функция инициализации состояния func void ZS_Cook_Cauldron() { * *// установить нормальный набор восприятий * *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); * *}; * *// если НПС не имеет ложки * *if(Npc_HasItems(self,ItMi_Scoop) == 0) * *{ * * * *// создать в инвентаре НПС ложку * * * *CreateInvItem(self,ItMi_Scoop); * * * * * * * *}; };
// Функция цикла состояния func int ZS_Cook_Cauldron_Loop() { * *// если действие с МОВом не прерываемо и котел имеется * *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"CAULDRON")) * *{ * * * *// мешать ложкой в котле * * * *AI_UseMob(self,"CAULDRON",1); * *}; * *return LOOP_CONTINUE; };
// Функция завершения состояния func void ZS_Cook_Cauldron_End() { * *// прекратить использовать котел * *AI_UseMob(self,"CAULDRON",-1); };
... ещё файл
// ******************************************* // Обработчик приготовления пищи на сковороде // *******************************************
// Функция инициализации состояния func void ZS_Cook_Pan() { * *// установить нормальный набор восприятий * *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); * *}; * *// если НПС не имеет Сырого мяса * *if(Npc_HasItems(self,ItFoMuttonRaw) == 0) * *{ * * * *// создать в инвентаре НПС Сырое мясо * * * *CreateInvItem(self,ItFoMuttonRaw); * * * * * * * * *}; };
// Функция цикла состояния func int ZS_Cook_Pan_Loop() { * *// если действие с МОВом не прерываемо и сковорода имеется * *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"PAN")) * *{ * * * *// жарить мясо * * * *AI_UseMob(self,"PAN",1); * *}; * *return LOOP_CONTINUE; };
// Функция завершения состояния func void ZS_Cook_Pan_End() { * *// прекратить использовать котел * *AI_UseMob(self,"PAN",-1); * *// съесть жареное мясо * *AI_UseItem(self,ItFoMutton); };
... ещё файл
// ************************************* // Обработчик приготовления пищи в печи // *************************************
// Функция инициализации состояния func void ZS_Cook_Stove() { * *// установить нормальный набор восприятий * *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); * *}; * *// если НПС не имеет Сырого мяса * *if(Npc_HasItems(self,ItFoMuttonRaw) == 0) * *{ * * * *// создать в инвентаре НПС Сырое мясо * * * *CreateInvItem(self,ItFoMuttonRaw); * * * * * * * * *}; };
// Функция цикла состояния func int ZS_Cook_Stove_Loop() { * *// если действие с МОВом не прерываемо и печь имеется * *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"STOVE")) * *{ * * * *// жарить мясо * * * *AI_UseMob(self,"STOVE",1); * *}; * *return LOOP_CONTINUE; };
// Функция завершения состояния func void ZS_Cook_Stove_End() { * *// прекратить использовать печь * *AI_UseMob(self,"STOVE",-1); * *// если НПС имеет больше 1 куска жареного мяса * *if(Npc_HasItems(self,ItFoMutton) >=1 ) * *{ * * * *// удалить из инветаря НПС 1 кусок жареного мяса * * * *Npc_RemoveInvItems(self,ItFoMutton,1); * *}; * };
... ещё файл
// *********************** // Обработчик танцев НПС // ***********************
// Функция инициализации состояния func void ZS_Dance() { * *// установить нормальный набор восприятий * *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); * * * *// выравнивание * * * *AI_AlignToWP(self); * *}; };
// Функция цикла состояния func int ZS_Dance_Loop() { * *var int danceStyle; * *danceStyle = Hlp_Random(9); * *// случайная анимация фаз танца * *if(danceStyle == 0) * *{ * * * *AI_PlayAni(self,"T_DANCE_01"); * *}; * *if(danceStyle == 1) * *{ * * * *AI_PlayAni(self,"T_DANCE_02"); * *}; * *if(danceStyle == 2) * *{ * * * *AI_PlayAni(self,"T_DANCE_03"); * *}; * *if(danceStyle == 3) * *{ * * * *AI_PlayAni(self,"T_DANCE_04"); * *}; * *if(danceStyle == 4) * *{ * * * *AI_PlayAni(self,"T_DANCE_05"); * *}; * *if(danceStyle == 5) * *{ * * * *AI_PlayAni(self,"T_DANCE_06"); * *}; * *if(danceStyle == 6) * *{ * * * *AI_PlayAni(self,"T_DANCE_07"); * *}; * *if(danceStyle == 7) * *{ * * * *AI_PlayAni(self,"T_DANCE_08"); * *}; * *if(danceStyle == 8 ) * *{ * * * *AI_PlayAni(self,"T_DANCE_09"); * *}; * *// движение на свой вайпоинт * *AI_GotoWP(self,self.wp); * *// выравнивание * *AI_AlignToWP(self); * *return LOOP_CONTINUE; };
// Функция завершения состояния func void ZS_Dance_End() { * *// танцор останавливается * *AI_StandUp(self); };
... ещё файл
// ************************************** // Обработчик убегания НПС на свою точку // **************************************
// Функция инициализации состояния func void ZS_FleeToWp() { * *// установить нормальный набор восприятий * *Perception_Set_Normal(); * *// перевод НПС в исходное состояние * *B_ResetAll(self); * *// если НПС Корнелиус * *if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Cornelius)) * *{ * * * *// закрыть восприятие входа в помещение * * * *Npc_PercDisable(self,PERC_ASSESSENTERROOM); * *}; * *// установить режим передвижения бегом * *AI_SetWalkmode(self,NPC_RUN); * *// включить модель убегающего человека * *Mdl_ApplyOverlayMds(self,"HUMANS_FLEE.MDS"); * *// если расстояние между НПС и его вайпоинтом > дистанции выполнения функций * *if(Npc_GetDistToWP (self,self.wp) > TA_DIST_SELFWP_MAX) * *{ * * * *// движение на свой вайпоинт * * * *AI_GotoWP(self,self.wp); * *}; * *// выравнивание * *AI_AlignToWP(self); * *// анимация состояния охраны * *AI_PlayAni(self,"T_STAND_2_HGUARD"); };
// Функция цикла состояния func int ZS_FleeToWp_Loop() { * * *// если время в состоянии > 5 сек * *if(Npc_GetStateTime(self) > 5) * *{ * * * *var int random; * * * *random = Hlp_Random(2); * * * *// с вероятностью 0.5 * * * *if(random == 0) * * * *{ * * * * * *// осмотреть окресности * * * * * * AI_PlayAni(self,"T_HGUARD_LOOKAROUND"); * * * *}; * * * *// сброс времени состояния * * * *Npc_SetStateTime(self,0); * *}; * *return LOOP_CONTINUE; }; * * // Функция завершения состояния func int ZS_FleeToWp_End() { * };
|