не работает setVirtualKeyDown

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

leonidussaks

Новичок
Автор темы
2
0
Версия MoonLoader
.026-beta
не работает setVirtualKeyDown()

Lua:
            setVirtualKeyDown(78, true)
            wait(200)
            setVirtualKeyDown(78, false)


пытаюсь эмулировать нажатие клавиши 'n', но не получается.
 

leonidussaks

Новичок
Автор темы
2
0
sendKey(128)
Lua:
local function sendKey(key)
    local _, myId = sampGetPlayerIdByCharHandle(PLAYER_PED)
    local data = allocateMemory(68)
    sampStorePlayerOnfootData(myId, data)
    setStructElement(data, 36, 1, key, false)
    sampSendOnfootData(data)
    freeMemory(data)
end

большое спасибо, можете сказать, в чем проблема setVirtualKeyDown?
 

sᴀxᴏɴ

Известный
Всефорумный модератор
788
855
большое спасибо, можете сказать, в чем проблема setVirtualKeyDown?
По сути тот код тоже должен работать. Возможно ты использовал wait(200) вне потока, поэтому скрипт крашился
 

NaN.

Активный
109
45
По сути тот код тоже должен работать. Возможно ты использовал wait(200) вне потока, поэтому скрипт крашился
немножечко поздновато спрашиваю, но как такое сделать на ALT(id клавиши 1024), использую sendKey(1024), но не работает
 

mzxer

Активный
83
120
немножечко поздновато спрашиваю, но как такое сделать на ALT(id клавиши 1024), использую sendKey(1024), но не работает
Lua:
function samp_create_sync_data(sync_type, copy_from_player) -- https://www.blast.hk/threads/13380/post-153001
    local ffi = require 'ffi'
    local sampfuncs = require 'sampfuncs'
    -- from SAMP.Lua
    local raknet = require 'samp.raknet'
    require 'samp.synchronization'

    copy_from_player = copy_from_player or true
    local sync_traits = {
        player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC, sampStorePlayerOnfootData},
        vehicle = {'VehicleSyncData', raknet.PACKET.VEHICLE_SYNC, sampStorePlayerIncarData},
        passenger = {'PassengerSyncData', raknet.PACKET.PASSENGER_SYNC, sampStorePlayerPassengerData},
        aim = {'AimSyncData', raknet.PACKET.AIM_SYNC, sampStorePlayerAimData},
        trailer = {'TrailerSyncData', raknet.PACKET.TRAILER_SYNC, sampStorePlayerTrailerData},
        unoccupied = {'UnoccupiedSyncData', raknet.PACKET.UNOCCUPIED_SYNC, nil},
        bullet = {'BulletSyncData', raknet.PACKET.BULLET_SYNC, nil},
        spectator = {'SpectatorSyncData', raknet.PACKET.SPECTATOR_SYNC, nil}
    }
    local sync_info = sync_traits[sync_type]
    local data_type = 'struct ' .. sync_info[1]
    local data = ffi.new(data_type, {})
    local raw_data_ptr = tonumber(ffi.cast('uintptr_t', ffi.new(data_type .. '*', data)))
    -- copy player's sync data to the allocated memory
    if copy_from_player then
        local copy_func = sync_info[3]
        if copy_func then
            local _, player_id
            if copy_from_player == true then
                _, player_id = sampGetPlayerIdByCharHandle(PLAYER_PED)
            else
                player_id = tonumber(copy_from_player)
            end
            copy_func(player_id, raw_data_ptr)
        end
    end
    -- function to send packet
    local func_send = function()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, sync_info[2])
        raknetBitStreamWriteBuffer(bs, raw_data_ptr, ffi.sizeof(data))
        raknetSendBitStreamEx(bs, sampfuncs.HIGH_PRIORITY, sampfuncs.UNRELIABLE_SEQUENCED, 1)
        raknetDeleteBitStream(bs)
    end
    -- metatable to access sync data and 'send' function
    local mt = {
        __index = function(t, index)
            return data[index]
        end,
        __newindex = function(t, index, value)
            data[index] = value
        end
    }
    return setmetatable({send = func_send}, mt)
end

-- пихаешь куда тебе надо
local sync = samp_create_sync_data("player")
sync.keysData = sync.keysData + 1024 -- alt
sync.send()
немного другой способ, но работает
 
  • Нравится
Реакции: Yakushizz и NaN.
Статус
В этой теме нельзя размещать новые ответы.