diff options
author | Treeston <treeston.mmoc@gmail.com> | 2019-07-17 22:58:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-16 21:41:24 +0100 |
commit | e270351a16702fabedc8651afe6030d12792fdbe (patch) | |
tree | cf6b218f947eaece8240fc866889bfa4876dbd08 | |
parent | 39ef3e3e78b9020d3252efd619c9811198d1d930 (diff) |
Scripts/Commands: Adjust .list respawns to use enum iteration. Add enum iteration capability to SpawnObjectTypes.
(cherry picked from commit b64834c3f5dd7e1be472950532ce00e70b4601fa)
-rw-r--r-- | sql/updates/world/master/2021_12_16_10_world_2019_07_17_07_world.sql | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Maps/SpawnData.h | 7 | ||||
-rw-r--r-- | src/server/game/Maps/enuminfo_SpawnData.cpp | 56 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Language.h | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_list.cpp | 62 |
6 files changed, 86 insertions, 47 deletions
diff --git a/sql/updates/world/master/2021_12_16_10_world_2019_07_17_07_world.sql b/sql/updates/world/master/2021_12_16_10_world_2019_07_17_07_world.sql new file mode 100644 index 00000000000..f2a7847b88c --- /dev/null +++ b/sql/updates/world/master/2021_12_16_10_world_2019_07_17_07_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `trinity_string` WHERE `entry` IN (5081,5082); diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp index db366bec494..f78cdfafe96 100644 --- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp +++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp @@ -64,7 +64,7 @@ TC_API_EXPORT EnumText EnumUtils<UnitFlags>::ToString(UnitFlags value) case UNIT_FLAG_UNK_28: return { "UNIT_FLAG_UNK_28", "UNIT_FLAG_UNK_28", "" }; case UNIT_FLAG_UNK_29: return { "UNIT_FLAG_UNK_29", "UNIT_FLAG_UNK_29", "used in Feing Death spell" }; case UNIT_FLAG_SHEATHE: return { "UNIT_FLAG_SHEATHE", "UNIT_FLAG_SHEATHE", "" }; - case UNIT_FLAG_IMMUNE: return { "UNIT_FLAG_IMMUNE", "UNIT_FLAG_IMMUNE", "is affected by a damage immunity aura" }; + case UNIT_FLAG_IMMUNE: return { "UNIT_FLAG_IMMUNE", "UNIT_FLAG_IMMUNE", "Immune to damage" }; default: throw std::out_of_range("value"); } } diff --git a/src/server/game/Maps/SpawnData.h b/src/server/game/Maps/SpawnData.h index 40972a5a8f1..d1023ffbeb2 100644 --- a/src/server/game/Maps/SpawnData.h +++ b/src/server/game/Maps/SpawnData.h @@ -22,12 +22,13 @@ #include "Position.h" #include <vector> +// EnumUtils: DESCRIBE THIS enum SpawnObjectType { - SPAWN_TYPE_CREATURE = 0, - SPAWN_TYPE_GAMEOBJECT = 1, + SPAWN_TYPE_CREATURE = 0, // TITLE Creature + SPAWN_TYPE_GAMEOBJECT = 1, // TITLE Gameobject - SPAWN_TYPE_MAX + SPAWN_TYPE_MAX // SKIP }; enum SpawnObjectTypeMask diff --git a/src/server/game/Maps/enuminfo_SpawnData.cpp b/src/server/game/Maps/enuminfo_SpawnData.cpp new file mode 100644 index 00000000000..55487a8d50b --- /dev/null +++ b/src/server/game/Maps/enuminfo_SpawnData.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "SpawnData.h" +#include "Define.h" +#include "SmartEnum.h" +#include <stdexcept> + +namespace Trinity +{ +namespace Impl +{ + +/*******************************************************************\ +|* data for enum 'SpawnObjectType' in 'SpawnData.h' auto-generated *| +\*******************************************************************/ +template <> +TC_API_EXPORT EnumText EnumUtils<SpawnObjectType>::ToString(SpawnObjectType value) +{ + switch (value) + { + case SPAWN_TYPE_CREATURE: return { "SPAWN_TYPE_CREATURE", "Creature", "" }; + case SPAWN_TYPE_GAMEOBJECT: return { "SPAWN_TYPE_GAMEOBJECT", "Gameobject", "" }; + default: throw std::out_of_range("value"); + } +} + +template <> +TC_API_EXPORT size_t EnumUtils<SpawnObjectType>::Count() { return 2; } + +template <> +TC_API_EXPORT SpawnObjectType EnumUtils<SpawnObjectType>::FromIndex(size_t index) +{ + switch (index) + { + case 0: return SPAWN_TYPE_CREATURE; + case 1: return SPAWN_TYPE_GAMEOBJECT; + default: throw std::out_of_range("index"); + } +} +} +} diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 7b69fd52872..708c9e34d33 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1137,8 +1137,8 @@ enum TrinityStrings LANG_LIST_RESPAWNS_ZONE = 5078, LANG_LIST_RESPAWNS_LISTHEADER = 5079, LANG_LIST_RESPAWNS_OVERDUE = 5080, - LANG_LIST_RESPAWNS_CREATURES = 5081, - LANG_LIST_RESPAWNS_GAMEOBJECTS = 5082, + // unused 5081 + // unused 5082 LANG_OBJECTINFO_AITYPE = 5083, LANG_NPCINFO_UNIT_FIELD_FLAGS_2 = 5084, LANG_NPCINFO_UNIT_FIELD_FLAGS_3 = 5085, diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index 56c0f100ba0..a1b263e7ad8 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -692,52 +692,32 @@ public: if (*args) range = atoi((char*)args); - std::vector<RespawnInfo*> respawns; LocaleConstant locale = handler->GetSession()->GetSessionDbcLocale(); char const* stringOverdue = sObjectMgr->GetTrinityString(LANG_LIST_RESPAWNS_OVERDUE, locale); - char const* stringCreature = sObjectMgr->GetTrinityString(LANG_LIST_RESPAWNS_CREATURES, locale); - char const* stringGameobject = sObjectMgr->GetTrinityString(LANG_LIST_RESPAWNS_GAMEOBJECTS, locale); uint32 zoneId = player->GetZoneId(); - if (range) - handler->PSendSysMessage(LANG_LIST_RESPAWNS_RANGE, stringCreature, range); - else - handler->PSendSysMessage(LANG_LIST_RESPAWNS_ZONE, stringCreature, GetZoneName(zoneId, handler->GetSessionDbcLocale()), zoneId); - handler->PSendSysMessage(LANG_LIST_RESPAWNS_LISTHEADER); - map->GetRespawnInfo(respawns, SPAWN_TYPEMASK_CREATURE, range ? 0 : zoneId); - for (RespawnInfo* ri : respawns) - { - CreatureData const* data = sObjectMgr->GetCreatureData(ri->spawnId); - if (!data) - continue; - if (range && !player->IsInDist(data->spawnPoint, range)) - continue; - uint32 gridY = ri->gridId / MAX_NUMBER_OF_GRIDS; - uint32 gridX = ri->gridId % MAX_NUMBER_OF_GRIDS; - - std::string respawnTime = ri->respawnTime > GameTime::GetGameTime() ? secsToTimeString(uint64(ri->respawnTime - GameTime::GetGameTime()), true) : stringOverdue; - handler->PSendSysMessage(UI64FMTD " | %u | [%02u,%02u] | %s (%u) | %s%s", ri->spawnId, ri->entry, gridX, gridY, GetZoneName(ri->zoneId, handler->GetSessionDbcLocale()), ri->zoneId, respawnTime.c_str(), map->IsSpawnGroupActive(data->spawnGroupData->groupId) ? "" : " (inactive)"); - } - - respawns.clear(); - if (range) - handler->PSendSysMessage(LANG_LIST_RESPAWNS_RANGE, stringGameobject, range); - else - handler->PSendSysMessage(LANG_LIST_RESPAWNS_ZONE, stringGameobject, GetZoneName(zoneId, handler->GetSessionDbcLocale()), zoneId); - handler->PSendSysMessage(LANG_LIST_RESPAWNS_LISTHEADER); - map->GetRespawnInfo(respawns, SPAWN_TYPEMASK_GAMEOBJECT, range ? 0 : zoneId); - for (RespawnInfo* ri : respawns) + for (SpawnObjectType type : EnumUtils::Iterate<SpawnObjectType>()) { - GameObjectData const* data = sObjectMgr->GetGameObjectData(ri->spawnId); - if (!data) - continue; - if (range && !player->IsInDist(data->spawnPoint, range)) - continue; - uint32 gridY = ri->gridId / MAX_NUMBER_OF_GRIDS; - uint32 gridX = ri->gridId % MAX_NUMBER_OF_GRIDS; - - std::string respawnTime = ri->respawnTime > GameTime::GetGameTime() ? secsToTimeString(uint64(ri->respawnTime - GameTime::GetGameTime()), true) : stringOverdue; - handler->PSendSysMessage(UI64FMTD " | %u | [% 02u, % 02u] | %s (%u) | %s%s", ri->spawnId, ri->entry, gridX, gridY, GetZoneName(ri->zoneId, handler->GetSessionDbcLocale()), ri->zoneId, respawnTime.c_str(), map->IsSpawnGroupActive(data->spawnGroupData->groupId) ? "" : " (inactive)"); + if (range) + handler->PSendSysMessage(LANG_LIST_RESPAWNS_RANGE, EnumUtils::ToTitle(type), range); + else + handler->PSendSysMessage(LANG_LIST_RESPAWNS_ZONE, EnumUtils::ToTitle(type), GetZoneName(zoneId, locale), zoneId); + handler->PSendSysMessage(LANG_LIST_RESPAWNS_LISTHEADER); + std::vector<RespawnInfo*> respawns; + map->GetRespawnInfo(respawns, SpawnObjectTypeMask(1 << type), range ? 0 : zoneId); + for (RespawnInfo* ri : respawns) + { + SpawnData const* data = sObjectMgr->GetSpawnData(ri->type, ri->spawnId); + if (!data) + continue; + if (range && !player->IsInDist(data->spawnPoint, range)) + continue; + uint32 gridY = ri->gridId / MAX_NUMBER_OF_GRIDS; + uint32 gridX = ri->gridId % MAX_NUMBER_OF_GRIDS; + + std::string respawnTime = ri->respawnTime > GameTime::GetGameTime() ? secsToTimeString(uint64(ri->respawnTime - GameTime::GetGameTime()), true) : stringOverdue; + handler->PSendSysMessage(UI64FMTD " | %u | [%02u,%02u] | %s (%u) | %s%s", ri->spawnId, ri->entry, gridX, gridY, GetZoneName(ri->zoneId, locale), ri->zoneId, respawnTime.c_str(), map->IsSpawnGroupActive(data->spawnGroupData->groupId) ? "" : " (inactive)"); + } } return true; } |