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

 
Ответить в эту темуОткрыть новую тему
> команда set timer, помогите
Guest4r
сообщение 21.11.2017, 2:20
Сообщение #1


*

Registred
Сообщений: 1
Регистрация: 21.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.693
Возраст: 30



Привествую всех.
Есть несколько макросов. Необходимо объеденить их в 1.
Прочитал про переменную timer, в частности, что
Код
set timer // устанавливает значение timer в 0

Для примера
Код
MOUSEMOVE 536 361 0 0
SYSKEYUP 14354 32824 187 0
KEYUP 21037 32850 187 0
MOUSEMOVE 536 359 406 0
MOUSEMOVE 278 310 3000 0
MOUSEMOVE 278 311 3172 0
LBUTTONDOWN 278 311 3187 2687760
MOUSEMOVE 278 311 3187 0
LBUTTONUP 278 311 3234 2687760
MOUSEMOVE 278 311 3234 0
MOUSEMOVE 668 360 7219 0
MOUSEMOVE 667 360 7266 0
SYSKEYDOWN 14354 32824 8172 0
set timer
MOUSEMOVE 718 504 0 0
SYSKEYUP 14354 32824 141 0
KEYUP 21037 32850 203 0
MOUSEMOVE 718 503 610 0
MOUSEMOVE 529 405 4594 0
MOUSEMOVE 531 391 4594 0
MOUSEMOVE 535 379 4610 0
MOUSEMOVE 542 365 4610 0
MOUSEMOVE 747 431 5157 0
MOUSEMOVE 748 431 5172 0
LBUTTONDOWN 748 431 5328 2687760
MOUSEMOVE 748 431 5172 0
LBUTTONUP 748 431 5438 2687760
MOUSEMOVE 748 431 5438 0
MOUSEMOVE 747 433 5532 0
MOUSEMOVE 745 435 5547 0
MOUSEMOVE 743 436 5547 0
MOUSEMOVE 741 438 5563 0
MOUSEMOVE 739 441 5563 0
MOUSEMOVE 737 443 5578 0
MOUSEMOVE 735 446 5578 0
MOUSEMOVE 733 447 5594 0
MOUSEMOVE 732 449 5594 0
MOUSEMOVE 731 451 5610 0
MOUSEMOVE 730 452 5625 0
MOUSEMOVE 730 453 5625 0
MOUSEMOVE 730 454 5641 0
MOUSEMOVE 730 453 5797 0
SYSKEYDOWN 14354 32824 6532 0
SYSKEYDOWN 14354 32824 7032 0
SYSKEYDOWN 14354 32824 7063 0
SYSKEYDOWN 14354 32824 7094 0
SYSKEYDOWN 14354 32824 7125 0
SYSKEYDOWN 14354 32824 7157 0
SYSKEYDOWN 14354 32824 7188 0
SYSKEYDOWN 14354 32824 7219 0

После set timer мышка чуть дёргается и выполнение макроса прекращается. А мне нужно, что бы выполнение проходило дальше, но с "нулевой" отметки времени, так как все макросы, которые нужно объеденить начинаются с нулевой отметки.
Что я делаю не так?
Сильно не бейте, первый раз пишу макрос, нужно автоматизировать кое-чё.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.11.2017, 3:18
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Макросы лучше не редактировать, тем более не добавлять в них другие команды.
Пишите скрипт. Список_функций
Посмотрите примеры, сложного ничего нет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 3.4.2018, 2:16
Сообщение #3


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Можно ли как-то корректировать параметры таймер? Конкретнее хочу что бы пилот выводил секундомер в лог, в более понятном и читабельном формате hh:mm:ss. А то обычный timer выводит все миллисекундах, мне такая точность не к чему а постоянно конвертировать время что бы узнать за сколько скрипт отработал не то) Понятно что она создавалась для других целей но все же можно ли что то сделать. Или как-то преобразовать вывод времени Hour : Min : Sec под секундомер.
Код

set timer
//действие
log timer
end_script

А TimeStamp (Hours Minutes Seconds) чо-то не преобразует... (IMG:style_emoticons/default/mellow.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 3.4.2018, 3:05
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Код
set $current_time TimeNow    // запоминаем время начала работы скрипта

while 1 = 1
    set #a SubDate(TimeNow $current_time)   // отнимает от текущего времени время начала работы скрипта
    hint TimeStamp (#a)
    wait 1
end_while

Через таймер:
Код
set %time[1] mod(div(timer 3600000) 24)
set %time[2] mod(div(timer 60000) 60)
set %time[3] mod(div(timer 1000) 60)
for #i 1 3
    if size(%time[#i 1]) = 1
        set %time[#i] 0%time[#i]
    end_if
end_for
hint %time[1]:%time[2]:%time[3]
wait 1
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 3.4.2018, 3:31
Сообщение #5


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата

Код
set $current_time TimeNow    // запоминаем время начала работы скрипта

while 1 = 1
    set #a SubDate(TimeNow $current_time)   // отнимает от текущего времени время начала работы скрипта
    hint TimeStamp (#a)
    wait 1
end_while
Первый вариант прикольный задумка нравиться отображает как секундомер, но мне не подходит так как нужно вписывать в цикл, а подчастую скрипты работают в ночное время.
Цитата

Через таймер:
Код
set %time[1] mod(div(timer 3600000) 24)
set %time[2] mod(div(timer 60000) 60)
set %time[3] mod(div(timer 1000) 60)
for #i 1 3
    if size(%time[#i 1]) = 1
        set %time[#i] 0%time[#i]
    end_if
end_for
hint %time[1]:%time[2]:%time[3]
wait 1


А второй вариант пожалуй то что нужно. Благодарю за наводку сам бы не справился!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.4.2018, 9:29
Сообщение #6


***********

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



Вариант для луа с дописыванием нулей и опциональным отображением миллисекунд:
Код
--lua
local launch_time = os.clock() -- Эту строку в начало скрипта.

-- Функция возвращает время
-- с начала работы скрипта
-- в формате hh:mm:ss.ms
-- (требуется задание launch_time).
-- При вызове без аргументов
-- миллисекунды не обрабатываются.
-- Для обработки миллисекунд необходимо
-- вызвать функцию с флагом истины:
-- timer_f(true)
local function timer_f(ms_flag)
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    if h < 10 then h = "0" .. h end
    local m = math.floor(time_delta/60)%60
    if m < 10 then m = "0" .. m end
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end
    if  ms_flag then
        local ms = math.modf(time_delta%1*1000)
        if ms < 100 then
            if ms > 9 then
                ms = "0" .. ms
            else
                ms ="00" .. ms
            end
        end
        s = s .. "." .. ms
    end
    return h..":"..m..":"..s
end

-- Вызваем:
log("Прошло времени:" .. timer_f())
log("С миллисекундами:" .. timer_f(true))


Сообщение отредактировал DarkMaster - 3.4.2018, 17:55


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Чуть проще:
Код
--lua
local launch_time = os.clock() -- Эту строку в начало скрипта.

local function timer_f(ms_flag)
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    local m = string.format("%02d", math.floor(time_delta/60)%60)
    local s = string.format("%02d", math.floor(time_delta)%60)
    if  ms_flag then
        s = s .. "." .. string.format("%03d", math.modf(time_delta%1*1000))
    end
    return h..":"..m..":"..s
end

while 1 do
--    hint("Прошло времени: " .. timer_f())
    hint("С миллисекундами: " .. timer_f(true))
    wait (10)
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.4.2018, 17:55
Сообщение #8


***********

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



Цитата
Чуть проще:

И "чуть" тормознее:
26,1850000000013 - твой короткий вариант
0,0309999999990396 - мой длинный
тестилось только преобразование секунд.
Разница в 844.6 раза)

Сообщение отредактировал DarkMaster - 3.4.2018, 17:56


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


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Не критично же, а читать немного проще.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 3.4.2018, 23:18
Сообщение #10


***********

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



Цитата
Не критично же, а читать немного проще.

Зачем читать маленькую функцию, которая просто возвращает время?) Ее написал, запихал в подгружаемые и забыл.


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


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Все что пишется должно быть читабельно и закомментировано. Вопрос тут не в том, что ее можно написать и забыть, а в том, что вот таких функций порой - море. Забыл какой-то момент в работе - полез посмотреть и что видишь ? Комментов нет, куча ифов, флаги какие-то. Иногда переписываешь, ибо забыл, что ты городил когда-то. Да что говорить, если, например, в том же рантайме с++ мелкомягких стоят коменты практически ко всему. Вплоть до каждой строчки. Хотя код такого уровня меняется довольно редко. Плохая практика это, если короче.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 4.4.2018, 1:42
Сообщение #12


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Разница в 844.6 раза)

При вызове функции разницы по сути нет.
тест
Код
--lua
local launch_time = os.clock() -- Эту строку в начало скрипта.

local function timer_f(ms_flag)
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    if h < 10 then h = "0" .. h end
    local m = math.floor(time_delta/60)%60
    if m < 10 then m = "0" .. m end
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end
    if  ms_flag then
        local ms = math.modf(time_delta%1*1000)
        if ms < 100 then
            if ms > 9 then
                ms = "0" .. ms
            else
                ms ="00" .. ms
            end
        end
        s = s .. "." .. ms
    end
    return h..":"..m..":"..s
end

local function timer_f2(ms_flag)
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    local m = string.format("%02d", math.floor(time_delta/60)%60)
    local s = string.format("%02d", math.floor(time_delta)%60)
    if  ms_flag then
        s = s .. "." .. string.format("%03d", math.modf(time_delta%1*1000))
    end
    return h..":"..m..":"..s
end

time = os.clock()
for i=1, 1000000 do  -- вызываем timer_f()
    timer_f()
end
log (os.clock()-time)

time = os.clock()
for i=1, 1000000 do -- вызываем timer_f2()
    timer_f2()
end
log (os.clock()-time)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.4.2018, 11:05
Сообщение #13


***********

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



Забавно. Показалось очень странным, что вызов виде функции так сильно садит производительность. Оказалось, что не именн вызов садит, а что-то еще. Тем не менее некторая разница осталась:
2,09899999999999 - короткий вариант
1,096 - мой вариант в функции
1,25900000000001 - мой вариант вызванный не из функции
Что так вниз то тянет? о.О
Код
--lua
local launch_time = 135.12353 --os.clock() -- Эту строку в начало скрипта.

local function timer_f(ms_flag)
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    if h < 10 then h = "0" .. h end
    local m = math.floor(time_delta/60)%60
    if m < 10 then m = "0" .. m end
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end
    if  ms_flag then
        local ms = math.modf(time_delta%1*1000)
        if ms < 100 then
            if ms > 9 then
                ms = "0" .. ms
            else
                ms ="00" .. ms
            end
        end
        s = s .. "." .. ms
    end
    return h..":"..m..":"..s
end

local function timer_f2(ms_flag)
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    local m = string.format("%02d", math.floor(time_delta/60)%60)
    local s = string.format("%02d", math.floor(time_delta)%60)
    if  ms_flag then
        s = s .. "." .. string.format("%03d", math.modf(time_delta%1*1000))
    end
    return h..":"..m..":"..s
end

time = os.clock()
for i=1, 1000000 do  -- вызываем timer_f()
    timer_f()
end
log (os.clock()-time)

time = os.clock()
for i=1, 1000000 do -- вызываем timer_f2()
    timer_f2()
end
log (os.clock()-time)

time = os.clock()
for i=1, 1000000 do -- вызываем timer_f2()
    local time_delta = os.clock() - launch_time
    local h = math.floor(time_delta/3600)
    if h < 10 then h = "0" .. h end
    local m = math.floor(time_delta/60)%60
    if m < 10 then m = "0" .. m end
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end
    if  nil then
        local ms = math.modf(time_delta%1*1000)
        if ms < 100 then
            if ms > 9 then
                ms = "0" .. ms
            else
                ms ="00" .. ms
            end
        end
        s = s .. "." .. ms
    end
end
log (os.clock()-time)


Сообщение отредактировал DarkMaster - 4.4.2018, 11:07


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


***********

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



Код
--lua
local time = os.clock()
local time_delta = 135.12353
for i = 1, 100000000 do
    local time_delta = os.clock()
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end
end
log(os.clock() - time)

время выполненеия: 8,75599999999997
при этом вызывает интерес то, что если мы изменим тело цикла на:
Код
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end

то время выполенения займет:
0,0310000000001764
в то же время, если мы вполним только удаленную часть:
Код
local time_delta = os.clock()

то время выполенения составит 4,471.

Как не турдно догадаться 4.471 + 0.031 != 8,75 даже близко.
Дабы исключить непосредственное влияение и возможные оптимизации изменим:
Код
    local time_delta = os.clock()
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end

на
Код
    local _ = os.clock()
    local s = math.floor(time_delta)%60
    if s < 10 then s = "0" .. tostring(s) end

однако это результата не принесло.
Время выполнения все так же 8.75.


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Как не турдно догадаться 4.471 + 0.031 != 8,75 даже близко.

Добавь в цикл:
Код
local result = h..":"..m..":"..s

Результат, который возвращает функция. И получится тоже самое время.
Конкатенация жрёт кучу времени.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.4.2018, 13:22
Сообщение #16


***********

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



Цитата
Добавь в цикл:

Дык другие тесты тоже без него. Тест последний был вот этого маленького кусочка. Речь о том что:
local _ = os.clock()
4
local s = math.floor(time_delta)%60
if s < 10 then s = "0" .. tostring(s) end
0.03
а вместе 8.7
как? о.О


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


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Да, фигня какая-то. Причём чем больше переменных, тем больше жрёт os.clock.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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