|
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 переменная проставляется ДО очистки и генерации. Т.е. если непися предварительно оглушить, то всё будет нормально - амбиентный инвентарь успешно сгенерируется, а вот если его сразу убить (из лука или магией), то никакой генерации не произойдёт, т.к. переменная проставится до вызова соответствующих функций. В принципе, решение здесь очень простое - просто перенести строки, в которых проставляется переменная и выдаётся опыт, куда-нибудь после вызова функций очистки инвентаря (или наоборот, вызовы этих функций перенести в начало). По-моему, это не должно вызвать никаких ошибок.
|