помощь по inicfg

Kermi

Участник
Автор темы
119
19
Версия MoonLoader
.027.0-preview
В я создал таблицу в ini файле, там у меня допустим -
stone = 0
metall = 0
и вот когда человек добывает руду в мимгуи отображается сколько он добыл ресурсов
то как сохранить в эти переменные добытые им ресурсы и после захода их загрузить?
 
Решение
У тебя названия полей в массиве на транслите, а текст в хуке по-английски. Просто переименуй названия полей, и всё заработает.
metall -> metal len -> linen kamen -> stone

XRLM

Против ветра рождённый
Модератор
1,566
1,146
Lua:
local ini = inicfg.load({config = {stone = 0, metall = 0}}, 'путь до файла')

ini.config.stone = 10
ini.config.metall = 5

inicfg.save(ini, 'путь до файла')
но рекомендую к использованию json-конфиги, библиотека для них:
 
  • Нравится
Реакции: kyrtion

Kermi

Участник
Автор темы
119
19
Lua:
local ini = inicfg.load({config = {stone = 0, metall = 0}}, 'путь до файла')

ini.config.stone = 10
ini.config.metall = 5

inicfg.save(ini, 'путь до файла')
но рекомендую к использованию json-конфиги, библиотека для них:
мб я что-то делаю не так ну вот смотри
123:
local cfg = inicfg.load({
    config = {
        bind = '[115]',
        metall = 0,
        len = 0,
        hlopok = 0,
        kamen = 0,
        bronza = 0,
        serebro = 0,
        zoloto = 0
    },
}, 'resh.ini')
inicfg.save(cfg, 'resh.ini')
я создал ини с переменными(на бинд 0 внимание там всё ок)

потом хук текста с экарана
213213:
function hook.onDisplayGameText(style,tm,text)
    if text == "metal + 1" then
        metall = metall + 1
    elseif text == "stone + 1" then
        kamen = kamen + 1
    elseif text == "gold + 1" then
        zoloto = zoloto + 1
    elseif text == "bronze + 1" then
        bronza = bronza + 1
    elseif text == "silver + 1" then
        serebro = serebro + 1
    end
    if text == "metal + 2" then
        metall = metall + 2
    elseif text == "stone + 2" then
        kamen = kamen + 2
    elseif text == "gold + 2" then
        zoloto = zoloto + 2
    elseif text == "bronze + 2" then
        bronza = bronza + 2
    elseif text == "silver + 2" then
        serebro = serebro + 2
    end
    if text == "metal + 3" then
        metall = metall + 3
    elseif text == "stone + 3" then
        kamen = kamen + 3
    elseif text == "gold + 3" then
        zoloto = zoloto + 3
    elseif text == "bronze + 3" then
        bronza = bronza + 3
    elseif text == "silver + 3" then
        serebro = serebro + 3
    end
    if text == "linen + 1" then
        len = len + 1
    elseif text == "cotton + 1" then
        hlopok = hlopok + 1
    end
    if text == "linen + 2" then
        len = len + 2
    elseif text == "cotton + 2" then
        hlopok = hlopok + 2
    end
    if text == "linen + 3" then
        len = len + 3
    elseif text == "cotton + 3" then
        hlopok = hlopok + 3
    end
end

34234423:
imgui.ProgressBar(len/123123123,imgui.ImVec2(100,20),u8'Льна: '..len)
и вывод в прогрес бар, вот как мне допустим я выкопал 15 камня эти 15 камня у меня отобразились в прогрес баре, всё ок и мне нужно эти 15 камня чтоб занеслись в таблицу .ini и сохранились там и при повторном подключении они отобразились в прогрес баре
 

XRLM

Против ветра рождённый
Модератор
1,566
1,146
Код прикольный, но правильней будет сделать так:
Lua:
function hook.onDisplayGameText(style,tm,text)
    if text:find('(%w+) %+ (%d+)') then
        local resource, amount = text:match('(%w+) %+ (%d+)')
        cfg.config[resource] = cfg.config[resource] + tonumber(amount)
        inicfg.save(cfg, 'путь')
    end
end
У тебя ошибка в коде, ты обращаешься к переменной, которая не объявлена.
len -> cfg.config.len или cfg.config['len']
 

XRLM

Против ветра рождённый
Модератор
1,566
1,146
Lua:
function hook.onDisplayGameText(style,tm,text)
    if text:find('(%w+) %+ (%d+)') then
        local resource, amount = text:match('(%w+) %+ (%d+)')
        if cfg.config[resource] ~= nil then
            cfg.config[resource] = cfg.config[resource] + tonumber(amount)
            inicfg.save(cfg, 'путь')
        end
    end
end
 

Kermi

Участник
Автор темы
119
19
Lua:
function hook.onDisplayGameText(style,tm,text)
    if text:find('(%w+) %+ (%d+)') then
        local resource, amount = text:match('(%w+) %+ (%d+)')
        if cfg.config[resource] ~= nil then
            cfg.config[resource] = cfg.config[resource] + tonumber(amount)
            inicfg.save(cfg, 'путь')
        end
    end
end
Ошибки теперь нету но не идёт подсчёт в мимгуи
 

Kermi

Участник
Автор темы
119
19
луа:
imgui.OnFrame(function() return show[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(400,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(200, 200), imgui.Cond.Always)
    imgui.Begin('##Window12', show, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.PushFont(example)
    imgui.SetCursorPos(imgui.ImVec2(50, 30))
    imgui.ProgressBar(kamen/123123123,imgui.ImVec2(100,20),u8'Камень: '..cfg.config.kamen)
    imgui.SetCursorPos(imgui.ImVec2(50, 55))
    imgui.ProgressBar(metall/123123123,imgui.ImVec2(100,20),u8'Метал: '..cfg.config.metall)
    imgui.SetCursorPos(imgui.ImVec2(50, 80))
    imgui.ProgressBar(bronza/123123123,imgui.ImVec2(100,20),u8'Бронза: '..cfg.config.bronza)
    imgui.SetCursorPos(imgui.ImVec2(50, 105))
    imgui.ProgressBar(serebro/123123123,imgui.ImVec2(100,20),u8'Серебро: '..cfg.config.serebro)
    imgui.SetCursorPos(imgui.ImVec2(50, 130))
    imgui.ProgressBar(zoloto/123123123,imgui.ImVec2(100,20),u8'Золото: '..cfg.config.zoloto)
    imgui.SetCursorPos(imgui.ImVec2(58, 155))
    if imgui.Button(u8"Очистить") then
        cfg.config.zoloto, cfg.config.serebro, cfg.config.bronza, cfg.config.metall, cfg.config.kamen  = 0,0,0,0,0
        sampAddChatMessage("{FF0000}M {00FF00}I {0000FF}N {FFFF00}E {800080}: {FFFFFF} Статистика очищена!", -1)
    end
    imgui.End()
end).HideCursor = true

imgui.OnFrame(function() return showik[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(400,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin('##Window13', showik, imgui.WindowFlags.NoCollapse)
    imgui.PushFont(example)
    imgui.SetCursorPos(imgui.ImVec2(50, 30))
    imgui.ProgressBar(kamen/123123123,imgui.ImVec2(100,20),u8'Камень: '..cfg.config.kamen)
    imgui.SetCursorPos(imgui.ImVec2(50, 55))
    imgui.ProgressBar(metall/123123123,imgui.ImVec2(100,20),u8'Метал: '..cfg.config.metall)
    imgui.SetCursorPos(imgui.ImVec2(50, 80))
    imgui.ProgressBar(bronza/123123123,imgui.ImVec2(100,20),u8'Бронза: '..cfg.config.bronza)
    imgui.SetCursorPos(imgui.ImVec2(50, 105))
    imgui.ProgressBar(serebro/123123123,imgui.ImVec2(100,20),u8'Серебро: '..cfg.config.serebro)
    imgui.SetCursorPos(imgui.ImVec2(50, 130))
    imgui.ProgressBar(zoloto/123123123,imgui.ImVec2(100,20),u8'Золото: '..cfg.config.zoloto)
    imgui.SetCursorPos(imgui.ImVec2(58, 155))
    if imgui.Button(u8"Очистить") then
        cfg.config.zoloto, cfg.config.serebro, cfg.config.bronza, cfg.config.metall, cfg.config.kamen  = 0,0,0,0,0
        sampAddChatMessage("{FF0000}M {00FF00}I {0000FF}N {FFFF00}E {800080}: {FFFFFF} Статистика очищена!", -1)
    end
    imgui.End()
end).HideCursor = true

---Ферма

imgui.OnFrame(function() return showferma1[0] end, function(player)
    imgui.SetNextWindowPos(imgui.ImVec2(400,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(200, 130), imgui.Cond.Always)
    imgui.Begin('##Window12333', showferma1, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.PushFont(example)
    imgui.SetCursorPos(imgui.ImVec2(50, 30))
    imgui.ProgressBar(len/123123123,imgui.ImVec2(100,20),u8'Льна: '..cfg.config.len)
    imgui.SetCursorPos(imgui.ImVec2(50, 55))
    imgui.ProgressBar(hlopok/123123123,imgui.ImVec2(100,20),u8'Хлопок: '..cfg.config.hlopok)
    imgui.SetCursorPos(imgui.ImVec2(58, 85))
    if imgui.Button(u8"Очистить") then
        cfg.config.hlopok, cfg.config.len  = 0,0
        sampAddChatMessage("{FF0000}M {00FF00}I {0000FF}N {FFFF00}E {800080}: {FFFFFF} Статистика очищена!", -1)
    end
    imgui.End()
end).HideCursor = true
- тут 4 окна они показывают счёт
1123:
local metall = cfg.config.metall
local len = cfg.config.len
local hlopok = cfg.config.hlopok
local kamen = cfg.config.kamen
local bronza = cfg.config.bronza
local serebro = cfg.config.serebro
local zoloto = cfg.config.zoloto
- переменные
232:
local cfg = inicfg.load({
    config = {
        bind = '[115]',
        metall = 0,
        len = 0,
        hlopok = 0,
        kamen = 0,
        bronza = 0,
        serebro = 0,
        zoloto = 0
    },
}, 'resh.ini')
inicfg.save(cfg, 'resh.ini')
-ини
 

XRLM

Против ветра рождённый
Модератор
1,566
1,146
У тебя названия полей в массиве на транслите, а текст в хуке по-английски. Просто переименуй названия полей, и всё заработает.
metall -> metal len -> linen kamen -> stone
 
  • Нравится
Реакции: Kermi