Roblox反作弊WalkSpeed脚本

我正在制作一个在不同部分中具有不同行走速度的游戏,但我不希望人们通过黑客更改自己的行走速度。我的解决方案是制作一个部分并将其伸展以适应整个区域,并使其不可见+ 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而不是杀死它们的人。

点赞
用户5831152
用户5831152

我建议将你的函数与每个玩家的 Humanoid 相链接,并使用 Humanoid.Running 事件

Humanoid.Running 提供了他们当前正在奔跑的速度,这意味着您可以检查该速度是否超过某个阈值,并且如果是,就进行惩罚。

代码示例:

player.Character.Humanoid.Running:Connect(function(Speed)
  print(Player, "is running at speed", Speed)
end)

至于踢人,你需要使用 player:Kick()。

2018-06-18 09:05:21
用户10759853
用户10759853
如果(humanoid.WalkSpeed ~= 25)则
    game.localplayer.remove:fire
end

end)

希望这是一个更好的解决方案。

2018-12-07 12:53:48
用户9744313
用户9744313
如果(humanoid.WalkSpeed~ = 25)则
     game.Players.LocalPlayer:Kick()
end

那应该行了...

2019-02-09 12:02:03
用户14033314
用户14033314

我认为我可以提供帮助。对我有用的解决方案是:

local player = game.Players.LocalPlayer -- 确保是本地脚本
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('您已因可能的速度作弊被踢出。')
end
if hum2.WalkSpeed >16 then
   player:Kick('您已因可能的速度作弊被踢出。')
end
2020-08-01 13:45:24
用户14208240
用户14208240

当然,你可以按照上述方法,但需要补充以上的是,检查步行速度是否达到预期值是很容易被绕过的。利用者可以获取游戏的 raw metatable,并挂钩 __index,返回 WalkSpeed 的常规值。大部分现代漏洞利用都使用 C 闭包而不是 Lua,因此无法检测到元表。你的最佳机会是查看角色移动的速度,如果玩家移动得太快,则将其传送回来(就像被动反作弊一样)。

2021-01-06 10:17:15