mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-24 00:41:30 +00:00
Pass 3 - start to update trader functionality - WIP
This commit is contained in:
parent
51b40d5fdc
commit
08d9c2d4f6
@ -3729,6 +3729,15 @@ struct Trader_Struct {
|
||||
/*648*/ uint32 item_cost[EQ::invtype::BAZAAR_SIZE];
|
||||
};
|
||||
|
||||
struct Trader3_Struct {
|
||||
/*000*/ uint32 action;
|
||||
/*004*/ uint32 unknown_004;
|
||||
///*008*/ uint64 items[EQ::invtype::BAZAAR_SIZE];
|
||||
/*008*/ char serial_number[17][EQ::invtype::BAZAAR_SIZE];
|
||||
char unknown[1]{};
|
||||
/*648*/ uint32 item_cost[EQ::invtype::BAZAAR_SIZE];
|
||||
};
|
||||
|
||||
struct ClickTrader_Struct {
|
||||
/*000*/ uint32 action;
|
||||
/*004*/ uint32 unknown_004;
|
||||
|
||||
@ -4115,19 +4115,20 @@ namespace RoF2
|
||||
break;
|
||||
}
|
||||
case ListTraderItems: {
|
||||
ENCODE_LENGTH_EXACT(Trader_Struct);
|
||||
SETUP_DIRECT_ENCODE(Trader_Struct, structs::ClickTrader_Struct);
|
||||
ENCODE_LENGTH_EXACT(Trader3_Struct);
|
||||
SETUP_DIRECT_ENCODE(Trader3_Struct, structs::ClickTrader_Struct);
|
||||
LogTrading("(RoF2) action <green>[{}]", action);
|
||||
|
||||
eq->action = structs::RoF2BazaarTraderBuyerActions::ListTraderItems;
|
||||
std::transform(
|
||||
std::begin(emu->items),
|
||||
std::end(emu->items),
|
||||
std::begin(emu->serial_number),
|
||||
std::end(emu->serial_number),
|
||||
std::begin(eq->items),
|
||||
[&](const uint32 x) {
|
||||
[&](const char* x) {
|
||||
return x;
|
||||
}
|
||||
);
|
||||
// std::ranges::copy(emu->serial_number, eq->items.begin(), eq->items.end());
|
||||
std::copy_n(
|
||||
std::begin(emu->item_cost),
|
||||
EQ::invtype::BAZAAR_SIZE,
|
||||
@ -6159,7 +6160,15 @@ namespace RoF2
|
||||
|
||||
emu->action = TraderOn;
|
||||
std::copy_n(eq->item_cost, RoF2::invtype::BAZAAR_SIZE, emu->item_cost);
|
||||
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 std::string(x.serial_number);
|
||||
});
|
||||
//std::ranges::copy(eq->items->serial_number, emu->serial_number);
|
||||
//std::copy_n(eq->items->serial_number, RoF2::invtype::BAZAAR_SIZE, emu->serial_number);
|
||||
// std::transform(
|
||||
// std::begin(eq->items),
|
||||
// std::end(eq->items),
|
||||
|
||||
@ -3554,12 +3554,12 @@ struct WhoAllPlayerPart4 {
|
||||
};
|
||||
|
||||
struct TraderItemSerial_Struct {
|
||||
char serial_number[16];
|
||||
uint8 unknown_018[2];
|
||||
char serial_number[17];
|
||||
uint8 unknown_018;
|
||||
|
||||
void operator=(uint32 a) {
|
||||
auto _tmp = fmt::format("{:016}", a);
|
||||
strn0cpy(this->serial_number, _tmp.c_str(), sizeof(this->serial_number));
|
||||
void operator=(const char* a) {
|
||||
//auto _tmp = fmt::format("{:016}", a);
|
||||
strn0cpy(this->serial_number, a, sizeof(this->serial_number));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -756,19 +756,18 @@ bool Client::CheckTradeNonDroppable()
|
||||
|
||||
void Client::TraderShowItems()
|
||||
{
|
||||
auto outapp = new EQApplicationPacket(OP_Trader, sizeof(Trader_Struct));
|
||||
auto data = (Trader_Struct *) outapp->pBuffer;
|
||||
auto outapp = new EQApplicationPacket(OP_Trader, sizeof(Trader3_Struct));
|
||||
auto data = (Trader3_Struct *) outapp->pBuffer;
|
||||
|
||||
auto trader_items = TraderRepository::GetWhere(database, fmt::format("`char_id` = '{}'", CharacterID()));
|
||||
uint32 item_limit = trader_items.size() >= GetInv().GetLookup()->InventoryTypeSize.Bazaar ?
|
||||
GetInv().GetLookup()->InventoryTypeSize.Bazaar :
|
||||
trader_items.size();
|
||||
//FIX
|
||||
// for (int i = 0; i < item_limit; i++) {
|
||||
// data->item_cost[i] = trader_items.at(i).item_cost;
|
||||
// data->items[i] = ClientVersion() == EQ::versions::ClientVersion::RoF2 ? trader_items.at(i).item_sn
|
||||
// : trader_items.at(i).item_id;
|
||||
// }
|
||||
for (int i = 0; i < item_limit; i++) {
|
||||
data->item_cost[i] = trader_items.at(i).item_cost;
|
||||
strn0cpy(data->serial_number[i], trader_items.at(i).item_sn.data(), sizeof(data->serial_number[i]));
|
||||
}
|
||||
|
||||
data->action = ListTraderItems;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user