input в sampRegisterChatCommand

7 СМЕРТНЫХ ГРЕХОВ

Известный
Автор темы
515
159
Версия MoonLoader
.026-beta
Как из инпута брать команду в sampRegisterChatCommand ?
LUA:
local ini = inicfg.load({
   main = {
      bind = "Свободно##1",
      bind2 = "Свободно##2",
      command = "",
      command2 = "hl",
   },
}, "settings.ini")

local str, sizeof = ffi.string, ffi.sizeof
local inputField = new.char[256](ini.main.command)
local inputField2 = new.char[256](ini.main.command2)

--main--
sampRegisterChatCommand(inputField2[0], function() renderWindow[0] = not renderWindow[0] end)

--mimgui--
if imgui.InputText(u8'Команда для открытие меню', inputField2, sizeof(inputField2)) then
   ini.main.command = ffi.string(inputField2)
   save()
end
 
Решение
Как из инпута брать команду в sampRegisterChatCommand ?
LUA:
local ini = inicfg.load({
   main = {
      bind = "Свободно##1",
      bind2 = "Свободно##2",
      command = "",
      command2 = "hl",
   },
}, "settings.ini")

local str, sizeof = ffi.string, ffi.sizeof
local inputField = new.char[256](ini.main.command)
local inputField2 = new.char[256](ini.main.command2)

--main--
sampRegisterChatCommand(inputField2[0], function() renderWindow[0] = not renderWindow[0] end)

--mimgui--
if imgui.InputText(u8'Команда для открытие меню', inputField2, sizeof(inputField2)) then
   ini.main.command = ffi.string(inputField2)
   save()
end
Перерегистрируй команду после изменения инпута/нажатия на кнопку
Lua:
local inicfg = require 'inicfg'...

riverya4life

Известный
393
170
Я насколько знаю никак, так что лучше использовать function ev.onSendCommand(cmd) (ev это lib.samp.events) или же onSendRpc

Код:
function onSendRpc(id, bs, priority, reliability, orderingChannel, shiftTs)
    if id == 50 then
        local cmd_len = raknetBitStreamReadInt32(bs)
        local cmd = raknetBitStreamReadString(bs, cmd_len)
        
        if cmd:find("^"..ini.main.command2.."$") then
            renderWindow[0] = not renderWindow[0]
        end
    end
end
 

CaJlaT

Овощ
Модератор
2,805
2,606
Как из инпута брать команду в sampRegisterChatCommand ?
LUA:
local ini = inicfg.load({
   main = {
      bind = "Свободно##1",
      bind2 = "Свободно##2",
      command = "",
      command2 = "hl",
   },
}, "settings.ini")

local str, sizeof = ffi.string, ffi.sizeof
local inputField = new.char[256](ini.main.command)
local inputField2 = new.char[256](ini.main.command2)

--main--
sampRegisterChatCommand(inputField2[0], function() renderWindow[0] = not renderWindow[0] end)

--mimgui--
if imgui.InputText(u8'Команда для открытие меню', inputField2, sizeof(inputField2)) then
   ini.main.command = ffi.string(inputField2)
   save()
end
Перерегистрируй команду после изменения инпута/нажатия на кнопку
Lua:
local inicfg = require 'inicfg'
local ffi = require "ffi"
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new, str, sizeof = imgui.new, ffi.string, ffi.sizeof
local ini = inicfg.load({
    settings = {
        cmd = 'test'
    },
}, 'test.ini')
if not doesFileExist('moonloader/config/test.ini') then inicfg.save(ini, 'test.ini') end

local window = new.bool(false)
local cmd = new.char[256](u8(ini.settings.cmd))

function main()
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand(ini.settings.cmd, cmd_func)
end

function cmd_func()
    window[0] = not window[0]
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)
imgui.OnFrame(function() return window[0] end,
function(player)
    imgui.Begin('Command Demo', window)
        imgui.InputText(u8'Команда скрипта', cmd, sizeof(cmd))
        imgui.SameLine()
        if imgui.Button(u8'Применить') then
            sampUnregisterChatCommand(ini.settings.cmd)
            ini.settings.cmd = u8:decode(str(cmd))
            inicfg.save(ini, 'test.ini')
            sampRegisterChatCommand(ini.settings.cmd, cmd_func)
        end
    imgui.End()
end)

Если у тебя несколько команд, используй массивы
 
Последнее редактирование: