aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Tickets/TicketMgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Tickets/TicketMgr.h')
-rwxr-xr-xsrc/server/game/Tickets/TicketMgr.h182
1 files changed, 125 insertions, 57 deletions
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index 69bfcd86844..9f222727510 100755
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -24,6 +24,7 @@
#include "DatabaseEnv.h"
#include "SQLStorage.h"
#include "SQLStorageImpl.h"
+#include "Chat.h"
#include "World.h"
// from blizzard lua
@@ -76,27 +77,89 @@ enum LagReportType
LAG_REPORT_TYPE_SPELL = 6
};
-struct GM_Ticket
+class GmTicket
{
- 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;
- bool completed;
- uint8 escalated;
- bool viewed;
- std::string response;
+public:
+ GmTicket();
+ explicit GmTicket(Player* player, WorldPacket& recv_data);
+ ~GmTicket();
+
+ bool IsClosed() const { return _closedBy; }
+ bool IsCompleted() const { return _completed; }
+ bool IsFromPlayer(const uint64& guid) { return guid == _playerGuid; }
+ bool IsAssigned() const { return _assignedTo != 0; }
+ bool IsAssignedTo(const uint64& guid) const { return guid == _assignedTo; }
+ bool IsAssignedNotTo(const uint64& guid) const { return IsAssigned() && !IsAssignedTo(guid); }
+
+ uint32 GetId() const { return _id; }
+ Player* GetPlayer() const { return sObjectMgr->GetPlayer(_playerGuid); }
+ std::string GetPlayerName() const { return _playerName; }
+ std::string GetMessage() const { return _message; }
+ Player* GetAssignedPlayer() const { return sObjectMgr->GetPlayer(_assignedTo); }
+ const uint64& GetAssignedToGUID() const { return _assignedTo; }
+ const char* GetAssignedToName() const
+ {
+ std::string name;
+ if (_assignedTo)
+ if (sObjectMgr->GetPlayerNameByGUID(_assignedTo, name))
+ return name.c_str();
+ return NULL;
+ }
+ const uint64& GetLastModifiedTime() const { return _lastModifiedTime; }
+ GMTicketEscalationStatus GetEscalatedStatus() const { return _escalatedStatus; }
+
+ void SetEscalatedStatus(GMTicketEscalationStatus escalatedStatus) { _escalatedStatus = escalatedStatus; }
+ void SetAssignedTo(const uint64& guid, bool isAdmin)
+ {
+ _assignedTo = guid;
+ if (isAdmin && _escalatedStatus == TICKET_IN_ESCALATION_QUEUE)
+ _escalatedStatus = TICKET_ESCALATED_ASSIGNED;
+ else if (_escalatedStatus == TICKET_UNASSIGNED)
+ _escalatedStatus = TICKET_ASSIGNED;
+ }
+ void SetClosedBy(const int64& value) { _closedBy = value; }
+ void SetMessage(const std::string& message)
+ {
+ _message = message;
+ _lastModifiedTime = uint64(time(NULL));
+ }
+ void SetComment(const std::string& comment) { _comment = comment; }
+ void SetViewed() { _viewed = true; }
+ void SetUnassigned();
+
+ void AppendResponse(const std::string& response) { _response += response; }
+
+ bool LoadFromDB(Field* fields);
+ void SaveToDB(SQLTransaction& trans) const;
+ void DeleteFromDB(SQLTransaction& trans);
+
+ void WritePacket(WorldPacket& data) const;
+ void SendResponse(WorldSession* session) const;
+
+ void TeleportTo(Player* player) const;
+ std::string FormatMessageString(ChatHandler& handler, bool detailed = false) const;
+ std::string FormatMessageString(ChatHandler& handler, const char* szClosedName, const char* szAssignedToName, const char* szUnassignedName, const char* szDeletedName) const;
+
+private:
+ uint32 _id;
+ uint64 _playerGuid;
+ std::string _playerName;
+ float _posX;
+ float _posY;
+ float _posZ;
+ uint16 _mapId;
+ std::string _message;
+ uint64 _createTime;
+ uint64 _lastModifiedTime;
+ int64 _closedBy; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket, other = GM who closed it.
+ uint64 _assignedTo;
+ std::string _comment;
+ bool _completed;
+ GMTicketEscalationStatus _escalatedStatus;
+ bool _viewed;
+ std::string _response;
};
-typedef std::list<GM_Ticket*> GmTicketList;
+typedef std::map<uint32, GmTicket*> GmTicketList;
class TicketMgr
{
@@ -104,63 +167,68 @@ class TicketMgr
friend class ACE_Singleton<TicketMgr, ACE_Null_Mutex>;
public:
- void LoadGMTickets();
- void LoadGMSurveys();
+ void LoadTickets();
+ void LoadSurveys();
- GM_Ticket *GetGMTicket(uint64 ticketGuid)
+ GmTicket* GetTicket(uint32 ticketId)
{
- for (GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i)
- if ((*i) && (*i)->guid == ticketGuid)
- return (*i);
+ GmTicketList::iterator itr = _ticketList.find(ticketId);
+ if (itr != _ticketList.end())
+ return itr->second;
return NULL;
}
- GM_Ticket *GetGMTicketByPlayer(uint64 playerGuid)
+ GmTicket* GetTicketByPlayer(const uint64& playerGuid)
{
- for (GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i)
- if ((*i) && (*i)->playerGuid == playerGuid && (*i)->closed == 0)
- return (*i);
+ for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end(); ++itr)
+ if (itr->second && itr->second->IsFromPlayer(playerGuid) && !itr->second->IsClosed())
+ return itr->second;
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);
- uint64 GenerateGMTicketId();
- bool GetStatus() const { return status; }
- void SetStatus(bool newStatus) { status = newStatus; }
- uint64 GetOpenTicketCount() const { return m_openTickets; }
- uint64 GetNextSurveyID() { return ++m_GMSurveyID; }
-
- void Initialize()
+ GmTicket* GetOldestOpenTicket()
{
- SetStatus(sWorld->getBoolConfig(CONFIG_ALLOW_TICKETS));
- }
-
- GM_Ticket *GetOldestOpenGMTicket()
- {
- for (GmTicketList::const_iterator i = m_GMTicketList.begin(); i != m_GMTicketList.end(); ++i)
- if ((*i) && (*i)->closed == 0 && !(*i)->completed)
- return (*i);
+ for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end(); ++itr)
+ if (itr->second && !itr->second->IsClosed() && !itr->second->IsCompleted())
+ return itr->second;
return NULL;
}
- time_t GetLastChange() const { return lastChange; }
- void UpdateLastChange() { lastChange = time(NULL); }
+ void AddTicket(GmTicket* ticket);
+ void CloseTicket(uint32 ticketId, int64 source = -1);
+ void RemoveTicket(uint32 ticketId);
+
+ bool GetStatus() const { return _status; }
+ void SetStatus(bool status) { _status = status; }
+
+ uint64 GetLastChange() const { return _lastChange; }
+ void UpdateLastChange() { _lastChange = uint64(time(NULL)); }
+
+ uint32 GenerateTicketId() { return ++_lastTicketId; }
+ uint32 GetOpenTicketCount() const { return _openTicketCount; }
+ uint32 GetNextSurveyID() { return ++_lastSurveyId; }
- GmTicketList m_GMTicketList;
+ void Initialize() { SetStatus(sWorld->getBoolConfig(CONFIG_ALLOW_TICKETS)); }
+
+ void ShowList(ChatHandler& handler, bool onlineOnly) const;
+ void ShowClosedList(ChatHandler& handler) const;
+ void ShowEscalatedList(ChatHandler& handler) const;
+
+ void SendTicket(WorldSession* session, GmTicket* ticket) const;
protected:
- uint64 m_GMticketid;
- uint64 m_GMSurveyID;
- bool status;
- uint64 m_openTickets;
- uint32 m_gmCount;
- time_t lastChange;
+ void _RemoveTicket(uint32 ticketId, int64 source = -1, bool permanently = false);
+
+ GmTicketList _ticketList;
+
+ bool _status;
+ uint32 _lastTicketId;
+ uint32 _lastSurveyId;
+ uint32 _openTicketCount;
+ uint64 _lastChange;
};
#define sTicketMgr ACE_Singleton<TicketMgr, ACE_Null_Mutex>::instance()