aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2012-09-09 02:18:58 +0100
committerNay <dnpd.dd@gmail.com>2012-09-09 02:18:58 +0100
commit7c4e7a9ebcb41a0d0f34df761409a445d532f965 (patch)
tree2cdc29b01092763ec3a05ab5049703e2a437d194 /src/server/scripts/Commands
parentc86abc28c2f3a944922d1fcac75805c32dfb7663 (diff)
parentd04f155b6529e3d86fca931075775fd34b544e29 (diff)
Merge remote-tracking branch 'origin/master' into 4.3.4
Conflicts: sql/base/characters_database.sql src/server/game/Entities/Player/Player.cpp src/server/game/Handlers/CharacterHandler.cpp
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 68e68ba7892..ae9c5364308 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)