1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-12 02:28:11 +02:00

Merge and simplify resistance calculation

This commit is contained in:
AlexVinS 2014-05-18 14:21:05 +04:00
parent 7cf64a0628
commit b6b12ad8f6
3 changed files with 14 additions and 37 deletions

View File

@ -723,39 +723,6 @@ const CGHeroInstance * BattleInfo::getHero( PlayerColor player ) const
return nullptr;
}
std::vector<ui32> BattleInfo::calculateResistedStacks(const CSpell * sp, const CGHeroInstance * caster, const CGHeroInstance * hero2,
const std::vector<const CStack*> & affectedCreatures, PlayerColor casterSideOwner, ECastingMode::ECastingMode mode,
int usedSpellPower, int spellLevel, CRandomGenerator & rand) const
{
std::vector<ui32> ret;
for(auto & affectedCreature : affectedCreatures)
{
//non-negative spells should always succeed, unless immune
if(!sp->isNegative())// && (*it)->owner == casterSideOwner)
continue;
/*
const CGHeroInstance * bonusHero; //hero we should take bonuses from
if((*it)->owner == casterSideOwner)
bonusHero = caster;
else
bonusHero = hero2;*/
int prob = (affectedCreature)->magicResistance(); //probability of resistance in %
if(prob > 100) prob = 100;
//immunity from resistance
if(rand.nextInt(99) < prob)
{
ret.push_back((affectedCreature)->ID);
}
}
return ret;
}
PlayerColor BattleInfo::theOtherPlayer(PlayerColor player) const
{
return sides[!whatSide(player)].color;

View File

@ -144,8 +144,6 @@ struct DLL_LINKAGE BattleInfo : public CBonusSystemNode, public CBattleInfoCallb
const CGHeroInstance * getHero(PlayerColor player) const; //returns fighting hero that belongs to given player
std::vector<ui32> calculateResistedStacks(const CSpell * sp, const CGHeroInstance * caster, const CGHeroInstance * hero2, const std::vector<const CStack*> & affectedCreatures, PlayerColor casterSideOwner, ECastingMode::ECastingMode mode, int usedSpellPower, int spellLevel, CRandomGenerator & rand) const;
const CStack * battleGetStack(BattleHex pos, bool onlyAlive); //returns stack at given tile
const CGHeroInstance * battleGetOwner(const CStack * stack) const; //returns hero that owns given stack; nullptr if none
void localInit();

View File

@ -4057,9 +4057,21 @@ void CGameHandler::handleSpellCasting( SpellID spellID, int spellLvl, BattleHex
{
sc.affectedCres.insert (cre->ID);
}
//checking if creatures resist
sc.resisted = gs->curB->calculateResistedStacks(spell, caster, secHero, attackedCres, casterColor, mode, usedSpellPower, spellLvl, gs->getRandomGenerator());
//resistance is applied only to negative spells
if(spell->isNegative())
{
for(auto s : attackedCres)
{
const int prob = std::min((s)->magicResistance(), 100); //probability of resistance in %
if(gs->getRandomGenerator().nextInt(99) < prob)
{
sc.resisted.push_back(s->ID);
}
}
}
//calculating dmg to display
if (spellID == SpellID::DEATH_STARE || spellID == SpellID::ACID_BREATH_DAMAGE)