/* * Copyright (C) 2008-2010 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "Common.h" #include "DatabaseEnv.h" #include "World.h" #include "Player.h" #include "Opcodes.h" #include "Chat.h" #include "ObjectAccessor.h" #include "Language.h" #include "AccountMgr.h" #include "SystemConfig.h" #include "revision.h" #include "Util.h" bool ChatHandler::HandleHelpCommand(const char* args) { char* cmd = strtok((char*)args, " "); if (!cmd) { ShowHelpForCommand(getCommandTable(), "help"); ShowHelpForCommand(getCommandTable(), ""); } else { if (!ShowHelpForCommand(getCommandTable(), cmd)) SendSysMessage(LANG_NO_HELP_CMD); } return true; } bool ChatHandler::HandleCommandsCommand(const char* /*args*/) { ShowHelpForCommand(getCommandTable(), ""); return true; } bool ChatHandler::HandleStartCommand(const char* /*args*/) { Player *chr = m_session->GetPlayer(); if (chr->isInFlight()) { SendSysMessage(LANG_YOU_IN_FLIGHT); SetSentErrorMessage(true); return false; } if (chr->isInCombat()) { SendSysMessage(LANG_YOU_IN_COMBAT); SetSentErrorMessage(true); return false; } if ((chr->isDead()) || (chr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))) { // if player is dead and stuck, send ghost to graveyard chr->RepopAtGraveyard(); return true; } // cast spell Stuck chr->CastSpell(chr, 7355, false); return true; } bool ChatHandler::HandleServerInfoCommand(const char* /*args*/) { uint32 PlayersNum = sWorld->GetPlayerCount(); uint32 MaxPlayersNum = sWorld->GetMaxPlayerCount(); uint32 activeClientsNum = sWorld->GetActiveSessionCount(); uint32 queuedClientsNum = sWorld->GetQueuedSessionCount(); uint32 maxActiveClientsNum = sWorld->GetMaxActiveSessionCount(); uint32 maxQueuedClientsNum = sWorld->GetMaxQueuedSessionCount(); std::string uptime = secsToTimeString(sWorld->GetUptime()); uint32 updateTime = sWorld->GetUpdateTime(); PSendSysMessage(_FULLVERSION); 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); return true; } bool ChatHandler::HandleDismountCommand(const char* /*args*/) { //If player is not mounted, so go out :) if (!m_session->GetPlayer()->IsMounted()) { SendSysMessage(LANG_CHAR_NON_MOUNTED); SetSentErrorMessage(true); return false; } if (m_session->GetPlayer()->isInFlight()) { SendSysMessage(LANG_YOU_IN_FLIGHT); SetSentErrorMessage(true); return false; } m_session->GetPlayer()->Unmount(); m_session->GetPlayer()->RemoveAurasByType(SPELL_AURA_MOUNTED); return true; } bool ChatHandler::HandleSaveCommand(const char* /*args*/) { Player *player = m_session->GetPlayer(); // save GM account without delay and output message if (m_session->GetSecurity() > SEC_PLAYER) { player->SaveToDB(); SendSysMessage(LANG_PLAYER_SAVED); return true; } // save if the player has last been saved over 20 seconds ago uint32 save_interval = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE); if (save_interval == 0 || (save_interval > 20*IN_MILLISECONDS && player->GetSaveTimer() <= save_interval - 20*IN_MILLISECONDS)) player->SaveToDB(); return true; } /// Display the 'Message of the day' for the realm bool ChatHandler::HandleServerMotdCommand(const char* /*args*/) { PSendSysMessage(LANG_MOTD_CURRENT, sWorld->GetMotd()); return true; }