aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Events/brewfest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts/Events/brewfest.cpp')
-rw-r--r--src/server/scripts/Events/brewfest.cpp61
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);
}