需要Lua帮助。尝试索引字段'Config'(零值)Gmod13

时间:2013-06-30 06:57:49

标签: lua

运行我的游戏模式时出现此错误。

  

[ERROR]
  gamemodes / rp / gamemode / cl_init.lua :910:尝试索引字段'Config'(零值)
    1.未知 - gamemodes / rp / gamemode / cl_init.lua :910

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

function GM:Think()
if ( self.Config["Local Voice"] ) then             **--Referred line(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

-- Call the base class function.
return self.BaseClass:Think();
end

编辑 - sh_config.lua中的配置表。

local config = {};

   -- Command 
config["Command Prefix"]            = "/"; -- The prefix that is used for chat commands.
config["Maximum Notes"]             = 2; -- Maximum notes per player 
config["Advert Cost"]               = 60; -- The money that it costs to advertise.

config["Advert Timeout"]            = 150 -- How many seconds between adverts
config["OOC Timeout"]               = 60 -- How many seconds between OOC messages
config["Item Timer"]                = 7 -- How many seconds between item uses
config["Item Timer (S)"]            = 20 -- How many seconds between specific item uses
config["Note Fade Speed"]           = 12 -- How many minutes before nots disappear                                 

-- Voice
config["Local Voice"]               = true; -- Players can only hear a player's voice if they are near them.   This is the index being called which is creating an error.
config["Talk Radius"]               = 256; -- The radius of each player that 
--other players have to be in to hear them talk (units).

-- Player Stuff

 config["Walk Speed"]               = 150; -- The speed that players walk at.
 config["Run Speed"]                    = 275; -- The speed that players run at.


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");

我仍然得到这个愚蠢的错误。有人可以解释包含和Addcs的文件之间的区别。如何在其他文件中使sh_config的变量全局化?或者换句话说,如何通过sh_config.lua中的代码读取所需文件(cl_init),并且可以在客户端init中使用它的代码?

2 个答案:

答案 0 :(得分:0)

您需要在cl_init.lua的顶部加入sh_config.lua

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

请务必在AddCSLuaFile("path/to/lua.lua")文件中执行init.lua。您还需要在include("path/to/file.lua")init.lua进行操作。 (但这只是共享文件所必需的)

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

答案 1 :(得分:0)

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

init.lua 中 - 在其他包含的顶部中。放include("sh_config.lua")
同样在init.lua中,放置AddCSLuaFile("sh_config.lua") - 这将确保客户端下载文件,并在客户端执行。

cl_init.lua 中 - 放置include("sh_config.lua")。另外包括其他。这应该按预期工作。

看到这是一个Config文件,我认为应首先包含它,或者几乎先包含它。对于脚本加载的其余部分,它可能包含重要设置。

此外 - 通常包含shared.lua,等于shared_init文件。这可能是你的情况。如果是,您应该在shared.lua中添加一个include("sh_config.lua"),在AddCSLuaFile("sh_config.lua") - 块中添加if CLIENT then