mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-29 00:41:38 +02:00
* support for new creature abilities: hate, spell cost decreasing, spell vulnerability
* fixed crash when vcmiistari is applied on hero without spell book
This commit is contained in:
@ -2022,20 +2022,20 @@ int BattleInfo::calculateDmg(const CStack* attacker, const CStack* defender, con
|
||||
switch(attackerHero->getSecSkillLevel(1)) //archery
|
||||
{
|
||||
case 1: //basic
|
||||
dmgBonusMultiplier *= 1.1f;
|
||||
dmgBonusMultiplier += 0.1f;
|
||||
break;
|
||||
case 2: //advanced
|
||||
dmgBonusMultiplier *= 1.25f;
|
||||
dmgBonusMultiplier += 0.25f;
|
||||
break;
|
||||
case 3: //expert
|
||||
dmgBonusMultiplier *= 1.5f;
|
||||
dmgBonusMultiplier += 0.5f;
|
||||
break;
|
||||
}
|
||||
|
||||
if(attackerHero->getSecSkillLevel(1) > 0) //non-none level
|
||||
{
|
||||
//apply artifact premy to archery
|
||||
dmgBonusMultiplier *= (100.0f + attackerHero->valOfBonuses(HeroBonus::SECONDARY_SKILL_PREMY, 1)) / 100.0f;
|
||||
dmgBonusMultiplier += attackerHero->valOfBonuses(HeroBonus::SECONDARY_SKILL_PREMY, 1) / 100.0f;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -2043,13 +2043,13 @@ int BattleInfo::calculateDmg(const CStack* attacker, const CStack* defender, con
|
||||
switch(attackerHero->getSecSkillLevel(22)) //offense
|
||||
{
|
||||
case 1: //basic
|
||||
dmgBonusMultiplier *= 1.1f;
|
||||
dmgBonusMultiplier += 0.1f;
|
||||
break;
|
||||
case 2: //advanced
|
||||
dmgBonusMultiplier *= 1.2f;
|
||||
dmgBonusMultiplier += 0.2f;
|
||||
break;
|
||||
case 3: //expert
|
||||
dmgBonusMultiplier *= 1.3f;
|
||||
dmgBonusMultiplier += 0.3f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2069,6 +2069,11 @@ int BattleInfo::calculateDmg(const CStack* attacker, const CStack* defender, con
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//handling hate effect
|
||||
if( attacker->hasFeatureOfType(StackFeature::HATE, defender->creature->idNumber) )
|
||||
dmgBonusMultiplier += 0.5f;
|
||||
|
||||
//handling spell effects
|
||||
if(!shooting && defender->hasFeatureOfType(StackFeature::GENERAL_DAMAGE_REDUCTION, 0)) //eg. shield
|
||||
{
|
||||
@ -2267,6 +2272,23 @@ CStack * BattleInfo::generateNewStack(const CGHeroInstance * owner, int creature
|
||||
return ret;
|
||||
}
|
||||
|
||||
ui32 BattleInfo::getSpellCost(const CSpell * sp, const CGHeroInstance * caster)
|
||||
{
|
||||
ui32 ret = VLC->spellh->spells[sp->id].costs[caster->getSpellSchoolLevel(sp)];
|
||||
|
||||
//checking for friendly stacks reducing cost of the spell
|
||||
si32 manaReduction = 0;
|
||||
for(int g=0; g<stacks.size(); ++g)
|
||||
{
|
||||
if( stacks[g]->owner == caster->tempOwner && stacks[g]->hasFeatureOfType(StackFeature::CHANGES_SPELL_COST_FOR_ALLY) )
|
||||
{
|
||||
amin(manaReduction, stacks[g]->valOfFeatures(StackFeature::CHANGES_SPELL_COST_FOR_ALLY));
|
||||
}
|
||||
}
|
||||
|
||||
return ret + manaReduction;
|
||||
}
|
||||
|
||||
CStack * BattleInfo::getNextStack()
|
||||
{
|
||||
CStack *current = getStack(activeStack);
|
||||
|
Reference in New Issue
Block a user