Показать сообщение отдельно
Старый 20.02.2005, 11:54   #107
Vam

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

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

// *******************************************
// Обработчик состояния наблюдения НПС за ГГ
// -------------------------------------------
// self - наблюдающий НПС, other - ГГ
// *******************************************

// Инициализация наблюдения
func void ZS_ObservePlayer()
{ *
* *// установить НПС нормальный набор восприятий
* *Perception_Set_Normal();
* *// если НПС не сидит
* *if(!C_BodystateContains(self,BS_SIT))
* *{
* * * *// НПС останавливается
* * * *AI_StandUp(self);
* * * *// НПС смотрит на ГГ
* * * *B_LookAtNpc(self,other);
* * * *// НПС поворачивается к ГГ
* * * *B_TurnToNpc(self,other);
* *}
* *else // иначе (если НПС сидит)
* *{
* * * *// НПС смотрит на ГГ
* * * *B_LookAtNpc(self,other);
* *};
* *// если в предудущем состоянии НПС спал
* *if(Npc_WasInState(self,ZS_Sleep))
* *{
* * * *// НПС спрашивает ГГ (SVM фраза "Что случилось?")
* * * *B_Say(self,other,"$YOUDISTURBEDMYSLUMBER");
* *};
* *// если НПС наблюдает за своим помещением и other есть ГГ
* *if(self.aivar[AIV_SeenLeftRoom] == TRUE) && (Npc_IsPlayer(other))
* *{
* * * *// сброс наблюдения за своим помещением
* * * *self.aivar[AIV_SeenLeftRoom] = FALSE;
* * * *// если комментария входа в чужое помещение не было
* * * *if(Player_LeftRoomComment == FALSE)
* * * *{
* * * * * *// НПС говорит ГГ (SVM фраза "Чего ты там ищешь?")
* * * * * *B_Say(self,other,"$WHATDIDYOUDOINTHERE");
* * * * * *// установка флага состоявшегося комментария
* * * * * *Player_LeftRoomComment = TRUE;
* * * *};
* *};
* *// установить время нахождения НПС в этом состоянии (1 или 2 сек)
* *self.aivar[AIV_StateTime] = (Hlp_Random(2) + 1);
};

// Цикл состояния наблюдения
func int ZS_ObservePlayer_Loop ()
{
* *// если ГГ крадется и комментария подкрадывания не было
* *if(C_BodyStateContains(other,BS_SNEAK)) && (Player_SneakerComment == FALSE)
* *{ *
* * * *// установка флага состоявшегося комментария
* * * *Player_SneakerComment = TRUE;
* * * *// НПС показывает на ГГ
* * * *AI_PointAtNpc(self,other);
* * * *// НПС говорит ГГ (SVM фраза "Эй, ты! Что ты там шастаешь?")
* * * *B_Say(self,other,"$WHATSTHISSUPPOSEDTOBE");
* * * *// НПС перестает указывать на ГГ
* * * *AI_StopPointAt(self);
* * * *// НПС посылает ГГ предупреждение
* * * *Npc_SendPassivePerc(self,PERC_ASSESSWARN,self,oth er);
* *};
* *// если время нахождения в состоянии > 1 или 2 сек
* *if(Npc_GetStateTime(self) > self.aivar[AIV_StateTime])
* *{
* * * *// если НПС не сидит
* * * *if(!C_BodystateContains(self,BS_SIT))
* * * *{
* * * * * *// НПС поворачивается к ГГ
* * * * * *B_TurnToNpc(self,other);
* * * *};
* * * *// установить время нахождения НПС в этом состоянии (1 или 2 сек)
* * * *self.aivar[AIV_StateTime] = (Hlp_Random(2) + 1);
* * * *// сброс времени состояния
* * * *Npc_SetStateTime(self,0);
* *};
* *// если расстояние между НПС и ГГ > дальности действия восприятия
* *if(Npc_GetDistToNpc(self,other) > PERC_DIST_INTERMEDIAT)
* *{
* * * *// очистка очереди состояний НПС
* * * *Npc_ClearAIQueue(self);
* * * *return LOOP_END;
* *}
* *else // [Прим. else здесь лишнее, можно просто: return LOOP_CONTINUE;]
* *{
* * * *return LOOP_CONTINUE;
* *};
};

// Выход из состояния наблюдения
func void ZS_ObservePlayer_End ()
{
* *// НПС перестает смотреть на ГГ
* *B_StopLookAt(self);
};

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