хоткей на Enter в транспорте

ca4tuk

Известный
Автор темы
166
44
Версия MoonLoader
.026-beta
если лепить хоткей на Enter в окне на imgui - персонаж выйдет из авто если он там находится, как можно принимать нажатие на клавишу но при этом не допускать последующего выполнения действий?
 
Решение
перехватывать нажатия клавиш через onWindowMessage, и при нажатии ентер при открытом окне юзать consumeWindowMessage
(это и правильнее, чем делать iskeyjustpressed в беск. цикле и т.п.)
Lua:
function onWindowMessage(msg, wparam, lparam)
    -- Нажатие клавиши
    if msg == 0x100 or msg == 0x104 then
        -- Клавиша нажата впервые, а не зажата
        if bit.band(lparam, 0x40000000) == 0 then
            if wparam == VK_RETURN then
                consumeWindowMessage(true, false) -- нажатие клавиши будет видно Lua-скриптам, но не будет передано игре
            end
        end
   end
end

moreveal

Известный
Проверенный
925
624
перехватывать нажатия клавиш через onWindowMessage, и при нажатии ентер при открытом окне юзать consumeWindowMessage
(это и правильнее, чем делать iskeyjustpressed в беск. цикле и т.п.)
Lua:
function onWindowMessage(msg, wparam, lparam)
    -- Нажатие клавиши
    if msg == 0x100 or msg == 0x104 then
        -- Клавиша нажата впервые, а не зажата
        if bit.band(lparam, 0x40000000) == 0 then
            if wparam == VK_RETURN then
                consumeWindowMessage(true, false) -- нажатие клавиши будет видно Lua-скриптам, но не будет передано игре
            end
        end
   end
end
 
Последнее редактирование:

ca4tuk

Известный
Автор темы
166
44
перехватывать нажатия клавиш через onWindowMessage, и при нажатии ентер при открытом окне юзать consumeWindowMessage
(это и правильнее, чем делать iskeyjustpressed в беск. цикле и т.п.)
Lua:
function onWindowMessage(msg, wparam, lparam)
    if msg == 0x100 or msg == 0x104 then
        if bit.band(lparam, 0x40000000) == 0 then
            if wparam == 0x0D then
                consumeWindowMessage(true, false) -- нажатие клавиши будет видно Lua-скриптам, но не будет передано игре
            end
        end
   end
end
спасибо, где почитать про bit.band?
ID клавиш это просто 0x+их_номер?

Можешь попробывать фризить игрока пока открыто окно ImGui:
это внатуре уже костыль
 
Последнее редактирование:

moreveal

Известный
Проверенный
925
624
ID клавиш это просто 0x+их_номер?
id клавиш можно глянуть на любом сайте (тут например), можешь использовать как 16-ную запись числа, так и 10-ную, но тогда в начале не нужно писать 0x, соответственно
 

ca4tuk

Известный
Автор темы
166
44
id клавиш можно глянуть на любом сайте (тут например), можешь использовать как 16-ную запись числа, так и 10-ную, но тогда в начале не нужно писать 0x, соответственно
так, с этим решили, а как понять "при открытом окне"?
если у меня imgui окно, то мне получается в начало функции onWindowMessage надо добавить проверку на открытое imgui окно?
т.е:

Lua:
function onWindowMessage(msg, wparam, lparam)
    if imgui_window.v then
        if msg == 0x100 or msg == 0x104 then
            if bit.band(lparam, 0x40000000) == 0 then
                if wparam == 0x0D then
                    consumeWindowMessage(true, false) -- нажатие клавиши будет видно Lua-скриптам, но не будет передано игре
                end
            end
        end
       end
end
 

moreveal

Известный
Проверенный
925
624
так, с этим решили, а как понять "при открытом окне"?
если у меня imgui окно, то мне получается в начало функции onWindowMessage надо добавить проверку на открытое imgui окно?
т.е:

Lua:
function onWindowMessage(msg, wparam, lparam)
    if imgui_window.v then
        if msg == 0x100 or msg == 0x104 then
            if bit.band(lparam, 0x40000000) == 0 then
                if wparam == 0x0D then
                    consumeWindowMessage(true, false) -- нажатие клавиши будет видно Lua-скриптам, но не будет передано игре
                end
            end
        end
       end
end
да, добавляешь нужные условия перед проверкой на нажатую клавишу