diff options
Diffstat (limited to 'src/server/game/Handlers')
| -rw-r--r-- | src/server/game/Handlers/AuthHandler.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Handlers/BattlePetHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/CalendarHandler.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Handlers/ChannelHandler.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 31 | ||||
| -rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 35 | ||||
| -rw-r--r-- | src/server/game/Handlers/DuelHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/HotfixHandler.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Handlers/InspectHandler.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Handlers/QueryHandler.cpp | 19 | ||||
| -rw-r--r-- | src/server/game/Handlers/SkillHandler.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Handlers/TaxiHandler.cpp | 10 |
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); |
