mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
* more appropriate calculation of spell level by SPELL bonus
This commit is contained in:
parent
7002e73908
commit
f41c85212f
@ -636,15 +636,15 @@ void CArtHandler::addBonuses()
|
|||||||
//Sea Captain's Hat
|
//Sea Captain's Hat
|
||||||
giveArtBonus(123,Bonus::WHIRLPOOL_PROTECTION,0);
|
giveArtBonus(123,Bonus::WHIRLPOOL_PROTECTION,0);
|
||||||
giveArtBonus(123,Bonus::SEA_MOVEMENT,+500);
|
giveArtBonus(123,Bonus::SEA_MOVEMENT,+500);
|
||||||
giveArtBonus(123,Bonus::SPELL,3,0);
|
giveArtBonus(123,Bonus::SPELL,3,0, Bonus::INDEPENDENT_MAX);
|
||||||
giveArtBonus(123,Bonus::SPELL,3,1);
|
giveArtBonus(123,Bonus::SPELL,3,1, Bonus::INDEPENDENT_MAX);
|
||||||
|
|
||||||
giveArtBonus(124,Bonus::SPELLS_OF_LEVEL,3,1); //Spellbinder's Hat
|
giveArtBonus(124,Bonus::SPELLS_OF_LEVEL,3,1); //Spellbinder's Hat
|
||||||
giveArtBonus(125,Bonus::ENEMY_CANT_ESCAPE,0); //Shackles of War
|
giveArtBonus(125,Bonus::ENEMY_CANT_ESCAPE,0); //Shackles of War
|
||||||
giveArtBonus(126,Bonus::BLOCK_SPELLS_ABOVE_LEVEL,0);//Orb of Inhibition
|
giveArtBonus(126,Bonus::BLOCK_SPELLS_ABOVE_LEVEL,0);//Orb of Inhibition
|
||||||
|
|
||||||
//Armageddon's Blade
|
//Armageddon's Blade
|
||||||
giveArtBonus(128, Bonus::SPELL, 3, 26);
|
giveArtBonus(128, Bonus::SPELL, 3, 26, Bonus::INDEPENDENT_MAX);
|
||||||
giveArtBonus(128, Bonus::SPELL_IMMUNITY, 26);
|
giveArtBonus(128, Bonus::SPELL_IMMUNITY, 26);
|
||||||
ART_ATTACK_AND_DEFENSE(128, +3);
|
ART_ATTACK_AND_DEFENSE(128, +3);
|
||||||
ART_PRIM_SKILL(128, 2, +3);
|
ART_PRIM_SKILL(128, 2, +3);
|
||||||
|
@ -1285,6 +1285,10 @@ ui8 CGHeroInstance::getSpellSchoolLevel(const CSpell * spell, int *outSelectedSc
|
|||||||
|
|
||||||
|
|
||||||
amax(skill, valOfBonuses(Bonus::MAGIC_SCHOOL_SKILL, 0)); //any school bonus
|
amax(skill, valOfBonuses(Bonus::MAGIC_SCHOOL_SKILL, 0)); //any school bonus
|
||||||
|
if (hasBonusOfType(Bonus::SPELL, spell->id))
|
||||||
|
{
|
||||||
|
amax(skill, valOfBonuses(Bonus::SPELL, spell->id));
|
||||||
|
}
|
||||||
assert(skill >= 0 && skill <= 3);
|
assert(skill >= 0 && skill <= 3);
|
||||||
return skill;
|
return skill;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,8 @@ int DLL_EXPORT BonusList::totalValue() const
|
|||||||
int percentToBase = 0;
|
int percentToBase = 0;
|
||||||
int percentToAll = 0;
|
int percentToAll = 0;
|
||||||
int additive = 0;
|
int additive = 0;
|
||||||
|
int indepMax = 0;
|
||||||
|
bool hasIndepMax = false;
|
||||||
|
|
||||||
for(const_iterator i = begin(); i != end(); i++)
|
for(const_iterator i = begin(); i != end(); i++)
|
||||||
{
|
{
|
||||||
@ -38,12 +40,28 @@ int DLL_EXPORT BonusList::totalValue() const
|
|||||||
break;
|
break;
|
||||||
case Bonus::ADDITIVE_VALUE:
|
case Bonus::ADDITIVE_VALUE:
|
||||||
additive += i->val;
|
additive += i->val;
|
||||||
|
break;
|
||||||
|
case Bonus::INDEPENDENT_MAX:
|
||||||
|
if (!indepMax)
|
||||||
|
{
|
||||||
|
indepMax = i->val;
|
||||||
|
hasIndepMax = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
amax(indepMax, i->val);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int modifiedBase = base + (base * percentToBase) / 100;
|
int modifiedBase = base + (base * percentToBase) / 100;
|
||||||
modifiedBase += additive;
|
modifiedBase += additive;
|
||||||
return (modifiedBase * (100 + percentToAll)) / 100;
|
int valFirst = (modifiedBase * (100 + percentToAll)) / 100;
|
||||||
|
if (hasIndepMax)
|
||||||
|
return std::max(valFirst, indepMax);
|
||||||
|
else
|
||||||
|
return valFirst;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DLL_EXPORT Bonus * BonusList::getFirst(const CSelector &selector) const
|
const DLL_EXPORT Bonus * BonusList::getFirst(const CSelector &selector) const
|
||||||
|
@ -208,7 +208,8 @@ struct DLL_EXPORT Bonus
|
|||||||
ADDITIVE_VALUE,
|
ADDITIVE_VALUE,
|
||||||
BASE_NUMBER,
|
BASE_NUMBER,
|
||||||
PERCENT_TO_ALL,
|
PERCENT_TO_ALL,
|
||||||
PERCENT_TO_BASE
|
PERCENT_TO_BASE,
|
||||||
|
INDEPENDENT_MAX //used for SPELL bonus
|
||||||
};
|
};
|
||||||
|
|
||||||
ui8 duration; //uses BonusDuration values
|
ui8 duration; //uses BonusDuration values
|
||||||
@ -220,7 +221,7 @@ struct DLL_EXPORT Bonus
|
|||||||
ui8 source;//source type" uses BonusSource values - what gave that bonus
|
ui8 source;//source type" uses BonusSource values - what gave that bonus
|
||||||
si32 val;
|
si32 val;
|
||||||
ui32 id; //source id: id of object/artifact/spell
|
ui32 id; //source id: id of object/artifact/spell
|
||||||
ui8 valType;
|
ui8 valType; //by ValueType enum
|
||||||
|
|
||||||
si32 additionalInfo;
|
si32 additionalInfo;
|
||||||
ui8 effectRange; //if not NO_LIMIT, bonus will be ommitted by default
|
ui8 effectRange; //if not NO_LIMIT, bonus will be ommitted by default
|
||||||
|
Loading…
x
Reference in New Issue
Block a user