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

4 страниц V < 1 2 3 4 >  
Ответить в эту темуОткрыть новую тему
> Поиск картинки в игре на MEmu
cirus
сообщение 4.11.2020, 20:55
Сообщение #41


**********

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



Цитата
Например, иногда, у умения есть необходимость после нажатия на умение (№1) указать область воздействия (№2). И пока (№2) не будет "кликнут" (№1) не исчезнет, т.е. будет доступен.

А что мешает проверить изменения в области №2?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 4.11.2020, 21:32
Сообщение #42


***********

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



Цитата
А что мешает проверить изменения в области №2?

Необходимость произвести 2 клика прежде чем будет подтверждение успешности первого клика(если мы говорим в рамках моей функции). Тем не менее я очень сильно сомневаюсь, что нет абсолютно никаких визуальных признаков успешности первого клика. Как человек то понимает был вообще клик или нет? В любом случае что-то должно произойти на экране, а следовательно это можно и отловить.


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


**

Neophyte
Сообщений: 47
Регистрация: 19.10.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.780
Возраст: 40



Цитата
А что мешает проверить изменения в области №2?

Действительно, есть)

Если отойти от вашего комбайна, то в логическом смысле, эта проверка будет типа?

Repeat
--код
Until пока цвет не будет необходимый.

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


***********

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



что-то вроде этого. внутри тела цикла клики соответственно.


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


**

Neophyte
Сообщений: 47
Регистрация: 19.10.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.780
Возраст: 40



Цитата
DarkMaster

Пытаюсь понять всё описанное в Вашем комбайне.

Всё, вроде бы понятно, пока не дохожу до successes.
Для начала, что означает "функция заглушка" - это функция, которая вернет удачный или нет клик?
Но вот дальше не понимаю как в Вашем комбайне это работает. Что конкретно происходит.

По логике вещей, должна быть проверка, например, области на цвет или еще что-то, что позволит нам сделать заключение об успешности клика.

Но где это у Вас описано я так и не понял (

local true_func = function()
return true
end

т.е. мне надо function(ВОТ ТУТ описать как и что надо проверить) верно?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.11.2020, 20:02
Сообщение #46


***********

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



Цитата
Для начала, что означает "функция заглушка" - это функция, которая вернет удачный или нет клик?

В нормальном виде это каждый раз новая функция под каждый конкретный случай. Как правило это просто еще один поиск, еще одна функция в массиве fi. Конкретно в данном случае написана заглушка, т.к. у меня просто нет данных, как можно проверить успешность. Эта функция просто вернет true вне зависимости от внешних факторов.
Цитата
По логике вещей, должна быть проверка, например, области на цвет или еще что-то, что позволит нам сделать заключение об успешности клика.

Но где это у Вас описано я так и не понял (

Не описано. Потому, что я не знаю как в вашем приложении это провреить. Цвета/координаты, еще какие-то особенности. И это нужно описать. В стандартном виде это просто еще один элемент массива fi. Такая же проверка цвета.
Цитата
т.е. мне надо function(ВОТ ТУТ описать как и что надо проверить) верно?

в fi вам нужно писать. Ну формально это может быть и не в fi и вообще где угодно и как угодно - лишь бы true вернуло при успехе, но идейно все это должно находиться в fi ну и соответственно образец в начале скрипта.


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


**

Neophyte
Сообщений: 47
Регистрация: 19.10.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.780
Возраст: 40



Ни где не смог найти информацию, казалось бы, которая так проста.
local fi = {}
Вы ввели локальную переменную, назвали её fi - это вроде понятно, а что означают фигурные скобки после знака "="?
Погуглил и не знаю на сколько правильно я понял, но кажется что фигурные скобки, в данном случае, это своего рода обозначение того, что fi может иметь вариацию имен в своем продолжении. Т.е. fi.win или fi.do и т.д.

Но опять же, ни в wiki ни в ведении синтаксис нет такой информации или я плохо ищу (
Как нет и пояснений по поводу такого знака как точка "." или того что такое funcrion или local.
Есть ли ресурс где более широко раскрывается вопрос синтаксиса?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 9.11.2020, 16:45
Сообщение #48


*****

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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PostByMik
сообщение 9.11.2020, 17:07
Сообщение #49


**

Neophyte
Сообщений: 47
Регистрация: 19.10.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.780
Возраст: 40



Ох! Спасибо Огромное!
Теперь стало понятно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PostByMik
сообщение 9.11.2020, 18:27
Сообщение #50


**

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 времени останавливаться. Что-то я не то делаю, но что не понимаю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.11.2020, 20:19
Сообщение #51


***********

Модератор 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____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.11.2020, 20:35
Сообщение #52


***********

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



Цитата

moloko = {} - Это инициализация таблицы "ключ - значение"

Да простят меня за дотошность, но в рамках луа это просто инициализация таблицы, без "ключ - значение".
Дело в том, что в луа "ключем" может быть, как ключ(строка), так и индекс. Поведение некоторых операторов работы с массивами и таблицами различаются, а таблица может содержать в себе одновременно, как массив(индексы), так и список(ключ = строка) и работать с разными частями таблицы нужно будет по-разному. Называть индекс ключем не есть верно. Ключи храняться в памяти и для доступа по ключу перебирается таблица в попытках найти идентичное имя ключа, индексы же по сути являются оффсетом(смещением) и по большому счету не существуют, как самостоятельная информация. В частности это сказывается на времени доступа к информации. Доступ к элементу осуществляется по индексу за O(1) - мы обращаемся непосредственно к нужному участку памяти. Доступ к элементу в связном списке в среднем занимает O(N) путем перебора элементов в поисках нужного. При этом нужно понимать, что помимо времени работы алгоритма поиска по ключам, сама операция сравнения ключей тоже занимает время и если у нас длинные, схожие по начальным символам ключи, то это может очень негативно сказаться на производительности.


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


********

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



Цитата(DarkMaster @ 9.11.2020, 20:35) *

Доступ к элементу в связном списке в среднем занимает O(N) путем перебора элементов в поисках нужного.



На сколько помню там деревья используются. Это O(log N). Что крайне быстро.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PostByMik
сообщение 9.11.2020, 22:20
Сообщение #54


**

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 сек.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PostByMik
сообщение 9.11.2020, 22:31
Сообщение #55


**

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, скажем так, завернуть в "выполнять только с вечера пятницы до утра воскресенья"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.11.2020, 22:48
Сообщение #56


***********

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



Цитата
На сколько помню там деревья используются. Это O(log N). Что крайне быстро.

Тыщ на 100 элементов создай список и сравни с массивом =) Еще ключи символов по 50 и хвостиком разным. Да зачастую, не критично, но понятия разные и нужно отдавать отчет себе в том, что ты делаешь.
И даже в идеальных условиях O(1) все равно шустрее. И не нужно забывать о времени выполнения непосредственно каждого сравнения, а не только оценивая алгоритм в целом.
Цитата
"выполнять только с вечера пятницы до утра воскресенья"

Придеться дергать день недели и время. Таймштамп тут не очень подойдет. Общий смысл не меняется, мой пример с ифом рабочий.

Сообщение отредактировал DarkMaster - 9.11.2020, 23:42


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


********

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



Цитата(DarkMaster @ 9.11.2020, 22:48) *

Тыщ на 100 элементов создай список и сравни с массивом =) Еще ключи символов по 50 и хвостиком разным. Да зачастую, не критично, но понятия разные и нужно отдавать отчет себе в том, что ты делаешь.
И даже в идеальных условиях O(N) все равно шустрее. И не нужно забывать о времени выполнения непосредственно каждого сравнения, а не только оценивая алгоритм в целом.



log2(100000) = 16. 16 сравнений в худшем случае. Это мгновенный поиск.


O(N) на одинаковом типе данных никогда не будет быстрее O(log N). Пример тому бинарный и линейный поиск.

Да и вообще, оценка стоимости операций сравнения - корень всех бед. Можно неплохо испортить код, если начать считать тики инструкций машины. Компилятор сделает как надо, главное не мешать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.11.2020, 23:42
Сообщение #58


***********

Модератор 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____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PostByMik
сообщение 10.11.2020, 13:13
Сообщение #59


**

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


Вы подсказали мне как проще сделать)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PostByMik
сообщение 10.11.2020, 14:16
Сообщение #60


**

Neophyte
Сообщений: 47
Регистрация: 19.10.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.780
Возраст: 40



Цитата
Придеться дергать день недели и время.

Или раз в неделю ручками менять данные. Но хотелось бы конечно по красоте)

Кстати, в очередной раз, спасибо за советы и примеры!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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