условие при котором отрывок кода не будет работать

w99zzl1

Участник
Автор темы
90
9
Версия MoonLoader
.026-beta
всем привет, написал простейший код:

Lua:
function cmd_ap()
    lua_thread.create(function()
        sampSendChat("/me ну тут типо рп отыгровка которая мне будет нужна, пока не придумал")
        wait(500)
        sampAddChatMessage("/ap")
    end)
end
а теперь задаюсь вопросом, как сделать так, допустим, чтобы можно было отключить эту отыгровку, чтобы при вводе команды /ap скрипт ничего не писал, делалось то, что должно "делаться" по припципу мода сервера, на котором я играю, при этом, конечно же не удаляя функцию из кода. Например я написал /test, открылось imgui окно, где список "рп отыгровок" которые я могу вкл/выкл, убрав флажок под "/ap" скрипт перестанет отыгрывать рп при вводе этой команды. Надеюсь вы меня поняли, и надеюсь на вашу помощь! Заранее спасибо!
 
Решение
Код:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

function json(filePath)
    local class = {}
        function class.save(tbl)
        if tbl then local F = io.open(filePath, 'w');    F:write(encodeJson(tbl) or {});    F:close();    return true, 'ok' end
        return false, 'table = nil'
    end
    function class.load(defaultTable)
        if not doesFileExist(filePath) then;    class.save(defaultTable or {});    end
        local F = io.open(filePath, 'r+');    local TABLE = decodeJson(F:read() or {}); F:close()
        for def_k, def_v in pairs(defaultTable) do;  if TABLE[def_k] == nil then;   TABLE[def_k] = def_v;   end;    end
        return TABLE
    end; return class...

the same

Активный
176
23
Создаёшь в окне toggle button , сохраняешь его положение в кфг . Затем при вводе команды проверяешь в каком положении у тебя это кнопка.

Lua:
toggle_button = false -- чисто ради примера,а так ты должен брать "переменную" из кфг

function cmd_ap()
    if(toggle_button) then
     lua_thread.create(function()
        sampSendChat("/me ну тут типо рп отыгровка которая мне будет нужна, пока не придумал")
        wait(500)
        sampAddChatMessage("/ap")
     end)
    end
end

Писал ответ в 6 утра с телефона, поэтому без внятного объяснения. Надеюсь ты понял, насчёт toggle button сможешь найти на форуме, то-же самое касается и сохранения состояние кнопки в кфг
 

w99zzl1

Участник
Автор темы
90
9
Создаёшь в окне toggle button , сохраняешь его положение в кфг . Затем при вводе команды проверяешь в каком положении у тебя это кнопка.

Lua:
toggle_button = false -- чисто ради примера,а так ты должен брать "переменную" из кфг

function cmd_ap()
    if(toggle_button) then
     lua_thread.create(function()
        sampSendChat("/me ну тут типо рп отыгровка которая мне будет нужна, пока не придумал")
        wait(500)
        sampAddChatMessage("/ap")
     end)
    end
end

Писал ответ в 6 утра с телефона, поэтому без внятного объяснения. Надеюсь ты понял, насчёт toggle button сможешь найти на форуме, то-же самое касается и сохранения состояние кнопки в кфг
Неа братан, не понял я( как взять переменную из кфг... Как добавить окно имгуи с флажом вкл/выкл отыгровки на /ap, я вообще самовар, не то что чайник). Спасибо за ответ
 

Masayuki

Участник
77
31
Код:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

function json(filePath)
    local class = {}
        function class.save(tbl)
        if tbl then local F = io.open(filePath, 'w');    F:write(encodeJson(tbl) or {});    F:close();    return true, 'ok' end
        return false, 'table = nil'
    end
    function class.load(defaultTable)
        if not doesFileExist(filePath) then;    class.save(defaultTable or {});    end
        local F = io.open(filePath, 'r+');    local TABLE = decodeJson(F:read() or {}); F:close()
        for def_k, def_v in pairs(defaultTable) do;  if TABLE[def_k] == nil then;   TABLE[def_k] = def_v;   end;    end
        return TABLE
    end; return class
end
createDirectory(getWorkingDirectory()..'/config/')
jPath = getWorkingDirectory() .. '/config/cfg.json' --cfg.json название твоего конфига и место, где будет храниться
j = json(jPath).load({
    flajok = false,
})

local window = imgui.new.bool()
local flajok = imgui.new.bool(j.flajok) --значение берётся из кфг

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local X, Y = getScreenResolution() --разрешение экрана
    imgui.SetNextWindowSize(imgui.ImVec2(415, 279), imgui.Cond.FirstUseEver) --размер окна, 415 ширина, 279 высота
    imgui.SetNextWindowPos(imgui.ImVec2(X / 2, Y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) --позиция окна, x & y
    imgui.Begin(u8'название окна', window)
    if imgui.Checkbox(u8'Название флажка', flajok) then --флажок он же чекбокс
        j.flajok = flajok[0] --сохранение в кфг
        json(jPath).save(j)
    end
    imgui.End()
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('test', function()
        window[0] = not window[0]
    end)
    sampRegisterChatCommand('ap', function()
        if flajok[0] then
            sampAddChatMessage('Флажок включён. Можно отыгрывать', -1)
        else
            sampAddChatMessage('Флажок выключен. Нельзя отыгрывать', -1)
        end
    end)
    wait(-1)
end
 

w99zzl1

Участник
Автор темы
90
9
Код:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

function json(filePath)
    local class = {}
        function class.save(tbl)
        if tbl then local F = io.open(filePath, 'w');    F:write(encodeJson(tbl) or {});    F:close();    return true, 'ok' end
        return false, 'table = nil'
    end
    function class.load(defaultTable)
        if not doesFileExist(filePath) then;    class.save(defaultTable or {});    end
        local F = io.open(filePath, 'r+');    local TABLE = decodeJson(F:read() or {}); F:close()
        for def_k, def_v in pairs(defaultTable) do;  if TABLE[def_k] == nil then;   TABLE[def_k] = def_v;   end;    end
        return TABLE
    end; return class
end
createDirectory(getWorkingDirectory()..'/config/')
jPath = getWorkingDirectory() .. '/config/cfg.json' --cfg.json название твоего конфига и место, где будет храниться
j = json(jPath).load({
    flajok = false,
})

local window = imgui.new.bool()
local flajok = imgui.new.bool(j.flajok) --значение берётся из кфг

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local X, Y = getScreenResolution() --разрешение экрана
    imgui.SetNextWindowSize(imgui.ImVec2(415, 279), imgui.Cond.FirstUseEver) --размер окна, 415 ширина, 279 высота
    imgui.SetNextWindowPos(imgui.ImVec2(X / 2, Y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) --позиция окна, x & y
    imgui.Begin(u8'название окна', window)
    if imgui.Checkbox(u8'Название флажка', flajok) then --флажок он же чекбокс
        j.flajok = flajok[0] --сохранение в кфг
        json(jPath).save(j)
    end
    imgui.End()
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('test', function()
        window[0] = not window[0]
    end)
    sampRegisterChatCommand('ap', function()
        if flajok[0] then
            sampAddChatMessage('Флажок включён. Можно отыгрывать', -1)
        else
            sampAddChatMessage('Флажок выключен. Нельзя отыгрывать', -1)
        end
    end)
    wait(-1)
end
Этот человек написал для меня весь код который мне нужен! БЛАГОДАРЮ тебя, золотой человек) Всего лучшего в жизни, спасибо ещё раз, это то, что мне нужно!
P.s. Не могу выразить свою благодарность! Ещё раз спасибо) Как бы это глупо и банально не звучало, желаю чтобы в жизни у тебя было всё хорошо)
 
Последнее редактирование:
  • Нравится
Реакции: Masayuki