[AGFC: Valley of Gothic] М: Скриптинг в Готике

Страница 28 из 65 « Первая 182122232425262728 2930313233343538 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 17.11.2005, 10:47   #1081
Vam

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

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

2marazmus:
что будет "легче" для движка Г2А - набор из 200 int переменных, или массив в 200 int членов?
По быстродействию оба варианта практически одинаковы, по объёму занимаемой памяти предпочтительно использовать вариант с массивом, но надо помнить, что макс. размер массива равен 255.
Ответить с цитированием
Старый 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.

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

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

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

Пытался перекинуть бронь палов из готики 2 в 1. Скрипты переписал правильно и скопировал .3ds фаил. Просит .asc фаил. А где такой найти или откуда и чем его выдрать.
Ответить с цитированием
Старый 17.11.2005, 23:58   #1084
TSYLin

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

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

Вот что самое обидное, создать заклинания вселения, как в Г1 (контроль) не возможно, при том для этого даже не рассчитаны скрипты, ну вот в Г1 вы в кого-нибудь вселялись, но никто с вами не говорил, почему? да потому что это защита от диалога НПС с вселившейся НПС.

И вот у меня аопрос, вот как сделать дилоги в Готике что бы в них участвовали сразу 6 ил 7 ну неважно, главное больше 2 НПС, я знаю, но вот она загвоздка. во первых они будут отображаться если включен режим показа диалогов из SVM.d и во-0вторых они будут показываться снизу что очень не удобно, как можно сделать так что бы они отображались с верху?

Или же это опять движок?
Ответить с цитированием
Старый 18.11.2005, 08:37   #1085
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

По умолчанию 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
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

По умолчанию 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
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

По умолчанию 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
Vam

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

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

2marazmus:
То есть, как я понимаю, ему для индекса массива обязательно нужна константа (сужу по тому, что в скриптах оригинала есть только присвоения через константы)? Переменные, значит, не катят?
Если это так, то очень грустно...
Да, это так, и ничего с этим не поделаешь, доступ к элементу массива возможен только через константу.
Ответить с цитированием
Старый 18.11.2005, 17:02   #1089
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

И еще вопрос: как скриптовый механизм готики относится к return, в таком смысле
- что лучше, множество return по множеству условий, например, как здесь
[pre]
func int RetSome(var int vCriteria)
{
*if (vCriteria == 1) { return 111; };
...
*if (vCriteria == 50) { return 52341; };

*return false;
};
[/pre]

или один return в конце, как здесь?

[pre]
func int RetSome(var int vCriteria)
{
*var int vRet;
*if (vCriteria == 1) { vRet = 111; };
...
*if (vCriteria == 50) { vRet = *52341; };

*return vRet;
};
[/pre]

И есть ли разница для движка, как ставить if (не касаясь логики, что отображают эти if, именно интересует сам механизм)
- if () {}; - отдельным блоком - множество блоков
или
- if () {} else if {} else if {} else ... - длинные блоки if .. else?
Отправить личное сообщение для Ответить с цитированием
Старый 18.11.2005, 19:43   #1090
Sergius256

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

По умолчанию 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); возвращает время нахождения в последнем состоянии).
Ответить с цитированием
Старый 18.11.2005, 21:41   #1091
Stel1

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

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

Что не кто не знает про эти .src файлы?
Ответить с цитированием
Старый 18.11.2005, 22:42   #1092
TSYLin

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

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

2marazmus:

Огромное тебе спасибо!

У меня вопрос, прошу прощения за назойливость, вот в константах прописано что имунитет это -1 защиты, т. е. если защита с минусом то повреждение не наносится, как сделать так что бы этого не было?
Ответить с цитированием
Старый 18.11.2005, 22:51   #1093
DEDROIT

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

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

2TSYLin: -1 и имуне ->это имунитеты,тоесть при нонесение удара жизни не буду отниматься.А если хочешь поменять просто потсавь допустим о или 10.где о и 10,это защита.
Ответить с цитированием
Старый 18.11.2005, 23:09   #1094
TSYLin

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

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

Почитал тему скриптинга и столько вопров появилось,
У некотрых животных стоит защита от FLY, если рассмтаривать как написано в этой теме то получаеьтся что животное падая умрёт, но в теме написано что этот параметр FALL однако этот параметр нигде не упоминается и ФЛАЙ стабильно защищает от падения! Так тогда за что отвечает парамтер FALL
Ответить с цитированием
Старый 19.11.2005, 22:28   #1095
DEDROIT

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

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

У меня есть вопрос.Сразу извините за его глупость.Вот как сделать веппоинт??А то я сделаю веппоинт сохраню мир,а потом ставлю туда непися а его там нет.Что делать?
Ответить с цитированием
Старый 19.11.2005, 22:31   #1096
TSYLin

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

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

2DEDROIT:

дело в том что ты наверное начинаешь игру за загрузки, по этому обязательно начиная Новую игру, это поможет, удачи!
Ответить с цитированием
Старый 19.11.2005, 22:33   #1097
DEDROIT

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

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

2TSYLin: Всегда начинаю игру сначало,я таких ошибок не делаю.Не в этом дела,значит в чём то другом.Вот как ты создаёшь веппоинты?
Ответить с цитированием
Старый 19.11.2005, 22:38   #1098
TSYLin

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

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

2DEDROIT:

Просто беру копирую уже существующий вейппоинт, затем копирую, и вставляю где-нибудь в готическом мире, затем изменяю его нразвание, вооля вейп готов, кстати разбираясь со свойситвом сундуков, узнал что на взлом можно прявязать кол-во силы ГГ

Ответить с цитированием
Старый 19.11.2005, 23:04   #1099
Freesergey

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

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

2TSYLin: 2DEDROIT:
Не совсем понял каким бокам вейпоинты отоносятся к скриптам.
И вообще хватит такую фигню обсуждать - делаете один мод - могли бы и в аське переговорить.
Ответить с цитированием
Старый 20.11.2005, 00:17   #1100
Finsernis

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

По умолчанию 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
sazan

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

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

2Finsternis:
Может я неправильно сформулировал вопрос, но не примите мой пост за флудЪ. Я не знаю в чем ошибка, но когда по ГГ бьют, у его доспехов не отнимается ничего.
Я в скриптинге полный профан, но, вроде, нельзя отследить момент, когда в ГГ попали. В теме мода NLG2 я предлагал сделать артефакт, забирающий часть маны из магичских атак по ГГ (тиша огня орков-шаманов и ищущих) и пополняющий за счёт этого ману ГГ. Но мне сказали, что это невозможно по причине, указанной выше. Можно отследить только попадание ГГ по противнику.

Даже в скрипте Лапы Белиара, когда он находится в руках Равена, молнии бьют ГГ исходя из его попадании по Равену, а не наоборот.

Ответить с цитированием
Старый 20.11.2005, 12:46   #1102
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Функции восприятий, присваиваемые через Npc_PercEnable, НЕ РАБОТАЮТ для ГГ, только для неписей. Исхожу из своего опыта/экспериментов. Для неписей все работает без проблем, для ГГ - не обрабатывается движком.
Повторюсь, любая функция, присвоенная в конструкции типа этого: [pre]
Npc_PercEnable(self,PERC_ASSESSMAGIC,       B_AssessMagic); [/pre]
работает только для неписей, в случае, когда self - это ГГ, assess-функция работать не будет.
Я уже поднимал этот вопрос, и судя по тому, что никто еще не дал осмысленного ответа на него, это нерешаемая проблема для скриптинга Г2А.
Отправить личное сообщение для Ответить с цитированием
Старый 20.11.2005, 18:52   #1103
Finsernis

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

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

2marazmus:
Функции восприятий, присваиваемые через Npc_PercEnable, НЕ РАБОТАЮТ для ГГ, только для неписей.
А как же тогда регистрируется повреждение ГГ, когда по нему бьют?
Ответить с цитированием
Старый 20.11.2005, 20:59   #1104
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Что конкретно ты имеешь в виду, когда говоришь "регистрируется"?
Расчет повреждения по неписям, включая ГГ, насколько я знаю, считается напрямую движком, разработчики не вывели это дело в скриптовую часть. А через функции типа assess можно только начислить _дополнительное_ повреждение, кроме того, что уже насчитал движок. Причем для любого непися, кроме ГГ.
Т.е. отловить момент попадания по ГГ или нанесения ему повреждения и "отдать" этот момент в скрипт - невозможно, на данный момент наших познаний в скриптах.
Отправить личное сообщение для Ответить с цитированием
Старый 21.11.2005, 00:09   #1105
TSYLin

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

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

2marazmus:

Радиус и повреждение минимальное судя по всему тоже зашито в движке, когда я делал обычный щит я присвоил ему флаг одноруча, при том сам дамаг и радиус я уничтожил, однако при моменте избивания любого нпс/монстра этим имповизированным мечом повреждение наносилось, и оружие действовало на радиус, что очень странно, или же это тоже скриптово отслеживается?
Ответить с цитированием
Старый 21.11.2005, 14:49   #1106
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

По умолчанию 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
Vam

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

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

2marazmus:
Еше вопрос: никто не знает, случайно, предмет, после использования которого инвентарь автоматом закрывается?
Пока знаю, что это делают всяческие свитки/книги, при их прочтении инвентарь закрывается, а книга/свиток открывается.
И можно ли вообще закрыть инвентарь скриптово?
Этот вопрос раньше поднимался, ответа на него никто пока ещё не дал, в скриптах ни функций ни переменных для этого нет.

Можно ли это как-то обойти, или цифра 22 жестко прошита в движке?
Это жестко зашито в движке - Готика1 - 12 скиллов, Готика2 - 22 и ни одним больше.  :(
Ответить с цитированием
Старый 21.11.2005, 22:39   #1108
TSYLin

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

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

2Vam:

Ещё меня мучает одна вещь, в файле отношений гильдий людей есть 16 столбиков и 16 строчек, то есть 256 значений (прям как в байте) возможно ли расширить таблицу на одну строчку и один столбик, это не глупый вопрос как прописывать в константах на ссылку в этот скрипт и всё прочее я знаю, но вот максимальное кол-во гильдий людей, не ужели это зашито в движке?
Ответить с цитированием
Старый 21.11.2005, 23:55   #1109
TycoooN
Строители Миртаны
  Аватар для TycoooN
 
 
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
TycoooN вне форума

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

2TSYLin:
Ещё меня мучает одна вещь, в файле отношений гильдий людей есть 16 столбиков и 16 строчек, то есть 256 значений (прям как в байте) возможно ли расширить таблицу на одну строчку и один столбик, это не глупый вопрос как прописывать в константах на ссылку в этот скрипт и всё прочее я знаю, но вот максимальное кол-во гильдий людей, не ужели это зашито в движке?
255 - максимальная размерность массива в Готике. К сожалению.
Отправить личное сообщение для Ответить с цитированием
Старый 22.11.2005, 10:34   #1110
Vam

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

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

2TSYLin:
в файле отношений гильдий людей есть 16 столбиков и 16 строчек, то есть 256 значений (прям как в байте) возможно ли расширить таблицу на одну строчку и один столбик
Нельзя, об этом уже говорилось, кол-во гильдий людей ограничено числом 16. Обычным образом этот предел не обойти.
Ответить с цитированием
Старый 23.11.2005, 09:47   #1111
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Вопрос такого плана - судя по всему, в меню статуса больше ничего нельзя добавить? Кто-нибудь еще занимался этим?
Мне удалось добавить пару пунктов через использование неиспользуемых скиллов (talents), но все уперлось в цифру 22, спасибо Vam'у, что просветил в этой проблеме.
Гляжу на другие пункты меню и подозреваю, что все это жестко прошито в экзешнике. Неужели ничего своего нельзя добавить?
Может, есть моды, в которых меню изменено немного или сильно, кто-нибудь в курсе?
Отправить личное сообщение для Ответить с цитированием
Старый 24.11.2005, 10:42   #1112
Tate

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

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

2Sergius256:
Кстати, попытался реализовать идею с посохами с изменяемым радиусом поражения
Я писал в функциях on_equip/unequip и менял радиус самой инстанции, то есть всех таких посохов (именно при одевании) Прописывается, если я правильно помню self.radius= , а там можно с помощью if-конструкций. В общем по простому, без инстанций, т.к. таких посохов у вражин нет, и делал я исключительно для личного пользования, не для народа.

2marazmus:
Вопрос такого плана - судя по всему, в меню статуса больше ничего нельзя добавить
В моде мана релоад есть модифицированное меню статуса, хотя вообще-то там используются имеющиеся поля, однако - вдруг поможет
Ответить с цитированием
Старый 24.11.2005, 11:13   #1113
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Цитата:
Сообщение от Тать link=board=gothic&t=1105030050&start=1100#1111 date=11/24/05, в 09:42:36
2marazmus:
В моде мана релоад есть модифицированное меню статуса, хотя вообще-то там используются имеющиеся поля, однако - вдруг поможет
Спасибо :)
Модификация имеющихся (конкретно - скиллов с номерами до 22) - не проблема, уже пройденный этап. А вот добавление чего-то нового, судя по всему, бесполезное занятие...

У меня новый вопрос, не помню, поднимался или нет: можно ли выйти из заклинания превращения с помощью скриптов? Сам подозреваю, что нет...
Отправить личное сообщение для Ответить с цитированием
Старый 24.11.2005, 23:06   #1114
TSYLin

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

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

У меня тоже возник вопрос, как сделать оружие так, что бы при ударе, НПС по которму бьют далеко отлетал? Как от удара голема.
Ответить с цитированием
Старый 25.11.2005, 08:27   #1115
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

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

Попробуй проставь монстру (в его прототипе или конкретной инстанции) тип повреждения DAM_FLY, типа так:
[pre]
* * *//----- Damage Types ---- * * *
* * *damagetype  * * * * * * * * * * * * * * * * * *= * * *DAM_FLY;

* * *//----- Kampf-Taktik ---- * * *
* * *fight_tactic * * *= * * *FAI_TROLL;
[/pre]
Насколько я помню, именно этот тип повреждения отвечает за то, чтобы непись (и ГГ в том числе) "летал".

Если ошибаюсь, поправьте меня, протестировать еще не успел.
Отправить личное сообщение для Ответить с цитированием
Старый 25.11.2005, 19:01   #1116
Finsernis

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

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

2marazmus:
Достаточно просто поставить в инстанции оружия
damagetype=DAM_FLY;

А вот fight_tactic=FAI_TROLL; на мой взгляд здесь абсолютно ни к чему. Я точно не уверен, но работать будет и без этого.

2TSYLin:
Летать будет, проверял.
Ответить с цитированием
Старый 26.11.2005, 02:30   #1117
B_Wolf

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

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

2Finsternis:
fight_tactic
отвечает только за стиль ведения боя НПЦ. Собственно тактика сражения.

Можно ли как нибудь выполнить функцию после загрузки сохраненной игры?
Ответить с цитированием
Старый 26.11.2005, 04:31   #1118
finch

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

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

Всем привет!
Давненько ниче не постил... :)
Короче, есть трабл... Мож, кто сталкивался...
Сделал я новое заклинание. На базе Ледяной волны слобал волну огненную. Сейчас нету возможности выложить скрипты, постараюсь объяснить на словах. В PFX поменял текстуру льда на огонь, изменил количество и скорость частиц, потом в VisualFX (опять же на базе ледяной волны путем замены) поменял ссыки на частицы, изменил реакцию НПС на закл (они начинали гореть при кастовании)... Смотрелось все довольно эффектно! :) Короче, получилось так, что при кастовании Ледяной волны получалась Огненная волна, и все работало как надо. После этого я решил вывести Новую волну на отдельный закл (своя руна и т.д.). Прописал, как положено, в Constants новый SPL_Firewave (визуализация, анимация), сделал Spell_Firewave, сделал отдельную руну... Короче, вроде бы везде, где надо, все прописал. Результат: спелл кастуется, но НПС на него не реагируют ваще никак... :( Часа три бился с ним, но так ниче и не придумал... Если кто сталкивался - помогите!
Ответить с цитированием
Старый 26.11.2005, 10:22   #1119
dixie

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

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

2finch:
Результат: спелл кастуется, но НПС на него не реагируют ваще никак... Часа три бился с ним, но так ниче и не придумал... Если кто сталкивался - помогите!
Обработка ледяной волны зашита в exe. Т.е. игра сама обсчитывает - когда волна дошла до NPC и его замораживает. Это и есть основная пробема написания заклинаний.
Единственное, что ты можешь сделать - чтобы NPC загорелись СРАЗУ.
Для этого в Spell_Cast_Firewave() надо прописать, например:
AI_SetNpcsToState (self, ZS_MagicBurnShort, 1500);
Ответить с цитированием
Старый 27.11.2005, 19:21   #1120
finch

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

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

2dixie:
Единственное, что ты можешь сделать - чтобы NPC загорелись СРАЗУ.
Для этого в Spell_Cast_Firewave() надо прописать, например:
AI_SetNpcsToState (self, ZS_MagicBurnShort, 1500);
Ну, до этого я сразу тоже додумался... В принципе работает, но все равно какой-то осадок неприятный остался! =)
Тем не менее, спасибо за помощь!  :pivo:
Ответить с цитированием
Страница 28 из 65 « Первая 182122232425262728 2930313233343538 Последняя »


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 02:41. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022

Яндекс.Метрика