Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Timer, timer не даёт работать
NoName212
сообщение 5.2.2019, 11:27
Сообщение #1


**

Neophyte
Сообщений: 13
Регистрация: 6.10.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.068
Возраст: 28



Беда! Таймер не даёт работать! Включаю таймер и он обрывает процесс(два клика подряд надо делать чтобы прервать процесс). Без таймера всё работает нормально (IMG:style_emoticons/default/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


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


Эскизы прикрепленных изображений
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.2.2019, 13:02
Сообщение #2


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Не вижу первоначальной инициализации таймера до начала цикла set timer - это раз.
Цитата
set timer #time + 5000

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

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.2.2019, 16:37
Сообщение #3


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
set timer

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

Меняем первую строку на:
set #time timer + 5000
радуемся жизни =)
Заметьте при таком подходе у вас может существовать неограниченное количество независимых таймеров и вы их не прихлопнете случайно обнулив системный timer


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.2.2019, 17:22
Сообщение #4


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Заметьте при таком подходе у вас может существовать неограниченное количество независимых таймеров и вы их не прихлопнете случайно обнулив системный timer
Дарк, как всегда - мыслишь на перспективу. Я то просто мельком глянул, а ты прямо сэнсей.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 5.2.2019, 17:24
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27707
Пользователь №: 11.279



Цитата
Дарк, как всегда - мыслишь на перспективу.

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 28.2.2019, 13:32
Сообщение #6


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(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 столб - текущее время

Если надо секундами измерять, соответственно меняем немного формулу
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 1.3.2019, 10:12
Сообщение #7


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(NoName212 @ 5.2.2019, 15:27) *

Беда! Таймер не даёт работать! Включаю таймер и он обрывает процесс(два клика подряд надо делать чтобы прервать процесс). Без таймера всё работает нормально (IMG:style_emoticons/default/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 хакнуть
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 7:46
Designed by Nickostyle