- 1,371
- 726
Это строго для тех кто не читает документации.
Кто пришёл поугарать - выходите, не для вас, ведь тут ВСЁ серьезно.
И так. INICFG - это встроенная библиотека, позволяющая сохранять определённые данные в конфиг.
Для начала разберем конструкцию:
- 1) Подгрузка INICFG с ее таблицей
- 2) Сохранение INICFG
Ничего сложного.
Перейдем к коду:
Тут мы в переменную inicfg закидываем все что хранится в библиотеке inicfg
Дальше нам необходимо подгрузить саму таблицу, но нужно учитывать, что эта таблица - идет в функции inicfg.load()
Шаблон функции: <table>, <path>
Автоматически в путь, куда сохранится конфиг вставляется данная директория: gtaPath.."\\moonloader\\config", на сколько знаю, поменять невозможно, ну буквально недавно пытался это сделать.
Хорошо, теперь можно и совершить подгрузку:
Сделали, как я уже и показывал, используем данный шаблон - <table>, <path>
Теперь необходимо учесть, что inicfg требует подвкладку, т.е. то, куда сохраним переменные, но для начала лучше всего привести нашу функцию в порядок:
Теперь мы имеем самый удобный и менее затраностроковый вариант записи
На счет подвкладок, они в конфиге будут отображаться так:
Чаще всего подвкладка всего одна, ее мы и реализуем ( необходимо иметь базу по массивам )
В конфиге отображаться будет вот так:
Конфиг в свою очередь будет выглядеть так:
Все просто и без магии
Теперь переверну с ног на голову то, что уже писал про то, как будет выглядеть конфиг
Пока что он не будет выглядеть ни как, т.к. мы его ни разу не сохранили, что является грубейшей ошибкой и проблемой начинающий скриптеров
Как вы заметили, у нас появилась новая строка
Это новая функция, которая дает возможность сохранить конфиг, ее шаблон: <подгруженная таблица>, <path>
Сейчас у нас все сохранится.
Думаю, теперь нам необходимо научиться использовать этот конфиг, но чтобы упростить себе задачу, мы создадим функцию, которая будет сохранять все в конфиг. Зачем?
Т.к. ini - это обычная подгруженная таблица, шаблон сохраняемого конфига, который получает значения из пути, если он существует, а если нет - задает значения, поэтому каждый раз, как конфиг изменяется, необходимо его сохранить.
Хорошо, мы уже имеем хороший объем кода, давайте теперь дадим возможность задавать значение переменной plakala
Теперь мы имеем простейший способ использования конфига, при вводе /plakala yes, переменная в конфиге меняется с false на true
Но необходимо упомянуть, что главным минусом inicfg является то, что он не умеет сохранять в подвкладке массивы, это можно обойти.
Разберем 2 функции:
decodeJson(<table>) - она переводит строку JSON в массив LUA
encodeJson(<table>) - она переводить массив LUA в строку JSON
При их помощи, мы сможем сохранить, сейчас покажу вам простейший пример:
Если же мы сделаем так:
То наш скрипт просто не станет работать, по скольку повторю - inicfg не умеет сохранять массивы.
Мы можем усложнить массив, сделать массив в массиве и так далее, но главное это делать под функцией encodeJson(<table>), в противном случае ваш скрипт не будет работать.
Спасибо за то что прочли и надеюсь хоть что-то поняли
Кто пришёл поугарать - выходите, не для вас, ведь тут ВСЁ серьезно.
И так. INICFG - это встроенная библиотека, позволяющая сохранять определённые данные в конфиг.
Для начала разберем конструкцию:
- 1) Подгрузка INICFG с ее таблицей
- 2) Сохранение INICFG
Ничего сложного.
Перейдем к коду:
Lua:
local inicfg = require("inicfg")
Дальше нам необходимо подгрузить саму таблицу, но нужно учитывать, что эта таблица - идет в функции inicfg.load()
Шаблон функции: <table>, <path>
Автоматически в путь, куда сохранится конфиг вставляется данная директория: gtaPath.."\\moonloader\\config", на сколько знаю, поменять невозможно, ну буквально недавно пытался это сделать.
Хорошо, теперь можно и совершить подгрузку:
Lua:
local ini = inicfg.load(
{} -- table,
"Test.ini" -- path >> gtaPath.."\\moonloader\\config\\Test.ini"
)
Теперь необходимо учесть, что 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")
Сейчас у нас все сохранится.
Думаю, теперь нам необходимо научиться использовать этот конфиг, но чтобы упростить себе задачу, мы создадим функцию, которая будет сохранять все в конфиг. Зачем?
Т.к. ini - это обычная подгруженная таблица, шаблон сохраняемого конфига, который получает значения из пути, если он существует, а если нет - задает значения, поэтому каждый раз, как конфиг изменяется, необходимо его сохранить.
Lua:
function save()
inicfg.load(ini, "Test.ini")
end
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
Но необходимо упомянуть, что главным минусом 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)
Мы можем усложнить массив, сделать массив в массиве и так далее, но главное это делать под функцией encodeJson(<table>), в противном случае ваш скрипт не будет работать.
Спасибо за то что прочли и надеюсь хоть что-то поняли
Последнее редактирование: