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

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

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

// *******************
// Охрана территории
// *******************

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

// Функция цикла состояния
func int ZS_Stand_Guarding_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_PlayAni(self,"T_STAND_2_HGUARD");
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *}; * * * * *
* *// если прошло > к сек и НПС охраняет территорию
* *if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
* *{
* * * *var int random;
* * * *random = Hlp_Random(10);
* * * *// с вероятностью 0.1
* * * *if(random == 0)
* * * *{
* * * * * *// осмотреть окрестности
* * * * * * AI_PlayAni(self,"T_HGUARD_LOOKAROUND");
* * * *};
* * * *// сброс времени цикла
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Stand_Guarding_end()
{
* *// анимация перехода из состояния охраны в стоячее
* *AI_PlayAni(self,"T_HGUARD_2_STAND");
}; *

... ещё файл

// *********************
// Встреча с ренджером
// *********************
// Примечание: В скриптах не используется, может быть удалена c корректировкой файла ТА.d

func void ZS_Stand_RangerMeeting()
{
* *Perception_Set_Minimal();
* *B_ResetAll(self);
* *self.senses = SENSE_SEE ¦ SENSE_HEAR ¦ SENSE_SMELL;
* *self.senses_range = 500;
* *Npc_SetPercTime(self,1);
* *Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessGui dePlayer);
* *Npc_PercEnable(self,PERC_ASSESSENEMY,B_AssessEnem y);
* *if((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Lares)))
* *¦¦ ((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Erol)))
* *¦¦ ((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Greg_NW)))
* *{
* * * *Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessTalk) ;
* *};
* *Npc_PercEnable(self,PERC_MOVEMOB,B_MoveMob);
* *Npc_PercEnable(self,PERC_ASSESSFIGHTSOUND,B_Asses sGuideFightSound);
* *if((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Lares)))
* *¦¦ ((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Greg_NW)))
* *{
* * * *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");
* *}
* *else
* *{
* * * *AI_SetWalkmode(self,NPC_WALK); * * *
* * * *if(Npc_GetDistToWP(self,self.wp) > TA_DIST_SELFWP_MAX)
* * * *{
* * * * * *AI_GotoWP(self,self.wp);
* * * *};
* * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* *};
};

func int ZS_Stand_RangerMeeting_loop()
{
* *var int random;
* *if((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Lares)))
* *{
* * * *if(Npc_GetStateTime(self) > 5)
* * * *{
* * * * * *random = Hlp_Random(2);
* * * * * *if(random == 0)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_HGUARD_LOOKAROUND");
* * * * * *};
* * * * * *Npc_SetStateTime(self,0);
* * * *};
* *}
* *else
* *{
* * * *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_StandUp(self);
* * * * * *AI_PlayAni(self,"T_STAND_2_LGUARD");
* * * * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* * * *};
* * * *if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
* * * *{
* * * * * *random = Hlp_Random(7);
* * * * * *if(random == 0)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_LGUARD_SCRATCH");
* * * * * *}
* * * * * *else if(random == 1)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_LGUARD_STRETCH");
* * * * * *}
* * * * * *else if(random == 2)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_LGUARD_CHANGELEG");
* * * * * *};
* * * * * *Npc_SetStateTime(self,0);
* * * *};
* *};
* *return LOOP_CONTINUE;
};

func void ZS_Stand_RangerMeeting_end()
{
* *if((Hlp_GetInstanceID(self)) == (Hlp_GetInstanceID(Lares)))
* *{
* *}
* *else
* *{
* * * *AI_PlayAni(self,"T_LGUARD_2_STAND"); * *
* *};
};

... ещё файл

// *******************
// Уборка территории
// *******************

// Функция инициализации состояния
func void ZS_Stand_Sweeping()
{ *
* *// установить нормальный набор восприятий
* *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_Broom) == 0)
* *{
* * * *// создать в инвентаре Метлу
* * * *CreateInvItem(self,ItMi_Broom);
* *}; *
* *// сброс флага цикла
* *self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
* *
// Функция цикла состояния
func int ZS_Stand_Sweeping_Loop()
{
* *// если НПС на нужном фрипоинте
* *if(Npc_IsOnFP(self,"SWEEP"))
* *{ *
* * * *// выравнивание
* * * *AI_AlignToFP(self);
* * * *// если НПС шел на фрипоинт
* * * *if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
* * * *{
* * * * * *// сброс флага
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * *}; *
* *} *
* *// если фрипоинт существует и свободен
* *else if(Wld_IsFPAvailable(self,"SWEEP"))
* *{
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"SWEEP");
* * * *// встать
* * * *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_Broom,1);
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *};
* *return LOOP_CONTINUE;
};

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

... ещё файл

// *********************
// Стоять на вайпоинте
// *********************

// Функция инициализации состояния
func void ZS_Stand_WP()
{ *
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK); * * *
* *// движение на свой вайпоинт
* *AI_GotoWP(self,self.wp);
* *// выравнивание
* *AI_AlignToWP(self);
* *// сброс флага цикла
* *self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

// Функция цикла состояния
func int ZS_Stand_WP_loop()
{
* *// если флаг сброшен
* *if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
* *{
* * * *// стоять на вайпоинте
* * * *AI_PlayAni(self,"T_STAND_2_LGUARD");
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *}; * * * * *
* *// если прошло > 5 сек и НПС стоит на вайпоинте
* *if((Npc_GetStateTime(self) > 5) && (self.aivar[AIV_TAPOSITION] == ISINPOS))
* *{
* * * *var int random;
* * * *random = Hlp_Random(10);
* * * *// случайная анимация движений
* * * *if(random == 0)
* * * *{
* * * * * *AI_PlayAni(self,"T_LGUARD_SCRATCH");
* * * *}
* * * *else if(random == 1)
* * * *{
* * * * * *AI_PlayAni(self,"T_LGUARD_STRETCH");
* * * *}
* * * *else if(random == 2)
* * * *{
* * * * * *AI_PlayAni(self,"T_LGUARD_CHANGELEG");
* * * *};
* * * *// сброс времени цикла
* * * *Npc_SetStateTime(self,0);
* *};
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Stand_WP_end()
{
* *// выйти из режима
* *AI_PlayAni(self,"T_LGUARD_2_STAND");
}; *

... ещё файл

// ***************
// Толочь траву
// ***************

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

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

... ещё файл

// ************************************************** *******
// Заниматься науками (передача листа бумаги (записки) ГГ)
// ************************************************** *******

// Функция инициализации состояния
func void ZS_Study_WP()
{ *
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK); * * *
* *// движение на свой вайпоинт
* *AI_GotoWP(self,self.wp);
* *// выравнивание
* *AI_AlignToWP(self);
* *// сброс флага цикла
* *self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

// Функция цикла состояния
func int ZS_Study_WP_loop()
{
* *var int randy;
* *var int eventrandy;
* *var int randystatetime;
* *// произвольное время цикла (Примечание: следующие две строки необходимо поменять местами, randy используется без присвоения)
* *randystatetime = randy + 25;
* *// вероятность анимации
* *randy = Hlp_Random(10);
* *// вероятность события "Дрожь земли"
* *eventrandy = Hlp_Random(100);
* *var int wait;
* *var float waittime;
* *// вероятность ожидания
* *wait = randy + 5;
* *// задержка в мс
* *waittime = IntToFloat(wait);
* *// если расстояние между НПС и его вайпоинтом > дистанции выполнения функций
* *if(Npc_GetDistToWP(self,self.wp) > TA_DIST_SELFWP_MAX)
* *{
* * * *// движение на свой вайпоинт
* * * *AI_GotoWP(self,self.wp);
* *};
* *// выравнивание
* *AI_AlignToWP(self);
* *// если прошло какое-то время
* *if(Npc_GetStateTime(self) >= randystatetime)
* *{
* * * *// если НПС сидит
* * * *if(C_BodystateContains(self,BS_SIT))
* * * *{
* * * * * *// встать
* * * * * *AI_StandUp(self);
* * * * * *// повернуться к ГГ
* * * * * *B_TurnToNpc(self,hero);
* * * *};
* * * *// спрятать оружие
* * * *AI_RemoveWeapon(self);
* * * *// анимация движений
* * * *if(randy <= 3)
* * * *{
* * * * * *if(randy == 0)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_LGUARD_SCRATCH");
* * * * * *}
* * * * * *else if(randy == 1)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_LGUARD_STRETCH");
* * * * * *}
* * * * * *else if(randy == 2)
* * * * * *{
* * * * * * * *AI_PlayAni(self,"T_LGUARD_CHANGELEG");
* * * * * *};
* * * *}
* * * *else
* * * *{
* * * * * *// стоим
* * * * * *AI_PlayAni(self,"T_LGUARD_2_STAND");
* * * * * *// сброс флага
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * * * *// если НПС не имеет Листа бумаги
* * * * * *if(Npc_HasItems(self,Fakescroll_Addon) == FALSE)
* * * * * *{
* * * * * * * *// создать в инвентаре Лист бумаги
* * * * * * * *CreateInvItem * (self, *Fakescroll_Addon);
* * * * * *};
* * * * * *// перестать смотреть на ГГ
* * * * * *B_StopLookAt(self);
* * * * * *// читать бумагу
* * * * * *AI_UseItemToState(self,Fakescroll_Addon,1);
* * * * * *// задержка
* * * * * *AI_Wait(self,waittime);
* * * * * *// перестать читать
* * * * * *AI_UseItemToState(self,Fakescroll_Addon,-1);
* * * * * *// сброс времени цикла
* * * * * *Npc_SetStateTime(self,0);
* * * * * *// если (событию быть и Хоринис) или (событию быть и Яркендар) и НПС маг огня и Равен жив
* * * * * *if(((eventrandy < 5) && (CurrentLevel == NEWWORLD_ZEN))
* * * * * *¦¦ ((eventrandy == 1) && (CurrentLevel == ADDONWORLD_ZEN)))
* * * * * *&& (self.guild == GIL_KDW) && (RavenIsDead == FALSE)
* * * * * *{
* * * * * * * *// проиграть эффект "Дрожь земли"
* * * * * * * *B_EVENT_PORTAL_EARTHQUAKE();
* * * * * *};
* * * *};
* *}
* *// если флаг сброшен
* *if (self.aivar[AIV_TAPOSITION] == NOTINPOS)
* *{
* * * *// стоять в режиме охраны
* * * *AI_PlayAni(self,"T_STAND_2_LGUARD");
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *}; *
* *return LOOP_CONTINUE;
};

// Функция завершения состояния
func void ZS_Study_WP_end()
{
* *// НПС передает лист бумаги ГГ (other) (Примечание: правильнее other заменить на hero)
* *Npc_RemoveInvItems(self,Fakescroll_Addon,Npc_HasI tems(other,Fakescroll_Add
on));
}; *

... ещё файл

// ****************
// Работа щеткой
// ****************

// Функция инициализации состояния
func void ZS_Sweep_FP()
{ *
* *// установить нормальный набор восприятий
* *Perception_Set_Normal();
* *// перевод НПС в исходное состояние
* *B_ResetAll(self);
* *// установить режим передвижения шагом
* *AI_SetWalkmode(self,NPC_WALK);
* *// если НПС расположен не на своем вайпоинте
* *if(Hlp_StrCmp(Npc_GetNearestWP(self),self.wp) == 0)
* *{
* * * *// движение на свой вайпоинт
* * * *AI_GotoWP(self, self.wp);
* *};
* *// если НПС не имеет Щетки
* *if(Npc_HasItems(self,ItMi_Brush) == 0)
* *{
* * * *// создать в инвентаре НПС Щетку
* * * *CreateInvItem(self,ItMi_Brush);
* *}; *
};
* *
// Функция цикла состояния
func int ZS_Sweep_FP_Loop()
{
* *// если фрипоинт существует и свободен
* *if(Npc_IsOnFP(self,"SWEEP"))
* *{ *
* * * *// выравняться
* * * *AI_AlignToFP(self);
* * * *// если НПС шел на фрипоинт
* * * *if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
* * * *{
* * * * * *// сброс флага
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * *};
* *} *
* *// если фрипоинт существует и свободен
* *else if(Wld_IsFPAvailable(self,"SWEEP"))
* *{
* * * *// идти на фрипоинт
* * * *AI_GotoFP(self,"SWEEP");
* * * *// встать
* * * *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_Brush,1); *
* * * *// установить флаг выполнения нужной функции
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *}; *
* *return LOOP_CONTINUE;
};

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

... ещё файл

// ************
// Умываться
// ************
// Примечание: В скриптах не используется, может быть удалена c корректировкой файла ТА.d

func void ZS_Wash_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);
* *};
* *self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

func int ZS_Wash_FP_Loop()
{
* *if(Npc_IsOnFP(self,"WASH"))
* *{
* * * *AI_AlignToFP(self);
* * * *if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
* * * *{
* * * * * *self.aivar[AIV_TAPOSITION] = NOTINPOS;
* * * *};
* *}
* *else if(Wld_IsFPAvailable(self,"WASH"))
* *{
* * * *AI_GotoFP(self,"WASH");
* * * *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) && (Npc_IsOnFP(self,"WASH")))
* *{
* * * *AI_AlignToFP(self);
* * * *AI_StandUp(self);
* * * *AI_PlayAni(self,"T_STAND_2_WASH");
* * * *self.aivar[AIV_TAPOSITION] = ISINPOS;
* *};
* *return LOOP_CONTINUE;
}; *

func void ZS_Wash_FP_End()
{
* *AI_PlayAni(self,"T_WASH_2_STAND");
};

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