HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Cheating Prevention and Detection

03-04-2009, 07:29 PM#1
GosuSheep
There are 3 possible ways that a player can cheat in Sheep Tag.

-Map hacking
-Pauses the game (to causes an interruption in actions)
-Saving the game (to causes same interruption in actions)

Are there way through triggers or 3rd party tools to prevent or detect this events?

I understand that there is a map-hack prevention resource on this sight, but it appears to require that the map has an extra in which will never be revealed to the players. However, I do not want to have this extra area appear on the map. I'd like to keep my minimap fairly clean.
03-04-2009, 07:53 PM#2
ShadowWolf
Pausing and Saving don't interrupt actions, orders are maintained through these events.
03-04-2009, 07:58 PM#3
GosuSheep
But they do interrupt a players actions. For example: If I am continuously right clicking, and someone pauses the game, it interrupts my actions, causing a possible mistake.

This is why I must prevent or detect these things. If someone pauses the game, waits 0.5 seconds, then resumes the game, a player will be caught off guard; and in a very fast paced game, that can cause a huge problem.
03-04-2009, 09:24 PM#4
xombie
I've never been caught off-guard like that in a sheep tag, as long as you are paying attention pausing/resuming has no effect on the game play. F10+R+Esc takes less than a second for me to hot-key too, if I feel its been paused for too long.

In addition, as ShadowWolf said, it doesn't interrupt orders when the game is paused.
03-05-2009, 02:15 AM#5
GosuSheep
Ok, let me try again.

In world-class sheep tag games, it's a problem. In our world wide tournament, we count it as a 3 minute penalty.

To be quite frank, I'm not interested in reasons why I don't need these things. I'm only interested in solutions.
03-05-2009, 02:21 AM#6
xombie
Pausing - Pause/Resume game 3 times for every player at the beginning of the game, so that they have no more pauses left.

Saving - There is no way to disable saving a game.

Map Hack - I think PandaMike has some sort of solution to this, you can check the resources section.
03-05-2009, 04:31 AM#7
darkwulfv
Pandamine's solution is the sole best anti-map hacker. You can easily section off a 16x16 (if that!) section of your map for that purpose if its seriously such a big deal to you.

The best you can do about saving is to just plain kick the player; they were cheating anyways. There's an action for when the game is saved; you may be able to get "GetTriggeringPlayer" out of that, I'm not sure.

Xombie's 'cure' for pauses will also work.
03-05-2009, 05:04 AM#8
xombie
I have a question though. What do you plan to do when someone cheats and lags, causing the game to stop momentarily? Is that cheating too?
03-05-2009, 03:37 PM#9
GosuSheep
Because lagging is unintentional (most of the time), it is not considered cheating. Also, we can use -synclimit 10000 with GHost bots to prevent the lag screen (I wish blizzard would come up with such useful features).

I understand the Pause 3 times method, but with 12 people in a game, that'll take forever... If no one knows of any other prevention then I am SOL on that one.

I have not tried using GetTriggeringPlayer() as a method for handling the save event. The reason for this is that in the UI, the event does not have its conventional "Event - Player saves the game." Because of this, I highly doubt it is possible determine the "Triggering" player. Anyone know a good replay-viewer tool to check for saves?

Thanks for the suggestion of PandaMine's anti-map hack. I will investigate and implement.
03-05-2009, 05:36 PM#10
moyack
Do this test:

* open a melee map with Jass New Gen Pack
* Create a trigger called "test"
* Convert to custom text
* select the code and erase it
* paste this code:

Collapse JASS:
scope Test initializer init

private function Show takes nothing returns nothing
    call DisplayTimedTextFromPlayer(GetTriggerPlayer(), 0,0,2, GetPlayerName(GetTriggerPlayer()) + " has saved the game...")
endfunction

private function init takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterGameEvent(t, EVENT_GAME_SAVE)
    call TriggerAddAction(t, function Show)
    set t = null
endfunction

endscope

* Save it with other name
* Test it on Bnet

if it gives the name of the player then you can detect the moron who fucks your game :)
03-05-2009, 05:46 PM#11
emjlr3
"world class" tournaments over bnet are lame anyway

play in person, over lan, and ppl who are fags can be dq'd
03-05-2009, 06:40 PM#12
GosuSheep
Thanks for the extremely useful suggestion emjlr3. You want to pay for 20 European's plain tickets?

Moyack, I will try your script. If it works, I will add rep to you. I have been looking for a solution for ages. Vexorian couldn't even find one.
03-05-2009, 06:47 PM#13
akolyt0r
Quote:
Originally Posted by moyack
Collapse JASS:
//...
    call DisplayTimedTextFromPlayer(GetTriggerPlayer(), 0,0,2, GetPlayerName(GetLocalPlayer()) + " has saved the game...")
//...
...i would do it the other way round ?!
03-05-2009, 07:41 PM#14
DioD
Collapse JASS:
scope Test initializer init

private function Show takes nothing returns nothing
    call DisplayTimedTextFromPlayer(GetTriggerPlayer(), 0,0,2,"%s has saved the game.")
endfunction

private function init takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterGameEvent(t, EVENT_GAME_SAVE)
    call TriggerAddAction(t, function Show)
    set t = null
endfunction

endscope

ps learn "secrets" of jass.
03-05-2009, 11:06 PM#15
darkwulfv
Does that actually detect the player? Eg; does EVENT_GAME_SAVE track the player who saved, or just detect the action of the game saving?