原贴:https://forum.cfx.re/t/how-to-protect-your-server-from-most-cheaters-easily-101/5160816
我经常看到服务器被最明目张胆的“骗子”摧毁,而这种情况可以通过超级简单的方式来阻止(爆炸、行人、传送等)
让我们从您可以做的最简单的事情开始(即服务器命令/CONVARS)
至于为什么,你的服务器可能不使用它们(或者你使用通过 NUI 处理它的外部资源,所以并不重要)
基本上,这将阻止未经授权的客户端对给定实体的所有控制请求
阻止用户创建的实体(例如自定义对象、车辆、行人等)的超级简单方法......
为了获得更大的灵活性,您可以使用此原生 https://docs. Fivem.net/natives/?_0xA0F2201F 甚至处理创建/删除实体的事件!
在这里阅读有关命令的更深入的解释!
举个例子,假设您正在进行角色扮演,您的工作是收集包裹,这可以给我们带来金钱
错误/不良做法
正确/更好的方法
简而言之,编写更好的代码。
我希望本教程可以帮助您更好地了解 2023 年的黑客以及我们如何预防它
如果没有,我很抱歉。
我经常看到服务器被最明目张胆的“骗子”摧毁,而这种情况可以通过超级简单的方式来阻止(爆炸、行人、传送等)
让我们从您可以做的最简单的事情开始(即服务器命令/CONVARS)
禁用网络声音 PlaySoundFrom*
当作弊者在我的服务器上播放所有那些超级响亮的警报声(或其他声音)而您对此无能为力时,真是令人头痛,现在您可以通过设置此服务器命令来完全禁用它sv_enableNetworkedSounds false
至于为什么,你的服务器可能不使用它们(或者你使用通过 NUI 处理它的外部资源,所以并不重要)
设置所需的纯客户端
例如,最近有很多 RPF 会导致服务器上的每个人崩溃(通过操纵“救护车”类型并将其变成直升机,这会导致其他玩家崩溃)
代码:
# 目前只能设置2个级别
sv_pureLevel 1 # 将阻止除音频文件和已知图形 mod 之外的所有已修改的客户端文件。
sv_pureLevel 2 # 将阻止所有修改的客户端文件。
阻止所有控制请求(实体权限?)
有没有想过为什么汽车在你的服务器上“飞行”/不断被删除(真的很烦人不是吗?) 解决所有这些问题的一个超级简单的解决方案是设置 sv_filterRequestControl
代码:
# 这个设置实际上有4种模式
# -1:默认,此时相当于2,但也会在控制台发出警告。
# 0:关闭。还禁用基于路由存储桶/实体锁定的策略。
# 1:阻止对由玩家控制的实体(当前仅限占用车辆)的控制请求,这些实体的存在时间超过 sv_filterRequestControlSettleTimer 毫秒(默认 30000) - 以下称为“已解决”。
# 2:阻止对玩家控制的所有实体的控制请求。
# 3:阻止对玩家控制的所有实体以及任何“已定居”非玩家实体的控制请求。
# 4: 不路由 REQUEST_CONTROL_EVENT 任何内容。
# 我**个人**建议将其设置为 4
sv_filterRequestControl 4
实体锁定
此设置可能会破坏许多依赖于客户端创建实体的脚本阻止用户创建的实体(例如自定义对象、车辆、行人等)的超级简单方法......
代码:
sv_entityLockdown inactive # 客户端可以创建他们想要的任何实体。
sv_entityLockdown Relaxed # 仅阻止客户端创建的脚本拥有的实体。
sv_entityLockdown strict # 客户端根本不能创建任何实体。
为了获得更大的灵活性,您可以使用此原生 https://docs. Fivem.net/natives/?_0xA0F2201F 甚至处理创建/删除实体的事件!
在这里阅读有关命令的更深入的解释!
如何阻止恶意事件?
我的意思是人们往往会忘记我们绝对不应该相信客户举个例子,假设您正在进行角色扮演,您的工作是收集包裹,这可以给我们带来金钱
错误/不良做法
lua:
-- Some client-side pseucodocode
if IsControlJustPressed(0, 38) then
if hasEnoughItem("package", 1) then
TriggerServerEvent("packages:removeItem", "package", 1)
TriggerServerEvent("packages:addMoney", 5000)
else
showNotification("You don't have enough packages to sell")
end
end
-- Server-side
RegisterNetEvent("packages:removeItem", function(item, count)
removePlayerItem(source, item, count)
end)
RegisterNetEvent("packages:addMoney", function(money)
addPlayerItem(source, "money", money)
end)
-- etc...
正确/更好的方法
lua:
-- Some client-side pseucodocode
if IsControlJustPressed(0, 38) then
if hasEnoughItem("package", 1) then
TriggerServerEvent("packages:givePackage")
else
showNotification("You don't have enough packages to sell")
end
end
-- Server side
local sellPosition = vector3(100.0, 0.0, 0.0) -- 一些随机位置在这里并不重要
RegisterNetEvent("packages:givePackage", function()
local ped = GetPlayerPed(source)
local position = GetEntityCoords(ped) -- 嘿, Fivem 给了我们这个超级东西,所以我们可以在服务器端使用它并检查人们的位置
-- 让我们仔细检查玩家是否接近卖出/给予点,无论我们之前如何称呼它都无关紧要
if #(position - sellPosition) >= 10 then -- 10 应该是足够的半径来查看玩家是否足够近以便他们可以出售
return sendNotification(source, "您距离太远,无法寄送包裹..")
end
if hasEnoughItem(source, "package", 1) then
removePlayerItem(source, "package", 1)
addPlayerItem(source, "money", 5000)
end
--- 你知道它要去哪里越来越多的检查!
end)
处理 onesync 事件
我们可以处理各种事件,例如创建实体、粒子、爆炸以及黑客经常用来破坏我们服务器上的乐趣的所有这些事情......我们可以非常轻松地预防它!
如上所述,我们可以使用entityCreating,通过取消它们上的事件(那些可以取消的实体)来过滤被阻止的实体(或我们不想要的实体)。 爆炸事件、ptfxEvent、removeAllWeaponsEvent 等也是如此……混淆您的文件以进行生产
感谢 Tebex 和 CFX.re 之间的合作,我们现在可以为用户提供混淆的脚本。但我们服务器所有者如何从中获利呢?
我们可以使用 FiveM 创建的 FXAP 工具来混淆我们的文件,这样黑客就无法轻松转储我们的客户端脚本并查看它们(这包括所有资产和脚本)我希望本教程可以帮助您更好地了解 2023 年的黑客以及我们如何预防它
如果没有,我很抱歉。