怎样通过玩家 SteamID 值阻止使用 NoClip (附程序)

我正在编写一个小程序,尝试通过检查玩家的 SteamID 值来阻止他们使用 NoClip。我没有安装 DarkRP 或 ULX 插件,只是使用基本的 GMOD 来学习 GMOD 编程 - 我是新手 :)

TABLE = TABLE or {}
TABLE.PLAYERS = {
["STEAM_0:1:89436878"] = true,
}
local plyMeta = getmetatable("player")
function plyMeta:CanNoClip()
    for id, bool in pairs(TABLE.PLAYERS) do
        if id == self:SteamID() then
            print(self:Nick() .. " 可以使用 NoClip")
            return true
        else
            print(self:Nick() .. " 不能使用 NoClip")
            return false
        end
    end
end
hook.Add("PlayerNoClip", "CheckPlayerCanNoClip", function(ply, state)
    ply:CanNoClip()
end)

我的控制台中出现的错误是...

attmpt to call method 'CanNoClip' (a nill value)

非常感谢您的帮助。

原文链接 https://stackoverflow.com/questions/70298233

点赞
stackoverflow用户2858170
stackoverflow用户2858170

错误是由以下代码引起的:

ply:CanNoClip()

ply 是一个 Player 对象。在 Player 类中没有 CanNoClip 方法。因此,你试图调用一个空值,这是不允许的。

你将该函数添加到了所有字符串共享的元表中。

local plyMeta = getmetatable("player")
function plyMeta:CanNoClip()
-- 你的代码
end

"player" 是一个字符串,因此 getmetatable("player") 会给出该字符串的元表。

2021-12-11 15:03:22