From e9137d4d4d2f89fca62ebdd54cc5392729b8bff8 Mon Sep 17 00:00:00 2001 From: "Riley S." Date: Sat, 30 Nov 2024 14:18:32 -0500 Subject: [PATCH] fix(Core/Spells): Resolve invalid spell casts on dead players when the cast is valid. (#20712) * Initial fix for #20509 * small revert * Two way visibility between ghosts. * clean up temporary changes. * clean up debug code. * small typo * revert .gitignore * fix codestyle * Add missing flag, resolve issue where cast was failing while alive. * Update SpellInfo.cpp Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --------- Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- src/server/game/Entities/Creature/Creature.cpp | 4 +++- src/server/game/Spells/SpellInfo.cpp | 12 +++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 27c841836..6617ba0da 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1201,8 +1201,10 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, u m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); } else if (cinfo->type_flags & CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS) // Xinef: Add ghost visibility for ghost units + { m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST); - + m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST); + } if (Entry == VISUAL_WAYPOINT) SetVisible(false); diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 2615535ec..1e5ad942d 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1775,13 +1775,11 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta return SPELL_FAILED_TARGET_AFFECTING_COMBAT; // only spells with SPELL_ATTR3_ONLY_ON_GHOSTS can target ghosts - if (((IsRequiringDeadTarget() != 0) != unitTarget->HasAuraType(SPELL_AURA_GHOST)) && !(IsDeathPersistent() && IsAllowingDeadTarget())) - { - if (AttributesEx3 & SPELL_ATTR3_ONLY_ON_GHOSTS) - return SPELL_FAILED_TARGET_NOT_GHOST; - else - return SPELL_FAILED_BAD_TARGETS; - } + if (IsRequiringDeadTarget() && !unitTarget->HasAuraType(SPELL_AURA_GHOST)) + return SPELL_FAILED_TARGET_NOT_GHOST; + + if (!IsDeathPersistent() && !IsAllowingDeadTarget()) + return SPELL_FAILED_BAD_TARGETS; if (caster != unitTarget) {