Skip to content

Commit

Permalink
[Fix] Add Bazaar BulkSendTrader Limit for RoF2 (EQEmu#4590)
Browse files Browse the repository at this point in the history
Add Bazaar BulkSendTrader Limit
  • Loading branch information
neckkola authored and Akkadius committed Jan 8, 2025
1 parent b28dd6d commit 6be2348
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 14 deletions.
20 changes: 14 additions & 6 deletions common/eq_limits.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
ClientUnknown::constants::EXPANSION_BIT,
ClientUnknown::constants::EXPANSIONS_MASK,
ClientUnknown::INULL,
ClientUnknown::INULL,
ClientUnknown::INULL
),
/*[ClientVersion::Client62] =*/
Expand All @@ -55,6 +56,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
Client62::constants::EXPANSION_BIT,
Client62::constants::EXPANSIONS_MASK,
Client62::INULL,
Client62::INULL,
Client62::INULL
),
/*[ClientVersion::Titanium] =*/
Expand All @@ -63,47 +65,53 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
Titanium::constants::EXPANSION_BIT,
Titanium::constants::EXPANSIONS_MASK,
Titanium::constants::CHARACTER_CREATION_LIMIT,
Titanium::constants::SAY_LINK_BODY_SIZE
Titanium::constants::SAY_LINK_BODY_SIZE,
Titanium::INULL
),
/*[ClientVersion::SoF] =*/
EQ::constants::LookupEntry(
SoF::constants::EXPANSION,
SoF::constants::EXPANSION_BIT,
SoF::constants::EXPANSIONS_MASK,
SoF::constants::CHARACTER_CREATION_LIMIT,
SoF::constants::SAY_LINK_BODY_SIZE
SoF::constants::SAY_LINK_BODY_SIZE,
SoF::INULL
),
/*[ClientVersion::SoD] =*/
EQ::constants::LookupEntry(
SoD::constants::EXPANSION,
SoD::constants::EXPANSION_BIT,
SoD::constants::EXPANSIONS_MASK,
SoD::constants::CHARACTER_CREATION_LIMIT,
SoD::constants::SAY_LINK_BODY_SIZE
SoD::constants::SAY_LINK_BODY_SIZE,
SoD::INULL
),
/*[ClientVersion::UF] =*/
EQ::constants::LookupEntry(
UF::constants::EXPANSION,
UF::constants::EXPANSION_BIT,
UF::constants::EXPANSIONS_MASK,
UF::constants::CHARACTER_CREATION_LIMIT,
UF::constants::SAY_LINK_BODY_SIZE
UF::constants::SAY_LINK_BODY_SIZE,
UF::INULL
),
/*[ClientVersion::RoF] =*/
EQ::constants::LookupEntry(
RoF::constants::EXPANSION,
RoF::constants::EXPANSION_BIT,
RoF::constants::EXPANSIONS_MASK,
RoF::constants::CHARACTER_CREATION_LIMIT,
RoF::constants::SAY_LINK_BODY_SIZE
RoF::constants::SAY_LINK_BODY_SIZE,
RoF::INULL
),
/*[ClientVersion::RoF2] =*/
EQ::constants::LookupEntry(
RoF2::constants::EXPANSION,
RoF2::constants::EXPANSION_BIT,
RoF2::constants::EXPANSIONS_MASK,
RoF2::constants::CHARACTER_CREATION_LIMIT,
RoF2::constants::SAY_LINK_BODY_SIZE
RoF2::constants::SAY_LINK_BODY_SIZE,
RoF2::constants::MAX_BAZAAR_TRADERS
)
};

Expand Down
7 changes: 5 additions & 2 deletions common/eq_limits.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,23 @@ namespace EQ
uint32 ExpansionsMask;
int16 CharacterCreationLimit;
size_t SayLinkBodySize;
uint32 BazaarTraderLimit;

LookupEntry(const LookupEntry *lookup_entry) { }
LookupEntry(
EQ::expansions::Expansion Expansion,
uint32 ExpansionBit,
uint32 ExpansionsMask,
int16 CharacterCreationLimit,
size_t SayLinkBodySize
size_t SayLinkBodySize,
uint32 BazaarTraderLimit
) :
Expansion(Expansion),
ExpansionBit(ExpansionBit),
ExpansionsMask(ExpansionsMask),
CharacterCreationLimit(CharacterCreationLimit),
SayLinkBodySize(SayLinkBodySize)
SayLinkBodySize(SayLinkBodySize),
BazaarTraderLimit(BazaarTraderLimit)
{ }
};

Expand Down
1 change: 1 addition & 0 deletions common/patches/rof2_limits.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,7 @@ namespace RoF2

const size_t SAY_LINK_BODY_SIZE = 77;
const uint32 MAX_GUILD_ID = 50000;
const uint32 MAX_BAZAAR_TRADERS = 600;

} /*constants*/

Expand Down
4 changes: 2 additions & 2 deletions common/patches/titanium_limits.h
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,8 @@ namespace Titanium

const size_t CHARACTER_CREATION_LIMIT = 8; // Hard-coded in client - DO NOT ALTER

const size_t SAY_LINK_BODY_SIZE = 45;
const uint32 MAX_GUILD_ID = 1500;
const size_t SAY_LINK_BODY_SIZE = 45;
const uint32 MAX_GUILD_ID = 1500;

} /*constants*/

Expand Down
9 changes: 6 additions & 3 deletions common/repositories/trader_repository.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,18 @@ class TraderRepository : public BaseTraderRepository {
int32 char_zone_instance_id
);

static BulkTraders_Struct GetDistinctTraders(Database &db)
static BulkTraders_Struct GetDistinctTraders(Database &db, uint32 char_zone_instance_id, uint32 max_results)
{
BulkTraders_Struct all_entries{};
std::vector<DistinctTraders_Struct> distinct_traders;

auto results = db.QueryDatabase(
auto results = db.QueryDatabase(fmt::format(
"SELECT DISTINCT(t.char_id), t.char_zone_id, t.char_zone_instance_id, t.char_entity_id, c.name "
"FROM trader AS t "
"JOIN character_data AS c ON t.char_id = c.id LIMIT 600;"
"JOIN character_data AS c ON t.char_id = c.id "
"ORDER BY t.char_zone_instance_id = {} DESC LIMIT {};",
char_zone_instance_id,
max_results)
);

distinct_traders.reserve(results.RowCount());
Expand Down
7 changes: 6 additions & 1 deletion zone/trading.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3233,7 +3233,12 @@ void Client::SendBulkBazaarTraders()
return;
}

auto results = TraderRepository::GetDistinctTraders(database);
auto results = TraderRepository::GetDistinctTraders(
database,
GetInstanceID(),
EQ::constants::StaticLookup(ClientVersion())->BazaarTraderLimit
);

auto p_size = 4 + 12 * results.count + results.name_length;
auto buffer = std::make_unique<char[]>(p_size);
memset(buffer.get(), 0, p_size);
Expand Down

0 comments on commit 6be2348

Please sign in to comment.