Гайд Как ХотКей из imgui_addons связать с Json [Замена ini]

  • Автор темы Удалённый пользователь 341712
  • Дата начала
У

Удалённый пользователь 341712

Гость
Автор темы
Создатель: Albertio <3.
И так, во первых нам нужен путь, куда мы будем сохранять наш файл. Пример:
Lua:
local fpath = getGameDirectory()..'\\moonloader\\Show.json'
Дальше в массив записываем все клавиши и бинды, которые хотим.

Lua:
local vkeys = require 'vkeys'
local bActive = 0
local defTable = { activOne = { v = { vkeys.VK_O } } }
bActive будет являться основой хот кея.
Клавиша O теперь будет являться по умолчанию.
Теперь декодим Json, и переводим массив в наш файлик.

Lua:
if doesFileExist(fpath) then
    local f = io.open(fpath, 'r')
    if f then
        defTable = decodeJson(f:read('*a'))
        f:close()
    end
   end
Дальше сделаем функцию сохранения настроек
Lua:
function savesettings()
  if doesFileExist(fpath) then
    local f = io.open(fpath, 'w+')
    if f then
      f:write(encodeJson(defTable)):close()
    end
  end
end
Теперь давайте разберем хот кей в имгуи.
Lua:
local tLastOne = {}
if imguiad.HotKey("##ActiveOne", defTable.activOne, tLastOne, 100) then
    rkeys.changeHotKey(bActivate, defTable.activOne.v)
    savesettings()
end
Теперь хот кей сделали, делаем регистрацию хот кея.
Lua:
bActivate = rkeys.registerHotKey(defTable.activOne.v, true, function()
    if not sampIsChatInputActive() and not sampIsDialogActive() then
        sampSetChatInputEnabled(true)
        sampSetChatInputText('/su ')
    end
end)
Если у вас вылезла ошибка по поводу defTable.activOne nil, ну или любая другая ошибка, делаем следующее:
Lua:
--function savesettings()
  if doesFileExist(fpath) then
    local f = io.open(fpath, 'w+')
    if f then
      f:write(encodeJson(defTable)):close()
    end
  end
--end
Заходим в игру.Это для того, чтобы игра спокойно загрузила файл, создала нужный код в Json.
Lua:
function savesettings()
  if doesFileExist(fpath) then
    local f = io.open(fpath, 'w+')
    if f then
      f:write(encodeJson(defTable)):close()
    end
  end
end
Возвращаем обратно, заходим. А теперь давайте соединим все вместе
Lua:
local imguiad = require 'lib.imgui_addons'
local bActivate = 0
local defTable = { activOne = { v = { vkeys.VK_O } } }
local fpath = getGameDirectory()..'\\moonloader\\Show.json'

-- main

bActivate = rkeys.registerHotKey(defTable.activOne.v, true, function()
    if not sampIsChatInputActive() and not sampIsDialogActive() then
        sampSetChatInputEnabled(true)
        sampSetChatInputText('/su ')
    end
end)

-- imgui

local tLastOne = {}
if imguiad.HotKey("##ActiveOne", defTable.activOne, tLastOne, 100) then
    rkeys.changeHotKey(bActivate, defTable.activOne.v)
    savesettings()
end

-- любая часть кода

function savesettings()
  if doesFileExist(fpath) then
    local f = io.open(fpath, 'w+')
    if f then
      f:write(encodeJson(defTable)):close()
    end
  end
end
Дико извиняюсь за тупое объяснение и прошу не гнобить.
Для собственного удобства я поставил авто скачку если Json файла в папке нет.
К слову, если в JSON файле уже что-то есть, не нужно сложные схемы с savesettings проводить, просто уже спокойно добавляйте в массив свои хот кеи
 
Последнее редактирование модератором:

AnWu

Guardian of Order
Всефорумный модератор
4,686
5,166
кстати внутри хоткея не обязательно на чат проверять. есть препроцесмор, если его так можно назвать, в теме rkeys о нем написано.

А что за бред, иногда я жму кнопку и во 2-ой раз только получается активировать то или иное окно, а регистрация происходит через rkeys, что скажешь?
гавнокод либ очевидно

Не думаешь фиксить?)
неа
 

Hideme Flow

Известный
555
193
ну сохранить но сохранится а как прочесть? и чтобы при запуске ета кнопка загружалась