Показать сообщение отдельно
Старый 10.03.2011, 03:25   #4180
Wandar

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

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

2Black Phantom:
Спасибо за выкладывание патчей. Я так понимаю, что мне пока не стоит ставить последний апдейт от Dimus'а, если я сейчас нахожусь уже в середине игры (начало четвёртой главы), дабы ничего случайно не сломать?

Кстати насчёт моих последних вопросов - они, по сути, снимаются. Моя догадка насчёт флагов подтвердилась - некоторые предметы (в том числе луговой горец и царский щавель) действительно имеют флаги ITEM_MISSION, что, очевидно, защищает их от "чистки". Насчёт второго вопроса: aivar - это, я так понял, переменные, привязанные к конкретному неписю. Конкретно aivar[AIV_VictoryXPGiven] ставится в true когда мы побили/убили этого непися и получили за это опыт. Условие в моём предыдущем посте нужно, очевидно, чтобы амбиентный инвентарь генерился только один раз (т.е. чтобы нельзя было, побивая одного и того же непися, получать бесконечные вещи). Но здесь, похоже, кроется ещё одна ошибка, а именно: в скрипте AI\Human\ZS_Human\ZS_Unconscious.d переменная aivar[AIV_VictoryXPGiven] ставится в true после того, как вызываются функции B_GiveTradeInv(self) и B_ClearRuneInv(self) (т.е. происходит очистка инвентаря и генерируется амбиентный инвентарь), и всё проходит нормально. Но вот в скрипте AI\Human\ZS_Human\ZS_Dead.d переменная проставляется ДО очистки и генерации. Т.е. если непися предварительно оглушить, то всё будет нормально - амбиентный инвентарь успешно сгенерируется, а вот если его сразу убить (из лука или магией), то никакой генерации не произойдёт, т.к. переменная проставится до вызова соответствующих функций. В принципе, решение здесь очень простое - просто перенести строки, в которых проставляется переменная и выдаётся опыт, куда-нибудь после вызова функций очистки инвентаря (или наоборот, вызовы этих функций перенести в начало). По-моему, это не должно вызвать никаких ошибок.
Ответить с цитированием