Как выйти из цикла за x секунд

#lua

#lua

Вопрос:

Я пытаюсь изменить сценарий FiveM, и я пытаюсь выйти из цикла в Lua через 4 секунды, но я не знаю как.

Я не знаю, что я делаю, и мне нужна помощь.

 Citizen.CreateThread(function()
    function drawscaleform(scaleform)
        scaleform = RequestScaleformMovie(scaleform)

        while not HasScaleformMovieLoaded(scaleform) do
            Citizen.Wait(0)
        end

        PushScaleformMovieFunction(scaleform, "SHOW_POPUP_WARNING")
        PushScaleformMovieFunctionParameterFloat(500.0)
        PushScaleformMovieFunctionParameterString("ALERT")
        PushScaleformMovieFunctionParameterString("~b~Peacetime Active")
        PushScaleformMovieFunctionParameterString("This Means No Priority Calls")
        PushScaleformMovieFunctionParameterBool(true)
        PushScaleformMovieFunctionParameterInt(0)
        PopScaleformMovieFunctionVoid()

        DrawScaleformMovieFullscreen(scaleform, 255, 255, 255, 255, 0)
    end

    while true do
        Citizen.Wait(0)
        drawscaleform("POPUP_WARNING")
    end
end)
  

Я хотел бы выйти из цикла while true через 4 секунды

Ответ №1:

Скорее всего, какая-то комбинация break команды Lua, устанавливающая условие в вашем цикле while, которое более четко передает намерение цикла (кроме просто while true …) и лучше использовать Citizen.Wait() функцию FiveM. В документации для этой функции здесь говорится, что аргументом является количество миллисекунд для приостановки текущего потока выполнения.

Потратьте некоторое время на понимание этих элементов, кода, который вы пытаетесь изменить, и поэкспериментируйте. SO не будет просто кодировать для вас.

Ответ №2:

Существует функция Citizen.SetTimeout FiveM для вызова функции по истечении определенного периода. Вот один (непроверенный) способ, которым вы могли бы его использовать:

 Citizen.CreateThread(function()
    function drawscaleform(scaleform)
    ...
    end

    local wait = true

    Citizen.SetTimeout(4000, function() wait = false end)

    while wait do
        Citizen.Wait(0)
        drawscaleform("POPUP_WARNING")
    end
end)