From 3443cb26327c04b5fea1fea9fe4b546f33a9d36b Mon Sep 17 00:00:00 2001 From: morfidon <57798071+morfidon@users.noreply.github.com> Date: Tue, 10 Mar 2026 14:05:30 +0100 Subject: [PATCH] Extract shared identify-all item helpers --- Source/items.cpp | 31 +++++++++++++++++++++++++++++++ Source/items.h | 3 +++ Source/objects.cpp | 8 +------- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Source/items.cpp b/Source/items.cpp index 2f6ce462c..7cacdbc06 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -3816,6 +3816,37 @@ void GetItemStr(Item &item) } } +bool IsItemIdentifiableByStoryteller(const Item &item) +{ + if (item.isEmpty()) { + return false; + } + if (item._iMagical == ITEM_QUALITY_NORMAL) { + return false; + } + return !item._iIdentified; +} + +int CountIdentifiablePlayerItems(const Player &player) +{ + return static_cast(std::count_if(PlayerItemsRange { player }.begin(), PlayerItemsRange { player }.end(), [](const Item &item) { + return IsItemIdentifiableByStoryteller(item); + })); +} + +int IdentifyPlayerItems(Player &player) +{ + const int identifiedItemCount = static_cast(std::count_if(PlayerItemsRange { player }.begin(), PlayerItemsRange { player }.end(), [](Item &item) { + if (!IsItemIdentifiableByStoryteller(item)) { + return false; + } + item._iIdentified = true; + return true; + })); + CalcPlrInv(player, true); + return identifiedItemCount; +} + void CheckIdentify(Player &player, int cii) { Item *pi; diff --git a/Source/items.h b/Source/items.h index 9c855a405..3695fe0c7 100644 --- a/Source/items.h +++ b/Source/items.h @@ -545,6 +545,9 @@ void ProcessItems(); void FreeItemGFX(); void GetItemFrm(Item &item); void GetItemStr(Item &item); +bool IsItemIdentifiableByStoryteller(const Item &item); +int CountIdentifiablePlayerItems(const Player &player); +int IdentifyPlayerItems(Player &player); void CheckIdentify(Player &player, int cii); void DoRepair(Player &player, int cii); void DoRecharge(Player &player, int cii); diff --git a/Source/objects.cpp b/Source/objects.cpp index b489fa3d7..54c7d342e 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2745,13 +2745,7 @@ void OperateShrineGlimmering(Player &player) if (&player != MyPlayer) return; - for (Item &item : PlayerItemsRange { player }) { - if (item._iMagical != ITEM_QUALITY_NORMAL && !item._iIdentified) { - item._iIdentified = true; - } - } - - CalcPlrInv(player, true); + IdentifyPlayerItems(player); RedrawEverything(); InitDiabloMsg(EMSG_SHRINE_GLIMMERING);