mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-03-16 14:05:28 +00:00
fix(Scripts/Commands): Ticket response (#19406)
* fix(Scripts/Commands): Ticket response * closes https://github.com/azerothcore/azerothcore-wotlk/issues/19390 * Implements two new commands * ticket response delete - Delete a ticket response * ticket response show - Show current ticket response * this better * English? * bette rlogic * Update cs_ticket.cpp
This commit is contained in:
@@ -0,0 +1,14 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `acore_string` WHERE `entry` IN (2031,2032);
|
||||||
|
INSERT INTO `acore_string` (`entry`, `content_default`) VALUES
|
||||||
|
(2031, '|cff00ff00Response Appended|r:|cff00ccff [%s]|r'),
|
||||||
|
(2032, '|cff00ff00Response deleted by|r:|cff00ccff %s|r');
|
||||||
|
|
||||||
|
UPDATE `command` SET `help` = 'Add a response to a new line.\n\nSyntax: ticket response appendln $ticketId $response' WHERE `name` = 'ticket response appendln';
|
||||||
|
UPDATE `command` SET `help` = 'Add a response\n\nSyntax: ticket response append $ticketId $response' WHERE `name` = 'ticket response append';
|
||||||
|
|
||||||
|
DELETE FROM `command` WHERE `name` = 'ticket response delete';
|
||||||
|
DELETE FROM `command` WHERE `name` = 'ticket response show';
|
||||||
|
INSERT INTO `command` (`name`, `security`, `help`) VALUES
|
||||||
|
('ticket response delete', 2, 'Delete a ticket response\n\nSyntax: ticket response delete $ticketId'),
|
||||||
|
('ticket response show', 2, 'Show a ticket response\n\nSyntax: ticket response show $ticketId');
|
||||||
@@ -1070,6 +1070,8 @@ enum AcoreStrings
|
|||||||
LANG_COMMAND_TICKETRESET = 2028,
|
LANG_COMMAND_TICKETRESET = 2028,
|
||||||
LANG_COMMAND_TICKETLISTRESPONSE = 2029,
|
LANG_COMMAND_TICKETLISTRESPONSE = 2029,
|
||||||
LANG_COMMAND_TICKETCOMPLETED = 2030,
|
LANG_COMMAND_TICKETCOMPLETED = 2030,
|
||||||
|
LANG_COMMAND_TICKETRESPONSEAPPENDED = 2031,
|
||||||
|
LANG_COMMAND_TICKETRESPONSEDELETED = 2032,
|
||||||
|
|
||||||
// acore strings 5000-9999
|
// acore strings 5000-9999
|
||||||
LANG_COMMAND_FREEZE = 5000,
|
LANG_COMMAND_FREEZE = 5000,
|
||||||
|
|||||||
@@ -138,6 +138,8 @@ public:
|
|||||||
void SetGmAction(uint32 needResponse, bool needMoreHelp);
|
void SetGmAction(uint32 needResponse, bool needMoreHelp);
|
||||||
|
|
||||||
void AppendResponse(std::string const& response) { _response += response; }
|
void AppendResponse(std::string const& response) { _response += response; }
|
||||||
|
std::string GetResponse() { return _response; }
|
||||||
|
void DeleteResponse() { _response = ""; }
|
||||||
|
|
||||||
bool LoadFromDB(Field* fields);
|
bool LoadFromDB(Field* fields);
|
||||||
void SaveToDB(CharacterDatabaseTransaction trans) const;
|
void SaveToDB(CharacterDatabaseTransaction trans) const;
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ public:
|
|||||||
static ChatCommandTable ticketResponseCommandTable =
|
static ChatCommandTable ticketResponseCommandTable =
|
||||||
{
|
{
|
||||||
{ "append", HandleGMTicketResponseAppendCommand, SEC_GAMEMASTER, Console::Yes },
|
{ "append", HandleGMTicketResponseAppendCommand, SEC_GAMEMASTER, Console::Yes },
|
||||||
{ "appendln", HandleGMTicketResponseAppendLnCommand, SEC_GAMEMASTER, Console::Yes }
|
{ "appendln", HandleGMTicketResponseAppendLnCommand, SEC_GAMEMASTER, Console::Yes },
|
||||||
|
{ "delete", HandleGMTicketResponseDeleteCommand, SEC_GAMEMASTER, Console::Yes },
|
||||||
|
{ "show", HandleGMTicketResponseShowCommand, SEC_GAMEMASTER, Console::Yes }
|
||||||
};
|
};
|
||||||
static ChatCommandTable ticketCommandTable =
|
static ChatCommandTable ticketCommandTable =
|
||||||
{
|
{
|
||||||
@@ -436,10 +438,9 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _HandleGMTicketResponseAppendCommand(uint32 ticketId, bool newLine, ChatHandler* handler)
|
static bool TicketResponseAppend(uint32 ticketId, bool newLine, ChatHandler* handler, std::string response)
|
||||||
{
|
{
|
||||||
char* response = strtok(nullptr, "\n");
|
if (response.empty())
|
||||||
if (!response)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
|
GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
|
||||||
@@ -459,22 +460,74 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
CharacterDatabaseTransaction trans = CharacterDatabaseTransaction(nullptr);
|
CharacterDatabaseTransaction trans = CharacterDatabaseTransaction(nullptr);
|
||||||
ticket->AppendResponse(response);
|
|
||||||
if (newLine)
|
if (newLine)
|
||||||
ticket->AppendResponse("\n");
|
ticket->AppendResponse("\n");
|
||||||
|
ticket->AppendResponse(response);
|
||||||
ticket->SaveToDB(trans);
|
ticket->SaveToDB(trans);
|
||||||
|
sTicketMgr->UpdateLastChange();
|
||||||
|
|
||||||
|
std::string msg = ticket->FormatMessageString(*handler, nullptr, nullptr, nullptr, nullptr);
|
||||||
|
msg += handler->PGetParseString(LANG_COMMAND_TICKETRESPONSEAPPENDED, response);
|
||||||
|
|
||||||
|
handler->PSendSysMessage(msg.c_str());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, uint32 ticketId)
|
static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, uint32 ticketId, Tail res)
|
||||||
{
|
{
|
||||||
return _HandleGMTicketResponseAppendCommand(ticketId, false, handler);
|
return TicketResponseAppend(ticketId, false, handler, res.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, uint32 ticketId)
|
static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, uint32 ticketId, Tail res)
|
||||||
{
|
{
|
||||||
return _HandleGMTicketResponseAppendCommand(ticketId, true, handler);
|
return TicketResponseAppend(ticketId, true, handler, res.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool HandleGMTicketResponseDeleteCommand(ChatHandler* handler, uint32 ticketId)
|
||||||
|
{
|
||||||
|
GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
|
||||||
|
// Don't allow deleting response for a closed ticket.
|
||||||
|
if (!ticket || ticket->IsClosed())
|
||||||
|
{
|
||||||
|
handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cannot delete response for a ticket that is assigned to someone else.
|
||||||
|
//! Console excluded
|
||||||
|
Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
|
||||||
|
if (player && ticket->IsAssignedNotTo(player->GetGUID()))
|
||||||
|
{
|
||||||
|
handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CharacterDatabaseTransaction trans = CharacterDatabaseTransaction(nullptr);
|
||||||
|
ticket->DeleteResponse();
|
||||||
|
ticket->SaveToDB(trans);
|
||||||
|
sTicketMgr->UpdateLastChange();
|
||||||
|
|
||||||
|
std::string msg = ticket->FormatMessageString(*handler, nullptr, nullptr, nullptr, nullptr);
|
||||||
|
msg += handler->PGetParseString(LANG_COMMAND_TICKETRESPONSEDELETED, player ? player->GetName() : "Console");
|
||||||
|
|
||||||
|
handler->SendGlobalGMSysMessage(msg.c_str());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool HandleGMTicketResponseShowCommand(ChatHandler* handler, uint32 ticketId)
|
||||||
|
{
|
||||||
|
GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
|
||||||
|
if (!ticket)
|
||||||
|
{
|
||||||
|
handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string msg = ticket->FormatMessageString(*handler, nullptr, nullptr, nullptr, nullptr);
|
||||||
|
msg += handler->PGetParseString(LANG_COMMAND_TICKETLISTRESPONSE, ticket->GetResponse());
|
||||||
|
|
||||||
|
handler->PSendSysMessage(msg.c_str());
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user