|
|
|
Последовательное выполнение скриптов |
|
|
DarkMaster |
12.9.2021, 6:56
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Вобщем не поленился я... Потестил нормальное распределение. Разница существенная, при статичном свапе от 1 до #arr отклонения от ожидаемого до 20%. math.random(i, #arr) однозначно лучше - отклонения в пределах статистической погрешности. код для теста
Код -- 1 - обмен позиций 1-10 -- 2 - обмен позиций i-10 local method = 2
math.randomseed(os.clock())
local n = 1000000
-- инициализируем счетчик local counter = {} for i = 1, 10 do counter[i] = {} for j = 1, 10 do counter[i][j] = 0 end end
for z = 1, n do local a = {1,2,3,4,5,6,7,8,9,10} for i = 1, #a do local tmp = a[i] local r if method == 1 then r = math.random(1,10) else r = math.random(i,10) end a[i] = a[r] a[r] = tmp end for i = 1, #a do counter[a[i]][i] = counter[a[i]][i] + 1 end end
local p = {} for i = 1, 10 do p[i] = {} for j = 1, 10 do p[i][j] = math.abs(10 - counter[i][j] / (n / 100)) * 10 end end
for i = 1, 10 do log("% отклонения перемещения "..i.." от ожидаемого в позицию:") for j = 1, 10 do local s = string.format("%f",p[i][j]) if p[i][j] < 10 then s = "0"..s end if j < 10 then log(" "..j..": "..s) else log(j..": "..s) end end end
lua перемешать массив. готовая функция
Код local shuffle = function(a) math.randomseed(os.clock()) for i = 1, #a do local tmp = a[i] local r = math.random(i, #a) a[i] = a[r] a[r] = tmp end return a end Сообщение отредактировал DarkMaster - 12.9.2021, 14:18
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
BlackBot |
12.9.2021, 7:04
|
Neophyte
Сообщений: 33
Регистрация: 17.8.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.047
|
Цитата(DarkMaster @ 12.9.2021, 6:56) Вобщем не поленился я... Потестил нормальное распределение. Разница существенная, отклонения от жидаемого до 20%. math.random(i, #arr) однозначно лучше.
Это конечно хорошо - вещь иногда полезная весьма. Но тогда весь код надо на ЛУА переносить) А с ориентацией в 3d играх, беда ( Затратный код получается - игру переписать можно) Слишком много входных данных для анализа нужно - цвет не вариант, изображения меняются взависимости от углаобзора, анализ растояния до припятствия невыполним, или слишком затратен. Пока остается только - тригер -> время бега-> поиск очередного тригера -> опять бег
|
|
|
|
BlackBot |
12.9.2021, 16:38
|
Neophyte
Сообщений: 33
Регистрация: 17.8.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.047
|
затык очередной - почему скрипт так себя ведет? kod+log
Код set $X findimage (20 70 300 200 (Scripts\Blade\img\arena_box.bmp) %arrt 2) // ищем панель управления аренами if $X >0 // log найдена панель управления аренами set #X1 %arrt[#1 1] set #Y1 %arrt[#1 2] kleft #X1,#Y1 // log тут #X1,#Y1 wait 2000
в логе получаем 21:34:22 2 (test.txt, 21): Открывваем управление аренами 21:34:25 2 (test.txt, 28): найдена панель управления аренами 21:34:26 2 (test.txt, 32): тут 0,0
область указывваю одну - получаю координаты левые ) Причем если картинка действительно на экране - все работает корректно Вот где тут косяк? Час потратил отлавливая этот баг (IMG: style_emoticons/default/smile.gif) code
Код set $X findimage (10 70 300 1400 (Scripts\Blade\img\arena_box1.bmp) %arr 2) // Так все работает норм if $X > 0 log lose set $T FindImage (20 70 300 200 (Scripts\Blade\img\arena_box1.bmp) %ar 2) // так находит картинку даже если ее на экране нет if $T >0 // log найдена панель управления аренами вне цикла set #X1 %ar[#1 1] set #Y1 %ar[#1 2] kleft #X1,#Y1 // log тут #X1,#Y1 ar else log вне цикла нет панели арен end_if end_if
Вопросик такой - находясь в процедуре можно вызывать другую процедуру? Ответ - можно
|
|
|
|
BlackBot |
17.9.2021, 15:18
|
Neophyte
Сообщений: 33
Регистрация: 17.8.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.047
|
Цитата(DarkMaster @ 12.9.2021, 6:56) Вобщем не поленился я... Потестил нормальное распределение. Разница существенная, при статичном свапе от 1 до #arr отклонения от ожидаемого до 20%. math.random(i, #arr) однозначно лучше - отклонения в пределах статистической погрешности.
С многомерными массивами версия для пилота - не фурыкает. Склеивает значения в одномерный массив. Это так для справки - если кто будет мучаться )
|
|
|
|
cirus |
18.9.2021, 18:51
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26540
Пользователь №: 16.971
Возраст: 29
|
Неверно заданы значения констант WM_LBUTTONDOWN и WM_LBUTTONUP. Через пилот так: Код --lua local ffi = require("ffi") local WM_LBUTTONDOWN = 0x0201 local WM_LBUTTONUP = 0x0202 ffi.cdef[[ int SendMessageA(int hWnd, int Msg, int wParam, int lParam); int PostMessageA(int hWnd, int Msg, int wParam, int lParam); ]]
local wndHandle = workwindow() -- привязаться к окну Ctrl+A local x = 200 local y = 100
ffi.C.SendMessageA(wndHandle, WM_LBUTTONDOWN, 0, y * 65536 + x) wait (100) ffi.C.SendMessageA(wndHandle, WM_LBUTTONUP, 0, y * 65536 + x) Если не работает SendMessage, то можно попробовать PostMessage.
|
|
|
|
Sergei1234 |
18.9.2021, 19:07
|
Registred
Сообщений: 8
Регистрация: 18.9.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.083
|
Цитата(cirus @ 18.9.2021, 18:51) Неверно заданы значения констант WM_LBUTTONDOWN и WM_LBUTTONUP. Через пилот так: Код --lua local ffi = require("ffi") local WM_LBUTTONDOWN = 0x0201 local WM_LBUTTONUP = 0x0202 ffi.cdef[[ int SendMessageA(int hWnd, int Msg, int wParam, int lParam); int PostMessageA(int hWnd, int Msg, int wParam, int lParam); ]]
local wndHandle = workwindow() -- привязаться к окну Ctrl+A local x = 200 local y = 100
ffi.C.SendMessageA(wndHandle, WM_LBUTTONDOWN, 0, y * 65536 + x) wait (100) ffi.C.SendMessageA(wndHandle, WM_LBUTTONUP, 0, y * 65536 + x) Если не работает SendMessage, то можно попробовать PostMessage. спасибо проблема решена я лохопед неверный код WM_LBUTTONDOWN сделал
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|