如何保护远程事件和功能 roblox?

How to protect remote events and function roblox?

在我的游戏中,我有一个枪的本地脚本,它可以触发远程事件来改变玩家的生命值。问题是黑客可以触发远程事件并改变玩家的健康状况。我该如何阻止这种情况发生?这是远程事件:

script.CHealth.OnServerEvent:connect(function(player,humanoid,amnt)
    humanoid.Health = humanoid.Health - amnt
end)

这里是它的名字:

game.Workspace.RemoteEvents.CHealth:FireServer(humanoid,60)

一个简单的答案就是在脚本中创建远程事件,并在完成后将其删除。此外,永远不要将远程 events/functions 放在工作区中,最安全的地方是复制存储。

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

最好的方法是不要让您的代码存在任何漏洞。玩家可以很容易地利用它来给自己健康,所以你应该首先检查这个数字是否为负数 (math.sign)。

接下来,创建一个随机密钥。执行此操作的最佳方法是在客户端上将一个关键变量设置为 0,在服务器上也将一个关键变量设置为 0。在客户端上创建一个函数,整个客户端将使用该函数使用该键触发远程事件,但也会执行类似加 1 并将其乘以 100(或更复杂的操作)之类的操作。每次触发远程时在服务器上执行相同的操作。在服务器上的每个事件中,检查提供的密钥是否与服务器上的相同,如果不是则踢他们。这样,攻击者将无法在没有他们无法获得的密钥的情况下发射遥控器。