Refunding stats stolen by cheaters. [Data management question]

I have a simple sword fighting game where players fight eachother to gain kills, kill streak, & time (when out of the safe-zone)

There are sometimes exploiters stealing other players time by killing them with cheats.
Rarely the AntiCheat does capture them, but the issue is it currently does not refund time to the victims.

Of course there is a 1000 stat limit to avoid saving thousands of small stats in DataStores.

Now this is where I’ve thought for days I’m yet to find a solution that is optimal.

The issue

How do you think I could refund the stats if the exploiter gets caught by the AntiCheat?
I cannot create tens of datastore keys. That won’t be ideal since it could get really expensive on the DataStore requests budget.

p.s: I don’t have time to set-up an external database. The storage costs may seem low for you, but they are highly over my budget. Using DataStores is ideal for me.

Make a better anticheat maybe?
I Mean like if a player gets killed, make sure the killer is monitored like how many kills does he get after killing that first victim, etc. Ofc Save that too to the datastore.
If it passes the paramaters and requirements, you can start your anticheat or whatever on them and refund the time.

1 Like

You can though - kind of, with caching.

The idea is to save changes into a separate module stored on serverside, but those changes don’t get committed into your datastores.

A player’s data will remain in the server module until he finally leaves, in which case it gets irrevocably committed to datastores.

You are already on the right track by checking the players to see if their kills made sense, but caching should be the missing piece to the puzzle.

YES!
This can actually work and see if this get get implemented correctly. :slight_smile:

Sorry, this was not the exact answer I was looking for.

Yes, I already know not to write every change 1-by-1 as soon as it gets updated.

I designed a system to recursively collect killed players (situations where kills appear as: Player => Cheater => Another Player) and only visit each datastore key if we need to. Later then, this was also made to use buffers which let me save way more space.

& I added a poisoning state to internally poison stats, incase of cheaters mixing it up with other stats in a storage area. So time laundering is also no longer a concern of mine.

Thanks for trying to help though!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.