Identifying cheaters is largely a technical challenge: you scan their machine for hacked graphics libraries, memory change tools, etc. It’s difficult to do in a non-trivial way, and at the end of the day the client can’t be trusted.
Identifying assholes is something that players can do really, really easily. Everytime you see someone speed-hacking their way around a counterstrike map, your first thought is unlikely to be “Hey, look at that packet-injection attack!” but instead “Hey, look at that asshole!”
An approach that I’ve been thinking about is to simply ignore the whole cheating issue, and instead have a reputation system so that you are more likely to find an enjoyable game
It’s basically the same as the Credence system for combatting peer-to-peer spam.
How it breaks down:
Everyone has a cryptographic identity, and can give ratings to other players:
- thumbs up - good guy
- thumbs down - asshole
These ratings are persistent and are shared between clients, allowing one client to make a judgement on the assholeness of an unknown client based on the ratings of others. If client A’s ratings are broadly similar to client B, they are likely to have similar opinions on who is an asshole, and so A can trust B’s judgements on clients unknown to A.
Entry to a server would be based on the judgement of the server owner, or perhaps even the average judgement of the current inhabitants.
And now for the inevitable strained analogy: The server is a nightclub with a bouncer that permits or denies entry based on the opinions of the owner/people already inside:
“I don’t know you, but my good friends X and Y, whose ratings I generally agree with, think you’re a good guy, so I’ll give you the benefit of the doubt. Welcome aboard!”
“Nobody I know has ever met you before, but you’ve rated I, J and K as good guys, while I know for a fact that they are assholes. This has cast you in a bad light, so for now you’ll have to leave. I suggest that you mix with a better crowd in future”
“While it is true that A, B and C have rated you up, I do not generally agree with the other ratings that A, B and C have made, and so you’re not getting in”
The strengths of this approach:
- It’s decentralised
- It doesn’t matter if assholes rate each other up, as no-one cares about the opinion of an asshole
- Everyone gets a say. No more people whining to the admin: they simply make their own rating, and if their opinion starts to diverge from that of the server, maybe it’s time to move on…
- It’s not just applicable for finding cheaters, rate people on if you enjoyed playing with them or not, and watch as all of the foulmouthed spawn-camping chatspammers are forced to converge on playing solely with each other
Some problems:
- Adoption - getting a system like this to a useful state will take time
- People not voting on each other- It might be worthwhile to have a default positive rating as people are much more likely to bother themselves to vote an asshole down than a good guy up
- There’d have to be some servers with permissive entry policies, so that new players can prove themselves not to be assholes before they can move on to servers with higher standards
- On a busy server, there may be a lot of people coming and going, and so the saved ratings may grow very large. Some kind of time-based pruning would probably help here
- People can still cheat as long as they’re not an asshole, so this probably isn’t suitable for competitive play
Any thoughts?