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;