id клавиш управления

Статус
В этой теме нельзя размещать новые ответы.

Tema05

Известный
Автор темы
1,506
475
Версия MoonLoader
.026-beta
Как можно получить айдишники клавиш, которые используются для каких либо импутов? Например для бега
 
Решение
RsKeyCode можно сопоставить с клавишами из vkeys, но мне лень
Lua:
local ffi = require("ffi")
local vkeys = require("vkeys")

local RsKeyCode = {
    [1000] = "rsESC",
    [1001] = "rsF1",
    [1002] = "rsF2",
    [1003] = "rsF3",
    [1004] = "rsF4",
    [1005] = "rsF5",
    [1006] = "rsF6",
    [1007] = "rsF7",
    [1008] = "rsF8",
    [1009] = "rsF9",
    [1010] = "rsF10",
    [1011] = "rsF11",
    [1012] = "rsF12",
    [1013] = "rsINSERT",
    [1014] = "rsDEL",
    [1015] = "rsHOME",
    [1016] = "rsEND",
    [1017] = "rsPGUP",
    [1018] = "rsPGDN",
    [1019] = "rsUP",
    [1020] = "rsDOWN",
    [1021] = "rsLEFT",
    [1022] = "rsRIGHT",
    [1023] = "rsDIV",
    [1024] = "rsMUL",
    [1025] = "rsADD",
    [1026] = "rsSUB",
    [1027] = "rsEXTDEL",
    [1028] = "rsEXT_END",
    [1029] = "rsEXTDOWN"...

chapo

tg/inst: @moujeek
Модератор
9,080
12,069
 
  • Bug
Реакции: sizeoftrickster

Tema05

Известный
Автор темы
1,506
475
Муть какая-то. У меня на движение вперёд стояла кнопка W и я поменял на стрелочку вверх. По итогу в файле изменилось:
0x2FC 0x57=>0xFB
0x2FD 0x00=>0x03
Но чел утверждает что это оффсета клавиш из 2 столбца, но у меня они в 1. Ну ок. Почему-то стрелочка вверх имеющая код 0x26 тут обозначается как 0xFB. Следующий бат также поменялся, но хз почему именно 0x3, я не мог найти тут логики

Вот что изменилось когда я в качестве 2 кнопки обратно добавил W. Видно что стрелочка сместилась раньше по оффсетам (на месте где по идеи 1 столбец), а её место заняла W. Также какой-то байтик видимо означающий номер в столбце изменился.
0x38 0x20=>0xFB
0x39 0x04=>0x03
0x3C 0x00=>0x01
0x2FC 0xFB=>0x57
0x2FD 0x03=>0x00
0x300 0x01=>0x02

Далее я решил поменять их местами. Теперь в 1 столбце W, а в 2 столбце UP, по итогу:
0x3C 0x01=>0x02
0x300 0x02=>0x01
Делаем вывод что автор немного напиздел. Когда кнопка указана только одна она хранится по адресам 2 столбца.

Это конечно очень интересно но вот вопрос почему стрелочка вверх 0xFB, 0x03 а не 0x26, 0x00 остаётся открытым
 

wojciech?

Известный
Проверенный
395
291
RsKeyCode можно сопоставить с клавишами из vkeys, но мне лень
Lua:
local ffi = require("ffi")
local vkeys = require("vkeys")

local RsKeyCode = {
    [1000] = "rsESC",
    [1001] = "rsF1",
    [1002] = "rsF2",
    [1003] = "rsF3",
    [1004] = "rsF4",
    [1005] = "rsF5",
    [1006] = "rsF6",
    [1007] = "rsF7",
    [1008] = "rsF8",
    [1009] = "rsF9",
    [1010] = "rsF10",
    [1011] = "rsF11",
    [1012] = "rsF12",
    [1013] = "rsINSERT",
    [1014] = "rsDEL",
    [1015] = "rsHOME",
    [1016] = "rsEND",
    [1017] = "rsPGUP",
    [1018] = "rsPGDN",
    [1019] = "rsUP",
    [1020] = "rsDOWN",
    [1021] = "rsLEFT",
    [1022] = "rsRIGHT",
    [1023] = "rsDIV",
    [1024] = "rsMUL",
    [1025] = "rsADD",
    [1026] = "rsSUB",
    [1027] = "rsEXTDEL",
    [1028] = "rsEXT_END",
    [1029] = "rsEXTDOWN",
    [1030] = "rsEXTPGDN",
    [1031] = "rsEXTLEFT",
    [1032] = "rsNUM5",
    [1033] = "rsNUMLOCK",
    [1034] = "rsEXTRIGHT",
    [1035] = "rsEXTHOME",
    [1036] = "rsEXTUP",
    [1037] = "rsEXTPGUP",
    [1038] = "rsEXTINSERT",
    [1039] = "rsENTER",
    [1040] = "rsSCROLL",
    [1041] = "rsPAUSE",
    [1042] = "rsBACK",
    [1043] = "rsTAB",
    [1044] = "rsCAPSLOCK",
    [1045] = "rsEXTENTER",
    [1046] = "rsLSHIFT",
    [1047] = "rsRSHIFT",
    [1048] = "rsSHIFT",
    [1049] = "rsLCTRL",
    [1050] = "rsRCTRL",
    [1051] = "rsLMENU",
    [1052] = "rsRMENU",
    [1053] = "rsLWIN",
    [1054] = "rsRWIN",
    [1055] = "rsAPPS",
    [1056] = "rsNULL"
}

ffi.cdef [[
    typedef struct CControllerKey {
        unsigned int keyCode;
        unsigned int priority;
    } CControllerKey;

    typedef struct CControllerAction {
        CControllerKey keys[4];
    } CControllerAction;
]]

local CControllerConfigManager = 0xB70198
local CInputEvents__EventName = CControllerConfigManager + 0x224
local CInputEvents__Event = CControllerConfigManager + 0xB70

for i = 0, 58 do
    local offset_name = i * 0x28
    local offset_event = i * 0x20

    local name = ffi.cast("char*", CInputEvents__EventName + offset_name)
    local action = ffi.cast("CControllerAction*", CInputEvents__Event + offset_event)

    print(ffi.string(name))
    for j = 0, 3 do
        local keyCode = action.keys[j].keyCode
        print(RsKeyCode[keyCode] or vkeys.id_to_name(keyCode), keyCode, action.keys[j].priority)
    end
    print()
end

примерно такой вывод:
Код:
PED_FIREWEAPON
rsEXTINSERT   1038   1
rsLCTRL   1049   2
Left Button   1   3
nil   0   0

PED_FIREWEAPON_ALT
Right Win   92   1
rsNULL   1056   0
nil   0   0
nil   0   0

PED_CYCLE_WEAPON_RIGHT
E   69   1
rsENTER   1039   2
X Button 1   5   3
nil   0   0

PED_CYCLE_WEAPON_LEFT
Q   81   1
rsEXTDEL   1027   2
Middle Button   4   3
nil   0   0

GO_FORWARD
rsUP   1019   1
W   87   2
nil   0   0
nil   0   0

GO_BACK
rsDOWN   1020   1
S   83   2
nil   0   0
nil   0   0

GO_LEFT
rsLEFT   1021   1
A   65   2
nil   0   0
nil   0   0

GO_RIGHT
rsRIGHT   1022   1
D   68   2
nil   0   0
nil   0   0
 
Последнее редактирование:
  • Нравится
Реакции: sizeoftrickster и whyega52

Tema05

Известный
Автор темы
1,506
475
RsKeyCode можно сопоставить с клавишами из vkeys, но мне лень
Lua:
local ffi = require("ffi")
local vkeys = require("vkeys")

local RsKeyCode = {
    [1000] = "rsESC",
    [1001] = "rsF1",
    [1002] = "rsF2",
    [1003] = "rsF3",
    [1004] = "rsF4",
    [1005] = "rsF5",
    [1006] = "rsF6",
    [1007] = "rsF7",
    [1008] = "rsF8",
    [1009] = "rsF9",
    [1010] = "rsF10",
    [1011] = "rsF11",
    [1012] = "rsF12",
    [1013] = "rsINSERT",
    [1014] = "rsDEL",
    [1015] = "rsHOME",
    [1016] = "rsEND",
    [1017] = "rsPGUP",
    [1018] = "rsPGDN",
    [1019] = "rsUP",
    [1020] = "rsDOWN",
    [1021] = "rsLEFT",
    [1022] = "rsRIGHT",
    [1023] = "rsDIV",
    [1024] = "rsMUL",
    [1025] = "rsADD",
    [1026] = "rsSUB",
    [1027] = "rsEXTDEL",
    [1028] = "rsEXT_END",
    [1029] = "rsEXTDOWN",
    [1030] = "rsEXTPGDN",
    [1031] = "rsEXTLEFT",
    [1032] = "rsNUM5",
    [1033] = "rsNUMLOCK",
    [1034] = "rsEXTRIGHT",
    [1035] = "rsEXTHOME",
    [1036] = "rsEXTUP",
    [1037] = "rsEXTPGUP",
    [1038] = "rsEXTINSERT",
    [1039] = "rsENTER",
    [1040] = "rsSCROLL",
    [1041] = "rsPAUSE",
    [1042] = "rsBACK",
    [1043] = "rsTAB",
    [1044] = "rsCAPSLOCK",
    [1045] = "rsEXTENTER",
    [1046] = "rsLSHIFT",
    [1047] = "rsRSHIFT",
    [1048] = "rsSHIFT",
    [1049] = "rsLCTRL",
    [1050] = "rsRCTRL",
    [1051] = "rsLMENU",
    [1052] = "rsRMENU",
    [1053] = "rsLWIN",
    [1054] = "rsRWIN",
    [1055] = "rsAPPS",
    [1056] = "rsNULL"
}

ffi.cdef [[
    typedef struct CControllerKey {
        unsigned int keyCode;
        unsigned int priority;
    } CControllerKey;

    typedef struct CControllerAction {
        CControllerKey keys[4];
    } CControllerAction;
]]

local CControllerConfigManager = 0xB70198
local CInputEvents__EventName = CControllerConfigManager + 0x224
local CInputEvents__Event = CControllerConfigManager + 0xB70

for i = 0, 58 do
    local offset_name = i * 0x28
    local offset_event = i * 0x20

    local name = ffi.cast("char*", CInputEvents__EventName + offset_name)
    local action = ffi.cast("CControllerAction*", CInputEvents__Event + offset_event)

    print(ffi.string(name))
    for j = 0, 3 do
        local keyCode = action.keys[j].keyCode
        print(RsKeyCode[keyCode] or vkeys.id_to_name(keyCode), keyCode, action.keys[j].priority)
    end
    print()
end

примерно такой вывод:
Код:
PED_FIREWEAPON
rsEXTINSERT   1038   1
rsLCTRL   1049   2
Left Button   1   3
nil   0   0

PED_FIREWEAPON_ALT
Right Win   92   1
rsNULL   1056   0
nil   0   0
nil   0   0

PED_CYCLE_WEAPON_RIGHT
E   69   1
rsENTER   1039   2
X Button 1   5   3
nil   0   0

PED_CYCLE_WEAPON_LEFT
Q   81   1
rsEXTDEL   1027   2
Middle Button   4   3
nil   0   0

GO_FORWARD
rsUP   1019   1
W   87   2
nil   0   0
nil   0   0

GO_BACK
rsDOWN   1020   1
S   83   2
nil   0   0
nil   0   0

GO_LEFT
rsLEFT   1021   1
A   65   2
nil   0   0
nil   0   0

GO_RIGHT
rsRIGHT   1022   1
D   68   2
nil   0   0
nil   0   0
Ох и выебали мне мозг дублирующие клавиши нумпада с неочевидными названиями.)Только как я понял тут rsEXTENTER это энтер в нумпад блоке, который имеет такой же виртуальный код что и основной. Поэтому они одинаковые тут. А где rsEXTINSERT я на клавиатуре на знаю)
Lua:
local RsKeyCode = {
    [1000] = 0x1B,
    [1001] = 0x70,
    [1002] = 0x71,
    [1003] = 0x72,
    [1004] = 0x73,
    [1005] = 0x74,
    [1006] = 0x75,
    [1007] = 0x76,
    [1008] = 0x77,
    [1009] = 0x78,
    [1010] = 0x79,
    [1011] = 0x7A,
    [1012] = 0x7B,
    [1013] = 0x2D,
    [1014] = 0x2E,
    [1015] = 0x24,
    [1016] = 0x23,
    [1017] = 0x21,
    [1018] = 0x22,
    [1019] = 0x26,
    [1020] = 0x28,
    [1021] = 0x25,
    [1022] = 0x27,
    [1023] = 0x6F,
    [1024] = 0x6A,
    [1025] = 0x6B,
    [1026] = 0x6D,
    [1027] = 0x6E,
    [1028] = 0x61,
    [1029] = 0x62,
    [1030] = 0x63,
    [1031] = 0x64,
    [1032] = 0x65,
    [1033] = 0x90,
    [1034] = 0x66,
    [1035] = 0x67,
    [1036] = 0x68,
    [1037] = 0x69,
    [1038] = 0x60,
    [1039] = 0x0D,
    [1040] = 0x91,
    [1041] = 0x13,
    [1042] = 0x08,
    [1043] = 0x09,
    [1044] = 0x14,
    [1045] = 0x0D, --"rsEXTENTER" хз чем отличается от обычного энтера'. Вставил код обычного энтера
    [1046] = 0xA0,
    [1047] = 0xA1,
    [1048] = 0x10,
    [1049] = 0xA2,
    [1050] = 0xA3,
    [1051] = 0xA4,
    [1052] = 0xA5,
    [1053] = 0x5B,
    [1054] = 0x5C,
    [1055] = 0x5D,
    [1056] = nil --"rsNULL" отсутствие кнопки
}
 
Последнее редактирование:

wojciech?

Известный
Проверенный
395
291
Ох и выебали мне мозг дублирующие клавиши нумпада с неочевидными названиями.)Только как я понял тут rsEXTENTER это энтер в нумпад блоке, который имеет такой же виртуальный код что и основной. Поэтому они одинаковые тут. А где rsEXTINSERT я на клавиатуре на знаю)
1721574474312.png
 
Статус
В этой теме нельзя размещать новые ответы.