18#include <unordered_set>
41 uint32 count, mapId, decompressedSize;
43 uint8 textCount, messageLen;
44 std::list<uint32> times;
45 std::string chatLog, message;
46 bool haveTicket, needResponse;
59 recvData >> textCount;
60 for (
uint32 i = 0; i < textCount; i++)
64 times.push_back(time);
67 recvData >> decompressedSize;
69 if (count && decompressedSize && decompressedSize < 0xFFFF)
73 tailPacket.
resize(decompressedSize);
75 uLongf realSize = decompressedSize;
76 if (uncompress(tailPacket.
contents(), &realSize, recvData.
contents() + pos, recvData.
size() - pos) == Z_OK)
77 tailPacket >> chatLog;
81 SF_LOG_ERROR(
"network",
"CMSG_GM_TICKET_CREATE possibly corrupt. Uncompression failed.");
90 needResponse = recvData.
ReadBit();
91 haveTicket = recvData.
ReadBit();
95 if (!
ChatHandler(
this).isValidChatMessage(message.c_str()))
117 uint8 messageLen = 0;
119 if (!
ChatHandler(
this).isValidChatMessage(message.c_str()))
129 ticket->SetMessage(message);
130 ticket->SaveToDB(trans);
159 if (ticket->IsCompleted())
179 time_t UpdateTime = 0, OldestTicketTime = time(NULL);
193 recvData >> mainSurvey;
195 std::unordered_set<uint32> surveyIds;
199 for (
uint8 i = 0; i < 15; i++)
202 recvData >> subSurveyId;
212 if (!surveyIds.insert(subSurveyId).second)
215 if (!
ChatHandler(
this).isValidChatMessage(comment.c_str()))
229 if (!
ChatHandler(
this).isValidChatMessage(comment.c_str()))
@ LANG_COMMAND_TICKETPLAYERABANDON
@ LANG_COMMAND_TICKETUPDATED
#define SF_LOG_ERROR(filterType__,...)
uint32 GUID_LOPART(uint64 x)
@ GMTICKET_QUEUE_STATUS_ENABLED
@ GMTICKET_QUEUE_STATUS_DISABLED
@ GMTICKET_RESPONSE_CREATE_SUCCESS
@ GMTICKET_RESPONSE_TICKET_DELETED
@ GMTICKET_RESPONSE_CREATE_ERROR
@ GMTICKET_RESPONSE_UPDATE_SUCCESS
@ GMTICKET_RESPONSE_UPDATE_ERROR
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
bool WriteBit(uint32 bit)
uint32 ReadBits(size_t bits)
void resize(size_t newsize)
std::string ReadString(size_t length)
void WriteBits(T value, size_t bits)
void AppendPackedTime(time_t time)
void SetGmAction(bool needResponse, bool haveTicket)
void SetMessage(std::string const &message)
void SetChatLog(std::list< uint32 > time, std::string const &log)
void setFloat(const uint8 index, const float value)
void setString(const uint8 index, const std::string &value)
void setUInt16(const uint8 index, const uint16 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt8(const uint8 index, const uint8 value)
uint32 GetTicketId() const
void SetPosition(uint32 MapID, G3D::Vector3 pos)
void HandleGMTicketCreateOpcode(WorldPacket &recvPacket)
const char * GetSkyFireString(int32 entry) const
void HandleGMTicketGetTicketOpcode(WorldPacket &recvPacket)
void HandleGMSurveySubmit(WorldPacket &recvPacket)
void SendNotification(const char *format,...) ATTR_PRINTF(2
void HandleGMTicketUpdateOpcode(WorldPacket &recvPacket)
void HandleGMTicketCaseStatusOpcode(WorldPacket &recvPacket)
Player * GetPlayer() const
void HandleGMResponseResolve(WorldPacket &recvPacket)
void HandleSubmitBugOpcode(WorldPacket &recvPacket)
void HandleReportLag(WorldPacket &recvPacket)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetLatency() const
void SendQueryTimeResponse()
void HandleGMTicketDeleteOpcode(WorldPacket &recvPacket)
void HandleGMTicketSystemStatusOpcode(WorldPacket &recvPacket)
void HandleSubmitSuggestOpcode(WorldPacket &recvPacket)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
@ SMSG_GM_TICKET_CASE_STATUS
@ SMSG_GM_TICKET_SYSTEM_STATUS
@ SMSG_GM_TICKET_RESOLVE_RESPONSE
@ CONFIG_TICKET_LEVEL_REQ
@ CONFIG_CHANCE_OF_GM_SURVEY