|
|
|
Поиск картинки в игре на MEmu |
|
|
PostByMik |
5.11.2020, 11:21
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Цитата А что мешает проверить изменения в области №2? Действительно, есть) Если отойти от вашего комбайна, то в логическом смысле, эта проверка будет типа? Repeat --код Until пока цвет не будет необходимый.
|
|
|
|
PostByMik |
8.11.2020, 15:45
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Цитата DarkMaster Пытаюсь понять всё описанное в Вашем комбайне. Всё, вроде бы понятно, пока не дохожу до successes. Для начала, что означает "функция заглушка" - это функция, которая вернет удачный или нет клик? Но вот дальше не понимаю как в Вашем комбайне это работает. Что конкретно происходит. По логике вещей, должна быть проверка, например, области на цвет или еще что-то, что позволит нам сделать заключение об успешности клика. Но где это у Вас описано я так и не понял ( local true_func = function() return true end т.е. мне надо function(ВОТ ТУТ описать как и что надо проверить) верно?
|
|
|
|
DarkMaster |
8.11.2020, 20:02
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27680
Пользователь №: 11.279
|
Цитата Для начала, что означает "функция заглушка" - это функция, которая вернет удачный или нет клик? В нормальном виде это каждый раз новая функция под каждый конкретный случай. Как правило это просто еще один поиск, еще одна функция в массиве fi. Конкретно в данном случае написана заглушка, т.к. у меня просто нет данных, как можно проверить успешность. Эта функция просто вернет true вне зависимости от внешних факторов. Цитата По логике вещей, должна быть проверка, например, области на цвет или еще что-то, что позволит нам сделать заключение об успешности клика.
Но где это у Вас описано я так и не понял ( Не описано. Потому, что я не знаю как в вашем приложении это провреить. Цвета/координаты, еще какие-то особенности. И это нужно описать. В стандартном виде это просто еще один элемент массива fi. Такая же проверка цвета. Цитата т.е. мне надо function(ВОТ ТУТ описать как и что надо проверить) верно? в fi вам нужно писать. Ну формально это может быть и не в fi и вообще где угодно и как угодно - лишь бы true вернуло при успехе, но идейно все это должно находиться в fi ну и соответственно образец в начале скрипта.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
PostByMik |
9.11.2020, 15:38
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Ни где не смог найти информацию, казалось бы, которая так проста. local fi = {} Вы ввели локальную переменную, назвали её fi - это вроде понятно, а что означают фигурные скобки после знака "="? Погуглил и не знаю на сколько правильно я понял, но кажется что фигурные скобки, в данном случае, это своего рода обозначение того, что fi может иметь вариацию имен в своем продолжении. Т.е. fi.win или fi.do и т.д.
Но опять же, ни в wiki ни в ведении синтаксис нет такой информации или я плохо ищу ( Как нет и пояснений по поводу такого знака как точка "." или того что такое funcrion или local. Есть ли ресурс где более широко раскрывается вопрос синтаксиса?
|
|
|
|
Fors1k |
9.11.2020, 16:45
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2398
Пользователь №: 18.746
|
Цитата(PostByMik @ 9.11.2020, 15:38) что означают фигурные скобки после знака "="?
Код --lua log"clear";log"mode compact" moloko = {} moloko['цена'] = 65 moloko['объем'] = 1 moloko['свежесть'] = "сегодняшнее"
log(moloko.цена.."р") log(moloko.объем.."л") log(moloko.свежесть) moloko = {} - Это инициализация таблицы "ключ - значение". moloko.цена - Это запрос значения из таблицы moloko по ключу цена
Цитата(PostByMik @ 9.11.2020, 15:38) что такое funcrion или local.
Функция - это набор команд, которые можно вызывать с разными параметрами (или без). Local - это модификатор области видимости. Используется для изоляции переменных.
Код --lua log"clear";log"mode compact" a = 5
function foo() local b = 700 c = 900 + a end
foo()
log(a, b, c) Переменная a существует в общей области видимости, и внутри foo. Переменная b - local. Местная относительно внешней области. За пределами функции она не существует. Переменная c существует в общей области видимости, и внутри foo. Объявили ее внутри функции, но не сказали ей "будь только местной".
Результат:Цитата 5 nil 905 Цитата(PostByMik @ 9.11.2020, 15:38) Как нет и пояснений по поводу такого знака как точка "."
Через точку идет обращение к значениям таблицы через ключ. Еще через точку выполняется вызов статических методов. Сообщение отредактировал Fors1k - 9.11.2020, 16:58
--------------------
Для связи
|
|
|
|
PostByMik |
9.11.2020, 18:27
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Всё в туже тему, про работу по таймеру. Написал код, который должен после наступления указанного времени "включаться" и "выключаться" тоже по указанному времени, но моих знаний, что не удивительно, оказалось мало. скрипт
Код --lua log"clear";log"mode compact" local t1 = os.clock() estart = {year = 2020, month = 11, day = 09, hour = 18, min = 19, sec = 1} estop = {year = 2020, month = 11, day = 09, hour = 18, min = 20, sec = 1} --log(os.time(estart)) --log(os.time(estop))
while 1 do if os.time(estart) == os.time() then if t1 <= os.clock() then t1 = os.clock() + 10 repeat log("Привет!") until os.time(estop) <= os.time() end end end
Идейно, он должен был при наступлени указанного в estart времени начинаться, писать в лог каждые 10 секунд Привет! и по наступлении указанного в estop времени останавливаться. Что-то я не то делаю, но что не понимаю.
|
|
|
|
DarkMaster |
9.11.2020, 20:19
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27680
Пользователь №: 11.279
|
Цитата os.time(estart) == os.time() Так делать не стоит - малейший лаг и проскочит. Я бы сделал примерно так: Код --lua log"clear";log"mode compact" local estart = {year = 2020, month = 11, day = 09, hour = 18, min = 19, sec = 1} local estop = {year = 2020, month = 11, day = 09, hour = 18, min = 20, sec = 1}
local schedule_event = function() repeat log("Привет") until os.time(estop) < os.time() end
-- Вариант с простым ожиданием нужного времни while os.time(estart) < os.time() do wait(50) end schedule_event()
-- Вариант с асинхроном. -- Можно стартануть из любого места, -- без опасений заблочить на ожидание.
if os.time(estart ) > os.time()and os.time() < os.time(estop) then schedule_event() end
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
9.11.2020, 20:35
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27680
Пользователь №: 11.279
|
Цитата moloko = {} - Это инициализация таблицы "ключ - значение"
Да простят меня за дотошность, но в рамках луа это просто инициализация таблицы, без "ключ - значение". Дело в том, что в луа "ключем" может быть, как ключ(строка), так и индекс. Поведение некоторых операторов работы с массивами и таблицами различаются, а таблица может содержать в себе одновременно, как массив(индексы), так и список(ключ = строка) и работать с разными частями таблицы нужно будет по-разному. Называть индекс ключем не есть верно. Ключи храняться в памяти и для доступа по ключу перебирается таблица в попытках найти идентичное имя ключа, индексы же по сути являются оффсетом(смещением) и по большому счету не существуют, как самостоятельная информация. В частности это сказывается на времени доступа к информации. Доступ к элементу осуществляется по индексу за O(1) - мы обращаемся непосредственно к нужному участку памяти. Доступ к элементу в связном списке в среднем занимает O(N) путем перебора элементов в поисках нужного. При этом нужно понимать, что помимо времени работы алгоритма поиска по ключам, сама операция сравнения ключей тоже занимает время и если у нас длинные, схожие по начальным символам ключи, то это может очень негативно сказаться на производительности.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
PostByMik |
9.11.2020, 22:20
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
А если у меня вместо Цитата log("Привет") портянка на 100+ строк, то можно просто так? скрипт
Код --lua log"clear";log"mode compact" local t1 = os.clock() estart = {year = 2020, month = 11, day = 09, hour = 22, min = 12, sec = 1} estop = {year = 2020, month = 11, day = 09, hour = 22, min = 12, sec = 30} --log(os.time(estart)) --log(os.time(estop))
if os.time(estart ) > os.time()and os.time() < os.time(estop) then if t1 <= os.clock() then t1 = os.clock() + 10 repeat log("Привет") until os.time(estop) < os.time() end end
Но тут не работает второе условие, не чаще чем (раз в 10 секунд), он начинает выполнять без пауз в 10 сек.
|
|
|
|
PostByMik |
9.11.2020, 22:31
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Суть в в следующем. У меня есть (назовем их частями), несколько частей каждая из них выполняется с определенным перерывом, т.е. (Х) раз в в час или каждые 30 минут и т.д скрипт
Код --lua local t1 = os.clock() local t2 = os.clock() local t3 = os.clock() local t4 = os.clock() local t5 = os.clock() local t6 = os.clock()
while 1 do if t1 <= os.clock() then --ДЛЯ ЦЕНТРА КАРТЫ t1 = os.clock() + 65 if ...и тд end
if t2 <= os.clock() then --ДЛЯ ВЕРХНЕЙ ЧАСТИ КАРТЫ t2 = os.clock() + 60*11 move_smooth (560, 180, 5, 5, 5, 5) --МЫ НА КАРТЕ! Перемещаем курсор в координаты ...и тд. end
if t3 <= os.clock() then --ДЛЯ НИЖНЕЙ ЧАСТИ КАРТЫ t3 = os.clock() + 60*16 kleft (173, 466, 5, 5, 5, 5) --Заходим на карту с основного меню ...и тд. end
if t4 <= os.clock() then --ДЛЯ PVP t4 = os.clock() + 60*32 kleft (57, 50, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ! ...и тд. end
if t5 <= os.clock() then --ДЛЯ МАЛОГО ИВЕНТА t5 = os.clock() + 60*62 kleft (47, 46, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ! ...и тд. end
if t6 <= os.clock() then --ДЛЯ БОЛЬШОГО ИВЕНТА t6 = os.clock() + 60*92 kleft (45, 49, 5, 5, 5, 5) --ВЫХОДИМ С КАРТЫ В ОСНОВНОЕ МЕНЮ! ...и тд. end
Так вот, я пытаюсь t5 и t6, скажем так, завернуть в "выполнять только с вечера пятницы до утра воскресенья"
|
|
|
|
DarkMaster |
9.11.2020, 23:42
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27680
Пользователь №: 11.279
|
Цитата O(N) на одинаковом типе данных никогда не будет быстрее O(log N). Пример тому бинарный и линейный поиск. Опечатался. O(1) конечно же, а не O(N). Цитата Да и вообще, оценка стоимости операций сравнения - корень всех бед. Можно неплохо испортить код, если начать считать тики инструкций машины. Имхо это больше применимо к более серьзным компиляторам, чем луашный. Я так же отчасти согласен, что не стоит убиваться по тактам. У нас не асм и не мертвые АТшки. Но и делать откровенные глупости, тоже не надо. Использовать списки под хранение больших массивов данных должно быть чем-то оправдано, а оправдать это бывает очень сложно. Так же есть прямая рекомендация разрабов не использовать списки там, где это не нужно. Понятие "нужно", естественно, определяет каждый сам. Цитата Это мгновенный поиск. Смотря, что делать. Может стать и существенным накладным расходом. В частности на этапе вкручивания луа я пытался понять производительность некоторых операций по работе со строками(а там есть проблемки) и получал очень странные результаты. Точнее их было по сути дела два. Один раз запускаешь и отрабатывает за время t1, а второй раз запускаешь и получается время t2. Причем оба значения в рамках теста существенно отличались друг от друга, но погрешность t1 и t2 была минимальна. Для понимания: 2.4, 3.7, 2.42, 3.69, 3.72, 2.41 и т.д. Т.е. было 2 группы чисел. Сначала все было списано на тонкости работы jit, ибо jit действительно иногда дает подобный эффект и предсказать его не очень реально. Много позже я снова тыкал этот тест из любопытства и понял, что время выполнения зависит от порядка элементов в списке (он не регламентирован и может плавать). Да это была синтетика, но эффект по сути убил тест и самое печальное, что на тот момент отсутствовало понимание происходящего. Сообщение отредактировал DarkMaster - 9.11.2020, 23:44
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
PostByMik |
10.11.2020, 13:13
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Цитата Общий смысл не меняется, мой пример с ифом рабочий. Если не учитывать, что я написал, что нужно после старта код запускать не чаще чем "Х" раз в период, то да) У меня получилось вот так мой вариант
Код --lua
log"clear";log"mode compact" local t1 = os.clock() local t2 = os.clock() estart = {year = 2020, month = 11, day = 10, hour = 13, min = 08, sec = 1} estop = {year = 2020, month = 11, day = 10, hour = 13, min = 10, sec = 1} --log(os.time(estart)) --log(os.time(estop))
while 1 do if os.time(estart) < os.time() and os.time() < os.time(estop) then if t1 <= os.clock() then t1 = os.clock() + 60 log("Привет") end end
if t2 <= os.clock() then t2 = os.clock() + 60 log("Хай!") end end
Вы подсказали мне как проще сделать)
|
|
|
|
PostByMik |
10.11.2020, 14:16
|
Neophyte
Сообщений: 47
Регистрация: 19.10.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.780
Возраст: 40
|
Цитата Придеться дергать день недели и время. Или раз в неделю ручками менять данные. Но хотелось бы конечно по красоте) Кстати, в очередной раз, спасибо за советы и примеры!
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|