запрет на сворачивание камеры Q/E/Button Scroll в машине

kyrtion

Известный
Автор темы
1,355
519
Версия MoonLoader
.026-beta
ищу код который может запрещать сворачивание (поворот) камеры в машине по определенной кнопке: Q, E, Q+E, Scroll Button
также может быть и в педах
залазил в сниппетах луа и не нашел с помощью ключевых словах

есть сниппет, который запрещает менять (скручивать) оружие через мышь и клавы

а мне именно нужно сниппет на запрет сворачивание камеры в машине и на пед через кнопки Q, E, Q+E, Scroll Button
буду благодарен кто скинет, от меня лайк
 
Последнее редактирование:
Решение
Lua:
local memory = require("memory")

function Patch(addr, enable)
    local PATCH_SIZE = 4

    -- 6A 00        push 0           ; 2 байта
    -- 58           pop eax          ; 1 байт
    -- C3           ret              ; 1 байт
    local patch = "6A0058C3"
    local orig = "6683B90E"

    memory.hex2bin(enable and patch or orig, addr, PATCH_SIZE)
end

function main()
    while not isSampAvailable() do
        wait(100)
    end

    sampRegisterChatCommand("kyrtion", function(args)
        if args == "on" then
            Patch(0x53FE10, true) -- CPad::GetLookRight
            Patch(0x53FDD0, true) -- CPad::GetLookLeft
            Patch(0x53FE70, true) -- CPad:::GetLookBehindForCar
        elseif args == "off" then...

вайега52

Налуашил состояние
Модератор
2,989
3,111
Lua:
local memory = require("memory")

function Patch(addr, enable)
    local PATCH_SIZE = 4

    -- 6A 00        push 0           ; 2 байта
    -- 58           pop eax          ; 1 байт
    -- C3           ret              ; 1 байт
    local patch = "6A0058C3"
    local orig = "6683B90E"

    memory.hex2bin(enable and patch or orig, addr, PATCH_SIZE)
end

function main()
    while not isSampAvailable() do
        wait(100)
    end

    sampRegisterChatCommand("kyrtion", function(args)
        if args == "on" then
            Patch(0x53FE10, true) -- CPad::GetLookRight
            Patch(0x53FDD0, true) -- CPad::GetLookLeft
            Patch(0x53FE70, true) -- CPad:::GetLookBehindForCar
        elseif args == "off" then
            Patch(0x53FE10, false)
            Patch(0x53FDD0, false)
            Patch(0x53FE70, false)
        else
            sampAddChatMessage("Usage: /kyrtion [on|off]", -1)
        end
    end)

    wait(-1)
end
 
  • Нравится
  • Клоун
Реакции: Musaigen и kyrtion

kyrtion

Известный
Автор темы
1,355
519
Lua:
local memory = require("memory")
        if args == "on" then
            Patch(0x53FE10, true) -- CPad::GetLookRight
            Patch(0x53FDD0, true) -- CPad::GetLookLeft
            Patch(0x53FE70, true) -- CPad:::GetLookBehindForCar
        elseif args == "off" then
            Patch(0x53FE10, false)
            Patch(0x53FDD0, false)
            Patch(0x53FE70, false)
        else
            sampAddChatMessage("Usage: /kyrtion [on|off]", -1)
        end
оптимально - это вызывать цикл который применяет функцию по каждому адресу.
и спс, переделывал вот так по лучше:
Lua:
local memory = require("memory")

local enabled = false

local addresses = {
    ped_left       = 0x53FDD0, -- CPad::GetLookLeft
    ped_right      = 0x53FE10, -- CPad::GetLookRight
    ped_left_right = 0x53FE50, -- CPad::GetLookLeftRight
    ped_behind     = 0x53FEC0, -- CPad::GetLookBehindForPed
    car_behind     = 0x53FE70, -- CPad::GetLookBehindForCar
}

local function patchLookFunctions(enable)
                                 -- [   31 C0   ] [C3] [90]
    local patch_hex = "31C0C390" -- XOR EAX, EAX; RET; NOP;
    local orig_hex  = "6683B90E" -- orig 4 bytes

    for _, addr in pairs(addresses) do
        memory.hex2bin(enable and patch_hex or orig_hex, addr, 4)
    end
end

sampRegisterChatCommand("tc", function(args)
    enabled = not enabled
    patchLookFunctions(enabled)
    sampAddChatMessage("[test camera] " .. (enabled and "{00FF00}On" or "{FF0000}Off"), -1)
end)

-- на всякий случай если скрипт умирает
addEventHandler("onScriptTerminate", function(lua_script, quit_game)
    if lua_script == thisScript() then
        patchLookFunctions(false)
    end
end)