Показать сообщение отдельно
Старый 24.04.2005, 14:08   #151
Vam

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

По умолчанию 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()
{ *
};

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