diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 8ea3aef60..6417a0efe 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -7536,19 +7536,21 @@ void Mob::DispelMagic(Mob* caster, uint16 spell_id, int effect_value, int chance for (int slot = 0; slot < GetMaxTotalSlots(); ++slot) { auto s = buffs[slot].spellid; - // Suppressed slots store a sentinel in spellid, so use the underlying spell - // for any lookup into the spell data table. - auto dispel_spell_id = s == SPELL_SUPPRESSED ? buffs[slot].suppressedid : s; - if (!IsValidSpell(dispel_spell_id) || spells[dispel_spell_id].dispel_flag != 0 || IsDiscipline(dispel_spell_id)) { + // Suppressed buffs always return when suppression ends; they cannot be dispelled. + if (s == SPELL_SUPPRESSED) { continue; } - if (detrimental_only && !IsDetrimentalSpell(dispel_spell_id)) { + if (!IsValidSpell(s) || spells[s].dispel_flag != 0 || IsDiscipline(s)) { continue; } - if (beneficial_only && IsDetrimentalSpell(dispel_spell_id)) { + if (detrimental_only && !IsDetrimentalSpell(s)) { + continue; + } + + if (beneficial_only && IsDetrimentalSpell(s)) { continue; } @@ -7570,7 +7572,7 @@ void Mob::DispelMagic(Mob* caster, uint16 spell_id, int effect_value, int chance break; } else { //Additional restrictions on which buffs can be suppressed - if (spells[dispel_spell_id].short_buff_box) { + if (spells[s].short_buff_box) { continue; }