Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
cs_ticket.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7Name: ticket_commandscript
8%Complete: 100
9Comment: All ticket related commands
10Category: commandscripts
11EndScriptData */
12
13#include "AccountMgr.h"
14#include "Chat.h"
15#include "Language.h"
16#include "ObjectMgr.h"
17#include "Opcodes.h"
18#include "Player.h"
19#include "ScriptMgr.h"
20#include "TicketMgr.h"
21
23{
24public:
25 ticket_commandscript() : CommandScript("ticket_commandscript") { }
26
27 std::vector<ChatCommand> GetCommands() const
28 {
29 static std::vector<ChatCommand> ticketBugCommandTable =
30 {
40 };
41
42 static std::vector<ChatCommand> ticketSuggestCommandTable =
43 {
53 };
54
55 static std::vector<ChatCommand> ticketResponseCommandTable =
56 {
59 };
60 static std::vector<ChatCommand> ticketCommandTable =
61 {
63 { "bug", rbac::RBAC_PERM_COMMAND_SUPPORT_BUG, true, NULL, "", ticketBugCommandTable },
64 { "suggest", rbac::RBAC_PERM_COMMAND_SUPPORT_SUGGEST, true, NULL, "", ticketSuggestCommandTable },
75 { "response", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE, true, NULL, "", ticketResponseCommandTable },
80 };
81 static std::vector<ChatCommand> commandTable =
82 {
83 { "ticket", rbac::RBAC_PERM_COMMAND_TICKET, false, NULL, "", ticketCommandTable },
84 };
85 return commandTable;
86 }
87
88 static bool HandleGMTicketAssignToCommand(ChatHandler* handler, char const* args)
89 {
90 if (!*args)
91 return false;
92
93 char* ticketIdStr = strtok((char*)args, " ");
94 uint32 ticketId = atoi(ticketIdStr);
95
96 char* targetStr = strtok(NULL, " ");
97 if (!targetStr)
98 return false;
99
100 std::string target(targetStr);
101 if (!normalizePlayerName(target))
102 return false;
103
104 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
105 if (!ticket || ticket->IsClosed())
106 {
108 return true;
109 }
110
111 uint64 targetGuid = sObjectMgr->GetPlayerGUIDByName(target);
112 uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid);
113 // Target must exist and have administrative rights
115 {
117 return true;
118 }
119
120 // If already assigned, leave
121 if (ticket->IsAssignedTo(targetGuid))
122 {
124 return true;
125 }
126
127 // If assigned to different player other than current, leave
129 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
130 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
131 {
132 handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetTicketId(), target.c_str());
133 return true;
134 }
135
136 // Assign ticket
137 SQLTransaction trans = SQLTransaction(NULL);
139 ticket->SaveToDB(trans);
140 sTicketMgr->UpdateLastChange();
141
142 std::string msg = ticket->FormatMessageString(*handler, NULL, target.c_str(), NULL, NULL);
143 handler->SendGlobalGMSysMessage(msg.c_str());
144 return true;
145 }
146
147 static bool HandleGMTicketCloseByIdCommand(ChatHandler* handler, char const* args)
148 {
149 if (!*args)
150 return false;
151
152 uint32 ticketId = atoi(args);
153 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
154 if (!ticket || ticket->IsClosed() || ticket->IsCompleted())
155 {
157 return true;
158 }
159
160 // Ticket should be assigned to the player who tries to close it.
161 // Console can override though
162 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
163 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
164 {
166 return true;
167 }
168
169 sTicketMgr->CloseTicket<GmTicket>(ticket->GetTicketId(), player ? player->GetGUID() : -1);
170 sTicketMgr->UpdateLastChange();
171
172 std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", NULL, NULL, NULL);
173 handler->SendGlobalGMSysMessage(msg.c_str());
174
175 // Inform player, who submitted this ticket, that it is closed
176 if (Player* submitter = ticket->GetPlayer())
177 {
178 if (submitter->IsInWorld())
179 {
182 submitter->GetSession()->SendPacket(&data);
183 }
184 }
185 return true;
186 }
187
188 static bool HandleGMTicketListClosedCommand(ChatHandler* handler, char const* /*args*/)
189 {
190 sTicketMgr->ShowClosedList<GmTicket>(*handler);
191 return true;
192 }
193
194 static bool HandleGMTicketCommentCommand(ChatHandler* handler, char const* args)
195 {
196 if (!*args)
197 return false;
198
199 char* ticketIdStr = strtok((char*)args, " ");
200 uint32 ticketId = atoi(ticketIdStr);
201
202 char* comment = strtok(NULL, "\n");
203 if (!comment)
204 return false;
205
206 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
207 if (!ticket || ticket->IsClosed())
208 {
210 return true;
211 }
212
213 // Cannot comment ticket assigned to someone else
215 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
216 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
217 {
219 return true;
220 }
221
222 SQLTransaction trans = SQLTransaction(NULL);
223 ticket->SetComment(comment);
224 ticket->SaveToDB(trans);
225 sTicketMgr->UpdateLastChange();
226
227 std::string msg = ticket->FormatMessageString(*handler, NULL, ticket->GetAssignedToName().c_str(), NULL, NULL);
228 msg += handler->PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player ? player->GetName().c_str() : "Console", comment);
229 handler->SendGlobalGMSysMessage(msg.c_str());
230
231 return true;
232 }
233
234 static bool HandleGMTicketDeleteByIdCommand(ChatHandler* handler, char const* args)
235 {
236 if (!*args)
237 return false;
238
239 uint32 ticketId = atoi(args);
240 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
241 if (!ticket)
242 {
244 return true;
245 }
246
247 if (!ticket->IsClosed())
248 {
250 return true;
251 }
252
253 std::string msg = ticket->FormatMessageString(*handler, NULL, NULL, NULL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName().c_str() : "Console");
254 handler->SendGlobalGMSysMessage(msg.c_str());
255
256 sTicketMgr->RemoveTicket<GmTicket>(ticket->GetTicketId());
257 sTicketMgr->UpdateLastChange();
258
259 if (Player* player = ticket->GetPlayer())
260 {
261 if (player->IsInWorld())
262 {
263 // Force abandon ticket
266 player->GetSession()->SendPacket(&data);
267 }
268 }
269
270 return true;
271 }
272
273 static bool HandleGMTicketResetCommand(ChatHandler* handler, char const* /*args*/)
274 {
275 if (sTicketMgr->GetOpenTicketCount<GmTicket>())
276 {
278 return true;
279 }
280 else
281 {
282 sTicketMgr->ResetTickets<GmTicket>();
284 }
285
286 return true;
287 }
288
289 static bool HandleGMTicketUnAssignCommand(ChatHandler* handler, char const* args)
290 {
291 if (!*args)
292 return false;
293
294 uint32 ticketId = atoi(args);
295 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
296 if (!ticket || ticket->IsClosed())
297 {
299 return true;
300 }
301 // Ticket must be assigned
302 if (!ticket->IsAssigned())
303 {
305 return true;
306 }
307
308 // Get security level of player, whom this ticket is assigned to
310 Player* assignedPlayer = ticket->GetAssignedPlayer();
311 if (assignedPlayer && assignedPlayer->IsInWorld())
312 security = assignedPlayer->GetSession()->GetSecurity();
313 else
314 {
315 uint64 guid = ticket->GetAssignedToGUID();
316 uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid);
317 security = AccountMgr::GetSecurity(accountId, realmID);
318 }
319
320 // Check security
322 AccountTypes mySecurity = handler->GetSession() ? handler->GetSession()->GetSecurity() : AccountTypes::SEC_CONSOLE;
323 if (security > mySecurity)
324 {
326 return true;
327 }
328
329 std::string assignedTo = ticket->GetAssignedToName(); // copy assignedto name because we need it after the ticket has been unnassigned
330 SQLTransaction trans = SQLTransaction(NULL);
331 ticket->SetUnassigned();
332 ticket->SaveToDB(trans);
333 sTicketMgr->UpdateLastChange();
334
335 std::string msg = ticket->FormatMessageString(*handler, NULL, assignedTo.c_str(),
336 handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName().c_str() : "Console", NULL);
337 handler->SendGlobalGMSysMessage(msg.c_str());
338
339 return true;
340 }
341
342 static bool HandleGMTicketGetByIdCommand(ChatHandler* handler, char const* args)
343 {
344 if (!*args)
345 return false;
346
347 uint32 ticketId = atoi(args);
348 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
349 if (!ticket || ticket->IsClosed() || ticket->IsCompleted())
350 {
352 return true;
353 }
354
355 SQLTransaction trans = SQLTransaction(NULL);
356 ticket->SetViewed();
357 ticket->SaveToDB(trans);
358
359 handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str());
360 return true;
361 }
362
363 template<typename T>
364 static bool HandleTicketAssignToCommand(ChatHandler* handler, char const* args)
365 {
366 if (!*args)
367 return false;
368
369 char* ticketIdStr = strtok((char*)args, " ");
370 uint32 ticketId = atoi(ticketIdStr);
371
372 char* targetStr = strtok(NULL, " ");
373 if (!targetStr)
374 return false;
375
376 std::string target(targetStr);
377 if (!normalizePlayerName(target))
378 return false;
379
380 T* ticket = sTicketMgr->GetTicket<T>(ticketId);
381 if (!ticket || ticket->IsClosed())
382 {
384 return true;
385 }
386
387 ObjectGuid targetGuid = sObjectMgr->GetPlayerGUIDByName(target);
388 uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid);
389 // Target must exist and have administrative rights
391 {
393 return true;
394 }
395
396 // If already assigned, leave
397 if (ticket->IsAssignedTo(targetGuid))
398 {
399 handler->PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->GetTicketId());
400 return true;
401 }
402
403 // If assigned to different player other than current, leave
405 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
406 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
407 {
408 handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetTicketId(), target.c_str());
409 return true;
410 }
411
412 // Assign ticket
413 SQLTransaction trans = SQLTransaction(NULL);
414 ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(AccountMgr::GetSecurity(accountId, realmID)));
415 sTicketMgr->UpdateLastChange();
416
417 ticket->SaveToDB(trans);
418
419 std::string msg = ticket->FormatMessageString(*handler, NULL, target.c_str(), NULL, NULL);
420 handler->SendGlobalGMSysMessage(msg.c_str());
421 return true;
422 }
423
424 template<typename T>
425 static bool HandleTicketCloseByIdCommand(ChatHandler* handler, char const* args)
426 {
427 if (!*args)
428 return false;
429
430 uint32 ticketId = atoi(args);
431 T* ticket = sTicketMgr->GetTicket<T>(ticketId);
432 if (!ticket || ticket->IsClosed())
433 {
435 return true;
436 }
437
438 // Ticket should be assigned to the player who tries to close it.
439 // Console can override though
440 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
441 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
442 {
443 handler->PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetTicketId());
444 return true;
445 }
446
447 sTicketMgr->CloseTicket<T>(ticket->GetTicketId(), player ? player->GetGUID() : -1);
448
449 std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", NULL, NULL, NULL);
450 handler->SendGlobalGMSysMessage(msg.c_str());
451
452 // Inform player, who submitted this ticket, that it is closed
453 if (Player* submitter = ticket->GetPlayer())
455
456 return true;
457 }
458
459 static bool HandleGMTicketListCommand(ChatHandler* handler, char const* /*args*/)
460 {
461 sTicketMgr->ShowList<GmTicket>(*handler, false);
462 return true;
463 }
464
465 template<typename T>
466 static bool HandleTicketListClosedCommand(ChatHandler* handler, char const* /*args*/)
467 {
468 sTicketMgr->ShowClosedList<T>(*handler);
469 return true;
470 }
471
472 template<typename T>
473 static bool HandleTicketCommentCommand(ChatHandler* handler, char const* args)
474 {
475 if (!*args)
476 return false;
477
478 char* ticketIdStr = strtok((char*)args, " ");
479 uint32 ticketId = atoi(ticketIdStr);
480
481 char* comment = strtok(NULL, "\n");
482 if (!comment)
483 return false;
484
485 T* ticket = sTicketMgr->GetTicket<T>(ticketId);
486 if (!ticket || ticket->IsClosed())
487 {
489 return true;
490 }
491
492 // Cannot comment ticket assigned to someone else
494 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
495 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
496 {
497 handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetTicketId());
498 return true;
499 }
500
501 SQLTransaction trans = SQLTransaction(NULL);
502 ticket->SetComment(comment);
503 ticket->SaveToDB(trans);
504 sTicketMgr->UpdateLastChange();
505
506 std::string msg = ticket->FormatMessageString(*handler, NULL, ticket->GetAssignedToName().c_str(), NULL, NULL);
507 msg += handler->PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player ? player->GetName().c_str() : "Console", comment);
508 handler->SendGlobalGMSysMessage(msg.c_str());
509
510 return true;
511 }
512
513 template<typename T>
514 static bool HandleTicketDeleteByIdCommand(ChatHandler* handler, char const* args)
515 {
516 if (!*args)
517 return false;
518
519 uint32 ticketId = atoi(args);
520 T* ticket = sTicketMgr->GetTicket<T>(ticketId);
521 if (!ticket)
522 {
524 return true;
525 }
526
527 if (!ticket->IsClosed())
528 {
530 return true;
531 }
532
533 std::string msg = ticket->FormatMessageString(*handler, NULL, NULL, NULL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName().c_str() : "Console");
534 handler->SendGlobalGMSysMessage(msg.c_str());
535
536 sTicketMgr->RemoveTicket<T>(ticket->GetTicketId());
537
538 if (Player* player = ticket->GetPlayer())
540
541 return true;
542 }
543
544 template<typename T>
545 static bool HandleTicketListCommand(ChatHandler* handler, char const* /*args*/)
546 {
547 sTicketMgr->ShowList<T>(*handler);
548 return true;
549 }
550
551 template<typename T>
552 static bool HandleTicketUnAssignCommand(ChatHandler* handler, char const* args)
553 {
554 if (!*args)
555 return false;
556
557 uint32 ticketId = atoi(args);
558 T* ticket = sTicketMgr->GetTicket<T>(ticketId);
559 if (!ticket || ticket->IsClosed())
560 {
562 return true;
563 }
564 // Ticket must be assigned
565 if (!ticket->IsAssigned())
566 {
567 handler->PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->GetTicketId());
568 return true;
569 }
570
571 // Get security level of player, whom this ticket is assigned to
573 Player* assignedPlayer = ticket->GetAssignedPlayer();
574 if (assignedPlayer)
575 security = assignedPlayer->GetSession()->GetSecurity();
576 else
577 {
578 uint64 guid = ticket->GetAssignedToGUID();
579 uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid);
580 security = AccountMgr::GetSecurity(accountId, realmID);
581 }
582
583 // Check security
585 AccountTypes mySecurity = handler->GetSession() ? handler->GetSession()->GetSecurity() : AccountTypes::SEC_CONSOLE;
586 if (security > mySecurity)
587 {
589 return true;
590 }
591
592 std::string assignedTo = ticket->GetAssignedToName(); // copy assignedto name because we need it after the ticket has been unnassigned
593 SQLTransaction trans = SQLTransaction(NULL);
594 ticket->SetUnassigned();
595 ticket->SaveToDB(trans);
596
597 std::string msg = ticket->FormatMessageString(*handler, NULL, assignedTo.c_str(), handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName().c_str() : "Console", NULL);
598 handler->SendGlobalGMSysMessage(msg.c_str());
599
600 return true;
601 }
602
603 template<typename T>
604 static bool HandleTicketGetByIdCommand(ChatHandler* handler, char const* args)
605 {
606 if (!*args)
607 return false;
608
609 uint32 ticketId = atoi(args);
610 T* ticket = sTicketMgr->GetTicket<T>(ticketId);
611 if (!ticket || ticket->IsClosed())
612 {
614 return true;
615 }
616
617 handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str());
618 return true;
619 }
620
621 template<typename T>
622 static bool HandleTicketResetCommand(ChatHandler* handler, char const* /*args*/)
623 {
624 if (sTicketMgr->GetOpenTicketCount<T>())
625 {
627 return true;
628 }
629 else
630 {
631 sTicketMgr->ResetTickets<T>();
633 }
634 return true;
635 }
636
637 static bool HandleGMTicketCompleteCommand(ChatHandler* handler, char const* args)
638 {
639 if (!*args)
640 return false;
641
642 uint32 ticketId = atoi(args);
643 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
644 if (!ticket || ticket->IsClosed() || ticket->IsCompleted())
645 {
647 return true;
648 }
649
650 if (Player* player = ticket->GetPlayer())
651 if (player->IsInWorld())
652 sTicketMgr->SendGmResponsee(player->GetSession(), ticket);
653
654 SQLTransaction trans = SQLTransaction(NULL);
655 ticket->SetCompleted();
656 ticket->SaveToDB(trans);
657
658 sTicketMgr->UpdateLastChange();
659 return true;
660 }
661
662 static bool HandleGMTicketEscalateCommand(ChatHandler* handler, char const* args)
663 {
664 if (!*args)
665 return false;
666
667 uint32 ticketId = atoi(args);
668 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
669 if (!ticket || ticket->IsClosed() || ticket->IsCompleted() || ticket->GetEscalatedStatus() != TICKET_UNASSIGNED)
670 {
672 return true;
673 }
674
676
677 if (Player* player = ticket->GetPlayer())
678 if (player->IsInWorld())
679 sTicketMgr->SendGmTicket(player->GetSession(), ticket);
680
681 sTicketMgr->UpdateLastChange();
682 return true;
683 }
684
685 static bool HandleGMTicketListEscalatedCommand(ChatHandler* handler, char const* /*args*/)
686 {
687 sTicketMgr->ShowGmEscalatedList(*handler);
688 return true;
689 }
690
691 static bool HandleGMTicketListOnlineCommand(ChatHandler* handler, char const* /*args*/)
692 {
693 sTicketMgr->ShowList<GmTicket>(*handler, true);
694 return true;
695 }
696
697 static bool HandleToggleGMTicketSystem(ChatHandler* handler, char const* /*args*/)
698 {
699 bool status = sWorld->GetBoolConfig(WorldBoolConfigs::CONFIG_TICKETS_GM_ENABLED) ? true : (sTicketMgr->GetGmTicketSystemStatus() ? true : false);
701 sTicketMgr->SetGmTicketSystemStatus(status);
702 handler->PSendSysMessage(message);
703 return true;
704 }
705
706 static bool HandleGMTicketGetByNameCommand(ChatHandler* handler, char const* args)
707 {
708 if (!*args)
709 return false;
710
711 std::string name(args);
712 if (!normalizePlayerName(name))
713 return false;
714
715 // Detect target's GUID
716 uint64 guid = 0;
717 if (Player* player = sObjectAccessor->FindPlayerByName(name))
718 guid = player->GetGUID();
719 else
720 guid = sObjectMgr->GetPlayerGUIDByName(name);
721
722 // Target must exist
723 if (!guid)
724 {
726 return true;
727 }
728
729 // Ticket must exist
730 GmTicket* ticket = sTicketMgr->GetGmTicketByPlayerGuid(guid);
731 if (!ticket)
732 {
734 return true;
735 }
736
737 SQLTransaction trans = SQLTransaction(NULL);
738 ticket->SetViewed();
739 ticket->SaveToDB(trans);
740
741 handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str());
742 return true;
743 }
744
745 static bool _HandleGMTicketResponseAppendCommand(char const* args, bool newLine, ChatHandler* handler)
746 {
747 if (!*args)
748 return false;
749
750 char* ticketIdStr = strtok((char*)args, " ");
751 uint32 ticketId = atoi(ticketIdStr);
752
753 char* response = strtok(NULL, "\n");
754 if (!response)
755 return false;
756
757 GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
758 if (!ticket || ticket->IsClosed())
759 {
761 return true;
762 }
763
764 // Cannot add response to ticket, assigned to someone else
766 Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL;
767 if (player && ticket->IsAssignedNotTo(player->GetGUID()))
768 {
770 return true;
771 }
772
773 SQLTransaction trans = SQLTransaction(NULL);
774 ticket->AppendResponse(response);
775 if (newLine)
776 ticket->AppendResponse("\n");
777 ticket->SaveToDB(trans);
778
779 return true;
780 }
781
782 static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, char const* args)
783 {
784 return _HandleGMTicketResponseAppendCommand(args, false, handler);
785 }
786
787 static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, char const* args)
788 {
789 return _HandleGMTicketResponseAppendCommand(args, true, handler);
790 }
791};
792
AccountTypes
Definition Common.h:129
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
@ LANG_COMMAND_TICKETRESET
Definition Language.h:1063
@ LANG_COMMAND_TICKETALREADYASSIGNED
Definition Language.h:1042
@ LANG_ALLOW_TICKETS
Definition Language.h:924
@ LANG_COMMAND_TICKETUNASSIGNSECURITY
Definition Language.h:1050
@ LANG_COMMAND_TICKETCANNOTCLOSE
Definition Language.h:1051
@ LANG_COMMAND_TICKETCLOSEFIRST
Definition Language.h:1041
@ LANG_COMMAND_TICKETNOTASSIGNED
Definition Language.h:1049
@ LANG_DISALLOW_TICKETS
Definition Language.h:925
@ LANG_COMMAND_TICKETASSIGNERROR_B
Definition Language.h:1048
@ LANG_COMMAND_TICKETPENDING
Definition Language.h:1062
@ LANG_COMMAND_TICKETLISTADDCOMMENT
Definition Language.h:1059
@ LANG_NO_PLAYERS_FOUND
Definition Language.h:337
@ LANG_COMMAND_TICKETASSIGNERROR_A
Definition Language.h:1047
@ LANG_COMMAND_TICKETNOTEXIST
Definition Language.h:1040
#define sObjectAccessor
bool normalizePlayerName(std::string &name)
#define sObjectMgr
Definition ObjectMgr.h:1617
@ TICKET_IN_ESCALATION_QUEUE
Definition TicketInfo.h:45
@ TICKET_UNASSIGNED
Definition TicketInfo.h:43
@ GMTICKET_RESPONSE_TICKET_DELETED
Definition TicketInfo.h:33
#define sTicketMgr
Definition TicketMgr.h:117
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
Definition Transaction.h:42
static bool IsAdminAccount(AccountTypes gmlevel)
static AccountTypes GetSecurity(uint32 accountId)
static bool HasPermission(uint32 accountId, uint32 permission, uint32 realmId)
std::string PGetParseString(int32 entry,...) const
Definition Chat.cpp:57
void SendGlobalGMSysMessage(const char *str)
Definition Chat.cpp:188
WorldSession * GetSession()
Definition Chat.h:43
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
Definition Chat.cpp:221
virtual void SendSysMessage(const char *str)
Definition Chat.cpp:153
CommandScript(const char *name)
void SetUnassigned() override
void SetViewed()
Definition TicketInfo.h:131
std::string FormatMessageString(ChatHandler &handler, bool detailed=false) const override
void AppendResponse(std::string const &response)
Definition TicketInfo.h:129
bool IsCompleted() const
Definition TicketInfo.h:138
void SetCompleted()
Definition TicketInfo.h:134
GMTicketEscalationStatus GetEscalatedStatus() const
Definition TicketInfo.h:153
void SetEscalatedStatus(GMTicketEscalationStatus escalatedStatus)
Definition TicketInfo.h:130
void SaveToDB(SQLTransaction &trans) const OVERRIDE
uint64 GetGUID() const
Definition Object.h:119
bool IsInWorld() const
Definition Object.h:114
WorldSession * GetSession() const
Definition Player.h:2417
virtual void SetAssignedTo(uint64 assignedTo, bool=false)
Definition TicketInfo.h:100
uint32 GetTicketId() const
Definition TicketInfo.h:85
std::string GetAssignedToName() const
bool IsAssigned() const
Definition TicketInfo.h:76
bool IsAssignedTo(uint64 guid) const
Definition TicketInfo.h:78
void SetComment(std::string comment)
Definition TicketInfo.h:93
bool IsAssignedNotTo(uint64 guid) const
Definition TicketInfo.h:79
Player * GetAssignedPlayer() const
Definition TicketInfo.h:91
Player * GetPlayer() const
Definition TicketInfo.h:90
bool IsClosed() const
Definition TicketInfo.h:75
uint64 GetAssignedToGUID() const
Definition TicketInfo.h:88
static Player * GetPlayer(WorldObject &object, uint64 guid)
Definition Unit.cpp:4900
std::string const & GetName() const
Definition Object.h:664
AccountTypes GetSecurity() const
Player * GetPlayer() const
static bool HandleGMTicketResponseAppendLnCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketListOnlineCommand(ChatHandler *handler, char const *)
static bool HandleGMTicketResetCommand(ChatHandler *handler, char const *)
static bool HandleGMTicketGetByNameCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketCompleteCommand(ChatHandler *handler, char const *args)
std::vector< ChatCommand > GetCommands() const
Definition cs_ticket.cpp:27
static bool HandleTicketResetCommand(ChatHandler *handler, char const *)
static bool HandleGMTicketListCommand(ChatHandler *handler, char const *)
static bool HandleTicketDeleteByIdCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketDeleteByIdCommand(ChatHandler *handler, char const *args)
static bool HandleTicketAssignToCommand(ChatHandler *handler, char const *args)
static bool HandleTicketUnAssignCommand(ChatHandler *handler, char const *args)
static bool HandleTicketGetByIdCommand(ChatHandler *handler, char const *args)
static bool HandleTicketListClosedCommand(ChatHandler *handler, char const *)
static bool HandleTicketListCommand(ChatHandler *handler, char const *)
static bool HandleTicketCloseByIdCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketResponseAppendCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketEscalateCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketAssignToCommand(ChatHandler *handler, char const *args)
Definition cs_ticket.cpp:88
static bool HandleTicketCommentCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketCloseByIdCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketListClosedCommand(ChatHandler *handler, char const *)
static bool HandleToggleGMTicketSystem(ChatHandler *handler, char const *)
static bool HandleGMTicketGetByIdCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketUnAssignCommand(ChatHandler *handler, char const *args)
static bool HandleGMTicketCommentCommand(ChatHandler *handler, char const *args)
static bool _HandleGMTicketResponseAppendCommand(char const *args, bool newLine, ChatHandler *handler)
static bool HandleGMTicketListEscalatedCommand(ChatHandler *handler, char const *)
void AddSC_ticket_commandscript()
@ SMSG_GM_TICKET_UPDATE
Definition Opcodes.h:667
#define sWorld
Definition World.h:910
uint32 realmID
Id of the realm.
Definition Main.cpp:73
@ CONFIG_TICKETS_GM_ENABLED
Definition World.h:167
@ RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET
Definition RBAC.h:72
@ RBAC_PERM_COMMAND_SUPPORT_BUG_COMMENT
Definition RBAC.h:669
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_RESET
Definition RBAC.h:684
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_ASSIGN
Definition RBAC.h:676
@ RBAC_PERM_COMMAND_SUPPORT_BUG_RESET
Definition RBAC.h:674
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST
Definition RBAC.h:675
@ RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST
Definition RBAC.h:638
@ RBAC_PERM_COMMAND_TICKET_ONLINELIST
Definition RBAC.h:640
@ RBAC_PERM_COMMAND_SUPPORT_BUG
Definition RBAC.h:665
@ RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN
Definition RBAC.h:644
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_UNASSIGN
Definition RBAC.h:682
@ RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND
Definition RBAC.h:643
@ RBAC_PERM_COMMAND_SUPPORT_BUG_UNASSIGN
Definition RBAC.h:672
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_CLOSE
Definition RBAC.h:677
@ RBAC_PERM_COMMAND_TICKET_RESPONSE
Definition RBAC.h:642
@ RBAC_PERM_COMMAND_TICKET_COMMENT
Definition RBAC.h:634
@ RBAC_PERM_COMMAND_TICKET_LIST
Definition RBAC.h:639
@ RBAC_PERM_COMMAND_SUPPORT_BUG_VIEW
Definition RBAC.h:673
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_CLOSEDLIST
Definition RBAC.h:678
@ RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM
Definition RBAC.h:645
@ RBAC_PERM_COMMAND_TICKET_CLOSEDLIST
Definition RBAC.h:633
@ RBAC_PERM_COMMAND_TICKET_UNASSIGN
Definition RBAC.h:646
@ RBAC_PERM_COMMAND_TICKET_DELETE
Definition RBAC.h:636
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_DELETE
Definition RBAC.h:680
@ RBAC_PERM_COMMAND_TICKET_ESCALATE
Definition RBAC.h:637
@ RBAC_PERM_COMMAND_TICKET
Definition RBAC.h:630
@ RBAC_PERM_COMMAND_TICKET_COMPLETE
Definition RBAC.h:635
@ RBAC_PERM_COMMAND_SUPPORT_BUG_DELETE
Definition RBAC.h:670
@ RBAC_PERM_COMMAND_TICKET_RESET
Definition RBAC.h:641
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_VIEW
Definition RBAC.h:683
@ RBAC_PERM_COMMAND_SUPPORT_BUG_ASSIGN
Definition RBAC.h:666
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_COMMENT
Definition RBAC.h:679
@ RBAC_PERM_COMMAND_TICKET_VIEWNAME
Definition RBAC.h:648
@ RBAC_PERM_COMMAND_TICKET_VIEWID
Definition RBAC.h:647
@ RBAC_PERM_COMMAND_SUPPORT_BUG_CLOSE
Definition RBAC.h:667
@ RBAC_PERM_COMMAND_SUPPORT_BUG_CLOSEDLIST
Definition RBAC.h:668
@ RBAC_PERM_COMMAND_SUPPORT_SUGGEST_LIST
Definition RBAC.h:681
@ RBAC_PERM_COMMAND_TICKET_ASSIGN
Definition RBAC.h:631
@ RBAC_PERM_COMMAND_SUPPORT_BUG_LIST
Definition RBAC.h:671
@ RBAC_PERM_COMMAND_TICKET_CLOSE
Definition RBAC.h:632