aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2021-04-08 15:34:09 +0200
committerShauren <shauren.trinity@gmail.com>2022-03-07 22:46:00 +0100
commit8d7e152d2805053a9808f6b05605c61a1554339c (patch)
tree549e30b869c785a2ee9a0cf809aa5dcfdebffa5f /src
parent1039f166de782d4c22cb12ab9d8a4496bfc0306f (diff)
Scripts/Commands: Add ".list auras id <aura id>" and ".list auras name <name part>" subcommands (#26346)
Add ".list auras id <aura id>" and ".list auras name <name part>" subcommands to allow filtering the auras (cherry picked from commit 9aff21b3d520cdd580f065f2965442af1bebc81c)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Commands/cs_list.cpp65
1 files changed, 59 insertions, 6 deletions
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index 1c6e2786d5a..61668b98973 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -50,15 +50,22 @@ public:
ChatCommandTable GetCommands() const override
{
+ static ChatCommandTable listAurasCommandTable =
+ {
+ { "", HandleListAllAurasCommand, rbac::RBAC_PERM_COMMAND_LIST_AURAS, Console::No },
+ { "id", HandleListAurasByIdCommand, rbac::RBAC_PERM_COMMAND_LIST_AURAS, Console::No },
+ { "name", HandleListAurasByNameCommand, rbac::RBAC_PERM_COMMAND_LIST_AURAS, Console::No },
+ };
+
static ChatCommandTable listCommandTable =
{
{ "creature", HandleListCreatureCommand, rbac::RBAC_PERM_COMMAND_LIST_CREATURE, Console::Yes },
{ "item", HandleListItemCommand, rbac::RBAC_PERM_COMMAND_LIST_ITEM, Console::Yes },
{ "object", HandleListObjectCommand, rbac::RBAC_PERM_COMMAND_LIST_OBJECT, Console::Yes },
- { "auras", HandleListAurasCommand, rbac::RBAC_PERM_COMMAND_LIST_AURAS, Console::No },
+ { "auras", listAurasCommandTable },
{ "mail", HandleListMailCommand, rbac::RBAC_PERM_COMMAND_LIST_MAIL, Console::Yes },
- { "spawnpoints", HandleListSpawnPointsCommand, rbac::RBAC_PERM_COMMAND_LIST_SPAWNPOINTS, Console::No },
- { "respawns", HandleListRespawnsCommand, rbac::RBAC_PERM_COMMAND_LIST_RESPAWNS, Console::No },
+ { "spawnpoints", HandleListSpawnPointsCommand, rbac::RBAC_PERM_COMMAND_LIST_SPAWNPOINTS, Console::No },
+ { "respawns", HandleListRespawnsCommand, rbac::RBAC_PERM_COMMAND_LIST_RESPAWNS, Console::No },
{ "scenes", HandleListScenesCommand, rbac::RBAC_PERM_COMMAND_LIST_SCENES, Console::No },
};
static ChatCommandTable commandTable =
@@ -434,7 +441,22 @@ public:
return true;
}
- static bool HandleListAurasCommand(ChatHandler* handler)
+ static bool HandleListAllAurasCommand(ChatHandler* handler)
+ {
+ return ListAurasCommand(handler, {}, {});
+ }
+
+ static bool HandleListAurasByIdCommand(ChatHandler* handler, uint32 spellId)
+ {
+ return ListAurasCommand(handler, spellId, {});
+ }
+
+ static bool HandleListAurasByNameCommand(ChatHandler* handler, WTail namePart)
+ {
+ return ListAurasCommand(handler, {}, namePart);
+ }
+
+ static bool ListAurasCommand(ChatHandler* handler, Optional<uint32> spellId, std::wstring namePart)
{
Unit* unit = handler->getSelectedUnit();
if (!unit)
@@ -444,18 +466,23 @@ public:
return false;
}
+ wstrToLower(namePart);
+
char const* talentStr = handler->GetTrinityString(LANG_TALENT);
char const* passiveStr = handler->GetTrinityString(LANG_PASSIVE);
Unit::AuraApplicationMap const& auras = unit->GetAppliedAuras();
handler->PSendSysMessage(LANG_COMMAND_TARGET_LISTAURAS, std::to_string(auras.size()).c_str());
- for (auto const& [spellId, aurApp] : auras)
+ for (auto const& [aurId, aurApp] : auras)
{
Aura const* aura = aurApp->GetBase();
char const* name = aura->GetSpellInfo()->SpellName->Str[handler->GetSessionDbcLocale()];
bool talent = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_CU_IS_TALENT);
+ if (!ShouldListAura(aura->GetSpellInfo(), spellId, namePart, handler->GetSessionDbcLocale()))
+ continue;
+
std::ostringstream ss_name;
ss_name << "|cffffffff|Hspell:" << aura->GetId() << "|h[" << name << "]|h|r";
@@ -472,14 +499,40 @@ public:
if (auraList.empty())
continue;
- handler->PSendSysMessage(LANG_COMMAND_TARGET_LISTAURATYPE, std::to_string(auraList.size()).c_str(), i);
+ bool sizeLogged = false;
for (AuraEffect const* effect : auraList)
+ {
+ if (!ShouldListAura(effect->GetSpellInfo(), spellId, namePart, handler->GetSessionDbcLocale()))
+ continue;
+
+ if (!sizeLogged)
+ {
+ sizeLogged = true;
+ handler->PSendSysMessage(LANG_COMMAND_TARGET_LISTAURATYPE, std::to_string(auraList.size()).c_str(), i);
+ }
+
handler->PSendSysMessage(LANG_COMMAND_TARGET_AURASIMPLE, effect->GetId(), effect->GetEffIndex(), effect->GetAmount());
+ }
}
return true;
}
+
+ static bool ShouldListAura(SpellInfo const* spellInfo, Optional<uint32> spellId, std::wstring namePart, LocaleConstant locale)
+ {
+ if (spellId)
+ return spellInfo->Id == spellId;
+
+ if (!namePart.empty())
+ {
+ std::string name = (*spellInfo->SpellName)[locale];
+ return Utf8FitTo(name, namePart);
+ }
+
+ return true;
+ }
+
// handle list mail command
static bool HandleListMailCommand(ChatHandler* handler, Optional<PlayerIdentifier> player)
{