From 45a5b6a9f04d2f605e7141b8da6e9cfa24711e07 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 21 Nov 2023 12:25:22 +0100 Subject: Core/Calendar: Implement different timezone support for ingame calendar Closes #8390 Closes #29427 (cherry picked from commit b888b1b09f71a8b8b4a9d45c804a1f164fb65ac3) --- src/server/game/Guilds/Guild.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/server/game/Guilds/Guild.cpp') diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 672f5888ec1..568194d1f04 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -19,6 +19,7 @@ #include "AccountMgr.h" #include "Bag.h" #include "CalendarMgr.h" +#include "CalendarPackets.h" #include "CharacterCache.h" #include "Chat.h" #include "Config.h" @@ -1794,7 +1795,8 @@ void Guild::SendInfo(WorldSession* session) const { WorldPackets::Guild::GuildInfoResponse guildInfo; guildInfo.GuildName = m_name; - guildInfo.CreateDate = m_createdDate; + guildInfo.CreateDate.SetUtcTimeFromUnixTime(m_createdDate); + guildInfo.CreateDate += session->GetTimezoneOffset(); guildInfo.NumMembers = int32(m_members.size()); guildInfo.NumAccounts = m_accountsNumber; @@ -2163,34 +2165,32 @@ void Guild::BroadcastPacket(WorldPacket const* packet) const void Guild::MassInviteToEvent(WorldSession* session, uint32 minLevel, uint32 maxLevel, uint32 minRank) { - uint32 count = 0; - - WorldPacket data(SMSG_CALENDAR_FILTER_GUILD); - data << uint32(count); // count placeholder + WorldPackets::Calendar::CalendarEventInitialInvites packet(true); for (auto const& [guid, member] : m_members) { // not sure if needed, maybe client checks it as well - if (count >= CALENDAR_MAX_INVITES) + if (packet.Invites.size() >= CALENDAR_MAX_INVITES) { if (Player* player = session->GetPlayer()) sCalendarMgr->SendCalendarCommandResult(player->GetGUID(), CALENDAR_ERROR_INVITES_EXCEEDED); return; } + if (member.GetGUID() == session->GetPlayer()->GetGUID()) + continue; + uint32 level = sCharacterCache->GetCharacterLevelByGuid(member.GetGUID()); + if (level < minLevel || level > maxLevel) + continue; - if (member.GetGUID() != session->GetPlayer()->GetGUID() && level >= minLevel && level <= maxLevel && member.IsRankNotLower(minRank)) - { - data.appendPackGUID(member.GetGUID().GetRawValue()); - data << uint8(0); // unk - ++count; - } - } + if (!member.IsRankNotLower(minRank)) + continue; - data.put(0, count); + packet.Invites.emplace_back(member.GetGUID(), level); + } - session->SendPacket(&data); + session->SendPacket(packet.Write()); } // Members handling -- cgit v1.2.3