在我的游戏中,我有一个枪支的本地脚本,可以发射远程事件来改变玩家的健康状况。问题是,黑客可能只是解雇远程事件并改变玩家的健康状况。我如何阻止这种情况发生?这是远程事件:
script.CHealth.OnServerEvent:connect(function(player,humanoid,amnt)
humanoid.Health = humanoid.Health - amnt
end)
以下是它的所在地:
game.Workspace.RemoteEvents.CHealth:FireServer(humanoid,60)
答案 0 :(得分:0)
一个简单的答案就是在脚本中制作远程事件,当你完成它时,将其删除。此外,永远不要将远程事件/功能放在工作区中,最安全的地方就是复制存储。
local remoteevent = Instance.new("RemoteEvent")
remoteevent.Parent = game.ReplicatedStorage.RemoteEvents
remoteevent.Name = "CHealth"
game.ReplicatedStorage.RemoteEvents.CHealth:FireServer(humanoid,60)
对于其他脚本:
script.CHealth.OnServerEvent:connect(function(player,humanoid,amnt)
humanoid.Health = humanoid.Health - amnt
game.ReplicatedStorage.RemoteEvents.CHealth:Remove()
end)
这只是我想到的第一种方式。我没有测试脚本,可能有一些拼写错误我没有抓到或类似的东西,所以如果有错误你总能想到这一点。
如果有人在启用过滤功能的情况下进行攻击,那么就会触发该事件,只会看起来对他们造成伤害。此外,我认为黑客注入服务器脚本,服务器脚本不在客户端上工作。以下是一些好文章:http://wiki.roblox.com/index.php?title=Experimental_Mode | http://wiki.roblox.com/index.php?title=Building_Games_with_Experimental_Mode_Off
答案 1 :(得分:0)
最好的方法是不要对代码有任何漏洞。玩家可以很容易地利用它来赋予他们自己的健康,所以你应该首先检查数字是否为负(math.sign)。
接下来,创建一个随机密钥。执行此操作的最佳方法是在客户端上将键变量设置为0,并在服务器上将键变量设置为0。在客户端上创建一个函数,整个客户端将使用该函数使用该键触发远程事件,但也执行类似于添加1的操作并将其乘以100(或更复杂的东西)。每次触发远程时,在服务器上执行相同操作。在服务器上的每个事件中,检查提供的密钥是否与服务器上的密钥相同,如果不是,则检查它们。这样,如果没有他们无法获得的密钥,开发者将无法启动遥控器。