Исходник J-Cfg // модуль для работы с JSON конфигами

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,769
11,213
Модуль упрощает работу с JSON конфигами. Работает с moonloader и на чистом LuaJit (для LuaJIt требуется библиотека json.lua от rxi)
Установка: переместить файл j-cfg.lua из вложений в папку moonloader\lib.
Внимание: не меняйте название файла!
"Minified" версия позволит вам избавится от требования установки модуля.
Что бы использовать функции без установки модуля перейдите на сайт https://goonlinetools.com/lua-minifier/, засуньте в него код библиотеки и уберите "return Json;" в конце. Затем вставьте его в свой скрипт.
Ниже вы можете увидеть пошаговую мини инструкцию. В конце будет финальный код

1. Подключение модуля
Подключаем модуль через pcall для вывода ошибки если модуль не найден.
Lua:
local JsonStatus, Json = pcall(require, 'j-cfg'); -- "безопасно" подключаем модуль
assert(JsonStatus, 'jsoncfg.lua not found!'); -- крашим скрипт если модуль не найден

2. Создаем конфиг
Для создания конфига необходимо вызвать функцию, которую возвращает модуль (в нашем случае это функция Json).
При вызове указываем следующие параметры:
  1. путь к файлу. Если указать "*название*.json", то автоматически будет сохранено в папку moonloader\config. Можно закинуть конфиг в свою папку, указав название папки перед названием, например: "myScript\settings.json", в таком случае конфиг будет создан в папке moonloader\myScript\settings.json. Создать файл вне папки moonloader не получится!
  2. стандартная таблица (недостающие значения из прочитанной таблицы будут автоматически взяты отсюда)
Функция вернет нам 3 значения:
  1. status (boolean): удалось ли загрузить конфиг
  2. cfg (table): наш конфиг
  3. message (string): код ошибки (при успешной загрузке будет "ok")
Lua:
local status, cfg = Json('myFirstConfig.json', {
    name = 'Dima',
    nickname = 'chapo',
    education = 'Electrical engineer',
    skills = {
        'shitcode'
    },
    body = {
        height = 190,
        weight = 70,
        age = 19,
        skinColor = 'white',
        eyesColor = 'blue',
        bodyParts = {
            'Head',
            'Left Hand',
            'Right Hand',
            'Left foot',
            'Right foot'
        }
    }
});

3. Взаимодействие с конфигом
3.1 Чтение значения

Lua:
print('Привет,', cfg.name, '!'); -- читаем значение из поля "name". Выведет "Dima"
3.2 Изменение значения
Lua:
cfg.name = 'Dear user!'; -- изменяем значение поля "name" на "Dear user"
3.3 Добавление нового значения
Lua:
cfg.retard = 'Vesp@n'; -- записываем текст "Vesp@n" в поле "retard"

После изменения или добавления значения вам необходимо сохранить конфиг:
Lua:
cfg.name = 'Dear user!'; -- изменяем значение
cfg.retard = 'Vesp@n'; -- добавляем значение
cfg(); -- сохраняем всю таблицу в файл

Lua:
local JsonStatus, Json = pcall(require, 'j-cfg');
assert(JsonStatus, 'j-cfg.lua not found! Download: https://github.com/GovnocodedByChapo/lua-json-config');

local status, cfg = Json('myFirstConfig.json', {
    name = 'chapo',
    education = 'Electrical engineer',
    skills = {
        'shitcode'
    },
    body = {
        height = 190,
        weight = 70,
        age = 19,
        skinColor = 'white',
        eyesColor = 'blue',
        bodyParts = {
            'Head',
            'Left Hand',
            'Right Hand',
            'Left foot',
            'Right foot'
        }
    }
});

print('Привет,', cfg.name, '!');
cfg.name = 'Dear user!';
cfg.retard = 'Vesp@n';
cfg();
GitHub
 

Вложения

  • j-cfg.lua
    5.4 KB · Просмотры: 38
Последнее редактирование:

Hinаta

Известный
784
356
Не знаю, почему никто не пишет, но новая версия не работает. Сегодня зачем-то решил скачать новый файл - 0 реакции. Не создаёт (а если не создаёт, очевидно, не читает, не сохраняет и всё прочее) файл. Нашёл и вернул старую версию либы - работает идеально при тех же условиях
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,769
11,213
Не знаю, почему никто не пишет, но новая версия не работает. Сегодня зачем-то решил скачать новый файл - 0 реакции. Не создаёт (а если не создаёт, очевидно, не читает, не сохраняет и всё прочее) файл. Нашёл и вернул старую версию либы - работает идеально при тех же условиях
обновил. Теперь необходимо указывать полный путь для сохранения
 

_Dino_

Активный
135
51
Толи я где-то проебался, толь оно ничего не делает

lua j-cfg module:
local JsonStatus, Json = pcall(require, 'j-cfg');
assert(JsonStatus, 'j-cfg.lua not found! Download: https://github.com/GovnocodedByChapo/lua-json-config');

local status, cfg = Json(getWorkingDirectory().."\\!test.json", {
    main = {
        var1 = true,
        var2 = false,
        var3 = false,
        var4 = true,
        var5 = true,
        var6 = false,
        var7 = 5,
        var8 = 1
    },
    delay = {
        var1 = 270,
        var2 = 185,
        var3 = 170,
        var4 = 110,
        var5 = 70,
        var6 = {
            var1 = 30,
            var2 = 38,
            var3 = 28,
            var4 = 23,
            var5 = 33,
            var6 = 26,
            var7 = 18
        },
        var7 = {
            var1 = 28,
            var2 = 36,
            var3 = 27,
            var4 = 25,
            var5 = 22,
            var6 = 24,
            var7 = 23,
            var8 = 25,
            var9 = 23
        }
    }
})

function main()
    while not isSampAvailable() do wait(0) end

    sampAddChatMessage("значение мэйн.вар7 - "..cfg.main.var7, -1)

    sampRegisterChatCommand("test", function()
        cfg.main.var7 = 15; -- обновим
        cfg.popka = "bobra"; -- добавим
        cfg();
        sampAddChatMessage("Обновили значение мэйн.вар7!", -1)
    end)

    wait(-1)
end
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,769
11,213
Толи я где-то проебался, толь оно ничего не делает

lua j-cfg module:
local JsonStatus, Json = pcall(require, 'j-cfg');
assert(JsonStatus, 'j-cfg.lua not found! Download: https://github.com/GovnocodedByChapo/lua-json-config');

local status, cfg = Json(getWorkingDirectory().."\\!test.json", {
    main = {
        var1 = true,
        var2 = false,
        var3 = false,
        var4 = true,
        var5 = true,
        var6 = false,
        var7 = 5,
        var8 = 1
    },
    delay = {
        var1 = 270,
        var2 = 185,
        var3 = 170,
        var4 = 110,
        var5 = 70,
        var6 = {
            var1 = 30,
            var2 = 38,
            var3 = 28,
            var4 = 23,
            var5 = 33,
            var6 = 26,
            var7 = 18
        },
        var7 = {
            var1 = 28,
            var2 = 36,
            var3 = 27,
            var4 = 25,
            var5 = 22,
            var6 = 24,
            var7 = 23,
            var8 = 25,
            var9 = 23
        }
    }
})

function main()
    while not isSampAvailable() do wait(0) end

    sampAddChatMessage("значение мэйн.вар7 - "..cfg.main.var7, -1)

    sampRegisterChatCommand("test", function()
        cfg.main.var7 = 15; -- обновим
        cfg.popka = "bobra"; -- добавим
        cfg();
        sampAddChatMessage("Обновили значение мэйн.вар7!", -1)
    end)

    wait(-1)
end
перекачай файлик, я его недавно обноаил
 
  • Нравится
Реакции: _Dino_

yoshishi

Новичок
14
0
Довольно странно, мой друг. К сожалению, изменения не были сохранены; конкретно, изменение 'cfg.body.skinColor' (которое находится во вложенной таблице) не отразилось в файле конфигурации. Однако возникло интересное наблюдение: после добавления 'cfg.name = 'владимир'' (стандартного присвоения значения таблице) непосредственно после модификации 'cfg.body.skinColor = param', изменения были успешно сохранены в файле конфигурации. Похоже, механизм сохранения работает только при изменении значений в стандартной таблице.

Lua:
local JsonStatus, Json = pcall(require, 'j-cfg');
assert(JsonStatus, 'j-cfg.lua not found! Download: [URL='https://github.com/GovnocodedByChapo/lua-json-config%27);'] https://github.com/GovnocodedByChapo/lua-json-config'); [/URL]
local status, cfg = Json('myFirstConfig.json', {
    name = 'chapo',
    education = 'Electrical engineer',
    skills = {
        'shitcode'
    },
    body = {
        height = 190,
        weight = 70,
        age = 19,
        skinColor = 'white',
        eyesColor = 'blue',
        bodyParts = {
            'Head',
            'Left Hand',
            'Right Hand',
            'Left foot',
            'Right foot'
        }
    }
});
function main()
    while not isSampAvailable() do
        wait(0)
    end
    sampRegisterChatCommand('test', function(param)
        param = tostring(param)
        cfg.body.skinColor = param
        cfg();
        sampAddChatMessage("SUCCESS!", 0xff33cb)
    end)
    wait(-1)
end
[/lua]
 
Последнее редактирование: