*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:
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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..." );
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
|
||||
@@ -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"
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user