diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-11-04 21:39:21 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-12-08 18:16:41 +0100 |
| commit | cab4c87d2d7f6d734ef067d6bf50f4b1d338a7bc (patch) | |
| tree | 2eaf0fd8bc9e937a4c9611e18dd04d5001189036 /src/server/game/Handlers | |
| parent | 16b39a448acbe8ace88550a367be8e6bf565b00d (diff) | |
Core/PacketIO: Updated most packet structures to 9.0.1
Diffstat (limited to 'src/server/game/Handlers')
| -rw-r--r-- | src/server/game/Handlers/BattleGroundHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/CalendarHandler.cpp | 42 | ||||
| -rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 69 | ||||
| -rw-r--r-- | src/server/game/Handlers/GarrisonHandler.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Handlers/HotfixHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/LFGHandler.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 33 | ||||
| -rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 9 | ||||
| -rw-r--r-- | src/server/game/Handlers/TicketHandler.cpp | 48 |
10 files changed, 113 insertions, 108 deletions
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 56eca9b75b1..6e94c89917d 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -600,7 +600,7 @@ void WorldSession::HandleReportPvPAFK(WorldPackets::Battleground::ReportPvPPlaye reportedPlayer->ReportedAfkBy(_player); } -void WorldSession::HandleRequestRatedBattlefieldInfo(WorldPackets::Battleground::RequestRatedBattlefieldInfo& /*packet*/) +void WorldSession::HandleRequestRatedPvpInfo(WorldPackets::Battleground::RequestRatedPvpInfo& /*packet*/) { WorldPackets::Battleground::RatedPvpInfo ratedPvpInfo; SendPacket(ratedPvpInfo.Write()); diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 0470e6f77e2..e80a8b3add6 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -124,10 +124,10 @@ void WorldSession::HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEve sCalendarMgr->SendCalendarCommandResult(_player->GetGUID(), CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarCommunityFilter(WorldPackets::Calendar::CalendarCommunityFilter& calendarCommunityFilter) +void WorldSession::HandleCalendarCommunityInvite(WorldPackets::Calendar::CalendarCommunityInviteRequest& calendarCommunityInvite) { if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId())) - guild->MassInviteToEvent(this, calendarCommunityFilter.MinLevel, calendarCommunityFilter.MaxLevel, calendarCommunityFilter.MaxRankOrder); + guild->MassInviteToEvent(this, calendarCommunityInvite.MinLevel, calendarCommunityInvite.MaxLevel, calendarCommunityInvite.MaxRankOrder); } void WorldSession::HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent) @@ -239,7 +239,7 @@ void WorldSession::HandleCalendarCopyEvent(WorldPackets::Calendar::CalendarCopyE sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarEventInvite(WorldPackets::Calendar::CalendarEventInvite& calendarEventInvite) +void WorldSession::HandleCalendarInvite(WorldPackets::Calendar::CalendarInvite& calendarEventInvite) { ObjectGuid playerGuid = _player->GetGUID(); @@ -347,22 +347,22 @@ void WorldSession::HandleCalendarEventSignup(WorldPackets::Calendar::CalendarEve sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarEventRsvp(WorldPackets::Calendar::CalendarEventRSVP& calendarEventRSVP) +void WorldSession::HandleCalendarRsvp(WorldPackets::Calendar::CalendarRSVP& calendarRSVP) { ObjectGuid guid = _player->GetGUID(); - if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(calendarEventRSVP.EventID)) + if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(calendarRSVP.EventID)) { // I think we still should be able to remove self from locked events - if (calendarEventRSVP.Status != CALENDAR_STATUS_REMOVED && calendarEvent->IsLocked()) + if (calendarRSVP.Status != CALENDAR_STATUS_REMOVED && calendarEvent->IsLocked()) { sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_EVENT_LOCKED); return; } - if (CalendarInvite* invite = sCalendarMgr->GetInvite(calendarEventRSVP.InviteID)) + if (CalendarInvite* invite = sCalendarMgr->GetInvite(calendarRSVP.InviteID)) { - invite->SetStatus(CalendarInviteStatus(calendarEventRSVP.Status)); + invite->SetStatus(CalendarInviteStatus(calendarRSVP.Status)); invite->SetResponseTime(time(nullptr)); sCalendarMgr->UpdateInvite(invite); @@ -398,23 +398,23 @@ void WorldSession::HandleCalendarEventRemoveInvite(WorldPackets::Calendar::Calen sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_NO_INVITE); } -void WorldSession::HandleCalendarEventStatus(WorldPackets::Calendar::CalendarEventStatus& calendarEventStatus) +void WorldSession::HandleCalendarStatus(WorldPackets::Calendar::CalendarStatus& calendarStatus) { ObjectGuid guid = _player->GetGUID(); - TC_LOG_DEBUG("network", "CMSG_CALENDAR_EVENT_STATUS [%s] EventId [" + TC_LOG_DEBUG("network", "CMSG_CALENDAR_STATUS [%s] EventId [" UI64FMTD "] ownerInviteId [" UI64FMTD "], Invitee ([%s] id: [" - UI64FMTD "], status %u", guid.ToString().c_str(), calendarEventStatus.EventID, calendarEventStatus.ModeratorID, calendarEventStatus.Guid.ToString().c_str(), calendarEventStatus.InviteID, calendarEventStatus.Status); + UI64FMTD "], status %u", guid.ToString().c_str(), calendarStatus.EventID, calendarStatus.ModeratorID, calendarStatus.Guid.ToString().c_str(), calendarStatus.InviteID, calendarStatus.Status); - if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(calendarEventStatus.EventID)) + if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(calendarStatus.EventID)) { - if (CalendarInvite* invite = sCalendarMgr->GetInvite(calendarEventStatus.InviteID)) + if (CalendarInvite* invite = sCalendarMgr->GetInvite(calendarStatus.InviteID)) { - invite->SetStatus((CalendarInviteStatus)calendarEventStatus.Status); + invite->SetStatus((CalendarInviteStatus)calendarStatus.Status); sCalendarMgr->UpdateInvite(invite); sCalendarMgr->SendCalendarEventStatus(*calendarEvent, *invite); - sCalendarMgr->SendCalendarClearPendingAction(calendarEventStatus.Guid); + sCalendarMgr->SendCalendarClearPendingAction(calendarStatus.Guid); } else sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_NO_INVITE); // correct? @@ -423,19 +423,19 @@ void WorldSession::HandleCalendarEventStatus(WorldPackets::Calendar::CalendarEve sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarEventModeratorStatus(WorldPackets::Calendar::CalendarEventModeratorStatus& calendarEventModeratorStatus) +void WorldSession::HandleCalendarModeratorStatus(WorldPackets::Calendar::CalendarModeratorStatusQuery& calendarModeratorStatus) { ObjectGuid guid = _player->GetGUID(); - TC_LOG_DEBUG("network", "CMSG_CALENDAR_EVENT_MODERATOR_STATUS [%s] EventID [" + TC_LOG_DEBUG("network", "CMSG_CALENDAR_MODERATOR_STATUS [%s] EventID [" UI64FMTD "] ModeratorID [" UI64FMTD "], Invitee ([%s] InviteID: [" - UI64FMTD "], Status %u", guid.ToString().c_str(), calendarEventModeratorStatus.EventID, calendarEventModeratorStatus.ModeratorID, calendarEventModeratorStatus.Guid.ToString().c_str(), calendarEventModeratorStatus.InviteID, calendarEventModeratorStatus.Status); + UI64FMTD "], Status %u", guid.ToString().c_str(), calendarModeratorStatus.EventID, calendarModeratorStatus.ModeratorID, calendarModeratorStatus.Guid.ToString().c_str(), calendarModeratorStatus.InviteID, calendarModeratorStatus.Status); - if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(calendarEventModeratorStatus.EventID)) + if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(calendarModeratorStatus.EventID)) { - if (CalendarInvite* invite = sCalendarMgr->GetInvite(calendarEventModeratorStatus.InviteID)) + if (CalendarInvite* invite = sCalendarMgr->GetInvite(calendarModeratorStatus.InviteID)) { - invite->SetRank(CalendarModerationRank(calendarEventModeratorStatus.Status)); + invite->SetRank(CalendarModerationRank(calendarModeratorStatus.Status)); sCalendarMgr->UpdateInvite(invite); sCalendarMgr->SendCalendarEventModeratorStatusAlert(*calendarEvent, *invite); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 9461ebdb276..49283ac0c26 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -309,10 +309,6 @@ bool LoginQueryHolder::Initialize() void WorldSession::HandleCharEnum(PreparedQueryResult result) { - uint8 demonHunterCount = 0; // We use this counter to allow multiple demon hunter creations when allowed in config - bool canAlwaysCreateDemonHunter = HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_DEMON_HUNTER); - if (sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_DEMON_HUNTER) == 0) // char level = 0 means this check is disabled, so always true - canAlwaysCreateDemonHunter = true; WorldPackets::Character::EnumCharactersResult charEnum; charEnum.Success = true; charEnum.IsDeletedCharacters = false; @@ -358,21 +354,11 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) if (!sCharacterCache->HasCharacterCacheEntry(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. sCharacterCache->AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.SexID, charInfo.RaceID, charInfo.ClassID, charInfo.ExperienceLevel, false); - if (charInfo.ClassID == CLASS_DEMON_HUNTER) - demonHunterCount++; - - if (demonHunterCount >= sWorld->getIntConfig(CONFIG_DEMON_HUNTERS_PER_REALM) && !canAlwaysCreateDemonHunter) - charEnum.HasDemonHunterOnRealm = true; - else - charEnum.HasDemonHunterOnRealm = false; - charEnum.MaxCharacterLevel = std::max<int32>(charEnum.MaxCharacterLevel, charInfo.ExperienceLevel); } while (result->NextRow()); } - charEnum.IsTestDemonHunterCreationAllowed = canAlwaysCreateDemonHunter; - charEnum.IsDemonHunterCreationAllowed = GetAccountExpansion() >= EXPANSION_LEGION || canAlwaysCreateDemonHunter; charEnum.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= EXPANSION_BATTLE_FOR_AZEROTH; for (std::pair<uint8 const, RaceUnlockRequirement> const& requirement : sObjectMgr->GetRaceUnlockRequirements()) @@ -643,26 +629,12 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact if (result) { uint32 team = Player::TeamForRace(createInfo->Race); - uint32 freeDemonHunterSlots = sWorld->getIntConfig(CONFIG_DEMON_HUNTERS_PER_REALM); Field* field = result->Fetch(); uint8 accRace = field[1].GetUInt8(); if (checkDemonHunterReqs) { - uint8 accClass = field[2].GetUInt8(); - if (accClass == CLASS_DEMON_HUNTER) - { - if (freeDemonHunterSlots > 0) - --freeDemonHunterSlots; - - if (freeDemonHunterSlots == 0) - { - SendCharCreate(CHAR_CREATE_FAILED); - return; - } - } - if (!hasDemonHunterReqLevel) { uint8 accLevel = field[0].GetUInt8(); @@ -1376,6 +1348,40 @@ void WorldSession::HandleRequestForcedReactionsOpcode(WorldPackets::Reputation:: _player->GetReputationMgr().SendForceReactions(); } +void WorldSession::HandleCheckCharacterNameAvailability(WorldPackets::Character::CheckCharacterNameAvailability& checkCharacterNameAvailability) +{ + // prevent character rename to invalid name + if (!normalizePlayerName(checkCharacterNameAvailability.Name)) + { + SendPacket(WorldPackets::Character::CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, CHAR_NAME_NO_NAME).Write()); + return; + } + + ResponseCodes res = ObjectMgr::CheckPlayerName(checkCharacterNameAvailability.Name, GetSessionDbcLocale(), true); + if (res != CHAR_NAME_SUCCESS) + { + SendPacket(WorldPackets::Character::CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, res).Write()); + return; + } + + // check name limitations + if (!HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME) && sObjectMgr->IsReservedName(checkCharacterNameAvailability.Name)) + { + SendPacket(WorldPackets::Character::CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, CHAR_NAME_RESERVED).Write()); + return; + } + + // Ensure that there is no character with the desired new name + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); + stmt->setString(0, checkCharacterNameAvailability.Name); + + _queryProcessor.AddCallback(CharacterDatabase.AsyncQuery(stmt) + .WithPreparedCallback([this, sequenceIndex = checkCharacterNameAvailability.SequenceIndex](PreparedQueryResult result) + { + SendPacket(WorldPackets::Character::CheckCharacterNameAvailabilityResult(sequenceIndex, result ? CHAR_CREATE_NAME_IN_USE : RESPONSE_SUCCESS).Write()); + })); +} + void WorldSession::HandleCharRenameOpcode(WorldPackets::Character::CharacterRenameRequest& request) { if (!IsLegitCharacterForAccount(request.RenameInfo->Guid)) @@ -2670,13 +2676,8 @@ void WorldSession::SendCharFactionChange(ResponseCodes result, WorldPackets::Cha packet.Display = boost::in_place(); packet.Display->Name = factionChangeInfo->Name; packet.Display->SexID = factionChangeInfo->SexID; - packet.Display->SkinID = factionChangeInfo->SkinID; - packet.Display->HairColorID = factionChangeInfo->HairColorID; - packet.Display->HairStyleID = factionChangeInfo->HairStyleID; - packet.Display->FacialHairStyleID = factionChangeInfo->FacialHairStyleID; - packet.Display->FaceID = factionChangeInfo->FaceID; + packet.Display->Customizations = &factionChangeInfo->Customizations; packet.Display->RaceID = factionChangeInfo->RaceID; - packet.Display->CustomDisplay = factionChangeInfo->CustomDisplay; } SendPacket(packet.Write()); diff --git a/src/server/game/Handlers/GarrisonHandler.cpp b/src/server/game/Handlers/GarrisonHandler.cpp index 22f42084aa1..ef725a3cd39 100644 --- a/src/server/game/Handlers/GarrisonHandler.cpp +++ b/src/server/game/Handlers/GarrisonHandler.cpp @@ -50,8 +50,8 @@ void WorldSession::HandleGarrisonRequestBlueprintAndSpecializationData(WorldPack garrison->SendBlueprintAndSpecializationData(); } -void WorldSession::HandleGarrisonGetBuildingLandmarks(WorldPackets::Garrison::GarrisonGetBuildingLandmarks& /*garrisonGetBuildingLandmarks*/) +void WorldSession::HandleGarrisonGetMapData(WorldPackets::Garrison::GarrisonGetMapData& /*garrisonGetMapData*/) { if (Garrison* garrison = _player->GetGarrison()) - garrison->SendBuildingLandmarks(_player); + garrison->SendMapData(_player); } diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp index 798b7060f2d..85880fd0786 100644 --- a/src/server/game/Handlers/HotfixHandler.cpp +++ b/src/server/game/Handlers/HotfixHandler.cpp @@ -42,7 +42,7 @@ void WorldSession::HandleDBQueryBulk(WorldPackets::Hotfix::DBQueryBulk& dbQuery) if (store->HasRecord(record.RecordID)) { - dbReply.Allow = true; + dbReply.Status = 1; dbReply.Timestamp = GameTime::GetGameTime(); store->WriteRecord(record.RecordID, GetSessionDbcLocale(), dbReply.Data); } diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index dd15b7e7590..b2982d5c36d 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -151,7 +151,7 @@ void WorldSession::SendLfgPlayerLockInfo() // Get player locked Dungeons for (auto const& lock : sLFGMgr->GetLockedDungeons(_player->GetGUID())) - lfgPlayerInfo.BlackList.Slot.emplace_back(lock.first, lock.second.lockStatus, lock.second.requiredItemLevel, lock.second.currentItemLevel); + lfgPlayerInfo.BlackList.Slot.emplace_back(lock.first, lock.second.lockStatus, lock.second.requiredItemLevel, lock.second.currentItemLevel, 0); for (uint32 slot : randomDungeons) { @@ -224,7 +224,7 @@ void WorldSession::SendLfgPartyLockInfo() WorldPackets::LFG::LFGBlackList& lfgBlackList = lfgPartyInfo.Player.back(); lfgBlackList.PlayerGuid = pguid; for (auto const& lock : sLFGMgr->GetLockedDungeons(pguid)) - lfgBlackList.Slot.emplace_back(lock.first, lock.second.lockStatus, lock.second.requiredItemLevel, lock.second.currentItemLevel); + lfgBlackList.Slot.emplace_back(lock.first, lock.second.lockStatus, lock.second.requiredItemLevel, lock.second.currentItemLevel, 0); } TC_LOG_DEBUG("lfg", "SMSG_LFG_PARTY_INFO %s", GetPlayerInfo().c_str()); @@ -347,15 +347,15 @@ void WorldSession::SendLfgJoinResult(lfg::LfgJoinResultData const& joinData) for (lfg::LfgLockPartyMap::const_iterator it = joinData.lockmap.begin(); it != joinData.lockmap.end(); ++it) { lfgJoinResult.BlackList.emplace_back(); - WorldPackets::LFG::LFGJoinBlackList& blackList = lfgJoinResult.BlackList.back(); - blackList.Guid = it->first; + WorldPackets::LFG::LFGBlackList& blackList = lfgJoinResult.BlackList.back(); + blackList.PlayerGuid = it->first; for (lfg::LfgLockMap::const_iterator itr = it->second.begin(); itr != it->second.end(); ++itr) { TC_LOG_TRACE("lfg", "SendLfgJoinResult:: %s DungeonID: %u Lock status: %u Required itemLevel: %u Current itemLevel: %f", it->first.ToString().c_str(), (itr->first & 0x00FFFFFF), itr->second.lockStatus, itr->second.requiredItemLevel, itr->second.currentItemLevel); - blackList.Slots.emplace_back(itr->first, itr->second.lockStatus, itr->second.requiredItemLevel, itr->second.currentItemLevel); + blackList.Slot.emplace_back(itr->first, itr->second.lockStatus, itr->second.requiredItemLevel, itr->second.currentItemLevel, 0); } } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 66e891fe3ee..9f7c2532005 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -240,7 +240,7 @@ void WorldSession::HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTok WorldPackets::Movement::NewWorld packet; packet.MapID = loc.GetMapId(); - packet.Pos = loc; + packet.Loc.Pos = loc; packet.Reason = !_player->IsBeingTeleportedSeamlessly() ? NEW_WORLD_NORMAL : NEW_WORLD_SEAMLESS; SendPacket(packet.Write()); diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 6bcb4f29a0b..9590356f3dd 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -26,6 +26,7 @@ #include "GossipDef.h" #include "Group.h" #include "Log.h" +#include "LootMgr.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Player.h" @@ -252,26 +253,31 @@ void WorldSession::HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& p void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::QuestGiverChooseReward& packet) { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_CHOOSE_REWARD npc = %s, quest = %u, reward = %u", packet.QuestGiverGUID.ToString().c_str(), packet.QuestID, packet.ItemChoiceID); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_CHOOSE_REWARD npc = %s, quest = %u, reward = %u", + packet.QuestGiverGUID.ToString().c_str(), packet.QuestID, packet.Choice.Item.ItemID); Quest const* quest = sObjectMgr->GetQuestTemplate(packet.QuestID); if (!quest) return; - // This is Real Item Entry, not slot id as pre 5.x - if (packet.ItemChoiceID) + // TODO: currency choice items + if (packet.Choice.LootItemType != LootItemType::Item) + return; + + if (packet.Choice.Item.ItemID) { - ItemTemplate const* rewardProto = sObjectMgr->GetItemTemplate(packet.ItemChoiceID); + ItemTemplate const* rewardProto = sObjectMgr->GetItemTemplate(packet.Choice.Item.ItemID); if (!rewardProto) { - TC_LOG_ERROR("entities.player.cheat", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (%s) tried to get invalid reward item (Item Entry: %u) for quest %u (possible packet-hacking detected)", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.ItemChoiceID, packet.QuestID); + TC_LOG_ERROR("entities.player.cheat", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (%s) tried to get invalid reward item (Item Entry: %u) for quest %u (possible packet-hacking detected)", + _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.Choice.Item.ItemID, packet.QuestID); return; } bool itemValid = false; for (uint32 i = 0; i < quest->GetRewChoiceItemsCount(); ++i) { - if (quest->RewardChoiceItemId[i] && quest->RewardChoiceItemId[i] == uint32(packet.ItemChoiceID)) + if (quest->RewardChoiceItemId[i] && quest->RewardChoiceItemId[i] == packet.Choice.Item.ItemID) { itemValid = true; break; @@ -284,7 +290,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (questPackageItem->ItemID != packet.ItemChoiceID) + if (questPackageItem->ItemID != packet.Choice.Item.ItemID) continue; if (_player->CanSelectQuestPackageItem(questPackageItem)) @@ -301,7 +307,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest { for (QuestPackageItemEntry const* questPackageItem : *questPackageItems) { - if (questPackageItem->ItemID != packet.ItemChoiceID) + if (questPackageItem->ItemID != packet.Choice.Item.ItemID) continue; itemValid = true; @@ -313,7 +319,8 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest if (!itemValid) { - TC_LOG_ERROR("entities.player.cheat", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (%s) tried to get reward item (Item Entry: %u) wich is not a reward for quest %u (possible packet-hacking detected)", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.ItemChoiceID, packet.QuestID); + TC_LOG_ERROR("entities.player.cheat", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (%s) tried to get reward item (Item Entry: %u) wich is not a reward for quest %u (possible packet-hacking detected)", + _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.Choice.Item.ItemID, packet.QuestID); return; } } @@ -339,9 +346,9 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest return; } - if (_player->CanRewardQuest(quest, packet.ItemChoiceID, true)) + if (_player->CanRewardQuest(quest, packet.Choice.Item.ItemID, true)) { - _player->RewardQuest(quest, packet.ItemChoiceID, object); + _player->RewardQuest(quest, packet.Choice.Item.ItemID, object); switch (object->GetTypeId()) { @@ -364,7 +371,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest } _player->PlayerTalkClass->ClearMenus(); - creatureQGiver->GetAI()->QuestReward(_player, quest, packet.ItemChoiceID); + creatureQGiver->GetAI()->QuestReward(_player, quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID); break; } case TYPEID_GAMEOBJECT: @@ -384,7 +391,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::Quest } _player->PlayerTalkClass->ClearMenus(); - questGiver->AI()->QuestReward(_player, quest, packet.ItemChoiceID); + questGiver->AI()->QuestReward(_player, quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID); break; } default: diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 5ff33e97bf3..8ccfd1c29c3 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -541,13 +541,8 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI Guild* guild = player->GetGuild(); - mirrorImageComponentedData.SkinColor = player->m_playerData->SkinID; - mirrorImageComponentedData.FaceVariation = player->m_playerData->FaceID; - mirrorImageComponentedData.HairVariation = player->m_playerData->HairStyleID; - mirrorImageComponentedData.HairColor = player->m_playerData->HairColorID; - mirrorImageComponentedData.BeardVariation = player->m_playerData->FacialHairStyleID; - for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - mirrorImageComponentedData.CustomDisplay[i] = player->m_playerData->CustomDisplayOption[i]; + for (UF::ChrCustomizationChoice customization : player->m_playerData->Customizations) + mirrorImageComponentedData.Customizations.push_back({ customization.ChrCustomizationOptionID, customization.ChrCustomizationChoiceID }); mirrorImageComponentedData.GuildGUID = (guild ? guild->GetGUID() : ObjectGuid::Empty); mirrorImageComponentedData.ItemDisplayID.reserve(11); diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index ef1332dc4a2..af1b54218cd 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -40,30 +40,32 @@ void WorldSession::HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTick SendPacket(response.Write()); } -void WorldSession::HandleSupportTicketSubmitBug(WorldPackets::Ticket::SupportTicketSubmitBug& packet) +void WorldSession::HandleSubmitUserFeedback(WorldPackets::Ticket::SubmitUserFeedback& userFeedback) { - if (!sSupportMgr->GetBugSystemStatus()) - return; - - BugTicket* ticket = new BugTicket(GetPlayer()); - ticket->SetPosition(packet.Header.MapID, packet.Header.Position); - ticket->SetFacing(packet.Header.Facing); - ticket->SetNote(packet.Note); - - sSupportMgr->AddTicket(ticket); -} - -void WorldSession::HandleSupportTicketSubmitSuggestion(WorldPackets::Ticket::SupportTicketSubmitSuggestion& packet) -{ - if (!sSupportMgr->GetSuggestionSystemStatus()) - return; - - SuggestionTicket* ticket = new SuggestionTicket(GetPlayer()); - ticket->SetPosition(packet.Header.MapID, packet.Header.Position); - ticket->SetFacing(packet.Header.Facing); - ticket->SetNote(packet.Note); - - sSupportMgr->AddTicket(ticket); + if (userFeedback.IsSuggestion) + { + if (!sSupportMgr->GetSuggestionSystemStatus()) + return; + + SuggestionTicket* ticket = new SuggestionTicket(GetPlayer()); + ticket->SetPosition(userFeedback.Header.MapID, userFeedback.Header.Position); + ticket->SetFacing(userFeedback.Header.Facing); + ticket->SetNote(userFeedback.Note); + + sSupportMgr->AddTicket(ticket); + } + else + { + if (!sSupportMgr->GetBugSystemStatus()) + return; + + BugTicket* ticket = new BugTicket(GetPlayer()); + ticket->SetPosition(userFeedback.Header.MapID, userFeedback.Header.Position); + ticket->SetFacing(userFeedback.Header.Facing); + ticket->SetNote(userFeedback.Note); + + sSupportMgr->AddTicket(ticket); + } } void WorldSession::HandleSupportTicketSubmitComplaint(WorldPackets::Ticket::SupportTicketSubmitComplaint& packet) |
