void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData) { // Don't accept tickets if the ticket queue is disabled. (Ticket UI is greyed out but not fully dependable) if (sTicketMgr->GetStatus() == GMTICKET_QUEUE_STATUS_DISABLED) return; GMTicketResponse response = GMTICKET_RESPONSE_CREATE_ERROR; GmTicket* ticket = sTicketMgr->GetTicketByPlayer(GetPlayer()->GetGUID()); if (ticket && ticket->IsCompleted()) sTicketMgr->CloseTicket(ticket->GetId(), GetPlayer()->GetGUID()); // Player must not have ticket if (!ticket || ticket->IsClosed()) { std::string message; std::string chatLog; uint8 ticketType; uint32 mapId; float x, y, z; std::string ticketText = ""; std::string reservedForFutureUse = ""; recvData >> ticketType >> mapId >> x >> y >> z; // last check 2.4.3 recvData >> ticketText; recvData >> reservedForFutureUse; if (GetPlayer()->getLevel() < sWorld.getConfig(CONFIG_UINT32_GMTICKETS_MINLEVEL)) { ChatHandler(this).PSendSysMessage("You can't use the ticket system before level %u", sWorld.getConfig(CONFIG_UINT32_GMTICKETS_MINLEVEL)); return; } if (ticketType >= GMTICKET_MAX) return; if (ticketType != GMTICKET_BEHAVIOR_HARASSMENT && ticketType != GMTICKET_STUCK) { ChatHandler(this).SendSysMessage("Game Masters do not handle bug reports."); ChatHandler(this).SendSysMessage("Please use our bugtracker and provide sources if possible."); ChatHandler(this).SendSysMessage("https://elysium-project.org/bugtracker"); return; } ticket = new GmTicket(GetPlayer()); ticket->SetPosition(mapId, x, y, z); ticket->SetMessage(ticketText); ticket->SetTicketType(TicketType(ticketType)); sTicketMgr->AddTicket(ticket); sTicketMgr->UpdateLastChange(); sWorld.SendGMTicketText(LANG_COMMAND_TICKETNEW, GetPlayer()->GetName(), ticket->GetId()); response = GMTICKET_RESPONSE_CREATE_SUCCESS; }