diff options
author | Sorikoff <46191832+Sorikoff@users.noreply.github.com> | 2019-06-29 12:02:04 +0000 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-13 00:42:18 +0100 |
commit | 996b7c1f0ebb22b424d7406adf88b43143b2ede4 (patch) | |
tree | 1edf3c0a18b875ffac426c9a9a055b13da1f19cf /src | |
parent | 7b08125c23725b61b5e29df76a1fe8db8e60100e (diff) |
Scripts/Spells: Ultrasafe Transporter: Toshley's Station (#23537)
* Scripts/Spells: Ultrasafe Transporter: Toshley's Station
* Rename 9999_99_99_99_world.sql to 2019_06_29_01_world.sql
(cherry picked from commit 33b4ad5a89cae0d3d527b58e1a438772450d7e32)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 53 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 75 |
2 files changed, 67 insertions, 61 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index f8d4783fa6b..1916f6b4ad5 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -917,59 +917,6 @@ void Spell::EffectTeleportUnits() } return; } - // Ultrasafe Transporter: Toshley's Station - case 36941: - { - if (roll_chance_i(50)) // 50% success - { - int32 rand_eff = urand(1, 7); - switch (rand_eff) - { - case 1: - // soul split - evil - m_caster->CastSpell(m_caster, 36900, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - case 2: - // soul split - good - m_caster->CastSpell(m_caster, 36901, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - case 3: - // Increase the size - m_caster->CastSpell(m_caster, 36895, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - case 4: - // Decrease the size - m_caster->CastSpell(m_caster, 36893, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - case 5: - // Transform - { - if (m_caster->ToPlayer()->GetTeam() == ALLIANCE) - m_caster->CastSpell(m_caster, 36897, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - else - m_caster->CastSpell(m_caster, 36899, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - } - case 6: - // chicken - m_caster->CastSpell(m_caster, 36940, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - case 7: - // evil twin - m_caster->CastSpell(m_caster, 23445, CastSpellExtraArgs(TRIGGERED_FULL_MASK) - .SetOriginalCastId(m_castId)); - break; - } - } - return; - } } } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index dc4b3a24ba2..2538f536ff6 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1710,16 +1710,74 @@ class spell_item_scroll_of_recall : public SpellScript } }; -// 36890 - Dimensional Ripper - Area 52 -enum DimensionalRipperArea52 +enum TransporterSpells +{ + SPELL_EVIL_TWIN = 23445, + SPELL_TRANSPORTER_MALFUNCTION_SMALLER = 36893, + SPELL_TRANSPORTER_MALFUNCTION_BIGGER = 36895, + SPELL_TRANSPORTER_MALFUNCTION_CHICKEN = 36940, + SPELL_TRANSFORM_HORDE = 36897, + SPELL_TRANSFORM_ALLIANCE = 36899, + SPELL_SOUL_SPLIT_EVIL = 36900, + SPELL_SOUL_SPLIT_GOOD = 36901 +}; + +// 36941 - Ultrasafe Transporter: Toshley's Station +class spell_item_ultrasafe_transporter : public SpellScript { - SPELL_TRANSPORTER_MALFUNCTION = 36895, - SPELL_TRANSFORM_HORDE = 36897, - SPELL_TRANSFORM_ALLIANCE = 36899, - SPELL_SOUL_SPLIT_EVIL = 36900, - SPELL_SOUL_SPLIT_GOOD = 36901 + PrepareSpellScript(spell_item_ultrasafe_transporter); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void HandleScript(SpellEffIndex /* effIndex */) + { + if (!roll_chance_i(50)) // 50% success + return; + + Unit* caster = GetCaster(); + + uint32 spellId = 0; + switch (urand(0, 6)) + { + case 0: + spellId = SPELL_TRANSPORTER_MALFUNCTION_SMALLER; + break; + case 1: + spellId = SPELL_TRANSPORTER_MALFUNCTION_BIGGER; + break; + case 2: + spellId = SPELL_SOUL_SPLIT_EVIL; + break; + case 3: + spellId = SPELL_SOUL_SPLIT_GOOD; + break; + case 4: + if (caster->ToPlayer()->GetTeamId() == TEAM_ALLIANCE) + spellId = SPELL_TRANSFORM_HORDE; + else + spellId = SPELL_TRANSFORM_ALLIANCE; + break; + case 5: + spellId = SPELL_TRANSPORTER_MALFUNCTION_CHICKEN; + break; + case 6: + spellId = SPELL_EVIL_TWIN; + break; + } + + caster->CastSpell(caster, spellId, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_item_ultrasafe_transporter::HandleScript, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS); + } }; +// 36890 - Dimensional Ripper - Area 52 class spell_item_dimensional_ripper_area52 : public SpellScript { PrepareSpellScript(spell_item_dimensional_ripper_area52); @@ -1740,7 +1798,7 @@ class spell_item_dimensional_ripper_area52 : public SpellScript switch (urand(0, 3)) { case 0: - spellId = SPELL_TRANSPORTER_MALFUNCTION; + spellId = SPELL_TRANSPORTER_MALFUNCTION_BIGGER; break; case 1: spellId = SPELL_SOUL_SPLIT_EVIL; @@ -4296,6 +4354,7 @@ void AddSC_item_spell_scripts() RegisterAuraScript(spell_item_power_circle); RegisterSpellScript(spell_item_savory_deviate_delight); RegisterSpellScript(spell_item_scroll_of_recall); + RegisterSpellScript(spell_item_ultrasafe_transporter); RegisterSpellScript(spell_item_dimensional_ripper_area52); RegisterAuraScript(spell_item_unsated_craving); RegisterAuraScript(spell_item_shadows_fate); |