SA:MP Помощь с LUA скриптом

Peresvet takada

Участник
Автор темы
40
0
В общем, я полицейский на аризонке и мне нужен был код который будет воспроизводить аудио-звуки рации в формате .wav, пробовал написать код через ИИ, но у меня постоянно ошибки по типу:
Код:
[ML] (error) PoliceRadioAtmosphereToggle: ...ona Games Launcher\bin\arizona\moonloader\FunkRandom.lua:34: attempt to call global 'playSound' (a nil value)
stack traceback:
    ...ona Games Launcher\bin\arizona\moonloader\FunkRandom.lua: in function 'playRandomSound'
    ...ona Games Launcher\bin\arizona\moonloader\FunkRandom.lua:19: in function <...ona Games Launcher\bin\arizona\moonloader\FunkRandom.lua:10>
[ML] (error) PoliceRadioAtmosphereToggle: Script died due to an error. (1A112F2C)

Файлы со звуками были скачаны, перенесены по дирректории moonloader/sounds/radio.
Но всегда сё вылетает и с ошибками.

вот сам код
Код 2:
-- Настройки скрипта
local radioSounds = {
    "WT1.wav",
    "WT2.wav",
    "WT3.wav",
    "WT4.wav",
    "WT5.wav",
    "WT6.wav",
    "WT7.wav"
}

local minDelay = 20000  -- 20 секунд
local maxDelay = 60000  -- 60 секунд
local isRadioActive = false
local soundHandle = nil  -- Для контроля воспроизведения

-- Функция воспроизведения звука (правильная для MoonLoader)
function playSoundFile(path)
    local fullPath = "moonloader/sounds/radio/" .. path
    if not doesFileExist(fullPath) then
        print("Ошибка: файл " .. fullPath .. " не найден")
        return nil
    end
    return playSound(fullPath, false, false)  -- playSound(path, loop, throttle)
end

-- Основная функция воспроизведения
function playRandomRadioSound()
    if not isRadioActive then return end
    
    local randomSound = radioSounds[math.random(1, #radioSounds)]
    
    -- Останавливаем предыдущий звук, если есть
    if soundHandle ~= nil then
        stopSound(soundHandle)
    end
    
    soundHandle = playSoundFile(randomSound)
    
    if soundHandle == nil then
        print("Не удалось воспроизвести звук: " .. randomSound)
    end
    
    -- Запуск следующего воспроизведения через случайное время
    lua_thread.create(function()
        wait(math.random(minDelay, maxDelay))
        playRandomRadioSound()  -- Повторно вызываем, чтобы звук проигрывался периодически
    end)
end

-- Проверка существования файла
function doesFileExist(path)
    local f = io.open(path, "r")
    if f ~= nil then
        io.close(f)
        return true
    else
        return false
    end
end

-- Инициализация
function main()
    wait(5000)
    
    -- Проверяем наличие папки sound/radio
    if not doesFileExist("moonloader/sounds/radio/") then
        sampAddChatMessage("{FF0000}Ошибка: папка moonloader/sounds/radio/ не найдена!", -1)
        return
    end
    
    sampAddChatMessage("📻 Используйте {FFFF00}/rtag {FFFFFF}для управления радиошумом", -1)
    
    while true do
        wait(1000)
    end
end

-- Функция для активации/деактивации радиошума
function toggleRadio()
    isRadioActive = not isRadioActive
    local status = isRadioActive and "ВКЛЮЧЕНА" or "ВЫКЛЮЧЕНА"
    sampAddChatMessage("{FF0000}Рация " .. status, -1)
    
    if isRadioActive then
        playRandomRadioSound()  -- Начать воспроизведение звуков
    else
        if soundHandle ~= nil then
            stopSound(soundHandle)  -- Остановить текущий звук, если он играет
        end
    end
end

-- Регистрация команд
sampRegisterChatCommand("rtag", toggleRadio)  -- Команда для активации/деактивации радиошума
 

Ancwork

Участник
76
10
Ну вроде так...
Lua:
-- Подкачка звуков с сайта
local sounds = {
    {
        url = 'Gihub/discord или прочее',
        file_name = 'Здесь название звука. Например: sound3.mp3',
    },
    {
        url = 'Gihub/discord или прочее',
        file_name = 'Здесь название звука. Например: sound3.mp3',
    },
    {
        url = 'Gihub/discord или прочее',
        file_name = 'Здесь название звука. Например: sound3.mp3',
    },
}


-- локалки

local as_action = require('moonloader').audiostream_state
local sampev = require 'lib.samp.events'
local sound_streams = {}

-- Подкачка звуков в папку и создания если ее нету
if not doesDirectoryExist(getWorkingDirectory()..'\\sounds') then
        createDirectory(getWorkingDirectory()..'\\sounds')
    end

    for i, v in ipairs(sounds) do
        if not doesFileExist(getWorkingDirectory()..'\\sounds\\'..v['file_name']) then
            sampAddChatMessage(u8:decode'Загружаю: ' .. v['file_name'], -1)
            downloadUrlToFile(v['url'], getWorkingDirectory()..'\\sounds\\'..v['file_name'])
        end

        local stream = loadAudioStream(getWorkingDirectory()..'\\sounds\\'..v['file_name'])
        if stream then
            table.insert(sound_streams, stream)
        end
    end

-- Для воспроизведения в рандомно порядке
function playRandomSound()
    if #sound_streams > 0 then
        local random_index = math.random(1, #sound_streams)
        local stream = sound_streams[random_index]
        setAudioStreamState(stream, as_action.PLAY)
        setAudioStreamVolume(stream, 70)
    else
        sampAddChatMessage(u8:decode'Нет доступных звуков для воспроизведения.', -1)
    end
end

-- Триггер на что должен воспроизводиться
function sampev.onServerMessage(color, text)
    if text:find(u8:decode'передаёт преступника') then
        playRandomSound()
    end
end