Показать сообщение отдельно
Старый 10.11.2005, 02:45   #1051
Sergius256

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

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

Доброго всем времени суток!

Декомпилировал скрипты пиратки, поправил почти все "зеленые" предупреждения (осталось штук 15). Если это вообще актуально, лежит здесь, весит около 900 Кб.

Вообще же хотел спросить, удавалось ли кому заставить правильно работать восстановление жизни и маны? Вариант с летающим подзарядником показался мне странным, решил сосредоточиться на атрибутах. Выяснил ряд интересных моментов. Так, если attribute[ATR_REGENERATEHP] == 0, восстановление маны почему-то не работает. Так надо, или у меня одного такой глюк?

Собственно, никто не мешает установить обе переменные, отвечающие за регенерацию маны и жизни. Создал пару функций, прописал их вызов в instance облачения темных искусств (не суть важно, мне так было проще тестировать); внутри устроил присвоение некоторых значений соответствующим атрибутам. К слову, сначала присваивал некоторое значение атрибуту attribute[ATR_REGENERATEMANA], и только потом - attribute[ATR_REGENERATEHP]. Решил проверить, как будет реагировать движок на разные последовательности таких событий, как надевание робы (equip), получение персонажем повреждений (damage) и расходование маны (cast). Обнаружил две последовательности, когда жизнь не восстанавливалась: damage->cast->equip и equip->cast->damage.

Решил перед установкой переменных, отвечающих за регенерацию, вставить некий шаманский кусок кода, немного уменьшающий attribute[ATR_MANA]. Функция, вызываемая при надевании, стала выглядеть так:
func void Equip_ITAR_Xardas()
{
if(self.attribute[ATR_MANA_MAX] < 1) { self.attribute[ATR_MANA_MAX] = 1; };
if(self.attribute[ATR_MANA] > self.attribute[ATR_MANA_MAX]) { self.attribute[ATR_MANA] = self.attribute[ATR_MANA_MAX]; };
Npc_ChangeAttribute(self,ATR_MANA,-1);
if(self.attribute[ATR_MANA] < 0) { self.attribute[ATR_MANA] = 0; };

Npc_ChangeAttribute(self,ATR_REGENERATEMANA,2);
Npc_ChangeAttribute(self,ATR_REGENERATEHP,14);
};
Тесты с порядком получения повреждений, расходования маны и надевания робы все работают. Следующий тест - а что если прокачать ману, а потом одеть робу. И здесь меня ждало разочарование. Мана не восстанавливается. По крайней мере, до получения героем телесных повреждений. Очередной шаманский кусок кода, повреждающий здоровье персонажа, не приносит никакого эффекта. Кстати, если наоборот, сначала надеть робу, а потом качать ману, то все работает замечательно.

Вообще, может это у меня версия Готики такая? Или это все-таки глубинный глюк движка? Тогда как с ним бороться? Вообще, почему все начинает работать после получения персонажем повреждений?
Ответить с цитированием