aboutsummaryrefslogtreecommitdiff
path: root/src/game/TicketHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/TicketHandler.cpp')
-rw-r--r--src/game/TicketHandler.cpp139
1 files changed, 51 insertions, 88 deletions
diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp
index 640faacc155..d193f85ef3e 100644
--- a/src/game/TicketHandler.cpp
+++ b/src/game/TicketHandler.cpp
@@ -1,7 +1,7 @@
/*
- * Copyright (C) 2005-2008 MaNGOS
+ * Copyright (C) 2005-2009 MaNGOS
*
- * Copyright (C) 2008 Trinity
+ * Copyright (C) 2008-2009 Trinity
*
* 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
@@ -19,45 +19,39 @@
*/
#include "Language.h"
-#include "ObjectAccessor.h"
#include "WorldPacket.h"
#include "Common.h"
-#include "Log.h"
-#include "ObjectAccessor.h"
+#include "ObjectMgr.h"
#include "Player.h"
-#include "Chat.h"
-#include "TicketMgr.h"
#include "World.h"
-#include "Chat.h"
-
void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
{
- // always do a packet check
CHECK_PACKET_SIZE(recv_data, 4*4+1+2*4);
+
+ if(GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()))
+ {
+ WorldPacket data( SMSG_GMTICKET_CREATE, 4 );
+ data << uint32(1); // 1 - You already have GM ticket
+ SendPacket( &data );
+ return;
+ }
uint32 map;
float x, y, z;
- std::string ticketText = "";
- std::string ticketText2 = "";
- GM_Ticket *ticket = new GM_Ticket;
+ std::string ticketText, ticketText2;
WorldPacket data(SMSG_GMTICKET_CREATE, 4);
-
- // recv Data
- //TODO: Add map coordinates to tickets.
recv_data >> map;
recv_data >> x;
recv_data >> y;
recv_data >> z;
recv_data >> ticketText;
-
- // get additional data, rarely used
recv_data >> ticketText2;
- // assign values
+ GM_Ticket *ticket = new GM_Ticket;
ticket->name = GetPlayer()->GetName();
- ticket->guid = ticketmgr.GenerateTicketID();
+ ticket->guid = objmgr.GenerateGMTicketId();
ticket->playerGuid = GetPlayer()->GetGUID();
ticket->message = ticketText;
ticket->createtime = time(NULL);
@@ -70,58 +64,37 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
ticket->assignedToGM = 0;
ticket->comment = "";
- // remove ticket by player, shouldn't happen
- ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID());
-
- // add ticket
- ticketmgr.AddGMTicket(ticket, false);
+ objmgr.AddOrUpdateGMTicket(*ticket, true);
- // Response - no errors
data << uint32(2);
-
- // Send ticket creation
SendPacket(&data);
- sWorld.SendGMText(LANG_COMMAND_TICKETNEW, ticket->name.c_str(), ticket->guid);
+ sWorld.SendGMText(LANG_COMMAND_TICKETNEW, GetPlayer()->GetName(), ticket->guid);
}
void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data)
{
- // always do a packet check
- CHECK_PACKET_SIZE(recv_data,1);
-
- std::string message = "";
- time_t t = time(NULL);
-
+ CHECK_PACKET_SIZE(recv_data, 1);
WorldPacket data(SMSG_GMTICKET_UPDATETEXT, 4);
- // recv Data
+ std::string message;
recv_data >> message;
- // Update Ticket
- GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
-
- // Check if player has a GM Ticket yet
+ GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
if(!ticket)
{
- // Response - error couldnt find existing Ticket
data << uint32(1);
-
- // Send packet
SendPacket(&data);
return;
}
ticket->message = message;
- ticket->timestamp = (uint32)t;
+ ticket->timestamp = time(NULL);
- ticketmgr.UpdateGMTicket(ticket);
+ objmgr.AddOrUpdateGMTicket(*ticket);
- // Response - no errors
data << uint32(2);
-
- // Send packet
SendPacket(&data);
sWorld.SendGMText(LANG_COMMAND_TICKETUPDATED, GetPlayer()->GetName(), ticket->guid);
@@ -130,66 +103,56 @@ void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data)
void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/)
{
- // NO recv_data, NO packet check size
-
- GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
+ GM_Ticket* ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
- // CHeck for Ticket
if(ticket)
{
- // Remove Tickets from Player
-
- // Response - no errors
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(9);
- // Send Packet
SendPacket(&data);
sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid );
- ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID());
+ objmgr.RemoveGMTicket(ticket, GetPlayer()->GetGUID(), false);
+ SendGMTicketGetTicket(0x0A, 0);
}
}
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/)
{
- // NO recv_data NO packet size check
-
- WorldPacket data(SMSG_GMTICKET_GETTICKET, 400);
-
- // get Current Ticket
- GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
-
- // check for existing ticket
- if(!ticket)
- {
- data << uint32(10);
- // send packet
- SendPacket(&data);
- return;
- }
+ WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 );
+ data << (uint32)time(NULL);
+ data << (uint32)0;
+ SendPacket( &data );
- // Send current Ticket
- data << uint32(6); // unk ?
- data << ticket->message.c_str();
-
- SendPacket(&data);
+ GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
+ if(ticket)
+ SendGMTicketGetTicket(0x06, ticket->message.c_str());
+ else
+ SendGMTicketGetTicket(0x0A, 0);
}
void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/)
{
- // NO recv_data NO packet size check
-
WorldPacket data(SMSG_GMTICKET_SYSTEMSTATUS, 4);
-
- // Response - System is working Fine
-
- // No need for checks, ticket system is active
- // in case of disactivity, this should be set to (0)
-
data << uint32(1);
-
-
- // Send Packet
SendPacket(&data);
}
+
+void WorldSession::SendGMTicketGetTicket(uint32 status, char const* text)
+{
+ int len = text ? strlen(text) : 0;
+ WorldPacket data( SMSG_GMTICKET_GETTICKET, (4+len+1+4+2+4+4) );
+ data << uint32(status); // standard 0x0A, 0x06 if text present
+ if(status == 6)
+ {
+ data << text; // ticket text
+ data << uint8(0x7); // ticket category
+ data << float(0); // tickets in queue?
+ data << float(0); // if > "tickets in queue" then "We are currently experiencing a high volume of petitions."
+ data << float(0); // 0 - "Your ticket will be serviced soon", 1 - "Wait time currently unavailable"
+ data << uint8(0); // if == 2 and next field == 1 then "Your ticket has been escalated"
+ data << uint8(0); // const
+ }
+ SendPacket( &data );
+}