Подключение inicfg модуля к mimgui

$Mr.R1ch$

Участник
Автор темы
90
23
Версия MoonLoader
.027.0-preview
Итак, мне нужно подключить этот модуль для сохранения настроек в mimgui, чтобы не слетало ничего и работало нормально. Мне нужно сделать такую штуку, в мимгуи окне есть строчка, и там нужно вести ник игрока, и вот надо чтобы этот ник отображался в отыгровке, и если менять его, то меняется в отыгровке

Набросок:
local imgui = require 'mimgui'
local new = imgui.new

local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8

local inicfg = require 'inicfg'
local config = inicfg.load({
    settings =
        name=nil
}
  }, 'settings')
local directIni = 'monetloader\\config\\Test.lua.ini'

local WinState = imgui.new.bool()

local text = imgui.new.char[32]()

sampRegisterChatCommand("bg",cmd_bg)

imgui.OnFrame(function() return WinState[0] and not isGamePaused() end, function()
imgui.SetNextWindowPos(imgui.ImVec2(500, 500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(900, 800), imgui.Cond.Always)
    imgui.Begin(u8'Тестовое окошко',WinState)
imgui.Text(u8'Введите ваше')
imgui.InputTextWithHint(u8'Пример, u8'Ник, inputField(32)
--здесь должно быть сохранение конфига
imgui.End()
end)

function cmd_bg(id)

    if id == "" then
        sampAddChatMessage(.. "Введите айди игрока: /bg [ID].", -1)
    else

    lua_thread.create(function()
        sampSendChat('Добрый день, управления "ЛСПД", (должность с конфига) (Имя Фамилия с конфига)
        wait(1200)
        sampSendChat('/do Слева на груди жетон полицейского справа -. именная нашивка с фамилией.')
        wait(1200)
        sampSendChat('/showbadge '..id..' ')
        wait(1200)
        sampSendChat('Прошу предъявить документ удостоверяющий вашу личность.')
        wait(1200)
        end)
    end
end

function main()
    sampRegisterChatCommand('test', function() WinState[0] = not WinState[0] end)
    wait(-1)
end

По возможности объясните как вообще использовать inicfg для сохранения любого скрипта чтобы я сам делал все, помогите!

Я не особо опытный скриптер, так что не судите строго
 
  • Нравится
Реакции: S1nlef

percheklii

Известный
725
266
Ну я думаю ты поймёшь.
Lua:
local inicfg = require("inicfg")
local imgui = require("mimgui")
local ffi = require("ffi")
local encoding = require("encoding")
encoding.default = ("CP1251")
local u8 = encoding.UTF8

local ini = inicfg.load({
    nicknames = {}
}, "Angar.ini")

local window = imgui.new.bool()
local buffer = imgui.new.char[256](u8(table.concat(ini.nicknames, "\n")))

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand("angar", function()
        window[0] = not window[0]
    end)
    wait(-1)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local sw, sh = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin("Angar", window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize)
    
    imgui.PushItemWidth(200)

    if imgui.InputTextMultiline("##1", buffer, 256) then
        local text = ffi.string(buffer)
        ini.nicknames = {}
        for line in text:gmatch("[^\r\n]+") do
            table.insert(ini.nicknames, line)
        end
        inicfg.save(ini, "Angar.ini")
    end

    imgui.PopItemWidth()
    imgui.End()
end)
 

$Mr.R1ch$

Участник
Автор темы
90
23
Ну я думаю ты поймёшь.
Lua:
local inicfg = require("inicfg")
local imgui = require("mimgui")
local ffi = require("ffi")
local encoding = require("encoding")
encoding.default = ("CP1251")
local u8 = encoding.UTF8

local ini = inicfg.load({
    nicknames = {}
}, "Angar.ini")

local window = imgui.new.bool()
local buffer = imgui.new.char[256](u8(table.concat(ini.nicknames, "\n")))

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand("angar", function()
        window[0] = not window[0]
    end)
    wait(-1)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local sw, sh = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin("Angar", window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize)
   
    imgui.PushItemWidth(200)

    if imgui.InputTextMultiline("##1", buffer, 256) then
        local text = ffi.string(buffer)
        ini.nicknames = {}
        for line in text:gmatch("[^\r\n]+") do
            table.insert(ini.nicknames, line)
        end
        inicfg.save(ini, "Angar.ini")
    end

    imgui.PopItemWidth()
    imgui.End()
end)
Как теперь вывести в чат по типу sampSendChat или sampAddChatMessage
 

$Mr.R1ch$

Участник
Автор темы
90
23
А бля, я тебе скинул для списка ников, а ты вроде просил для одного ника?
А так вообще table.concat(ini.nicknames)
Ну да для одного, и выдает ошибку "stack index 2, expected number, received no value: not a numeric type or numeric string (bad argument to native function)
stack traceback:
[C]: in function 'sampAddChatMessage" возможно из за этого
 

percheklii

Известный
725
266
конечно не уверен, но вроде так, нет возможности проверить, чтобы вывести допустим print(ini.set.nick)
Lua:
local inicfg = require("inicfg")
local imgui = require("mimgui")
local ffi = require("ffi")
local encoding = require("encoding")
encoding.default = ("CP1251")
local u8 = encoding.UTF8

local ini = inicfg.load({
    set = {
        nick = "percheklii"
    }
}, "test.ini")

local window = imgui.new.bool()
local buffer = imgui.new.char[256](u8(ini.set.nick)

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand("test", function()
        window[0] = not window[0]
    end)
    wait(-1)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local sw, sh = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin("test", window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize)
    
    imgui.PushItemWidth(200)

    if imgui.InputText("##1", buffer, 256) then
        ini.set.nick = u8:decode(ffi.string(buffer))
        inicfg.save(ini, "test.ini")
    end

    imgui.PopItemWidth()
    imgui.End()
end)
 

$Mr.R1ch$

Участник
Автор темы
90
23
конечно не уверен, но вроде так, нет возможности проверить, чтобы вывести допустим print(ini.set.nick)
Lua:
local inicfg = require("inicfg")
local imgui = require("mimgui")
local ffi = require("ffi")
local encoding = require("encoding")
encoding.default = ("CP1251")
local u8 = encoding.UTF8

local ini = inicfg.load({
    set = {
        nick = "percheklii"
    }
}, "test.ini")

local window = imgui.new.bool()
local buffer = imgui.new.char[256](u8(ini.set.nick)

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand("test", function()
        window[0] = not window[0]
    end)
    wait(-1)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local sw, sh = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin("test", window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize)
   
    imgui.PushItemWidth(200)

    if imgui.InputText("##1", buffer, 256) then
        ini.set.nick = u8:decode(ffi.string(buffer))
        inicfg.save(ini, "test.ini")
    end

    imgui.PopItemWidth()
    imgui.End()
end)
Не работает к сожалению
 

$Mr.R1ch$

Участник
Автор темы
90
23
Скинешь текущий код, который у тебя сейчас имеется?
Lua:
script_name '1'
local inicfg = require("inicfg")
local imgui = require("mimgui")
local ffi = require("ffi")
local encoding = require("encoding")
encoding.default = ("CP1251")
local u8 = encoding.UTF8

local ini = inicfg.load({
    set = {
        nick = "percheklii"
    }
}, "test.ini")

local window = imgui.new.bool()
local buffer = imgui.new.char[256](u8(ini.set.nick))

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand("test", function()
        window[0] = not window[0]
    end)
    wait(-1)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

imgui.OnFrame(function() return window[0] end, function(player)
    local sw, sh = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin("test", window, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize)
    if imgui.Button('1') then
    sampAddChatMessage(table.concat(ini.nick))
   end
    
    
    imgui.PushItemWidth(200)

    if imgui.InputText("##1", buffer, 256) then
        ini.set.nick = u8:decode(ffi.string(buffer))
        inicfg.save(ini, "test.ini")
    end

    imgui.PopItemWidth()
    imgui.End()
end)

Вот текущий, на кнопку 1 должна выводится информация в чат, это просто для проверки
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
Вот текущий, на кнопку 1 должна выводится информация в чат, это просто для проверки
На 35 строке замени это:
sampAddChatMessage(table.concat(ini.nick))
На это:
sampAddChatMessage(ini.set.nick)
1698863543214.png
 

$Mr.R1ch$

Участник
Автор темы
90
23
На 35 строке замени это:
sampAddChatMessage(table.concat(ini.nick))
На это:
sampAddChatMessage(ini.set.nick)
Посмотреть вложение 219810
Выдает ошибку: stack index 2, expected number, received no value: not a numeric type or numeric string (bad argument to native function)
stack traceback:

Выдает ошибку: stack index 2, expected number, received no value: not a numeric type or numeric string (bad argument to native function)
stack traceback:
[C]: in function 'sampAddChatMessage'
 
Последнее редактирование: