- 289
- 42
- Версия MoonLoader
- Другое
приветствую, недавно из своих старых наработок воссоздал таймер на мимгуи с фиксами, но проблема в том, что таймер не работает в фоновом режиме, когда закрыто окно с таймером, и это ломает всю логику работы (он работает только с включенным окном). Очень долго копался в коде и ничего не смог исправить, что я сделал не так?
Lua:
local function formatTime(remaining)
local hours = math.floor(remaining / 3600) % 24
local minutes = math.floor(remaining / 60) % 60
local seconds = remaining % 60
return hours, minutes, seconds
end
local timer_remaining = 0 -- Время, оставшееся на таймере в секундах
local update_interval = 1 / 60 -- Интервал обновления таймера в секундах
imgui.OnFrame(function() return timer_window[0] and not isGamePaused() end, function(timer)
imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.Begin(u8'Таймер', timer_window, imgui.WindowFlags.AlwaysAutoResize)
imgui.Text(u8'Секунды:')
if not timer_active then
imgui.SetCursorPos(imgui.ImVec2(300, 60))
imgui.Text(u8'Таймер ещё не запущен.')
end
imgui.PushItemWidth(200)
imgui.SliderInt('##second', seconds_timer, 0, 59) imgui.SameLine(300)
imgui.PopItemWidth()
imgui.Spacing()
imgui.Text(u8'Минуты:')
imgui.PushItemWidth(200)
imgui.SliderInt('##minut', minutes_timer, 0, 59)
imgui.PopItemWidth()
imgui.Spacing()
imgui.Text(u8'Часы')
imgui.PushItemWidth(200)
imgui.SliderInt("##hour", hours_timer, 0, 23)
imgui.PopItemWidth()
imgui.NewLine()
imgui.Spacing()
if not timer_active then
timer_remaining = seconds_timer[0] + (minutes_timer[0] * 60) + (hours_timer[0] * 3600)
if imgui.Button(u8'Запустить таймер', imgui.ImVec2(600, 40)) then
timer_active = not (seconds_timer[0] == 0 and minutes_timer[0] == 0 and hours_timer[0] == 0)
end
else
if timer_remaining > 0 then
timer_remaining = timer_remaining - update_interval -- Уменьшаем оставшееся время
local hours, minutes, seconds = formatTime(timer_remaining)
imgui.SetCursorPos(imgui.ImVec2(300, 60))
imgui.Text(u8'Осталось времени:')
imgui.SetCursorPos(imgui.ImVec2(300, 85))
if timer_remaining < 30 then
imgui.TextColoredRGB(string.format('{FF0000}%0d:%0d:%02d', hours, minutes, seconds))
else
imgui.Text(string.format('%0d:%0d:%02d', hours, minutes, seconds))
end
else
sampAddChatMessage(tag.. ' Таймер остановлен.', -1)
timer_active = false -- Останавливаем таймер, если время закончилось
end
if timer_active then
imgui.SetCursorPosY(330)
if imgui.Button(u8'Остановить таймер', imgui.ImVec2(600, 40)) then
timer_active = false
end
end
end
imgui.End()
end)