Server-Sided AntiCheat

Yup thats one of the problems with MainLoop’s solution.

Hmm, I have thought about something like this.

I’m not sure I agree on the “Overall however I don’t recommend spending too much effort on an anticheat, in the end the exploiters will always find a way around whatever you do.”

And also I have seen noclip scripts spoof or not “spoof” but bypass using “StrafingNoPhysics”
Also needing to whitelist all the parts would be a pain in the ass.

Could I possible raycast every tick and every position the player makes and if it breaks the raycast that means they no-clipped?

Hmmm.
Is there no responsive server authority

Server authority is not implemented into Roblox yet. Controls to the client will replicate to the server with a half-second delay.

This is fine if you’re able to somehow “predict” the next move. I haven’t come across an algorithm that works, but it most certainly involves AI.

Perhaps Chickynoid would be of some interest.

game.Players.PlayerAdded:Connect(function(Player) --omg the player joined
    
    Player.CharacterAdded:Connect(function(Character) --omg the player got character
        while true  do -- a loop
            local OldPosition = Character.HumanoidRootPart.Position * Vector3.new(1,0,1) -- storing the old position
            wait(1) -- waiting a second 
            local NewPosition = Character.HumanoidRootPart.Position * Vector3.new(1,0,1) -- getting the new position
            local ActialSpeed = (OldPosition-NewPosition).Magnitude -- getting the player speed
            print(ActialSpeed) -- you can remove this if you want 
            if ActialSpeed > (Character:FindFirstChildWhichIsA("Humanoid").WalkSpeed +5) then -- checking the speed the player got  also the +5 part is to give lower chance for funny false kicks
                Player:Kick("Sussy WalkSpeed") --kicking the exploiter if he got caught 
            end
        end
    end)
end)

take this for free
Edit: the explaining of this is
it checks the speed of the player by checking the distance between two points if its more than the speed of the player by 5 studs then the player will be kicked for speed exploits
im lazy to say how this works but to make it short you check the distance between old position and new position if the distance between them is more than the player’s walkspeed in the server by 5 then it should be exploiter because in the client it will be something else

omg another edit: it might falsely kick players that got teleported by a portal so put a bool value and make it true or false depending if the player was being teleported by portals
also it might be good to remove fly exploit if they use some high speed flying
you can also detect if they used fly exploit directly when they use it but it will be client sided and it checks the humanoidrootpart if it got a body velocity (which is what makes them fly)
you can check if it got body velocity by making

game.Players.LocalPlayer.CharacterAdded:connect(function(Character)
Character.HumanoidRootPart.ChildAdded:connect(function(Child)
if Child:IsA("BodyVelocity") then -- im not sure if i wrote Body Velocity right because im bad at english smh
-- the punishment you want
end
end)
end)

but you dont need that because exploiters can just use a funny thing which is a anti kick that will break everything

Hacking is a lot of work, it’s not usually worth it when the payout is too small. Skids especially are going to go hack a different game if their hacks aren’t having enough effect.

Set the threshold somewhat high and be lenient. Ignore verticality for the speed checks, have a separate check for the Y axis. That way falling, jumping, and walking up inclines won’t trigger it. Then add an internal ‘strikes’ system that is more lenient closer to the threshold and somewhat more strict when it catches someone moving much faster. Possibly make it more lenient when ping is high, or increase the step so that checks cover multiple seconds of movement to minimize the effect of stuttering.

1 Like

kicking after first detection is a bad idea, its way better to teleport the player back and set his char network ownership to nil for a second. There will be TONS of false positives caused by ping and other stuff such as character getting flinged.

2 Likes

this was the first punishment i got in my braincells instead of sending them back to the old position but what moving network ownership do?

network owner can move unanchored parts on their client and it will replicate to the server. Set it to nil so they can’t avoid the rubber banding by simply teleporting back

2 Likes

WalkSpeed can be spoofed.
LOL.

Wdym? It checks the speed on the server not the client so it checks if its the actual speed the player should get

1 Like

This will prevent “tab glitching”. Though, I do see your point.

For tab glitching i found a way to remove it
See when you freeze your screen?
All the wait() inside your local scripts will freeze too so you can make a checker
If the player client didnt response then there is something wrong

Yes, but that’s on the client, which is unreliable. This could be bypassed.

Most of tab glitchers dont use exploits

Yes, but that doesn’t mean what they’re doing is right.

I think some sort of strike system would work very well, such as an attribute in the player with how many strikes they have. Once it gets to say 3, ban them.

2 Likes

Publicly sharing info, like a value with the client is a bad idea.