Привествую всех.
Есть несколько макросов. Необходимо объеденить их в 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
Макросы лучше не редактировать, тем более не добавлять в них другие команды.
Пишите скрипт. http://uopilot.tati.pro/index.php?title=Список_функций
Посмотрите примеры, сложного ничего нет.
Можно ли как-то корректировать параметры таймер? Конкретнее хочу что бы пилот выводил секундомер в лог, в более понятном и читабельном формате hh:mm:ss. А то обычный timer выводит все миллисекундах, мне такая точность не к чему а постоянно конвертировать время что бы узнать за сколько скрипт отработал не то) Понятно что она создавалась для других целей но все же можно ли что то сделать. Или как-то преобразовать вывод времени Hour : Min : Sec под секундомер.
set timer
//действие
log timer
end_script
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
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
Вариант для луа с дописыванием нулей и опциональным отображением миллисекунд:
--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))
Чуть проще:
--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
Не критично же, а читать немного проще.
Все что пишется должно быть читабельно и закомментировано. Вопрос тут не в том, что ее можно написать и забыть, а в том, что вот таких функций порой - море. Забыл какой-то момент в работе - полез посмотреть и что видишь ? Комментов нет, куча ифов, флаги какие-то. Иногда переписываешь, ибо забыл, что ты городил когда-то. Да что говорить, если, например, в том же рантайме с++ мелкомягких стоят коменты практически ко всему. Вплоть до каждой строчки. Хотя код такого уровня меняется довольно редко. Плохая практика это, если короче.
--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)
Забавно. Показалось очень странным, что вызов виде функции так сильно садит производительность. Оказалось, что не именн вызов садит, а что-то еще. Тем не менее некторая разница осталась:
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)
--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)
local s = math.floor(time_delta)%60
if s < 10 then s = "0" .. tostring(s) end
local time_delta = os.clock()
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
local result = h..":"..m..":"..s
Да, фигня какая-то. Причём чем больше переменных, тем больше жрёт os.clock.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)