1 (изменено: Vladislav, 2018-09-12 10:48:22)

Тема: анализ и лок на текст !HELP!

Приветствую форумчане и гуру .ahk

Я не силен в .ahk и крайне слабо представляю как сделать то , что мне нужно средствами imagesearch+loop.
Поискав гайды и туториалы на англ\русс - того , что нужно мне - не нашел.


Пока курил форум , наткнулся на очень крутой скрипт , который анализирует картинку на наличие текста и *понимает* где текст и что это за текст. Но прикрутить его в свой код - не смог.

Может быть есть возможность  посредством скриптов+внешних подключаемых библиотек сделать анализ определенной части экрана на наличие цифры *50* ?
По цвету не получается ибо в игре HUD идет прозрачный а ХП бар и вовсе прозрачный+переливается всеми возможными модификациями красного в виде волны слево-направо.

Снизу код , который на данный момент работает , но поиск не по тексту а по пикселям. Белый цвет есть в куче текстур и аим сбивается при первой возможности.

#SingleInstance, Force
#Persistent
#NoEnv
#Warn
SendMode, Input
SetWorkingDir, %A_ScriptDir%
 
 DirX := 0
 DirY := 0


F8::
#Persistent
#KeyHistory, 0
#NoEnv
#HotkeyInterval 99000000
#MaxHotkeysPerInterval 99000000
#InstallKeybdHook
SetKeyDelay, -1, -1
SetControlDelay, -1
SetMouseDelay, -1
SetWinDelay, -1
SendMode, InputThenPlay
SetBatchLines, -1
ListLines, Off
CoordMode, Mouse, client
CoordMode, Mouse, screen
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, Normal
EMCol := 0xfbfbfb
ColVn := 0
ZeroX := A_Screenwidth/2
ZeroY := A_Screenheight/2
CFovX := 15
CFovY := 15
inicount := 9
fileread,settings,settings.ini
 
stringsplit,settings,settings,`n
 
if !(fileexist("settings.ini")) || (settings0-3 != inicount)
{
    iniread,rx,settings.ini,settings,sen, 4
    iniread,xrange,settings.ini,settings,FovX, 3
    iniread,yrange,settings.ini,settings,FovY, 3
    iniread,xa,settings.ini,settings,AimX, 90
    iniread,xy,settings.ini,settings,AimY, 43
}
 
 
Soundbeep, 750, 500
Loop, 
{
    GetKeyState, Mouse2, LButton, P
    GetKeyState, Mouse3, RButton, P
    if ( Mouse2 == "D" ) || ( Mouse3 == "D" )
    {
        GoSub MouseMoves2
    }
 
    GetKeyState, Key1, F8, P
    if ( Key1 == "D")
    {
        Soundbeep
        break
    }
}
 
MouseMoves2:
PixelSearch, AimPixelX, AimPixelY, 0 + (A_Screenwidth * (xrange/10)), 0 + (A_Screenheight * (yrange/10)), A_Screenwidth - (A_Screenwidth * (xrange/10)), A_Screenheight - (A_Screenheight * (yrange / 10)),EMCol, ColVn, Fast RGB
if(AimPixelX != "" && AimPixelY != "")
{
    GoSub FindOffsetToTarget
    GoSub DoMousemove

}
else
{
PixelSearch, AimPixelX, AimPixelY, 0 + (A_Screenwidth * (xrange/10)), 0 + (A_Screenheight * (yrange/10)), A_Screenwidth - (A_Screenwidth * (xrange/10)), A_Screenheight - (A_Screenheight * (yrange / 10)),EMCol, ColVn, Fast RGB
    if(AimPixelX != "" && AimPixelY != "")
    {
        GoSub FindOffsetToTarget
        GoSub DoMousemove

    }
}
Return
 
FindOffsetToTarget:
AimX := AimPixelX - ZeroX +xa
AimY := AimPixelY - ZeroY +xy
if ( AimX+10 > 0)
{
    DirX := rx / 10
}
else if ( AimX+5 > 0)
{
    DirX := rx / 12
}


 
if ( AimX+10 < 0) 
{
    DirX := (-rx) / 10
}
else if ( AimX+5 < 0)
{
    DirX := (-rx) / 12
}

 
if ( AimY+.25 > 0 ) 
{
    DirY := rx /13
}
 
if ( AimY+.25 < 0 ) 
{
    DirY := (-rx) /13
}
AimOffsetX := AimX * DirX
AimOffsetY := AimY * DirY
Return

GetAimMoves1:
DoMousemove:
RootX := Ceil(( AimOffsetX ** ( 1 )))
RootY := Ceil(( AimOffsetY ** ( 1 )))
MoveX := RootX * DirX
MoveY := RootY * DirY
DllCall("mouse_event", uint, 0x01, int, MoveX, int, MoveY, uint, 0, int, 0) 

Return