Показать сообщение отдельно
Старый 17.11.2005, 19:34   #1082
Sergius256

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

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

2TSYLin:
Был ли self.attribute[ATR_REGENERATEHP] == 0 ? Если да, то получается, что каждая версия Готики глючит по-своему. У меня "фаргусификация" аддона, версия 2.6. Там еще вся озвучка диалогов распакована...

Похоже, не зря решил бросить на время эту идею. Может, не зря даже Дагот не повесил на магические мантии соответствующие скрипты. Кстати, по поводу значений ATR_REGENERATE* он отвечал в этой ветке. На 3-й странице, ЕМНИП.

----
Начал ковыряться в заклинаниях. Конечная цель - выкинуть однотипные заклинания, привести их систему к "истокам" - первой Готике. С трудностями тут сталкивался dixie. Почитал его посты, решил начать с "самого невозможного" - с заклинаний трансформации. Добавил в самое начало Spell_Transform.d новую instance и новую функцию Spell_Logic_*; прописал вызов этой функции в Spell_Processmana, а вот в Constants.d добавил новые константы, сдвинув старые. Как ни странно, от изменения значений констант SPL_* ничего не пострадало - старые заклинания как работали, так и работают. Новое, добавленное в начало - тоже работает, а вот последнее заклинание трансформации (в остера) работать перестало. Все есть - анимация, инвестирование маны... Нет главного - трансформации. Выкинул заклинание InstantFireball, решил использовать его константу SPL_, instance и Spell_Logic для заклинания трансформации. Тот же результат, вернее его отсутствие.

Вывод: такое впечатление, что где-то установлено ограничение на количество заклинаний трансформации. Как будто движок создает некий массив из instance монстров, в которых происходит трансформация. И такое впечатление, что размер этого "монстрятника" жестко зашит в движке. В общем-то, Америки не открыл, просто получил подтверждение невозможности впихнуть новое заклинание трансформации. А здесь описал, чтобы другие не мучались.

----
Еще один интересный глюк. Когда из двух файрболлов делал один, обозвал получившееся заклинание Spell_Fireball. В Constants.d отредактировал запись для одного из файрболлов - стало SPL_Fireball, spellFXInstance оставил от ChargeFireball. Что интересно, перестало работать инвестирование маны (!), да и сам файрболл перестал наносить повреждения. Хотя все файлы, в которых встречались "слова" InstantFireball и ChargeFireball были отредактированы. После этого во всех отредактированных файлах "слово" Fireball заменил на ChargeFireball - все заработало. Оказалось важным не только совпадение имени константы SPL_* с именем instance заклинания, но и само имя константы...

То ли руки у меня особо кривые, то ли движок обладает "недокументированными" особенностями...

2Тать:
Кстати, попытался реализовать идею с посохами с изменяемым радиусом поражения. Вводить кучу instance, как это сделано с "Когтем Белиара", не стал - хотел рассчитывать радиус поражения. Пробовал ввести специальную функцию вида

func int staff_range(C_npc slf)
{
* * *var int range;
* * *range = slf.attribute[ATR_MANA] + 100;
* * *return range;
};

и вызывать ее внутри instance орудия ратного труда (range = staff_range(self); )... Синтаксически все правильно, но радиус поражения всегда получается равным 100.

Если информация о работающей реализации не является секретом, думаю, многим было бы интересно эту реализацию увидеть. (Или я что-то просмотрел, и реализация изменяемого радиуса поражения где-то обсуждалась?)
Ответить с цитированием