Author Topic: Гнев Богов  (Read 33255 times)

0 Members and 1 Guest are viewing this topic.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Гнев Богов
« on: October 17, 2012, 06:30:43 AM »
День добрый)
Пришел на этот сайт с просьбой помочь сделать скрипт для ГБ. Теперь он готов. Работает с разрешениями 1280*1024 и 1600*900. Под другие мониторы надо корректировать (мне не за надобностью, поэтому не делал) если что - свистите. В обязательном порядке скорректировать координаты кликов на кнопки перехода в магазин и почту!!!
Тут старая версия скрипта[spoiler] И скачать файл 1.bmp - без него почту чистить если и будет, то коряво. Скрипт настроен на работу кликера в оконном режиме.
Code: [Select]
//Чистка почты и продажа лута в магаз
$c1 = 4079426
$c2 = 592154
$c3 = 1399552

LCLICK(863,81)    // кнопка быстрого перехода в магазин(вынесена на панель закладок у меня в мазиле)  менять координаты!!!
WAIT(10)
GETSCREEN
IF_PIXEL_IN(500,200, 800, 600, 1919430)
   $x = $_return1
   $y = $_return2
else
   goto(M)
END_IF
$x3 = $x-200
$x4 = $x-150
$y3 = $y+22
$y4 = $y+34
$z =  $y+305
mag:
TRAYSAY("Продаю хлам")  //строки с TRAYSAY можно удалить, если вас раздражают всплывающие сообщения.
WHILE($z>$y3)
   $b = 0
   WHILE($b = 0)
      getscreen
      if_pixel_in($x3, $y3, $x4, $y4, $c1, $c2, $c3)
         LCLICK($x, $_return2+25)
         WAITMS(RND(300,500))
         KEYPRESS(#ENTER)
         GOSUB(PROD)
      else
         INC($y3,50)
         INC($y4,50)
         $b = 1
      END_IF
   END_CYC
END_CYC
// синь, фио
getscreen
if_pixel_in($x3, $y3+300, $x4, $y4+300, 11438, 9437313, 9456128)
   SOUND("pause.wav")
   TRAYSAY("Забито синь или фио") // я эти строки сделал что бы видеть - скрипт работает вообще или нет.
  //сам в это время в другом бразе ползаю.
   HALT
end_if
M://почта
TRAYSAY("Чищу почту")
LCLICK(929,81)            //кнопка быстрого перехода на почту(тоже на панели закладок)    менять координаты!!!
WAIT(RND(12,20))
po:
GETSCREEN
if_pixel_in(700, 230, 900, 320, 11982062)
   $x2 = $_return1
   $y2 = $_return2
   LCLICK($_return1+10, $_return2+2)
else
   goto(F)
end_if
GOSUB(Z)
GETSCREEN
if_pixel_in(800, 230, 1100, 600, 1860254)
   WAITMS(1400)  // время ожидания можно уменьшить(у меня инет тупит часто, поэтому выставил побольше задержку)
else
   goto(W)
end_if
LCLICK($x2+20,$y2+256)
WAITMS(84)
LCLICK($x2+20,$y2+256)
GOSUB (WAIT_KN)
WAITMS(300)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
W:
LCLICK($x2+20,$y2+2)
GOSUB(Z)
LCLICK($x2+170,$y2+237)
GOSUB (WAIT_KN)
KEYPRESS(#ENTER)
GOSUB (WAIT_FON)
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN($x2-440,$y2+18,$x2-175,$y2+230, "1.bmp")
   COLORMODE(0)
   goto(po)
END_IF
COLORMODE(0)
F:
LCLICK(863,81)   //кнопка быстрого перехода в магазин.  менять координаты!!!
GOSUB(PROD)
GETSCREEN
IF_PIXEL_IN(500,200, 800, 600, 1919430)
   $x = $_return1
   $y = $_return2
END_IF
$x3 = $x-200
$x4 = $x-150
$y3 = $y+22
$y4 = $y+34
$z =  $y+305
GETSCREEN
IF_PIXEL_IN($x3, $y3, $x4, $y4+246,  $c1, $c2, $c3)
   goto(mag)
else
   HALT
end_if

SUB(PROD)
   $break = 0
   WHILE($break = 0)
      WAITMS(100)
      GETSCREEN
      IF_PIXEL_IN(550,200, 800, 600, 1919430)
         $break = 1
      END_IF
   END_CYC
END_SUB

SUB(WAIT_FON)
   $break = 0
   WHILE($break = 0)
      WAITMS(100)
      GETSCREEN
      IF_PIXEL_IN($x2-57, $y2+70, $x2-27, $y2+78, 1447960, 1382167, 1513753)
         $break = 1
      END_IF
   END_CYC
END_SUB

SUB(WAIT_KN)
   $break = 0
   WHILE($break = 0)
      WAITMS(100)
      GETSCREEN
      IF_PIXEL_IN($x2-235, $y2+40, $x2, $y2+270, 3617169)
         $break = 1
      END_IF
   END_CYC
END_SUB

SUB(Z)
   $break = 0
   WHILE($break = 0)
      WAITMS(100)
      GETSCREEN
      IF_PIXEL_IN(800, 500, 980, 590, 65568)
         $break = 1
      END_IF
   END_CYC
END_SUB
файл 1.bmp прилагается.[/spoiler] Свежая версия скрипта для экрана 1600*900 http://crapware.aidf.org/forum/index.php?topic=11.msg6489#msg6489
« Last Edit: July 30, 2014, 05:43:41 PM by Полуночник »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Гнев Богов
« Reply #1 on: October 17, 2012, 08:33:35 AM »
Ну ты ж сам написал что у иконок разные фоны. Значит тебе нужно искать и продавать зеленые и серые

Для каждой иконки определи цвет и координату пиксела (где нибудь в углу иконки)
100, 100 - координата пиксела
255 - первый цвет
3 - второй цвет
Всего должно получиться 7 условий


Code: [Select]
GETSCREEN

IF((PXL (100, 100) = 255) | (PXL (100, 100) = 3))// иконка 1
   LCLICK(1048,226) // клик по "Продать"
   WAITMS (500)
END_IF

IF((PXL (100, 100) = 255) | (PXL (100, 100) = 3)) // иконка 2
   LCLICK(1048,226)
   WAITMS (500)
END_IF

IF((PXL (100, 100) = 255) | (PXL (100, 100) = 3)) // иконка 3
   LCLICK(1048,226)
   WAITMS (500)
END_IF

IF((PXL (100, 100) = 255) | (PXL (100, 100) = 3)) // иконка 4
   LCLICK(1048,226)
   WAITMS (500)
END_IF

и тд....

WAITMS (100)
« Last Edit: October 17, 2012, 08:40:36 AM by Oraven »

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Re: Гнев Богов
« Reply #2 on: October 17, 2012, 09:40:36 PM »
Кстати, не забудь поставить кол-во цветов в скрине. Чтобы небольшое изменение тона в иконке не продало что не нужно.
Отсутствую.

WEREWOLF

  • Освоившийся
  • **
  • Posts: 28
  • Волчонок
    • View Profile
Re: Гнев Богов
« Reply #3 on: October 17, 2012, 09:43:20 PM »
и кстати если не в лом дай ссылочку хотя бы на того бота
просто я раньше тоже играл в гнев богов и докачался до 25 уровня и бросил.
Человек с душой волка
Волк с телом человека

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Re: Гнев Богов
« Reply #4 on: October 18, 2012, 05:24:57 PM »
 в том то и проблемма, что пытался я по пикселам выборку сделать. да тока в одной и той же точке координат цвет разный может быть не смотря что предметы все в одной категории(например обычные) Есть бот(не знаю откуда он и кто его разработал) который делает выборку по предметам и продаёт лут, а фио и синь оставляет. но во первых он работает только в хроме, а во вторых есть в нём кое какие ограничения изза которых не всегда могу им воспользоваться. например он работает только до 45 лвл персонажа. а у меня 55лвл. жаль я не разбираюсь в языках. так бы доработал бы ту прогу. Кому надо - могу скинуть на емейл архивчик с ней, весит не много, но как вложение не лезет сюды))  а так то ещё пользую iMacros но увы в нем нет условий (если то или).
Возник вопрос... есть ли возможность реализовать выборку не по пикселям, а по параметрам предметов? ведь эти самые параметры прописаны у каждой шмотки. может есть возможность прочитать их и потом уже действие....????  ну я нуб просто полный))) сорри
« Last Edit: October 18, 2012, 05:48:43 PM by prapor »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Гнев Богов
« Reply #5 on: October 18, 2012, 06:46:01 PM »
Нужно использовать цветокоррекцию, и думаю в твоем случает проще использовать IF_PIXEL_IN. Вставь несколько цветов если потребуется.
Помни, при наведении мыши кнопки могут менять цвет.

getscreen
// поиск красного или зеленого пиксела
IF_PIXEL_IN (10,20, 100, 40, 255, 65280)
 lclick(200, 300)
END_IF

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Re: Гнев Богов
« Reply #6 on: October 19, 2012, 10:11:02 AM »
Нет, по пикселам фигня получается. Вот результат по  цветам только фио шмота в одной точке координат: 7278415, 4132655, 7282511, 8326991, 5181247, 11476863  такая же история с синими и зелёными вещами. в одной точке координат вроде фон например зелёный, а по пикселям фигня получается, каждый раз цвет разный.  игрался с цветокорекцией тоже. так что выборка по цветам пролетает. или я дебил.

ikage

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Re: Гнев Богов
« Reply #7 on: October 19, 2012, 12:53:34 PM »
используй "colormode".скорее всего фон цвета меняется (незаметно для глаза)

скрин твоего фона
getscreen
colormode(2,100,100,200,200)
screenshot
colormode(0)

поиск пикселя

getscreen
colormode(2,100,100,200,200)
IF_PIXEL_IN(100,100,200,200,цвет)
lcick($_return1,$_return2)
END_IF
colormode(0)


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Гнев Богов
« Reply #8 on: October 19, 2012, 01:11:47 PM »
Нет, по пикселам фигня получается. Вот результат по  цветам только фио шмота в одной точке координат: 7278415, 4132655, 7282511, 8326991, 5181247, 11476863  такая же история с синими и зелёными вещами. в одной точке координат вроде фон например зелёный, а по пикселям фигня получается, каждый раз цвет разный.  игрался с цветокорекцией тоже. так что выборка по цветам пролетает. или я дебил.

Щас только разглядел, у тебя на скрине подписи к предметам тоже имеют свой цвет!
Используй IF_PIXEL_IN чтобы искать в области "подписи" нужный тебе цвет!

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Re: Гнев Богов
« Reply #9 on: October 19, 2012, 07:53:48 PM »
А вот это идея) как говорится всё гениальное просто)) будем пробовать по надписям. спс Oraven.
хотя по коду элемента самое простое было бы.
как уже писал все предметы делятся по категориям :
<div class="item_name grade4">
                  Цепь Чувств                </div>   
grade4 - это фио, 0 - лут, 1 - серый шмот, 2 - зелень, 3 - синь
вот тока как сделать по коду элемента(если это вообще возможно в кликере) не знаю...
« Last Edit: October 19, 2012, 08:22:49 PM by prapor »

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Re: Гнев Богов
« Reply #10 on: October 19, 2012, 11:16:38 PM »
Сделай для лута и серого шмота css стиль который облегчит его нахождение. Например:
Code: [Select]
.grade0{//Лут
margin-left:16px;
min-height:16px;
background-color:white;
color:black;
}
.grade1{//Серый шмот
margin-left:16px;
min-height:16px;
background-color:white;
color:black;
}
.grade2{//Синь
margin-left:16px;
min-height:16px;
background-color:black;
color:white;
}
.grade3{//Зелень
margin-left:16px;
min-height:16px;
background-color:black;
color:white;
}
Тогда у тебя будет шмот виден примерно как на прикрепленном пике. А дальше уже кликером проверяй, есть ли в нужной точке белый цвет. Если есть, то продавай.
Для пользовательских стилей можно юзать Stylish, гугли.
Отсутствую.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Re: Гнев Богов
« Reply #11 on: October 19, 2012, 11:34:47 PM »
я ещё не успел вникнуть в сравнение пикселов, а тут новая головоломка ;D  буду конечно пробовать. но хотелось бы сначала всётаки доразобраться вот с чем:
Code: [Select]
getscreen

if_pixel_in(480,249, 500,260, 2055951,5201775,3100527)
  LCLICK(693,277)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
else
if_pixel_in(480,298, 500,308, 2055951,5201775,3100527)
       LCLICK(694,323)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
  else
if_pixel_in(480,347, 500,358, 2055951,5201775,3100527)
       LCLICK(694,374)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
   else
if_pixel_in(480,396, 500,407, 2055951,5201775,3100527)
       LCLICK(694,423)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
   else
if_pixel_in(480,445, 500,456, 2055951,5201775,3100527)
       LCLICK(694,473)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
   else
if_pixel_in(480,494, 500,505, 2055951,5201775,3100527)
       LCLICK(694,521)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
   else
if_pixel_in(480,543, 500,554, 2055951,5201775,3100527)
       LCLICK(694,571)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(3400,4800))
end_if
ну я как неуч снова вопросы задаю))) вот сделал что то.... конечно не то что хотел в итоге получил. выборку делает. продаёт то что нужно и пропускает что надо оставить. но я не пойму как сделать что бы цикл продажи повторялся только на первом поле до тех пор, пока в том месте не окажется или другой цвет или пусто. А у меня он проверяет первое поле, продаёт если там лут и переходит ко второму полю.

второй вопрос:
Code: [Select]
go1
if_pixel_in(480,543, 500,554, 2055951,5201775,3100527)
       LCLICK(694,571)
  WAITMS(RND(400,800))
  LCLICK(734,366)
  WAITMS(RND(4300,6000))
  IF_PICTURE_IN(416,540,457,582, "555.bmp")
  HALT
  else
    GOTO (go1)
пытался сделать сравнение с картинкой(сделал скрин) и остановить выполнение скрипта, если в ячейке пусто или продолжить работу, так он продал то что нужно было оставить и продолжил продавать пока в той ячейке не появилось пустое поле(((
« Last Edit: October 20, 2012, 12:03:19 AM by prapor »

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Re: Гнев Богов
« Reply #12 on: October 19, 2012, 11:44:58 PM »
Code: [Select]
$break = 0
$c1 = 2055951
$c2 = 5201775
$c3 = 3100527

WHILE($break = 0)
   if_pixel_in(480,249, 500,260, $c1,$c2,$c3)
      LCLICK(693,277)
      WAITMS(RND(400,800))
      LCLICK(734,366)
      WAITMS(RND(3400,4800))
   ELSE
      break = 1
   END_IF
END_CYC

$break = 0

И делай такой цикл для всех полей. Только $break перед циклом не забывай обнулять. Кстати, оформляй код в ББ-Код code, читать невозможно.
« Last Edit: October 19, 2012, 11:47:49 PM by stupid_reg »
Отсутствую.

Полуночник

  • Активный участник
  • ***
  • Posts: 157
  • Умный не пошлёт на... он скажет -вы далеко пойдёте
    • View Profile
Re: Гнев Богов
« Reply #13 on: October 20, 2012, 12:04:30 AM »
а что по второму вопросу? исправился с бб-кодом))
что то я не понимаю видать, но
Code: [Select]
getscreen

$break = 0
$c1 = 2055951
$c2 = 5201775
$c3 = 3100527

WHILE($break = 0)
   if_pixel_in(480,249, 500,260, $c1,$c2,$c3)
      LCLICK(693,277)
      WAITMS(RND(400,800))
      LCLICK(734,366)
      WAITMS(RND(3400,4800))
   ELSE
      break = 1
   END_IF
END_CYC
$break = 0
WHILE($break = 0)
   if_pixel_in(480,298, 500,309, $c1,$c2,$c3)
      LCLICK(694,323)
      WAITMS(RND(400,800))
      LCLICK(734,366)
      WAITMS(RND(3400,4800))
   ELSE
      break = 2
   END_IF
END_CYC
$break = 0
WHILE($break = 0)
   if_pixel_in(480,347, 500,358, $c1,$c2,$c3)
      LCLICK(694,374)
      WAITMS(RND(400,800))
      LCLICK(734,366)
      WAITMS(RND(3400,4800))
   ELSE
      break = 3
   END_IF
END_CYC

$break = 0

WHILE($break = 0)
   if_pixel_in(480,396, 500,407, $c1,$c2,$c3)
      LCLICK(694,423)
      WAITMS(RND(400,800))
      LCLICK(734,366)
      WAITMS(RND(3400,4800))
   ELSE
      break = 4
   END_IF
END_CYC

не работает(( что я снова напортачил? наверно уже надоел своими вопросами)))
« Last Edit: October 20, 2012, 12:39:24 AM by prapor »

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Re: Гнев Богов
« Reply #14 on: October 20, 2012, 12:15:32 AM »
Не очень понял что ты хотел сделать во втором вопросе. Кстати дай скрин пустого поля и саму картинку 555.bmp
UPD: И не надо break в WHILE менять, там всегда должно быть WHILE($break = 0). Это просто такой обход отсутствия конструкции break для остановки цикла.
« Last Edit: October 20, 2012, 12:18:00 AM by stupid_reg »
Отсутствую.