mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 10:05:32 +01:00
* 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:
4
sql/updates/2686_characters.sql
Normal file
4
sql/updates/2686_characters.sql
Normal 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`;
|
||||
1
sql/updates/2686_world.sql
Normal file
1
sql/updates/2686_world.sql
Normal 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.');
|
||||
@@ -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 },
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 << "', '";
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user