Author Topic: Проблемы с анализом экрана  (Read 8300 times)

0 Members and 4 Guests are viewing this topic.

Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Проблемы с анализом экрана
« on: July 12, 2013, 09:12:48 PM »
Сама игра http://rus-fishsoft.ru/ , весит всего 300 мб , вдруг какого нибудь Guru затянет на досуге и он за 5 минут напишет то , чем я занимаюсь 3-и сутки)))

Алгоритм действий:
1. Нажать "Т" (англ) закинуть удочку (всегда прямая и в одно и тоже место)
2. Когда рыба клюет (всегда разное время) , конец удочки цветом пикселя 255 загинается , нажимаем "G"
3. Ожидаем пока шкала "Леска" не заполнится до момента описанного цветом пикселя "4488494", после чего отпускаем "G" и нажимаем "H"
4. Заполняется шкала "Удочка" до момента описанного тем же цветом пикселя "4488494", отпускаем "H", нажимаем "G"
5. Повторяем пункты 3 и 4 до тех пор, пока не выловится рыба.

Скриншоты:
1. http://yadi.sk/d/8e2YI2od6jEpI
2. http://yadi.sk/d/4W39_vhq6km0W
3. http://yadi.sk/d/7zgd6gHH6kosi
4. http://yadi.sk/d/gd8KyzD66kosy

Вот что получается скриптом ниже : http://youtu.be/9KX9G5TGME4

Места IF_PIXEL_IN: http://yadi.sk/d/roL8_Pn86l3Fg

1 раз правильно все происходит , далее начинает работать только при нажатии "G" оно видимо заменяет первый
Code: [Select]
IF_PIXEL_IN (959, 434, 987, 486,255)
$key_g = 1
END_IF

Но 1 момент , когда я запускаю скрипт , изначально в зоне бокса первого IF_PIXEL_IN нет цвета 255 , он появляется чуть позже когда рыба клюет и скрипт начинает делать свое дело , но при продолжении там присутствует этот цвет , может быть поэтому и стопорится...

САМ СКРИПТ:

Code: [Select]
GETSCREEN

IF_PIXEL_IN (959, 435, 977, 486,255)
$key_g = 1
END_IF
IF_PIXEL_IN(913,717,930,732,6657107,7117147,4488494)
$key_g = 0
waitms (64)
$key_h = 1
END_IF
IF_PIXEL_IN(917,703,931,714,6657107,7117147,4488494)
$key_h = 0
END_IF

IF(($key_g = 1) & (iskeydown(#G)=0))
KEYDOWN(#G)
END_IF
IF(($key_g = 0) & (iskeydown(#G)=1))
KEYUP(#G)
END_IF
IF(($key_h = 1) & (iskeydown(#H)=0))
KEYDOWN(#H)
END_IF
IF(($key_h = 0) & (iskeydown(#H)=1))
KEYUP(#H)
END_IF

P.S. очень прошу помощи) так как уже замучился и всех уже достал))) , так как не могу понять что тут не так !!!
Ранее я много делал простых скриптов изучая самостоятельно (разовые клики и нажатия клавиш - правда этого хватало) и длинных и коротких в KFgame , PW , Karos и все работали на ура , выполняли утомительные задачи на которые тратились бы много часов жизни ,  без перебоев (ПРАВДА ПОСЛЕ НАПИСАНИЯ ВСЕГДА ТРАТИЛСЯ ИНТЕРЕС К ИГРАМ , так как ты мог все себе позволить и стремиться было уже не к чему) , но тут уже не интерес к игре))) , а сама цель разобраться , так как эти зажатия и отжатия клавиш уже достали.... Спасибо вам за помощь...
« Last Edit: July 13, 2013, 01:28:22 AM by Alexankin »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Проблемы с анализом экрана
« Reply #1 on: July 12, 2013, 10:36:59 PM »
Один END_IF лишний. Может из-за него...
Не может 1 и 2 поиск находить одновременно?
Не знаю как iskeydown(#G) реагирует на программно же нажатый G. Может стоит подменить переменными в этих проверках.


Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #2 on: July 13, 2013, 01:15:02 AM »
Я немного все отредактировал !!! А проблема осталась  ;D

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Проблемы с анализом экрана
« Reply #3 on: July 13, 2013, 01:31:16 AM »
Вот новая реинкарнация описания более понятна. Хотя что это одна из рыбалок было ясно и так.
Почему бы не сделать тупо и линейно прямо по твоему описанию? Написано ждем 255 - значит ждем, а не носимся по скрипту... дождались - нажимаен G. И так далее.
« Last Edit: July 13, 2013, 02:31:56 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Проблемы с анализом экрана
« Reply #4 on: July 13, 2013, 02:30:31 AM »
Может так?

$u=0
while($u=0)
GETSCREEN

IF_PIXEL_IN (959, 435, 977, 486,255)

KEYDOWN(#G)
$u=1

END_IF
waitms (50)
END_CYCLE
$lovim=0
while($lovim=0)
$g=0
while($g=0)
GETSCREEN
IF_PIXEL_IN
(913,717,930,732,6657107,7117147, 4488494)
$g=1
KEYUP(#G)

waitms (50)
KEYDOWN(#H)

END_IF
waitms (50)
END_CYCLE
$h=0
while($h=0)
GETSCREEN

IF_PIXEL_IN (917,703,931,714,6657107,7117147,
4488494)

$h=1
KEYUP(#H)

waitms (50)
KEYDOWN(#G)

END_IF
waitms (50)
END_CYCLE
END_CYCLE

только непонятно, где обработка поймали? Или это всё в ручную?
« Last Edit: July 13, 2013, 02:39:21 AM by Vint »


Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #5 on: July 13, 2013, 11:59:38 AM »
Оуууу Vint вы красавчик , выуживание рыбы происходит на 5+ баллов))) , а не как у меня 1 раз keydown(#G) -> keyup(#G) -> keydown(#H) -> keyup(#H) и скрипт застывал , вы этот цикл сделали бесконечным.

Почему бы не сделать тупо и линейно прямо по твоему описанию? Написано ждем 255 - значит ждем, а не носимся по скрипту... дождались - нажимам G. И так далее.
Я думал раз программа всегда носится по скрипту , значит рано или поздно дождется и будет делать свое дело  :D

только непонятно, где обработка поймали? Или это всё в ручную?

Да , для полной автоматизации действии она безусловно нужна , просто на скорую руку (уже 4й день ковыряюсь) хотелось сделать что бы когда конец удочки сместился , происходило выуживание , что сейчас и происходит... НО к сожалению когда я закидываю удочку снова и происходит клев , скрипт не срабатывает , нужно заново его запускать , вот видео  http://youtu.be/s1xibpVFo-w тут первую рыбу поймал сам скрипт , а на вторую не обратил даже внимания....



Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #6 on: July 13, 2013, 05:30:49 PM »
попробовал проверить работу скрипта как мне подсказывал Андрей Оравин вписав LOGWRITE

скрипт заканчивает работу всегда с зажатым "G" может быть поэтому не продолжает работу дальше ? так как в первом IF_PIXEL_IN как раз и нужно зажимать G
Code: [Select]
IF_PIXEL_IN (959, 435, 977, 486,255)
KEYDOWN(#G) 

Code: [Select]
$u=0
while($u=0)
GETSCREEN
IF_PIXEL_IN (959, 435, 977, 486,255)
KEYDOWN(#G)
LOGWRITE ("Зажал G")
$u=1
END_IF
waitms (50)
END_CYC

$lovim=0
while($lovim=0)
$g=0
while($g=0)
GETSCREEN
IF_PIXEL_IN (913,717,930,732,6657107,7117147,4488494)
$g=1
KEYUP(#G)
LOGWRITE ("Отжал G")
waitms (50)
KEYDOWN(#H)
LOGWRITE ("Зажал H")
END_IF
waitms (50)
END_CYC

$h=0
while($h=0)
GETSCREEN
IF_PIXEL_IN (917,703,931,714,6657107,7117147,4488494)
$h=1
KEYUP(#H)
LOGWRITE ("Отжал H")
waitms (50)
KEYDOWN(#G)
LOGWRITE ("Зажал G")
END_IF
waitms (50)
END_CYC
END_CYC
« Last Edit: July 13, 2013, 08:49:20 PM by Alexankin »

Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #7 on: July 13, 2013, 06:37:41 PM »
Все пробую и пробую , ппц.... и не получается  :(

Вот успешный лог !!!

Code: [Select]
Рыба клюнула - >зажал G
Леска слишком сильно натянулась ->  отжал G
Тянем удочку -> зажал H
Удочка сильно гнется -> отжал H
Тянем леску - > зажал G
Поймал рыбку -> Отжал G
Окно с уловом закрываю -> Нажал Space
Закинул удочку -> Нажал T

И вот что произошло при следующем клеве

Нажал T
зажал G
отжал G
зажал H
отжал H
зажал G - Леска лопнула так как вовремя не отжалась


Сам скрипт

Code: [Select]
$u=0
while($u=0)
GETSCREEN
IF_PIXEL_IN (959, 435, 977, 486,255)
KEYDOWN(#G)
LOGWRITE ("Зажал G")
$u=1
END_IF
waitms (50)
END_CYC

$lovim=0
while($lovim=0)
$g=0
while($g=0)
GETSCREEN
IF_PIXEL_IN (913,717,930,732,6657107,7117147,4488494)
$g=1
KEYUP(#G)
LOGWRITE ("Отжал G")
waitms (50)
KEYDOWN(#H)
LOGWRITE ("Зажал H")
END_IF
waitms (50)
END_CYC

$h=0
while($h=0)
GETSCREEN
IF_PIXEL_IN (917,703,931,714,6657107,7117147,4488494)
$h=1
KEYUP(#H)
LOGWRITE ("Отжал H")
waitms (50)
KEYDOWN(#G)
LOGWRITE ("Зажал G")
END_IF
waitms (50)
END_CYC

$poimali=0
while($poimali=0)
GETSCREEN
IF_PIXEL_IN (665,777,767,778,16750899)
$poimali=1
KEYUP(#G)
LOGWRITE ("Отжал G")
wait (2)
Keypress(#SPACE)
LOGWRITE ("Нажал Space")
wait (2)
Keypress(#T)
LOGWRITE ("Нажал T")
wait (2)
END_IF

END_CYC
END_CYC
« Last Edit: July 14, 2013, 05:43:41 AM by Alexankin »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Проблемы с анализом экрана
« Reply #8 on: July 13, 2013, 10:42:43 PM »
Сори, я из отпуска и с телефона писал. Проверять твои скрипты нет возможности. Допиши обработку поймали по какому нибудь признаку, потом спейс, задержку и переход на начало. Думаю там не сложно.


Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #9 on: July 13, 2013, 11:07:56 PM »
Допиши обработку поймали по какому нибудь признаку, потом спейс, задержку и переход на начало. Думаю там не сложно.

По какому признаку ??? я ведь сделал что бы он нашел по цвету в определенной области  и как кинуть на начало ))) ? где об этом почитать ? что бы потом написать ! или где взять пример ?
Справку 100 раз уже открывал и даже не закрывал , но она явно написана для бывалых...
« Last Edit: July 13, 2013, 11:22:34 PM by Alexankin »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Проблемы с анализом экрана
« Reply #10 on: July 14, 2013, 12:57:11 PM »
Справка она просто, справка. Для всех. Написана вполне доступно.
Ты не туда вставил проверку поймали. Этот участок у тебя никогда не выполняется. Можно сделать по разному. Проще:
убери циклы while вокруг твоего поймали (кстати, зачем он там?) и вокруг проверки удочки и лески. Все три поиска оберни в новый цикл while и внутри поиска поймали добавь выход из этого цикла.
Ну, или подожди пока Андрей тебе напишет/подскажет или если ни у кого нет желания - до среды минимум пока домой доберусь. Задача довольно простая.
« Last Edit: July 14, 2013, 01:01:32 PM by Vint »


Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #11 on: July 14, 2013, 01:06:34 PM »
Vint , совсем не спешу и конечно буду ждать , главное разобраться , не то что бы сделать и пользоваться , но и самому понять как это сделано...

Буду пробовать дальше))) и ждать , хорошего отдыха...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Проблемы с анализом экрана
« Reply #12 on: July 14, 2013, 02:05:13 PM »
Keypress(#T)

LOGWRITE ("Нажал T")

wait (2)
$u=0

while($u=0)

GETSCREEN

IF_PIXEL_IN (959, 435, 977,
486,255)

KEYDOWN(#G)
LOGWRITE ("Зажал G")

$u=1

END_IF

waitms (50)

END_CYC
$lovim=0

while($lovim=0)

GETSCREEN

IF_PIXEL_IN (913,717,930,732,6657107,
7117147,4488494)

KEYUP(#G)

LOGWRITE ("Отжал G")

waitms (50)
KEYDOWN(#H)

LOGWRITE ("Зажал H")

waitms (50)
END_IF

IF_PIXEL_IN
(917,703,931,714,6657107,
7117147,4488494)
KEYUP(#H)

LOGWRITE ("Отжал H")

waitms (50)

KEYDOWN(#G)

LOGWRITE ("Зажал G")
waitms (50)
END_IF

IF_PIXEL_IN
(665,777,767,778,16750899)

$lovim=1
KEYUP(#G)

LOGWRITE ("Отжал G")

wait (2)

Keypress(#SPACE) LOGWRITE ("Нажал Space")

wait (2)

END_IF
END_CYC


Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #13 on: July 14, 2013, 03:46:07 PM »
оО спасибо , а я уже все сделал после того как прочитал ваше сообщение в VK)))

Хотел еще кое что сюда засунуть , но пока мучаюсь сам... не хочется никого обременять)))

Alexankin

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Проблемы с анализом экрана
« Reply #14 on: July 14, 2013, 07:39:21 PM »
Во время использования , встретил проблему , когда скрипт выполняет свою задачу используя только $u, т.е. только одним зажатием G не доходя до $lovim , сбивается вся работа , хотя зачастую $lovim нужно для выполнения задачи :(

Подлечил так , но не вылечил судя по логам  :(

Code: [Select]
$nakonechnik=0
while($nakonechnik=0)
GETSCREEN
IF_PIXEL_IN (959, 435, 977, 486,255) // Красный наконечник удочки
$nakonechnik=1
KEYDOWN(#G)
LOGWRITE ("Зажал 1 G")
waitms (50)
END_IF
waitms (64)
END_CYC

waitms (10)

$lovim=0
while($lovim=0)
IF_PIXEL_IN (959,435,977,486,255) // Тянем
KEYDOWN(#G)
LOGWRITE ("Зажал 2 G")
GETSCREEN
IF_PIXEL_IN (913,717,930,732,4488494) // Макс. натяжение лески
KEYUP(#G)
LOGWRITE ("Отжал 2 G")
waitms (5)
KEYDOWN(#H)
LOGWRITE ("Зажал 1 H")
END_IF
END_IF

waitms (10)

GETSCREEN
IF_PIXEL_IN (917,703,931,714,4488494) //  Макс. натяжение удочки
KEYUP(#H)
LOGWRITE ("Отжал 1 H")
waitms (5)
KEYDOWN(#G)
LOGWRITE ("Зажал  3 G")
END_IF

waitms (10)

GETSCREEN
IF_PIXEL_IN (951,436,956,440,0) // --------
$lovim=1
wait (1)
KEYPRESS(#T)
waitms (5)
LOGWRITE ("Нажал Т")
wait (1)
END_IF
waitms (64)
End_cyc

waitms (10)

$poimali=0
while($poimali=0)
GETSCREEN
IF_PIXEL_IN (665,777,767,778,16750899) // Если рыбу поймал
$poimali=1
KEYUP(#G)
waitms (5)
LOGWRITE ("Отжал G")
waitms (5)
KEYUP(#H)
waitms (5)
LOGWRITE ("отжал H")
wait (2)
Keypress(#SPACE)
waitms (5)
LOGWRITE ("Нажал Space")
wait (2)
Keypress(#T)
waitms (5)
LOGWRITE ("Нажал T")
waitms (5)
END_IF
waitms (64)
End_cyc

Постоянно проскакивает "Зажал 2 G" Админам игры это точно не понравится  ;D , но дело не в ниХ...
А в том что это логично , так как я сам задал скрипту такую задачу , но не хватает знаний и опыта что бы излечить эту болезнь...

Как это лечится ? или с каким указателем поработать ?

Но зажатие G необходимо в $lovim
« Last Edit: July 14, 2013, 09:16:26 PM by Alexankin »