Roblox 反漏洞 WalkSpeed 脚本
Roblox Anti-Exploit WalkSpeed Script
我正在制作一款在不同部分具有不同步行速度的游戏,但我不希望人们通过 hack 来改变他们自己的步行速度。我的解决方案是制作一个零件并将其拉伸以适合整个区域并使其不可见 + CanCollide 禁用,然后如果您的行走速度不正确,则使用子脚本杀死您:
script.Parent.Touched:connect(function(WSChecker)
if not WSChecker.Parent then return end
local humanoid = WSChecker.Parent:FindFirstChild("Humanoid")
if not humanoid then return end
if (humanoid.WalkSpeed ~= 25) then
humanoid.Health = 0
end
end)
问题是它不能同时处理多个玩家,我想让它踢玩家而不是杀死他们。有办法解决这些问题吗?它必须只在部分内检查他们的ws,我不知道如何让它踢谁改变了他们的ws而不是杀死他们。
我建议改为将您的函数连接到每个玩家的 Humanoid,并使用 Humanoid.Running event。
Humanoid.Running 为您提供他们当前 运行 的速度,这意味着您可以检查该速度是否超过某个阈值,如果是则惩罚他们。
代码示例:
player.Character.Humanoid.Running:Connect(function(Speed)
print(Player, "is running at speed", Speed)
end)
至于踢,你想用player:Kick()。
if (humanoid.WalkSpeed ~= 25) then
game.localplayer.remove:fire
end
结束)
希望这是一个更好的解决方案。
if (humanoid.WalkSpeed ~= 25) then
game.Players.LocalPlayer:Kick()
end
应该可以解决问题...
我想我可以提供帮助。对我有用的解决方案是:
local player = game.Players.LocalPlayer --Make sure it's a local script.
local char = player.Character
local hum = char:WaitForChild("Humanoid")
local hum2 = char.Humanoid
script.Parent = game.StarterPlayer.StarterPlayerScripts
if hum.WalkSpeed >16 then
player:Kick('You have been kicked for possible speed hacks.')
end
if hum2.WalkSpeed >16 then
player:Kick('You have been kicked for possible speed hacks.')
end
您当然可以执行上述操作,但作为上面每个人所说的补充,检查 walkspeed 值是否处于所需值很容易绕过。
开发者将获得游戏的原始元表并将 __index 挂钩到 return WalkSpeed 的正常值。无法检测到元表,因为大多数现代漏洞利用使用 C 闭包而不是 Lua。你最好的机会是看看角色移动的速度有多快,如果玩家移动得太快(比如被动反作弊),就将他们传送回来。
我正在制作一款在不同部分具有不同步行速度的游戏,但我不希望人们通过 hack 来改变他们自己的步行速度。我的解决方案是制作一个零件并将其拉伸以适合整个区域并使其不可见 + CanCollide 禁用,然后如果您的行走速度不正确,则使用子脚本杀死您:
script.Parent.Touched:connect(function(WSChecker)
if not WSChecker.Parent then return end
local humanoid = WSChecker.Parent:FindFirstChild("Humanoid")
if not humanoid then return end
if (humanoid.WalkSpeed ~= 25) then
humanoid.Health = 0
end
end)
问题是它不能同时处理多个玩家,我想让它踢玩家而不是杀死他们。有办法解决这些问题吗?它必须只在部分内检查他们的ws,我不知道如何让它踢谁改变了他们的ws而不是杀死他们。
我建议改为将您的函数连接到每个玩家的 Humanoid,并使用 Humanoid.Running event。
Humanoid.Running 为您提供他们当前 运行 的速度,这意味着您可以检查该速度是否超过某个阈值,如果是则惩罚他们。
代码示例:
player.Character.Humanoid.Running:Connect(function(Speed)
print(Player, "is running at speed", Speed)
end)
至于踢,你想用player:Kick()。
if (humanoid.WalkSpeed ~= 25) then
game.localplayer.remove:fire
end
结束)
希望这是一个更好的解决方案。
if (humanoid.WalkSpeed ~= 25) then
game.Players.LocalPlayer:Kick()
end
应该可以解决问题...
我想我可以提供帮助。对我有用的解决方案是:
local player = game.Players.LocalPlayer --Make sure it's a local script.
local char = player.Character
local hum = char:WaitForChild("Humanoid")
local hum2 = char.Humanoid
script.Parent = game.StarterPlayer.StarterPlayerScripts
if hum.WalkSpeed >16 then
player:Kick('You have been kicked for possible speed hacks.')
end
if hum2.WalkSpeed >16 then
player:Kick('You have been kicked for possible speed hacks.')
end
您当然可以执行上述操作,但作为上面每个人所说的补充,检查 walkspeed 值是否处于所需值很容易绕过。 开发者将获得游戏的原始元表并将 __index 挂钩到 return WalkSpeed 的正常值。无法检测到元表,因为大多数现代漏洞利用使用 C 闭包而不是 Lua。你最好的机会是看看角色移动的速度有多快,如果玩家移动得太快(比如被动反作弊),就将他们传送回来。