Показать сообщение отдельно
Старый 09.07.2005, 18:54   #541
Vendiga

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

По умолчанию Re: Скриптинг в Готике

Вношу некоторые поправки к переменным:

func void use_scavhorn()\\Описание функции использования
{
     if((Npc_GetDistToWP(self,"SEE_VOR_STADT_12") <= 1000) && (DC_1_TOWER != 3) && !SCAVHORNUSED)\\Здесь яно видно, что функуция выполняется, если не определена переменная SCAVHORNUSED (!SCAVHORNUSED)
     {
           Wld_SetGuildAttitude(GIL_WOLF,ATT_ANGRY,GIL_SCAVE NGER);\\Волки вдруг стали врагами падальщиков
           Wld_InsertNpc(v_scav1,"SEE_VOR_STADT_06");\\Появл яются сами падальщики
           Wld_InsertNpc(v_scav2,"SEE_VOR_STADT_06");
           Wld_InsertNpc(v_scav3,"SEE_VOR_STADT_06");
           Wld_InsertNpc(v_scav4,"SEE_VOR_STADT_06");
           SCAVHORNUSED = TRUE;\\А вот тут она и определяется как TRUE. Т.е. выполнение функции вторично уже неозможно.
           Wld_SendTrigger("TS_CAMERA_HOCHSTAND");\\Подключа ется камера
     }

func void hochstandwoelfe()
{
     if(HOCHSTANDAKTIVIERT == 0)\\Тут условие выполняется если HOCHSTANDAKTIVIERT равно 0.
     {
           HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1;\\HOCHSTANDAKTIVIERT + 1 уже не рано 0. поэтому вторично функция не выполняется.
           if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))\\ если дистанция до варпоинта меньше 800

func void vor_hochstand()
{
     if(STARTDIALOGGESPROCHEN == 0)\\Всё тоже самое.
     {            
     STARTDIALOGGESPROCHEN = 1;\\STARTDIALOGGESPROCHEN уже не рана 0 поэтому вторично функция не вызывается.
};

Но я всё-равно не пойму - ЗАЧЕМ??? Все переменные выполняют одну функцию - не дать вторично запустить функцию. Но в первром случае всё достаточно просто и грамматно, а востальных... по-карсацки... наверно скрипты писали два разных человека со своим пониманием и своими тараканими. Другого объяснения у меня нет...

Добавление от 07/09/05, в 16:24:56
2Vam:
Данная функция повешена на триггер TS_VOR_HOSHSTAND, при каком условии он срабатывает надо смотреть zen файл. Таких триггеров в файле даже четыре.
Где ты их нашол???  :dead:
Вот эти параметры camTrjFOR и targetTrjFOR камеры зацикливают её движение (имхо), параметров у камеры очень много, нужно разбираться.
Ща проверю...

Добавление от 07/09/05, в 18:53:42
Так, блин, теперь одно всаёт на своиё место, но появляются новые вопросы!!!

Короче вот как этоо выглядет в игре:
Когда Ардарик забирается на башню, попадает в поле действия триггера TS_HOCHSTAND, срабатывает его скриптфункция HOCHSTANDWOELFE

func void hochstandwoelfe()
{
     if(HOCHSTANDAKTIVIERT == 0)\\??? Вроде условие если камера включена...
     {
           HOCHSTANDAKTIVIERT = HOCHSTANDAKTIVIERT + 1;\\Вопросы, кругом вопросы ::)
           if(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))\\ если дистанция до варпоинта меньше 800
           {
                 Npc_ExchangeRoutine(sld_b,"RALF");\\Убежали неписи, которые ГГ подставили
                 Npc_ExchangeRoutine(sld_a,"RAL");
                 AI_ContinueRoutine(sld_b);
                 AI_ContinueRoutine(sld_a);
           };
           AI_OutputSVM_Overlay(hero,hero,"TurmGefangen_15_0 0");");//Это реплика Ардарика, когда приходят волки. «Откуда взялись эти волки...» говорит он
           AI_StandupQuick(hero);\\Перевод ГГ в стоячее состояние
           Wld_SendTrigger("TS_CAMERA_HOCHSTAND");\\
           bh_wolfspawn();\\Функция такая. Приведена в отдельном одноимённом файле
     };
};

Который врубает другой триггер TS_CAMERA_HOCHSTAND, а тот в свою очередь выполняет свою скриптфункцию START_CAMERA_HOCHSTAND и врубает камеру в первый раз(да-да, именно в первый, так как она включается два раза - сначала при появлении волков, потом при появлении падальщиков. Но в первый раз камеру включает триггер, а во второй скрипт рога)

Потом чтобы избавиться от волков ГГ использует рог, который снова активирует триггер TS_CAMERA_HOCHSTAND, который активирует во второй раз функцию  START_CAMERA_HOCHSTAND.

Но я никак не могу отследить каким образом триггер реагирует на появление ГГ в своём фокусе! Единственное что приходит в голову свойство триггера reapondToPC(дословно переводится как отзыв на Player Characters - игровой характер). Думаю это и есть реакция на ГГ. Но вот проблема - этот параметр выставлен на TRUE у всех триггеров! То есть они все должны реагировать на ГГ, даже если несут другую функцию. На мой взгляд объясняется это тем, что эти триггеры точечные и не должны функционировать при приближении к ним главного героя. Чёрт, я сам запутался!
Короче триггер TS_HOCHSTAND отличается от остальных тем, что не реагирует ни на объекты, ни на НПС. Только на ГГ.

Вношу ещё несколько поправок:

Я ошибся. Мне стыдно. Камера начала Диккурика не зациклина. Она Просто не выключается, когда пройдёт цикл, а смотрит на ГГ в точке своей последней остановки. ГГ поварачивается к камере и продолжает свой монолог.
И ещё я ошибся на счёт того, что она включается сразу сначала игры. Нет, сначала мы видим ГГ. Нужно сделать один шаг в любую сторону, чтобы камера активировалась. Но я всё-таки не нашол ни одного триггера, привязанного к ней! Vam триггера TS_vor_hochstand  не существует! Более того нет ни одного триггера со скриптфункцией vor_hochstand.
Так как же разрабы Диккурика включили камеру?
Так как же отследить в триггере появление ГГ?



Добавление от 07/09/05, в 19:14:55
А может быть камера реагирует на ГГ не триггером, а скриптом? Вот этой функциейif(Npc_GetDistToWP(sld_b,"AM_HOCHSTAND_00") < 800))
Ответить с цитированием