aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2012-09-09 02:26:31 +0100
committerNay <dnpd.dd@gmail.com>2012-09-09 02:26:31 +0100
commit50327363ca764347b508d7b5e736db631f2be45c (patch)
tree076f22d7da5a5fe4c330af588b221170dae88366 /src/server/scripts/Commands
parent6c1bdb3d3c319e999bfbf3c3a16701569ce04d22 (diff)
parentd04f155b6529e3d86fca931075775fd34b544e29 (diff)
Merge remote-tracking branch 'origin/master' into mmaps
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp62
1 files changed, 48 insertions, 14 deletions
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index fea96cc80f3..1778dc9be67 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -81,7 +81,7 @@ public:
{ "save", SEC_PLAYER, false, &HandleSaveCommand, "", NULL },
{ "saveall", SEC_MODERATOR, true, &HandleSaveAllCommand, "", NULL },
{ "kick", SEC_GAMEMASTER, true, &HandleKickPlayerCommand, "", NULL },
- { "start", SEC_PLAYER, false, &HandleStartCommand, "", NULL },
+ { "unstuck", SEC_PLAYER, true, &HandleUnstuckCommand, "", NULL },
{ "linkgrave", SEC_ADMINISTRATOR, false, &HandleLinkGraveCommand, "", NULL },
{ "neargrave", SEC_ADMINISTRATOR, false, &HandleNearGraveCommand, "", NULL },
{ "showarea", SEC_ADMINISTRATOR, false, &HandleShowAreaCommand, "", NULL },
@@ -928,34 +928,68 @@ public:
return true;
}
- static bool HandleStartCommand(ChatHandler* handler, char const* /*args*/)
+ static bool HandleUnstuckCommand(ChatHandler* handler, char const* args)
{
- Player* player = handler->GetSession()->GetPlayer();
+ //No args required for players
+ if (handler->GetSession() && AccountMgr::IsPlayerAccount(handler->GetSession()->GetSecurity()))
+ {
+ Player* player = handler->GetSession()->GetPlayer();
+ if (player->isInFlight() || player->isInCombat())
+ {
+ handler->SendSysMessage(LANG_CANT_DO_NOW);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
- if (player->isInFlight())
+ //7355: "Stuck"
+ player->CastSpell(player, 7355, false);
+ return true;
+ }
+
+ if (!*args)
+ return false;
+
+ char* player_str = strtok((char*)args, " ");
+ if (!player_str)
+ return false;
+
+ char* location_str = strtok(NULL, "");
+ if (!location_str)
+ location_str = "inn";
+
+ Player* player = NULL;
+ std::string playerName;
+ if (!handler->extractPlayerTarget((char*)player_str, &player, NULL, &playerName))
+ return false;
+
+ if (player->isInFlight() || player->isInCombat())
{
- handler->SendSysMessage(LANG_YOU_IN_FLIGHT);
+ handler->SendSysMessage(LANG_CANT_DO_NOW);
handler->SetSentErrorMessage(true);
return false;
}
- if (player->isInCombat())
+ if (!stricmp(location_str, "inn"))
{
- handler->SendSysMessage(LANG_YOU_IN_COMBAT);
- handler->SetSentErrorMessage(true);
- return false;
+ player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, player->GetOrientation());
+ return true;
}
- if (player->isDead() || player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
+ if (!stricmp(location_str, "graveyard"))
{
- // if player is dead and stuck, send ghost to graveyard
player->RepopAtGraveyard();
return true;
}
- // cast spell Stuck
- player->CastSpell(player, 7355, false);
- return true;
+ if (!stricmp(location_str, "startzone"))
+ {
+ player->TeleportTo(player->GetStartPosition());
+ return true;
+ }
+
+ //Not a supported argument
+ return false;
+
}
static bool HandleLinkGraveCommand(ChatHandler* handler, char const* args)