diff options
author | Machiavelli <none@none> | 2009-01-01 02:49:38 +0100 |
---|---|---|
committer | Machiavelli <none@none> | 2009-01-01 02:49:38 +0100 |
commit | 87a9ba3f4e684218bc66e3d448e06ebfec4113a4 (patch) | |
tree | 799291cc344f305b5a62cc5ab286a0258fb070de /src | |
parent | d968a0457bbaaa277356c05e90f83b88f2d30da9 (diff) |
* Crash Fix for ticket system on closing a ticket (pointer was deleted out of object holder), thanks Visagalis
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Level1.cpp | 2 | ||||
-rw-r--r-- | src/game/TicketHandler.cpp | 23 |
2 files changed, 14 insertions, 11 deletions
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*/) |