Core/Spells: handle SPELL_AURA_MOD_DEBUFF_RESISTANCE only for auras. fixes sacred cleansing causing the whole spell to be resisted.
This commit is contained in:
@@ -2465,12 +2465,12 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spell)
|
||||
// Chance resist debuff
|
||||
if (!spell->IsPositive())
|
||||
{
|
||||
bool bNegativeAura = false;
|
||||
bool bNegativeAura = true;
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
if (spell->Effects[i].ApplyAuraName != 0)
|
||||
if (spell->Effects[i].ApplyAuraName == 0)
|
||||
{
|
||||
bNegativeAura = true;
|
||||
bNegativeAura = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2547,13 +2547,32 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
|
||||
return SPELL_MISS_EVADE;
|
||||
|
||||
// For delayed spells immunity may be applied between missile launch and hit - check immunity for that case
|
||||
// disable effects to which unit is immune
|
||||
for (uint32 effectNumber = 0; effectNumber < MAX_SPELL_EFFECTS; ++effectNumber)
|
||||
if (effectMask & (1 << effectNumber) && unit->IsImmunedToSpellEffect(m_spellInfo, effectNumber))
|
||||
effectMask &= ~(1 << effectNumber);
|
||||
if (!effectMask || (m_spellInfo->Speed && (unit->IsImmunedToDamage(m_spellInfo) || unit->IsImmunedToSpell(m_spellInfo))))
|
||||
if (m_spellInfo->Speed && (unit->IsImmunedToDamage(m_spellInfo) || unit->IsImmunedToSpell(m_spellInfo)))
|
||||
return SPELL_MISS_IMMUNE;
|
||||
|
||||
// disable effects to which unit is immune
|
||||
SpellMissInfo returnVal = SPELL_MISS_IMMUNE;
|
||||
for (uint32 effectNumber = 0; effectNumber < MAX_SPELL_EFFECTS; ++effectNumber)
|
||||
{
|
||||
if (effectMask & (1 << effectNumber))
|
||||
if (unit->IsImmunedToSpellEffect(m_spellInfo, effectNumber))
|
||||
effectMask &= ~(1 << effectNumber);
|
||||
else if (m_spellInfo->Effects[effectNumber].IsAura() && !m_spellInfo->IsPositiveEffect(effectNumber))
|
||||
{
|
||||
int32 debuff_resist_chance = unit->GetMaxPositiveAuraModifierByMiscValue(SPELL_AURA_MOD_DEBUFF_RESISTANCE, int32(m_spellInfo->Dispel));
|
||||
debuff_resist_chance += unit->GetMaxNegativeAuraModifierByMiscValue(SPELL_AURA_MOD_DEBUFF_RESISTANCE, int32(m_spellInfo->Dispel));
|
||||
|
||||
if (debuff_resist_chance > 0)
|
||||
if (irand(0,10000) <= (debuff_resist_chance * 100))
|
||||
{
|
||||
effectMask &= ~(1 << effectNumber);
|
||||
returnVal = SPELL_MISS_RESIST;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!effectMask)
|
||||
return returnVal;
|
||||
|
||||
PrepareScriptHitHandlers();
|
||||
CallScriptBeforeHitHandlers();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user