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

35 страниц V « < 26 27 28 29 30 > »   
Ответить в эту темуОткрыть новую тему
> Помогите освоить LUA
sutra
сообщение 11.2.2019, 14:48
Сообщение #541


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Переделал код, убрал вызов функции внутри цикла, и теперь НУЛЬ перестал так действовать на FOR. В общем коллеги, этот FOR ещё ТА ШТУЧКА. Просто ЗАГАДКА. Но решение принято, буду переводить на вайлы.

Ну прямо камень с души ... Делал, делал. Проверял аж на 25 миллионах итераций и поиск давал приемлемую скорость, а тут на одном ляме такие тормоза схлопотал - 0,4 сек. - это ни в какие ворота не лезет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 11.2.2019, 14:58
Сообщение #542


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Переделаю, погоняю на разных режимах, во избежание ляпов и ошибок и выложу код. Может умные люди сделают как надо, а то у меня громоздкий код получается, правда и использую до 3-х параметров: similarity - схожесть; accuracy - точность; deviation - отклонение.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.2.2019, 17:36
Сообщение #543


***********

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



Цитата
Не любит FOR цифру НУЛЬ. for i=0, .... - вот для него камень преткновения. Почему - не знаю.

Возможно это как-то связано с хранением целых чисел в типе double.


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


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Возможно это как-то связано с хранением целых чисел в типе double.

Да не обращай внимания, может я сам виноват. Я тут доигрался ... только перезагруз компьютера помог. И то не сразу въехал что к чему. Ошибок НЕТ, но что-то всё перестало работать как надо. Образование - нулевое, вот и пожинаю плоды!!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 12.2.2019, 0:57
Сообщение #545


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Вот ведь какая метаморфоза. Ещё 2 месяца назад, я как слепой котёнок пробовал что-то делать на lua и просил помощи. А сейчас всё ровно наоборот, я начисто забыл пилотовский язык. Ребята спрашивают чего-нибудь, алгоритм в голове рождается мгновенно, а нарисовать реальный код без ошибок уже не получается. Раньше всё запоминал "намертво", а теперь ... старость не радость.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 13.2.2019, 4:30
Сообщение #546


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Переделал на вайлы всё, стало стабильнее, но медленнее. Короче однозначно надо делать dll-ку, будет намного быстрее. А так у меня получается время поиска около 1 секунды. Правда это в самом тяжёлом случае. Для теста взял Дарк, твой скрин, где прицел ты давал. Прицел - фигня, ищу для теста мишени, там где их группа из 6 штук и они накладываются друг на друга, вот чтобы найти все, то есть прошерстить 1920х1080, у меня требуется почти секунда, а за секунду они запросто "смоются от возмездия". Но что радует ... ищется на УРА! Никаких проблем. Ещё погоняю - выложу код. Если поможете, то и dll-ку сделаю. Есть у меня там пара вопросов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.2.2019, 5:11
Сообщение #547


***********

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



Цитата
Если поможете, то и dll-ку сделаю.

Делать чистую си дллку, подключать через ffi.


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


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Делать чистую си дллку, подключать через ffi.
Э-э! Я совсем не знаю СИ, даже компилятора нет. Так что не знаю. Я на Делфи типа планировал, но тогда и подсказать будет некому. Так что я наверное код дам, а у тебя времечко может будет, набросаешь на СИ. Я вот просто уверен, будет раза в 2 минимум быстрее работать. Я тут поколдовал, уже менее секунды, 0,8 десятых если искать неограниченное количество картинок на 1920х1080.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 13.2.2019, 8:48
Сообщение #549


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Я думаю тебе, Дарк, несложно будет сделать. Алгоритм простецкий, всего 2 ветвления. У меня возня с параметрами. Как-то мне всё кажется криво, плюс я не знаю как быстрее. А на СИ будет по барабану, отработает мигом. Я сделал так сказать Лайт версию, не стал "утяжелять" сверхуниверсальным алгоритмом, который ещё и разность каналов ловит. По большому счёту такой алгоритм нужен только если искать при совершенно разных условиях (типа день - ночь). Толком не на чем тестировать, а то что пробовал искать я, ничего, кроме тормозов не получилось. Ну даст бог сегодня допинаю, максимум завтра. Там посмотрите, покритикуете, будет видно что к чему. В любом случае, на текущий момент - это бомба, нынешним финдом в принципе нельзя найти то, что я запросто ищу.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 13.2.2019, 9:20
Сообщение #550


********

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



Цитата(DarkMaster @ 13.2.2019, 5:11) *

Делать чистую си дллку, подключать через ffi.



А как из ffi разобрать таблицу с аргументами ? Без извращений при передаче в модуль аля ffi.cast("unsigned long long**").

Я в упор не понимаю не желание использовать удобный апи(который как минимум совместим с jit). Передать в dll обычную строку параметров как в обычном скрипте(без декораций ffi). А в dll вызвать какие-нибудь gettable() + на выход таблицу можно постепенно увеличивать пушем в стек, а не резервировать заранее массив макс. размера. Там этого апи - минимум. А через ffi код превращается в лапшу. Так зачем ? Выигрыш 2мс ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 13.2.2019, 17:07
Сообщение #551


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



В общем, я вам код выложу, а там решайте сами что с ним делать. Меня собственно и lua устраивает, я в стрелялки не играю.

Цитата
а не резервировать заранее массив макс. размера

Вот с этим в lua , серьёзные проблемы. Сильно влияет на скорость. Никогда раньше не замечал в Делфи такого сильного влияния на скорость. Даже не тестировал это, сколько надо, столько и выделял.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.2.2019, 18:28
Сообщение #552


***********

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



Цитата

Я в упор не понимаю не желание использовать удобный апи(который как минимум совместим с jit).

Скорость вызова у них разная. Сильно. Это раз. Второе вопрос удобства лично для меня очень спорен. Мне, например, гораздо удобнее иметь нормальную дллку которая имеет стандартные интерфейсы, а не спец костыль только для луа.
Цитата
Передать в dll обычную строку параметров как в обычном скрипте(без декораций ffi).

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

А смысл есть? Сравни скорость работы vector и чистых сишных массивов. Получится та же самая просадка, что и при работе с lua.
Цитата
А через ffi код превращается в лапшу.

В чем лапша то? Если подключать длл, а не писать на ffi, то все, что там будет - это описание типов данных передаваемых в функции и возвращаемых типов. По стуи тоже самое, что объявление структуры в чистом си либо функции. Причем и синтаксис то сишный.

Цитата
Я думаю тебе, Дарк, несложно будет сделать. Алгоритм простецкий, всего 2 ветвления.

Накатаю. Я просто си не часто открываю - не очень я его люблю из-за необходимости писать костыли там, где их писать не должно быть нужно, и любви MS изобретать свой собственный суржик и сыпать левые варнинги которые не соответствуют "праведным" суржиковским идеологиям. Переопределение стандартных типов вообще отдельный разговор - хочется убивать. Перелазить на gcc и мучить себя msys2/mingw тоже занятие по мне не очень. Была бы реальная необходимось - уже перелез бы, но очень много телодвижений ради того чтобы 2-4 недели в год потыкать кнопки в сях.


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


********

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



Цитата(DarkMaster @ 13.2.2019, 18:28) *

Скорость вызова у них разная. Сильно. Это раз. Второе вопрос удобства лично для меня очень спорен. Мне, например, гораздо удобнее иметь нормальную дллку которая имеет стандартные интерфейсы, а не спец костыль только для луа.


Работа идет через луа ? Значит стандартный голый интерфейс не принципиален.

Цитата

Эти декорации будут исключительно в lua файле который описывает длл и подключется через require. Пользователь никогда этих декораций не увидит и не узнает. Луа апи - такие же декорации, только их не видно, невозможно быстро подшаманить без компилятора и приводят к несовместимости со всем кроме lua.


Пользователь слишком абстрактное понятие. А быстро и не надо шаманить. Это написано один раз и все. Дальше работают скрипты.

Цитата

А смысл есть? Сравни скорость работы vector и чистых сишных массивов. Получится та же самая просадка, что и при работе с lua.


Т.е. выделять память под 1000, когда найдется 3 куда лучше ?

Цитата

В чем лапша то? Если подключать длл, а не писать на ffi, то все, что там будет - это описание типов данных передаваемых в функции и возвращаемых типов. По стуи тоже самое, что объявление структуры в чистом си либо функции. Причем и синтаксис то сишный.


Странно, что ты не доволен :

Цитата
Переопределение стандартных типов вообще отдельный разговор - хочется убивать.


Но при этом делаешь тоже самое - пишешь метровые декорации для "стандартизации" интерфейса длл, которая будет выполнятся в луа среде, у которой есть свой интерфейс.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.2.2019, 19:57
Сообщение #554


***********

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



Цитата
А быстро и не надо шаманить. Это написано один раз и все. Дальше работают скрипты.

Тогда вообще какая разница?)
Цитата
Т.е. выделять память под 1000, когда найдется 3 куда лучше ?

У нас должны возвращаться:
точность 1-100
start_x 1-разрешение экрана
start_y 1-разрешение экрана
end_x 1-разрешение экрана
end_y 1-разрешение экрана
Ну пусть мы загрубим и точность у нас будет double. Для координат должно быть достаточно short, пусть мы сделаем с запасом, будет int.
8+4+4+4+4 = 24 байта на каждый элемент.
1000*24=24000/1024 =23,4375 КБайт.
Вот выделю 23,4375 КБайта и даже думать не буду. Давай прикиним сколько памяти зажет апи с пушами. Что-то думается мне не меньше. Да даже пусть и меньше, меньше, чем ffi. Это 23,4375 килобайта. Ну смешно же. Их проще освободить потом, чем думать про них. Зато просадить в 2 раза скорость работы с помощью вектора можно. А зачем? Есть случаи, когда действительно идет очень большая перетасовка таблицы и тогда решения с динамическим перестроением массивов скрытым от пользователя очень удобны. У нас же тупо вагон математики. Конкретно в данном случае я считаю, что по умолчанию возвращаться должно первое найденное изображение, т.е. значение по умолчанию "1", если пользователь хочет 1000, то пусть заплатит адскую цену в 23,4375 килобайта, ну там еще на заголовочки пару байт удет.
Цитата
Странно, что ты не доволен :

Цитата
Переопределение стандартных типов вообще отдельный разговор - хочется убивать.


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

На самом деле скорее наоборот (IMG:style_emoticons/default/smile.gif) В моем понимании lua api есть переопределения и костыль. Использование же стандартных для языка типов и структур имхо нативно. Есть длл, она написана на си с типами данных си, есть луа, он написан на си с типами данных си. Вполне логично им напрямую и работать друг с другом. Встречаются двое русских, а чтобы поговорить друг с другом приглашают переводчика(api).


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


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Я по сравнению с вами коллеги - дилетант. Но вердикт мой таков, для финда НОМЕР ОДИН - это скорость. Как уже говорил у меня поиск доходит до 0,8 сек. - это без снимка экрана, а снимок HD экрана тоже не быстр. А если будет UHD? Если ощутимого прироста скорости не будет (а он минимум в 2 раза должен быть), то и смысла заниматься этим нет. Конечно для каждого случая можно нарисовать СВОЮ функцию - оптимизированную по конкретные условия, но это не совсем правильно. Сегодня не получилось делом заняться, может завтра смогу. Дам код, с КОНКРЕТНЫМИ примерами поиска.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KaZaK
сообщение 14.2.2019, 22:27
Сообщение #556


**

Neophyte
Сообщений: 28
Регистрация: 10.2.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.228



Добрый день!

Есть такая задача:
Лог файл игры, добавляется на лету.
Вопрос - возможно ли с помощью скрипта Lua открыть этот файл и ловить эти изменения?

по ветке просмотрел, вроде нет такого вопроса..
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 15.2.2019, 1:02
Сообщение #557


***********

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



В ветке есть все, кроме смертных вопросов)
io.open (filename [, mode])

This function opens a file, in the mode specified in the string mode. It returns a new file handle, or, in case of errors, nil plus an error message.

The mode string can be any of the following:

"r": read mode (the default);
"w": write mode;
"a": append mode;
"r+": update mode, all previous data is preserved;
"w+": update mode, all previous data is erased;
"a+": append update mode, previous data is preserved, writing is only allowed at the end of file.

The mode string can also have a 'b' at the end, which is needed in some systems to open the file in binary mode. This string is exactly what is used in the standard C function fopen.

Чтение:
file:read (···)

Reads the file file, according to the given formats, which specify what to read. For each format, the function returns a string (or a number) with the characters read, or nil if it cannot read data with the specified format. When called without formats, it uses a default format that reads the entire next line (see below).

The available formats are

"*n": reads a number; this is the only format that returns a number instead of a string.
"*a": reads the whole file, starting at the current position. On end of file, it returns the empty string.
"*l": reads the next line (skipping the end of line), returning nil on end of file. This is the default format.
number: reads a string with up to this number of characters, returning nil on end of file. If number is zero, it reads nothing and returns an empty string, or nil on end of file.

В итоге должно выглядеть примерно так:
Код
local f = io.open([[c:\1.txt]],"r")
local line = f:read("*l")


Данный чудо-код прочитает одну строку.

Возможно необходимо будет менять позицию для чтения файла, например, сразу перейти в конец.
file:seek ([whence] [, offset])

Sets and gets the file position, measured from the beginning of the file, to the position given by offset plus a base specified by the string whence, as follows:

"set": base is position 0 (beginning of the file);
"cur": base is current position;
"end": base is end of file;

In case of success, function seek returns the final file position, measured in bytes from the beginning of the file. If this function fails, it returns nil, plus a string describing the error.

The default value for whence is "cur", and for offset is 0. Therefore, the call file:seek() returns the current file position, without changing it; the call file:seek("set") sets the position to the beginning of the file (and returns 0); and the call file:seek("end") sets the position to the end of the file, and returns its size.

Маны:
https://www.lua.org/manual/5.1/manual.html#pdf-file:read
Примеры:
http://www.lua.org/pil/21.1.html

Если с англ проблемы - скажите, разжую. Просто весь этот текст без явно необходимости переписывать желания не было =)

Так же помню что-то там вроде не очень логично приводило к блокировке файла на запись другими приложениями, возможно открывать нужно будет не в режиме "r", а в режиме "a+" или другом.


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


**

Neophyte
Сообщений: 28
Регистрация: 10.2.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.228



Добрый день!

Я похоже не так сформулировал вопрос(
Про то как и чем открыть файл и читать его я нашёл.. Меня больше интересует именно режимы открытия, чтоб они не перекрыли доступ основному владельцу.

Если есть опыт - поделитесь.

И ещё вопрос, понимает ли lua задание относительного пути по системным переменным типа %AppData% и тд ??
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 15.2.2019, 10:10
Сообщение #559


***********

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



Цитата
И ещё вопрос, понимает ли lua задание относительного пути по системным переменным типа %AppData% и тд ??

Вопрос скорее "понимает ли си". В луа по сути чистый проброс сишной функции. Скорее да, чем нет, т.к. пути все равно через апи винды должны проходить, а там уже винда подшаманит.
Цитата
Меня больше интересует именно режимы открытия, чтоб они не перекрыли доступ основному владельцу.

Если есть опыт - поделитесь.

Опыт был, опыт забыл. Насколько помню были проблемы с чистым "r". Решал вроде через "a"/"a+". Дальше методом тыка. В каком-то сочетании точно работало.

И рекомендую не брезговать ключиком "b", т.е. переводы строки всегда корявые получаются в противном случе. То \r две прилепит, то один.


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


**

Neophyte
Сообщений: 28
Регистрация: 10.2.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.228



Добрый день

провел эксперимент)
работает и с ключом "r" и с ключом "r+", приложение хозяин вроде не ругается, файл лога дописывается.

вот такой код для пробы сделал
Код

-- lua
log ("clear");

local fLog = io.open([[C:\log.txt]], "r");
if fLog == nil then
    log("Ошибка открытия файла лога!");
    stop_script ();
end
local sLine = "";
fLog: seek("end");

while true do
    sLine = fLog: read("*L");
    if sLine ~= nil then log(sLine); end;
    wait (3000);
end
fLog: close();

end_script ()


вывод происходил как бы через строчку...
если при чтении строки использовать ключ "*l" выводил строки дважды(
я так понимаю вот это
Цитата(DarkMaster @ 15.2.2019, 11:10) *

И рекомендую не брезговать ключиком "b", т.е. переводы строки всегда корявые получаются в противном случе. То \r две прилепит, то один.

должно устранить эту проблему?!

и еще в блокноте открываю лог файл там с кирилицей все порядок, а при выводе считанной строки выдает крякозябру(( типа "Р’С‹ добыли"

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

35 страниц V « < 26 27 28 29 30 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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