aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxjose93 <xjose93@hotmail.com>2016-06-14 18:23:45 +0200
committermik1893 <michele.roscelli@gmail.com>2016-06-14 17:23:45 +0100
commite2c01899272d1e6c6bbf990676b818cceaf18c9c (patch)
tree3f33b91a55aca1693e16f0eee646722c26734fef /src
parent8e84603090726cf3715c444763a2c499f6518e95 (diff)
Core/Commands: Implement .neargraveyard (find nearest graveyard from dbc). (#17301)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Accounts/RBAC.h1
-rw-r--r--src/server/game/Miscellaneous/Language.h4
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp52
3 files changed, 55 insertions, 2 deletions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index d1d418b0931..1f074a6f81d 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -701,6 +701,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_PET_LEVEL = 838,
RBAC_PERM_COMMAND_SERVER_SHUTDOWN_FORCE = 839,
RBAC_PERM_COMMAND_SERVER_RESTART_FORCE = 840,
+ RBAC_PERM_COMMAND_NEARGRAVEYARD = 841,
// custom permissions 1000+
RBAC_PERM_MAX
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index d6af5d81432..143f535ddf5 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -112,7 +112,9 @@ enum TrinityStrings
LANG_RBAC_PERM_REVOKED_NOT_IN_LIST = 79,
LANG_PVPSTATS = 80,
LANG_PVPSTATS_DISABLED = 81,
- // Free 82 - 95
+ LANG_COMMAND_NEARGRAVEYARD = 82,
+ LANG_COMMAND_NEARGRAVEYARD_NOTFOUND = 83,
+ // Free 84 - 95
LANG_GUILD_RENAME_ALREADY_EXISTS = 96,
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index ca4dd814e01..570f4587ae8 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -35,8 +35,10 @@ EndScriptData */
#include "Language.h"
#include "MapManager.h"
#include "M2Stores.h"
+#include "BattlefieldMgr.h"
#include <fstream>
+#include <limits>
class debug_commandscript : public CommandScript
{
@@ -95,7 +97,8 @@ public:
{ "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "" },
{ "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "" },
{ "boundary", rbac::RBAC_PERM_COMMAND_DEBUG_BOUNDARY, false, &HandleDebugBoundaryCommand, "" },
- { "raidreset", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleDebugRaidResetCommand, "" }
+ { "raidreset", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleDebugRaidResetCommand, "" },
+ { "neargraveyard", rbac::RBAC_PERM_COMMAND_NEARGRAVEYARD, false, &HandleDebugNearGraveyard, "" },
};
static std::vector<ChatCommand> commandTable =
{
@@ -1485,6 +1488,53 @@ public:
sInstanceSaveMgr->ForceGlobalReset(mEntry->MapID, Difficulty(difficulty));
return true;
}
+
+ static bool HandleDebugNearGraveyard(ChatHandler* handler, char const* args)
+ {
+ Player* player = handler->GetSession()->GetPlayer();
+ const WorldSafeLocsEntry* nearestLoc = nullptr;
+
+ if (stricmp(args, "linked"))
+ {
+ if (Battleground* bg = player->GetBattleground())
+ nearestLoc = bg->GetClosestGraveYard(player);
+ else
+ {
+ if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId()))
+ nearestLoc = bf->GetClosestGraveYard(player);
+ else
+ nearestLoc = sObjectMgr->GetClosestGraveYard(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), player->GetTeam());
+ }
+ }
+ else
+ {
+ float x = player->GetPositionX();
+ float y = player->GetPositionY();
+ float z = player->GetPositionZ();
+ float distNearest = std::numeric_limits<float>::max();
+
+ for (uint32 i = 0; i < sWorldSafeLocsStore.GetNumRows(); ++i)
+ {
+ const WorldSafeLocsEntry* loc = sWorldSafeLocsStore.LookupEntry(i);
+ if (loc && loc->map_id == player->GetMapId())
+ {
+ float dist = (loc->x - x) * (loc->x - x) + (loc->y - y) * (loc->y - y) + (loc->z - z) * (loc->z - z);
+ if (dist < distNearest)
+ {
+ distNearest = dist;
+ nearestLoc = loc;
+ }
+ }
+ }
+ }
+
+ if (nearestLoc)
+ handler->PSendSysMessage(LANG_COMMAND_NEARGRAVEYARD, nearestLoc->ID, nearestLoc->x, nearestLoc->y, nearestLoc->z);
+ else
+ handler->PSendSysMessage(LANG_COMMAND_NEARGRAVEYARD_NOTFOUND);
+
+ return true;
+ }
};
void AddSC_debug_commandscript()