Значение клавиш в HotKey

W1ll04eison

Участник
Автор темы
328
19
Версия MoonLoader
.026-beta
Как сделать так что бы в строке №103 (wasKeyPressed())значение клавиши бралось из ActiveClockMenu
Вот так: wasKeyPressed(ActiveClockMenu.v) уже пробывал - выдает ошибку и крашит


Код:
Lua:
script_name('Nagra.zden') -- название скрипта
script_author('William_Adomson SAMP RP 02') -- автор скрипта
script_description('command') -- описание скрипта
--========================================================--
require 'moonloader'
local events = require 'lib.samp.events'
local inicfg = require 'inicfg'
local font = renderCreateFont('Century Gothic', 14, 5)
local keys = require "vkeys"
local imgui = require "imgui" --библиотека imgui
imgui.ToggleButton = require('imgui_addons').ToggleButton
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
--=====================================================--
local tag = "[Nagra.zden]:"
local blue = '{00BFFF}' -- синий
local blue_color = 0x00BFFF -- синий цвет
local white = '{FFFFFF}' -- белый
local white_color = 0xFFFFFF -- белый цвет
local red = '{FF0000}' -- красный
local red_color = 0xFF0000 -- красный цвет
local orange = '{FFA500}' -- ораньжевый
local orange_color = 0xFFA500 -- ораньжевый цвет
local green = '{008000}' -- зеленый
local green_color = 0x008000 -- зеленый цвет
local banan = '{FFE4B5}' -- отдельенный банановый
local banan_color = 0xFFE4B5 -- отдаленный банановый цвет
local Violet = 0x8A2BE2 --фиолетовый
local Violet = '{8A2BE2}' --фиолетовый
local red = '{FF0000}'-- красный
local color_red = 0xFF0000 -- красный
local ber = '{00FFFF}' -- берюзовый
local ber_color = 0x00FFFF -- берюзовый цвет
local laim = '{00FF00}' --лаймовый
local laim_color = 0x00FF00 -- лаймовый цвет
local yellow = '{FFFF00}' --желтый
local yellow_color = 0xFFFF00 -- желтый цвет

local nastroiki = imgui.ImBool(false)

local rkeys = require 'rkeys'
imgui.HotKey = require('imgui_addons').HotKey

local tLastKeys = {}

function sampGetPlayerIdByNickname(nick)
    nick = tostring(nick)
    local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    score = sampGetPlayerScore(id)
    ping = sampGetPlayerPing(id)
    if nick == sampGetPlayerNickname(id) then return myid end
    for i = 0, 1003 do
      if sampIsPlayerConnected(i) and sampGetPlayerNickname(i) == nick then
        return i
      end
    end
end

--=====================================================--
local directIniiiiii = 'Nagra.zden'
local ini = inicfg.load(inicfg.load({
    active = {
        show = false,
        bindClock = "[18]",
        bindPass = "[18]",
    },
}, directIniiiiii))
inicfg.save(ini, directIniiiiii)
local show = imgui.ImBool(ini.active.show)

local ActiveClockMenu = {
    v = decodeJson(ini.active.bindClock)
}

--=====================================================--
local editingPos = false


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage(tag.. " {FFFFFF} Скрипт успешно загружен. | by {008000}W1ll04eison", 0x00FFFF)
    sampAddChatMessage(tag.. " {FFFFFF} Version 1.1.0. | Что бы открыть окно настроек, напишите: {FFE4B5}/keyset", 0x00FFFF)

    local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    
    sampRegisterChatCommand("set", function()
        nastroiki.v = not nastroiki.v
    end)


    bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc)
    
    while true do
    wait(0)

        inicfg.save(ini, directIniiiiii)
        ini.active.show = show.v

        local result, handle = getCharPlayerIsTargeting(playerHandle)
        if result then
            if wasKeyPressed(ActiveClockMenu) then
                _, playeridd = sampGetPlayerIdByCharHandle(handle)
                nastroiki.v = not nastroiki.v
            end
        end

        imgui.Process = nastroiki.v
    end
end

function getLocalPlayerId()
    local _, id = sampGetPlayerIdByCharHandle(playerPed)
    return id
end

--=================ЗАКРЫТИЕ ДИАЛОГОВОГО ОКНА IMGUI НА ESC========================
function onWindowMessage(msg, wparam, lparam)
    if msg == 0x100 or msg == 0x101 then
        if (wparam == keys.VK_ESCAPE and (nastroiki.v)) and not isPauseMenuActive() then
            consumeWindowMessage(true, false)
            if msg == 0x101 then
                if nastroiki.v then
                    nastroiki.v = false;
                else nastroiki.v = false end
            end
        end
    end
end


function imgui.OnDrawFrame()
    if nastroiki.v then
        local sw, sh = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(368, 100), imgui.Cond.FirstUseEver)

        imgui.Begin(u8"                           KeyRender | Версия: 1.1.0", nastroiki, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize)

        imgui.Text(u8'Включение / Отключение текстдрайвера')
        imgui.SameLine()
        if imgui.ToggleButton(u8'##1110', show) then

        end
        imgui.Text(u8'Выдача розыска игроку '..sampGetPlayerNickname(playeridd).. ' ['..playeridd..']')

        if imgui.HotKey('##012321', ActiveClockMenu, tLastKeys, 100) then
            rkeys.changeHotKey(bindClock, ActiveClockMenu.v)

            ini.active.bindClock = encodeJson(ActiveClockMenu.v)
            inicfg.save(ini, directIniiiiii)
        end

        imgui.End()
    end

end

function save()
    inicfg.save(ini, directIniiiiii)
end

function sampGetPlayerIdByTarget()
    local result, ped = getCharPlayerIsTargeting(playerHandle)

    if result then
        local iresult, id = sampGetPlayerIdByCharHandle(ped)
        if iresult then return id, ped end
    end

    return false
end
 

W1ll04eison

Участник
Автор темы
328
19
103 строку замени на это
Lua:
if wasKeyPressed((ActiveClockMenu.v)[1]) then
Выбивает ошибку:
Lua:
(error)    Nagra.zden: C:\Games\GTA-SA\moonloader\lib\rkeys.lua:106: attempt to call field 'callback' (a nil value)
stack traceback:
    C:\Games\GTA-SA\moonloader\lib\rkeys.lua: in function <C:\Games\GTA-SA\moonloader\lib\rkeys.lua:89>
(error)    Nagra.zden: Script died due to an error. (063C167C)
 

W1ll04eison

Участник
Автор темы
328
19
Возможно у тебя не скачана библиотека rkeys
Нет, она есть.
Если написать вот так: wasKeyPressed(82(как пример, можно любое число любой клавиши)) то все работает


Выдает ошибку на вот эти строки из файла rkeys.lua:
106 строка:
Lua:
v.callback(k, v.keys)
89 строка:
Lua:
lua_thread.create(function ()
 
Последнее редактирование:

mzxer

Активный
81
119
Выбивает ошибку:
Lua:
(error)    Nagra.zden: C:\Games\GTA-SA\moonloader\lib\rkeys.lua:106: attempt to call field 'callback' (a nil value)
stack traceback:
    C:\Games\GTA-SA\moonloader\lib\rkeys.lua: in function <C:\Games\GTA-SA\moonloader\lib\rkeys.lua:89>
(error)    Nagra.zden: Script died due to an error. (063C167C)
ты регаешь колбек передавая вместо функции nil (т.к. переменной не существует), это в 93 строке.

Lua:
bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc)
-- clockFunc в коде ГДЕ?

а вот мой способ проверки с wasKeyPressed изначально рабочий, специально ради твоей темы протестировал в отдельном скрипте
 

W1ll04eison

Участник
Автор темы
328
19
ты регаешь колбек передавая вместо функции nil (т.к. переменной не существует), это в 93 строке.

Lua:
bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc)
-- clockFunc в коде ГДЕ?

а вот мой способ проверки с wasKeyPressed изначально рабочий, специально ради твоей темы протестировал в отдельном скрипте
Я что то про clockFunc и забыл)

Решил проблему.