"Ghosting" / Player Poisoning due to Many Components/Weapons Applied to Player Peds

We’ve been experiencing an issue since at least April where players suddenly can no longer see other players and have to relog before they’re maybe able to see players again. At first this was thought to be a culling issue, but it then became clear that it happened with any number of players in scope - including just two, one local and one remote. I’ve also received a report from RedDust RP that they have been experiencing the issue since May and I worked with them to confirm they are indeed also seeing the exact results laid out below.

This happens with any server/client version, as the issue was introduced seemingly in the client pre-May at least. It can also be replicated with -cl2 clients locally. Just use the default spawn configuration into Valentine with either player_one or player_three and load the “ghosting” resource attached.

Overall, we’ve determined that this is caused when a player ped (mp_male and mp_female tested) has “too many” ped components and weapons applied. The peds are fine on the local client, but as soon as another player comes into their scope, that remote player breaks and is no longer able to see the primary player and any new players that come into range. We’ve tried an assortment of ped components (clothing and overlays) and weapons. It doesn’t matter which components or weapons, just the “total” number associated with the ped. The easiest way to replicate it is to apply a bunch of overlays, clothing, and weapons to “overload” OneSync to break the remote players.

I’ve attached a resource (“ghosting”) with an assortment of commands to create a mp_male player ped with a handful of overlays (/createplayerped), load a bunch of clothing (/loadclothing), and equip a full weapon loadout (/loadout). Clothing components can be removed via (/removeclothing) and weapons removed via (/removeweapons). Individual clothing items can also be loaded/removed by passing an argument such as “boots” or “mask” etc… I’ve also included a routing bucket command (/bucketset [playerId] [bucketId]) to quickly switch scopes, but the issue can be replicated just by having the secondary player travel far enough to leave the culling range as well, just as normal players would. There is also a /scopetest command to print players, with their peds and associated info, within scope.

Reproduction:

  1. Load the primary player into server and run /createplayerped
  2. Load the secondary player player into server and just observe the primary player
  3. With the primary player, run /loadclothing and /loadout
  4. Rarely the secondary player will crash or no longer see the primary player immediately, but if you change routing buckets or travel far enough to have the primary player leave scope, then come back into the primary routing bucket or into range again, the primary player’s ped will be invisible to the secondary player
  5. On the secondary player, run /scopetest and you will see that the primary player’s ped ID is 0 or sometimes an arbitrary entity ID at a crazy far distance.
  6. For any additional players that come into range, their player ped IDs will also be 0 for the secondary player. The secondary player is effectively broken at this point.
  7. To resolve, remove clothing/weapons from the primary player and then relog with the secondary player. Removing overlays also works, but for the sake of simplicity, I just included clothing and weapons.

This seems like an overflow issue where the data expected by OneSync for player peds is sometimes too small for what the game actually can produce (i.e. many ped components and weapons). Any variety of ped components and weapons can be used, it’s just that when the total number of applied/equipped components/weapons reaches a certain limit, it breaks the player ped for OneSync and it begins to poison every player that comes into range of that primary player. These secondary players will no longer be able to see any new player ped that comes into scope or retrieve their player ped ID associated with those players. The secondary player is effectively poisoned until they relog out of range of this primary player.

ghosting.zip (6.6 KB)

12 Likes

Thank you for such a detailed bug report. A pull request with the fix is pending reviewing.

7 Likes

FYI to all, this patch has been merged and is available in server artifact 5668+. Canary (Latest) at this time also has the client-side changes, but they are not explicitly required to resolve this issue, though it would be great if we could have people test it anyhow.

Also, since this was an issue with large packets being received at the server and being truncated, this could fix multiple issues potentially. So keep an eye out for any changes - positive or negative - and please do report back!

Thank you so much for jumping right on this, Disquse!

6 Likes

Hi there, I am a Staff member with GoldRush, just wanted to give some feedback in regards to this patch.

We have seen a major improvement with players remaining visible to others. Culling is obviously still an issue however the feedback from the community has been overwhelming positive. Definitely a huge step in the right direction. Thank you for this.

3 Likes