Core/GM System: rename columns of gm_surveys, gm_subsurveys, gm_tickets and lag_reports tables to lowerCamel, move queries to prepared statements and refactor the code of TicketMgr.
This commit is contained in:
@@ -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);
|
||||
|
||||
GmTicketList m_GMTicketList;
|
||||
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; }
|
||||
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user