Вопрос по работоспособности кода

  • Автор темы deleted-user-163337
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.
D

deleted-user-163337

Гость
Автор темы
Версия MoonLoader
Другое
Добрый день, уважаемые. Не работает код:
Lua:
function samp.onShowDialog(id, style, title, btn1, btn2, text)
questions = read_answers()
    if id == 13101 then
        Answered = false
        WaitingAnswer = false
        if text:find('Максимальный срок деморгана в секундах') then
            CurQuest = 'Максимальный срок деморгана в секундах'
        else
            if CurQuest:find('?') then
                CurQuest = text:match('Вопрос:%s+(.*)?')
            else
                CurQuest = text:match('Вопрос:%s+(.*)%s+Введите')
            end
        end
        if CurQuest then
            sampAddChatMessage(tag..' Вопрос: '..CurQuest, -1)
            CurQuest = CurQuest:gsub('%%', '')
            CurQuest = CurQuest:gsub(' ', '')
            CurQuest = CurQuest:gsub(',', '')
            CurQuest = CurQuest:gsub('-', '')
            CurQuest = CurQuest:gsub('    ', '')
            for i = 1, #questions do
                textik = questions[i]
                if textik ~= nil then
                    question, answer = textik:match("{q = '(.*)', a = '(.*)'}")
                    if question ~= nil then
                        question = question:gsub('%%', '')
                        question = question:gsub(' ', '')
                        question = question:gsub(',', '')
                        question = question:gsub('-', '')
                        question = question:gsub('    ', '')
                        if CurQuest:find(question) then
                            lua_thread.create(function()
                            sampAddChatMessage(answer, -1)
                            math.randomseed(os.time())
                            wait(math.random(3643,9147))
                            sampSendDialogResponse(id, 1, 0, answer)
                            Answered = true
                            WaitingAnswer = false
                            sampCloseCurrentDialogWithButton(0)
                            return false
                            end)
                        end
                    end
                end
            end
        end
        if not Answered then
            sampAddChatMessage(tag..' Ответ не найден, введите ответ и он будет сохранен', -1)
            WaitingAnswer = true
        end
    end
    if id == 13100 then
        sampSendDialogResponse(id, 1, 0, '')
        return false
    end
end
Вместо того, чтобы через время, вычисленное через math.random вставить ответ на клад и закрыть диалог, он просто закрывает диалог через время. Ответы есть в скрипте, все хорошо по этой части. Помогите, вдруг тут что-то по части кода не так.
 

Hatiko

Известный
Проверенный
1,471
612
Не самый лучше вариант, лучше делать проверку на титл или текст. Ид может повториться или смениться.
Знак вопрос является служебным символом. Экранируй его %?

sampCloseCurrentDialogWithButton(0) return false
Не надо использовать функцию закрытия диалога, если ты все равно нопаешь появление. Функция не будет работать, т.к. окна ещё не существует.

Касаемо самого вопроса, ответить на него нет корректно вряд ли получится, потому что хер пойми что да где.
Напиши какие переменные, какой текст принимает, в какой последовательности всё делается. Скорей ошибка с регулярками, которые не могут получить корректно текст. Скриншот прикрепи самих диалогов.
 
D

deleted-user-163337

Гость
Автор темы
Не самый лучше вариант, лучше делать проверку на титл или текст. Ид может повториться или смениться.

Знак вопрос является служебным символом. Экранируй его %?


Не надо использовать функцию закрытия диалога, если ты все равно нопаешь появление. Функция не будет работать, т.к. окна ещё не существует.

Касаемо самого вопроса, ответить на него нет корректно вряд ли получится, потому что хер пойми что да где.
Напиши какие переменные, какой текст принимает, в какой последовательности всё делается. Скорей ошибка с регулярками, которые не могут получить корректно текст. Скриншот прикрепи самих диалогов.
Код:
{q = 'Какой урон наносит удар с кулака при 100 силы по игроку с 0 мускулатуры', a = '11.32'}
{q = 'Сколько серверов было 1 октября 2017 года', a = '6'}
{q = 'Какой урон наносит удар с кулака при 0 силы по игроку с 0 мускулатуры', a = '1.32'}
{q = 'Какая наименьшая гос. цена у любого бизнеса на сервере', a = '6000000'}
{q = 'В каком году Conor ушел с поста ГА на сервере Chandler', a = '2016'}
{q = 'Сколько всего стилей форума', a = '3'}
{q = 'Сколько нужно EXP для получения 25 уровня, если сейчас у тебя 22 lvl 20 exp', a = '268'}
{q = 'Кто однорукий постоянно стоит в казино', a = 'Бандит'}
{q = 'Какой ник в игре у Валика', a = 'Farmer'}
{q = 'Какая фамилия у разработчика Альберта', a = 'Миронов'}
{q = 'Максимальная цена на оружие в АММО для владельцев бизнеса', a = '50000'}
{q = 'Вечно ждущий NPC на вокзале ЛС', a = 'Джереми'}
{q = 'Сколько нужно EXP для получения 39 уровня, если сейчас у тебя 1 lvl 4 exp', a = '3112'}
{q = 'главного администратора 6', a = 'Diana_Mironova'}
{q = 'главного администратора 3', a = 'Xavier_Cooper'}
{q = 'главного администратора 9', a = 'Leonardo_Toren'}
{q = 'Самая популярная игра в казино', a = 'Кости'}
{q = 'Как зовут начальника Магнуса', a = 'Эрих'}
{q = 'Количество фракций на сервере', a = '27'}
{q = 'Количество домов на сервере за AZ монеты', a = '15'}
{q = 'В каком месяце был добавлен информационный центр', a = 'Март'}
{q = 'Горячие вакансии', a = 'Николай'}
{q = 'Из какой страны привозят контейнеры для аукциона', a = 'Германия'}
{q = 'Максимальное количество дерева в 1 слоте инвентаря', a = '10000'}
{q = '13=GG', a = 'Scottdale'}
{q = 'Какой налог нужен для слета дома', a = '104000'}
{q = 'Число спец.администраторов, которое было за все время на проекте', a = '3'}
{q = 'Какая работа в центре занятости открывается на 6 уровне', a = 'Инкассатор'}
{q = 'Максимальное количество слотов для машин у 1 игрока', a = '5'}
{q = 'Минимальная сумма пожертвования в благотворительность', a = '10000'}
{q = 'В каком году был добавлен депозит', a = '2017'}
{q = 'Что может объединить 1000 игроков на сервере', a = 'Семья'}
{q = 'Фамилия администратора с ником Kory_McGregor', a = 'Мясников'}
{q = 'Собирает яйца птица, ни павлин и ни синица', a = 'Попугай'}
{q = 'Сколько талонов в день можно получать с семейных квестов', a = '11'}
{q = 'Каков возраст самого молодого ГА', a = '14'}
{q = '100 силы по игроку с 0 мускулатуры', a = '11.32'}
{q = 'Лысый, смешной, большой и злой', a = 'Conor'}
{q = 'Висит на спине, но не гитара, быстрый и юркий, но не велосипед?', a = 'Скейт'}
{q = 'Сколько нужно EXP для получения 12 уровня, если сейчас у тебя 1 lvl 0 exp', a = '308'}
{q = 'В каком месяце ввели покраску куратора на форуме проекта', a = 'Декабрь'}
{q = 'Сколько нужно перевезти пицц, чтобы выполнить начальный квест', a = '15'}
{q = 'Красная, как яблоко, наклейка с белой надписью', a = 'Supreme'}
{q = 'Максимальный срок деморгана в секундах', a = '180000'}
{q = 'это любимая наша', a = 'Аризона'}
{q = 'Какой урон наносит удар с кулака при 100 силы по игроку с 0 мускулатуры?', a = '1.32'}
{q = 'Дата регистрации спец.администратора Sam_Mason на форуме в формате xx.xx.xx', a = '27.04.15'}
{q = 'Старый, мудрый, 05го дежурный', a = 'Николай'}
{q = 'Сервер Аризоны, который чаще всего занимает 1 место по онлайну', a = 'Scottdale'}
{q = 'Что нужно сделать или получить для выполнения первого начального квеста', a = 'Паспорт'}
{q = 'Что может объединить 1000 игроков на сервере', a = 'Семья'}
{q = '13=GG', a = 'Scottdale'}
{q = 'Сколько всего стилей форума', a = '3'}
{q = 'Какой аксессуар может сидеть на плече', a = 'Попугай'}
{q = 'Какая работа в центре занятости открывается на 6 уровне', a = 'Инкассатор'}
{q = 'Сколько нужно EXP для получения 12 уровня, если сейчас у тебя 1 lvl 0 exp', a = '308'}
{q = 'Количество серверов с самым длинным названием', a = '3'}
{q = 'В каком месяце ввели покраску куратора на форуме проекта', a = 'Декабрь'}
{q = 'Собирает яйца птица, ни павлин и ни синица', a = 'Попугай'}
{q = 'Кто пишет эту систему глубочайщей ночью', a = 'Альберт'}
{q = 'Максимальная ставка в одноруком бандите', a = '5000'}
{q = 'Дата регистрации спец.администратора Sam_Mason на форуме в формате xx.xx.xx', a = '27.04.15'}
{q = 'Минимальная сумма пожертвования в благотворительность', a = '10000'}
{q = 'Максимальное количество дерева в 1 слоте инвентаря', a = '10000'}
{q = 'Каждый проходит через это при начале игры', a = 'Регистрация'}
{q = 'Сервер Аризоны, который чаще всего занимает 1 место по онлайну', a = 'Scottdale'}
{q = 'Сервер Аризоны', a = 'Scottdale'}
{q = 'Сколько нужно EXP для получения 40 уровня, если сейчас у тебя 3 lvl 2 exp', a = '3254'}
{q = 'Висит на спине, но не гитара, быстрый и юркий, но не велосипед', a = 'Скейт'}
{q = 'Как зовут начальника Магнуса', a = 'Эрих'}
{q = 'Любит репорт отвечать, игрокам всем помогать', a = 'Хелпер'}
{q = 'Это бывает 7 раз в неделю, 24 раза в сутки. Что это', a = 'Payday'}
{q = 'Напишите Nick_Name главного администратора 6-го сервера', a = 'Diana_Mironova'}
{q = 'Максимальная цена на оружие в АММО для владельцев бизнеса', a = '50000'}
{q = 'Самая популярная игра в казино', a = 'Кости'}
{q = 'Сколько АЗ стоит в донате 8000 семейной репутации', a = '2400'}
{q = 'Как звали третьего по счету ГА на сервере Scottdale', a = 'Владислав'}
{q = 'Фамилия администратора с ником Kory_McGregor', a = 'Мясников'}
{q = 'Ник главного администратора сервера Tucson, который был назначен после ухода Dmitriy_Prise', a = 'Steff_Kingston'}
{q = 'Сколько серверов было 1 октября 2017 года', a = '6'}
{q = 'Кто однорукий постоянно стоит в казино', a = 'Бандит'}
{q = 'Количество работ в центре занятости', a = '19'}
{q = 'Сколько нужно EXP для получения 39 уровня, если сейчас у тебя 1 lvl 4 exp', a = '3112'}
{q = 'возраст самого молодого ГА', a = '14'}
{q = 'Дата добавления корабля для мафий в формате xx.xx.xx', a = '19.06.16'}
{q = 'Кто закопал эти клады', a = 'Дмитрий'}
{q = 'Количество фракций на сервере', a = '27'}
{q = 'Сколько минут нужно отыграть для получения PayDay', a = '20'}
{q = 'Максимальное количество EXP, которое может выпасть с контейнера', a = '80'}
{q = 'Сколько нужно EXP для получения 25 уровня, если сейчас у тебя 22 lvl 20 exp', a = '268'}
{q = 'Накануне праздник, вышла обнова - это любимая наша', a = 'Аризона'}
{q = 'Старый, мудрый, 05го дежурный', a = 'Николай'}
{q = 'Дата выхода обновления, позволившего зарабатывать реальные деньги в игре', a = '16.07.19'}
{q = 'Какой налог нужен для слета дома', a = '104000'}
{q = 'которое было за все время на проекте', a = '3'}
{q = 'Сколько стоило 1 евро в день выпуска', a = '3000'}
{q = 'Стандартное количество ХП у автомобиля', a = '1500'}
{q = 'В каком месяце был добавлен информационный центр', a = 'Март'}
{q = 'В каком месяце Conor стал спец.администратором', a = 'Январь'} 
{q = 'Сколько талонов в день можно получать с семейных квестов', a = '11'}
{q = 'Количество лавок на Центральном Рынке', a = '30'}
{q = 'В каком году был добавлен депозит', a = '2017'}
{q = 'Самый крупный ютубер на 1 октября 2019 года', a = 'Delorenzy'}
{q = 'Количество домов на сервере за AZ монеты', a = '15'}
{q = 'Как зовут квестового NPC в деревне Montgomery', a = 'Майкл'}
{q = 'цена у любого бизнеса на сервере', a = '6000000'}
{q = 'С кем связано словосочетание "Горячие вакансии"', a = 'Николай'}
{q = 'Максимальный онлайн на проекте Arizona за все время', a = '100000'}
{q = 'Ник администратора который занимал пост ГА на двух разных серверах', a = 'Conor'}
{q = 'Максимальное количество бронзовых рулеток в 1 слоте инвентаря', a = '100'}
{q = 'В каком году был открыт сервер Mesa', a = '2018'}
{q = 'Какая цена была у Titan VIP в AZ монетах изначально', a = '2000'}
{q = 'В каком году Conor ушел с поста ГА на сервере Chandler', a = '2016'}
{q = 'Красная, как яблоко, наклейка с белой надписью', a = 'Supreme'}
{q = 'энергии пополняется каждый', a = '17.5'}
{q = 'Какая фамилия у разработчика Альберта', a = 'Миронов'}
{q = 'Лысый, смешной, большой и злой', a = 'Conor'}
{q = 'Вечно ждущий NPC на вокзале ЛС', a = 'Джереми'}
{q = 'недалеко от моста', a = 'Ричи'}
{q = 'Максимальное количество слотов для машин у 1 игрока', a = '5'}
{q = 'Сколько нужно перевезти пицц, чтобы выполнить начальный квест', a = '15'}
{q = 'Из какой страны привозят контейнеры для аукциона', a = 'Германия'}
{q = 'Накануне праздник, вышла обнова - это любимая наша', a = 'Аризона'}
{q = 'В честь кого установлен памятник недалеко от моста ЛС-СФ', a = 'Ричи'}
{q = 'Увеличивает скорость, но не чит, добавляет наклейку, но не Supreme', a = 'TwinTurbo'}
{q = 'установлен памятник', a = 'Ричи'}
{q = 'Какой ник в игре у Валика', a = 'Farmer'}
{q = 'Что нужно сделать или получить для выполнения первого начального квеста', a = 'Паспорт'}
{q = 'первого уровня', a = 'Таксист'}
{q = 'доступная с первого', a = 'Таксист'}
{q = 'Любит репорт отвечать, игрокам всем помогать', a = 'Хелпер'}
{q = 'Сколько нужно EXP для получения 25 уровня, если сейчас у тебя 22 lvl 20 exp', a = '268'}
{q = 'Максимальная ставка в одноруком бандите', a = '5000'}
{q = 'Сколько минут нужно отыграть для получения PayDay', a = '20'}
{q = 'Лысый, смешной, большой и злой', a = 'Conor'} 
{q = 'Сколько нужно EXP для получения 12 уровня, если сейчас у тебя 1 lvl 0 exp', a = '308'}
{q = 'Количество ГА, которые когда-либо были на сервере Red-Rock', a = '3'}
{q = 'Какое название у лучшего типа контейнера на английском', a = 'Business'}
{q = 'Количество ГА, которые когда-либо были на сервере Mesa', a = '2'}
{q = 'Количество ГА, которые когда-либо были на сервере Yuma', a = '1'}
{q = 'доступная с первого уровня', a = 'Таксист'}
{q = 'абота в центре', a = 'Таксист'}
 
D

deleted-user-163337

Гость
Автор темы
Не самый лучше вариант, лучше делать проверку на титл или текст. Ид может повториться или смениться.

Знак вопрос является служебным символом. Экранируй его %?


Не надо использовать функцию закрытия диалога, если ты все равно нопаешь появление. Функция не будет работать, т.к. окна ещё не существует.

Касаемо самого вопроса, ответить на него нет корректно вряд ли получится, потому что хер пойми что да где.
Напиши какие переменные, какой текст принимает, в какой последовательности всё делается. Скорей ошибка с регулярками, которые не могут получить корректно текст. Скриншот прикрепи самих диалогов.
image.png
 
D

deleted-user-163337

Гость
Автор темы
Не самый лучше вариант, лучше делать проверку на титл или текст. Ид может повториться или смениться.

Знак вопрос является служебным символом. Экранируй его %?


Не надо использовать функцию закрытия диалога, если ты все равно нопаешь появление. Функция не будет работать, т.к. окна ещё не существует.

Касаемо самого вопроса, ответить на него нет корректно вряд ли получится, потому что хер пойми что да где.
Напиши какие переменные, какой текст принимает, в какой последовательности всё делается. Скорей ошибка с регулярками, которые не могут получить корректно текст. Скриншот прикрепи самих диалогов.
без wait скрипт работает идеально и сразу отвечает на вопрос, все как надо, вот он же самый но без wait -

Lua:
function samp.onShowDialog(id, style, title, btn1, btn2, text)
questions = read_answers()
    if id == 13101 then
        Answered = false
        WaitingAnswer = false
        if text:find('Максимальный срок деморгана в секундах') then
            CurQuest = 'Максимальный срок деморгана в секундах'
        else
            if CurQuest:find('?') then
                CurQuest = text:match('Вопрос:%s+(.*)?')
            else
                CurQuest = text:match('Вопрос:%s+(.*)%s+Введите')
            end
        end
        if CurQuest then
            sampAddChatMessage(tag..' Вопрос: '..CurQuest, -1)
            CurQuest = CurQuest:gsub('%%', '')
            CurQuest = CurQuest:gsub(' ', '')
            CurQuest = CurQuest:gsub(',', '')
            CurQuest = CurQuest:gsub('-', '')
            CurQuest = CurQuest:gsub('    ', '')
            for i = 1, #questions do
                textik = questions[i]
                if textik ~= nil then
                    question, answer = textik:match("{q = '(.*)', a = '(.*)'}")
                    if question ~= nil then
                        question = question:gsub('%%', '')
                        question = question:gsub(' ', '')
                        question = question:gsub(',', '')
                        question = question:gsub('-', '')
                        question = question:gsub('    ', '')
                        if CurQuest:find(question) then
                            sampSendDialogResponse(id, 1, 0, answer)
                            sampAddChatMessage(tag..' Ответил: '..answer, -1)
                            Answered = true
                            WaitingAnswer = false
                            sampCloseCurrentDialogWithButton(0)
                            return false
                        end
                    end
                end
            end
        end
        if not Answered then
            sampAddChatMessage(tag..' Ответ не найден, введите ответ и он будет сохранен', -1)
            WaitingAnswer = true
        end
    end
    if id == 13100 then
        sampSendDialogResponse(id, 1, 0, '')
        return false
    end
end
 

Hatiko

Известный
Проверенный
1,471
612
Попробуй, остальное сам допишешь.

Lua:
function samp.onShowDialog(id, style, title, btn1, btn2, text)
    if text:find("Для того, чтобы взломать замок") then
        questions = read_answers()
       for i,v in ipairs(questions) do
            if text:find(v.q) then
                lua_thread.create(function()
                    math.randomseed(os.time())
                    wait(math.random(2500,3500))
                    sampSendDialogResponse(id, 1, 0, v.a)
                end)
                return false
            end
        end
    end
end
 
D

deleted-user-163337

Гость
Автор темы
Попробуй, остальное сам допишешь.

Lua:
function samp.onShowDialog(id, style, title, btn1, btn2, text)
    if text:find("Для того, чтобы взломать замок") then
        questions = read_answers()
       for i,v in ipairs(questions) do
            if text:find(v.q) then
                lua_thread.create(function()
                    math.randomseed(os.time())
                    wait(math.random(2500,3500))
                    sampSendDialogResponse(id, 1, 0, v.a)
                end)
                return false
            end
        end
    end
end
хорошо, спасибо за вариант, я попробую.
 
Статус
В этой теме нельзя размещать новые ответы.