diff options
author | Golrag <golrag.jeremy@gmail.com> | 2015-06-21 13:12:22 +0200 |
---|---|---|
committer | Golrag <golrag.jeremy@gmail.com> | 2015-07-28 12:57:56 +0200 |
commit | 83c2d36179a652ff4225ebbbe4300a6f0f07aa64 (patch) | |
tree | 07ef8a90af5cfb1164589429b6d55c29c56a43f4 /src/server/game/Calendar/CalendarMgr.cpp | |
parent | a67a03fc60a3ab5648659bbfa8a14038029ecdc7 (diff) |
Core/PacketIO: CalendarPackets:
CMSG_CALENDAR_GET
CMSG_CALENDAR_GET_EVENT
CMSG_CALENDAR_GUILD_FILTER
CMSG_CALENDAR_ADD_EVENT
CMSG_CALENDAR_UPDATE_EVENT
CMSG_CALENDAR_REMOVE_EVENT
CMSG_CALENDAR_COPY_EVENT
CMSG_CALENDAR_GET_NUM_PENDING
CMSG_CALENDAR_EVENT_SIGN_UP
CMSG_CALENDAR_REMOVE_INVITE
CMSG_CALENDAR_EVENT_STATUS
CMSG_SET_SAVED_INSTANCE_EXTEND
CMSG_CALENDAR_EVENT_MODERATOR_STATUS
SMSG_CALENDAR_EVENT_INVITE
SMSG_CALENDAR_SEND_CALENDAR
SMSG_CALENDAR_SEND_EVENT
SMSG_CALENDAR_EVENT_INVITE_ALERT
SMSG_CALENDAR_EVENT_INVITE_STATUS
SMSG_CALENDAR_EVENT_INVITE_REMOVED
SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS
SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT
SMSG_CALENDAR_CLEAR_PENDING_ACTION
SMSG_CALENDAR_EVENT_UPDATED_ALERT
SMSG_CALENDAR_EVENT_REMOVED_ALERT
SMSG_CALENDAR_SEND_NUM_PENDING
SMSG_CALENDAR_COMMAND_RESULT
SMSG_CALENDAR_RAID_LOCKOUT_UPDATED
SMSG_CALENDAR_EVENT_INITIAL_INVITES
SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT // NYI
SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT // NYI
SMSG_CALENDAR_EVENT_INVITE_NOTES // NYI
Diffstat (limited to 'src/server/game/Calendar/CalendarMgr.cpp')
-rw-r--r-- | src/server/game/Calendar/CalendarMgr.cpp | 284 |
1 files changed, 136 insertions, 148 deletions
diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index 82c8ced3801..e31b9739654 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -22,6 +22,7 @@ #include "GuildMgr.h" #include "ObjectAccessor.h" #include "Opcodes.h" +#include "CalendarPackets.h" CalendarInvite::~CalendarInvite() { @@ -51,30 +52,30 @@ void CalendarMgr::LoadFromDB() _maxEventId = 0; _maxInviteId = 0; - // 0 1 2 3 4 5 6 7 8 - if (QueryResult result = CharacterDatabase.Query("SELECT id, creator, title, description, type, dungeon, eventtime, flags, time2 FROM calendar_events")) + // 0 1 2 3 4 5 6 7 8 + if (QueryResult result = CharacterDatabase.Query("SELECT EventID, Owner, Title, Description, EventType, TextureID, Date, Flags, LockDate FROM calendar_events")) do { Field* fields = result->Fetch(); - uint64 eventId = fields[0].GetUInt64(); - ObjectGuid creatorGUID = ObjectGuid::Create<HighGuid::Player>(fields[1].GetUInt64()); + uint64 eventID = fields[0].GetUInt64(); + ObjectGuid ownerGUID = ObjectGuid::Create<HighGuid::Player>(fields[1].GetUInt64()); std::string title = fields[2].GetString(); std::string description = fields[3].GetString(); CalendarEventType type = CalendarEventType(fields[4].GetUInt8()); - int32 dungeonId = fields[5].GetInt32(); - uint32 eventTime = fields[6].GetUInt32(); + int32 textureID = fields[5].GetInt32(); + uint32 date = fields[6].GetUInt32(); uint32 flags = fields[7].GetUInt32(); - uint32 timezoneTime = fields[8].GetUInt32(); - ObjectGuid::LowType guildId = UI64LIT(0); + uint32 lockDate = fields[8].GetUInt32(); + ObjectGuid::LowType guildID = UI64LIT(0); if (flags & CALENDAR_FLAG_GUILD_EVENT || flags & CALENDAR_FLAG_WITHOUT_INVITES) - guildId = Player::GetGuildIdFromDB(creatorGUID); + guildID = Player::GetGuildIdFromDB(ownerGUID); - CalendarEvent* calendarEvent = new CalendarEvent(eventId, creatorGUID, guildId, type, dungeonId, time_t(eventTime), flags, time_t(timezoneTime), title, description); + CalendarEvent* calendarEvent = new CalendarEvent(eventID, ownerGUID, guildID, type, textureID, time_t(date), flags, title, description, time_t(lockDate)); _events.insert(calendarEvent); - _maxEventId = std::max(_maxEventId, eventId); + _maxEventId = std::max(_maxEventId, eventID); ++count; } @@ -83,8 +84,8 @@ void CalendarMgr::LoadFromDB() TC_LOG_INFO("server.loading", ">> Loaded %u calendar events", count); count = 0; - // 0 1 2 3 4 5 6 7 - if (QueryResult result = CharacterDatabase.Query("SELECT id, event, invitee, sender, status, statustime, rank, text FROM calendar_invites")) + // 0 1 2 3 4 5 6 7 + if (QueryResult result = CharacterDatabase.Query("SELECT InviteID, EventID, Invitee, Sender, Status, ResponseTime, ModerationRank, Note FROM calendar_invites")) do { Field* fields = result->Fetch(); @@ -94,11 +95,11 @@ void CalendarMgr::LoadFromDB() ObjectGuid invitee = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64()); ObjectGuid senderGUID = ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()); CalendarInviteStatus status = CalendarInviteStatus(fields[4].GetUInt8()); - uint32 statusTime = fields[5].GetUInt32(); + uint32 responseTime = fields[5].GetUInt32(); CalendarModerationRank rank = CalendarModerationRank(fields[6].GetUInt8()); - std::string text = fields[7].GetString(); + std::string note = fields[7].GetString(); - CalendarInvite* invite = new CalendarInvite(inviteId, eventId, invitee, senderGUID, time_t(statusTime), status, rank, text); + CalendarInvite* invite = new CalendarInvite(inviteId, eventId, invitee, senderGUID, time_t(responseTime), status, rank, note); _invites[eventId].push_back(invite); _maxInviteId = std::max(_maxInviteId, inviteId); @@ -122,7 +123,7 @@ void CalendarMgr::AddEvent(CalendarEvent* calendarEvent, CalendarSendEventType s { _events.insert(calendarEvent); UpdateEvent(calendarEvent); - SendCalendarEvent(calendarEvent->GetCreatorGUID(), *calendarEvent, sendType); + SendCalendarEvent(calendarEvent->GetOwnerGUID(), *calendarEvent, sendType); } void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite) @@ -133,10 +134,10 @@ void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans) { - if (!calendarEvent->IsGuildAnnouncement()) + if (!calendarEvent->IsGuildAnnouncement() && calendarEvent->GetOwnerGUID() != invite->GetInviteeGUID()) SendCalendarEventInvite(*invite); - if (!calendarEvent->IsGuildEvent() || invite->GetInviteeGUID() == calendarEvent->GetCreatorGUID()) + if (!calendarEvent->IsGuildEvent() || invite->GetInviteeGUID() == calendarEvent->GetOwnerGUID()) SendCalendarEventInviteAlert(*calendarEvent, *invite); if (!calendarEvent->IsGuildAnnouncement()) @@ -228,14 +229,14 @@ void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_EVENT); stmt->setUInt64(0, calendarEvent->GetEventId()); - stmt->setUInt64(1, calendarEvent->GetCreatorGUID().GetCounter()); + stmt->setUInt64(1, calendarEvent->GetOwnerGUID().GetCounter()); stmt->setString(2, calendarEvent->GetTitle()); stmt->setString(3, calendarEvent->GetDescription()); stmt->setUInt8(4, calendarEvent->GetType()); - stmt->setInt32(5, calendarEvent->GetDungeonId()); - stmt->setUInt32(6, uint32(calendarEvent->GetEventTime())); + stmt->setInt32(5, calendarEvent->GetTextureId()); + stmt->setUInt32(6, uint32(calendarEvent->GetDate())); stmt->setUInt32(7, calendarEvent->GetFlags()); - stmt->setUInt32(8, calendarEvent->GetTimeZoneTime()); // correct? + stmt->setUInt32(8, uint32(calendarEvent->GetLockDate())); CharacterDatabase.Execute(stmt); } @@ -253,16 +254,16 @@ void CalendarMgr::UpdateInvite(CalendarInvite* invite, SQLTransaction& trans) stmt->setUInt64(2, invite->GetInviteeGUID().GetCounter()); stmt->setUInt64(3, invite->GetSenderGUID().GetCounter()); stmt->setUInt8(4, invite->GetStatus()); - stmt->setUInt32(5, uint32(invite->GetStatusTime())); + stmt->setUInt32(5, uint32(invite->GetResponseTime())); stmt->setUInt8(6, invite->GetRank()); - stmt->setString(7, invite->GetText()); + stmt->setString(7, invite->GetNote()); CharacterDatabase.ExecuteOrAppend(trans, stmt); } void CalendarMgr::RemoveAllPlayerEventsAndInvites(ObjectGuid guid) { for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end(); ++itr) - if ((*itr)->GetCreatorGUID() == guid) + if ((*itr)->GetOwnerGUID() == guid) RemoveEvent((*itr)->GetEventId(), ObjectGuid::Empty); // don't send mail if removing a character CalendarInviteStore playerInvites = GetPlayerInvites(guid); @@ -273,7 +274,7 @@ void CalendarMgr::RemoveAllPlayerEventsAndInvites(ObjectGuid guid) void CalendarMgr::RemovePlayerGuildEventsAndSignups(ObjectGuid guid, ObjectGuid::LowType guildId) { for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end(); ++itr) - if ((*itr)->GetCreatorGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement())) + if ((*itr)->GetOwnerGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement())) RemoveEvent((*itr)->GetEventId(), guid); CalendarInviteStore playerInvites = GetPlayerInvites(guid); @@ -411,7 +412,7 @@ std::string CalendarEvent::BuildCalendarMailBody() const std::ostringstream strm; // we are supposed to send PackedTime so i used WorldPacket to pack it - data.AppendPackedTime(_eventTime); + data.AppendPackedTime(_date); data >> time; strm << time; return strm.str(); @@ -420,130 +421,123 @@ std::string CalendarEvent::BuildCalendarMailBody() const void CalendarMgr::SendCalendarEventInvite(CalendarInvite const& invite) { CalendarEvent* calendarEvent = GetEvent(invite.GetEventId()); - time_t statusTime = invite.GetStatusTime(); - bool hasStatusTime = statusTime != 946684800; // 01/01/2000 00:00:00 ObjectGuid invitee = invite.GetInviteeGUID(); Player* player = ObjectAccessor::FindConnectedPlayer(invitee); uint8 level = player ? player->getLevel() : Player::GetLevelFromDB(invitee); - WorldPacket data(SMSG_CALENDAR_EVENT_INVITE, 8 + 8 + 8 + 1 + 1 + 1 + (statusTime ? 4 : 0) + 1); - data << invitee; - data << uint64(invite.GetEventId()); - data << uint64(invite.GetInviteId()); - data << uint8(level); - data << uint8(invite.GetStatus()); - data << uint8(hasStatusTime); - if (hasStatusTime) - data.AppendPackedTime(statusTime); - data << uint8(invite.GetSenderGUID() != invite.GetInviteeGUID()); // false only if the invite is sign-up + WorldPackets::Calendar::SCalendarEventInvite packet; + packet.EventID = calendarEvent ? calendarEvent->GetEventId() : 0; + packet.InviteGuid = invitee; + packet.InviteID = calendarEvent ? invite.GetInviteId() : 0; + packet.Level = level; + packet.ResponseTime = invite.GetResponseTime(); + packet.Status = invite.GetStatus(); + packet.Type = calendarEvent ? calendarEvent->IsGuildEvent() : 0; // Correct ? + packet.ClearPending = calendarEvent ? !calendarEvent->IsGuildEvent() : true; // Correct ? if (!calendarEvent) // Pre-invite { if (Player* playerSender = ObjectAccessor::FindConnectedPlayer(invite.GetSenderGUID())) - playerSender->SendDirectMessage(&data); + playerSender->SendDirectMessage(packet.Write()); } else { - if (calendarEvent->GetCreatorGUID() != invite.GetInviteeGUID()) // correct? - SendPacketToAllEventRelatives(data, *calendarEvent); + if (calendarEvent->GetOwnerGUID() != invite.GetInviteeGUID()) // correct? + SendPacketToAllEventRelatives(packet.Write(), *calendarEvent); } } -void CalendarMgr::SendCalendarEventUpdateAlert(CalendarEvent const& calendarEvent, time_t oldEventTime) +void CalendarMgr::SendCalendarEventUpdateAlert(CalendarEvent const& calendarEvent, time_t originalDate) { - WorldPacket data(SMSG_CALENDAR_EVENT_UPDATED_ALERT, 1 + 8 + 4 + 4 + 4 + 1 + 4 + - calendarEvent.GetTitle().size() + calendarEvent.GetDescription().size() + 1 + 4 + 4); - data << uint8(1); // unk - data << uint64(calendarEvent.GetEventId()); - data.AppendPackedTime(oldEventTime); - data << uint32(calendarEvent.GetFlags()); - data.AppendPackedTime(calendarEvent.GetEventTime()); - data << uint8(calendarEvent.GetType()); - data << int32(calendarEvent.GetDungeonId()); - data << calendarEvent.GetTitle(); - data << calendarEvent.GetDescription(); - data << uint8(CALENDAR_REPEAT_NEVER); // repeatable - data << uint32(CALENDAR_MAX_INVITES); - data << uint32(0); // unk + WorldPackets::Calendar::CalendarEventUpdatedAlert packet; + packet.ClearPending = true; // FIXME + packet.Date = calendarEvent.GetDate(); + packet.Description = calendarEvent.GetDescription(); + packet.EventID = calendarEvent.GetEventId(); + packet.EventName = calendarEvent.GetTitle(); + packet.EventType = calendarEvent.GetType(); + packet.Flags = calendarEvent.GetFlags(); + packet.LockDate = calendarEvent.GetLockDate(); // Always 0 ? + packet.OriginalDate = originalDate; + packet.TextureID = calendarEvent.GetTextureId(); - SendPacketToAllEventRelatives(data, calendarEvent); + SendPacketToAllEventRelatives(packet.Write(), calendarEvent); } void CalendarMgr::SendCalendarEventStatus(CalendarEvent const& calendarEvent, CalendarInvite const& invite) { - WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_STATUS, 8 + 8 + 4 + 4 + 1 + 1 + 4); - data << invite.GetInviteeGUID(); - data << uint64(calendarEvent.GetEventId()); - data.AppendPackedTime(calendarEvent.GetEventTime()); - data << uint32(calendarEvent.GetFlags()); - data << uint8(invite.GetStatus()); - data << uint8(invite.GetRank()); - data.AppendPackedTime(invite.GetStatusTime()); + WorldPackets::Calendar::CalendarEventInviteStatus packet; + packet.ClearPending = true; // FIXME + packet.Date = calendarEvent.GetDate(); + packet.EventID = calendarEvent.GetEventId(); + packet.Flags = calendarEvent.GetFlags(); + packet.InviteGuid = invite.GetInviteeGUID(); + packet.ResponseTime = invite.GetResponseTime(); + packet.Status = invite.GetStatus(); - SendPacketToAllEventRelatives(data, calendarEvent); + SendPacketToAllEventRelatives(packet.Write(), calendarEvent); } void CalendarMgr::SendCalendarEventRemovedAlert(CalendarEvent const& calendarEvent) { - WorldPacket data(SMSG_CALENDAR_EVENT_REMOVED_ALERT, 1 + 8 + 1); - data << uint8(1); // FIXME: If true does not SignalEvent(EVENT_CALENDAR_ACTION_PENDING) - data << uint64(calendarEvent.GetEventId()); - data.AppendPackedTime(calendarEvent.GetEventTime()); + WorldPackets::Calendar::CalendarEventRemovedAlert packet; + packet.ClearPending = true; // FIXME + packet.Date = calendarEvent.GetDate(); + packet.EventID = calendarEvent.GetEventId(); - SendPacketToAllEventRelatives(data, calendarEvent); + SendPacketToAllEventRelatives(packet.Write(), calendarEvent); } void CalendarMgr::SendCalendarEventInviteRemove(CalendarEvent const& calendarEvent, CalendarInvite const& invite, uint32 flags) { - WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_REMOVED, 8 + 4 + 4 + 1); - data << invite.GetInviteeGUID(); - data << uint64(invite.GetEventId()); - data << uint32(flags); - data << uint8(1); // FIXME + WorldPackets::Calendar::CalendarEventInviteRemoved packet; + packet.ClearPending = true; // FIXME + packet.EventID = calendarEvent.GetEventId(); + packet.Flags = flags; + packet.InviteGuid = invite.GetInviteeGUID(); - SendPacketToAllEventRelatives(data, calendarEvent); + SendPacketToAllEventRelatives(packet.Write(), calendarEvent); } void CalendarMgr::SendCalendarEventModeratorStatusAlert(CalendarEvent const& calendarEvent, CalendarInvite const& invite) { - WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS, 8 + 8 + 1 + 1); - data << invite.GetInviteeGUID(); - data << uint64(invite.GetEventId()); - data << uint8(invite.GetRank()); - data << uint8(1); // Unk boolean - Display to client? + WorldPackets::Calendar::CalendarEventInviteModeratorStatus packet; + packet.ClearPending = true; // FIXME + packet.EventID = calendarEvent.GetEventId(); + packet.InviteGuid = invite.GetInviteeGUID(); + packet.Status = invite.GetStatus(); - SendPacketToAllEventRelatives(data, calendarEvent); + SendPacketToAllEventRelatives(packet.Write(), calendarEvent); } void CalendarMgr::SendCalendarEventInviteAlert(CalendarEvent const& calendarEvent, CalendarInvite const& invite) { - WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_ALERT); - data << uint64(calendarEvent.GetEventId()); - data << calendarEvent.GetTitle(); - data.AppendPackedTime(calendarEvent.GetEventTime()); - data << uint32(calendarEvent.GetFlags()); - data << uint32(calendarEvent.GetType()); - data << int32(calendarEvent.GetDungeonId()); - data << uint64(invite.GetInviteId()); + WorldPackets::Calendar::CalendarEventInviteAlert packet; + packet.Date = calendarEvent.GetDate(); + packet.EventID = calendarEvent.GetEventId(); + packet.EventName = calendarEvent.GetTitle(); + packet.EventType = calendarEvent.GetType(); + packet.Flags = calendarEvent.GetFlags(); + packet.InviteID = invite.GetInviteId(); + packet.InvitedByGuid = invite.GetSenderGUID(); + packet.ModeratorStatus = invite.GetRank(); + packet.OwnerGuid = calendarEvent.GetOwnerGUID(); + packet.Status = invite.GetStatus(); + packet.TextureID = calendarEvent.GetTextureId(); Guild* guild = sGuildMgr->GetGuildById(calendarEvent.GetGuildId()); - data << (guild ? guild->GetGUID() : ObjectGuid::Empty); - - data << uint8(invite.GetStatus()); - data << uint8(invite.GetRank()); - data << calendarEvent.GetCreatorGUID(); - data << invite.GetSenderGUID(); + packet.EventGuildID = guild ? guild->GetGUID() : ObjectGuid::Empty; if (calendarEvent.IsGuildEvent() || calendarEvent.IsGuildAnnouncement()) { if (guild) - guild->BroadcastPacket(&data); + guild->BroadcastPacket(packet.Write()); } else if (Player* player = ObjectAccessor::FindConnectedPlayer(invite.GetInviteeGUID())) - player->SendDirectMessage(&data); + player->SendDirectMessage(packet.Write()); } void CalendarMgr::SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calendarEvent, CalendarSendEventType sendType) @@ -554,105 +548,99 @@ void CalendarMgr::SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calend CalendarInviteStore const& eventInviteeList = _invites[calendarEvent.GetEventId()]; - WorldPacket data(SMSG_CALENDAR_SEND_EVENT, 60 + eventInviteeList.size() * 32); - data << uint8(sendType); - data << calendarEvent.GetCreatorGUID(); - data << uint64(calendarEvent.GetEventId()); - data << calendarEvent.GetTitle(); - data << calendarEvent.GetDescription(); - data << uint8(calendarEvent.GetType()); - data << uint8(CALENDAR_REPEAT_NEVER); // repeatable - data << uint32(CALENDAR_MAX_INVITES); - data << int32(calendarEvent.GetDungeonId()); - data << uint32(calendarEvent.GetFlags()); - data.AppendPackedTime(calendarEvent.GetEventTime()); - data.AppendPackedTime(calendarEvent.GetTimeZoneTime()); + WorldPackets::Calendar::CalendarSendEvent packet; + packet.Date = calendarEvent.GetDate(); + packet.Description = calendarEvent.GetDescription(); + packet.EventID = calendarEvent.GetEventId(); + packet.EventName = calendarEvent.GetTitle(); + packet.EventType = sendType; + packet.Flags = calendarEvent.GetFlags(); + packet.GetEventType = calendarEvent.GetType(); + packet.LockDate = calendarEvent.GetLockDate(); // Always 0 ? + packet.OwnerGuid = calendarEvent.GetOwnerGUID(); + packet.TextureID = calendarEvent.GetTextureId(); Guild* guild = sGuildMgr->GetGuildById(calendarEvent.GetGuildId()); - data << (guild ? guild->GetGUID() : ObjectGuid::Empty); + packet.EventGuildID = (guild ? guild->GetGUID() : ObjectGuid::Empty); - data << uint32(eventInviteeList.size()); - for (CalendarInviteStore::const_iterator itr = eventInviteeList.begin(); itr != eventInviteeList.end(); ++itr) + for (auto const& calendarInvite : eventInviteeList) { - CalendarInvite const* calendarInvite = (*itr); ObjectGuid inviteeGuid = calendarInvite->GetInviteeGUID(); Player* invitee = ObjectAccessor::FindPlayer(inviteeGuid); uint8 inviteeLevel = invitee ? invitee->getLevel() : Player::GetLevelFromDB(inviteeGuid); ObjectGuid::LowType inviteeGuildId = invitee ? invitee->GetGuildId() : Player::GetGuildIdFromDB(inviteeGuid); - data << inviteeGuid; - data << uint8(inviteeLevel); - data << uint8(calendarInvite->GetStatus()); - data << uint8(calendarInvite->GetRank()); - data << uint8(calendarEvent.IsGuildEvent() && calendarEvent.GetGuildId() == inviteeGuildId); - data << uint64(calendarInvite->GetInviteId()); - data.AppendPackedTime(calendarInvite->GetStatusTime()); - data << calendarInvite->GetText(); + WorldPackets::Calendar::CalendarEventInviteInfo inviteInfo; + inviteInfo.Guid = inviteeGuid; + inviteInfo.Level = inviteeLevel; + inviteInfo.Status = calendarInvite->GetStatus(); + inviteInfo.Moderator = calendarInvite->GetRank(); + inviteInfo.InviteType = calendarEvent.IsGuildEvent() && calendarEvent.GetGuildId() == inviteeGuildId; + inviteInfo.InviteID = calendarInvite->GetInviteId(); + inviteInfo.ResponseTime = calendarInvite->GetResponseTime(); + inviteInfo.Notes = calendarInvite->GetNote(); + + packet.Invites.push_back(inviteInfo); } - player->SendDirectMessage(&data); + player->SendDirectMessage(packet.Write()); } void CalendarMgr::SendCalendarEventInviteRemoveAlert(ObjectGuid guid, CalendarEvent const& calendarEvent, CalendarInviteStatus status) { if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) { - WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT, 8 + 4 + 4 + 1); - data << uint64(calendarEvent.GetEventId()); - data.AppendPackedTime(calendarEvent.GetEventTime()); - data << uint32(calendarEvent.GetFlags()); - data << uint8(status); + WorldPackets::Calendar::CalendarEventInviteRemovedAlert packet; + packet.Date = calendarEvent.GetDate(); + packet.EventID = calendarEvent.GetEventId(); + packet.Flags = calendarEvent.GetFlags(); + packet.Status = status; - player->SendDirectMessage(&data); + player->SendDirectMessage(packet.Write()); } } void CalendarMgr::SendCalendarClearPendingAction(ObjectGuid guid) { if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) - { - WorldPacket data(SMSG_CALENDAR_CLEAR_PENDING_ACTION, 0); - player->SendDirectMessage(&data); - } + player->SendDirectMessage(WorldPackets::Calendar::CalendarClearPendingAction().Write()); } void CalendarMgr::SendCalendarCommandResult(ObjectGuid guid, CalendarError err, char const* param /*= NULL*/) { if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) { - WorldPacket data(SMSG_CALENDAR_COMMAND_RESULT, 0); - data << uint32(0); - data << uint8(0); + WorldPackets::Calendar::CalendarCommandResult packet; + packet.Command = 1; // FIXME + packet.Result = err; + switch (err) { case CALENDAR_ERROR_OTHER_INVITES_EXCEEDED: case CALENDAR_ERROR_ALREADY_INVITED_TO_EVENT_S: case CALENDAR_ERROR_IGNORING_YOU_S: - data << param; + packet.Name = param; break; default: - data << uint8(0); break; } - data << uint32(err); - - player->SendDirectMessage(&data); + player->SendDirectMessage(packet.Write()); } } -void CalendarMgr::SendPacketToAllEventRelatives(WorldPacket& packet, CalendarEvent const& calendarEvent) +void CalendarMgr::SendPacketToAllEventRelatives(WorldPacket const* packet, CalendarEvent const& calendarEvent) { // Send packet to all guild members if (calendarEvent.IsGuildEvent() || calendarEvent.IsGuildAnnouncement()) if (Guild* guild = sGuildMgr->GetGuildById(calendarEvent.GetGuildId())) - guild->BroadcastPacket(&packet); + guild->BroadcastPacket(packet); // Send packet to all invitees if event is non-guild, in other case only to non-guild invitees (packet was broadcasted for them) CalendarInviteStore invites = _invites[calendarEvent.GetEventId()]; for (CalendarInviteStore::iterator itr = invites.begin(); itr != invites.end(); ++itr) if (Player* player = ObjectAccessor::FindConnectedPlayer((*itr)->GetInviteeGUID())) if (!calendarEvent.IsGuildEvent() || (calendarEvent.IsGuildEvent() && player->GetGuildId() != calendarEvent.GetGuildId())) - player->SendDirectMessage(&packet); + player->SendDirectMessage(packet); } |