Помощь - Поиск - Пользователи - Календарь
Полная версия: Timer
UoKit.com Форумы > Кликер > UO Pilot
NoName212
Беда! Таймер не даёт работать! Включаю таймер и он обрывает процесс(два клика подряд надо делать чтобы прервать процесс). Без таймера всё работает нормально ohmy.gif (только не ест, не пьёт, не спит, в общем не жилец).

таймер
Код
set #handleWin findwindow 1574140
set workwindow #handleWin

set #time 5000
while 1 = 1
    if timer > #time
    set #waterZero findimage (406, 29 551, 31 (C:\DAYR\DAY_R_IMAGE\chat.bmp) %arr 2 15 1 7)
    wait 1000
        //msg #waterZero
        if #waterZero > 0
           stop_script allEx
           left 750, 360 //стоп крафт
           wait 100
           left 750, 360
           call foodsleepfood #true #false
        end_if
        set timer #time + 5000
        start_script 13
    end_if
end_while

proc foodsleepfood #true #false
//едим, пьем, спим, едим
set #true 1
set #false 0
if #true > #false
    call okno #a #b
    wait 300
    left 757, 512 //локация
    wait 300
    call okno #a #b
    left 352, 423 //пьём
    wait 300
    call okno #a #b
    left 447, 424 //жрем
    wait 300
    call okno #a #b
    left 894, 403 //спим
    wait 9000
    call okno #a #b
    left 690, 794   //жрем
    wait 300
    call okno #a #b
    wait 300
end_if
end_proc

//всплывающие окна погода/землятресения и т.д.
proc okno #a #b
    set #a 0
    set #b findimage (1523, 334 1589, 393  (C:\DAYR\DAY_R_IMAGE\pogoda.bmp) %arr 2 80 1 5)
    if #b > #a
        wait 300
        left %arr [1 1] %arr [1 2]
        wait 300
    end_if
    wait 300
end_proc


Что можно сделать? Раньше были в коде скрипта эти проверки, решил их сделать по уму в отдельном скрипте, но не выходит...
sutra
Не вижу первоначальной инициализации таймера до начала цикла set timer - это раз.
Цитата
set timer #time + 5000

Таймер всегда будет больше переменной контроля, надо сделать просто
Цитата
set timer

DarkMaster
Цитата
set timer

Так лучше не делать, т.к. на таймер могут быть навешаны несколько условий. Даже если сейчас оно только одно, время идет и потом можно получить нежданчик: вы будете обнулять таймер для котроля одного цикла, а сыпаться будет попутно другой.
Цитата
set #time 5000
while 1 = 1
if timer > #time

Меняем первую строку на:
set #time timer + 5000
радуемся жизни =)
Заметьте при таком подходе у вас может существовать неограниченное количество независимых таймеров и вы их не прихлопнете случайно обнулив системный timer
sutra
Цитата
Заметьте при таком подходе у вас может существовать неограниченное количество независимых таймеров и вы их не прихлопнете случайно обнулив системный timer
Дарк, как всегда - мыслишь на перспективу. Я то просто мельком глянул, а ты прямо сэнсей.
DarkMaster
Цитата
Дарк, как всегда - мыслишь на перспективу.

Скорее наоборот. Мыслю на зад. Свой собственный, пострадавший по этому поводу пару раз)
xolost
Цитата(DarkMaster @ 5.2.2019, 17:24) *

Скорее наоборот. Мыслю на зад. Свой собственный, пострадавший по этому поводу пару раз)

А ты вспомни сколько я на этом срадал) ещё лет 7 назад ты мне объяснял этот момент, как его правильно делать)
А у меня-то вообще было около сотни циклов перед которыми я его обнулял.

Впрочем, чуть позже я нашел ещё одно классное решение, которое решает проблему обнуления системного таймера.

Примерно вот так:

Код
load_array %timers c:\path\timers.txt
set #timeNow min + hour * 60 + day * 24 * 60

for #t 1 size(%timers)
   if %timers[#t 1] = 1
      set #timePassed #timeNow - %timers[#t 3]
      if #timePassed  >= %timers[#t 2] or #timePassed < 0
         msg Время пришло!
         // что-то поделали и в конце записываем время текущее время для таймера в файл
         set #timeNow min + hour * 60 + day * 24 * 60
         set %timers[#t 3] #timeNow
         save_array %timers c:\path\timers.txt
      end_if
   end_if
end_for


Подсасываем файл с таймерами.
разные строки в файле - разные объекты со своими таймерами.
1 столб - вкл\выкл данная строка
2 столб - время в минутах, по истечению которого проверка будет пройдена
3 столб - текущее время

Если надо секундами измерять, соответственно меняем немного формулу
Levo222
Цитата(NoName212 @ 5.2.2019, 15:27) *

Беда! Таймер не даёт работать! Включаю таймер и он обрывает процесс(два клика подряд надо делать чтобы прервать процесс). Без таймера всё работает нормально ohmy.gif (только не ест, не пьёт, не спит, в общем не жилец).

таймер
Код
set #handleWin findwindow 1574140
set workwindow #handleWin

set #time 5000
while 1 = 1
    if timer > #time
    set #waterZero findimage (406, 29 551, 31 (C:\DAYR\DAY_R_IMAGE\chat.bmp) %arr 2 15 1 7)
    wait 1000
        //msg #waterZero
        if #waterZero > 0
           stop_script allEx
           left 750, 360 //стоп крафт
           wait 100
           left 750, 360
           call foodsleepfood #true #false
        end_if
        set timer #time + 5000
        start_script 13
    end_if
end_while

proc foodsleepfood #true #false
//едим, пьем, спим, едим
set #true 1
set #false 0
if #true > #false
    call okno #a #b
    wait 300
    left 757, 512 //локация
    wait 300
    call okno #a #b
    left 352, 423 //пьём
    wait 300
    call okno #a #b
    left 447, 424 //жрем
    wait 300
    call okno #a #b
    left 894, 403 //спим
    wait 9000
    call okno #a #b
    left 690, 794   //жрем
    wait 300
    call okno #a #b
    wait 300
end_if
end_proc

//всплывающие окна погода/землятресения и т.д.
proc okno #a #b
    set #a 0
    set #b findimage (1523, 334 1589, 393  (C:\DAYR\DAY_R_IMAGE\pogoda.bmp) %arr 2 80 1 5)
    if #b > #a
        wait 300
        left %arr [1 1] %arr [1 2]
        wait 300
    end_if
    wait 300
end_proc


Что можно сделать? Раньше были в коде скрипта эти проверки, решил их сделать по уму в отдельном скрипте, но не выходит...

Вроде же есть мод на отключение жажды голода и пр, в кр случае можно через cheet engine хакнуть
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.