Показать сообщение отдельно
Старый 26.03.2011, 00:06   #4346
Wandar

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

По умолчанию Re: Gothic 1, 2, 3: Технические вопросы

2Black Phantom:
Не доверяете, а жаль
Да нет, ну почему же сразу не доверяю? :) Просто там при убийстве 9-и краулеров Бладвин должен сразу телепортироваться в какую-то точку шахты, и уже оттуда, после разговора с Гаразом, гордо прошествовать в секцию с краулерами. Вот я хотел этот момент подробнее проследить.
За сейв спасибо, сейчас буду тестить. :)

Добавление от 03/25/11, в 20:26:03
Мда, что-то я долго тупил над этой проблемой. Но всё таки разобрался. Там всё дело в том, что счётчик убитых краулеров увеличивается только после проверки, что краулеров убито достаточно, чтобы телепортировать Бладвина в начало шахты с краулерами. И сама проверка происходит только тогда, когда убит очередной краулер. А в диалоге Гараза всё это не учитывается, и поэтому могут возникать забавные ситуации. Объясню на примере. Вот код, который выполняется каждый раз, когда оказывается убит очередной краулер:
Cпойлер(щелкните, чтобы прочесть):
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(GoldMinecrawler))
* * *{
* * * * * *if((Minecrawler_Killed >= 9) && (Bloodwyn_Spawn == FALSE))
* * * * * *{
* * * * * * * * *AI_Teleport(Bloodwyn,"ADW_MINE_TO_MC_03");
* * * * * * * * *B_StartOtherRoutine(Bloodwyn,"MINE");
* * * * * * * * *Bloodwyn_Spawn = TRUE;
* * * * * *}
* * * * * *else
* * * * * *{
* * * * * * * * *Minecrawler_Killed = Minecrawler_Killed + 1;
* * * * * *};
* * *};

Что произойдёт, когда мы убьём 9-го краулера? Первая часть кода (где Бладвина телепортируют в начало шахты) не выполнится, т.к. счётчик показывает ещё 8, и увеличится он только в конце. А для того, чтобы сказать Гаразу, что все краулеры перебиты, достаточно как раз 9-и. Т.е. Бладвина ещё не телепортировали в начало шахты, чтобы он смог пройти оттуда мимо ГГ в секцию с ползунами, а уже выполняется строка B_StartOtherRoutine(Bloodwyn,"GOLD") из диалога Гараза. Бладвин в этот момент находится ещё в храме, что довольно далековато. Движок в таких случаях обычно сразу перебрасывает непися на нужное место (поэтому Бладвин и телепортировался сразу в секцию с краулерами в первом сейве). И, хоть Бладвин и не показал свою гордую поступь ГГ, но вроде бы всё нормально - Бладвин на нужном месте, с ним инициируется правильный диалог и т.п. Но вы не забыли ещё про последнего краулера? :) Как думаете, что произойдёт, если его убить сейчас? У меня было так, что Бладвин оказался в зоне видимости этого последнего краулера, и, естественно, напал на него. Конечно, против Бладвина у него не было ни шанса, но ведь после его смерти там должен выполниться скрипт - тот самый, из спойлера выше. Как раз счётчик показывает 9, Бладвин жив, значит, телепортируем его к началу шахты. :) Получается, Бладвин сам себа телепортировал убийством этого последнего краулера. Выглядело довольно забавно.

Эх, опять понаписал кучу всего, а исправить-то эту ошибку очень просто - заменить в диалоге Гараза условие
Cпойлер(щелкните, чтобы прочесть):
if((Minecrawler_Killed >= 9) && !Npc_IsDead(Bloodwyn))
на
Cпойлер(щелкните, чтобы прочесть):
if((Minecrawler_Killed > 9) && !Npc_IsDead(Bloodwyn))
, и всё будет работать как надо.

В общем, Black Phantom, спасибо за ещё одну отличную находку. :)

Добавление от 03/25/11, в 23:26:32
P.S. Только что перечитал свой пост. Блин, это ужас, у меня слово "краулер" в одном предложении встречается 3 раза! Надо как-то учиться правильнее формулировать мыслю. Аплодирую тем, кто смог всё это прочитать, и, главное, понять что я имел ввиду. :D
Ответить с цитированием