aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-06-25 00:21:27 +0200
committerOvahlord <dreadkiller@gmx.de>2024-06-28 18:39:31 +0200
commitdb35ae6f435e859002f0763fdaf6e03d48701712 (patch)
tree4887d43e782f3e514d2fde8f7f2d69121725ecf3
parent95e3e1daa1aadd83b21ae4125518c85568afd7a8 (diff)
Core/Spells: Implemented new trigger flag to cause spells to be instant without also causing other behavior of TRIGGERED_CAST_DIRECTLY (skipping SMSG_SPELL_START, skipping starting GCD)
(cherry picked from commit a885a1fc3c6b894f546b7aee70b5a67932a94486) # Conflicts: # src/server/scripts/Spells/spell_priest.cpp
-rw-r--r--src/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/game/Spells/SpellDefines.h2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
3 files changed, 5 insertions, 3 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 158674832b2..52995bf650a 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3526,7 +3526,9 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const
// Prepare data for triggers
prepareDataForTriggerSystem();
- m_casttime = CallScriptCalcCastTimeHandlers(m_spellInfo->CalcCastTime(this));
+ if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CAST_TIME))
+ m_casttime = m_spellInfo->CalcCastTime(this);
+ m_casttime = CallScriptCalcCastTimeHandlers(m_casttime);
SpellCastResult movementResult = SPELL_CAST_OK;
if (m_caster->IsUnit() && m_caster->ToUnit()->isMoving())
diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h
index d3cfe0646ae..45ba289967f 100644
--- a/src/server/game/Spells/SpellDefines.h
+++ b/src/server/game/Spells/SpellDefines.h
@@ -252,7 +252,7 @@ enum TriggerCastFlags : uint32
TRIGGERED_IGNORE_CAST_ITEM = 0x00000008, //!< Will not take away cast item or update related achievement criteria
TRIGGERED_IGNORE_AURA_SCALING = 0x00000010, //!< Will ignore aura scaling
TRIGGERED_IGNORE_CAST_IN_PROGRESS = 0x00000020, //!< Will not check if a current cast is in progress
- // reuse = 0x00000040,
+ TRIGGERED_IGNORE_CAST_TIME = 0x00000040, //!< Will always be instantly cast
TRIGGERED_CAST_DIRECTLY = 0x00000080, //!< In Spell::prepare, will be cast directly without setting containers for executed spell
// reuse = 0x00000100,
TRIGGERED_IGNORE_SET_FACING = 0x00000200, //!< Will not adjust facing to target (if any)
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 523b7d75293..8417f80c474 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5103,7 +5103,7 @@ void Spell::EffectCastButtons()
continue;
CastSpellExtraArgs args;
- args.TriggerFlags = TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY | TRIGGERED_DONT_REPORT_CAST_ERROR;
+ args.TriggerFlags = TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_CAST_TIME | TRIGGERED_CAST_DIRECTLY | TRIGGERED_DONT_REPORT_CAST_ERROR;
args.OriginalCastId = m_castId;
args.CastDifficulty = GetCastDifficulty();
m_caster->CastSpell(m_caster, spellInfo->Id, args);