diff options
-rw-r--r-- | sql/updates/2686_characters.sql | 4 | ||||
-rw-r--r-- | sql/updates/2686_world.sql | 1 | ||||
-rw-r--r-- | src/game/Chat.cpp | 1 | ||||
-rw-r--r-- | src/game/Chat.h | 1 | ||||
-rw-r--r-- | src/game/Level2.cpp | 44 | ||||
-rw-r--r-- | src/game/TicketHandler.cpp | 5 | ||||
-rw-r--r-- | src/game/TicketMgr.cpp | 24 | ||||
-rw-r--r-- | src/game/TicketMgr.h | 6 |
8 files changed, 72 insertions, 14 deletions
diff --git a/sql/updates/2686_characters.sql b/sql/updates/2686_characters.sql new file mode 100644 index 00000000000..8a8d61c2b91 --- /dev/null +++ b/sql/updates/2686_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/2686_world.sql b/sql/updates/2686_world.sql new file mode 100644 index 00000000000..a22254a9d2a --- /dev/null +++ b/sql/updates/2686_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 f63a550b7de..402fdd048c7 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -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 }, diff --git a/src/game/Chat.h b/src/game/Chat.h index 6a10a60ad82..d516d44c6a1 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -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); diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 0377d299945..116fea3ac46 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -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(); diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index f8e0ef689ff..f4af95bb169 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 3b6050d468b..7335b3a3067 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 d86ecc106b0..491e6657f40 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 |