diff options
-rw-r--r-- | sql/updates/world/2012_8_31_00_world_command.sql | 2 | ||||
-rw-r--r-- | sql/updates/world/2012_8_31_01_world_trinity_string.sql | 2 | ||||
-rwxr-xr-x | src/server/game/Miscellaneous/Language.h | 3 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 63 |
4 files changed, 55 insertions, 15 deletions
diff --git a/sql/updates/world/2012_8_31_00_world_command.sql b/sql/updates/world/2012_8_31_00_world_command.sql new file mode 100644 index 00000000000..28e70f3fa72 --- /dev/null +++ b/sql/updates/world/2012_8_31_00_world_command.sql @@ -0,0 +1,2 @@ +DELETE FROM `command` WHERE `name` = 'start'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES ('unstuck', 0, 'Syntax: .unstuck $playername [inn/graveyard/startzone]\r\n\r\nTeleports specified player to specified location. Default location is player\'s current hearth location.');
\ No newline at end of file diff --git a/sql/updates/world/2012_8_31_01_world_trinity_string.sql b/sql/updates/world/2012_8_31_01_world_trinity_string.sql new file mode 100644 index 00000000000..701c85bce9c --- /dev/null +++ b/sql/updates/world/2012_8_31_01_world_trinity_string.sql @@ -0,0 +1,2 @@ +DELETE FROM `trinity_string` WHERE `entry`=63 LIMIT 1; --Existing entry 63 is not present in Language.h. It's safe to remove it. +INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES (63, 'You can\'t do that right now.'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index a766108dbb0..9c4f760fcff 100755 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -86,7 +86,8 @@ enum TrinityStrings LANG_CONNECTED_PLAYERS = 60, LANG_ACCOUNT_ADDON = 61, LANG_IMPROPER_VALUE = 62, - // Room for more level 0 63-99 not used + LANG_CANT_DO_NOW = 63, + // Room for more level 0 64-99 not used // level 1 chat LANG_GLOBAL_NOTIFY = 100, diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index fea96cc80f3..d985671997a 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,69 @@ 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; + } + + //7355: "Stuck" + player->CastSpell(player, 7355, false); + return true; + } + + if (!*args) + return false; + + char* player_str = strtok((char*)args, " "); + if (!player_str) + return false; - if (player->isInFlight()) + 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 + sLog->outError(LOG_FILTER_GENERAL, "DEBUG: not a supported argument. Args were: %s", args); + return false; + } static bool HandleLinkGraveCommand(ChatHandler* handler, char const* args) |