diff options
author | Fedja Beader <fedja@protonmail.ch> | 2023-05-02 16:51:22 +0200 |
---|---|---|
committer | Administrator <admin@themanaworld.org> | 2023-08-16 10:47:10 +0000 |
commit | 5009e37678598cdfcf705e892f4b60a282bbd10d (patch) | |
tree | 49244a494a4aa95dd6e59d4cc389cfe04185b579 /src | |
parent | c5bc7240438be03fd0181be39a635cc06557324f (diff) | |
download | mv-5009e37678598cdfcf705e892f4b60a282bbd10d.tar.gz mv-5009e37678598cdfcf705e892f4b60a282bbd10d.tar.bz2 mv-5009e37678598cdfcf705e892f4b60a282bbd10d.tar.xz mv-5009e37678598cdfcf705e892f4b60a282bbd10d.zip |
Fix unable to pickup non-ignored items while standing on an ignored
item.
What happened:
1) The pickup code first tries to pickup first item under you without
checking if it is ignored.
2) ::pickUp queries ratelimiter, which clears to send.
3) ::pickUp checks if item is ignored and bails out
4) The pickup code did not bail early, despite "success" of (1) and
selects a non-ignored item to pick-up.
5) ::pickUp queries ratelimiter, which thinks that a packet has been
sent in (2) and aborts.
Diffstat (limited to 'src')
-rw-r--r-- | src/being/localplayer.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 449032a40..eb590c6aa 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -513,9 +513,6 @@ bool LocalPlayer::pickUp(FloorItem *const item) if (item == nullptr) return false; - if (!PacketLimiter::limitPackets(PacketType::PACKET_PICKUP)) - return false; - const int dx = item->getTileX() - mX; const int dy = item->getTileY() - mY; int dist = 6; @@ -528,6 +525,8 @@ bool LocalPlayer::pickUp(FloorItem *const item) { if ((actorManager != nullptr) && actorManager->checkForPickup(item)) { + if (!PacketLimiter::limitPackets(PacketType::PACKET_PICKUP)) + return false; PlayerInfo::pickUpItem(item, Sfx_true); mPickUpTarget = nullptr; } |