/*
* 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 .
*/
#ifndef TRINITYCORE_CALENDAR_PACKETS_H
#define TRINITYCORE_CALENDAR_PACKETS_H
#include "Packet.h"
#include "CalendarMgr.h"
#include "ObjectGuid.h"
#include "Optional.h"
#include "PacketUtilities.h"
#include "WowTime.h"
namespace WorldPackets
{
namespace Calendar
{
class CalendarGetCalendar final : public ClientPacket
{
public:
explicit CalendarGetCalendar(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GET, std::move(packet)) { }
void Read() override { }
};
class CalendarGetEvent final : public ClientPacket
{
public:
explicit CalendarGetEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GET_EVENT, std::move(packet)) { }
void Read() override;
uint64 EventID = 0;
};
class CalendarCommunityInviteRequest final : public ClientPacket
{
public:
explicit CalendarCommunityInviteRequest(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMMUNITY_INVITE, std::move(packet)) { }
void Read() override;
uint64 ClubID = 0;
uint8 MinLevel = 1;
uint8 MaxLevel = 100;
uint8 MaxRankOrder = 0;
};
struct CalendarAddEventInviteInfo
{
ObjectGuid Guid;
uint8 Status = 0;
uint8 Moderator = 0;
Optional BnetAccountID;
Optional RealmAddress;
Optional CommunityID;
};
struct CalendarAddEventInfo
{
uint64 ClubID = 0;
std::string Title;
std::string Description;
uint8 EventType = 0;
int32 TextureID = 0;
WowTime Time;
uint32 Flags = 0;
Array Invites;
};
class CalendarAddEvent final : public ClientPacket
{
public:
explicit CalendarAddEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_ADD_EVENT, std::move(packet)) { }
void Read() override;
uint32 MaxSize = 100;
CalendarAddEventInfo EventInfo;
};
struct CalendarUpdateEventInfo
{
uint64 ClubID = 0;
uint64 EventID = 0;
uint64 ModeratorID = 0;
std::string Title;
std::string Description;
uint8 EventType = 0;
uint32 TextureID = 0;
WowTime Time;
uint16 Flags = 0;
};
class CalendarUpdateEvent final : public ClientPacket
{
public:
explicit CalendarUpdateEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_UPDATE_EVENT, std::move(packet)) { }
void Read() override;
uint32 MaxSize = 0;
CalendarUpdateEventInfo EventInfo;
};
class CalendarRemoveEvent final : public ClientPacket
{
public:
explicit CalendarRemoveEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_REMOVE_EVENT, std::move(packet)) { }
void Read() override;
uint64 ModeratorID = 0;
uint64 EventID = 0;
uint64 ClubID = 0;
uint32 Flags = 0;
};
class CalendarCopyEvent final : public ClientPacket
{
public:
explicit CalendarCopyEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COPY_EVENT, std::move(packet)) { }
void Read() override;
uint64 ModeratorID = 0;
uint64 EventID = 0;
uint64 EventClubID = 0;
WowTime Date;
};
class CalendarInviteAdded final : public ServerPacket
{
public:
explicit CalendarInviteAdded() : ServerPacket(SMSG_CALENDAR_INVITE_ADDED, 43) { }
WorldPacket const* Write() override;
uint64 InviteID = 0;
WowTime ResponseTime;
uint8 Level = 100;
ObjectGuid InviteGuid;
uint64 EventID = 0;
uint8 Type = 0;
bool ClearPending = false;
uint8 Status = 0;
};
struct CalendarSendCalendarInviteInfo
{
uint64 EventID = 0;
uint64 InviteID = 0;
ObjectGuid InviterGuid;
uint8 Status = 0;
uint8 Moderator = 0;
uint8 InviteType = 0;
bool IgnoreFriendAndGuildRestriction = false;
};
struct CalendarSendCalendarRaidLockoutInfo
{
uint64 InstanceID = 0;
int32 MapID = 0;
uint32 DifficultyID = 0;
int32 ExpireTime = 0;
};
struct CalendarSendCalendarEventInfo
{
uint64 EventID = 0;
std::string EventName;
uint8 EventType = 0;
WowTime Date;
uint16 Flags = 0;
int32 TextureID = 0;
uint64 EventClubID = 0;
ObjectGuid OwnerGuid;
};
class CalendarSendCalendar final : public ServerPacket
{
public:
explicit CalendarSendCalendar() : ServerPacket(SMSG_CALENDAR_SEND_CALENDAR, 338) { }
WorldPacket const* Write() override;
WowTime ServerTime;
std::vector Invites;
std::vector RaidLockouts;
std::vector Events;
};
struct CalendarEventInviteInfo
{
ObjectGuid Guid;
uint64 InviteID = 0;
WowTime ResponseTime;
uint8 Level = 1;
uint8 Status = 0;
uint8 Moderator = 0;
uint8 InviteType = 0;
std::string Notes;
};
class CalendarSendEvent final : public ServerPacket
{
public:
explicit CalendarSendEvent() : ServerPacket(SMSG_CALENDAR_SEND_EVENT, 93) { }
WorldPacket const* Write() override;
ObjectGuid OwnerGuid;
uint64 EventClubID = 0;
uint64 EventID = 0;
WowTime Date;
WowTime LockDate;
uint16 Flags = 0;
int32 TextureID = 0;
uint8 GetEventType = 0;
uint8 EventType = 0;
std::string Description;
std::string EventName;
std::vector Invites;
};
class CalendarInviteAlert final : public ServerPacket
{
public:
explicit CalendarInviteAlert() : ServerPacket(SMSG_CALENDAR_INVITE_ALERT, 80) { }
WorldPacket const* Write() override;
ObjectGuid OwnerGuid;
uint64 EventClubID = 0;
ObjectGuid InvitedByGuid;
uint64 InviteID = 0;
uint64 EventID = 0;
uint16 Flags = 0;
WowTime Date;
int32 TextureID = 0;
uint8 Status = 0;
uint8 EventType = 0;
uint8 ModeratorStatus = 0;
std::string EventName;
bool Unknown_1100 = false;
};
class CalendarInvite final : public ClientPacket
{
public:
explicit CalendarInvite(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_INVITE, std::move(packet)) { }
void Read() override;
uint64 ModeratorID = 0;
bool IsSignUp = false;
bool Creating = true;
uint64 EventID = 0;
uint64 ClubID = 0;
std::string Name;
};
class CalendarRSVP final : public ClientPacket
{
public:
explicit CalendarRSVP(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_RSVP, std::move(packet)) { }
void Read() override;
uint64 InviteID = 0;
uint64 EventID = 0;
uint8 Status = 0;
};
class CalendarInviteStatus final : public ServerPacket
{
public:
explicit CalendarInviteStatus() : ServerPacket(SMSG_CALENDAR_INVITE_STATUS, 41) { }
WorldPacket const* Write() override;
uint16 Flags = 0;
uint64 EventID = 0;
uint8 Status = 0;
bool ClearPending = false;
WowTime ResponseTime;
WowTime Date;
ObjectGuid InviteGuid;
};
class CalendarInviteRemoved final : public ServerPacket
{
public:
explicit CalendarInviteRemoved() : ServerPacket(SMSG_CALENDAR_INVITE_REMOVED, 29) { }
WorldPacket const* Write() override;
ObjectGuid InviteGuid;
uint64 EventID = 0;
uint16 Flags = 0;
bool ClearPending = false;
};
class CalendarModeratorStatus final : public ServerPacket
{
public:
explicit CalendarModeratorStatus() : ServerPacket(SMSG_CALENDAR_MODERATOR_STATUS, 26) { }
WorldPacket const* Write() override;
ObjectGuid InviteGuid;
uint64 EventID = 0;
uint8 Status = 0;
bool ClearPending = false;
};
class CalendarInviteRemovedAlert final : public ServerPacket
{
public:
explicit CalendarInviteRemovedAlert() : ServerPacket(SMSG_CALENDAR_INVITE_REMOVED_ALERT, 17) { }
WorldPacket const* Write() override;
uint64 EventID = 0;
WowTime Date;
uint16 Flags = 0;
uint8 Status = 0;
};
class CalendarClearPendingAction final : public ServerPacket
{
public:
explicit CalendarClearPendingAction() : ServerPacket(SMSG_CALENDAR_CLEAR_PENDING_ACTION, 0) { }
WorldPacket const* Write() override { return &_worldPacket; }
};
class CalendarEventUpdatedAlert final : public ServerPacket
{
public:
explicit CalendarEventUpdatedAlert() : ServerPacket(SMSG_CALENDAR_EVENT_UPDATED_ALERT, 32) { }
WorldPacket const* Write() override;
uint64 EventClubID = 0;
uint64 EventID = 0;
WowTime Date;
uint16 Flags = 0;
WowTime LockDate;
WowTime OriginalDate;
int32 TextureID = 0;
uint8 EventType = 0;
bool ClearPending = false;
std::string Description;
std::string EventName;
};
class CalendarEventRemovedAlert final : public ServerPacket
{
public:
explicit CalendarEventRemovedAlert() : ServerPacket(SMSG_CALENDAR_EVENT_REMOVED_ALERT, 13) { }
WorldPacket const* Write() override;
uint64 EventID = 0;
WowTime Date;
bool ClearPending = false;
};
class CalendarSendNumPending final : public ServerPacket
{
public:
explicit CalendarSendNumPending() : ServerPacket(SMSG_CALENDAR_SEND_NUM_PENDING, 4) { }
explicit CalendarSendNumPending(uint32 numPending) : ServerPacket(SMSG_CALENDAR_SEND_NUM_PENDING, 4), NumPending(numPending) { }
WorldPacket const* Write() override;
uint32 NumPending = 0;
};
class CalendarGetNumPending final : public ClientPacket
{
public:
explicit CalendarGetNumPending(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GET_NUM_PENDING, std::move(packet)) { }
void Read() override { }
};
class CalendarEventSignUp final : public ClientPacket
{
public:
explicit CalendarEventSignUp(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_EVENT_SIGN_UP, std::move(packet)) { }
void Read() override;
bool Tentative = false;
uint64 EventID = 0;
uint64 ClubID = 0;
};
class CalendarRemoveInvite final : public ClientPacket
{
public:
explicit CalendarRemoveInvite(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_REMOVE_INVITE, std::move(packet)) { }
void Read() override;
ObjectGuid Guid;
uint64 EventID = 0;
uint64 ModeratorID = 0;
uint64 InviteID = 0;
};
class CalendarStatus final : public ClientPacket
{
public:
explicit CalendarStatus(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_STATUS, std::move(packet)) { }
void Read() override;
ObjectGuid Guid;
uint64 EventID = 0;
uint64 ModeratorID = 0;
uint64 InviteID = 0;
uint8 Status = 0;
};
class SetSavedInstanceExtend final : public ClientPacket
{
public:
explicit SetSavedInstanceExtend(WorldPacket&& packet) : ClientPacket(CMSG_SET_SAVED_INSTANCE_EXTEND, std::move(packet)) { }
void Read() override;
int32 MapID = 0;
bool Extend = false;
uint32 DifficultyID = 0;
};
class CalendarModeratorStatusQuery final : public ClientPacket
{
public:
explicit CalendarModeratorStatusQuery(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_MODERATOR_STATUS, std::move(packet)) { }
void Read() override;
ObjectGuid Guid;
uint64 EventID = 0;
uint64 InviteID = 0;
uint64 ModeratorID = 0;
uint8 Status = 0;
};
class CalendarCommandResult final : public ServerPacket
{
public:
explicit CalendarCommandResult() : ServerPacket(SMSG_CALENDAR_COMMAND_RESULT, 3) { }
WorldPacket const* Write() override;
uint8 Command = 0;
uint8 Result = 0;
std::string Name;
};
class CalendarRaidLockoutAdded final : public ServerPacket
{
public:
explicit CalendarRaidLockoutAdded() : ServerPacket(SMSG_CALENDAR_RAID_LOCKOUT_ADDED, 8 + 4 + 4 + 4 + 4) { }
WorldPacket const* Write() override;
uint64 InstanceID = 0;
uint32 DifficultyID = 0;
int32 TimeRemaining = 0;
WowTime ServerTime;
int32 MapID = 0;
};
class CalendarRaidLockoutRemoved final : public ServerPacket
{
public:
explicit CalendarRaidLockoutRemoved() : ServerPacket(SMSG_CALENDAR_RAID_LOCKOUT_REMOVED, 8 + 4 + 4) { }
WorldPacket const* Write() override;
uint64 InstanceID = 0;
int32 MapID = 0;
uint32 DifficultyID = 0;
};
class CalendarRaidLockoutUpdated final : public ServerPacket
{
public:
explicit CalendarRaidLockoutUpdated() : ServerPacket(SMSG_CALENDAR_RAID_LOCKOUT_UPDATED, 20) { }
WorldPacket const* Write() override;
WowTime ServerTime;
int32 MapID = 0;
uint32 DifficultyID = 0;
int32 NewTimeRemaining = 0;
int32 OldTimeRemaining = 0;
};
struct CalendarEventInitialInviteInfo
{
CalendarEventInitialInviteInfo(ObjectGuid inviteGuid, uint8 level) : InviteGuid(inviteGuid), Level(level) { }
ObjectGuid InviteGuid;
uint8 Level = 100;
};
class CalendarCommunityInvite final : public ServerPacket
{
public:
explicit CalendarCommunityInvite() : ServerPacket(SMSG_CALENDAR_COMMUNITY_INVITE, 17) { }
WorldPacket const* Write() override;
std::vector Invites;
};
class CalendarInviteStatusAlert final : public ServerPacket
{
public:
explicit CalendarInviteStatusAlert() : ServerPacket(SMSG_CALENDAR_INVITE_STATUS_ALERT, 5) { }
WorldPacket const* Write() override;
uint64 EventID = 0;
uint16 Flags = 0;
WowTime Date;
uint8 Status = 0;
};
class CalendarInviteNotesAlert final : public ServerPacket
{
public:
explicit CalendarInviteNotesAlert() : ServerPacket(SMSG_CALENDAR_INVITE_NOTES_ALERT, 9) { }
explicit CalendarInviteNotesAlert(uint64 eventID, std::string const& notes) : ServerPacket(SMSG_CALENDAR_INVITE_NOTES_ALERT, 8 + notes.size()), EventID(eventID), Notes(notes) { }
WorldPacket const* Write() override;
uint64 EventID = 0;
std::string Notes;
};
class CalendarInviteNotes final : public ServerPacket
{
public:
explicit CalendarInviteNotes() : ServerPacket(SMSG_CALENDAR_INVITE_NOTES, 26) { }
WorldPacket const* Write() override;
ObjectGuid InviteGuid;
uint64 EventID = 0;
std::string Notes;
bool ClearPending = false;
};
class CalendarComplain final : public ClientPacket
{
public:
explicit CalendarComplain(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMPLAIN, std::move(packet)) { }
void Read() override;
ObjectGuid InvitedByGUID;
uint64 InviteID = 0;
uint64 EventID = 0;
};
}
}
#endif // TRINITYCORE_CALENDAR_PACKETS_H