diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2015-03-25 17:43:59 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2015-03-25 17:43:59 +0100 |
commit | 766eb599ea5e7629ac7a98cf914d2877093a14fd (patch) | |
tree | 0f21d7dfdce1c5498708f064832e8da3f5d56ac0 | |
parent | 5cee106524d8d7e0048270042be9fd02ce399a21 (diff) |
Scripts/Spells: implement some eject passenger spells
-rw-r--r-- | sql/updates/world/2015_03_25_02_world.sql | 13 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 39 |
2 files changed, 52 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 31779c4df22..451dc933d86 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3622,6 +3622,44 @@ 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 + { + SpellEffectInfo const* effect = spellInfo->GetEffect(EFFECT_0); + if (!effect || effect->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 @@ -4116,6 +4154,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(); |