diff --git a/config/defaultMods.json b/config/defaultMods.json index 777aa87f6..ec1d8a677 100644 --- a/config/defaultMods.json +++ b/config/defaultMods.json @@ -50,6 +50,11 @@ "type" : "SPELL_DAMAGE", //Default spell damage "val" : 100, "valueType" : "BASE_NUMBER" + }, + { + "type" : "MAX_LEARNABLE_SPELL_LEVEL", //Hero can always learn level 1 and 2 spells + "val" : 2, + "valueType" : "BASE_NUMBER" } ], "heroBaseBonuses": diff --git a/config/skills.json b/config/skills.json index 6b21b6041..9a835f68a 100644 --- a/config/skills.json +++ b/config/skills.json @@ -198,8 +198,7 @@ "base" : { "effects" : { "main" : { - "subtype" : "skill.wisdom", - "type" : "SECONDARY_SKILL_PREMY", + "type" : "MAX_LEARNABLE_SPELL_LEVEL", "valueType" : "BASE_NUMBER" } } diff --git a/lib/HeroBonus.h b/lib/HeroBonus.h index 9dc470ccd..11f747736 100644 --- a/lib/HeroBonus.h +++ b/lib/HeroBonus.h @@ -346,6 +346,7 @@ public: BONUS_NAME(HERO_GRANTS_ATTACKS) /*If hero can grant additional attacks to creature, value is number of attacks, subtype is creatureID*/\ BONUS_NAME(BONUS_DAMAGE_PERCENTAGE) /*If hero can grant conditional damage to creature, value is percentage, subtype is creatureID*/\ BONUS_NAME(BONUS_DAMAGE_CHANCE) /*If hero can grant additional damage to creature, value is chance, subtype is creatureID*/\ + BONUS_NAME(MAX_LEARNABLE_SPELL_LEVEL) /*This can work as wisdom before. val = max learnable spell level*/\ /* end of list */ diff --git a/lib/mapObjects/CGHeroInstance.cpp b/lib/mapObjects/CGHeroInstance.cpp index 3fe73b745..b2a95f28f 100644 --- a/lib/mapObjects/CGHeroInstance.cpp +++ b/lib/mapObjects/CGHeroInstance.cpp @@ -1078,7 +1078,7 @@ const std::set & CGHeroInstance::getSpellsInSpellbook() const int CGHeroInstance::maxSpellLevel() const { - return std::min(GameConstants::SPELL_LEVELS, 2 + valOfBonuses(Selector::typeSubtype(Bonus::SECONDARY_SKILL_PREMY, SecondarySkill::WISDOM))); + return std::min(GameConstants::SPELL_LEVELS, valOfBonuses(Selector::type()(Bonus::MAX_LEARNABLE_SPELL_LEVEL))); } void CGHeroInstance::deserializationFix() diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index e26728e01..2c3f95f5a 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -682,11 +682,8 @@ void CGameHandler::changeSecSkill(const CGHeroInstance * hero, SecondarySkill wh sss.abs = abs; sendAndApply(&sss); - if (which == SecondarySkill::WISDOM) - { - if (hero->visitedTown) - giveSpells(hero->visitedTown, hero); - } + if (hero->visitedTown) + giveSpells(hero->visitedTown, hero); } void CGameHandler::endBattle(int3 tile, const CGHeroInstance * heroAttacker, const CGHeroInstance * heroDefender)