aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShocker <shocker@freakz.ro>2013-04-16 02:18:43 +0300
committerShocker <shocker@freakz.ro>2013-04-16 02:21:29 +0300
commit7e17679ada81ee349cb557cb7b5c6aa13f01a759 (patch)
tree0f6e6acc6b2f2b1556a62d2905ecb4bbaa07bf03 /src
parent647a20138f824a1f03eb57c928d8e114dcf06d9f (diff)
Core/Spells: Implement TRIGGERED_IGNORE_TARGET_CHECK TriggerCastFlag to allow ignoring most target checks (mostly the default DBC ones)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Spells/Spell.cpp4
2 files changed, 5 insertions, 0 deletions
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index a5eeb1613ff..53b3a9d76a9 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -422,6 +422,7 @@ enum TriggerCastFlags
TRIGGERED_DISALLOW_PROC_EVENTS = 0x00020000, //! Disallows proc events from triggered spell (default)
TRIGGERED_DONT_REPORT_CAST_ERROR = 0x00040000, //! Will return SPELL_FAILED_DONT_REPORT in CheckCast functions
TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT = 0x00080000, //! Will ignore equipped item requirements
+ TRIGGERED_IGNORE_TARGET_CHECK = 0x00100000, //! Will ignore most target checks (mostly DBC target checks)
TRIGGERED_FULL_MASK = 0xFFFFFFFF
};
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 4f8562ce5ec..ced288d8fa7 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2996,6 +2996,10 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
m_needComboPoints = false;
SpellCastResult result = CheckCast(true);
+ // target is checked in too many locations and with different results to handle each of them
+ // handle just the general SPELL_FAILED_BAD_TARGETS result which is the default result for most DBC target checks
+ if (_triggeredCastFlags & TRIGGERED_IGNORE_TARGET_CHECK && result == SPELL_FAILED_BAD_TARGETS)
+ result = SPELL_CAST_OK;
if (result != SPELL_CAST_OK && !IsAutoRepeat()) //always cast autorepeat dummy for triggering
{
// Periodic auras should be interrupted when aura triggers a spell which can't be cast