Author Topic: картинка/прозрачность/улучшение  (Read 1919 times)

0 Members and 2 Guests are viewing this topic.

shuraken007

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Здравствуйте, помогите оптимизировать поиск картинки.
В архиве набор картинок с разным COLORMODE(от 8 до 0)
Эта штука прозрачная, пропускает через себя фон в какой-то мере, я покумекал, сделал картинку fish.bmp
Code: [Select]
IF_PICTURE_IN (1075,451, 1832,951, "fish.bmp", 8388479, 99)

увы эта штука попадается довольно редко, толком потестить не удаётся( на данный момент находит всё), по вашему опыту - насколько сильно можно коцать картинку дальше?
ну или как бы вы её порезали исходя из скринов

p.s. на colormode 7 вполне себе может попадаться преимущественно жёлтый фон

архив: http://dropmefiles.com/AkTtV
« Last Edit: May 05, 2017, 03:37:36 AM by shuraken007 »

Атеист

  • Guest
Re: картинка/прозрачность/улучшение
« Reply #1 on: May 05, 2017, 02:13:42 PM »
по вашему опыту - насколько сильно можно коцать картинку дальше?
ну или как бы вы её порезали исходя из скринов

Исходя из моего опыта, картинку нужно совсем выкинуть. :)
Уязвимость игры в том, что бонусные рыбки появляются в одних и тех же координатах, в 6 разных местах на экране.

Что нужно сделать:
- Отследить координаты всех этих бонусных рыбок (см. скриншот).
- В настройках игры отключить все визуальные эффекты прозрачности и анимации.

Алгоритм:
- При первом запуске (когда рыбки нет на экране) Clickermann проверяет по очереди все 6 контрольных точек, где может появиться рыбка, и заносит цвета этих пикселей в массив. Так мы получаем контрольную карту текущего экрана игры.
- С частотой раз в секунду, или реже, проверяем цвета всех контрольных точек и сравниваем с соответствующими цветами в массиве.
- Если один из опрошенных пикселей поменял свой цвет (неважно на какой, просто на другой), то значит там рыбка. Кликаем по этому пикселю.
- Пересоздаем массив (контрольную карту) пикселей.
Бывает так, что вторая рыбка появляется мгновенно, тут может быть есть смысл прокликать все пиксели перед созданием нового массива.

Один мой знакомый, когда не смог распознать картинку рыбки, просто непрерывно прокликивал все 6 пикселей, :) но так не интересно, хотя решение самое простое и не затратное по ресурсам.
Появление бонусной пчёлки, так же отслеживается по одному изменившемуся пикселю на пути её полета, после чего можно активировать какие-то способности, в нужной последовательности.
Давно правда потерял интерес к этой игре, возможно там всё изменилось...



Да, чуть не забыл - после настроек графики в игре, никакие COLORMODE(от 8 до 0) и %-совпадения не требуются, фон становится статичным.
« Last Edit: May 05, 2017, 02:24:19 PM by Атеист »

shuraken007

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: картинка/прозрачность/улучшение
« Reply #2 on: May 05, 2017, 02:55:49 PM »
Хах, да, меня тоже смутили эти места появления. Вот жесть залипалово придумали, 5 минут поиграл - хрен оторвёшься, сразу вспомнил про кликерман, решил освежить знания. А ведь игра тупа до безумия, и как я на это купился...

shuraken007

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: картинка/прозрачность/улучшение
« Reply #3 on: May 05, 2017, 04:21:09 PM »
Кстати, а можешь поделиться свои кодом?
вот моё творчество, осталось пчелу допинать и алгоритм апгрейда сделать вместо тупого клика
Code: (clickermann) [Select]
// New Script
// Author: Shuraken
// Version: 1.0 (04.05.2017)
// Clicker Heroes

#name "Clicker Heroes"

sub(test_screen, $test_screen_x, $test_screen_y, $test_screen_x1, $test_screen_y1, $start_colormode, $end_colormode)
if ($test_screen_x1 = 0)
$test_screen_x1 = $_xmax
end_if
if ($test_screen_y1 = 0)
$test_screen_y1 = $_ymax
end_if
if ($end_colormode = 0)
$end_colormode = 8
end_if
for($i = $start_colormode, $i < $end_colormode + 1) 
getscreen
COLORMODE($i)
print(pxl(1302,572))
SCREENSHOTEX($test_screen_x, $test_screen_y, $test_screen_x1, $test_screen_y1, "test_screen", 0)
end_cyc
end_sub

sub(click)
   LCLICK(1445,647)  // 8363153
end_sub

sub(check_hp)
GETSCREEN
COLORMODE(7, 1330,932, 1560,932)
   $HP = 100 - pxlcount(1330,932, 1560,932, 8355711) / (1560 - 1330) * 100
end_sub

sub(check_next_area)
$shift = 0
getscreen
while((pxl(1552,102) = 39166) | (pxl(1546,102) = 39166))
LCLICK(1547,79)
$shift = 1
waitms(300)
getscreen 
end_cyc
if(($shift = 1) & (pxlxor(1380,273, 1403,291) = 9741626))
          KEYPRESS(#1)
KEYPRESS(#2)
KEYPRESS(#3)
KEYPRESS(#4)
$start_fight = $_ms
while($_ms - $start_fight < 30*1000)
click()
end_cyc
getscreen
if(pxl(1552,102) = 39166) | (pxl(1546,102) = 39166)
LCLICK(1547,79)
LCLICK(1547,79)
$timer[2] = $check_area_timer
else
            wait(1)
            LCLICK(1322,75)
$timer[2] = 30*60
end_if
end_if
end_sub

sub(check_fish)
GETSCREEN
COLORMODE(7, 812,451, 1862,951)
IF_PICTURE_IN (812,451, 1862,951, "fish.bmp", 8388479, 100)
  LCLICK($_return1, $_return2)
  print("Yay!")
end_if
end_sub

sub(check_bee)
GETSCREEN
COLORMODE(7, 1185,129, 1699,129)
$bee = 0

while (PXLXOR(1185,129, 1699,129) ! 8355711)
   IF_PIXEL_IN (1185,129, 1699,129, 255)
    lclick($_return1, $_return2+10)
$bee = 1
end_if
end_cyc
if ($bee = 1)
    KEYPRESS(#4)
KEYPRESS(#5)
end_if
end_sub

sub(event, $event)
switch($event)
  case(0)
WHEELDOWN(10)
WHEELDOWN(10)
LCLICK(172,609)  // 16710356
    LCLICK(172,609)  // 16710356
LCLICK(172,609)  // 16710356
case(1)
WHEELDOWN(10)
WHEELDOWN(10)
LCLICK(329,634)  // 2398418
LCLICK(386,634)  // 9815236
LCLICK(445,635)  // 11711156
LCLICK(524,640)  // 3355443
LCLICK(582,638)  // 4551822
LCLICK(645,632)  // 9098988
LCLICK(708,635)  // 9887215
LCLICK(329,634)  // 2398418
LCLICK(386,634)  // 9815236
LCLICK(445,635)  // 11711156
LCLICK(524,640)  // 3355443
LCLICK(582,638)  // 4551822
LCLICK(645,632)  // 9098988
LCLICK(708,635)  // 9887215
LCLICK(329,634)  // 2398418
LCLICK(386,634)  // 9815236
LCLICK(445,635)  // 11711156
LCLICK(524,640)  // 3355443
LCLICK(582,638)  // 4551822
LCLICK(645,632)  // 9098988
LCLICK(708,635)  // 9887215
LCLICK(329,634)  // 2398418
LCLICK(386,634)  // 9815236
LCLICK(445,635)  // 11711156
LCLICK(524,640)  // 3355443
LCLICK(582,638)  // 4551822
LCLICK(645,632)  // 9098988
LCLICK(708,635)  // 9887215  
  case(2)
check_next_area()    
  case(3)
        check_fish()  
    case(4)
    check_bee()
end_switch
end_sub

sub(update_timers)
for ($i=0, $i < ARRSIZE($timer))
if (($_ms - $time_arr[$i]) > ($timer[$i] + $timer_base[$i])*1000)
event($i)
$time_arr[$i] = $_ms
end_if
end_cyc
end_sub

$check_area_timer = 1*60

$timer[0] = 100 //жмякать на апгрейд героя
$timer[1] = 100 //жмякать на апгрейд скилов
$timer[2] = $check_area_timer //жмякать на следующую локу
$timer[3] = 1*60 //проверять рыбу
$timer[4] = 10 //проверять пчелу

$timer_base[0] = 0
$timer_base[1] = 0
$timer_base[2] = 0
$timer_base[3] = 0
$timer_base[4] = 0

for ($i=0, $i < ARRSIZE($timer))
$time_arr[$i] = $_ms
end_cyc

while(1)
   click()
   update_timers()
end_cyc

halt
« Last Edit: May 05, 2017, 04:26:28 PM by shuraken007 »

Атеист

  • Guest
Re: картинка/прозрачность/улучшение
« Reply #4 on: May 05, 2017, 05:11:15 PM »
Кстати, а можешь поделиться свои кодом?
Нет проблем, но это старый скрипт, не оптимизированный (как и всё что написано для себя). Как он работал уже и не помню точно, а разбираться снова лень просто, да и нет времени.
При запуске открывает окно лога КМ и помещает в правый нижний угол экрана (1440x900).
Пчелка в отдельном потоке. Еще есть прибамбас для вычисления шансов убить босса.  :D Да, босса я метелил с шансом 100%+.  ;D
Архив во вложении.

shuraken007

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: картинка/прозрачность/улучшение
« Reply #5 on: May 05, 2017, 05:37:28 PM »
Спасибо.
Кстати, есть смысл попробовать запустить потоков 10 с кликами, или програма воспринимает их до какого-то порога типа 10 в секунду?
И что с этими рубинами, они падают в день в ограниченном количестве?

p.s. я раз в минуту пытаюсь перескочить на след локу, если это босс и через 30с под скиллами лока не открылась - прыгаю назад, след. попытка через полчаса
в принципе я могу процент хп узнавать - можно точнее время рассчитать

Атеист

  • Guest
Re: картинка/прозрачность/улучшение
« Reply #6 on: May 05, 2017, 08:02:23 PM »
Рубины падают из рыбок, насколько я помню, поэтому не могу сказать сколько их выпадет за сутки. А клики игра воспринимает не более 30 в секунду, поэтому нет смысла сильно напрягаться с этим. Может есть способ измерить этот параметр, я не запаривался как то.
Игра никак не защищена и идентифицирует игрока по куки-файлам, поэтому эти куки нельзя удалять, иначе придется начинать игру с нуля. Причем базу текущего состояния игры можно экспортировать к себе на комп в текстовый файл. Такой файл можно импортировать в игру на другом компе и продолжить играть. Сервер отсчитает время с последнего входа в игру и добавит игроку золото, которое его персонажи заработали за время его отсутствия. Поэтому я старался увеличить дпс именно во время простоя, когда комп выключен, там такая способность есть у оракулов. Сам файл с базой данных зашифрован, но в инете есть онлайн-расшифровщики/шифровщики. Поэтому его можно открыть и прописать себе сколько чего нужно, например рубинов, потом зашифровать, импортировать в игру и наслаждаться  ;D А можно просто скачать чужой файл с уровнем +1005099999999999999999999999 и играть дальше, но там ничего нового нет, только цифры больше. Такие сохраненки легко можно найти и скачать, но пропадает смысл играть вообще. Замечу, что я играл без регистрации, возможно с регистрацией в стиме так жульничать не получится.

UPD: Немного не правильно я написал про отсчет времени с последнего входа в игру. После импорта базы в игу, сервер отсчитывает время, которое прошло со времени создания этого бэкапа до текущего момента. То есть, если сохранить базу вечером, потом играть всю ночь и на утро залить эту вечернюю базу обратно в игру, то всё что ты активно накликал ночью пропадет, а сервер лишь добавить золото, которое персонажи добыли сами своим пассивным дпс, без кликов игрока.
« Last Edit: May 05, 2017, 08:26:42 PM by Атеист »