aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSorikoff <46191832+Sorikoff@users.noreply.github.com>2019-06-29 12:02:04 +0000
committerShauren <shauren.trinity@gmail.com>2021-12-13 00:42:18 +0100
commit996b7c1f0ebb22b424d7406adf88b43143b2ede4 (patch)
tree1edf3c0a18b875ffac426c9a9a055b13da1f19cf /src
parent7b08125c23725b61b5e29df76a1fe8db8e60100e (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.cpp53
-rw-r--r--src/server/scripts/Spells/spell_item.cpp75
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);