воспроизведения звука в свёрнутом/оконном режиме с активным антиафк

l-m

Новичок
Автор темы
28
1
Версия MoonLoader
.026-beta
Приветствую, буду благодарен за помощь, облазил многие темы и не нашёл нужного. Столкнулся с проблемой воспроизведения звука в свёрнутом или оконном режима, он попросту не воспроизводится. Ниже код, при виде слова "тут?" проигрывается выбранный мной звук, при условии что самп в полноэкранном режиме. Прошу исправить мой код если что-то коряво, и дополнить по возможности). А также не дает спокою то, что при виде слова "тут" и при виде слова к примеру "вступить", где есть буквы "т" и "у" тоже начинает играть звук. И последнее, скрипт при заходе игры не работает, заработает после перезапуска, нажав Ctrl + R.
Lua:
script_name('tut') --название

-----------------------------------------------------------------------------------------------------------------------
require "lib.moonloader"

local sampev = require 'lib.samp.events'

local as_action = require('moonloader').audiostream_state -- звук
local sound = loadAudioStream("moonloader/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"
-----------------------------------------------------------------------------------------------------------------------
function main()

    if not isSampLoaded() or not isSampfuncsLoaded() then return end while not isSampAvailable() do wait(100) end -- запускается скрипт при запуске игры
    sampAddChatMessage('{FF0000}[Tut] {FFFFFF}успешно загружен.', 0xFFFFFF)
    
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------     

     while true do
         wait(0)
        
     end
end

function sampev.onServerMessage(color--[[Цвет]], text--[[Текст]], health) -- Этот хук ловит сообщения в чате
    lua_thread.create(function() -- создаем поток -- позволяет использовать wait       
                if text:find('Тут?') or text:find('тут?') or text:find('ТУТ?') or text:find('tut?') then -- если найден текст "test" то
                    setAudioStreamVolume(sound, 30) --громкость
                    setAudioStreamState(sound, as_action.PLAY)    -- ДЛЯ ЗВУКА                                                         
                end       
    end)-- закрываем поток
end
 

qdIbp

Автор темы
Проверенный
1,434
1,173
Если у тебя уже вкл антиафк, тогда вот👉👈

Lua:
script_name('tut') --название

-----------------------------------------------------------------------------------------------------------------------
require("lib.moonloader")

local sampev = require('lib.samp.events') --[[если в скрипте пользуешься
                                            только одной функцией из евентс,
                                            тогда лучше делай так
                                            require('lib.samp.events').onServerMessage = function(color, text)
]]
local ffi = require('ffi')

local as_action = require('moonloader').audiostream_state -- звук
local sound = loadAudioStream(getWorkingDirectory().."/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"

ffi.cdef [[
    typedef int BOOL;
    typedef unsigned long HANDLE;
    typedef HANDLE HWND;
    HWND GetActiveWindow(void);
    BOOL ShowWindow(HWND hWnd, int  nCmdShow);
]]
-----------------------------------------------------------------------------------------------------------------------
function main()
    while not isSampAvailable() do wait(0) end-- запускается скрипт при запуске игры
    sampAddChatMessage('[Tut] {FFFFFF}успешно загружен.', 0xFF0000)
    hwin = ffi.C.GetActiveWindow() -- получает хэндл окна
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------    
   
    while true do wait(0) --wait(-1) -- если не используешь беск цикл юзай беск поток
        text, pref, clr, pclr = sampGetChatString(99)
        text = pref..' '..text
        if text:find('Тут%?') or text:find('тут%?') or text:find('ТУТ%?') or text:find('tut%?') then -- если найден текст "test" то
            ffi.C.ShowWindow(hwin, 1) -- задает статус окну
           
            setAudioStreamVolume(sound, 100) --громкость
            setAudioStreamState(sound, 1)    -- вкл ЗВУК  
            while getAudioStreamState(sound) == 1 do wait(0) end -- антиспам звуком, если сообщение не пропало
               
        end      
    end
end

Можно через евентс

Lua:
script_name('tut') --название

-----------------------------------------------------------------------------------------------------------------------
require("lib.moonloader")

local sampev = require('lib.samp.events') --[[если в скрипте пользуешься
                                            только одной функцией из евентс,
                                            тогда лучше делай так
                                            require('lib.samp.events').onServerMessage = function(color, text)
]]
local ffi = require('ffi')

local as_action = require('moonloader').audiostream_state -- звук
local sound = loadAudioStream(getWorkingDirectory().."/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"
ffi.cdef [[
    typedef int BOOL;
    typedef unsigned long HANDLE;
    typedef HANDLE HWND;
    HWND GetActiveWindow(void);
    BOOL ShowWindow(HWND hWnd, int  nCmdShow);
]]
-----------------------------------------------------------------------------------------------------------------------
function main()
    while not isSampAvailable() do wait(0) end-- запускается скрипт при запуске игры
    sampAddChatMessage('[Tut] {FFFFFF}успешно загружен.', 0xFF0000)
    hwin = ffi.C.GetActiveWindow() -- получает хэндл окна
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------     
    wait(-1) -- если не используешь беск цикл юзай беск поток
end

function sampev.onServerMessage(color,text)
    if text:find('Тут%?') or text:find('тут%?') or text:find('ТУТ%?') or text:find('tut%?') then -- если найден текст "test" то
        ffi.C.ShowWindow(hwin, 1) -- задает статус окну           
        setAudioStreamVolume(sound, 100) --громкость
        setAudioStreamState(sound, 1)    -- вкл ЗВУК       
    end 
end
тут как говорится, кто как хочет, тот так и др...
да...
 

l-m

Новичок
Автор темы
28
1
Если у тебя уже вкл антиафк, тогда вот👉👈

Lua:
script_name('tut') --название

-----------------------------------------------------------------------------------------------------------------------
require("lib.moonloader")

local sampev = require('lib.samp.events') --[[если в скрипте пользуешься
                                            только одной функцией из евентс,
                                            тогда лучше делай так
                                            require('lib.samp.events').onServerMessage = function(color, text)
]]
local ffi = require('ffi')

local as_action = require('moonloader').audiostream_state -- звук
local sound = loadAudioStream(getWorkingDirectory().."/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"

ffi.cdef [[
    typedef int BOOL;
    typedef unsigned long HANDLE;
    typedef HANDLE HWND;
    HWND GetActiveWindow(void);
    BOOL ShowWindow(HWND hWnd, int  nCmdShow);
]]
-----------------------------------------------------------------------------------------------------------------------
function main()
    while not isSampAvailable() do wait(0) end-- запускается скрипт при запуске игры
    sampAddChatMessage('[Tut] {FFFFFF}успешно загружен.', 0xFF0000)
    hwin = ffi.C.GetActiveWindow() -- получает хэндл окна
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------    
   
    while true do wait(0) --wait(-1) -- если не используешь беск цикл юзай беск поток
        text, pref, clr, pclr = sampGetChatString(99)
        text = pref..' '..text
        if text:find('Тут%?') or text:find('тут%?') or text:find('ТУТ%?') or text:find('tut%?') then -- если найден текст "test" то
            ffi.C.ShowWindow(hwin, 1) -- задает статус окну
           
            setAudioStreamVolume(sound, 100) --громкость
            setAudioStreamState(sound, 1)    -- вкл ЗВУК  
            while getAudioStreamState(sound) == 1 do wait(0) end -- антиспам звуком, если сообщение не пропало
               
        end      
    end
end

Можно через евентс

Lua:
script_name('tut') --название

-----------------------------------------------------------------------------------------------------------------------
require("lib.moonloader")

local sampev = require('lib.samp.events') --[[если в скрипте пользуешься
                                            только одной функцией из евентс,
                                            тогда лучше делай так
                                            require('lib.samp.events').onServerMessage = function(color, text)
]]
local ffi = require('ffi')

local as_action = require('moonloader').audiostream_state -- звук
local sound = loadAudioStream(getWorkingDirectory().."/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"
ffi.cdef [[
    typedef int BOOL;
    typedef unsigned long HANDLE;
    typedef HANDLE HWND;
    HWND GetActiveWindow(void);
    BOOL ShowWindow(HWND hWnd, int  nCmdShow);
]]
-----------------------------------------------------------------------------------------------------------------------
function main()
    while not isSampAvailable() do wait(0) end-- запускается скрипт при запуске игры
    sampAddChatMessage('[Tut] {FFFFFF}успешно загружен.', 0xFF0000)
    hwin = ffi.C.GetActiveWindow() -- получает хэндл окна
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------     
    wait(-1) -- если не используешь беск цикл юзай беск поток
end

function sampev.onServerMessage(color,text)
    if text:find('Тут%?') or text:find('тут%?') or text:find('ТУТ%?') or text:find('tut%?') then -- если найден текст "test" то
        ffi.C.ShowWindow(hwin, 1) -- задает статус окну           
        setAudioStreamVolume(sound, 100) --громкость
        setAudioStreamState(sound, 1)    -- вкл ЗВУК       
    end 
end
тут как говорится, кто как хочет, тот так и др...
да...
Бро, не работают оба кода(
 

l-m

Новичок
Автор темы
28
1
И что именно не работает
Сорян, за мной косяк был, все работает. Но я сразу немножко не скорректировал правильно просьбу. У меня два экрана, на одном я работаю, на второй перетаскиваю самп и дабы видеть картинку его, перехожу в оконный режим и включить антиафк (потому что если переведёшь мышку на основной экран, самп сворачивается). Если так сделать, нету звука. Ну а то что выше, прикольно сделаено, тоже полезно, если на основном экране самп свёрнут и антиафк включет, то при виде сообщения автоматически разворачивается игра и воспроизводится звук. Если это возможно, помоги)

1675583762747.png
Вот так выглядит скриншот двух экранов, коряво немножко, расширения экранов разные)

@qdIbp Это возможно?)

К примеру если админ пишет(звук сампа, игровой мод сервера), то звук есть, и админ чекер с бласт хак качал, тоже звук есть, не важно в каком состоянии игра.
 
Последнее редактирование:
  • Злость
Реакции: qdIbp

qdIbp

Автор темы
Проверенный
1,434
1,173
Lua:
script_name('tut') --название
-----------------------------------------------------------------------------------------------------------------------
require("lib.moonloader")

local sampev = require('lib.samp.events') --[[если в скрипте пользуешься
                                            только одной функцией из евентс,
                                            тогда лучше делай так
                                            require('lib.samp.events').onServerMessage = function(color, text)
]]
local ffi = require('ffi')
local sound = loadAudioStream(getWorkingDirectory().."/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"
ffi.cdef [[
    typedef int BOOL;
    typedef unsigned long HANDLE;
    typedef HANDLE HWND;
    HWND GetActiveWindow(void);
    BOOL ShowWindow(HWND hWnd, int  nCmdShow);
]]
-----------------------------------------------------------------------------------------------------------------------
function main()
    while not isSampAvailable() do wait(0) end-- запускается скрипт при запуске игры
    sampAddChatMessage('[Tut] {FFFFFF}успешно загружен.', 0xFF0000)
    hwin = ffi.C.GetActiveWindow() -- получает хэндл окна
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------     
    wait(-1) -- если не используешь беск цикл юзай беск поток
end

function sampev.onServerMessage(color,text)
    if text:find('Тут%?') or text:find('тут%?') or text:find('ТУТ%?') or text:find('tut%?') then -- если найден текст "test" то
        ffi.C.ShowWindow(hwin, 3) -- задает статус окну           
        setAudioStreamVolume(sound, 100) --громкость
        setPlay3dAudioStreamAtChar(sound, playerPed)    -- вкл ЗВУК       
    end
end
 

l-m

Новичок
Автор темы
28
1
Lua:
script_name('tut') --название
-----------------------------------------------------------------------------------------------------------------------
require("lib.moonloader")

local sampev = require('lib.samp.events') --[[если в скрипте пользуешься
                                            только одной функцией из евентс,
                                            тогда лучше делай так
                                            require('lib.samp.events').onServerMessage = function(color, text)
]]
local ffi = require('ffi')
local sound = loadAudioStream(getWorkingDirectory().."/resource/audio/Otvet.mp3") -- ЗВУК
----------- COLOR --------------
local color = 0xFFFFFF
local main_color_text = "{5A90CE}"
local waite_color = "{FFFFFF}"
local red_color = "{FF0000}"
local purple_color = "{FF00FF}"
ffi.cdef [[
    typedef int BOOL;
    typedef unsigned long HANDLE;
    typedef HANDLE HWND;
    HWND GetActiveWindow(void);
    BOOL ShowWindow(HWND hWnd, int  nCmdShow);
]]
-----------------------------------------------------------------------------------------------------------------------
function main()
    while not isSampAvailable() do wait(0) end-- запускается скрипт при запуске игры
    sampAddChatMessage('[Tut] {FFFFFF}успешно загружен.', 0xFF0000)
    hwin = ffi.C.GetActiveWindow() -- получает хэндл окна
-----------------------------------------------------------------------------------------------------------------------
--sampRegisterChatCommand
-------------------------------------------------------------------------------------------------------------------    
    wait(-1) -- если не используешь беск цикл юзай беск поток
end

function sampev.onServerMessage(color,text)
    if text:find('Тут%?') or text:find('тут%?') or text:find('ТУТ%?') or text:find('tut%?') then -- если найден текст "test" то
        ffi.C.ShowWindow(hwin, 3) -- задает статус окну          
        setAudioStreamVolume(sound, 100) --громкость
        setPlay3dAudioStreamAtChar(sound, playerPed)    -- вкл ЗВУК      
    end
end
Не знаю работает ли, но скачав программу которая не не переходя в оконный делает активным игру, даже если работаешь на втором мониторе, предыдущие коды скрипта работают) Спасибо, прости за не удобства. Я хотел бы задать ещё вопрос если позволишь)

DisplayFusion​