I've come up with an idea similar to Punkbuster which might help reduce hacks. I'm posting it here in the hopes someone might take up the idea and make something out of it.
Let me sum it up by giving you a very brief description. Essentially, a secondary application would run in the background, either seperate or part of Soldat, and this application would monitor a few certain things.
For example, this application would watch over how often a character respawns and when, so as to help cut down on the Walking Death problem.
Here's an example of how it would work, with and without the application:
Server 1, without the anti-cheating software, has a ctf match. Player A kills Player B, and Player B is cheating. He respawns behind Player A and kills him, and there's nothing Player A can do.
Server 2, with the anti-cheating software, has a ctf match as well. Player A kills Player B again, and Soldat sends a flag to this secondary program, telling it that Player B is out of the game and for how long. When Player B goes to cheat and respawn behind Player A, the secondary program detects his early respawn and kick-bans him, sparing Player A the trouble of having to vote him off (which rarely works).
If such a program were made, then Michal would be glad to provide support for it. Your thoughts are welcome.
Im not sure how such a program could be made, but it seems like a nice idea.
Thats not the only thing it could do, but it could do something with the Infinite Knives by tracking how many knives have be thrown by a player, and with what interval and also detect change weapon and pick up of the knife.
Would only work :
- with a complete bugfree soldat
- when you're absolutely sure the 'secondary program' is secure enough and well protected against attacks of 'hackers'
But why not give it a try ... sure
Just to clarify, I'm putting the idea out there. I don't have the time to make such a program.
And, there are any number of things it could do. Remove the anti-cheating portion of the code in Soldat and you remove a good deal of the bugs we experience. That would mean relying solely on this program, however, I think thats a good idea.
The hackers would have to disassemble Soldat in order to fiddle with the code, since this secondary program would be run on the Server and there would be no way to tamper with it. If the secondary program doesn't detect any flags from a player after a fair amount of time (adjustable, obviously), then it may make a report to the admin or some such, to call attention to that player. It would essentially be, All of Soldat working, or none (for the hackers, at least). Local Networks wouldn't need to run the secondary app since they're just playing on their own. It would be a completely optional application.
Well with this secondary program running in the background behind Soldat, won't that cause Soldat to run slower?
Possibly, but you realize, that with the old anti-cheat system removed, there would be an improvement in speed, besides, only server admins who choose to use the cheat protection would have to use it. You yourself wouldn't have to do anything, and Soldat would only be sending a few more packets to the server.
Hmm... i dunno how it would work for the early spawn. I've been in a game once with only one other player, as soon as i died i'd instantly spawn, because I didn't have any teammates. Maybe if the program were to know the person's spawn time aswell, and compare them both, when the player spawns.
I like the idea and think anyone who thinks he can do it should try, but Im still a little worried that it might make Soldat run slower on certain computers. On the other hand it would be nice not having to worry about being unfairly killed.
This idea have to be implented in Soldat itself, because I don't think it's possible to use a secondary program to do this.
Michal supports the idea. All someone has to do is write a program, or at least the code, that will do it. The code would be easy enough. Here's an abstract look at the code:
1. Soldat would send a flag stating who was dead and for how long.
2. The Monitor would recieve the flag and begin counting down.
3. IF the player respawns before the Monitor has finished counting down,
a. THEN the player is kicked,
b. ELSE, continue as normal.
4. Play continues.
-or- here's a look at the possible code for those who use the speed-fire hacks (those which make your gun fire faster)
1. Soldat sends the server the players current stats (just like it does now)
2. The Monitor takes note and stores the current stats for awhile. Every so often, it takes another sampling of the stats and compares it.
3. IF the player is using the same weapon, how much ammo do they have? If they have a reasonable amount, or have a different weapon,
a. THEN continue as normal. However,
b. IF they've used more ammo than is possible (measured by a calculation along the lines of : how much time has passed since last sample, the number of bullets the weapon's firing speed allows for in that time, and how many bullet that have been fired. I'm no whiz at math, but its possible),
c. THEN kick the player.
4. Play continues.
This is just a rough draft, I hope someone can get started on this. Maybe one of you Delphi chaps can help Michal out. If you have any questions, feel free to ask them here.
Is it possible that lag could screw up the count?
Not necessarily, since the program (or rather, this feature) would be run on the server, so as long as the server isn't horribly bogged down, it should be fine. I imagine there could be some error correction to provide a layer of fault tolerance for the code.. maybe a bit of a result "fudging" for each person based on their ping? Higher ping players would recieve a larger "bonus" to their time differential. Besides, I think it wouldn't really be interruptable, because as long as you can take damage you're transmitting packets to the server, so it always has your stats.
If you are a good hacker you can take the same ideas and make an anti-hack program.
if i remeber when i was trying to build anti-hack ware (it didnt work out)
walk of death doesnt work that way...
when u die (with walk of death) u become invisble for other people (not urself) for the respawn time and u can go anywhere u want
then when the respawn time is up the next time u move u become visable to everyone... if u just stand still u dont reappear...
I'd give it a shot if i knew more about how soldat operated... and Michal with his UDP sockets and ughhh :(
I'm glad someone's taken interest in this. All someone has to do is talk to Michal about it. I'm sure he'd love to help someone get this running.
You can create a script in SARJ to do this very thing.
Edit: Except you can not calculate the amount of ammo a Soldat has, at least not very accurately.
Emm, sounds like "Cheating-Death" for Counter-Strike? (www.google.com)