需要 Lua 帮助。尝试对 'Config' 字段进行索引(一个无值的字段)。Gmod13。

当我运行我的游戏模式时出现了这个错误。

[ERROR]

gamemodes/rp/gamemode/ cl_init.lua:910: attempt to index field 'Config' (a nil value)

1. unknown - gamemodes/rp/gamemode/ cl_init.lua:910

config 是一个表,它的索引是 config["Run Speed"] 等,整个表在 sh_config.lua 文件中等于 GM.Config。为什么 config 没有被注册为一个值?我必须将 config 文件包含到 cl_init 文件中吗?如果是这样,怎么做?使用 include() 吗?

function GM:Think()
if ( self.Config["Local Voice"] ) then             **--出错的行(910)**
    for k, v in pairs( player.GetAll() ) do
        if ( hook.Call("PlayerCanVoice",GAMEMODE, v) ) then
            if ( v:IsMuted() ) then v:SetMuted(); end
        else
            if ( !v:IsMuted() ) then v:SetMuted(); end
        end
    end
end

-- 调用基类函数。
return self.BaseClass:Think();
end

编辑-- sh_config.lua 文件中的 config 表。

local config = {};

   -- Command
config["Command Prefix"]            = "/"; -- 用于聊天命令的前缀。
config["Maximum Notes"]             = 2; -- 每个玩家的最大笔记数量
config["Advert Cost"]               = 60; -- 广告费用。

config["Advert Timeout"]            = 150 -- 广告之间的秒数
config["OOC Timeout"]               = 60 -- OOC 消息之间的秒数
config["Item Timer"]                = 7 -- 物品使用之间的秒数
config["Item Timer (S)"]            = 20 -- 特定物品使用之间的秒数
config["Note Fade Speed"]           = 12 -- 笔记消失之前的分钟数

-- Voice
config["Local Voice"]               = true; -- 只有附近的玩家才能听到玩家的声音。 这是正在调用的索引,从而创建了错误。
config["Talk Radius"]               = 256; -- 其他玩家必须在此玩家的半径内才能听到他们讲话(单位)。

-- Player Stuff

 config["Walk Speed"]               = 150; -- 玩家行走的速度。
 config["Run Speed"]                    = 275; -- 玩家奔跑的速度。

GM.Config = config;

我在 sh_init.lua 中包含了 includecs("sh_config.lua");。在 init.lua 中,我使用了 include("sh_config.lua")AddCSLuaFile("sh_config.lua")。在 cl_init.lua 中,我使用了 include("sh_config.lua");

尽管如此,我仍然得到了这个愚蠢的错误。有人能解释一下包含和添加文件之间的区别吗?如何使 sh_config 的变量全局可用于其他文件?换句话说,我如何使希望的文件(cl_init)读取 sh_config.lua 中的代码,并且我可以在客户端的 init 中使用它的代码?

点赞
用户796822
用户796822

你需要在 cl_init.lua 的顶部包含 sh_config.lua 文件。

include("path/to/file.lua")

同时,在 init.lua 文件中要执行 AddCSLuaFile("path/to/lua.lua")。对于共享文件,还需要在 init.lua 中执行 include("path/to/file.lua")。(但是这只需要共享文件时才需要)

此外,我非常确定你的配置表的作用域将仅限于 sh_config.lua,因此您应该从变量声明中删除 local

2013-06-30 16:39:16
用户1009655
用户1009655

*sh_config* 是一个共享文件 - 这意味着它必须包括在客户端和服务器端。

init.lua 中 - 在顶部的其他包含项中放置 include("sh_config.lua")

还在 init.lua 中,放置 AddCSLuaFile("sh_config.lua") - 这将确保客户端下载文件并客户端执行。

cl_init.lua 中 - 放置 include("sh_config.lua")。此外,还要放在其他包含项周围。这应该按预期工作。

由于这是一个配置文件,我假设它应该首先或几乎首先包括。它可能包含关于脚本加载其余部分的重要设置。

此外 - 通常包括一个 shared.lua,等同于 shared_init 文件。这可能是你的情况。如果是这样,你应该在 shared.lua 中添加一个 include("sh_config.lua") 与其他包含项,并在 if CLIENT then-block 中放置 AddCSLuaFile("sh_config.lua")

2013-06-30 16:48:53