diff options
| -rw-r--r-- | sql/scripts/world_scripts_full.sql | 1 | ||||
| -rw-r--r-- | sql/updates/world/2011_06_03_01_world_spell_script_names.sql | 3 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 56 |
3 files changed, 60 insertions, 0 deletions
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index c6147308449..3ec8651497f 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -1950,6 +1950,7 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES ( 52408, 'spell_gen_seaforium_blast'), ( 25281, 'spell_gen_turkey_marker'), (-55428, 'spell_gen_lifeblood'), +( 65917, 'spell_gen_magic_rooster'), -- instances -- Black Temple ( 41475, 'spell_boss_lady_malande_shield'), diff --git a/sql/updates/world/2011_06_03_01_world_spell_script_names.sql b/sql/updates/world/2011_06_03_01_world_spell_script_names.sql new file mode 100644 index 00000000000..92dad52f1dd --- /dev/null +++ b/sql/updates/world/2011_06_03_01_world_spell_script_names.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_magic_rooster'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(65917, 'spell_gen_magic_rooster'); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ddf4324a715..f693c1b249e 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1105,6 +1105,61 @@ class spell_gen_lifeblood : public SpellScriptLoader } }; +enum MagicRoosterSpells +{ + SPELL_MAGIC_ROOSTER_NORMAL = 66122, + SPELL_MAGIC_ROOSTER_DRAENEI_MALE = 66123, + SPELL_MAGIC_ROOSTER_TAUREN_MALE = 66124, +}; + +class spell_gen_magic_rooster : public SpellScriptLoader +{ + public: + spell_gen_magic_rooster() : SpellScriptLoader("spell_gen_magic_rooster") { } + + class spell_gen_magic_rooster_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_magic_rooster_SpellScript); + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + Player* target = GetHitPlayer(); + if (!target) + return; + + // prevent client crashes from stacking mounts + target->RemoveAurasByType(SPELL_AURA_MOUNTED); + + uint32 spellId = SPELL_MAGIC_ROOSTER_NORMAL; + switch (target->getRace()) + { + case RACE_DRAENEI: + if (target->getGender() == GENDER_MALE) + spellId = SPELL_MAGIC_ROOSTER_DRAENEI_MALE; + break; + case RACE_TAUREN: + if (target->getGender() == GENDER_MALE) + spellId = SPELL_MAGIC_ROOSTER_TAUREN_MALE; + break; + default: + break; + } + + target->CastSpell(target, spellId, true); + } + + void Register() + { + OnEffect += SpellEffectFn(spell_gen_magic_rooster_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_magic_rooster_SpellScript(); + } +}; void AddSC_generic_spell_scripts() { @@ -1132,4 +1187,5 @@ void AddSC_generic_spell_scripts() new spell_gen_seaforium_blast(); new spell_gen_turkey_marker(); new spell_gen_lifeblood(); + new spell_gen_magic_rooster(); } |
