Implement bazaar item identity and offline trading rework

This commit is contained in:
Vayle
2026-03-19 22:18:32 -04:00
90 changed files with 5379 additions and 2165 deletions
+95 -18
View File
@@ -327,6 +327,7 @@ union
bool buyer;
bool untargetable;
uint32 npc_tint_id;
bool offline;
};
struct PlayerState_Struct {
@@ -3094,7 +3095,7 @@ struct BazaarSearchCriteria_Struct {
struct BazaarInspect_Struct {
uint32 action;
char player_name[64];
uint32 serial_number;
char item_unique_id[17];
uint32 item_id;
uint32 trader_id;
};
@@ -3730,6 +3731,36 @@ struct Trader_Struct {
/*648*/ uint32 item_cost[EQ::invtype::BAZAAR_SIZE];
};
struct TraderItems_Struct {
std::string item_unique_id;
uint32 item_id;
uint64 item_cost;
template<class Archive>
void serialize(Archive &archive)
{
archive(
CEREAL_NVP(item_unique_id),
CEREAL_NVP(item_id),
CEREAL_NVP(item_cost)
);
}
};
struct TraderClientMessaging_Struct {
/*000*/ uint32 action;
/*008*/ std::vector<TraderItems_Struct> items;
template<class Archive>
void serialize(Archive &archive)
{
archive(
CEREAL_NVP(action),
CEREAL_NVP(items)
);
}
};
struct ClickTrader_Struct {
/*000*/ uint32 action;
/*004*/ uint32 unknown_004;
@@ -3743,6 +3774,52 @@ struct GetItems_Struct{
int32 charges[EQ::invtype::BAZAAR_SIZE];
};
struct Trader2_Struct {
uint32 action;
uint32 unknown_004;
uint64 items[EQ::invtype::BAZAAR_SIZE];
uint32 item_cost[EQ::invtype::BAZAAR_SIZE];
std::string serial_number[EQ::invtype::BAZAAR_SIZE];
};
struct BazaarTraderDetails {
uint64 item_id;
std::string unique_id;
uint64 cost;
uint64 serial_number; // backwards compatibility. Not used for RoF2 as of March 2025
template<class Archive>
void serialize(Archive &archive)
{
archive(
CEREAL_NVP(item_id),
CEREAL_NVP(unique_id),
CEREAL_NVP(cost),
CEREAL_NVP(serial_number)
);
}
};
struct ClickTraderNew_Struct {
uint32 action;
std::vector<BazaarTraderDetails> items;
template<class Archive>
void serialize(Archive &archive)
{
archive(
CEREAL_NVP(action),
CEREAL_NVP(items)
);
}
};
struct GetBazaarItems_Struct {
uint64 items[EQ::invtype::BAZAAR_SIZE];
std::string serial_number[EQ::invtype::BAZAAR_SIZE];
uint32 charges[EQ::invtype::BAZAAR_SIZE];
};
struct BecomeTrader_Struct {
uint32 action;
uint16 zone_id;
@@ -3775,7 +3852,7 @@ struct TraderBuy_Struct {
/*084*/ char seller_name[64];
/*148*/ char unknown_148[32];
/*180*/ char item_name[64];
/*244*/ char serial_number[17];
/*244*/ char item_unique_id[17];
/*261*/ char unknown_261[3];
/*264*/ uint32 item_id;
/*268*/ uint32 price;
@@ -3794,12 +3871,12 @@ struct TraderItemUpdate_Struct{
};
struct TraderPriceUpdate_Struct {
/*000*/ uint32 Action;
/*004*/ uint32 SubAction;
/*008*/ int32 SerialNumber;
/*012*/ uint32 Unknown012;
/*016*/ uint32 NewPrice;
/*020*/ uint32 Unknown016;
/*000*/ uint32 action;
/*002*/ uint32 sub_action;
/*004*/ char item_unique_id[17];
/*021*/ char unknown_021[3];
/*024*/ uint32 unknown_024;
/*028*/ uint32 new_price;
};
struct MoneyUpdate_Struct{
@@ -3814,6 +3891,7 @@ struct TraderDelItem_Struct{
uint32 trader_id;
uint32 item_id;
uint32 unknown_012;
char item_unique_id[17];
};
struct TraderClick_Struct{
@@ -3837,12 +3915,12 @@ struct SimpleMessage_Struct{
};
struct GuildMemberUpdate_Struct {
/*00*/ uint32 GuildID;
/*04*/ char MemberName[64];
/*68*/ uint16 ZoneID;
/*70*/ uint16 InstanceID; //speculated
/*72*/ uint32 LastSeen; //unix timestamp
/*76*/
/*00*/ uint32 GuildID;
/*04*/ char MemberName[64];
/*68*/ uint16 ZoneID;
/*72*/ uint16 InstanceID; //speculated
/*76*/ uint32 LastSeen; //unix timestamp
/*80*/ uint32 offline_mode;
};
struct GuildMemberLevelUpdate_Struct {
@@ -3865,6 +3943,7 @@ struct Internal_GuildMemberEntry_Struct {
uint16 zoneinstance; //network byte order
uint16 zone_id; //network byte order
uint32 online;
uint32 offline_mode;
};
struct Internal_GuildMembers_Struct { //just for display purposes, this is not actually used in the message encoding.
@@ -6419,7 +6498,7 @@ struct BazaarSearchResultsFromDB_Struct {
uint32 count;
uint32 trader_id;
uint32 item_id;
uint32 serial_number;
std::string item_unique_id;
uint32 charges;
uint32 cost;
uint32 slot_id;
@@ -6431,7 +6510,6 @@ struct BazaarSearchResultsFromDB_Struct {
uint32 item_stat;
bool stackable;
std::string item_name;
std::string serial_number_RoF;
std::string trader_name;
template<class Archive>
@@ -6441,7 +6519,7 @@ struct BazaarSearchResultsFromDB_Struct {
CEREAL_NVP(count),
CEREAL_NVP(trader_id),
CEREAL_NVP(item_id),
CEREAL_NVP(serial_number),
CEREAL_NVP(item_unique_id),
CEREAL_NVP(charges),
CEREAL_NVP(cost),
CEREAL_NVP(slot_id),
@@ -6453,7 +6531,6 @@ struct BazaarSearchResultsFromDB_Struct {
CEREAL_NVP(item_stat),
CEREAL_NVP(stackable),
CEREAL_NVP(item_name),
CEREAL_NVP(serial_number_RoF),
CEREAL_NVP(trader_name)
);
}