*Integrate TicketMgr with ObjectMgr and clean up assosciated code. More features concerning ticket system are to be added soon. Please report any issues, thanks.

--HG--
branch : trunk
This commit is contained in:
Machiavelli
2009-06-15 23:58:29 +02:00
parent 898b65a6d1
commit 6ad7da569c
11 changed files with 197 additions and 415 deletions
-1
View File
@@ -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
+23 -17
View File
@@ -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;
}
+6 -9
View File
@@ -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)
+109
View File
@@ -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);
}
+43
View File
@@ -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;
+15 -76
View File
@@ -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);
}
-212
View File
@@ -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;
}
-82
View File
@@ -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()
+1 -2
View File
@@ -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..." );
-8
View File
@@ -1285,14 +1285,6 @@
RelativePath="..\..\src\game\TemporarySummon.h"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.h"
>
</File>
<File
RelativePath="..\..\src\game\Totem.cpp"
>
-8
View File
@@ -1286,14 +1286,6 @@
RelativePath="..\..\src\game\TemporarySummon.h"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.h"
>
</File>
<File
RelativePath="..\..\src\game\Totem.cpp"
>