TheStarport / FLHook

A Server Improvement for Freelancer.
https://flhook.org
GNU General Public License v3.0
28 stars 15 forks source link

Kick in DeathPenalty.dll #390

Open IrateRedKite opened 6 months ago

IrateRedKite commented 6 months ago

Am seeing reproducible behaviour in our mod where clients are kicked 30-60 seconds after tractoring loot from a killed NPC with a Item is not sold on base message. I've tested this pretty extensively and it only seems to occur when deathpenalty.dll is running on the server. My guess is that FLHook is putting FLServer into an updated state when it shouldn't be and the server thinks there's a discrepancy between what the player should have and what they do have.

@Aingar has speculated that this relates to ShipDestroyed() being called when it shouldn't be, the issue requires some investigation to figure out the root cause. Debug logs unfortunately do not reveal anything in this instance

oliverpechey commented 6 months ago

There's an interesting bit of code in Hk:Player:AddEquip which adds the equipment to a "shadow list" that is compared to the player's equipment list to ensure they aren't cheating. I'm guessing that something is preventing the tractored in loot from being added to this list.

IrateRedKite commented 6 months ago

There's an interesting bit of code in Hk:Player:AddEquip which adds the equipment to a "shadow list" that is compared to the player's equipment list to ensure they aren't cheating. I'm guessing that something is preventing the tractored in loot from being added to this list.

@oliverpechey Interestingly, this seems to be triggering again when I invoke IEngine__ShipDestroyed in a plugin I'm working on. It happens very consistently, so it's possible the issue lies with the hook and not the death penalty plugin? Not many plugins actually use this hook, player ones seem to leverage the kill message rather than the onDestroyed hook.

Please ignore this, in my sleep-deprived state I loaded my testing setup with deathpenalty.dll, the issue does indeed seem to be confined to the plugin.