Имитация нажатия

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

EndoHokage

Активный
Автор темы
136
55
Здравствуйте, можно ли как то имитировать нажатие клавиши в луа?
Что бы сервер думал что ты нажимаешь эти клавиши на клавиатуре
 
  • Нравится
Реакции: Mamory
Решение
сервер считывает нажатия не всех кнопок. вот тебе список который я составил методом тыка
Y = gunid + 64
F =keydata + 16
H = gunid + 192
C = keydata + 2
N = gunid + 128
LMB = keydata + 4
RMB = keydata + 128
TAB = keydata + 1
SPRINT = keydata +8
ALT = keydata + 1024
JUMP = keydata + 32
итак. к чему я это говорю
для нажатия альта я использовал функцию фипа которая копирует синхру в таблицу

Lua:
if str:find('ALT') and dist < 5.0 then
    local data = samp_create_sync_data('player')
    data.keysData = data.keysData + 1024
    data.send()
end
в чём профит спросите вы? не будут нажиматься кнопки клавиатуры. вот и всё в принципе.

kFor

Известный
99
24
На примере клавиши Alt. Названия всех клавиш, информация о нажатии которых передаётся на сервер, можно найти тут:
Понять какая клавиша нужна можно из названия, они специально сделаны так удобно.
Lua:
events = require 'samp.events'
alt_pressed = false -- переменная (зажат ли Alt?)

function main()
    sampRegisterChatCommand('alt', function() -- команда /alt будет изменять состояние (зажат / не зажат) Alt
        alt_pressed = not alt_pressed -- изменяем состояние переменной
        sampAddChatMessage(alt and 'Теперь сервер будет думать, что Вы зажали Alt и держите.' or 'Теперь сервер НЕ будет думать, что Вы зажали Alt.', -1)
    end)
end

function events.onSendPlayerSync(data) -- исходящий пакет синхронизации с сервером (когда ты пешком)
    if alt_pressed then
        data.keys.unknown_walkSlow = 1 -- изменяем информацию, что Alt зажат
    end
end
Премного благодарен. Только не понял, какая клавиша отвечает за спринт (space)
 

Vintik

Через тернии к звёздам
Проверенный
1,526
1,009
Премного благодарен. Только не понял, какая клавиша отвечает за спринт (space)
Сам не понял 😀
Методом тыка обнаружил, что тебе нужно:
uint8_t accel_zoomOut : 1;
В коде это будет так:
Lua:
events = require 'samp.events'
space_pressed = false

function main()
    sampRegisterChatCommand('space', function() -- команда /space
        space_pressed = not space_pressed
        sampAddChatMessage(space_pressed and 'Теперь сервер будет думать, что Вы зажали пробел и держите.' or 'Теперь сервер НЕ будет думать, что Вы зажали пробел.', -1)
    end)
end

function events.onSendPlayerSync(data)
    if space_pressed then
        data.keys.accel_zoomOut = 1
    end
end
 
  • Нравится
Реакции: kFor

Lenny Scripts

Активный
179
35
это не отправка пакета серверу, а полноценная эмуляция нажатия клавиш - setVirtualKeyDown(int vkey, bool down). номера клавиш можно узнать тут.

пример, зажатие клавиши w на секунду:
Lua:
setVirtualKeyDown(87, true) -- зажатие 87 клавиши (W)
wait(1000) -- задержка на секунду
setVirtualKeyDown(87, false) -- отпускание 87 клавиши (W)


есть, конечно, ещё одна, но более ограниченная в плане количества клавиш (и не только), функция setGameKeyState(int key, int state) статья на дев_вики и дополнительная информация об аргументах функции
Те keylogger будет считать, что клавиша реально нажата?
 
Статус
В этой теме нельзя размещать новые ответы.