aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <none@none>2010-11-24 15:31:20 +0100
committerShauren <none@none>2010-11-24 15:31:20 +0100
commit650f62796a876b5edb187f05de28f388c7d2c5b2 (patch)
treee4a5c5e12be7b0a663ca420060229c80a5d283c6
parent03925d7324808b6aaccb89651ef488b843c22c2a (diff)
Core/Commands: Simplified .kick command handler and fixed possible crashes there
--HG-- branch : trunk
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp93
1 files changed, 17 insertions, 76 deletions
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index 45e83c370c5..f1bc40d77bf 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -206,87 +206,28 @@ bool ChatHandler::HandleDeMorphCommand(const char* /*args*/)
bool ChatHandler::HandleKickPlayerCommand(const char *args)
{
const char* kickName = strtok((char*)args, " ");
- char* kickReason = strtok(NULL, "\n");
- std::string reason = "No reason given";
- std::string kicker = "CONSOLE";
- if (kickReason)
- reason = kickReason;
- if (m_session)
- kicker = m_session->GetPlayer()->GetName();
-
- if (!kickName)
- {
- Player* target;
- if (!extractPlayerTarget((char*)args,&target))
- return false;
-
- if (!target)
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
- return false;
- }
-
- if (m_session && target == m_session->GetPlayer())
- {
- SendSysMessage(LANG_COMMAND_KICKSELF);
- SetSentErrorMessage(true);
- return false;
- }
-
- // check online security
- if (HasLowerSecurity(target, 0))
- return false;
-
- if (sWorld.getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
- sWorld.SendWorldText(LANG_COMMAND_KICKMESSAGE, target->GetName(), kicker.c_str(), reason.c_str());
- else
- PSendSysMessage(LANG_COMMAND_KICKMESSAGE, target->GetName(), kicker.c_str(), reason.c_str());
+ Player* target = NULL;
+ std::string playerName;
+ if (!extractPlayerTarget((char*)args, &target, NULL, &playerName))
+ return false;
- target->GetSession()->KickPlayer();
- }
- else
+ if (m_session && target == m_session->GetPlayer())
{
- std::string name = extractPlayerNameFromLink((char*)kickName);
- if (name.empty())
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
- return false;
- }
-
- if (m_session && name == m_session->GetPlayer()->GetName())
- {
- SendSysMessage(LANG_COMMAND_KICKSELF);
- SetSentErrorMessage(true);
- return false;
- }
-
- Player* player = sObjectMgr.GetPlayer(kickName);
- if (!player)
- {
- SendSysMessage(LANG_PLAYER_NOT_FOUND);
- SetSentErrorMessage(true);
- return false;
- }
-
- if (HasLowerSecurity(player, 0))
- {
- SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); //maybe replacement string for this later on
- SetSentErrorMessage(true);
- return false;
- }
-
- std::string nameLink = playerLink(name);
+ SendSysMessage(LANG_COMMAND_KICKSELF);
+ SetSentErrorMessage(true);
+ return false;
+ }
- if (sWorld.getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
- sWorld.SendWorldText(LANG_COMMAND_KICKMESSAGE, nameLink.c_str(), kicker.c_str(), reason.c_str());
- else
- PSendSysMessage(LANG_COMMAND_KICKMESSAGE,nameLink.c_str());
+ // check online security
+ if (HasLowerSecurity(target, 0))
+ return false;
- player->GetSession()->KickPlayer();
- }
+ if (sWorld.getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD))
+ sWorld.SendWorldText(LANG_COMMAND_KICKMESSAGE, playerName.c_str());
+ else
+ PSendSysMessage(LANG_COMMAND_KICKMESSAGE, playerName.c_str());
+ target->GetSession()->KickPlayer();
return true;
}