Гайд INICFG для тех кто не читает документации

Smeruxa

Известный
Автор темы
1,371
726
Это строго для тех кто не читает документации.
Кто пришёл поугарать - выходите, не для вас, ведь тут ВСЁ серьезно.

И так. INICFG - это встроенная библиотека, позволяющая сохранять определённые данные в конфиг.
Для начала разберем конструкцию:
- 1) Подгрузка INICFG с ее таблицей
- 2) Сохранение INICFG
Ничего сложного.
Перейдем к коду:
Lua:
local inicfg = require("inicfg")
Тут мы в переменную inicfg закидываем все что хранится в библиотеке inicfg
Дальше нам необходимо подгрузить саму таблицу, но нужно учитывать, что эта таблица - идет в функции inicfg.load()
Шаблон функции: <table>, <path>
Автоматически в путь, куда сохранится конфиг вставляется данная директория: gtaPath.."\\moonloader\\config", на сколько знаю, поменять невозможно, ну буквально недавно пытался это сделать.
Хорошо, теперь можно и совершить подгрузку:
Lua:
local ini = inicfg.load(
    {} -- table,
    "Test.ini" -- path >> gtaPath.."\\moonloader\\config\\Test.ini"
)
Сделали, как я уже и показывал, используем данный шаблон - <table>, <path>
Теперь необходимо учесть, что inicfg требует подвкладку, т.е. то, куда сохраним переменные, но для начала лучше всего привести нашу функцию в порядок:
Lua:
local ini = inicfg.load({
  
}, "Test.ini")
Теперь мы имеем самый удобный и менее затраностроковый вариант записи
На счет подвкладок, они в конфиге будут отображаться так:
Код:
[<имя подвкладки>]
переменная = значение
[<имя второй подвкладки>]
переменная = значение
Чаще всего подвкладка всего одна, ее мы и реализуем ( необходимо иметь базу по массивам )
Lua:
local ini = inicfg.load({
    config = {
      
    }
}, "Test.ini")
В конфиге отображаться будет вот так:
Код:
[config]
Lua:
local ini = inicfg.load({
    config = {
        plakala = false
    }
}, "Test.ini")
Конфиг в свою очередь будет выглядеть так:
Lua:
[config]
plakala=false
Все просто и без магии
Теперь переверну с ног на голову то, что уже писал про то, как будет выглядеть конфиг
Пока что он не будет выглядеть ни как, т.к. мы его ни разу не сохранили, что является грубейшей ошибкой и проблемой начинающий скриптеров
Lua:
local ini = inicfg.load(--[[Начали подгрузку]]{ --[[Отклыли таблицу]]
    config = { --[[Открыли подвкладку]]
        plakala = false --[[Добавили в подвкладку переменную]]
    }--[[Закрыли подвкладку]]
}--[[Закрыли таблицу]]) --[[Завершили подгрузку]]
inicfg.save(ini, "Test.ini")
Как вы заметили, у нас появилась новая строка
Lua:
inicfg.save(ini, "Test.ini")
Это новая функция, которая дает возможность сохранить конфиг, ее шаблон: <подгруженная таблица>, <path>
Сейчас у нас все сохранится.
Думаю, теперь нам необходимо научиться использовать этот конфиг, но чтобы упростить себе задачу, мы создадим функцию, которая будет сохранять все в конфиг. Зачем?
Т.к. ini - это обычная подгруженная таблица, шаблон сохраняемого конфига, который получает значения из пути, если он существует, а если нет - задает значения, поэтому каждый раз, как конфиг изменяется, необходимо его сохранить.
Lua:
function save()
    inicfg.load(ini, "Test.ini")
end
Хорошо, мы уже имеем хороший объем кода, давайте теперь дадим возможность задавать значение переменной plakala
Lua:
local ini = inicfg.load({
    config = {
        plakala = false
    }
}, "Test.ini")
inicfg.save(ini, "Test.ini")

function main()
    while not isSampLoaded() do wait(100) end
    sampRegisterChatCommand("plakala", function(s)
        if s.lower() == "yes" then
            ini.config.plakala = true
            save()
        end
    end)
    wait(-1)
end

function save()
    inicfg.save(ini, "Test.ini")
end
Теперь мы имеем простейший способ использования конфига, при вводе /plakala yes, переменная в конфиге меняется с false на true
Но необходимо упомянуть, что главным минусом inicfg является то, что он не умеет сохранять в подвкладке массивы, это можно обойти.
Разберем 2 функции:
decodeJson(<table>) - она переводит строку JSON в массив LUA
encodeJson(<table>) - она переводить массив LUA в строку JSON
При их помощи, мы сможем сохранить, сейчас покажу вам простейший пример:
Lua:
local ini = inicfg.load({
    config = {
        tInfo = encodeJson({["hello"] = true}) -- мы перевели массив в JSON строку
    }
}, "Test.ini")
inicfg.save(ini, "Test.ini") -- Сохранили конфиг
local tInfo = decodeJson(ini.config.tInfo) -- перевели из JSON строки в LUA массив
-- А значит можем обратиться вот так:
sampAddChatMessage(tostring(tInfo["hello"]), -1) -- >> вывод: true
Если же мы сделаем так:
Lua:
local ini = inicfg.load({
    config = {
        tInfo = { -- cоздаем массив в подвкладке
            ["hello"] = true -- задаем значение
        } -- закрываем массив в подвкладке
    }
}, "Test.ini")
inicfg.save(ini, "Test.ini") -- Сохранили конфиг
local tInfo = decodeJson(ini.config.tInfo) -- перевели из JSON строки в LUA массив
sampAddChatMessage(tostring(tInfo["hello"]), -1)
То наш скрипт просто не станет работать, по скольку повторю - inicfg не умеет сохранять массивы.
Мы можем усложнить массив, сделать массив в массиве и так далее, но главное это делать под функцией encodeJson(<table>), в противном случае ваш скрипт не будет работать.
Спасибо за то что прочли и надеюсь хоть что-то поняли
 
Последнее редактирование:

Cosmo

Известный
Друг
656
2,744
на сколько знаю, поменять невозможно
Lua:
inicfg.save(ini, "..\\TestDir\\Test.ini")
.. - выполняет функцию возврата в (тут вот не помню, давно использовал) то ли в директорию с игрой, то ли в директорию с муном

Ещё мог бы упомянуть то, что одним из главных минусов inicfg, является отсутствие возможности сохранения массивов.
То бишь сохранить данную конструкцию не получится:
Lua:
local ini = inicfg.load({
    config = {
        someArray = {
            -- ...
        }
    }
}, "Test.ini")
inicfg.save(ini, "Test.ini")
 
Последнее редактирование:
  • Нравится
Реакции: Vintik

meowprd

Тот самый Котовский
Проверенный
1,278
720
писать полный гайд, когда на вики есть нормальное объяснение
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
908
1,776
Я плюсы так и учил…..
Ля, а я ж тоже получается 🤣
Вспомнил себя..
Но хотя бы когда гуглишь - то можешь наткнуться на документацию и почитать (но если ты уже +- освоился, хотя необязательно).
 

Smeruxa

Известный
Автор темы
1,371
726
Lua:
inicfg.save(ini, "..\\TestDir\\Test.ini")
.. - выполняет функцию возврата в (тут вот не помню, давно использовал) то ли в директорию с игрой, то ли в директорию с муном

Ещё мог бы упомянуть то, что одним из главных минусов inicfg, является отсутствие возможности сохранения массивов.
То бишь сохранить данную конструкцию не получится:
Lua:
local ini = inicfg.load({
    config = {
        someArray = {
            -- ...
        }
    }
}, "Test.ini")
inicfg.save(ini, "Test.ini")
Ближе к ночи переделаю гайд и напишу об этом, как можно сохранить
А можно сохранить массив?
Теперь да, описал
 
Последнее редактирование:

kizn

\ 0 _ 0 /
Всефорумный модератор
2,407
2,108
смеруха, тебя взломали? почему конфиг называется не HLcfg?
 
  • Влюблен
Реакции: Smeruxa

2elnwndrer.

Известный
58
20
Код:
sampRegisterChatCommand('setstz', function(arg)
        ini.config.servertimezone = arg;
        sampAddChatMessage('Часовой пояс сервера изменен на '..arg, -1);
        inicfg.save(ini, IniFilename);
    end);
скрипт сохраняет значения все нужные а есть варик после сохранения чтобы все изменения вступили в силу как только ввел нужныую команду в чат