Что нового

[KingsRoad] не срабатывает клик мыши в флеш игре

S_K

Новичок
Сообщения
30
Репутация
0
в одно мини RPG игре вконтакте
есть карта, в которой пусть к боссу лежит через мобов, решил сделать бот чтобы он проходил ее, но есть одно но
не всегда срабатывает клик - иногда 4-5 раз может с работать (примерно 40% случает что с работать)...не могу понят в чем проблема, защита это как-то если да то как можно ее обойти?


Код:
#include <ImageSearch.au3>
$x = 0
$y = 0


HotKeySet("{F10}", "Move_1")
HotKeySet("{F9}", "Move_11")
HotKeySet("{ESC}", "ExitApp")

Func ExitApp() ;выходим по нажатию ESC
   Exit
EndFunc

Func Move_1()

$res = _imagesearch('move_1.bmp',1,$x,$y,1)
If $res = 1 Then
   MouseClick("left",$x,$y,1,30)
   ConsoleWrite("Успех: Move_1" & @CRLF)
   Sleep(2000)
   Move_11()
Else
	  ConsoleWrite("Erorr: Move_1" & @CRLF)
	  Move_1()
EndIf
EndFunc


Func Move_11()
$res = _imagesearch('move_2.bmp',1,$x,$y,1)
If $res = 1 Then
   MouseClick("left",$x,$y,4,30)
   ConsoleWrite("Успех: Move_1_2" & @CRLF)
Else
   Move_11()
   ConsoleWrite("Error: Move_1_2" & @CRLF)
EndIf
EndFunc

;...


While 1


Sleep(5000)

WEnd
 

Вложения

  • screenshot_1.jpg
    screenshot_1.jpg
    169.5 КБ · Просмотры: 83

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Мышь, клавиатура] не срабатывает клик мыши в флеш игре

Раз скрин прикрепил, что теперь игру можно опознать. Укажи её название в квадратных скобках в начале названия темы.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Если иногда срабатывает, то это уже не защита. А скорей всего что-то с кодом. Как я понимаю выложен не весь код.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Проблема в ImageSearch. Бьюсь об заклад, что картинка на экране - динамическая, тени\движение самого искомого участка. Поэтому ImageSearch срабатывает раз от раза, ибо маска по которой ищет изображение автор, статичная, скриншот сделан единожды. А на экране картинка колеблится без остановки, поэтому даже с высоким допуском погрешности изображения, сработка происходит не со 100% вероятностью даже если искомое изображение в одной из своих вариаций присутствует на экране.

Это всё равно что искать это изображение с помощью PixelCheckSum. На том скриншоте с которого взята контрольная сумма, сработка будет 100%, на другом же не факт.

Потому я и говорил ранее, если нужно искать изображение, лучше не искать его целиком, т.к. значения картинки, пусть даже визуально всегда одной и той же, может варьироваться по минимальным оттенкам. Проще взять FastFind, убить все лишние цвета, а на оставшемся изображении уже искать нужный образ.


Добавлено:
Сообщение автоматически объединено:

S_K, приведи в соответствии с требованиями, все свои темы касающиеся этой игры, укажи имя игры в скобках в начале названия каждой темы.
 

qqww22

Новичок
Сообщения
115
Репутация
4
$res = _imagesearch('move_1.bmp',1,$x,$y,1)
Если мне не изменяет память выделенным параметром задается погрешность цветов, точно помню,что добивался ввода капчи в игре где была защита в смене теней и цветов.
 
Автор
S_K

S_K

Новичок
Сообщения
30
Репутация
0
Belfigor сказал(а):
Это всё равно что искать это изображение с помощью PixelCheckSum. На том скриншоте с которого взята контрольная сумма, сработка будет 100%, на другом же не факт.

Потому я и говорил ранее, если нужно искать изображение, лучше не искать его целиком, т.к. значения картинки, пусть даже визуально всегда одной и той же, может варьироваться по минимальным оттенкам. Проще взять FastFind, убить все лишние цвета, а на оставшемся изображении уже искать нужный образ.

нашел несколько пикселей с помочь программы "FFShowPixels" (она с этой библиотеки "FastFind") сгенерировал код(он внизу)
вопрос, как теперь сделать клик по это группе пикселей, что персонаж перемещался ?

Код:
;	-------------------------------
;	Category : Move_1 (4 colors)
;	-------------------------------
Global const $FFNB_MOVE_1_COLORS=4
Global const $gFFMove_1Colors[$FFNB_MOVE_1_COLORS]=[0xD6985D, 0xD89D59, 0xD69C5A, 0xD79B53]


#include "FastFind.au3" ; Wrapper to FastFind.dll, for lightning-fast pixel searches.



global $gFFPos[2] = [0,0]; Last known position, default start for next search
global  $gFFWin[4] = [0, 0, 0, 0]; Borders of default (or last) Window


Func FFFindNext($SearchPos=$gFFPos)
; In a 10x10 spot, we're first looking for the nearest spot with at least 4 pure color pixels. 
; If none, then we're looking for a spot with as much as possible pure color pixels
; If still none found, then we're looking for a spot with as much as possible pixels using ShadeVariation of 2
; You can adapt those parameters as needed
local $Res = FFBestSpot(10, 1, 4, $SearchPos[0], $SearchPos[1], -1, 2, true, $gFFWin[0], $gFFWin[1], $gFFWin[2], $gFFWin[3])
If IsArray($Res) Then
	$gFFPos[0] = $Res[0]
	$gFFPos[1] = $Res[1]
	FFAddExcludedArea($Res[0]-5, $Res[1]-5, $Res[0]+5, $Res[1]+5); This will avoid to detect same spot again later
	return $Res
Else
	SetError(1)
	return False
EndIf
EndFunc

Func FFStart($ColorList, $SearchPos=$gFFPos, $WinLimits=$gFFWin, $hWnd=-1) ; Set all settings to start search on a new list of colors
	FFResetExcludedAreas() ; New color list => we reset the restriction rectangles list
	FFResetColors() ; Start with an empty list of colors
	FFAddColor($ColorList)
	return FFFindNext()
EndFunc
 

Вложения

  • 3.png
    3.png
    128.6 КБ · Просмотры: 72

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если ты захватываешь определенную область, то ты с помощью FF узнаешь координаты этих пикселей внутри этой области. Далее тебе надо пересчитать локальные координаты пикселей внутри этой области в координаты пикселей на экране.
Грубо говоря координаты пикселей внутри области = координатам левого верхнего угла области + локальное смещение относительно этого угла.
Если ты ищешь в области которая находится по координатам 50.45.100.95, то твоя область поиска будет 50х50 пикселей, и внутри этой области, ты находишь нужный пиксель по координате 25,33. Тогда координата твоего пикселя на экране, будет равна 50+25,45+33 = 75,78. Далее просто MouseClick туда.
 
Автор
S_K

S_K

Новичок
Сообщения
30
Репутация
0
Belfigor сказал(а):
Если ты захватываешь определенную область, то ты с помощью FF узнаешь координаты этих пикселей внутри этой области. Далее тебе надо пересчитать локальные координаты пикселей внутри этой области в координаты пикселей на экране.
Грубо говоря координаты пикселей внутри области = координатам левого верхнего угла области + локальное смещение относительно этого угла.
Если ты ищешь в области которая находится по координатам 50.45.100.95, то твоя область поиска будет 50х50 пикселей, и внутри этой области, ты находишь нужный пиксель по координате 25,33. Тогда координата твоего пикселя на экране, будет равна 50+25,45+33 = 75,78. Далее просто MouseClick туда.

я новичок и совсем не знаю как это реализовать..приведите пример на основе кода, заранее спасибо
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Тут тебе уже придется справляться с этим самостоятельно. Посмотри примеры скриптов в разделе, во многих применяются относительные координаты. Особенно в разделе EVE Online
 
Автор
S_K

S_K

Новичок
Сообщения
30
Репутация
0
Belfigor сказал(а):
Тут тебе уже придется справляться с этим самостоятельно. Посмотри примеры скриптов в разделе, во многих применяются относительные координаты. Особенно в разделе EVE Online

к сожалению, я не нашел там примеров с использованием библиотеки "FastFind"
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
FastFind это лишь быстрый способ получения данных о пикселях. Тебе же нужен пример с логикой работы по относительным координатам. Найди любой пример с PixelSearch или PixelGetColor и переделай его под себя.
 

Richardnimb

Новичок
Сообщения
1
Репутация
0
KingsRoad не срабатывает клик мыши в флеш игре

вообщем есть флеш в нем нужно текст отредактировать как это сделать кто нибудь знает ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Richardnimb

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Верх