diff options
Diffstat (limited to 'src/server/scripts/Events/brewfest.cpp')
-rw-r--r-- | src/server/scripts/Events/brewfest.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 6cc75729ce7..71c4467669f 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -451,6 +451,66 @@ class spell_brewfest_barker_bunny : public SpellScriptLoader } }; +enum BrewfestMountTransformation +{ + SPELL_MOUNT_RAM_100 = 43900, + SPELL_MOUNT_RAM_60 = 43899, + SPELL_MOUNT_KODO_100 = 49379, + SPELL_MOUNT_KODO_60 = 49378, + SPELL_BREWFEST_MOUNT_TRANSFORM = 49357, + SPELL_BREWFEST_MOUNT_TRANSFORM_REVERSE = 52845, +}; + +class spell_item_brewfest_mount_transformation : public SpellScript +{ + PrepareSpellScript(spell_item_brewfest_mount_transformation); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo( + { + SPELL_MOUNT_RAM_100, + SPELL_MOUNT_RAM_60, + SPELL_MOUNT_KODO_100, + SPELL_MOUNT_KODO_60 + }); + } + + void HandleDummy(SpellEffIndex /* effIndex */) + { + Player* caster = GetCaster()->ToPlayer(); + if (caster->HasAuraType(SPELL_AURA_MOUNTED)) + { + caster->RemoveAurasByType(SPELL_AURA_MOUNTED); + uint32 spell_id; + + switch (GetSpellInfo()->Id) + { + case SPELL_BREWFEST_MOUNT_TRANSFORM: + if (caster->GetSpeedRate(MOVE_RUN) >= 2.0f) + spell_id = caster->GetTeam() == ALLIANCE ? SPELL_MOUNT_RAM_100 : SPELL_MOUNT_KODO_100; + else + spell_id = caster->GetTeam() == ALLIANCE ? SPELL_MOUNT_RAM_60 : SPELL_MOUNT_KODO_60; + break; + case SPELL_BREWFEST_MOUNT_TRANSFORM_REVERSE: + if (caster->GetSpeedRate(MOVE_RUN) >= 2.0f) + spell_id = caster->GetTeam() == HORDE ? SPELL_MOUNT_RAM_100 : SPELL_MOUNT_KODO_100; + else + spell_id = caster->GetTeam() == HORDE ? SPELL_MOUNT_RAM_60 : SPELL_MOUNT_KODO_60; + break; + default: + return; + } + caster->CastSpell(caster, spell_id, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_item_brewfest_mount_transformation::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_event_brewfest() { new spell_brewfest_giddyup(); @@ -462,4 +522,5 @@ void AddSC_event_brewfest() new spell_brewfest_relay_race_turn_in(); new spell_brewfest_dismount_ram(); new spell_brewfest_barker_bunny(); + RegisterSpellScript(spell_item_brewfest_mount_transformation); } |