aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <krzysiek.7.5.4@gmail.com>2010-12-31 22:59:36 +0100
committerShauren <krzysiek.7.5.4@gmail.com>2010-12-31 22:59:36 +0100
commitcf62d7b776dcc29a9da2fadfd209c8445f6a9e6b (patch)
tree81954ba6b19296c00aaac6f21b600a921e53e61c /src/server/game/Entities/Unit
parent8ab453b4659da09126c329d00210ec189d3dee9b (diff)
Core/Items: Implemented spell penetration stat on items and use it from enchantments, original patch by zergtmn
Diffstat (limited to 'src/server/game/Entities/Unit')
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp29
1 files changed, 12 insertions, 17 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 3c8c5f670d6..6802974b7ac 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1555,12 +1555,14 @@ void Unit::CalcAbsorbResist(Unit *pVictim, SpellSchoolMask schoolMask, DamageEff
// Magic damage, check for resists
if ((schoolMask & SPELL_SCHOOL_MASK_NORMAL) == 0)
{
- float baseVictimResistance = (float) pVictim->GetResistance(GetFirstSchoolInMask(schoolMask));
- float ignoredResistance = (float) GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask);
+ float baseVictimResistance = float(pVictim->GetResistance(GetFirstSchoolInMask(schoolMask)));
+ float ignoredResistance = float(GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, schoolMask));
+ if (Player* player = ToPlayer())
+ ignoredResistance += float(player->GetSpellPenetrationItemMod());
float victimResistance = baseVictimResistance + ignoredResistance;
- uint32 BOSS_LEVEL = 83;
- float BOSS_RESISTANCE_CONSTANT = 510.0;
+ static const uint32 BOSS_LEVEL = 83;
+ static const float BOSS_RESISTANCE_CONSTANT = 510.0;
uint32 level = getLevel();
float resistanceConstant = 0.0f;
@@ -1571,7 +1573,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim, SpellSchoolMask schoolMask, DamageEff
float averageResist = victimResistance / (victimResistance + resistanceConstant);
float discreteResistProbability[11];
- for (int i = 0; i < 11; i++)
+ for (uint32 i = 0; i < 11; ++i)
{
discreteResistProbability[i] = 0.5f - 2.5f * fabs(0.1f * i - averageResist);
if (discreteResistProbability[i] < 0.0f)
@@ -1585,32 +1587,25 @@ void Unit::CalcAbsorbResist(Unit *pVictim, SpellSchoolMask schoolMask, DamageEff
discreteResistProbability[2] = 2.5f * averageResist;
}
- float r = (float)rand_norm();
- int i = 0;
+ float r = float(rand_norm());
+ uint32 i = 0;
float probabilitySum = discreteResistProbability[0];
while (r >= probabilitySum && i < 10)
- {
- i++;
- probabilitySum += discreteResistProbability[i];
- }
+ probabilitySum += discreteResistProbability[++i];
float damageResisted = float(damage * i / 10);
AuraEffectList const &ResIgnoreAurasAb = GetAuraEffectsByType(SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST);
for (AuraEffectList::const_iterator j = ResIgnoreAurasAb.begin(); j != ResIgnoreAurasAb.end(); ++j)
- {
- if ((*j)->GetMiscValue() & schoolMask
- && (*j)->IsAffectedOnSpell(spellInfo))
+ if (((*j)->GetMiscValue() & schoolMask) && (*j)->IsAffectedOnSpell(spellInfo))
AddPctN(damageResisted, -(*j)->GetAmount());
- }
AuraEffectList const &ResIgnoreAuras = GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
for (AuraEffectList::const_iterator j = ResIgnoreAuras.begin(); j != ResIgnoreAuras.end(); ++j)
- {
if ((*j)->GetMiscValue() & schoolMask)
AddPctN(damageResisted, -(*j)->GetAmount());
- }
+
dmgInfo.ResistDamage(uint32(damageResisted));
}