Слежка и нажатые клавиши

shadow80962

Известный
Автор темы
127
13
Версия MoonLoader
.026-beta
Переносил чудесный скрипт с под названием key_sync и столкнулся с проблемой что не могу выбрать ID синхру которого мне нужно отслеживать.
В оригинальном скрипте это делается с помощью команды а мне нужно что-бы работало на человека за которым я слежу.
Пробывал таким способом:

Lua:
function sampev.onSpectatePlayer(playerId, camType)
    target = playerId
end

но в результате получаю "The player has left the stream zone!"

Lua:
local target = new.int(-1)

local spectateSyncKeys = imgui.OnFrame(
    function() return target ~= -1 end,
    function(player)
        player.HideCursor = true
        imgui.SetNextWindowPos(imgui.ImVec2(SizeX / 2, SizeY - 100), imgui.Cond.Always, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("##KEYS", nil, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.AlwaysAutoResize)
            if doesCharExist(target) then
                local plState = (isCharOnFoot(target) and "OnFoot" or "Vehicle")
                imgui.BeginGroup()
                    imgui.SetCursorPosX(10 + 30 + 5)
                    KeyCap("W", (SyncKeys[plState]["W"] ~= nil), imgui.ImVec2(30, 30))
                    KeyCap("A", (SyncKeys[plState]["A"] ~= nil), imgui.ImVec2(30, 30)); imgui.SameLine()
                    KeyCap("S", (SyncKeys[plState]["S"] ~= nil), imgui.ImVec2(30, 30)); imgui.SameLine()
                    KeyCap("D", (SyncKeys[plState]["D"] ~= nil), imgui.ImVec2(30, 30))
                imgui.EndGroup()
                imgui.SameLine(nil, 20)

                if plState == "OnFoot" then
                    imgui.BeginGroup()
                        KeyCap("Shift", (SyncKeys[plState]["Shift"] ~= nil), imgui.ImVec2(75, 30)); imgui.SameLine()
                        KeyCap("Alt", (SyncKeys[plState]["Alt"] ~= nil), imgui.ImVec2(55, 30))
                        KeyCap("Space", (SyncKeys[plState]["Space"] ~= nil), imgui.ImVec2(135, 30))
                    imgui.EndGroup()
                    imgui.SameLine()
                    imgui.BeginGroup()
                        KeyCap("C", (SyncKeys[plState]["C"] ~= nil), imgui.ImVec2(30, 30)); imgui.SameLine()
                        KeyCap("F", (SyncKeys[plState]["F"] ~= nil), imgui.ImVec2(30, 30))
                        KeyCap("RM", (SyncKeys[plState]["RKM"] ~= nil), imgui.ImVec2(30, 30)); imgui.SameLine()
                        KeyCap("LM", (SyncKeys[plState]["LKM"] ~= nil), imgui.ImVec2(30, 30))      
                    imgui.EndGroup()
                else
                    imgui.BeginGroup()
                        KeyCap("Ctrl", (SyncKeys[plState]["Ctrl"] ~= nil), imgui.ImVec2(65, 30)); imgui.SameLine()
                        KeyCap("Alt", (SyncKeys[plState]["Alt"] ~= nil), imgui.ImVec2(65, 30))
                        KeyCap("Space", (SyncKeys[plState]["Space"] ~= nil), imgui.ImVec2(135, 30))
                    imgui.EndGroup()
                    imgui.SameLine()
                    imgui.BeginGroup()
                        KeyCap("Up", (SyncKeys[plState]["Up"] ~= nil), imgui.ImVec2(40, 30))
                        KeyCap("Down", (SyncKeys[plState]["Down"] ~= nil), imgui.ImVec2(40, 30))  
                    imgui.EndGroup()
                    imgui.SameLine()
                    imgui.BeginGroup()
                        KeyCap("H", (SyncKeys[plState]["H"] ~= nil), imgui.ImVec2(30, 30)); imgui.SameLine()
                        KeyCap("F", (SyncKeys[plState]["F"] ~= nil), imgui.ImVec2(30, 30))
                        KeyCap("Q", (SyncKeys[plState]["Q"] ~= nil), imgui.ImVec2(30, 30)); imgui.SameLine()
                        KeyCap("E", (SyncKeys[plState]["E"] ~= nil), imgui.ImVec2(30, 30))
                    imgui.EndGroup()
                end
            else
                imgui.Text("The player has left the stream zone!")
            end
        imgui.End()
    end
)

function sampev.onPlayerSync(playerId, data)
    local result, id = sampGetPlayerIdByCharHandle(target)
    if result and id == playerId then
        SyncKeys["OnFoot"] = {}

        SyncKeys["OnFoot"]["W"] = (data.upDownKeys == 65408) or nil
        SyncKeys["OnFoot"]["A"] = (data.leftRightKeys == 65408) or nil
        SyncKeys["OnFoot"]["S"] = (data.upDownKeys == 00128) or nil
        SyncKeys["OnFoot"]["D"] = (data.leftRightKeys == 00128) or nil

        SyncKeys["OnFoot"]["Alt"] = (bit.band(data.keysData, 1024) == 1024) or nil
        SyncKeys["OnFoot"]["Shift"] = (bit.band(data.keysData, 8) == 8) or nil
        SyncKeys["OnFoot"]["Space"] = (bit.band(data.keysData, 32) == 32) or nil
        SyncKeys["OnFoot"]["F"] = (bit.band(data.keysData, 16) == 16) or nil
        SyncKeys["OnFoot"]["C"] = (bit.band(data.keysData, 2) == 2) or nil

        SyncKeys["OnFoot"]["RKM"] = (bit.band(data.keysData, 4) == 4) or nil
        SyncKeys["OnFoot"]["LKM"] = (bit.band(data.keysData, 128) == 128) or nil
    end
end

function sampev.onVehicleSync(playerId, vehicleId, data)
    local result, id = sampGetPlayerIdByCharHandle(target)
    if result and id == playerId then
        SyncKeys["Vehicle"] = {}

        SyncKeys["Vehicle"]["W"] = (bit.band(data.keysData, 8) == 8) or nil
        SyncKeys["Vehicle"]["A"] = (data.leftRightKeys == 65408) or nil
        SyncKeys["Vehicle"]["S"] = (bit.band(data.keysData, 32) == 32) or nil
        SyncKeys["Vehicle"]["D"] = (data.leftRightKeys == 00128) or nil

        SyncKeys["Vehicle"]["H"] = (bit.band(data.keysData, 2) == 2) or nil
        SyncKeys["Vehicle"]["Space"] = (bit.band(data.keysData, 128) == 128) or nil
        SyncKeys["Vehicle"]["Ctrl"] = (bit.band(data.keysData, 1) == 1) or nil
        SyncKeys["Vehicle"]["Alt"] = (bit.band(data.keysData, 4) == 4) or nil
        SyncKeys["Vehicle"]["Q"] = (bit.band(data.keysData, 256) == 256) or nil
        SyncKeys["Vehicle"]["E"] = (bit.band(data.keysData, 64) == 64) or nil
        SyncKeys["Vehicle"]["F"] = (bit.band(data.keysData, 16) == 16) or nil

        SyncKeys["Vehicle"]["Up"] = (data.upDownKeys == 65408) or nil
        SyncKeys["Vehicle"]["Down"] = (data.upDownKeys == 00128) or nil
    end
end
 
Последнее редактирование: