That might be an issue. I’ve commonly had my ping over 200ms in a 15-player server, and I don’t have relatively bad internet.
Though, this is a good anti-cheat system. I might use it in the future if I find players abusing it.
That might be an issue. I’ve commonly had my ping over 200ms in a 15-player server, and I don’t have relatively bad internet.
Though, this is a good anti-cheat system. I might use it in the future if I find players abusing it.
according to google sources over 140 MS is considered laggy.
You could also just remove it?
Not in Roblox.
Yeah, but then it might trigger accidentally. I’m not really sure how to solve it, but you can simulate it with IncomingReplicationLag in studio settings to try and find a fix.
Just up it to 400 MS or 500 MS.
Try doing task.wait(Player:GetNetworkPing())
so that it will automatically adjust.
Always be recording the player’s ping, get the mean of the last X amount of ping ms’s, if the current ping differs by too much (aka: a spike) set ownership of the character to the server until the ping stabilizes.
Unstable Network / Ping Spikes seem to also trigger this
why not teleport the player character to the old position other than kicking the player? so
Player:Kick('Tab-Glitching')
would be
HumanoidRootPart.Position = OldPosition
HumanoidRootPart.Velocity = Vector3.zero -- idk about this one
whatdya think?
This is not an anti-tp anticheat. How would you even define the old position? Before they glitched? That would just be doing what the exploit is supposed to do; to stall their fall.
If you want the anticheat to be less intrusive in other ways then just reset the player instead of kicking them
I think this should work better (I know that this is a release, just sharing my method)
local players = game:GetService("Players")
local localplayer = players.LocalPlayer
function checkTick(last: number): number
return tick() - last
end
while task.wait() do
local new = tick()
task.wait(1)
local calculated = checkTick(new)
if calculated >= 1.5 then
localplayer["Kick\000" .. tostring(tick())](localplayer, "You have been kicked for tab glitching.")
end
end
Wouldn’t this be better?
-- Force the character to fall by using roblox network owner physics
if HumanoidRootPart:GetNetworkOwner() ~= nil then
HumanoidRootPart:SetNetworkOwner(nil)
task.wait(5)
HumanoidRootPart:SetNetworkOwner(Player)
end
Trying to implement a completely foolproof method to try & put an end to tab glitching through Modules/Scripts is flat out impossible, there are so many variables to consider when accounting for a player’s ping, and blatantly considering a certain circumstance “tab glitching” isn’t a good practice.
Just submit a bug report, they could easily add a bandaid fix to this by detecting if the player is holding right click on the topbar’s window for prolonged periods of time.
so if i have bad internet i can glitch all I want?
amazing!
also the main thing the freeze glitch is used for is noclip which this doesnt detect for
well i was trying to make it less worse other than kicking the player, just imagine 50% of your players in-game got kicked because of a bad network, they sure not gonna play the game again
in the original code theres a variable named OldPosition
as you can see here:
i have never tested the code, so you can check my code suggestion to see if its good or not
im just giving out my opinion, you can have your own too
thats a great suggestion! i never thought of using :SetNetworkOwner
It’s not, I explained in my previous reply. Trying to teleport the player back is just you helping them cheat in the game because you are doing exactly what they wanted
The OldPosition
variable is just used to check if the player is frozen by comparing it at different times. Yes, the variable name is confusing, so here’s an explanation:
To break it down:
OldPosition == CurrentPosition
checks if the player hasn’t moved after a set amount of time (the position is the same after x seconds)
OldVelocity ~= Vector3.zero
checks if the player was moving before (old)
CurrentVelocity ~= Vector3.zero
checks if the player is supposed to still
be moving now (current)
So, if the player still had some velocity for x seconds yet their position hasn’t changed, it’s assumed that they are frozen, which is likely caused by tabglitching
ahh i see, sorry for misunderstanding
Sorry, If anyone needs support or has any questions I’m more active over on Discord.
Thanks VERON for helping people here.
@pingulovesu
Thanks for posting!
If anyone Is looking for a client-sided method this might be for them.
But I have my doubts; I’ve been working on securing the Roblox client/server side for over 2 years now, and I see this as easily bypassed.
tick()
method can be spoofed.kick
method of LocalPlayer
can 100% be suppressed by an exploiter.Edit: It’s not meant to be a anti-cheat in any meaning.
It’s just supposed to help with tab glitching for some parkour or maybe games who need or want to prevent it.
Also if you have bad internet this glitch won’t even be possible.
It’s been in the game client since the earliest versions, it’s not going anywhere.
We could argure for hours on this, but I use to do this with other incompetent “anti-cheat” devs on this platform and it got me no where.