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

 
Ответить в эту темуОткрыть новую тему
> Бот для добычи ресурсов. Троецарствие
Nekto
сообщение 23.2.2018, 20:53
Сообщение #1


*

Registred
Сообщений: 3
Регистрация: 17.2.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.839
Возраст: 25



Привет!
Пишу потихоньку бота, замысел такой:
нахожу картинку ресурса
записываю её координаты из массива в переменные
т.к. искать цвет нужно относительно найденного ресурса, "расширяю" область поиска цвета, добавляя или отнимая координаты точек
иду в подпрограмму проверку цвета
если нахожу цвет - тыкаю в кнопку отмены
Вот код.
Код
set #b 1
if #b = 1
set #a FindImage(573 187 1368 980 (image\1.bmp) %arr workwindow)
if  #a > 0
  set #x %arr [1 1]
  set #y %arr [1 2]
  set #q %arr [1 3]
  set #z %arr [1 4]
  set #x1 #x - 25
  set #y1 #y - 25
  set #q1 #q + 25
  set #z1 #z + 25
  double_kleft #x #y
  gosub proverka
  wait 100
else
set #b 2
end_if
end_if
end_script

:proverka
set timer
set #time 25000 + random (5000)
set #prov -1
while #prov <= 0
set #prov findcolor (#x1 #y1 #q1 #z1 (528786) %pro workwindow 1)
wait 100
if timer < #time
end_while
else
return
end_if
set #b 2
wait 100
return

:otmena
wait 1000 + random (1000)
kleft 918 216 5 5 5 5 abs
wait 1000
return

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


**********

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



Код
while #prov <= 0
    set #prov findcolor (#x1 #y1 #q1 #z1 (528786) %pro workwindow 1)
    wait 100
    if  timer < #time
    end_while
else
    return
end_if

if находится в цикле while, а end_if за пределами цикла. Такого быть не должно.
Код
while #prov <= 0
    set #prov findcolor (#x1 #y1 #q1 #z1 (528786) %pro workwindow 1)
    wait 100
    if  timer > #time
        return
    end_if
end_while
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Nekto
сообщение 25.2.2018, 11:52
Сообщение #3


*

Registred
Сообщений: 3
Регистрация: 17.2.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.839
Возраст: 25



Спасибо, поправил!

Дополнил код, но не пойму, почему после работы подпрограммы proverka я все-равно иду в подпрограмму otmena?
Код
set findoffsetx 5 + random (7)
set findoffsety 5 + random (7)
set MouseClickDelay 200 + random(50)
set #handleWin findwindow (TTksClientForm)
set workwindow #handleWin

kleft 602 209 5 5 abs // север
wait 1000
gosub poisk
kleft 615 227 5 5 abs // восток
wait 1000
gosub poisk
kleft 600 244 5 5 abs // юг
wait 1000
gosub poisk
kleft 580 225 5 5 abs // запад
wait 1000
gosub poisk
end_script

:poisk
set #b 1
while #b < 3
set #a FindImage(573 187 1368 980 (image\3.bmp) %arr workwindow)
if  #a > 0
  set #x %arr [1 1]
  set #y %arr [1 2]
  set #q %arr [1 3]
  set #z %arr [1 4]
  set #x1 #x - 45
  set #y1 #y - 10
  set #q1 #q + 45
  set #z1 #z + 85
  double_kleft #x #y
  gosub proverka
  wait 100
else
set #b #b + 3
end_if
end_while

set #b 1
while #b < 3
set #a FindImage(573 187 1368 980 (image\4.bmp) %arr workwindow)
if  #a > 0
  set #x %arr [1 1]
  set #y %arr [1 2]
  set #q %arr [1 3]
  set #z %arr [1 4]
  set #x1 #x - 45
  set #y1 #y - 10
  set #q1 #q + 45
  set #z1 #z + 85
  double_kleft #x #y
  gosub proverka
  wait 100
else
set #b #b + 3
end_if
end_while

set #b 1
while #b < 3
set #a FindImage(573 187 1368 980 (image\1.bmp) %arr workwindow)
if  #a > 0
  set #x %arr [1 1]
  set #y %arr [1 2]
  set #q %arr [1 3]
  set #z %arr [1 4]
  set #x1 #x - 45
  set #y1 #y - 10
  set #q1 #q + 45
  set #z1 #z + 85
  double_kleft #x #y
  gosub proverka
  wait 100
else
set #b #b + 3
end_if
end_while

set #b 1
while #b < 3
set #a FindImage(573 187 1368 980 (image\2.bmp) %arr workwindow)
if  #a > 0
  set #x %arr [1 1]
  set #y %arr [1 2]
  set #q %arr [1 3]
  set #z %arr [1 4]
  set #x1 #x - 45
  set #y1 #y - 10
  set #q1 #q + 45
  set #z1 #z + 85
  log #x1 #y1 #q1 z1
  double_kleft #x #y
  gosub proverka
  wait 100
else
set #b #b + 3
end_if
end_while
return

:proverka
set timer
set #time 25000 + random (5000)
set #prov -1
while #prov <= 0
    set #prov findcolor (#x1 #y1 #q1 #z1 (857490) %pro workwindow 1 5)
    wait 100
    if  timer > #time
    return
    end_if
end_while
if #prov > 0
gosub otmena
return
end_if
return

:otmena
kleft 918 216 5 5 5 5 abs
set #b #b + 1
wait 1000 + random (1000)
return
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.2.2018, 12:22
Сообщение #4


**********

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



Цитата
почему после работы подпрограммы proverka я все-равно иду в подпрограмму otmena?

Вариант только один:
Код
if #prov > 0   // значит условие выполнено
gosub otmena
return
end_if

Учитывая область поиска поиска 90*95 пикселей и погрешность в цвете в 5% может быть найдено несколько похожих цветов. Может стоит уменьшить deviation, последний параметр в findcolor.
Или ещё вариант:
Код
while #prov <= 0
    set #prov findcolor (#x1 #y1 #q1 #z1 (857490) %pro workwindow -1 5)  // -1 ищем все цвета
    wait 100
    if  timer > #time
        return
    end_if
end_while
log #prov
if  #prov > 20  // сравниваем не с 0, подобрать нужно значение
    gosub otmena
    return
end_if

Код
set #x %arr [1 1]
set #y %arr [1 2]
set #q %arr [1 3]
set #z %arr [1 4]
set #x1 #x - 45
set #y1 #y - 10
set #q1 #q + 45
set #z1 #z + 85
log #x1 #y1 #q1 z1
double_kleft #x #y

Тоже самое:
Код
set #x1 %arr [1 1] - 45
set #y1 %arr [1 2] - 10
set #q1 %arr [1 3] + 45
set #z1 %arr [1 4] + 85
log #x1 #y1 #q1 z1
double_kleft %arr [1 1] %arr [1 2]

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Nekto
сообщение 25.2.2018, 13:26
Сообщение #5


*

Registred
Сообщений: 3
Регистрация: 17.2.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.839
Возраст: 25



Сделал так:
Код
set #b 1
while #b < 3
set #a FindImage(573 187 1368 980 (image\2.bmp) %arr workwindow)
if  #a > 0
  set #x1 %arr [1 1] - 45
  set #y1 %arr [1 2] - 10
  set #q1 %arr [1 3] + 45
  set #z1 %arr [1 4] + 85
  double_kleft %arr [1 1] %arr [1 2]
  gosub proverka
  wait 100
else
set #b #b + 3
end_if
end_while
return

:proverka
set timer
set #time 25000 + random (3000)
set #prov -1
while #prov <= 0
    set #prov findcolor (#x1 #y1 #q1 #z1 (857490) %pro workwindow -1 3)
    wait 100
    if  timer > #time
    return
    end_if
end_while
log #prov
if #prov > 1
gosub otmena
wait 100
return
end_if
return

:otmena
kleft 918 216 5 5 5 5 abs
set #b #b + 1
wait 1000 + random (1000)
return

Работает, спасибо.

Хочу еще добавить таймер, чтобы proverka не постоянно молотила, а раз в 2-3 секунды
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.2.2018, 13:49
Сообщение #6


**********

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



Цитата
Хочу еще добавить таймер, чтобы proverka не постоянно молотила, а раз в 2-3 секунды

Код
set #proverka 0   // в начало скрипта


set #z1 %arr [1 4] + 85
double_kleft %arr [1 1] %arr [1 2]
if  #proverka < timer1   // если #proverka меньше timer1
      gosub proverka
      set #proverka timer1 + 3000   //  следующая проверка через 3 секунды
end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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