Вопросы по поводу функции setGameKeyState

lorgon

Известный
Автор темы
657
268
Использую функцию setGameKeyState для того что-бы заставить машину ехать вперёд, как заставить её тормозить? P.S Не шарю вообще за эту функцию и где брать аргументы для неё
 
Решение
setGameKeyState(int key, int state)
int key - айди клавиши. хранятся в файлике по пути moonloader/lib/game/keys.lua. вписываются туда кнопки, которые ты шлёшь в синхре: leftright, updown, keys. не путать с виртуальными клавишами
int state - состояние клавиши. у каждой клавиши уникальное состояние в виде числа. значение берётся из синхры. чтобы узнать значение состояния клавиш по типу пробела, энтера, альта нужно выводить поле keysData, для стрелок или wasd нужны leftRight, upDown соответственно.
Если зажаты несколько клавиш, их значение состояния суммируется. Некоторые клавиши, такие как Y хранятся в поле weapon.
https://sampwiki.blast.hk/wiki/Keys
Чтобы заставить её тормозить, впиши в аргументы айди клавиши вниз и её...

Shamanije

Известный
Друг
961
920
setGameKeyState(int key, int state)
int key - айди клавиши. хранятся в файлике по пути moonloader/lib/game/keys.lua. вписываются туда кнопки, которые ты шлёшь в синхре: leftright, updown, keys. не путать с виртуальными клавишами
int state - состояние клавиши. у каждой клавиши уникальное состояние в виде числа. значение берётся из синхры. чтобы узнать значение состояния клавиш по типу пробела, энтера, альта нужно выводить поле keysData, для стрелок или wasd нужны leftRight, upDown соответственно.
Если зажаты несколько клавиш, их значение состояния суммируется. Некоторые клавиши, такие как Y хранятся в поле weapon.
https://sampwiki.blast.hk/wiki/Keys
Чтобы заставить её тормозить, впиши в аргументы айди клавиши вниз и её значение из синхронизации.
 
  • Нравится
Реакции: Vintik и lorgon

Tokynogiht

Новичок
23
0
setGameKeyState(int key, int state)
int key - айди клавиши. хранятся в файлике по пути moonloader/lib/game/keys.lua. вписываются туда кнопки, которые ты шлёшь в синхре: leftright, updown, keys. не путать с виртуальными клавишами
int state - состояние клавиши. у каждой клавиши уникальное состояние в виде числа. значение берётся из синхры. чтобы узнать значение состояния клавиш по типу пробела, энтера, альта нужно выводить поле keysData, для стрелок или wasd нужны leftRight, upDown соответственно.
Если зажаты несколько клавиш, их значение состояния суммируется. Некоторые клавиши, такие как Y хранятся в поле weapon.
https://sampwiki.blast.hk/wiki/Keys
Чтобы заставить её тормозить, впиши в аргументы айди клавиши вниз и её значение из синхронизации.

Я лично ничего не понял. Как установить клавише Y состояние нажатия, а после состояние отжатия? (Мне нужно именно так, чтобы сервер заметил мое нажатие) По ссылке тоже неясно, у кнопки Y value написано 65к, хотя все устанавливают 256, если хотят нажать Y. Почему там написано 65к?
 

Shamanije

Известный
Друг
961
920
Как установить клавие Y состояние нажатия, а после состояние отжатия
сервер воспринимает значение 64 в поле weapon onfoot/incar пакета синхронизации как нажатую клавишу Y. можно модифицировать пакет перед отправкой, устанавливая нужное значение, либо использовать функцию выдачи оружия, но этот метод менее предпочтительный
 

Tokynogiht

Новичок
23
0
сервер воспринимает значение 64 в поле weapon onfoot/incar пакета синхронизации как нажатую клавишу Y. можно модифицировать пакет перед отправкой, устанавливая нужное значение, либо использовать функцию выдачи оружия, но этот метод менее предпочтительный
А что за поле, где оно находится? Как туда что-то передать, какую функцию для этого использовать? Почему 64, откуда ты берешь эти цифры? Я хотел бы разобраться.
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
А что за поле, где оно находится? Как туда что-то передать, какую функцию для этого использовать? Почему 64, откуда ты берешь эти цифры? Я хотел бы разобраться.
Кнопки для пакета сампа - опытным путем через вывод данныз пакета.

для игры - vkeys.lua
 
  • Нравится
Реакции: Tokynogiht

Shamanije

Известный
Друг
961
920
А что за поле, где оно находится? Как туда что-то передать, какую функцию для этого использовать? Почему 64, откуда ты берешь эти цифры? Я хотел бы разобраться.
Lua:
local sampev = require 'lib.samp.events' -- подключение библиотеки для работы с rpc/пакетами синхронизации

function sampev.onSendPlayerSync(data) -- событие отправки onfoot пакетов синхронизации

    -- вывод информации
    print(data.keysData) -- вывод функциональных кнопок (кроме стрелок и WASD), для нажатого Y значение было 0.
    -- зная, что помимо этого поля клавиши могут считываться через поле weapon, я вывел его
    print(data.weapon) -- при нажатом Y значение изменяется на 64
  
    --- модернизация пакета
    data.weapon = 64 -- изменяем значение поля
    -- далее это значение будет применяться для каждого последующего отправленного пакета синхронизации
    -- поэтому рекомендуется сделать условие, при котором данное значение будет изменяться, это уже на твое усмотрение
end
 
  • Нравится
Реакции: Tokynogiht

Hatiko

Известный
Проверенный
1,472
611
Что-то вы чела в дебри завели со синхрой.
Чтобы затормозить с помощью этой функции, нужно указать значение 6: setGameKeyState(6, 128) разумеется в цикле каком-то временном, потому что нажатие игровой клавиши вызывает один раз без зажатия.
На вики, справа, могут быть опкоды некоторых функций, их тоже открывай, если вдруг недостаточно информации о функции, к примеру твоей 0B56, там может содержать информация, которой нет в описании луа функции. Вот там как раз рассказывается о принимаемых параметрах такие как индекс клавиш и их описание.
 
  • Нравится
Реакции: Ivkide