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

> Помогите освоить LUA
sutra
сообщение 24.10.2018, 18:09
Сообщение #1


*******

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



Начал осваивать LUA, помогите пожалуйста, в справке нет многих операторов.
Сразу возник вопрос, как загрузить массив из файла (аналог load_array), наверняка ответ на форуме есть, но я не нашёл. В обычном скрипте код такой.

load_array %cfg $ConfigFile

Ну и сохранить соответственно тоже не знаю как.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
sutra
сообщение 12.11.2018, 23:31
Сообщение #2


*******

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



Код
function FindRGB(addr,len,scrX1,scrY1,fx1,fy1,fx2,fy2,usl,numf,h)
  -- addr,len : адрес в памяти и длина строки в памяти (то, что даёт getimage)
  -- scrX1,scrY1 : координаты скрина, аналогичны координатам getimage (конечные X и Y не требуются)
  -- fx1,fy1,fx2,fy2 : координаты поиска, абсолютные относительно рабочего окна (мне так удобнее). Должны быть внутри диапазона скрина.
  -- usl : условие поиска "R(10-255) G(70-100) B(50) R-G[50 200] R-B[-40 -20] G-B[15]"
  -- условие ОДНО, по принципу ужесточения параметров поиска. R-G - разность между каналами с возможностью интервала
  -- G-B[15] идентично G-B[15 255]
  -- никакой проверки лексики естественно нет
  -- numf : количество искомых пикселей
  -- h : хендл пилота
  local _,_,r1,r2 = usl:find("R%((%d+)%-*(%d*)")
  local _,_,g1,g2 = usl:find("G%((%d+)%-*(%d*)")
  local _,_,b1,b2 = usl:find("B%((%d+)%-*(%d*)")
  local _,_,RG1,RG2 = usl:find("R%-G%[(%-*%d+)%s*(%-*%d*)")
  local _,_,RB1,RB2 = usl:find("R%-B%[(%-*%d+)%s*(%-*%d*)")
  local _,_,GB1,GB2 = usl:find("G%-B%[(%-*%d+)%s*(%-*%d*)")
  r1=tonumber(r1)  r2=tonumber(r2)
  g1=tonumber(g1)  g2=tonumber(g2)
  b1=tonumber(b1)  b2=tonumber(b2)
  RG1=tonumber(RG1)  RG2=tonumber(RG2)
  RB1=tonumber(RB1)  RB2=tonumber(RB2)
  GB1=tonumber(GB1)  GB2=tonumber(GB2)
  if r1==nil then  r1,r2=0,255  else  if r2==nil then  r2=r1  end  end
  if g1==nil then  g1,g2=0,255  else  if g2==nil then  g2=g1  end  end
  if b1==nil then  b1,b2=0,255  else  if b2==nil then  b2=b1  end  end
  if RG1==nil then  RG1,RG2=-255,255  else  if RG2==nil then  RG2=255  end  end
  if RB1==nil then  RB1,RB2=-255,255  else  if RB2==nil then  RB2=255  end  end
  if GB1==nil then  GB1,GB2=-255,255  else  if GB2==nil then  GB2=255  end  end
  local r,g,b=0,0,0
  local arr,ss,k,numbyte,pos={},"",0,255,(fx1-scrX1)*3                   -- pos -  количество первых байтов в строке памяти не требующих анализа
  if len<253 then
    local rgb=1
    local ind=addr+(fy1-scrY1)*len+pos                                   -- начальный индекс в памяти для считывания данных
    local maxind=addr+(fy2-scrY1)*len+(fx2-scrX1+1)*3-1                  -- конечный индекс в памяти для считывания данных
    local x,y,j=fx1,fy1,1
    while ind<=maxind do
      numbyte=math.min(255,maxind-ind+1)                                   -- количество байт для очередной итерации считывания из памяти
      ss=readmem(ind,"s",numbyte,h)
      ind,j=ind+numbyte,1
      while j<=numbyte do
        if x>=fx1 and x<=fx2 then
          if rgb==1 then  b=string.byte(ss,j)  end
          if rgb==2 then  g=string.byte(ss,j)  end
          if rgb==3 then
            r=string.byte(ss,j)
            if r>=r1 and r<=r2 and g>=g1 and g<=g2 and b>=b1 and b<=b2 and r-g>=RG1 and r-g<=RG2 and r-b>=RB1 and r-b<=RB2 and g-b>=GB1 and g-b<=GB2 then
              k=k+1  arr[k]={}  arr[k][1]=x  arr[k][2]=y  arr[k][3]=r  arr[k][4]=g  arr[k][5]=b
              if numf<=k then  return arr  end
            end
          end
        end
        j,pos=j+1,pos+1
        if rgb<3 then  rgb=rgb+1  else  rgb,x=1,x+1  end
        if pos==len then  pos,y,rgb,x=0,y+1,1,scrX1  end
      end
    end
  else
    local numreed=math.ceil((fx2-fx1+1)*3/255)
    local ost=math.fmod((fx2-fx1+1)*3,255)
    for i=fy1,fy2 do
      local ind=addr+(i-scrY1)*len+pos
      local x=fx1
      for s=1,numreed do
        if s==numreed then numbyte=ost  else  numbyte=255  end
        ss=readmem(ind,"s",numbyte,h)
        for j=1,numbyte,3 do
          b=string.byte(ss,j)
          g=string.byte(ss,j+1)
          r=string.byte(ss,j+2)
          if r>=r1 and r<=r2 and g>=g1 and g<=g2 and b>=b1 and b<=b2 and r-g>=RG1 and r-g<=RG2 and r-b>=RB1 and r-b<=RB2 and g-b>=GB1 and g-b<=GB2 then
            k=k+1  arr[k]={}  arr[k][1]=x  arr[k][2]=i  arr[k][3]=r  arr[k][4]=g  arr[k][5]=b
            if numf<=k then  return arr  end
          end
          x=x+1
        end
        ind=ind+numbyte
      end
    end
  end
  return arr
end

log "clear"  log "mode compact"
local x1,y1,x2,y2=49,100,551,941
local address, w, h, len = getimage (x1, y1, x2, y2)
local handle = windowhandle()
local bmp={}
bmp=FindRGB (address, len, x1, y1, 49,700,51,901,"R(0-255)",20000,handle)
deleteimage(address)
for i=1, #bmp do
    log(table.concat(bmp[i], "  "))     -- вывод массива в лог
end

Наваял тут, может ткнут носом что совсем не так делаю. И вопрос, а как сделать, чтобы сохраняя формат в отдельном окошке код помещать?

Сообщение отредактировал sutra - 14.11.2018, 13:56
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
sutra   Помогите освоить LUA   24.10.2018, 18:09
cirus   --lua log "clear" log "mode compact...   25.10.2018, 1:58
DarkMaster   Поскольку lua весь на деревьях и размеры массивов ...   25.10.2018, 8:43
DarkMaster   Предчувствуя следующий вопрос: local function lg...   25.10.2018, 8:54
sutra   Спасибо большое парни! Оба здорово помогли мне...   25.10.2018, 23:06
DarkMaster   Смысл в том, что это делать уже не надо - оно уже...   26.10.2018, 0:36
sutra   Дарк, а есть такая возможность получить некий резу...   26.10.2018, 12:28
DarkMaster   Нет. И подозреваю, что даже между запущенными на ...   26.10.2018, 14:25
WKnight   Теоретически есть. А смысл?   26.10.2018, 14:35
sutra   Смысла нет, просто скрипт огромный, хотел частями ...   26.10.2018, 15:53
sutra   В башке "месиво" сплошное от всех этих я...   26.10.2018, 16:49
olduo.com   В башке "месиво" сплошное от всех этих ...   27.10.2018, 0:51
DarkMaster   И да и нет. Пока не лезешь в классы и метатаблицы...   27.10.2018, 1:59
Cockney   Да вот только сам по себе луа пустой. Его сфера ...   27.10.2018, 12:44
DarkMaster   Классы этого никак не меняют. И справляется на с...   27.10.2018, 14:00
Cockney   Классы этого никак не меняют. И справляется на с...   27.10.2018, 14:48
olduo.com   Ради интереса зашел на одну из вакансий по луа: ...   27.10.2018, 18:17
sutra   Во какую тему замутил. А я вот со своим дилетантск...   27.10.2018, 16:09
DarkMaster   Насколько я понял там вообще пофигу ибо линкуется...   27.10.2018, 17:08
Cockney   Начали мы как раз с того, что луа живет за счет ...   10.11.2018, 0:05
sutra   Я попробовал и даже простейшую функцию не смог сде...   27.10.2018, 18:24
cirus   Выкладывайте код, поправим. Для примера: --lua --...   27.10.2018, 18:31
sutra   Не смог реализовать goto как только не пробовал, д...   27.10.2018, 19:53
cirus   Лучше сразу забудьте про него. --lua function pro...   27.10.2018, 19:53
sutra   Спасибо. То есть goto не работает??   27.10.2018, 20:01
cirus   Нет. Он и не нужен. В луа его вообще нет. Вроде к...   27.10.2018, 20:04
sutra   Меня конечно учили в своё время, что goto использо...   27.10.2018, 20:16
DarkMaster   Как правило подобные проблемы говорят о том, что ...   28.10.2018, 2:11
sutra   А оператор continue в цикле while есть?   29.10.2018, 0:00
cirus   В луа нет continue.   29.10.2018, 0:18
sutra   Это очень нехорошо. Если честно, то я не понимаю. ...   29.10.2018, 1:28
DarkMaster   while var > 1 do local result = check_some_pa...   29.10.2018, 4:29
sutra   Спасибо Дарк. Но у меня так не получится. Допустим...   29.10.2018, 12:55
sutra   Слишком сложный код. никакого линейного выполнения...   29.10.2018, 13:15
sutra   Грубо говоря есть определённое количество событий,...   29.10.2018, 13:25
sutra   local n = "123.txt" local f = io.open(...   29.10.2018, 14:41
DarkMaster   А лежит он где? Рядом с ехе пилота? Пилот перезап...   29.10.2018, 14:44
sutra   Обычным текстом открывает [[123.txt]] Минутку, те...   29.10.2018, 15:04
cirus   Скорее всего были какие-то ошибки. --lua local n ...   29.10.2018, 15:09
sutra   Перегрузил Пилот через прибивалку, всё заработало,...   29.10.2018, 15:17
sutra   Понял причину, забыл поставить двойной слеш при ук...   29.10.2018, 15:40
DarkMaster   Не редактируйте код перед тем, как выложить. Ну л...   29.10.2018, 18:00
sutra   Я не редактировал. Просто сначала использовал полн...   29.10.2018, 18:21
DarkMaster   это фиксанули буквально пару дней назад   30.10.2018, 5:31
sutra   Добрался до файндов. и как и думал ничего у меня н...   31.10.2018, 13:03
sutra   И конечно примеры на lua "надёжно" зарыт...   31.10.2018, 13:14
cirus   --lua local a, c = findimage(0, 0, 1920, 1080...   31.10.2018, 13:29
sutra   Спасибо. Так я и говорю надёжно спрятано. Я случа...   31.10.2018, 13:35
cirus   Когда выйдет полноценная версия пилота на луа, то...   31.10.2018, 13:50
sutra   --lua log "clear" log "mode compact...   31.10.2018, 14:01
cirus   Да, в findimage есть баг, если искать на скрине от...   31.10.2018, 14:10
sutra   --lua log "clear" log "mode compact...   31.10.2018, 14:17
cirus   --lua log "clear" log "mode compact...   31.10.2018, 14:23
sutra   Спасибо разобрался. Ну в общем тот баг и в lua про...   31.10.2018, 14:43
cirus   --lua log "clear" log "mode compact...   31.10.2018, 14:57
sutra   Спасибо.   31.10.2018, 15:12
DarkMaster   Суть в том, что само тело пилотовских функций оди...   31.10.2018, 19:04
sutra   А получить массив найденных пикселей, где хранятс...   1.11.2018, 12:54
cirus   --lua local a = findcolor("0, 0, 1920, 108...   1.11.2018, 13:09
sutra   Спасибо. А какой самый простой способ в lua убить...   1.11.2018, 13:26
DarkMaster   arr = nil вы не убили массив. Вы создали новый п...   1.11.2018, 13:44
WKnight   Плин, вот так скажешь ваське ченить полезное, и по...   1.11.2018, 13:51
sutra   Спасибо. Вывод... лучше спросить, коли с мозгами т...   1.11.2018, 14:20
sutra   Всем огромное спасибо, кто потратил своё время на ...   4.11.2018, 18:46
sutra   --lua check=5 checkint=0 for i=1, 10 do for j=...   8.11.2018, 12:01
cirus   Нет.   8.11.2018, 12:36
DarkMaster   Не забывайте области видимости - пишите local при ...   8.11.2018, 17:34
sutra   Спасибо, я не забываю. На примерах просто лень, у...   9.11.2018, 1:59
WKnight   А напомните, что именно имеется ввиду. Я как раз р...   9.11.2018, 2:07
sutra   Так Cirus показывал на примере моей картинки в тем...   9.11.2018, 2:12
cirus   https://forum.uokit.com/index.php?s=&sh...st...   9.11.2018, 2:19
DarkMaster   1) Глобальные переменные медленные. 2) В луа огра...   9.11.2018, 10:07
WKnight   А, я думал может еще чего интересного нашли :)   9.11.2018, 12:48
DarkMaster   Я тебе могу предложить убрать костыль по координат...   9.11.2018, 13:02
sutra   Кнайт, мне нравится подход, ЕЩЁ ... Я считаю, что...   9.11.2018, 16:59
WKnight   Чет не помню такого.   9.11.2018, 18:28
DarkMaster   В приват ща опишу. А то "секретные технологии...   9.11.2018, 18:36
sutra   Блин, секретные технологии. Ну у меня тоже есть та...   10.11.2018, 1:16
sutra   Фишка в том, что анализируются не изображения, а ф...   10.11.2018, 1:39
sutra   Думаю всё это легко можно сделать в lua , но мне п...   10.11.2018, 2:13
cirus   --lua log "clear" log "mode compact...   10.11.2018, 2:29
DarkMaster   В данном случае я бы рекомендовал для начала забыт...   10.11.2018, 13:07
sutra   Ну этот метод я знаю, в принципе неплохой вариант...   10.11.2018, 14:51
sutra   Сорри, не доглядел, действительно, я не знал синт...   10.11.2018, 15:08
DarkMaster   Очень неплохо поднимается производительность, если...   10.11.2018, 15:29
sutra   Так в том то и фишка, что колор в памяти только-то...   10.11.2018, 15:44
cirus   --lua -- сделать привязку Ctrl+A local h = workwin...   10.11.2018, 16:25
sutra   Спасибо большое. Век живи и век учись. Я просто п...   10.11.2018, 16:52
cirus   Color, findimage, findcolor, getimage, move, left...   10.11.2018, 17:07
sutra   ОК.   10.11.2018, 17:30
sutra   Теперь про борьбу с рендерингом. Может кому пригод...   12.11.2018, 16:22
sutra   Конечно если картинки очень сложные, то спасёт тол...   12.11.2018, 18:38
sutra   Круто, я так не умею, не знаю как.   13.11.2018, 0:00
sutra   Эх, если бы за один присест получить доступ к памя...   13.11.2018, 0:16
DarkMaster   Может быть рассчитан на основе кооридант. Т.е. ег...   13.11.2018, 0:21
sutra   Спасибо Дарк. Я не знал про переменные. В Паскале ...   13.11.2018, 0:39
DarkMaster   Это регэкспы. Можно почтиать в regex, но в луа он...   13.11.2018, 0:46
sutra   Спасибо на добром слове Дарк. Примерно я понимаю. ...   13.11.2018, 1:01
sutra   А вот это не факт. Каркать не стану, но сдаётся м...   13.11.2018, 1:32
7 страниц V  1 2 3 > » 


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

 

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