diff options
author | azazel <none@none> | 2010-09-18 22:50:43 +0600 |
---|---|---|
committer | azazel <none@none> | 2010-09-18 22:50:43 +0600 |
commit | ef9cb8000b7b200688cf1ed25b77980f6a8ff838 (patch) | |
tree | 9034316a326c6137aaba726a01a53da34ecc1afc | |
parent | b93cca2a8dfa1f4c16c29e3c66e8ba65da409e27 (diff) |
Scripts/Spelsl: improve 24751 Trick or Treat spell and implement 24750 Trick spell.
--HG--
branch : trunk
-rw-r--r-- | sql/base/world_database.sql | 1 | ||||
-rw-r--r-- | sql/updates/9977_world_spell_script_names.sql | 2 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 90 |
3 files changed, 90 insertions, 3 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index d09726807e4..d0731fa8a6f 100644 --- a/sql/base/world_database.sql +++ b/sql/base/world_database.sql @@ -26746,6 +26746,7 @@ LOCK TABLES `spell_script_names` WRITE; INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES -- generic ( 6962, 'spell_gen_pet_summoned'), +( 24750, 'spell_gen_trick'), ( 24751, 'spell_gen_trick_or_treat'), ( 29266, 'spell_creature_permanent_feign_death'), ( 57685, 'spell_creature_permanent_feign_death'), diff --git a/sql/updates/9977_world_spell_script_names.sql b/sql/updates/9977_world_spell_script_names.sql new file mode 100644 index 00000000000..91918cc6538 --- /dev/null +++ b/sql/updates/9977_world_spell_script_names.sql @@ -0,0 +1,2 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=24750 AND `ScriptName`='spell_gen_trick'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (24750,'spell_gen_trick');
\ No newline at end of file diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 90406de2490..b1daada093f 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -115,11 +115,89 @@ public: } }; +// 24750 Trick +enum eTrickSpells +{ + SPELL_PIRATE_COSTUME_MALE = 24708, + SPELL_PIRATE_COSTUME_FEMALE = 24709, + SPELL_NINJA_COSTUME_MALE = 24710, + SPELL_NINJA_COSTUME_FEMALE = 24711, + SPELL_LEPER_GNOME_COSTUME_MALE = 24712, + SPELL_LEPER_GNOME_COSTUME_FEMALE = 24713, + SPELL_SKELETON_COSTUME = 24723, + SPELL_GHOST_COSTUME_MALE = 24735, + SPELL_GHOST_COSTUME_FEMALE = 24736, + SPELL_TRICK_BUFF = 24753, +}; + +class spell_gen_trick : public SpellScriptLoader +{ +public: + spell_gen_trick() : SpellScriptLoader("spell_gen_trick") {} + + class spell_gen_trick_SpellScript : public SpellScript + { + bool Validate(SpellEntry const * /*spellEntry*/) + { + if (!sSpellStore.LookupEntry(SPELL_PIRATE_COSTUME_MALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_PIRATE_COSTUME_FEMALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_NINJA_COSTUME_MALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_NINJA_COSTUME_FEMALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_LEPER_GNOME_COSTUME_MALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_LEPER_GNOME_COSTUME_FEMALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_SKELETON_COSTUME)) + return false; + if (!sSpellStore.LookupEntry(SPELL_GHOST_COSTUME_MALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_GHOST_COSTUME_FEMALE)) + return false; + if (!sSpellStore.LookupEntry(SPELL_TRICK_BUFF)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* pTarget = GetHitPlayer()) + { + uint8 gender = pTarget->getGender(); + uint32 spellId = SPELL_TRICK_BUFF; + switch (urand(0, 5)) + { + case 1: spellId = gender ? SPELL_LEPER_GNOME_COSTUME_FEMALE : SPELL_LEPER_GNOME_COSTUME_MALE; break; + case 2: spellId = gender ? SPELL_PIRATE_COSTUME_FEMALE : SPELL_PIRATE_COSTUME_MALE; break; + case 3: spellId = gender ? SPELL_GHOST_COSTUME_FEMALE : SPELL_GHOST_COSTUME_MALE; break; + case 4: spellId = gender ? SPELL_NINJA_COSTUME_FEMALE : SPELL_NINJA_COSTUME_MALE; break; + case 5: spellId = SPELL_SKELETON_COSTUME; break; + } + GetCaster()->CastSpell(pTarget, spellId, true, NULL); + } + } + + void Register() + { + OnEffect += SpellEffectFn(spell_gen_trick_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_trick_SpellScript(); + } +}; + // 24751 Trick or Treat enum eTrickOrTreatSpells { - SPELL_TRICK = 24714, - SPELL_TREAT = 24715 + SPELL_TRICK = 24714, + SPELL_TREAT = 24715, + SPELL_TRICKED_OR_TREATED = 24755 }; class spell_gen_trick_or_treat : public SpellScriptLoader @@ -135,13 +213,18 @@ public: return false; if (!sSpellStore.LookupEntry(SPELL_TREAT)) return false; + if (!sSpellStore.LookupEntry(SPELL_TRICKED_OR_TREATED)) + return false; return true; } void HandleScript(SpellEffIndex /*effIndex*/) { - if (Unit* pTarget = GetHitUnit()) + if (Player* pTarget = GetHitPlayer()) + { GetCaster()->CastSpell(pTarget, roll_chance_i(50) ? SPELL_TRICK : SPELL_TREAT, true, NULL); + GetCaster()->CastSpell(pTarget, SPELL_TRICKED_OR_TREATED, true, NULL); + } } void Register() @@ -239,6 +322,7 @@ void AddSC_generic_spell_scripts() { new spell_gen_pet_summoned(); new spell_gen_remove_flight_auras(); + new spell_gen_trick(); new spell_gen_trick_or_treat(); new spell_creature_permanent_feign_death(); new spell_pvp_trinket_wotf_shared_cd(); |