This commit is contained in:
Mitch Freeman
2025-04-13 15:34:13 -03:00
parent b06ca47d46
commit a0450ac39e
6 changed files with 118 additions and 129 deletions
+56 -56
View File
@@ -265,7 +265,7 @@ Bazaar::GetSearchResults(
std::unordered_set<std::string> trader_items_ids{};
// auto const trader_results = TraderRepository::GetBazaarTraderDetails(db, search_criteria_trader, search.max_results);
auto const item_results = TraderRepository::GetBazaarTraderDetails(
auto const trader_results = TraderRepository::GetBazaarTraderDetails(
db,
search_criteria_trader,
search.item_name,
@@ -274,37 +274,66 @@ Bazaar::GetSearchResults(
search.max_results
);
// if (trader_results.empty()) {
// LogTradingDetail("Bazaar - No traders found in bazaar search.");
// return all_entries;
// }
if (trader_results.empty()) {
LogTradingDetail("Bazaar - No traders found in bazaar search.");
return all_entries;
}
// for (auto const &i: trader_results) {
// trader_items_ids.emplace(std::to_string(i.trader.item_id));
// //trader_items_ids.push_back(std::to_string(i.trader.item_id));
// }
for (auto const &i: trader_results) {
trader_items_ids.emplace(std::to_string(i.trader.item_id));
//trader_items_ids.push_back(std::to_string(i.trader.item_id));
}
// auto const item_results = ItemsRepository::GetItemsForBazaarSearch(
// content_db,
// trader_items_ids,
// std::string(search.item_name),
// field_criteria_items,
// where_criteria_items,
// search.max_results
// );
auto const item_results = ItemsRepository::GetItemsForBazaarSearch(
content_db,
trader_items_ids,
std::string(search.item_name),
field_criteria_items,
where_criteria_items,
search.max_results
);
if (item_results.empty()) {
LogTradingDetail("Bazaar - No items found in bazaar search.");
return all_entries;
}
//all_entries.reserve(trader_results.size());
all_entries.reserve(trader_results.size());
// for (auto const& t:trader_results) {
// if (!item_results.contains(t.trader.item_id)) {
// continue;
// }
//
for (auto const& t:trader_results) {
if (!item_results.contains(t.trader.item_id)) {
continue;
}
BazaarSearchResultsFromDB_Struct r{};
r.count = 1;
r.trader_id = t.trader.character_id;
r.item_unique_id = t.trader.item_unique_id;
r.cost = t.trader.item_cost;
r.slot_id = t.trader.slot_id;
r.charges = t.trader.item_charges;
r.stackable = item_results.at(t.trader.item_id).stackable;
r.icon_id = item_results.at(t.trader.item_id).icon;
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.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;
if (RuleB(Bazaar, UseAlternateBazaarSearch)) {
if (convert ||
char_zone_id != Zones::BAZAAR ||
(char_zone_id == Zones::BAZAAR && r.trader_zone_instance_id != char_zone_instance_id)
) {
r.trader_id = TraderRepository::TRADER_CONVERT_ID + r.trader_zone_instance_id;
}
}
all_entries.push_back(r);
}
// for (auto const& t:item_results) {
// BazaarSearchResultsFromDB_Struct r{};
// r.count = 1;
// r.trader_id = t.trader.character_id;
@@ -312,14 +341,14 @@ Bazaar::GetSearchResults(
// r.cost = t.trader.item_cost;
// r.slot_id = t.trader.slot_id;
// r.charges = t.trader.item_charges;
// r.stackable = item_results.at(t.trader.item_id).stackable;
// r.icon_id = item_results.at(t.trader.item_id).icon;
// r.stackable = t.stackable;
// r.icon_id = t.icon;
// 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.item_name = fmt::format("{:.63}\0", item_results.at(t.trader.item_id).name);
// r.item_name = fmt::format("{:.63}\0", t.name);
// r.trader_name = fmt::format("{:.63}\0", t.trader_name);
// r.item_stat = item_results.at(t.trader.item_id).stats;
// r.item_stat = t.stats;
//
// if (RuleB(Bazaar, UseAlternateBazaarSearch)) {
// if (convert ||
@@ -333,35 +362,6 @@ Bazaar::GetSearchResults(
// all_entries.push_back(r);
// }
for (auto const& t:item_results) {
BazaarSearchResultsFromDB_Struct r{};
r.count = 1;
r.trader_id = t.trader.character_id;
r.item_unique_id = t.trader.item_unique_id;
r.cost = t.trader.item_cost;
r.slot_id = t.trader.slot_id;
r.charges = t.trader.item_charges;
r.stackable = t.stackable;
r.icon_id = t.icon;
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.item_name = fmt::format("{:.63}\0", t.name);
r.trader_name = fmt::format("{:.63}\0", t.trader_name);
r.item_stat = t.stats;
if (RuleB(Bazaar, UseAlternateBazaarSearch)) {
if (convert ||
char_zone_id != Zones::BAZAAR ||
(char_zone_id == Zones::BAZAAR && r.trader_zone_instance_id != char_zone_instance_id)
) {
r.trader_id = TraderRepository::TRADER_CONVERT_ID + r.trader_zone_instance_id;
}
}
all_entries.push_back(r);
}
// if (all_entries.size() > search.max_results) {
// all_entries.resize(search.max_results);
// }
+16 -16
View File
@@ -3616,22 +3616,22 @@ struct TraderStatus_Struct {
};
struct TraderBuy_Struct {
/*000*/ uint32 action;
/*004*/ uint32 method;
/*008*/ uint32 sub_action;
/*012*/ uint32 unknown_012;
/*016*/ uint32 trader_id;
/*020*/ char buyer_name[64];
/*084*/ char seller_name[64];
/*148*/ char unknown_148[32];
/*180*/ char item_name[64];
/*244*/ char item_unique_id[17];
/*261*/ char unknown_261[3];
/*264*/ uint32 item_id;
/*268*/ uint32 price;
/*272*/ uint32 already_sold;
/*276*/ uint32 unknown_276;
/*280*/ uint32 quantity;
/*000*/ uint32 action;
/*004*/ uint32 method;
/*008*/ uint32 sub_action;
/*012*/ uint32 unknown_012;
/*016*/ uint32 trader_id;
/*020*/ char buyer_name[64];
/*084*/ char seller_name[64];
/*148*/ char unknown_148[32];
/*180*/ char item_name[64];
/*244*/ char item_unique_id[17];
/*261*/ char unknown_261[3];
/*264*/ uint32 item_id;
/*268*/ uint32 price;
/*272*/ uint32 already_sold;
/*276*/ uint32 unknown_276;
/*280*/ uint32 quantity;
/*284*/
};
+33 -33
View File
@@ -309,41 +309,41 @@ public:
{
std::vector<BazaarTraderSearch_Struct> all_entries{};
auto query_2 = fmt::format(
"WITH ranked_trader_items AS ("
"SELECT trader.id, trader.character_id, trader.item_id, trader.item_unique_id, trader.augment_one, "
"trader.augment_two, trader.augment_three, trader.augment_four, trader.augment_five, trader.augment_six, "
"trader.item_charges, trader.item_cost, trader.slot_id, trader.char_entity_id, trader.char_zone_id, "
"trader.char_zone_instance_id, trader.active_transaction, c.`name`, "
"items.name AS n1, items.stackable, items.icon, {}, "
"ROW_NUMBER() OVER (PARTITION BY trader.character_id) AS row_num "
"FROM trader "
"INNER JOIN character_data AS c ON trader.character_id = c.id "
"JOIN peq642024_content.items AS items ON trader.item_id = items.id "
"WHERE items.`name` LIKE '%{}%' AND {} AND {}"
") "
"SELECT * FROM ranked_trader_items "
"WHERE row_num <= '{}';",
field_criteria_items,
Strings::Escape(name),
where_criteria_items,
search_criteria_trader,
max_results
);
// auto query = fmt::format(
// auto query_2 = fmt::format(
// "WITH ranked_trader_items AS ("
// "SELECT trader.id, trader.character_id, trader.item_id, trader.item_unique_id, trader.augment_one, "
// "trader.augment_two, trader.augment_three, trader.augment_four, trader.augment_five, trader.augment_six, "
// "trader.item_charges, trader.item_cost, trader.slot_id, trader.char_entity_id, trader.char_zone_id, "
// "trader.char_zone_instance_id, trader.active_transaction, c.`name` FROM `trader` "
// "trader.char_zone_instance_id, trader.active_transaction, c.`name`, "
// "items.name AS n1, items.stackable, items.icon, {}, "
// "ROW_NUMBER() OVER (PARTITION BY trader.character_id) AS row_num "
// "FROM trader "
// "INNER JOIN character_data AS c ON trader.character_id = c.id "
// "WHERE {} "
// "GROUP BY trader.item_id "
// "ORDER BY trader.character_id ASC",
// search_criteria_trader
// "JOIN peq642024_content.items AS items ON trader.item_id = items.id "
// "WHERE items.`name` LIKE '%{}%' AND {} AND {}"
// ") "
// "SELECT * FROM ranked_trader_items "
// "WHERE row_num <= '{}';",
// field_criteria_items,
// Strings::Escape(name),
// where_criteria_items,
// search_criteria_trader,
// max_results
// );
auto results = db.QueryDatabase(query_2);
auto query = fmt::format(
"SELECT trader.id, trader.character_id, trader.item_id, trader.item_unique_id, trader.augment_one, "
"trader.augment_two, trader.augment_three, trader.augment_four, trader.augment_five, trader.augment_six, "
"trader.item_charges, trader.item_cost, trader.slot_id, trader.char_entity_id, trader.char_zone_id, "
"trader.char_zone_instance_id, trader.active_transaction, c.`name` FROM `trader` "
"INNER JOIN character_data AS c ON trader.character_id = c.id "
"WHERE {} "
"GROUP BY trader.item_id "
"ORDER BY trader.character_id ASC",
search_criteria_trader
);
auto results = db.QueryDatabase(query);
if (results.RowCount() == 0) {
return all_entries;
@@ -371,10 +371,10 @@ public:
e.trader.char_zone_instance_id = row[15] ? static_cast<int32_t>(atoi(row[15])) : 0;
e.trader.active_transaction = row[16] ? static_cast<uint8_t>(strtoul(row[16], nullptr, 10)) : 0;
e.trader_name = row[17] ? row[17] : std::string("");
e.name = row[18] ? row[18] : "";
e.stackable = atoi(row[19]) ? true : false;
e.icon = row[20] ? static_cast<int32_t>(atoi(row[20])) : 0;
e.stats = row[21] ? static_cast<int32_t>(atoi(row[21])) : 0;
// e.name = row[18] ? row[18] : "";
// e.stackable = atoi(row[19]) ? true : false;
// e.icon = row[20] ? static_cast<int32_t>(atoi(row[20])) : 0;
// e.stats = row[21] ? static_cast<int32_t>(atoi(row[21])) : 0;
all_entries.push_back(e);
}