From 9a657e7d6a975f60420ea68f2e5ff4c9df704bb8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 31 Jan 2026 20:31:19 +0000 Subject: [PATCH] Resolve merge conflict with updated base branch Co-authored-by: Valorith <76063792+Valorith@users.noreply.github.com> --- zone/spell_effects.cpp | 87 ++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index a88e48e5d..a99d60084 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -4693,49 +4693,52 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses, bool suppress, uint32 su if (!IsValidSpell(buffs[slot].spellid)) return; const auto& spell = spells[buffs[slot].spellid]; - // Restore nimbus (visual aura) effect before processing individual spell effects, - // mirroring Client::ReapplyBuff and bot buff restoration behavior. - if (spell.nimbus_effect) { - SetNimbusEffect(spell.nimbus_effect); - } - for (int i = 0; i < EFFECT_COUNT; i++) { - switch (spell.effect_id[i]) { - case SpellEffect::Illusion: - ApplySpellEffectIllusion(spell.id, entity_list.GetMobID(buffs[slot].casterid), slot, spell.base_value[i], spell.limit_value[i], spell.max_value[i]); - break; - case SpellEffect::Silence: - Silence(true); - break; - case SpellEffect::Amnesia: - Amnesia(true); - break; - case SpellEffect::AddMeleeProc: - case SpellEffect::WeaponProc: - AddProcToWeapon(GetProcID(buffs[slot].spellid, i), false, 100 + spell.limit_value[i], buffs[slot].spellid, buffs[slot].casterlevel, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::MELEE_PROC)); - break; - case SpellEffect::DefensiveProc: - AddDefensiveProc(GetProcID(buffs[slot].spellid, i), 100 + spell.limit_value[i], buffs[slot].spellid, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::DEFENSIVE_PROC)); - break; - case SpellEffect::RangedProc: - AddRangedProc(GetProcID(buffs[slot].spellid, i), 100 + spell.limit_value[i], buffs[slot].spellid, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::RANGED_PROC)); - break; - case SpellEffect::Levitate: - { - // Restore levitate visual effects after suppression expires - if (!zone->CanLevitate()) { - SendAppearancePacket(AppearanceType::FlyMode, 0); - BuffFadeByEffect(SpellEffect::Levitate); - } else { - if (spell.limit_value[i] == 1) { - SendAppearancePacket(AppearanceType::FlyMode, EQ::constants::GravityBehavior::LevitateWhileRunning); - } else { - SendAppearancePacket(AppearanceType::FlyMode, EQ::constants::GravityBehavior::Levitating); - } - } - break; + if (IsValidSpell(buffs[slot].spellid)) { + const auto &spell = spells[buffs[slot].spellid]; + // Restore nimbus (visual aura) effect before processing individual spell effects, + // mirroring Client::ReapplyBuff and bot buff restoration behavior. + if (spell.nimbus_effect) { + SetNimbusEffect(spell.nimbus_effect); } - default: - break; + for (int i = 0; i < EFFECT_COUNT; i++) { + switch (spell.effect_id[i]) { + case SpellEffect::Illusion: + ApplySpellEffectIllusion(spell.id, entity_list.GetMobID(buffs[slot].casterid), slot, spell.base_value[i], spell.limit_value[i], spell.max_value[i]); + break; + case SpellEffect::Silence: + Silence(true); + break; + case SpellEffect::Amnesia: + Amnesia(true); + break; + case SpellEffect::AddMeleeProc: + case SpellEffect::WeaponProc: + AddProcToWeapon(GetProcID(buffs[slot].spellid, i), false, 100 + spell.limit_value[i], buffs[slot].spellid, buffs[slot].casterlevel, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::MELEE_PROC)); + break; + case SpellEffect::DefensiveProc: + AddDefensiveProc(GetProcID(buffs[slot].spellid, i), 100 + spell.limit_value[i], buffs[slot].spellid, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::DEFENSIVE_PROC)); + break; + case SpellEffect::RangedProc: + AddRangedProc(GetProcID(buffs[slot].spellid, i), 100 + spell.limit_value[i], buffs[slot].spellid, GetSpellProcLimitTimer(buffs[slot].spellid, ProcType::RANGED_PROC)); + break; + case SpellEffect::Levitate: + { + // Restore levitate visual effects after suppression expires + if (!zone->CanLevitate()) { + SendAppearancePacket(AppearanceType::FlyMode, 0); + BuffFadeByEffect(SpellEffect::Levitate); + } else { + if (spell.limit_value[i] == 1) { + SendAppearancePacket(AppearanceType::FlyMode, EQ::constants::GravityBehavior::LevitateWhileRunning); + } else { + SendAppearancePacket(AppearanceType::FlyMode, EQ::constants::GravityBehavior::Levitating); + } + } + break; + } + default: + break; + } } } }