Sfoglia il codice sorgente

Get rid of DefaultSpellMechanics::calculateHealedHP

AlexVinS 10 anni fa
parent
commit
c050fde3f9
2 ha cambiato i file con 16 aggiunte e 28 eliminazioni
  1. 16 25
      lib/spells/CDefaultSpellMechanics.cpp
  2. 0 3
      lib/spells/CDefaultSpellMechanics.h

+ 16 - 25
lib/spells/CDefaultSpellMechanics.cpp

@@ -499,27 +499,6 @@ int DefaultSpellMechanics::calculateDuration(const CGHeroInstance * caster, int
 		return caster->getPrimSkillLevel(PrimarySkill::SPELL_POWER) + caster->valOfBonuses(Bonus::SPELL_DURATION);
 }
 
-ui32 DefaultSpellMechanics::calculateHealedHP(const CGHeroInstance* caster, const CStack* stack, const CStack* sacrificedStack) const
-{
-	int healedHealth;
-
-	if(!owner->isHealingSpell())
-	{
-		logGlobal->errorStream() << "calculateHealedHP called for nonhealing spell "<< owner->name;
-		return 0;
-	}
-
-	const int spellPowerSkill = caster->getPrimSkillLevel(PrimarySkill::SPELL_POWER);
-	const int levelPower = owner->getPower(caster->getSpellSchoolLevel(owner));
-
-	if (owner->id == SpellID::SACRIFICE && sacrificedStack)
-		healedHealth = (spellPowerSkill + sacrificedStack->MaxHealth() + levelPower) * sacrificedStack->count;
-	else
-		healedHealth = spellPowerSkill * owner->power + levelPower; //???
-	healedHealth = caster->getSpellBonus(owner, healedHealth, stack);
-	return stack->calculateHealedHealthPoints(healedHealth, owner->isRisingSpell());
-}
-
 void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env, BattleSpellCastParameters & parameters, SpellCastContext & ctx) const
 {
 	int effectLevel = parameters.spellLvl;
@@ -673,26 +652,38 @@ void DefaultSpellMechanics::applyBattleEffects(const SpellCastEnvironment * env,
 			int unitSpellPower = parameters.casterStack->valOfBonuses(Bonus::SPECIFIC_SPELL_POWER, owner->id.toEnum());
 			if(unitSpellPower)
 				hpGained = parameters.casterStack->count * unitSpellPower; //Archangel
-			else //Faerie Dragon-like effect - unused so far
+			else //Faerie Dragon-like effect - commanders(?)
 			{			
 				parameters.usedSpellPower = parameters.casterStack->valOfBonuses(Bonus::CREATURE_SPELL_POWER) * parameters.casterStack->count / 100;
-				hpGained =  parameters.usedSpellPower * owner->power + owner->getPower(effectLevel);
+				hpGained = parameters.usedSpellPower * owner->power + owner->getPower(effectLevel);
 			}
 		}
+		else
+		{
+			if (owner->id == SpellID::SACRIFICE && parameters.selectedStack)
+				hpGained = (parameters.usedSpellPower + parameters.selectedStack->MaxHealth() + owner->getPower(effectLevel)) * parameters.selectedStack->count;
+			else
+				hpGained = parameters.usedSpellPower * owner->power + owner->getPower(effectLevel); //???
+		}
 		StacksHealedOrResurrected shr;
 		shr.lifeDrain = false;
 		shr.tentHealing = false;
+
+		const bool resurrect = owner->isRisingSpell();
 		for(auto & attackedCre : ctx.attackedCres)
 		{
 			StacksHealedOrResurrected::HealInfo hi;
 			hi.stackID = (attackedCre)->ID;
 			if (parameters.casterStack) //casted by creature
 			{
-				const bool resurrect = owner->isRisingSpell();
 				hi.healedHP = attackedCre->calculateHealedHealthPoints(hpGained, resurrect);
 			}
 			else
-				hi.healedHP = calculateHealedHP(parameters.casterHero, attackedCre, parameters.selectedStack); //Casted by hero
+			{
+				int stackHPgained = parameters.casterHero->getSpellBonus(owner, hpGained, attackedCre); 
+				hi.healedHP = attackedCre->calculateHealedHealthPoints(stackHPgained, resurrect);		
+			}
+				
 			hi.lowLevelResurrection = (effectLevel <= 1) && (owner->id == SpellID::RESURRECTION);
 			shr.healedStacks.push_back(hi);
 		}

+ 0 - 3
lib/spells/CDefaultSpellMechanics.h

@@ -55,9 +55,6 @@ protected:
 
 	virtual int calculateDuration(const CGHeroInstance * caster, int usedSpellPower) const;
 
-	///calculate healed HP for all spells casted by hero
-	ui32 calculateHealedHP(const CGHeroInstance * caster, const CStack * stack, const CStack * sacrificedStack) const;
-
 	///actual adventure cast implementation
 	virtual ESpellCastResult applyAdventureEffects(const SpellCastEnvironment * env, AdventureSpellCastParameters & parameters) const;