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

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

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

Готика ½ 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
Последнее редактирование модератором:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
if (RavenIsDead == TRUE) && (Saturas_KlaueInsMeer == FALSE)
эта проверка будет действовать и на ищущих
Пост автоматически объединён:

а это ты откуда взял?
Пост автоматически объединён:

у тебя по новому коду за последний год, проверка на то герой это или нет, только на моей памяти использовалась пять раз.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Код:
func int Spell_Logic_Firebolt (var int manaInvested)
{
    ...
    var C_NPC   her;     her = Hlp_GetNpc(PC_Hero); // ссылка на инстанцию героя

    ...

    if (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her)) // self это инстанция героя pc_hero
    {
        ...
    };
....
};
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
у тебя по новому коду за последний год, проверка на то герой это или нет, только на моей памяти использовалась пять раз.
Где? Вот это:
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
?
Пост автоматически объединён:

Тогда так?
if (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her)) && (RavenIsDead == TRUE) && (Saturas_KlaueInsMeer == FALSE)
 

MW 7


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

Daedalus:
if C_IsNpc(self,PC_Hero)
Пост автоматически объединён:

или еще короче

Daedalus:
if (C_NpcIsHero(self) == true)
Пост автоматически объединён:

проверка на рокфелера для тестов
Daedalus:
if (C_NpcIsRockefeller(self) == true)
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Пока не получается кастануть FireBolt со свитка. ГГ, имея ATR_MANA_MAX и ATR_MANA в 5 ед.. мгновенно сжигает их, но каста не происходит. Отладчик пишет вот это:
Daedalus:
manainvested[0}, Spell Lvl = 1
manainvested[1}, Spell Lvl = 2
manainvested[2}, Spell Lvl = 3
И всё. далее ничего.
Это при вот таком скрипте, расположенном в system/autorun:
Daedalus:
// ************
// SPL_FireBolt
// ************

const int SPL_Cost_Firebolt = 5;
const int SPL_Cost_Firebolt_Scroll = 1;
const int SPL_Damage_Firebolt = 10;

instance Spell_Firebolt (C_Spell_Proto)
{
    time_per_mana            = 0;
    damage_per_level        = SPL_Damage_Firebolt;
    damageType                = DAM_MAGIC;
};

func int Spell_Logic_Firebolt (var int manaInvested)
{
    var C_Item  itm; // для проверко брони и оружия
    var C_NPC   her;     her = Hlp_GetNpc(PC_Hero);
    var int SPL_Cost_mana;  SPL_Cost_mana = SPL_Cost_Firebolt;
   
    // проверка на наличие маны у НПС для каста
    if (manaInvested == 0)
    {
        if (Npc_GetActiveSpellIsScroll(self))   { SPL_Cost_mana = SPL_Cost_Firebolt_Scroll; };
       
        if (self.attribute[ATR_MANA] < SPL_Cost_mana)   { return SPL_SENDSTOP; };  
    };  
       
    //
    //  Расчёт уровня заклинания
    //
    if (manaInvested == 0)
    {
        self.aivar[AIV_SpellLevel] = 4;     // Базовый урон 10*4=40
           
        if (!Npc_GetActiveSpellIsScroll(self)) // Только руна
        {
            if      (self.attribute[ATR_MANA] >= 80 * 5)    { self.aivar[AIV_SpellLevel]  += 5; }
            else if (self.attribute[ATR_MANA] >= 80 * 4)    { self.aivar[AIV_SpellLevel]  += 4; }
            else if (self.attribute[ATR_MANA] >= 80 * 3)    { self.aivar[AIV_SpellLevel]  += 3; }
            else if (self.attribute[ATR_MANA] >= 80 * 2)    { self.aivar[AIV_SpellLevel]  += 2; }
            else if (self.attribute[ATR_MANA] >= 80 * 1)    { self.aivar[AIV_SpellLevel]  += 1; };
        };
 /*      
        if (Npc_HasEquippedMeleeWeapon(self) == true)
        {
            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;   // доп урон за сетовый пояс
            };
        };
*/      
    };
   
    // текущий уровень заклинания
    var int    SpellLevel; SpellLevel = Npc_GetActiveSpellLevel(self);
   
    // увеличиваем уровень заклинания
    if (SpellLevel < self.aivar[AIV_SpellLevel])    
    {
        var string msg;
        msg = Str_Format("manainvested[%i}, Spell Lvl = %i", manaInvested, SpellLevel);
        Hlp_PrintConsole(msg);
        return SPL_NEXTLEVEL;
    };
   
    // отнимает ману и обнуляем аивер
    if (self.aivar[AIV_SpellLevel] != 0)
    {
        self.aivar[AIV_SpellLevel] = 0;
        return SPL_FORCEINVEST + Spl_Cost_Mana; // отнимает ману. устанавливаем новое значение manainvested.  
    };

    // каст
    return SPL_SENDCAST;
};

func void Spell_Cast_Firebolt()
{
    // счётчик для НПС (не герой)
    self.aivar[AIV_SelectSpell] += 1;
};

Попробовал кастануть FireBolt со свитка, а затем с руны, вселившись в Рокфеллера, имеющего 1000 ATR_MANA. Кастануть удалось, но свиток почему-то сожрал 5 ед. маны, вместо положенной 1 ед. Отладчик написал вот что:
Daedalus:
Content\Fight.src
namespace zB_MoveNpcWait
manainvested[0}, Spell Lvl = 1
manainvested[1}, Spell Lvl = 2
manainvested[2}, Spell Lvl = 3
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
manainvested[0}, Spell Lvl = 1
manainvested[1}, Spell Lvl = 2
manainvested[2}, Spell Lvl = 3
manainvested[3}, Spell Lvl = 4
manainvested[4}, Spell Lvl = 5
manainvested[5}, Spell Lvl = 6
manainvested[6}, Spell Lvl = 7
manainvested[7}, Spell Lvl = 8
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false

В чём может быть проблема?
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Daedalus:
func int Spell_Logic_Firebolt (var int manaInvested)
{
    var C_Item  itm; // для проверко брони и оружия
    var C_NPC   her;     her = Hlp_GetNpc(PC_Hero);
    var int SPL_Cost_mana; 
  
    // проверка на наличие маны у НПС для каста
    if (manaInvested == 0)
    {
        SPL_Cost_mana = SPL_Cost_Firebolt;
        if (Npc_GetActiveSpellIsScroll(self))   { SPL_Cost_mana = SPL_Cost_Firebolt_Scroll; };
      
        if (self.attribute[ATR_MANA] < SPL_Cost_mana)   { return SPL_SENDSTOP; }; 
    };
Пост автоматически объединён:

Daedalus:
// увеличиваем уровень заклинания
    if (SpellLevel < self.aivar[AIV_SpellLevel])   
    {
        var string msg;
        msg = Str_Format("Spell_Logic_Firebolt[%s %i] // manainvested =%i, Spell Lvl = %i", self.name, self.id,manaInvested, SpellLevel);
        Hlp_PrintConsole(msg);
        return SPL_NEXTLEVEL;
    };
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Daedalus:
func int Spell_Logic_Firebolt (var int manaInvested)
{
    var C_Item  itm; // для проверко брони и оружия
    var C_NPC   her;     her = Hlp_GetNpc(PC_Hero);
    var int SPL_Cost_mana;
 
    // проверка на наличие маны у НПС для каста
    if (manaInvested == 0)
    {
        SPL_Cost_mana = SPL_Cost_Firebolt;
        if (Npc_GetActiveSpellIsScroll(self))   { SPL_Cost_mana = SPL_Cost_Firebolt_Scroll; };
    
        if (self.attribute[ATR_MANA] < SPL_Cost_mana)   { return SPL_SENDSTOP; };
    };
Пост автоматически объединён:

Daedalus:
// увеличиваем уровень заклинания
    if (SpellLevel < self.aivar[AIV_SpellLevel]) 
    {
        var string msg;
        msg = Str_Format("Spell_Logic_Firebolt[%s %i] // manainvested =%i, Spell Lvl = %i", self.name, self.id,manaInvested, SpellLevel);
        Hlp_PrintConsole(msg);
        return SPL_NEXTLEVEL;
    };
Да, теперь работает как надо. Благодарю!
Daedalus:
Content\Fight.src
namespace zB_MoveNpcWait
Spell_Logic_Firebolt[Я 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Я 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Я 0] // manainvested =2, Spell Lvl = 3
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
onDamage_ScalinglHit: Сила рун[85] + ScalingStr[800] + ScalingDex[400]
onDamage_ScalinglHit --> CoefficientDamage =  100  [36 / 103]
onDamage_ScalinglHit[Гоблин]: ScalingDmg[1285] - Prt[5] = DmgTotal[1280]
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false

Но почему-то Spell Lvl поднимается только до 3 у свитка и до 8 у руны. Игра отсчитывает его с 0?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
Код:
    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;
    };
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Код:
    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;
    };
Да, теперь отображается корректнее:
Daedalus:
Content\Fight.src
namespace zB_MoveNpcWait
Spell_Logic_Firebolt[Я 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Я 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Я 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Я 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Я 0] // manainvested =1, Spell Lvl = 4
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 4
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
onDamage_ScalinglHit: Полуторный рудный меч[85] + ScalingStr[500] + ScalingDex[400]
onDamage_ScalinglHit --> CoefficientDamage =  100  [42 / 110]
onDamage_ScalinglHit[Волк]: ScalingDmg[985] - Prt[12] = DmgTotal[973]
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 9
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
Итак, проверил текущий код. Всё работает корректно.
Daedalus:
// ************
// SPL_FireBolt
// ************

const int SPL_Cost_Firebolt = 5;
const int SPL_Cost_Firebolt_Scroll = 1;
const int SPL_Damage_Firebolt = 10;

instance Spell_Firebolt (C_Spell_Proto)
{
    time_per_mana            = 0;
    damage_per_level        = SPL_Damage_Firebolt;
    damageType                = DAM_FIRE;
};

func int Spell_Logic_Firebolt (var int manaInvested)
{
    var C_Item  itm; // для проверок брони и оружия
    var C_NPC   her;     her = Hlp_GetNpc(PC_Hero);
    var int SPL_Cost_mana;
 
    // проверка на наличие маны у НПС для каста
    if (manaInvested == 0)
    {
        SPL_Cost_mana = SPL_Cost_Firebolt;
        if (Npc_GetActiveSpellIsScroll(self))   { SPL_Cost_mana = SPL_Cost_Firebolt_Scroll; };
     
        if (self.attribute[ATR_MANA] < SPL_Cost_mana)   { return SPL_SENDSTOP; };
    };
       
    //
    //  Расчёт уровня заклинания
    //
    if (manaInvested == 0)
    {
        self.aivar[AIV_SpellLevel] = 4;     // Базовый урон 10*4=40
           
        if (!Npc_GetActiveSpellIsScroll(self)) // Только руна
        {
            if      (self.attribute[ATR_MANA] >= 80 * 5)    { self.aivar[AIV_SpellLevel]  += 5; }
            else if (self.attribute[ATR_MANA] >= 80 * 4)    { self.aivar[AIV_SpellLevel]  += 4; }
            else if (self.attribute[ATR_MANA] >= 80 * 3)    { self.aivar[AIV_SpellLevel]  += 3; }
            else if (self.attribute[ATR_MANA] >= 80 * 2)    { self.aivar[AIV_SpellLevel]  += 2; }
            else if (self.attribute[ATR_MANA] >= 80 * 1)    { self.aivar[AIV_SpellLevel]  += 1; };
        };
       
        if (Npc_HasEquippedMeleeWeapon(self) == true)
        {
            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 (KDFBelt_Equipped == TRUE)
            //&& (KDFArmor_Equipped == TRUE)
            {
                self.aivar[AIV_SpellLevel] += 1;   // доп урон за сетовый пояс
            };
        };
       
    };
   
    // текущий уровень заклинания
    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;
    };
   
    // отнимает ману и обнуляем аивер
    if (self.aivar[AIV_SpellLevel] != 0)
    {
        self.aivar[AIV_SpellLevel] = 0;
        return SPL_FORCEINVEST + Spl_Cost_Mana; // отнимает ману. устанавливаем новое значение manainvested.  
    };

    // каст
    return SPL_SENDCAST;
};

func void Spell_Cast_Firebolt()
{
    // счётчик для НПС (не герой)
    self.aivar[AIV_SelectSpell] += 1;
};

Для теста кастовал с Рокфеллера (ATR_MANA = 1000) в следующей последовательности:
- Без брони (Spell Lvl = 4 + 5 = 9).
- В лёгкой мантии Огня (Spell Lvl = 4 +5 +1 = 10).
- В тяжёлой мантии Огня (Spell Lvl = 4 +5 +2 = 11).
- В тяжёлой мантии Огня с поясом мага Огня (Spell Lvl = 4 +5 + 2 +1 = 12).
- Только с поясом мага Огня (Spell Lvl = 4 +5 = 9).
Daedalus:
Content\Fight.src
namespace zB_MoveNpcWait
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =9, Spell Lvl = 10
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 10
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =9, Spell Lvl = 10
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 10
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =9, Spell Lvl = 10
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =10, Spell Lvl = 11
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 11
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =9, Spell Lvl = 10
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =10, Spell Lvl = 11
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =11, Spell Lvl = 12
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 12
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, Spell Lvl = 1
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, Spell Lvl = 2
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =2, Spell Lvl = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =3, Spell Lvl = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =4, Spell Lvl = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, Spell Lvl = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =7, Spell Lvl = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =8, Spell Lvl = 9
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, Spell Lvl = 9
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false

Повышение Spell Lvl от посохов тоже работает корректно.
При Spell Lvl = 12 каст совершается чуть дольше (менее секунды), т.е. кнопку атаки необходимо не нажать, а зажать, но ничего критичного.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
При Spell Lvl = 12 каст совершается чуть дольше (менее секунды), т.е. кнопку атаки необходимо не нажать, а зажать, но ничего критичного.
ты можешь использовать Конструктор заклинаний | zSpells от Saturas . он добавил возможность устанавливать необходимый уровень заклинания без инвестирования маны.
Daedalus:
    // отнимает ману + увеличиваем уровень заклинания + обнуляем аивер
    if (self.aivar[AIV_SpellLevel] != 0)
    {
        Spl_SetLevel(self,self.aivar[AIV_SpellLevel]);
        self.aivar[AIV_SpellLevel] = 0;
        return SPL_FORCEINVEST + Spl_Cost_Mana; // отнимает ману. устанавливаем новое значение manainvested.
    };

можешь попробовать. для популяризации проекта Saturas'a я скорректировал данные под zSpells. файлы в архиве. положить их нужно в папку авторан. проверял, всё работает.
 

Вложения

  • Spell_Logic_KirTheSeeker.zip
    32,1 KB · Просмотры: 3
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
но если использовать zSpell, то надо будет править B_SelectSpell. Впрочем всю необходимую информацию можно взять из инстанции руны:

Daedalus:
func void B_ReadyRune(var C_NPC slf, var int rune)
{
    if (!Npc_GetInvItem(slf, rune))
    {
        CreateInvItem(slf, rune);
    };
    Hlp_PrintConsole(Str_Format("  B_ReadyRune[%s.%i]  --> rune %s", slf.name, slf.id,item.description));
    // можно еще проверить хватает ли круга магии
    var int SpellId;    SpellId = item.spell;
    var int SpellMana;  SpellMana = item.COUNT[1];
 
    B_ReadySpell(slf, SpellId, SpellMana);
};


тюнингMDK
Daedalus:
    // ------ Skelett Magier ------
    if (slf.guild == GIL_SKELETON_MAGE)
    {
        // ------ Spruchzyklus bei SUMMON beginnen ------
        if (slf.aivar[AIV_SelectSpell] >= 6)
        {
            slf.aivar[AIV_SelectSpell] = 1;
        };

        if (!Npc_IsInState (oth, ZS_MagicFreeze))
        && (slf.aivar[AIV_SelectSpell] == 0)
        {
            B_ReadyRune(slf, ItRu_IceCube);
            return TRUE;
        };
        if (slf.aivar[AIV_SelectSpell] == 1)
        {
            B_ReadyRune(slf, ItRu_SumSkel);
            return TRUE;
        };

        B_ReadyRune(slf, ItRu_Icebolt);
        return TRUE;
    };
Daedalus:
    // ------ Skelett Magier ------
    if (slf.guild == GIL_SKELETON_MAGE)
    {
        if (Npc_HasItems (slf, ItRu_SumSkel) == 0)
        {
            CreateInvItems (slf, ItRu_SumSkel, 1);
        };

        if (Npc_HasItems (slf, ItRu_IceCube) == 0)
        {
            CreateInvItems (slf, ItRu_IceCube, 1);
        };

        if (Npc_HasItems (slf, ItRu_Icebolt) == 0)
        {
            CreateInvItems (slf, ItRu_Icebolt, 1);
        };

            // ------ Spruchzyklus bei SUMMON beginnen ------
            if (slf.aivar[AIV_SelectSpell] >= 6)
            {
                slf.aivar[AIV_SelectSpell] = 1;
            };

        if (!Npc_IsInState (oth, ZS_MagicFreeze))
        && (slf.aivar[AIV_SelectSpell] == 0)
        {
            B_ReadySpell (slf, SPL_IceCube,    SPL_Cost_IceCube);
            return TRUE;
        }
        else if (slf.aivar[AIV_SelectSpell] == 1)
        {
            B_ReadySpell (slf, SPL_SummonSkeleton, SPL_Cost_SummonSkeleton);
            return TRUE;
        }
        else
        {
            B_ReadySpell (slf, SPL_Icebolt, SPL_Cost_Icebolt);
            return TRUE;
        };
    };
 
Последнее редактирование:

KirTheSeeker

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
//Непосредственно задает уровень зарядки заклинания, количество допустимых уровней зарядки для заклинания в г2а - от 0 до 20. ////caster - кастующий нпс, self. level - уровень func void Spl_SetLevel(var C_NPC caster, var int level);
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
но если использовать zSpell, то надо будет править B_SelectSpell. Впрочем всю необходимую информацию можно взять из инстанции руны:
Я не понял, что здесь имеется в виду.

zSpells может позволить безболезненно расширить максимальное количество уровней заклинания до 20, я правильно понимаю?
Но для этого придётся править не сами скрипты заклинаний, а писать заменяющие их в AutoRun zSpell_XXX.d?
 

MW 7


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

ты попробовал версию в архиве?
Пост автоматически объединён:

Но для этого придётся править не сами скрипты заклинаний, а писать заменяющие их в AutoRun zSpell_XXX.d?/QUOTE]
не знаю скомпилирует ли он их в проект. это надо в том топике спрашивать. наверное скомпилирует.
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
ты попробовал версию в архиве?
Да, но почему-то ГГ и Рокфеллер кастуют по-разному. ГГ, чтобы кастануть FirBolt со свитка необходима зажимать клавишу атаки, а Рокфеллер кастует её с простого нажатия.
Daedalus:
Content\Fight.src
namespace zB_MoveNpcWait
Spell_Logic_Firebolt[Я 0] // manainvested =0, AIV_SpellLevel = 3
Spell_Logic_Firebolt[Я 0] // manainvested =1, AIV_SpellLevel = 0
  Spell_Collide_515[Овца.13773]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 3
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =1, AIV_SpellLevel = 0
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 4
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, AIV_SpellLevel = 0
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
  Spell_Collide_515[Гоблин.13706]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Полевой хищник.13681]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Полевой хищник.13681]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Полевой хищник.13681]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 6
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Полевой хищник.13681]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 7
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =6, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 8
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =0, AIV_SpellLevel = 5
Spell_Logic_Firebolt[Рокфеллер 0] // manainvested =5, AIV_SpellLevel = 0
  Spell_Collide_515[Волк.13896]  --> return COLL_DOEVERYTHING
Npc_IsEquippedItMwDAG...
Npc_IsEquippedItMwDAG --> return false
Npc_IsEquippedItMwRPR...
Npc_IsEquippedItMwRPR --> return false
Npc_IsEquippedItMw2hSTF...
Npc_IsEquippedItMw2hSTF --> return false
Уровни от снаряжения повышаются корректно. Понижения ещё не проверил.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.011
Благодарности
981
Баллы
295
так не понятно. добавь для отладчика инфу
Daedalus:
func void Spell_Cast_zFirebolt()
    {
        Hlp_PrintConsole(Str_Format("    Spell_Cast_zFirebolt[%s %i], self.name, self.id));
        // счётчик для НПС (не герой)
        self.aivar[AIV_SelectSpell] += 1;
    };
Пост автоматически объединён:

руны можно отдельные сделать, что бы удобно было тестить

Daedalus:
//---------------------------------------
//    Spell Item
//---------------------------------------
INSTANCE ItRu_FireBolt_KTS(C_Item)
{
    ItRu_FireBolt();
    spell   =     spellID_Firebolt;
};

INSTANCE ItSc_Firebolt_KTS(C_Item)
{
    ItSc_Firebolt();
    spell   =     spellID_Firebolt;
};
 
Сверху Снизу