Bug #173: NPC drops
|Submitted||10th Nov 2012|
|Updated||17th Nov 2012|
|r372||11 Nov 2012 16:02:49 UTC||Fix some cases where drops are given no owner (bug #173)|
|r375||17 Nov 2012 11:24:56 UTC||Give the client correct info on who wins a drop (bug #173)|
NPC drops some times seem to freeze. As they can't be picked up by the owner, but they can by other people, once the timer expired.
There was a fix to one of the FOREACH macros recently, have you applied this?
I'm pretty sure I did, mind giving me a link of where it was fixed?
Hmm, yes I have those. I might as well just replace util.cpp/hpp with the ones from r371. As I never modify those files anyway.
Patch 366 and 370 didn't fix it.
Since it's "sometimes", it's probably related to the code that picks a drop winner based on the amount of damage they did (ShareMode = 2) being broken by NPC's recovering HP.
There's also a similar bug in ShareMode = 3 which happens due to an off-by-one error.
Updated Status to CONFIRMED
Confirmation that r372 fixes the problem? Also make sure the client isn't screwing up (hitting f12 will kill the client protection and fall back to the server's).
I'll test it out. Thanks Sausage.
I´ve tested this on Aureus Online, and many people are still complaining that it doesn´t work.
It appears to be a client-sided bug that automatically chucks drop protection on the last hit of the player (sometimes)
I'm definitely leaning towards it just being the good old client bug, since there's not really much room for "sometimes" in EOSERV (except in the case of r372, which I think actually fixed some drops not being protected at all). Usually, for me, it happens with items that people drop on the ground, and I have to hit F12 before it will let me pick them up.
Yeah ._. Me and ele have been testing those modes for a few hours today, I guess "Last hit takes it all" will do.
These items weren't able to be picked up when leaving/entering the map.
I believe if found a fix to the bug:
The NPC Drop packet just after the main share 2: share 3: codes etc.
builder.AddShort(from->player->id); // this sets the drop id to the last person that hit the npc rather then the player id that actually got the drop.
Lol, that'd definitely explain why it's always the last person to hit that gets the item. Fortunately that packet is already generated once for every character in range, but unfortunately it's unclear exactly what else that value is used for, which leads to a another problem of EXP sharing, who's shown as leveling up, and if more than one person can...
Fortunately, again, since EOSERV already looks broken here, just putting in the correct drop winner ID isn't really any worse than the current system of always sending off drops to the wrong person.
We believe this fixed it without any side effects. EXP share also seems just fine.
Fixed... maybe... in r375
Updated Status to CLOSED, FIXED
Please don't post unless you have something relevant to the bug to say.
Do not comment to say "thanks" or "fix this please".
Please log in to add comments. EOSERV Bug Tracker > Bug #173: NPC drops