aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/1366_characters.sql4
-rw-r--r--sql/updates/1366_world.sql1
-rw-r--r--src/game/Chat.cpp1
-rw-r--r--src/game/Chat.h1
-rw-r--r--src/game/Level2.cpp107
-rw-r--r--src/game/TicketHandler.cpp5
-rw-r--r--src/game/TicketMgr.cpp24
-rw-r--r--src/game/TicketMgr.h6
8 files changed, 104 insertions, 45 deletions
diff --git a/sql/updates/1366_characters.sql b/sql/updates/1366_characters.sql
new file mode 100644
index 00000000000..8a8d61c2b91
--- /dev/null
+++ b/sql/updates/1366_characters.sql
@@ -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`;
diff --git a/sql/updates/1366_world.sql b/sql/updates/1366_world.sql
new file mode 100644
index 00000000000..a22254a9d2a
--- /dev/null
+++ b/sql/updates/1366_world.sql
@@ -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.');
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 9671a3f89ec..06e3b285d5a 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -460,6 +460,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "grid", SEC_MODERATOR, false, &ChatHandler::HandleGoGridCommand, "", NULL },
{ "creature", SEC_GAMEMASTER, false, &ChatHandler::HandleGoCreatureCommand, "", NULL },
{ "object", SEC_GAMEMASTER, false, &ChatHandler::HandleGoObjectCommand, "", NULL },
+ { "ticket", SEC_MODERATOR, false, &ChatHandler::HandleGoTicketCommand, "", NULL },
{ "trigger", SEC_GAMEMASTER, false, &ChatHandler::HandleGoTriggerCommand, "", NULL },
{ "graveyard", SEC_GAMEMASTER, false, &ChatHandler::HandleGoGraveyardCommand, "", NULL },
{ "zonexy", SEC_MODERATOR, false, &ChatHandler::HandleGoZoneXYCommand, "", NULL },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 64f923dad95..a8dbb5b98a5 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -321,6 +321,7 @@ class ChatHandler
bool HandleEquipErrorCommand(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);
bool HandleTargetObjectCommand(const char* args);
diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp
index f79b8d9f04c..a52e94cc1f1 100644
--- a/src/game/Level2.cpp
+++ b/src/game/Level2.cpp
@@ -43,6 +43,7 @@
#include <fstream>
#include <map>
#include "GlobalEvents.h"
+#include "TicketMgr.h"
#include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand
@@ -344,6 +345,48 @@ bool ChatHandler::HandleGoObjectCommand(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();
@@ -4054,36 +4097,36 @@ bool ChatHandler::HandleNpcAddFormationCommand(const char* args)
return true;
}
-bool ChatHandler::HandleNpcSetLinkCommand(const char* args)
-{
- if (!*args)
- return false;
-
- uint32 linkguid = (uint32) atoi((char*)args);
-
- Creature* pCreature = getSelectedCreature();
-
- if(!pCreature)
- {
- SendSysMessage(LANG_SELECT_CREATURE);
- SetSentErrorMessage(true);
- return false;
- }
-
- if(!pCreature->GetDBTableGUIDLow())
- {
- PSendSysMessage("Selected creature isn't in `creature` table", pCreature->GetGUIDLow());
- SetSentErrorMessage(true);
- return false;
- }
-
- if(!objmgr.SetCreatureLinkedRespawn(pCreature->GetDBTableGUIDLow(), linkguid))
- {
- PSendSysMessage("Selected creature can't link with guid '%u'", linkguid);
- SetSentErrorMessage(true);
- return false;
- }
-
- PSendSysMessage("LinkGUID '%u' added to creature with DBTableGUID: '%u'", linkguid, pCreature->GetDBTableGUIDLow());
- return true;
+bool ChatHandler::HandleNpcSetLinkCommand(const char* args)
+{
+ if (!*args)
+ return false;
+
+ uint32 linkguid = (uint32) atoi((char*)args);
+
+ Creature* pCreature = getSelectedCreature();
+
+ if(!pCreature)
+ {
+ SendSysMessage(LANG_SELECT_CREATURE);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if(!pCreature->GetDBTableGUIDLow())
+ {
+ PSendSysMessage("Selected creature isn't in `creature` table", pCreature->GetGUIDLow());
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ if(!objmgr.SetCreatureLinkedRespawn(pCreature->GetDBTableGUIDLow(), linkguid))
+ {
+ PSendSysMessage("Selected creature can't link with guid '%u'", linkguid);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ PSendSysMessage("LinkGUID '%u' added to creature with DBTableGUID: '%u'", linkguid, pCreature->GetDBTableGUIDLow());
+ return true;
} \ No newline at end of file
diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp
index d2df52f1c1c..640faacc155 100644
--- a/src/game/TicketHandler.cpp
+++ b/src/game/TicketHandler.cpp
@@ -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);
}
-
diff --git a/src/game/TicketMgr.cpp b/src/game/TicketMgr.cpp
index 29990d83069..f3cbe848e78 100644
--- a/src/game/TicketMgr.cpp
+++ b/src/game/TicketMgr.cpp
@@ -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 << "', '";
diff --git a/src/game/TicketMgr.h b/src/game/TicketMgr.h
index 99e4dc1df41..4cf1b46d97e 100644
--- a/src/game/TicketMgr.h
+++ b/src/game/TicketMgr.h
@@ -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