Pass 2 - change serial_number to string

This commit is contained in:
Mitch Freeman
2025-03-29 21:36:53 -03:00
parent c5dbd1a0c5
commit 51b40d5fdc
19 changed files with 207 additions and 170 deletions
+1 -1
View File
@@ -307,7 +307,7 @@ Bazaar::GetSearchResults(
r.trader_zone_id = t.trader.char_zone_id;
r.trader_zone_instance_id = t.trader.char_zone_instance_id;
r.trader_entity_id = t.trader.char_entity_id;
r.serial_number_RoF = fmt::format("{:016}\0", t.trader.item_sn);
r.serial_number_RoF = t.trader.item_sn;
r.item_name = fmt::format("{:.63}\0", item_results.at(t.trader.item_id).name);
r.trader_name = fmt::format("{:.63}\0", t.trader_name);
r.item_stat = item_results.at(t.trader.item_id).stats;
+25 -3
View File
@@ -3093,7 +3093,7 @@ struct BazaarSearchCriteria_Struct {
struct BazaarInspect_Struct {
uint32 action;
char player_name[64];
uint32 serial_number;
char serial_number[16];
uint32 item_id;
uint32 trader_id;
};
@@ -3742,6 +3742,28 @@ 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 ClickTrader2_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 GetItems2_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;
@@ -3795,7 +3817,7 @@ struct TraderItemUpdate_Struct{
struct TraderPriceUpdate_Struct {
/*000*/ uint32 Action;
/*004*/ uint32 SubAction;
/*008*/ int32 SerialNumber;
/*008*/ char serial_number[16];
/*012*/ uint32 Unknown012;
/*016*/ uint32 NewPrice;
/*020*/ uint32 Unknown016;
@@ -6418,7 +6440,7 @@ struct BazaarSearchResultsFromDB_Struct {
uint32 count;
uint32 trader_id;
uint32 item_id;
uint32 serial_number;
std::string serial_number;
uint32 charges;
uint32 cost;
uint32 slot_id;
+2 -1
View File
@@ -158,7 +158,8 @@ EQ::ItemInstance::ItemInstance(const ItemInstance& copy)
m_custom_data = copy.m_custom_data;
m_timers = copy.m_timers;
if (GetSerialNumber2().empty()) {
m_serial_number2 = copy.m_serial_number2;
if (copy.GetSerialNumber2().empty()) {
CreateSerialNumber2();
}
+1
View File
@@ -235,6 +235,7 @@ namespace EQ
int32 GetSerialNumber() const { return m_SerialNumber; }
void SetSerialNumber(int32 id) { m_SerialNumber = id; }
const std::string &GetSerialNumber2() const { return m_serial_number2; }
//std::string &GetSerialNumber2() const { return m_serial_number2; }
void SetSerialNumber2(std::string sn) { m_serial_number2 = std::move(sn); }
void CreateSerialNumber2()
+45 -35
View File
@@ -4256,6 +4256,7 @@ namespace RoF2
OUT_str(seller_name);
OUT_str(item_name);
OUT_str(serial_number);
//strn0cpy(eq->serial_number, emu->serial_number.c_str(), sizeof(eq->serial_number));
FINISH_ENCODE();
}
@@ -4321,6 +4322,7 @@ namespace RoF2
OUT_str(seller_name);
OUT_str(item_name);
OUT_str(serial_number);
//strn0cpy(eq->serial_number, emu->serial_number.c_str(), sizeof(eq->serial_number));
FINISH_ENCODE();
break;
@@ -6152,19 +6154,20 @@ namespace RoF2
switch (action) {
case structs::RoF2BazaarTraderBuyerActions::BeginTraderMode: {
DECODE_LENGTH_EXACT(structs::BeginTrader_Struct);
SETUP_DIRECT_DECODE(ClickTrader_Struct, structs::BeginTrader_Struct);
SETUP_DIRECT_DECODE(ClickTrader2_Struct, structs::BeginTrader_Struct);
LogTrading("(RoF2) BeginTraderMode action <green>[{}]", action);
emu->action = TraderOn;
std::copy_n(eq->item_cost, RoF2::invtype::BAZAAR_SIZE, emu->item_cost);
std::transform(
std::begin(eq->items),
std::end(eq->items),
std::begin(emu->serial_number),
[&](const structs::TraderItemSerial_Struct x) {
return Strings::ToUnsignedBigInt(x.serial_number,0);
}
);
std::copy_n(eq->items->serial_number, RoF2::invtype::BAZAAR_SIZE, emu->serial_number);
// std::transform(
// std::begin(eq->items),
// std::end(eq->items),
// std::begin(emu->serial_number),
// [&](const structs::TraderItemSerial_Struct x) {
// return Strings::ToUnsignedBigInt(x.serial_number,0);
// }
// );
FINISH_DIRECT_DECODE();
break;
@@ -6190,10 +6193,11 @@ namespace RoF2
LogTrading("(RoF2) PriceUpdate action <green>[{}]", action);
emu->Action = PriceUpdate;
emu->SerialNumber = Strings::ToUnsignedBigInt(eq->serial_number, 0);
if (emu->SerialNumber == 0) {
LogTrading("(RoF2) Price change with invalid serial number <red>[{}]", eq->serial_number);
}
strn0cpy(emu->serial_number, eq->serial_number, sizeof(emu->serial_number));
//FIXemu->serial_number = Strings::ToUnsignedBigInt(eq->serial_number, 0);
// if (emu->SerialNumber == 0) {
// LogTrading("(RoF2) Price change with invalid serial number <red>[{}]", eq->serial_number);
// }
emu->NewPrice = eq->new_price;
FINISH_DIRECT_DECODE();
@@ -6284,22 +6288,23 @@ namespace RoF2
IN(item_id);
IN(trader_id);
emu->action = BazaarInspect;
emu->serial_number = Strings::ToUnsignedInt(eq->serial_number, 0);
if (emu->serial_number == 0) {
LogTrading(
"(RoF2) trader_id = <green>[{}] requested a BazaarInspect with an invalid serial number of <red>[{}]",
eq->trader_id,
eq->serial_number
);
FINISH_DIRECT_DECODE();
return;
}
strn0cpy(emu->serial_number, eq->serial_number, sizeof(emu->serial_number));
//FIX emu->serial_number = Strings::ToUnsignedInt(eq->serial_number, 0);
// if (emu->serial_number == 0) {
// LogTrading(
// "(RoF2) trader_id = <green>[{}] requested a BazaarInspect with an invalid serial number of <red>[{}]",
// eq->trader_id,
// eq->serial_number
// );
// FINISH_DIRECT_DECODE();
// return;
// }
LogTrading("(RoF2) BazaarInspect action <green>[{}] item_id <green>[{}] serial_number <green>[{}]",
action,
eq->item_id,
eq->serial_number
);
// LogTrading("(RoF2) BazaarInspect action <green>[{}] item_id <green>[{}] serial_number <green>[{}]",
// action,
// eq->item_id,
// eq->serial_number
// );
FINISH_DIRECT_DECODE();
break;
}
@@ -6335,7 +6340,9 @@ namespace RoF2
IN_str(buyer_name);
IN_str(seller_name);
IN_str(item_name);
IN_str(serial_number);
//IN_str(serial_number);
strn0cpy(emu->serial_number, eq->serial_number, sizeof(emu->serial_number));
//FIX emu->serial_number = eq->serial_number;
FINISH_DIRECT_DECODE();
break;
@@ -6446,14 +6453,17 @@ namespace RoF2
RoF2::structs::ItemSerializationHeader hdr;
//sprintf(hdr.unknown000, "06e0002Y1W00");
// strn0cpy(hdr.unknown000, fmt::format("{:016}\0", inst->GetSerialNumber()).c_str(),sizeof(hdr.unknown000));
strn0cpy(
hdr.unknown000,
inst->GetSerialNumber2().empty() ? "0000000000000000" : inst->GetSerialNumber2().c_str(),
sizeof(hdr.unknown000)
);
//strn0cpy(hdr.unknown000, fmt::format("{:016}\0", inst->GetSerialNumber()).c_str(),sizeof(hdr.unknown000));
strn0cpy(hdr.unknown000, inst->GetSerialNumber2().c_str(),sizeof(hdr.unknown000));
hdr.unknown000[16] = '\0';
// strn0cpy(
// hdr.unknown000,
// inst->GetSerialNumber2().empty() ? "0000000000000000" : inst->GetSerialNumber2().c_str(),
// sizeof(hdr.unknown000)
// );
//hdr.unknown000[16] = '\0';
hdr.stacksize = 1;
if (item->ID == PARCEL_MONEY_ITEM_ID) {
+2 -2
View File
@@ -3554,8 +3554,8 @@ struct WhoAllPlayerPart4 {
};
struct TraderItemSerial_Struct {
char serial_number[17];
uint8 unknown_018;
char serial_number[16];
uint8 unknown_018[2];
void operator=(uint32 a) {
auto _tmp = fmt::format("{:016}", a);
+2 -2
View File
@@ -228,7 +228,7 @@ namespace Titanium
VARSTRUCT_ENCODE_TYPE(uint32, bufptr, row->trader_entity_id);
bufptr += 4;
VARSTRUCT_ENCODE_TYPE(int32, bufptr, row->item_id);
VARSTRUCT_ENCODE_TYPE(int32, bufptr, row->serial_number);
//FIX VARSTRUCT_ENCODE_TYPE(int32, bufptr, row->serial_number);
bufptr += 4;
if (row->stackable) {
strn0cpy(
@@ -2529,7 +2529,7 @@ namespace Titanium
IN(action);
memcpy(emu->player_name, eq->player_name, sizeof(emu->player_name));
IN(serial_number);
//FIXIN(serial_number);
FINISH_DIRECT_DECODE();
break;
+2 -2
View File
@@ -338,7 +338,7 @@ namespace UF
bufptr += 64;
VARSTRUCT_ENCODE_TYPE(uint32, bufptr, 1);
VARSTRUCT_ENCODE_TYPE(int32, bufptr, row->item_id);
VARSTRUCT_ENCODE_TYPE(int32, bufptr, row->serial_number);
//FIX VARSTRUCT_ENCODE_TYPE(int32, bufptr, row->serial_number);
bufptr += 4;
if (row->stackable) {
strn0cpy(
@@ -3618,7 +3618,7 @@ namespace UF
IN(action);
memcpy(emu->player_name, eq->player_name, sizeof(emu->player_name));
IN(serial_number);
//FIXIN(serial_number);
FINISH_DIRECT_DECODE();
break;
@@ -19,24 +19,24 @@
class BaseTraderRepository {
public:
struct Trader {
uint64_t id;
uint32_t char_id;
uint32_t item_id;
uint32_t aug_slot_1;
uint32_t aug_slot_2;
uint32_t aug_slot_3;
uint32_t aug_slot_4;
uint32_t aug_slot_5;
uint32_t aug_slot_6;
uint32_t item_sn;
int32_t item_charges;
uint32_t item_cost;
uint8_t slot_id;
uint32_t char_entity_id;
uint32_t char_zone_id;
int32_t char_zone_instance_id;
uint8_t active_transaction;
time_t listing_date;
uint64_t id;
uint32_t char_id;
uint32_t item_id;
uint32_t aug_slot_1;
uint32_t aug_slot_2;
uint32_t aug_slot_3;
uint32_t aug_slot_4;
uint32_t aug_slot_5;
uint32_t aug_slot_6;
std::string item_sn;
int32_t item_charges;
uint32_t item_cost;
uint8_t slot_id;
uint32_t char_entity_id;
uint32_t char_zone_id;
int32_t char_zone_instance_id;
uint8_t active_transaction;
time_t listing_date;
};
static std::string PrimaryKey()
@@ -138,7 +138,7 @@ public:
e.aug_slot_4 = 0;
e.aug_slot_5 = 0;
e.aug_slot_6 = 0;
e.item_sn = 0;
e.item_sn = "";
e.item_charges = 0;
e.item_cost = 0;
e.slot_id = 0;
@@ -192,7 +192,7 @@ public:
e.aug_slot_4 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_slot_5 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.aug_slot_6 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.item_sn = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.item_sn = row[9] ? row[9] : "";
e.item_charges = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.item_cost = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.slot_id = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
@@ -242,7 +242,7 @@ public:
v.push_back(columns[6] + " = " + std::to_string(e.aug_slot_4));
v.push_back(columns[7] + " = " + std::to_string(e.aug_slot_5));
v.push_back(columns[8] + " = " + std::to_string(e.aug_slot_6));
v.push_back(columns[9] + " = " + std::to_string(e.item_sn));
v.push_back(columns[9] + " = '" + Strings::Escape(e.item_sn) + "'");
v.push_back(columns[10] + " = " + std::to_string(e.item_charges));
v.push_back(columns[11] + " = " + std::to_string(e.item_cost));
v.push_back(columns[12] + " = " + std::to_string(e.slot_id));
@@ -281,7 +281,7 @@ public:
v.push_back(std::to_string(e.aug_slot_4));
v.push_back(std::to_string(e.aug_slot_5));
v.push_back(std::to_string(e.aug_slot_6));
v.push_back(std::to_string(e.item_sn));
v.push_back("'" + Strings::Escape(e.item_sn) + "'");
v.push_back(std::to_string(e.item_charges));
v.push_back(std::to_string(e.item_cost));
v.push_back(std::to_string(e.slot_id));
@@ -328,7 +328,7 @@ public:
v.push_back(std::to_string(e.aug_slot_4));
v.push_back(std::to_string(e.aug_slot_5));
v.push_back(std::to_string(e.aug_slot_6));
v.push_back(std::to_string(e.item_sn));
v.push_back("'" + Strings::Escape(e.item_sn) + "'");
v.push_back(std::to_string(e.item_charges));
v.push_back(std::to_string(e.item_cost));
v.push_back(std::to_string(e.slot_id));
@@ -379,7 +379,7 @@ public:
e.aug_slot_4 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_slot_5 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.aug_slot_6 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.item_sn = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.item_sn = row[9] ? row[9] : "";
e.item_charges = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.item_cost = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.slot_id = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
@@ -421,7 +421,7 @@ public:
e.aug_slot_4 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.aug_slot_5 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.aug_slot_6 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.item_sn = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.item_sn = row[9] ? row[9] : "";
e.item_charges = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.item_cost = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.slot_id = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;
@@ -513,7 +513,7 @@ public:
v.push_back(std::to_string(e.aug_slot_4));
v.push_back(std::to_string(e.aug_slot_5));
v.push_back(std::to_string(e.aug_slot_6));
v.push_back(std::to_string(e.item_sn));
v.push_back("'" + Strings::Escape(e.item_sn) + "'");
v.push_back(std::to_string(e.item_charges));
v.push_back(std::to_string(e.item_cost));
v.push_back(std::to_string(e.slot_id));
@@ -553,7 +553,7 @@ public:
v.push_back(std::to_string(e.aug_slot_4));
v.push_back(std::to_string(e.aug_slot_5));
v.push_back(std::to_string(e.aug_slot_6));
v.push_back(std::to_string(e.item_sn));
v.push_back("'" + Strings::Escape(e.item_sn) + "'");
v.push_back(std::to_string(e.item_charges));
v.push_back(std::to_string(e.item_cost));
v.push_back(std::to_string(e.slot_id));
+4 -20
View File
@@ -179,7 +179,7 @@ public:
return item;
}
static int UpdateQuantity(Database &db, uint32 char_id, uint32 serial_number, int16 quantity)
static int UpdateQuantity(Database &db, uint32 char_id, const std::string &serial_number, int16 quantity)
{
const auto trader_item = GetWhere(
db,
@@ -197,7 +197,7 @@ public:
return UpdateOne(db, m);
}
static Trader GetItemBySerialNumber(Database &db, uint32 serial_number, uint32 trader_id)
static Trader GetItemBySerialNumber(Database &db, std::string &serial_number, uint32 trader_id)
{
Trader e{};
const auto trader_item = GetWhere(
@@ -212,22 +212,6 @@ public:
return trader_item.at(0);
}
static Trader GetItemBySerialNumber(Database &db, std::string serial_number, uint32 trader_id)
{
Trader e{};
auto sn = Strings::ToUnsignedBigInt(serial_number);
const auto trader_item = GetWhere(
db,
fmt::format("`char_id` = '{}' AND `item_sn` = '{}' LIMIT 1", trader_id, sn)
);
if (trader_item.empty()) {
return e;
}
return trader_item.at(0);
}
static int UpdateActiveTransaction(Database &db, uint32 id, bool status)
{
auto e = FindOne(db, id);
@@ -259,7 +243,7 @@ public:
static DistinctTraders_Struct GetTraderByInstanceAndSerialnumber(
Database &db,
uint32 instance_id,
const char *serial_number
std::string &serial_number
)
{
DistinctTraders_Struct trader{};
@@ -319,7 +303,7 @@ public:
e.trader.aug_slot_4 = row[6] ? static_cast<uint32_t>(strtoul(row[6], nullptr, 10)) : 0;
e.trader.aug_slot_5 = row[7] ? static_cast<uint32_t>(strtoul(row[7], nullptr, 10)) : 0;
e.trader.aug_slot_6 = row[8] ? static_cast<uint32_t>(strtoul(row[8], nullptr, 10)) : 0;
e.trader.item_sn = row[9] ? static_cast<uint32_t>(strtoul(row[9], nullptr, 10)) : 0;
e.trader.item_sn = row[9] ? row[9] : std::string("");
e.trader.item_charges = row[10] ? static_cast<int32_t>(atoi(row[10])) : 0;
e.trader.item_cost = row[11] ? static_cast<uint32_t>(strtoul(row[11], nullptr, 10)) : 0;
e.trader.slot_id = row[12] ? static_cast<uint8_t>(strtoul(row[12], nullptr, 10)) : 0;