mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +00:00
[Feature] Add Alternate Bazaar Search Approach (#4600)
* Add Alternate Bazaar Search This adds an alternate bazaar search allowing multinstance bazaar searching and traders above 600. Allows searches based on Bazaar Shard * Update worldserver.cpp --------- Co-authored-by: Mitch Freeman <neckkola@gmail.com> Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
+57
-6
@@ -3222,11 +3222,42 @@ void Client::SendBulkBazaarTraders()
|
||||
return;
|
||||
}
|
||||
|
||||
auto results = TraderRepository::GetDistinctTraders(
|
||||
database,
|
||||
GetInstanceID(),
|
||||
EQ::constants::StaticLookup(ClientVersion())->BazaarTraderLimit
|
||||
);
|
||||
TraderRepository::BulkTraders_Struct results{};
|
||||
|
||||
if (RuleB(Bazaar, UseAlternateBazaarSearch))
|
||||
{
|
||||
if (GetZoneID() == Zones::BAZAAR) {
|
||||
results = TraderRepository::GetDistinctTraders(database, GetInstanceID());
|
||||
}
|
||||
|
||||
uint32 number = 1;
|
||||
auto shards = CharacterDataRepository::GetInstanceZonePlayerCounts(database, Zones::BAZAAR);
|
||||
for (auto const &shard: shards) {
|
||||
if (GetZoneID() != Zones::BAZAAR || (GetZoneID() == Zones::BAZAAR && GetInstanceID() != shard.instance_id)) {
|
||||
|
||||
TraderRepository::DistinctTraders_Struct t{};
|
||||
t.entity_id = 0;
|
||||
t.trader_id = TraderRepository::TRADER_CONVERT_ID + shard.instance_id;
|
||||
t.trader_name = fmt::format("Bazaar Shard {}", number);
|
||||
t.zone_id = Zones::BAZAAR;
|
||||
t.zone_instance_id = shard.instance_id;
|
||||
results.count += 1;
|
||||
results.name_length += t.trader_name.length() + 1;
|
||||
results.traders.push_back(t);
|
||||
}
|
||||
|
||||
number++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
results = TraderRepository::GetDistinctTraders(
|
||||
database,
|
||||
GetInstanceID(),
|
||||
EQ::constants::StaticLookup(ClientVersion())->BazaarTraderLimit
|
||||
);
|
||||
}
|
||||
|
||||
SetTraderCount(results.count);
|
||||
|
||||
SetTraderCount(results.count);
|
||||
|
||||
@@ -3251,8 +3282,28 @@ void Client::SendBulkBazaarTraders()
|
||||
QueuePacket(outapp.get());
|
||||
}
|
||||
|
||||
void Client::DoBazaarInspect(const BazaarInspect_Struct &in)
|
||||
void Client::DoBazaarInspect(BazaarInspect_Struct &in)
|
||||
{
|
||||
if (RuleB(Bazaar, UseAlternateBazaarSearch)) {
|
||||
if (in.trader_id >= TraderRepository::TRADER_CONVERT_ID) {
|
||||
auto trader = TraderRepository::GetTraderByInstanceAndSerialnumber(
|
||||
database,
|
||||
in.trader_id - TraderRepository::TRADER_CONVERT_ID,
|
||||
fmt::format("{}", in.serial_number).c_str()
|
||||
);
|
||||
|
||||
if (!trader.trader_id) {
|
||||
LogTrading("Unable to convert trader id for {} and serial number {}. Trader Buy aborted.",
|
||||
in.trader_id - TraderRepository::TRADER_CONVERT_ID,
|
||||
in.serial_number
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
in.trader_id = trader.trader_id;
|
||||
}
|
||||
}
|
||||
|
||||
auto items = TraderRepository::GetWhere(
|
||||
database, fmt::format("`char_id` = '{}' AND `item_sn` = '{}'", in.trader_id, in.serial_number)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user