Луа скрипт не тригерится на сообщения в чате от сервера

Prays27777

Известный
Автор темы
1
0
Версия MoonLoader
Другое
Пытался написать скрипт через чат ГПТ. Суть: воспроизводит аудио файл при начале скрипта и при сообщении "Успешный вход. Приятной игры на сервере 🙂" Должен был завершать аудиофайл. Что имеем: есть рабочая версия скрипта,которая сама запускает аудио,но не может его остановить (остановка/плей отдельно через 2 клавиши). Есть НЕ РАБОЧАЯ версия,которую видимо сломал чат гпт. Он не может найти (или сработать на него) тригер сообщение для завершения аудиофайла.
1 версия:
Lua:
require "lib.moonloader"
require "lib.sampfuncs"

local audioEffect
local isPlaying = false

function main()
    repeat wait(2000) until isSampLoaded() -- Ждем, пока SA-MP загрузится
    audioEffect = loadAudioStream("moonloader/music/sound.mp3") -- Убедитесь, что путь правильный

    if audioEffect == -1 then
        print("Ошибка: не удалось загрузить аудиофайл.")
        return
    end

    setAudioStreamVolume(audioEffect, 0.2) -- Установка громкости на 20%

    -- Выводим системное сообщение о том, что скрипт загружен
    sendSystemMessage("{00FFFF}[Waiting script]: loaded successfully! [by praysdead]{FFFFFF}")
    sendSystemMessage(' {00FFFF}[Waiting script]: To activate: "[" - ON | "]" - OFF"') -- Добавляется вторым абзацем

    -- Автоматически запускаем аудиопоток при загрузке
    setAudioStreamState(audioEffect, 1)
    isPlaying = true
    sendSystemMessage("Waiting script: Sound ON") -- Уведомление в чат

    while true do
        wait(0)
        handleKeyPress() -- Вызов функции обработки нажатий клавиш
    end
end

function handleKeyPress()
    if not sampIsChatInputActive() then -- Проверка, активен ли ввод чата
        if isKeyDown(0xDB) and not isPlaying then -- Проверка нажатия [ для воспроизведения
            setAudioStreamState(audioEffect, 1) -- Воспроизводим звуковой поток
            isPlaying = true
            sendSystemMessage("Waiting script: Sound ON") -- Уведомление в чат
        elseif isKeyDown(0xDD) and isPlaying then -- Проверка нажатия ] для остановки
            setAudioStreamState(audioEffect, 0) -- Останавливаем звуковой поток
            isPlaying = false
            sendSystemMessage("Waiting script: Sound OFF") -- Уведомление в чат
        end
    end
end

function sendSystemMessage(message)
    local color = isPlaying and 0x00FF00 or 0xFF0000 -- Зелёный, если звук включен, красный, если выключен
    sampAddChatMessage(message, color) -- Отправляет системное сообщение
end
2 версия СЛОМАННАЯ.
Lua:
require "lib.moonloader"
require "lib.sampfuncs"

local audioEffect
local isPlaying = false

function main()
    repeat wait(2000) until isSampLoaded()

    audioEffect = loadAudioStream("moonloader/music/sound.mp3")
    if audioEffect == -1 then
        print("Ошибка: не удалось загрузить аудиофайл.")
        return
    else
        print("Аудиофайл загружен успешно.")
    end

    setAudioStreamVolume(audioEffect, 0.2)
    sendSystemMessage("Script loaded successfully! Press [ to play sound | ] to stop sound")

    while true do
        wait(0)
        handleKeyPress()
    end
end

function sendSystemMessage(message)
    local color = isPlaying and 0x00FF00 or 0xFF0000
    sampAddChatMessage(message, color)
end

sampAddChatMessage = function(color, text)
    if text:match('Успешный вход') and isPlaying then
        setAudioStreamState(audioEffect, 0)      -- Останавливаем звук
        isPlaying = false
        sendSystemMessage("Sound OFF due to server message")
        print("Звук остановлен из-за сообщения 'Успешный вход'")
    end

    if text:match('Приятной игры') and isPlaying then
        setAudioStreamState(audioEffect, 0)      -- Останавливаем звук
        isPlaying = false
        sendSystemMessage("Sound OFF due to server message")
        print("Звук остановлен из-за сообщения 'Приятной игры'")
    end
end

function handleKeyPress()
    if isKeyDown(0xDB) and not isPlaying then -- "[" для включения звука
        setAudioStreamState(audioEffect, 1)
        isPlaying = true
        sendSystemMessage("Sound ON")
        print("Звук включен")
    elseif isKeyDown(0xDD) and isPlaying then -- "]" для отключения звука
        setAudioStreamState(audioEffect, 0)
        isPlaying = false
        sendSystemMessage("Sound OFF")
        print("Звук выключен")
    end
end
Сам в луа не шарю вообще. поэтому пытался через чат ГПТ. Если кто шарит и сможет помочь - спасибо. Если скрипт сможет сам подрубаться (при запуске) и офаться через тригер-сообщение -- Фунции с активациями по клавишам можно тупо убрать


Lua:
require "lib.moonloader"
require "lib.sampfuncs"

local audio

function main()
    -- Ждем, пока SAMP полностью загрузится
    repeat wait(2000) until isSampLoaded()

    -- Загружаем аудиофайл
    audio = loadAudioStream("moonloader/music/sound.mp3")
    if audio == -1 then
        sampAddChatMessage("{FF0000}Ошибка: не удалось загрузить аудиофайл.", 0xFF0000)
        return
    end

    setAudioStreamVolume(audio, 0.2)
    setAudioStreamState(audio, 1)  -- Запускаем аудиопоток
    sampAddChatMessage("{00FFFF}[Waiting script  by prayDEAD]: Sound ON!", -1)  -- Голубой текст

    while true do
        wait(2000)
        monitorPlayerSpawn()
    end
end

function monitorPlayerSpawn()
    for i = 0, 1000 do  -- Бежим по всем игрокам (максимально возможное количество)
        if sampIsPlayerConnected(i) then
            local playerPed = sampGetCharHandle(i)  -- Получаем индекс педа игрока

            if playerPed > 0 then
                -- Если игрок есть в игре, проверяем его статус
                if isPlayerSpawned(i) then
                    setAudioStreamState(audio, 0)  -- Останавливаем аудиопоток
                    sampAddChatMessage("{FF0000}[Waiting script by praysDEAD]: Sound OFF  " .. i, 0xFF0000)  -- Красный текст
                    break
                end
            end
        end
    end
end

function isPlayerSpawned(playerId)
    -- Проверяем, спавнится ли игрок
    return sampIsPlayerSpawned(playerId)
end
Вроде бы работает,перед спавном аудио отключается,но строчка "sampAddChatMessage("{FF0000}[Waiting script by praysDEAD]: Sound OFF " .. i, 0xFF0000) -- Красный текст " не отображается. +в консоле сампфункса такой варнинг
[ML] (error) test.lua: ...s\Arizona Games Launcher\bin\arizona\moonloader\test.lua:30: attempt to call global 'sampGetCharHandle' (a nil value)
stack traceback:
...s\Arizona Games Launcher\bin\arizona\moonloader\test.lua: in function 'monitorPlayerSpawn'
...s\Arizona Games Launcher\bin\arizona\moonloader\test.lua:23: in function <...s\Arizona Games Launcher\bin\arizona\moonloader\test.lua:6>
[ML] (error) test.lua: Script died due to an error. (19DD9684)

Так же хотелось бы,чтобы при отключении от сервера скрипт повторно тригерился (как при попытки зайти на вайсити)[/CODE]
 
Последнее редактирование:

Ancwork

Участник
38
2
Если актуально, глянь эту тему.
Там всего лишь заменить текст и ссылку на звуки

Там нужно заменить:
Ссылку на скачивание, лучше всего загрузить звук в Discord и оттуда его качать.
Название звука на свое.
И текст на который будет тригерится.

Там грузится сразу 3 звука, если хочешь, можешь оставит и сделать 3 разных

А тригер тебе нужно просто изменить который там есть на успешный вход и продублировать еще раз функцию для Отключения от сервера
 
Последнее редактирование: