Показать сообщение отдельно
Старый 13.10.2007, 11:31   #1870
okin

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

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

Что-то я окончательно запуталась...

Цитата:
Сообщение от Ukur link=board=gothic&t=1105030050&start=3789600#37896 01 date=10/12/07, в 23:55:10
2okin:
2okin:
AI_StopProcessInfos(self) в этом случае НЕ поможет.
1. Почему? Чем ситуация

{Тру-ля-ля диалог
* AI_StopProcessInfos(self);
* AI_Teleport(none_3001_MadMage,"TOT");
};

которая работает, отличается от

{Тру-ля-ля диалог
Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
* Npc_SetTarget (none_3101_ghastly, hero);
* AI_Attack(none_3101_ghastly);
* AI_StopProcessInfos(self);
* AI_Teleport(none_3001_MadMage,"TOT");
};
??? Присутствием свидетелей?

2. Глупый вопрос: где и как zs превращается в TA-функцию? Уже давно ищу. Если просто создать zs-файлик в папке ТА, он не понимает... Где и что еще надо прописать? До сих пор рисовала zs для вызванных существ, у которых вместо daily_routine стоит start_aistate, а вот как сделать ТА?

3. Предложенный вариант попыталась проверить в таком виде: испортила одну из стандартных ТА-функций с условием
* * *var C_Npc madm;
* * *madm = Hlp_GetNpc(NONE_3001_madmage);
* * *if (Hlp_GetInstanceID(self) == (Hlp_GetInstanceID(madm)))
* * *
return LOOP_END и AI_Teleport(self,"TOT") в соответствующих блоках;
* * *
Ну и B_StartOtherRoutine(self,"Goodby") в диалоге. Но при этом непись остался где был... Я пробовала отбежать от него подальше, чтоб исчез, но похоже, что у него вообще не произошла смена распорядка. У него стоит start_aistate = ZS_Mag_Summoned и он продолжал бегать за ГГ, как в ней прописано... Раньше я меняла ему распорядок, но по-другому:
* * *AI_teleport(none_3001_MadMage,"TOT");
* * *Wld_InsertNpc(NONE_3001_madmage,"NW_XARDAS_START" );
* * *Npc_ExchangeRoutine(self,"Joke");

Кстати, при изменении порядка строк
* AI_StopProcessInfos(self);
* Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
* Npc_SetTarget (none_3101_ghastly, hero);
* AI_Attack(none_3101_ghastly);
* AI_Teleport(none_3001_MadMage,"TOT");
маг исчезает нормально, а в неподвижном состоянии застревают ghastly'ки. А еще был смешной вариант, когда камера перенеслась вместе с магом в ТОТ и застряла там...
Личность вызванных действительно ни при чем, это я уже проверила.

Но понятней пока не становится...

Чайник закипает... *:o ;D

Добавление от 10/13/07, в 10:44:57
2Ukur

Не-а... Вынесение команды телепорта непосредственно из диалога ничего не меняет. Поскольку получилось, что start_aistate мешает изменять распорядок, я сделала мага мирно курящим на постоянном месте. При этом новый ТА с телепортацией сработал, маг исчез и... см описание из моего первого поста. Висим. В той же позе.

Кстати, а почему start_aistate мешает изменять распорядок? и что с этим делать? *Npc_ClearAIQueue в разных местах не помогает. Уже писала - если вставить мага заново, то распорядок меняется...

Что вообще происходит?
можно убрать мага после диалога - нормально,
можно вызвать неписей и закончить диалог - нормально,
можно вызвать и телепортнуть - абзац. Кому-то плохо - или магу, или вызванным, или висим... :(

Не понимаю, где я создаю противоречие. Каким образом вызванные связаны с магом? Вроде те и другие взаимодействуют с ГГ, а не между собой... Объясните, пожалуйста, почему возникает проблема?

Добавление от 10/13/07, в 11:51:45
Убрала телепорт и посмотрела просто на окончание диалога.
AI_StopProcessInfos(self) срабатывает меньше, чем в четверти случаев (то есть разговор кончается сам), в остальных - остается строчка "выход".
Если выйти сразу - призраки нападают, если выбрать другой пункт диалога, после которого маг тоже телепортируется - застревают и ни на что не реагируют (маг при этом телепортируется нормально).
Это что, последовательность обработки событий? Когда они происходят одновременно, результат непредсказуем? Пока говоришь с магом, вызванные забывают, что собирались делать? Похоже, я делаю какую-то особо тупую ошибку... * :-[

Условие

* * *Npc_PerceiveAll(self);
* * *if ((Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)==FALSE)&&(Npc_KnowsInfo(o
ther,DIA_madmage_transform)))

как у Сатураса, тоже срабатывает нестабильно, через раз... *:(
Ответить с цитированием