попытка индексировать глобальную переменную (нулевое значение) - PullRequest
0 голосов
/ 26 января 2020

Я прочитал некоторые другие ответы на это, и я понимаю, что я пытаюсь получить доступ к переменной, которая еще не была назначена. Однако из того, что я вижу, я уже назначил это. Мой Lua не самый лучший, и, может быть, я просто еще не совсем правильно понимаю область видимости, но кто-нибудь может объяснить, почему я это получаю?

include( "/vgui/cs_f4_menu.lua" )
AddCSLuaFile( "/vgui/cs_f4_menu.lua" )

local function openMenu()
    if(!CSF4Menu) then
        CSF4Menu = vgui.Create( "cs_f4_menu")
        CSF4Menu:SetVisible( false )
    end

    if(CSF4Menu:IsVisible()) then
        CSF4Menu:SetVisible( false )
        gui.EnableScreenClicker(false) --Here
    else
        CSF4Menu:SetVisible( true )
        gui.EnableScreenClicker(true)
    end
end

hook.Add("PlayerBindPress", "F4MenuBind", function(ply, bind, pressed)
    if string.find(bind, "gm_showspare2", 1, true) then
        F4Bind = input.KeyNameToNumber(input.LookupBinding(bind))
        openMenu()
    end
end)

vgui / cs_f4_menu. lua

scr_width = surface.ScreenWidth()
scr_height = surface.ScreenHeight()

box_width = math.floor(surface.ScreenWidth()*0.7)
box_height = math.floor(surface.ScreenHeight()*0.7)

local PANEL = {
    Init = function( self )
        self:SetSize( box_width, box_height )
        self:Center()
        self:SetVisible( true )
    end,

    Paint = function(self, w, h)
        surface.SetDrawColor(255, 255, 255, a=150)
        surface.DrawRect( 0, 0, w, h)
        surface.DrawOutlinedRect(2, 2, w-4, h-4)
    end
}

vgui.Register( "cs_f4_menu", PANEL)

Точная ошибка, которую я получаю:

[ERROR] addons/darkrpmodification/lua/darkrp_modules/tpr_f4menu/cl_core.lua:14: attempt to index global 'CSF4Menu' (a nil value)
1. openMenu - addons/darkrpmodification/lua/darkrp_modules/tpr_f4menu/cl_core.lua:14
2. fn - addons/darkrpmodification/lua/darkrp_modules/tpr_f4menu/cl_core.lua:29
3. unknown - addons/ulib/lua/ulib/shared/hook.lua:109

Но, опять же, я не до конца понимаю, почему. Мне пришлось переместить мой оператор включения из функции, потому что я предполагал, что локальная функция не может найти файл вне области видимости?

...