From 278cac8becfbfc359f0d912f6e87b3c89eeda7de Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 1 Jan 2022 15:49:43 -0500 Subject: [PATCH] Scripts/Commands: Adjust .list respawns to use enum iteration. Add enum iteration capability to SpawnObjectTypes. Port From (https://github.com/TrinityCore/TrinityCore/commit/e270351a16702fabedc8651afe6030d12792fdbe) --- Source/Framework/Constants/Language.cs | 4 +- Source/Game/Chat/Commands/ListCommands.cs | 65 ++++++++--------------- 2 files changed, 23 insertions(+), 46 deletions(-) diff --git a/Source/Framework/Constants/Language.cs b/Source/Framework/Constants/Language.cs index 288ec4546..90f8a9bdf 100644 --- a/Source/Framework/Constants/Language.cs +++ b/Source/Framework/Constants/Language.cs @@ -1088,8 +1088,8 @@ namespace Framework.Constants ListRespawnsZone = 5078, ListRespawnsListheader = 5079, ListRespawnsOverdue = 5080, - ListRespawnsCreatures = 5081, - ListRespawnsGameobjects = 5082, + // unused 5081 + // unused 5082 ObjectInfoAIType = 5083, NpcinfoUnitFieldFlags2 = 5084, diff --git a/Source/Game/Chat/Commands/ListCommands.cs b/Source/Game/Chat/Commands/ListCommands.cs index 396e95dea..0cc6673b2 100644 --- a/Source/Game/Chat/Commands/ListCommands.cs +++ b/Source/Game/Chat/Commands/ListCommands.cs @@ -575,56 +575,33 @@ namespace Game.Chat.Commands if (!args.Empty()) range = args.NextUInt32(); - List respawns = new(); Locale locale = handler.GetSession().GetSessionDbcLocale(); string stringOverdue = Global.ObjectMgr.GetCypherString(CypherStrings.ListRespawnsOverdue, locale); - string stringCreature = Global.ObjectMgr.GetCypherString(CypherStrings.ListRespawnsCreatures, locale); - string stringGameobject = Global.ObjectMgr.GetCypherString(CypherStrings.ListRespawnsGameobjects, locale); uint zoneId = player.GetZoneId(); - if (range != 0) - handler.SendSysMessage(CypherStrings.ListRespawnsRange, stringCreature, range); - else - handler.SendSysMessage(CypherStrings.ListRespawnsZone, stringCreature, GetZoneName(zoneId, handler.GetSessionDbcLocale()), zoneId); - handler.SendSysMessage(CypherStrings.ListRespawnsListheader); - map.GetRespawnInfo(respawns, SpawnObjectTypeMask.Creature, range != 0 ? 0 : zoneId); - foreach (RespawnInfo ri in respawns) + + for (SpawnObjectType type = 0; type < SpawnObjectType.Max; type++) { - CreatureData data = Global.ObjectMgr.GetCreatureData(ri.spawnId); - if (data == null) - continue; + if (range != 0) + handler.SendSysMessage(CypherStrings.ListRespawnsRange, type, range); + else + handler.SendSysMessage(CypherStrings.ListRespawnsZone, type, GetZoneName(zoneId, locale), zoneId); + handler.SendSysMessage(CypherStrings.ListRespawnsListheader); + List respawns = new(); + map.GetRespawnInfo(respawns, (SpawnObjectTypeMask)(1 << (int)type), range != 0 ? 0 : zoneId); + foreach (RespawnInfo ri in respawns) + { + SpawnData data = Global.ObjectMgr.GetSpawnData(ri.type, ri.spawnId); + if (data == null) + continue; + if (range != 0 && !player.IsInDist(data.spawnPoint, range)) + continue; + uint gridY = ri.gridId / MapConst.MaxGrids; + uint gridX = ri.gridId % MapConst.MaxGrids; - if (range != 0 && !player.IsInDist(data.spawnPoint, range)) - continue; - - uint gridY = ri.gridId / MapConst.MaxGrids; - uint gridX = ri.gridId % MapConst.MaxGrids; - - string respawnTime = ri.respawnTime > GameTime.GetGameTime() ? Time.secsToTimeString((ulong)(ri.respawnTime - GameTime.GetGameTime()), true) : stringOverdue; - handler.SendSysMessage($"{ri.spawnId} | {ri.entry} | [{gridX},{gridY}] | {GetZoneName(ri.zoneId, handler.GetSessionDbcLocale())} ({ri.zoneId}) | {respawnTime}{(map.IsSpawnGroupActive(data.spawnGroupData.groupId) ? "" : " (inactive)")}"); - } - - respawns.Clear(); - if (range != 0) - handler.SendSysMessage(CypherStrings.ListRespawnsRange, stringGameobject, range); - else - handler.SendSysMessage(CypherStrings.ListRespawnsZone, stringGameobject, GetZoneName(zoneId, handler.GetSessionDbcLocale()), zoneId); - handler.SendSysMessage(CypherStrings.ListRespawnsListheader); - map.GetRespawnInfo(respawns, SpawnObjectTypeMask.GameObject, range != 0 ? 0 : zoneId); - foreach (RespawnInfo ri in respawns) - { - GameObjectData data = Global.ObjectMgr.GetGameObjectData(ri.spawnId); - if (data == null) - continue; - - if (range != 0 && !player.IsInDist(data.spawnPoint, range)) - continue; - - uint gridY = ri.gridId / MapConst.MaxGrids; - uint gridX = ri.gridId % MapConst.MaxGrids; - - string respawnTime = ri.respawnTime > GameTime.GetGameTime() ? Time.secsToTimeString((ulong)(ri.respawnTime - GameTime.GetGameTime()), true) : stringOverdue; - handler.SendSysMessage($"{ri.spawnId} | {ri.entry} | [{gridX},{gridY}] | {GetZoneName(ri.zoneId, handler.GetSessionDbcLocale())} ({ri.zoneId}) | {respawnTime}{(map.IsSpawnGroupActive(data.spawnGroupData.groupId) ? "" : " (inactive)")}"); + string respawnTime = ri.respawnTime > GameTime.GetGameTime() ? Time.secsToTimeString((ulong)(ri.respawnTime - GameTime.GetGameTime()), true) : stringOverdue; + handler.SendSysMessage($"{ri.spawnId} | {ri.entry} | [{gridX:2},{gridY:2}] | {GetZoneName(ri.zoneId, locale)} ({ri.zoneId}) | {respawnTime}{(map.IsSpawnGroupActive(data.spawnGroupData.groupId) ? "" : " (inactive)")}"); + } } return true; }