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(); 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) EQ::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges)
{ {
m_item = db->GetItem(item_id); m_item = db->GetItem(item_id);

View File

@ -85,6 +85,8 @@ namespace EQ
ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges = 0); 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(ItemInstTypes use_type);
ItemInstance(const ItemInstance& copy); ItemInstance(const ItemInstance& copy);

View File

@ -1413,7 +1413,7 @@ EQ::ItemInstance* SharedDatabase::CreateItem(
return inst; 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; EQ::ItemInstance* inst = nullptr;
if (item) { if (item) {
// if maxcharges is -1 that means it is an unlimited use 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; charges = 1;
} }
inst = new EQ::ItemInstance(item, charges); inst = new EQ::ItemInstance(item, item_unique_id, charges);
if (!inst) { if (!inst) {
LogError("Error: valid item data returned a null reference for EQ::ItemInstance creation in SharedDatabase::CreateBaseItem()"); 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 ornamentidfile = 0,
uint32 ornament_hero_model = 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 GetItemsCount(int32& item_count, uint32& max_id);
void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id);

View File

@ -875,7 +875,7 @@ bool WorldDatabase::GetCharSelInventory(
continue; 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) { if (!inst) {
continue; continue;