aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2021_12_11_34_world_2019_06_21_02_world.sql3
-rw-r--r--src/server/game/Spells/SpellEffects.cpp17
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp33
3 files changed, 36 insertions, 17 deletions
diff --git a/sql/updates/world/master/2021_12_11_34_world_2019_06_21_02_world.sql b/sql/updates/world/master/2021_12_11_34_world_2019_06_21_02_world.sql
new file mode 100644
index 00000000000..bc4749e4311
--- /dev/null
+++ b/sql/updates/world/master/2021_12_11_34_world_2019_06_21_02_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_gen_teleporting');
+INSERT INTO `spell_script_names` VALUES
+(59317,'spell_gen_teleporting');
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index fa3a17eec6b..7021b966002 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -3249,23 +3249,6 @@ void Spell::EffectScriptEffect()
return;
}
- case 59317: // Teleporting
- {
-
- if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
- return;
-
- // return from top
- if (unitTarget->ToPlayer()->GetAreaId() == 4637)
- unitTarget->CastSpell(unitTarget, 59316, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .SetOriginalCastId(m_castId));
- // teleport atop
- else
- unitTarget->CastSpell(unitTarget, 59314, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .SetOriginalCastId(m_castId));
-
- return;
- }
case 62482: // Grab Crate
{
if (!unitCaster)
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index e926b079461..bad3932c032 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -3242,6 +3242,38 @@ class spell_gen_tournament_pennant : public AuraScript
}
};
+enum Teleporting
+{
+ AREA_VIOLET_CITADEL_SPIRE = 4637,
+
+ SPELL_TELEPORT_SPIRE_DOWN = 59316,
+ SPELL_TELEPORT_SPIRE_UP = 59314
+};
+
+class spell_gen_teleporting : public SpellScript
+{
+ PrepareSpellScript(spell_gen_teleporting);
+
+ void HandleScript(SpellEffIndex /* effIndex */)
+ {
+ Unit* target = GetHitUnit();
+ if (target->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ // return from top
+ if (target->ToPlayer()->GetAreaId() == AREA_VIOLET_CITADEL_SPIRE)
+ target->CastSpell(target, SPELL_TELEPORT_SPIRE_DOWN, true);
+ // teleport atop
+ else
+ target->CastSpell(target, SPELL_TELEPORT_SPIRE_UP, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_teleporting::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
class spell_gen_trigger_exclude_caster_aura_spell : public SpellScript
{
PrepareSpellScript(spell_gen_trigger_exclude_caster_aura_spell);
@@ -4623,6 +4655,7 @@ void AddSC_generic_spell_scripts()
RegisterSpellScript(spell_gen_throw_shield);
RegisterSpellScript(spell_gen_tournament_duel);
RegisterAuraScript(spell_gen_tournament_pennant);
+ RegisterSpellScript(spell_gen_teleporting);
RegisterSpellScript(spell_gen_trigger_exclude_caster_aura_spell);
RegisterSpellScript(spell_gen_trigger_exclude_target_aura_spell);
new spell_pvp_trinket_wotf_shared_cd<SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER>("spell_pvp_trinket_shared_cd");