From a81ec11ea31dce215211d43f08f32bc910399432 Mon Sep 17 00:00:00 2001 From: neckkola <65987027+neckkola@users.noreply.github.com> Date: Sun, 27 Apr 2025 13:34:37 -0300 Subject: [PATCH] WIP for world item unique id for CharSelect Screen --- common/item_instance.cpp | 25 ++++++++++++++++++++++++- common/item_instance.h | 2 ++ common/shareddb.cpp | 4 ++-- common/shareddb.h | 2 +- world/worlddb.cpp | 2 +- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/common/item_instance.cpp b/common/item_instance.cpp index c3a246936..37c826920 100644 --- a/common/item_instance.cpp +++ b/common/item_instance.cpp @@ -89,6 +89,29 @@ EQ::ItemInstance::ItemInstance(const ItemData* item, int16 charges) m_SerialNumber = GetNextItemInstSerialNumber(); } +EQ::ItemInstance::ItemInstance(const ItemData *item, const std::string &item_unique_id, int16 charges) +{ + if (item) { + m_item = new ItemData(*item); + } + + m_charges = charges; + + if (m_item && m_item->IsClassCommon()) { + m_color = m_item->Color; + } + + if (m_item && IsEvolving()) { + SetTimer("evolve", RuleI(EvolvingItems, DelayUponEquipping)); + } + + m_SerialNumber = GetNextItemInstSerialNumber(); + + if (m_item && !item_unique_id.empty()) { + SetUniqueID(item_unique_id); + } +} + EQ::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges) { m_item = db->GetItem(item_id); @@ -2019,4 +2042,4 @@ std::string EQ::ItemInstance::GenerateUniqueID() LogInventoryDetail("Generated an item serial number {}", unique_hash); return unique_hash; -} \ No newline at end of file +} diff --git a/common/item_instance.h b/common/item_instance.h index 22f25b6ad..501635d67 100644 --- a/common/item_instance.h +++ b/common/item_instance.h @@ -85,6 +85,8 @@ namespace EQ ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges = 0); + ItemInstance(const ItemData *item, const std::string &item_unique_id, int16 charges = 0); + ItemInstance(ItemInstTypes use_type); ItemInstance(const ItemInstance& copy); diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 26f7a38f7..2d805cbfe 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1413,7 +1413,7 @@ EQ::ItemInstance* SharedDatabase::CreateItem( return inst; } -EQ::ItemInstance* SharedDatabase::CreateBaseItem(const EQ::ItemData* item, int16 charges) { +EQ::ItemInstance* SharedDatabase::CreateBaseItem(const EQ::ItemData* item, int16 charges, const std::string &item_unique_id) { EQ::ItemInstance* inst = nullptr; if (item) { // if maxcharges is -1 that means it is an unlimited use item. @@ -1427,7 +1427,7 @@ EQ::ItemInstance* SharedDatabase::CreateBaseItem(const EQ::ItemData* item, int16 charges = 1; } - inst = new EQ::ItemInstance(item, charges); + inst = new EQ::ItemInstance(item, item_unique_id, charges); if (!inst) { LogError("Error: valid item data returned a null reference for EQ::ItemInstance creation in SharedDatabase::CreateBaseItem()"); diff --git a/common/shareddb.h b/common/shareddb.h index 2a78be670..6366075b3 100644 --- a/common/shareddb.h +++ b/common/shareddb.h @@ -155,7 +155,7 @@ public: uint32 ornamentidfile = 0, uint32 ornament_hero_model = 0 ); - EQ::ItemInstance *CreateBaseItem(const EQ::ItemData *item, int16 charges = 0); + EQ::ItemInstance *CreateBaseItem(const EQ::ItemData *item, int16 charges = 0, const std::string &item_unique_id = ""); void GetItemsCount(int32& item_count, uint32& max_id); void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); diff --git a/world/worlddb.cpp b/world/worlddb.cpp index f47cdb608..f899a4ba6 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -875,7 +875,7 @@ bool WorldDatabase::GetCharSelInventory( continue; } - EQ::ItemInstance *inst = content_db.CreateBaseItem(item, e.charges); + EQ::ItemInstance *inst = content_db.CreateBaseItem(item, e.charges, e.item_unique_id); if (!inst) { continue;