diff options
| author | Nay <dnpd.dd@gmail.com> | 2011-12-18 15:10:54 +0000 |
|---|---|---|
| committer | Nay <dnpd.dd@gmail.com> | 2011-12-18 15:10:54 +0000 |
| commit | 9f635ca9063e6d49789c08165c09f8ff2a11bc15 (patch) | |
| tree | 053765d13b2cfaea1f5cfd31b14e19a0bc508cc5 /src/server/game/Chat/Commands | |
| parent | 6758e133499a7e56fb29a351d011eee14b92e43b (diff) | |
| parent | f3c6904096b4fdcef16d7d802ec847551d15f9bc (diff) | |
Merge branch 'master' into 4.x
Diffstat (limited to 'src/server/game/Chat/Commands')
| -rwxr-xr-x | src/server/game/Chat/Commands/Level0.cpp | 11 | ||||
| -rwxr-xr-x | src/server/game/Chat/Commands/TicketCommands.cpp | 61 |
2 files changed, 49 insertions, 23 deletions
diff --git a/src/server/game/Chat/Commands/Level0.cpp b/src/server/game/Chat/Commands/Level0.cpp index 338ad49463e..97173f75652 100755 --- a/src/server/game/Chat/Commands/Level0.cpp +++ b/src/server/game/Chat/Commands/Level0.cpp @@ -84,8 +84,8 @@ bool ChatHandler::HandleStartCommand(const char* /*args*/) bool ChatHandler::HandleServerInfoCommand(const char* /*args*/) { - uint32 PlayersNum = sWorld->GetPlayerCount(); - uint32 MaxPlayersNum = sWorld->GetMaxPlayerCount(); + uint32 playersNum = sWorld->GetPlayerCount(); + uint32 maxPlayersNum = sWorld->GetMaxPlayerCount(); uint32 activeClientsNum = sWorld->GetActiveSessionCount(); uint32 queuedClientsNum = sWorld->GetQueuedSessionCount(); uint32 maxActiveClientsNum = sWorld->GetMaxActiveSessionCount(); @@ -94,10 +94,13 @@ bool ChatHandler::HandleServerInfoCommand(const char* /*args*/) uint32 updateTime = sWorld->GetUpdateTime(); SendSysMessage(_FULLVERSION); - PSendSysMessage(LANG_CONNECTED_PLAYERS, PlayersNum, MaxPlayersNum); + PSendSysMessage(LANG_CONNECTED_PLAYERS, playersNum, maxPlayersNum); PSendSysMessage(LANG_CONNECTED_USERS, activeClientsNum, maxActiveClientsNum, queuedClientsNum, maxQueuedClientsNum); PSendSysMessage(LANG_UPTIME, uptime.c_str()); - PSendSysMessage("Update time diff: %u.", updateTime); + PSendSysMessage(LANG_UPDATE_DIFF, updateTime); + //! Can't use sWorld->ShutdownMsg here in case of console command + if (sWorld->IsShuttingDown()) + PSendSysMessage(LANG_SHUTDOWN_TIMELEFT, secsToTimeString(sWorld->GetShutDownTimeLeft()).c_str()); return true; } diff --git a/src/server/game/Chat/Commands/TicketCommands.cpp b/src/server/game/Chat/Commands/TicketCommands.cpp index 7caf63aac2b..d38da9eb97c 100755 --- a/src/server/game/Chat/Commands/TicketCommands.cpp +++ b/src/server/game/Chat/Commands/TicketCommands.cpp @@ -85,12 +85,14 @@ bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args) guid = player->GetGUID(); else guid = sObjectMgr->GetPlayerGUIDByName(name); + // Target must exist if (!guid) { SendSysMessage(LANG_NO_PLAYERS_FOUND); return true; } + // Ticket must exist GmTicket *ticket = sTicketMgr->GetTicketByPlayer(guid); if (!ticket) @@ -119,27 +121,32 @@ bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; } - // Ticket must be assigned to player, who tries to close it. - uint64 guid = m_session->GetPlayer()->GetGUID(); - if (ticket->IsAssignedNotTo(guid)) + + // Ticket should be assigned to the player who tries to close it. + // Console can override though + Player* player = m_session ? m_session->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) { PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetId()); return true; } - sTicketMgr->CloseTicket(ticket->GetId(), guid); + + sTicketMgr->CloseTicket(ticket->GetId(), player ? player->GetGUID() : -1); sTicketMgr->UpdateLastChange(); - std::string msg = ticket->FormatMessageString(*this, m_session->GetPlayer()->GetName(), NULL, NULL, NULL); + std::string msg = ticket->FormatMessageString(*this, player ? player->GetName() : "Console", NULL, NULL, NULL); SendGlobalGMSysMessage(msg.c_str()); // Inform player, who submitted this ticket, that it is closed - if (Player* player = ticket->GetPlayer()) - if (player->IsInWorld()) + if (Player* submitter = ticket->GetPlayer()) + { + if (submitter->IsInWorld()) { WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); - player->GetSession()->SendPacket(&data); + submitter->GetSession()->SendPacket(&data); } + } return true; } @@ -170,25 +177,30 @@ bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) uint64 targetGuid = sObjectMgr->GetPlayerGUIDByName(target.c_str()); uint64 targetAccId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); uint32 targetGmLevel = AccountMgr::GetSecurity(targetAccId, realmID); + // Target must exist and have administrative rights if (!targetGuid || AccountMgr::IsPlayerAccount(targetGmLevel)) { SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A); return true; } + // If already assigned, leave if (ticket->IsAssignedTo(targetGuid)) { PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->GetId()); return true; } + // If assigned to different player other than current, leave - Player* player = m_session->GetPlayer(); - if (ticket->IsAssignedNotTo(player->GetGUID())) + //! Console can override though + Player* player = m_session ? m_session->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) { PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId(), target.c_str()); return true; } + // Assign ticket SQLTransaction trans = SQLTransaction(NULL); ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(targetGmLevel)); @@ -218,6 +230,7 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->GetId()); return true; } + // Get security level of player, whom this ticket is assigned to uint32 security = SEC_PLAYER; Player* assignedPlayer = ticket->GetAssignedPlayer(); @@ -229,9 +242,11 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid); security = AccountMgr::GetSecurity(accountId, realmID); } + // Check security - Player* player = m_session->GetPlayer(); - if (security > uint32(player->GetSession()->GetSecurity())) + //! If no m_session present it means we're issuing this command from the console + uint32 mySecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; + if (security > mySecurity) { SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY); return true; @@ -242,7 +257,8 @@ bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) ticket->SaveToDB(trans); sTicketMgr->UpdateLastChange(); - std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), player->GetName(), NULL); + std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), + m_session ? m_session->GetPlayer()->GetName() : "Console", NULL); SendGlobalGMSysMessage(msg.c_str()); return true; } @@ -265,9 +281,11 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; } + // Cannot comment ticket assigned to someone else - Player* player = m_session->GetPlayer(); - if (ticket->IsAssignedNotTo(player->GetGUID())) + //! Console excluded + Player* player = m_session ? m_session->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) { PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); return true; @@ -279,7 +297,7 @@ bool ChatHandler::HandleGMTicketCommentCommand(const char* args) sTicketMgr->UpdateLastChange(); std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), NULL, NULL); - msg += PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player->GetName(), comment); + msg += PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player ? player->GetName() : "Console", comment); SendGlobalGMSysMessage(msg.c_str()); return true; @@ -297,19 +315,21 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; } + if (!ticket->IsClosed()) { SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST); return true; } - std::string msg = ticket->FormatMessageString(*this, NULL, NULL, NULL, m_session->GetPlayer()->GetName()); + std::string msg = ticket->FormatMessageString(*this, NULL, NULL, NULL, m_session ? m_session->GetPlayer()->GetName() : "Console"); SendGlobalGMSysMessage(msg.c_str()); sTicketMgr->RemoveTicket(ticket->GetId()); sTicketMgr->UpdateLastChange(); if (Player* player = ticket->GetPlayer()) + { if (player->IsInWorld()) { // Force abandon ticket @@ -317,6 +337,7 @@ bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); player->GetSession()->SendPacket(&data); } + } return true; } @@ -406,9 +427,11 @@ inline bool ChatHandler::_HandleGMTicketResponseAppendCommand(const char* args, PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST); return true; } + // Cannot add response to ticket, assigned to someone else - Player* player = m_session->GetPlayer(); - if (ticket->IsAssignedNotTo(player->GetGUID())) + //! Console excluded + Player* player = m_session ? m_session->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) { PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); return true; |
