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:
Meji
2022-09-08 14:49:03 +02:00
committed by GitHub
co-authored by Shauren
parent 6e9a6700d8
commit 69e0249807
24 changed files with 320 additions and 356 deletions
@@ -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;
+50 -78
View File
@@ -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();
+122 -81
View File
@@ -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;
}
+1 -1
View File
@@ -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();
+26 -20
View File
@@ -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;
}
+2 -3
View File
@@ -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"
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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()
@@ -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)
@@ -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;
@@ -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
+1 -1
View File
@@ -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
+56 -56
View File
@@ -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;
-61
View File
@@ -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();