diff options
Diffstat (limited to 'src/server/game/Handlers')
| -rw-r--r-- | src/server/game/Handlers/BattleGroundHandler.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Handlers/CalendarHandler.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 35 | ||||
| -rw-r--r-- | src/server/game/Handlers/NPCHandler.cpp | 33 |
4 files changed, 65 insertions, 31 deletions
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 87ce5123100..e03cd9c51b1 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -636,14 +636,17 @@ void WorldSession::HandleRequestRatedPvpInfo(WorldPackets::Battleground::Request void WorldSession::HandleGetPVPOptionsEnabled(WorldPackets::Battleground::GetPVPOptionsEnabled& /*getPvPOptionsEnabled*/) { - // This packet is completely irrelevant, it triggers PVP_TYPES_ENABLED lua event but that is not handled in interface code as of 6.1.2 WorldPackets::Battleground::PVPOptionsEnabled pvpOptionsEnabled; + pvpOptionsEnabled.RatedBattlegrounds = false; + pvpOptionsEnabled.PugBattlegrounds = true; + pvpOptionsEnabled.WargameBattlegrounds = false; pvpOptionsEnabled.WargameArenas = false; pvpOptionsEnabled.RatedArenas = false; - pvpOptionsEnabled.WargameBattlegrounds = false; pvpOptionsEnabled.ArenaSkirmish = false; - pvpOptionsEnabled.PugBattlegrounds = true; - pvpOptionsEnabled.RatedBattlegrounds = false; + pvpOptionsEnabled.SoloShuffle = false; + pvpOptionsEnabled.RatedSoloShuffle = false; + pvpOptionsEnabled.BattlegroundBlitz = false; + pvpOptionsEnabled.RatedBattlegroundBlitz = false; SendPacket(pvpOptionsEnabled.Write()); } diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 346cc303315..209babfec10 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -61,9 +61,9 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet packet.ServerTime = currTime; CalendarInviteStore playerInvites = sCalendarMgr->GetPlayerInvites(guid); - for (auto const& invite : playerInvites) + for (CalendarInvite const* invite : playerInvites) { - WorldPackets::Calendar::CalendarSendCalendarInviteInfo inviteInfo; + WorldPackets::Calendar::CalendarSendCalendarInviteInfo& inviteInfo = packet.Invites.emplace_back(); inviteInfo.EventID = invite->GetEventId(); inviteInfo.InviteID = invite->GetInviteId(); inviteInfo.InviterGuid = invite->GetSenderGUID(); @@ -71,14 +71,12 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet inviteInfo.Moderator = invite->GetRank(); if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(invite->GetEventId())) inviteInfo.InviteType = calendarEvent->IsGuildEvent() && calendarEvent->GetGuildId() == _player->GetGuildId(); - - packet.Invites.push_back(inviteInfo); } CalendarEventStore playerEvents = sCalendarMgr->GetPlayerEvents(guid); - for (auto const& event : playerEvents) + for (CalendarEvent const* event : playerEvents) { - WorldPackets::Calendar::CalendarSendCalendarEventInfo eventInfo; + WorldPackets::Calendar::CalendarSendCalendarEventInfo& eventInfo = packet.Events.emplace_back(); eventInfo.EventID = event->GetEventId(); eventInfo.Date = event->GetDate(); eventInfo.EventClubID = event->GetGuildId(); @@ -87,20 +85,15 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet eventInfo.Flags = event->GetFlags(); eventInfo.OwnerGuid = event->GetOwnerGUID(); eventInfo.TextureID = event->GetTextureId(); - - packet.Events.push_back(eventInfo); } for (InstanceLock const* lock : sInstanceLockMgr.GetInstanceLocksForPlayer(_player->GetGUID())) { - WorldPackets::Calendar::CalendarSendCalendarRaidLockoutInfo lockoutInfo; - + WorldPackets::Calendar::CalendarSendCalendarRaidLockoutInfo& lockoutInfo = packet.RaidLockouts.emplace_back(); lockoutInfo.MapID = lock->GetMapId(); lockoutInfo.DifficultyID = lock->GetDifficultyId(); lockoutInfo.ExpireTime = int32(std::max(std::chrono::duration_cast<Seconds>(lock->GetEffectiveExpiryTime() - GameTime::GetSystemTime()).count(), SI64LIT(0))); lockoutInfo.InstanceID = lock->GetInstanceId(); - - packet.RaidLockouts.push_back(lockoutInfo); } SendPacket(packet.Write()); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 1472ce1fea0..d499ba13c11 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -403,10 +403,7 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder const& holder) do { Field* fields = customizationsResult->Fetch(); - std::vector<UF::ChrCustomizationChoice>& customizationsForCharacter = customizations[fields[0].GetUInt64()]; - - customizationsForCharacter.emplace_back(); - UF::ChrCustomizationChoice& choice = customizationsForCharacter.back(); + UF::ChrCustomizationChoice& choice = customizations[fields[0].GetUInt64()].emplace_back(); choice.ChrCustomizationOptionID = fields[1].GetUInt32(); choice.ChrCustomizationChoiceID = fields[2].GetUInt32(); @@ -457,8 +454,6 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder const& holder) while (result->NextRow() && charEnum.Characters.size() < MAX_CHARACTERS_PER_REALM); } - charEnum.IsAlliedRacesCreationAllowed = CanAccessAlliedRaces(); - for (std::pair<uint8 const, RaceUnlockRequirement> const& requirement : sObjectMgr->GetRaceUnlockRequirements()) { WorldPackets::Character::EnumCharactersResult::RaceUnlock raceUnlock; @@ -1166,9 +1161,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) // Send MOTD { - WorldPackets::System::MOTD motd; - motd.Text = &sWorld->GetMotd(); - SendPacket(motd.Write()); + for (std::string const& motdLine : sWorld->GetMotd()) + sWorld->SendServerMessage(SERVER_MSG_STRING, motdLine, pCurrChar); } SendSetTimeZoneInformation(); @@ -2797,6 +2791,29 @@ void WorldSession::HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCha })); } +void WorldSession::HandleSavePersonalEmblem(WorldPackets::Character::SavePersonalEmblem const& savePersonalEmblem) +{ + if (!_player->GetNPCIfCanInteractWith(savePersonalEmblem.Vendor, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER)) + { + SendPacket(WorldPackets::Character::PlayerSavePersonalEmblem(ERR_GUILDEMBLEM_INVALIDVENDOR).Write()); + return; + } + + if (!EmblemInfo::ValidateEmblemColors(savePersonalEmblem.PersonalTabard.EmblemStyle, savePersonalEmblem.PersonalTabard.EmblemColor, + savePersonalEmblem.PersonalTabard.BorderStyle, savePersonalEmblem.PersonalTabard.BorderColor, + savePersonalEmblem.PersonalTabard.BackgroundColor)) + { + SendPacket(WorldPackets::Character::PlayerSavePersonalEmblem(ERR_GUILDEMBLEM_INVALID_TABARD_COLORS).Write()); + return; + } + + _player->SetPersonalTabard(savePersonalEmblem.PersonalTabard.EmblemStyle, savePersonalEmblem.PersonalTabard.EmblemColor, + savePersonalEmblem.PersonalTabard.BorderStyle, savePersonalEmblem.PersonalTabard.BorderColor, + savePersonalEmblem.PersonalTabard.BackgroundColor); + + SendPacket(WorldPackets::Character::PlayerSavePersonalEmblem(ERR_GUILDEMBLEM_SUCCESS).Write()); +} + void WorldSession::SendCharCreate(ResponseCodes result, ObjectGuid const& guid /*= ObjectGuid::Empty*/) { WorldPackets::Character::CreateChar response; diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 0e23cc32c53..b8a0b8aa7ac 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -39,27 +39,48 @@ #include "Trainer.h" #include "WorldPacket.h" -void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet) +enum class TabardVendorType : int32 { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE); + Guild = 0, + Personal = 1, +}; + +void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::TabardVendorActivate const& tabardVendorActivate) +{ + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(tabardVendorActivate.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE); if (!unit) { - TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - {} not found or you can not interact with him.", packet.Unit.ToString()); + TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - {} not found or you can not interact with him.", tabardVendorActivate.Vendor.ToString()); return; } + TabardVendorType type = TabardVendorType(tabardVendorActivate.Type); + if (type != TabardVendorType::Guild && type != TabardVendorType::Personal) + return; + // remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); - SendTabardVendorActivate(packet.Unit); + SendTabardVendorActivate(tabardVendorActivate.Vendor, TabardVendorType(tabardVendorActivate.Type)); } -void WorldSession::SendTabardVendorActivate(ObjectGuid guid) +void WorldSession::SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type) { WorldPackets::NPC::NPCInteractionOpenResult npcInteraction; npcInteraction.Npc = guid; - npcInteraction.InteractionType = PlayerInteractionType::TabardVendor; + npcInteraction.InteractionType = [&] + { + switch (type) + { + case TabardVendorType::Guild: + return PlayerInteractionType::GuildTabardVendor; + case TabardVendorType::Personal: + return PlayerInteractionType::PersonalTabardVendor; + default: + ABORT_MSG("Unsupported tabard vendor type %d", AsUnderlyingType(type)); + } + }(); npcInteraction.Success = true; SendPacket(npcInteraction.Write()); } |
