diff options
author | QAston <none@none> | 2010-07-16 14:23:03 +0200 |
---|---|---|
committer | QAston <none@none> | 2010-07-16 14:23:03 +0200 |
commit | b406321c01235d7cc35a834a6ce3f7e6da74b37a (patch) | |
tree | 3e87dd13c388297f2a5395f9671854fb9a3651f1 | |
parent | 719f13874e83b19ac3b096eda877face6691de28 (diff) |
*Prevent possible problems with application of negative auras with 0 duration, now only spell hits which were diminished are immuned.
*Remove old code of SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE forgotten in c84e55b632.
--HG--
branch : trunk
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 19 |
3 files changed, 13 insertions, 13 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4a9094f1c5c..61fc98e3ae2 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12710,10 +12710,10 @@ void Unit::IncrDiminishing(DiminishingGroup group) m_Diminishing.push_back(DiminishingReturn(group,getMSTime(),DIMINISHING_LEVEL_2)); } -void Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration,Unit* caster,DiminishingLevels Level, int32 limitduration) +float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration,Unit* caster,DiminishingLevels Level, int32 limitduration) { if (duration == -1 || group == DIMINISHING_NONE || caster->IsFriendlyTo(this)) - return; + return 1.0f; // test pet/charm masters instead pets/charmeds Unit const* targetOwner = GetCharmerOrOwner(); @@ -12767,6 +12767,7 @@ void Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration,Un } duration = int32(duration * mod); + return mod; } void Unit::ApplyDiminishingAura(DiminishingGroup group, bool apply) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 2051123dfb5..347a862b5d4 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1106,7 +1106,7 @@ class Unit : public WorldObject DiminishingLevels GetDiminishing(DiminishingGroup group); void IncrDiminishing(DiminishingGroup group); - void ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration,Unit* caster, DiminishingLevels Level, int32 limitduration); + float ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration,Unit* caster, DiminishingLevels Level, int32 limitduration); void ApplyDiminishingAura(DiminishingGroup group, bool apply); void ClearDiminishings() { m_Diminishing.clear(); } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 650f464d56b..a6185085161 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1344,7 +1344,15 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool // Now Reduce spell duration using data received at spell hit int32 duration = m_spellAura->GetMaxDuration(); int32 limitduration = GetDiminishingReturnsLimitDuration(m_diminishGroup,aurSpellInfo); - unit->ApplyDiminishingToDuration(m_diminishGroup, duration, m_originalCaster, m_diminishLevel,limitduration); + float diminishMod = unit->ApplyDiminishingToDuration(m_diminishGroup, duration, m_originalCaster, m_diminishLevel,limitduration); + + // unit is immune to aura if it was diminished to 0 duration + if (diminishMod == 0.0f) + { + m_spellAura->Remove(); + return SPELL_MISS_IMMUNE; + } + ((UnitAura*)m_spellAura)->SetDiminishGroup(m_diminishGroup); bool positive = IsPositiveSpell(m_spellAura->GetId()); @@ -1358,12 +1366,6 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool if (IsChanneledSpell(m_spellInfo)) m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this); - if (duration == 0 && !positive) - { - m_spellAura->Remove(); - return SPELL_MISS_IMMUNE; - } - if (duration != m_spellAura->GetMaxDuration()) { m_spellAura->SetMaxDuration(duration); @@ -6784,9 +6786,6 @@ int32 Spell::CalculateDamageDone(Unit *unit, const uint32 effectMask, float *mul if (m_caster->GetTypeId() == TYPEID_UNIT) m_damage = float(m_damage) * unit->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask); - if (int32 reducedPct = unit->GetMaxNegativeAuraModifier(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE)) - m_damage = m_damage * (100 + reducedPct) / 100; - if (m_caster->GetTypeId() == TYPEID_PLAYER) { uint32 targetAmount = m_UniqueTargetInfo.size(); |