From 1c23bca9cbd6847b0b2cfe02c32afea9c7359505 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:37:15 +0200 Subject: [PATCH] fix(Scripts/WorldNPCs): npcs_special hardcode removal and fixes. (#15240) --- .../rev_1677761748533314800.sql | 4 + src/server/scripts/World/npcs_special.cpp | 333 +++++++++--------- 2 files changed, 171 insertions(+), 166 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677761748533314800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677761748533314800.sql b/data/sql/updates/pending_db_world/rev_1677761748533314800.sql new file mode 100644 index 000000000..10efb7a22 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677761748533314800.sql @@ -0,0 +1,4 @@ +-- Sayge - fix wrong gossip_option (was npc_text) +DELETE FROM `gossip_menu_option` WHERE `MenuID` = 6210 AND `OptionID` = 0; +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(6210, 0, 0, 'I would show my liege the beast\'s ear and claim the beast\'s death as my own, taking the reward for my own use. It is wrong to claim a deed as your own that someone else in fact did.', 10087, 1, 1, 6211, 0, 0, 0, '', 0, 0); diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index e7fe02949..9d310a29c 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -15,27 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Npcs_Special -SD%Complete: 100 -SDComment: To be used for special NPCs that are located globally. -SDCategory: NPCs -EndScriptData -*/ - -/* ContentData -npc_air_force_bots 80% support for misc (invisible) guard bots in areas where player allowed to fly. Summon guards after a preset time if tagged by spell -npc_chicken_cluck 100% support for quest 3861 (Cluck!) -npc_dancing_flames 100% midsummer event NPC -npc_guardian 100% guardianAI used to prevent players from accessing off-limits areas. Not in use by SD2 -npc_garments_of_quests 80% NPC's related to all Garments of-quests 5621, 5624, 5625, 5648, 565 -npc_injured_patient 100% patients for triage-quests (6622 and 6624) -npc_doctor 100% Gustaf Vanhowzen and Gregory Victor, quest 6622 and 6624 (Triage) -npc_sayge 100% Darkmoon event fortune teller, buff player based on answers given -npc_locksmith 75% list of keys needs to be confirmed -npc_firework 100% NPC's summoned by rockets and rocket clusters, for making them cast visual -EndContentData */ - #include "CellImpl.h" #include "Chat.h" #include "CombatAI.h" @@ -1516,24 +1495,39 @@ enum Sayge SPELL_FORTUNE = 23765 // faire fortune }; -#define GOSSIP_HELLO_SAYGE "Yes" -#define GOSSIP_SENDACTION_SAYGE1 "Slay the Man" -#define GOSSIP_SENDACTION_SAYGE2 "Turn him over to liege" -#define GOSSIP_SENDACTION_SAYGE3 "Confiscate the corn" -#define GOSSIP_SENDACTION_SAYGE4 "Let him go and have the corn" -#define GOSSIP_SENDACTION_SAYGE5 "Execute your friend painfully" -#define GOSSIP_SENDACTION_SAYGE6 "Execute your friend painlessly" -#define GOSSIP_SENDACTION_SAYGE7 "Let your friend go" -#define GOSSIP_SENDACTION_SAYGE8 "Confront the diplomat" -#define GOSSIP_SENDACTION_SAYGE9 "Show not so quiet defiance" -#define GOSSIP_SENDACTION_SAYGE10 "Remain quiet" -#define GOSSIP_SENDACTION_SAYGE11 "Speak against your brother openly" -#define GOSSIP_SENDACTION_SAYGE12 "Help your brother in" -#define GOSSIP_SENDACTION_SAYGE13 "Keep your brother out without letting him know" -#define GOSSIP_SENDACTION_SAYGE14 "Take credit, keep gold" -#define GOSSIP_SENDACTION_SAYGE15 "Take credit, share the gold" -#define GOSSIP_SENDACTION_SAYGE16 "Let the knight take credit" -#define GOSSIP_SENDACTION_SAYGE17 "Thanks" +enum SaygeGossip +{ + // Start + GOSSIP_MENU_SAYGE_HELLO = 6186, + NPC_TEXT_SAYGE_HELLO = 7339, + + // Theif - initial gossip after start + GOSSIP_MENU_SAYGE_1 = 6185, + NPC_TEXT_SAYGE_1 = 7340, + + // Slay + GOSSIP_MENU_SAYGE_SLAY = 6187, + NPC_TEXT_SAYGE_SLAY = 7341, + + // Turn Over + GOSSIP_MENU_SAYGE_TURN_OVER = 6208, + NPC_TEXT_SAYGE_TURN_OVER = 7361, + + // Confiscate + GOSSIP_MENU_SAYGE_CONFISCATE = 6209, + NPC_TEXT_SAYGE_CONFISCATE = 7362, + + // Let him go + GOSSIP_MENU_SAYGE_LET_GO = 6210, + NPC_TEXT_SAYGE_LET_GO = 7363, + + // End + GOSSIP_MENU_SAYGE_END = 6211, + NPC_TEXT_SAYGE_END = 7364, + + // End - Take fortune + NPC_TEXT_SAYGE_END_FORTUNE = 7365, // menuID 6212 +}; class npc_sayge : public CreatureScript { @@ -1546,18 +1540,20 @@ public: player->PrepareQuestMenu(creature->GetGUID()); if (player->HasSpellCooldown(SPELL_INT) || - player->HasSpellCooldown(SPELL_ARM) || - player->HasSpellCooldown(SPELL_DMG) || - player->HasSpellCooldown(SPELL_RES) || - player->HasSpellCooldown(SPELL_STR) || - player->HasSpellCooldown(SPELL_AGI) || - player->HasSpellCooldown(SPELL_STM) || - player->HasSpellCooldown(SPELL_SPI)) - SendGossipMenuFor(player, 7393, creature->GetGUID()); + player->HasSpellCooldown(SPELL_ARM) || + player->HasSpellCooldown(SPELL_DMG) || + player->HasSpellCooldown(SPELL_RES) || + player->HasSpellCooldown(SPELL_STR) || + player->HasSpellCooldown(SPELL_AGI) || + player->HasSpellCooldown(SPELL_STM) || + player->HasSpellCooldown(SPELL_SPI)) + { + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); + } else { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_SAYGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - SendGossipMenuFor(player, 7339, creature->GetGUID()); + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_HELLO, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); } return true; @@ -1568,43 +1564,43 @@ public: switch (action) { case GOSSIP_ACTION_INFO_DEF + 1: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - SendGossipMenuFor(player, 7340, creature->GetGUID()); + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // Slay + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); // Turn over + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); // Confiscate + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); // Let him go + SendGossipMenuFor(player, NPC_TEXT_SAYGE_1, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 2: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE5, GOSSIP_SENDER_MAIN + 1, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE6, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE7, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7341, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 2: // Slay + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_SLAY, 0, GOSSIP_SENDER_MAIN + 1, GOSSIP_ACTION_INFO_DEF); // Painfully + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_SLAY, 1, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); // Painlessly + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_SLAY, 2, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); // Let go + SendGossipMenuFor(player, NPC_TEXT_SAYGE_SLAY, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 3: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE8, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE9, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE10, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7361, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 3: // Turn over + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_TURN_OVER, 0, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); // Confront + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_TURN_OVER, 1, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); // Inform + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_TURN_OVER, 2, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); // Ignore + SendGossipMenuFor(player, NPC_TEXT_SAYGE_TURN_OVER, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 4: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE11, GOSSIP_SENDER_MAIN + 6, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE12, GOSSIP_SENDER_MAIN + 7, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE13, GOSSIP_SENDER_MAIN + 8, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7362, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 4: // Confiscate + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_CONFISCATE, 0, GOSSIP_SENDER_MAIN + 6, GOSSIP_ACTION_INFO_DEF); // Speak against + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_CONFISCATE, 1, GOSSIP_SENDER_MAIN + 7, GOSSIP_ACTION_INFO_DEF); // Help + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_CONFISCATE, 2, GOSSIP_SENDER_MAIN + 8, GOSSIP_ACTION_INFO_DEF); // Without knowing + SendGossipMenuFor(player, NPC_TEXT_SAYGE_CONFISCATE, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 5: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE14, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE15, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE16, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7363, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 5: // Let him go + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_LET_GO, 0, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); // Take credit, keep gold + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_LET_GO, 1, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); // Take credit, share gold + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_LET_GO, 2, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); // Let the knight keep + SendGossipMenuFor(player, NPC_TEXT_SAYGE_LET_GO, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE17, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - SendGossipMenuFor(player, 7364, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF: // End + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_END, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + SendGossipMenuFor(player, NPC_TEXT_SAYGE_END, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 6: + case GOSSIP_ACTION_INFO_DEF + 6: // End - Take fortune creature->CastSpell(player, SPELL_FORTUNE, false); - SendGossipMenuFor(player, 7365, creature->GetGUID()); + SendGossipMenuFor(player, NPC_TEXT_SAYGE_END_FORTUNE, creature->GetGUID()); break; } } @@ -1699,14 +1695,7 @@ public: # npc_wormhole ######*/ -#define GOSSIP_ENGINEERING1 "Borean Tundra" -#define GOSSIP_ENGINEERING2 "Howling Fjord" -#define GOSSIP_ENGINEERING3 "Sholazar Basin" -#define GOSSIP_ENGINEERING4 "Icecrown" -#define GOSSIP_ENGINEERING5 "Storm Peaks" -#define GOSSIP_ENGINEERING6 "Underground..." - -enum WormholeSpells +enum WormholeMisc { SPELL_BOREAN_TUNDRA = 67834, SPELL_SHOLAZAR_BASIN = 67835, @@ -1715,9 +1704,9 @@ enum WormholeSpells SPELL_HOWLING_FJORD = 67838, SPELL_UNDERGROUND = 68081, - TEXT_WORMHOLE = 907, - DATA_SHOW_UNDERGROUND = 1, + + GOSSIP_MENU_WORMHOLE = 10668, }; class npc_wormhole : public CreatureScript @@ -1749,16 +1738,16 @@ public: { if (player == creature->ToTempSummon()->GetSummonerUnit()) { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); // Borean Tundra + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // Howling Fjord + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); // Sholazar Basin + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); // Icecrown + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); // Storm Peaks if (creature->AI()->GetData(DATA_SHOW_UNDERGROUND)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); // Underground... - SendGossipMenuFor(player, TEXT_WORMHOLE, creature); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature); } } @@ -1845,48 +1834,59 @@ public: ## npc_locksmith ######*/ +/// @todo: Key to the Focusing Iris (And Heroic) Should be given by Alexstrasza, check broadcasttext ID 32832 & 32836 enum LockSmith { - QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ = 10704, - QUEST_DARK_IRON_LEGACY = 3802, + // Skeleton Key - Scholomance QUEST_THE_KEY_TO_SCHOLOMANCE_A = 5505, QUEST_THE_KEY_TO_SCHOLOMANCE_H = 5511, + ITEM_SKELETON_KEY = 13704, + SPELL_SKELETON_KEY = 54883, + + // Arcatraz Key + QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ = 10704, + ITEM_ARCATRAZ_KEY = 31084, + SPELL_ARCATRAZ_KEY = 54881, + + // Shatered Halls Key QUEST_HOTTER_THAN_HELL_A = 10758, QUEST_HOTTER_THAN_HELL_H = 10764, - QUEST_RETURN_TO_KHAGDAR = 9837, - QUEST_CONTAINMENT = 13159, - QUEST_ETERNAL_VIGILANCE = 11011, - QUEST_KEY_TO_THE_FOCUSING_IRIS = 13372, - QUEST_HC_KEY_TO_THE_FOCUSING_IRIS = 13375, - - ITEM_ARCATRAZ_KEY = 31084, - ITEM_SHADOWFORGE_KEY = 11000, - ITEM_SKELETON_KEY = 13704, ITEM_SHATTERED_HALLS_KEY = 28395, - ITEM_THE_MASTERS_KEY = 24490, - ITEM_VIOLET_HOLD_KEY = 42482, - ITEM_ESSENCE_INFUSED_MOONSTONE = 32449, - ITEM_KEY_TO_THE_FOCUSING_IRIS = 44582, - ITEM_HC_KEY_TO_THE_FOCUSING_IRIS = 44581, - - SPELL_ARCATRAZ_KEY = 54881, - SPELL_SHADOWFORGE_KEY = 54882, - SPELL_SKELETON_KEY = 54883, SPELL_SHATTERED_HALLS_KEY = 54884, - SPELL_THE_MASTERS_KEY = 54885, - SPELL_VIOLET_HOLD_KEY = 67253, - SPELL_ESSENCE_INFUSED_MOONSTONE = 40173, -}; -#define GOSSIP_LOST_ARCATRAZ_KEY "I've lost my key to the Arcatraz." -#define GOSSIP_LOST_SHADOWFORGE_KEY "I've lost my key to the Blackrock Depths." -#define GOSSIP_LOST_SKELETON_KEY "I've lost my key to the Scholomance." -#define GOSSIP_LOST_SHATTERED_HALLS_KEY "I've lost my key to the Shattered Halls." -#define GOSSIP_LOST_THE_MASTERS_KEY "I've lost my key to the Karazhan." -#define GOSSIP_LOST_VIOLET_HOLD_KEY "I've lost my key to the Violet Hold." -#define GOSSIP_LOST_ESSENCE_INFUSED_MOONSTONE "I've lost my Essence-Infused Moonstone." -#define GOSSIP_LOST_KEY_TO_THE_FOCUSING_IRIS "I've lost my Key to the Focusing Iris." -#define GOSSIP_LOST_HC_KEY_TO_THE_FOCUSING_IRIS "I've lost my Heroic Key to the Focusing Iris." + // Searing Gorge Key + QUEST_AT_LAST = 3201, + ITEM_SEARING_GORGE = 5396, + SPELL_SEARING_GORGE_KEY = 54880, + + // Shadowforge Key + QUEST_DARK_IRON_LEGACY = 3802, + ITEM_SHADOWFORGE_KEY = 11000, + SPELL_SHADOWFORGE_KEY = 54882, + + // Eye of Haramad + QUEST_THE_EYE_OF_HARAMAD = 10982, + ITEM_EYE_OF_HARAMAD = 32092, + SPELL_EYE_OF_HARMAD = 54887, + + // Master's Key + QUEST_RETURN_TO_KHAGDAR = 9837, + ITEM_THE_MASTERS_KEY = 24490, + SPELL_THE_MASTERS_KEY = 54885, + + // Violet Hold Key + QUEST_CONTAINMENT = 13159, + ITEM_VIOLET_HOLD_KEY = 42482, + SPELL_VIOLET_HOLD_KEY = 67253, + + // Essence-Infused Moonstone + QUEST_ETERNAL_VIGILANCE = 11011, + ITEM_ESSENCE_INFUSED_MOONSTONE = 32449, + SPELL_ESSENCE_INFUSED_MOONSTONE = 40173, + + // Gossip + GOSSIP_MENU_LOCKSMITH = 9823, +}; class npc_locksmith : public CreatureScript { @@ -1895,43 +1895,43 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - // Arcatraz Key - if (player->GetQuestRewardStatus(QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ) && !player->HasItemCount(ITEM_ARCATRAZ_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_ARCATRAZ_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - - // Shadowforge Key - if (player->GetQuestRewardStatus(QUEST_DARK_IRON_LEGACY) && !player->HasItemCount(ITEM_SHADOWFORGE_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_SHADOWFORGE_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - - // Skeleton Key + // Skeleton Key - Scholomance if ((player->GetQuestRewardStatus(QUEST_THE_KEY_TO_SCHOLOMANCE_A) || player->GetQuestRewardStatus(QUEST_THE_KEY_TO_SCHOLOMANCE_H)) && !player->HasItemCount(ITEM_SKELETON_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_SKELETON_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + + // Arcatraz Key + if (player->GetQuestRewardStatus(QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ) && !player->HasItemCount(ITEM_ARCATRAZ_KEY, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // Shatered Halls Key if ((player->GetQuestRewardStatus(QUEST_HOTTER_THAN_HELL_A) || player->GetQuestRewardStatus(QUEST_HOTTER_THAN_HELL_H)) && !player->HasItemCount(ITEM_SHATTERED_HALLS_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_SHATTERED_HALLS_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + + // Searing Gorge Key + if (player->GetQuestRewardStatus(QUEST_AT_LAST) && !player->HasItemCount(ITEM_SEARING_GORGE, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + + // Shadowforge Key + if (player->GetQuestRewardStatus(QUEST_DARK_IRON_LEGACY) && !player->HasItemCount(ITEM_SHADOWFORGE_KEY, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + + // Eye of Haramad + if (player->GetQuestRewardStatus(QUEST_THE_EYE_OF_HARAMAD) && !player->HasItemCount(ITEM_EYE_OF_HARAMAD, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); // Master's Key if (player->GetQuestRewardStatus(QUEST_RETURN_TO_KHAGDAR) && !player->HasItemCount(ITEM_THE_MASTERS_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_THE_MASTERS_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); // Violet Hold Key if (player->GetQuestRewardStatus(QUEST_CONTAINMENT) && !player->HasItemCount(ITEM_VIOLET_HOLD_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_VIOLET_HOLD_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); // Essence-Infused Moonstone if (player->GetQuestRewardStatus(QUEST_ETERNAL_VIGILANCE) && !player->HasItemCount(ITEM_ESSENCE_INFUSED_MOONSTONE, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_ESSENCE_INFUSED_MOONSTONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - - // Key to the Focusing Iris - if (player->GetQuestRewardStatus(QUEST_KEY_TO_THE_FOCUSING_IRIS) && !player->HasItemCount(ITEM_KEY_TO_THE_FOCUSING_IRIS, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_KEY_TO_THE_FOCUSING_IRIS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - - // Heroic Key to the Focusing Iris - if (player->GetQuestRewardStatus(QUEST_HC_KEY_TO_THE_FOCUSING_IRIS) && !player->HasItemCount(ITEM_HC_KEY_TO_THE_FOCUSING_IRIS, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_HC_KEY_TO_THE_FOCUSING_IRIS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 8, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); @@ -1945,39 +1945,39 @@ public: { case GOSSIP_ACTION_INFO_DEF + 1: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_ARCATRAZ_KEY, false); + player->CastSpell(player, SPELL_SKELETON_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 2: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_SHADOWFORGE_KEY, false); + player->CastSpell(player, SPELL_ARCATRAZ_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 3: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_SKELETON_KEY, false); + player->CastSpell(player, SPELL_SHATTERED_HALLS_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 4: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_SHATTERED_HALLS_KEY, false); + player->CastSpell(player, SPELL_SEARING_GORGE_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 5: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_THE_MASTERS_KEY, false); + player->CastSpell(player, SPELL_SHADOWFORGE_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 6: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_VIOLET_HOLD_KEY, false); + player->CastSpell(player, SPELL_EYE_OF_HARMAD, false); break; case GOSSIP_ACTION_INFO_DEF + 7: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_ESSENCE_INFUSED_MOONSTONE, false); + player->CastSpell(player, SPELL_THE_MASTERS_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 8: CloseGossipMenuFor(player); - player->AddItem(ITEM_KEY_TO_THE_FOCUSING_IRIS, 1); + player->CastSpell(player, SPELL_VIOLET_HOLD_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 9: CloseGossipMenuFor(player); - player->AddItem(ITEM_HC_KEY_TO_THE_FOCUSING_IRIS, 1); + player->CastSpell(player, SPELL_ESSENCE_INFUSED_MOONSTONE, false); break; } return true; @@ -1988,9 +1988,10 @@ public: ## npc_experience ######*/ -#define GOSSIP_TEXT_EXP 14736 -#define GOSSIP_XP_OFF "I no longer wish to gain experience." -#define GOSSIP_XP_ON "I wish to start gaining experience again." +enum ExperienceNPCgossip +{ + GOSSIP_MENU_EXP_NPC = 10638 +}; class npc_experience : public CreatureScript { @@ -1999,9 +2000,9 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_XP_OFF, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - SendGossipMenuFor(player, GOSSIP_TEXT_EXP, creature); + AddGossipItemFor(player, GOSSIP_MENU_EXP_NPC, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); // "I no longer wish to gain experience." + AddGossipItemFor(player, GOSSIP_MENU_EXP_NPC, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // "I wish to start gaining experience again." + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature); return true; }