• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

    Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в этом году
    По желанию, аргументировать свой выбор можете в теме обсуждения голосования.

Готика ½ Spell_Logic - увеличения урона заклинаний

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
  • Первое сообщение
  • #1
хотелось бы отразить возможность увеличения урона от заклинаний непосредственно в Spell_Logic.

возьмём в качестве примера Spell_Firebolt. у подобных заклинаний используется один уровень заклинания, но совершенного ничего не мешает увеличить кол-во уровней, уменьшив при этом урон за уровень.
Daedalus:
const int SPL_Cost_Firebolt        = 5;
const int SPL_Damage_Firebolt     = 5; // MDK 25

instance Spell_Firebolt (C_Spell_Proto)
{
    time_per_mana            = 0;
    damage_per_level        = SPL_Damage_Firebolt;
    damageType                = DAM_MAGIC;
};
переходим непосредственно к Spell_Logic
Daedalus:
func int Spell_Logic_Firebolt (var int manaInvested)
{
    var C_Item  itm; // для будущих проверок
    var C_NPC   her;     her = Hlp_GetNpc(PC_Hero); // ссылка на инстанцию героя

1. сделаем проверку на то есть ли мана на каст. если маны не хватает, то выходим. в моём примере проверка делается один раз при (manaInvested == 0)
Daedalus:
    var int SPL_Cost_mana; 
    if (manaInvested == 0)
    {
        SPL_Cost_mana = SPL_Cost_Firebolt;  // необходимо маны для руны
        if (Npc_GetActiveSpellIsScroll(self))   { SPL_Cost_mana = SPL_Cost_Scroll; };  // необходимо маны для свитка
 
        if (self.attribute[ATR_MANA] < SPL_Cost_mana)   { return SPL_SENDSTOP; };
    };

2. в данном примере что бы заклинание наносило 25 ущерба надо использовать 5ый уровень заклинания. Этот уровень я задаю как "базовый", а далее начинаю начислять "бонусные" уровни. "Уровни" я записываю в аивер НПС. Подсчёт "уровней" я делаю на "старте" в Spell_Logic пока (manaInvested == 0).
Daedalus:
        if (manaInvested == 0)
        {
            self.aivar[AIV_SpellLevel] = 5;
            //
            //  Бонусы
            //
            var C_NPC her;     her = Hlp_GetNpc(PC_Hero);

            if (self.guild == GIL_KDF)
            {
                self.aivar[AIV_SpellLevel] += 1;
 
                if (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))
                && (heroGIL_KDF2 == TRUE)
                {
                    self.aivar[AIV_SpellLevel] += 1;
                };
            };
 
            var C_Item itm; itm = Npc_GetEquippedMeleeWeapon(self);
            if (Hlp_IsItem(itm, ITMW_ADDON_STAB01) == TRUE)
            {
                self.aivar[AIV_SpellLevel] += 1;
            }
            else if (Hlp_IsItem(itm, ITMW_ADDON_STAB04) == TRUE)
            {
                self.aivar[AIV_SpellLevel] += 2;
            };

               if (Npc_HasEquippedArmor(self) == TRUE)
            {
                itm = Npc_GetEquippedArmor(self);
                if (Hlp_IsItem(itm, ITAR_KDF_L) == TRUE)
                {
                    self.aivar[AIV_SpellLevel] += 1;
                }
                else if  (Hlp_IsItem(itm, ITAR_KDF_H) == TRUE)
                {
                    self.aivar[AIV_SpellLevel] += 2;
                };
 
                if (KDF01_Equipped == TRUE)
                && (KDFArmor_Equipped == TRUE)
                {
                    self.aivar[AIV_SpellLevel] += 1;
                };
            };
 
            if (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))
            {
                if (PLAYER_TALENT_RUNES [SPL_Firebolt] == true)         { self.aivar[AIV_SpellLevel] += 1; };
                if (PLAYER_TALENT_RUNES [SPL_InstantFireball] == true)  { self.aivar[AIV_SpellLevel] += 1; };
                if (PLAYER_TALENT_RUNES [SPL_Firestorm] == true)        { self.aivar[AIV_SpellLevel] += 1; };
                if (PLAYER_TALENT_RUNES [SPL_ChargeFireball] == true)   { self.aivar[AIV_SpellLevel] += 1; };
                if (PLAYER_TALENT_RUNES [SPL_Pyrokinesis] == true)      { self.aivar[AIV_SpellLevel] += 1; };
                if (PLAYER_TALENT_RUNES [SPL_Firerain] == true)         { self.aivar[AIV_SpellLevel] += 1; };
            };
        };
код выше можно вынести в отдельную функцию что бы использовать в разных спелл_логик. в приведённом выше примере есть различные проверки по всему что пришло в голову. после каждой положительной проверки уровень заклинания "поднимался" всё выше и выше, то есть получался "бонус". а там где есть бонусы там могут быть и штрафы ;-) а значит эти условия можно сделать более проработанными и начислять как бонусы так и штрафы. При этом всё таки кол-во уровней должно быть осмысленное и не уходить в бесконечность. Например если "базовый" уровень 5, то максимально возможный лучшей сделать 10. Если уровней будет много(например 100), то каст заклинание может занять значительное время.
upd доп информация по проверкам в посте #2 Готика ½ - Spell_Logic - увеличения урона заклинаний

3. Переходим к непосредственному повышению уровня: определяем текущий уровень заклинания и если он ниже необходимого, то повышаем уровень.
Daedalus:
    var int    SpellLevel; SpellLevel = Npc_GetActiveSpellLevel(self);
    //Hlp_PrintConsole(Str_Format("Spell_Logic_Firebolt[%s %i] // manainvested =%i, Spell Lvl = %i", self.name, self.id,manaInvested, SpellLevel));

    if (SpellLevel < self.aivar[AIV_SpellLevel])
    {
        return SPL_NEXTLEVEL;
    };

4. обнуляем аивер и отнимает ману движком.
Daedalus:
    if (self.aivar[AIV_SpellLevel] != 0)
    {
        self.aivar[AIV_SpellLevel] = 0;
        return SPL_FORCEINVEST + Spl_Cost_Mana; // отнимает ману. устанавливаем новое значение manainvested.
    };

5. сам каст
Daedalus:
    return SPL_SENDCAST;
};

в функции каста делается запись в аивер НПС AIV_SelectSpell. В оригинальных скриптах это делается для врагов, что бы они при необходимости могли поменять заклинание. Огненную стрелу использует только герой. тем не менее я на всякий случай оставляю данный счётчик. Ввиду того что ману я отнимаю движком, скриптовое отнимание маны убрано из Spell_Cast_***. Подробнее про то как и зачем отнимать ману движком я написал в посте #5 Готика ½ - Spell_Logic - увеличения урона заклинаний
Daedalus:
func void Spell_Cast_Firebolt()
{
    self.aivar[AIV_SelectSpell] += 1;     // счётчик для НПС (не герой)
};
 

Вложения

  • 17_03_2023_SPL_FireBolt.zip
    1,4 KB · Просмотры: 10
  • 2023_03_18_SPL_FireBolt.zip
    1,5 KB · Просмотры: 6
Последнее редактирование модератором:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Почему ты так считаешь?
ну это же дефакто специализация, которую герой получает в рамках обучения за ЛП. в скриптах G1 был заложен навык "FIREMASTER", который и должен был как раз повышать урон. сама по себе мана не должна влиять на урон от заклинания, так как она определяется сколько раз ты можешь произнести заклинание. то есть мана она и так уже работает: условный маг с 200 маной может нанесёт условно 20 * 50 урона, а маг со 100 маной нанесёт условно 10*50 урона. соответственно сама по себе мана не должна повышать урон от спела, так как является тем параметром который определяет сколько раз будет сделан спел. в то время как отдельный навык(специализация) может усиливать заклинания огня. в таком случае герой изучает за ЛП магические формулы и познаёт теорию.

***

а если ты хочешь именно слабый бонус, то тогда проще добавить в игру кольцо мастера огня, которое выдаст тебе маг огня после изучения всех формул огненных заклинаний. и тогда это кольцо будет например давать бонус к мане и немного повышать урон от огненных заклинаний.
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Но максимально допустимый Spell Lvl ограничен 20?
у тебя же скрипты. проверь ;-)
Пост автоматически объединён:

опять же тебе необязательно что бы сумма всех бонусов была равна максимальному бонусу.
у тебя может быть базовый уровень, минимальный уровень и максимальный уровень.

а как герой соберёт максимальный уровень это уже как говорится его дело. кто то может за ЛП поднять изготовление всех рун, кто то может с посохом магов огня , в робе и амулетом бегать, кто то гибридно. то есть наличие вариаций это хорошо.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
у тебя же скрипты. проверь ;-)
Я просто запомнил вон то сообщение.

опять же тебе необязательно что бы сумма всех бонусов была равна максимальному бонусу.
у тебя может быть базовый уровень, минимальный уровень и максимальный уровень.
Я понимаю, но для этого мне нужно знать допустимые рамки. Насколько понимаю, сейчас они таковы:
MinSpellLvl = 1
BaseSpellLvl = 2-6 [Разный для разных спеллов]
MaxSpellLvl = 20
Значит, суммарный бонус от всех источников не должен превышать +14 SpellLvl, чтобы всё нормально работало.

а как герой соберёт максимальный уровень это уже как говорится его дело. кто то может за ЛП поднять изготовление всех рун, кто то может с посохом магов огня , в робе и амулетом бегать, кто то гибридно. то есть наличие вариаций это хорошо.
Не до конца понял. Ты предлагаешь ограничить максимально допустимый SpellLvl значением 20, при том, чтобы максимально достижимый от всех источников мог быть выше?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Не до конца понял. Ты предлагаешь ограничить максимально допустимый SpellLvl значением 20, при том, чтобы максимально достижимый от всех источников мог быть выше?
да.
Пост автоматически объединён:

я бы сделал для всех спелов
  • минимальный уровень 5
  • базовый уровень 10
  • максимальный уровень 20
то есть макс штраф 50%, а макас бонус 100%
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
я бы сделал для всех спелов
  • минимальный уровень 5
  • базовый уровень 10
  • максимальный уровень 20
то есть макс штраф 50%, а макас бонус 100%
Мне такой подход не особо нравится, поскольку начальные заклинания так и останутся слишком слабыми, а значит полностью утратят свою актуальность в дальнейшем.
На мой взгляд, более практичным будет снижать бонус по мере усиления самого заклинания. Например, той же огненной стреле, с BaseSpellLvl = 2 и SpellLvlDamage = 20 (базовый урон = 20*2 = 40), можно спокойно разогнать SpellLvl до 12 (Dam = 20*12 = 240), что позволит гарантированно "ван-шотить" мелочь, вроде волков/гоблинов/кабанов/полевых хищников и т.п. А для огненного дождя, с BaseSpellLvl = 10 и SpellLvlDamage = 50 (базовый урон = 50*10 = 500), хватит и усиления до SpellLvl = 20 (50*20 = 1000), что позволит гарантированно ван-шотить толпу орков/людей-ящеров/ищущих и т.п..
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Ну это всё голая теория без привязки к игре и балансы, то есть оторвано как от реалий сюжета так и баланса игры в целом. заклинание 1 круга не должно быть сильнее заклинание 3 круга. в первой главе ты не сможешь "разогнать" стрелку до 240. сколько именно нужно ущерба что бы "ваншотить мелочь" тебе так же неизвестно. И это точно не 240, так как для скелета война например надо 150. Таблиц традиционно нет. ребаланса ущерба нет. а значит первая глава не будет стыковаться со второй и так далее.

сама идея роста ущерба в 6(!) раз у одних заклинаниях с ростом ущерба в 2 раза у других подразумевает сложнейший просчёт с точки зрения баланса. Ввиду отсутствия просчёта каждое следующая руна будет всё "перекраивать" создавая новые "правила" и "условности".

Всё это превратится в некий бесконечный процесс на 35 страницах, а результат или будет отсутствовать в целом или окажется не вписан в имеющийся баланс. примерно как московские диаметры.

есть только один способ этого избежать: изначально всё прописывать и расписывать все правила, имея чётко понимание что и когда будет работать в игре. и это не включение третий главы и в ставка рокфелера, а конкретная главе с конкретными параметрами у персонажа. Далее можно выявлять общие закономерности а потом уже прописать простую и понятную логику на уровне скриптов.

вот пример связанной логически таблицы.
КругназваниеБаза. SpellLvl = 10Макс. SpellLvl = 20
1​
Болт
50​
100
2​
Шар
75​
150
3​
Малая буря
100
200
4​
большой шар
150-***
300-***
5​
большая буря
200-***
400-***​
6​
дождь
300
600​
практически это значит что один раз написанный код будет актуален сразу для всех спеллов.
Пост автоматически объединён:

заклинания 4 и 5 круга накопительные. и там соответственно 4 уровня, а значит какая то другая будет спелл-логик. это тоже надо как-то учитывать. но в целом ущерб их должен быть вписан в общую канву.
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
вот пример связанной логически таблицы.
Magic CircleSpellBaseSpellLvlBaseSpellDamMaxSpellDam (SpellLvl = 20)
1Огненная стрела545180
2Огненный Шар690300
3Малая огн. буря7140400
4Большой огн. шар8200-***500-***
5Большая огн. буря9315-***700-***
6Огненный дождь106001200
Пост автоматически объединён:

заклинания 4 и 5 круга накопительные. и там соответственно 4 уровня, а значит какая то другая будет спелл-логик. это тоже надо как-то учитывать. но в целом ущерб их должен быть вписан в общую канву.
Как эти накопительные уровни вообще работают? Это просто ещё 4 уровня из 20-и допустимых?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
я вот это не понимаю что ты пишешь. тем в части роста.

цифры в этой колонки из головы. ну давай 120. а чё 120?думаешь мало? ну давай 140! а чё 140? думаешь много? ну давай 110! а максимум пусть будет 600? а чего 600? да что бы всех фигачило!!! это не баланс. это просто случайных цифер. давай напишем рандомный генератор ущерба и при запуски игры оно там что нибудь нагинирует и ущерб и расход маны и так далее.



Как эти накопительные уровни вообще работают?
работают сложно

Это просто ещё 4 уровня из 20-и допустимых?
нет
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
я вот это не понимаю что ты пишешь. тем в части роста.
Что не понятно? Базовые уровни соответствующих спеллов и т.д.
SpellБазовый уровень спеллаУрон от спелла за 1 уровеньМаксимально достижимый урон (при 20 уровне)
Огн. стрела59180
Огн. шар615300
Малая огн. буря720400
Большой огн. шар825500-***
Большая огн. буря935700-***
Огн. дождь10601200

цифры в этой колонки из головы.
Цифры взяты из характеристик существ и NPC, которые я уже переделал. И взяты они с тем расчётом, чтобы максимально разогнанный спелл каждого уровня позволял ван-шотить врагов соответствующего "класса". Например, стрела - на мелких животных и слабейших бандитов, шар - может поджигать и подойдёт для сильных NPC, либо крепких тварей, вроде варгов и т.п. Малая буря - для групп сильных противников. Накопительные - для элитных орков, мракорисов и т.д. Прокаченный огненный дождь убивает за каст кого угодно, кроме самых чудовищных противников, вроде черного тролля, лордов-демонов и драконов.

работают сложно
Значит, как минимум, нужно учитывать возможность разгона урона в 4 раза? Или есть ещё какие-то подводные камни?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Цифры взяты из характеристик существ и NPC, которые я уже переделал. И взяты они с тем расчётом, чтобы максимально разогнанный спелл каждого уровня позволял ван-шотить врагов соответствующего "класса".
оно так не работает. я выше написал два абзаца про это. ты не сможешь "разогнать" стрелку до упора в первой или второй и скорее всего даже в третей главе.

Что не понятно?
а всё не понятно. наверное ты имел ввиду так?

SpellУрон за 1 уровеньБазовый уровеньурон базамакс уров.Максимально достижимый урон (при 20 уровне)
Огн. стрела95
45​
20​
180​
Огн. шар156
90​
20​
300​
Малая огн. буря207
140​
20​
400​
Большой огн. шар258
200​
20​
500-***
Большая огн. буря359
315​
20​
700-***
Огн. дождь6010
600​
20​
1200​
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
оно так не работает. я выше написал два абзаца про это. ты не сможешь "разогнать" стрелку до упора в первой или второй и скорее всего даже в третей главе.
Разогнать стрелу до SpellLvl = 20 в первой половине игры не выйдет, верно. А вот до SpellLvl = 10 (Урон = 10*9 = 90) реально разогнать стрелу уже в первой главе:
Базовый уровень стрелы огня = 5 (5*9 = 45)
+1 за мантию мага Огня
+1 за пояс мага Огня
+1 за посох мага Огня
+1 за знание рунической формулы
+1 за ATR_MANA > 80
Этого уже достаточно, чтобы ван-шотить гоблинов, и не попасть в просак, как Дарон *gigi* .
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
я повторюсь. умение излагать мысли в виде таблиц которые другие люди могу трактовать однозначно, это база. если в таблице прослеживается логика, то её так же можно описать и превратить в код.
таблицу ты сделать понятной не можешь. лично я логическую связь в твоих цифрах установить не могу. почему урон макс от 1 круга выше чем базовый от 3 круга мне не понятно. доводы из области, "а так точно будет ваншотить" без математического обоснования мне кажутся странными.

в связи с вышеизложенным я предлагаю тебе мой топик, созданный для описания общего принципа повышения урона через Spell_Logic не засорять алогичными частностями. в целом увеличение урона через спелл_логик работает корректно, а то что ты не можешь данные собрать в таблицу и понятно изложить, или не понимаешь что должно присутствовать общая логика или отрицаешь что то там ввиду чего то там, и как следствие у тебя не будет чего то там получаться или начнёт неправильно работать или что то там ещё к данному топику уже не должно иметь отношения ;-)
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
почему урон макс от 1 круга выше чем базовый от 3 круга мне не понятно
Потому что такая ситуация исключена. Уровень огненного спелла 3-о круга всегда будет выше, чем уровень огненного спелла 1-о круга. То же самое касается урона.

Ещё раз, данная таблица распределения SpellLvl применима для всех атакующих заклинаний, кроме накопительных, разумеется.
Круг заклинанияБазовый уровень заклинанияБонус к базовому урону заклинания за 1 уровеньМаксимальный уровень заклинанияБонус к базовому урону, при максимальном уровне заклинания = 20
Первый520%20+300%
Второй616.7%20+233%
Третий714.3%20+186%
Четвёртый812.5%20+150%
Пятый911.1%20+122%
Шестой1010%20+100%
Т.е. заклинания низжих Кругов, будут получать больший бонус к базовому урону, однако всегда будут уступать и по уровню и по урону заклинаниям высших Кругов.

Конкретно для огненных заклинаний и я и ты уже расписали таблицу с уроном. Разгонять уровень до максимума для каждого Круга не обязательно, как ты и предложил. Для атакующей магии Огня будут следующие варианты набивания SpellLvl:
Daedalus:
C_BonusSpellMana(self);                 // Бонус от текущей маны до +4
       
C_BonusFireSpellEquipment(self);        // Бонус от надетой экипировки Огня от +5 до -5
       
C_BonusFireSpellRuneMaster(self);       // Бонус за знание формул рун Огня до +6

заклинания 4 и 5 круга накопительные. и там соответственно 4 уровня, а значит какая то другая будет спелл-логик. это тоже надо как-то учитывать. но в целом ущерб их должен быть вписан в общую канву.
Подскажи, пожалуйста, насчёт работы данных заклинаний? Если 4 "шага" зарядки заклинания НЕ включаются в максимальные 20 уровней заклинания, то с помощью SpellLvl мы увеличиваем урон лишь от одного заряда? Т.е. количество этих самых зарядов строго 4, и не подлежит изменению?
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Т.е. заклинания низжих Кругов, будут получать больший бонус к базовому урону, однако всегда будут уступать и по уровню и по урону заклинаниям высших Кругов.
1680104519025.png

а фактически у тебя будет закл. низших кругов по урону выше закл. высших кругов. подробнее про подобные аллогизмы см. в посте #109

Подскажи, пожалуйста, насчёт работы данных заклинаний? Если 4 "шага" зарядки заклинания НЕ включаются в максимальные 20 уровней заклинания, то с помощью SpellLvl мы увеличиваем урон лишь от одного заряда? Т.е. количество этих самых зарядов строго 4, и не подлежит изменению?
у меня на этой недели уже душевных сил нет, прожёвывать базовые вещи по пятому кругу.


Конкретно для огненных заклинаний и я и ты уже расписали таблицу с уроном.
там принципы составления таблицы разные. а значит и код будет разный. в моей таблице есть понятная логика и можно использовать один прототип кода для ВСЕХ заклинаний. как твою таблицу кодить я не знаю. есть ты видишь в ней "логику" то возможно сможешь сделать общий прототип кода для всех огненных заклинаний. ну или по каждому спелу прыгать с бубном :)

***

на этом я предлагаю закончить обсуждения в данном топике, так как мы выходим за рамки обозначенной темы.
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Приветствую всех вновь.
у меня на этой недели уже душевных сил нет, прожёвывать базовые вещи по пятому кругу.
Итак, судя по коду, в оригинале заряд заклинания подразумевает просто увеличение его уровня:
Daedalus:
const int SPL_COST_ChargeFireball = 100;
const int STEP_ChargeFireball = 25;
const int SPL_Damage_ChargeFireball = 100;

instance Spell_ChargeFireball(C_Spell_Proto)
{
    time_per_mana = 30;
    damage_per_level = SPL_Damage_ChargeFireball;
//    изменить тип если нужно       
//    damagetype = DAM_MAGIC;
    damagetype = DAM_FIRE;
    canTurnDuringInvest = TRUE;
};


func int Spell_Logic_ChargeFireball(var int manaInvested)
{
    if(self.attribute[ATR_MANA] < STEP_ChargeFireball)
    {
        return SPL_DONTINVEST;
    };
    if(manaInvested <= (STEP_ChargeFireball * 1))
    {
        self.aivar[AIV_SpellLevel] = 1;
        return SPL_STATUS_CANINVEST_NO_MANADEC;
    }
    else if((manaInvested > (STEP_ChargeFireball * 1)) && (self.aivar[AIV_SpellLevel] <= 1))
    {
        self.attribute[ATR_MANA] -= STEP_ChargeFireball;
        if(self.attribute[ATR_MANA] < 0)
        {
            self.attribute[ATR_MANA] = 0;
        };
        self.aivar[AIV_SpellLevel] = 2;
        return SPL_NEXTLEVEL;
    }
    else if((manaInvested > (STEP_ChargeFireball * 2)) && (self.aivar[AIV_SpellLevel] <= 2))
    {
        self.attribute[ATR_MANA] -= STEP_ChargeFireball;
        if(self.attribute[ATR_MANA] < 0)
        {
            self.attribute[ATR_MANA] = 0;
        };
        self.aivar[AIV_SpellLevel] = 3;
        return SPL_NEXTLEVEL;
    }
    else if((manaInvested > (STEP_ChargeFireball * 3)) && (self.aivar[AIV_SpellLevel] <= 3))
    {
        self.attribute[ATR_MANA] -= STEP_ChargeFireball;
        if(self.attribute[ATR_MANA] < 0)
        {
            self.attribute[ATR_MANA] = 0;
        };
        self.aivar[AIV_SpellLevel] = 4;
        return SPL_NEXTLEVEL;
    }
    else if((manaInvested > (STEP_ChargeFireball * 3)) && (self.aivar[AIV_SpellLevel] == 4))
    {
        return SPL_DONTINVEST;
    };
    return SPL_STATUS_CANINVEST_NO_MANADEC;
};

func void Spell_Cast_ChargeFireball(var int spellLevel)
{
    self.attribute[ATR_MANA] -= STEP_ChargeFireball;
    if(self.attribute[ATR_MANA] < 0)
    {
        self.attribute[ATR_MANA] = 0;
    };
    self.aivar[AIV_SelectSpell] += 1;
};
Вопрос:
- Как здесь можно корректно прописать увеличение уровня заклинания, с учётом ограничения в 20 уровней? Возможно ли прописать 10 уровень для каждой ступени/заряда?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Возможно ли прописать 10 уровень для каждой ступени/заряда?
да, если использовать оригинальный спелл_логик. то есть без конструктора Saturas

Как здесь можно корректно
наверное надо дублировать код для эффектов. сейчас инстанции эффекты прописаны на 4 уровня заклинаний. на сколько я знаю ElderGamer делал пяти уровневый фаербол для г1.

Приветствую всех вновь.

ты же не хочешь подходить системно к магии и у тебя будут подобные затыки по каждому пятому заклинанию. Продолжая множить множества ты придёшь к закономерному результату :)
1681126461313.png

***

в твоём случае будет проще переписывать урон не по науке как должно быть в иделае, а в усеченно-упрощённом виде через Инструкция - OnDamage_Hit – модернизация урона [модостроение]. так конечно не правильно делать, но у такого неправильного варианта будет логический конец, а тут скорее всего просто бесконечный процесс и переделки :)
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.409
Благодарности
3.239
Баллы
525
на сколько я знаю @ElderGamer делал пяти уровневый фаербол для г1.
Мне кажется, ты ошибаешься. :)

Каждый уровень каста заклинания - это свой собственный визуальный эффект. Визуальный эффект подразумевает особый эффект частиц (различаются размером, например) и особый звуковой эффект (различаются громкостью, например). Я ни каких новых эффектов не создавал, если не считать восстановление звуков при касте Шаровой молнии. Не знаю, есть ли ограничения в движке на количество уровней заклинания. Если ограничений нет, то, наверное, можно создать необходимые визуальные эффекты, эффекты частиц и звуковые эффекты для того, чтобы можно было зарядить заклинание не до 4го, а до 10го или 20го уровня.

P.S. Впрочем, это я про Г1. В Г2 каст заклинаний заряда организован иначе. Может быть, там и с эффектами ситуация иная.
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
ты же не хочешь подходить системно к магии и у тебя будут подобные затыки по каждому пятому заклинанию.
Что это значит? О какой системе или логике идёт речь?

а фактически у тебя будет закл. низших кругов по урону выше закл. высших кругов. подробнее про подобные аллогизмы см. в посте #109
Зачем ты сравниваешь базовый и максимальный уровни заклинаний, если подобная ситуация исключается? Я могу такую же картинку сделать:
3.png

Урон заклинания 3-круга базовый уровень ниже максимального урона заклинания 2-о круга. И что? Такой ситуации не получится, при текущем варианте бонусов.
Ты предлагаешь соблюдать строгое равенство минимального и максимального уровней заклинаний разных кругов?

Я остановился на таком варианте, только зарядов хочется сделать не 4, а 3:
КругЗаклинаниеДоп. эффектРасход маныУрон за уровеньБазовый уровеньБазовый уронМакс. уровеньМакс. урон
IОгн. стрела-57107020140
IIОгн.шар
Поджигание​
12101010020200
IIIМалая огн. буря
Поджигание+Осколки​
20151015020300
IVБольшой огн. шар
Поджигание​
25-751010100-30020200-600
VБольшая огн. буря
Поджигание+Осколки​
40-1201510150-45020300-900
VIОгненный дождь
Поджигание+АОЕ​
15050
10
500201000
наверное надо дублировать код для эффектов. сейчас инстанции эффекты прописаны на 4 уровня заклинаний.
Т.е. прописать наращивание уровней для каждой ступени? Тогда сделать меньше уровней, прописав для каждого заряда разный урон за 1 SplLvl?
 
Сверху Снизу