Проблема с inicfg

Iskon

Участник
Автор темы
99
16
Версия MoonLoader
.026-beta
Пишу скрипт, чтобы можно было сохранять то, что написал в инпуте в inicfg, а потом я мог достать из imgui.Combo. По идее, все уже работает, могу сохранить все в inicfg и так же могу скопировать в буфер с помощью combo. Но, у меня не большая проблема с кодировкой. В файле ini все русские символы пишутся след.образом:
РєРѕС‚ РІ бошкевпа. Но самое интересное, такое только в файле ini. В списке imgui.Combo отображается нормально, все те же русские символы.


Пример:
local inicfg = require('inicfg')
local iniFileName = 'test.ini'
local ini = inicfg.load({
    main = {
        u8"тест"
    }
}, iniFileName)
inicfg.save(ini, iniFileName)

function imgui.OnDrawFrame()
    imgui.Begin("HP", main_window_state)
    imgui.InputText(u8 'Тест', text_buffer)
    if imgui.Button(u8 "Сохранить") then
        maxV = table.maxn(ini.main)
        ini.main[maxV + 1] = text_buffer.v
        inicfg.save(ini, iniFileName)
    end
    imgui.Text(text_buffer.v)
    
    imgui.Combo(u8 "Список сохраненных объявлений", combo, ini.main, #ini.main)
    if imgui.Button(u8 "Сохранить выбранный шаблон") then
       text_buffer.v = ini.main[combo.v + 1]
        
    end
    imgui.End()
end

Я пробовал декодировать на 15-той строчке кода. А именно вот так ini.main[maxV + 1] = u8:decode(text_buffer.v)
Все действительно помогло, в ini файле писалось нормально, но уже в списке imgui.Combo уже идут знаки вопроса, вместо русских символов. Что делать?
 

Вложения

  • helperTools.lua
    3.5 KB · Просмотры: 3
  • Эм
Реакции: qdIbp

MLycoris

Режим чтения
Проверенный
1,814
1,856
На мимгуи переходи
 
  • Нравится
Реакции: qdIbp

qdIbp

Автор темы
Проверенный
1,386
1,141
удали ini в своём config
Lua:
require('lib.moonloader')

local sampev = require 'lib.samp.events'
local imgui = require 'imgui'

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

local inicfg = require('inicfg')
local iniFileName = 'test.ini'
local ini = inicfg.load({
    main = {
        u8"тест"
    }
}, iniFileName)
inicfg.save(ini, iniFileName)

local combo = imgui.ImInt(1)
local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)
state = not state



-- local ask = false -- для автоловли

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('HelperTools actived', -1)

    sampRegisterChatCommand('test22', function()
        main_window_state.v = not main_window_state.v
    end)
    
    sampRegisterChatCommand("hp", function()
        sampSendChat('/hpanel')
    end)

    while true do
        wait(0)
        imgui.Process = main_window_state.v
        if wasKeyPressed(VK_Q) and not sampIsCursorActive() then
            sampSendChat('/ha')
        end
        --[[ if ask then -- для автоловли
                sampSendChat('/ha')
                sampSendDialogResponse(772, 1, 0, _)
            
                sampSendDialogResponse(773, 1, 0, _)
                ask = false
            end]] -- для автоловли
    end
end

function sampev.onServerMessage(color, text)
    lua_thread.create(function()
        if text:find('Ваш аккаунт успешно загрузился, приятной игры!') then
            wait(1000)
            sampSendChat("/hduty")
            wait(400)
            sampSendChat("/helpers")
        end

        if text:find("off") and text:find("Jack_Richmond") then
            if text:find("H") then
                wait(1)
                sampSendChat("/hduty")
                wait(500)
                sampProcessChatInput('/q')
            end
        end

        --[[ if text:find("hp") and text:find("Jack_Richmond") then
                if text:find("H") then
                   wait(1400)
                   sampSendChat("/b /hduty")
                   wait(1400)
                   sampSendChat("/b /hduty")
                end
         end]]

    end)
    if text:find('%[Вопрос%] Игрок (%w+_%w+)%[(%d+)%] задал вопрос введите %{f9b820%}/hask %(/ha%) %{33CCFF%}чтобы ответить. Всего вопросов: (%d+)') then
        local nick, id, v = text:match(
            '%[Вопрос%] Игрок (%w+_%w+)%[(%d+)%] задал вопрос введите %{f9b820%}/hask %(/ha%) %{33CCFF%}чтобы ответить. Всего вопросов: (%d+)')
        sampAddChatMessage('{33CCFF}Игрок с ником {FFFF00}"'
            .. nick .. '"{33CCFF} и с id {FFFF00}"'
            .. id .. '"{33CCFF} задал вопрос. Всего вопросов: {FFFF00}'
            .. v .. '{33CCFF}.',
        -1)
        
        -- ask = true -- для автоловли
        return false
    end
end

function imgui.OnDrawFrame()
    imgui.Begin("HP", main_window_state)
    imgui.InputText(u8 'Тест', text_buffer)
    if imgui.Button(u8 "Сохранить") then
        maxV = table.maxn(ini.main)
        ini.main[maxV + 1] = text_buffer.v
        inicfg.save(ini, iniFileName)
    end
    imgui.Text(text_buffer.v)
    
    imgui.Combo(u8 "Список сохраненных объявлений", combo, ini.main, #ini.main)
    if imgui.Button(u8 "Сохранить выбранный шаблон") then
       text_buffer.v = ini.main[combo.v + 1]
    end
    imgui.End()
end
 
  • Влюблен
  • Нравится
Реакции: Vespan и MLycoris

Iskon

Участник
Автор темы
99
16
удали ini в своём config
Lua:
require('lib.moonloader')

local sampev = require 'lib.samp.events'
local imgui = require 'imgui'

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

local inicfg = require('inicfg')
local iniFileName = 'test.ini'
local ini = inicfg.load({
    main = {
        u8"тест"
    }
}, iniFileName)
inicfg.save(ini, iniFileName)

local combo = imgui.ImInt(1)
local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)
state = not state



-- local ask = false -- для автоловли

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('HelperTools actived', -1)

    sampRegisterChatCommand('test22', function()
        main_window_state.v = not main_window_state.v
    end)
   
    sampRegisterChatCommand("hp", function()
        sampSendChat('/hpanel')
    end)

    while true do
        wait(0)
        imgui.Process = main_window_state.v
        if wasKeyPressed(VK_Q) and not sampIsCursorActive() then
            sampSendChat('/ha')
        end
        --[[ if ask then -- для автоловли
                sampSendChat('/ha')
                sampSendDialogResponse(772, 1, 0, _)
           
                sampSendDialogResponse(773, 1, 0, _)
                ask = false
            end]] -- для автоловли
    end
end

function sampev.onServerMessage(color, text)
    lua_thread.create(function()
        if text:find('Ваш аккаунт успешно загрузился, приятной игры!') then
            wait(1000)
            sampSendChat("/hduty")
            wait(400)
            sampSendChat("/helpers")
        end

        if text:find("off") and text:find("Jack_Richmond") then
            if text:find("H") then
                wait(1)
                sampSendChat("/hduty")
                wait(500)
                sampProcessChatInput('/q')
            end
        end

        --[[ if text:find("hp") and text:find("Jack_Richmond") then
                if text:find("H") then
                   wait(1400)
                   sampSendChat("/b /hduty")
                   wait(1400)
                   sampSendChat("/b /hduty")
                end
         end]]

    end)
    if text:find('%[Вопрос%] Игрок (%w+_%w+)%[(%d+)%] задал вопрос введите %{f9b820%}/hask %(/ha%) %{33CCFF%}чтобы ответить. Всего вопросов: (%d+)') then
        local nick, id, v = text:match(
            '%[Вопрос%] Игрок (%w+_%w+)%[(%d+)%] задал вопрос введите %{f9b820%}/hask %(/ha%) %{33CCFF%}чтобы ответить. Всего вопросов: (%d+)')
        sampAddChatMessage('{33CCFF}Игрок с ником {FFFF00}"'
            .. nick .. '"{33CCFF} и с id {FFFF00}"'
            .. id .. '"{33CCFF} задал вопрос. Всего вопросов: {FFFF00}'
            .. v .. '{33CCFF}.',
        -1)
       
        -- ask = true -- для автоловли
        return false
    end
end

function imgui.OnDrawFrame()
    imgui.Begin("HP", main_window_state)
    imgui.InputText(u8 'Тест', text_buffer)
    if imgui.Button(u8 "Сохранить") then
        maxV = table.maxn(ini.main)
        ini.main[maxV + 1] = text_buffer.v
        inicfg.save(ini, iniFileName)
    end
    imgui.Text(text_buffer.v)
   
    imgui.Combo(u8 "Список сохраненных объявлений", combo, ini.main, #ini.main)
    if imgui.Button(u8 "Сохранить выбранный шаблон") then
       text_buffer.v = ini.main[combo.v + 1]
    end
    imgui.End()
end
Извиняюсь, где именно удалить?
 
  • Злость
Реакции: qdIbp

tfornik

Известный
309
222
Кодировка.
Во-первых в в настройках конфига убери u8.
Во вторых , перед сохранением в конфиг декодируй в u8 - ini.main[maxV + 1] = u8:decode(text_buffer.v)
Если что-то хочешь достать из конфига, и вставить в имгуи - используй u8:encode(ini.main. и тд)
 

Iskon

Участник
Автор темы
99
16
Кодировка.
Во-первых в в настройках конфига убери u8.
Во вторых , перед сохранением в конфиг декодируй в u8 - ini.main[maxV + 1] = u8:decode(text_buffer.v)
Если что-то хочешь достать из конфига, и вставить в имгуи - используй u8:encode(ini.main. и тд)
Ini файл уже в кодировке windows 1251
 

Iskon

Участник
Автор темы
99
16
Кодировка.
Во-первых в в настройках конфига убери u8.
Во вторых , перед сохранением в конфиг декодируй в u8 - ini.main[maxV + 1] = u8:decode(text_buffer.v)
Если что-то хочешь достать из конфига, и вставить в имгуи - используй u8:encode(ini.main. и тд)
а как использовать u8:encoding(ini.main) в imgui.Combo? Я так и сделал и выводит ошибку
Lua:
imgui.Combo(u8 "Список сохраненных объявлений", combo, u8:encode(ini.main), #ini.main)

а как использовать u8:encoding(ini.main) в imgui.Combo? Я так и сделал и выводит ошибку
Lua:
imgui.Combo(u8 "Список сохраненных объявлений", combo, u8:encode(ini.main), #ini.main)
Ошибка: bad argument #1 to 'iconv' (string expected, got table)