From 87a9ba3f4e684218bc66e3d448e06ebfec4113a4 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Thu, 1 Jan 2009 02:49:38 +0100 Subject: * Crash Fix for ticket system on closing a ticket (pointer was deleted out of object holder), thanks Visagalis --HG-- branch : trunk --- src/game/Level1.cpp | 2 +- src/game/TicketHandler.cpp | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 8ac8f491fd2..71356afb86a 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -560,8 +560,8 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) std::string gmname = m_session->GetPlayer()->GetName(); sWorld.SendGMText(LANG_COMMAND_TICKETDELETED, ticket->guid, gmname.c_str()); - ticketmgr.DeleteGMTicketPermanently(ticket->guid); Player *plr = objmgr.GetPlayer(ticket->playerGuid); + ticketmgr.DeleteGMTicketPermanently(ticket->guid); if(plr && plr->IsInWorld()) { // Force abandon ticket diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index 2a0fa4760b6..ab00aa5f7f6 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -128,16 +128,20 @@ void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/) GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); - // Remove Tickets from Player - ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID()); - - // Response - no errors - WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); - data << uint32(9); - // Send Packet - SendPacket(&data); + // 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 ); + sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid ); + ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID()); + } } void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/) @@ -164,7 +168,6 @@ void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/) SendPacket(&data); - } void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/) -- cgit v1.2.3