Что нового

[Автоматизация] Распознавание объектов за картинкой и действия с ними

sevis

Новичок
Сообщения
15
Репутация
0
Не буду в этой теме пока указывать страницу игры, возможно ответ можно будет получить без этого, если понадобиться, то дам ссылки на страницу игры.

Есть браузерная игра.

В игре есть карта регионов, которая представляет собой сетку, каждая клетка которой кликабельна (скриншот map1.jpg).

При наведении курсора мыши на любую клетку появляется всплывающая подсказка (Скриншот map2.jpg).

Каждая клетка содержит какой-то объект (город, здание или просто пустой регион).

При нажатии левой кнопкой мыши на клетку, в зависимости от типа объекта на этой клетки, происходит некотрое действие - либо появляется всплывающее игровое меню, либо загружается укрупненная карта региона (скриншот map3.jpg).

Проблема в том, что карта региона распознается DebugBar в виде одной большой картинки и выделить на этой картинке отдельные объекты не получается.

Поэтому вопрос: можно ли как-то получить доступ к объектам (к любой отдельной клетке сетки) этой картинки и если можно то как и с помощью какого инструмента узнать ID или имена объектов?

или единственный способ автоматизировать нажатия на такие объекты - это клики по определенным координатам?
 
Автор
S

sevis

Новичок
Сообщения
15
Репутация
0
Неужели ни у кого нет никаких соображений?

Или недостаточно данных для решения задачи и нужен доступ к коду страницы?
 
Автор
S

sevis

Новичок
Сообщения
15
Репутация
0
дай код. посмотрим

Полный код страницы во вложении.

Адрес: http://mmhk.ru

Но там нужно регистрироваться и потом еще при входе в игру некоторое обучение проходить.

При наведении мишени DebugBar на карту выдается такой код:

Код:
<AREA id=WorldMap178MapArea shape=poly alt="world map" coords=1,221,270,86,393,84,659,217,657,317,393,453,270,453,1,322>

Будут какие-нибудь соображения, по поводу доступа к отдельным объектам сетки карты?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
sevis
Тег AREA определяет активные области изображения.
Атрибут COORDS определяет координаты активной области.
Ну, и CLICK вам в помощь :smile:
 
Автор
S

sevis

Новичок
Сообщения
15
Репутация
0
Тег AREA определяет активные области изображения.
Атрибут COORDS определяет координаты активной области.

Ну, и CLICK вам в помощь

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

Я бы еще понял, как к координатам привзязаться, если бы в атрибуте COORDS были разные координаты для разных частей карты....

Могли бы Вы пояснить поподробнее?

Так же еще методом "полунаучного тыка" нашел объекты, при выборе которых в DebugBar подсвечиваются некоторые непустые клетки на карте (с городами или стоениями):

Код:
<DIV style="Z-INDEX: 154; TOP: 314px; LEFT: 235px" id=Region252201 class=region><DIV style="BACKGROUND-IMAGE: url(http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/Region_Zoom2.gif); WIDTH: 66px; BACKGROUND-REPEAT: repeat; BACKGROUND-POSITION: -132px -264px; HEIGHT: 66px" id=Region252201Image></DIV></DIV>

При попытке кликнуть с помощью кода ниже, клика не происходит:

Код:
;...
$Region252201 = $oDivs("Region252201") 
_IEAction($Region252201, "click")
;или
$Region252201 = $oDivs("Region252201Image") 
_IEAction($Region252201, "click")


Так же пока не удалось найти пустые клетки на карте. На этих клетках ничего нет, но они кликабельны.

На какой объект все же надо щелкнуть, чтобы произошел клик по нужной клетке?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Надо сначала получить объект, по которому нужно кликнуть:
Код:
$oRegionDiv = _IEGetObjById($oIe, 'Region252201')
_IEAction($oRegionDiv, 'click')


Хм... этот DIV содержит в себе только картинку и клик по нему вряд ли даст результат.
Выложи код пошире, чтобы было видно обрамление вокруг этого блока и ссылку куда ведет клик.
 
Автор
S

sevis

Новичок
Сообщения
15
Репутация
0
Выложи код пошире, чтобы было видно обрамление вокруг этого блока и ссылку куда ведет клик

Например, ниже код для кнопок (сверху дугой расположены), которые нарисованы на прикрепленном 3-ем скриншоте (Map3.jpg) в первом сообщении этой темы. Эти кнопки и соответственно код появляются когда я кликаю мышью на объект "Город" в одной из клеток сетки.

Если я уже кликнул на объект город и кнопки висят на экране, то с помощью AutoIt я по ним кликнуть могу, тут проблем нет.

Но проблема в том, что я не никак не могу программно кликнуть по объекту сетки, в том числе и по городу, чтобы появилось это меню.

Код:
<div id="WorldMap178RegionMapViewShortcut" class="worldMapRegionMapViewShortcut clearBoth absolutePosition clickable" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -280px 0px; background-repeat: repeat; width: 40px; height: 40px;"></div>
<div id="WorldMap178PillageRegionShortcut" class="worldMapPillageRegionShortcut clearBoth absolutePosition disabled" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -400px -120px; background-repeat: repeat; width: 40px; height: 40px;"></div>
<div id="WorldMap178ScoutRegionShortcut" class="worldMapScoutRegionShortcut clearBoth absolutePosition clickable" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -360px 0px; background-repeat: repeat; width: 40px; height: 40px;"></div>
<div id="WorldMap178SiegeRegionShortcut" class="worldMapSiegeRegionShortcut clearBoth absolutePosition disabled" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -440px -120px; background-repeat: repeat; width: 40px; height: 40px;"></div>
<div id="WorldMap178HeroMoveShortcut" class="worldMapHeroMoveShortcut clearBoth absolutePosition disabled" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -200px -120px; background-repeat: repeat; width: 40px; height: 40px;"></div>
<div id="WorldMap178AssaultRegionShortcut" class="worldMapAssaultRegionShortcut clearBoth absolutePosition disabled" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -320px -120px; background-repeat: repeat; width: 40px; height: 40px;"></div>
<div id="WorldMap178SiegeInfoShortcut" class="worldMapSiegeRegionShortcut clearBoth absolutePosition hidden disabled" style="background-image: url("http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/css_sprite/SideBar_Shortcuts.gif"); background-position: -440px -120px; background-repeat: repeat; width: 40px; height: 40px;"></div>
</div>

Так же ниже коды стрелок при нажатии на которые карта двигается вправо, влево, вверх или низ на некоторое расстояние. (На скриншотах эти стрелки красного и белого цвета по краям видны)
Нажать программно на эти стрелки так же не составляет труда.

Код:
div id="WorldMapContainer">
<div id="WorldMap178" class="worldMap worldMap_zoom2">
<img id="WorldMap178MappingImage" class="worldMapMappingImage clickable" usemap="#WorldMap178MapArea" name="WorldMap178MappingImage" alt="" src="http://static5.cdn.ubi.com/u/HOMMK/mightandmagicheroeskingdoms.ubi.com/1.5.0.90-2-MTR/img/empty.gif">
<map name="WorldMap178MapArea">
<area id="WorldMap178MapArea" alt="world map" coords="1,221,270,86,393,84,659,217,657,317,393,453,270,453,1,322" shape="poly">
<area id="WorldMap178BigArrowTOP" class="clickable" alt="world map" coords="101,135,126,139,129,145,111,154" shape="poly">
<area id="WorldMap178SmallArrowTOP" class="clickable" alt="world map" coords="125,135,143,138,131,145" shape="poly">
<area id="WorldMap178BigArrowRIGHT" class="clickable" alt="world map" coords="561,137,551,156,531,145,535,138" shape="poly">
<area id="WorldMap178SmallArrowRIGHT" class="clickable" alt="world map" coords="531,145,517,137,535,136" shape="poly">
<area id="WorldMap178BigArrowBOTTOM" class="clickable" alt="world map" coords="551,381,561,399,536,396,534,390" shape="poly">
<area id="WorldMap178SmallArrowBOTTOM" class="clickable" alt="world map" coords="532,390,536,400,522,397" shape="poly">
<area id="WorldMap178BigArrowLEFT" class="clickable" alt="world map" coords="112,381,131,390,127,396,101,399" shape="poly">
<area id="WorldMap178SmallArrowLEFT" class="clickable" alt="world map" coords="132,390,145,397,126,400" shape="poly">
</map>

Есть еще какие-нибудь идеи как все-таки кликнуть на ячейку сетки карты и соответственно на объект, находящийся в этой ячейке, например, на город?
Или еще какие-то данные нужны?
 
Верх