diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-11-01 18:09:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-01 18:09:24 +0200 |
commit | ed38206031f25fec73282044293238c9573a89d9 (patch) | |
tree | 51f4ded71216bc135785b4c597b91e1b7fb6126c | |
parent | 15fa7c59e6a6e7e4364238606b94db9624965294 (diff) |
Scripts/Misc: Replace some of AddItem / CreateItem with spells (#27160)
4 files changed, 81 insertions, 58 deletions
diff --git a/sql/updates/world/3.3.5/2021_11_01_01_world.sql b/sql/updates/world/3.3.5/2021_11_01_01_world.sql new file mode 100644 index 00000000000..570dec73e16 --- /dev/null +++ b/sql/updates/world/3.3.5/2021_11_01_01_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `spell_dbc` SET `ProcChance` = 101, `Effect1` = 24, `EffectImplicitTargetA1` = 25, `EffectItemType1` = 37888 WHERE `Id` = 49591; +UPDATE `spell_dbc` SET `ProcChance` = 101, `Effect1` = 24, `EffectImplicitTargetA1` = 25, `EffectItemType1` = 49278 WHERE `Id` = 70055; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 52d00cd137c..7778be61390 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -268,11 +268,12 @@ enum Chromie1Gossip enum Chromie1Misc { - ITEM_ARCANE_DISRUPTOR = 37888, - QUEST_DISPELLING_ILLUSIONS = 13149, - SPELL_TELEPORT_PLAYER = 53435, - ACHIEVEMENT_NORMAL = 479, - ACHIEVEMENT_HEROIC = 500 + ITEM_ARCANE_DISRUPTOR = 37888, + QUEST_DISPELLING_ILLUSIONS = 13149, + SPELL_TELEPORT_PLAYER = 53435, + SPELL_SUMMON_ARCANE_DISRUPTOR = 49591, + ACHIEVEMENT_NORMAL = 479, + ACHIEVEMENT_HEROIC = 500 }; class npc_chromie_start : public CreatureScript @@ -371,7 +372,7 @@ class npc_chromie_start : public CreatureScript SendGossipMenuFor(player, GOSSIP_TEXT_EXPLAIN_3, me->GetGUID()); AdvanceDungeon(); if (!player->HasItemCount(ITEM_ARCANE_DISRUPTOR)) - player->AddItem(ITEM_ARCANE_DISRUPTOR, 1); // @todo figure out spell + me->CastSpell(player, SPELL_SUMMON_ARCANE_DISRUPTOR); break; case GOSSIP_OFFSET_OPEN_GM_MENU: AddGossipItemFor(player, GOSSIP_ICON_INTERACT_1, "Teleport all players to Arthas", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index a0a927651f2..c53184ae5a8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -195,12 +195,13 @@ enum Spells enum MiscData { - ITEM_GOBLIN_ROCKET_PACK = 49278, + ITEM_GOBLIN_ROCKET_PACK = 49278, + SPELL_CREATE_ROCKET_PACK = 70055, - PHASE_COMBAT = 0, - PHASE_INTRO = 1, + PHASE_COMBAT = 0, + PHASE_INTRO = 1, - MUSIC_ENCOUNTER = 17289 + MUSIC_ENCOUNTER = 17289 }; enum EncounterActions @@ -1361,7 +1362,7 @@ struct npc_zafod_boombox : public gunship_npc_AI bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { - player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1); + me->CastSpell(player, SPELL_CREATE_ROCKET_PACK); player->PlayerTalkClass->SendCloseGossip(); return false; } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index c2c0321cddc..40411499bb3 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -38,6 +38,14 @@ #include "SpellMgr.h" #include "SpellScript.h" +enum GenericData +{ + SPELL_ARCANITE_DRAGONLING = 19804, + SPELL_BATTLE_CHICKEN = 13166, + SPELL_MECHANICAL_DRAGONLING = 4073, + SPELL_MITHRIL_MECHANICAL_DRAGONLING = 12749, +}; + // Generic script for handling item dummy effects which trigger another spell. class spell_item_trigger_spell : public SpellScriptLoader { @@ -1364,43 +1372,52 @@ class spell_item_mercurial_shield : public SpellScript } }; +enum MingoFortune +{ + SPELL_CREATE_FORTUNE_1 = 40804, + SPELL_CREATE_FORTUNE_2 = 40805, + SPELL_CREATE_FORTUNE_3 = 40806, + SPELL_CREATE_FORTUNE_4 = 40807, + SPELL_CREATE_FORTUNE_5 = 40808, + SPELL_CREATE_FORTUNE_6 = 40809, + SPELL_CREATE_FORTUNE_7 = 40908, + SPELL_CREATE_FORTUNE_8 = 40910, + SPELL_CREATE_FORTUNE_9 = 40911, + SPELL_CREATE_FORTUNE_10 = 40912, + SPELL_CREATE_FORTUNE_11 = 40913, + SPELL_CREATE_FORTUNE_12 = 40914, + SPELL_CREATE_FORTUNE_13 = 40915, + SPELL_CREATE_FORTUNE_14 = 40916, + SPELL_CREATE_FORTUNE_15 = 40918, + SPELL_CREATE_FORTUNE_16 = 40919, + SPELL_CREATE_FORTUNE_17 = 40920, + SPELL_CREATE_FORTUNE_18 = 40921, + SPELL_CREATE_FORTUNE_19 = 40922, + SPELL_CREATE_FORTUNE_20 = 40923 +}; + +std::array<uint32, 20> const CreateFortuneSpells = +{ + SPELL_CREATE_FORTUNE_1, SPELL_CREATE_FORTUNE_2, SPELL_CREATE_FORTUNE_3, SPELL_CREATE_FORTUNE_4, SPELL_CREATE_FORTUNE_5, + SPELL_CREATE_FORTUNE_6, SPELL_CREATE_FORTUNE_7, SPELL_CREATE_FORTUNE_8, SPELL_CREATE_FORTUNE_9, SPELL_CREATE_FORTUNE_10, + SPELL_CREATE_FORTUNE_11, SPELL_CREATE_FORTUNE_12, SPELL_CREATE_FORTUNE_13, SPELL_CREATE_FORTUNE_14, SPELL_CREATE_FORTUNE_15, + SPELL_CREATE_FORTUNE_16, SPELL_CREATE_FORTUNE_17, SPELL_CREATE_FORTUNE_18, SPELL_CREATE_FORTUNE_19, SPELL_CREATE_FORTUNE_20 +}; + // http://www.wowhead.com/item=32686 Mingo's Fortune Giblets // 40802 Mingo's Fortune Generator class spell_item_mingos_fortune_generator : public SpellScript { PrepareSpellScript(spell_item_mingos_fortune_generator); - void HandleDummy(SpellEffIndex /*effIndex*/) + bool Validate(SpellInfo const* /*spellInfo*/) override { - // Selecting one from Bloodstained Fortune item - uint32 newitemid; - switch (urand(1, 20)) - { - case 1: newitemid = 32688; break; - case 2: newitemid = 32689; break; - case 3: newitemid = 32690; break; - case 4: newitemid = 32691; break; - case 5: newitemid = 32692; break; - case 6: newitemid = 32693; break; - case 7: newitemid = 32700; break; - case 8: newitemid = 32701; break; - case 9: newitemid = 32702; break; - case 10: newitemid = 32703; break; - case 11: newitemid = 32704; break; - case 12: newitemid = 32705; break; - case 13: newitemid = 32706; break; - case 14: newitemid = 32707; break; - case 15: newitemid = 32708; break; - case 16: newitemid = 32709; break; - case 17: newitemid = 32710; break; - case 18: newitemid = 32711; break; - case 19: newitemid = 32712; break; - case 20: newitemid = 32713; break; - default: - return; - } + return ValidateSpellInfo(CreateFortuneSpells); + } - CreateItem(newitemid); + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), Trinity::Containers::SelectRandomContainerElement(CreateFortuneSpells), true); } void Register() override @@ -2421,38 +2438,39 @@ class spell_item_red_rider_air_rifle : public SpellScript } }; -enum GenericData +enum CreateHeartCandy { - SPELL_ARCANITE_DRAGONLING = 19804, - SPELL_BATTLE_CHICKEN = 13166, - SPELL_MECHANICAL_DRAGONLING = 4073, - SPELL_MITHRIL_MECHANICAL_DRAGONLING = 12749, + SPELL_CREATE_HEART_CANDY_1 = 26668, + SPELL_CREATE_HEART_CANDY_2 = 26670, + SPELL_CREATE_HEART_CANDY_3 = 26671, + SPELL_CREATE_HEART_CANDY_4 = 26672, + SPELL_CREATE_HEART_CANDY_5 = 26673, + SPELL_CREATE_HEART_CANDY_6 = 26674, + SPELL_CREATE_HEART_CANDY_7 = 26675, + SPELL_CREATE_HEART_CANDY_8 = 26676 }; -enum CreateHeartCandy +std::array<uint32, 8> const CreateHeartCandySpells = { - ITEM_HEART_CANDY_1 = 21818, - ITEM_HEART_CANDY_2 = 21817, - ITEM_HEART_CANDY_3 = 21821, - ITEM_HEART_CANDY_4 = 21819, - ITEM_HEART_CANDY_5 = 21816, - ITEM_HEART_CANDY_6 = 21823, - ITEM_HEART_CANDY_7 = 21822, - ITEM_HEART_CANDY_8 = 21820, + SPELL_CREATE_HEART_CANDY_1, SPELL_CREATE_HEART_CANDY_2, SPELL_CREATE_HEART_CANDY_3, SPELL_CREATE_HEART_CANDY_4, + SPELL_CREATE_HEART_CANDY_5, SPELL_CREATE_HEART_CANDY_6, SPELL_CREATE_HEART_CANDY_7, SPELL_CREATE_HEART_CANDY_8 }; +// 26678 - Create Heart Candy class spell_item_create_heart_candy : public SpellScript { PrepareSpellScript(spell_item_create_heart_candy); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(CreateHeartCandySpells); + } + void HandleScript(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); if (Player* target = GetHitPlayer()) - { - static const uint32 items[] = {ITEM_HEART_CANDY_1, ITEM_HEART_CANDY_2, ITEM_HEART_CANDY_3, ITEM_HEART_CANDY_4, ITEM_HEART_CANDY_5, ITEM_HEART_CANDY_6, ITEM_HEART_CANDY_7, ITEM_HEART_CANDY_8}; - target->AddItem(items[urand(0, 7)], 1); - } + target->CastSpell(target, Trinity::Containers::SelectRandomContainerElement(CreateHeartCandySpells), true); } void Register() override |