Закрытие Mimgui окна на клавишку Escape

boy next door

Участник
Автор темы
212
18
Версия MoonLoader
.026-beta
Всем хай.
Как сделать закрытие mimgui окна через escape?
И почему я не могу писать буквы в inputtext? Выставил же new.chat[128]()

Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local input = imgui.new.char[128]()
local set = new.bool(false)

local vacancy_list = {u8'Не выбрано',u8'Администратор',u8'Лидер',u8'Хелпер'}
local Imvacancy = imgui.new['const char*'][#vacancy_list](vacancy_list)
local input_vacancy = imgui.new.char[128]()
local ComboVacancy = new.int()

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

local newFrame = imgui.OnFrame(
    function() return set[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(400, 105), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Выдача/снятие должности', term, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove)
        imgui.InputTextWithHint(u8'Введите ник##1', u8'', input_vacancy, sizeof(input_vacancy), imgui.InputTextFlags.CharsDecimal)
        imgui.Combo(u8'Выберите действие',ComboVacancy,Imvacancy, #vacancy_list)    
        if imgui.Button(u8"Назначить на должность##1") then
            local vac = str(input_vacancy)
            if ComboVacancy[0] ~= 0 and vac ~= '' and tonumber(vac) > 0 then
                sampAddChatMessage('/set '..vac..' '..ComboVacancy[0]..'',-1)
            else
                sampAddChatMessage('[Ошибка]: {ffffff}Выберите все данные для выдачи должности.', 0xFF6600)
            end
        end
        imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('srok', function()
        set[0] = not set[0]
    end)
    while true do
        wait(0)
        --
    end
end

sa-mp-484.png


sa-mp-485.png
 
Последнее редактирование:

chromiusj

Kommando-Leiteinheit Bioresonanztechnik-Replika
Модератор
5,514
3,843
И почему я не могу писать буквы в inputtext? Выставил же new.chat[128]()
1714594554951.png

сам же на ловушку нарвался...
 
  • Ха-ха
Реакции: Fott

boy next door

Участник
Автор темы
212
18
Посмотреть вложение 238995
сам же на ловушку нарвался...
Увы, но не понял. У меня есть уже это, но оно вставляет только цифры.

Убрал imgui.InputTextFlags.CharsDecimal, так оно крашит скрипт.
 

chromiusj

Kommando-Leiteinheit Bioresonanztechnik-Replika
Модератор
5,514
3,843
Увы, но не понял. У меня есть уже это, но оно вставляет только цифры.

Убрал imgui.InputTextFlags.CharsDecimal, так оно крашит скрипт.
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local set = new.bool(false)

local vacancy_list = {u8'Не выбрано',u8'Администратор',u8'Лидер',u8'Хелпер'}
local Imvacancy = imgui.new['const char*'][#vacancy_list](vacancy_list)
local input_vacancy = imgui.new.char[128]()
local ComboVacancy = new.int()


local newFrame = imgui.OnFrame(
    function() return set[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(400, 105), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Выдача/снятие должности', set, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove)
        imgui.InputTextWithHint(u8'Введите ник##1', u8'', input_vacancy, sizeof(input_vacancy))
        imgui.Combo(u8'Выберите действие',ComboVacancy,Imvacancy, #vacancy_list)
        if imgui.Button(u8"Назначить на должность##1") then
            local vac = str(input_vacancy)
            if ComboVacancy[0] ~= 0 and vac ~= '' and #(vac) > 0 then
                sampAddChatMessage('/set '..vac..' '..ComboVacancy[0]..'',-1)
            else
                sampAddChatMessage('[Ошибка]: {ffffff}Выберите все данные для выдачи должности.', 0xFF6600)
            end
        end
        imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('srok', function()
        set[0] = not set[0]
    end)
    wait(-1)
end
во первых, у тебя в бегине была одна переменная для окна, а использовалсь другая
 
Последнее редактирование:

boy next door

Участник
Автор темы
212
18
Посмотреть вложение 238995
сам же на ловушку нарвался...
Закрытие на escpe крашит скрипт.
 

chromiusj

Kommando-Leiteinheit Bioresonanztechnik-Replika
Модератор
5,514
3,843
Закрытие на escpe крашит скрипт.
Lua:
addEventHandler('onWindowMessage', function(msg, wparam, lparam) -- local wm = require('window.message')?
    if wparam == 27 then
        if set[0]  then -- почему бы не копировать код, не смотря в код сниппета/функции?
            if msg == wm.WM_KEYDOWN then
                consumeWindowMessage(true, false)
            end
            if msg == wm.WM_KEYUP then
                set[0] = false
            end
        end
    end
end)