From bd9f1bd8ce951bd867221c957a7f018068259bd6 Mon Sep 17 00:00:00 2001 From: Emagi Date: Tue, 21 Jan 2025 07:37:22 -0500 Subject: [PATCH] Fix accidentally not nullifying the spell pointer when we remove a spell effect --- source/WorldServer/Entity.cpp | 1 + source/WorldServer/LuaInterface.cpp | 7 ++----- source/WorldServer/Player.cpp | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/source/WorldServer/Entity.cpp b/source/WorldServer/Entity.cpp index bd3554d..b32841c 100644 --- a/source/WorldServer/Entity.cpp +++ b/source/WorldServer/Entity.cpp @@ -1174,6 +1174,7 @@ void Entity::RemoveSpellEffect(LuaSpell* spell) { GetZone()->GetSpellProcess()->RemoveTargetFromSpell(spell, this); memset(&GetInfoStruct()->spell_effects[44], 0, sizeof(SpellEffects)); GetInfoStruct()->spell_effects[44].spell_id = 0xFFFFFFFF; + GetInfoStruct()->spell_effects[44].spell = nullptr; changed = true; info_changed = true; AddChangedZoneSpawn(); diff --git a/source/WorldServer/LuaInterface.cpp b/source/WorldServer/LuaInterface.cpp index c775913..5e38418 100644 --- a/source/WorldServer/LuaInterface.cpp +++ b/source/WorldServer/LuaInterface.cpp @@ -1676,15 +1676,12 @@ void LuaInterface::DeletePendingSpells(bool all) { if(spell->targets.size() > 0) { spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); for (int8 i = 0; i < spell->targets.size(); i++) { - Spawn* target = spell->caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + Spawn* target = spell->zone->GetSpawnByID(spell->targets.at(i)); if (!target || !target->IsEntity()) continue; - ZoneServer* targetZone = target->GetZone(); - if(!targetZone) - continue; if(!spellDeleted) - targetZone->GetSpellProcess()->DeleteActiveSpell(spell, true); + spell->zone->GetSpellProcess()->DeleteActiveSpell(spell, true); spellDeleted = true; } diff --git a/source/WorldServer/Player.cpp b/source/WorldServer/Player.cpp index 6a545a4..f7afcc1 100644 --- a/source/WorldServer/Player.cpp +++ b/source/WorldServer/Player.cpp @@ -3540,6 +3540,7 @@ void Player::RemoveSpellEffect(LuaSpell* spell){ if (found) { memset(&GetInfoStruct()->spell_effects[44], 0, sizeof(SpellEffects)); GetInfoStruct()->spell_effects[44].spell_id = 0xFFFFFFFF; + GetInfoStruct()->spell_effects[44].spell = nullptr; changed = true; info_changed = true; AddChangedZoneSpawn();