WIP for world item unique id for CharSelect Screen

This commit is contained in:
neckkola 2025-04-27 13:34:37 -03:00 committed by Mitch Freeman
parent 8c6a99dc18
commit a81ec11ea3
5 changed files with 30 additions and 5 deletions

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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()");

View File

@ -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);

View File

@ -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;