Показать сообщение отдельно
Старый 20.01.2005, 09:27   #106
Mitrich

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

По умолчанию 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 окончание использования, а не проверка состояния МОВ.
Ответить с цитированием