Показать сообщение отдельно
Старый 04.05.2005, 13:34   #159
Vam

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

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

// ****************************************
// Использование наковальни (ковка оружия)
// ****************************************

// Функция инициализации состояния
func void ZS_Smith_Anvil()
{
* *// установить нормальный набор восприятий
* *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_Smith_Anvil_Loop()
{
* *// если действие с МОВом не прерываемо и наковальня имеется
* *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"BSANVIL"))
* *{
* * * *// ковка оружия
* * * *AI_UseMob(self,"BSANVIL",1);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// ****************************
// Закалка заготовки оружия
// ****************************

// Функция инициализации состояния
func void ZS_Smith_Cool()
{
* *// установить нормальный набор восприятий
* *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_Smith_Cool_Loop()
{
* *// если действие с МОВом не прерываемо и ванна с водой имеется
* *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"BSCOOL"))
* *{
* * * *// закалка заготовки
* * * *AI_UseMob(self,"BSCOOL",1);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// **********************************
// Разогрев заготовки оружия в горне
// **********************************

// Функция инициализации состояния
func void ZS_Smith_Fire()
{
* *// установить нормальный набор восприятий
* *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_Smith_Fire_Loop()
{
* *// если действие с МОВом не прерываемо и горн имеется
* *if(!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) && (Wld_IsMobAvailable(self,"BSFIRE"))
* *{
* * * *// разогрев заготовки
* * * *AI_UseMob(self,"BSFIRE",1);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// *****************
// Заточка оружия
// *****************

// Функция инициализации состояния
func void ZS_Smith_Sharp()
{
* *// установить нормальный набор восприятий
* *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_Smith_Sharp_Loop()
{
* *// если действие с МОВом не прерываемо и точило имеется
* *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"BSSHARP"))
* *{
* * * *// заточка
* * * *AI_UseMob(self,"BSSHARP",1);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// ********************
// Курение болотника
// ********************

// Функция инициализации состояния
func void ZS_Smoke_Joint()
{
* *// установить нормальный набор восприятий
* *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_Joint) == 0)
* *{
* * * *// создать в инвентаре НПС болотник
* * * *CreateInvItem(self,ItMi_Joint);
* *};
* *// сброс флага цикла
* *self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

// Функция цикла состояния
func int ZS_Smoke_Joint_loop()
{
* *// если НПС на нужном фрипоинте
* *if(Npc_IsOnFP(self,"STAND"))
* *{
* * * *// выравнивание
* * * *Ai_AlignToFP(self);
* * * *// если НПС шел на фрипоинт
* * * *if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
* * * *{
* * * * * *// сброс флага
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * *};
* *} *
* *// если фрипоинт существует и свободен
* *else if(Wld_IsFPAvailable(self,"STAND"))
* *{
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"STAND");
* * * *// встать
* * * *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_JOINT,0);
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *}; * * * * *
* *// если прошло > 5 сек и НПС находится в режиме курения
* *if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
* *{
* * * *// анимация курения (дым)
* * * *AI_PlayAniBS(self,"T_JOINT_RANDOM_1",BS_ITEMINTER ACT);
* * * *// сброс времени цикла
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// *******************
// Курение кальяна
// *******************

// Функция инициализации состояния
func void ZS_Smoke_Waterpipe()
{
* *// установить нормальный набор восприятий
* *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_Smoke_Waterpipe_Loop()
{
* *// если действие с МОВом не прерываемо и кальян имеется
* *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"SMOKE"))
* *{
* * * *// курим кальян
* * * *AI_UseMob(self,"SMOKE",1);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// ****************
// Игра с факелами
// ****************

// Функция инициализации состояния
func void ZS_Spit_Fire()
{
* *// установить нормальный набор восприятий
* *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,ItLsTorchFirespit) == 0)
* *{
* * * *// создать в инвентаре НПС горящий факел
* * * *CreateInvItem(self,ItLsTorchFirespit);
* *};
};

// Функция цикла состояния
func int ZS_Spit_Fire_Loop()
{
* *// если фрипоинт существует и свободен
* *if(Wld_IsFPAvailable(self,"STAND"))
* *{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"STAND");
* * * *// выравняться
* * * *AI_ALignToFP(self);
* *}
* *else // фрипоинт занят
* *{
* * * *// выравняться на вайпоинте
* * * *AI_AlignToWP(self);
* *};
* *// если прошло > 10 сек
* *if(Npc_GetStateTime(self) > 10)
* *{
* * * *// использовать факел (5 фаза)
* * * *AI_UseItemToState(self,ItLsTorchFirespit,5);
* * * *// использовать факел (0 фаза)
* * * *AI_UseItemToState(self,ItLsTorchFirespit,0);
* * * *// сброс времени цикла
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Spit_Fire_end()
{
* *// оставить факел
* *AI_UseItemToState(self,ItLsTorchFirespit,-1);
};

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