- 108
- 10
- Версия MoonLoader
- .026-beta
Снова всем привет... Ну никак не могу разобраться как решить мою проблему: (УЖЕ 3 ТЕМУ СОЗДАЛ, вроде всё просто, ребятки помогают, вот же оно решение, но нет! я не догоняю)
С помощью команды я открываю окно где есть разные фичи, галочки (флажки вкл/выкл) и т.д., но при перезагрузки скрипта, ясное дело настройки спадают, так вот я бы хотел чтобы они сохранялись. Вот код:
Уже чуть ли не весь код скинул... Помогите мне пожалуйста, добавить сохранение (желательно, пожалуйста, если не сложно кинуть полный код с изменениями :) )
С помощью команды я открываю окно где есть разные фичи, галочки (флажки вкл/выкл) и т.д., но при перезагрузки скрипта, ясное дело настройки спадают, так вот я бы хотел чтобы они сохранялись. Вот код:
Код:
-- ИМПОРТ БИБЛЕОТЕК, ПЕРЕМЕННЫЕ
local sampfuncs = require 'sampfuncs'
local sampev = require('lib.samp.events')
local imgui = require 'mimgui'
local inicfg = require 'inicfg'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local WinState = imgui.new.bool()
local autoAcceptFamily = imgui.new.bool(false)
local autoAcceptFamilyTooltip = u8"Автоматически принимать приглашения в семью"
local rpInviteFamily = imgui.new.bool(false)
local rpInviteFamilyTooltip = u8"Автоматически отправлять ролевую реплику при приглашении в семью"
local inputDelay = imgui.new.int(2000)
local inputDelayTooltip = u8"Задержка перед отправкой приглашения в семью (в мс)"
local lastInviteTime = 0
local showSettings = imgui.new.bool()
local showAuthorInfo = imgui.new.bool()
local showCommands = imgui.new.bool()
local imhandle = nil
local file = getWorkingDirectory()..'\\config\\checklist.json'
local list = {}
local json = require 'dkjson'
local cjc = require ('carbJsonConfig')
local settings = {
autoAcceptFamily = imgui.new.bool();
rpInviteFamily = imgui.new.bool();
inputDelay = imgui.new.int();
}
-- main
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
cjc.load(getWorkingDirectory().."\\config\\Family-Helper.json",settings) -- загружаем конфиг, и создаем, если нет
settings() -- сохраняем конфиг
if not doesFileExist(file) then json(file):write({}) end -- это для другой функции с джон
list = json(file):read()
loadConfig()
sampRegisterChatCommand('fhelp', function() WinState[0] = not WinState[0] end) -- то самое окно фичами
while true do
wait(0)
if autoAcceptFamily[0] then
autoInviteToFamily()
end
end
end
-- и вот она, проблема
function loadConfig()
local configFile = 'config\\Family-Helper.json'
local file = io.open(configFile, 'r')
if file then
local configData = file:read('*a')
file:close()
if configData then
local loadedConfig = decodeJson(configData)
if loadedConfig then
autoAcceptFamily[0] = loadedConfig.autoAcceptFamily
rpInviteFamily[0] = loadedConfig.rpInviteFamily
inputDelay[0] = loadedConfig.inputDelay
end
end
end
end
function saveConfig()
local configFile = 'Family-Helper.json'
local config = inicfg.save(settings, configFile)
if config then
print('Config saved successfully.')
else
print('Error saving config.') -- это всегда выбивает при попытке сохраниться
end
end
imgui.OnFrame(function() return WinState[0] and not isPauseMenuActive() end, function(player)
-- ...
imgui.Spacing()
if imgui.Button(u8"Сохранить настройки") then -- вот при нажатии на кнопочку выбивает еррор
saveConfig()
end
end
-- ...
imgui.EndChild()
imgui.End()
end)
-- навсякий добавлю, у меня есть ещё функция, обычное диалоговое окно, в которое я могу добавить/удалить текст с помощью другой команды, и при перезааходе оно сохранится, а вот дсон для неё:
function json(filePath)
local f = {}
function f:read()
local f = io.open(filePath, "r+")
local jsonInString = f:read("*a")
f:close()
local jsonTable = decodeJson(jsonInString)
return jsonTable
end
function f:write(t)
f = io.open(filePath, "w")
f:write(encodeJson(t))
f:flush()
f:close()
end
return f
end