mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 16:51:29 +00:00
[Fix] Update trader add/remove packets to limits for RoF2 (#4595)
* Update trader add/remove to limit for RoF2 Update trader add/remove to limit for RoF2 * Update for feedback --------- Co-authored-by: Mitch Freeman <neckkola@gmail.com>
This commit is contained in:
parent
035c51944f
commit
d47bf687d0
@ -1130,6 +1130,10 @@ public:
|
||||
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; }
|
||||
@ -1948,6 +1952,7 @@ private:
|
||||
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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -3912,21 +3912,8 @@ 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;
|
||||
switch (in->action) {
|
||||
case TraderOn: {
|
||||
out->action = AddTraderToBazaarWindow;
|
||||
break;
|
||||
}
|
||||
case TraderOff: {
|
||||
out->action = RemoveTraderFromBazaarWindow;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
out->action = 0;
|
||||
}
|
||||
}
|
||||
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;
|
||||
@ -3934,7 +3921,29 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
safe_delete(outapp);
|
||||
}
|
||||
if (zone && zone->GetZoneID() == Zones::BAZAAR && in->instance_id == zone->GetInstanceID()) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user