diff options
Diffstat (limited to 'src/game/TicketHandler.cpp')
-rw-r--r-- | src/game/TicketHandler.cpp | 139 |
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 ); +} |