Не работает sampSendChat

Lance_Sterling

Известный
Автор темы
799
276
Версия MoonLoader
.026-beta
кароче есть функция ловли вопросов ну и кароче решил проанализировать на баги и оказывается он открывает вопрос только один раз
1678785716575.png

сделал простой дебаг(вроде так это называется) с выводом "Продам гараж" когда должен открываться вопрос
и вот не задача 1 раз это говно работает а остальные нет, чо делать
вот код
Lua:
bindHask = rkeys.registerHotKey(hask.v, true, function ()
        local function bindHaskFunc()
            if not sampIsChatInputActive() and not sampIsDialogActive() then--ЛОВЛЯ ВОПРОСОВ
                if not blockhask then
                    if not renderQuestion[0] then
                        if all_q ~= nil and tonumber(all_q) ~= 0 then
                            sampSendChat('/ha')--тут был продам гараж но я его уже убрал
                            wait(10)
                            sampSendDialogResponse(772, 1, all_q - 1, _)
                            if tonumber(all_q) > 0 then
                                all_q = all_q - 1
                            end
                        else
                            AddChatMessage('Сейчас нет вопросов!', 2)
                        end
                    else
                        AddChatMessage('Вы уже отвечаете на вопрос!',2)
                    end
                else
                    AddChatMessage('Скрипт только включился, дождитесь первого вопроса в чате!', 2)
                end
            end
        end
        if isCharInAnyCar(PLAYER_PED) then
            local car = getCarModel(storeCarCharIsInNoSave(PLAYER_PED))
            if car ~= 548 and car ~= 425 and car ~= 417 and car ~= 487 and car ~= 497 and car ~= 563 and car ~= 447 and car ~= 469 and car ~= 488 then
                bindHaskFunc()
            else
                AddChatMessage('Вы находитесь в вертолете, поэтому вы не сможете отвечать на вопросы находясь в нем.', 3)
            end
        else
            bindHaskFunc()
        end
    end)
 
Решение
А если что-то вроде такого слепить?
Lua:
bindHaskFunc = lua_thread.create_suspended(function()
    if not isSampAvailable() then return end
    if sampIsChatInputActive() or sampIsDialogActive() then return end
    if blockhask then return sampAddChatMessage('Скрипт только включился, дождитесь первого вопроса в чате!', -1) end
    if renderQuestion[0] then return sampAddChatMessage('Вы уже отвечаете на вопрос!', -1) end

    local t_all_q = tonumber(all_q)
    if not all_q or not t_all_q or t_all_q == 0 then return sampAddChatMessage('Сейчас нет вопросов!', -1) end

    sampSendChat('/ha') --тут был продам гараж но я его уже убрал
    repeat wait(10) until sampIsDialogActive()
    sampSendDialogResponse(772, 1, t_all_q - 1, _)

    if...

savvin

Известный
409
142
Возможно, дело в том что после ввода /ha нет активного диалога. Учитывай, что сначала твоя команда /ha должна отправиться на сервер, обработаться и потом обратно отправиться тебе. Сомневаюсь, что все это займет 10 миллисекунд. Используй хук рпц с диалогом
 

Lance_Sterling

Известный
Автор темы
799
276
Возможно, дело в том что после ввода /ha нет активного диалога. Учитывай, что сначала твоя команда /ha должна отправиться на сервер, обработаться и потом обратно отправиться тебе. Сомневаюсь, что все это займет 10 миллисекунд. Используй хук рпц с диалогом
ну раньше то все было топ
продам гараж не отправляется точно так же как и /ha
 

kyrtion

Известный
630
232
ну раньше то все было топ
продам гараж не отправляется точно так же как и /ha
Может это?
sampSendChat на sampProcessChatInput замени.
Для серверных команд используется sampSendChat, а для клиента - sampProcessChatInput
 

Lance_Sterling

Известный
Автор темы
799
276
Может это?
та не, это серверная команда

она через раз отправляется чето
 

kyrtion

Известный
630
232
Прописывал /ha
Получаешь содержание диалога, тексты и прочее, забиваешь на onShowDialog. Если совпадает данные, врубаешь выполнение функции что-то сделать. ну ты понял да

Все в одной в функции - неудобно, но зачем?)
 

Lance_Sterling

Известный
Автор темы
799
276
Прописывал /ha
Получаешь содержание диалога, тексты и прочее, забиваешь на onShowDialog. Если совпадает данные, врубаешь выполнение функции что-то сделать. ну ты понял да

Все в одной в функции - неудобно, но зачем?)
бля я хз как с этим работать без SAMP.lua :>
гайды чето там ниче не понял
 

Andrinall

Известный
678
531
А если что-то вроде такого слепить?
Lua:
bindHaskFunc = lua_thread.create_suspended(function()
    if not isSampAvailable() then return end
    if sampIsChatInputActive() or sampIsDialogActive() then return end
    if blockhask then return sampAddChatMessage('Скрипт только включился, дождитесь первого вопроса в чате!', -1) end
    if renderQuestion[0] then return sampAddChatMessage('Вы уже отвечаете на вопрос!', -1) end

    local t_all_q = tonumber(all_q)
    if not all_q or not t_all_q or t_all_q == 0 then return sampAddChatMessage('Сейчас нет вопросов!', -1) end

    sampSendChat('/ha') --тут был продам гараж но я его уже убрал
    repeat wait(10) until sampIsDialogActive()
    sampSendDialogResponse(772, 1, t_all_q - 1, _)

    if t_all_q > 0 then all_q = all_q - 1 end
end)

bindHask = rkeys.registerHotKey({ VK_J }, 1, true, function()
    if isCharInAnyCar(PLAYER_PED) then
        local car = getCarModel(storeCarCharIsInNoSave(PLAYER_PED))
        if car ~= 548 and car ~= 425 and car ~= 417 and car ~= 487 and car ~= 497 and car ~= 563 and car ~= 447 and car ~= 469 and car ~= 488 then
            if not bindHaskFunc:status():find("yielded") then bindHaskFunc:run() end
        else
            sampAddChatMessage('Вы находитесь в вертолете, поэтому вы не сможете отвечать на вопросы находясь в нем.', -1)
        end
    else
        if not bindHaskFunc:status():find("yielded") then bindHaskFunc:run() end
    end
end)
 
  • Вау
  • Нравится
Реакции: qdIbp и Lance_Sterling

Lance_Sterling

Известный
Автор темы
799
276
А если что-то вроде такого слепить?
Lua:
bindHaskFunc = lua_thread.create_suspended(function()
    if not isSampAvailable() then return end
    if sampIsChatInputActive() or sampIsDialogActive() then return end
    if blockhask then return sampAddChatMessage('Скрипт только включился, дождитесь первого вопроса в чате!', -1) end
    if renderQuestion[0] then return sampAddChatMessage('Вы уже отвечаете на вопрос!', -1) end

    local t_all_q = tonumber(all_q)
    if not all_q or not t_all_q or t_all_q == 0 then return sampAddChatMessage('Сейчас нет вопросов!', -1) end

    sampSendChat('/ha') --тут был продам гараж но я его уже убрал
    repeat wait(10) until sampIsDialogActive()
    sampSendDialogResponse(772, 1, t_all_q - 1, _)

    if t_all_q > 0 then all_q = all_q - 1 end
end)

bindHask = rkeys.registerHotKey({ VK_J }, 1, true, function()
    if isCharInAnyCar(PLAYER_PED) then
        local car = getCarModel(storeCarCharIsInNoSave(PLAYER_PED))
        if car ~= 548 and car ~= 425 and car ~= 417 and car ~= 487 and car ~= 497 and car ~= 563 and car ~= 447 and car ~= 469 and car ~= 488 then
            if not bindHaskFunc:status():find("yielded") then bindHaskFunc:run() end
        else
            sampAddChatMessage('Вы находитесь в вертолете, поэтому вы не сможете отвечать на вопросы находясь в нем.', -1)
        end
    else
        if not bindHaskFunc:status():find("yielded") then bindHaskFunc:run() end
    end
end)
похоже на не говнокод я такое не делаю, попробовать конечно можно, поясни за
bindHaskFunc:status():find("yielded")
чо эта захуита
repeat wait(10) until sampIsDialogActive()
я так делал и он закрывает диалог не сразу даже если задержка 0, там видно диалог поэтому я скрываю его через хук

если с хуком то не работает потому что диалог не появляется а sampIsDialogActive() реагирует на открытый диалог а не скрытый хуком(
 

Andrinall

Известный
678
531
похоже на не говнокод я такое не делаю
Никогда не поздно начать)

поясни за
bindHaskFunc:status():find("yielded")
чо эта захуита

По сути это проверка не повис ли поток на том цикле repeat, при желании убрать можно.

я так делал и он закрывает диалог не сразу даже если задержка 0, там видно диалог поэтому я скрываю его через хук

если с хуком то не работает потому что диалог не появляется а sampIsDialogActive() реагирует на открытый диалог а не скрытый хуком(
Ну я же не знал, что диалог скрывается хуком)
Можешь модифицировать под свои нужды этот код, авось зайдёт.
 
  • Нравится
Реакции: Lance_Sterling

Andrinall

Известный
678
531
То есть, когда выполняется функции и этот цикл останавливается, пока не получу true.
После true и оно продолжается выполнять функцию?

repeat wait(100) until isSampAvailable() == while not isSampAvailable() do wait(100) end
 
  • Нравится
Реакции: kyrtion