From 5bc078060fd4abe2c85ede78e957cab17e3657d7 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 23 Aug 2020 22:02:52 -0400 Subject: [PATCH] Scripts/Commands: New utility command: .list spawnpoints. Port From (https://github.com/TrinityCore/TrinityCore/commit/703910d71baa3182c956494465cdd335f5de1d3d) --- Source/Framework/Constants/AccountConst.cs | 12 ++--- Source/Game/Chat/Commands/ListCommands.cs | 45 ++++++++++++++++--- Source/Game/Globals/ObjectManager.cs | 2 + sql/base/auth_database.sql | 3 ++ .../auth/master/2017_08_01_00_auth.sql | 8 ++++ ...020_08_22_01_world_2017_08_01_00_world.sql | 6 +++ 6 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 sql/updates/auth/master/2017_08_01_00_auth.sql create mode 100644 sql/updates/world/master/2020_08_22_01_world_2017_08_01_00_world.sql diff --git a/Source/Framework/Constants/AccountConst.cs b/Source/Framework/Constants/AccountConst.cs index 65835f22d..bdc37a023 100644 --- a/Source/Framework/Constants/AccountConst.cs +++ b/Source/Framework/Constants/AccountConst.cs @@ -761,17 +761,17 @@ namespace Framework.Constants CommandReloadConversationTemplate = 853, CommandDebugConversation = 854, CommandDebugPlayMusic = 855, - CommandNpcSpawngroup = 856, // Reserved For DynamicSpawning - CommandNpcDespawngroup = 857, // Reserved For DynamicSpawning - CommandGobjectSpawngroup = 858, // Reserved For DynamicSpawning - CommandGobjectDespawngroup = 859, // Reserved For DynamicSpawning - CommandListRespawns = 860, // Reserved For DynamicSpawning + CommandNpcSpawngroup = 856, + CommandNpcDespawngroup = 857, + CommandGobjectSpawngroup = 858, + CommandGobjectDespawngroup = 859, + CommandListRespawns = 860, CommandGroupSet = 861, CommandGroupAssistant = 862, CommandGroupMaintank = 863, CommandGroupMainassist = 864, CommandNpcShowloot = 865, - CommandListSpawnpoints = 866, // Reserved + CommandListSpawnpoints = 866, CommandReloadQuestGreetingLocale = 867, // Reserved CommandModifyPower = 868, CommandDebugSendPlayerChoice = 869, diff --git a/Source/Game/Chat/Commands/ListCommands.cs b/Source/Game/Chat/Commands/ListCommands.cs index d5f4ef161..b9198398f 100644 --- a/Source/Game/Chat/Commands/ListCommands.cs +++ b/Source/Game/Chat/Commands/ListCommands.cs @@ -570,15 +570,8 @@ namespace Game.Chat.Commands [Command("respawns", RBACPermissions.CommandListRespawns)] static bool HandleListRespawnsCommand(StringArguments args, CommandHandler handler) { - // We need a player Player player = handler.GetSession().GetPlayer(); - if (player == null) - return false; - - // And we need a map Map map = player.GetMap(); - if (map == null) - return false; uint range = 0; if (!args.Empty()) @@ -661,6 +654,44 @@ namespace Game.Chat.Commands return true; } + [Command("spawnpoints", RBACPermissions.CommandListSpawnpoints)] + static bool HandleListSpawnPointsCommand(StringArguments args, CommandHandler handler) + { + Player player = handler.GetSession().GetPlayer(); + Map map = player.GetMap(); + uint mapId = map.GetId(); + bool showAll = map.IsBattlegroundOrArena() || map.IsDungeon(); + handler.SendSysMessage("Listing all spawn points in map %u (%s)%s:", mapId, map.GetMapName(), showAll ? "" : " within 5000yd"); + + foreach (var pair in Global.ObjectMgr.GetAllCreatureData()) + { + SpawnData data = pair.Value; + if (data.spawnPoint.GetMapId() != mapId) + continue; + + CreatureTemplate cTemp = Global.ObjectMgr.GetCreatureTemplate(data.Id); + if (cTemp == null) + continue; + + if (showAll || data.spawnPoint.IsInDist2d(player, 5000.0f)) + handler.SendSysMessage($"Type: {data.type} | SpawnId: {data.spawnId} | Entry: {data.Id} ({cTemp.Name}) | X: {data.spawnPoint.GetPositionX():3} | Y: {data.spawnPoint.GetPositionY():3} | Z: {data.spawnPoint.GetPositionZ():3}"); + } + foreach (var pair in Global.ObjectMgr.GetAllGameObjectData()) + { + SpawnData data = pair.Value; + if (data.spawnPoint.GetMapId() != mapId) + continue; + + GameObjectTemplate goTemp = Global.ObjectMgr.GetGameObjectTemplate(data.Id); + if (goTemp == null) + continue; + + if (showAll || data.spawnPoint.IsInDist2d(player, 5000.0f)) + handler.SendSysMessage($"Type: {data.type} | SpawnId: {data.spawnId} | Entry: {data.Id} ({goTemp.name}) | X: {data.spawnPoint.GetPositionX():3} | Y: {data.spawnPoint.GetPositionY():3} | Z: {data.spawnPoint.GetPositionZ():3}"); + } + return true; + } + static string GetZoneName(uint zoneId, Locale locale) { AreaTableRecord zoneEntry = CliDB.AreaTableStorage.LookupByKey(zoneId); diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 0f4c03f71..1de58cf9e 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -3538,6 +3538,7 @@ namespace Game { return _creatureTemplateStorage; } + public Dictionary GetAllCreatureData() { return creatureDataStorage; } public CreatureData GetCreatureData(ulong guid) { return creatureDataStorage.LookupByKey(guid); @@ -4381,6 +4382,7 @@ namespace Game return _gameObjectQuestItemStorage.LookupByKey(id); } MultiMap GetGameObjectQuestItemMap() { return _gameObjectQuestItemStorage; } + public Dictionary GetAllGameObjectData() { return gameObjectDataStorage; } public GameObjectData GetGameObjectData(ulong guid) { return gameObjectDataStorage.LookupByKey(guid); diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index c0d955379..f9de965c9 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -1181,6 +1181,7 @@ INSERT INTO `rbac_linked_permissions` VALUES (196,840), (196,842), (196,843), +(196,866), (196,869), (196,872), (197,232), @@ -2107,6 +2108,7 @@ INSERT INTO `rbac_permissions` VALUES (859,'Command: gobject despawngroup'), (860,'Command: list respawns'), (865,'Command: npc showloot'), +(866,'Command: list spawnpoints'), (868,'Command: modify power'), (869,'Command: debug send playerchoice'), (872,'Command: server debug'); @@ -2309,6 +2311,7 @@ INSERT INTO `updates` VALUES ('2017_06_25_00_auth.sql','A2DA6A64D4217992EF766915DEBD517DB0834E01','ARCHIVED','2017-06-25 00:54:10',0), ('2017_06_28_00_auth_master.sql','6E58300D4D4DAAEE89107ECB3CB7DA8529DA738F','ARCHIVED','2017-06-28 19:11:09',0), ('2017_06_28_00_auth_rbac.sql','D32EF80F57F629C23395D80F06E91D7E40719F83','ARCHIVED','2017-06-28 00:00:00',0), +('2017_08_01_00_auth.sql','6ECE808AF52345177189E962C0606B769B6806A6','ARCHIVED','2017-08-01 00:00:00',0), ('2017_06_30_00_auth.sql','C73BD277D211DBE1BB86BB1B443CA8F292D8ADEE','ARCHIVED','2017-06-30 16:18:51',0), ('2017_08_04_00_auth.sql','2E994A704C64FECE3CE0883ED0CAC5E5A0E3A36C','ARCHIVED','2017-08-04 23:46:32',0), ('2017_08_13_00_auth_2016_09_22_00_auth.sql','70047954E3556BFA430ADD5680EF8797F74A4B9E','ARCHIVED','2017-08-13 12:00:00',0), diff --git a/sql/updates/auth/master/2017_08_01_00_auth.sql b/sql/updates/auth/master/2017_08_01_00_auth.sql new file mode 100644 index 000000000..3921ed76d --- /dev/null +++ b/sql/updates/auth/master/2017_08_01_00_auth.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `rbac_permissions` WHERE `id`=866; +INSERT INTO `rbac_permissions` (`id`,`name`) VALUES +(866, 'Command: list spawnpoints'); + +DELETE FROM `rbac_linked_permissions` WHERE `linkedId`=866; +INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES +(196,866); diff --git a/sql/updates/world/master/2020_08_22_01_world_2017_08_01_00_world.sql b/sql/updates/world/master/2020_08_22_01_world_2017_08_01_00_world.sql new file mode 100644 index 000000000..135a50ae8 --- /dev/null +++ b/sql/updates/world/master/2020_08_22_01_world_2017_08_01_00_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `command` WHERE `name`="list spawnpoints"; +INSERT INTO `command` (`name`,`permission`,`help`) VALUES +('list spawnpoints', 866, 'Syntax: .list spawnpoints + +Lists all spawn points (both creatures and GOs) in the current zone.');