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

|
Переделал на вайлы всё, стало стабильнее, но медленнее. Короче однозначно надо делать dll-ку, будет намного быстрее. А так у меня получается время поиска около 1 секунды. Правда это в самом тяжёлом случае. Для теста взял Дарк, твой скрин, где прицел ты давал. Прицел - фигня, ищу для теста мишени, там где их группа из 6 штук и они накладываются друг на друга, вот чтобы найти все, то есть прошерстить 1920х1080, у меня требуется почти секунда, а за секунду они запросто "смоются от возмездия". Но что радует ... ищется на УРА! Никаких проблем. Ещё погоняю - выложу код. Если поможете, то и dll-ку сделаю. Есть у меня там пара вопросов.
|
|
|
|
sutra |
13.2.2019, 8:30
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Делать чистую си дллку, подключать через ffi. Э-э! Я совсем не знаю СИ, даже компилятора нет. Так что не знаю. Я на Делфи типа планировал, но тогда и подсказать будет некому. Так что я наверное код дам, а у тебя времечко может будет, набросаешь на СИ. Я вот просто уверен, будет раза в 2 минимум быстрее работать. Я тут поколдовал, уже менее секунды, 0,8 десятых если искать неограниченное количество картинок на 1920х1080.
|
|
|
|
sutra |
13.2.2019, 8:48
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Я думаю тебе, Дарк, несложно будет сделать. Алгоритм простецкий, всего 2 ветвления. У меня возня с параметрами. Как-то мне всё кажется криво, плюс я не знаю как быстрее. А на СИ будет по барабану, отработает мигом. Я сделал так сказать Лайт версию, не стал "утяжелять" сверхуниверсальным алгоритмом, который ещё и разность каналов ловит. По большому счёту такой алгоритм нужен только если искать при совершенно разных условиях (типа день - ночь). Толком не на чем тестировать, а то что пробовал искать я, ничего, кроме тормозов не получилось. Ну даст бог сегодня допинаю, максимум завтра. Там посмотрите, покритикуете, будет видно что к чему. В любом случае, на текущий момент - это бомба, нынешним финдом в принципе нельзя найти то, что я запросто ищу.
|
|
|
|
DarkMaster |
13.2.2019, 18:28
|
          
Модератор 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____
|
|
|
|
Cockney |
13.2.2019, 19:23
|
       
Master
Сообщений: 1.403
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22549
Пользователь №: 16.156

|
Цитата(DarkMaster @ 13.2.2019, 18:28)  Скорость вызова у них разная. Сильно. Это раз. Второе вопрос удобства лично для меня очень спорен. Мне, например, гораздо удобнее иметь нормальную дллку которая имеет стандартные интерфейсы, а не спец костыль только для луа.
Работа идет через луа ? Значит стандартный голый интерфейс не принципиален. Цитата Эти декорации будут исключительно в lua файле который описывает длл и подключется через require. Пользователь никогда этих декораций не увидит и не узнает. Луа апи - такие же декорации, только их не видно, невозможно быстро подшаманить без компилятора и приводят к несовместимости со всем кроме lua.
Пользователь слишком абстрактное понятие. А быстро и не надо шаманить. Это написано один раз и все. Дальше работают скрипты. Цитата А смысл есть? Сравни скорость работы vector и чистых сишных массивов. Получится та же самая просадка, что и при работе с lua.
Т.е. выделять память под 1000, когда найдется 3 куда лучше ? Цитата В чем лапша то? Если подключать длл, а не писать на ffi, то все, что там будет - это описание типов данных передаваемых в функции и возвращаемых типов. По стуи тоже самое, что объявление структуры в чистом си либо функции. Причем и синтаксис то сишный.
Странно, что ты не доволен : Цитата Переопределение стандартных типов вообще отдельный разговор - хочется убивать. Но при этом делаешь тоже самое - пишешь метровые декорации для "стандартизации" интерфейса длл, которая будет выполнятся в луа среде, у которой есть свой интерфейс.
|
|
|
|
DarkMaster |
13.2.2019, 19:57
|
          
Модератор 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____
|
|
|
|
DarkMaster |
15.2.2019, 1:02
|
          
Модератор 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____
|
|
|
|
DarkMaster |
15.2.2019, 10:10
|
          
Модератор UOPilot
Сообщений: 9.740
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29644
Пользователь №: 11.279

|
Цитата И ещё вопрос, понимает ли lua задание относительного пути по системным переменным типа %AppData% и тд ?? Вопрос скорее "понимает ли си". В луа по сути чистый проброс сишной функции. Скорее да, чем нет, т.к. пути все равно через апи винды должны проходить, а там уже винда подшаманит. Цитата Меня больше интересует именно режимы открытия, чтоб они не перекрыли доступ основному владельцу.
Если есть опыт - поделитесь. Опыт был, опыт забыл. Насколько помню были проблемы с чистым "r". Решал вроде через "a"/"a+". Дальше методом тыка. В каком-то сочетании точно работало. И рекомендую не брезговать ключиком "b", т.е. переводы строки всегда корявые получаются в противном случе. То \r две прилепит, то один.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
KaZaK |
15.2.2019, 13:57
|
 
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 две прилепит, то один.
должно устранить эту проблему?! и еще в блокноте открываю лог файл там с кирилицей все порядок, а при выводе считанной строки выдает крякозябру(( типа "Р’С‹ добыли" как бороться с этим?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|