diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Chat.cpp | 1 | ||||
-rw-r--r-- | src/game/Level1.cpp | 40 | ||||
-rw-r--r-- | src/game/Level2.cpp | 15 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 109 | ||||
-rw-r--r-- | src/game/ObjectMgr.h | 43 | ||||
-rw-r--r-- | src/game/TicketHandler.cpp | 91 | ||||
-rw-r--r-- | src/game/TicketMgr.cpp | 212 | ||||
-rw-r--r-- | src/game/TicketMgr.h | 82 | ||||
-rw-r--r-- | src/game/World.cpp | 3 |
9 files changed, 197 insertions, 399 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 6c40999d652..416696b4369 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -34,7 +34,6 @@ #include "Opcodes.h" #include "Player.h" #include "UpdateMask.h" -#include "TicketMgr.h" // Supported shift-links (client generated and server side) // |color|Harea:area_id|h[name]|h|r diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index f8acec049c2..b3a1b73f59f 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -34,7 +34,6 @@ #include "CellImpl.h" #include "InstanceSaveMgr.h" #include "Util.h" -#include "TicketMgr.h" #ifdef _DEBUG_VMAPS #include "VMapFactory.h" @@ -286,7 +285,7 @@ std::string ChatHandler::PGetParseString(int32 entry, ...) bool ChatHandler::HandleGMTicketListCommand(const char* args) { SendSysMessage(LANG_COMMAND_TICKETSHOWLIST); - for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr) + for(GmTicketList::iterator itr = objmgr.m_GMTicketList.begin(); itr != objmgr.m_GMTicketList.end(); ++itr) { if((*itr)->closed != 0) continue; @@ -309,7 +308,7 @@ bool ChatHandler::HandleGMTicketListCommand(const char* args) bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args) { SendSysMessage(LANG_COMMAND_TICKETSHOWONLINELIST); - for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr) + for(GmTicketList::iterator itr = objmgr.m_GMTicketList.begin(); itr != objmgr.m_GMTicketList.end(); ++itr) { if((*itr)->closed != 0 || !objmgr.GetPlayer((*itr)->playerGuid)) continue; @@ -332,7 +331,7 @@ bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args) bool ChatHandler::HandleGMTicketListClosedCommand(const char* args) { SendSysMessage(LANG_COMMAND_TICKETSHOWCLOSEDLIST); - for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr) + for(GmTicketList::iterator itr = objmgr.m_GMTicketList.begin(); itr != objmgr.m_GMTicketList.end(); ++itr) { if((*itr)->closed == 0) continue; @@ -358,7 +357,7 @@ bool ChatHandler::HandleGMTicketGetByIdCommand(const char* args) return false; uint64 tguid = atoi(args); - GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid); + GM_Ticket *ticket = objmgr.GetGMTicket(tguid); if(!ticket) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); @@ -389,7 +388,14 @@ bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args) if(!*args) return false; - GM_Ticket *ticket = ticketmgr.GetGMTicketByName(args); + Player *plr = objmgr.GetPlayer(args); + if(!plr) + { + SendSysMessage(LANG_NO_PLAYERS_FOUND); + return true; + } + + GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(plr->GetGUID()); if(!ticket) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); @@ -421,7 +427,7 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) return false; uint64 tguid = atoi(args); - GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid); + GM_Ticket *ticket = objmgr.GetGMTicket(tguid); if(!ticket || ticket->closed != 0) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); @@ -437,7 +443,7 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str()); ss << PGetParseString(LANG_COMMAND_TICKETCLOSED, m_session->GetPlayer()->GetName()); SendGlobalGMSysMessage(ss.str().c_str()); - ticketmgr.RemoveGMTicket(ticket->guid, m_session->GetPlayer()->GetGUID()); + objmgr.RemoveGMTicket(ticket->guid, m_session->GetPlayer()->GetGUID()); Player *plr = objmgr.GetPlayer(ticket->playerGuid); if(!plr || !plr->IsInWorld()) @@ -469,7 +475,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) Player *cplr = m_session->GetPlayer(); std::string gmname; - GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); + GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid); if(!ticket || ticket->closed != 0) { @@ -497,7 +503,7 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) } ticket->assignedToGM = tarGUID; - ticketmgr.UpdateGMTicket(ticket); + objmgr.AddOrUpdateGMTicket(*ticket); std::stringstream ss; ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid); ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str()); @@ -513,7 +519,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) uint64 ticketGuid = atoi(args); Player *cplr = m_session->GetPlayer(); - GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); + GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid); if(!ticket|| ticket->closed != 0) { @@ -542,7 +548,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) ss << PGetParseString(LANG_COMMAND_TICKETLISTUNASSIGNED, cplr->GetName()); SendGlobalGMSysMessage(ss.str().c_str()); ticket->assignedToGM = 0; - ticketmgr.UpdateGMTicket(ticket); + objmgr.AddOrUpdateGMTicket(*ticket); return true; } @@ -559,7 +565,7 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) return false; Player *cplr = m_session->GetPlayer(); - GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); + GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid); if(!ticket || ticket->closed != 0) { @@ -575,7 +581,7 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) std::string gmname; objmgr.GetPlayerNameByGUID(ticket->assignedToGM, gmname); ticket->comment = comment; - ticketmgr.UpdateGMTicket(ticket); + objmgr.AddOrUpdateGMTicket(*ticket); std::stringstream ss; ss << PGetParseString(LANG_COMMAND_TICKETLISTGUID, ticket->guid); ss << PGetParseString(LANG_COMMAND_TICKETLISTNAME, ticket->name.c_str()); @@ -593,7 +599,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) if(!*args) return false; uint64 ticketGuid = atoi(args); - GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid); + GM_Ticket *ticket = objmgr.GetGMTicket(ticketGuid); if(!ticket) { @@ -612,7 +618,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) ss << PGetParseString(LANG_COMMAND_TICKETDELETED, m_session->GetPlayer()->GetName()); SendGlobalGMSysMessage(ss.str().c_str()); Player *plr = objmgr.GetPlayer(ticket->playerGuid); - ticketmgr.DeleteGMTicketPermanently(ticket->guid); + objmgr.RemoveGMTicket(ticket, -1, true); if(plr && plr->IsInWorld()) { // Force abandon ticket @@ -627,7 +633,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) bool ChatHandler::HandleGMTicketReloadCommand(const char*) { - ticketmgr.LoadGMTickets(); + objmgr.LoadGMTickets(); return true; } diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 1c79a875e14..c76c6e78102 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -26,7 +26,6 @@ #include "GameObject.h" #include "Opcodes.h" #include "Chat.h" -#include "ObjectAccessor.h" #include "MapManager.h" #include "Language.h" #include "World.h" @@ -34,7 +33,6 @@ #include "SpellMgr.h" #include "PoolHandler.h" #include "AccountMgr.h" -#include "TicketMgr.h" #include "WaypointManager.h" #include "Util.h" #include <cctype> @@ -42,7 +40,6 @@ #include <fstream> #include <map> #include "GlobalEvents.h" -#include "TicketMgr.h" #include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand #include "CreatureGroups.h" @@ -158,7 +155,7 @@ bool ChatHandler::HandleGoTicketCommand(const char * args) if(!ticket_id) return false; - GM_Ticket *ticket = ticketmgr.GetGMTicket(ticket_id); + GM_Ticket *ticket = objmgr.GetGMTicket(ticket_id); if(!ticket) { SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); @@ -2350,7 +2347,7 @@ bool ChatHandler::HandleTicketCommand(const char* args) return false; } - size_t count = ticketmgr.GetTicketCount(); + size_t count = objmgr.GetTicketCount(); bool accept = m_session->GetPlayer()->isAcceptTickets(); @@ -2417,7 +2414,7 @@ bool ChatHandler::HandleTicketCommand(const char* args) return false; // ticket $char_name - GMTicket* ticket = ticketmgr.GetGMTicket(GUID_LOPART(target_guid)); + GMTicket* ticket = objmgr.GetGMTicket(GUID_LOPART(target_guid)); if(!ticket) return false; @@ -2438,7 +2435,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args) // delticket all if(strncmp(px,"all",4) == 0) { - ticketmgr.DeleteAll(); + objmgr.DeleteAll(); SendSysMessage(LANG_COMMAND_ALLTICKETDELETED); return true; } @@ -2459,7 +2456,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args) uint32 guid = fields[0].GetUInt32(); delete result; - ticketmgr.Delete(guid); + objmgr.Delete(guid); //notify player if(Player* pl = objmgr.GetPlayer(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER))) @@ -2480,7 +2477,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args) return false; // delticket $char_name - ticketmgr.Delete(GUID_LOPART(target_guid)); + objmgr.Delete(GUID_LOPART(target_guid)); // notify players about ticket deleting if(target) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index d89a9577044..4fb36b7ea7a 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -8261,3 +8261,112 @@ Quest const* GetQuestTemplateStore(uint32 entry) { return objmgr.GetQuestTemplate(entry); } + +uint64 ObjectMgr::GenerateGMTicketId() +{ + return ++m_GMticketid; +} + +void ObjectMgr::LoadGMTickets() +{ + m_GMTicketList.clear(); + + QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `createtime`, `map`, `posX`, `posY`, `posZ`, `timestamp`, `closed`, `assignedto`, `comment` FROM `gm_tickets`" ); + + if(!result) + { + sLog.outString(" \n>> GM Tickets table is empty, no tickets were loaded.\n" ); + return; + } + + uint16 count = 0; + barGoLink bar ((*result).GetRowCount()); + GM_Ticket *ticket; + do + { + Field *fields = result->Fetch(); + ticket = new GM_Ticket; + ticket->guid = fields[0].GetUInt64(); + ticket->playerGuid = fields[1].GetUInt64(); + ticket->name = fields[2].GetCppString(); + ticket->message = fields[3].GetCppString(); + ticket->createtime = fields[4].GetUInt64(); + ticket->map = fields[5].GetUInt32(); + ticket->pos_x = fields[6].GetFloat(); + ticket->pos_y = fields[7].GetFloat(); + ticket->pos_z = fields[8].GetFloat(); + ticket->timestamp = fields[9].GetUInt64(); + ticket->closed = fields[10].GetUInt64(); + ticket->assignedToGM = fields[11].GetUInt64(); + ticket->comment = fields[12].GetCppString(); + ++count; + bar.step(); + + m_GMTicketList.push_back(ticket); + + } while( result->NextRow() ); + + result = CharacterDatabase.PQuery("SELECT MAX(`guid`) from `gm_tickets`"); + m_GMticketid = (*result)[0].GetUInt64(); + + sLog.outString(">>> %u GM Tickets loaded from the database.", count); + delete result; +} + +void ObjectMgr::AddOrUpdateGMTicket(GM_Ticket &ticket, bool create) +{ + if(create) + m_GMTicketList.push_back(&ticket); + + _AddOrUpdateGMTicket(ticket); +} + +void ObjectMgr::_AddOrUpdateGMTicket(GM_Ticket &ticket) +{ + std::string msg(ticket.message), name(ticket.name), comment(ticket.comment); + CharacterDatabase.escape_string(msg); + CharacterDatabase.escape_string(name); + CharacterDatabase.escape_string(comment); + std::ostringstream ss; + 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 << 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 << "', '"; + ss << comment << "');"; + CharacterDatabase.BeginTransaction(); + CharacterDatabase.Execute(ss.str().c_str()); + CharacterDatabase.CommitTransaction(); +} + +void ObjectMgr::RemoveGMTicket(GM_Ticket *ticket, int64 source, bool permanently) +{ + for(GmTicketList::iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i) + if((*i) == ticket) + { + if(permanently) + { + CharacterDatabase.PExecute("DELETE FROM `gm_tickets` WHERE `guid` = '%u'", ticket->guid); + i = m_GMTicketList.erase(i); + ticket = NULL; + return; + } + (*i)->closed = source; + } +} + +void ObjectMgr::RemoveGMTicket(uint64 ticketGuid, int64 source, bool permanently) +{ + GM_Ticket *ticket = GetGMTicket(ticketGuid); + assert( ticket ); + RemoveGMTicket(ticket, source, permanently); +} + diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 28da3b01529..0f31b90015c 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -288,6 +288,23 @@ enum SkillRangeType SKILL_RANGE_NONE, // 0..0 always }; +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; + int64 closed; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket, other = GM who closed it. + uint64 assignedToGM; + std::string comment; +}; +typedef std::list<GM_Ticket*> GmTicketList; SkillRangeType GetSkillRangeType(SkillLineEntry const *pSkill, bool racial); #define MAX_PLAYER_NAME 12 // max allowed by client name length @@ -578,6 +595,7 @@ class ObjectMgr void LoadNpcTextId(); void LoadVendors(); void LoadTrainerSpell(); + void LoadGMTickets(); std::string GeneratePetName(uint32 entry); uint32 GetBaseXP(uint32 level); @@ -814,6 +832,30 @@ class ObjectMgr { return ItemRequiredTargetMapBounds(m_ItemRequiredTarget.lower_bound(uiItemEntry),m_ItemRequiredTarget.upper_bound(uiItemEntry)); } + + GM_Ticket *GetGMTicket(uint64 ticketGuid) + { + for(GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i) + if((*i) && (*i)->guid == ticketGuid) + return (*i); + + return NULL; + } + GM_Ticket *GetGMTicketByPlayer(uint64 playerGuid) + { + for(GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i) + if((*i) && (*i)->playerGuid == playerGuid) + return (*i); + + return NULL; + } + + void AddOrUpdateGMTicket(GM_Ticket &ticket, bool create = false); + void _AddOrUpdateGMTicket(GM_Ticket &ticket); + void RemoveGMTicket(uint64 ticketGuid, int64 source = -1, bool permanently = false); + void RemoveGMTicket(GM_Ticket *ticket, int64 source = -1, bool permanently = false); + GmTicketList m_GMTicketList; + uint64 GenerateGMTicketId(); protected: @@ -825,6 +867,7 @@ class ObjectMgr uint32 m_ItemTextId; uint32 m_mailid; uint32 m_hiPetNumber; + uint64 m_GMticketid; // first free low guid for seelcted guid type uint32 m_hiCharGuid; diff --git a/src/game/TicketHandler.cpp b/src/game/TicketHandler.cpp index f4af95bb169..cedafe964f0 100644 --- a/src/game/TicketHandler.cpp +++ b/src/game/TicketHandler.cpp @@ -19,45 +19,31 @@ */ #include "Language.h" -#include "ObjectAccessor.h" #include "WorldPacket.h" #include "Common.h" -#include "Log.h" -#include "ObjectAccessor.h" +#include "ObjectMgr.h" #include "Player.h" -#include "Chat.h" -#include "TicketMgr.h" #include "World.h" -#include "Chat.h" - void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data ) { - // always do a packet check CHECK_PACKET_SIZE(recv_data, 4*4+1+2*4); uint32 map; float x, y, z; - std::string ticketText = ""; - std::string ticketText2 = ""; - GM_Ticket *ticket = new GM_Ticket; + std::string ticketText, ticketText2; WorldPacket data(SMSG_GMTICKET_CREATE, 4); - - // recv Data - //TODO: Add map coordinates to tickets. recv_data >> map; recv_data >> x; recv_data >> y; recv_data >> z; recv_data >> ticketText; - - // get additional data, rarely used recv_data >> ticketText2; - // assign values + GM_Ticket *ticket = new GM_Ticket; ticket->name = GetPlayer()->GetName(); - ticket->guid = ticketmgr.GenerateTicketID(); + ticket->guid = objmgr.GenerateGMTicketId(); ticket->playerGuid = GetPlayer()->GetGUID(); ticket->message = ticketText; ticket->createtime = time(NULL); @@ -70,58 +56,37 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data ) ticket->assignedToGM = 0; ticket->comment = ""; - // remove ticket by player, shouldn't happen - ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID()); + objmgr.AddOrUpdateGMTicket(*ticket, true); - // add ticket - ticketmgr.AddGMTicket(ticket, false); - - // Response - no errors data << uint32(2); - - // Send ticket creation SendPacket(&data); - sWorld.SendGMText(LANG_COMMAND_TICKETNEW, ticket->name.c_str(), ticket->guid); + sWorld.SendGMText(LANG_COMMAND_TICKETNEW, GetPlayer()->GetName(), ticket->guid); } void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data) { - // always do a packet check - CHECK_PACKET_SIZE(recv_data,1); - - std::string message = ""; - time_t t = time(NULL); - + CHECK_PACKET_SIZE(recv_data, 1); WorldPacket data(SMSG_GMTICKET_UPDATETEXT, 4); - // recv Data + std::string message; recv_data >> message; - // Update Ticket - GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); - - // Check if player has a GM Ticket yet + GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); if(!ticket) { - // Response - error couldnt find existing Ticket data << uint32(1); - - // Send packet SendPacket(&data); return; } ticket->message = message; - ticket->timestamp = (uint32)t; + ticket->timestamp = time(NULL); - ticketmgr.UpdateGMTicket(ticket); + objmgr.AddOrUpdateGMTicket(*ticket); - // Response - no errors data << uint32(2); - - // Send packet SendPacket(&data); sWorld.SendGMText(LANG_COMMAND_TICKETUPDATED, GetPlayer()->GetName(), ticket->guid); @@ -130,66 +95,40 @@ void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data) void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/) { - // NO recv_data, NO packet check size + GM_Ticket* ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); - GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); - - // CHeck for Ticket if(ticket) { - // Remove Tickets from Player - - // Response - no errors WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); data << uint32(9); - // Send Packet SendPacket(&data); sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid ); - ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID(), GetPlayer()->GetGUID()); + objmgr.RemoveGMTicket(ticket, GetPlayer()->GetGUID(), false); } } void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/) { - // NO recv_data NO packet size check - WorldPacket data(SMSG_GMTICKET_GETTICKET, 400); - // get Current Ticket - GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); + GM_Ticket *ticket = objmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID()); - // check for existing ticket if(!ticket) { data << uint32(10); - // send packet SendPacket(&data); return; } - - // Send current Ticket - data << uint32(6); // unk ? + data << uint32(6); data << ticket->message.c_str(); - SendPacket(&data); } void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/) { - // NO recv_data NO packet size check - WorldPacket data(SMSG_GMTICKET_SYSTEMSTATUS, 4); - - // Response - System is working Fine - - // No need for checks, ticket system is active - // in case of disactivity, this should be set to (0) - data << uint32(1); - - - // Send Packet SendPacket(&data); } diff --git a/src/game/TicketMgr.cpp b/src/game/TicketMgr.cpp deleted file mode 100644 index 52cf1ff0db6..00000000000 --- a/src/game/TicketMgr.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2005-2009 MaNGOS - * - * Copyright (C) 2008-2009 Trinity - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "TicketMgr.h" -#include "Policies/SingletonImp.h" -#include "World.h" -#include "ObjectMgr.h" -#include "Language.h" -#include "Player.h" -#include "Common.h" -#include "ObjectAccessor.h" -INSTANTIATE_SINGLETON_1( TicketMgr ); - -GM_Ticket* TicketMgr::GetGMTicket(uint64 ticketGuid) -{ - for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();) - { - if((*i)->guid == ticketGuid) - { - return (*i); - } - ++i; - } - return NULL; -} - -GM_Ticket* TicketMgr::GetGMTicketByPlayer(uint64 playerGuid) -{ - for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();) - { - if((*i)->playerGuid == playerGuid && (*i)->closed == 0) - { - return (*i); - } - ++i; - } - return NULL; -} - -GM_Ticket* TicketMgr::GetGMTicketByName(const char* name) -{ - std::string pname = name; - if(!normalizePlayerName(pname)) - return NULL; - - uint64 playerGuid = objmgr.GetPlayerGUIDByName(pname.c_str()); - if(!playerGuid) - return NULL; - - for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();) - { - if((*i)->playerGuid == playerGuid && (*i)->closed == 0) - { - return (*i); - } - ++i; - } - return NULL; -} - -void TicketMgr::AddGMTicket(GM_Ticket *ticket, bool startup) -{ - ASSERT( ticket ); - GM_TicketList.push_back(ticket); - - // save - if(!startup) - SaveGMTicket(ticket); -} - -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 - CharacterDatabase.PExecute("DELETE FROM `gm_tickets` WHERE guid= '%u'", ticketGuid); -} - - -void TicketMgr::LoadGMTickets() -{ - // Delete all out of object holder - GM_TicketList.clear(); - 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) - return; - - // Assign values from SQL to the object holder - do - { - Field *fields = result->Fetch(); - ticket = new GM_Ticket; - ticket->guid = fields[0].GetUInt64(); - ticket->playerGuid = fields[1].GetUInt64(); - ticket->name = fields[2].GetString(); - ticket->message = fields[3].GetString(); - ticket->createtime = fields[4].GetUInt64(); - ticket->map = fields[5].GetUInt32(); - ticket->pos_x = fields[6].GetFloat(); - ticket->pos_y = fields[7].GetFloat(); - ticket->pos_z = fields[8].GetFloat(); - ticket->timestamp = fields[9].GetUInt64(); - ticket->closed = fields[10].GetUInt64(); - ticket->assignedToGM = fields[11].GetUInt64(); - ticket->comment = fields[12].GetString(); - - AddGMTicket(ticket, true); - - } while( result->NextRow() ); - - sWorld.SendGMText(LANG_COMMAND_TICKETRELOAD, result->GetRowCount()); - - delete result; -} - -void TicketMgr::RemoveGMTicket(uint64 ticketGuid, uint64 GMguid) -{ - for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();) - { - if((*i)->guid == ticketGuid && (*i)->closed == 0) - { - (*i)->closed = GMguid; - SaveGMTicket((*i)); - } - ++i; - } -} - - -void TicketMgr::RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid) -{ - for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();) - { - if((*i)->playerGuid == playerGuid && (*i)->closed == 0) - { - (*i)->closed = GMguid; - SaveGMTicket((*i)); - } - ++i; - } -} - -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`, `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 << "', '"; - ss << ticket->comment << "');"; - CharacterDatabase.BeginTransaction(); - CharacterDatabase.Execute(ss.str().c_str()); - CharacterDatabase.CommitTransaction(); - -} - -void TicketMgr::UpdateGMTicket(GM_Ticket *ticket) -{ - SaveGMTicket(ticket); -} - -void TicketMgr::InitTicketID() -{ - QueryResult *result = CharacterDatabase.Query("SELECT MAX(guid) FROM gm_tickets"); - if(result) - { - m_ticketid = result->Fetch()[0].GetUInt64(); - delete result; - } -} - -uint64 TicketMgr::GenerateTicketID() -{ - return ++m_ticketid; -} - diff --git a/src/game/TicketMgr.h b/src/game/TicketMgr.h deleted file mode 100644 index 491e6657f40..00000000000 --- a/src/game/TicketMgr.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2005-2009 MaNGOS - * - * Copyright (C) 2008-2009 Trinity - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _TICKETMGR_H -#define _TICKETMGR_H - -#include "Policies/Singleton.h" -#include "Database/DatabaseEnv.h" -#include "Util.h" -#include "Config/ConfigEnv.h" -#include <map> - -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; - uint64 closed; - uint64 assignedToGM; - std::string comment; -}; - -// Map Typedef -typedef std::list<GM_Ticket*> GmTicketList; - -class TicketMgr -{ - public: - TicketMgr(){ InitTicketID();} //constructor - ~TicketMgr(){} //destructor - - // Object Holder - GmTicketList GM_TicketList; - - void AddGMTicket(GM_Ticket *ticket, bool startup); - void DeleteAllRemovedGMTickets(); - void DeleteGMTicketPermanently(uint64 ticketGuid); - void LoadGMTickets(); - void RemoveGMTicketByPlayer(uint64 playerGuid, uint64 GMguid); - void RemoveGMTicket(uint64 ticketGuid, uint64 GMguid); - void UpdateGMTicket(GM_Ticket *ticket); - void SaveGMTicket(GM_Ticket* ticket); - - uint64 GenerateTicketID(); - void InitTicketID(); - GM_Ticket* GetGMTicket(uint64 ticketGuid); - GM_Ticket* GetGMTicketByPlayer(uint64 playerGuid); - GM_Ticket* GetGMTicketByName(const char *name); - - - protected: - uint64 m_ticketid; -}; - -#endif -#define ticketmgr Trinity::Singleton<TicketMgr>::Instance() - - diff --git a/src/game/World.cpp b/src/game/World.cpp index c6d2bc9104a..4c14da07fd5 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -64,7 +64,6 @@ #include "CellImpl.h" #include "InstanceSaveMgr.h" #include "WaypointManager.h" -#include "TicketMgr.h" #include "Util.h" #include "Language.h" #include "CreatureGroups.h" @@ -1452,7 +1451,7 @@ void World::SetInitialWorldSettings() formation_mgr.LoadCreatureFormations(); sLog.outString( "Loading GM tickets..."); - ticketmgr.LoadGMTickets(); + objmgr.LoadGMTickets(); ///- Handle outdated emails (delete/return) sLog.outString( "Returning old mails..." ); |