Проблема с диалогами

Seaside_

Участник
Автор темы
64
2
Версия MoonLoader
Другое
Всем привет. Написал скрипт с диалогом, но когда его использую выходит ошибка в самой игре и скрипт крашит, что делать.

Ошибка в игре: Warning(s007): Exception 0xC0000005 at 0xF979B

Код:
Я в шоке:
function main()
    repeat wait(0) until isSampAvailable()
    wait(500)
    sampRegisterChatCommand('otvet', otvet)

    while true do
        wait(0)
    end
end


function otvet(id)
    if id == '' then
        sampAddChatMessage('{FFCD0A}[Авто-ответчик]: {FFFFFF}Введите: /otvet [ID игрока]', -1)
    else
        local result = sampIsPlayerConnected(id)
        if not result then
            sampAddChatMessage('{FFCD0A}[Авто-ответчик]: {FFFFFF}Игрок не найден.', -1)
        else
            local nick = sampGetPlayerNickname(id)
    sampShowDialog(2, '{FFCD0A}Admin Tools | {FFFFFF}Авто-ответчик для игрока {FFCD0A}' .. nick .. '[' .. id .. ']', '{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}рулетку\n{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}Б/К\n{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}PayDay', 'Выбрать', 'Отмена', 2)
    lua_thread.create(otvet_igrok)
end
end
end

function otvet_igrok()
    while sampIsDialogActive() do
     wait(0)
     local result, button, list, input = sampHasDialogRespond(2)
         if button == 1 and list == 0 then
             sampSendChat('/ans ' .. id .. ' Чтобы круть рулетку, нужно:')
             sampSendChat('/ans ' .. id .. ' 1. Перейти на сайт проекта(/mordor -> Сайт).')
              sampSendChat('/ans ' .. id .. ' 2. Авторизоваться в личном кабинете и выбрать пункт "Рулетка".')
              sampSendChat('/ans ' .. id .. ' 3. Выбрать необходимую для Вас рулетку.')
              sampSendChat('/ans ' .. id .. ' Приятной игры на Mordor Role Play.')
         end
     end
end
 

trefa

Известный
Всефорумный модератор
2,097
1,230
Я может конечно чего-то не понимаю. Но вроде как Main сама по себе выполняется бесконечно, разве нет? Для чего тогда 6-8 строки нужны вообще?
Функция main выполняется один раз при запуске, Строки нужны чтоб не завершить поток скрипта (если нету активных callback)
Всем привет. Написал скрипт с диалогом, но когда его использую выходит ошибка в самой игре и скрипт крашит, что делать.

Ошибка в игре: Warning(s007): Exception 0xC0000005 at 0xF979B

Код:
Я в шоке:
function main()
    repeat wait(0) until isSampAvailable()
    wait(500)
    sampRegisterChatCommand('otvet', otvet)

    while true do
        wait(0)
    end
end


function otvet(id)
    if id == '' then
        sampAddChatMessage('{FFCD0A}[Авто-ответчик]: {FFFFFF}Введите: /otvet [ID игрока]', -1)
    else
        local result = sampIsPlayerConnected(id)
        if not result then
            sampAddChatMessage('{FFCD0A}[Авто-ответчик]: {FFFFFF}Игрок не найден.', -1)
        else
            local nick = sampGetPlayerNickname(id)
    sampShowDialog(2, '{FFCD0A}Admin Tools | {FFFFFF}Авто-ответчик для игрока {FFCD0A}' .. nick .. '[' .. id .. ']', '{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}рулетку\n{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}Б/К\n{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}PayDay', 'Выбрать', 'Отмена', 2)
    lua_thread.create(otvet_igrok)
end
end
end

function otvet_igrok()
    while sampIsDialogActive() do
     wait(0)
     local result, button, list, input = sampHasDialogRespond(2)
         if button == 1 and list == 0 then
             sampSendChat('/ans ' .. id .. ' Чтобы круть рулетку, нужно:')
             sampSendChat('/ans ' .. id .. ' 1. Перейти на сайт проекта(/mordor -> Сайт).')
              sampSendChat('/ans ' .. id .. ' 2. Авторизоваться в личном кабинете и выбрать пункт "Рулетка".')
              sampSendChat('/ans ' .. id .. ' 3. Выбрать необходимую для Вас рулетку.')
              sampSendChat('/ans ' .. id .. ' Приятной игры на Mordor Role Play.')
         end
     end
end
Когда получаешь аргумент из команды она имеет тип строки. Используй tonumber(id) и проверяй что она не равна nil
 
  • Нравится
Реакции: r0den

Seaside_

Участник
Автор темы
64
2
Функция main выполняется один раз при запуске, Строки нужны чтоб не завершить поток скрипта (если нету активных callback)

Когда получаешь аргумент из команды она имеет тип строки. Используй tonumber(id) и проверяй что она не равна nil
Вот так?
Lua:
function otvet(tonumber)
 if tonumber == nil then
 
 end
end
 

FirePlacer43

Участник
7
3
По сути должно работать, если все так-же не работает, напиши в лс
Lua:
function main()
    if not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampRegisterChatCommand('otvet', otvet)
    while true do
        wait(0)
    end
end

function otvet(id)
    if id == '' then
        sampAddChatMessage('{FFCD0A}[Авто-ответчик]: {FFFFFF}Введите: /otvet [ID игрока]', -1)
    else
        local result = sampIsPlayerConnected(id)
        if not result then
            sampAddChatMessage('{FFCD0A}[Авто-ответчик]: {FFFFFF}Игрок не найден.', -1)
        else
            local nick = sampGetPlayerNickname(id)
            sampShowDialog(2, '{FFCD0A}Admin Tools | {FFFFFF}Авто-ответчик для игрока {FFCD0A}' .. nick .. '[' .. id .. ']', '{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}рулетку\n{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}Б/К\n{FFCD0A}Игрок {FFFFFF}задал вопрос про {FFCD0A}PayDay', 'Выбрать', 'Отмена', 2)
        end
    end
    lua_thread.create(otvet_igrok, true)
end

function otvet_igrok()
    id = tonumber(id)
    if id ~= nil then
        while sampIsDialogActive() do wait(0)
            local result, button, list, input = sampHasDialogRespond(2)
            if button == 1 and list == 0 then
                sampSendChat('/ans ' .. id .. ' Чтобы крутить рулетку, нужно:')
                wait(400) -- Я думаю если это нуборп не отключило анти-спам для админов придется с задержкой отправлять. Смотри сам в общем.
                sampSendChat('/ans ' .. id .. ' 1. Перейти на сайт проекта(/mordor -> Сайт).')
                wait(400)
                sampSendChat('/ans ' .. id .. ' 2. Авторизоваться в личном кабинете и выбрать пункт "Рулетка".')
                wait(400)
                sampSendChat('/ans ' .. id .. ' 3. Выбрать необходимую для Вас рулетку.')
                wait(400)
                sampSendChat('/ans ' .. id .. ' Приятной игры на Mordor Role Play.')
            end
        end
    end
end
 
Последнее редактирование: