aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxjose93 <xjose93@hotmail.com>2016-06-14 18:23:45 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2016-09-03 18:04:11 +0200
commit779d3b23689aba45a3a29eb1016f53e0710ed789 (patch)
tree8b26a94f02ebeac5f6b38467aa49a1871c4d3f35 /src
parent8da93b67345b6342db1540690bc935c56261e063 (diff)
Core/Commands: Implement .neargraveyard (find nearest graveyard from dbc). (#17301)
(cherry picked from commit e2c01899272d1e6c6bbf990676b818cceaf18c9c)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Accounts/RBAC.h7
-rw-r--r--src/server/game/Miscellaneous/Language.h4
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp52
3 files changed, 58 insertions, 5 deletions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index 32906572f03..ddefe9959ea 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -745,9 +745,10 @@ 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_RELOAD_CHARACTER_TEMPLATE = 841,
- RBAC_PERM_COMMAND_RELOAD_QUEST_GREETING = 842,
- RBAC_PERM_COMMAND_DEBUG_SEND_PLAYSCENE = 843,
+ RBAC_PERM_COMMAND_NEARGRAVEYARD = 841,
+ RBAC_PERM_COMMAND_RELOAD_CHARACTER_TEMPLATE = 842,
+ RBAC_PERM_COMMAND_RELOAD_QUEST_GREETING = 843,
+ RBAC_PERM_COMMAND_DEBUG_SEND_PLAYSCENE = 844,
// custom permissions 1000+
RBAC_PERM_MAX
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 8cc13b83a72..5b1a0272879 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 d27548675b1..c14d6f4b70a 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -24,6 +24,7 @@ EndScriptData */
#include "ScriptMgr.h"
#include "ObjectMgr.h"
+#include "BattlefieldMgr.h"
#include "BattlegroundMgr.h"
#include "Chat.h"
#include "Cell.h"
@@ -39,6 +40,7 @@ EndScriptData */
#include "ScenePackets.h"
#include <fstream>
+#include <limits>
class debug_commandscript : public CommandScript
{
@@ -99,7 +101,8 @@ public:
{ "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "",},
{ "phase", rbac::RBAC_PERM_COMMAND_DEBUG_PHASE, false, &HandleDebugPhaseCommand, "" },
{ "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 =
{
@@ -1547,6 +1550,53 @@ public:
sInstanceSaveMgr->ForceGlobalReset(map, 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()