Author Topic: Еще по GETSCREEN вопрос...  (Read 8726 times)

0 Members and 3 Guests are viewing this topic.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Еще по GETSCREEN вопрос...
« on: July 27, 2014, 10:38:01 AM »
Ребят, предположим, что есть цвет xxx и есть цвет yyy. Эти пиксели разбросаны по экрану. Мне нужен xxx, но только там, где в радиусе 10-15 пикслей возле него нет yyy. Как это реализовать в GETSCREEN, а?
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #1 on: July 27, 2014, 02:35:38 PM »
найти  массив координат xxx и массив координат yyy
а потом уже какойто математической формулой сравнивать насколько от данной конкретной xxx удалены все yyy

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #2 on: July 27, 2014, 03:21:47 PM »
Мда... А примером скрипта можно...?
Я не ду... Потому и не бу...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #3 on: July 27, 2014, 04:02:20 PM »
Можно и без формул.
Code: (clickermann) [Select]
GETSCREEN
SCANPXL($ARR_SCAN, 0,0, $_xmax,$_ymax, 255) // цвет xxx
$ARR_NUM = 0
$SHIFT_X = 1 // смещение
$SHIFT_Y = 1
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
   $X = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   $Y = $ARR_SCAN [$ARR_NUM]
   INC($ARR_NUM,1)
   IF(($X > $X2) | ($Y > $Y2))
      $X2 = $X + $SHIFT_X
      $Y2 = $Y + $SHIFT_Y
      IF_PIXEL_IN($X-7,$Y-7, $X+7,$Y+7, 16777215) // цвет yyy
         WAITMS(1)
      ELSE
         LCLICK($X, $Y)
         WAITMS(100)
      END_IF
   END_IF
END_CYC
UNDEFINE($ARR_SCAN)

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #4 on: July 27, 2014, 04:21:55 PM »
ну как то так
не уверен в работоспособности потому как надо проверять синтаксис
Code: (clickermann) [Select]
GETSCREEN
SCANPXL($ARR_XXX, 0,0, $_xmax,$_ymax, $color_xxx)
SCANPXL($ARR_YYY, 0,0, $_xmax,$_ymax, $color_yyy)
while(arrsize($ARR_XXX) > 0) // берем координаты xxx
$y1 = arrpop($ARR_XXX)
$x1 = arrpop($ARR_XXX)
while(arrsize($ARR_YYY) > 0) // берем координаты yyy
$y2 = arrpop($ARR_YYY)
$x2 = arrpop($ARR_YYY)
$l = sqrt(($x2-$x1)($x2-$x1)+($y2-$y1)($y2-$y1))  // вычисляем длину между координатами
if($l > 12) // если длина больше 12 заносим в массив  устраивающих нас результатов
arrpush($result, $x1)
arrpush($result, $y1)
end_if
end_cyc
end_cyc
« Last Edit: July 27, 2014, 04:42:19 PM by aden »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #5 on: July 27, 2014, 04:59:50 PM »
Спс большое! Я верхним скриптом обойдусь...))
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #6 on: July 27, 2014, 07:44:53 PM »
"надо проверять синтаксис" - слова-то какие тут знают... Чтоб внести ясность - я окончил 8 классов интерната и всё ))
Я не ду... Потому и не бу...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #7 on: July 27, 2014, 08:08:47 PM »
"надо проверять синтаксис" - слова-то какие тут знают... Чтоб внести ясность - я окончил 8 классов интерната и всё ))

слова вроде как слова, а скрипт должен быть рабочим просто надо проверить в действии

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #8 on: July 27, 2014, 11:02:22 PM »
Ну ты прости - я привык тут "черному коту" и "космонавту" доверять в первую очередь )) У них скрипты всегда рабочие и по ним хоть как-то постепенно логику понять можно. Ну хоть чуть-чуть )) Но за то, что откликнулся, большое спасибо! ))
Я не ду... Потому и не бу...

blackhawk2k

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #9 on: August 09, 2014, 07:38:04 AM »
не хочу плодить темы по GETSCREEN, но уперся в одну проблему :( не корректно работает скрипт

GETSCREEN
// поиск красного или зеленого или пурпурного пикселя
IF_PIXEL_IN (20,40, 1290, 800, 255, 15002625, 16748973)
 lclick($_return1, $_return2)
   WAITMS(100)
// нашли красный или зеленый или пурпурный пиксель, заходим в меню

// если есть красного пиксель, то жмем кнопку LCLICK(678,802) атакуем
IF_PIXEL_IN (550,784, 797, 839, 255)
 lclick($_return1, $_return2)
     WAIT (2)
    LCLICK(678,802)

ELSE // если нет красного пикселя то ищем серый пиксель и жмем кнопку LCLICK(1369,96) закрываем меню

// поиск серого пикселя
IF_PIXEL_IN (550,784, 797, 839, 4276287)
 lclick($_return1, $_return2)
    WAIT (2)
    LCLICK(1369,96) // закрываем меню
END_IF
  WAITMS(1000)   

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #10 on: August 09, 2014, 08:50:48 AM »
не хочу плодить темы по GETSCREEN, но уперся в одну проблему :( не корректно работает скрипт


каждый IF_ должен заканчиваться END_IF, и незабывай про GETSCREEN при смене картинки на экране.

Code: (clickermann) [Select]
GETSCREEN
// поиск красного или зеленого или пурпурного пикселя
IF_PIXEL_IN (20,40, 1290, 800, 255, 15002625, 16748973)
   lclick($_return1, $_return2)
END_IF
WAIT (1)
// нашли красный или зеленый или пурпурный пиксель, заходим в меню
GETSCREEN
// если есть красного пиксель, то жмем кнопку LCLICK(678,802) атакуем
IF_PIXEL_IN (550,784, 797, 839, 255)
   lclick($_return1, $_return2)
   WAIT (2)
   LCLICK(678,802)
   
ELSE  // если нет красного пикселя то ищем серый пиксель и жмем кнопку LCLICK(1369,96) закрываем меню
   
   // поиск серого пикселя
   IF_PIXEL_IN (550,784, 797, 839, 4276287)
      lclick($_return1, $_return2)
      WAIT (2)
      LCLICK(1369,96) // закрываем меню
   END_IF
END_IF
WAITMS(1000)
« Last Edit: August 09, 2014, 08:56:05 AM by dramster »

blackhawk2k

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #11 on: August 09, 2014, 11:36:15 AM »
Большое спасибо, за подсказку.

blackhawk2k

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #12 on: August 12, 2014, 05:08:26 PM »
Уважаемы гуру, помогите допилить скрипт, логику вроде прописал, но не пойму где ошибка, я только учусь :)

Задача скрипта по приоритетам:

1. Сканирование карты на наличие красного пикселя (работает)
2. Заходим в найденную базу красных (работает)
3. А вот дальше проблема с условиями :( мне нужно чтобы в определенном месте меню базы скрипт искал через функцию DEFINE значения от 0 до 2 и делал соответствующие действия.
    - например если нет противников на базе то есть 0 то закрываем меню базы и продолжаем искать красные пиксели (они периодически спавнятся)
    - если есть противник на базе от 1 до 2 и более то атакуем базу (при нажатии на кнопку атаки, меню базы закрывается автоматически) и продолжаем дальше искать цели красные пиксели на карте
    - если в процессе поиска красного пикселя флот зашел на другую базу красных для атаки, а там будет гореть серая кнопка не позволяющая атаковать, то закрываем меню базы

Вот вся логика, хелп плз :)

Code: (clickermann) [Select]
$K_SPEED = 4  // Delay multiplier
DEFINE ($var000, 2528328279)//0 противников
DEFINE ($var001, 2074897902)//1 противник
DEFINE ($var002, 2911676177)//2 противника
DEFINE ($var003, 3851769229)//STOP

wndpos( wndfind("BlueStacks App Player"), 0, 0) // перемещаем окно в угол

LCLICK(1552,560)  // забираем тех. очки
WAIT (2)
LCLICK(159,189)  // марш

GETSCREEN
// поиск красного пикселя на карте
IF_PIXEL_IN (32,244, 1465, 800, 8487423)
   lclick($_return1, $_return2) 
END_IF

// нашли красный пиксель, заходим в меню

WAIT (1)

GETSCREEN
$count = PXLCRC (897, 558, 934, 579)
logwrite("Hash: ", $count)
print($count)

WAIT(1)

GETSCREEN
$count = PXLCRC (897, 558, 934, 579)
logwrite("STOP: ", $count1)
print($count1)

//Если 0 противников то выходим из меню

IF($count1 = $var003 )
      WAIT (2)
      LCLICK(1369,96) // закрываем меню
END_IF

//Если противников 0 то закрываем меню, если не 0 то жмем кнопку атака

IF($count = $var000 )

else
skip:
GETSCREEN 
$count = PXLCRC (897,558, 934, 579)
logwrite("Hash: ", $count)
print($count)

       //условие поиск противников выше 1
        IF (($count = $var001) | ($count = $var002))

        LCLICK(678,802)  //кнпока атака
WAIT(1)           //пауза 1 сек

GETSCREEN
$count = PXLCRC (897,558, 934, 579)
logwrite("STOP1: ", $count2)
print($count2)

IF($count2 = $var003 )
HALT
    END_IF
       goto(skip)
    END_IF
END_IF
« Last Edit: August 12, 2014, 05:13:30 PM by blackhawk2k »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #13 on: August 13, 2014, 09:44:52 AM »
Может в стр.31 должно быть $count1
И зачем там вообще $count и $count1 если область у них одна и значение одно? Или я не до конца понял.

Code: (clickermann) [Select]
DEFINE ($var000, 2528328279)//0 противников
//DEFINE ($var001, 2074897902)//1 противник
//DEFINE ($var002, 2911676177)//2 противника
DEFINE ($var003, 3851769229)//STOP

wndpos( wndfind("BlueStacks App Player"), 0, 0) // перемещаем окно в угол

LCLICK(1552,560)  // забираем тех. очки
WAIT (2)
LCLICK(159,189)  // марш

WHILE(1)
   GETSCREEN
   // поиск красного пикселя на карте
   IF_PIXEL_IN (32,244, 1465, 800, 8487423)
      // нашли красный пиксель, заходим в меню
      lclick($_return1, $_return2)
      WAIT (1)
     
      GETSCREEN
      $count = PXLCRC (897, 558, 934, 579)
      logwrite("Hash: ", $count)
      print($count)
     
      IF (($count = $var000) | ($count = $var003)) // если 0 или STOP выходим
         IF($count = $var003 )
            WAIT (2)
            LCLICK(1369,96) // закрываем меню
         END_IF
      ELSE  // 1 и больше
         LCLICK(678,802)  //кнопка атака
      END_IF
      WAIT(1)
   ELSE
      WAIT(1)
   END_IF
END_CYC
« Last Edit: August 13, 2014, 04:50:03 PM by Vint »


blackhawk2k

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Еще по GETSCREEN вопрос...
« Reply #14 on: August 13, 2014, 04:53:49 PM »
Может в стр.31 должно быть $count1
И зачем там вообще $count и $count1 если область у них одна и значение одно? Или я не до конца понял.

Да...это что то лишнего я добавил, каюсь, проверить ваш скрипт смогу только через 3-4 дня, так как в жуткой глуши нахожусь.
Спасибо за ответ.