Баг с задержкой

James Hawk

Известный
Автор темы
919
218
Поймал небольшой баг в скрипте
Есть цикл, в конце которого скрипт ждёт определённое время и снова проходится по циклу. При отключении скрипта по команде всё прекращается. Стоит мне сразу же активировать повторно скрипт, он подождёт то время, что осталось, и только тогда продолжит работу.

Например, задержка 6 сек. Включил скрипт: прошёл цикл, ожидание 6 сек, снова прошёл цикл и по новой. Отключил скрипт. Тишина. Если до повторного включения прошло уже 6 сек, то после включения скрипт сработает сразу. Если же время не прошло - скрипт будет ждать указанное время и только после этого сработает.

Пробовал разные варианты реализации, но пока на всех вариантах баг действителен. Возможно кто-то знает вариант решения или может указать на ошибку
Lua:
local time=6000

while true do
   wait(0)
   if flag then
      -- проход по циклу
      wait(time)
   end
end
 
Последнее редактирование:

ImPasha

Software Developer & System Administrator
Друг
1,789
2,141
Проверил твой код у себя и ничего необычного не обнаружил. Скорее всего тебе просто кажется, что имеется какая-то задержка, а на самом деле это не так. Собственно, пытался измерять время и везде оно было одинаковым, хотя при перезагрузке скрипт слегка подтупливал, что можно списать на какую-то небольшую задержку, но она явно не связана с той задержкой, что находится в цикле. Вероятнее всего, нет никакого бага, а виноват человеческий фактор. Сложно что-то определить на глаз, особенно если речь идёт о времени.
 

James Hawk

Известный
Автор темы
919
218
Проверил твой код у себя и ничего необычного не обнаружил. Скорее всего тебе просто кажется, что имеется какая-то задержка, а на самом деле это не так. Собственно, пытался измерять время и везде оно было одинаковым, хотя при перезагрузке скрипт слегка подтупливал, что можно списать на какую-то небольшую задержку, но она явно не связана с той задержкой, что находится в цикле. Вероятнее всего, нет никакого бага, а виноват человеческий фактор. Сложно что-то определить на глаз, особенно если речь идёт о времени.
Объясню детальнее на примере скрипта с открытием рулеток. Ставлю 30 мин задержки. Включаю, после открытия сундука сразу отключаю. После включения повторно оно ждёт 30 мин и только тогда проходит по циклу
 

ImPasha

Software Developer & System Administrator
Друг
1,789
2,141
Объясню детальнее на примере скрипта с открытием рулеток. Ставлю 30 мин задержки. Включаю, после открытия сундука сразу отключаю. После включения повторно оно ждёт 30 мин и только тогда проходит по циклу
Потому что у тебя старый wait не истёк. Ты его запустил и обрубил функцию, а тот уже выполняется. В таком плане лучше использовать os.time или os.clock.
 

James Hawk

Известный
Автор темы
919
218
Потому что у тебя старый wait не истёк. Ты его запустил и обрубил функцию, а тот уже выполняется. В таком плане лучше использовать os.time или os.clock.
Почему тогда в другом скрипте я wait обрубаю и всё останавливается?
 

ImPasha

Software Developer & System Administrator
Друг
1,789
2,141
Почему тогда в другом скрипте я wait обрубаю и всё останавливается?
Возможно, у тебя там один wait, а не как тут - два. Вообще не вижу смысл использовать wait после wait в бесконечном цикле - для этого есть потоки.