aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-06-25 00:21:27 +0200
committerShauren <shauren.trinity@gmail.com>2024-06-25 00:21:27 +0200
commita885a1fc3c6b894f546b7aee70b5a67932a94486 (patch)
tree98cb6a6d2cbf5e0bd60afce2595f07ed3e7fb23c /src
parent0b8eed2d547acc0ba115198cb306c4f9127af807 (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)
Diffstat (limited to 'src')
-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
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp2
4 files changed, 6 insertions, 4 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index f55193cdb82..0f32f475f52 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3529,7 +3529,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 5c8176cee06..9fd45a0b200 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 0c85c15bc51..74fe102ed7b 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5091,7 +5091,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);
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 90dbbfef35a..e5e117d78b0 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -3511,7 +3511,7 @@ class spell_pri_whispering_shadows_effect : public SpellScript
{
GetCaster()->CastSpell(GetHitUnit(), SPELL_PRIEST_VAMPIRIC_TOUCH, CastSpellExtraArgs()
.SetTriggeringSpell(GetSpell())
- .SetTriggerFlags(TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD | TRIGGERED_IGNORE_POWER_AND_REAGENT_COST | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY | TRIGGERED_DONT_REPORT_CAST_ERROR));
+ .SetTriggerFlags(TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD | TRIGGERED_IGNORE_POWER_AND_REAGENT_COST | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_CAST_TIME | TRIGGERED_DONT_REPORT_CAST_ERROR));
}
void Register() override