|
Re: Скриптинг в Готике
По-моему я неудачно зашел с другого конца. Предлагаю рассмотреть ТА ZS_Saw с моими комментариями в качестве примера. Передо мной стоит задача добавлять НПС при пилении каждые 15 секунд некий контрольный предмет. Но некоторые вещи мне непонятны. Кто сможет что-то разьяснить или поправить, буду очень благодарен. Зеленым понятные вещи, красным неясности.
// **************************** // NSC benutzt Sдge Mobsi // ****************************
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); // npc n0 перемещается в указанную WP s0.
* * *}; };
FUNC int ZS_Saw_Loop () * *//Начало функции использования МОВ{ * * *
// ------ Saegen ------ * * *if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //поверка на использование МОВ другим "телом"??? * * * && (Wld_IsMobAvailable(self,"BAUMSAEGE")) //подозреваю, что это условие непосредственной близости НПС с МОВ с именем "BAUMSAEGE" * * *{ * * * * * *AI_UseMob (self, "BAUMSAEGE", 1); ** * *//см сноску* * * *};
* * *// ------ Random-Ani beim Hдmmern ------ * * *if (Npc_GetStateTime(self) > 15) //если НПС находится в таком состоянии более 15 секунд * * *&& (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //и ??? непонятное условие * *{ * * * * * *CreatInvItems (self, ItPo_Mana_01, 1); // ----Суть задачи всего примера: Добавление контрольного предмета каждые 15 сек---
* * *Npc_SetStateTime (self, 0); ** * * //обнулить время нахождения НПС в данном состоянии. Если убрать это действие НПС }; * * * * * * * * * * * * * * *//будет дергаться возле бревна, но пилить так и не начнет.
* * *return LOOP_CONTINUE; //возврат к началу функции };
FUNC VOID ZS_Saw_End () //функция завершения действия для НПС self над МОВ "BAUMSAEGE" { * * *AI_UseMob (self, "BAUMSAEGE", -1); //прекратить использовать МОВ (установка флага функции AI_UseMob в -1
};
//* *int AI_UseMob(c_npc self,string schemeName,int targetState); - npc self использует MOB с именем schemeName до указанного состояния targetState. Если указанное состояние у MOBа уже имеется, npc self приближается к нему, но ничего не делает. На мой взгляд, здесь требуется уточнение - 1 это флаг начала использования МОВ, а -1 окончание использования, а не проверка состояния МОВ.
|