aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Chat.cpp1
-rw-r--r--src/game/Level1.cpp40
-rw-r--r--src/game/Level2.cpp15
-rw-r--r--src/game/ObjectMgr.cpp109
-rw-r--r--src/game/ObjectMgr.h43
-rw-r--r--src/game/TicketHandler.cpp91
-rw-r--r--src/game/TicketMgr.cpp212
-rw-r--r--src/game/TicketMgr.h82
-rw-r--r--src/game/World.cpp3
9 files changed, 197 insertions, 399 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 6c40999d652..416696b4369 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -34,7 +34,6 @@
#include "Opcodes.h"
#include "Player.h"
#include "UpdateMask.h"
-#include "TicketMgr.h"
// Supported shift-links (client generated and server side)
// |color|Harea:area_id|h[name]|h|r
diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp
index f8acec049c2..b3a1b73f59f 100644
--- a/src/game/Level1.cpp
+++ b/src/game/Level1.cpp
@@ -34,7 +34,6 @@
#include "CellImpl.h"
#include "InstanceSaveMgr.h"
#include "Util.h"
-#include "TicketMgr.h"
#ifdef _DEBUG_VMAPS
#include "VMapFactory.h"
@@ -286,7 +285,7 @@ std::string ChatHandler::PGetParseString(int32 entry, ...)
bool ChatHandler::HandleGMTicketListCommand(const char* args)
{
SendSysMessage(LANG_COMMAND_TICKETSHOWLIST);
- for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
+ for(GmTicketList::iterator itr = objmgr.m_GMTicketList.begin(); itr != objmgr.m_GMTicketList.end(); ++itr)
{
if((*itr)->closed != 0)
continue;
@@ -309,7 +308,7 @@ bool ChatHandler::HandleGMTicketListCommand(const char* args)
bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args)
{
SendSysMessage(LANG_COMMAND_TICKETSHOWONLINELIST);
- for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
+ for(GmTicketList::iterator itr = objmgr.m_GMTicketList.begin(); itr != objmgr.m_GMTicketList.end(); ++itr)
{
if((*itr)->closed != 0 || !objmgr.GetPlayer((*itr)->playerGuid))
continue;
@@ -332,7 +331,7 @@ bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args)
bool ChatHandler::HandleGMTicketListClosedCommand(const char* args)
{
SendSysMessage(LANG_COMMAND_TICKETSHOWCLOSEDLIST);
- for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
+ for(GmTicketList::iterator itr = objmgr.m_GMTicketList.begin(); itr != objmgr.m_GMTicketList.end(); ++itr)
{
if((*itr)->closed == 0)
continue;
@@ -358,7 +357,7 @@ bool ChatHandler::HandleGMTicketGetByIdCommand(const char* args)
return false;
uint64 tguid = atoi(args);
- GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
+ GM_Ticket *ticket = objmgr.GetGMTicket(tguid);
if(!ticket)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
@@ -389,7 +388,14 @@ bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args)
if(!*args)
return false;
- GM_Ticket *ticket = ticketmgr.GetGMTicketByName(args);
+ Player *plr = objmgr.GetPlayer(args);
+ if(!plr)
+ {
+ SendSysMessage(LANG_NO_PLAYERS_FOUND);
+ return true;
+ }
+
+ GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(plr->GetGUID());
if(!ticket)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
@@ -421,7 +427,7 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args)
return false;
uint64 tguid = atoi(args);
- GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
+ GM_Ticket *ticket = objmgr.GetGMTicket(tguid);
if(!ticket || ticket->closed != 0)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
@@ -437,7 +443,7 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args)
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
ss << PGetParseString(LANG_COMMAND_TICKETCLOSED, m_session->GetPlayer()->GetName());
SendGlobalGMSysMessage(ss.str().c_str());
- ticketmgr.RemoveGMTicket(ticket->guid, m_session->GetPlayer()->GetGUID());
+ objmgr.RemoveGMTicket(ticket->guid, m_session->GetPlayer()->GetGUID());
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
if(!plr || !plr->IsInWorld())
@@ -469,7 +475,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args)
Player *cplr = m_session->GetPlayer();
std::string gmname;
- GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
+ GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid);
if(!ticket || ticket->closed != 0)
{
@@ -497,7 +503,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args)
}
ticket->assignedToGM = tarGUID;
- ticketmgr.UpdateGMTicket(ticket);
+ objmgr.AddOrUpdateGMTicket(*ticket);
std::stringstream ss;
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
@@ -513,7 +519,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
uint64 ticketGuid = atoi(args);
Player *cplr = m_session->GetPlayer();
- GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
+ GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid);
if(!ticket|| ticket->closed != 0)
{
@@ -542,7 +548,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
ss << PGetParseString(LANG_COMMAND_TICKETLISTUNASSIGNED, cplr->GetName());
SendGlobalGMSysMessage(ss.str().c_str());
ticket->assignedToGM = 0;
- ticketmgr.UpdateGMTicket(ticket);
+ objmgr.AddOrUpdateGMTicket(*ticket);
return true;
}
@@ -559,7 +565,7 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
return false;
Player *cplr = m_session->GetPlayer();
- GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
+ GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid);
if(!ticket || ticket->closed != 0)
{
@@ -575,7 +581,7 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
std::string gmname;
objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname);
ticket->comment = comment;
- ticketmgr.UpdateGMTicket(ticket);
+ objmgr.AddOrUpdateGMTicket(*ticket);
std::stringstream ss;
ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid);
ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str());
@@ -593,7 +599,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
if(!*args)
return false;
uint64 ticketGuid = atoi(args);
- GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
+ GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid);
if(!ticket)
{
@@ -612,7 +618,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
ss << PGetParseString(LANG_COMMAND_TICKETDELETED, m_session->GetPlayer()->GetName());
SendGlobalGMSysMessage(ss.str().c_str());
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
- ticketmgr.DeleteGMTicketPermanently(ticket->guid);
+ objmgr.RemoveGMTicket(ticket, -1, true);
if(plr && plr->IsInWorld())
{
// Force abandon ticket
@@ -627,7 +633,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
bool ChatHandler::HandleGMTicketReloadCommand(const char*)
{
- ticketmgr.LoadGMTickets();
+ objmgr.LoadGMTickets();
return true;
}
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index 1c79a875e14..c76c6e78102 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -26,7 +26,6 @@
#include "GameObject.h"
#include "Opcodes.h"
#include "Chat.h"
-#include "ObjectAccessor.h"
#include "MapManager.h"
#include "Language.h"
#include "World.h"
@@ -34,7 +33,6 @@
#include "SpellMgr.h"
#include "PoolHandler.h"
#include "AccountMgr.h"
-#include "TicketMgr.h"
#include "WaypointManager.h"
#include "Util.h"
#include <cctype>
@@ -42,7 +40,6 @@
#include <fstream>
#include <map>
#include "GlobalEvents.h"
-#include "TicketMgr.h"
#include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand
#include "CreatureGroups.h"
@@ -158,7 +155,7 @@ bool ChatHandler::HandleGoTicketCommand(const char * args)
if(!ticket_id)
return false;
- GM_Ticket *ticket = ticketmgr.GetGMTicket(ticket_id);
+ GM_Ticket *ticket = objmgr.GetGMTicket(ticket_id);
if(!ticket)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
@@ -2350,7 +2347,7 @@ bool ChatHandler::HandleTicketCommand(const char* args)
return false;
}
- size_t count = ticketmgr.GetTicketCount();
+ size_t count = objmgr.GetTicketCount();
bool accept = m_session->GetPlayer()->isAcceptTickets();
@@ -2417,7 +2414,7 @@ bool ChatHandler::HandleTicketCommand(const char* args)
return false;
// ticket $char_name
- GMTicket* ticket = ticketmgr.GetGMTicket(GUID_LOPART(target_guid));
+ GMTicket* ticket = objmgr.GetGMTicket(GUID_LOPART(target_guid));
if(!ticket)
return false;
@@ -2438,7 +2435,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args)
// delticket all
if(strncmp(px,"all",4) == 0)
{
- ticketmgr.DeleteAll();
+ objmgr.DeleteAll();
SendSysMessage(LANG_COMMAND_ALLTICKETDELETED);
return true;
}
@@ -2459,7 +2456,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args)
uint32 guid = fields[0].GetUInt32();
delete result;
- ticketmgr.Delete(guid);
+ objmgr.Delete(guid);
//notify player
if(Player* pl = objmgr.GetPlayer(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)))
@@ -2480,7 +2477,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args)
return false;
// delticket $char_name
- ticketmgr.Delete(GUID_LOPART(target_guid));
+ objmgr.Delete(GUID_LOPART(target_guid));
// notify players about ticket deleting
if(target)
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index d89a9577044..4fb36b7ea7a 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -8261,3 +8261,112 @@ Quest const* GetQuestTemplateStore(uint32 entry)
{
return objmgr.GetQuestTemplate(entry);
}
+
+uint64 ObjectMgr::GenerateGMTicketId()
+{
+ return ++m_GMticketid;
+}
+
+void ObjectMgr::LoadGMTickets()
+{
+ m_GMTicketList.clear();
+
+ QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `createtime`, `map`, `posX`, `posY`, `posZ`, `timestamp`, `closed`, `assignedto`, `comment` FROM `gm_tickets`" );
+
+ if(!result)
+ {
+ sLog.outString(" \n>> GM Tickets table is empty, no tickets were loaded.\n" );
+ return;
+ }
+
+ uint16 count = 0;
+ barGoLink bar ((*result).GetRowCount());
+ GM_Ticket *ticket;
+ do
+ {
+ Field *fields = result->Fetch();
+ ticket = new GM_Ticket;
+ ticket->guid = fields[0].GetUInt64();
+ ticket->playerGuid = fields[1].GetUInt64();
+ ticket->name = fields[2].GetCppString();
+ ticket->message = fields[3].GetCppString();
+ ticket->createtime = fields[4].GetUInt64();
+ ticket->map = fields[5].GetUInt32();
+ ticket->pos_x = fields[6].GetFloat();
+ ticket->pos_y = fields[7].GetFloat();
+ ticket->pos_z = fields[8].GetFloat();
+ ticket->timestamp = fields[9].GetUInt64();
+ ticket->closed = fields[10].GetUInt64();
+ ticket->assignedToGM = fields[11].GetUInt64();
+ ticket->comment = fields[12].GetCppString();
+ ++count;
+ bar.step();
+
+ m_GMTicketList.push_back(ticket);
+
+ } while( result->NextRow() );
+
+ result = CharacterDatabase.PQuery("SELECT MAX(`guid`) from `gm_tickets`");
+ m_GMticketid = (*result)[0].GetUInt64();
+
+ sLog.outString(">>> %u GM Tickets loaded from the database.", count);
+ delete result;
+}
+
+void ObjectMgr::AddOrUpdateGMTicket(GM_Ticket &ticket, bool create)
+{
+ if(create)
+ m_GMTicketList.push_back(&ticket);
+
+ _AddOrUpdateGMTicket(ticket);
+}
+
+void ObjectMgr::_AddOrUpdateGMTicket(GM_Ticket &ticket)
+{
+ std::string msg(ticket.message), name(ticket.name), comment(ticket.comment);
+ CharacterDatabase.escape_string(msg);
+ CharacterDatabase.escape_string(name);
+ CharacterDatabase.escape_string(comment);
+ std::ostringstream ss;
+ ss << "REPLACE INTO `gm_tickets` (`guid`, `playerGuid`, `name`, `message`, `createtime`, `map`, `posX`, `posY`, `posZ`, `timestamp`, `closed`, `assignedto`, `comment`) VALUES('";
+ ss << ticket.guid << "', '";
+ ss << ticket.playerGuid << "', '";
+ ss << name << "', '";
+ ss << msg << "', '" ;
+ ss << ticket.createtime << "', '";
+ ss << ticket.map << "', '";
+ ss << ticket.pos_x << "', '";
+ ss << ticket.pos_y << "', '";
+ ss << ticket.pos_z << "', '";
+ ss << ticket.timestamp << "', '";
+ ss << ticket.closed << "', '";
+ ss << ticket.assignedToGM << "', '";
+ ss << comment << "');";
+ CharacterDatabase.BeginTransaction();
+ CharacterDatabase.Execute(ss.str().c_str());
+ CharacterDatabase.CommitTransaction();
+}
+
+void ObjectMgr::RemoveGMTicket(GM_Ticket *ticket, int64 source, bool permanently)
+{
+ for(GmTicketList::iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i)
+ if((*i) == ticket)
+ {
+ if(permanently)
+ {
+ CharacterDatabase.PExecute("DELETE FROM `gm_tickets` WHERE `guid` = '%u'", ticket->guid);
+ i = m_GMTicketList.erase(i);
+ ticket = NULL;
+ return;
+ }
+ (*i)->closed = source;
+ }
+}
+
+void ObjectMgr::RemoveGMTicket(uint64 ticketGuid, int64 source, bool permanently)
+{
+ GM_Ticket *ticket = GetGMTicket(ticketGuid);
+ assert( ticket );
+ RemoveGMTicket(ticket, source, permanently);
+}
+
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index 28da3b01529..0f31b90015c 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -288,6 +288,23 @@ enum SkillRangeType
SKILL_RANGE_NONE, // 0..0 always
};
+struct GM_Ticket
+{
+ uint64 guid;
+ uint64 playerGuid;
+ std::string name;
+ float pos_x;
+ float pos_y;
+ float pos_z;
+ uint32 map;
+ std::string message;
+ uint64 createtime;
+ uint64 timestamp;
+ int64 closed; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket, other = GM who closed it.
+ uint64 assignedToGM;
+ std::string comment;
+};
+typedef std::list<GM_Ticket*> GmTicketList;
SkillRangeType GetSkillRangeType(SkillLineEntry const *pSkill, bool racial);
#define MAX_PLAYER_NAME 12 // max allowed by client name length
@@ -578,6 +595,7 @@ class ObjectMgr
void LoadNpcTextId();
void LoadVendors();
void LoadTrainerSpell();
+ void LoadGMTickets();
std::string GeneratePetName(uint32 entry);
uint32 GetBaseXP(uint32 level);
@@ -814,6 +832,30 @@ class ObjectMgr
{
return ItemRequiredTargetMapBounds(m_ItemRequiredTarget.lower_bound(uiItemEntry),m_ItemRequiredTarget.upper_bound(uiItemEntry));
}
+
+ GM_Ticket *GetGMTicket(uint64 ticketGuid)
+ {
+ for(GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i)
+ if((*i) && (*i)->guid == ticketGuid)
+ return (*i);
+
+ return NULL;
+ }
+ GM_Ticket *GetGMTicketByPlayer(uint64 playerGuid)
+ {
+ for(GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i)
+ if((*i) && (*i)->playerGuid == playerGuid)
+ return (*i);
+
+ return NULL;
+ }
+
+ void AddOrUpdateGMTicket(GM_Ticket &ticket, bool create = false);
+ void _AddOrUpdateGMTicket(GM_Ticket &ticket);
+ void RemoveGMTicket(uint64 ticketGuid, int64 source = -1, bool permanently = false);
+ void RemoveGMTicket(GM_Ticket *ticket, int64 source = -1, bool permanently = false);
+ GmTicketList m_GMTicketList;
+ uint64 GenerateGMTicketId();
protected:
@@ -825,6 +867,7 @@ class ObjectMgr
uint32 m_ItemTextId;
uint32 m_mailid;
uint32 m_hiPetNumber;
+ uint64 m_GMticketid;
// first free low guid for seelcted guid type
uint32 m_hiCharGuid;
diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp
index f4af95bb169..cedafe964f0 100644
--- a/src/game/TicketHandler.cpp
+++ b/src/game/TicketHandler.cpp
@@ -19,45 +19,31 @@
*/
#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);
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 +56,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());
+ objmgr.AddOrUpdateGMTicket(*ticket, true);
- // add ticket
- ticketmgr.AddGMTicket(ticket, false);
-
- // 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 +95,40 @@ void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data)
void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/)
{
- // NO recv_data, NO packet check size
+ GM_Ticket* ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
- GM_Ticket* ticket = ticketmgr.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);
}
}
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());
+ GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
- // check for existing ticket
if(!ticket)
{
data << uint32(10);
- // send packet
SendPacket(&data);
return;
}
-
- // Send current Ticket
- data << uint32(6); // unk ?
+ data << uint32(6);
data << ticket->message.c_str();
-
SendPacket(&data);
}
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);
}
diff --git a/src/game/TicketMgr.cpp b/src/game/TicketMgr.cpp
deleted file mode 100644
index 52cf1ff0db6..00000000000
--- a/src/game/TicketMgr.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS
- *
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "TicketMgr.h"
-#include "Policies/SingletonImp.h"
-#include "World.h"
-#include "ObjectMgr.h"
-#include "Language.h"
-#include "Player.h"
-#include "Common.h"
-#include "ObjectAccessor.h"
-INSTANTIATE_SINGLETON_1( TicketMgr );
-
-GM_Ticket* TicketMgr::GetGMTicket(uint64 ticketGuid)
-{
- for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
- {
- if((*i)->guid == ticketGuid)
- {
- return (*i);
- }
- ++i;
- }
- return NULL;
-}
-
-GM_Ticket* TicketMgr::GetGMTicketByPlayer(uint64 playerGuid)
-{
- for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
- {
- if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
- {
- return (*i);
- }
- ++i;
- }
- return NULL;
-}
-
-GM_Ticket* TicketMgr::GetGMTicketByName(const char* name)
-{
- std::string pname = name;
- if(!normalizePlayerName(pname))
- return NULL;
-
- uint64 playerGuid = objmgr.GetPlayerGUIDByName(pname.c_str());
- if(!playerGuid)
- return NULL;
-
- for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
- {
- if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
- {
- return (*i);
- }
- ++i;
- }
- return NULL;
-}
-
-void TicketMgr::AddGMTicket(GM_Ticket *ticket, bool startup)
-{
- ASSERT( ticket );
- GM_TicketList.push_back(ticket);
-
- // save
- if(!startup)
- SaveGMTicket(ticket);
-}
-
-void TicketMgr::DeleteGMTicketPermanently(uint64 ticketGuid)
-{
- for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
- {
- if((*i)->guid == ticketGuid)
- i = GM_TicketList.erase(i);
- else
- ++i;
- }
-
- // delete database record
- CharacterDatabase.PExecute("DELETE FROM `gm_tickets` WHERE guid= '%u'", ticketGuid);
-}
-
-
-void TicketMgr::LoadGMTickets()
-{
- // Delete all out of object holder
- GM_TicketList.clear();
- QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `createtime`, `map`, `posX`, `posY`, `posZ`, `timestamp`, `closed`, `assignedto`, `comment` FROM `gm_tickets`" );
- GM_Ticket *ticket;
-
- if(!result)
- return;
-
- // Assign values from SQL to the object holder
- do
- {
- Field *fields = result->Fetch();
- ticket = new GM_Ticket;
- ticket->guid = fields[0].GetUInt64();
- ticket->playerGuid = fields[1].GetUInt64();
- ticket->name = fields[2].GetString();
- ticket->message = fields[3].GetString();
- ticket->createtime = fields[4].GetUInt64();
- ticket->map = fields[5].GetUInt32();
- ticket->pos_x = fields[6].GetFloat();
- ticket->pos_y = fields[7].GetFloat();
- ticket->pos_z = fields[8].GetFloat();
- ticket->timestamp = fields[9].GetUInt64();
- ticket->closed = fields[10].GetUInt64();
- ticket->assignedToGM = fields[11].GetUInt64();
- ticket->comment = fields[12].GetString();
-
- AddGMTicket(ticket, true);
-
- } while( result->NextRow() );
-
- sWorld.SendGMText(LANG_COMMAND_TICKETRELOAD, result->GetRowCount());
-
- delete result;
-}
-
-void TicketMgr::RemoveGMTicket(uint64 ticketGuid, uint64 GMguid)
-{
- for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
- {
- if((*i)->guid == ticketGuid && (*i)->closed == 0)
- {
- (*i)->closed = GMguid;
- SaveGMTicket((*i));
- }
- ++i;
- }
-}
-
-
-void TicketMgr::RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid)
-{
- for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
- {
- if((*i)->playerGuid == playerGuid && (*i)->closed == 0)
- {
- (*i)->closed = GMguid;
- SaveGMTicket((*i));
- }
- ++i;
- }
-}
-
-void TicketMgr::SaveGMTicket(GM_Ticket* ticket)
-{
- std::string msg = ticket->message;
- CharacterDatabase.escape_string(msg);
- std::stringstream ss;
- ss << "REPLACE INTO `gm_tickets` (`guid`, `playerGuid`, `name`, `message`, `createtime`, `map`, `posX`, `posY`, `posZ`, `timestamp`, `closed`, `assignedto`, `comment`) VALUES('";
- ss << ticket->guid << "', '";
- ss << ticket->playerGuid << "', '";
- ss << ticket->name << "', '";
- ss << msg << "', '" ;
- ss << ticket->createtime << "', '";
- ss << ticket->map << "', '";
- ss << ticket->pos_x << "', '";
- ss << ticket->pos_y << "', '";
- ss << ticket->pos_z << "', '";
- ss << ticket->timestamp << "', '";
- ss << ticket->closed << "', '";
- ss << ticket->assignedToGM << "', '";
- ss << ticket->comment << "');";
- CharacterDatabase.BeginTransaction();
- CharacterDatabase.Execute(ss.str().c_str());
- CharacterDatabase.CommitTransaction();
-
-}
-
-void TicketMgr::UpdateGMTicket(GM_Ticket *ticket)
-{
- SaveGMTicket(ticket);
-}
-
-void TicketMgr::InitTicketID()
-{
- QueryResult *result = CharacterDatabase.Query("SELECT MAX(guid) FROM gm_tickets");
- if(result)
- {
- m_ticketid = result->Fetch()[0].GetUInt64();
- delete result;
- }
-}
-
-uint64 TicketMgr::GenerateTicketID()
-{
- return ++m_ticketid;
-}
-
diff --git a/src/game/TicketMgr.h b/src/game/TicketMgr.h
deleted file mode 100644
index 491e6657f40..00000000000
--- a/src/game/TicketMgr.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS
- *
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _TICKETMGR_H
-#define _TICKETMGR_H
-
-#include "Policies/Singleton.h"
-#include "Database/DatabaseEnv.h"
-#include "Util.h"
-#include "Config/ConfigEnv.h"
-#include <map>
-
-struct GM_Ticket
-{
- uint64 guid;
- uint64 playerGuid;
- std::string name;
- float pos_x;
- float pos_y;
- float pos_z;
- uint32 map;
- std::string message;
- uint64 createtime;
- uint64 timestamp;
- uint64 closed;
- uint64 assignedToGM;
- std::string comment;
-};
-
-// Map Typedef
-typedef std::list<GM_Ticket*> GmTicketList;
-
-class TicketMgr
-{
- public:
- TicketMgr(){ InitTicketID();} //constructor
- ~TicketMgr(){} //destructor
-
- // Object Holder
- GmTicketList GM_TicketList;
-
- void AddGMTicket(GM_Ticket *ticket, bool startup);
- void DeleteAllRemovedGMTickets();
- void DeleteGMTicketPermanently(uint64 ticketGuid);
- void LoadGMTickets();
- void RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid);
- void RemoveGMTicket(uint64 ticketGuid, uint64 GMguid);
- void UpdateGMTicket(GM_Ticket *ticket);
- void SaveGMTicket(GM_Ticket* ticket);
-
- uint64 GenerateTicketID();
- void InitTicketID();
- GM_Ticket* GetGMTicket(uint64 ticketGuid);
- GM_Ticket* GetGMTicketByPlayer(uint64 playerGuid);
- GM_Ticket* GetGMTicketByName(const char *name);
-
-
- protected:
- uint64 m_ticketid;
-};
-
-#endif
-#define ticketmgr Trinity::Singleton<TicketMgr>::Instance()
-
-
diff --git a/src/game/World.cpp b/src/game/World.cpp
index c6d2bc9104a..4c14da07fd5 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -64,7 +64,6 @@
#include "CellImpl.h"
#include "InstanceSaveMgr.h"
#include "WaypointManager.h"
-#include "TicketMgr.h"
#include "Util.h"
#include "Language.h"
#include "CreatureGroups.h"
@@ -1452,7 +1451,7 @@ void World::SetInitialWorldSettings()
formation_mgr.LoadCreatureFormations();
sLog.outString( "Loading GM tickets...");
- ticketmgr.LoadGMTickets();
+ objmgr.LoadGMTickets();
///- Handle outdated emails (delete/return)
sLog.outString( "Returning old mails..." );