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
|
// Chance resist debuff
|
||||||
if (!spell->IsPositive())
|
if (!spell->IsPositive())
|
||||||
{
|
{
|
||||||
bool bNegativeAura = false;
|
bool bNegativeAura = true;
|
||||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2547,13 +2547,32 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
|
|||||||
return SPELL_MISS_EVADE;
|
return SPELL_MISS_EVADE;
|
||||||
|
|
||||||
// For delayed spells immunity may be applied between missile launch and hit - check immunity for that case
|
// For delayed spells immunity may be applied between missile launch and hit - check immunity for that case
|
||||||
// disable effects to which unit is immune
|
if (m_spellInfo->Speed && (unit->IsImmunedToDamage(m_spellInfo) || unit->IsImmunedToSpell(m_spellInfo)))
|
||||||
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))))
|
|
||||||
return SPELL_MISS_IMMUNE;
|
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();
|
PrepareScriptHitHandlers();
|
||||||
CallScriptBeforeHitHandlers();
|
CallScriptBeforeHitHandlers();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user