Skip to content

Commit

Permalink
[Fix] Update trader add/remove packets to limits for RoF2 (#4595)
Browse files Browse the repository at this point in the history
* Update trader add/remove to limit for RoF2

Update trader add/remove to limit for RoF2

* Update for feedback

---------

Co-authored-by: Mitch Freeman <[email protected]>
  • Loading branch information
neckkola and Mitch Freeman authored Jan 19, 2025
1 parent 035c519 commit d47bf68
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 9 deletions.
5 changes: 5 additions & 0 deletions zone/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -1130,6 +1130,10 @@ class Client : public Mob
void SetTrader(bool status) { trader = status; }
uint16 GetTraderID() { return trader_id; }
void SetTraderID(uint16 id) { trader_id = id; }
void SetTraderCount(uint32 no) { m_trader_count = no; }
uint32 GetTraderCount() { return m_trader_count; }
void IncrementTraderCount() { m_trader_count += 1; }
void DecrementTraderCount() { m_trader_count > 0 ? m_trader_count -= 1 : m_trader_count = 0; }

eqFilterMode GetFilter(eqFilterType filter_id) const { return ClientFilters[filter_id]; }
void SetFilter(eqFilterType filter_id, eqFilterMode filter_mode) { ClientFilters[filter_id] = filter_mode; }
Expand Down Expand Up @@ -1948,6 +1952,7 @@ class Client : public Mob
uint8 firstlogon;
uint32 mercid; // current merc
uint8 mercSlot; // selected merc slot
uint32 m_trader_count{};
uint32 m_buyer_id;
uint32 m_barter_time;
int32 m_parcel_platinum;
Expand Down
2 changes: 2 additions & 0 deletions zone/trading.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3225,6 +3225,8 @@ void Client::SendBulkBazaarTraders()
EQ::constants::StaticLookup(ClientVersion())->BazaarTraderLimit
);

SetTraderCount(results.count);

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
27 changes: 18 additions & 9 deletions zone/worldserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3912,29 +3912,38 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
auto in = (TraderMessaging_Struct *) pack->pBuffer;
for (auto const &c: entity_list.GetClientList()) {
if (c.second->ClientVersion() >= EQ::versions::ClientVersion::RoF2) {
auto outapp = new EQApplicationPacket(OP_BecomeTrader, sizeof(BecomeTrader_Struct));
auto out = (BecomeTrader_Struct *) outapp->pBuffer;
auto outapp = new EQApplicationPacket(OP_BecomeTrader, sizeof(BecomeTrader_Struct));
auto out = (BecomeTrader_Struct *) outapp->pBuffer;

out->entity_id = in->entity_id;
out->zone_id = in->zone_id;
out->zone_instance_id = in->instance_id;
out->trader_id = in->trader_id;
strn0cpy(out->trader_name, in->trader_name, sizeof(out->trader_name));

switch (in->action) {
case TraderOn: {
out->action = AddTraderToBazaarWindow;
if (c.second->GetTraderCount() <
EQ::constants::StaticLookup(c.second->ClientVersion())->BazaarTraderLimit) {
c.second->IncrementTraderCount();
c.second->QueuePacket(outapp, true, Mob::CLIENT_CONNECTED);
}

break;
}
case TraderOff: {
out->action = RemoveTraderFromBazaarWindow;
c.second->DecrementTraderCount();
c.second->QueuePacket(outapp, true, Mob::CLIENT_CONNECTED);
break;
}
default: {
out->action = 0;
c.second->QueuePacket(outapp, true, Mob::CLIENT_CONNECTED);
}
}

out->entity_id = in->entity_id;
out->zone_id = in->zone_id;
out->zone_instance_id = in->instance_id;
out->trader_id = in->trader_id;
strn0cpy(out->trader_name, in->trader_name, sizeof(out->trader_name));

c.second->QueuePacket(outapp, true, Mob::CLIENT_CONNECTED);
safe_delete(outapp);
}
if (zone && zone->GetZoneID() == Zones::BAZAAR && in->instance_id == zone->GetInstanceID()) {
Expand Down

0 comments on commit d47bf68

Please sign in to comment.