aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers')
-rw-r--r--src/server/game/Handlers/AuthHandler.cpp3
-rw-r--r--src/server/game/Handlers/BattlePetHandler.cpp2
-rw-r--r--src/server/game/Handlers/CalendarHandler.cpp7
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp6
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp31
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp35
-rw-r--r--src/server/game/Handlers/DuelHandler.cpp2
-rw-r--r--src/server/game/Handlers/HotfixHandler.cpp7
-rw-r--r--src/server/game/Handlers/InspectHandler.cpp10
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp12
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp19
-rw-r--r--src/server/game/Handlers/SkillHandler.cpp6
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp4
-rw-r--r--src/server/game/Handlers/TaxiHandler.cpp10
15 files changed, 65 insertions, 91 deletions
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp
index 296bf506edc..251708cb48d 100644
--- a/src/server/game/Handlers/AuthHandler.cpp
+++ b/src/server/game/Handlers/AuthHandler.cpp
@@ -98,6 +98,9 @@ void WorldSession::SendFeatureSystemStatusGlueScreen()
features.BpayStoreDisabledByParentalControls = false;
features.CharUndeleteEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_CHARACTER_UNDELETE_ENABLED);
features.BpayStoreEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_BPAY_STORE_ENABLED);
+ features.MaxCharactersPerRealm = sWorld->getIntConfig(CONFIG_CHARACTERS_PER_REALM);
+ features.MinimumExpansionLevel = EXPANSION_CLASSIC;
+ features.MaximumExpansionLevel = sWorld->getIntConfig(CONFIG_EXPANSION);
SendPacket(features.Write());
}
diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp
index 295b0c52a4d..ed439b8fab6 100644
--- a/src/server/game/Handlers/BattlePetHandler.cpp
+++ b/src/server/game/Handlers/BattlePetHandler.cpp
@@ -68,7 +68,7 @@ void WorldSession::HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet& c
void WorldSession::HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon& battlePetSummon)
{
- if (_player->GetGuidValue(PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) != battlePetSummon.PetGuid)
+ if (_player->GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) != battlePetSummon.PetGuid)
GetBattlePetMgr()->SummonPet(battlePetSummon.PetGuid);
else
GetBattlePetMgr()->DismissPet();
diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp
index bf9ddd12b7b..43de963bda4 100644
--- a/src/server/game/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Handlers/CalendarHandler.cpp
@@ -79,8 +79,7 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet
WorldPackets::Calendar::CalendarSendCalendarEventInfo eventInfo;
eventInfo.EventID = event->GetEventId();
eventInfo.Date = event->GetDate();
- Guild* guild = sGuildMgr->GetGuildById(event->GetGuildId());
- eventInfo.EventGuildID = guild ? guild->GetGUID() : ObjectGuid::Empty;
+ eventInfo.EventClubID = event->GetGuildId();
eventInfo.EventName = event->GetTitle();
eventInfo.EventType = event->GetType();
eventInfo.Flags = event->GetFlags();
@@ -124,10 +123,10 @@ void WorldSession::HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEve
sCalendarMgr->SendCalendarCommandResult(_player->GetGUID(), CALENDAR_ERROR_EVENT_INVALID);
}
-void WorldSession::HandleCalendarGuildFilter(WorldPackets::Calendar::CalendarGuildFilter& calendarGuildFilter)
+void WorldSession::HandleCalendarCommunityFilter(WorldPackets::Calendar::CalendarCommunityFilter& calendarCommunityFilter)
{
if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId()))
- guild->MassInviteToEvent(this, calendarGuildFilter.MinLevel, calendarGuildFilter.MaxLevel, calendarGuildFilter.MaxRankOrder);
+ guild->MassInviteToEvent(this, calendarCommunityFilter.MinLevel, calendarCommunityFilter.MaxLevel, calendarCommunityFilter.MaxRankOrder);
}
void WorldSession::HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent)
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp
index 90e6150a284..529bfb50fdc 100644
--- a/src/server/game/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Handlers/ChannelHandler.cpp
@@ -146,9 +146,6 @@ void WorldSession::HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlay
case CMSG_CHAT_CHANNEL_MODERATOR:
channel->SetModerator(GetPlayer(), packet.Name);
break;
- case CMSG_CHAT_CHANNEL_MUTE:
- channel->SetMute(GetPlayer(), packet.Name);
- break;
case CMSG_CHAT_CHANNEL_SET_OWNER:
channel->SetOwner(GetPlayer(), packet.Name);
break;
@@ -161,9 +158,6 @@ void WorldSession::HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlay
case CMSG_CHAT_CHANNEL_UNMODERATOR:
channel->UnsetModerator(GetPlayer(), packet.Name);
break;
- case CMSG_CHAT_CHANNEL_UNMUTE:
- channel->UnsetMute(GetPlayer(), packet.Name);
- break;
case CMSG_CHAT_CHANNEL_UNSILENCE_ALL:
channel->UnsilenceAll(GetPlayer(), packet.Name);
break;
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 210b2f0c915..c5b4e0487ff 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -349,6 +349,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
while (result->NextRow());
}
+ charEnum.IsTestDemonHunterCreationAllowed = canAlwaysCreateDemonHunter;
charEnum.IsDemonHunterCreationAllowed = GetAccountExpansion() >= EXPANSION_LEGION || canAlwaysCreateDemonHunter;
charEnum.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= EXPANSION_BATTLE_FOR_AZEROTH;
@@ -506,8 +507,8 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
if (!HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK))
{
- uint32 raceMaskDisabled = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK);
- if ((1 << (charCreate.CreateInfo->Race - 1)) & raceMaskDisabled)
+ uint64 raceMaskDisabled = sWorld->GetUInt64Config(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK);
+ if ((UI64LIT(1) << (charCreate.CreateInfo->Race - 1)) & raceMaskDisabled)
{
SendCharCreate(CHAR_CREATE_DISABLED);
return;
@@ -733,7 +734,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
LoginDatabase.CommitTransaction(trans);
- SendCharCreate(CHAR_CREATE_SUCCESS);
+ SendCharCreate(CHAR_CREATE_SUCCESS, newChar.GetGUID());
TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Create Character: %s %s", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().ToString().c_str());
sScriptMgr->OnPlayerCreate(&newChar);
@@ -972,16 +973,6 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
WorldPackets::BattlePet::BattlePetJournalLockAcquired lock;
SendPacket(lock.Write());
- WorldPackets::Artifact::ArtifactKnowledge artifactKnowledge;
- artifactKnowledge.ArtifactCategoryID = ARTIFACT_CATEGORY_PRIMARY;
- artifactKnowledge.KnowledgeLevel = sWorld->getIntConfig(CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE);
- SendPacket(artifactKnowledge.Write());
-
- WorldPackets::Artifact::ArtifactKnowledge artifactKnowledgeFishingPole;
- artifactKnowledgeFishingPole.ArtifactCategoryID = ARTIFACT_CATEGORY_FISHING;
- artifactKnowledgeFishingPole.KnowledgeLevel = 0;
- SendPacket(artifactKnowledgeFishingPole.Write());
-
pCurrChar->SendInitialPacketsBeforeAddToMap();
//Show cinematic at the first time that player login
@@ -1234,7 +1225,7 @@ void WorldSession::HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packe
void WorldSession::HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet)
{
- GetPlayer()->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex);
+ GetPlayer()->SetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex);
}
void WorldSession::HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet)
@@ -1834,8 +1825,8 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
if (!HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK))
{
- uint32 raceMaskDisabled = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK);
- if ((1 << (factionChangeInfo->RaceID - 1)) & raceMaskDisabled)
+ uint64 raceMaskDisabled = sWorld->GetUInt64Config(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK);
+ if ((UI64LIT(1) << (factionChangeInfo->RaceID - 1)) & raceMaskDisabled)
{
SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo.get());
return;
@@ -1962,7 +1953,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
trans->Append(stmt);
// Race specific languages
- if (factionChangeInfo->RaceID != RACE_ORC && factionChangeInfo->RaceID != RACE_HUMAN)
+ if (factionChangeInfo->RaceID != RACE_ORC && factionChangeInfo->RaceID != RACE_HUMAN && factionChangeInfo->RaceID != RACE_MAGHAR_ORC)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILL_LANGUAGE);
stmt->setUInt64(0, lowGuid);
@@ -1970,6 +1961,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa
switch (factionChangeInfo->RaceID)
{
case RACE_DWARF:
+ case RACE_DARK_IRON_DWARF:
stmt->setUInt16(1, 111);
break;
case RACE_DRAENEI:
@@ -2351,7 +2343,7 @@ void WorldSession::HandleReorderCharacters(WorldPackets::Character::ReorderChara
void WorldSession::HandleOpeningCinematic(WorldPackets::Misc::OpeningCinematic& /*packet*/)
{
// Only players that has not yet gained any experience can use this
- if (_player->GetUInt32Value(PLAYER_XP))
+ if (_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_XP))
return;
if (ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(_player->getClass()))
@@ -2485,10 +2477,11 @@ void WorldSession::HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCha
}));
}
-void WorldSession::SendCharCreate(ResponseCodes result)
+void WorldSession::SendCharCreate(ResponseCodes result, ObjectGuid const& guid /*= ObjectGuid::Empty*/)
{
WorldPackets::Character::CreateChar response;
response.Code = result;
+ response.Guid = guid;
SendPacket(response.Write());
}
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index b056274adca..fb354886846 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -413,41 +413,12 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
void WorldSession::HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& chatAddonMessage)
{
- ChatMsg type;
-
- switch (chatAddonMessage.GetOpcode())
- {
- case CMSG_CHAT_ADDON_MESSAGE_GUILD:
- type = CHAT_MSG_GUILD;
- break;
- case CMSG_CHAT_ADDON_MESSAGE_OFFICER:
- type = CHAT_MSG_OFFICER;
- break;
- case CMSG_CHAT_ADDON_MESSAGE_PARTY:
- type = CHAT_MSG_PARTY;
- break;
- case CMSG_CHAT_ADDON_MESSAGE_RAID:
- type = CHAT_MSG_RAID;
- break;
- case CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT:
- type = CHAT_MSG_INSTANCE_CHAT;
- break;
- default:
- TC_LOG_ERROR("network", "HandleChatAddonMessageOpcode: Unknown addon chat opcode (%u)", chatAddonMessage.GetOpcode());
- return;
- }
-
- HandleChatAddonMessage(type, chatAddonMessage.Prefix, chatAddonMessage.Text);
-}
-
-void WorldSession::HandleChatAddonMessageWhisperOpcode(WorldPackets::Chat::ChatAddonMessageWhisper& chatAddonMessageWhisper)
-{
- HandleChatAddonMessage(CHAT_MSG_WHISPER, chatAddonMessageWhisper.Prefix, chatAddonMessageWhisper.Text, chatAddonMessageWhisper.Target);
+ HandleChatAddonMessage(chatAddonMessage.Params.Type, chatAddonMessage.Params.Prefix, chatAddonMessage.Params.Text);
}
-void WorldSession::HandleChatAddonMessageChannelOpcode(WorldPackets::Chat::ChatAddonMessageChannel& chatAddonMessageChannel)
+void WorldSession::HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted)
{
- HandleChatAddonMessage(CHAT_MSG_CHANNEL, chatAddonMessageChannel.Prefix, chatAddonMessageChannel.Text, chatAddonMessageChannel.Target);
+ HandleChatAddonMessage(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text, chatAddonMessageTargeted.Target);
}
void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, std::string target /*= ""*/)
diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp
index 41892196367..c017617f507 100644
--- a/src/server/game/Handlers/DuelHandler.cpp
+++ b/src/server/game/Handlers/DuelHandler.cpp
@@ -49,7 +49,7 @@ void WorldSession::HandleCanDuel(WorldPackets::Duel::CanDuel& packet)
void WorldSession::HandleDuelResponseOpcode(WorldPackets::Duel::DuelResponse& duelResponse)
{
- if (duelResponse.Accepted)
+ if (duelResponse.Accepted && !duelResponse.Forfeited)
HandleDuelAccepted();
else
HandleDuelCancelled();
diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp
index 0d887769d08..4fc6426c2df 100644
--- a/src/server/game/Handlers/HotfixHandler.cpp
+++ b/src/server/game/Handlers/HotfixHandler.cpp
@@ -73,11 +73,16 @@ void WorldSession::HandleHotfixRequest(WorldPackets::Hotfix::HotfixRequest& hotf
WorldPackets::Hotfix::HotfixResponse::HotfixData hotfixData;
hotfixData.ID = hotfixId;
hotfixData.RecordID = *hotfix;
- if (storage->HasRecord(hotfixData.RecordID))
+ if (storage && storage->HasRecord(hotfixData.RecordID))
{
hotfixData.Data = boost::in_place();
storage->WriteRecord(hotfixData.RecordID, GetSessionDbcLocale(), *hotfixData.Data);
}
+ else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(PAIR64_HIPART(hotfixId), *hotfix))
+ {
+ hotfixData.Data = boost::in_place();
+ hotfixData.Data->append(blobData->data(), blobData->size());
+ }
hotfixQueryResponse.Hotfixes.emplace_back(std::move(hotfixData));
}
diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp
index 2d8c559de51..1121fd4647d 100644
--- a/src/server/game/Handlers/InspectHandler.cpp
+++ b/src/server/game/Handlers/InspectHandler.cpp
@@ -62,6 +62,10 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect)
if (v.second != PLAYERSPELL_REMOVED)
inspectResult.Talents.push_back(v.first);
}
+
+ PlayerPvpTalentMap const& pvpTalents = player->GetPvpTalentMap(player->GetActiveTalentGroup());
+ for (std::size_t i = 0; i < pvpTalents.size(); ++i)
+ inspectResult.PvpTalents[i] = pvpTalents[i];
}
if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId()))
@@ -97,9 +101,9 @@ void WorldSession::HandleRequestHonorStatsOpcode(WorldPackets::Inspect::RequestH
WorldPackets::Inspect::InspectHonorStats honorStats;
honorStats.PlayerGUID = request.TargetGUID;
- honorStats.LifetimeHK = player->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
- honorStats.YesterdayHK = player->GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS);
- honorStats.TodayHK = player->GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS);
+ honorStats.LifetimeHK = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
+ honorStats.YesterdayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS);
+ honorStats.TodayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS);
honorStats.LifetimeMaxRank = 0; /// @todo
SendPacket(honorStats.Write());
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 0ba24d95ac9..b518001ce34 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -516,7 +516,7 @@ void WorldSession::HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet)
Item* pItem = _player->GetItemFromBuyBackSlot(packet.Slot);
if (pItem)
{
- uint32 price = _player->GetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + packet.Slot - BUYBACK_SLOT_START);
+ uint32 price = _player->GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + packet.Slot - BUYBACK_SLOT_START);
if (!_player->HasEnoughMoney(uint64(price)))
{
_player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, pItem->GetEntry(), 0);
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 296cd80e323..ec3307a0c6b 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -756,7 +756,7 @@ void WorldSession::HandleSetActionBarToggles(WorldPackets::Character::SetActionB
return;
}
- GetPlayer()->SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask);
+ GetPlayer()->SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask);
}
void WorldSession::HandlePlayedTime(WorldPackets::Character::RequestPlayedTime& packet)
@@ -824,11 +824,11 @@ void WorldSession::HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet)
{
if (packet.Enable)
{
- TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str(), _player->GetGUID().ToString().c_str());
+ TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str(), _player->GetGUID().ToString().c_str());
if (WorldObject* target = _player->GetViewpoint())
_player->SetSeer(target);
else
- TC_LOG_DEBUG("network", "Player %s (%s) requests non-existing seer %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str());
+ TC_LOG_DEBUG("network", "Player %s (%s) requests non-existing seer %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str());
}
else
{
@@ -1152,12 +1152,6 @@ void WorldSession::HandleMountSetFavorite(WorldPackets::Misc::MountSetFavorite&
_collectionMgr->MountSetFavorite(mountSetFavorite.MountSpellID, mountSetFavorite.IsFavorite);
}
-void WorldSession::HandlePvpPrestigeRankUp(WorldPackets::Misc::PvpPrestigeRankUp& /*pvpPrestigeRankUp*/)
-{
- if (_player->CanPrestige())
- _player->Prestige();
-}
-
void WorldSession::HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction)
{
if (_player->PlayerTalkClass->GetInteractionData().SourceGuid == closeInteraction.SourceGuid)
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 273bf287821..48bb45581fa 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -95,10 +95,12 @@ void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packe
for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i)
stats.ProxyCreatureID[i] = creatureInfo->KillCredit[i];
- stats.CreatureDisplayID[0] = creatureInfo->Modelid1;
- stats.CreatureDisplayID[1] = creatureInfo->Modelid2;
- stats.CreatureDisplayID[2] = creatureInfo->Modelid3;
- stats.CreatureDisplayID[3] = creatureInfo->Modelid4;
+ std::transform(creatureInfo->Models.begin(), creatureInfo->Models.end(), std::back_inserter(stats.Display.CreatureDisplay),
+ [&stats](CreatureModel const& model) -> WorldPackets::Query::CreatureXDisplay
+ {
+ stats.Display.TotalProbability += model.Probability;
+ return { model.CreatureDisplayID, model.DisplayScale, model.Probability };
+ });
stats.HpMulti = creatureInfo->ModHealth;
stats.EnergyMulti = creatureInfo->ModMana;
@@ -107,14 +109,14 @@ void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packe
stats.RequiredExpansion = creatureInfo->RequiredExpansion;
stats.HealthScalingExpansion = creatureInfo->HealthScalingExpansion;
stats.VignetteID = creatureInfo->VignetteID;
+ stats.Class = creatureInfo->unit_class;
stats.Title = creatureInfo->SubName;
stats.TitleAlt = creatureInfo->TitleAlt;
stats.CursorName = creatureInfo->IconName;
if (std::vector<uint32> const* items = sObjectMgr->GetCreatureQuestItemList(packet.CreatureID))
- for (uint32 item : *items)
- stats.QuestItems.push_back(item);
+ stats.QuestItems.insert(stats.QuestItems.begin(), items->begin(), items->end());
LocaleConstant localeConstant = GetSessionDbLocaleIndex();
if (localeConstant != LOCALE_enUS)
@@ -368,13 +370,12 @@ void WorldSession::HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& quest
questPOIBlobData.QuestObjectiveID = data->QuestObjectiveID;
questPOIBlobData.QuestObjectID = data->QuestObjectID;
questPOIBlobData.MapID = data->MapID;
- questPOIBlobData.WorldMapAreaID = data->WorldMapAreaID;
- questPOIBlobData.Floor = data->Floor;
+ questPOIBlobData.UiMapID = data->UiMapID;
questPOIBlobData.Priority = data->Priority;
questPOIBlobData.Flags = data->Flags;
questPOIBlobData.WorldEffectID = data->WorldEffectID;
questPOIBlobData.PlayerConditionID = data->PlayerConditionID;
- questPOIBlobData.UnkWoD1 = data->UnkWoD1;
+ questPOIBlobData.SpawnTrackingID = data->SpawnTrackingID;
questPOIBlobData.AlwaysAllowMergingBlobs = data->AlwaysAllowMergingBlobs;
for (QuestPOIPoint const& point : data->points)
diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp
index fc1741c6885..1d95689d761 100644
--- a/src/server/game/Handlers/SkillHandler.cpp
+++ b/src/server/game/Handlers/SkillHandler.cpp
@@ -55,14 +55,14 @@ void WorldSession::HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTal
{
WorldPackets::Talent::LearnPvpTalentsFailed learnPvpTalentsFailed;
bool anythingLearned = false;
- for (uint32 talentId : packet.Talents)
+ for (WorldPackets::Talent::PvPTalent pvpTalent : packet.Talents)
{
- if (TalentLearnResult result = _player->LearnPvpTalent(talentId, &learnPvpTalentsFailed.SpellID))
+ if (TalentLearnResult result = _player->LearnPvpTalent(pvpTalent.PvPTalentID, pvpTalent.Slot, &learnPvpTalentsFailed.SpellID))
{
if (!learnPvpTalentsFailed.Reason)
learnPvpTalentsFailed.Reason = result;
- learnPvpTalentsFailed.Talents.push_back(talentId);
+ learnPvpTalentsFailed.Talents.push_back(pvpTalent);
}
else
anythingLearned = true;
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index ca011dfd61f..f6d4a7dad5f 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -466,7 +466,7 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes)
if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
return; // silent return, client should display error by itself and not send this opcode
- std::vector<uint32> const& selfResSpells = _player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
+ std::vector<uint32> const& selfResSpells = _player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS);
if (std::find(selfResSpells.begin(), selfResSpells.end(), selfRes.SpellID) == selfResSpells.end())
return;
@@ -474,7 +474,7 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes)
if (spellInfo)
_player->CastSpell(_player, spellInfo, false, nullptr);
- _player->RemoveDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID);
+ _player->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID);
}
void WorldSession::HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick)
diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp
index abb05a2a0c9..4ec66720641 100644
--- a/src/server/game/Handlers/TaxiHandler.cpp
+++ b/src/server/game/Handlers/TaxiHandler.cpp
@@ -107,6 +107,16 @@ void WorldSession::SendTaxiMenu(Creature* unit)
GetPlayer()->m_taxi.AppendTaximaskTo(data, lastTaxiCheaterState);
+ TaxiMask reachableNodes;
+ std::fill(reachableNodes.begin(), reachableNodes.end(), 0);
+ sTaxiPathGraph.GetReachableNodesMask(sTaxiNodesStore.LookupEntry(curloc), &reachableNodes);
+
+ for (std::size_t i = 0; i < TaxiMaskSize; ++i)
+ {
+ data.CanLandNodes[i] &= reachableNodes[i];
+ data.CanUseNodes[i] &= reachableNodes[i];
+ }
+
SendPacket(data.Write());
GetPlayer()->SetTaxiCheater(lastTaxiCheaterState);