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

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

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
23
На примере клавиши 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,410
851
Премного благодарен. Только не понял, какая клавиша отвечает за спринт (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 будет считать, что клавиша реально нажата?
 
Статус
В этой теме нельзя размещать новые ответы.