mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Packets: Add structure for CMSG_GM_TICKET_GET_CASE_STATUS, SMSG_GM_TICKET_CASE_STATUS, CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY and SMSG_GM_TICKET_RESPONSE_ERROR
Implement CMSG_GM_TICKET_GET_TICKET and SMSG_GM_TICKET_GET_TICKET_RESPONSE Update SMSG_FEATURE_SYSTEM_STATUS to support customizable ticket system and add config options
This commit is contained in:
@@ -868,23 +868,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
|
||||
SendPacket(accountDataTimes.Write());
|
||||
|
||||
/// Send FeatureSystemStatus
|
||||
{
|
||||
WorldPackets::System::FeatureSystemStatus features;
|
||||
|
||||
/// START OF DUMMY VALUES
|
||||
features.ComplaintStatus = 2;
|
||||
features.ScrollOfResurrectionRequestsRemaining = 1;
|
||||
features.ScrollOfResurrectionMaxRequestsPerDay = 1;
|
||||
features.CfgRealmID = 2;
|
||||
features.CfgRealmRecID = 0;
|
||||
features.VoiceEnabled = false;
|
||||
/// END OF DUMMY VALUES
|
||||
|
||||
features.CharUndeleteEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_CHARACTER_UNDELETE_ENABLED);
|
||||
features.BpayStoreEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_BPAY_STORE_ENABLED);
|
||||
|
||||
SendPacket(features.Write());
|
||||
}
|
||||
SendFeatureSystemStatus();
|
||||
|
||||
// Send MOTD
|
||||
{
|
||||
@@ -1091,6 +1075,35 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
|
||||
delete holder;
|
||||
}
|
||||
|
||||
void WorldSession::SendFeatureSystemStatus()
|
||||
{
|
||||
WorldPackets::System::FeatureSystemStatus features;
|
||||
|
||||
/// START OF DUMMY VALUES
|
||||
features.ComplaintStatus = 2;
|
||||
features.ScrollOfResurrectionRequestsRemaining = 1;
|
||||
features.ScrollOfResurrectionMaxRequestsPerDay = 1;
|
||||
features.CfgRealmID = 2;
|
||||
features.CfgRealmRecID = 0;
|
||||
features.VoiceEnabled = false;
|
||||
features.BrowserEnabled = false; // Has to be false, otherwise client will crash if "Customer Support" is opened
|
||||
|
||||
features.EuropaTicketSystemStatus.HasValue = true;
|
||||
features.EuropaTicketSystemStatus.Value.ThrottleState.MaxTries = 5;
|
||||
features.EuropaTicketSystemStatus.Value.ThrottleState.PerMilliseconds = 5;
|
||||
features.EuropaTicketSystemStatus.Value.ThrottleState.TryCount = 0;
|
||||
features.EuropaTicketSystemStatus.Value.ThrottleState.LastResetTimeBeforeNow = time(nullptr) - 5000;
|
||||
/// END OF DUMMY VALUES
|
||||
|
||||
features.EuropaTicketSystemStatus.Value.SubmitBugEnabled = sWorld->getBoolConfig(CONFIG_TICKET_SUBMIT_BUG);
|
||||
features.EuropaTicketSystemStatus.Value.TicketSystemEnabled = sWorld->getBoolConfig(CONFIG_TICKET_SUBMIT_TICKET);
|
||||
features.CharUndeleteEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_CHARACTER_UNDELETE_ENABLED);
|
||||
features.BpayStoreEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_BPAY_STORE_ENABLED);
|
||||
|
||||
SendPacket(features.Write());
|
||||
TC_LOG_DEBUG("misc", "SMSG_FEATURE_SYSTEM_STATUS [%s]", GetPlayerInfo().c_str());
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetFactionAtWar(WorldPacket& recvData)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: Received CMSG_SET_FACTION_AT_WAR");
|
||||
|
||||
@@ -157,13 +157,21 @@ void WorldSession::HandleGMTicketDeleteOpcode(WorldPacket & /*recvData*/)
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketGetTicketOpcode(WorldPacket & /*recvData*/)
|
||||
void WorldSession::HandleGMTicketGetCaseStatusOpcode(WorldPackets::Ticket::GMTicketGetCaseStatus& /*packet*/)
|
||||
{
|
||||
//TODO: Implement GmCase and handle this packet correctly
|
||||
TC_LOG_DEBUG("misc", "CMSG_GM_TICKET_GET_CASE_STATUS [%s]", GetPlayerInfo().c_str());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMTicketGetTicketOpcode(WorldPackets::Ticket::GMTicketGetTicket& /*packet*/)
|
||||
{
|
||||
TC_LOG_DEBUG("misc", "CMSG_GM_TICKET_GET_TICKET [%s]", GetPlayerInfo().c_str());
|
||||
SendQueryTimeResponse();
|
||||
|
||||
if (GmTicket* ticket = sTicketMgr->GetTicketByPlayer(GetPlayer()->GetGUID()))
|
||||
{
|
||||
if (ticket->IsCompleted())
|
||||
//TODO: Update SMSG_GM_TICKET_RESPONSE
|
||||
ticket->SendResponse(this);
|
||||
else
|
||||
sTicketMgr->SendTicket(this, ticket);
|
||||
@@ -174,10 +182,13 @@ void WorldSession::HandleGMTicketGetTicketOpcode(WorldPacket & /*recvData*/)
|
||||
|
||||
void WorldSession::HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTicketGetSystemStatus& /*packet*/)
|
||||
{
|
||||
TC_LOG_DEBUG("misc", "CMSG_GM_TICKET_GET_SYSTEM_STATUS [%s]", GetPlayerInfo().c_str());
|
||||
// Note: This only disables the ticket UI at client side and is not fully reliable
|
||||
// Note: This disables the whole customer support UI after trying to send a ticket in disabled state (MessageBox: "GM Help Tickets are currently unavaiable."). UI remains disabled until the character relogs.
|
||||
WorldPackets::Ticket::GMTicketSystemStatus response;
|
||||
response.Status = sTicketMgr->GetStatus() ? GMTICKET_QUEUE_STATUS_ENABLED : GMTICKET_QUEUE_STATUS_DISABLED;
|
||||
SendPacket(response.Write());
|
||||
TC_LOG_DEBUG("misc", "SMSG_GM_TICKET_SYSTEM_STATUS [%s]", GetPlayerInfo().c_str());
|
||||
}
|
||||
|
||||
void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData)
|
||||
|
||||
@@ -23,3 +23,59 @@ WorldPacket const* WorldPackets::Ticket::GMTicketSystemStatus::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
|
||||
WorldPacket const* WorldPackets::Ticket::GMTicketCaseStatus::Write()
|
||||
{
|
||||
_worldPacket.AppendPackedTime(OldestTicketTime);
|
||||
_worldPacket.AppendPackedTime(UpdateTime);
|
||||
|
||||
_worldPacket << int32(Cases.size());
|
||||
|
||||
for (auto const& c : Cases)
|
||||
{
|
||||
_worldPacket << int32(c.CaseID);
|
||||
_worldPacket << int32(c.CaseOpened);
|
||||
_worldPacket << int32(c.CaseStatus);
|
||||
_worldPacket << int16(c.CfgRealmID);
|
||||
_worldPacket << int64(c.CharacterID);
|
||||
_worldPacket << int32(c.WaitTimeOverrideMinutes);
|
||||
|
||||
_worldPacket.WriteBits(c.Url.size(), 11);
|
||||
_worldPacket.WriteBits(c.WaitTimeOverrideMessage.size(), 10);
|
||||
}
|
||||
|
||||
_worldPacket.FlushBits();
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Ticket::GMTicketAcknowledgeSurvey::Read()
|
||||
{
|
||||
_worldPacket >> CaseID;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Ticket::GMTicketGetTicketResponse::Write()
|
||||
{
|
||||
_worldPacket << Result;
|
||||
_worldPacket.WriteBit(Info.HasValue);
|
||||
|
||||
if (Info.HasValue)
|
||||
{
|
||||
_worldPacket << int32(Info.Value.TicketID);
|
||||
_worldPacket << uint8(Info.Value.Category);
|
||||
_worldPacket.AppendPackedTime(Info.Value.TicketOpenTime);
|
||||
_worldPacket.AppendPackedTime(Info.Value.OldestTicketTime);
|
||||
_worldPacket.AppendPackedTime(Info.Value.UpdateTime);
|
||||
_worldPacket << uint8(Info.Value.AssignedToGM);
|
||||
_worldPacket << uint8(Info.Value.OpenedByGM);
|
||||
_worldPacket << int32(Info.Value.WaitTimeOverrideMinutes);
|
||||
|
||||
_worldPacket.WriteBits(Info.Value.TicketDescription.size(), 11);
|
||||
_worldPacket.WriteBits(Info.Value.WaitTimeOverrideMessage.size(), 10);
|
||||
|
||||
_worldPacket.WriteString(Info.Value.TicketDescription);
|
||||
_worldPacket.WriteString(Info.Value.WaitTimeOverrideMessage);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -41,6 +41,95 @@ namespace WorldPackets
|
||||
|
||||
int32 Status = 0;
|
||||
};
|
||||
|
||||
class GMTicketGetCaseStatus final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GMTicketGetCaseStatus(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_GET_CASE_STATUS, std::move(packet)) { }
|
||||
|
||||
void Read() override { };
|
||||
};
|
||||
|
||||
class GMTicketCaseStatus final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
struct GMTicketCase
|
||||
{
|
||||
int32 CaseID = 0;
|
||||
int32 CaseOpened = 0;
|
||||
int32 CaseStatus = 0;
|
||||
int16 CfgRealmID = 0;
|
||||
int64 CharacterID = 0;
|
||||
int32 WaitTimeOverrideMinutes = 0;
|
||||
std::string Url;
|
||||
std::string WaitTimeOverrideMessage;
|
||||
|
||||
bool operator<(GMTicketCase const& right) const
|
||||
{
|
||||
return CaseID < right.CaseID;
|
||||
}
|
||||
};
|
||||
|
||||
GMTicketCaseStatus() : ServerPacket(SMSG_GM_TICKET_CASE_STATUS) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
time_t OldestTicketTime = 0;
|
||||
time_t UpdateTime = 0;
|
||||
std::set<GMTicketCase> Cases;
|
||||
};
|
||||
|
||||
class GMTicketGetTicket final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GMTicketGetTicket(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_GET_TICKET, std::move(packet)) { }
|
||||
|
||||
void Read() override { };
|
||||
};
|
||||
|
||||
class GMTicketGetTicketResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
struct GMTicketInfo
|
||||
{
|
||||
int32 TicketID = 0;
|
||||
std::string TicketDescription;
|
||||
uint8 Category = 0;
|
||||
time_t TicketOpenTime = 0;
|
||||
time_t OldestTicketTime = 0;
|
||||
time_t UpdateTime = 0;
|
||||
uint8 AssignedToGM = 0;
|
||||
uint8 OpenedByGM = 0;
|
||||
std::string WaitTimeOverrideMessage;
|
||||
int32 WaitTimeOverrideMinutes = 0;
|
||||
};
|
||||
|
||||
GMTicketGetTicketResponse() : ServerPacket(SMSG_GM_TICKET_GET_TICKET_RESPONSE) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int32 Result = 0;
|
||||
Optional<GMTicketInfo> Info;
|
||||
|
||||
};
|
||||
|
||||
class GMTicketAcknowledgeSurvey final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
GMTicketAcknowledgeSurvey(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
int32 CaseID;
|
||||
};
|
||||
|
||||
class GMTicketResponseError final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
GMTicketResponseError() : ServerPacket(SMSG_GM_TICKET_RESPONSE_ERROR, 0) { }
|
||||
|
||||
WorldPacket const* Write() { return &_worldPacket; }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -388,11 +388,13 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_SET_SECURITY_GROUP, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_SURVEY_SUBMIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMSurveySubmit );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
//DEFINE_HANDLER(CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Ticket::GMTicketAcknowledgeSurvey, &WorldSession::HandleGMTicketAcknowledgeSurveyOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_CREATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketCreateOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_DELETE_TICKET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketDeleteOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_GM_TICKET_GET_SYSTEM_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetSystemStatus, &WorldSession::HandleGMTicketSystemStatusOpcode)
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_GET_TICKET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketGetTicketOpcode );
|
||||
//DEFINE_HANDLER(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Ticket::GMTicketGetCaseStatus, &WorldSession::HandleGMTicketGetCaseStatusOpcode);
|
||||
DEFINE_HANDLER(CMSG_GM_TICKET_GET_SYSTEM_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetSystemStatus, &WorldSession::HandleGMTicketSystemStatusOpcode);
|
||||
DEFINE_HANDLER(CMSG_GM_TICKET_GET_TICKET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetTicket, &WorldSession::HandleGMTicketGetTicketOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_RESPONSE_RESOLVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMResponseResolve );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_UPDATE_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketUpdateOpcode );
|
||||
DEFINE_HANDLER(CMSG_GOSSIP_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleGossipHelloOpcode);
|
||||
@@ -1277,8 +1279,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_MESSAGECHAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_PLAYER_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_REQUEST_PLAYER_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_CASE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_GET_TICKET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_CASE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_GET_TICKET_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESOLVE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESPONSE_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -269,6 +269,9 @@ namespace WorldPackets
|
||||
namespace Ticket
|
||||
{
|
||||
class GMTicketGetSystemStatus;
|
||||
class GMTicketGetCaseStatus;
|
||||
class GMTicketGetTicket;
|
||||
class GMTicketAcknowledgeSurvey;
|
||||
}
|
||||
|
||||
namespace Trade
|
||||
@@ -514,6 +517,7 @@ class WorldSession
|
||||
void SendAuthWaitQue(uint32 position);
|
||||
|
||||
void SendSetTimeZoneInformation();
|
||||
void SendFeatureSystemStatus();
|
||||
void SendFeatureSystemStatusGlueScreen();
|
||||
|
||||
void SendNameQueryOpcode(ObjectGuid guid);
|
||||
@@ -740,7 +744,8 @@ class WorldSession
|
||||
void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
|
||||
void HandleGMTicketGetCaseStatusOpcode(WorldPackets::Ticket::GMTicketGetCaseStatus& packet);
|
||||
void HandleGMTicketGetTicketOpcode(WorldPackets::Ticket::GMTicketGetTicket& packet);
|
||||
void HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTicketGetSystemStatus& packet);
|
||||
void HandleGMSurveySubmit(WorldPacket& recvPacket);
|
||||
void HandleReportLag(WorldPacket& recvPacket);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "Common.h"
|
||||
#include "TicketMgr.h"
|
||||
#include "TicketPackets.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include "Log.h"
|
||||
#include "Language.h"
|
||||
@@ -28,7 +29,7 @@
|
||||
#include "Player.h"
|
||||
#include "Opcodes.h"
|
||||
|
||||
inline float GetAge(uint64 t) { return float(time(NULL) - t) / DAY; }
|
||||
inline time_t GetAge(uint64 t) { return (time(NULL) - t) / DAY; }
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// GM ticket
|
||||
@@ -113,30 +114,6 @@ void GmTicket::DeleteFromDB()
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
void GmTicket::WritePacket(WorldPacket& data) const
|
||||
{
|
||||
data << uint32(GMTICKET_STATUS_HASTEXT);
|
||||
data << uint32(_id);
|
||||
data << _message;
|
||||
data << uint8(_needMoreHelp);
|
||||
data << GetAge(_lastModifiedTime);
|
||||
if (GmTicket* ticket = sTicketMgr->GetOldestOpenTicket())
|
||||
data << GetAge(ticket->GetLastModifiedTime());
|
||||
else
|
||||
data << float(0);
|
||||
|
||||
// I am not sure how blizzlike this is, and we don't really have a way to find out
|
||||
data << GetAge(sTicketMgr->GetLastChange());
|
||||
|
||||
data << uint8(std::min(_escalatedStatus, TICKET_IN_ESCALATION_QUEUE)); // escalated data
|
||||
data << uint8(_viewed ? GMTICKET_OPENEDBYGM_STATUS_OPENED : GMTICKET_OPENEDBYGM_STATUS_NOT_OPENED); // whether or not it has been viewed
|
||||
|
||||
// TODO: implement these
|
||||
std::string waitTimeOverrideMessage = "";
|
||||
data << waitTimeOverrideMessage;
|
||||
data << uint32(0); // waitTimeOverrideMinutes
|
||||
}
|
||||
|
||||
void GmTicket::SendResponse(WorldSession* session) const
|
||||
{
|
||||
WorldPacket data(SMSG_GM_TICKET_RESPONSE);
|
||||
@@ -267,7 +244,7 @@ TicketMgr::~TicketMgr()
|
||||
|
||||
void TicketMgr::Initialize()
|
||||
{
|
||||
SetStatus(sWorld->getBoolConfig(CONFIG_ALLOW_TICKETS));
|
||||
SetStatus(sWorld->getBoolConfig(CONFIG_TICKET_SYSTEM_STATUS));
|
||||
}
|
||||
|
||||
void TicketMgr::ResetTickets()
|
||||
@@ -408,12 +385,27 @@ void TicketMgr::ShowEscalatedList(ChatHandler& handler) const
|
||||
|
||||
void TicketMgr::SendTicket(WorldSession* session, GmTicket* ticket) const
|
||||
{
|
||||
WorldPacket data(SMSG_GM_TICKET_GET_TICKET_RESPONSE, (ticket ? (4 + 4 + 1 + 4 + 4 + 4 + 1 + 1) : 4));
|
||||
WorldPackets::Ticket::GMTicketGetTicketResponse response;
|
||||
|
||||
if (ticket)
|
||||
ticket->WritePacket(data);
|
||||
else
|
||||
data << uint32(GMTICKET_STATUS_DEFAULT);
|
||||
{
|
||||
response.Result = GMTICKET_STATUS_HASTEXT;
|
||||
response.Info.HasValue = true;
|
||||
|
||||
session->SendPacket(&data);
|
||||
response.Info.Value.TicketID = ticket->GetId();
|
||||
response.Info.Value.TicketDescription = ticket->GetMessage();
|
||||
response.Info.Value.Category = ticket->GetNeedMoreHelp();
|
||||
response.Info.Value.TicketOpenTime = GetAge(ticket->GetLastModifiedTime());
|
||||
response.Info.Value.OldestTicketTime = sTicketMgr->GetOldestOpenTicket() ? GetAge(sTicketMgr->GetOldestOpenTicket()->GetLastModifiedTime()) : float(0);
|
||||
response.Info.Value.UpdateTime = GetAge(sTicketMgr->GetLastChange());
|
||||
response.Info.Value.AssignedToGM = ticket->IsAssigned();
|
||||
response.Info.Value.OpenedByGM = ticket->IsViewed();
|
||||
response.Info.Value.WaitTimeOverrideMessage = "";
|
||||
response.Info.Value.WaitTimeOverrideMinutes = 0;
|
||||
}
|
||||
else
|
||||
response.Result = GMTICKET_STATUS_DEFAULT;
|
||||
|
||||
session->SendPacket(response.Write());
|
||||
TC_LOG_DEBUG("misc", "SMSG_GM_GET_TICKET_RESPONSE [%s]", session->GetPlayerInfo().c_str());
|
||||
}
|
||||
|
||||
@@ -90,11 +90,13 @@ public:
|
||||
bool IsAssigned() const { return !_assignedTo.IsEmpty(); }
|
||||
bool IsAssignedTo(ObjectGuid guid) const { return guid == _assignedTo; }
|
||||
bool IsAssignedNotTo(ObjectGuid guid) const { return IsAssigned() && !IsAssignedTo(guid); }
|
||||
bool IsViewed() const { return _viewed; }
|
||||
|
||||
uint32 GetId() const { return _id; }
|
||||
Player* GetPlayer() const { return ObjectAccessor::FindPlayer(_playerGuid); }
|
||||
std::string const& GetPlayerName() const { return _playerName; }
|
||||
std::string const& GetMessage() const { return _message; }
|
||||
bool const GetNeedMoreHelp() const { return _needMoreHelp; }
|
||||
Player* GetAssignedPlayer() const { return ObjectAccessor::FindPlayer(_assignedTo); }
|
||||
ObjectGuid GetAssignedToGUID() const { return _assignedTo; }
|
||||
std::string GetAssignedToName() const
|
||||
|
||||
@@ -278,6 +278,7 @@ void World::AddSession_(WorldSession* s)
|
||||
s->SendAuthResponse(AUTH_OK, false);
|
||||
|
||||
s->SendSetTimeZoneInformation();
|
||||
s->SendFeatureSystemStatus();
|
||||
s->SendFeatureSystemStatusGlueScreen();
|
||||
|
||||
s->SendAddonsInfo();
|
||||
@@ -377,6 +378,7 @@ bool World::RemoveQueuedPlayer(WorldSession* sess)
|
||||
pop_sess->SendAuthWaitQue(0);
|
||||
|
||||
pop_sess->SendSetTimeZoneInformation();
|
||||
pop_sess->SendFeatureSystemStatus();
|
||||
pop_sess->SendFeatureSystemStatusGlueScreen();
|
||||
|
||||
pop_sess->SendAddonsInfo();
|
||||
@@ -428,7 +430,11 @@ void World::LoadConfigSettings(bool reload)
|
||||
SetMotd(sConfigMgr->GetStringDefault("Motd", "Welcome to a Trinity Core Server."));
|
||||
|
||||
///- Read ticket system setting from the config file
|
||||
m_bool_configs[CONFIG_ALLOW_TICKETS] = sConfigMgr->GetBoolDefault("AllowTickets", true);
|
||||
m_bool_configs[CONFIG_TICKET_SYSTEM_STATUS] = sConfigMgr->GetBoolDefault("Ticket.SystemStatus", true);
|
||||
if (reload)
|
||||
sTicketMgr->SetStatus(m_bool_configs[CONFIG_TICKET_SYSTEM_STATUS]);
|
||||
m_bool_configs[CONFIG_TICKET_SUBMIT_TICKET] = sConfigMgr->GetBoolDefault("Ticket.SubmitTicket", false);
|
||||
m_bool_configs[CONFIG_TICKET_SUBMIT_BUG] = sConfigMgr->GetBoolDefault("Ticket.SubmitBug", false);
|
||||
|
||||
///- Get string for new logins (newly created characters)
|
||||
SetNewCharString(sConfigMgr->GetStringDefault("PlayerStart.String", ""));
|
||||
|
||||
@@ -151,7 +151,9 @@ enum WorldBoolConfigs
|
||||
CONFIG_SHOW_MUTE_IN_WORLD,
|
||||
CONFIG_SHOW_BAN_IN_WORLD,
|
||||
CONFIG_AUTOBROADCAST,
|
||||
CONFIG_ALLOW_TICKETS,
|
||||
CONFIG_TICKET_SYSTEM_STATUS,
|
||||
CONFIG_TICKET_SUBMIT_TICKET,
|
||||
CONFIG_TICKET_SUBMIT_BUG,
|
||||
CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES,
|
||||
CONFIG_PRESERVE_CUSTOM_CHANNELS,
|
||||
CONFIG_PDUMP_NO_PATHS,
|
||||
|
||||
@@ -1060,12 +1060,31 @@ Server.LoginInfo = 0
|
||||
Command.LookupMaxResults = 0
|
||||
|
||||
#
|
||||
# AllowTickets
|
||||
# Description: Allow/disallow sending new tickets.
|
||||
# Ticket.SystemStatus
|
||||
# Description: Enable/disable the ticket system. This disables the whole customer
|
||||
# support UI after trying to send a ticket in disabled state
|
||||
# (MessageBox: "GM Help Tickets are currently unavaiable.").
|
||||
# UI remains disabled until the character relogs.
|
||||
# Default: 1 - (Enabled)
|
||||
# 0 - (Disabled)
|
||||
# 0 - (Disabled) 0 - (Disabled)
|
||||
|
||||
AllowTickets = 1
|
||||
Ticket.SystemStatus = 1
|
||||
|
||||
#
|
||||
# Ticket.SubmitTicket
|
||||
# Description: Allow/disallow opening new tickets.
|
||||
# Default: 0 - (Disabled)
|
||||
# 1 - (Enabled, Experimental)
|
||||
|
||||
Ticket.SubmitTicket = 0
|
||||
|
||||
#
|
||||
# Ticket.SubmitBug
|
||||
# Description: Allow/disallow opening new bug reports.
|
||||
# Default: 0 - (Disabled)
|
||||
# 1 - (Enabled, Experimental)
|
||||
|
||||
Ticket.SubmitBug = 0
|
||||
|
||||
#
|
||||
# DungeonFinder.OptionsMask
|
||||
|
||||
Reference in New Issue
Block a user