/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "CalendarPackets.h" #include "PacketOperators.h" namespace WorldPackets::Calendar { ByteBuffer& operator<<(ByteBuffer& data, CalendarSendCalendarEventInfo const& eventInfo) { data << uint64(eventInfo.EventID); data << uint8(eventInfo.EventType); data << eventInfo.Date; data << uint16(eventInfo.Flags); data << int32(eventInfo.TextureID); data << uint64(eventInfo.EventClubID); data << eventInfo.OwnerGuid; data << SizedString::BitsSize<8>(eventInfo.EventName); data.FlushBits(); data << SizedString::Data(eventInfo.EventName); return data; } ByteBuffer& operator<<(ByteBuffer& data, CalendarSendCalendarRaidLockoutInfo const& lockoutInfo) { data << uint64(lockoutInfo.InstanceID); data << int32(lockoutInfo.MapID); data << uint32(lockoutInfo.DifficultyID); data << int32(lockoutInfo.ExpireTime); return data; } ByteBuffer& operator<<(ByteBuffer& data, CalendarSendCalendarInviteInfo const& inviteInfo) { data << uint64(inviteInfo.EventID); data << uint64(inviteInfo.InviteID); data << uint8(inviteInfo.Status); data << uint8(inviteInfo.Moderator); data << uint8(inviteInfo.InviteType); data << inviteInfo.InviterGuid; data << Bits<1>(inviteInfo.IgnoreFriendAndGuildRestriction); data.FlushBits(); return data; } ByteBuffer& operator<<(ByteBuffer& data, CalendarEventInviteInfo const& inviteInfo) { data << inviteInfo.Guid; data << uint64(inviteInfo.InviteID); data << uint8(inviteInfo.Level); data << uint8(inviteInfo.Status); data << uint8(inviteInfo.Moderator); data << uint8(inviteInfo.InviteType); data << inviteInfo.ResponseTime; data << SizedString::BitsSize<8>(inviteInfo.Notes); data.FlushBits(); data << SizedString::Data(inviteInfo.Notes); return data; } void CalendarGetEvent::Read() { _worldPacket >> EventID; } void CalendarCommunityInviteRequest::Read() { _worldPacket >> ClubID; _worldPacket >> MinLevel; _worldPacket >> MaxLevel; _worldPacket >> MaxRankOrder; } ByteBuffer& operator>>(ByteBuffer& buffer, CalendarAddEventInviteInfo& invite) { buffer >> invite.Guid; buffer >> invite.Status; buffer >> invite.Moderator; buffer >> OptionalInit(invite.BnetAccountID); buffer >> OptionalInit(invite.RealmAddress); buffer >> OptionalInit(invite.CommunityID); if (invite.BnetAccountID) buffer >> *invite.BnetAccountID; if (invite.RealmAddress) buffer >> *invite.RealmAddress; if (invite.CommunityID) buffer >> *invite.CommunityID; return buffer; } ByteBuffer& operator>>(ByteBuffer& buffer, CalendarAddEventInfo& addEventInfo) { buffer >> addEventInfo.ClubID; buffer >> addEventInfo.EventType; buffer >> addEventInfo.TextureID; buffer >> addEventInfo.Time; buffer >> addEventInfo.Flags; buffer >> Size(addEventInfo.Invites); buffer >> SizedString::BitsSize<8>(addEventInfo.Title); buffer >> SizedString::BitsSize<11>(addEventInfo.Description); for (CalendarAddEventInviteInfo& invite : addEventInfo.Invites) buffer >> invite; buffer >> SizedString::Data(addEventInfo.Title); buffer >> SizedString::Data(addEventInfo.Description); return buffer; } void CalendarAddEvent::Read() { _worldPacket >> EventInfo; _worldPacket >> MaxSize; } ByteBuffer& operator>>(ByteBuffer& buffer, CalendarUpdateEventInfo& updateEventInfo) { buffer >> updateEventInfo.ClubID; buffer >> updateEventInfo.EventID; buffer >> updateEventInfo.ModeratorID; buffer >> updateEventInfo.EventType; buffer >> updateEventInfo.TextureID; buffer >> updateEventInfo.Time; buffer >> updateEventInfo.Flags; buffer >> SizedString::BitsSize<8>(updateEventInfo.Title); buffer >> SizedString::BitsSize<11>(updateEventInfo.Description); buffer >> SizedString::Data(updateEventInfo.Title); buffer >> SizedString::Data(updateEventInfo.Description); return buffer; } void CalendarUpdateEvent::Read() { _worldPacket >> EventInfo; _worldPacket >> MaxSize; } void CalendarRemoveEvent::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; _worldPacket >> ClubID; _worldPacket >> Flags; } void CalendarCopyEvent::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; _worldPacket >> EventClubID; _worldPacket >> Date; } void CalendarRSVP::Read() { _worldPacket >> EventID; _worldPacket >> InviteID; _worldPacket >> Status; } void CalendarInvite::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; _worldPacket >> ClubID; _worldPacket >> SizedString::BitsSize<9>(Name); _worldPacket >> Bits<1>(Creating); _worldPacket >> Bits<1>(IsSignUp); _worldPacket >> SizedString::Data(Name); } void CalendarEventSignUp::Read() { _worldPacket >> EventID; _worldPacket >> ClubID; _worldPacket >> Bits<1>(Tentative); } void CalendarRemoveInvite::Read() { _worldPacket >> Guid; _worldPacket >> InviteID; _worldPacket >> ModeratorID; _worldPacket >> EventID; } void CalendarStatus::Read() { _worldPacket >> Guid; _worldPacket >> EventID; _worldPacket >> InviteID; _worldPacket >> ModeratorID; _worldPacket >> Status; } void SetSavedInstanceExtend::Read() { _worldPacket >> MapID; _worldPacket >> DifficultyID; _worldPacket >> Bits<1>(Extend); } void CalendarModeratorStatusQuery::Read() { _worldPacket >> Guid; _worldPacket >> EventID; _worldPacket >> InviteID; _worldPacket >> ModeratorID; _worldPacket >> Status; } WorldPacket const* CalendarInviteAdded::Write() { _worldPacket << InviteGuid; _worldPacket << uint64(EventID); _worldPacket << uint64(InviteID); _worldPacket << uint8(Level); _worldPacket << uint8(Status); _worldPacket << uint8(Type); _worldPacket << ResponseTime; _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); return &_worldPacket; } WorldPacket const* CalendarSendCalendar::Write() { _worldPacket << ServerTime; _worldPacket << Size(Invites); _worldPacket << Size(Events); _worldPacket << Size(RaidLockouts); for (CalendarSendCalendarRaidLockoutInfo const& lockout : RaidLockouts) _worldPacket << lockout; for (CalendarSendCalendarInviteInfo const& invite : Invites) _worldPacket << invite; for (CalendarSendCalendarEventInfo const& event : Events) _worldPacket << event; return &_worldPacket; } WorldPacket const* CalendarSendEvent::Write() { _worldPacket << uint8(EventType); _worldPacket << OwnerGuid; _worldPacket << uint64(EventID); _worldPacket << uint8(GetEventType); _worldPacket << int32(TextureID); _worldPacket << uint16(Flags); _worldPacket << Date; _worldPacket << LockDate; _worldPacket << uint64(EventClubID); _worldPacket << Size(Invites); _worldPacket << SizedString::BitsSize<8>(EventName); _worldPacket << SizedString::BitsSize<11>(Description); _worldPacket.FlushBits(); for (CalendarEventInviteInfo const& invite : Invites) _worldPacket << invite; _worldPacket << SizedString::Data(EventName); _worldPacket << SizedString::Data(Description); return &_worldPacket; } WorldPacket const* CalendarInviteAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; _worldPacket << uint16(Flags); _worldPacket << uint8(EventType); _worldPacket << int32(TextureID); _worldPacket << uint64(EventClubID); _worldPacket << uint64(InviteID); _worldPacket << uint8(Status); _worldPacket << uint8(ModeratorStatus); // Todo: check order _worldPacket << InvitedByGuid; _worldPacket << OwnerGuid; _worldPacket << SizedString::BitsSize<8>(EventName); _worldPacket << Bits<1>(Unknown_1100); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(EventName); return &_worldPacket; } WorldPacket const* CalendarInviteStatus::Write() { _worldPacket << InviteGuid; _worldPacket << uint64(EventID); _worldPacket << Date; _worldPacket << uint16(Flags); _worldPacket << uint8(Status); _worldPacket << ResponseTime; _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); return &_worldPacket; } WorldPacket const* CalendarInviteRemoved::Write() { _worldPacket << InviteGuid; _worldPacket << uint64(EventID); _worldPacket << uint16(Flags); _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); return &_worldPacket; } WorldPacket const* CalendarModeratorStatus::Write() { _worldPacket << InviteGuid; _worldPacket << uint64(EventID); _worldPacket << uint8(Status); _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); return &_worldPacket; } WorldPacket const* CalendarInviteRemovedAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; _worldPacket << uint16(Flags); _worldPacket << uint8(Status); return &_worldPacket; } WorldPacket const* CalendarEventUpdatedAlert::Write() { _worldPacket << uint64(EventClubID); _worldPacket << uint64(EventID); _worldPacket << OriginalDate; _worldPacket << Date; _worldPacket << LockDate; _worldPacket << uint16(Flags); _worldPacket << uint32(TextureID); _worldPacket << uint8(EventType); _worldPacket << SizedString::BitsSize<8>(EventName); _worldPacket << SizedString::BitsSize<11>(Description); _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(EventName); _worldPacket << SizedString::Data(Description); return &_worldPacket; } WorldPacket const* CalendarEventRemovedAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); return &_worldPacket; } WorldPacket const* CalendarSendNumPending::Write() { _worldPacket << uint32(NumPending); return &_worldPacket; } WorldPacket const* CalendarCommandResult::Write() { _worldPacket << uint8(Command); _worldPacket << uint8(Result); _worldPacket << SizedString::BitsSize<9>(Name); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Name); return &_worldPacket; } WorldPacket const* CalendarRaidLockoutAdded::Write() { _worldPacket << uint64(InstanceID); _worldPacket << ServerTime; _worldPacket << int32(MapID); _worldPacket << uint32(DifficultyID); _worldPacket << int32(TimeRemaining); return &_worldPacket; } WorldPacket const* CalendarRaidLockoutRemoved::Write() { _worldPacket << uint64(InstanceID); _worldPacket << int32(MapID); _worldPacket << uint32(DifficultyID); return &_worldPacket; } WorldPacket const* CalendarRaidLockoutUpdated::Write() { _worldPacket << ServerTime; _worldPacket << int32(MapID); _worldPacket << uint32(DifficultyID); _worldPacket << int32(OldTimeRemaining); _worldPacket << int32(NewTimeRemaining); return &_worldPacket; } WorldPacket const* CalendarCommunityInvite::Write() { _worldPacket << Size(Invites); for (CalendarEventInitialInviteInfo const& invite : Invites) { _worldPacket << invite.InviteGuid; _worldPacket << uint8(invite.Level); } return &_worldPacket; } WorldPacket const* CalendarInviteStatusAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; _worldPacket << uint16(Flags); _worldPacket << uint8(Status); return &_worldPacket; } WorldPacket const* CalendarInviteNotesAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << SizedString::BitsSize<8>(Notes); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Notes); return &_worldPacket; } WorldPacket const* CalendarInviteNotes::Write() { _worldPacket << InviteGuid; _worldPacket << uint64(EventID); _worldPacket << Bits<1>(ClearPending); _worldPacket << SizedString::BitsSize<8>(Notes); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(Notes); return &_worldPacket; } void CalendarComplain::Read() { _worldPacket >> InvitedByGUID; _worldPacket >> EventID; _worldPacket >> InviteID; } }