尝试调用方法“SetArmor” (一个空值)

所以脚本完全运行正常,但每次它完成它的任务时,控制台都会出现一个错误,如下所示:

尝试调用方法“SetArmor” (一个空值)

这是代码

local function ArmorRegeneration ()
  for k,v in pairs( player.GetAll() ) do
    if (v:IsValid()) then
      if v:Alive() and v:Armor() < 150 and ( !v.lastregen or v.lastregen < CurTime() - 1 ) then
        v.lastregen = CurTime()
        v:SetArmor( v:Armor() + 1 )
      end
    end
  end
end
点赞
用户3150484
用户3150484

这个脚本是否应该是服务器端而不是客户端?我从未进行过Garry的Mod开发,但我认为这可能是一个类似的问题:https://stackoverflow.com/a/58381218/3150484

另外,我建议在这里使用ipairs而不是pairs,因为player.GetAll()的表索引是数字而不是字符串。

2021-03-10 18:08:36
用户12045905
用户12045905

我猜你正在运行这段代码的客户端和服务器端。你接收到的错误可能是客户端的(即SetArmor不是客户端函数。你不能在客户端设置玩家的盔甲。因此,它返回nil),但是代码运行的服务器端部分是正常工作的,这就是为什么代码在游戏中仍然看起来正常的原因。

如果我没记错,Garry's Mod中客户端错误会以黄色文本显示,所以这可能是要注意的事项来确认此事。

考虑完全在服务器端运行此脚本,或者在只应该在服务器端运行的代码部分添加 if(SERVER)then 检查。

2021-03-18 16:40:53