aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSpp <none@none>2010-04-30 13:32:14 +0200
committerSpp <none@none>2010-04-30 13:32:14 +0200
commitce1f99cbe0404a325716d8231b3cf3dd4d3a558c (patch)
tree85992cf5fd6cfb030c22639dd7d43d7aeca3e8e8 /src
parent7f81217d68b3379dd681f7129c432f79341cd3c5 (diff)
Implementation of Tabard vendor
Patch by etznab Closes issue 908 --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/scripts/world/npcs_special.cpp165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/scripts/world/npcs_special.cpp b/src/scripts/world/npcs_special.cpp
index 8ede2920c9e..bc006f0efd7 100644
--- a/src/scripts/world/npcs_special.cpp
+++ b/src/scripts/world/npcs_special.cpp
@@ -2217,6 +2217,165 @@ bool GossipSelect_npc_locksmith(Player* pPlayer, Creature* /*pCreature*/, uint32
return true;
}
+/*######
+## npc_tabard_vendor
+######*/
+
+enum
+{
+ QUEST_TRUE_MASTERS_OF_LIGHT = 9737,
+ QUEST_THE_UNWRITTEN_PROPHECY = 9762,
+ QUEST_INTO_THE_BREACH = 10259,
+ QUEST_BATTLE_OF_THE_CRIMSON_WATCH = 10781,
+ QUEST_SHARDS_OF_AHUNE = 11972,
+
+ ACHIEVEMENT_EXPLORE_NORTHREND = 45,
+ ACHIEVEMENT_TWENTYFIVE_TABARDS = 1021,
+ ACHIEVEMENT_THE_LOREMASTER_A = 1681,
+ ACHIEVEMENT_THE_LOREMASTER_H = 1682,
+
+ ITEM_TABARD_OF_THE_HAND = 24344,
+ ITEM_TABARD_OF_THE_BLOOD_KNIGHT = 25549,
+ ITEM_TABARD_OF_THE_PROTECTOR = 28788,
+ ITEM_OFFERING_OF_THE_SHATAR = 31408,
+ ITEM_GREEN_TROPHY_TABARD_OF_THE_ILLIDARI = 31404,
+ ITEM_PURPLE_TROPHY_TABARD_OF_THE_ILLIDARI = 31405,
+ ITEM_TABARD_OF_THE_SUMMER_SKIES = 35279,
+ ITEM_TABARD_OF_THE_SUMMER_FLAMES = 35280,
+ ITEM_TABARD_OF_THE_ACHIEVER = 40643,
+ ITEM_LOREMASTERS_COLORS = 43300,
+ ITEM_TABARD_OF_THE_EXPLORER = 43348,
+
+ SPELL_TABARD_OF_THE_BLOOD_KNIGHT = 54974,
+ SPELL_TABARD_OF_THE_HAND = 54976,
+ SPELL_GREEN_TROPHY_TABARD_OF_THE_ILLIDARI = 54977,
+ SPELL_PURPLE_TROPHY_TABARD_OF_THE_ILLIDARI = 54982,
+ SPELL_TABARD_OF_THE_ACHIEVER = 55006,
+ SPELL_TABARD_OF_THE_PROTECTOR = 55008,
+ SPELL_LOREMASTERS_COLORS = 58194,
+ SPELL_TABARD_OF_THE_EXPLORER = 58224,
+ SPELL_TABARD_OF_SUMMER_SKIES = 62768,
+ SPELL_TABARD_OF_SUMMER_FLAMES = 62769
+};
+
+#define GOSSIP_LOST_TABARD_OF_BLOOD_KNIGHT "I've lost my Tabard of Blood Knight."
+#define GOSSIP_LOST_TABARD_OF_THE_HAND "I've lost my Tabard of the Hand."
+#define GOSSIP_LOST_TABARD_OF_THE_PROTECTOR "I've lost my Tabard of the Protector."
+#define GOSSIP_LOST_GREEN_TROPHY_TABARD_OF_THE_ILLIDARI "I've lost my Green Trophy Tabard of the Illidari."
+#define GOSSIP_LOST_PURPLE_TROPHY_TABARD_OF_THE_ILLIDARI "I've lost my Purple Trophy Tabard of the Illidari."
+#define GOSSIP_LOST_TABARD_OF_SUMMER_SKIES "I've lost my Tabard of Summer Skies."
+#define GOSSIP_LOST_TABARD_OF_SUMMER_FLAMES "I've lost my Tabard of Summer Flames."
+#define GOSSIP_LOST_LOREMASTERS_COLORS "I've lost my Loremaster's Colors."
+#define GOSSIP_LOST_TABARD_OF_THE_EXPLORER "I've lost my Tabard of the Explorer."
+#define GOSSIP_LOST_TABARD_OF_THE_ACHIEVER "I've lost my Tabard of the Achiever."
+
+bool GossipHello_npc_tabard_vendor(Player* pPlayer, Creature* pCreature)
+{
+ bool m_bLostBloodKnight = false;
+ bool m_bLostHand = false;
+ bool m_bLostProtector = false;
+ bool m_bLostIllidari = false;
+ bool m_bLostSummer = false;
+
+ //Tabard of the Blood Knight
+ if (pPlayer->GetQuestRewardStatus(QUEST_TRUE_MASTERS_OF_LIGHT) && !pPlayer->HasItemCount(ITEM_TABARD_OF_THE_BLOOD_KNIGHT, 1, true))
+ m_bLostBloodKnight = true;
+
+ //Tabard of the Hand
+ if (pPlayer->GetQuestRewardStatus(QUEST_THE_UNWRITTEN_PROPHECY) && !pPlayer->HasItemCount(ITEM_TABARD_OF_THE_HAND, 1, true))
+ m_bLostHand = true;
+
+ //Tabard of the Protector
+ if (pPlayer->GetQuestRewardStatus(QUEST_INTO_THE_BREACH) && !pPlayer->HasItemCount(ITEM_TABARD_OF_THE_PROTECTOR, 1, true))
+ m_bLostProtector = true;
+
+ //Green Trophy Tabard of the Illidari
+ //Purple Trophy Tabard of the Illidari
+ if (pPlayer->GetQuestRewardStatus(QUEST_BATTLE_OF_THE_CRIMSON_WATCH) &&
+ (!pPlayer->HasItemCount(ITEM_GREEN_TROPHY_TABARD_OF_THE_ILLIDARI, 1, true) &&
+ !pPlayer->HasItemCount(ITEM_PURPLE_TROPHY_TABARD_OF_THE_ILLIDARI, 1, true) &&
+ !pPlayer->HasItemCount(ITEM_OFFERING_OF_THE_SHATAR, 1, true)))
+ m_bLostIllidari = true;
+
+ //Tabard of Summer Skies
+ //Tabard of Summer Flames
+ if (pPlayer->GetQuestRewardStatus(QUEST_SHARDS_OF_AHUNE) &&
+ !pPlayer->HasItemCount(ITEM_TABARD_OF_THE_SUMMER_SKIES, 1, true) &&
+ !pPlayer->HasItemCount(ITEM_TABARD_OF_THE_SUMMER_FLAMES, 1, true))
+ m_bLostSummer = true;
+
+ if (m_bLostBloodKnight || m_bLostHand || m_bLostProtector || m_bLostIllidari || m_bLostSummer)
+ {
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+
+ if (m_bLostBloodKnight)
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_TABARD_OF_BLOOD_KNIGHT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF +1);
+
+ if (m_bLostHand)
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_TABARD_OF_THE_HAND, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF +2);
+
+ if (m_bLostProtector)
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_TABARD_OF_THE_PROTECTOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
+
+ if (m_bLostIllidari)
+ {
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_GREEN_TROPHY_TABARD_OF_THE_ILLIDARI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_PURPLE_TROPHY_TABARD_OF_THE_ILLIDARI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
+ }
+
+ if (m_bLostSummer)
+ {
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_TABARD_OF_SUMMER_SKIES, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOST_TABARD_OF_SUMMER_FLAMES, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7);
+ }
+
+ pPlayer->SEND_GOSSIP_MENU(13583, pCreature->GetGUID());
+ }
+ else
+ pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
+
+ return true;
+}
+
+bool GossipSelect_npc_tabard_vendor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
+{
+ switch(uiAction)
+ {
+ case GOSSIP_ACTION_TRADE:
+ pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF+1:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_TABARD_OF_THE_BLOOD_KNIGHT, false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+2:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_TABARD_OF_THE_HAND, false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+3:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_TABARD_OF_THE_PROTECTOR, false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+4:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_GREEN_TROPHY_TABARD_OF_THE_ILLIDARI, false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+5:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_PURPLE_TROPHY_TABARD_OF_THE_ILLIDARI, false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+6:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_TABARD_OF_SUMMER_SKIES, false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF+7:
+ pPlayer->CLOSE_GOSSIP_MENU();
+ pPlayer->CastSpell(pPlayer, SPELL_TABARD_OF_SUMMER_FLAMES, false);
+ break;
+ }
+ return true;
+}
+
void AddSC_npcs_special()
{
Script *newscript;
@@ -2361,5 +2520,11 @@ void AddSC_npcs_special()
newscript->pGossipHello = &GossipHello_npc_locksmith;
newscript->pGossipSelect = &GossipSelect_npc_locksmith;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "npc_tabard_vendor";
+ newscript->pGossipHello = &GossipHello_npc_tabard_vendor;
+ newscript->pGossipSelect = &GossipSelect_npc_tabard_vendor;
+ newscript->RegisterSelf();
}