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

7 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Сценарий поиска нескольких ресурсов, С интерфейсом
esqado
сообщение 17.3.2012, 17:01
Сообщение #1


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Сценарий поиска цифр в заданной области для нескольких ресурсов.
(IMG:http://savepic.su/1613040m.jpg)
(IMG:http://s1.hostingkartinok.com/uploads/thumbs/2012/03/09c8aa718cc98d3a4aa8df8d9235d7be.png)
Координаты, количество, имена картинок и путь к картинкам не обязательно вписывать в код.
При запуске команда prompt запрашивает у пользователя данные для дальнейшей работы.
Будьте аккуратны с вводом данных. При ошибке сценарий работать не будет!
Путь к файлам должен заканчиваться знаком "\" (естественно без кавычек).
Сценарий не понимает точки, разделяющие числа.
Внимательно смотрите за картинками чисел. В данном примере из двух четверок находилась только одна.
Смотрите пример, как обрезать цифру, чтобы она определялась
Так же необходимы картинки самих ресурсов (в примере: золото, серебро, медь, бриллиант).
Имена файлов ресурсов рекомендую сохранять на русском языке. В дальнейшем они будут отображаться в конечном результате.
Можно искать не все ресурсы. Например бриллианты используются редко и брать их в расчёт при подсчёте нет необходимости.


Поиск цифр с "интерфейсом"

Код

// Сценарий поиска изображений в заданной области

set $bmp .bmp
// Запрос данных от пользователя
// Команда prompt записывает в переменные данные от пользователя
set $path prompt (Укажите путь к файлам картинок)
set $startX prompt (Начальная координата по оси X)
set $startY prompt (Начальная координата по оси Y)
set $endX prompt (Конечная координата по оси X)
set $endY prompt (Конечная координата по оси Y)
set $resource prompt (Введите колличество ваших ресурсов)
for #c 1 $resource
set $resName prompt (Введите название ресурса /nНазвание должно соответствовать имени фалйа)
set %cash[#c] $resName
end_for
set #h $resource + 1
set %cashCrdsX[1 #h] $endX
//+++++++++++++++++++++++++++++++++++++
// Поиск изображений ресурсов
for #i 1 $resource
   set #a findimage ($startX $startY $endX $endY ($path%cash[#i].bmp) %crds 2)
   set %cashCrdsX[1 #i] %crds[1 1]
end_for
//+++++++++++++++++++++++++++++++++++++
// Поиск цифр в пределах "ячейки" ресурса
for #w 1 $resource
   set #startX %cashCrdsX[1 #w]
   set #end #w + 1
   set #endX %cashCrdsX[1 #end]
   set #s 1
   for #step 0 9
// Поиск изображений
// Конечными координатами для области картинок являются стартовые координаты следующего ресурса
    set $check findimage (#startX $startY #endX $endY (images\numbers\money\#step$bmp) %crds 2 88 -1)
// Проверка на наличие
      if $check > 0
         set #size size (%crds)
            for #i 1 #size
// Запись в массив %m[#s 1] числа, %m[#s 2]координаты
               set %m[#s 2] #step
               set %m[#s 1] %crds[#i 1]
               set #s #s + 1              
            end_for
      end_if
   end_for
   gosub sort
end_for
// Собираем в строку все данные массива
for #q 1 #c
set $cash $cash %cash[#q] - %money[#q]
end_for
// Вывод данных
msg У вас $cash
end_script
//=====================================
:sort
// Сортировка массива координат найденных картинок
// Присваиваем переменной размер массива                
set #n size (%m)
hint Отдельное спасибо Zeleax за код сортировки массива
// Сортируем массив
for #i 1 #n
   set #min %m[#i 1]
   set #imin #i
   set #ii #i + 1
   for #j #ii #n
      if %m[#j 1] < #min
         set #min %m[#j 1]
         set #imin #j
      end_if  
   end_for
// меняем местами минимальный элемент с текущим, используя промежуточную #z
   set #z %m[#i 1]
   set %m[#i 1] %m[#imin 1]
   set %m[#imin 1] #z  
   set #z %m[#i 2]
   set %m[#i 2] %m[#imin 2]
   set %m[#imin 2] #z  
end_for
// Соберем все элементы в одну текстовую строку
set $s // пустая строка
for #i 1 #n
   set $s $s%m[#i 2] //(X= %m[#i 1]) // добавляем каждый элемент в конец строки  
// Записываем в массив строку
   set %money[#w] $s
end_for
// Обнуляем массив
set $a findcolor ( 1, 1 2, 2 1 1 167772150 %m 1)
return


Не забываем привязывать до запуска


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 4.6.2012, 14:12
Сообщение #2


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



Код
set $path D:\images\
set $startX 211
set $startY 232
set $endX 296
set $endY 255
set $resource 494
for #c 1 $resource
set $resName серебро
set %cash[#c] $resName
end_for
set #h $resource + 1
set %cashCrdsX[1 #h] $endX
//+++++++++++++++++++++++++++++++++++++
// Поиск изображений ресурсов
for #i 1 $resource
   set #a findimage ($startX $startY $endX $endY ($path%cash[#i].jpg) %crds 2)
   set %cashCrdsX[1 #i] %crds[1 1]
end_for
//+++++++++++++++++++++++++++++++++++++
// Поиск цифр в пределах "ячейки" ресурса
for #w 1 $resource
   set #startX %cashCrdsX[1 #w]
   set #end #w + 1
   set #endX %cashCrdsX[1 #end]
   set #s 1
   for #step 0 9
// Поиск изображений
// Конечными координатами для области картинок являются стартовые координаты следующего ресурса
    set $check findimage (#startX $startY #endX $endY (images\numbers\money\#step$bmp) %crds 2 88 -1)
// Проверка на наличие
      if $check > 0
         set #size size (%crds)
            for #i 1 #size
// Запись в массив %m[#s 1] числа, %m[#s 2]координаты
               set %m[#s 2] #step
               set %m[#s 1] %crds[#i 1]
               set #s #s + 1              
            end_for
      end_if
   end_for
   gosub sort
end_for
// Собираем в строку все данные массива
for #q 1 #c
set $cash $cash %cash[#q] - %money[#q]
end_for
// Вывод данных
msg У вас $cash
end_script
//=====================================
:sort
// Сортировка массива координат найденных картинок
// Присваиваем переменной размер массива                
set #n size (%m)
hint Отдельное спасибо Zeleax за код сортировки массива
// Сортируем массив
for #i 1 #n
   set #min %m[#i 1]
   set #imin #i
   set #ii #i + 1
   for #j #ii #n
      if %m[#j 1] < #min
         set #min %m[#j 1]
         set #imin #j
      end_if  
   end_for
// меняем местами минимальный элемент с текущим, используя промежуточную #z
   set #z %m[#i 1]
   set %m[#i 1] %m[#imin 1]
   set %m[#imin 1] #z  
   set #z %m[#i 2]
   set %m[#i 2] %m[#imin 2]
   set %m[#imin 2] #z  
end_for
// Соберем все элементы в одну текстовую строку
set $s // пустая строка
for #i 1 #n
   set $s $s%m[#i 2] //(X= %m[#i 1]) // добавляем каждый элемент в конец строки  
// Записываем в массив строку
   set %money[#w] $s
end_for
// Обнуляем массив
set $a findcolor ( 1, 1 2, 2 1 1 167772150 %m 1)
return

у меня бот останваливаетса на етом месте
for #c 1 $resource
set $resName серебро
set %cash[#c] $resName
end_for
точнее повторяет постоянно его . Подскажите в чем проблема ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 4.6.2012, 16:01
Сообщение #3


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Цитата
set $resource 494
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 4.6.2012, 16:07
Сообщение #4


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Код
set $resource 494

Следующий за этой строкой цикл повторяется $resource раз. В данном случае 494.
Тут надо указывать не сколько денег в кармане, а какие деньги в кармане:
У меня в кармане есть монеты и бумажки - $resource = 2
У меня в кармане есть монеты, бумажки и банка с нефтью - $resource = 3

зы Надеюсь доступно разъяснил

зыы Если есть идеи, как это правильно объяснить - подскажи. Буду признателен.


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 4.6.2012, 18:01
Сообщение #5


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



"сколько видов денег"

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


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



а в чём разница между видом и типом?


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 6.6.2012, 16:27
Сообщение #7


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



Код
// Сценарий поиска изображений в заданной области

set $path С:\images\
set $startX 211
set $startY 232
set $endX 296
set $endY 255
set $bmp .bmp


set #s 1
for #step 0 9
// Поиск изображений
   set $check findimage ($startX $startY $endX $endY (С:\images\#step$bmp) %crds 2 88 -1)
// Проверка на наличие
   if $check > 0
      set #size size (%crds)
         for #i 1 #size
// Запись в массив %m[#s 1] числа, %m[#s 2]координаты
            set %m[#s 2] #step
            set %m[#s 1] %crds[#i 1]
            set #s #s + 1                
         end_for
   end_if
end_for

// Присваиваем переменной размер массива                        
set #n size (%m)
hint Отдельное спасибо Zeleax за код сортировки массива
// Сортируем массив
for #i 1 #n
   set #min %m[#i 1]
   set #imin #i
   set #ii #i + 1
   for #j #ii #n
      if %m[#j 1] < #min
         set #min %m[#j 1]
         set #imin #j
      end_if  
   end_for
   // меняем местами минимальный элемент с текущим, используя промежуточную #z
   set #z %m[#i 1]
   set %m[#i 1] %m[#imin 1]
   set %m[#imin 1] #z  
   set #z %m[#i 2]
   set %m[#i 2] %m[#imin 2]
   set %m[#imin 2] #z  
end_for
// Соберем все элементы в одну текстовую строку
set $s // пустая строка
for #i 1 #n
   set $s $s%m[#i 2] //(X= %m[#i 1]) // добавляем каждый элемент в конец строки  
end_for
msg Ваше число: $s
end_script

почему у меня ошибка типа file not found цыфры норм нарезал , и в формате .bmp , путь тоже указал правильно . В чем проблема ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 6.6.2012, 17:08
Сообщение #8


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



проверьте букву диска в забитом в скрипте пути, такого диска как там указан - не существует.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 6.6.2012, 17:28
Сообщение #9


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



теперь уже вроде нет ошибки , но останавливаетса сдесь if $check > 0
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 6.6.2012, 18:18
Сообщение #10


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Что значит останавливается?
Открой панель Параметры чара и сделай скрин.


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 6.6.2012, 19:50
Сообщение #11


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



http://SSMaker.ru/c20879fd/ вот которое значение мне нужно сканить
Вроде разобрался уже сам
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 7.6.2012, 12:08
Сообщение #12


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



не могу вывестизначение которое скрипт сканировал
// Сценарий поиска изображений в заданной области

set $path C:\Users\Евгений\Desktop\images\
set $startX 161
set $startY 224
set $endX 273
set $endY 257
set $bmp .bmp



set #s 1
for #step 0 9
// Поиск изображений
set $check findimage ($startX $startY $endX $endY (C:\Users\Евгений\Desktop\images\#step$bmp) %crds 2 88 -1)
// Проверка на наличие
if $check > 0
set #size size (%crds)
for #i 1 #size
// Запись в массив %m[#s 1] числа, %m[#s 2]координаты
set %m[#s 2] #step
set %m[#s 1] %crds[#i 1]
set #s #s + 1
end_for
end_if
end_for

// Присваиваем переменной размер массива
set #n size (%m)
// Сортируем массив
for #i 1 #n
set #min %m[#i 1]
set #imin #i
set #ii #i + 1
for #j #ii #n
if %m[#j 1] < #min
set #min %m[#j 1]
set #imin #j
end_if
end_for
// меняем местами минимальный элемент с текущим, используя промежуточную #z
set #z %m[#i 1]
set %m[#i 1] %m[#imin 1]
set %m[#imin 1] #z
set #z %m[#i 2]
set %m[#i 2] %m[#imin 2]
set %m[#imin 2] #z
end_for
// Соберем все элементы в одну текстовую строку
set $s // пустая строка
for #i 1 #n
set $s $s%m[#i 2] //(X= %m[#i 1]) // добавляем каждый элемент в конец строки
end_for
msg Ваше число: $s
end_script
вот в конце скрипта выводит . Ваше число 10 , хотя там число 1234567890 . В чем проблема ? Картинуи вроде нарезал нормально
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 7.6.2012, 12:41
Сообщение #13


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



Все сделал , всем спасибо за помощь
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 7.6.2012, 12:43
Сообщение #14


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(Cooll @ 7.6.2012, 12:41) *

Все сделал , всем спасибо за помощь

а почему не работало правильно?


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 7.6.2012, 13:00
Сообщение #15


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



у меня сдесь for #step 0 9 было не 0 9 , а 0 1
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 7.6.2012, 17:43
Сообщение #16


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Если не сложно - уберите код под спойлер.
Я вчера посмотрел, почему не получалось с самого начала.
Дело в том, что сценарий сначала находит изображение ресурса (на скрине монетка и меч). А потом от них в положительную сторону по оси Х ищет значение (см. скрин в шапке).
У вас же ситуация обратная: сначала показывает количество, а потом тип.
Можно будет подумать, как подогнать для вас сценарий.


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 7.6.2012, 21:52
Сообщение #17


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



Вот у меня проблема , ищет числа через раз . Обрезал уже нормально , чтоб они не мешали друг другу , но проблема в том что не хочет бывает вытягивать значение монет когда их например 7475
, и как только настроил чтоб находило норм , цифры из числа 7475 , попадаютса уже в другой раз , и работать не хочет .Бывает что находит только парц цифр , бывает не находит вообще
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 8.6.2012, 1:06
Сообщение #18


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



А какая винда? Стоит сглаживание шрифтов? Процент совпадения настраивал?


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cooll
сообщение 8.6.2012, 9:12
Сообщение #19


***

Novice
Сообщений: 54
Регистрация: 16.5.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.964
Возраст: 15



Цитата(zavas @ 8.6.2012, 1:06) *

А какая винда? Стоит сглаживание шрифтов? Процент совпадения настраивал?

win 7 64bit

Цитата(zavas @ 8.6.2012, 1:06) *

А какая винда? Стоит сглаживание шрифтов? Процент совпадения настраивал?

А как настроить процент совпадения ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.6.2012, 9:36
Сообщение #20


***********

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



Цитата
А как настроить процент совпадения ?

http://uopilot.tati.pro/index.php?title=Findimage


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

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

 

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