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

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

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

// ****************
// Чтение книг
// ****************

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

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

... ещё файл

// ****************
// Ремонт хижины
// ****************

// Функция инициализации состояния
func void ZS_Repair_Hut()
{
* *// установить нормальный набор восприятий
* *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_Repair_Hut_Loop()
{
* *// если действие с МОВом не прерываемо и хижина имеется
* *if(!C_BodyStateContains(self,BS_MOBINTERACT_INTER RUPT)) && (Wld_IsMobAvailable(self,"REPAIR"))
* *{
* * * *// ремонт
* * * *AI_UseMob(self,"REPAIR",1);
* *};
* *// если прошло > 5 сек и и действие прерываемо
* *if(Npc_GetStateTime(self) > 5) && (C_BodyStateContains(self,BS_MOBINTERACT_INTERRUPT ))
* *{
* * * *var int zufall;
* * * *zufall = Hlp_Random(100);
* * * *// с вероятностью 0.5
* * * *if(zufall < 50)
* * * *{
* * * * * *// изменение анимации
* * * * * *AI_PlayAniBS(self,"T_REPAIR_RANDOM_1",BS_MOBINTER ACT_INTERRUPT);
* * * *};
* * * *// сброс времени состояния
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// ************************
// Барбекю из Падальщика
// ************************

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

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

... ещё файл

// ************************************
// НПС бежит на охраняемую точку
// ************************************

// Функция инициализации состояния
func void ZS_RunToWP()
{
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения бегом
* *AI_SetWalkmode(self,NPC_RUN);
* *// если расстояние между НПС и его вайпоинтом > дистанции выполнения функций
* *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_RunToWP_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_RunToWP_End()
{ *
};

... ещё файл

// ****************************
// Распиловка древесины
// ****************************

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

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

... ещё файл

// ***********************
// Мини диалог между НПС
// ***********************
// other - ближайший НПС

const int SmallTalkFreq = 4; * *// периодичность разговора в сек

// Функция инициализации состояния
func void ZS_Smalltalk()
{
* *// установить нормальный набор восприятий
* *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_Smalltalk_Loop()
{
* *// если НПС на фрипоинте
* *if(Npc_IsOnFP(self,"SMALLTALK"))
* *{ *
* * * *// если время состояния >= периодичности разговора * 2
* * * *if(Npc_GetStateTime(self) >= (SmallTalkFreq * 2))
* * * *{
* * * * * *// НПС разрешено воспринимать все объекты в зоне действия восприятия
* * * * * *Npc_PerceiveAll(self);
* * * * * *// если собеседник найден (другой НПС, находящийся в состоянии мини диалога (инициализация other))
* * * * * *if(Wld_DetectNpc(self,-1,ZS_Smalltalk,-1))
* * * * * *{
* * * * * * * *// если расстояние между НПС < дистанции начала диалога
* * * * * * * *if(Npc_GetDistToNpc(self,other) < PERC_DIST_DIALOG)
* * * * * * * *{
* * * * * * * * * *// установить собеседнику время диалога
* * * * * * * * * *Npc_SetStateTime(other,SmallTalkFreq);
* * * * * * * * * *// НПС поворачивается к собеседнику
* * * * * * * * * *B_TurnToNpc(self,other);
* * * * * * * * * *// сам диалог
* * * * * * * * * *B_Say_Smalltalk();
* * * * * * * *};
* * * * * *};
* * * * * *// сброс времени состояния
* * * * * *Npc_SetStateTime(self,0);
* * * *};
* *}
* *// если фрипоинт существует и свободен
* *else if(Wld_IsFPAvailable(self,"SMALLTALK"))
* *{
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"SMALLTALK");
* * * *// встать
* * * *AI_StandUp(self);
* * * *// выравняться
* * * *AI_AlignToFP(self);
* *};
* *return LOOP_CONTINUE;
};

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

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