Скрипт не понимает как вытащить сообщение из чата

Urban_Skyline

Новичок
Автор темы
6
2
Версия MoonLoader
.026-beta
Уважаемые знатоки lua скриптинга, прошу вашей помощи с моим скриптом, как он должен работать:
Выводит текст с text_mp_start
Выбирает рандомно одно мероприятие
Читает правила этого мероприятия
Проводит само мероприятие тоесть:
При попугае кто первый повторит слово точь в точь получает бал, при столицах кто первый столицу, при аннаграмах кто первый аннаграму.
Но скрипт почему то перестает работать когда люди начинают отвечать, тоесть он никак не реагирует на то что в чат пишут другие, хотя это его основная фича
скрипт написан под ARZ где формат сообщения должен быть такой:
Nick_Name[id] говорит: "text"
жду вашей помощи



Lua:
local text_mp_start = {
    {
        "/s Здравствуйте уважаемые сотрудники",
        "Сегодня я проведу вам мероприятие под названием {mp}",
        "Приз будет составлять {priz}",
        "Мероприятие заканчивается как только кто то набирает 3 бала",
        "/b Ответы писать с маленькой буквы",
        "Правила я вам сейчас озвучу.",
    }
}

local text_mp_pravila_popugay = {
    {
        "Мероприятия попугай",
        "Ваша задача повторять за мной точ в точ",
        "Да всего то, так просто",
        "Начинаем"
    }
}

local text_mp_pravila_stolici = {
    {
        "Мероприятия Столицы",
        "Я называю страну, вы называете столицу",
        "/b с маленькой буквы(это обязательно)",
        "Начинаем"
    }
}

local text_mp_pravila_annagrami = {
    {
        "Мероприятия Анаграмы",
        "Я называю слово вы говорите его задом на перед",
        "/b с маленькой буквы(это обязательно)",
        "Начинаем"
    }
}

local text_mp_popugay = {
    {
        "автобус",
        "персик",
        "рябь",
        "картон",
        "огород",
        "квитанция",
        "картуз",
        "фура",
        "алхимик",
        "фигура",
        "наушник",
        "зонт",
        "отрава",
        "атлантика",
        "атом",
        "бездорожье",
        "амбал",
        "каска",
        "упаковка",
        "лесопилка",
        "амазонит",
        "гармошка",
        "подсолнух",
        "пластина",
        "антресоль",
        "фараон",
        "печь",
        "краска",
        "волдырь",
        "кабак",
        "венгр",
        "рукавица",
        "амперметр",
        "петух",
    }
}

local text_mp_stolici_voprosi = {
    {
        "Афганистан",
        "Бутан",
        "Индия",
        "Йемен",
        "Китай",
        "Ливан",
        "Мальта",
        "Монголия",
        "Нидерланды",
        "Эритрея",
        "Бельгия",
        "Кения",
        "Кирибати",
        "Коморы",
        "Лесото",
        "Мальдивы",
        "Молдавия",
        "Сенегал",
        "Сирия",
        "Таджикистан",
    }
}
local text_mp_stolici_otveti = {
    {
        "кабул",
        "тхимпху",
        "нью-дели",
        "сана",
        "пекин",
        "бейрут",
        "валетта",
        "улан-батор",
        "амстердам",
        "асмэра",
        "брюссель",
        "найроби",
        "южная тарава",
        "морони",
        "масеру",
        "мале",
        "кишинев",
        "дакар",
        "дамаск",
        "душанбе",
    }
}
local text_mp_annagrami = {
    {
        "марево",
        "колпак",
        "вареник",
        "листовка",
        "казарма",
        "лапочка",
        "табор",
        "посуда",
        "бюргер",
        "бушлат",
        "герб",
        "помада",
        "кот",
        "леденец",
        "библиотекарша",
        "обруч",
        "задвижка",
        "эмблема",
        "слива",
        "щупальце",
        "глобус",
        "композитор",
        "сукно",
        "шапка",
        "фольга",
        "бетон",
        "знамя",
        "кружево",
        "кукуруза",
        "штаны"
    }
}
local text_mp_annagrami_otveti = {
    {
        "оверам",
        "каплок",
        "киненрав",
        "аквотсил",
        "амразак",
        "ачкопал",
        "робат",
        "адусоп",
        "регрюб",
        "талшуб",
        "брег",
        "адамоп",
        "ток",
        "нецелед",
        "ашкаретекбиотлиб",
        "чурбо",
        "акжвидаз",
        "амльбе",
        "авилс",
        "ецлапущ",
        "суболг",
        "ротизопмок",
        "онкус",
        "акапш",
        "яглоф",
        "нотеб",
        "ямназ",
        "овожкурк",
        "азарукук",
        "ынашт"
    }
}

-- Функция для начала мероприятия
function startMp(paramString)
    local prize = paramString
    local events = {"Попугай", "Анаграмы", "Столицы"}
    local event_choice = events[math.random(1, #events)]
    local mp_text = text_mp_start[1]

    -- Замена переменных в сообщениях
    for i = 1, #mp_text do
        mp_text[i] = mp_text[i]:gsub("{mp}", event_choice):gsub("{priz}", prize)
    end

    -- Вывод сообщения о начале мероприятия
    lua_thread.create(function()
        for i = 1, #mp_text do
            sampSendChat(mp_text[i])
            wait(3000) -- Ждем 3 секунды перед отправкой следующего сообщения
        end

        -- Озвучка правил мероприятия
        if event_choice == "Попугай" then
            announceRules(text_mp_pravila_popugay[1])
            runEventPopugay()
        elseif event_choice == "Анаграмы" then
            announceRules(text_mp_pravila_annagrami[1])
            runEventAnnagrami()
        elseif event_choice == "Столицы" then
            announceRules(text_mp_pravila_stolici[1])
            runEventStolici()
        end
    end)
end

-- Функция для озвучивания правил
function announceRules(rules)
    for i = 1, #rules do
        sampSendChat(rules[i])
        wait(3000)
    end
end

-- Логика для мероприятия Попугай
function runEventPopugay()
    -- Максимальное количество баллов для победы
    local maxPoints = 3
    -- Таблица для хранения баллов игроков
    local playerPoints = {}

    -- Функция для начала новой игры
    local function startNewRound()
        local randomWord = text_mp_popugay[1][math.random(1, #text_mp_popugay[1])]
        sampSendChat("Следующее слово: " .. randomWord)
        wait(3000)
        return randomWord
    end

    -- Начинаем первый раунд
    local currentWord = startNewRound()

    -- Обработка сообщений чата
    function sampev.onServerMessage(color, text)
        local playerName, message = text:match('^(%S+%[%d+%]) говорит: "(.+)"$')
        if message and message == currentWord then
            -- Добавляем баллы игроку
            if not playerPoints[playerName] then
                playerPoints[playerName] = 0
            end
            playerPoints[playerName] = playerPoints[playerName] + 1
            sampSendChat(playerName .. " первый отвечает правильно и получает бал. У него(нее) " .. playerPoints[playerName] .. " балов.")
            wait(3000)

            -- Проверяем, есть ли победитель
            if playerPoints[playerName] >= maxPoints then
                sampSendChat(playerName .. " победил, поздравляем!")
                wait(3000)
                return false -- Останавливаем обработчик, так как игра закончена
            end

            -- Начинаем новый раунд
            currentWord = startNewRound()
        end
    end
end

-- Логика для мероприятия Анаграмы
function runEventAnnagrami()
    -- Логика проведения мероприятия Анаграмы
    local maxPoints = 3
    local playerPoints = {}
    local function startNewRound()
        local index = math.random(1, #text_mp_annagrami[1])
        local originalWord = text_mp_annagrami[1][index]
        local reversedWord = text_mp_annagrami_otveti[1][index]
        sampSendChat("Следующее слово: " .. originalWord)
        wait(3000)
        return reversedWord
    end

    local currentWord = startNewRound()

    function sampev.onServerMessage(color, text)
        local playerName, message = text:match('^(%S+%[%d+%]) говорит: "(.+)"$')
        if message and message == currentWord then
            if not playerPoints[playerName] then
                playerPoints[playerName] = 0
            end
            playerPoints[playerName] = playerPoints[playerName] + 1
            sampSendChat(playerName .. " первый отвечает правильно и получает бал. У него(нее) " .. playerPoints[playerName] .. " балов.")
            wait(3000)

            if playerPoints[playerName] >= maxPoints then
                sampSendChat(playerName .. " победил, поздравляем!")
                wait(3000)
                return false
            end
            currentWord = startNewRound()
        end
    end
end

-- Логика для мероприятия Столицы
function runEventStolici()
    -- Логика проведения мероприятия Столицы
    local maxPoints = 3
    local playerPoints = {}
    local function startNewRound()
        local index = math.random(1, #text_mp_stolici_voprosi[1])
        local country = text_mp_stolici_voprosi[1][index]
        local capital = text_mp_stolici_otveti[1][index]
        sampSendChat("Следующая страна: " .. country)
        wait(3000)
        return capital
    end

    local currentWord = startNewRound()

    function sampev.onServerMessage(color, text)
        local playerName, message = text:match('^(%S+%[%d+%]) говорит: "(.+)"$')
        if message and message == currentWord then
            if not playerPoints[playerName] then
                playerPoints[playerName] = 0
            end
            playerPoints[playerName] = playerPoints[playerName] + 1
            sampSendChat(playerName .. " первый отвечает правильно и получает бал. У него(нее) " .. playerPoints[playerName] .. " балов.")
            wait(3000)

            if playerPoints[playerName] >= maxPoints then
                sampSendChat(playerName .. " победил, поздравляем!")
                wait(3000)
                return false
            end
            currentWord = startNewRound()
        end
    end
end
 

kyrtion

Известный
921
329
Посмотрев ваш код и я получил ошибку:
1731563212348.png

Скорее всего вы не вызывали sampev
 

Urban_Skyline

Новичок
Автор темы
6
2