Core/Gossip: Drop OptionType for gossip_menu_option and rename OptionIcon to OptionNpc as it also determines functionality on client side (#28220)
Co-authored-by: Shauren <[email protected]>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
-- Update table `gossip_menu_option`
|
||||
ALTER TABLE `gossip_menu_option` DROP `OptionType`, RENAME COLUMN `OptionIcon` TO `OptionNpc`;
|
||||
|
||||
-- Update default option
|
||||
DELETE FROM `gossip_menu_option` WHERE `MenuID`=0;
|
||||
INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionNpc`, `OptionText`, `OptionBroadcastTextId`, `OptionNpcFlag`, `Language`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES
|
||||
(0, 1 , 1 , 'I want to browse your goods.', 3370, 128, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 2 , 2 , 'I''d like to travel by air.', 53141, 8192, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 3 , 3 , 'Train me.', 3266, 16, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 4 , 4 , 'Return me to life.', 2547, 16384, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 5 , 5 , 'Make this inn your home.', 2822, 65536, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 6 , 6 , 'I would like to check my deposit box.', 3398, 131072, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 7 , 7 , 'How do I form a guild?', 3413, 262144, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 8 , 8 , 'I want to create a guild crest.', 3415, 524288, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 9, 9 , 'I would like to go to the battleground.', 10355, 1048576, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 10, 10, 'I''d like to browse the items up for auction.', 52635, 2097152, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 12, 12, 'I''d like to stable my pet here.', 30181, 4194304, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 18, 18, 'I''d like to check my mail.', 146045, 67108864, 0, 0, 0, 0, 0, NULL, 0, 0),
|
||||
(0, 34, 34, 'I want to transmogrify my gear.', 130510, 268435456, 0, 0, 0, 0, 0, NULL, 0, 0);
|
||||
|
||||
-- Drop "npc_experience" script use
|
||||
UPDATE `creature_template` SET `ScriptName`='' WHERE `entry` IN (35364, 35365);
|
||||
@@ -35,15 +35,15 @@ void ClearGossipMenuFor(Player* player)
|
||||
}
|
||||
|
||||
// Using provided text, not from DB
|
||||
void AddGossipItemFor(Player* player, GossipOptionIcon icon, std::string const& text, uint32 sender, uint32 action)
|
||||
void AddGossipItemFor(Player* player, GossipOptionNpc optionNpc, std::string const& text, uint32 sender, uint32 action)
|
||||
{
|
||||
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(-1, icon, text, sender, action, "", 0);
|
||||
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(-1, optionNpc, text, sender, action, "", 0);
|
||||
}
|
||||
|
||||
// Using provided texts, not from DB
|
||||
void AddGossipItemFor(Player* player, GossipOptionIcon icon, std::string const& text, uint32 sender, uint32 action, std::string const& popupText, uint32 popupMoney, bool coded)
|
||||
void AddGossipItemFor(Player* player, GossipOptionNpc optionNpc, std::string const& text, uint32 sender, uint32 action, std::string const& popupText, uint32 popupMoney, bool coded)
|
||||
{
|
||||
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(-1, icon, text, sender, action, popupText, popupMoney, coded);
|
||||
player->PlayerTalkClass->GetGossipMenu().AddMenuItem(-1, optionNpc, text, sender, action, popupText, popupMoney, coded);
|
||||
}
|
||||
|
||||
// Uses gossip item info from DB
|
||||
|
||||
@@ -90,9 +90,9 @@ uint32 TC_GAME_API GetGossipSenderFor(Player* player, uint32 menuId);
|
||||
uint32 TC_GAME_API GetGossipActionFor(Player* player, uint32 gossipListId);
|
||||
void TC_GAME_API ClearGossipMenuFor(Player* player);
|
||||
// Using provided text, not from DB
|
||||
void TC_GAME_API AddGossipItemFor(Player* player, GossipOptionIcon icon, std::string const& text, uint32 sender, uint32 action);
|
||||
void TC_GAME_API AddGossipItemFor(Player* player, GossipOptionNpc optionNpc, std::string const& text, uint32 sender, uint32 action);
|
||||
// Using provided texts, not from DB
|
||||
void TC_GAME_API AddGossipItemFor(Player* player, GossipOptionIcon icon, std::string const& text, uint32 sender, uint32 action, std::string const& popupText, uint32 popupMoney, bool coded);
|
||||
void TC_GAME_API AddGossipItemFor(Player* player, GossipOptionNpc optionNpc, std::string const& text, uint32 sender, uint32 action, std::string const& popupText, uint32 popupMoney, bool coded);
|
||||
// Uses gossip item info from DB
|
||||
void TC_GAME_API AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItemID, uint32 sender, uint32 action);
|
||||
void TC_GAME_API SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const& guid);
|
||||
|
||||
@@ -43,7 +43,7 @@ GossipMenu::~GossipMenu()
|
||||
ClearMenu();
|
||||
}
|
||||
|
||||
uint32 GossipMenu::AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded /*= false*/)
|
||||
uint32 GossipMenu::AddMenuItem(int32 menuItemId, GossipOptionNpc optionNpc, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded /*= false*/)
|
||||
{
|
||||
ASSERT(_menuItems.size() <= GOSSIP_MAX_MENU_ITEMS);
|
||||
|
||||
@@ -65,11 +65,11 @@ uint32 GossipMenu::AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::str
|
||||
|
||||
GossipMenuItem& menuItem = _menuItems[menuItemId];
|
||||
|
||||
menuItem.MenuItemIcon = icon;
|
||||
menuItem.OptionNpc = optionNpc;
|
||||
menuItem.Message = message;
|
||||
menuItem.IsCoded = coded;
|
||||
menuItem.Sender = sender;
|
||||
menuItem.OptionType = action;
|
||||
menuItem.Action = action;
|
||||
menuItem.BoxMessage = boxMessage;
|
||||
menuItem.BoxMoney = boxMoney;
|
||||
return menuItemId;
|
||||
@@ -134,7 +134,7 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui
|
||||
}
|
||||
|
||||
/// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
|
||||
uint32 newOptionId = AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
uint32 newOptionId = AddMenuItem(-1, itr->second.OptionNpc, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
AddGossipMenuItemData(newOptionId, itr->second.ActionMenuID, itr->second.ActionPoiID);
|
||||
}
|
||||
}
|
||||
@@ -162,7 +162,7 @@ uint32 GossipMenu::GetMenuItemAction(uint32 menuItemId) const
|
||||
if (itr == _menuItems.end())
|
||||
return 0;
|
||||
|
||||
return itr->second.OptionType;
|
||||
return itr->second.Action;
|
||||
}
|
||||
|
||||
bool GossipMenu::IsMenuItemCoded(uint32 menuItemId) const
|
||||
@@ -174,15 +174,6 @@ bool GossipMenu::IsMenuItemCoded(uint32 menuItemId) const
|
||||
return itr->second.IsCoded;
|
||||
}
|
||||
|
||||
bool GossipMenu::HasMenuItemType(uint32 optionType) const
|
||||
{
|
||||
for (auto const& menuItemPair : _menuItems)
|
||||
if (menuItemPair.second.OptionType == optionType)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void GossipMenu::ClearMenu()
|
||||
{
|
||||
_menuItems.clear();
|
||||
@@ -227,7 +218,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
|
||||
WorldPackets::NPC::ClientGossipOptions& opt = packet.GossipOptions[count];
|
||||
GossipMenuItem const& item = itr->second;
|
||||
opt.ClientOption = itr->first;
|
||||
opt.OptionNPC = item.MenuItemIcon;
|
||||
opt.OptionNPC = item.OptionNpc;
|
||||
opt.OptionFlags = item.IsCoded; // makes pop up box password
|
||||
opt.OptionCost = item.BoxMoney; // money required to open menu, 2.0.3
|
||||
opt.OptionLanguage = item.Language;
|
||||
|
||||
@@ -30,81 +30,54 @@ enum class QuestGiverStatus : uint32;
|
||||
#define GOSSIP_MAX_MENU_ITEMS 32
|
||||
#define DEFAULT_GOSSIP_MESSAGE 0xffffff
|
||||
|
||||
enum Gossip_Option
|
||||
enum class GossipOptionNpc : uint8
|
||||
{
|
||||
GOSSIP_OPTION_NONE = 0, //UNIT_NPC_FLAG_NONE (0)
|
||||
GOSSIP_OPTION_GOSSIP = 1, //UNIT_NPC_FLAG_GOSSIP (1)
|
||||
GOSSIP_OPTION_QUESTGIVER = 2, //UNIT_NPC_FLAG_QUESTGIVER (2)
|
||||
GOSSIP_OPTION_VENDOR = 3, //UNIT_NPC_FLAG_VENDOR (128)
|
||||
GOSSIP_OPTION_TAXIVENDOR = 4, //UNIT_NPC_FLAG_TAXIVENDOR (8192)
|
||||
GOSSIP_OPTION_TRAINER = 5, //UNIT_NPC_FLAG_TRAINER (16)
|
||||
GOSSIP_OPTION_SPIRITHEALER = 6, //UNIT_NPC_FLAG_SPIRITHEALER (16384)
|
||||
GOSSIP_OPTION_SPIRITGUIDE = 7, //UNIT_NPC_FLAG_SPIRITGUIDE (32768)
|
||||
GOSSIP_OPTION_INNKEEPER = 8, //UNIT_NPC_FLAG_INNKEEPER (65536)
|
||||
GOSSIP_OPTION_BANKER = 9, //UNIT_NPC_FLAG_BANKER (131072)
|
||||
GOSSIP_OPTION_PETITIONER = 10, //UNIT_NPC_FLAG_PETITIONER (262144)
|
||||
GOSSIP_OPTION_TABARDDESIGNER = 11, //UNIT_NPC_FLAG_TABARDDESIGNER (524288)
|
||||
GOSSIP_OPTION_BATTLEFIELD = 12, //UNIT_NPC_FLAG_BATTLEFIELDPERSON (1048576)
|
||||
GOSSIP_OPTION_AUCTIONEER = 13, //UNIT_NPC_FLAG_AUCTIONEER (2097152)
|
||||
GOSSIP_OPTION_STABLEPET = 14, //UNIT_NPC_FLAG_STABLE (4194304)
|
||||
GOSSIP_OPTION_ARMORER = 15, //UNIT_NPC_FLAG_ARMORER (4096)
|
||||
GOSSIP_OPTION_UNLEARNTALENTS = 16, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER)
|
||||
GOSSIP_OPTION_UNLEARNPETTALENTS_OLD = 17, // deprecated
|
||||
GOSSIP_OPTION_LEARNDUALSPEC = 18, //UNIT_NPC_FLAG_TRAINER (16) (bonus option for GOSSIP_OPTION_TRAINER)
|
||||
GOSSIP_OPTION_OUTDOORPVP = 19, //added by code (option for outdoor pvp creatures)
|
||||
GOSSIP_OPTION_TRANSMOGRIFIER = 20, //UNIT_NPC_FLAG_TRANSMOGRIFIER
|
||||
GOSSIP_OPTION_MAILBOX = 21, //UNIT_NPC_FLAG_MAILBOX
|
||||
GOSSIP_OPTION_MAX
|
||||
};
|
||||
|
||||
enum class GossipOptionIcon : uint8
|
||||
{
|
||||
None = 0, // White chat bubble. Default
|
||||
Vendor = 1, // Brown bag
|
||||
TaxiNode = 2, // White wing
|
||||
Trainer = 3, // Brown book
|
||||
SpiritHealer = 4, // Golden interaction wheel (with red center)
|
||||
Binder = 5, // Golden interaction wheel
|
||||
Banker = 6, // Brown bag (with gold coin in lower corner)
|
||||
PetitionVendor = 7, // White chat bubble (with "..." inside)
|
||||
TabardVendor = 8, // White tabard
|
||||
BattleMaster = 9, // Two crossed swords
|
||||
Auctioneer = 10, // Stack of gold coins
|
||||
TalentMaster = 11, // White chat bubble
|
||||
StableMaster = 12, // White chat bubble
|
||||
PetSpecializationMaster = 13, // White chat bubble
|
||||
GuildBanker = 14, // White chat bubble
|
||||
SpellClick = 15, // White chat bubble
|
||||
DisableXPGain = 16, // White chat bubble
|
||||
EnableXPGain = 17, // White chat bubble
|
||||
Mailbox = 18, // White chat bubble
|
||||
WorldPVPQueue = 19, // White chat bubble
|
||||
DungeonFinder = 20, // White chat bubble
|
||||
ArtifactRespec = 21, // White chat bubble
|
||||
CemeterySelect = 22, // White chat bubble
|
||||
SpecializationMaster = 23, // White chat bubble
|
||||
GlyphMaster = 24, // White chat bubble
|
||||
ScenarioQueue = 25, // White chat bubble
|
||||
GarrisonArchitect = 26, // White chat bubble
|
||||
GarrisonMission = 27, // White chat bubble
|
||||
GarrisonShipment = 28, // Brown document
|
||||
GarrisonTradeskill = 29, // White chat bubble
|
||||
GarrisonRecruitment = 30, // White chat bubble
|
||||
AdventureMap = 31, // White chat bubble
|
||||
GarrisonTalent = 32, // White chat bubble
|
||||
ContributionCollector = 33, // White chat bubble
|
||||
Transmogrify = 34, // Purple helm
|
||||
AzeriteRespec = 35, // White chat bubble
|
||||
IslandsQueue = 36, // White chat bubble
|
||||
UIItemInteraction = 37, // White chat bubble
|
||||
WorldMap = 38, // White chat bubble
|
||||
Unk39 = 39, //
|
||||
ChromieTime = 40, // White chat bubble
|
||||
Unk41 = 41, //
|
||||
RuneforgeCrafting = 42, // White chat bubble
|
||||
GuideRecruiter = 43, // White chat bubble
|
||||
RuneforgeUpgrading = 44, // White chat bubble
|
||||
CovenantRenown = 45, // White chat bubble
|
||||
None = 0, // White chat bubble. Default
|
||||
Vendor = 1, // Brown bag
|
||||
TaxiNode = 2, // White wing
|
||||
Trainer = 3, // Brown book
|
||||
SpiritHealer = 4, // Golden interaction wheel (with red center)
|
||||
Binder = 5, // Golden interaction wheel
|
||||
Banker = 6, // Brown bag (with gold coin in lower corner)
|
||||
PetitionVendor = 7, // White chat bubble (with "..." inside)
|
||||
TabardVendor = 8, // White tabard
|
||||
BattleMaster = 9, // Two crossed swords
|
||||
Auctioneer = 10, // Stack of gold coins
|
||||
TalentMaster = 11, // White chat bubble
|
||||
StableMaster = 12, // White chat bubble
|
||||
PetSpecializationMaster = 13, /*DEPRECATED*/ // White chat bubble
|
||||
GuildBanker = 14, /*NYI*/ // White chat bubble
|
||||
SpellClick = 15, /*NYI*/ // White chat bubble
|
||||
DisableXPGain = 16, // White chat bubble
|
||||
EnableXPGain = 17, // White chat bubble
|
||||
Mailbox = 18, // White chat bubble
|
||||
WorldPVPQueue = 19, /*NYI*/ // White chat bubble
|
||||
LFGDungeon = 20, /*NYI*/ // White chat bubble
|
||||
ArtifactRespec = 21, /*NYI*/ // White chat bubble
|
||||
CemeterySelect = 22, /*DEPRECATED*/ // White chat bubble
|
||||
SpecializationMaster = 23, /*DEPRECATED*/ // White chat bubble
|
||||
GlyphMaster = 24, /*DEPRECATED*/ // White chat bubble
|
||||
QueueScenario = 25, /*NYI*/ // White chat bubble
|
||||
GarrisonArchitect = 26, /*NYI*/ // White chat bubble
|
||||
GarrisonMission = 27, /*NYI*/ // White chat bubble
|
||||
ShipmentCrafter = 28, /*NYI*/ // Brown document
|
||||
GarrisonTradeskill = 29, /*NYI*/ // White chat bubble
|
||||
GarrisonRecruitment = 30, /*NYI*/ // White chat bubble
|
||||
AdventureMap = 31, /*NYI*/ // White chat bubble
|
||||
GarrisonTalent = 32, /*NYI*/ // White chat bubble
|
||||
ContributionCollector = 33, /*NYI*/ // White chat bubble
|
||||
Transmogrify = 34, // Purple helm
|
||||
AzeriteRespec = 35, /*NYI*/ // White chat bubble
|
||||
IslandsMission = 36, /*NYI*/ // White chat bubble
|
||||
UIItemInteraction = 37, /*NYI*/ // White chat bubble
|
||||
WorldMap = 38, /*NYI*/ // White chat bubble
|
||||
Soulbind = 39, /*NYI*/ // White chat bubble
|
||||
ChromieTime = 40, /*NYI*/ // White chat bubble
|
||||
CovenantPreview = 41, /*NYI*/ // White chat bubble
|
||||
RuneforgeLegendaryCrafting = 42, /*NYI*/ // White chat bubble
|
||||
NewPlayerGuide = 43, /*NYI*/ // White chat bubble
|
||||
RuneforgeLegendaryUpgrade = 44, /*NYI*/ // White chat bubble
|
||||
CovenantRenown = 45, /*NYI*/ // White chat bubble
|
||||
|
||||
Count
|
||||
};
|
||||
@@ -125,11 +98,11 @@ enum class GossipOptionRewardType : uint8
|
||||
|
||||
struct GossipMenuItem
|
||||
{
|
||||
GossipOptionIcon MenuItemIcon;
|
||||
GossipOptionNpc OptionNpc;
|
||||
bool IsCoded;
|
||||
std::string Message;
|
||||
uint32 Sender;
|
||||
uint32 OptionType;
|
||||
uint32 Action;
|
||||
std::string BoxMessage;
|
||||
uint32 BoxMoney;
|
||||
uint32 Language;
|
||||
@@ -161,7 +134,7 @@ class TC_GAME_API GossipMenu
|
||||
GossipMenu();
|
||||
~GossipMenu();
|
||||
|
||||
uint32 AddMenuItem(int32 menuItemId, GossipOptionIcon icon, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded = false);
|
||||
uint32 AddMenuItem(int32 menuItemId, GossipOptionNpc optionNpc, std::string const& message, uint32 sender, uint32 action, std::string const& boxMessage, uint32 boxMoney, bool coded = false);
|
||||
void AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, uint32 action);
|
||||
|
||||
void SetMenuId(uint32 menu_id) { _menuId = menu_id; }
|
||||
@@ -202,7 +175,6 @@ class TC_GAME_API GossipMenu
|
||||
uint32 GetMenuItemSender(uint32 menuItemId) const;
|
||||
uint32 GetMenuItemAction(uint32 menuItemId) const;
|
||||
bool IsMenuItemCoded(uint32 menuItemId) const;
|
||||
bool HasMenuItemType(uint32 optionType) const;
|
||||
|
||||
void ClearMenu();
|
||||
|
||||
|
||||
@@ -9228,12 +9228,12 @@ void Player::SetBindPoint(ObjectGuid guid) const
|
||||
SendDirectMessage(packet.Write());
|
||||
}
|
||||
|
||||
void Player::SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost) const
|
||||
void Player::SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost, SpecResetType respecType) const
|
||||
{
|
||||
WorldPackets::Talent::RespecWipeConfirm respecWipeConfirm;
|
||||
respecWipeConfirm.RespecMaster = guid;
|
||||
respecWipeConfirm.Cost = cost;
|
||||
respecWipeConfirm.RespecType = SPEC_RESET_TALENTS;
|
||||
respecWipeConfirm.RespecType = respecType;
|
||||
SendDirectMessage(respecWipeConfirm.Write());
|
||||
}
|
||||
|
||||
@@ -14002,60 +14002,90 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
|
||||
if (!(itr->second.OptionNpcFlag & npcflags))
|
||||
continue;
|
||||
|
||||
switch (itr->second.OptionType)
|
||||
switch (itr->second.OptionNpc)
|
||||
{
|
||||
case GOSSIP_OPTION_ARMORER:
|
||||
canTalk = false; // added in special mode
|
||||
break;
|
||||
case GOSSIP_OPTION_SPIRITHEALER:
|
||||
if (!isDead())
|
||||
canTalk = false;
|
||||
break;
|
||||
case GOSSIP_OPTION_LEARNDUALSPEC:
|
||||
canTalk = false;
|
||||
break;
|
||||
case GOSSIP_OPTION_UNLEARNTALENTS:
|
||||
if (!creature->CanResetTalents(this))
|
||||
canTalk = false;
|
||||
break;
|
||||
case GOSSIP_OPTION_TAXIVENDOR:
|
||||
case GossipOptionNpc::TaxiNode:
|
||||
if (GetSession()->SendLearnNewTaxiNode(creature))
|
||||
return;
|
||||
break;
|
||||
case GOSSIP_OPTION_BATTLEFIELD:
|
||||
case GossipOptionNpc::SpiritHealer:
|
||||
if (!isDead())
|
||||
canTalk = false;
|
||||
break;
|
||||
case GossipOptionNpc::BattleMaster:
|
||||
if (!creature->isCanInteractWithBattleMaster(this, false))
|
||||
canTalk = false;
|
||||
break;
|
||||
case GOSSIP_OPTION_STABLEPET:
|
||||
case GossipOptionNpc::TalentMaster:
|
||||
case GossipOptionNpc::SpecializationMaster:
|
||||
case GossipOptionNpc::GlyphMaster:
|
||||
if (!creature->CanResetTalents(this))
|
||||
canTalk = false;
|
||||
break;
|
||||
case GossipOptionNpc::StableMaster:
|
||||
case GossipOptionNpc::PetSpecializationMaster:
|
||||
if (GetClass() != CLASS_HUNTER)
|
||||
canTalk = false;
|
||||
break;
|
||||
case GOSSIP_OPTION_QUESTGIVER:
|
||||
canTalk = false;
|
||||
case GossipOptionNpc::DisableXPGain:
|
||||
if (HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN))
|
||||
canTalk = false;
|
||||
break;
|
||||
case GOSSIP_OPTION_GOSSIP:
|
||||
case GOSSIP_OPTION_VENDOR:
|
||||
case GOSSIP_OPTION_TRAINER:
|
||||
case GOSSIP_OPTION_SPIRITGUIDE:
|
||||
case GOSSIP_OPTION_INNKEEPER:
|
||||
case GOSSIP_OPTION_BANKER:
|
||||
case GOSSIP_OPTION_PETITIONER:
|
||||
case GOSSIP_OPTION_TABARDDESIGNER:
|
||||
case GOSSIP_OPTION_AUCTIONEER:
|
||||
case GOSSIP_OPTION_TRANSMOGRIFIER:
|
||||
case GOSSIP_OPTION_MAILBOX:
|
||||
break; // no checks
|
||||
case GossipOptionNpc::EnableXPGain:
|
||||
if (!HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN))
|
||||
canTalk = false;
|
||||
break;
|
||||
case GossipOptionNpc::None:
|
||||
case GossipOptionNpc::Vendor:
|
||||
case GossipOptionNpc::Trainer:
|
||||
case GossipOptionNpc::Binder:
|
||||
case GossipOptionNpc::Banker:
|
||||
case GossipOptionNpc::PetitionVendor:
|
||||
case GossipOptionNpc::TabardVendor:
|
||||
case GossipOptionNpc::Auctioneer:
|
||||
case GossipOptionNpc::Mailbox:
|
||||
case GossipOptionNpc::Transmogrify:
|
||||
break; // No checks
|
||||
case GossipOptionNpc::CemeterySelect:
|
||||
canTalk = false; // Deprecated
|
||||
break;
|
||||
case GossipOptionNpc::GuildBanker:
|
||||
case GossipOptionNpc::SpellClick:
|
||||
case GossipOptionNpc::WorldPVPQueue:
|
||||
case GossipOptionNpc::LFGDungeon:
|
||||
case GossipOptionNpc::ArtifactRespec:
|
||||
case GossipOptionNpc::QueueScenario:
|
||||
case GossipOptionNpc::GarrisonArchitect:
|
||||
case GossipOptionNpc::GarrisonMission:
|
||||
case GossipOptionNpc::ShipmentCrafter:
|
||||
case GossipOptionNpc::GarrisonTradeskill:
|
||||
case GossipOptionNpc::GarrisonRecruitment:
|
||||
case GossipOptionNpc::AdventureMap:
|
||||
case GossipOptionNpc::GarrisonTalent:
|
||||
case GossipOptionNpc::ContributionCollector:
|
||||
case GossipOptionNpc::AzeriteRespec:
|
||||
case GossipOptionNpc::IslandsMission:
|
||||
case GossipOptionNpc::UIItemInteraction:
|
||||
case GossipOptionNpc::WorldMap:
|
||||
case GossipOptionNpc::Soulbind:
|
||||
case GossipOptionNpc::ChromieTime:
|
||||
case GossipOptionNpc::CovenantPreview:
|
||||
case GossipOptionNpc::RuneforgeLegendaryCrafting:
|
||||
case GossipOptionNpc::NewPlayerGuide:
|
||||
case GossipOptionNpc::RuneforgeLegendaryUpgrade:
|
||||
case GossipOptionNpc::CovenantRenown:
|
||||
break; // NYI
|
||||
default:
|
||||
TC_LOG_ERROR("sql.sql", "Creature entry %u has unknown gossip option %u for menu %u.", creature->GetEntry(), itr->second.OptionType, itr->second.MenuID);
|
||||
TC_LOG_ERROR("sql.sql", "Creature entry %u has an unknown gossip option icon %u for menu %u.", creature->GetEntry(), AsUnderlyingType(itr->second.OptionNpc), itr->second.MenuID);
|
||||
canTalk = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (GameObject* go = source->ToGameObject())
|
||||
{
|
||||
switch (itr->second.OptionType)
|
||||
switch (itr->second.OptionNpc)
|
||||
{
|
||||
case GOSSIP_OPTION_GOSSIP:
|
||||
case GossipOptionNpc::None:
|
||||
if (go->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER && go->GetGoType() != GAMEOBJECT_TYPE_GOOBER)
|
||||
canTalk = false;
|
||||
break;
|
||||
@@ -14099,7 +14129,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool
|
||||
}
|
||||
}
|
||||
|
||||
menu->GetGossipMenu().AddMenuItem(itr->second.OptionID, itr->second.OptionIcon, strOptionText, 0, itr->second.OptionType, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
menu->GetGossipMenu().AddMenuItem(itr->second.OptionID, itr->second.OptionNpc, strOptionText, 0, AsUnderlyingType(itr->second.OptionNpc), strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
|
||||
menu->GetGossipMenu().AddGossipMenuItemData(itr->second.OptionID, itr->second.ActionMenuID, itr->second.ActionPoiID);
|
||||
}
|
||||
}
|
||||
@@ -14142,12 +14172,12 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
uint32 gossipOptionType = item->OptionType;
|
||||
GossipOptionNpc gossipOptionNpc = item->OptionNpc;
|
||||
ObjectGuid guid = source->GetGUID();
|
||||
|
||||
if (source->GetTypeId() == TYPEID_GAMEOBJECT)
|
||||
{
|
||||
if (gossipOptionType > GOSSIP_OPTION_QUESTGIVER)
|
||||
if (gossipOptionNpc != GossipOptionNpc::None)
|
||||
{
|
||||
TC_LOG_ERROR("entities.player", "Player '%s' (%s) requests invalid gossip option for GameObject (Entry: %u)",
|
||||
GetName().c_str(), GetGUID().ToString().c_str(), source->GetEntry());
|
||||
@@ -14167,9 +14197,9 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
|
||||
return;
|
||||
}
|
||||
|
||||
switch (gossipOptionType)
|
||||
switch (gossipOptionNpc)
|
||||
{
|
||||
case GOSSIP_OPTION_GOSSIP:
|
||||
case GossipOptionNpc::None:
|
||||
{
|
||||
if (menuItemData->GossipActionPoi)
|
||||
PlayerTalkClass->SendPointOfInterest(menuItemData->GossipActionPoi);
|
||||
@@ -14182,57 +14212,36 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
|
||||
|
||||
break;
|
||||
}
|
||||
case GOSSIP_OPTION_SPIRITHEALER:
|
||||
case GossipOptionNpc::Vendor:
|
||||
GetSession()->SendListInventory(guid);
|
||||
break;
|
||||
case GossipOptionNpc::TaxiNode:
|
||||
GetSession()->SendTaxiMenu(source->ToCreature());
|
||||
break;
|
||||
case GossipOptionNpc::Trainer:
|
||||
GetSession()->SendTrainerList(source->ToCreature(), sObjectMgr->GetCreatureTrainerForGossipOption(source->GetEntry(), menuId, gossipListId));
|
||||
break;
|
||||
case GossipOptionNpc::SpiritHealer:
|
||||
if (isDead())
|
||||
source->ToCreature()->CastSpell(source->ToCreature(), 17251, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
|
||||
.SetOriginalCaster(GetGUID()));
|
||||
break;
|
||||
case GOSSIP_OPTION_QUESTGIVER:
|
||||
PrepareQuestMenu(guid);
|
||||
SendPreparedQuest(source);
|
||||
break;
|
||||
case GOSSIP_OPTION_VENDOR:
|
||||
case GOSSIP_OPTION_ARMORER:
|
||||
GetSession()->SendListInventory(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_STABLEPET:
|
||||
GetSession()->SendStablePet(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_TRAINER:
|
||||
GetSession()->SendTrainerList(source->ToCreature(), sObjectMgr->GetCreatureTrainerForGossipOption(source->GetEntry(), menuId, gossipListId));
|
||||
break;
|
||||
case GOSSIP_OPTION_LEARNDUALSPEC:
|
||||
break;
|
||||
case GOSSIP_OPTION_UNLEARNTALENTS:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SendRespecWipeConfirm(guid, sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : GetNextResetTalentsCost());
|
||||
break;
|
||||
case GOSSIP_OPTION_TAXIVENDOR:
|
||||
GetSession()->SendTaxiMenu(source->ToCreature());
|
||||
break;
|
||||
case GOSSIP_OPTION_INNKEEPER:
|
||||
case GossipOptionNpc::Binder:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SetBindPoint(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_BANKER:
|
||||
case GossipOptionNpc::Banker:
|
||||
GetSession()->SendShowBank(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_PETITIONER:
|
||||
case GossipOptionNpc::PetitionVendor:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
GetSession()->SendPetitionShowList(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_TABARDDESIGNER:
|
||||
case GossipOptionNpc::TabardVendor:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
GetSession()->SendTabardVendorActivate(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_AUCTIONEER:
|
||||
GetSession()->SendAuctionHello(guid, source->ToCreature());
|
||||
break;
|
||||
case GOSSIP_OPTION_SPIRITGUIDE:
|
||||
PrepareGossipMenu(source);
|
||||
SendPreparedGossip(source);
|
||||
break;
|
||||
case GOSSIP_OPTION_BATTLEFIELD:
|
||||
case GossipOptionNpc::BattleMaster:
|
||||
{
|
||||
BattlegroundTypeId bgTypeId = sBattlegroundMgr->GetBattleMasterBG(source->GetEntry());
|
||||
|
||||
@@ -14246,11 +14255,43 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men
|
||||
sBattlegroundMgr->SendBattlegroundList(this, guid, bgTypeId);
|
||||
break;
|
||||
}
|
||||
case GOSSIP_OPTION_TRANSMOGRIFIER:
|
||||
case GossipOptionNpc::Auctioneer:
|
||||
GetSession()->SendAuctionHello(guid, source->ToCreature());
|
||||
break;
|
||||
case GossipOptionNpc::TalentMaster:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SendRespecWipeConfirm(guid, sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : GetNextResetTalentsCost(), SPEC_RESET_TALENTS);
|
||||
break;
|
||||
case GossipOptionNpc::StableMaster:
|
||||
GetSession()->SendStablePet(guid);
|
||||
break;
|
||||
case GossipOptionNpc::PetSpecializationMaster:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SendRespecWipeConfirm(guid, sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : GetNextResetTalentsCost(), SPEC_RESET_PET_TALENTS);
|
||||
break;
|
||||
case GossipOptionNpc::DisableXPGain:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SetPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN);
|
||||
break;
|
||||
case GossipOptionNpc::EnableXPGain:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
RemovePlayerFlag(PLAYER_FLAGS_NO_XP_GAIN);
|
||||
break;
|
||||
case GossipOptionNpc::Mailbox:
|
||||
GetSession()->SendShowMailBox(guid);
|
||||
break;
|
||||
case GossipOptionNpc::SpecializationMaster:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SendRespecWipeConfirm(guid, 0, SPEC_RESET_SPECIALIZATION);
|
||||
break;
|
||||
case GossipOptionNpc::GlyphMaster:
|
||||
PlayerTalkClass->SendCloseGossip();
|
||||
SendRespecWipeConfirm(guid, 0, SPEC_RESET_GLYPHS);
|
||||
break;
|
||||
case GossipOptionNpc::Transmogrify:
|
||||
GetSession()->SendOpenTransmogrifier(guid);
|
||||
break;
|
||||
case GOSSIP_OPTION_MAILBOX:
|
||||
GetSession()->SendShowMailBox(guid);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -1719,7 +1719,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
bool m_mailsUpdated;
|
||||
|
||||
void SetBindPoint(ObjectGuid guid) const;
|
||||
void SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost) const;
|
||||
void SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost, SpecResetType respecType) const;
|
||||
void RegenerateAll();
|
||||
void Regenerate(Powers power);
|
||||
void RegenerateHealth();
|
||||
|
||||
@@ -9611,8 +9611,8 @@ void ObjectMgr::LoadGossipMenuItems()
|
||||
_gossipMenuItemsStore.clear();
|
||||
|
||||
QueryResult result = WorldDatabase.Query(
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
"SELECT MenuID, OptionID, OptionIcon, OptionText, OptionBroadcastTextID, OptionType, OptionNpcFlag, Language, ActionMenuID, ActionPoiID, BoxCoded, BoxMoney, BoxText, BoxBroadcastTextID "
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
"SELECT MenuID, OptionID, OptionNpc, OptionText, OptionBroadcastTextID, OptionNpcFlag, Language, ActionMenuID, ActionPoiID, BoxCoded, BoxMoney, BoxText, BoxBroadcastTextID "
|
||||
"FROM gossip_menu_option ORDER BY MenuID, OptionID");
|
||||
|
||||
if (!result)
|
||||
@@ -9629,23 +9629,22 @@ void ObjectMgr::LoadGossipMenuItems()
|
||||
|
||||
gMenuItem.MenuID = fields[0].GetUInt32();
|
||||
gMenuItem.OptionID = fields[1].GetUInt32();
|
||||
gMenuItem.OptionIcon = GossipOptionIcon(fields[2].GetUInt8());
|
||||
gMenuItem.OptionNpc = GossipOptionNpc(fields[2].GetUInt8());
|
||||
gMenuItem.OptionText = fields[3].GetString();
|
||||
gMenuItem.OptionBroadcastTextID = fields[4].GetUInt32();
|
||||
gMenuItem.OptionType = fields[5].GetUInt32();
|
||||
gMenuItem.OptionNpcFlag = fields[6].GetUInt64();
|
||||
gMenuItem.Language = fields[7].GetUInt32();
|
||||
gMenuItem.ActionMenuID = fields[8].GetUInt32();
|
||||
gMenuItem.ActionPoiID = fields[9].GetUInt32();
|
||||
gMenuItem.BoxCoded = fields[10].GetBool();
|
||||
gMenuItem.BoxMoney = fields[11].GetUInt32();
|
||||
gMenuItem.BoxText = fields[12].GetString();
|
||||
gMenuItem.BoxBroadcastTextID = fields[13].GetUInt32();
|
||||
gMenuItem.OptionNpcFlag = fields[5].GetUInt64();
|
||||
gMenuItem.Language = fields[6].GetUInt32();
|
||||
gMenuItem.ActionMenuID = fields[7].GetUInt32();
|
||||
gMenuItem.ActionPoiID = fields[8].GetUInt32();
|
||||
gMenuItem.BoxCoded = fields[9].GetBool();
|
||||
gMenuItem.BoxMoney = fields[10].GetUInt32();
|
||||
gMenuItem.BoxText = fields[11].GetString();
|
||||
gMenuItem.BoxBroadcastTextID = fields[12].GetUInt32();
|
||||
|
||||
if (gMenuItem.OptionIcon >= GossipOptionIcon::Count)
|
||||
if (gMenuItem.OptionNpc >= GossipOptionNpc::Count)
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown icon id %u. Replacing with GossipOptionIcon::None", gMenuItem.MenuID, gMenuItem.OptionID, uint32(gMenuItem.OptionIcon));
|
||||
gMenuItem.OptionIcon = GossipOptionIcon::None;
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown NPC option id %u. Replacing with GossipOptionNpc::None", gMenuItem.MenuID, gMenuItem.OptionID, AsUnderlyingType(gMenuItem.OptionNpc));
|
||||
gMenuItem.OptionNpc = GossipOptionNpc::None;
|
||||
}
|
||||
|
||||
if (gMenuItem.OptionBroadcastTextID)
|
||||
@@ -9657,18 +9656,25 @@ void ObjectMgr::LoadGossipMenuItems()
|
||||
}
|
||||
}
|
||||
|
||||
if (gMenuItem.OptionType >= GOSSIP_OPTION_MAX)
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.OptionType);
|
||||
|
||||
if (gMenuItem.Language && !sLanguagesStore.LookupEntry(gMenuItem.Language))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing Language %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.Language);
|
||||
gMenuItem.Language = 0;
|
||||
}
|
||||
|
||||
if (gMenuItem.ActionPoiID && !GetPointOfInterest(gMenuItem.ActionPoiID))
|
||||
if (gMenuItem.ActionMenuID && gMenuItem.OptionNpc != GossipOptionNpc::None)
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing ActionPoiID %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.ActionPoiID);
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u can not use ActionMenuID for GossipOptionNpc different from GossipOptionNpc::None, ignoring", gMenuItem.MenuID, gMenuItem.OptionID);
|
||||
gMenuItem.ActionMenuID = 0;
|
||||
}
|
||||
|
||||
if (gMenuItem.ActionPoiID)
|
||||
{
|
||||
if (gMenuItem.OptionNpc != GossipOptionNpc::None)
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u can not use ActionPoiID for GossipOptionNpc different from GossipOptionNpc::None, ignoring", gMenuItem.MenuID, gMenuItem.OptionID);
|
||||
else if (!GetPointOfInterest(gMenuItem.ActionPoiID))
|
||||
TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing ActionPoiID %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.ActionPoiID);
|
||||
|
||||
gMenuItem.ActionPoiID = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ class Item;
|
||||
class Unit;
|
||||
class Vehicle;
|
||||
class Map;
|
||||
enum class GossipOptionIcon : uint8;
|
||||
enum class GossipOptionNpc : uint8;
|
||||
struct AccessRequirement;
|
||||
struct DeclinedName;
|
||||
struct DungeonEncounterEntry;
|
||||
@@ -744,10 +744,9 @@ struct GossipMenuItems
|
||||
{
|
||||
uint32 MenuID;
|
||||
uint32 OptionID;
|
||||
GossipOptionIcon OptionIcon;
|
||||
GossipOptionNpc OptionNpc;
|
||||
std::string OptionText;
|
||||
uint32 OptionBroadcastTextID;
|
||||
uint32 OptionType;
|
||||
uint32 OptionNpcFlag;
|
||||
uint32 Language;
|
||||
uint32 ActionMenuID;
|
||||
|
||||
@@ -92,18 +92,12 @@ void WorldSession::HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRe
|
||||
if (!unit->CanResetTalents(_player))
|
||||
return;
|
||||
|
||||
if (!_player->PlayerTalkClass->GetGossipMenu().HasMenuItemType(GOSSIP_OPTION_UNLEARNTALENTS))
|
||||
return;
|
||||
|
||||
// remove fake death
|
||||
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
|
||||
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
|
||||
|
||||
if (!_player->ResetTalents())
|
||||
{
|
||||
GetPlayer()->SendRespecWipeConfirm(ObjectGuid::Empty, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
_player->SendTalentsInfoData();
|
||||
unit->CastSpell(_player, 14867, true); //spell: "Untalent Visual Effect"
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "Position.h"
|
||||
#include <array>
|
||||
|
||||
enum class GossipOptionIcon : uint8;
|
||||
enum class GossipOptionNpc : uint8;
|
||||
enum class GossipOptionStatus : uint8;
|
||||
enum class GossipOptionRewardType : uint8;
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace WorldPackets
|
||||
struct ClientGossipOptions
|
||||
{
|
||||
int32 ClientOption = 0;
|
||||
GossipOptionIcon OptionNPC = GossipOptionIcon(0);
|
||||
GossipOptionNpc OptionNPC = GossipOptionNpc(0);
|
||||
uint8 OptionFlags = 0;
|
||||
int32 OptionCost = 0;
|
||||
uint32 OptionLanguage = 0;
|
||||
|
||||
@@ -2266,7 +2266,7 @@ void Spell::EffectUntrainTalents()
|
||||
if (!unitTarget || m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
unitTarget->ToPlayer()->SendRespecWipeConfirm(m_caster->GetGUID(), sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : unitTarget->ToPlayer()->GetNextResetTalentsCost());
|
||||
unitTarget->ToPlayer()->SendRespecWipeConfirm(m_caster->GetGUID(), sWorld->getBoolConfig(CONFIG_NO_RESET_TALENT_COST) ? 0 : unitTarget->ToPlayer()->GetNextResetTalentsCost(), SPEC_RESET_TALENTS);
|
||||
}
|
||||
|
||||
void Spell::EffectTeleUnitsFaceCaster()
|
||||
|
||||
+1
-1
@@ -478,7 +478,7 @@ class npc_lokhtos_darkbargainer : public CreatureScript
|
||||
!player->HasItemCount(ITEM_THRORIUM_BROTHERHOOD_CONTRACT, 1, true) &&
|
||||
player->HasItemCount(ITEM_SULFURON_INGOT))
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ITEM_GET_CONTRACT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_GET_CONTRACT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
}
|
||||
|
||||
if (player->GetReputationRank(59) < REP_FRIENDLY)
|
||||
|
||||
+4
-4
@@ -67,7 +67,7 @@ class boss_gloomrel : public CreatureScript
|
||||
switch (action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF + 1:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ITEM_TEACH_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_TEACH_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
|
||||
SendGossipMenuFor(player, 2606, me->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 11:
|
||||
@@ -75,7 +75,7 @@ class boss_gloomrel : public CreatureScript
|
||||
player->CastSpell(player, SPELL_LEARN_SMELT, false);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 2:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ITEM_TEACH_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_TEACH_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22);
|
||||
SendGossipMenuFor(player, 2604, me->GetGUID());
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 22:
|
||||
@@ -90,10 +90,10 @@ class boss_gloomrel : public CreatureScript
|
||||
bool OnGossipHello(Player* player) override
|
||||
{
|
||||
if (player->GetQuestRewardStatus(QUEST_SPECTRAL_CHALICE) == 1 && player->GetSkillValue(SKILL_MINING) >= DATA_SKILLPOINT_MIN && !player->HasSpell(SPELL_SMELT_DARK_IRON))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ITEM_TEACH_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_TEACH_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
if (player->GetQuestRewardStatus(QUEST_SPECTRAL_CHALICE) == 0 && player->GetSkillValue(SKILL_MINING) >= DATA_SKILLPOINT_MIN)
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ITEM_TRIBUTE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_TRIBUTE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
return true;
|
||||
|
||||
@@ -377,9 +377,9 @@ public:
|
||||
|
||||
if (player->IsGameMaster())
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon::Auctioneer, OZ_GM_GOSSIP1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionIcon::Auctioneer, OZ_GM_GOSSIP2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
AddGossipItemFor(player, GossipOptionIcon::Auctioneer, OZ_GM_GOSSIP3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, OZ_GM_GOSSIP1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, OZ_GM_GOSSIP2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, OZ_GM_GOSSIP3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
}
|
||||
|
||||
if (!RaidWiped)
|
||||
|
||||
@@ -1620,7 +1620,7 @@ public:
|
||||
player->PrepareQuestMenu(me->GetGUID());
|
||||
|
||||
if (player->GetQuestStatus(12801) == QUEST_STATUS_INCOMPLETE)
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, "I am ready.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, "I am ready.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ class npc_jaina_proudmoore : public CreatureScript
|
||||
AddGossipItemFor(player, GOSSIP_ITEM_ALLY_RETREAT_MID, GOSSIP_ITEM_ALLY_RETREAT_OID, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
|
||||
if (player->IsGameMaster())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Trainer, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
|
||||
SendGossipMenuFor(player, 907, me->GetGUID());
|
||||
return true;
|
||||
@@ -196,7 +196,7 @@ class npc_thrall : public CreatureScript
|
||||
}
|
||||
|
||||
if (player->IsGameMaster())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Trainer, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
|
||||
SendGossipMenuFor(player, 907, me->GetGUID());
|
||||
return true;
|
||||
|
||||
+4
-4
@@ -306,7 +306,7 @@ class npc_chromie_start : public CreatureScript
|
||||
if (InstanceScript* instance = me->GetInstanceScript())
|
||||
{
|
||||
if (player->CanBeGameMaster()) // GM instance state override menu
|
||||
AddGossipItemFor(player, GossipOptionIcon::SpiritHealer, "[GM] Access instance control panel", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_OPEN_GM_MENU);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, "[GM] Access instance control panel", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_OPEN_GM_MENU);
|
||||
|
||||
uint32 state = instance->GetData(DATA_INSTANCE_PROGRESS);
|
||||
if (state < PURGE_STARTING)
|
||||
@@ -376,16 +376,16 @@ class npc_chromie_start : public CreatureScript
|
||||
me->CastSpell(player, SPELL_SUMMON_ARCANE_DISRUPTOR);
|
||||
break;
|
||||
case GOSSIP_OFFSET_OPEN_GM_MENU:
|
||||
AddGossipItemFor(player, GossipOptionIcon::SpiritHealer, "Teleport all players to Arthas", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, "Teleport all players to Arthas", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL);
|
||||
for (uint32 state = 1; state <= COMPLETE; state = state << 1)
|
||||
{
|
||||
if (GetStableStateFor(COSProgressStates(state)) == state)
|
||||
AddGossipItemFor(player, GossipOptionIcon::SpiritHealer, Trinity::StringFormat("Set instance progress to 0x%05X", state), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL + state);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, Trinity::StringFormat("Set instance progress to 0x%05X", state), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL + state);
|
||||
}
|
||||
for (uint32 state = 1; state <= COMPLETE; state = state << 1)
|
||||
{
|
||||
if (GetStableStateFor(COSProgressStates(state)) != state)
|
||||
AddGossipItemFor(player, GossipOptionIcon::SpiritHealer, Trinity::StringFormat("Force state to 0x%05X (UNSTABLE)", state), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL + state);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, Trinity::StringFormat("Force state to 0x%05X (UNSTABLE)", state), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + GOSSIP_OFFSET_GM_INITIAL + state);
|
||||
}
|
||||
SendGossipMenuFor(player, GOSSIP_TEXT_SKIP_1, me->GetGUID());
|
||||
break;
|
||||
|
||||
@@ -92,7 +92,7 @@ public:
|
||||
AddGossipItemFor(player, GOSSIP_MENU_EROZION, GOSSIP_OPTION_BOMB, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
if (player->GetQuestStatus(QUEST_ENTRY_RETURN) == QUEST_STATUS_COMPLETE)
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_HELLO_EROZION2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_HELLO_EROZION2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
|
||||
SendGossipMenuFor(player, 9778, me->GetGUID());
|
||||
|
||||
|
||||
@@ -1404,7 +1404,7 @@ struct npc_hidden_cultist : public ScriptedAI
|
||||
AddGossipItemFor(player, charGossipItem, GOSSIP_ITEM_HIDDEN_CULTIST_OPTIONID, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
if (me->IsVendor())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
|
||||
SendGossipMenuFor(player, uiGossipText, me->GetGUID());
|
||||
|
||||
|
||||
@@ -129,16 +129,16 @@ struct npc_wg_demolisher_engineer : public ScriptedAI
|
||||
if (CanBuild())
|
||||
{
|
||||
if (player->HasAura(SPELL_CORPORAL))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
else if (player->HasAura(SPELL_LIEUTENANT))
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_HELLO_DEMO2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_HELLO_DEMO3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_HELLO_DEMO2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_HELLO_DEMO3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_HELLO_DEMO4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_HELLO_DEMO4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
|
||||
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
return true;
|
||||
@@ -210,7 +210,7 @@ struct npc_wg_spirit_guide : public ScriptedAI
|
||||
GraveyardVect graveyard = wintergrasp->GetGraveyardVector();
|
||||
for (uint8 i = 0; i < graveyard.size(); i++)
|
||||
if (graveyard[i]->GetControlTeamId() == player->GetTeamId())
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, player->GetSession()->GetTrinityString(((BfGraveyardWG*)graveyard[i])->GetTextId()), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + i);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, player->GetSession()->GetTrinityString(((BfGraveyardWG*)graveyard[i])->GetTextId()), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + i);
|
||||
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
return true;
|
||||
@@ -278,7 +278,7 @@ struct npc_wg_queue : public ScriptedAI
|
||||
|
||||
if (wintergrasp->IsWarTime())
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_WAR : WG_NPCQUEUE_TEXT_A_WAR, me->GetGUID());
|
||||
}
|
||||
else
|
||||
@@ -287,7 +287,7 @@ struct npc_wg_queue : public ScriptedAI
|
||||
player->SendUpdateWorldState(4354, GameTime::GetGameTime() + timer);
|
||||
if (timer < 15 * MINUTE)
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_QUEUE : WG_NPCQUEUE_TEXT_A_QUEUE, me->GetGUID());
|
||||
}
|
||||
else
|
||||
|
||||
@@ -454,7 +454,7 @@ public:
|
||||
QuestStatus status = player->GetQuestStatus(QUEST_DOING_YOUR_DUTY);
|
||||
if (status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_REWARDED)
|
||||
{
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_USE_OUTHOUSE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_USE_OUTHOUSE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
SendGossipMenuFor(player, GOSSIP_OUTHOUSE_VACANT, me->GetGUID());
|
||||
}
|
||||
else
|
||||
|
||||
@@ -444,10 +444,10 @@ public:
|
||||
player->PrepareQuestMenu(me->GetGUID());
|
||||
|
||||
if (me->IsVendor())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
|
||||
if (me->IsTrainer())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
|
||||
if (player->HasSkill(SKILL_ALCHEMY) && player->GetBaseSkillValue(SKILL_ALCHEMY) >= 350 && player->GetLevel() > 67)
|
||||
{
|
||||
@@ -457,21 +457,21 @@ public:
|
||||
{
|
||||
case N_TRAINER_TRANSMUTE: //Zarevhi
|
||||
if (!HasAlchemySpell(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
if (player->HasSpell(S_TRANSMUTE))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
break;
|
||||
case N_TRAINER_ELIXIR: //Lorokeem
|
||||
if (!HasAlchemySpell(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
if (player->HasSpell(S_ELIXIR))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
break;
|
||||
case N_TRAINER_POTION: //Lauranna Thar'well
|
||||
if (!HasAlchemySpell(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
if (player->HasSpell(S_POTION))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -521,17 +521,17 @@ public:
|
||||
switch (me->GetEntry())
|
||||
{
|
||||
case N_TRAINER_TRANSMUTE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_ELIXIR:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_POTION:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
@@ -546,17 +546,17 @@ public:
|
||||
switch (me->GetEntry())
|
||||
{
|
||||
case N_TRAINER_TRANSMUTE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_ELIXIR:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_POTION:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
@@ -621,10 +621,10 @@ public:
|
||||
player->PrepareQuestMenu(me->GetGUID());
|
||||
|
||||
if (me->IsVendor())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
|
||||
if (me->IsTrainer())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
|
||||
uint32 creatureId = me->GetEntry();
|
||||
//WEAPONSMITH & ARMORSMITH
|
||||
@@ -635,19 +635,19 @@ public:
|
||||
case N_TRAINER_SMITHOMNI1:
|
||||
case N_TRAINER_SMITHOMNI2:
|
||||
if (!player->HasSpell(S_ARMOR) && !player->HasSpell(S_WEAPON) && player->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY)
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
if (!player->HasSpell(S_WEAPON) && !player->HasSpell(S_ARMOR) && player->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY)
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
break;
|
||||
case N_TRAINER_WEAPON1:
|
||||
case N_TRAINER_WEAPON2:
|
||||
if (player->HasSpell(S_WEAPON))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
break;
|
||||
case N_TRAINER_ARMOR1:
|
||||
case N_TRAINER_ARMOR2:
|
||||
if (player->HasSpell(S_ARMOR))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -658,21 +658,21 @@ public:
|
||||
{
|
||||
case N_TRAINER_HAMMER:
|
||||
if (!HasWeaponSub(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
if (player->HasSpell(S_HAMMER))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8);
|
||||
break;
|
||||
case N_TRAINER_AXE:
|
||||
if (!HasWeaponSub(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
if (player->HasSpell(S_AXE))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9);
|
||||
break;
|
||||
case N_TRAINER_SWORD:
|
||||
if (!HasWeaponSub(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7);
|
||||
if (player->HasSpell(S_SWORD))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -754,17 +754,17 @@ public:
|
||||
switch (me->GetEntry())
|
||||
{
|
||||
case N_TRAINER_HAMMER:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID (TALK_HAMMER_LEARN)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_AXE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID (TALK_AXE_LEARN)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_SWORD:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID (TALK_SWORD_LEARN)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
@@ -782,23 +782,23 @@ public:
|
||||
case N_TRAINER_WEAPON2:
|
||||
case N_TRAINER_ARMOR1:
|
||||
case N_TRAINER_ARMOR2:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(player), false);
|
||||
//unknown textID (TALK_UNLEARN_AXEORWEAPON)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
|
||||
case N_TRAINER_HAMMER:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
|
||||
//unknown textID (TALK_HAMMER_UNLEARN)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_AXE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
|
||||
//unknown textID (TALK_AXE_UNLEARN)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_SWORD:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false);
|
||||
//unknown textID (TALK_SWORD_UNLEARN)
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
@@ -922,7 +922,7 @@ public:
|
||||
}
|
||||
|
||||
if (canLearn)
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, gossipItem, me->GetEntry(), GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, gossipItem, me->GetEntry(), GOSSIP_ACTION_INFO_DEF + 1);
|
||||
|
||||
SendGossipMenuFor(player, npcTextId ? npcTextId : player->GetGossipTextId(me), me->GetGUID());
|
||||
return true;
|
||||
@@ -984,10 +984,10 @@ public:
|
||||
player->PrepareQuestMenu(me->GetGUID());
|
||||
|
||||
if (me->IsVendor())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
|
||||
if (me->IsTrainer())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
|
||||
if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 250 && player->GetLevel() > 49)
|
||||
{
|
||||
@@ -996,17 +996,17 @@ public:
|
||||
case N_TRAINER_DRAGON1:
|
||||
case N_TRAINER_DRAGON2:
|
||||
if (player->HasSpell(S_DRAGON))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
break;
|
||||
case N_TRAINER_ELEMENTAL1:
|
||||
case N_TRAINER_ELEMENTAL2:
|
||||
if (player->HasSpell(S_ELEMENTAL))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
break;
|
||||
case N_TRAINER_TRIBAL1:
|
||||
case N_TRAINER_TRIBAL2:
|
||||
if (player->HasSpell(S_TRIBAL))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1046,19 +1046,19 @@ public:
|
||||
{
|
||||
case N_TRAINER_DRAGON1:
|
||||
case N_TRAINER_DRAGON2:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_ELEMENTAL1:
|
||||
case N_TRAINER_ELEMENTAL2:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_TRIBAL1:
|
||||
case N_TRAINER_TRIBAL2:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
@@ -1119,10 +1119,10 @@ public:
|
||||
player->PrepareQuestMenu(me->GetGUID());
|
||||
|
||||
if (me->IsVendor())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Vendor, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
|
||||
|
||||
if (me->IsTrainer())
|
||||
AddGossipItemFor(player, GossipOptionIcon::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
AddGossipItemFor(player, GossipOptionNpc::Trainer, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
|
||||
|
||||
//TAILORING SPEC
|
||||
if (player->HasSkill(SKILL_TAILORING) && player->GetBaseSkillValue(SKILL_TAILORING) >= 350 && player->GetLevel() > 59)
|
||||
@@ -1133,21 +1133,21 @@ public:
|
||||
{
|
||||
case N_TRAINER_SPELLFIRE:
|
||||
if (!HasTailorSpell(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
if (player->HasSpell(S_SPELLFIRE))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
break;
|
||||
case N_TRAINER_MOONCLOTH:
|
||||
if (!HasTailorSpell(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
if (player->HasSpell(S_MOONCLOTH))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
break;
|
||||
case N_TRAINER_SHADOWEAVE:
|
||||
if (!HasTailorSpell(player))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
if (player->HasSpell(S_SHADOWEAVE))
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1197,17 +1197,17 @@ public:
|
||||
switch (me->GetEntry())
|
||||
{
|
||||
case N_TRAINER_SPELLFIRE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_MOONCLOTH:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_SHADOWEAVE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
@@ -1222,17 +1222,17 @@ public:
|
||||
switch (me->GetEntry())
|
||||
{
|
||||
case N_TRAINER_SPELLFIRE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_MOONCLOTH:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
case N_TRAINER_SHADOWEAVE:
|
||||
AddGossipItemFor(player, GossipOptionIcon::None, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
|
||||
AddGossipItemFor(player, GossipOptionNpc::None, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false);
|
||||
//unknown textID ()
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
|
||||
break;
|
||||
|
||||
@@ -1705,66 +1705,6 @@ class npc_wormhole : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
/*######
|
||||
## npc_experience
|
||||
######*/
|
||||
|
||||
enum BehstenSlahtz
|
||||
{
|
||||
MENU_ID_XP_ON_OFF = 10638,
|
||||
NPC_TEXT_XP_ON_OFF = 14736,
|
||||
OPTION_ID_XP_OFF = 0, // "I no longer wish to gain experience."
|
||||
OPTION_ID_XP_ON = 1 // "I wish to start gaining experience again."
|
||||
};
|
||||
|
||||
class npc_experience : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_experience() : CreatureScript("npc_experience") { }
|
||||
|
||||
struct npc_experienceAI : public ScriptedAI
|
||||
{
|
||||
npc_experienceAI(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
bool OnGossipHello(Player* player) override
|
||||
{
|
||||
if (player->HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN)) // not gaining XP
|
||||
{
|
||||
AddGossipItemFor(player, MENU_ID_XP_ON_OFF, OPTION_ID_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
SendGossipMenuFor(player, NPC_TEXT_XP_ON_OFF, me->GetGUID());
|
||||
}
|
||||
else // currently gaining XP
|
||||
{
|
||||
AddGossipItemFor(player, MENU_ID_XP_ON_OFF, OPTION_ID_XP_OFF, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
SendGossipMenuFor(player, NPC_TEXT_XP_ON_OFF, me->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
|
||||
{
|
||||
uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF + 1: // XP ON selected
|
||||
player->RemovePlayerFlag(PLAYER_FLAGS_NO_XP_GAIN); // turn on XP gain
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 2: // XP OFF selected
|
||||
player->SetPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN); // turn off XP gain
|
||||
break;
|
||||
}
|
||||
CloseGossipMenuFor(player);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_experienceAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
/*#####
|
||||
# npc_spring_rabbit
|
||||
#####*/
|
||||
@@ -2368,7 +2308,6 @@ void AddSC_npcs_special()
|
||||
RegisterCreatureAI(npc_brewfest_reveler_2);
|
||||
RegisterCreatureAI(npc_training_dummy);
|
||||
new npc_wormhole();
|
||||
new npc_experience();
|
||||
new npc_spring_rabbit();
|
||||
new npc_imp_in_a_ball();
|
||||
new npc_train_wrecker();
|
||||
|
||||
Reference in New Issue
Block a user