|
|
17.11.2005, 10:47
|
#1081
|
|
Re: Скриптинг в Готике
2marazmus:
что будет "легче" для движка Г2А - набор из 200 int переменных, или массив в 200 int членов?
|
По быстродействию оба варианта практически одинаковы, по объёму занимаемой памяти предпочтительно использовать вариант с массивом, но надо помнить, что макс. размер массива равен 255.
|
|
|
17.11.2005, 19:34
|
#1082
|
|
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.
Если информация о работающей реализации не является секретом, думаю, многим было бы интересно эту реализацию увидеть. (Или я что-то просмотрел, и реализация изменяемого радиуса поражения где-то обсуждалась?)
|
|
|
17.11.2005, 23:58
|
#1084
|
|
Re: Скриптинг в Готике
Вот что самое обидное, создать заклинания вселения, как в Г1 (контроль) не возможно, при том для этого даже не рассчитаны скрипты, ну вот в Г1 вы в кого-нибудь вселялись, но никто с вами не говорил, почему? да потому что это защита от диалога НПС с вселившейся НПС.
И вот у меня аопрос, вот как сделать дилоги в Готике что бы в них участвовали сразу 6 ил 7 ну неважно, главное больше 2 НПС, я знаю, но вот она загвоздка. во первых они будут отображаться если включен режим показа диалогов из SVM.d и во-0вторых они будут показываться снизу что очень не удобно, как можно сделать так что бы они отображались с верху?
Или же это опять движок?
|
|
|
18.11.2005, 08:37
|
#1085
|
 |
|
 |
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
 |
|
 |
|
Re: Скриптинг в Готике
Попробуй по аналогии, к примеру, с Диккуриком, там есть такая фишка в скриптах. Получается, что в диалоге участвует три непися - ГГ и два рабочих. [pre]
"Подслушать" разговор двух неписей * * *var C_Npc worker; * * *worker = Hlp_GetNpc(dic_2016_arbeiter); * * *Wld_SendTrigger("CAMERA_RAMPE"); * * *AI_TurnToNPC(self,worker); * * *AI_TurnToNPC(worker,self); * * *AI_WaitTillEnd(worker,self); * * *AI_WaitTillEnd(self,worker); * * *AI_Output(worker,NULL,"DIA_DIC_Arbeiter_Vater_04_ 00"); * * *//Теперь нам больше не нужно самим таскать бревна. Платформа снова работает. * * *AI_WaitTillEnd(self,worker); * * *AI_Output(self,hero,"DIA_DIC_Arbeiter_Vater_09_01 "); * * *//Ты что, не слышал, что сказал Грейверн? Утром мы должны будем перетаскать все, что будет доставлено на платформе! * * *AI_WaitTillEnd(worker,self); * * *AI_Output(worker,NULL,"DIA_DIC_Arbeiter_Vater_04_ 02"); * * *//Ах, молчи уж! * * *AI_WaitTillEnd(self,worker); * * *AI_Output(self,hero,"DIA_DIC_Arbeiter_Vater_09_03 "); * * *//Скажи, этого мальчика больше не видно поблизости?
[/pre]
Но сам еще не успел проверить, возможно, у тебя получится. Напиши, пожалуйста, если что-нибудь будет известно.
Добавление от 11/18/05, в 07:57:12 Спрошу еще заодно:
[pre] some_NPC = Hlp_GetNpc(GUILD_ID_NPCName); if((Hlp_GetInstanceID(other) == Hlp_GetInstanceID(some_NPC)) [/pre]
Есть ли разница - сравнивать так, как сделали разработчики, или сравнить с помошью ID - [pre] if (other.ID == 123) [pre] где 123 = ID непися, на которого нужна проверка?
может, есть какие-то тонкости?
p.s. В случае с PC_LevelInspector понятно, там ID и у него, и у ГГ == 0. А как быть с остальными, у которых ID прописан явно? p.p.s. В настоящее время часто использую "прямые" проверки на конкретное значение ID (вторым способом), пока работает, но есть ли грабли?
|
|
|
18.11.2005, 10:03
|
#1086
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2Sergius256:
Кстати, попытался реализовать идею с посохами с изменяемым радиусом поражения. Вводить кучу 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.
|
Как я понял, в функцию staff_range должна приходить перенная типа c_npc. А внутри [q]instance орудия ратного труда[/q] self будет само орудие, а не НПС, у которого оно в данный момент.
|
|
|
18.11.2005, 12:08
|
#1087
|
 |
|
 |
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
 |
|
 |
|
Re: Скриптинг в Готике
Подскажите пожалуйста, кто знает или сталкивался со следующей проблемой: Имеется массив int, к примеру ARR_Var1[10] В функции нужно изменить значение или сослаться на значение одного из его членов, к примеру [pre] func Give_ArrValue(var int vNeedIndex) { *var int vNeeded; *vNeeded = ARR_Var1[vNeedIndex];
*return vNeeded; }; [/pre]
Компилятор ругается на это "Expected an-Integer value: vNeedIndex" То есть, как я понимаю, ему для индекса массива обязательно нужна константа (сужу по тому, что в скриптах оригинала есть только присвоения через константы)? Переменные, значит, не катят? Если это так, то очень грустно...
|
|
|
18.11.2005, 12:58
|
#1088
|
|
Re: Скриптинг в Готике
2marazmus:
То есть, как я понимаю, ему для индекса массива обязательно нужна константа (сужу по тому, что в скриптах оригинала есть только присвоения через константы)? Переменные, значит, не катят? Если это так, то очень грустно...
|
Да, это так, и ничего с этим не поделаешь, доступ к элементу массива возможен только через константу.
|
|
|
18.11.2005, 19:43
|
#1090
|
|
Re: Скриптинг в Готике
2TycoooN:
А внутри instance орудия ратного труда self будет само орудие
|
Похоже на то. Причем другая глобальная переменная - other - оказывается неинициализированной. Зато self будет "указывать" на NPC, экипирующегося оружием при вызове функции, прописанной в on_equip. Проблема в том, что не могу прописать там функцию с параметрами - можно было бы передать переменную (структуру, вообще говоря?) типа C_Item, "указывающую" на именно тот экземпляр оружия, которым экипируется NPC. Ладно, есть Npc_GetEquippedMeleeWeapon, но в момент вызова функции on_equip оружие еще не экипировано! Соответственно, ничего не работает. Плюс при таком подходе радиус поражения вычисляется один раз - при "надевании" оружия. А хотелось бы, чтобы радиус менялся динамически. Вот если бы была некая глобальная функция, постоянно проверяющая атрибуты NPC... Только для каждого NPC, экипированного таким оружием должен работать свой "экземпляр" этой функции. Можно написать обработчик состояния наподобие того же ZS_Pyro, вопрос только в том, в скольки состояниях может одновременно находиться NPC. Есть подозрение, что только в одном (int Npc_GetStateTime (c_npc self); возвращает время нахождения в последнем состоянии).
|
|
|
20.11.2005, 00:17
|
#1100
|
|
Re: Скриптинг в Готике
Здравствуйте, уважаемые коллеги-скриптеры. У меня возник один вопрос. Вот есть функция-обработчик восприятия повреждения для людей - B_AssessDamage. Теперь посмотрите: ГГ бежит, видит бандита, тот с матами нападает на ГГ, начинается битва. ГГ ударил бандита и независимо от того, парирован удар вызывается функция B_AssessDamage, где бандит будет жертвой (self) а ГГ агрессором (other). Теперь роли сменились: бандит наносит удар ГГ. В этом случае жертва ГГ (self), а агрессор бандит (other). Я прав, ничего не упустил?
Проблема моя заключается в том, что когда ГГ выступает в роли агрессора все идет по задуманному мной сценарию, а вот когда в роли агрессора выступает бандит, моя функция не работает.
Вот функция:
var c_item weap; var c_item armor; var int hasweapon; var int hasfar; var int hasarmor;
func void B_ItemDurability(var C_Npc slf, var C_Npc oth) { hasweapon = false; hasfar = false; hasarmor = false; if (Npc_IsInFightMode(oth, FMODE_MELEE)) { weap = Npc_GetReadiedWeapon(oth); hasweapon = true; } else if (Npc_IsInFightMode(oth, FMODE_FAR)) { hasfar = true; }; if (Npc_HasEquippedArmor(slf) == True) { armor = Npc_GetEquippedArmor(slf); hasarmor = true; }; if ((hasweapon == true) && (hasarmor == true)) { if (weap.material == MAT_WOOD) && (armor.material == MAT_LEATHER) { if (weap.hp_max != IMMUNE) { weap.hp -= hlp_random(3); }; armor.hp -= hlp_random(4); } else if (weap.material == MAT_METAL) && (armor.material == MAT_LEATHER) { if (weap.hp_max != IMMUNE) { weap.hp -= hlp_random(2); }; armor.hp -= hlp_random(6); } else if (weap.material == MAT_WOOD) && (armor.material == MAT_METAL) { if (weap.hp_max != IMMUNE) { weap.hp -= hlp_random(5); }; armor.hp -= hlp_random(3); } else if (weap.material == MAT_METAL) && (armor.material == MAT_METAL) { if (weap.damagetype == DAM_BLUNT) { if (weap.hp_max != IMMUNE) { weap.hp -= hlp_random(3); }; armor.hp -= hlp_random(3); } else { if (weap.hp_max != IMMUNE) { weap.hp -= hlp_random(4); }; armor.hp -= hlp_random(5); }; } else { weap.hp -= hlp_random(2); armor.hp -= hlp_random(2); }; } else if ((hasweapon == true) && (hasarmor == false)) { if (weap.hp_max != IMMUNE) { if (slf.guild == GIL_ORC) { weap.hp -= hlp_random(5); } else if (slf.guild == GIL_MINECRAWLER) { weap.hp -= hlp_random(7); } else if ((slf.guild == GIL_STONEGOLEM) || (slf.guild == GIL_FIREGOLEM) || (slf.guild == GIL_ICEGOLEM)) { if (weap.damagetype != DAM_BLUNT) { weap.hp -= hlp_random(16); } else { weap.hp -= hlp_random(4); }; } else { weap.hp -= hlp_random(3); }; }; } else if ((hasfar == true) && (hasarmor == true)) { armor.hp -= hlp_random(3); }; if ((hasweapon = true) && (weap.hp <= 0) && (weap.hp_max != IMMUNE)) { AI_UnequipWeapons(oth); NPC_RemoveInvItem(oth, weap); print("Мое оружие разбилось!!!"); } else if ((hasweapon = true) && (weap.hp > 0) && (weap.hp_max != IMMUNE)) { weap.DamageTotal = (weap.hp * weap.DamageTotal) / weap.hp_max; weap.Value = (weap.hp * weap.Value) / weap.hp_max; if (((weap.hp * 100) / weap.hp_max) >= 90) { weap.text[0] = ConcatStrings("Оружие в отличном состоянии!", B_BuildItemsString(weap.hp, weap.hp_max)); } else if (((weap.hp * 100) / weap.hp_max) >= 70) { weap.text[0] = ConcatStrings("Оружие в хорошем состоянии!", B_BuildItemsString(weap.hp, weap.hp_max)); } else if (((weap.hp * 100) / weap.hp_max) >= 40) { weap.text[0] = ConcatStrings("Оружие в плохом состоянии!", B_BuildItemsString(weap.hp, weap.hp_max)); } else if (((weap.hp * 100) / weap.hp_max) >= 20) { weap.text[0] = ConcatStrings("Оружие в ужасном состоянии!", B_BuildItemsString(weap.hp, weap.hp_max)); } else if (((weap.hp * 100) / weap.hp_max) >= 1) { weap.text[0] = ConcatStrings("Этим оружием не стоит сражаться!", B_BuildItemsString(weap.hp, weap.hp_max)); }; }; if ((hasarmor = true) && (armor.hp <= 0)) { AI_UnequipArmor(slf); NPC_RemoveInvItem(slf, armor); print("Враг разбил мой доспех!!!"); } else if ((hasarmor = true) && (armor.hp > 0)) { armor.protection[PROT_EDGE] = (armor.hp * armor.protection[PROT_EDGE]) / armor.hp_max; armor.protection[PROT_BLUNT] = (armor.hp * armor.protection[PROT_BLUNT]) / armor.hp_max; armor.protection[PROT_POINT] = (armor.hp * armor.protection[PROT_POINT]) / armor.hp_max; armor.protection[PROT_FIRE] = (armor.hp * armor.protection[PROT_FIRE]) / armor.hp_max; armor.protection[PROT_MAGIC] = (armor.hp * armor.protection[PROT_MAGIC]) / armor.hp_max; armor.Value = (armor.hp * armor.Value) / armor.hp_max; if (((armor.hp * 100) / armor.hp_max) >= 90) { armor.text[0] = ConcatStrings("Доспех в отличном состоянии!", B_BuildItemsString(armor.hp, armor.hp_max)); } else if (((armor.hp * 100) / armor.hp_max) >= 70) { armor.text[0] = ConcatStrings("Доспех в хорошем состоянии!", B_BuildItemsString(armor.hp, armor.hp_max)); } else if (((armor.hp * 100) / armor.hp_max) >= 40) { armor.text[0] = ConcatStrings("Доспех в плохом состоянии!", B_BuildItemsString(armor.hp, armor.hp_max)); } else if (((armor.hp * 100) / armor.hp_max) >= 20) { armor.text[0] = ConcatStrings("Доспех в ужасном состоянии!", B_BuildItemsString(armor.hp, armor.hp_max)); } else if (((armor.hp * 100) / armor.hp_max) >= 1) { armor.text[0] = ConcatStrings("В этом доспехе не стоит сражаться!", B_BuildItemsString(armor.hp, armor.hp_max)); }; }; }; //Copyright Finsternis.
Может я неправильно сформулировал вопрос, но не примите мой пост за флудЪ. Я не знаю в чем ошибка, но когда по ГГ бьют, у его доспехов не отнимается ничего.
Заранее спасибо за ответЪ.
Добавление от 11/19/05, в 23:37:21 Ой, забыл. Вот еще одна функция:
func string B_BuildItemsString (var int BIShp, var int BIShp_max) { var string concatText; concatText = ConcatStrings (" Прочность: ", IntToString (BIShp)); concatText = ConcatStrings (concatText, " из "); concatText = ConcatStrings (concatText, IntToString (BIShp_max)); return concatText; };
|
|
|
20.11.2005, 03:56
|
#1101
|
|
Re: Скриптинг в Готике
2Finsternis:
Может я неправильно сформулировал вопрос, но не примите мой пост за флудЪ. Я не знаю в чем ошибка, но когда по ГГ бьют, у его доспехов не отнимается ничего.
|
Я в скриптинге полный профан, но, вроде, нельзя отследить момент, когда в ГГ попали. В теме мода NLG2 я предлагал сделать артефакт, забирающий часть маны из магичских атак по ГГ (тиша огня орков-шаманов и ищущих) и пополняющий за счёт этого ману ГГ. Но мне сказали, что это невозможно по причине, указанной выше. Можно отследить только попадание ГГ по противнику. Даже в скрипте Лапы Белиара, когда он находится в руках Равена, молнии бьют ГГ исходя из его попадании по Равену, а не наоборот.
|
|
|
20.11.2005, 12:46
|
#1102
|
 |
|
 |
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
 |
|
 |
|
Re: Скриптинг в Готике
Функции восприятий, присваиваемые через Npc_PercEnable, НЕ РАБОТАЮТ для ГГ, только для неписей. Исхожу из своего опыта/экспериментов. Для неписей все работает без проблем, для ГГ - не обрабатывается движком. Повторюсь, любая функция, присвоенная в конструкции типа этого: [pre] Npc_PercEnable(self,PERC_ASSESSMAGIC, B_AssessMagic); [/pre] работает только для неписей, в случае, когда self - это ГГ, assess-функция работать не будет. Я уже поднимал этот вопрос, и судя по тому, что никто еще не дал осмысленного ответа на него, это нерешаемая проблема для скриптинга Г2А.
|
|
|
20.11.2005, 18:52
|
#1103
|
|
Re: Скриптинг в Готике
2marazmus:
Функции восприятий, присваиваемые через Npc_PercEnable, НЕ РАБОТАЮТ для ГГ, только для неписей.
|
А как же тогда регистрируется повреждение ГГ, когда по нему бьют?
|
|
|
20.11.2005, 20:59
|
#1104
|
 |
|
 |
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
 |
|
 |
|
Re: Скриптинг в Готике
Что конкретно ты имеешь в виду, когда говоришь "регистрируется"? Расчет повреждения по неписям, включая ГГ, насколько я знаю, считается напрямую движком, разработчики не вывели это дело в скриптовую часть. А через функции типа assess можно только начислить _дополнительное_ повреждение, кроме того, что уже насчитал движок. Причем для любого непися, кроме ГГ. Т.е. отловить момент попадания по ГГ или нанесения ему повреждения и "отдать" этот момент в скрипт - невозможно, на данный момент наших познаний в скриптах.
|
|
|
21.11.2005, 14:49
|
#1106
|
 |
|
 |
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
 |
|
 |
|
Re: Скриптинг в Готике
Копая скрипты формирования меню, заметил такую вешь - в константах разрабы не зря ограничили константу NPC_TALENT_MAX значением 22. Ее можно изменить в большую сторону, дополнив, сответственно, еще массивы TXT_TALENTS_SKILLS и TXT_TALENTS. При формировании меню также можно ссылаться на "новые" скиллы с "номером" больше чем 22, но в меню они не отображаются (вернее, выводится просто "пустое место". Для скиллов меньше 22 все нормально. Можно ли это как-то обойти, или цифра 22 жестко прошита в движке?
p.s. Эти прошитости движка/констант местами уже задолбали, честно говоря. Разрабам, конечно, можно ставить памятник при жизни, но, сделав GMDK, могли бы отдать скриптерам всю скриптовую начинку, а не только верхний слой.
Добавление от 11/21/05, в 14:09:49 Еше вопрос: никто не знает, случайно, предмет, после использования которого инвентарь автоматом закрывается? Пока знаю, что это делают всяческие свитки/книги, при их прочтении инвентарь закрывается, а книга/свиток открывается. И можно ли вообще закрыть инвентарь скриптово?
p.s. Сам я в этом сильно сомневаюсь, но спрашиваю, на всякий случай...
|
|
|
21.11.2005, 15:27
|
#1107
|
|
Re: Скриптинг в Готике
2marazmus:
Еше вопрос: никто не знает, случайно, предмет, после использования которого инвентарь автоматом закрывается? Пока знаю, что это делают всяческие свитки/книги, при их прочтении инвентарь закрывается, а книга/свиток открывается. И можно ли вообще закрыть инвентарь скриптово?
|
Этот вопрос раньше поднимался, ответа на него никто пока ещё не дал, в скриптах ни функций ни переменных для этого нет.
Можно ли это как-то обойти, или цифра 22 жестко прошита в движке?
|
Это жестко зашито в движке - Готика1 - 12 скиллов, Готика2 - 22 и ни одним больше. :(
|
|
|
21.11.2005, 23:55
|
#1109
|
 |
|
 |
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
 |
|
 |
|
Re: Скриптинг в Готике
2TSYLin:
Ещё меня мучает одна вещь, в файле отношений гильдий людей есть 16 столбиков и 16 строчек, то есть 256 значений (прям как в байте) возможно ли расширить таблицу на одну строчку и один столбик, это не глупый вопрос как прописывать в константах на ссылку в этот скрипт и всё прочее я знаю, но вот максимальное кол-во гильдий людей, не ужели это зашито в движке?
|
255 - максимальная размерность массива в Готике. К сожалению.
|
|
|
22.11.2005, 10:34
|
#1110
|
|
Re: Скриптинг в Готике
2TSYLin:
в файле отношений гильдий людей есть 16 столбиков и 16 строчек, то есть 256 значений (прям как в байте) возможно ли расширить таблицу на одну строчку и один столбик
|
Нельзя, об этом уже говорилось, кол-во гильдий людей ограничено числом 16. Обычным образом этот предел не обойти.
|
|
|
24.11.2005, 10:42
|
#1112
|
|
Re: Скриптинг в Готике
2Sergius256:
Кстати, попытался реализовать идею с посохами с изменяемым радиусом поражения
|
Я писал в функциях on_equip/unequip и менял радиус самой инстанции, то есть всех таких посохов (именно при одевании) Прописывается, если я правильно помню self.radius= , а там можно с помощью if-конструкций. В общем по простому, без инстанций, т.к. таких посохов у вражин нет, и делал я исключительно для личного пользования, не для народа. 2marazmus:
Вопрос такого плана - судя по всему, в меню статуса больше ничего нельзя добавить
|
В моде мана релоад есть модифицированное меню статуса, хотя вообще-то там используются имеющиеся поля, однако - вдруг поможет
|
|
|
24.11.2005, 11:13
|
#1113
|
 |
|
 |
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
 |
|
 |
|
Re: Скриптинг в Готике
Цитата:
Сообщение от Тать link=board=gothic&t=1105030050&start=1100#1111 date=11/24/05, в 09:42:36
2marazmus: В моде мана релоад есть модифицированное меню статуса, хотя вообще-то там используются имеющиеся поля, однако - вдруг поможет
|
Спасибо :) Модификация имеющихся (конкретно - скиллов с номерами до 22) - не проблема, уже пройденный этап. А вот добавление чего-то нового, судя по всему, бесполезное занятие... У меня новый вопрос, не помню, поднимался или нет: можно ли выйти из заклинания превращения с помощью скриптов? Сам подозреваю, что нет...
|
|
|
26.11.2005, 02:30
|
#1117
|
|
Re: Скриптинг в Готике
2Finsternis:
отвечает только за стиль ведения боя НПЦ. Собственно тактика сражения. Можно ли как нибудь выполнить функцию после загрузки сохраненной игры?
|
|
|
26.11.2005, 04:31
|
#1118
|
|
Re: Скриптинг в Готике
Всем привет! Давненько ниче не постил... :) Короче, есть трабл... Мож, кто сталкивался... Сделал я новое заклинание. На базе Ледяной волны слобал волну огненную. Сейчас нету возможности выложить скрипты, постараюсь объяснить на словах. В PFX поменял текстуру льда на огонь, изменил количество и скорость частиц, потом в VisualFX (опять же на базе ледяной волны путем замены) поменял ссыки на частицы, изменил реакцию НПС на закл (они начинали гореть при кастовании)... Смотрелось все довольно эффектно! :) Короче, получилось так, что при кастовании Ледяной волны получалась Огненная волна, и все работало как надо. После этого я решил вывести Новую волну на отдельный закл (своя руна и т.д.). Прописал, как положено, в Constants новый SPL_Firewave (визуализация, анимация), сделал Spell_Firewave, сделал отдельную руну... Короче, вроде бы везде, где надо, все прописал. Результат: спелл кастуется, но НПС на него не реагируют ваще никак... :( Часа три бился с ним, но так ниче и не придумал... Если кто сталкивался - помогите!
|
|
|
26.11.2005, 10:22
|
#1119
|
|
Re: Скриптинг в Готике
2finch:
Результат: спелл кастуется, но НПС на него не реагируют ваще никак... Часа три бился с ним, но так ниче и не придумал... Если кто сталкивался - помогите!
|
Обработка ледяной волны зашита в exe. Т.е. игра сама обсчитывает - когда волна дошла до NPC и его замораживает. Это и есть основная пробема написания заклинаний. Единственное, что ты можешь сделать - чтобы NPC загорелись СРАЗУ. Для этого в Spell_Cast_Firewave() надо прописать, например: AI_SetNpcsToState (self, ZS_MagicBurnShort, 1500);
|
|
|
27.11.2005, 19:21
|
#1120
|
|
Re: Скриптинг в Готике
2dixie:
Единственное, что ты можешь сделать - чтобы NPC загорелись СРАЗУ. Для этого в Spell_Cast_Firewave() надо прописать, например: AI_SetNpcsToState (self, ZS_MagicBurnShort, 1500);
|
Ну, до этого я сразу тоже додумался... В принципе работает, но все равно какой-то осадок неприятный остался! =) Тем не менее, спасибо за помощь! :pivo:
|
|
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 21:18. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|