aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorazazel <none@none>2010-09-18 22:50:43 +0600
committerazazel <none@none>2010-09-18 22:50:43 +0600
commitef9cb8000b7b200688cf1ed25b77980f6a8ff838 (patch)
tree9034316a326c6137aaba726a01a53da34ecc1afc
parentb93cca2a8dfa1f4c16c29e3c66e8ba65da409e27 (diff)
Scripts/Spelsl: improve 24751 Trick or Treat spell and implement 24750 Trick spell.
--HG-- branch : trunk
-rw-r--r--sql/base/world_database.sql1
-rw-r--r--sql/updates/9977_world_spell_script_names.sql2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp90
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();