Hashing the workspace data structure

Hey, fellow developers!

I’m looking into performing a minimum-impact deterministic hash check of both the client and server workspace of instances which have properties I’m looking into. We have a problem with exploiters deleting and modifying the game locally, and this cannot be fixed by “better game design” - the game as it currently stands cannot be modified in a way that would prevent these local exploiters from having an effect as they are able to noclip into other rooms and escape boundaries (we have other solutions to attempt to prevent this too)

Instead, I’m going to try and compare the hashes of the client and the server for a folder in the workspace, that will contain the map. I realistically need something that can be run with a minimum load impact (especially on the server!) and fairly frequently. Are there any solutions currently out there that I could look at before attempting this myself?

Cheers!

Honestly, I have no way of preventing exploiters other than Remote Events and Filtering Enabled, which doesn’t even help that much. If you have an amount of players in your game, I recommend having human moderators/in-game report button that capture a footage of the player.

Client side checks are not going to help you really and creating a hash such is not going to be feasible.

Add sanity checks like “can a user be here”, “did they teleport” and “are they outside of the map”.

2 Likes

Issue is - the only way to actually ensure this on a feasible scale is to do some client side checks.
The issue is rarely teleporting - it’s when they walk through a wall to escape confinement of an area. We do serverside checks to ensure they aren’t in blatantly disallowed areas without going through doors but there are too many rooms to do this on a wider scale.

I used to have a hexgonal maze set on top of a geodome. For the sake of AI navigation (the built in pathfinder doesn’t work on spherical worlds, only flat ones), animation (to determine when the walking direction has changed), and sanity checking I made a mathematical formula to determine which hexagonal cell a position was in. To run the sanity check I would simply make sure that the cell the player was currently in was connected to the cell that they were in last time the check was run.

You can do something similar here. First you need a way to determine which room the player is in. Check every so often if that player is still in the room you last saw them in. If not, check if they are in the adjacent rooms. You can also check that their last known position was close enough to a door into that room for them to make it there in the time between checks. What you get is a very, very fast check that is not expensive to compute on the server at all. You can probably do thousands in a single game loop before you start to see any lag.

1 Like