我正在制作一个在不同部分有不同走道的游戏,但我不希望人们用黑客改变自己的速度。我的解决方案是制作一个部分并将其拉伸以适应整个区域并使其不可见+禁用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而不是杀死他们。
答案 0 :(得分:1)
我建议将你的功能连接到每个玩家的人型生物,然后使用Humanoid.Running event。
Humanoid.Running为您提供当前正在运行的速度,这意味着您可以检查该速度是否超过某个阈值,如果是,则惩罚它们。
代码示例:
player.Character.Humanoid.Running:Connect(function(Speed)
print(Player, "is running at speed", Speed)
end)
至于踢,你想使用玩家:踢()。
答案 1 :(得分:0)
if (humanoid.WalkSpeed ~= 25) then
game.localplayer.remove:fire
end
结束)
这是好是坏?我是新手脚本编写者,希望您能看到这个!
答案 2 :(得分:0)
if (humanoid.WalkSpeed ~= 25) then
game.Players.LocalPlayer:Kick()
end
应该可以解决的问题...
答案 3 :(得分:0)
我想我可以帮忙。对我有用的解决方案是:
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
答案 4 :(得分:0)
您当然可以执行上述操作,但作为上述每个人所说的补充,检查步行速度值是否为所需值很容易绕过。 开发者将获得游戏的原始元表并挂钩 __index 以返回 WalkSpeed 的正常值。也无法检测元表,因为大多数现代漏洞利用使用 C 闭包而不是 Lua。你最好的机会是看看角色移动的速度有多快,如果玩家移动太快(比如被动反作弊),则将他们传送回来。