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

35 страниц V « < 30 31 32 33 34 > »   
Ответить в эту темуОткрыть новую тему
> Помогите освоить LUA
KaZaK
сообщение 1.3.2019, 14:58
Сообщение #621


**

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



Скрипт подгружает модуль какой то, где его взять?! или я не правильно понимаю..)

Цитата(sutra @ 28.2.2019, 16:32) *

[code]
--lua
local ffi=require "ffi"
local rmem=ffi.cast
local function FindColor(addr,len,fx1,fy1,fx2,fy2,usl,numf,stepX,stepY)



Цитата(sutra @ 28.2.2019, 16:53) *

FindImage тоже могу дать если надо. Но только без описания работы, ну просто лень. В 2-х словах сложно пояснить, слишком много наворочано, но ищет супер, просто нет слов. Спасибо Дарку, научил как надо делать!


Давай))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 1.3.2019, 15:29
Сообщение #622


*******

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



Цитата
Скрипт подгружает модуль какой то, где его взять?! или я не правильно понимаю..)
Ничего грузить не надо, всё включено, пробуй.


Цитата
Давай))
Хорошо, погоди чутка, у меня такая свалка этих финдов, не один десяток, сейчас попробую подобрать приемлемый и не совсем глюкавый вариант, просто переделывал по 10 раз, толком не тестировал. А то будет нехорошо, если сразу полезут ошибки.


Color тоже не тестировал, если что не так пойдёт - говори. Тупо пробовал, вроде ищет. Короче не гонял я пока его на всех режимах, но вроде должен работать. Только аккуратнее с параметрами, никакой проверки НЕТ на корректность задания.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 1.3.2019, 16:02
Сообщение #623


*******

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



Пока вот так, совсем кратко, попозже попробую растолковать поподробнее что к чему.
Запросто могут быть ошибки, практически не тестил этот вариант, но он вроде попроще для понимания.
Код и примеры использования функции FindImage
Код
--lua
local ffi=require "ffi"
local rmem=ffi.cast
local function ImageToArray(ad,l,x1,y1,x2,y2)
  local h,w=y2-y1+1,x2-x1+1
  local k=h*w
  local d,a=ad+3*x1+l*y1,ffi.new("uint8_t["..k.."][3]")
  if w==len then
      for i=0,k-1 do  a[i][0],a[i][1],a[i][2],d=rmem("unsigned char*",d)[0],rmem("unsigned char*",d)[1],rmem("unsigned char*",d)[2],d+3  end
    else
      local i,s=0,l-w*3
      for y=1,h do
        for x=0,w-1 do  a[i][0],a[i][1],a[i][2],d,i=rmem("unsigned char*",d)[0],rmem("unsigned char*",d)[1],rmem("unsigned char*",d)[2],d+3,i+1  end
        d=d+s
      end
  end
  deleteimage(ad)  return a
end
local function CreateFindArray(co,LG)
  if type(co[1][1])=="string" then
    co[1][1],co[1][2],co[1][3],co[1][4]=loadimage(co[1][1])
  end
  local k,q,b,g,r,p,d,ad,w,h,l=0,1,ffi.new("uint8_t"),ffi.new("uint8_t"),ffi.new("uint8_t"),ffi.new("uint8_t[6]"),ffi.new("int16_t[6]"),co[1][1],co[1][2],co[1][3],co[1][4]
  local ar,f,x,y,i,R,G,B,P,D,RG,RB,GB,ba,ga,ra=ffi.new("uint32_t[?][7]",w*h+1),ffi.new("uint16_t["..h.."]["..w.."]")
  while q<#co do
   & nbsp;q,R,G,B,P,D,RG,RB,GB,y,x,i=q+1,true,true,true,true,true,true,true,true,0,0,
ad
    if co[q].R then  P,R,p[0],p[1]=false,false,co[q].R,co[q].R2 or co[q].R  end
    if co[q].G then  P,G,p[2],p[3]=false,false,co[q].G,co[q].G2 or co[q].G  end
    if co[q].B then  P,B,p[4],p[5]=false,false,co[q].B,co[q].B2 or co[q].B  end
    if co[q].RG then  D,RG,d[0],d[1]=false,false,co[q].RG,co[q].RG2 or 255  end
    if co[q].RB then  D,RB,d[2],d[3]=false,false,co[q].RB,co[q].RB2 or 255  end
    if co[q].GB then  D,GB,d[4],d[5]=false,false,co[q].GB,co[q].GB2 or 255  end
    if co[q].acc then  acc=(100-co[q].acc)/100  else  acc=0  end
    if co[q].dev then  v=co[q].dev  else  v=0  end
    if co[q].fgr then
        while y<h do
          while x<w do
            if f[y][x]==0 then
              b,g,r=rmem("unsigned char*",i)[0],rmem("unsigned char*",i)[1],rmem("unsigned char*",i)[2]
              if(D or((RG or r-g>=d[0]and r-g<=d[1])and(RB or r-b>=d[2]and r-b<=d[3])and(GB or g-b>=d[4]and g-b<=d[5])))and(P or((R or r>=p[0]and r<=p[1])and(G or g>=p[2]and g<=p[3])and(B or b>=p[4]and b<=p[5])))then
                k,ba,ga,ra,f[y][x]=k+1,b*acc,g*acc,r*acc,1
                ar[k]={math.max(0,math.floor(b-ba-v)),math.max(0,math.floor(g-ga-v)),math.max(0,math.floor(r-ra-v)),math.min(255,math.ceil(b+ba+v)),math.min(255,math.ceil(g+ga+v)),math.min(255,math.ceil(r+ra+v)),x+y*LG}

              end
            end
            i,x=i+3,x+1
          end
          y=y+1  i,x=ad+y*l,0
        end
      else
        while y<h do
          while x<w do
            if f[y][x]==0 then
              b,g,r=rmem("unsigned char*",i)[0],rmem("unsigned char*",i)[1],rmem("unsigned char*",i)[2]
              if not((D or((RG or r-g>=d[0]and r-g<=d[1])and(RB or r-b>=d[2]and r-b<=d[3])and(GB or g-b>=d[4]and g-b<=d[5])))and(P or((R or r>=p[0]and r<=p[1])and(G or g>=p[2]and g<=p[3])and(B or b>=p[4]and b<=p[5]))))then
                k,ba,ga,ra,f[y][x]=k+1,b*acc,g*acc,r*acc,1
                ar[k]={math.max(0,math.floor(b-ba-v)),math.max(0,math.floor(g-ga-v)),math.max(0,math.floor(r-ra-v)),math.min(255,math.ceil(b+ba+v)),math.min(255,math.ceil(g+ga+v)),math.min(255,math.ceil(r+ra+v)),x+y*LG}
              end
            end
            i,x=i+3,x+1
          end
          y=y+1  i,x=ad+y*l,0
        end
    end
  end
  deleteimage(co[1][1])  ar[0]={k,LG,w,h,l}  return ar
end --------------------------------------------------------------------------------
local function FindImage(a,lG,x1,y1,x2,y2,pic,numf,sim,v1,v2,v3)
  local af,k,wi={},1
  if type(a)~="cdata" then
    if not(a)then
      x1,y1,x2,y2,a,wi,wi,lG=0,0,x2-x1,y2-y1,getimage(x1,y1,x2,y2,lG)
    end
    a=ImageToArray(a,lG,x1,y1,x2,y2)
  end
  wi,numf,sim,v1,v2,v3=x2-x1+1,numf or 1,sim or 100,v1 or 2,v2 or 1,v3 or 0
  if type(pic)~="cdata" then  pic=CreateFindArray(pic,wi)
    elseif pic[0][1]~=x2-x1+1 then
      for i=1,pic[0][0]do
        local ys=math.floor(pic[i][6]/pic[0][1])
        pic[i][6]=pic[i][6]-ys*pic[0][1]+ys*wi
      end
          pic[0][1]=x2-x1+1
  end
  local sr,x,y,ins,xe,ye,V1,V2,V3,n=true,0,0,0,wi+1-pic[0][2],(y2+2-pic[0][3]-y1)*wi,v1+3,v2+3,v3+3
  if sim<100 then
      sim=pic[0][0]*0.01*(100-sim)  local j=0
      while y<ye do
        while x<xe do
          for i=1,pic[0][0]do
            n=ins+pic[i][6]
            if a[n][v1]<pic[i][v1]or a[n][v1]>pic[i][V1]or a[n][v2]<pic[i][v2]or a[n][v2]>pic[i][V2]or a[n][v3]<pic[i][v3]or a[n][v3]>pic[i][V3]then
              j=j+1 if j>sim then  sr=false  break  end
            end
          end
          if sr then  af[k],k={x,y/wi},k+1  if k>numf then  return af  end  end
          x,sr,ins,j=x+1,true,ins+1,0
        end
        x,y,ins=0,y+wi,ins+pic[0][2]-1
      end
    else
      while y<ye do
        while x<xe do
          for i=1,pic[0][0]do
            n=ins+pic[i][6]
            if a[n][v1]<pic[i][v1]or a[n][v1]>pic[i][V1]or a[n][v2]<pic[i][v2]or a[n][v2]>pic[i][V2]or a[n][v3]<pic[i][v3]or a[n][v3]>pic[i][V3]then
              sr=false  break
            end
          end
          if sr then  af[k],k={x,y/wi},k+1  if k>numf then  return af  end  end
          x,sr,ins=x+1,true,ins+1
        end
        x,y,ins=0,y+wi,ins+pic[0][2]-1
      end
  end
  return af
end --------------------------------------------------------------------------------
log "clear" log "mode compact"
-- !!!!! РАСПАКОВАТЬ КАРТИНКИ, чтобы примеры работали !!!!!
local aff
--Вариант 1, обычный поиск картинки как таковой
local pg,wg,hg,lg=loadimage([[scr.bmp]])
local pl,wl,hl,ll=loadimage([[target_.bmp]])
tmc=os.clock()
-- будут сравниваться ВСЕ пиксели R(0-255) тут играть параметрами особо нет смысла
-- те, которые тут выставлены подойдут для 99% случаев, ищем 7 картинок, схожесть
-- при таком поиске лучше и не трогать, а то он найдёт не один десяток "фонов".
aff=FindImage(pg,lg,0,0,wg-1,hg-1,{{pl,wl,hl,ll},{R=0,R2=255,fgr=true,acc=90,dev=5}},7,100)
tmc=os.clock()-tmc  log("Время поиска: ",string.format("%.3f",tmc)," сек.")
log("Найдено - ",#aff," изображений")  for i=1, #aff do  log(table.concat(aff[i], "  "))  end

--Вариант 2, скажем это наиболее продвинутый
local pg,wg,hg,lg=loadimage([[scr.bmp]])
local pl,wl,hl,ll=loadimage([[target_.bmp]])
-- СОЗДАЁМ массив искомых пикселей
-- задаём искать в картинке только пиксели с разностью значений между каналами RED-GREEN - 100
-- будет искаться красная рамка
-- с точностью поиска потом на снмке экрана (в примере загруженный образ [[scr.bmp]]) 90%
-- и максимальным отклонением значений каналов 5
local pix=CreateFindArray({{pl,wl,hl,ll},{RG=100,fgr=true,acc=90,dev=5}},wg)
-- ищем максимум 7 картинок, со схожестью с оригиналом 70%
tmc=os.clock()
aff=FindImage(pg,lg,0,0,wg-1,hg-1,pix,7,71)
tmc=os.clock()-tmc  log("Время поиска: ",string.format("%.3f",tmc)," сек.")
log("Найдено - ",#aff," изображений")  for i=1, #aff do  log(table.concat(aff[i], "  "))  end

--Вариант 3, не думая, подойдёт для обычного использования
local pg,wg,hg,lg=loadimage([[scr.bmp]])
local pl,wl,hl,ll=loadimage([[target_.bmp]])
tmc=os.clock()
aff=FindImage(pg,lg,0,0,wg-1,hg-1,{{pl,wl,hl,ll},{RG=100,fgr=true,acc=90,dev=5}},7,71)
tmc=os.clock()-tmc  log("Время поиска: ",string.format("%.3f",tmc)," сек.")
log("Найдено - ",#aff," изображений")  for i=1, #aff do  log(table.concat(aff[i], "  "))  end

--Вариант 4, задаём в качестве фона пиксели разность каналов RED-BLUE у которых не более 50
-- убираем ключ в таблице fgr=true , что означает что это не фореграунд, а иначе фон
-- (плохой подход в данном случае, будет лишний пиксель, но при 70% схожести найдётся)
local pg,wg,hg,lg=loadimage([[scr.bmp]])
local pl,wl,hl,ll=loadimage([[target_.bmp]])
tmc=os.clock()
aff=FindImage(pg,lg,0,0,wg-1,hg-1,{{pl,wl,hl,ll},{RB=-255,RB2=50,acc=90,dev=5}},7,70)
tmc=os.clock()-tmc  log("Время поиска: ",string.format("%.3f",tmc)," сек.")
log("Найдено - ",#aff," изображений")  for i=1, #aff do  log(table.concat(aff[i], "  "))  end

--Вариант 5, задаём в качестве фона пиксели обозначая диапазоны каналов (плохой подход в данном случае ... см. выше)
local pg,wg,hg,lg=loadimage([[scr.bmp]])
local pl,wl,hl,ll=loadimage([[target_.bmp]])
tmc=os.clock()
local pix=CreateFindArray({{pl,wl,hl,ll},{R=0,G=0,B=0,R2=100,G2=100,B2=100,acc=90,dev=5}},wg)
aff=FindImage(pg,lg,0,0,wg-1,hg-1,pix,7,70)
tmc=os.clock()-tmc  log("Время поиска: ",string.format("%.3f",tmc)," сек.")
log("Найдено - ",#aff," изображений")  for i=1, #aff do  log(table.concat(aff[i], "  "))  end



q,R,G,B,P,D,RG,RB,GB,y,x,i=q+1,true,true,true,true,true,true,true,true,0,0,ad

Почему то неверно копируется вот эта строка, переправь сам на вот этот вариант.

Это в начале функции local function CreateFindArray(co,LG)

Картинки кидай прямо в Пилотовскую папку, ну или переделывай пути в примерах.

Поиграй параметрами, это даст понимание что и как ищется. Отличия от Кнайтовского варианта, здесь работает параметр относительной погрешности, как я всегда его называл, здесь это ключ в таблице acc, что вообще-то означает точность. Им можно играть в гигантском интервале, только скорость будет конечно падать. Это вообще основной параметр. dev - deviation - отклонение задавать надо в интервале 3-10 единиц. Ну можешь поэкспериментировать.

Главный плюс этой функции - скорость. И как уже говорил - точность поиска. Ничего лишнего не ищется, если не считать параметра схожести.

Да, вот ещё, память чистится после выполнения функции. Если чистить не надо, надо иначе задавать параметры, но это потом уже подробнее поясню.

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


Прикрепленные файлы
Прикрепленный файл  pictures.zip ( 2,23 мегабайт ) Кол-во скачиваний: 27
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 1.3.2019, 16:22
Сообщение #624


*******

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



А вообще не помню, вроде ничего сам не скачивал, но на всякий случай кину и библиотеку, которая у меня есть.


Прикрепленные файлы
Прикрепленный файл  libgcc_s_dw2_1.dll.zip ( 199,55 килобайт ) Кол-во скачиваний: 23
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.3.2019, 16:11
Сообщение #625


***********

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



Цитата
Скрипт подгружает модуль какой то, где его взять?! или я не правильно понимаю..)

Модуль подгружает, но он уже включен в сам luajit. Просто поумолчанию он не подгружен.


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


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Что будет быстрее сканировать область findimage(перебирать картинки) на языке lua или на языке пилота? Есть какие тесты скорости у кого по этому вопросу...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.3.2019, 1:06
Сообщение #627


*******

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



Цитата
Что будет быстрее сканировать область findimage(перебирать картинки) на языке lua или на языке пилота?

Ну конечно на текущий момент на lua. Полно тестов. Кнайт дорабатывает данную функцию, поэтому её и нет пока в справке для lua. Отвечая на вопрос по пунктам. На lua быстрее, НО, дело не только собственно в lua. ДаркМастер, не так давно показал как на lua получать мгновенный доступ к памяти, где лежат образы картинок, да и снимка экрана тоже. Это дало возможность ускорить поиск картинок. Основы, принципы, дискуссия - эта тема практически только про это. Готовый пример самопальной, НО АБСОЛЮТНО рабочей функции findimage я дал, с малюсенькой недоработкой по правильной очистке памяти, точнее мне просто лень редактировать код который я пару дней назад дал. Но пример функции абсолютно рабочий и на мой взгляд очень даже не плохой. Попробуйте и сравните сами, что Вы можете найти стандартом и самопалом и с какой скоростью. Мне казалось, что эта тема никому не интересна, если есть интерес (а я его определяю просто - пробовали мой пример функции или нет), то сделаю подробное описание работы, да в принципе там МНОГО чего можно улучшить и упростить, вплоть до абсолютно бездумного использования, используя анализ картинки без участия юзера.

Мне очень трудно объяснять некоторые аспекты работы функции, я специально пока дал просто примеры использования. Вот Вы в пожеланиях указали, что неплохо бы использовать экранную лупу. Да, наверное. Только я всегда и ВСЁ анализирую в граф. редакторе, где есть любое увеличение, где всегда отражаются актуальные координаты и для каждого пикселя всегда показываются актуальные значения каналов RGB. Самый простой и весьма эффективный редактор, в котором всё это есть - Paint Shop Pro.

Когда своими глазками всё это видишь - понимание всего остального намного проще и точнее.

Могу сказать только одно, хотя уже не раз говорил. Найти можно абсолютно ВСЁ и очень быстро и для большинства случаев моей функции будет достаточно. Если есть что-то очень хитрое с "тяжёлыми" условиями поиска - спрашивайте - давайте примеры, уверяю - найду и найду мгновенно, даже чат.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.3.2019, 1:58
Сообщение #628


**********

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



Цитата
Что будет быстрее сканировать область findimage(перебирать картинки) на языке lua или на языке пилота?

Без разницы. Функция одна и также.
Если хотите быстрее, то:
Загружаете картинки в память loadimage, 1 раз вначале скрипта.
1. Делается скрин getimage.
2. Ищутся картинки на скрине.
3. Удаляется скрин.
Цитата
поэтому её и нет пока в справке для lua

Вообще-то есть findimage. Нет findcolor'а потому что Кнайт не исправил синтаксис.


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.3.2019, 3:03
Сообщение #629


*******

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



Цитата
Без разницы. Функция одна и также.
И опять не соглашусь, причём категорически не соглашусь. Давайте-ка хоть один пример покажите, где Вы хоть чутка приблизитесь к скорости моей функции, в десятки, сотни раз медленнее.


Цитата
Вообще-то есть findimage.
И опять не соглашусь. ГДЕ? В справке по lua есть findimage.


Сорри, обновил справку, добавили findimage. Хотя опять же, ни слова, ни пол-слова про то, что добавили. Называется - а ты пробуй друг мой, может найдёшь.

И опять же, вопрос был даже не про стандарт финда в lua, а про разницу в скорости между Пилотом и lua. ГДЕ там одинаковая скорость? Может конечно что подправили, только я нигде не видел, что там что-то исправлялось. А из того, что я тестировал и показывал результаты тестов ... там и РЯДОМ ничего близко нет, а иначе я бы и не занимался этим финдом.

Я же показывал, как КАТАСТРОФИЧЕСКИ падает скорость при совместном использовании параметров deviation и accuracy.

В общем, неприятный осадок у меня остался, каким-то изгоем себя чувствую. Ради бога. Я никогда, ни на что не претендовал и ни на что не претендую, и не собираюсь. На нет и спроса нет - ищите сами. Только прицелы и монетки я нашёл, хотя мне говорили - давай-ка найди. И не только прицелы, а ВСЁ, что там есть на скрине и мгновенно (в частном редактировании картинок). Чат твой Сайрус, да без проблем, легко и просто, дерзайте тогда сами - удачи всем!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 5.3.2019, 3:05
Сообщение #630


**********

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



Причём тут ваша функция. Вопрос был про:
Код
set #a findimage(...)

и
Код
--lua
local arr, a = findimage(...)

Это одно и тоже и разницы в скорости не будет вообще.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.3.2019, 5:24
Сообщение #631


*******

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



Цитата
Это одно и тоже и разницы в скорости не будет вообще.

Кто бы сомневался, ВООБЩЕ не будет разницы между ЛЮБОЙ функцией Пилота и lua. Выполняться будет собственно одно и то же. А попробуйте ЭТО сделать 1000 раз, а попробуйте это сделать в цикле. Я же с самого начала спросил на форуме про преимущества lua и каков был мне ответ??? Какие были тесты??? Вы же сами мне показывали что к чему. В Ваших примерах тоже не было бы разницы при единичных вызовах операторов и функций, но Вы показывали примеры в циклах. Зачем же вводить в заблуждение людей? Пока что Пилот - это интерпретатор, lua - пусть и кривой, но компилятор. Что тут обсуждать, по скорости даже супер-интерпретатор не сможет соперничать с самым убогим компилятором? Конкретно, в частностях, Вы конечно же всегда правы, только я интуитивно чую вопрос, наверное потому, что сам прошёл через всё это. Я даю практические рекомендации, насколько я понимаю вопрос, как обычный рядовой юзер, пытаясь не вдаваться в теории и нюансы. Когда спрашиваю сам, то точно про то же, про практическое применение. Конечно можно и про остальное поговорить, только при соответствующих вопросах, в соответствующих темах. Тут и тема то про финды, возможно людей что-то заинтересовало, а ВЫ им, да на фиг это всё, всё одинаково!! Чего тут говорить, вот такое у меня сложилось впечатление, по Вашим высказываниям. Может я и не прав конечно, ну тогда извините ... "хуже не будет, время рассудит". Только у меня как-то пропало желание что-либо говорить на эту тему и выглядеть каким-то недоразвитым. Дополнить, пояснить, опровергнуть, покритиковать - это я понимаю, а вот противопоставление, которое ну явно на лицо (в такой хорошо завуалированной форме) меня явно раздражает. Как-будто вот Вы специально ждали моих комментов, а я ответил на вопрос далеко не тут же, я тут такой же гость, как и большинство участников форума. Я не настолько глуп в понимании людей и в понимании происходящего (в отличии от моих познаний в программировании).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 5.3.2019, 5:49
Сообщение #632


*******

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



Собственно я и делал то всё не для себя, для себя уже всё сделано (попроще). Пытался как-то универсальность функции сделать. Ждал комментов, рецензий, чтобы повысить свой уровень, чтобы указали на явные огрехи стиля, синтаксиса, скорости выполнения (а их там хватает). Код, как говорится открытый, каждый может править, как ему лучше. Поделился сначала идеей, потом мало-мальски дал рабочий вариант кода, учитывая, что может хоть что-то пригодится при совершенствовании и развитии Пилота. А тут ответ ... да НЕТ РАЗНИЦЫ ... вот потом и объясняй, что разница есть ... вот как-то так ... сорри.

Цитата
findimage(перебирать картинки)
И Вы частенько не вникаете в суть вопроса. Вот дал цитату вопроса. Так кто тут не прав???


Вопрос конкретнее некуда - ПЕРЕБИРАТЬ.

Цитата
На lua быстрее, НО, дело не только собственно в lua
А это начало моего ответа. Так кто тут не прав? Так что 1-0 в мою пользу, без вариантов. Но желание общаться - пропало.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 7.3.2019, 23:55
Сообщение #633


********

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



Как

Код
return dG,k-1,arr


возвращать из плюсов без луа таблиц / с помощью jit ?

сюда же вопрос как разобрать

Код
usl


из плюсов ? как мне понять где там R или R2, если их можно задавать в разном порядке, а получу я массив чисел на вход ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.3.2019, 1:15
Сообщение #634


***********

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



Цитата
возвращать из плюсов без луа таблиц / с помощью jit ?

Просто описывается функция, набор типов данных.
https://luajit.org/ext_ffi_tutorial.html
Код
local ffi = require("ffi")
ffi.cdef[[
unsigned long compressBound(unsigned long sourceLen);
int compress2(uint8_t *dest, unsigned long *destLen,
          const uint8_t *source, unsigned long sourceLen, int level);
int uncompress(uint8_t *dest, unsigned long *destLen,
           const uint8_t *source, unsigned long sourceLen);
]]

пример биндингов. Внутри длл никаких модификаций не требуется - обычная дллка.


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


********

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



Из си нельзя вернуть 3 значения. Тем более разного рода. Вопрос все еще открыт. Как понять, где в usl R или RB, если это обработано ffi.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 8.3.2019, 9:47
Сообщение #636


********

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



Если конкретнее, то переведи

Код
if usl.R then  P,R,p[0],p[1]=false,false,usl.R,usl.R2 or usl.R  end
  if usl.G then  P,G,p[2],p[3]=false,false,usl.G,usl.G2 or usl.G  end
  if usl.B then  P,B,p[4],p[5]=false,false,usl.B,usl.B2 or usl.B  end
  if usl.RG then  D,RG,d[0],d[1]=false,false,usl.RG,usl.RG2 or 255  end
  if usl.RB then  D,RB,d[2],d[3]=false,false,usl.RB,usl.RB2 or 255  end
  if usl.GB then  D,GB,d[4],d[5]=false,false,usl.GB,usl.GB2 or 255  end


в си, заранее не зная где стоят usl.*.

И вот это

Код
return dG,k-1,arr


где первые два - числа, а arr массив на структур.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.3.2019, 10:45
Сообщение #637


***********

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



Цитата
Если конкретнее, то переведи

Дык это не длл, а просто через ffi дергается cast. Там вначале была объявлена структура сишная, тут ее просто заполняют, выдергивают из нее значеня. Это не функция сишная, а просто работа с сишными типами данных.
По большому счету у тебя просто есть cast, чтобы пошалить с типами данных.


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


********

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



Вероятно, мы друг друга не понимаем. Опишу еще раз, что хочу видеть.

1)В скрипте прикастовали типы ко всем параметрам функции. Так ?
2)На вход длл, которая не знает ничего о луа, подаются уже сишные типы ? Так ?
3)Местный usl превратится в некий массив uint8_t. Так ?
4)Из скрипта я вызываю длл, в которую идет вышеописанный массив. Так ?

Если все так, то как быть в ситуациях, когда таблица может быть задана как
Код
{ R=10, G=12, B=100 }


так и

Код
{ G = 12, B = 100, R = 10}


Что примерно эквивалентно касту uint8_t*:
Код
10,12,100,0,0,0.....


и

Код
12,100,10,0,0,0.....


соответственно.

Теперь переносимся внутрь функции длл. Нам пришел массив с числами. Но что это за условия ? R,G или RG ? и под какими индексами они идут ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.3.2019, 0:33
Сообщение #639


***********

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



Цитата
1)В скрипте прикастовали типы ко всем параметрам функции. Так ?

cast при этом в явном виде не используется вообще. Используется исключительно ffi.cdef, где по сути объявляется прототип функции с указанием типов в стиле и синтаксисе си.
Цитата
2)На вход длл, которая не знает ничего о луа, подаются уже сишные типы ? Так ?

Явно - нет. Пользователь отправляет обычные Lua данные. cast (если это вообще cast) вызывается где-то в глубине потрахов ffi и пользователь при этом ни о чем не догадывается. Т.е.:
local var = 1
my_func(1)
При этом my_func() может быть функцией из dll подключенной через ffi. Никаких cast'ов пользователю вручную вызывать не нужно.
Цитата
3)Местный usl превратится в некий массив uint8_t. Так ?

здесь объявляются си массивы r,g,b,p,d через new.
local lx,ly,r,g,b,p,d=fx2-fx1+1,fy2-fy1+1,ffi.new("uint8_t"),ffi.new("uint8_t"),ffi.new("uint8_t"),ffi.new("uint8_t[6]"),ffi.new("int16_t[6]")
далее идет проверка наличия в lua'шной таблицы полей usl.* и привсваиваются значения в сишную таблицу из луашной:
P,R,p[0],p[1]=false,false,usl.R,usl.R2 or usl.R
т.е. у нас есть некторый массив си p в который помещаются данные из луа таблицы usl.
Цитата
4)Из скрипта я вызываю длл, в которую идет вышеописанный массив. Так ?

Из скрипта любая dll функция вызывается как обыкновенная lua функция. Единственная разница в том, что должена быть заранее объявлено через ffi.cdef. Т.е. фактически:
ffi.cdef[[
unsigned long compressBound(unsigned long sourceLen);]]
является объявлением правил приведения типов при вызове функции из луа и объвлением.
Цитата
Если все так, то как быть в ситуациях, когда таблица может быть задана как

ffi сам приведет типы, но нужно понимать, что для корректной передачи может понадобиться передавать данные либо отдельными переменными для приведения в автоматическом режиме. Если же есть необходимость передать таблицу, то нужно не забывать, что таблица и массив вещи разные и порядок элементов в луа таблице не регламентирован. Этот момент не попадался под руку, но нужно понимать, что если функция ожидает массив, то нужно отправлять массив, а если таблицу, то таблицу.

Сообщение отредактировал DarkMaster - 9.3.2019, 2:03


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


***********

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



Я вообще не очень понимаю передачу таблиц и массивов в данном случае ибо это должен быть указатель. Указатель же в свою очередь должен вести на некоторый корректный кусок памяти (коректный по мнению длл), т.е. скорее всего, если нужно передать именно массив, то придется через new что-то объявить.


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

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

 

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