aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/auth_database.sql3
-rw-r--r--sql/updates/auth/master/2017_08_01_00_auth.sql8
-rw-r--r--sql/updates/world/master/2020_08_22_01_world_2017_08_01_00_world.sql6
-rw-r--r--src/server/game/Accounts/RBAC.h12
-rw-r--r--src/server/game/Globals/ObjectMgr.h2
-rw-r--r--src/server/scripts/Commands/cs_list.cpp54
6 files changed, 65 insertions, 20 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index c0d955379fb..f9de965c980 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 00000000000..3921ed76d5a
--- /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 00000000000..135a50ae851
--- /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.');
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h
index d4daf026948..72d17dde2e4 100644
--- a/src/server/game/Accounts/RBAC.h
+++ b/src/server/game/Accounts/RBAC.h
@@ -761,17 +761,17 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_CONVERSATION_TEMPLATE = 853,
RBAC_PERM_COMMAND_DEBUG_CONVERSATION = 854,
RBAC_PERM_COMMAND_DEBUG_PLAY_MUSIC = 855,
- RBAC_PERM_COMMAND_NPC_SPAWNGROUP = 856, // reserved for dynamic_spawning
- RBAC_PERM_COMMAND_NPC_DESPAWNGROUP = 857, // reserved for dynamic_spawning
- RBAC_PERM_COMMAND_GOBJECT_SPAWNGROUP = 858, // reserved for dynamic_spawning
- RBAC_PERM_COMMAND_GOBJECT_DESPAWNGROUP = 859, // reserved for dynamic_spawning
- RBAC_PERM_COMMAND_LIST_RESPAWNS = 860, // reserved for dynamic_spawning
+ RBAC_PERM_COMMAND_NPC_SPAWNGROUP = 856,
+ RBAC_PERM_COMMAND_NPC_DESPAWNGROUP = 857,
+ RBAC_PERM_COMMAND_GOBJECT_SPAWNGROUP = 858,
+ RBAC_PERM_COMMAND_GOBJECT_DESPAWNGROUP = 859,
+ RBAC_PERM_COMMAND_LIST_RESPAWNS = 860,
RBAC_PERM_COMMAND_GROUP_SET = 861,
RBAC_PERM_COMMAND_GROUP_ASSISTANT = 862,
RBAC_PERM_COMMAND_GROUP_MAINTANK = 863,
RBAC_PERM_COMMAND_GROUP_MAINASSIST = 864,
RBAC_PERM_COMMAND_NPC_SHOWLOOT = 865,
- RBAC_PERM_COMMAND_LIST_SPAWNPOINTS = 866, // reserved
+ RBAC_PERM_COMMAND_LIST_SPAWNPOINTS = 866,
RBAC_PERM_COMMAND_RELOAD_QUEST_GREETING_LOCALE = 867, // reserved
RBAC_PERM_COMMAND_MODIFY_POWER = 868,
RBAC_PERM_COMMAND_DEBUG_SEND_PLAYER_CHOICE = 869,
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 5f93284920e..b863b8b8fc7 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1417,6 +1417,7 @@ class TC_GAME_API ObjectMgr
return nullptr;
}
void OnDeleteSpawnData(SpawnData const* data);
+ CreatureDataContainer const& GetAllCreatureData() const { return _creatureDataStore; }
CreatureData const* GetCreatureData(ObjectGuid::LowType guid) const
{
CreatureDataContainer::const_iterator itr = _creatureDataStore.find(guid);
@@ -1437,6 +1438,7 @@ class TC_GAME_API ObjectMgr
if (itr == _creatureLocaleStore.end()) return nullptr;
return &itr->second;
}
+ GameObjectDataContainer const& GetAllGameObjectData() const { return _gameObjectDataStore; }
GameObjectData const* GetGameObjectData(ObjectGuid::LowType guid) const
{
GameObjectDataContainer::const_iterator itr = _gameObjectDataStore.find(guid);
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index b332543864b..e7666490ba8 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -48,13 +48,14 @@ public:
{
static std::vector<ChatCommand> listCommandTable =
{
- { "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "" },
- { "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "" },
- { "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "" },
- { "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "" },
- { "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "" },
- { "respawns", rbac::RBAC_PERM_COMMAND_LIST_MAIL, false, &HandleListRespawnsCommand, "" },
- { "scenes", rbac::RBAC_PERM_COMMAND_LIST_SCENES, false, &HandleListScenesCommand, "" },
+ { "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "" },
+ { "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "" },
+ { "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "" },
+ { "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "" },
+ { "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "" },
+ { "spawnpoints", rbac::RBAC_PERM_COMMAND_LIST_SPAWNPOINTS, false, &HandleListSpawnPointsCommand, "" },
+ { "respawns", rbac::RBAC_PERM_COMMAND_LIST_RESPAWNS, false, &HandleListRespawnsCommand, "" },
+ { "scenes", rbac::RBAC_PERM_COMMAND_LIST_SCENES, false, &HandleListScenesCommand, "" },
};
static std::vector<ChatCommand> commandTable =
{
@@ -645,6 +646,38 @@ public:
return true;
}
+ static bool HandleListSpawnPointsCommand(ChatHandler* handler, char const* /*args*/)
+ {
+ Player const* player = handler->GetSession()->GetPlayer();
+ Map const* map = player->GetMap();
+ uint32 const mapId = map->GetId();
+ bool const showAll = map->IsBattlegroundOrArena() || map->IsDungeon();
+ handler->PSendSysMessage("Listing all spawn points in map %u (%s)%s:", mapId, map->GetMapName(), showAll ? "" : " within 5000yd");
+ for (auto const& pair : sObjectMgr->GetAllCreatureData())
+ {
+ SpawnData const& data = pair.second;
+ if (data.spawnPoint.GetMapId() != mapId)
+ continue;
+ CreatureTemplate const* cTemp = sObjectMgr->GetCreatureTemplate(data.id);
+ if (!cTemp)
+ continue;
+ if (showAll || data.spawnPoint.IsInDist2d(player, 5000.0))
+ handler->PSendSysMessage("Type: %u | SpawnId: " UI64FMTD " | Entry: %u (%s) | X: %.3f | Y: %.3f | Z: %.3f", uint32(data.type), data.spawnId, data.id, cTemp->Name.c_str(), data.spawnPoint.GetPositionX(), data.spawnPoint.GetPositionY(), data.spawnPoint.GetPositionZ());
+ }
+ for (auto const& pair : sObjectMgr->GetAllGameObjectData())
+ {
+ SpawnData const& data = pair.second;
+ if (data.spawnPoint.GetMapId() != mapId)
+ continue;
+ GameObjectTemplate const* goTemp = sObjectMgr->GetGameObjectTemplate(data.id);
+ if (!goTemp)
+ continue;
+ if (showAll || data.spawnPoint.IsInDist2d(player, 5000.0))
+ handler->PSendSysMessage("Type: %u | SpawnId: " UI64FMTD " | Entry: %u (%s) | X: %.3f | Y: %.3f | Z: %.3f", uint32(data.type), data.spawnId, data.id, goTemp->name.c_str(), data.spawnPoint.GetPositionX(), data.spawnPoint.GetPositionY(), data.spawnPoint.GetPositionZ());
+ }
+ return true;
+ }
+
static char const* GetZoneName(uint32 zoneId, LocaleConstant locale)
{
AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);
@@ -652,15 +685,8 @@ public:
}
static bool HandleListRespawnsCommand(ChatHandler* handler, char const* args)
{
- // We need a player
Player const* player = handler->GetSession()->GetPlayer();
- if (!player)
- return false;
- // And we need a map
Map const* map = player->GetMap();
- if (!map)
- return false;
-
uint32 range = 0;
if (*args)
range = atoi((char*)args);