Как отлаживать код скрипта Lua?

local function CreateCvar(cvar, value)
    CreateClientConVar(cvar, value)
end
--cvars
CreateCvar("bunnyhop_test", 0)
CreateCvar("bunnyhop_test_off", 0)

if CLIENT then
    function ReallyHiughJumpoBHOP()
    --concommand.Add("+bhop",function()
    if GetConVarNumber("bunnyhop_test") then
    hook.Add("Think","hook",function()
    RunConsoleCommand(((LocalPlayer():IsOnGround() or LocalPlayer():WaterLevel() > 0) and "+" or "-").."jump")
    end
end)


    function ReallyHiughJumpoBHOPoff()
--concommand.Add("-bhop",function()
    if GetConVarNumber("bunnyhop_test_off") then
    RunConsoleCommand("-jump")
    hook.Remove("Think","hook")
end)

Это lua-скрипт для игры "Garry's mod". То, что это делает, должно повторяться. Я отредактировал базовый код, который работал, и теперь мой код больше не работает.

Попытка использовать createcvars, чтобы заставить его работать. У меня это работало, ошибок не было, но в игре, когда я набрал «bunnyhop_test 1» в консоли, это не сработало.

Ниже приведен исходный код, с которого я начал:

if CLIENT then
    concommand.Add("+bhop",function()
        hook.Add("Think","hook",function()
            RunConsoleCommand(((LocalPlayer():IsOnGround() or LocalPlayer():WaterLevel() > 0) and "+" or "-").."jump")
        end)
    end)

    concommand.Add("-bhop",function()
        RunConsoleCommand("-jump")
        hook.Remove("Think","hook")
    end)
end

person user1244458    schedule 09.10.2016    source источник
comment
Да, я как бы зарезал его ^.^   -  person user1244458    schedule 09.10.2016
comment
Хорошо, я вижу, что вы хотели изменить скрипт с помощью своей собственной консольной переменной. я обновил код, чтобы вы могли написать bunnyhop_test 1 для включения и bunnyhop_test 0 для отключения скрипта. Конечно, вам нужно будет запустить его с +bhop.   -  person Basilio German    schedule 09.10.2016


Ответы (1)


Вы перепутали порядок ключевых слов end. Некоторые операторы if закрываются некорректно, а объявления некоторых функций не имеют корректного закрывающего end.

Из редактирования я могу только догадываться, что вы хотели сделать:

local function CreateCvar(cvar, value)
    CreateClientConVar(cvar, value)
end

--cvars
CreateCvar("bunnyhop_test", 0)

if CLIENT then
    concommand.Add("+bhop",function()
            hook.Add("Think","hook",function()
                if GetConVarNumber("bunnyhop_test") == 1 then
                    RunConsoleCommand(((LocalPlayer():IsOnGround() or LocalPlayer():WaterLevel() > 0) and "+" or "-").."jump")
                end
            end)
        end
    end)

    concommand.Add("-bhop",function()
        RunConsoleCommand("-jump")
        hook.Remove("Think","hook")
    end)
end

Видите ли, когда функция объявлена ​​встроенной, что называется замыканием, вы должны сопоставить ее с ключевым словом end, чтобы обозначить ее конец. Также обратите внимание, что вы передаете эти встроенные функции в качестве параметров другой функции, .Add, которая начинается с ( и должна заканчиваться ). if, также необходимо иметь ключевое слово end для обозначения конца if. Все это основные принципы программирования, попробуйте прочитать больше кода, чтобы ознакомиться с тем, как писать больше кода, возможно, начните с документация lua.

Я также изменил код, чтобы вы могли написать bunnyhop_test 0 для отключения и bunnyhop_test 1 для включения скрипта.

person Basilio German    schedule 09.10.2016
comment
Спасибо, теперь у меня нет ошибок. Код работает по назначению, НО вот чего я не понимаю. Я думал, что, добавив convar, я мог бы включить/выключить его. Когда я захожу в свою консоль и набираю +bhop, все работает нормально!!! Но если я попытаюсь включить его через bunnyhop_test 1, это ничего не даст. И я не понимаю эту часть. - person user1244458; 09.10.2016
comment
GetConVarNumber вернет значение для значения, которое вы установили, но поскольку оно возвращает 0, lua воспримет его как true, только false или nil будут ложными. Вам нужно будет проверить там равенство, например GetConVarNumber("bunnyhop_test_off") == 1 - person Basilio German; 09.10.2016
comment
Так что мне нужно что-то вроде этого, может быть? ------------------------------------Если GetConVarNumber(bunnyhop_test) › 0, то - person user1244458; 09.10.2016
comment
Да, GetConVarNumber("bunnyhop_test_off") == 1 или GetConVarNumber("bunnyhop_test_off") > 0 будут работать, если только возвращаемое значение не является строкой. - person Basilio German; 09.10.2016
comment
Затем я предполагаю, что возвращаемое значение представляет собой строку, потому что она не выключается с помощью cmd bunnyhop_test_off +bhop и -bhop включает и выключает ее нормально. - person user1244458; 09.10.2016