Помогите с imgui пожалусйта

Kids_Mids

Новичок
Автор темы
18
0
Версия SA-MP
  1. Любая
Помогите пожалуйста. Я начинающий только кодер, мне надо сделать так чтобы в imgui было 2 кода, сейчас все объясню.
У меня есть само imgui
Код:
local imgui = require('mimgui');
local ffi = require('ffi');
local encoding = require('encoding');
encoding.default = 'CP1251'
local u8 = encoding.UTF8;

local window = imgui.new.bool(true);

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

local active = imgui.new.bool(false)

imgui.OnFrame(
    function() return true end,
    function(this)
        local size, res = imgui.ImVec2(450,250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y /2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        if(imgui.Begin(u8'Хелпер ловли от KidsMids', window, imgui.WindowFlags.NoResize)) then
           if (imgui.Button(u8'Узнать автора скрипта')) then
            sampAddChatMessage('Автор скрипта - KidsMids', -1)
           end
        end
        imgui.End();
    end
);

но у меня нет кричалки. Я хочу чтобы в имгуи была кричалка с меняющимся текстом, тоесть я словил дом/бизнес и пишет в чат типо /s Blatnoy sqd и т.д. Я хочу чтобы этот текст еще можно было менять. Кому не сложно, помогите сделать
 
Последнее редактирование:

qioxun

Участник
31
8
Помогите пожалуйста. Я начинающий только кодер, мне надо сделать так чтобы в imgui было 2 кода, сейчас все объясню.
У меня есть само imgui
Код:
local imgui = require('mimgui');
local ffi = require('ffi');
local encoding = require('encoding');
encoding.default = 'CP1251'
local u8 = encoding.UTF8;

local window = imgui.new.bool(true);

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

local active = imgui.new.bool(false)

imgui.OnFrame(
    function() return true end,
    function(this)
        local size, res = imgui.ImVec2(450,250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y /2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        if(imgui.Begin(u8'Хелпер ловли от KidsMids', window, imgui.WindowFlags.NoResize)) then
           if (imgui.Button(u8'Узнать автора скрипта')) then
            sampAddChatMessage('Автор скрипта - KidsMids', -1)
           end
        end
        imgui.End();
    end
);

но у меня нет кричалки. Я хочу чтобы в имгуи была кричалка с меняющимся текстом, тоесть я словил дом/бизнес и пишет в чат типо /s Blatnoy sqd и т.д. Я хочу чтобы этот текст еще можно было менять. Кому не сложно, помогите сделать
добавил сохранение текста в конфиг и тестовую команду, чтоб потом по ней смог переписать скрипт так, как тебе необходимо


Lua:
local imgui = require('mimgui');
local ffi = require('ffi');
local encoding = require('encoding');
local json = require('dkjson');
encoding.default = 'CP1251'
local u8 = encoding.UTF8;

local window = imgui.new.bool(true);

local config_path = 'config/lovlya.json'

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

local chant = imgui.new.bool(false)
local chant_text = imgui.new.char[256]()

imgui.OnFrame(
    function() return window[0] end,
    function(this)
        local size, res = imgui.ImVec2(450, 250), imgui.ImVec2(getScreenResolution());
        imgui.SetNextWindowSize(size, imgui.Cond.FirstUseEver);
        imgui.SetNextWindowPos(imgui.ImVec2(res.x / 2, res.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5));
        if (imgui.Begin(u8'Хелпер ловли от KidsMids', window, imgui.WindowFlags.NoResize)) then
            if (imgui.Button(u8'Узнать автора скрипта')) then
                sampAddChatMessage('Автор скрипта - KidsMids', -1)
            end

            if imgui.Checkbox(u8("Кричалка (/s)"), chant) then
                saveConfig()
            end

            if chant[0] then
                imgui.SameLine()
                imgui.PushItemWidth(300) -- Ширина поля ввода
                if imgui.InputText("##chant_text", chant_text, 256) then
                    saveConfig()
                end
                imgui.PopItemWidth()
            end
        end
        imgui.End();
    end
);

function loadConfig()
    local file = io.open(config_path, 'r')
    if file then
        local content = file:read('*a')
        file:close()
        local data = json.decode(content)
        if data then
            if data.chant_text then
                ffi.copy(chant_text, data.chant_text)
            end
            if data.chant ~= nil then
                chant[0] = data.chant
            end
        end
    end
end

function saveConfig()
    local file = io.open(config_path, 'w')
    if file then
        local data = {
            chant_text = ffi.string(chant_text),
            chant = chant[0]
        }
        file:write(json.encode(data))
        file:close()
    else
        print("Не удалось открыть файл для записи: " .. config_path)
    end
end

function getChantMessage()
    if chant[0] and #ffi.string(chant_text) > 0 then
        return ffi.string(chant_text)
    end
    return ""
end

require 'lib.moonloader'

function main()
    while not isSampAvailable() do wait(0) end
    
    while true do
        wait(0)
        sampRegisterChatCommand('test', cmd)
    end
end

function cmd()
    local message = getChantMessage()
    if #message > 0 then
        sampSendChat('/s ' .. message)
    else
        sampAddChatMessage('Текст не задан или чекбокс выключен.', -1)
    end
end