【问题标题】:Attempt to call method 'SetArmor' (a nil value)尝试调用方法“SetArmor”(零值)
【发布时间】:2021-06-07 18:01:55
【问题描述】:

所以脚本工作得很好,但每次它的一部分都会在控制台中出现一个错误,上面写着:

尝试调用方法“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

【问题讨论】:

  • 定义“工作得很好”是什么意思,我假设你希望它装备一些盔甲?你确定它正在做你期望的事情吗?该错误意味着v 没有函数调用SetArmor
  • 您确定错误出现在发布的代码中吗?或者其他地方?
  • 它完成了它必须做的事情,它恢复了盔甲。但是如果v 没有这个功能,那它为什么会起作用呢?游戏机出现错误
  • 好吧,它不再起作用了

标签: lua garrys-mod


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我假设您在服务器端和客户端都运行代码。您收到的错误可能是客户端错误(即 SetArmor 不是客户端函数。您无法设置玩家的盔甲客户端。因此,它返回 nil),但有效的是代码的服务器端部分,这就是代码的原因在游戏中看起来仍然很好。

    如果我没记错的话,客户端错误会在 Garry's Mod 中以黄色文本显示,因此可能需要注意确认这一点。

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

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2017-03-30
      • 2015-06-15
      • 2016-10-26
      • 2011-07-31
      • 2013-05-11
      相关资源
      最近更新 更多