From 89fd5cd40869cc778d0e5b9106f92ebff29d747f Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 9 Feb 2019 00:11:44 +0100 Subject: [PATCH] Core/Spells: define and implement SPELL_ATTR5_DONT_ALLOW_PET_TARGET --- src/server/game/Miscellaneous/SharedDefines.h | 2 +- src/server/game/Spells/SpellInfo.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index b4e079f60ff..0213c32c58a 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -531,7 +531,7 @@ enum SpellAttr5 SPELL_ATTR5_SINGLE_TARGET_SPELL = 0x00000020, // 5 Only one target can be apply at a time SPELL_ATTR5_UNK6 = 0x00000040, // 6 SPELL_ATTR5_UNK7 = 0x00000080, // 7 - SPELL_ATTR5_UNK8 = 0x00000100, // 8 + SPELL_ATTR5_DONT_ALLOW_PET_TARGET = 0x00000100, // 8 do not allow the following spell to affect or target pets SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply SPELL_ATTR5_HIDE_DURATION = 0x00000400, // 10 do not send duration to client SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET = 0x00000800, // 11 (NYI) uses target's target as target if original target not valid (intervene for example) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 184f70fb423..477776b3c6c 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1861,6 +1861,11 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta if (implicit && HasAttribute(SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED) && !unitTarget->CanFreeMove()) return SPELL_FAILED_BAD_TARGETS; + // Do not allow pet or guardian targets if the spell is a raid buff or may not target pets at all + if ((HasAttribute(SPELL_ATTR7_CONSOLIDATED_RAID_BUFF) || HasAttribute(SPELL_ATTR5_DONT_ALLOW_PET_TARGET)) && (!caster->IsPet() || !caster->IsGuardian())) + if ((unitTarget->IsPet() || unitTarget->IsGuardian())) + return SPELL_FAILED_BAD_TARGETS; + // checked in Unit::IsValidAttack/AssistTarget, shouldn't be checked for ENTRY targets //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) // return SPELL_FAILED_BAD_TARGETS;