2013-06-30 99 views
0

當我運行我的遊戲模式時發生此錯誤。需要Lua幫助。嘗試索引字段「配置」(一個零值)Gmod13

[ERROR]
遊戲模式/ RP /遊戲模式/ cl_init.lua:910:嘗試索引字段 '配置'(一個零值)
1.未知 - 遊戲模式/ RP /遊戲模式/ cl_init.lua:910

config是一個表,具有索引的諸如config["Run Speed"]和整個表全局等於設定爲GM.Configsh_config.lua文件。爲什麼配置沒有被註冊爲一個值?我必須將配置文件包含到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");

雖然我仍然得到這個愚蠢的錯誤。有人能解釋包含和添加文件的區別嗎?如何在其他文件中將sh_config的變量設爲全局變量?換句話說,我如何通過sh_config.lua中的代碼讀取所需的文件(cl_init),並且我可以在客戶端init中使用它的代碼?

+0

顯示負責設置GM.Config表的代碼以及此代碼獲取的位置調用。 – greatwolf

+0

添加代碼。你的意思是它叫什麼名字? –

+0

@NickZook他的意思是一個片段,你可以叫'GM:Think()' –

回答

0

您需要在cl_init.lua的頂部包含sh_config.lua

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

一定要做到AddCSLuaFile("path/to/lua.lua")init.lua文件中。您還需要在init.lua中執行include("path/to/file.lua")。 (雖然這只是共享文件所必需的)

另外我非常確定你的配置表的範圍將被限制在sh_config.lua中,所以你應該從你的變量聲明中刪除local

+0

這通常也在shared.lua中完成。 Idk關於這個腳本。 –

+0

這可能是一個更好的方法去做,我真的忘了。自從我在Lua爲GMod開發以來已經有一段時間了。我猜你可以做如果服務器然後AddCSLuaFile(「」)結束 –

+0

如果CLIENT然後包括(「」)結束 –

0

* sh_config *是一個共享文件 - 意味着它必須包含在客戶端和服務器端。

init.lua - 在頂部的其他包括。 Put include("sh_config.lua")
也在init.lua中,把AddCSLuaFile("sh_config.lua") - 這將確保文件被客戶端下載,並執行客戶端。

cl_init.lua - put include("sh_config.lua")。另外還包括其他內容。這應該按預期工作。

看到這是一個配置文件,我認爲它應該被包含在第一個或幾乎第一個。它可能包含重要的設置,用於腳本加載的其餘部分。

此外 - 通常包含shared.lua,等於shared_init文件。這可能是你的情況。如果是,則應添加一個include("sh_config.lua"),其中包含shared.lua和AddCSLuaFile("sh_config.lua")中的if CLIENT then - 區塊

+0

編輯後,仍然出現錯誤。 –

+0

cl_init.lua中包含的文件在哪裏?高於或低於GM:Think()? –

+0

我將它列入最高層。正確的包含(「sh_init.lua」);像第八行。 –

相關問題