aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-07 16:46:44 +0100
committerOvahlord <dreadkiller@gmx.de>2025-01-09 20:53:32 +0100
commit4e7181c1716da4292456f158f0fee39a1c2b02ad (patch)
treed63c0fd0a2f580fa85ce1da7917fffef4beec7ef /src/server/scripts
parent40696d4754880d9a4f76d46c83728c4ce52a24f2 (diff)
Core/Commands: Extract bonus lists and item context from provided item link for .additem commands
Closes #30209 (cherry picked from commit f647ff68659ed6d8d414d20520507dd451c2cb8d)
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 96bad647a0a..c9ea07ee4e1 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1158,8 +1158,14 @@ public:
Optional<std::string_view> const& bonusListIdString, Optional<uint8> itemContextArg)
{
uint32 itemId = 0;
+ std::vector<int32> bonusListIDs;
+ ItemContext itemContext = ItemContext::NONE;
if (Hyperlink<::item> const* itemLinkData = std::get_if<Hyperlink<::item>>(&itemArg))
+ {
itemId = (*itemLinkData)->Item->GetId();
+ bonusListIDs = (*itemLinkData)->ItemBonusListIDs;
+ itemContext = static_cast<ItemContext>((*itemLinkData)->Context);
+ }
else if (uint32 const* itemIdPtr = std::get_if<uint32>(&itemArg))
itemId = *itemIdPtr;
else if (std::string_view const* itemNameText = std::get_if<std::string_view>(&itemArg))
@@ -1192,15 +1198,12 @@ public:
if (count == 0)
count = 1;
- std::vector<int32> bonusListIDs;
-
// semicolon separated bonuslist ids (parse them after all arguments are extracted by strtok!)
if (bonusListIdString)
for (std::string_view token : Trinity::Tokenize(*bonusListIdString, ';', false))
if (Optional<int32> bonusListId = Trinity::StringTo<int32>(token); bonusListId && *bonusListId)
bonusListIDs.push_back(*bonusListId);
- ItemContext itemContext = ItemContext::NONE;
if (itemContextArg)
{
itemContext = ItemContext(*itemContextArg);
@@ -1208,6 +1211,9 @@ public:
{
std::vector<int32> contextBonuses = ItemBonusMgr::GetBonusListsForItem(itemId, itemContext);
bonusListIDs.insert(bonusListIDs.begin(), contextBonuses.begin(), contextBonuses.end());
+ std::ranges::sort(bonusListIDs);
+ std::ranges::borrowed_subrange_t<std::vector<int>&> removed = std::ranges::unique(bonusListIDs);
+ bonusListIDs.erase(removed.begin(), removed.end());
}
}