* Ticket system update;

- Add map, x, y, z coordinate data to ticket upon creation
- Add command .go ticket to teleport to the coordinates where the ticket was created
- Move InitTicketID() to the class constructor instead of at every LoadGMTickets call
- Minor code cleanup

--HG--
branch : trunk
This commit is contained in:
Machiavelli
2009-04-14 17:48:58 +02:00
parent e7ac066211
commit ecbaf6483d
8 changed files with 72 additions and 14 deletions

View File

@@ -0,0 +1,4 @@
ALTER TABLE `gm_tickets` ADD COLUMN `map` INT NOT NULL DEFAULT '0' AFTER `createtime`;
ALTER TABLE `gm_tickets` ADD COLUMN `posX` FLOAT NOT NULL DEFAULT '0' AFTER `map`;
ALTER TABLE `gm_tickets` ADD COLUMN `posY` FLOAT NOT NULL DEFAULT '0' AFTER `posX`;
ALTER TABLE `gm_tickets` ADD COLUMN `posZ` FLOAT NOT NULL DEFAULT '0' AFTER `posY`;

View File

@@ -0,0 +1 @@
insert into `command` (`name`, `security`, `help`) values('go ticket','1','Syntax: .go ticket #ticketid\r\nTeleports the user to the location where $ticketid was created.');

View File

@@ -181,6 +181,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "creature", SEC_MODERATOR, false, &ChatHandler::HandleGoCreatureCommand, "", NULL },
{ "object", SEC_MODERATOR, false, &ChatHandler::HandleGoObjectCommand, "", NULL },
{ "trigger", SEC_MODERATOR, false, &ChatHandler::HandleGoTriggerCommand, "", NULL },
{ "ticket", SEC_MODERATOR, false, &ChatHandler::HandleGoTicketCommand, "", NULL },
{ "graveyard", SEC_MODERATOR, false, &ChatHandler::HandleGoGraveyardCommand, "", NULL },
{ "zonexy", SEC_MODERATOR, false, &ChatHandler::HandleGoZoneXYCommand, "", NULL },
{ "xy", SEC_MODERATOR, false, &ChatHandler::HandleGoXYCommand, "", NULL },

View File

@@ -442,6 +442,7 @@ class ChatHandler
bool HandleDeMorphCommand(const char* args);
bool HandleGoCreatureCommand(const char* args);
bool HandleGoObjectCommand(const char* args);
bool HandleGoTicketCommand(const char* args);
bool HandleGoTriggerCommand(const char* args);
bool HandleGoGraveyardCommand(const char* args);

View File

@@ -34,7 +34,7 @@
#include "SpellMgr.h"
#include "PoolHandler.h"
#include "AccountMgr.h"
//#include "GMTicketMgr.h"
#include "TicketMgr.h"
#include "WaypointManager.h"
#include "Util.h"
#include <cctype>
@@ -158,6 +158,48 @@ bool ChatHandler::HandleUnmuteCommand(const char* args)
return true;
}
bool ChatHandler::HandleGoTicketCommand(const char * args)
{
if(!*args)
return false;
char *cstrticket_id = strtok((char*)args, " ");
if(!cstrticket_id)
return false;
uint64 ticket_id = atoi(cstrticket_id);
if(!ticket_id)
return false;
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticket_id);
if(!ticket)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
float x, y, z;
int mapid;
x = ticket->pos_x;
y = ticket->pos_y;
z = ticket->pos_z;
mapid = ticket->map;
Player* _player = m_session->GetPlayer();
if(_player->isInFlight())
{
_player->GetMotionMaster()->MovementExpired();
_player->m_taxi.ClearTaxiDestinations();
}
else
_player->SaveRecallPosition();
_player->TeleportTo(mapid, x, y, z, 1, 0);
return true;
}
bool ChatHandler::HandleGoTriggerCommand(const char* args)
{
Player* _player = m_session->GetPlayer();

View File

@@ -61,6 +61,10 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
ticket->playerGuid = GetPlayer()->GetGUID();
ticket->message = ticketText;
ticket->createtime = time(NULL);
ticket->map = map;
ticket->pos_x = x;
ticket->pos_y = y;
ticket->pos_z = z;
ticket->timestamp = time(NULL);
ticket->closed = 0;
ticket->assignedToGM = 0;
@@ -189,4 +193,3 @@ void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/
// Send Packet
SendPacket(&data);
}

View File

@@ -92,13 +92,9 @@ 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
@@ -108,10 +104,9 @@ void TicketMgr::DeleteGMTicketPermanently(uint64 ticketGuid)
void TicketMgr::LoadGMTickets()
{
InitTicketID();
// Delete all out of object holder
GM_TicketList.clear();
QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `createtime`, `timestamp`, `closed`, `assignedto`, `comment` FROM `gm_tickets`" );
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)
@@ -127,10 +122,13 @@ void TicketMgr::LoadGMTickets()
ticket->name = fields[2].GetString();
ticket->message = fields[3].GetString();
ticket->createtime = fields[4].GetUInt64();
ticket->timestamp = fields[5].GetUInt64();
ticket->closed = fields[6].GetUInt64();
ticket->assignedToGM = fields[7].GetUInt64();
ticket->comment = fields[8].GetString();
ticket->pos_x = fields[5].GetFloat();
ticket->pos_y = fields[6].GetFloat();
ticket->pos_z = fields[7].GetFloat();
ticket->timestamp = fields[8].GetUInt64();
ticket->closed = fields[9].GetUInt64();
ticket->assignedToGM = fields[10].GetUInt64();
ticket->comment = fields[11].GetString();
AddGMTicket(ticket, true);
@@ -173,12 +171,16 @@ 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`, `timestamp`, `closed`, `assignedto`, `comment`) VALUES('";
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 << "', '";

View File

@@ -32,6 +32,10 @@ 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;
@@ -46,7 +50,7 @@ typedef std::list<GM_Ticket*> GmTicketList
class TicketMgr
{
public:
TicketMgr(){m_ticketid = 1;} //constructor
TicketMgr(){ InitTicketID();} //constructor
~TicketMgr(){} //destructor
// Object Holder