feat(Scripts/Commands): Implement debug zonestats command (#23249)
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `command` WHERE `name` = 'debug zonestats';
|
||||||
|
INSERT INTO `command` (`name`, `security`, `help`) VALUES
|
||||||
|
('debug zonestats', 1, '.debug zonestats [$playerName]\nDisplays the amount of players in the player\'s current zone.');
|
||||||
@@ -417,9 +417,7 @@ void Map::UpdatePlayerZoneStats(uint32 oldZone, uint32 newZone)
|
|||||||
if (oldZone != MAP_INVALID_ZONE)
|
if (oldZone != MAP_INVALID_ZONE)
|
||||||
{
|
{
|
||||||
uint32& oldZoneCount = _zonePlayerCountMap[oldZone];
|
uint32& oldZoneCount = _zonePlayerCountMap[oldZone];
|
||||||
if (!oldZoneCount)
|
if (oldZoneCount)
|
||||||
LOG_ERROR("maps", "A player left zone {} (went to {}) - but there were no players in the zone!", oldZone, newZone);
|
|
||||||
else
|
|
||||||
--oldZoneCount;
|
--oldZoneCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -514,6 +514,14 @@ public:
|
|||||||
void RemoveWorldObjectFromZoneWideVisibleMap(uint32 zoneId, WorldObject* obj);
|
void RemoveWorldObjectFromZoneWideVisibleMap(uint32 zoneId, WorldObject* obj);
|
||||||
ZoneWideVisibleWorldObjectsSet const* GetZoneWideVisibleWorldObjectsForZone(uint32 zoneId) const;
|
ZoneWideVisibleWorldObjectsSet const* GetZoneWideVisibleWorldObjectsForZone(uint32 zoneId) const;
|
||||||
|
|
||||||
|
[[nodiscard]] uint32 GetPlayerCountInZone(uint32 zoneId) const
|
||||||
|
{
|
||||||
|
if (auto const& it = _zonePlayerCountMap.find(zoneId); it != _zonePlayerCountMap.end())
|
||||||
|
return it->second;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
template<class T> void InitializeObject(T* obj);
|
template<class T> void InitializeObject(T* obj);
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ public:
|
|||||||
{ "dummy", HandleDebugDummyCommand, SEC_ADMINISTRATOR, Console::No },
|
{ "dummy", HandleDebugDummyCommand, SEC_ADMINISTRATOR, Console::No },
|
||||||
{ "mapdata", HandleDebugMapDataCommand, SEC_ADMINISTRATOR, Console::No },
|
{ "mapdata", HandleDebugMapDataCommand, SEC_ADMINISTRATOR, Console::No },
|
||||||
{ "boundary", HandleDebugBoundaryCommand, SEC_ADMINISTRATOR, Console::No },
|
{ "boundary", HandleDebugBoundaryCommand, SEC_ADMINISTRATOR, Console::No },
|
||||||
{ "visibilitydata", HandleDebugVisibilityDataCommand, SEC_ADMINISTRATOR, Console::No }
|
{ "visibilitydata", HandleDebugVisibilityDataCommand, SEC_ADMINISTRATOR, Console::No },
|
||||||
|
{ "zonestats", HandleDebugZoneStatsCommand, SEC_MODERATOR, Console::Yes}
|
||||||
};
|
};
|
||||||
static ChatCommandTable commandTable =
|
static ChatCommandTable commandTable =
|
||||||
{
|
{
|
||||||
@@ -1434,6 +1435,31 @@ public:
|
|||||||
handler->PSendSysMessage("Zone wide visible objects in zone: {}", zoneWideVisibleObjectsInZone);
|
handler->PSendSysMessage("Zone wide visible objects in zone: {}", zoneWideVisibleObjectsInZone);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool HandleDebugZoneStatsCommand(ChatHandler* handler, Optional<PlayerIdentifier> playerTarget)
|
||||||
|
{
|
||||||
|
if (!playerTarget)
|
||||||
|
playerTarget = PlayerIdentifier::FromTargetOrSelf(handler);
|
||||||
|
|
||||||
|
if (!playerTarget)
|
||||||
|
{
|
||||||
|
handler->SendErrorMessage(LANG_PLAYER_NOT_FOUND);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player* player = playerTarget->GetConnectedPlayer();
|
||||||
|
|
||||||
|
if (!player)
|
||||||
|
{
|
||||||
|
handler->SendErrorMessage(LANG_PLAYER_NOT_FOUND);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 zoneId = player->GetZoneId();
|
||||||
|
AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);
|
||||||
|
handler->PSendSysMessage("Player count in zone {} ({}): {}.", zoneId, (zoneEntry ? zoneEntry->area_name[LOCALE_enUS] : "<unknown>"), player->GetMap()->GetPlayerCountInZone(zoneId));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void AddSC_debug_commandscript()
|
void AddSC_debug_commandscript()
|
||||||
|
|||||||
Reference in New Issue
Block a user