Показать сообщение отдельно
Старый 25.03.2011, 15:51   #4336
Wandar

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

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

2Black Phantom:
Отлично! Огромное спасибо за потраченное время. Если повторить баг не удалось, значит можно сделать вывод, что он проявляется случайно (об этом говорят также сообщения других камрадов, которые получали аналогичный баг, но при других обстоятельствах). Так что лучше всего, действительно, сделать проверки во всех местах, где изменяется переменная self.aivar[AIV_ATTACKREASON]. Чуть позже выложу скрипты, благо, эта переменная изменяется всего в двух скриптах - B_Attack.d и ZS_Attack.d.

Меня смущает проверка:
if(C_NpcIsHero(other))
Нет, здесь всё нормально, т.к. проверка проходит, если противник - ГГ, а сами изменения применяются к тому, для кого был вызван скрипт.

P.S. Я сравнил файл ZS_Attack.d из патча и соответствующий файл из оригинальной немецкой версии 2.6:
Есть такое отличие:
Функция C_NpcIsHero возвращает true, если конкретный непись, которого ей указали, является ГГ. Npc_IsPlayer же, насколько я понял, является функцией движка, т.к. нигде в скриптах я её описания не нашёл. Можно с определённой долей уверенности предположить, что она возвращает true, когда непись, на которого ей указали, управляется игроком. Т.е. при честной игре без баловства с Марвином эти функции, по сути, являются аналогами, т.к. у нас нет возможности поуправлять кем-нибудь помимо ГГ. Хотя... есть же ещё свитки превращения во всяких зверей. Вот там не знаю, как они себя поведут. Скорее всего Npc_IsPlayer будет всё ещё возвращать true, а вот C_NpcIsHero уже нет.

2Dimus:
Спасибо за новые сборки фикспака и исправления озвучки. Рад, что моя помощь пригодилась. :)

Добавление от 03/25/11, в 15:01:50
Как и обещал, вот скрипты: aivarFix.rar

Добавление от 03/25/11, в 15:11:29
Кстати, вот ещё что. Думаю, это все и так знают, но на всякий случай. Если у кого-то этот баг появился (с нападением дружественных NPC с целью убийства на любого, кто начал драться с ГГ), и он хочет от него избавиться, то вот инструкция: последовательно набираем
Cпойлер(щелкните, чтобы прочесть):
bmarvinb
F2
edit abilities
aivar
9 = 0

Далее набираем b42b и на всякий случай тут же сохраняем и загружаем игру. Всё.

P.S. Кстати, там с этим багом можно неплохо позабавиться - например, устроить epic battle "Ли против всех", или завязать бесконечную драку Ли с Онаром, или ещё что-нибудь в этом роде придумать. :)
Ответить с цитированием