Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preventing noclip #218

Closed
AKryukov92 opened this issue Nov 7, 2018 · 21 comments
Closed

Preventing noclip #218

AKryukov92 opened this issue Nov 7, 2018 · 21 comments

Comments

@AKryukov92
Copy link
Contributor

Today I have seen player, who was running through walls.
I think we can prevent so obvious hacking.

  1. Periodically check position of player. If he programmaticaly spotted inside the wall and in report list, then kick him.
  2. Periodically check coordinates of player. If he moves too fast, then kick him.
@Thomas--S
Copy link
Member

Periodically check position of player. If he programmaticaly spotted inside the wall and in report list, then kick him.

Other players can build a wall where the player is standing, so the player is inside a wall without a noclip cheat. → No kick neccessary

Additionally, I'm sure these checks will introduce quite a bit of lag. I think it's not worth it.

@skittlemittle
Copy link

Or we could do it the way gaara said

Only have the system kick or report if the player goes through a bunch of blocks, or if they go through 2 or 3 blocks in rapid succession like a "hacker" normally would.

@AKryukov92
Copy link
Contributor Author

How are you going to detect "whether player moves through 2 or 3 blocks in rapid succession"? I assume there are no lua callbacks for player movement.

Other players can build a wall where the player is standing, so the player is inside a wall without a noclip cheat.

That is why I added "AND in report list" part to first part. If someone spotted this player to use noclip cheat, then he hopefully report him.
If we got him in wall programmaticaly, then he is very likely to be cheater.
To reduce false positives, we can do multiple checks every X second.

@skittlemittle
Copy link

That is why I added "AND in report list" part to first part. If someone spotted this player to use noclip cheat, then he hopefully report him.

agreed

How are you going to detect "whether player moves through 2 or 3 blocks in rapid succession"? I
assume there are no lua callbacks for player movement.

dunno, with a check running every few seconds?

@ClobberXD
Copy link
Contributor

While this is very beneficial for servers, this can potentially be lag-inducing as well. I'd advise against bundling anti-cheat mods with the (sub-)game, because it's up to each individual server admin to want to make use of these...

@Thomas--S
Copy link
Member

That is why I added "AND in report list" part to first part. If someone spotted this player to use noclip cheat, then he hopefully report him.

The report list is a really unreliable source. There are many players who report everybody who is better in PvP than them. Even moderators get reported quite often for "cheating".

@AKryukov92
Copy link
Contributor Author

The report list is a really unreliable source. There are many players who report everybody who is better in PvP than them. Even moderators get reported quite often for "cheating".

That's why there is "and player was actually spotted inside the wall" part and we should not kick for single false positive. Only after several checks over time.

Any other ideas?

@AKryukov92
Copy link
Contributor Author

While this is very beneficial for servers, this can potentially be lag-inducing as well.

All features are lag-inducing. Should we stop any development because of this?

@Thomas--S
Copy link
Member

That's why there is "and player was actually spotted inside the wall" part and we should not kick for single false positive. Only after several checks over time.

But both of these indicators are prone to errors (I'd even say they are wrong most of the time.). So, even if both indicators are positive, the probability of a false positive is quite high.

All features are lag-inducing. Should we stop any development because of this?

Not all features are equally lag-inducing.
Iterating over all players and getting their position and the node at this position every second or globalstep is very slow and induces a high amount of lag.


Most of the time real hackers get banned quite quickly by moderators anyway.

@Thomas--S Thomas--S mentioned this issue Nov 8, 2018
@ClobberXD
Copy link
Contributor

All features are lag-inducing. Should we stop any development because of this?

Please read my previous comment fully if you haven't. Since this a potentially laggy feature and this has nothing to do with CTF itself, I suggested that this be developed as a standalone mod, instead of having it bundled with the (sub-)game.

IMO, afkkick should be moved out of the (sub-)game too, as that too is a server utility mod and has nothing to do with CTF.

@AKryukov92
Copy link
Contributor Author

Things about CTF itself are stored in repository https://github.com/rubenwardy/ctf_pvp_engine
I believe this repo is for ready-to-use server.

What if we kill people spotted inside the walls. May be using suffocation mod. Being in walls are not supposed for players anyway.

@Thomas--S
Copy link
Member

Things about CTF itself are stored in repository https://github.com/rubenwardy/ctf_pvp_engine
I believe this repo is for ready-to-use server.

ctf_pvp_engine is a framework that can be used to build different types of PvP/CTF games.

capturetheflag is a game that utilizes ctf_pvp_engine to make a playable CTF game. However, this is not necessarily a ready-to-use server.

What if we kill people spotted inside the walls. May be using suffocation mod. Being in walls are not supposed for players anyway.

This would "punish" players who are getting trapped by their team mates. Do you think this is right?
This will also probably not help with hackers. IIRC, breath and suffocation is checked client-side.
If we want a custom server-side solution, this will introduce lag again.

AKryukov92 added a commit to AKryukov92/capturetheflag that referenced this issue Nov 10, 2018
AKryukov92 added a commit to AKryukov92/capturetheflag that referenced this issue Nov 10, 2018
AKryukov92 added a commit to AKryukov92/capturetheflag that referenced this issue Nov 10, 2018
AKryukov92 added a commit to AKryukov92/capturetheflag that referenced this issue Nov 10, 2018
AKryukov92 added a commit to AKryukov92/capturetheflag that referenced this issue Nov 10, 2018
@AKryukov92
Copy link
Contributor Author

Other way without suffocation damage:
On globalstep iterate over players and check nodes on the legs. Decrease speed of player if his legs in normal block to 0.
Store coordinates of stuck player to array and check his coordinates.
If his coordinates are changed and he is still stuck, then kick.

@ClobberXD
Copy link
Contributor

ClobberXD commented Nov 13, 2018

If his coordinates are changed and he is still stuck, then kick.

If an individual player is lagging really bad, it'd seem to the server (and to the other players) as if the player is flying through solid nodes. So this approach isn't going to work, as it'll kick anyone who lags a lot.

@AKryukov92
Copy link
Contributor Author

If an individual player is lagging really bad, it'd seem to the server (and to the other players) as if the player is flying through solid nodes

Are you sure that for server he will be flying through walls? It may be only client prediction.
Kicking players who lag really hard is not bad solution. What is the point of playing fast-paced game if you lag like hell?

@skittlemittle
Copy link

Kicking players who lag really hard is not bad solution. What is the point of playing fast-paced game if you lag like hell?

that's unfair treatment, we want to stop cheaters not Australians

@AKryukov92
Copy link
Contributor Author

How many players do we have from Australia?

@ClobberXD
Copy link
Contributor

How many players do we have from Australia?

That does not matter. The point is that anyone and everyone can lag irrespective of their connection strength, their internet speed, or their geographical location. Kicking everyone who lags is equivalent to DDoS-ing one's own server.

@AKryukov92
Copy link
Contributor Author

I agree with you. Kicking is unnecessary.
Thats why alrogithm will be like this:
On globalstep iterate over players and check nodes on the legs. Decrease speed of player if his legs in normal block to 0 and log it to special file.
Store coordinates of stuck player to array and check his coordinates.
If legs of the player is outside of the normal block, then restore his speed to normal.

I think it is enough to log potential hacking occasions for a start. With some data on our hands, we will be able to find a solution.

@KaylebJay
Copy link
Contributor

Bit old, maybe this should be decided on and closed/kept open?

If this is kept open, I use https://forum.minetest.net/viewtopic.php?f=11&t=15304 (real_suffocation mod), it may be interesting. This would also prevent the 'hiding in blocks' feature which I think is not good for gameplay (my opinion).

@ClobberXD
Copy link
Contributor

Yeah, this should be closed, thanks.

Hiding inside nodes is something I'm personally fine with. Also, mods like real_suffocation are susceptible to lag, and can be subject to oddities like still damaging a player long after they came out of a solid node, for example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants