альтернативный режим сирены без зажатия клавиши сирены

weiSez

Участник
Автор темы
48
2
Версия MoonLoader
.026-beta
пытался сначала через манипуляции с памятью, но это только визуал. есть какая-нибудь функция в мунлоадере, позволяющая врубить другой тип сирены и сделать его как toggle, а не по зажатию? эмуляция зажатия клавиши не очень подходит
 
Решение
Для тебя все будет как обычно, но для всех остальных это будет звучать как твой "альтернативный режим сирены"
Lua:
local on = require('lib.samp.events')
function on.onSendVehicleSync(data)
    if data.siren == 1 then
        data.keysData = 2   
    end   
    return data
end

пытался сначала через манипуляции с памятью, но это только визуал
можешь и это добавить, чтобы не быть обделённым

qdIbp

Автор темы
Проверенный
1,387
1,146
Для тебя все будет как обычно, но для всех остальных это будет звучать как твой "альтернативный режим сирены"
Lua:
local on = require('lib.samp.events')
function on.onSendVehicleSync(data)
    if data.siren == 1 then
        data.keysData = 2   
    end   
    return data
end

пытался сначала через манипуляции с памятью, но это только визуал
можешь и это добавить, чтобы не быть обделённым
 

weiSez

Участник
Автор темы
48
2
Для тебя все будет как обычно, но для всех остальных это будет звучать как твой "альтернативный режим сирены"
Lua:
local on = require('lib.samp.events')
function on.onSendVehicleSync(data)
    if data.siren == 1 then
        data.keysData = 2  
    end  
    return data
end


можешь и это добавить, чтобы не быть обделённым
целую братик за помощь помог очень сильно, я чёт и не задумывался про манипуляции с синхрой

только с памятью есть пара проблем. так как учиться работать с ней я начал только вчера, я смог сделать так, чтобы по нажатию клавиши и при выполнении условия с рабочей нормальной сиреной - у тебя включался альт. режим, но вот он должен отключаться при повторном нажатии, а ничё не работает :(
Lua:
local altSiren = mem.getfloat(CVehicle + 0x514, true)
--
        if isKeyJustPressed(VK_U) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then -- условие при нажатии U и проверка на активный чат/консоль SF
            if isCharInAnyCar(PLAYER_PED) and getDriverOfCar(storeCarCharIsInNoSave(PLAYER_PED)) == PLAYER_PED then -- проверка на водителя Т/С
                if isCarSirenOn(storeCarCharIsInNoSave(PLAYER_PED)) and altSiren == 1 then -- проверка на уже включенную сирену, проверка на включенный альт. режим сирены
                switchCarSiren(storeCarCharIsInNoSave(PLAYER_PED), false) -- если уже включена - нажатие U выключает её
                mem.setfloat(CVehicle + 0x514, 0)
                setAudioStreamState(SirenUntoggleS, ev.PLAY)
                else
                local altSirenT = 1
                setAudioStreamState(SirenUntoggleS, ev.PLAY)
                wait(300)
                    while altSirenT == 1 do
                    wait(0)
                    mem.setfloat(CVehicle + 0x514, 1)
                    end
                end
            end
        end
 

weiSez

Участник
Автор темы
48
2
Lua:
xz = true
if isKeyJustPressed(VK_U) then
    xz = not xz
   switchCarSiren(storeCarCharIsInNoSave(PLAYER_PED), xz)
end
пример надеюсь понятен
так это для включения обычной сирены, а не той, которая по зажатию H начинает работать
упд: тупанул

так, я ещё тот конечно быдло кодер, сделал чё то вроде этого:
Lua:
        if isKeyJustPressed(VK_U) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then -- условие при нажатии U и проверка на активный чат/консоль SF
            if isCharInAnyCar(PLAYER_PED) and getDriverOfCar(storeCarCharIsInNoSave(PLAYER_PED)) == PLAYER_PED then -- проверка на водителя Т/С
                if isCarSirenOn(storeCarCharIsInNoSave(PLAYER_PED)) and not xz then -- проверка на уже включенную сирену, проверка на включенный альт. режим сирены
                setAudioStreamState(SirenUntoggleS, ev.PLAY)
                wait(300)
                xz = true
                while xz do
                    if xz == not xz then
                        break
                        else
                        altSirenToggle()
                    end
                end
                else
                xz = not xz
                setAudioStreamState(SirenUntoggleS, ev.PLAY)
                end
            end
        end
   
--
function altSirenToggle()
    wait(0)
    mem.setfloat(CVehicle + 0x514, 1)
end

при включённой основной сирене и нажатии кнопки U - начинает работать альт. режим сирены (как при зажатии H). повторное нажатие U должно возвращать обратно к обычному режиму, но этого не происходит.

куда и как встраивать/адаптировать это:
Lua:
function sampev.onSendVehicleSync(data)
    if data.siren == 1 then
        data.keysData = 2
    end
    return data
end
я не особо понял, к сожалению


ещё раз, я быдлокодер и только учусь

ещё один апдейт: я смог сделать нормальное включение/выключение, всё гуд, но это только визуальная сирена, теперь как-то надо адаптировать тот кусок кода с onSendVehicleSync для не-визуальной сирены. всё работает. огромное спасибо @qdIbp

если кто то будет делать что-то подобное:
Lua:
--[[ Была проблема с тем, что после использования прикола ниже, при обычном включении сирены опять начинала
работать функция sampev.onSendVehicleSync(data). При помощи переменной и игры с xz = not xz получилось
исправить этот косяк.]]

--звук при включении/выключении сирены
        if isKeyJustPressed(VK_X) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then -- условие при нажатии Х и проверка на активный чат/консоль SF
            if isCharInAnyCar(PLAYER_PED) and getDriverOfCar(storeCarCharIsInNoSave(PLAYER_PED)) == PLAYER_PED then -- проверка на водителя Т/С
                if isCarSirenOn(storeCarCharIsInNoSave(PLAYER_PED)) then -- проверка на уже включенную сирену
                switchCarSiren(storeCarCharIsInNoSave(PLAYER_PED), false) -- если уже включена - нажатие Х выключает её
                setAudioStreamState(SirenUntoggleS, ev.PLAY)
                else
                xz = false
                setAudioStreamState(SirenToggleS, ev.PLAY)
                wait(300)
                switchCarSiren(storeCarCharIsInNoSave(PLAYER_PED), true) -- иначе - включает
                end
            end
        end

--альтернативный режим сирены
        if isKeyJustPressed(VK_U) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then -- условие при нажатии U и проверка на активный чат/консоль SF
            if isCharInAnyCar(PLAYER_PED) and getDriverOfCar(storeCarCharIsInNoSave(PLAYER_PED)) == PLAYER_PED then -- проверка на водителя Т/С
                if isCarSirenOn(storeCarCharIsInNoSave(PLAYER_PED)) then -- проверка на уже включенную сирену, проверка на включенный альт. режим сирены
                setAudioStreamState(SirenUntoggleS, ev.PLAY)
                wait(300)
                    while true do
                        if isKeyJustPressed(VK_U) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then
                            setAudioStreamState(SirenUntoggleS, ev.PLAY)
                            wait(600)
                            xz = not xz
                            break
                        else
                            xz = true
                            if xz then
                            function sampev.onSendVehicleSync(data)
                                if data.siren == 1 and xz then
                                    data.keysData = 2
                                    --print(data) - это нужно было для теста, мониторинг того, когда отсылается дата, а когда нет
                                end                       
                            return data
                            end
                            end
                            altSirenToggle()
                        end
                    end
                end
            end
        end

-- функция altSirenToggle()
function altSirenToggle()
    wait(0)
    mem.setfloat(CVehicle + 0x514, 1)
end

-- либы: memory (mem.); lib.samp.events (sampev.)
-- на строчки с проигрыванием звука можно не обращать внимание
упд: залил файл со скриптом, в нём уже всё связанное с альт. режимом сирены реально хорошо работает. строчки, связанные со звуками, лучше закомментить
ещё раз огромное спасибо @qdIbp
 

Вложения

  • Immersive Siren.lua
    3.5 KB · Просмотры: 4
Последнее редактирование:
  • Вау
Реакции: qdIbp