aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2015-03-25 17:43:59 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2015-03-25 17:52:48 +0100
commit6777addbee82ef33a4bde5e0f6e81f9b2e09331e (patch)
treeb47512a990df4fc281a72e8a1bf33525bf1b252b
parent81dcfa4077e048612621d63e8792e43a5dac9b37 (diff)
Scripts/Spells: implement some eject passenger spells
(cherry picked from commit 766eb599ea5e7629ac7a98cf914d2877093a14fd)
-rw-r--r--sql/updates/world/2015_03_25_02_world.sql13
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp38
2 files changed, 51 insertions, 0 deletions
diff --git a/sql/updates/world/2015_03_25_02_world.sql b/sql/updates/world/2015_03_25_02_world.sql
new file mode 100644
index 00000000000..10b8903f3fb
--- /dev/null
+++ b/sql/updates/world/2015_03_25_02_world.sql
@@ -0,0 +1,13 @@
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (62539,64614,64629,64630,64631,64632,64633,64634,64635,64636,67393);
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(62539,'spell_gen_eject_passenger'),
+(64614,'spell_gen_eject_passenger'),
+(64629,'spell_gen_eject_passenger'),
+(64630,'spell_gen_eject_passenger'),
+(64631,'spell_gen_eject_passenger'),
+(64632,'spell_gen_eject_passenger'),
+(64633,'spell_gen_eject_passenger'),
+(64634,'spell_gen_eject_passenger'),
+(64635,'spell_gen_eject_passenger'),
+(64636,'spell_gen_eject_passenger'),
+(67393,'spell_gen_eject_passenger');
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index ee70cca2e50..993e64f22dc 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -3629,6 +3629,43 @@ class spell_gen_eject_all_passengers : public SpellScriptLoader
}
};
+class spell_gen_eject_passenger : public SpellScriptLoader
+{
+ public:
+ spell_gen_eject_passenger() : SpellScriptLoader("spell_gen_eject_passenger") { }
+
+ class spell_gen_eject_passenger_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_eject_passenger_SpellScript);
+
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Effects[EFFECT_0].CalcValue() < 1)
+ return false;
+ return true;
+ }
+
+ void EjectPassenger(SpellEffIndex /*effIndex*/)
+ {
+ if (Vehicle* vehicle = GetHitUnit()->GetVehicleKit())
+ {
+ if (Unit* passenger = vehicle->GetPassenger(GetEffectValue() - 1))
+ passenger->ExitVehicle();
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_eject_passenger_SpellScript::EjectPassenger, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_gen_eject_passenger_SpellScript();
+ }
+};
+
enum GMFreeze
{
SPELL_GM_FREEZE = 9454
@@ -4121,6 +4158,7 @@ void AddSC_generic_spell_scripts()
new spell_gen_wg_water();
new spell_gen_whisper_gulch_yogg_saron_whisper();
new spell_gen_eject_all_passengers();
+ new spell_gen_eject_passenger();
new spell_gen_gm_freeze();
new spell_gen_stand();
new spell_gen_mixology_bonus();