diff options
-rw-r--r-- | sql/updates/1366_characters.sql | 4 | ||||
-rw-r--r-- | sql/updates/1366_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 | 107 | ||||
-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, 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 |