Skip to content
MPGHThe Dark Arts
/
RegisterLog in
Forum
Community
What's NewLatest posts across the boardTrendingHottest threads right nowSubscribedThreads you follow
Discussion
GeneralIntroductionsEntertainmentDebate FortFlaming & Rage
Board
News & AnnouncementsMPGH TimesSuggestions & HelpGiveaways
More Sections
Art & Graphic DesignProgrammingHackingCryptocurrency
Hacks & Cheats
Games
ValorantCS2 / CS:GOCall of Duty / WarzoneFortniteApex LegendsEscape From Tarkov
+14 moreLeague of LegendsGTA VMinecraftRustROTMGBattlefieldTroveBattleOnCombat ArmsCrossFireBlackshotRuneScapeDayZDead by Daylight
Resources
Game Hacking TutorialsReverse EngineeringGeneral Game HackingAnti-CheatConsole Game Hacking
Tools
Game Hacking ToolsTrainers & CheatsHack/Release NewsNew
Submit a release →Share your cheat, tool, or config with the community.
AINEW
AI Tools
General & DiscussionPrompt EngineeringLLM JailbreaksHotAI Agents & AutomationLocal / Open Models
AI × Gaming
AI Aimbots & VisionML Anti-CheatGame Bots & Automation
Create
AI Coding / Vibe CodingAI Art & MediaAI Voice & TTS
The AI frontier →Where game hacking meets modern machine learning. Jump in.
Marketplace
Buy & Sell
SellingBuyingTradingUser Services
Trust & Safety
Middleman LoungeMarketplace TalkVouch Copy Profiles
Money
Cryptocurrency TalkCurrency ExchangeWork & Job Offers
Start selling →List accounts, services, and goods. Use the middleman to trade safe.
MPGH The Dark Arts

A community for offensive security research, reverse engineering, and AI.

Community

ForumMarketplaceSearch

Account

RegisterLog in

Legal

Privacy PolicyForum RulesHelp & FAQ
© 2026 MPGH · All rights reserved.Built by the community, for the community. For educational purposes onlyContent is shared for security research and education — we don't condone illegal use. You're responsible for complying with applicable laws. Use at your own risk.
Home › Forum › MultiPlayer Game Hacks & Cheats › Other First Person Shooter Hacks › Overwatch Hacks & Cheats › Overwatch Coding & Resources › Source Codes

PostSource Codes

Posts 1–11 of 11 · Page 1 of 1
Jov
[MPGH]Jov
Source Codes
Korean Aimbot
Code:
; <COMPILER: v1.1.24.01>
guif:
#NoEnv
#SingleInstance force
SkinForm(Apply, A_ScriptDir . "\USkin.dll", A_ScriptDir . "\Milikymac.msstyles")
Gui, Add, Text, x12 y40 w200 h30 , 1280*720  Run Aim[F1]
Gui, Add, Text, x12 y60 w200 h30 , 1920*1080 Run Aim[F2]
Gui, Add, Text, x12 y80 w200 h30 ,  Restart Program[F3]
Gui, Add, Text, x12 y100 w200 h30 ,  Pause/Resume[ALT]
Gui, Add, CheckBox, x12 y130 w180 h40 vmccree, Mccree Right Click No Recoil
Gui, Add, CheckBox, x12 y160 w150 h40 vtorbjorn, Torbjorn Fast Reload
Gui, Add, CheckBox, x12 y190 w150 h40 vpharah, Pharah Fast Reload
Gui, Add, CheckBox, x12 y220 w150 h40 vreaper, Reaper Fast Reload
Gui, Add, CheckBox, x12 y250 w150 h40 vroadhog, RoadHog Fast Reload
Gui, Add, CheckBox, x292 y25 w150 h40 vaimtype Checked, Left Click AimLock
Gui, Add, CheckBox, x292 y55 w150 h40 vaimtype1, Right Click Aimlock
Gui, Add, Text, x232 y110 w120 h30 , Aim speed control
Gui, Add, Edit, x362 y110 w100 h30 vrx, 3
Gui, Add, Button, x232 y150 w230 h90 gchange1, Apply settings
gui, add, button, x5 y5 h20 w70 gsub1, Issues?
gui, add, button, x80 y5 h20 w70 gsub2, How-to
gui, add, button, x155 y5 h20 w70 gsub3, Best Settings
gui, add, button, x225 y5 h20 w100 gsub4, About Aim Speed!
Gui, Show
Loop {
Gui, Submit, NoHide
Sleep -1
}
Return
#If roadhog=1
$r::
Send {r}
Sleep 1880
Send {v}
Return
#If
Return
#If torbjorn=1
$r::
Send {r}
Sleep 1780
Send {v}
Return
#If
Return
#If pharah=1
$r::
Send {r}
Sleep 1200
Send {v}
Return
#If
return
#If reaper=1
$r::
Send {r}
Sleep 300
Send {v}
Return
#If
return
#If mccree=1
~RButton::
Loop
If GetKeyState("RButton") {
Sleep, 5
moveAmount := (moveAmount = 2) ? 3 : 0
mouseXY(moveAmount,3.4)
}
else
break
Return
mouseXY(x,y)
{
DllCall("mouse_event",int,1,int,x,int,y,uint,0,uint,0)
}
#If
return
sub1:
{
msgbox, Having issues?`n`nMccree Right Click No Recoil Does NOT!!! work with right click aimlock`nHOLD DOWN RIGHT CLICK FOR IT TO WORK DONT JUST PRESS BUTTON`n`nCheat is CPU intensive and only uses math.`n`nLowFPS: Lower Aim speed to 3.`nLowFPS: Lower resolution to 720p and play on low.`nLowFPS: If you get low fps after a playthrough, press F3 to restart the cheat.`n`nCursor jumping left or right when using Aim key?`n`nJumpBug:Your PC is lagging out when using Aimkey. Check LowFPS solution.`nJumpBug: Switch your resolution to 720p but use F2(1080p) with Aim Speed 3.`n`nAlways try the cheat out in Practice Range to find your best settings.
}
return
sub2:
{
msgbox, How-to:`n`nLaunch Game. Switch to Borderless Windowed mode.`nResolution has to be 720p or 1080p. As precaution, set your quality settings to Low.`n`nTo-use:`nPress F1 or F2 depending on your resolution.`nShoot an Enemy. When the Health Bar is visible press the aimkey to snap onto the target.`n`nIf nothing is happening make sure you are not using any desktop applications that alter your color settings or are recording your gameplay such as W10 DVR or Fraps.
}
return
sub3:
{
msgbox, Best Settings for the cheat (Legit):`n`nResolution: 1280x720`nAim Speed: 3
}
return
sub4:
{
msgbox, Higher the number, Faster the it locks on. `n`Lower the number, The slower it locks on.
}
return
GuiClose:
ExitApp
return
SkinForm(Param1 = "Apply", DLL = "", SkinName = ""){
if(Param1 = Apply){
DllCall("LoadLibrary", str, DLL)
DllCall(DLL . "\USkinInit", Int,0, Int,0, AStr, SkinName)
}else if(Param1 = 0){
DllCall(DLL . "\USkinExit")
}
}
Change1:
MsgBox,  Applied
Gui,Submit, Nohide
return
F1::
#Persistent
#KeyHistory, 0
#NoEnv
#HotKeyInterval 1
#MaxHotkeysPerInterval 127
#InstallKeybdHook
#UseHook
#SingleInstance, Force
SetKeyDelay,-1, 8
SetControlDelay, -1
SetMouseDelay, 0
SetWinDelay,-1
SendMode, InputThenPlay
SetBatchLines,-1
ListLines, Off
CoordMode, Mouse, Screen
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, Normal
ZeroX := 640
ZeroY := 360
CFovX := 320
CFovY := 200
ScanL := 500
ScanR := 800
ScanT := 180
ScanB := 400
GuiControlget, rX
Loop, {
if (aimtype=1)
{
GetKeyState, Mouse2, LButton, P
GoSub MouseMoves2
}
Gui,Submit, Nohide
if (aimtype1=1)
{
GetKeyState, Mouse2, RButton, P
GoSub MouseMoves2
}
ImageSearch, AimPixelX, AimPixelY,ScanL, ScanT, ScanR, ScanB,  *4 hhp.bmp
GoSub GetAimOffset
GoSub GetAimMoves
}
MouseMoves:
If ( Mouse2 == "D" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
MouseMoves1:
If ( Mouse2 == "U" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
GetAimOffset:
Gui,Submit, Nohide
AimX := AimPixelX - ZeroX +41
AimY := AimPixelY - ZeroY +63
If ( AimX+5 > 0) {
DirX := rx / 10
}
If ( AimX+5 < 0) {
DirX := (-rx) / 10
}
If ( AimY+2 > 0 ) {
DirY := rX /10 *0.5
}
If ( AimY+2 < 0 ) {
DirY := (-rx) /10 *0.5
}
AimOffsetX := AimX * DirX
AimOffsetY := AimY * DirY
Return
GetAimMoves:
RootX := Ceil(( AimOffsetX ** ( 1/2 )))
RootY := Ceil(( AimOffsetY ** ( 1/2 )))
MoveX := RootX * DirX
MoveY := RootY * DirY
Return
SleepF:
SleepDuration = 1
TimePeriod = 1
DllCall("Winmm\timeBeginPeriod", uint, TimePeriod)
Iterations = 1
StartTime := A_TickCount
Loop, %Iterations% {
DllCall("Sleep", UInt, TimePeriod)
}
DllCall("Winmm\timeEndPeriod", UInt, TimePeriod)
Return
DebugTool:
MouseGetPos, MX, MY
ToolTip, %AimOffsetX% | %AimOffsetY%
ToolTip, %AimX% | %AimY%
ToolTip, %IntAimX% | %IntAimY%
ToolTip, %RootX% | %RootY%
ToolTip, %MoveX% | %MoveY% || %MX% %MY%
Return
F2::
#Persistent
#KeyHistory, 0
#NoEnv
#HotKeyInterval 1
#MaxHotkeysPerInterval 2000
#InstallKeybdHook
#UseHook
#SingleInstance, Force
SetKeyDelay,-1, 8
SetControlDelay, -1
SetMouseDelay, 0
SetWinDelay,-1
SendMode, InputThenPlay
SetBatchLines,-1
ListLines, Off
CoordMode, Mouse, Screen
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, Normal
ZeroX := 960
ZeroY := 540
CFovX := 80
CFovY := 200
ScanL := 660
ScanR := 1250
ScanT := 280
ScanB := 610
GuiControlget, rX
Loop, {
Gui,Submit, Nohide
if (aimtype=1)
{
GetKeyState, Mouse2, LButton, P
GoSub MouseMoves2
}
if (aimtype1=1)
{
GetKeyState, Mouse2, RButton, P
GoSub MouseMoves2
}
ImageSearch, AimPixelX, AimPixelY, ScanL, ScanT, ScanR, ScanB,  *4 hhp2.bmp
GoSub GetAimOffset1
GoSub GetAimMoves1
}
MouseMoves2:
If ( Mouse2 == "D" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
MouseMoves11:
If ( Mouse2 == "U" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
GetAimOffset1:
Gui,Submit, Nohide
AimX := AimPixelX - ZeroX +58
AimY := AimPixelY - ZeroY +85
If ( AimX+10 > 0) {
DirX := rx / 10
}
If ( AimX+10 < 0) {
DirX := (-rx) / 10
}
If ( AimY+5 > 0 ) {
DirY := rX /10 *0.5
}
If ( AimY+5 < 0 ) {
DirY := (-rx) /10 *0.5
}
AimOffsetX := AimX * DirX
AimOffsetY := AimY * DirY
Return
GetAimMoves1:
RootX := Ceil(( AimOffsetX ** ( 1 )))
RootY := Ceil(( AimOffsetY ** ( 1 )))
MoveX := RootX * DirX
MoveY := RootY * DirY
Return
reload:
SleepF1:
SleepDuration = 1
TimePeriod = 1
DllCall("Winmm\timeBeginPeriod", uint, TimePeriod)
Iterations = 1
StartTime := A_TickCount
Loop, %Iterations% {
DllCall("Sleep", UInt, TimePeriod)
}
DllCall("Winmm\timeEndPeriod", UInt, TimePeriod)
Return
DebugTool1:
MouseGetPos, MX, MY
ToolTip, %AimOffsetX% | %AimOffsetY%
ToolTip, %AimX% | %AimY%
ToolTip, %IntAimX% | %IntAimY%
ToolTip, %RootX% | %RootY%
ToolTip, %MoveX% | %MoveY% || %MX% %MY%
Return
ALT::
pause
SoundBEEP
return
F3::
Reload
Return
First Pixelbot
Code:
; <COMPILER: v1.1.22.04>
#NoTrayIcon
#SingleInstance, Force
#NoEnv
UpdateLayeredWindow(hwnd, hdc, x="", y="", w="", h="", Alpha=255)
{
if ((x != "") && (y != ""))
VarSetCapacity(pt, 8), NumPut(x, pt, 0), NumPut(y, pt, 4)
if (w = "") ||(h = "")
WinGetPos,,, w, h, ahk_id %hwnd%
return DllCall("UpdateLayeredWindow", "uint", hwnd, "uint", 0, "uint", ((x = "") && (y = "")) ? 0 : &pt
, "int64*", w|h<<32, "uint", hdc, "int64*", 0, "uint", 0, "uint*", Alpha<<16|1<<24, "uint", 2)
}
BitBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, Raster="")
{
return DllCall("gdi32\BitBlt", "uint", dDC, "int", dx, "int", dy, "int", dw, "int", dh
, "uint", sDC, "int", sx, "int", sy, "uint", Raster ? Raster : 0x00CC0020)
}
StretchBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, sw, sh, Raster="")
{
return DllCall("gdi32\StretchBlt", "uint", ddc, "int", dx, "int", dy, "int", dw, "int", dh
, "uint", sdc, "int", sx, "int", sy, "int", sw, "int", sh, "uint", Raster ? Raster : 0x00CC0020)
}
SetStretchBltMode(hdc, iStretchMode=4)
{
return DllCall("gdi32\SetStretchBltMode", "uint", hdc, "int", iStretchMode)
}
SetImage(hwnd, hBitmap)
{
SendMessage, 0x172, 0x0, hBitmap,, ahk_id %hwnd%
E := ErrorLevel
DeleteObject(E)
return E
}
SetSysColorToControl(hwnd, SysColor=15)
{
WinGetPos,,, w, h, ahk_id %hwnd%
bc := DllCall("GetSysColor", "Int", SysColor)
pBrushClear := Gdip_BrushCreateSolid(0xff000000 | (bc >> 16 | bc & 0xff00 | (bc & 0xff) << 16))
pBitmap := Gdip_CreateBitmap(w, h), G := Gdip_GraphicsFromImage(pBitmap)
Gdip_FillRectangle(G, pBrushClear, 0, 0, w, h)
hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
SetImage(hwnd, hBitmap)
Gdip_DeleteBrush(pBrushClear)
Gdip_DeleteGraphics(G), Gdip_DisposeImage(pBitmap), DeleteObject(hBitmap)
return 0
}
Gdip_BitmapFromScreen(Screen=0, Raster="")
{
if (Screen = 0)
{
Sysget, x, 76
Sysget, y, 77
Sysget, w, 78
Sysget, h, 79
}
else if (SubStr(Screen, 1, 5) = "hwnd:")
{
Screen := SubStr(Screen, 6)
if !WinExist( "ahk_id " Screen)
return -2
WinGetPos,,, w, h, ahk_id %Screen%
x := y := 0
hhdc := GetDCEx(Screen, 3)
}
else if (Screen&1 != "")
{
Sysget, M, Monitor, %Screen%
x := MLeft, y := MTop, w := MRight-MLeft, h := MBottom-MTop
}
else
{
StringSplit, S, Screen, |
x := S1, y := S2, w := S3, h := S4
}
if (x = "") || (y = "") || (w = "") || (h = "")
return -1
chdc := CreateCompatibleDC(), hbm := CreateDIBSection(w, h, chdc), obm := SelectObject(chdc, hbm), hhdc := hhdc ? hhdc : GetDC()
BitBlt(chdc, 0, 0, w, h, hhdc, x, y, Raster)
ReleaseDC(hhdc)
pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm)
SelectObject(chdc, obm), DeleteObject(hbm), DeleteDC(hhdc), DeleteDC(chdc)
return pBitmap
}
Gdip_BitmapFromHWND(hwnd)
{
WinGetPos,,, Width, Height, ahk_id %hwnd%
hbm := CreateDIBSection(Width, Height), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)
PrintWindow(hwnd, hdc)
pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm)
SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
return pBitmap
}
CreateRectF(ByRef RectF, x, y, w, h)
{
VarSetCapacity(RectF, 16)
NumPut(x, RectF, 0, "float"), NumPut(y, RectF, 4, "float"), NumPut(w, RectF, 8, "float"), NumPut(h, RectF, 12, "float")
}
CreateRect(ByRef Rect, x, y, w, h)
{
VarSetCapacity(Rect, 16)
NumPut(x, Rect, 0, "uint"), NumPut(y, Rect, 4, "uint"), NumPut(w, Rect, 8, "uint"), NumPut(h, Rect, 12, "uint")
}
CreateSizeF(ByRef SizeF, w, h)
{
VarSetCapacity(SizeF, 8)
NumPut(w, SizeF, 0, "float"), NumPut(h, SizeF, 4, "float")
}
CreatePointF(ByRef PointF, x, y)
{
VarSetCapacity(PointF, 8)
NumPut(x, PointF, 0, "float"), NumPut(y, PointF, 4, "float")
}
CreateDIBSection(w, h, hdc="", bpp=32, ByRef ppvBits=0)
{
hdc2 := hdc ? hdc : GetDC()
VarSetCapacity(bi, 40, 0)
NumPut(w, bi, 4), NumPut(h, bi, 8), NumPut(40, bi, 0), NumPut(1, bi, 12, "ushort"), NumPut(0, bi, 16), NumPut(bpp, bi, 14, "ushort")
hbm := DllCall("CreateDIBSection", "uint" , hdc2, "uint" , &bi, "uint" , 0, "uint*", ppvBits, "uint" , 0, "uint" , 0)
if !hdc
ReleaseDC(hdc2)
return hbm
}
PrintWindow(hwnd, hdc, Flags=0)
{
return DllCall("PrintWindow", "uint", hwnd, "uint", hdc, "uint", Flags)
}
DestroyIcon(hIcon)
{
return DllCall("DestroyIcon", "uint", hIcon)
}
PaintDesktop(hdc)
{
return DllCall("PaintDesktop", "uint", hdc)
}
CreateCompatibleBitmap(hdc, w, h)
{
return DllCall("gdi32\CreateCompatibleBitmap", "uint", hdc, "int", w, "int", h)
}
CreateCompatibleDC(hdc=0)
{
return DllCall("CreateCompatibleDC", "uint", hdc)
}
SelectObject(hdc, hgdiobj)
{
return DllCall("SelectObject", "uint", hdc, "uint", hgdiobj)
}
DeleteObject(hObject)
{
return DllCall("DeleteObject", "uint", hObject)
}
GetDC(hwnd=0)
{
return DllCall("GetDC", "uint", hwnd)
}
GetDCEx(hwnd, flags=0, hrgnClip=0)
{
return DllCall("GetDCEx", "uint", hwnd, "uint", hrgnClip, "int", flags)
}
ReleaseDC(hdc, hwnd=0)
{
return DllCall("ReleaseDC", "uint", hwnd, "uint", hdc)
}
DeleteDC(hdc)
{
return DllCall("DeleteDC", "uint", hdc)
}
Gdip_LibraryVersion()
{
return 1.45
}
Gdip_BitmapFromBRA(ByRef BRAFromMemIn, File, Alternate=0)
{
if !BRAFromMemIn
return -1
Loop, Parse, BRAFromMemIn, `n
{
if (A_Index = 1)
{
StringSplit, Header, A_LoopField, |
if (Header0 != 4 || Header2 != "BRA!")
return -2
}
else if (A_Index = 2)
{
StringSplit, Info, A_LoopField, |
if (Info0 != 3)
return -3
}
else
break
}
if !Alternate
StringReplace, File, File, \, \\, All
RegExMatch(BRAFromMemIn, "mi`n)^" (Alternate ? File "\|.+?\|(\d+)\|(\d+)" : "\d+\|" File "\|(\d+)\|(\d+)") "$", FileInfo)
if !FileInfo
return -4
hData := DllCall("GlobalAlloc", "uint", 2, "uint", FileInfo2)
pData := DllCall("GlobalLock", "uint", hData)
DllCall("RtlMoveMemory", "uint", pData, "uint", &BRAFromMemIn+Info2+FileInfo1, "uint", FileInfo2)
DllCall("GlobalUnlock", "uint", hData)
DllCall("ole32\CreateStreamOnHGlobal", "uint", hData, "int", 1, "uint*", pStream)
DllCall("gdiplus\GdipCreateBitmapFromStream", "uint", pStream, "uint*", pBitmap)
DllCall(NumGet(NumGet(1*pStream)+8), "uint", pStream)
return pBitmap
}
Gdip_DrawRectangle(pGraphics, pPen, x, y, w, h)
{
return DllCall("gdiplus\GdipDrawRectangle", "uint", pGraphics, "uint", pPen, "float", x, "float", y, "float", w, "float", h)
}
Gdip_DrawRoundedRectangle(pGraphics, pPen, x, y, w, h, r)
{
Gdip_SetClipRect(pGraphics, x-r, y-r, 2*r, 2*r, 4)
Gdip_SetClipRect(pGraphics, x+w-r, y-r, 2*r, 2*r, 4)
Gdip_SetClipRect(pGraphics, x-r, y+h-r, 2*r, 2*r, 4)
Gdip_SetClipRect(pGraphics, x+w-r, y+h-r, 2*r, 2*r, 4)
E := Gdip_DrawRectangle(pGraphics, pPen, x, y, w, h)
Gdip_ResetClip(pGraphics)
Gdip_SetClipRect(pGraphics, x-(2*r), y+r, w+(4*r), h-(2*r), 4)
Gdip_SetClipRect(pGraphics, x+r, y-(2*r), w-(2*r), h+(4*r), 4)
Gdip_DrawEllipse(pGraphics, pPen, x, y, 2*r, 2*r)
Gdip_DrawEllipse(pGraphics, pPen, x+w-(2*r), y, 2*r, 2*r)
Gdip_DrawEllipse(pGraphics, pPen, x, y+h-(2*r), 2*r, 2*r)
Gdip_DrawEllipse(pGraphics, pPen, x+w-(2*r), y+h-(2*r), 2*r, 2*r)
Gdip_ResetClip(pGraphics)
return E
}
Gdip_DrawEllipse(pGraphics, pPen, x, y, w, h)
{
return DllCall("gdiplus\GdipDrawEllipse", "uint", pGraphics, "uint", pPen, "float", x, "float", y, "float", w, "float", h)
}
Gdip_DrawBezier(pGraphics, pPen, x1, y1, x2, y2, x3, y3, x4, y4)
{
return DllCall("gdiplus\GdipDrawBezier", "uint", pgraphics, "uint", pPen
, "float", x1, "float", y1, "float", x2, "float", y2
, "float", x3, "float", y3, "float", x4, "float", y4)
}
Gdip_DrawArc(pGraphics, pPen, x, y, w, h, StartAngle, SweepAngle)
{
return DllCall("gdiplus\GdipDrawArc", "uint", pGraphics, "uint", pPen, "float", x
, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
}
Gdip_DrawPie(pGraphics, pPen, x, y, w, h, StartAngle, SweepAngle)
{
return DllCall("gdiplus\GdipDrawPie", "uint", pGraphics, "uint", pPen, "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
}
Gdip_DrawLine(pGraphics, pPen, x1, y1, x2, y2)
{
return DllCall("gdiplus\GdipDrawLine", "uint", pGraphics, "uint", pPen
, "float", x1, "float", y1, "float", x2, "float", y2)
}
Gdip_DrawLines(pGraphics, pPen, Points)
{
StringSplit, Points, Points, |
VarSetCapacity(PointF, 8*Points0)
Loop, %Points0%
{
StringSplit, Coord, Points%A_Index%, `,
NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
}
return DllCall("gdiplus\GdipDrawLines", "uint", pGraphics, "uint", pPen, "uint", &PointF, "int", Points0)
}
Gdip_FillRectangle(pGraphics, pBrush, x, y, w, h)
{
return DllCall("gdiplus\GdipFillRectangle", "uint", pGraphics, "int", pBrush
, "float", x, "float", y, "float", w, "float", h)
}
Gdip_FillRoundedRectangle(pGraphics, pBrush, x, y, w, h, r)
{
Region := Gdip_GetClipRegion(pGraphics)
Gdip_SetClipRect(pGraphics, x-r, y-r, 2*r, 2*r, 4)
Gdip_SetClipRect(pGraphics, x+w-r, y-r, 2*r, 2*r, 4)
Gdip_SetClipRect(pGraphics, x-r, y+h-r, 2*r, 2*r, 4)
Gdip_SetClipRect(pGraphics, x+w-r, y+h-r, 2*r, 2*r, 4)
E := Gdip_FillRectangle(pGraphics, pBrush, x, y, w, h)
Gdip_SetClipRegion(pGraphics, Region, 0)
Gdip_SetClipRect(pGraphics, x-(2*r), y+r, w+(4*r), h-(2*r), 4)
Gdip_SetClipRect(pGraphics, x+r, y-(2*r), w-(2*r), h+(4*r), 4)
Gdip_FillEllipse(pGraphics, pBrush, x, y, 2*r, 2*r)
Gdip_FillEllipse(pGraphics, pBrush, x+w-(2*r), y, 2*r, 2*r)
Gdip_FillEllipse(pGraphics, pBrush, x, y+h-(2*r), 2*r, 2*r)
Gdip_FillEllipse(pGraphics, pBrush, x+w-(2*r), y+h-(2*r), 2*r, 2*r)
Gdip_SetClipRegion(pGraphics, Region, 0)
Gdip_DeleteRegion(Region)
return E
}
Gdip_FillPolygon(pGraphics, pBrush, Points, FillMode=0)
{
StringSplit, Points, Points, |
VarSetCapacity(PointF, 8*Points0)
Loop, %Points0%
{
StringSplit, Coord, Points%A_Index%, `,
NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
}
return DllCall("gdiplus\GdipFillPolygon", "uint", pGraphics, "uint", pBrush, "uint", &PointF, "int", Points0, "int", FillMode)
}
Gdip_FillPie(pGraphics, pBrush, x, y, w, h, StartAngle, SweepAngle)
{
return DllCall("gdiplus\GdipFillPie", "uint", pGraphics, "uint", pBrush
, "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
}
Gdip_FillEllipse(pGraphics, pBrush, x, y, w, h)
{
return DllCall("gdiplus\GdipFillEllipse", "uint", pGraphics, "uint", pBrush, "float", x, "float", y, "float", w, "float", h)
}
Gdip_FillRegion(pGraphics, pBrush, Region)
{
return DllCall("gdiplus\GdipFillRegion", "uint", pGraphics, "uint", pBrush, "uint", Region)
}
Gdip_FillPath(pGraphics, pBrush, Path)
{
return DllCall("gdiplus\GdipFillPath", "uint", pGraphics, "uint", pBrush, "uint", Path)
}
Gdip_DrawImagePointsRect(pGraphics, pBitmap, Points, sx="", sy="", sw="", sh="", Matrix=1)
{
StringSplit, Points, Points, |
VarSetCapacity(PointF, 8*Points0)
Loop, %Points0%
{
StringSplit, Coord, Points%A_Index%, `,
NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
}
if (Matrix&1 = "")
ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
else if (Matrix != 1)
ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
if (sx = "" && sy = "" && sw = "" && sh = "")
{
sx := 0, sy := 0
sw := Gdip_GetImageWidth(pBitmap)
sh := Gdip_GetImageHeight(pBitmap)
}
E := DllCall("gdiplus\GdipDrawImagePointsRect", "uint", pGraphics, "uint", pBitmap
, "uint", &PointF, "int", Points0, "float", sx, "float", sy, "float", sw, "float", sh
, "int", 2, "uint", ImageAttr, "uint", 0, "uint", 0)
if ImageAttr
Gdip_DisposeImageAttributes(ImageAttr)
return E
}
Gdip_DrawImage(pGraphics, pBitmap, dx="", dy="", dw="", dh="", sx="", sy="", sw="", sh="", Matrix=1)
{
if (Matrix&1 = "")
ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
else if (Matrix != 1)
ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
if (sx = "" && sy = "" && sw = "" && sh = "")
{
if (dx = "" && dy = "" && dw = "" && dh = "")
{
sx := dx := 0, sy := dy := 0
sw := dw := Gdip_GetImageWidth(pBitmap)
sh := dh := Gdip_GetImageHeight(pBitmap)
}
else
{
sx := sy := 0
sw := Gdip_GetImageWidth(pBitmap)
sh := Gdip_GetImageHeight(pBitmap)
}
}
E := DllCall("gdiplus\GdipDrawImageRectRect", "uint", pGraphics, "uint", pBitmap
, "float", dx, "float", dy, "float", dw, "float", dh
, "float", sx, "float", sy, "float", sw, "float", sh
, "int", 2, "uint", ImageAttr, "uint", 0, "uint", 0)
if ImageAttr
Gdip_DisposeImageAttributes(ImageAttr)
return E
}
Gdip_SetImageAttributesColorMatrix(Matrix)
{
VarSetCapacity(ColourMatrix, 100, 0)
Matrix := RegExReplace(RegExReplace(Matrix, "^[^\d-\.]+([\d\.])", "$1", "", 1), "[^\d-\.]+", "|")
StringSplit, Matrix, Matrix, |
Loop, 25
{
Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1
NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float")
}
DllCall("gdiplus\GdipCreateImageAttributes", "uint*", ImageAttr)
DllCall("gdiplus\GdipSetImageAttributesColorMatrix", "uint", ImageAttr, "int", 1, "int", 1, "uint", &ColourMatrix, "int", 0, "int", 0)
return ImageAttr
}
Gdip_GraphicsFromImage(pBitmap)
{
DllCall("gdiplus\GdipGetImageGraphicsContext", "uint", pBitmap, "uint*", pGraphics)
return pGraphics
}
Gdip_GraphicsFromHDC(hdc)
{
DllCall("gdiplus\GdipCreateFromHDC", "uint", hdc, "uint*", pGraphics)
return pGraphics
}
Gdip_GetDC(pGraphics)
{
DllCall("gdiplus\GdipGetDC", "uint", pGraphics, "uint*", hdc)
return hdc
}
Gdip_ReleaseDC(pGraphics, hdc)
{
return DllCall("gdiplus\GdipReleaseDC", "uint", pGraphics, "uint", hdc)
}
Gdip_GraphicsClear(pGraphics, ARGB=0x00ffffff)
{
return DllCall("gdiplus\GdipGraphicsClear", "uint", pGraphics, "int", ARGB)
}
Gdip_BlurBitmap(pBitmap, Blur)
{
if (Blur > 100) || (Blur < 1)
return -1
sWidth := Gdip_GetImageWidth(pBitmap), sHeight := Gdip_GetImageHeight(pBitmap)
dWidth := sWidth//Blur, dHeight := sHeight//Blur
pBitmap1 := Gdip_CreateBitmap(dWidth, dHeight)
G1 := Gdip_GraphicsFromImage(pBitmap1)
Gdip_SetInterpolationMode(G1, 7)
Gdip_DrawImage(G1, pBitmap, 0, 0, dWidth, dHeight, 0, 0, sWidth, sHeight)
Gdip_DeleteGraphics(G1)
pBitmap2 := Gdip_CreateBitmap(sWidth, sHeight)
G2 := Gdip_GraphicsFromImage(pBitmap2)
Gdip_SetInterpolationMode(G2, 7)
Gdip_DrawImage(G2, pBitmap1, 0, 0, sWidth, sHeight, 0, 0, dWidth, dHeight)
Gdip_DeleteGraphics(G2)
Gdip_DisposeImage(pBitmap1)
return pBitmap2
}
Gdip_SaveBitmapToFile(pBitmap, sOutput, Quality=75)
{
SplitPath, sOutput,,, Extension
if Extension not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
return -1
Extension := "." Extension
DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
VarSetCapacity(ci, nSize)
DllCall("gdiplus\GdipGetImageEncoders", "uint", nCount, "uint", nSize, "uint", &ci)
if !(nCount && nSize)
return -2
Loop, %nCount%
{
Location := NumGet(ci, 76*(A_Index-1)+44)
if !A_IsUnicode
{
nSize := DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "uint", 0, "int",  0, "uint", 0, "uint", 0)
VarSetCapacity(sString, nSize)
DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "str", sString, "int", nSize, "uint", 0, "uint", 0)
if !InStr(sString, "*" Extension)
continue
}
else
{
nSize := DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "uint", 0, "int",  0, "uint", 0, "uint", 0)
sString := ""
Loop, %nSize%
sString .= Chr(NumGet(Location+0, 2*(A_Index-1), "char"))
if !InStr(sString, "*" Extension)
continue
}
pCodec := &ci+76*(A_Index-1)
break
}
if !pCodec
return -3
if (Quality != 75)
{
Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
if Extension in .JPG,.JPEG,.JPE,.JFIF
{
DllCall("gdiplus\GdipGetEncoderParameterListSize", "uint", pBitmap, "uint", pCodec, "uint*", nSize)
VarSetCapacity(EncoderParameters, nSize, 0)
DllCall("gdiplus\GdipGetEncoderParameterList", "uint", pBitmap, "uint", pCodec, "uint", nSize, "uint", &EncoderParameters)
Loop, % NumGet(EncoderParameters)
{
if (NumGet(EncoderParameters, (28*(A_Index-1))+20) = 1) && (NumGet(EncoderParameters, (28*(A_Index-1))+24) = 6)
{
p := (28*(A_Index-1))+&EncoderParameters
NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20)))
break
}
}
}
}
if !A_IsUnicode
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sOutput, "int", -1, "uint", 0, "int", 0)
VarSetCapacity(wOutput, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sOutput, "int", -1, "uint", &wOutput, "int", nSize)
VarSetCapacity(wOutput, -1)
if !VarSetCapacity(wOutput)
return -4
E := DllCall("gdiplus\GdipSaveImageToFile", "uint", pBitmap, "uint", &wOutput, "uint", pCodec, "uint", p ? p : 0)
}
else
E := DllCall("gdiplus\GdipSaveImageToFile", "uint", pBitmap, "uint", &sOutput, "uint", pCodec, "uint", p ? p : 0)
return E ? -5 : 0
}
Gdip_GetPixel(pBitmap, x, y)
{
DllCall("gdiplus\GdipBitmapGetPixel", "uint", pBitmap, "int", x, "int", y, "uint*", ARGB)
return ARGB
}
Gdip_SetPixel(pBitmap, x, y, ARGB)
{
return DllCall("gdiplus\GdipBitmapSetPixel", "uint", pBitmap, "int", x, "int", y, "int", ARGB)
}
Gdip_GetImageWidth(pBitmap)
{
DllCall("gdiplus\GdipGetImageWidth", "uint", pBitmap, "uint*", Width)
return Width
}
Gdip_GetImageHeight(pBitmap)
{
DllCall("gdiplus\GdipGetImageHeight", "uint", pBitmap, "uint*", Height)
return Height
}
Gdip_GetImageDimensions(pBitmap, ByRef Width, ByRef Height)
{
DllCall("gdiplus\GdipGetImageWidth", "uint", pBitmap, "uint*", Width)
DllCall("gdiplus\GdipGetImageHeight", "uint", pBitmap, "uint*", Height)
}
Gdip_GetDimensions(pBitmap, ByRef Width, ByRef Height)
{
Gdip_GetImageDimensions(pBitmap, Width, Height)
}
Gdip_GetImagePixelFormat(pBitmap)
{
DllCall("gdiplus\GdipGetImagePixelFormat", "uint", pBitmap, "uint*", Format)
return Format
}
Gdip_GetDpiX(pGraphics)
{
DllCall("gdiplus\GdipGetDpiX", "uint", pGraphics, "float*", dpix)
return Round(dpix)
}
Gdip_GetDpiY(pGraphics)
{
DllCall("gdiplus\GdipGetDpiY", "uint", pGraphics, "float*", dpiy)
return Round(dpiy)
}
Gdip_GetImageHorizontalResolution(pBitmap)
{
DllCall("gdiplus\GdipGetImageHorizontalResolution", "uint", pBitmap, "float*", dpix)
return Round(dpix)
}
Gdip_GetImageVerticalResolution(pBitmap)
{
DllCall("gdiplus\GdipGetImageVerticalResolution", "uint", pBitmap, "float*", dpiy)
return Round(dpiy)
}
Gdip_BitmapSetResolution(pBitmap, dpix, dpiy)
{
return DllCall("gdiplus\GdipBitmapSetResolution", "uint", pBitmap, "float", dpix, "float", dpiy)
}
Gdip_CreateBitmapFromFile(sFile, IconNumber=1, IconSize="")
{
SplitPath, sFile,,, ext
if ext in exe,dll
{
Sizes := IconSize ? IconSize : 256 "|" 128 "|" 64 "|" 48 "|" 32 "|" 16
VarSetCapacity(buf, 40)
Loop, Parse, Sizes, |
{
DllCall("PrivateExtractIcons", "str", sFile, "int", IconNumber-1, "int", A_LoopField, "int", A_LoopField, "uint*", hIcon, "uint*", 0, "uint", 1, "uint", 0)
if !hIcon
continue
if !DllCall("GetIconInfo", "uint", hIcon, "uint", &buf)
{
DestroyIcon(hIcon)
continue
}
hbmColor := NumGet(buf, 16)
hbmMask  := NumGet(buf, 12)
if !(hbmColor && DllCall("GetObject", "uint", hbmColor, "int", 24, "uint", &buf))
{
DestroyIcon(hIcon)
continue
}
break
}
if !hIcon
return -1
Width := NumGet(buf, 4, "int"),  Height := NumGet(buf, 8, "int")
hbm := CreateDIBSection(Width, -Height), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)
if !DllCall("DrawIconEx", "uint", hdc, "int", 0, "int", 0, "uint", hIcon, "uint", Width, "uint", Height, "uint", 0, "uint", 0, "uint", 3)
{
DestroyIcon(hIcon)
return -2
}
VarSetCapacity(dib, 84)
DllCall("GetObject", "uint", hbm, "int", 84, "uint", &dib)
Stride := NumGet(dib, 12), Bits := NumGet(dib, 20)
DllCall("gdiplus\GdipCreateBitmapFromScan0", "int", Width, "int", Height, "int", Stride, "int", 0x26200A, "uint", Bits, "uint*", pBitmapOld)
pBitmap := Gdip_CreateBitmap(Width, Height), G := Gdip_GraphicsFromImage(pBitmap)
Gdip_DrawImage(G, pBitmapOld, 0, 0, Width, Height, 0, 0, Width, Height)
SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
Gdip_DeleteGraphics(G), Gdip_DisposeImage(pBitmapOld)
DestroyIcon(hIcon)
}
else
{
if !A_IsUnicode
{
VarSetCapacity(wFile, 1023)
DllCall("kernel32\MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sFile, "int", -1, "uint", &wFile, "int", 512)
DllCall("gdiplus\GdipCreateBitmapFromFile", "uint", &wFile, "uint*", pBitmap)
}
else
DllCall("gdiplus\GdipCreateBitmapFromFile", "uint", &sFile, "uint*", pBitmap)
}
return pBitmap
}
Gdip_CreateBitmapFromHBITMAP(hBitmap, Palette=0)
{
DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "uint", hBitmap, "uint", Palette, "uint*", pBitmap)
return pBitmap
}
Gdip_CreateHBITMAPFromBitmap(pBitmap, Background=0xffffffff)
{
DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "uint", pBitmap, "uint*", hbm, "int", Background)
return hbm
}
Gdip_CreateBitmapFromHICON(hIcon)
{
DllCall("gdiplus\GdipCreateBitmapFromHICON", "uint", hIcon, "uint*", pBitmap)
return pBitmap
}
Gdip_CreateHICONFromBitmap(pBitmap)
{
DllCall("gdiplus\GdipCreateHICONFromBitmap", "uint", pBitmap, "uint*", hIcon)
return hIcon
}
Gdip_CreateBitmap(Width, Height, Format=0x26200A)
{
DllCall("gdiplus\GdipCreateBitmapFromScan0", "int", Width, "int", Height, "int", 0, "int", Format, "uint", 0, "uint*", pBitmap)
Return pBitmap
}
Gdip_CreateBitmapFromClipboard()
{
if !DllCall("OpenClipboard", "uint", 0)
return -1
if !DllCall("IsClipboardFormatAvailable", "uint", 8)
return -2
if !hBitmap := DllCall("GetClipboardData", "uint", 2)
return -3
if !pBitmap := Gdip_CreateBitmapFromHBITMAP(hBitmap)
return -4
if !DllCall("CloseClipboard")
return -5
DeleteObject(hBitmap)
return pBitmap
}
Gdip_SetBitmapToClipboard(pBitmap)
{
hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
DllCall("GetObject", "uint", hBitmap, "int", VarSetCapacity(oi, 84, 0), "uint", &oi)
hdib := DllCall("GlobalAlloc", "uint", 2, "uint", 40+NumGet(oi, 44))
pdib := DllCall("GlobalLock", "uint", hdib)
DllCall("RtlMoveMemory", "uint", pdib, "uint", &oi+24, "uint", 40)
DllCall("RtlMoveMemory", "Uint", pdib+40, "Uint", NumGet(oi, 20), "uint", NumGet(oi, 44))
DllCall("GlobalUnlock", "uint", hdib)
DllCall("DeleteObject", "uint", hBitmap)
DllCall("OpenClipboard", "uint", 0)
DllCall("EmptyClipboard")
DllCall("SetClipboardData", "uint", 8, "uint", hdib)
DllCall("CloseClipboard")
}
Gdip_CloneBitmapArea(pBitmap, x, y, w, h, Format=0x26200A)
{
DllCall("gdiplus\GdipCloneBitmapArea", "float", x, "float", y, "float", w, "float", h
, "int", Format, "uint", pBitmap, "uint*", pBitmapDest)
return pBitmapDest
}
Gdip_CreatePen(ARGB, w)
{
DllCall("gdiplus\GdipCreatePen1", "int", ARGB, "float", w, "int", 2, "uint*", pPen)
return pPen
}
Gdip_CreatePenFromBrush(pBrush, w)
{
DllCall("gdiplus\GdipCreatePen2", "uint", pBrush, "float", w, "int", 2, "uint*", pPen)
return pPen
}
Gdip_BrushCreateSolid(ARGB=0xff000000)
{
DllCall("gdiplus\GdipCreateSolidFill", "int", ARGB, "uint*", pBrush)
return pBrush
}
Gdip_BrushCreateHatch(ARGBfront, ARGBback, HatchStyle=0)
{
DllCall("gdiplus\GdipCreateHatchBrush", "int", HatchStyle, "int", ARGBfront, "int", ARGBback, "uint*", pBrush)
return pBrush
}
Gdip_CreateTextureBrush(pBitmap, WrapMode=1, x=0, y=0, w="", h="")
{
if !(w && h)
DllCall("gdiplus\GdipCreateTexture", "uint", pBitmap, "int", WrapMode, "uint*", pBrush)
else
DllCall("gdiplus\GdipCreateTexture2", "uint", pBitmap, "int", WrapMode, "float", x, "float", y, "float", w, "float", h, "uint*", pBrush)
return pBrush
}
Gdip_CreateLineBrush(x1, y1, x2, y2, ARGB1, ARGB2, WrapMode=1)
{
CreatePointF(PointF1, x1, y1), CreatePointF(PointF2, x2, y2)
DllCall("gdiplus\GdipCreateLineBrush", "uint", &PointF1, "uint", &PointF2, "int", ARGB1, "int", ARGB2, "int", WrapMode, "uint*", LGpBrush)
return LGpBrush
}
Gdip_CreateLineBrushFromRect(x, y, w, h, ARGB1, ARGB2, LinearGradientMode=1, WrapMode=1)
{
CreateRectF(RectF, x, y, w, h)
DllCall("gdiplus\GdipCreateLineBrushFromRect", "uint", &RectF, "int", ARGB1, "int", ARGB2, "int", LinearGradientMode, "int", WrapMode, "uint*", LGpBrush)
return LGpBrush
}
Gdip_CloneBrush(pBrush)
{
DllCall("gdiplus\GdipCloneBrush", "uint", pBrush, "uint*", pBrushClone)
return pBrushClone
}
Gdip_DeletePen(pPen)
{
return DllCall("gdiplus\GdipDeletePen", "uint", pPen)
}
Gdip_DeleteBrush(pBrush)
{
return DllCall("gdiplus\GdipDeleteBrush", "uint", pBrush)
}
Gdip_DisposeImage(pBitmap)
{
return DllCall("gdiplus\GdipDisposeImage", "uint", pBitmap)
}
Gdip_DeleteGraphics(pGraphics)
{
return DllCall("gdiplus\GdipDeleteGraphics", "uint", pGraphics)
}
Gdip_DisposeImageAttributes(ImageAttr)
{
return DllCall("gdiplus\GdipDisposeImageAttributes", "uint", ImageAttr)
}
Gdip_DeleteFont(hFont)
{
return DllCall("gdiplus\GdipDeleteFont", "uint", hFont)
}
Gdip_DeleteStringFormat(hFormat)
{
return DllCall("gdiplus\GdipDeleteStringFormat", "uint", hFormat)
}
Gdip_DeleteFontFamily(hFamily)
{
return DllCall("gdiplus\GdipDeleteFontFamily", "uint", hFamily)
}
Gdip_DeleteMatrix(Matrix)
{
return DllCall("gdiplus\GdipDeleteMatrix", "uint", Matrix)
}
Gdip_TextToGraphics(pGraphics, Text, Options, Font="Arial", Width="", Height="", Measure=0)
{
IWidth := Width, IHeight:= Height
RegExMatch(Options, "i)X([\-\d\.]+)(p*)", xpos)
RegExMatch(Options, "i)Y([\-\d\.]+)(p*)", ypos)
RegExMatch(Options, "i)W([\-\d\.]+)(p*)", Width)
RegExMatch(Options, "i)H([\-\d\.]+)(p*)", Height)
RegExMatch(Options, "i)C(?!(entre|enter))([a-f\d]+)", Colour)
RegExMatch(Options, "i)Top|Up|Bottom|Down|vCentre|vCenter", vPos)
RegExMatch(Options, "i)NoWrap", NoWrap)
RegExMatch(Options, "i)R(\d)", Rendering)
RegExMatch(Options, "i)S(\d+)(p*)", Size)
if !Gdip_DeleteBrush(Gdip_CloneBrush(Colour2))
PassBrush := 1, pBrush := Colour2
if !(IWidth && IHeight) && (xpos2 || ypos2 || Width2 || Height2 || Size2)
return -1
Style := 0, Styles := "Regular|Bold|Italic|BoldItalic|Underline|Strikeout"
Loop, Parse, Styles, |
{
if RegExMatch(Options, "\b" A_loopField)
Style |= (A_LoopField != "StrikeOut") ? (A_Index-1) : 8
}
Align := 0, Alignments := "Near|Left|Centre|Center|Far|Right"
Loop, Parse, Alignments, |
{
if RegExMatch(Options, "\b" A_loopField)
Align |= A_Index//2.1
}
xpos := (xpos1 != "") ? xpos2 ? IWidth*(xpos1/100) : xpos1 : 0
ypos := (ypos1 != "") ? ypos2 ? IHeight*(ypos1/100) : ypos1 : 0
Width := Width1 ? Width2 ? IWidth*(Width1/100) : Width1 : IWidth
Height := Height1 ? Height2 ? IHeight*(Height1/100) : Height1 : IHeight
if !PassBrush
Colour := "0x" (Colour2 ? Colour2 : "ff000000")
Rendering := ((Rendering1 >= 0) && (Rendering1 <= 5)) ? Rendering1 : 4
Size := (Size1 > 0) ? Size2 ? IHeight*(Size1/100) : Size1 : 12
hFamily := Gdip_FontFamilyCreate(Font)
hFont := Gdip_FontCreate(hFamily, Size, Style)
FormatStyle := NoWrap ? 0x4000 | 0x1000 : 0x4000
hFormat := Gdip_StringFormatCreate(FormatStyle)
pBrush := PassBrush ? pBrush : Gdip_BrushCreateSolid(Colour)
if !(hFamily && hFont && hFormat && pBrush && pGraphics)
return !pGraphics ? -2 : !hFamily ? -3 : !hFont ? -4 : !hFormat ? -5 : !pBrush ? -6 : 0
CreateRectF(RC, xpos, ypos, Width, Height)
Gdip_SetStringFormatAlign(hFormat, Align)
Gdip_SetTextRenderingHint(pGraphics, Rendering)
ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
if vPos
{
StringSplit, ReturnRC, ReturnRC, |
if (vPos = "vCentre") || (vPos = "vCenter")
ypos += (Height-ReturnRC4)//2
else if (vPos = "Top") || (vPos = "Up")
ypos := 0
else if (vPos = "Bottom") || (vPos = "Down")
ypos := Height-ReturnRC4
CreateRectF(RC, xpos, ypos, Width, ReturnRC4)
ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
}
if !Measure
E := Gdip_DrawString(pGraphics, Text, hFont, hFormat, pBrush, RC)
if !PassBrush
Gdip_DeleteBrush(pBrush)
Gdip_DeleteStringFormat(hFormat)
Gdip_DeleteFont(hFont)
Gdip_DeleteFontFamily(hFamily)
return E ? E : ReturnRC
}
Gdip_DrawString(pGraphics, sString, hFont, hFormat, pBrush, ByRef RectF)
{
if !A_IsUnicode
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", 0, "int", 0)
VarSetCapacity(wString, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", &wString, "int", nSize)
return DllCall("gdiplus\GdipDrawString", "uint", pGraphics
, "uint", &wString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", pBrush)
}
else
{
return DllCall("gdiplus\GdipDrawString", "uint", pGraphics
, "uint", &sString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", pBrush)
}
}
Gdip_MeasureString(pGraphics, sString, hFont, hFormat, ByRef RectF)
{
VarSetCapacity(RC, 16)
if !A_IsUnicode
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", 0, "int", 0)
VarSetCapacity(wString, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", &wString, "int", nSize)
DllCall("gdiplus\GdipMeasureString", "uint", pGraphics
, "uint", &wString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", &RC, "uint*", Chars, "uint*", Lines)
}
else
{
DllCall("gdiplus\GdipMeasureString", "uint", pGraphics
, "uint", &sString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", &RC, "uint*", Chars, "uint*", Lines)
}
return &RC ? NumGet(RC, 0, "float") "|" NumGet(RC, 4, "float") "|" NumGet(RC, 8, "float") "|" NumGet(RC, 12, "float") "|" Chars "|" Lines : 0
}
Gdip_SetStringFormatAlign(hFormat, Align)
{
return DllCall("gdiplus\GdipSetStringFormatAlign", "uint", hFormat, "int", Align)
}
Gdip_StringFormatCreate(Format=0, Lang=0)
{
DllCall("gdiplus\GdipCreateStringFormat", "int", Format, "int", Lang, "uint*", hFormat)
return hFormat
}
Gdip_FontCreate(hFamily, Size, Style=0)
{
DllCall("gdiplus\GdipCreateFont", "uint", hFamily, "float", Size, "int", Style, "int", 0, "uint*", hFont)
return hFont
}
Gdip_FontFamilyCreate(Font)
{
if !A_IsUnicode
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &Font, "int", -1, "uint", 0, "int", 0)
VarSetCapacity(wFont, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &Font, "int", -1, "uint", &wFont, "int", nSize)
DllCall("gdiplus\GdipCreateFontFamilyFromName", "uint", &wFont, "uint", 0, "uint*", hFamily)
}
else
DllCall("gdiplus\GdipCreateFontFamilyFromName", "uint", &Font, "uint", 0, "uint*", hFamily)
return hFamily
}
Gdip_CreateAffineMatrix(m11, m12, m21, m22, x, y)
{
DllCall("gdiplus\GdipCreateMatrix2", "float", m11, "float", m12, "float", m21, "float", m22, "float", x, "float", y, "uint*", Matrix)
return Matrix
}
Gdip_CreateMatrix()
{
DllCall("gdiplus\GdipCreateMatrix", "uint*", Matrix)
return Matrix
}
Gdip_CreatePath(BrushMode=0)
{
DllCall("gdiplus\GdipCreatePath", "int", BrushMode, "uint*", Path)
return Path
}
Gdip_AddPathEllipse(Path, x, y, w, h)
{
return DllCall("gdiplus\GdipAddPathEllipse", "uint", Path, "float", x, "float", y, "float", w, "float", h)
}
Gdip_AddPathPolygon(Path, Points)
{
StringSplit, Points, Points, |
VarSetCapacity(PointF, 8*Points0)
Loop, %Points0%
{
StringSplit, Coord, Points%A_Index%, `,
NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
}
return DllCall("gdiplus\GdipAddPathPolygon", "uint", Path, "uint", &PointF, "int", Points0)
}
Gdip_DeletePath(Path)
{
return DllCall("gdiplus\GdipDeletePath", "uint", Path)
}
Gdip_SetTextRenderingHint(pGraphics, RenderingHint)
{
return DllCall("gdiplus\GdipSetTextRenderingHint", "uint", pGraphics, "int", RenderingHint)
}
Gdip_SetInterpolationMode(pGraphics, InterpolationMode)
{
return DllCall("gdiplus\GdipSetInterpolationMode", "uint", pGraphics, "int", InterpolationMode)
}
Gdip_SetSmoothingMode(pGraphics, SmoothingMode)
{
return DllCall("gdiplus\GdipSetSmoothingMode", "uint", pGraphics, "int", SmoothingMode)
}
Gdip_SetCompositingMode(pGraphics, CompositingMode=0)
{
return DllCall("gdiplus\GdipSetCompositingMode", "uint", pGraphics, "int", CompositingMode)
}
Gdip_Startup()
{
if !DllCall("GetModuleHandle", "str", "gdiplus")
DllCall("LoadLibrary", "str", "gdiplus")
VarSetCapacity(si, 16, 0), si := Chr(1)
DllCall("gdiplus\GdiplusStartup", "uint*", pToken, "uint", &si, "uint", 0)
return pToken
}
Gdip_Shutdown(pToken)
{
DllCall("gdiplus\GdiplusShutdown", "uint", pToken)
if hModule := DllCall("GetModuleHandle", "str", "gdiplus")
DllCall("FreeLibrary", "uint", hModule)
return 0
}
Gdip_RotateWorldTransform(pGraphics, Angle, MatrixOrder=0)
{
return DllCall("gdiplus\GdipRotateWorldTransform", "uint", pGraphics, "float", Angle, "int", MatrixOrder)
}
Gdip_ScaleWorldTransform(pGraphics, x, y, MatrixOrder=0)
{
return DllCall("gdiplus\GdipScaleWorldTransform", "uint", pGraphics, "float", x, "float", y, "int", MatrixOrder)
}
Gdip_TranslateWorldTransform(pGraphics, x, y, MatrixOrder=0)
{
return DllCall("gdiplus\GdipTranslateWorldTransform", "uint", pGraphics, "float", x, "float", y, "int", MatrixOrder)
}
Gdip_ResetWorldTransform(pGraphics)
{
return DllCall("gdiplus\GdipResetWorldTransform", "uint", pGraphics)
}
Gdip_GetRotatedTranslation(Width, Height, Angle, ByRef xTranslation, ByRef yTranslation)
{
pi := 3.14159, TAngle := Angle*(pi/180)
Bound := (Angle >= 0) ? Mod(Angle, 360) : 360-Mod(-Angle, -360)
if ((Bound >= 0) && (Bound <= 90))
xTranslation := Height*Sin(TAngle), yTranslation := 0
else if ((Bound > 90) && (Bound <= 180))
xTranslation := (Height*Sin(TAngle))-(Width*Cos(TAngle)), yTranslation := -Height*Cos(TAngle)
else if ((Bound > 180) && (Bound <= 270))
xTranslation := -(Width*Cos(TAngle)), yTranslation := -(Height*Cos(TAngle))-(Width*Sin(TAngle))
else if ((Bound > 270) && (Bound <= 360))
xTranslation := 0, yTranslation := -Width*Sin(TAngle)
}
Gdip_GetRotatedDimensions(Width, Height, Angle, ByRef RWidth, ByRef RHeight)
{
pi := 3.14159, TAngle := Angle*(pi/180)
if !(Width && Height)
return -1
RWidth := Ceil(Abs(Width*Cos(TAngle))+Abs(Height*Sin(TAngle)))
RHeight := Ceil(Abs(Width*Sin(TAngle))+Abs(Height*Cos(Tangle)))
}
Gdip_ImageRotateFlip(pBitmap, RotateFlipType=1)
{
return DllCall("gdiplus\GdipImageRotateFlip", "uint", pBitmap, "int", RotateFlipType)
}
Gdip_SetClipRect(pGraphics, x, y, w, h, CombineMode=0)
{
return DllCall("gdiplus\GdipSetClipRect", "uint", pGraphics, "float", x, "float", y, "float", w, "float", h, "int", CombineMode)
}
Gdip_SetClipPath(pGraphics, Path, CombineMode=0)
{
return DllCall("gdiplus\GdipSetClipPath", "uint", pGraphics, "uint", Path, "int", CombineMode)
}
Gdip_ResetClip(pGraphics)
{
return DllCall("gdiplus\GdipResetClip", "uint", pGraphics)
}
Gdip_GetClipRegion(pGraphics)
{
Region := Gdip_CreateRegion()
DllCall("gdiplus\GdipGetClip", "uint" pGraphics, "uint*", Region)
return Region
}
Gdip_SetClipRegion(pGraphics, Region, CombineMode=0)
{
return DllCall("gdiplus\GdipSetClipRegion", "uint", pGraphics, "uint", Region, "int", CombineMode)
}
Gdip_CreateRegion()
{
DllCall("gdiplus\GdipCreateRegion", "uint*", Region)
return Region
}
Gdip_DeleteRegion(Region)
{
return DllCall("gdiplus\GdipDeleteRegion", "uint", Region)
}
Gdip_LockBits(pBitmap, x, y, w, h, ByRef Stride, ByRef Scan0, ByRef BitmapData, LockMode = 3, PixelFormat = 0x26200a)
{
CreateRect(Rect, x, y, w, h)
VarSetCapacity(BitmapData, 21, 0)
E := DllCall("Gdiplus\GdipBitmapLockBits", "uint", pBitmap, "uint", &Rect, "uint", LockMode, "int", PixelFormat, "uint", &BitmapData)
Stride := NumGet(BitmapData, 8)
Scan0 := NumGet(BitmapData, 16)
return E
}
Gdip_UnlockBits(pBitmap, ByRef BitmapData)
{
return DllCall("Gdiplus\GdipBitmapUnlockBits", "uint", pBitmap, "uint", &BitmapData)
}
Gdip_SetLockBitPixel(ARGB, Scan0, x, y, Stride)
{
Numput(ARGB, Scan0+0, (x*4)+(y*Stride))
}
Gdip_GetLockBitPixel(Scan0, x, y, Stride)
{
return NumGet(Scan0+0, (x*4)+(y*Stride))
}
Gdip_PixelateBitmap(pBitmap, ByRef pBitmapOut, BlockSize)
{
static PixelateBitmap
if !PixelateBitmap
{
MCode_PixelateBitmap := "83EC388B4424485355568B74245C99F7FE8B5C244C8B6C2448578BF88BCA894C241C897C243485FF0F8E2E0300008B44245"
. "499F7FE897C24448944242833C089542418894424308944242CEB038D490033FF397C2428897C24380F8E750100008BCE0FAFCE894C24408DA4240000"
. "000033C03BF08944241089442460894424580F8E8A0000008B5C242C8D4D028BD52BD183C203895424208D3CBB0FAFFE8BD52BD142895424248BD52BD"
. "103F9897C24148974243C8BCF8BFE8DA424000000008B5C24200FB61C0B03C30FB619015C24588B5C24240FB61C0B015C24600FB61C11015C241083C1"
. "0483EF0175D38B7C2414037C245C836C243C01897C241475B58B7C24388B6C244C8B5C24508B4C244099F7F9894424148B44245899F7F9894424588B4"
. "4246099F7F9894424608B44241099F7F98944241085F60F8E820000008D4B028BC32BC18D68038B44242C8D04B80FAFC68BD32BD142895424248BD32B"
. "D103C18944243C89742420EB038D49008BC88BFE0FB64424148B5C24248804290FB644245888010FB644246088040B0FB644241088040A83C10483EF0"
. "175D58B44243C0344245C836C2420018944243C75BE8B4C24408B5C24508B6C244C8B7C2438473B7C2428897C24380F8C9FFEFFFF8B4C241C33D23954"
. "24180F846401000033C03BF2895424108954246089542458895424148944243C0F8E82000000EB0233D2395424187E6F8B4C243003C80FAF4C245C8B4"
. "424280FAFC68D550203CA8D0C818BC52BC283C003894424208BC52BC2408BFD2BFA8B54241889442424895424408B4424200FB614080FB60101542414"
. "8B542424014424580FB6040A0FB61439014424600154241083C104836C24400175CF8B44243C403BC68944243C7C808B4C24188B4424140FAFCE99F7F"
. "9894424148B44245899F7F9894424588B44246099F7F9894424608B44241099F7F98944241033C08944243C85F60F8E7F000000837C2418007E6F8B4C"
. "243003C80FAF4C245C8B4424280FAFC68D530203CA8D0C818BC32BC283C003894424208BC32BC2408BFB2BFA8B54241889442424895424400FB644241"
. "48B5424208804110FB64424580FB654246088018B4424248814010FB654241088143983C104836C24400175CF8B44243C403BC68944243C7C818B4C24"
. "1C8B44245C0144242C01742430836C2444010F85F4FCFFFF8B44245499F7FE895424188944242885C00F8E890100008BF90FAFFE33D2897C243C89542"
. "45489442438EB0233D233C03BCA89542410895424608954245889542414894424400F8E840000003BF27E738B4C24340FAFCE03C80FAF4C245C034C24"
. "548D55028BC52BC283C003894424208BC52BC2408BFD03CA894424242BFA89742444908B5424200FB6040A0FB611014424148B442424015424580FB61"
. "4080FB6040F015424600144241083C104836C24440175CF8B4424408B7C243C8B4C241C33D2403BC1894424400F8C7CFFFFFF8B44241499F7FF894424"
. "148B44245899F7FF894424588B44246099F7FF894424608B44241099F7FF8944241033C08944244085C90F8E8000000085F67E738B4C24340FAFCE03C"
. "80FAF4C245C034C24548D53028BC32BC283C003894424208BC32BC2408BFB03CA894424242BFA897424448D49000FB65424148B4424208814010FB654"
. "24580FB644246088118B5424248804110FB644241088043983C104836C24440175CF8B4424408B7C243C8B4C241C403BC1894424407C808D04B500000"
. "00001442454836C2438010F858CFEFFFF33D233C03BCA89542410895424608954245889542414894424440F8E9A000000EB048BFF33D2395424180F8E"
. "7D0000008B4C24340FAFCE03C80FAF4C245C8B4424280FAFC68D550203CA8D0C818BC52BC283C003894424208BC52BC240894424248BC52BC28B54241"
. "8895424548DA424000000008B5424200FB6140A015424140FB611015424588B5424240FB6140A015424600FB614010154241083C104836C24540175CF"
. "8B4424448B4C241C403BC1894424440F8C6AFFFFFF0FAF4C24188B44241499F7F9894424148B44245899F7F9894424588B44246099F7F9894424608B4"
. "4241099F7F98944241033C03944241C894424540F8E7B0000008B7C241885FF7E688B4C24340FAFCE03C80FAF4C245C8B4424280FAFC68D530203CA8D"
. "0C818BC32BC283C003894424208BC32BC2408BEB894424242BEA0FB65424148B4424208814010FB65424580FB644246088118B5424248804110FB6442"
. "41088042983C10483EF0175D18B442454403B44241C894424547C855F5E5D33C05B83C438C3"
VarSetCapacity(PixelateBitmap, StrLen(MCode_PixelateBitmap)//2)
Loop % StrLen(MCode_PixelateBitmap)//2
NumPut("0x" SubStr(MCode_PixelateBitmap, (2*A_Index)-1, 2), PixelateBitmap, A_Index-1, "char")
}
Gdip_GetImageDimensions(pBitmap, Width, Height)
if (Width != Gdip_GetImageWidth(pBitmapOut) || Height != Gdip_GetImageHeight(pBitmapOut))
return -1
if (BlockSize > Width || BlockSize > Height)
return -2
E1 := Gdip_LockBits(pBitmap, 0, 0, Width, Height, Stride1, Scan01, BitmapData1)
E2 := Gdip_LockBits(pBitmapOut, 0, 0, Width, Height, Stride2, Scan02, BitmapData2)
if (E1 || E2)
return -3
E := DllCall(&PixelateBitmap, "uint", Scan01, "uint", Scan02, "int", Width, "int", Height, "int", Stride1, "int", BlockSize)
Gdip_UnlockBits(pBitmap, BitmapData1), Gdip_UnlockBits(pBitmapOut, BitmapData2)
return 0
}
Gdip_ToARGB(A, R, G, B)
{
return (A << 24) | (R << 16) | (G << 8) | B
}
Gdip_FromARGB(ARGB, ByRef A, ByRef R, ByRef G, ByRef B)
{
A := (0xff000000 & ARGB) >> 24
R := (0x00ff0000 & ARGB) >> 16
G := (0x0000ff00 & ARGB) >> 8
B := 0x000000ff & ARGB
}
Gdip_AFromARGB(ARGB)
{
return (0xff000000 & ARGB) >> 24
}
Gdip_RFromARGB(ARGB)
{
return (0x00ff0000 & ARGB) >> 16
}
Gdip_GFromARGB(ARGB)
{
return (0x0000ff00 & ARGB) >> 8
}
Gdip_BFromARGB(ARGB)
{
return 0x000000ff & ARGB
}
global layout, tooltipArray, pToken, Scan0, Stride, ts
SetBatchLines,-1
SetMouseDelay,-1
coordmode,mouse,screen
coordmode,tooltip,screen
LoadLayout()
Tooltip()
ts := new TempSettings()
ts.Refresh()
altMouse := 1
return
~F12::
~home::
~delete::
Tooltip()
return
~up::Tooltip(,-1)
~down::Tooltip(,1)
~right::Tooltip(1)
~left::Tooltip(-1)
aim:
if (!active) {
active := true
while (GetKeyState(strreplace(a_thishotkey,"~"),"P")) {
match := false
QPX(True)
movepoint := new point(0,0)
movepoint2 := new point(0,-1)
if (ts.alternative == 1) {
pbmp := Gdip_BitmapFromScreen(ts.search_offset.x "|" ts.search_offset.y "|" ts.dimensions.x "|" ts.dimensions.y)
E1 := Gdip_LockBits(pbmp, 0, 0, ts.dimensions.x, ts.dimensions.y, Stride, Scan0, BitmapData,1)
}
else if (ts.alternative == 2) {
}
else {
pbmp := BitmapFromScreen2(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y,ts.dc)
E1 := Gdip_LockBits(pbmp, 0, 0, ts.dimensions.x, ts.dimensions.y, Stride, Scan0, BitmapData,1,0x21808)
}
loop % (ts.dimensions.max()/ts.spread)**2 {
if ((-ts.dimensions.x/2 < movepoint.x) <= ts.dimensions.x/2) && ((-ts.dimensions.y/2 < movepoint.y) <= ts.dimensions.y/2) {
search_point := new point((movepoint.x*ts.spread) + (ts.dimensions.x/2), (movepoint.y*ts.spread) + (ts.dimensions.y/2))
if (search_point.x >= 0 && search_point.x < ts.dimensions.x) && (search_point.y >= 0 && search_point.y < ts.dimensions.y) {
GetRGB(search_point,"",r,g,b)
if (r > 240 && g < 20 && b < 20) && (b > 0) && (g == 0) {
match := true
found_point := new point(search_point.x-3,search_point.y)
FindLeftEdge(found_point)
mouse_point := new point((ts.search_offset.x+found_point.x)-ts.window_center.x, (ts.search_offset.y+found_point.y-ts.offset_y)-ts.window_center.y)
DllCall("mouse_event", "UInt", 0x01, "UInt", (mouse_point.x+ts.mouse_offset.x)/ts.ingame_sens, "UInt", (mouse_point.y+ts.mouse_offset.y)/(ts.ingame_sens*2.41))
match_search_offset := new point(ts.window_center.x+(mouse_point.x)-ts.match_dimensions.x+ts.mouse_offset.x, ts.window_center.y+(mouse_point.y)-ts.match_dimensions.y+ts.mouse_offset.y+ts.offset_y)
}
}
}
if (!match) {
if (movepoint.x == movepoint.y || (movepoint.x < 0 && movepoint.x == -movepoint.y) || (movepoint.x > 0 && movepoint.x == 1-movepoint.y)) {
movepoint2.swap()
}
movepoint.add(movepoint2.x,movepoint2.y)
}
} until (match)
if (match) {
ts.dimensions := new point(ts.match_dimensions.x,ts.match_dimensions.y)
ts.search_offset := match_search_offset
if (ts.overlayShow)
overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y,,1)
dur := QPX(false)
if (dur < 0.008) {
delay(0.008-dur)
}
}
else {
if (ts.dimensions.max() < ts.start_dimensions.min()) {
ts.dimensions.x += 200
ts.dimensions.y += 100
ts.search_offset.sub(100,50)
if (ts.overlayShow)
overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y,,1)
}
else {
ts.dimensions := ts.start_dimensions
ts.search_offset := ts.start_search_offset
if (ts.overlayShow)
overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y)
}
dur := QPX(false)
if (dur < 0.008) {
delay(0.008-dur)
}
}
Gdip_UnlockBits(pbmp, BitmapData)
Gdip_DisposeImage(pbmp)
}
active := false
}
ts.dimensions := ts.start_dimensions
ts.search_offset := ts.start_search_offset
overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y)
return
FindHPBar() {
}
GetRGB(point,mode,byref r, byref g, byref b) {
mode := strsplit(mode,"|")
if (mode[1] == "dwm") {
Gdip_FromRGB(DllCall("gdi32.dll\GetPixel", "UInt", ts.dc, "Int", point.x, "Int", point.y, "UInt"),b,g,r)
}
else
Gdip_FromRGB(NumGet(Scan0+0, (point.x*3)+(point.y*Stride)),r,g,b)
}
FindLeftEdge(byref found_point) {
mismatch := 0
loop 100{
if (found_point.x < 0 || found_point.x > dimensions.x)
mismatch := 9
GetRGB(search_point,"",r,g,b)
if !((r > 200 && g < 100 && b < 100))
mismatch++
else
mismatch := 0
found_point.x-=2
} until % mismatch > 8
}
BitmapFromScreen2(s_x,s_y,s_w,s_h,dc) {
chdc := CreateCompatibleDC(dc), hbm := CreateDIBSection(s_w, s_h, chdc), obm := SelectObject(chdc, hbm)
BitBlt(chdc, 0, 0, s_w, s_h, dc, s_x, s_y)
pbmp := Gdip_CreateBitmapFromHBITMAP(hbm)
SelectObject(chdc, obm), DeleteObject(hbm), DeleteDC(chdc)
return pbmp
}
Gdip_FromRGB(RGB, ByRef R, ByRef G, ByRef B)
{
R := (0x00ff0000 & RGB) >> 16
G := (0x0000ff00 & RGB) >> 8
B := 0x000000ff & RGB
}
Delay( D=0.001 ) {
Static F
Critical
F ? F : DllCall( "QueryPerformanceFrequency", Int64P,F )
DllCall( "QueryPerformanceCounter", Int64P,pTick ), cTick := pTick
While( ( (Tick:=(pTick-cTick)/F)) <D ) {
DllCall( "QueryPerformanceCounter", Int64P,pTick )
Sleep -1
}
Return Round( Tick,3 )
}
QPX( N=0 ) {
Static F,A,Q,P,X
If	( N && !P )
Return	DllCall("QueryPerformanceFrequency",Int64P,F) + (X:=A:=0) + DllCall("QueryPerformanceCounter",Int64P,P)
DllCall("QueryPerformanceCounter",Int64P,Q), A:=A+Q-P, P:=Q, X:=X+1
Return	( N && X=N ) ? (X:=X-1)<<64 : ( N=0 && (R:=A/X/F) ) ? ( R + (A:=P:=X:=0) ) : 1
}
overlay(x ,y ,w ,h, create=0,c=0) {
static overlay_ID
if (!overlay_ID) {
Gui, 2: +E0x20 -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
Gui, 2: Show,,Window
overlay_ID := WinExist()
}
overlay_dib := CreateDIBSection(w, h)
overlay_dc := CreateCompatibleDC()
overlay_obm := SelectObject(overlay_dc, overlay_dib)
G := Gdip_GraphicsFromHDC(overlay_dc)
if (!c)
overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,255,0,0), 2)
else
overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,0,255,0), 2)
Gdip_DrawRectangle(G, overlay_pen, 0, 0, w, h)
Gdip_DeletePen(overlay_pen)
UpdateLayeredWindow(overlay_ID, overlay_dc, x, y, w, h)
SelectObject(overlay_dc, overlay_obm)
DeleteObject(overlay_dib)
DeleteDC(overlay_dc)
Gdip_DeleteGraphics(G)
}
class point {
__new(x,y) {
this.x := x
this.y := y
}
swap() {
ty := -this.y
this.y := this.x
this.x := ty
}
max() {
if (this.x > this.y)
return  % this.x
else
return % this.y
}
min() {
if (this.x < this.y)
return  % this.x
else
return % this.y
}
add(x,y) {
this.x += x
this.y += y
}
sub(x,y) {
this.x -= x
this.y -= y
}
}
pickItem(subs,val=0) {
temp := strsplit(layout[subs],"|")
if (instr(temp[1],"num")) {
temp2 := strsplit(temp[1],":")
newVal := temp[2]+(temp2[2]*val)
if (newVal >= 0) {
if (temp2[2] < 1)
temp[2] := round(newVal,2)
else
temp[2] := round(newVal,0)
}
layout[subs] := temp[1] "|" temp[2]
return % temp[2]
}
else if (instr(temp[1],"bool")) {
temp2 := strsplit(temp[1],":")
temp[1] := temp2[1] ":" !temp2[2]
temp[2] := (temp2[2]) ? "Enabled" : "Disabled"
layout[subs] := temp[1] "|" temp[2]
return % temp[2]
}
else {
temp[1] += val
retStr := strsplit(temp[2],";")[temp[1]]
if (!retStr)
temp[1] -= val
else if (subs == "1a. Mode" && val) {
LoadLayout(temp[1],temp[1]-val)
}
layout[subs] := temp[1] "|" temp[2]
return % strsplit(temp[2],";")[temp[1]]
}
}
Tooltip(newTab=0,newItem=0) {
static activeTab, activeItem, toggle, x, y
if (toggle == "")
toggle := 1
if (!newTab && !newItem) {
toggle := ! toggle
mousegetpos,x,y
}
if (toggle) {
activeItem := (!newItem && !activeItem) ? 1 : activeItem+newItem
if (activeItem == 1)
activeTab := (!newTab && !activeTab) ? 1 : (activeTab+newTab > 0 && activeTab+newTab <= tooltipArray["tabCount"]) ? activeTab+newTab : activeTab
else
addItem := newTab
for tabName in tooltipArray {
if (a_index == activeTab) {
for t in tooltipArray[tabName]
itemCount := a_index
if (activeItem < 1 || activeItem > itemCount+1)
activeItem := activeItem-newItem
if (activeItem == 1)
nText .= "|[" strsplit(tabName,".")[2] "]|`n"
else
nText .= strsplit(tabName,".")[2] "`n"
for subs in tooltipArray[tabName] {
if (a_index+1 == activeItem) {
if (addItem) {
tooltipArray[tabName,subs] := pickItem(subs,addItem)
}
if (!tooltipArray[tabName,subs])
nText .= "|[" strsplit(subs,".")[2] "]|"
else
nText .= strsplit(subs,".")[2] ": " "|[" tooltipArray[tabName,subs] "]|`n"
}
else {
if (!tooltipArray[tabName,subs])
nText .= strsplit(subs,".")[2]
else
nText .= strsplit(subs,".")[2] ": " tooltipArray[tabName,subs] "`n"
}
}
}
}
tooltip, % rTrim(nText,"`n"), % x, % y
}
else
tooltip,
if (ts.overwatch) {
ts.Refresh()
}
}
LoadLayout(num=1,pnum=0) {
if (pnum) {
SaveLayout(pnum)
}
layout := array(), tooltipArray := array()
if (!fileexist("layout.dat")) {
loop 23 {
fileappend, % a_index ";1;15.00;70;30;8;400;300;200;100;1;0`r`n",layout.dat
}
}
fileread,strIn,layout.dat
loop,parse,strIn,`r`n
{
if (a_loopfield) {
temp := strsplit(a_loopfield,";")
if (temp[1] == num) {
layout["1a. Mode"] := num "|Default;Ana;Bastion;D.V.A;Genji;Hanzo;Junkrat;Lúcio;McCree;Mei;Mercy;Pharah;Reaper;Reinhardt;Roadhog;Soldier: 76;Symmetra;Tracer;Torbjörn;Widowmaker;Winston;Zarya;Zenyatta"
layout["1b. Hotkeys"] := temp[2] "|LButton;RButton;LAlt;LButton, RButton;LButton, RButton, LAlt"
layout["2a. Ingame sensitivity"] := "num:0.05|" temp[3]
layout["2b. Mouse offset X"] := "num:1|" temp[4]
layout["2c. Mouse offset Y"] := "num:1|" temp[5]
layout["3a. Search spread"] := "num:1|" temp[6]
layout["3b. Start width"] := "num:20|" temp[7]
layout["3c. Start height"] := "num:20|" temp[8]
layout["3d. Match width"] := "num:20|" temp[9]
layout["3f. Match height"] := "num:20|" temp[10]
layout["4a. Display overlay"] := "bool:" temp[11] "|Disabled"
layout["4b. Alternative search"] := "bool:" temp[12] "|Disabled"
}
}
}
menuLayout := "1.Profile|1a. Mode,1b. Hotkeys;"
. "2.Mouse Settings|2a. Ingame sensitivity,2b. Mouse offset X,2c. Mouse offset Y;"
. "3.Search Settings|3a. Search spread,3b. Start width,3c. Start height,3d. Match width,3f. Match height;"
. "4.General Settings|4a. Display overlay,4b. Alternative search"
loop,parse,menuLayout,`;
{
tabName := strsplit(a_loopfield,"|")
subs := strsplit(tabName[2],",")
loop % subs.length(){
tooltipArray[tabName[1],subs[a_index]] := pickItem(subs[a_index])
}
len := a_index
}
tooltipArray["tabCount"] := len
}
class TempSettings {
Refresh() {
static hotkeys
if (winexist("ahk_class TankWindowClass") && !ts.overwatch) {
this.overwatch := true
}
else {
while !(winexist("ahk_class TankWindowClass")) {
tooltip, Run overwatch
sleep, 50
}
}
if (!ptoken)
pToken := Gdip_Startup()
this.handle := winexist("ahk_class TankWindowClass")
this.dc := GetDC(this.handle)
pbmp := Gdip_BitmapFromHWND(this.handle)
Gdip_GetDimensions(pbmp, w, h)
Gdip_DisposeImage(pbmp)
ts.window_center := new point(w/2,h/2)
this.active := strsplit(layout["1a. Mode"],"|")[1]
ingame_sens := strsplit(layout["2a. Ingame sensitivity"],"|")[2]
this.mouse_offset := new point(strsplit(layout["2b. Mouse offset X"],"|")[2], strsplit(layout["2c. Mouse offset Y"],"|")[2])
this.spread := strsplit(layout["3a. Search spread"],"|")[2]
this.start_dimensions := new point(strsplit(layout["3b. Start width"],"|")[2], strsplit(layout["3c. Start height"],"|")[2])
this.dimensions := this.start_dimensions
this.match_dimensions := new point(strsplit(layout["3d. Match width"],"|")[2], strsplit(layout["3f. Match height"],"|")[2])
this.overlayShow := !(strsplit(strsplit(layout["4a. Display overlay"],":")[2],"|")[1])
this.alternative := !(strsplit(strsplit(layout["4b. Alternative search"],":")[2],"|")[1])
this.offset_y := -this.dimensions.max()*0.125
this.start_search_offset := new point(this.window_center.x-(this.dimensions.x/2),(this.window_center.y-(this.dimensions.y/2))+this.offset_y)
this.search_offset := this.start_search_offset
cappedFPS := 5
this.ingame_sens := 0.116*(ingame_sens*(16/cappedFPS))
if (hotkeys)
loop,parse,hotkeys,`,
hotkey, % strreplace("~" a_loopfield,a_space,""), aim, off
temp := strsplit(layout["1b. Hotkeys"],"|")
hotkeys := strsplit(temp[2],";")[temp[1]]
loop,parse,hotkeys,`,
hotkey, % strreplace("~" a_loopfield,a_space,""), aim, on
if (this.overlayShow)
overlay(this.search_offset.x, this.search_offset.y, this.start_dimensions.x, this.start_dimensions.y,1)
}
}
SaveLayout(num) {
for k, v in layout {
if (a_index <= 2)
out .= strsplit(v,"|")[1] ";"
else if (a_index <= 10)
out .= strsplit(v,"|")[2] ";"
else
out .= !strsplit(strsplit(v,":")[2],"|")[1] ";"
}
out := rTrim(out,";")
fileread,strIn,layout.dat
filedelete,layout.dat
loop, parse, strIn, `r`n
{
if (a_loopfield) {
temp := strsplit(a_loopfield,";")
if (temp[1] == num)
strOut .= out "`r`n"
else
strOut .= a_loopfield "`r`n"
}
}
fileappend, % strOut, layout.dat
}
rshift::
GuiClose:
SaveLayout(ts.active)
Gdip_DisposeImage(pbmp)
Gdip_Shutdown(pToken)
ExitApp
Korean Aimbot (standalone)
Code:
; <COMPILER: v1.1.24.00>
guif:
#NoEnv
#SingleInstance force
SkinForm(Apply, A_ScriptDir . "\USkin.dll", A_ScriptDir . "\Milikymac.msstyles")
Gui, Add, Text, x12 y40 w200 h30 , 1280*720  Run Aim[F1]
Gui, Add, Text, x12 y70 w200 h30 , 1920*1080 Run Aim[F2]
Gui, Add, Text, x12 y120 w200 h30 ,  Restart Program[F3]
Gui, Add, Text, x12 y170 w200 h30 ,  Pause/Resume[ALT]
Gui, Add, CheckBox, x292 y10 w150 h40 vaimtype Checked, Aimlock only on key press
Gui, Add, Text, x232 y70 w120 h30 , Aim speed control
Gui, Add, Edit, x362 y70 w100 h30 vrx, 5
Gui, Add, Button, x232 y110 w230 h90 gchange1, Apply settings for v0.2
gui, add, button, x5 y5 h20 w70 gsub1, Issues?
gui, add, button, x80 y5 h20 w70 gsub2, How-to
gui, add, button, x155 y5 h20 w70 gsub3, Best Settings
gui, show

return
sub1:
 {
   msgbox, Having issues?`nCheat is CPU intensive and only uses math.`n`nLowFPS: Lower Aim speed to 3.`nLowFPS: Lower resolution to 720p and play on low.`nLowFPS: If you get low fps after a playthrough, press F3 to restart the cheat.`n`nCursor jumping left or right when using Aim key?`n`nJumpBug:Your PC is lagging out when using Aimkey. Check LowFPS solution.`nJumpBug: Switch your resolution to 720p but use F2(1080p) with Aim Speed 3.`n`nAlways try the cheat out in Practice Range to find your best settings.
 }
return
sub2:
 {
   msgbox, How-to:`n`nLaunch Game. Switch to Borderless Windowed mode.`nResolution has to be 720p or 1080p. As precaution, set your quality settings to Low.`n`nTo-use:`nPress F1 or F2 depending on your resolution.`nShoot an Enemy. When the Health Bar is visible press the aimkey to snap onto the target.`n`nIf nothing is happening make sure you are not using any desktop applications that alter your color settings or are recording your gameplay such as W10 DVR or Fraps.
 }
 sub3:
 {
   msgbox, Best Settings for the cheat (Legit):`n`nResolution: 1280x720`nAim Speed: 3
 }
return
GuiClose:
ExitApp
return
SkinForm(Param1 = "Apply", DLL = "", SkinName = ""){
if(Param1 = Apply){
DllCall("LoadLibrary", str, DLL)
DllCall(DLL . "\USkinInit", Int,0, Int,0, AStr, SkinName)
}else if(Param1 = 0){
DllCall(DLL . "\USkinExit")
}
}
Change1:
MsgBox,  Applied
Gui,Submit, Nohide
return
F1::
#Persistent
#KeyHistory, 0
#NoEnv
#HotKeyInterval 1
#MaxHotkeysPerInterval 127
#InstallKeybdHook
#UseHook
#SingleInstance, Force
SetKeyDelay,-1, 8
SetControlDelay, -1
SetMouseDelay, 0
SetWinDelay,-1
SendMode, InputThenPlay
SetBatchLines,-1
ListLines, Off
CoordMode, Mouse, Screen
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, Normal
ZeroX := 640
ZeroY := 360
CFovX := 320
CFovY := 200
ScanL := 500
ScanR := 800
ScanT := 180
ScanB := 400
GuiControlget, rX
Loop, {
Gui,Submit, Nohide
if (aimtype=1)
{
GetKeyState, Mouse2, LButton, P
GoSub MouseMoves
}
if (aimtype=0)
{
GetKeyState, Mouse2, Rbutton, P
GoSub MouseMoves1
}
ImageSearch, AimPixelX, AimPixelY,ScanL, ScanT, ScanR, ScanB,  *4 hhp.bmp
GoSub GetAimOffset
GoSub GetAimMoves
}
MouseMoves:
If ( Mouse2 == "D" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
MouseMoves1:
If ( Mouse2 == "U" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
GetAimOffset:
Gui,Submit, Nohide
AimX := AimPixelX - ZeroX +41
AimY := AimPixelY - ZeroY +63
If ( AimX+5 > 0) {
DirX := rx / 10
}
If ( AimX+5 < 0) {
DirX := (-rx) / 10
}
If ( AimY+2 > 0 ) {
DirY := rX /10 *0.5
}
If ( AimY+2 < 0 ) {
DirY := (-rx) /10 *0.5
}
AimOffsetX := AimX * DirX
AimOffsetY := AimY * DirY
Return
GetAimMoves:
RootX := Ceil(( AimOffsetX ** ( 1/2 )))
RootY := Ceil(( AimOffsetY ** ( 1/2 )))
MoveX := RootX * DirX
MoveY := RootY * DirY
Return
SleepF:
SleepDuration = 1
TimePeriod = 1
DllCall("Winmm\timeBeginPeriod", uint, TimePeriod)
Iterations = 1
StartTime := A_TickCount
Loop, %Iterations% {
DllCall("Sleep", UInt, TimePeriod)
}
DllCall("Winmm\timeEndPeriod", UInt, TimePeriod)
Return
DebugTool:
MouseGetPos, MX, MY
ToolTip, %AimOffsetX% | %AimOffsetY%
ToolTip, %AimX% | %AimY%
ToolTip, %IntAimX% | %IntAimY%
ToolTip, %RootX% | %RootY%
ToolTip, %MoveX% | %MoveY% || %MX% %MY%
Return
F2::
#Persistent
#KeyHistory, 0
#NoEnv
#HotKeyInterval 1
#MaxHotkeysPerInterval 127
#InstallKeybdHook
#UseHook
#SingleInstance, Force
SetKeyDelay,-1, 8
SetControlDelay, -1
SetMouseDelay, 0
SetWinDelay,-1
SendMode, InputThenPlay
SetBatchLines,-1
ListLines, Off
CoordMode, Mouse, Screen
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, Normal
ZeroX := 960
ZeroY := 540
CFovX := 80
CFovY := 200
ScanL := 660
ScanR := 1250
ScanT := 280
ScanB := 610
GuiControlget, rX
Loop, {
Gui,Submit, Nohide
if (aimtype=1)
{
GetKeyState, Mouse2, LButton, P
GoSub MouseMoves2
}
if (aimtype=0)
{
GetKeyState, Mouse2, Rbutton, P
GoSub MouseMoves11
}
ImageSearch, AimPixelX, AimPixelY, ScanL, ScanT, ScanR, ScanB,  *4 hhp2.bmp
GoSub GetAimOffset1
GoSub GetAimMoves1
}
MouseMoves2:
If ( Mouse2 == "D" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
MouseMoves11:
If ( Mouse2 == "U" ) {
DllCall("mouse_event", uint, 1, int, MoveX, int, MoveY, uint, 0, int, 0)
}
Return
GetAimOffset1:
Gui,Submit, Nohide
AimX := AimPixelX - ZeroX +58
AimY := AimPixelY - ZeroY +85
If ( AimX+10 > 0) {
DirX := rx / 10
}
If ( AimX+10 < 0) {
DirX := (-rx) / 10
}
If ( AimY+5 > 0 ) {
DirY := rX /10 *0.5
}
If ( AimY+5 < 0 ) {
DirY := (-rx) /10 *0.5
}
AimOffsetX := AimX * DirX
AimOffsetY := AimY * DirY
Return
GetAimMoves1:
RootX := Ceil(( AimOffsetX ** ( 1 )))
RootY := Ceil(( AimOffsetY ** ( 1 )))
MoveX := RootX * DirX
MoveY := RootY * DirY
Return
SleepF1:
SleepDuration = 1
TimePeriod = 1
DllCall("Winmm\timeBeginPeriod", uint, TimePeriod)
Iterations = 1
StartTime := A_TickCount
Loop, %Iterations% {
DllCall("Sleep", UInt, TimePeriod)
}
DllCall("Winmm\timeEndPeriod", UInt, TimePeriod)
Return
DebugTool1:
MouseGetPos, MX, MY
ToolTip, %AimOffsetX% | %AimOffsetY%
ToolTip, %AimX% | %AimY%
ToolTip, %IntAimX% | %IntAimY%
ToolTip, %RootX% | %RootY%
ToolTip, %MoveX% | %MoveY% || %MX% %MY%
Return
ALT::
pause
SoundBEEP
return
F3::
Reload
return
WidowMaker AutoShot
Code:
  RButton::Pause
    ~$LButton::
        While GetKeyState("LButton", "P"){
     
    Click down
    Sleep, 100
    Click up
    Sleep, 1350
    }
    return
     
    Numpad0::ExitApp
Mcree Spray Control
Code:
 SendMode Input
     
     
    Numpad0::ExitApp
     
    ~RButton::
    Loop
        If GetKeyState("RButton") {
            Sleep, 5
            moveAmount := (moveAmount = 2) ? 3 : 0
            mouseXY(moveAmount,3.4)
           
        }
        else
        break
       
    Return
     
     
     
    mouseXY(x,y)
    {
    DllCall("mouse_event",int,1,int,x,int,y,uint,0,uint,0)
    }
======
Reinhardt Melee
Code:
~$LButton::
        While GetKeyState("LButton", "P"){
     
    Click
    sleep 650
    Click right down
    sleep 200
    Click right up
    sleep 300
     
    }
    return
     
    Numpad0::ExitApp
Soldier 76 No spread
Code:
LAlt::Pause
~$LButton::
While GetKeyState("LButton", "P"){

Click down
Sleep, 450
Click up
Sleep, 215
}
return

Numpad0::ExitApp
Reaper Reload
Code:
 $r:: ; reload key
    {
    send {r} ; reload key
    sleep 300 ; 300 is the delay in ms
    send {v} ; your melee key
    }
    return
     
    Numpad0::suspend ; pause the script
Pharah Reload
Code:
$r:: ; reload key
	send {r} ; reload key
	sleep 1400 ; delay
	send {v} ; melee key
return
     
Numpad0::suspend ; suspend the script
Numpad2::ExitApp  ; panic ends the script
Torbjorn Reload
Code:
$r:: ; reload key
	send {r} ; reload key
	sleep 1780 ; delay
	send {v} ; melee key
return
     
Numpad0::suspend ; suspend the script
Numpad2::ExitApp  ; panic ends the script
RoadHog Reload
Code:
$r:: ; reload key
	send {r} ; reload key
	sleep 1880 ; delay
	send {v} ; your melee key
return
     
Numpad0::suspend ; suspend the script
Numpad2::ExitApp  ; panic ends the script
Genji combo
Code:
xbutton2::
MouseClick, right
sleep, 15
Send {v down}{v up}
sleep, 15
Send {Shift down}{Shift up}
Return
Korean Triggerbot
Code:
loop
{
ImageSearch, , , 960, 0, 960, 540, *100 1.png
If Errorlevel = 0
ImageSearch, , , 960, 541, 960, 1080, *100 1.png
If Errorlevel = 0
mouseclick, left

}
return
Rapid fire
Code:
!MButton:: Hotkey, *MButton, Toggle
*~MButton::
Loop
{
SetMouseDelay 10
Click
If (GetKeyState("MButton","P*")=0)
break
}
return
Bunny hop
Code:
F1:: Hotkey, *space, Toggle
*~$Space::
sleep 20
loop
{
GetKeyState, SpaceState, Space, P
if SpaceState = U
break
Sleep 1
Send, {Blind}{Space}
}
return
Compiled Scripts/Multi Scripts
Jubs Multihack

Jubs Reinhardt

Korean AHK with added scripts



tnx to @overdose_stinkyjoint
#1 · edited 9y ago · 9y ago
Jov
[MPGH]Jov
Modified Pixelbot
Code:
 ; <DC: v1>
    #NoTrayIcon
    #SingleInstance, Force
    #NoEnv
    return ;anticp
     
    UpdateLayeredWindow(hwnd, hdc, x="", y="", w="", h="", Alpha=255)
    {
    if ((x != "") && (y != ""))
    VarSetCapacity(pt, 8), NumPut(x, pt, 0), NumPut(y, pt, 4)
    if (w = "") ||(h = "")
     
    WinGetPos,,, w, h, ahk_id %hwnd%
    return DllCall("UpdateLayeredWindow", "uint", hwnd, "uint", 0, "uint", ((x = "") && (y = "")) ? 0 : &pt
    , "int64*", w|h<<32, "uint", hdc, "int64*", 0, "uint", 0, "uint*", Alpha<<16|1<<24, "uint", 2)
    }
    MsgBox, 4,, No copypasting?
    IfMsgBox Ok
        return
    else
        return
    BitBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, Raster="")
    {
    return DllCall("gdi32\BitBlt", "uint", dDC, "int", dx, "int", dy, "int", dw, "int", dh
    , "uint", sDC, "int", sx, "int", sy, "uint", Raster ? Raster : 0x00CC0020)
    }
    StretchBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, sw, sh, Raster="")
    {
    return DllCall("gdi32\StretchBlt", "uint", ddc, "int", dx, "int", dy, "int", dw, "int", dh
    , "uint", sdc, "int", sx, "int", sy, "int", sw, "int", sh, "uint", Raster ? Raster : 0x00CC0020)
    }
    SetStretchBltMode(hdc, iStretchMode=4)
    {
    return DllCall("gdi32\SetStretchBltMode", "uint", hdc, "int", iStretchMode)
    }
    SetImage(hwnd, hBitmap)
    {
    SendMessage, 0x172, 0x0, hBitmap,, ahk_id %hwnd%
    E := ErrorLevel
    DeleteObject(E)
    return E
    }
    SetSysColorToControl(hwnd, SysColor=15)
    {
    WinGetPos,,, w, h, ahk_id %hwnd%
    bc := DllCall("GetSysColor", "Int", SysColor)
    pBrushClear := Gdip_BrushCreateSolid(0xff000000 | (bc >> 16 | bc & 0xff00 | (bc & 0xff) << 16))
    pBitmap := Gdip_CreateBitmap(w, h), G := Gdip_GraphicsFromImage(pBitmap)
    Gdip_FillRectangle(G, pBrushClear, 0, 0, w, h)
    hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
    SetImage(hwnd, hBitmap)
    Gdip_DeleteBrush(pBrushClear)
    Gdip_DeleteGraphics(G), Gdip_DisposeImage(pBitmap), DeleteObject(hBitmap)
    return 0
    }
    Gdip_BitmapFromScreen(Screen=0, Raster="")
    {
    if (Screen = 0)
    {
    Sysget, x, 76
    Sysget, y, 77
    Sysget, w, 78
    Sysget, h, 79
    }
    else if (SubStr(Screen, 1, 5) = "hwnd:")
    {
    Screen := SubStr(Screen, 6)
    if !WinExist( "ahk_id " Screen)
    return -2
    WinGetPos,,, w, h, ahk_id %Screen%
    x := y := 0
    hhdc := GetDCEx(Screen, 3)
    }
    else if (Screen&1 != "")
    {
    Sysget, M, Monitor, %Screen%
    x := MLeft, y := MTop, w := MRight-MLeft, h := MBottom-MTop
    }
    else
    {
    StringSplit, S, Screen, |
    x := S1, y := S2, w := S3, h := S4
    }
    if (x = "") || (y = "") || (w = "") || (h = "")
    return -1
    chdc := CreateCompatibleDC(), hbm := CreateDIBSection(w, h, chdc), obm := SelectObject(chdc, hbm), hhdc := hhdc ? hhdc : GetDC()
    BitBlt(chdc, 0, 0, w, h, hhdc, x, y, Raster)
    ReleaseDC(hhdc)
    pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm)
    SelectObject(chdc, obm), DeleteObject(hbm), DeleteDC(hhdc), DeleteDC(chdc)
    return pBitmap
    }
    Gdip_BitmapFromHWND(hwnd)
    {
    WinGetPos,,, Width, Height, ahk_id %hwnd%
    hbm := CreateDIBSection(Width, Height), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)
    PrintWindow(hwnd, hdc)
    pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm)
    SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
    return pBitmap
    }
    CreateRectF(ByRef RectF, x, y, w, h)
    {
    VarSetCapacity(RectF, 16)
    NumPut(x, RectF, 0, "float"), NumPut(y, RectF, 4, "float"), NumPut(w, RectF, 8, "float"), NumPut(h, RectF, 12, "float")
    }
    CreateRect(ByRef Rect, x, y, w, h)
    {
    VarSetCapacity(Rect, 16)
    NumPut(x, Rect, 0, "uint"), NumPut(y, Rect, 4, "uint"), NumPut(w, Rect, 8, "uint"), NumPut(h, Rect, 12, "uint")
    }
    CreateSizeF(ByRef SizeF, w, h)
    {
    VarSetCapacity(SizeF, 8)
    NumPut(w, SizeF, 0, "float"), NumPut(h, SizeF, 4, "float")
    }
    CreatePointF(ByRef PointF, x, y)
    {
    VarSetCapacity(PointF, 8)
    NumPut(x, PointF, 0, "float"), NumPut(y, PointF, 4, "float")
    }
    CreateDIBSection(w, h, hdc="", bpp=32, ByRef ppvBits=0)
    {
    hdc2 := hdc ? hdc : GetDC()
    VarSetCapacity(bi, 40, 0)
    NumPut(w, bi, 4), NumPut(h, bi, 8), NumPut(40, bi, 0), NumPut(1, bi, 12, "ushort"), NumPut(0, bi, 16), NumPut(bpp, bi, 14, "ushort")
    hbm := DllCall("CreateDIBSection", "uint" , hdc2, "uint" , &bi, "uint" , 0, "uint*", ppvBits, "uint" , 0, "uint" , 0)
    if !hdc
    ReleaseDC(hdc2)
    return hbm
    }
    PrintWindow(hwnd, hdc, Flags=0)
    {
    return DllCall("PrintWindow", "uint", hwnd, "uint", hdc, "uint", Flags)
    }
    DestroyIcon(hIcon)
    {
    return DllCall("DestroyIcon", "uint", hIcon)
    }
    PaintDesktop(hdc)
    {
    return DllCall("PaintDesktop", "uint", hdc)
    }
    CreateCompatibleBitmap(hdc, w, h)
    {
    return DllCall("gdi32\CreateCompatibleBitmap", "uint", hdc, "int", w, "int", h)
    }
    CreateCompatibleDC(hdc=0)
    {
    return DllCall("CreateCompatibleDC", "uint", hdc)
    }
    SelectObject(hdc, hgdiobj)
    {
    return DllCall("SelectObject", "uint", hdc, "uint", hgdiobj)
    }
    DeleteObject(hObject)
    {
    return DllCall("DeleteObject", "uint", hObject)
    }
    GetDC(hwnd=0)
    {
    return DllCall("GetDC", "uint", hwnd)
    }
    GetDCEx(hwnd, flags=0, hrgnClip=0)
    {
    return DllCall("GetDCEx", "uint", hwnd, "uint", hrgnClip, "int", flags)
    }
    ReleaseDC(hdc, hwnd=0)
    {
    return DllCall("ReleaseDC", "uint", hwnd, "uint", hdc)
    }
    DeleteDC(hdc)
    {
    return DllCall("DeleteDC", "uint", hdc)
    }
    Gdip_LibraryVersion()
    {
    return 1.45
    }
    Gdip_BitmapFromBRA(ByRef BRAFromMemIn, File, Alternate=0)
    {
    if !BRAFromMemIn
    return -1
    Loop, Parse, BRAFromMemIn, `n
    {
    if (A_Index = 1)
    {
    StringSplit, Header, A_LoopField, |
    if (Header0 != 4 || Header2 != "BRA!")
    return -2
    }
    else if (A_Index = 2)
    {
    StringSplit, Info, A_LoopField, |
    if (Info0 != 3)
    return -3
    }
    else
    break
    }
    if !Alternate
    StringReplace, File, File, \, \\, All
    RegExMatch(BRAFromMemIn, "mi`n)^" (Alternate ? File "\|.+?\|(\d+)\|(\d+)" : "\d+\|" File "\|(\d+)\|(\d+)") "$", FileInfo)
    if !FileInfo
    return -4
    hData := DllCall("GlobalAlloc", "uint", 2, "uint", FileInfo2)
    pData := DllCall("GlobalLock", "uint", hData)
    DllCall("RtlMoveMemory", "uint", pData, "uint", &BRAFromMemIn+Info2+FileInfo1, "uint", FileInfo2)
    DllCall("GlobalUnlock", "uint", hData)
    DllCall("ole32\CreateStreamOnHGlobal", "uint", hData, "int", 1, "uint*", pStream)
    DllCall("gdiplus\GdipCreateBitmapFromStream", "uint", pStream, "uint*", pBitmap)
    DllCall(NumGet(NumGet(1*pStream)+8), "uint", pStream)
    return pBitmap
    }
    Gdip_DrawRectangle(pGraphics, pPen, x, y, w, h)
    {
    return DllCall("gdiplus\GdipDrawRectangle", "uint", pGraphics, "uint", pPen, "float", x, "float", y, "float", w, "float", h)
    }
    Gdip_DrawRoundedRectangle(pGraphics, pPen, x, y, w, h, r)
    {
    Gdip_SetClipRect(pGraphics, x-r, y-r, 2*r, 2*r, 4)
    Gdip_SetClipRect(pGraphics, x+w-r, y-r, 2*r, 2*r, 4)
    Gdip_SetClipRect(pGraphics, x-r, y+h-r, 2*r, 2*r, 4)
    Gdip_SetClipRect(pGraphics, x+w-r, y+h-r, 2*r, 2*r, 4)
    E := Gdip_DrawRectangle(pGraphics, pPen, x, y, w, h)
    Gdip_ResetClip(pGraphics)
    Gdip_SetClipRect(pGraphics, x-(2*r), y+r, w+(4*r), h-(2*r), 4)
    Gdip_SetClipRect(pGraphics, x+r, y-(2*r), w-(2*r), h+(4*r), 4)
    Gdip_DrawEllipse(pGraphics, pPen, x, y, 2*r, 2*r)
    Gdip_DrawEllipse(pGraphics, pPen, x+w-(2*r), y, 2*r, 2*r)
    Gdip_DrawEllipse(pGraphics, pPen, x, y+h-(2*r), 2*r, 2*r)
    Gdip_DrawEllipse(pGraphics, pPen, x+w-(2*r), y+h-(2*r), 2*r, 2*r)
    Gdip_ResetClip(pGraphics)
    return E
    }
    Gdip_DrawEllipse(pGraphics, pPen, x, y, w, h)
    {
    return DllCall("gdiplus\GdipDrawEllipse", "uint", pGraphics, "uint", pPen, "float", x, "float", y, "float", w, "float", h)
    }
    Gdip_DrawBezier(pGraphics, pPen, x1, y1, x2, y2, x3, y3, x4, y4)
    {
    return DllCall("gdiplus\GdipDrawBezier", "uint", pgraphics, "uint", pPen
    , "float", x1, "float", y1, "float", x2, "float", y2
    , "float", x3, "float", y3, "float", x4, "float", y4)
    }
    Gdip_DrawArc(pGraphics, pPen, x, y, w, h, StartAngle, SweepAngle)
    {
    return DllCall("gdiplus\GdipDrawArc", "uint", pGraphics, "uint", pPen, "float", x
    , "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
    }
    Gdip_DrawPie(pGraphics, pPen, x, y, w, h, StartAngle, SweepAngle)
    {
    return DllCall("gdiplus\GdipDrawPie", "uint", pGraphics, "uint", pPen, "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
    }
    Gdip_DrawLine(pGraphics, pPen, x1, y1, x2, y2)
    {
    return DllCall("gdiplus\GdipDrawLine", "uint", pGraphics, "uint", pPen
    , "float", x1, "float", y1, "float", x2, "float", y2)
    }
    Gdip_DrawLines(pGraphics, pPen, Points)
    {
    StringSplit, Points, Points, |
    VarSetCapacity(PointF, 8*Points0)
    Loop, %Points0%
    {
    StringSplit, Coord, Points%A_Index%, `,
    NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
    }
    return DllCall("gdiplus\GdipDrawLines", "uint", pGraphics, "uint", pPen, "uint", &PointF, "int", Points0)
    }
    Gdip_FillRectangle(pGraphics, pBrush, x, y, w, h)
    {
    return DllCall("gdiplus\GdipFillRectangle", "uint", pGraphics, "int", pBrush
    , "float", x, "float", y, "float", w, "float", h)
    }
    Gdip_FillRoundedRectangle(pGraphics, pBrush, x, y, w, h, r)
    {
    Region := Gdip_GetClipRegion(pGraphics)
    Gdip_SetClipRect(pGraphics, x-r, y-r, 2*r, 2*r, 4)
    Gdip_SetClipRect(pGraphics, x+w-r, y-r, 2*r, 2*r, 4)
    Gdip_SetClipRect(pGraphics, x-r, y+h-r, 2*r, 2*r, 4)
    Gdip_SetClipRect(pGraphics, x+w-r, y+h-r, 2*r, 2*r, 4)
    E := Gdip_FillRectangle(pGraphics, pBrush, x, y, w, h)
    Gdip_SetClipRegion(pGraphics, Region, 0)
    Gdip_SetClipRect(pGraphics, x-(2*r), y+r, w+(4*r), h-(2*r), 4)
    Gdip_SetClipRect(pGraphics, x+r, y-(2*r), w-(2*r), h+(4*r), 4)
    Gdip_FillEllipse(pGraphics, pBrush, x, y, 2*r, 2*r)
    Gdip_FillEllipse(pGraphics, pBrush, x+w-(2*r), y, 2*r, 2*r)
    Gdip_FillEllipse(pGraphics, pBrush, x, y+h-(2*r), 2*r, 2*r)
    Gdip_FillEllipse(pGraphics, pBrush, x+w-(2*r), y+h-(2*r), 2*r, 2*r)
    Gdip_SetClipRegion(pGraphics, Region, 0)
    Gdip_DeleteRegion(Region)
    return E
    }
    Gdip_FillPolygon(pGraphics, pBrush, Points, FillMode=0)
    {
    StringSplit, Points, Points, |
    VarSetCapacity(PointF, 8*Points0)
    Loop, %Points0%
    {
    StringSplit, Coord, Points%A_Index%, `,
    NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
    }
    return DllCall("gdiplus\GdipFillPolygon", "uint", pGraphics, "uint", pBrush, "uint", &PointF, "int", Points0, "int", FillMode)
    }
    Gdip_FillPie(pGraphics, pBrush, x, y, w, h, StartAngle, SweepAngle)
    {
    return DllCall("gdiplus\GdipFillPie", "uint", pGraphics, "uint", pBrush
    , "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)
    }
    Gdip_FillEllipse(pGraphics, pBrush, x, y, w, h)
    {
    return DllCall("gdiplus\GdipFillEllipse", "uint", pGraphics, "uint", pBrush, "float", x, "float", y, "float", w, "float", h)
    }
    Gdip_FillRegion(pGraphics, pBrush, Region)
    {
    return DllCall("gdiplus\GdipFillRegion", "uint", pGraphics, "uint", pBrush, "uint", Region)
    }
    Gdip_FillPath(pGraphics, pBrush, Path)
    {
    return DllCall("gdiplus\GdipFillPath", "uint", pGraphics, "uint", pBrush, "uint", Path)
    }
    Gdip_DrawImagePointsRect(pGraphics, pBitmap, Points, sx="", sy="", sw="", sh="", Matrix=1)
    {
    StringSplit, Points, Points, |
    VarSetCapacity(PointF, 8*Points0)
    Loop, %Points0%
    {
    StringSplit, Coord, Points%A_Index%, `,
    NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
    }
    if (Matrix&1 = "")
    ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
    else if (Matrix != 1)
    ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
    if (sx = "" && sy = "" && sw = "" && sh = "")
    {
    sx := 0, sy := 0
    sw := Gdip_GetImageWidth(pBitmap)
    sh := Gdip_GetImageHeight(pBitmap)
    }
    E := DllCall("gdiplus\GdipDrawImagePointsRect", "uint", pGraphics, "uint", pBitmap
    , "uint", &PointF, "int", Points0, "float", sx, "float", sy, "float", sw, "float", sh
    , "int", 2, "uint", ImageAttr, "uint", 0, "uint", 0)
    if ImageAttr
    Gdip_DisposeImageAttributes(ImageAttr)
    return E
    }
    Gdip_DrawImage(pGraphics, pBitmap, dx="", dy="", dw="", dh="", sx="", sy="", sw="", sh="", Matrix=1)
    {
    if (Matrix&1 = "")
    ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
    else if (Matrix != 1)
    ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
    if (sx = "" && sy = "" && sw = "" && sh = "")
    {
    if (dx = "" && dy = "" && dw = "" && dh = "")
    {
    sx := dx := 0, sy := dy := 0
    sw := dw := Gdip_GetImageWidth(pBitmap)
    sh := dh := Gdip_GetImageHeight(pBitmap)
    }
    else
    {
    sx := sy := 0
    sw := Gdip_GetImageWidth(pBitmap)
    sh := Gdip_GetImageHeight(pBitmap)
    }
    }
    E := DllCall("gdiplus\GdipDrawImageRectRect", "uint", pGraphics, "uint", pBitmap
    , "float", dx, "float", dy, "float", dw, "float", dh
    , "float", sx, "float", sy, "float", sw, "float", sh
    , "int", 2, "uint", ImageAttr, "uint", 0, "uint", 0)
    if ImageAttr
    Gdip_DisposeImageAttributes(ImageAttr)
    return E
    }
    Gdip_SetImageAttributesColorMatrix(Matrix)
    {
    VarSetCapacity(ColourMatrix, 100, 0)
    Matrix := RegExReplace(RegExReplace(Matrix, "^[^\d-\.]+([\d\.])", "$1", "", 1), "[^\d-\.]+", "|")
    StringSplit, Matrix, Matrix, |
    Loop, 25
    {
    Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1
    NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float")
    }
    DllCall("gdiplus\GdipCreateImageAttributes", "uint*", ImageAttr)
    DllCall("gdiplus\GdipSetImageAttributesColorMatrix", "uint", ImageAttr, "int", 1, "int", 1, "uint", &ColourMatrix, "int", 0, "int", 0)
    return ImageAttr
    }
    Gdip_GraphicsFromImage(pBitmap)
    {
    DllCall("gdiplus\GdipGetImageGraphicsContext", "uint", pBitmap, "uint*", pGraphics)
    return pGraphics
    }
    Gdip_GraphicsFromHDC(hdc)
    {
    DllCall("gdiplus\GdipCreateFromHDC", "uint", hdc, "uint*", pGraphics)
    return pGraphics
    }
    Gdip_GetDC(pGraphics)
    {
    DllCall("gdiplus\GdipGetDC", "uint", pGraphics, "uint*", hdc)
    return hdc
    }
    Gdip_ReleaseDC(pGraphics, hdc)
    {
    return DllCall("gdiplus\GdipReleaseDC", "uint", pGraphics, "uint", hdc)
    }
    Gdip_GraphicsClear(pGraphics, ARGB=0x00ffffff)
    {
    return DllCall("gdiplus\GdipGraphicsClear", "uint", pGraphics, "int", ARGB)
    }
    Gdip_BlurBitmap(pBitmap, Blur)
    {
    if (Blur > 100) || (Blur < 1)
    return -1
    sWidth := Gdip_GetImageWidth(pBitmap), sHeight := Gdip_GetImageHeight(pBitmap)
    dWidth := sWidth//Blur, dHeight := sHeight//Blur
    pBitmap1 := Gdip_CreateBitmap(dWidth, dHeight)
    G1 := Gdip_GraphicsFromImage(pBitmap1)
    Gdip_SetInterpolationMode(G1, 7)
    Gdip_DrawImage(G1, pBitmap, 0, 0, dWidth, dHeight, 0, 0, sWidth, sHeight)
    Gdip_DeleteGraphics(G1)
    pBitmap2 := Gdip_CreateBitmap(sWidth, sHeight)
    G2 := Gdip_GraphicsFromImage(pBitmap2)
    Gdip_SetInterpolationMode(G2, 7)
    Gdip_DrawImage(G2, pBitmap1, 0, 0, sWidth, sHeight, 0, 0, dWidth, dHeight)
    Gdip_DeleteGraphics(G2)
    Gdip_DisposeImage(pBitmap1)
    return pBitmap2
    }
    Gdip_SaveBitmapToFile(pBitmap, sOutput, Quality=75)
    {
    SplitPath, sOutput,,, Extension
    if Extension not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
    return -1
    Extension := "." Extension
    DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
    VarSetCapacity(ci, nSize)
    DllCall("gdiplus\GdipGetImageEncoders", "uint", nCount, "uint", nSize, "uint", &ci)
    if !(nCount && nSize)
    return -2
    Loop, %nCount%
    {
    Location := NumGet(ci, 76*(A_Index-1)+44)
    if !A_IsUnicode
    {
    nSize := DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "uint", 0, "int",  0, "uint", 0, "uint", 0)
    VarSetCapacity(sString, nSize)
    DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "str", sString, "int", nSize, "uint", 0, "uint", 0)
    if !InStr(sString, "*" Extension)
    continue
    }
    else
    {
    nSize := DllCall("WideCharToMultiByte", "uint", 0, "uint", 0, "uint", Location, "int", -1, "uint", 0, "int",  0, "uint", 0, "uint", 0)
    sString := ""
    Loop, %nSize%
    sString .= Chr(NumGet(Location+0, 2*(A_Index-1), "char"))
    if !InStr(sString, "*" Extension)
    continue
    }
    pCodec := &ci+76*(A_Index-1)
    break
    }
    if !pCodec
    return -3
    if (Quality != 75)
    {
    Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
    if Extension in .JPG,.JPEG,.JPE,.JFIF
    {
    DllCall("gdiplus\GdipGetEncoderParameterListSize", "uint", pBitmap, "uint", pCodec, "uint*", nSize)
    VarSetCapacity(EncoderParameters, nSize, 0)
    DllCall("gdiplus\GdipGetEncoderParameterList", "uint", pBitmap, "uint", pCodec, "uint", nSize, "uint", &EncoderParameters)
    Loop, % NumGet(EncoderParameters)
    {
    if (NumGet(EncoderParameters, (28*(A_Index-1))+20) = 1) && (NumGet(EncoderParameters, (28*(A_Index-1))+24) = 6)
    {
    p := (28*(A_Index-1))+&EncoderParameters
    NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20)))
    break
    }
    }
    }
    }
    if !A_IsUnicode
    {
    nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sOutput, "int", -1, "uint", 0, "int", 0)
    VarSetCapacity(wOutput, nSize*2)
    DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sOutput, "int", -1, "uint", &wOutput, "int", nSize)
    VarSetCapacity(wOutput, -1)
    if !VarSetCapacity(wOutput)
    return -4
    E := DllCall("gdiplus\GdipSaveImageToFile", "uint", pBitmap, "uint", &wOutput, "uint", pCodec, "uint", p ? p : 0)
    }
    else
    E := DllCall("gdiplus\GdipSaveImageToFile", "uint", pBitmap, "uint", &sOutput, "uint", pCodec, "uint", p ? p : 0)
    return E ? -5 : 0
    }
    Gdip_GetPixel(pBitmap, x, y)
    {
    DllCall("gdiplus\GdipBitmapGetPixel", "uint", pBitmap, "int", x, "int", y, "uint*", ARGB)
    return ARGB
    }
    Gdip_SetPixel(pBitmap, x, y, ARGB)
    {
    return DllCall("gdiplus\GdipBitmapSetPixel", "uint", pBitmap, "int", x, "int", y, "int", ARGB)
    }
    Gdip_GetImageWidth(pBitmap)
    {
    DllCall("gdiplus\GdipGetImageWidth", "uint", pBitmap, "uint*", Width)
    return Width
    }
    Gdip_GetImageHeight(pBitmap)
    {
    DllCall("gdiplus\GdipGetImageHeight", "uint", pBitmap, "uint*", Height)
    return Height
    }
    Gdip_GetImageDimensions(pBitmap, ByRef Width, ByRef Height)
    {
    DllCall("gdiplus\GdipGetImageWidth", "uint", pBitmap, "uint*", Width)
    DllCall("gdiplus\GdipGetImageHeight", "uint", pBitmap, "uint*", Height)
    }
    Gdip_GetDimensions(pBitmap, ByRef Width, ByRef Height)
    {
    Gdip_GetImageDimensions(pBitmap, Width, Height)
    }
    Gdip_GetImagePixelFormat(pBitmap)
    {
    DllCall("gdiplus\GdipGetImagePixelFormat", "uint", pBitmap, "uint*", Format)
    return Format
    }
    Gdip_GetDpiX(pGraphics)
    {
    DllCall("gdiplus\GdipGetDpiX", "uint", pGraphics, "float*", dpix)
    return Round(dpix)
    }
    Gdip_GetDpiY(pGraphics)
    {
    DllCall("gdiplus\GdipGetDpiY", "uint", pGraphics, "float*", dpiy)
    return Round(dpiy)
    }
    Gdip_GetImageHorizontalResolution(pBitmap)
    {
    DllCall("gdiplus\GdipGetImageHorizontalResolution", "uint", pBitmap, "float*", dpix)
    return Round(dpix)
    }
    Gdip_GetImageVerticalResolution(pBitmap)
    {
    DllCall("gdiplus\GdipGetImageVerticalResolution", "uint", pBitmap, "float*", dpiy)
    return Round(dpiy)
    }
    Gdip_BitmapSetResolution(pBitmap, dpix, dpiy)
    {
    return DllCall("gdiplus\GdipBitmapSetResolution", "uint", pBitmap, "float", dpix, "float", dpiy)
    }
    Gdip_CreateBitmapFromFile(sFile, IconNumber=1, IconSize="")
    {
    SplitPath, sFile,,, ext
    if ext in exe,dll
    {
    Sizes := IconSize ? IconSize : 256 "|" 128 "|" 64 "|" 48 "|" 32 "|" 16
    VarSetCapacity(buf, 40)
    Loop, Parse, Sizes, |
    {
    DllCall("PrivateExtractIcons", "str", sFile, "int", IconNumber-1, "int", A_LoopField, "int", A_LoopField, "uint*", hIcon, "uint*", 0, "uint", 1, "uint", 0)
    if !hIcon
    continue
    if !DllCall("GetIconInfo", "uint", hIcon, "uint", &buf)
    {
    DestroyIcon(hIcon)
    continue
    }
    hbmColor := NumGet(buf, 16)
    hbmMask  := NumGet(buf, 12)
    if !(hbmColor && DllCall("GetObject", "uint", hbmColor, "int", 24, "uint", &buf))
    {
    DestroyIcon(hIcon)
    continue
    }
    break
    }
    if !hIcon
    return -1
    Width := NumGet(buf, 4, "int"),  Height := NumGet(buf, 8, "int")
    hbm := CreateDIBSection(Width, -Height), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)
    if !DllCall("DrawIconEx", "uint", hdc, "int", 0, "int", 0, "uint", hIcon, "uint", Width, "uint", Height, "uint", 0, "uint", 0, "uint", 3)
    {
    DestroyIcon(hIcon)
    return -2
    }
    VarSetCapacity(dib, 84)
    DllCall("GetObject", "uint", hbm, "int", 84, "uint", &dib)
    Stride := NumGet(dib, 12), Bits := NumGet(dib, 20)
    DllCall("gdiplus\GdipCreateBitmapFromScan0", "int", Width, "int", Height, "int", Stride, "int", 0x26200A, "uint", Bits, "uint*", pBitmapOld)
    pBitmap := Gdip_CreateBitmap(Width, Height), G := Gdip_GraphicsFromImage(pBitmap)
    Gdip_DrawImage(G, pBitmapOld, 0, 0, Width, Height, 0, 0, Width, Height)
    SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)
    Gdip_DeleteGraphics(G), Gdip_DisposeImage(pBitmapOld)
    DestroyIcon(hIcon)
    }
    else
    {
    if !A_IsUnicode
    {
    VarSetCapacity(wFile, 1023)
    DllCall("kernel32\MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sFile, "int", -1, "uint", &wFile, "int", 512)
    DllCall("gdiplus\GdipCreateBitmapFromFile", "uint", &wFile, "uint*", pBitmap)
    }
    else
    DllCall("gdiplus\GdipCreateBitmapFromFile", "uint", &sFile, "uint*", pBitmap)
    }
    return pBitmap
    }
    Gdip_CreateBitmapFromHBITMAP(hBitmap, Palette=0)
    {
    DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "uint", hBitmap, "uint", Palette, "uint*", pBitmap)
    return pBitmap
    }
    Gdip_CreateHBITMAPFromBitmap(pBitmap, Background=0xffffffff)
    {
    DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "uint", pBitmap, "uint*", hbm, "int", Background)
    return hbm
    }
    Gdip_CreateBitmapFromHICON(hIcon)
    {
    DllCall("gdiplus\GdipCreateBitmapFromHICON", "uint", hIcon, "uint*", pBitmap)
    return pBitmap
    }
    Gdip_CreateHICONFromBitmap(pBitmap)
    {
    DllCall("gdiplus\GdipCreateHICONFromBitmap", "uint", pBitmap, "uint*", hIcon)
    return hIcon
    }
    Gdip_CreateBitmap(Width, Height, Format=0x26200A)
    {
    DllCall("gdiplus\GdipCreateBitmapFromScan0", "int", Width, "int", Height, "int", 0, "int", Format, "uint", 0, "uint*", pBitmap)
    Return pBitmap
    }
    Gdip_CreateBitmapFromClipboard()
    {
    if !DllCall("OpenClipboard", "uint", 0)
    return -1
    if !DllCall("IsClipboardFormatAvailable", "uint", 8)
    return -2
    if !hBitmap := DllCall("GetClipboardData", "uint", 2)
    return -3
    if !pBitmap := Gdip_CreateBitmapFromHBITMAP(hBitmap)
    return -4
    if !DllCall("CloseClipboard")
    return -5
    DeleteObject(hBitmap)
    return pBitmap
    }
    Gdip_SetBitmapToClipboard(pBitmap)
    {
    hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
    DllCall("GetObject", "uint", hBitmap, "int", VarSetCapacity(oi, 84, 0), "uint", &oi)
    hdib := DllCall("GlobalAlloc", "uint", 2, "uint", 40+NumGet(oi, 44))
    pdib := DllCall("GlobalLock", "uint", hdib)
    DllCall("RtlMoveMemory", "uint", pdib, "uint", &oi+24, "uint", 40)
    DllCall("RtlMoveMemory", "Uint", pdib+40, "Uint", NumGet(oi, 20), "uint", NumGet(oi, 44))
    DllCall("GlobalUnlock", "uint", hdib)
    DllCall("DeleteObject", "uint", hBitmap)
    DllCall("OpenClipboard", "uint", 0)
    DllCall("EmptyClipboard")
    DllCall("SetClipboardData", "uint", 8, "uint", hdib)
    DllCall("CloseClipboard")
    }
    Gdip_CloneBitmapArea(pBitmap, x, y, w, h, Format=0x26200A)
    {
    DllCall("gdiplus\GdipCloneBitmapArea", "float", x, "float", y, "float", w, "float", h
    , "int", Format, "uint", pBitmap, "uint*", pBitmapDest)
    return pBitmapDest
    }
    Gdip_CreatePen(ARGB, w)
    {
    DllCall("gdiplus\GdipCreatePen1", "int", ARGB, "float", w, "int", 2, "uint*", pPen)
    return pPen
    }
    Gdip_CreatePenFromBrush(pBrush, w)
    {
    DllCall("gdiplus\GdipCreatePen2", "uint", pBrush, "float", w, "int", 2, "uint*", pPen)
    return pPen
    }
    Gdip_BrushCreateSolid(ARGB=0xff000000)
    {
    DllCall("gdiplus\GdipCreateSolidFill", "int", ARGB, "uint*", pBrush)
    return pBrush
    }
    Gdip_BrushCreateHatch(ARGBfront, ARGBback, HatchStyle=0)
    {
    DllCall("gdiplus\GdipCreateHatchBrush", "int", HatchStyle, "int", ARGBfront, "int", ARGBback, "uint*", pBrush)
    return pBrush
    }
    Gdip_CreateTextureBrush(pBitmap, WrapMode=1, x=0, y=0, w="", h="")
    {
    if !(w && h)
    DllCall("gdiplus\GdipCreateTexture", "uint", pBitmap, "int", WrapMode, "uint*", pBrush)
    else
    DllCall("gdiplus\GdipCreateTexture2", "uint", pBitmap, "int", WrapMode, "float", x, "float", y, "float", w, "float", h, "uint*", pBrush)
    return pBrush
    }
    Gdip_CreateLineBrush(x1, y1, x2, y2, ARGB1, ARGB2, WrapMode=1)
    {
    CreatePointF(PointF1, x1, y1), CreatePointF(PointF2, x2, y2)
    DllCall("gdiplus\GdipCreateLineBrush", "uint", &PointF1, "uint", &PointF2, "int", ARGB1, "int", ARGB2, "int", WrapMode, "uint*", LGpBrush)
    return LGpBrush
    }
    Gdip_CreateLineBrushFromRect(x, y, w, h, ARGB1, ARGB2, LinearGradientMode=1, WrapMode=1)
    {
    CreateRectF(RectF, x, y, w, h)
    DllCall("gdiplus\GdipCreateLineBrushFromRect", "uint", &RectF, "int", ARGB1, "int", ARGB2, "int", LinearGradientMode, "int", WrapMode, "uint*", LGpBrush)
    return LGpBrush
    }
    Gdip_CloneBrush(pBrush)
    {
    DllCall("gdiplus\GdipCloneBrush", "uint", pBrush, "uint*", pBrushClone)
    return pBrushClone
    }
    Gdip_DeletePen(pPen)
    {
    return DllCall("gdiplus\GdipDeletePen", "uint", pPen)
    }
    Gdip_DeleteBrush(pBrush)
    {
    return DllCall("gdiplus\GdipDeleteBrush", "uint", pBrush)
    }
    Gdip_DisposeImage(pBitmap)
    {
    return DllCall("gdiplus\GdipDisposeImage", "uint", pBitmap)
    }
    Gdip_DeleteGraphics(pGraphics)
    {
    return DllCall("gdiplus\GdipDeleteGraphics", "uint", pGraphics)
    }
    Gdip_DisposeImageAttributes(ImageAttr)
    {
    return DllCall("gdiplus\GdipDisposeImageAttributes", "uint", ImageAttr)
    }
    Gdip_DeleteFont(hFont)
    {
    return DllCall("gdiplus\GdipDeleteFont", "uint", hFont)
    }
    Gdip_DeleteStringFormat(hFormat)
    {
    return DllCall("gdiplus\GdipDeleteStringFormat", "uint", hFormat)
    }
    Gdip_DeleteFontFamily(hFamily)
    {
    return DllCall("gdiplus\GdipDeleteFontFamily", "uint", hFamily)
    }
    Gdip_DeleteMatrix(Matrix)
    {
    return DllCall("gdiplus\GdipDeleteMatrix", "uint", Matrix)
    }
    Gdip_TextToGraphics(pGraphics, Text, Options, Font="Arial", Width="", Height="", Measure=0)
    {
    IWidth := Width, IHeight:= Height
    RegExMatch(Options, "i)X([\-\d\.]+)(p*)", xpos)
    RegExMatch(Options, "i)Y([\-\d\.]+)(p*)", ypos)
    RegExMatch(Options, "i)W([\-\d\.]+)(p*)", Width)
    RegExMatch(Options, "i)H([\-\d\.]+)(p*)", Height)
    RegExMatch(Options, "i)C(?!(entre|enter))([a-f\d]+)", Colour)
    RegExMatch(Options, "i)Top|Up|Bottom|Down|vCentre|vCenter", vPos)
    RegExMatch(Options, "i)NoWrap", NoWrap)
    RegExMatch(Options, "i)R(\d)", Rendering)
    RegExMatch(Options, "i)S(\d+)(p*)", Size)
    if !Gdip_DeleteBrush(Gdip_CloneBrush(Colour2))
    PassBrush := 1, pBrush := Colour2
    if !(IWidth && IHeight) && (xpos2 || ypos2 || Width2 || Height2 || Size2)
    return -1
    Style := 0, Styles := "Regular|Bold|Italic|BoldItalic|Underline|Strikeout"
    Loop, Parse, Styles, |
    {
    if RegExMatch(Options, "\b" A_loopField)
    Style |= (A_LoopField != "StrikeOut") ? (A_Index-1) : 8
    }
    Align := 0, Alignments := "Near|Left|Centre|Center|Far|Right"
    Loop, Parse, Alignments, |
    {
    if RegExMatch(Options, "\b" A_loopField)
    Align |= A_Index//2.1
    }
    xpos := (xpos1 != "") ? xpos2 ? IWidth*(xpos1/100) : xpos1 : 0
    ypos := (ypos1 != "") ? ypos2 ? IHeight*(ypos1/100) : ypos1 : 0
    Width := Width1 ? Width2 ? IWidth*(Width1/100) : Width1 : IWidth
    Height := Height1 ? Height2 ? IHeight*(Height1/100) : Height1 : IHeight
    if !PassBrush
    Colour := "0x" (Colour2 ? Colour2 : "ff000000")
    Rendering := ((Rendering1 >= 0) && (Rendering1 <= 5)) ? Rendering1 : 4
    Size := (Size1 > 0) ? Size2 ? IHeight*(Size1/100) : Size1 : 12
    hFamily := Gdip_FontFamilyCreate(Font)
    hFont := Gdip_FontCreate(hFamily, Size, Style)
    FormatStyle := NoWrap ? 0x4000 | 0x1000 : 0x4000
    hFormat := Gdip_StringFormatCreate(FormatStyle)
    pBrush := PassBrush ? pBrush : Gdip_BrushCreateSolid(Colour)
    if !(hFamily && hFont && hFormat && pBrush && pGraphics)
    return !pGraphics ? -2 : !hFamily ? -3 : !hFont ? -4 : !hFormat ? -5 : !pBrush ? -6 : 0
    CreateRectF(RC, xpos, ypos, Width, Height)
    Gdip_SetStringFormatAlign(hFormat, Align)
    Gdip_SetTextRenderingHint(pGraphics, Rendering)
    ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
    if vPos
    {
    StringSplit, ReturnRC, ReturnRC, |
    if (vPos = "vCentre") || (vPos = "vCenter")
    ypos += (Height-ReturnRC4)//2
    else if (vPos = "Top") || (vPos = "Up")
    ypos := 0
    else if (vPos = "Bottom") || (vPos = "Down")
    ypos := Height-ReturnRC4
    CreateRectF(RC, xpos, ypos, Width, ReturnRC4)
    ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
    }
    if !Measure
    E := Gdip_DrawString(pGraphics, Text, hFont, hFormat, pBrush, RC)
    if !PassBrush
    Gdip_DeleteBrush(pBrush)
    Gdip_DeleteStringFormat(hFormat)
    Gdip_DeleteFont(hFont)
    Gdip_DeleteFontFamily(hFamily)
    return E ? E : ReturnRC
    }
    Gdip_DrawString(pGraphics, sString, hFont, hFormat, pBrush, ByRef RectF)
    {
    if !A_IsUnicode
    {
    nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", 0, "int", 0)
    VarSetCapacity(wString, nSize*2)
    DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", &wString, "int", nSize)
    return DllCall("gdiplus\GdipDrawString", "uint", pGraphics
    , "uint", &wString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", pBrush)
    }
    else
    {
    return DllCall("gdiplus\GdipDrawString", "uint", pGraphics
    , "uint", &sString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", pBrush)
    }
    }
    Gdip_MeasureString(pGraphics, sString, hFont, hFormat, ByRef RectF)
    {
    VarSetCapacity(RC, 16)
    if !A_IsUnicode
    {
    nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", 0, "int", 0)
    VarSetCapacity(wString, nSize*2)
    DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &sString, "int", -1, "uint", &wString, "int", nSize)
    DllCall("gdiplus\GdipMeasureString", "uint", pGraphics
    , "uint", &wString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", &RC, "uint*", Chars, "uint*", Lines)
    }
    else
    {
    DllCall("gdiplus\GdipMeasureString", "uint", pGraphics
    , "uint", &sString, "int", -1, "uint", hFont, "uint", &RectF, "uint", hFormat, "uint", &RC, "uint*", Chars, "uint*", Lines)
    }
    return &RC ? NumGet(RC, 0, "float") "|" NumGet(RC, 4, "float") "|" NumGet(RC, 8, "float") "|" NumGet(RC, 12, "float") "|" Chars "|" Lines : 0
    }
    Gdip_SetStringFormatAlign(hFormat, Align)
    {
    return DllCall("gdiplus\GdipSetStringFormatAlign", "uint", hFormat, "int", Align)
    }
    Gdip_StringFormatCreate(Format=0, Lang=0)
    {
    DllCall("gdiplus\GdipCreateStringFormat", "int", Format, "int", Lang, "uint*", hFormat)
    return hFormat
    }
    Gdip_FontCreate(hFamily, Size, Style=0)
    {
    DllCall("gdiplus\GdipCreateFont", "uint", hFamily, "float", Size, "int", Style, "int", 0, "uint*", hFont)
    return hFont
    }
    Gdip_FontFamilyCreate(Font)
    {
    if !A_IsUnicode
    {
    nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &Font, "int", -1, "uint", 0, "int", 0)
    VarSetCapacity(wFont, nSize*2)
    DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, "uint", &Font, "int", -1, "uint", &wFont, "int", nSize)
    DllCall("gdiplus\GdipCreateFontFamilyFromName", "uint", &wFont, "uint", 0, "uint*", hFamily)
    }
    else
    DllCall("gdiplus\GdipCreateFontFamilyFromName", "uint", &Font, "uint", 0, "uint*", hFamily)
    return hFamily
    }
    Gdip_CreateAffineMatrix(m11, m12, m21, m22, x, y)
    {
    DllCall("gdiplus\GdipCreateMatrix2", "float", m11, "float", m12, "float", m21, "float", m22, "float", x, "float", y, "uint*", Matrix)
    return Matrix
    }
    Gdip_CreateMatrix()
    {
    DllCall("gdiplus\GdipCreateMatrix", "uint*", Matrix)
    return Matrix
    }
    Gdip_CreatePath(BrushMode=0)
    {
    DllCall("gdiplus\GdipCreatePath", "int", BrushMode, "uint*", Path)
    return Path
    }
    Gdip_AddPathEllipse(Path, x, y, w, h)
    {
    return DllCall("gdiplus\GdipAddPathEllipse", "uint", Path, "float", x, "float", y, "float", w, "float", h)
    }
    Gdip_AddPathPolygon(Path, Points)
    {
    StringSplit, Points, Points, |
    VarSetCapacity(PointF, 8*Points0)
    Loop, %Points0%
    {
    StringSplit, Coord, Points%A_Index%, `,
    NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")
    }
    return DllCall("gdiplus\GdipAddPathPolygon", "uint", Path, "uint", &PointF, "int", Points0)
    }
    Gdip_DeletePath(Path)
    {
    return DllCall("gdiplus\GdipDeletePath", "uint", Path)
    }
    Gdip_SetTextRenderingHint(pGraphics, RenderingHint)
    {
    return DllCall("gdiplus\GdipSetTextRenderingHint", "uint", pGraphics, "int", RenderingHint)
    }
    Gdip_SetInterpolationMode(pGraphics, InterpolationMode)
    {
    return DllCall("gdiplus\GdipSetInterpolationMode", "uint", pGraphics, "int", InterpolationMode)
    }
    Gdip_SetSmoothingMode(pGraphics, SmoothingMode)
    {
    return DllCall("gdiplus\GdipSetSmoothingMode", "uint", pGraphics, "int", SmoothingMode)
    }
    Gdip_SetCompositingMode(pGraphics, CompositingMode=0)
    {
    return DllCall("gdiplus\GdipSetCompositingMode", "uint", pGraphics, "int", CompositingMode)
    }
    Gdip_Startup()
    {
    if !DllCall("GetModuleHandle", "str", "gdiplus")
    DllCall("LoadLibrary", "str", "gdiplus")
    VarSetCapacity(si, 16, 0), si := Chr(1)
    DllCall("gdiplus\GdiplusStartup", "uint*", pToken, "uint", &si, "uint", 0)
    return pToken
    }
    Gdip_Shutdown(pToken)
    {
    DllCall("gdiplus\GdiplusShutdown", "uint", pToken)
    if hModule := DllCall("GetModuleHandle", "str", "gdiplus")
    DllCall("FreeLibrary", "uint", hModule)
    return 0
    }
    Gdip_RotateWorldTransform(pGraphics, Angle, MatrixOrder=0)
    {
    return DllCall("gdiplus\GdipRotateWorldTransform", "uint", pGraphics, "float", Angle, "int", MatrixOrder)
    }
    Gdip_ScaleWorldTransform(pGraphics, x, y, MatrixOrder=0)
    {
    return DllCall("gdiplus\GdipScaleWorldTransform", "uint", pGraphics, "float", x, "float", y, "int", MatrixOrder)
    }
    Gdip_TranslateWorldTransform(pGraphics, x, y, MatrixOrder=0)
    {
    return DllCall("gdiplus\GdipTranslateWorldTransform", "uint", pGraphics, "float", x, "float", y, "int", MatrixOrder)
    }
    Gdip_ResetWorldTransform(pGraphics)
    {
    return DllCall("gdiplus\GdipResetWorldTransform", "uint", pGraphics)
    }
    Gdip_GetRotatedTranslation(Width, Height, Angle, ByRef xTranslation, ByRef yTranslation)
    {
    pi := 3.14159, TAngle := Angle*(pi/180)
    Bound := (Angle >= 0) ? Mod(Angle, 360) : 360-Mod(-Angle, -360)
    if ((Bound >= 0) && (Bound <= 90))
    xTranslation := Height*Sin(TAngle), yTranslation := 0
    else if ((Bound > 90) && (Bound <= 180))
    xTranslation := (Height*Sin(TAngle))-(Width*Cos(TAngle)), yTranslation := -Height*Cos(TAngle)
    else if ((Bound > 180) && (Bound <= 270))
    xTranslation := -(Width*Cos(TAngle)), yTranslation := -(Height*Cos(TAngle))-(Width*Sin(TAngle))
    else if ((Bound > 270) && (Bound <= 360))
    xTranslation := 0, yTranslation := -Width*Sin(TAngle)
    }
    Gdip_GetRotatedDimensions(Width, Height, Angle, ByRef RWidth, ByRef RHeight)
    {
    pi := 3.14159, TAngle := Angle*(pi/180)
    if !(Width && Height)
    return -1
    RWidth := Ceil(Abs(Width*Cos(TAngle))+Abs(Height*Sin(TAngle)))
    RHeight := Ceil(Abs(Width*Sin(TAngle))+Abs(Height*Cos(Tangle)))
    }
    Gdip_ImageRotateFlip(pBitmap, RotateFlipType=1)
    {
    return DllCall("gdiplus\GdipImageRotateFlip", "uint", pBitmap, "int", RotateFlipType)
    }
    Gdip_SetClipRect(pGraphics, x, y, w, h, CombineMode=0)
    {
    return DllCall("gdiplus\GdipSetClipRect", "uint", pGraphics, "float", x, "float", y, "float", w, "float", h, "int", CombineMode)
    }
    Gdip_SetClipPath(pGraphics, Path, CombineMode=0)
    {
    return DllCall("gdiplus\GdipSetClipPath", "uint", pGraphics, "uint", Path, "int", CombineMode)
    }
    Gdip_ResetClip(pGraphics)
    {
    return DllCall("gdiplus\GdipResetClip", "uint", pGraphics)
    }
    Gdip_GetClipRegion(pGraphics)
    {
    Region := Gdip_CreateRegion()
    DllCall("gdiplus\GdipGetClip", "uint" pGraphics, "uint*", Region)
    return Region
    }
    Gdip_SetClipRegion(pGraphics, Region, CombineMode=0)
    {
    return DllCall("gdiplus\GdipSetClipRegion", "uint", pGraphics, "uint", Region, "int", CombineMode)
    }
    Gdip_CreateRegion()
    {
    DllCall("gdiplus\GdipCreateRegion", "uint*", Region)
    return Region
    }
    Gdip_DeleteRegion(Region)
    {
    return DllCall("gdiplus\GdipDeleteRegion", "uint", Region)
    }
    Gdip_LockBits(pBitmap, x, y, w, h, ByRef Stride, ByRef Scan0, ByRef BitmapData, LockMode = 3, PixelFormat = 0x26200a)
    {
    CreateRect(Rect, x, y, w, h)
    VarSetCapacity(BitmapData, 21, 0)
    E := DllCall("Gdiplus\GdipBitmapLockBits", "uint", pBitmap, "uint", &Rect, "uint", LockMode, "int", PixelFormat, "uint", &BitmapData)
    Stride := NumGet(BitmapData, 8)
    Scan0 := NumGet(BitmapData, 16)
    return E
    }
    Gdip_UnlockBits(pBitmap, ByRef BitmapData)
    {
    return DllCall("Gdiplus\GdipBitmapUnlockBits", "uint", pBitmap, "uint", &BitmapData)
    }
    Gdip_SetLockBitPixel(ARGB, Scan0, x, y, Stride)
    {
    Numput(ARGB, Scan0+0, (x*4)+(y*Stride))
    }
    Gdip_GetLockBitPixel(Scan0, x, y, Stride)
    {
    return NumGet(Scan0+0, (x*4)+(y*Stride))
    }
    Gdip_PixelateBitmap(pBitmap, ByRef pBitmapOut, BlockSize)
    {
    static PixelateBitmap
    if !PixelateBitmap
    {
    MCode_PixelateBitmap := "83EC388B4424485355568B74245C99F7FE8B5C244C8B6C2448578BF88BCA894C241C897C243485FF0F8E2E0300008B44245"
    . "499F7FE897C24448944242833C089542418894424308944242CEB038D490033FF397C2428897C24380F8E750100008BCE0FAFCE894C24408DA4240000"
    . "000033C03BF08944241089442460894424580F8E8A0000008B5C242C8D4D028BD52BD183C203895424208D3CBB0FAFFE8BD52BD142895424248BD52BD"
    . "103F9897C24148974243C8BCF8BFE8DA424000000008B5C24200FB61C0B03C30FB619015C24588B5C24240FB61C0B015C24600FB61C11015C241083C1"
    . "0483EF0175D38B7C2414037C245C836C243C01897C241475B58B7C24388B6C244C8B5C24508B4C244099F7F9894424148B44245899F7F9894424588B4"
    . "4246099F7F9894424608B44241099F7F98944241085F60F8E820000008D4B028BC32BC18D68038B44242C8D04B80FAFC68BD32BD142895424248BD32B"
    . "D103C18944243C89742420EB038D49008BC88BFE0FB64424148B5C24248804290FB644245888010FB644246088040B0FB644241088040A83C10483EF0"
    . "175D58B44243C0344245C836C2420018944243C75BE8B4C24408B5C24508B6C244C8B7C2438473B7C2428897C24380F8C9FFEFFFF8B4C241C33D23954"
    . "24180F846401000033C03BF2895424108954246089542458895424148944243C0F8E82000000EB0233D2395424187E6F8B4C243003C80FAF4C245C8B4"
    . "424280FAFC68D550203CA8D0C818BC52BC283C003894424208BC52BC2408BFD2BFA8B54241889442424895424408B4424200FB614080FB60101542414"
    . "8B542424014424580FB6040A0FB61439014424600154241083C104836C24400175CF8B44243C403BC68944243C7C808B4C24188B4424140FAFCE99F7F"
    . "9894424148B44245899F7F9894424588B44246099F7F9894424608B44241099F7F98944241033C08944243C85F60F8E7F000000837C2418007E6F8B4C"
    . "243003C80FAF4C245C8B4424280FAFC68D530203CA8D0C818BC32BC283C003894424208BC32BC2408BFB2BFA8B54241889442424895424400FB644241"
    . "48B5424208804110FB64424580FB654246088018B4424248814010FB654241088143983C104836C24400175CF8B44243C403BC68944243C7C818B4C24"
    . "1C8B44245C0144242C01742430836C2444010F85F4FCFFFF8B44245499F7FE895424188944242885C00F8E890100008BF90FAFFE33D2897C243C89542"
    . "45489442438EB0233D233C03BCA89542410895424608954245889542414894424400F8E840000003BF27E738B4C24340FAFCE03C80FAF4C245C034C24"
    . "548D55028BC52BC283C003894424208BC52BC2408BFD03CA894424242BFA89742444908B5424200FB6040A0FB611014424148B442424015424580FB61"
    . "4080FB6040F015424600144241083C104836C24440175CF8B4424408B7C243C8B4C241C33D2403BC1894424400F8C7CFFFFFF8B44241499F7FF894424"
    . "148B44245899F7FF894424588B44246099F7FF894424608B44241099F7FF8944241033C08944244085C90F8E8000000085F67E738B4C24340FAFCE03C"
    . "80FAF4C245C034C24548D53028BC32BC283C003894424208BC32BC2408BFB03CA894424242BFA897424448D49000FB65424148B4424208814010FB654"
    . "24580FB644246088118B5424248804110FB644241088043983C104836C24440175CF8B4424408B7C243C8B4C241C403BC1894424407C808D04B500000"
    . "00001442454836C2438010F858CFEFFFF33D233C03BCA89542410895424608954245889542414894424440F8E9A000000EB048BFF33D2395424180F8E"
    . "7D0000008B4C24340FAFCE03C80FAF4C245C8B4424280FAFC68D550203CA8D0C818BC52BC283C003894424208BC52BC240894424248BC52BC28B54241"
    . "8895424548DA424000000008B5424200FB6140A015424140FB611015424588B5424240FB6140A015424600FB614010154241083C104836C24540175CF"
    . "8B4424448B4C241C403BC1894424440F8C6AFFFFFF0FAF4C24188B44241499F7F9894424148B44245899F7F9894424588B44246099F7F9894424608B4"
    . "4241099F7F98944241033C03944241C894424540F8E7B0000008B7C241885FF7E688B4C24340FAFCE03C80FAF4C245C8B4424280FAFC68D530203CA8D"
    . "0C818BC32BC283C003894424208BC32BC2408BEB894424242BEA0FB65424148B4424208814010FB65424580FB644246088118B5424248804110FB6442"
    . "41088042983C10483EF0175D18B442454403B44241C894424547C855F5E5D33C05B83C438C3"
    VarSetCapacity(PixelateBitmap, StrLen(MCode_PixelateBitmap)//2)
    Loop % StrLen(MCode_PixelateBitmap)//2
    NumPut("0x" SubStr(MCode_PixelateBitmap, (2*A_Index)-1, 2), PixelateBitmap, A_Index-1, "char")
    }
    Gdip_GetImageDimensions(pBitmap, Width, Height)
    if (Width != Gdip_GetImageWidth(pBitmapOut) || Height != Gdip_GetImageHeight(pBitmapOut))
    return -1
    if (BlockSize > Width || BlockSize > Height)
    return -2
    E1 := Gdip_LockBits(pBitmap, 0, 0, Width, Height, Stride1, Scan01, BitmapData1)
    E2 := Gdip_LockBits(pBitmapOut, 0, 0, Width, Height, Stride2, Scan02, BitmapData2)
    if (E1 || E2)
    return -3
    E := DllCall(&PixelateBitmap, "uint", Scan01, "uint", Scan02, "int", Width, "int", Height, "int", Stride1, "int", BlockSize)
    Gdip_UnlockBits(pBitmap, BitmapData1), Gdip_UnlockBits(pBitmapOut, BitmapData2)
    return 0
    }
    Gdip_ToARGB(A, R, G, B)
    {
    return (A << 24) | (R << 16) | (G << 8) | B
    }
    Gdip_FromARGB(ARGB, ByRef A, ByRef R, ByRef G, ByRef B)
    {
    A := (0xff000000 & ARGB) >> 24
    R := (0x00ff0000 & ARGB) >> 16
    G := (0x0000ff00 & ARGB) >> 8
    B := 0x000000ff & ARGB
    }
    Gdip_AFromARGB(ARGB)
    {
    return (0xff000000 & ARGB) >> 24
    }
    Gdip_RFromARGB(ARGB)
    {
    return (0x00ff0000 & ARGB) >> 16
    }
    Gdip_GFromARGB(ARGB)
    {
    return (0x0000ff00 & ARGB) >> 8
    }
    Gdip_BFromARGB(ARGB)
    {
    return 0x000000ff & ARGB
    }
    coordmode, tooltip,client
    setwindelay,-1
    SetBatchLines, -1
    mouse_div := 3.0
    inicount := 11
    fileread,settings,settings.ini
    stringsplit,settings,settings,`n
    if !(fileexist("settings.ini")) || (settings0-3 != inicount){
    iniwrite,1,settings.ini,hotkeys,lbutton
    iniwrite,1,settings.ini,hotkeys,rbutton
    iniwrite,3.30,settings.ini,settings,sensitivity
    iniwrite,0,settings.ini,settings,safe
    iniwrite,0,settings.ini,settings,distance
    iniwrite,800,settings.ini,settings,initial_search_width
    iniwrite,200,settings.ini,settings,match_search_width
    iniwrite,24,settings.ini,settings,static_x_offset
    iniwrite,12,settings.ini,settings,static_y_offset
    iniwrite,1,settings.ini,settings,overlayShow
    iniwrite,0,settings.ini,settings,alphaSearch
    }
    iniread,lCheck,settings.ini,hotkeys,lbutton
    iniread,rCheck,settings.ini,hotkeys,rbutton
    hotkey,~lbutton,aim, % lCheck ? "on" : "off"
    hotkey,~rbutton,aim, % lCheck ? "on" : "off"
    iniread,mouse_div,settings.ini,settings,sensitivity
    iniread,safe,settings.ini,settings,safe
    iniread,distance,settings.ini,settings,distance
    iniread,initial_s_w,settings.ini,settings,initial_search_width
    iniread,match_s_w,settings.ini,settings,match_search_width
    iniread,x_offset,settings.ini,settings,static_x_offset
    iniread,y_offset,settings.ini,settings,static_y_offset
    iniread,overlayShow,settings.ini,settings,overlayShow
    iniread,alphaSearch,settings.ini,settings,alphaSearch
    Gui, 1: Add, GroupBox, x12 y10 w160 h45 , Activation
    Gui 1: Add, CheckBox, % "x22 y25 w60 h20 " (lCheck ? "+checked" : "-checked") " v_l greg", LButton
    Gui 1: Add, CheckBox, % "x85 y25 w140 h20 " (rCheck ? "+checked" : "-checked") " v_r greg", RButton
    Gui 1: Add, GroupBox, x12 y60 w160 h45 , Sensitivity / mouse_div
    Gui 1: Add, Edit, x62 y80 w50 h20 vsensitivity, % mouse_div
    Gui 1: Add, Button, x112 y80 w20 h20 v_sensChange_0 gsens, +
    Gui 1: Add, Button, x132 y80 w20 h20 v_sensChange_2 gsens, -
    Gui 1: Add, Text, x22 y82 w40 h20 , Sens:
    Gui 1: Add, GroupBox, x12 y110 w160 h290 , Settings
    Gui 1: Add, CheckBox, % "x22 y125 w140 h20 " (safe ? "+checked" : "-checked") " vsafe greg2", Safe mode
    Gui 1: Add, Text, x22 y145 w130 h20 , (Slow`, but potentially safer)
    Gui 1: Add, CheckBox, % "x22 y165 w130 h20 " (distance ? "+checked" : "-checked") " vdistance greg2", Distance check
    Gui 1: Add, Text, x22 y185 w140 h40 , (Accounts for distance`, but due to hpbar obscurance, can be unreliable)
    Gui 1: Add, Text, x22 y233 w100 h20 , Search width:
    Gui 1: Add, Edit, x122 y230 w50 h20 vinitial_s_w, % initial_s_w
    Gui 1: Add, Text, x22 y253 w100 h20 , Match search width:
    Gui 1: Add, Edit, x122 y250 w50 h20 vmatch_s_w, % match_s_w
    Gui 1: Add, Text, x22 y273 w100 h20 , Offset on x:
    Gui 1: Add, Edit, x122 y270 w50 h20 vx_offset, % x_offset
    Gui 1: Add, Text, x22 y293 w100 h20 , Offset on y:
    Gui 1: Add, Edit, x122 y290 w50 h20 vy_offset, % y_offset
    Gui 1: Add, CheckBox, % "x22 y313 w130 h20 " (overlayShow ? "+checked" : "-checked") " voverlayShow greg2", Show overlay
    Gui 1: Add, CheckBox, % "x22 y333 w130 h40 " (alphaSearch ? "+checked" : "-checked") " valphaSearch greg2", Alternative search`n(Win 10, etc)
    Gui 1: Add, Button, x12 y373 w160 h30 vrunButton grunr, Run
    Gui 1: Show, w189 h413
    mainGui := winactive("A")
    return
    reg:
    gui,submit,nohide
    key := "~" strsplit(a_guicontrol,"_")[2] "button"
    if (%a_guicontrol%)
    hotkey, % key, aim, on
    else
    hotkey, % key, aim, off
    return
    reg2:
    %a_guicontrol% := !%a_guicontrol%
    return
    home::
    if (!winactive("ahk_id " mainGui)) {
    winactivate, ahk_id %mainGui%
    goto, runr
    }
    else {
    WinMinimize, ahk_id %mainGui%
    winactivate, ahk_class TankWindowClass
    winactivate, ahk_id %overlay_ID%
    }
    return
    ~pgup::goto sens
    ~pgdn::
    mouse_div += -0.1
    goto sens
    sens:
    addVal := a_guicontrol ? a_guicontrol : "__0"
    mouse_div := round(mouse_div+(1-strsplit(addVal,"_")[3])*0.05,2)
    guicontrol,,sensitivity, % mouse_div
    if (!winactive("ahk_id " mainGui))
    TTip(mouse_div, 500)
    return
    TTip(str,delay) {
    tooltip % str
    settimer,ttexpire, % delay
    return
    ttexpire:
    tooltip,
    return
    }
    runr:
    gui 1: submit,nohide
    if (!winexist("ahk_class TankWindowClass")) {
    MsgBox Open Overwatch and try again.
    return
    }
    aimactive := !aimactive
    if (aimactive) {
    guicontrol,,runButton,Disable
    WinMinimize, ahk_id %mainGui%
    pToken := Gdip_Startup()
    if (safe) {
    dc := GetDC()
    winactivate,ahk_class TankWindowClass
    wingetpos,,,w,h,ahk_class TankWindowClass
    }
    else {
    handle := winexist("ahk_class TankWindowClass")
    dc := GetDC(handle)
    winactivate,ahk_id %handle%
    pbmp := Gdip_BitmapFromHWND(handle)
    Gdip_GetDimensions(pbmp, w, h)
    Gdip_DisposeImage(pbmp)
    }
    c_x := (w/2)
    c_y := (h/2)
    s_w := initial_s_w
    s_h := s_w/2
    s_x := (w/2)-(s_w/2)
    s_y := (h/2)-(s_h/2)
    y_off := -initial_s_w*0.125
    if (overlayShow) {
    Gui, 2: +E0x20 -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
    Gui, 2: Show,,Window
    overlay_ID := WinExist()
    overlay_dib := CreateDIBSection(s_w, s_h)
    overlay_dc := CreateCompatibleDC()
    overlay_obm := SelectObject(overlay_dc, overlay_dib)
    G := Gdip_GraphicsFromHDC(overlay_dc)
    overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,255,0,0), 2)
    Gdip_DrawRectangle(G, overlay_pen, 0, 0, s_w, s_h)
    Gdip_DeletePen(overlay_pen)
    UpdateLayeredWindow(overlay_ID, overlay_dc, s_x, s_y+y_off, s_w, s_h)
    SelectObject(overlay_dc, overlay_obm)
    DeleteObject(overlay_dib)
    DeleteDC(overlay_dc)
    Gdip_DeleteGraphics(G)
    }
    }
    else {
    guicontrol,,runButton,Run
    Gdip_DisposeImage(pbmp)
    Gdip_Shutdown(pToken)
    Gui 2: Destroy
    }
    return
    Gdip_FromARGB(NumGet(Scan0+0, ((10)*4)+((10)*Stride)),A,R,G,B)
    aim:
    if (aimactive) {
    while (GetKeyState(strreplace(a_thishotkey,"~"),"P")) {
    if (!active) {
    active := true
    QPX(True)
    M_Move()
    pbmp := BitmapFromScreen(s_x, s_y+y_off, s_w, s_h,dc)
    M_Move()
    if (alphaSearch)
    E1 := Gdip_LockBits(pbmp, 0, 0, s_w, s_h, Stride, Scan0, BitmapData,1)
    else
    E1 := Gdip_LockBits(pbmp, 0, 0, s_w, s_h, Stride, Scan0, BitmapData,1,0x21808)
    M_Move()
    match := false
    loop % s_h/6 {
    y := (a_index-1)*6
    loop % s_w/6 {
    x := ((a_index-1)*6)
    if (abs((x*y)-(s_w*s_h)/2) < 36) {
    M_Move()
    }
    if (alphaSearch)
    Gdip_FromARGB(NumGet(Scan0+0, (x*4)+(y*Stride)),A,R,G,B)
    else
    Gdip_FromRGB(NumGet(Scan0+0, (x*3)+(y*Stride)),r,g,b)
    if (r > 240 && g < 20 && b < 20) && (b > 0) && (g == 0) {
    n_x := x-3, n_y := y-3
    c:= 0
    loop, 7 {
    if (n_x >= 0 && n_x <= s_w) && (n_y >= 0 && n_y <= s_h) {
    if (alphaSearch)
    Gdip_FromARGB(NumGet(Scan0+0, (n_x*4)+(n_y*Stride)),A,R,G,B)
    else
    Gdip_FromRGB(NumGet(Scan0+0, (n_x*3)+(n_y*Stride)),r,g,b)
    if (r > 240 && g < 20 && b < 20) && (b > 0) && (g == 0)
    c++
    }
    n_x++, n_y++
    }
    if (c == 4 || c == 5) {
    lowest_x := x, lowest_y := y
    t_x := x-30, t_y := y-10
    loop 20 {
    loop 40 {
    if (t_x >= 0 && t_x <= s_w && t_y >= 0 && t_y < s_h) {
    if (alphaSearch)
    Gdip_FromARGB(NumGet(Scan0+0, (t_x*4)+(t_y*Stride)),A,R,G,B)
    else
    Gdip_FromRGB(NumGet(Scan0+0, (t_x*3)+(t_y*Stride)),r,g,b)
    if (r > 240 && g < 20 && b < 20) && (b > 0) && (g == 0) {
    if (t_x < lowest_x) {
    lowest_x := t_x
    }
    if (t_y > lowest_y)
    lowest_y := t_y
    }
    }
    t_x++
    }
    t_x := x-20
    t_y++
    }
    x := lowest_x, y := lowest_y
    if (distance) {
    top_x := x + 6, top_y := y-3
    loop {
    top_y--
    if (top_x >= 0 && top_x <= s_w) && (top_y >= 0 && top_y <= s_h)
    if (alphaSearch)
    Gdip_FromARGB(NumGet(Scan0+0, (top_x*4)+(top_y*Stride)),A,R,G,B)
    else
    Gdip_FromRGB(NumGet(Scan0+0, (top_x*3)+(top_y*Stride)),r,g,b)
    else
    break
    } until (!((r > 200 && g < 100 && b < 100)))
    h_r := 1+((y-top_y)/8)
    screen_x := top_x+s_x, screen_y := (top_y+s_y+y_off)
    mouse_x := (((s_x+x)-c_x)/mouse_div)+(x_offset*h_r)
    mouse_y := (((s_y+y)-c_y)/mouse_div)-(y_offset*h_r)
    }
    else {
    screen_x := x+s_x, screen_y := (y+s_y+y_off)
    mouse_x := (((s_x+x)-c_x)/mouse_div)+x_offset
    mouse_y := (((s_y+y)-c_y)/mouse_div)-y_offset
    }
    if (abs(mouse_x) < s_w || abs(mouse_y) < s_y) {
    s_x -= mouse_x, s_y -= mouse_y
    M_Move(mouse_x,mouse_y)
    }
    match := true
    tt++
    }
    }
    } until (match)
    } until (match)
    if (match) {
    s_w := match_s_w
    s_h := match_s_w/2
    s_x := c_x-mouse_x-(match_s_w/2)-(match_s_w/4), s_y := c_y-mouse_y-(s_h/2)+(match_s_w/8)
    if (overlayShow) {
    overlay_dib := CreateDIBSection(s_w, s_h)
    overlay_dc := CreateCompatibleDC()
    overlay_obm := SelectObject(overlay_dc, overlay_dib)
    G := Gdip_GraphicsFromHDC(overlay_dc)
    overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,0,255,0), 2)
    Gdip_DrawRectangle(G, overlay_pen, 0, 0, s_w, s_h)
    Gdip_DeletePen(overlay_pen)
    UpdateLayeredWindow(overlay_ID, overlay_dc, s_x, s_y+y_off, s_w, s_h)
    SelectObject(overlay_dc, overlay_obm)
    DeleteObject(overlay_dib)
    DeleteDC(overlay_dc)
    Gdip_DeleteGraphics(G)
    }
    }
    else {
    if (s_w < initial_s_w) {
    s_w += match_s_w/2
    s_h += match_s_w/4
    s_x -= match_s_w/4
    s_y -= match_s_w/8
    }
    else {
    s_x := (w/2)-(s_w/2)
    s_y := (h/2)-(s_h/2)
    p_x := s_x
    p_y := s_y
    }
    if (overlayShow) {
    overlay_dib := CreateDIBSection(s_w, s_h)
    overlay_dc := CreateCompatibleDC()
    overlay_obm := SelectObject(overlay_dc, overlay_dib)
    G := Gdip_GraphicsFromHDC(overlay_dc)
    overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,255,0,0), 2)
    Gdip_DrawRectangle(G, overlay_pen, 0, 0, s_w, s_h)
    Gdip_DeletePen(overlay_pen)
    UpdateLayeredWindow(overlay_ID, overlay_dc, s_x, s_y+y_off, s_w, s_h)
    SelectObject(overlay_dc, overlay_obm)
    DeleteObject(overlay_dib)
    DeleteDC(overlay_dc)
    Gdip_DeleteGraphics(G)
    }
    }
    Gdip_UnlockBits(pbmp, BitmapData)
    Gdip_DisposeImage(pbmp)
    dur := QPX(false)
    if (dur < 0.016) {
    loop % floor((dur/4)*1000) {
    M_Move()
    delay(0.004)
    }
    }
    active := false
    }
    }
    }
    return
    M_Move(in_x=0, in_y=0) {
    static x,y,chunk_x,chunk_y,force_vector
    if (in_x || in_y) {
    x += in_x
    y += in_y
    chunk_x := x/5
    chunk_y := y/5
    }
    if (x <= -1 || x >= 1) || (y <= -1 || y >= 1) {
    x -= chunk_x, y -= chunk_y
    DllCall("mouse_event", "UInt", 0x01, "UInt", chunk_x, "UInt", chunk_y)
    }
    }
    BitmapFromScreen(s_x,s_y,s_w,s_h,dc) {
    chdc := CreateCompatibleDC(dc), hbm := CreateDIBSection(s_w, s_h, chdc), obm := SelectObject(chdc, hbm)
    BitBlt(chdc, 0, 0, s_w, s_h, dc, s_x, s_y)
    pbmp := Gdip_CreateBitmapFromHBITMAP(hbm)
    SelectObject(chdc, obm), DeleteObject(hbm), DeleteDC(chdc)
    return pbmp
    }
    Gdip_FromRGB(RGB, ByRef R, ByRef G, ByRef B)
    {
    R := (0x00ff0000 & RGB) >> 16
    G := (0x0000ff00 & RGB) >> 8
    B := 0x000000ff & RGB
    }
    Get_RGBBitPixel(Scan0,x,y,Stride) {
    f := Gdip_GetLockBitPixel(Scan0, x, y, Stride)
    return f
    }
    Delay( D=0.001 ) {
    Static F
    Critical
    F ? F : DllCall( "QueryPerformanceFrequency", Int64P,F )
    DllCall( "QueryPerformanceCounter", Int64P,pTick ), cTick := pTick
    While( ( (Tick:=(pTick-cTick)/F)) <D ) {
    DllCall( "QueryPerformanceCounter", Int64P,pTick )
    Sleep -1
    }
    Return Round( Tick,3 )
    }
    QPX( N=0 ) {
    Static F,A,Q,P,X
    If	( N && !P )
    Return	DllCall("QueryPerformanceFrequency",Int64P,F) + (X:=A:=0) + DllCall("QueryPerformanceCounter",Int64P,P)
    DllCall("QueryPerformanceCounter",Int64P,Q), A:=A+Q-P, P:=Q, X:=X+1
    Return	( N && X=N ) ? (X:=X-1)<<64 : ( N=0 && (R:=A/X/F) ) ? ( R + (A:=P:=X:=0) ) : 1
    }
    rshift::
    GuiClose:
    gui,submit
    iniwrite,% _l,settings.ini,hotkeys,lbutton
    iniwrite,% _r,settings.ini,hotkeys,rbutton
    iniwrite,% mouse_div,settings.ini,settings,sensitivity
    iniwrite,% safe,settings.ini,settings,safe
    iniwrite,% distance,settings.ini,settings,distance
    iniwrite,% initial_s_w,settings.ini,settings,initial_search_width
    iniwrite,% match_s_w,settings.ini,settings,match_search_width
    iniwrite,% x_offset,settings.ini,settings,static_x_offset
    iniwrite,% y_offset,settings.ini,settings,static_y_offset
    iniwrite,% overlayShow,settings.ini,settings,overlayShow
    iniwrite,% overlayShow,settings.ini,settings,alphaSearch
    Gdip_DisposeImage(pbmp)
    Gdip_Shutdown(pToken)
    ExitApp
#2 · 9y ago
Jov
[MPGH]Jov
MultiHack C++ Code
Code:
#include-once
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <WinAPI.au3>
#include "FastFind.au3"
#include <Array.au3>
#include <Color.au3>
#include <WinAPIGdi.au3>
 
Opt('MouseCoordMode', 2)
Opt('PixelCoordMode', 2)
 
Global $SettingHitChance = .60
Global $SettingTriggerRadarSize = 18
Global $ShowRadar = 1
 
;HotKeys
HotKeySet("{HOME}", "Stop")
HotKeySet("{END}", "Pause")
HotKeySet("{DELETE}", "SwitchAimMode")
 
;Main FORM
Global $frmBot, $mFile, $mClose, $mOptions, $mSettings, $mAutoUpdate, $mDrawDebug, $lblHitChance, $lblStatus, $lblfrmTriggerBot, $lblfrmAimBot, $lblHelpMsg1, $lblHelpMsg2, $lblHelpMsg3
Global $Interations = 0
;Settings FORM
Global $SettingsGUI, $tabSettings, $tsBotSettings, $grpBotSettings, $cbAutoRun, $lblWindowClass, $lblAimKey, $lblTriggerAimKey, $txtWindowClass, $txtAimKey, $txtTriggerAimKey
Global $tsPixelSettings, $grpPixelSettings, $txtSearchAreaSize, $txtShadeVariation, $txtMinPureColors, $txtMaxShades, $lblSearchAreaSize, $lblShadeVariation, $lblMinPureColors, $lblMaxShades, $lblSearchColors, $editSearchColors
Global $btnSave, $grpEnable, $cbAimBot, $cbTriggerBot, $txtAimShootAreaSize, $txtAimBotStepSize,  $txtTriggerScanSize, $lblAimBotStepSize, $lblAimShootAreaSize, $lblTriggerScanSize
 
Global $SettingAimMode
Global $SettingTriggerScanSize, $SettingTriggerBot, $SettingTriggerAimKey
Global $SettingAimShootAreaSize, $SettingAimBot, $SettingAimKey, $SettingAutoShoot, $SettingAimBotStepSize
Global $SettingSearchAreaSize, $SettingShadeVariation, $SettingMinPureColors, $SettingMaxShades, $SettingMaxR, $SettingMaxG, $SettingMaxB, $SettingMinR, $SettingMinG, $SettingMinB
Global $SettingDrawDebug, $SettingWindowClass, $SettingAutoRun, $SettingAutoUpdate
Global $WindowHandle, $CurrentCoord, $VersionsInfo, $Version, $OldVersion, $NewVersion, $GUITitle, $DebugGUIs[7]
Global $X_Ratio, $Y_Ratio, $MiddleX, $MiddleY, $Size
Global $SearchAreaSizeX, $AimShootAreaSizeX, $SearchAreaSizeY, $AimShootAreaSizeY
Global $SearchAreaQuads[4][7]
Global $SearchAreaPoints[4]
Global $AimShootAreaPoints[4]
Global $LoopTimeArray = []
Global $SettingsPath = "Settings.ini"
Global $DebugGUI
Global $UnitTable = []
 
 
;***************************************************MODIFY IF YOU WANT***************************************************************
;AIMBOT $ TRIGGERBOT SETTINGS
Global $SettingAimMode = 0 ;0 = Triggerbot and aimbot ON,1 = Triggerbot ON,2 = Aimbot ON
 
;Triggerbot
$SettingTriggerScanSize = 45
$SettingTriggerBot = 0
$SettingTriggerAimKey = ""
 
;Aimbot
$SettingAimShootAreaSize = 5
$SettingAimBot = 1
$SettingAimKey = "01"
$SettingAutoShoot = 0
$SettingAimBotStepSize = 5 ;Lower the value = slower aimbot, higher equal faster aimbot
 
;Pixel Search settings
$SettingSearchAreaSize = 100
Global $SettingSearchColors[13] = [0xF2361B, 0xEF3519, 0xEE4131, 0xED4233, 0xEE4031, 0xCF8790, 0xCF878F, 0xD92411, 0xDC2613, 0xA24D53, 0xA84547, 0xB25C62, 0xAB545B] ;Color to search for, hex!
$SettingShadeVariation = 10
$SettingMinPureColors = 13
$SettingMaxShades = 25
 
$SettingMaxR = 242
$SettingMaxG = 135
$SettingMaxB = 144
$SettingMinR = 162
$SettingMinG = 36
$SettingMinB = 17
 
 
 
;DrawDebug
$SettingDrawDebug = 0
 
;Game Handle Name
$SettingWindowClass = "[CLASS:TankWindowClass]"
 
;Bot Settings
$SettingAutoRun = 1
$SettingAutoUpdate = 1
;***************************************************MODIFY IF YOU WANT***************************************************************
 
;Used by Bot Settings
$CurrentCoord = ""
$VersionsInfo = "http://bit****/1O7cfqX"
$Version = "1.63"
$OldVersion = IniRead("updater.ini", "Version", "Version", $Version)
$NewVersion = "0.0"
$GUITitle = GetTitle()
 
;ShellExecute("http://www.*********.com/forums/reputation.php?do=addreputation&p=3435059")
 
RefreshSettings()
 
If $SettingAutoUpdate = 1 Then DoUpdate()
MainGUI()
 
Func MainGUI()
    $frmBot = GUICreate($GUITitle & $Version & " - Updating", 270, 165, 0, 0, -1, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW), 0)
    GUISetBkColor(0xC0C0C0)
    $mFile = GUICtrlCreateMenu("File")
    $mClose = GUICtrlCreateMenuItem("Exit", $mFile)
    $mOptions = GUICtrlCreateMenu("Options")
    $mSettings = GUICtrlCreateMenuItem("Settings", $mOptions)
    $mAutoUpdate = GUICtrlCreateMenuItem("Auto Update", $mOptions)
    GUISetCheck($mAutoUpdate, $SettingAutoUpdate)
    $mDrawDebug = GUICtrlCreateMenuItem("Draw Debug", $mOptions)
    GUISetCheck($mDrawDebug, $SettingDrawDebug)
    $lblHitChance = GUICtrlCreateLabel("HitChance: 0%", 4, 0, 280, 24)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0x330000)
    $lblStatus = GUICtrlCreateLabel("Average Loop Time: 0", 4, 20, 250, 17)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0x330000)
    $lblfrmTriggerBot = GUICtrlCreateLabel("Trigger Bot: " & GetTriggerBotState(), 4, 40, 250, 17)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0x330000)
    $lblfrmAimBot = GUICtrlCreateLabel("Aim Bot: " & GetAimBotState(), 4, 60, 250, 17)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0x330000)
    $lblHelpMsg1 = GUICtrlCreateLabel("Press DELETE to change aim modes", 4, 80, 250, 17)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0xFF0000)
    $lblHelpMsg2 = GUICtrlCreateLabel("Press END to pause", 4, 100, 250, 17)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0xFF0000)
    $lblHelpMsg3 = GUICtrlCreateLabel("Press HOME to end", 4, 120, 250, 17)
    GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
    GUICtrlSetColor(-1, 0xFF0000)
    GUISetState()
    UpdateGUIAimMode()
 
    While 1
        $aMsg = GUIGetMsg(1) ; Use advanced parameter to get array
        Switch $aMsg[1] ; check which GUI sent the message
            Case $frmBot
                Switch $aMsg[0]
                    Case $mSettings
                        GUICtrlSetState($mSettings, $GUI_DISABLE)
                        SettingsGUI()
                    Case $mClose
                        Exit
                    Case $mDrawDebug
                        If IsChecked($mDrawDebug) Then
                            RemoveDebugGUI()
                            GUICtrlSetState($mDrawDebug, $GUI_UNCHECKED)
                        Else
                            DrawDebugGUI()
                            GUICtrlSetState($mDrawDebug, $GUI_CHECKED)
                        EndIf
                        IniWrite($SettingsPath, "BotSettings", "DrawDebug", ConvertFlag($mDrawDebug))
                    Case $mAutoUpdate
                        If IsChecked($mAutoUpdate) Then
                            GUICtrlSetState($mAutoUpdate, $GUI_UNCHECKED)
                        Else
                            GUICtrlSetState($mAutoUpdate, $GUI_CHECKED)
                        EndIf
                        IniWrite($SettingsPath, "BotSettings", "AutoUpdate", ConvertFlag($mAutoUpdate))
                EndSwitch
            Case $SettingsGUI
                Switch $aMsg[0] ; Now check for the messages for $hGUI2
                    ;BOT SETTINGS
                    Case $cbAutoRun
                        If IsChecked($cbAutoRun) Then GUICtrlSetState($cbAutoRun, $GUI_CHECKED)
                    ;AIM BOT
                    Case $cbAimBot
                        If IsChecked($cbAimBot) Then GUICtrlSetState($cbAimBot, $GUI_CHECKED)
                    ;TRIGGER BOT
                    Case $cbTriggerBot
                        If IsChecked($cbTriggerBot) Then GUICtrlSetState($cbTriggerBot, $GUI_CHECKED)
                    Case $btnSave
                        SaveINI()
                        RefreshSettings()
                        GUIDelete($SettingsGUI)
                        GUICtrlSetState($mSettings, $GUI_ENABLE)
                        UpdateGUIAimMode()
                EndSwitch
        EndSwitch
 
        RunBot()
    WEnd
EndFunc   ;==>MainGUI
 
Func SettingsGUI()
    $SettingsGUI = GUICreate($GUITitle & $Version, 459, 198, 0, 0, -1, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW), 0)
    GUISetIcon      @sCripTDir & "\Setting-icon.ico")
    $tabSettings = GUICtrlCreateTab(8, 8, 281, 153)
    GUICtrlSetResizing($SettingsGUI, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $tsBotSettings = GUICtrlCreateTabItem("Pixel Bot")
    $grpBotSettings = GUICtrlCreateGroup("", 12, 33, 273, 121)
    $cbAutoRun = GUICtrlCreateCheckbox("Auto Run", 20, 49, 73, 17)
 
    $lblWindowClass = GUICtrlCreateLabel("Game Handle:", 20, 77, 93, 17)
    $lblAimKey = GUICtrlCreateLabel("Aimbot Key:", 20, 102, 93, 17)
    $lblTriggerAimKey = GUICtrlCreateLabel("Triggerbot Key:", 20, 127, 93, 17)
    $txtWindowClass = GUICtrlCreateInput($SettingWindowClass, 116, 75, 105, 21)
    $txtAimKey = GUICtrlCreateInput($SettingAimKey, 116, 100, 105, 21)
    $txtTriggerAimKey = GUICtrlCreateInput($SettingTriggerAimKey, 116, 125, 105, 21)
 
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $tsPixelSettings = GUICtrlCreateTabItem("Pixel Search")
    $grpPixelSettings = GUICtrlCreateGroup("Settings", 12, 33, 273, 121)
    $txtSearchAreaSize = GUICtrlCreateInput($SettingSearchAreaSize, 86, 49, 55, 21)
    $txtShadeVariation = GUICtrlCreateInput($SettingShadeVariation, 86, 73, 55, 21)
    $txtMinPureColors = GUICtrlCreateInput($SettingMinPureColors, 86, 97, 55, 21)
    $txtMaxShades = GUICtrlCreateInput($SettingMaxShades, 86, 121, 55, 21)
    $lblSearchAreaSize = GUICtrlCreateLabel("Area Size:", 20, 52, 65, 17)
    $lblShadeVariation = GUICtrlCreateLabel("Varations:", 20, 76, 65, 17)
    $lblMinPureColors = GUICtrlCreateLabel("Min Colors:", 20, 100, 65, 17)
    $lblMaxShades = GUICtrlCreateLabel("Max Shades:", 20, 124, 65, 17)
    $lblSearchColors = GUICtrlCreateLabel("Search Colors:", 148, 52, 80, 35)
    $editSearchColors = GUICtrlCreateEdit(SearchColorsToString($SettingSearchColors), 148, 73, 121, 65)
 
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateTabItem("")
    $btnSave = GUICtrlCreateButton("Save", 368, 168, 75, 25, 0)
    $grpEnable = GUICtrlCreateGroup("Enable", 296, 24, 161, 137)
    $cbAimBot = GUICtrlCreateCheckbox("Aimbot Enabled", 312, 41, 100, 17)
    $lblAimShootAreaSize = GUICtrlCreateLabel("Aimbot Area:", 312, 65, 93, 17)
    $txtAimShootAreaSize = GUICtrlCreateInput($SettingAimShootAreaSize, 392, 62, 55, 21)
    $lblAimBotStepSize = GUICtrlCreateLabel("Step Size:", 312, 89, 93, 17)
    $txtAimBotStepSize = GUICtrlCreateInput($SettingAimBotStepSize, 392, 86, 55, 21)
    $cbTriggerBot = GUICtrlCreateCheckbox("Triggerbot Enabled", 312, 115, 100, 17)
    $lblTriggerScanSize = GUICtrlCreateLabel("Trigger Area:", 312, 139, 93, 17)
    $txtTriggerScanSize = GUICtrlCreateInput($SettingTriggerScanSize, 392, 136, 55, 21)
 
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState()
    UpdateGUI()
EndFunc   ;==>SettingsGUI
 
Func DrawDebugGUI()
    $DebugGUI = GUICreate("", 1920, 1080, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)))
    GUISetBkColor(0xABCDEF)
    _WinAPI_SetLayeredWindowAttributes($DebugGUI, 0xABCDEF, 0xA0)
    GUISetState()
 
    Local $QuadOne[4] = [$SearchAreaQuads[0][0], $SearchAreaQuads[0][1], $SearchAreaQuads[0][2], $SearchAreaQuads[0][3]]
    Local $QuadTwo[4] = [$SearchAreaQuads[1][0], $SearchAreaQuads[1][1], $SearchAreaQuads[1][2], $SearchAreaQuads[1][3]]
    Local $QuadThree[4] = [$SearchAreaQuads[2][0], $SearchAreaQuads[2][1], $SearchAreaQuads[2][2], $SearchAreaQuads[2][3]]
    Local $QuadFour[4] = [$SearchAreaQuads[3][0], $SearchAreaQuads[3][1], $SearchAreaQuads[3][2], $SearchAreaQuads[3][3]]
 
    DrawSearchAreaGUI($DebugGUI, $QuadOne, 0x66FF33)
    DrawSearchAreaGUI($DebugGUI, $QuadTwo, 0x66FF33)
    DrawSearchAreaGUI($DebugGUI, $QuadThree, 0x66FF33)
    DrawSearchAreaGUI($DebugGUI, $QuadFour, 0x66FF33)
    DrawSearchAreaGUI($DebugGUI, $SearchAreaPoints, 0xFF0000)
    DrawSearchAreaGUI($DebugGUI, $AimShootAreaPoints, 0xFF0000)
 
    If $ShowRadar = 1 Then
        $hDC = _WinAPI_GetWindowDC($DebugGUI)
        $hPen = _WinAPI_CreatePen($PS_SOLID, 2, 0xFF69B4)
        $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
 
        For $dir = 0 To $SettingTriggerRadarSize
            _WinAPI_DrawLine($hDC, $MiddleX, $MiddleY, $UnitTable[$dir][0],  $UnitTable[$dir][1])
        Next
    EndIf
EndFunc
 
Func RemoveDebugGUI()
    GUIDelete($DebugGUI)
EndFunc
 
Func RunBot()
    If $SettingAutoRun And WinGetState($WindowHandle) = 15 Then
        Local $BeginTime
        $BeginTime = TimerInit()
 
        FFSnapShot($SearchAreaPoints[0], $SearchAreaPoints[1], $SearchAreaPoints[2], $SearchAreaPoints[3])
 
        If $SettingAimBot = 1 And $SettingTriggerBot = 1 Then
            AimBot()
            TriggerBot()
        ElseIf $SettingTriggerBot = 1 Then
            TriggerBot()
        ElseIf $SettingAimBot = 1 Then
            AimBot()
        EndIf
 
        UpdateAverageTime($BeginTime)
        $CurrentCoord = ""
    EndIf
EndFunc
 
Func GetAverageTime()
    Local $Time, $TimeSum, $TimeCount = UBound($LoopTimeArray)
 
    For $Time In $LoopTimeArray
        $TimeSum = $TimeSum + $Time
    Next
 
    Return Round($TimeSum / $TimeCount)
EndFunc   ;==>GetAverageTime
 
Func TriggerBot()
    If _IsPressed("01") Then Return
 
    If $SettingTriggerAimKey = "" Then
        ActionTrigger()
    ElseIf _IsPressed($SettingTriggerAimKey) Then
        ActionTrigger()
    EndIf
EndFunc   ;==>TriggerBot
 
Func AimBot()
    If $SettingAimKey = "" Then
        ActionAim()
    ElseIf _IsPressed($SettingAimKey) Then
        ActionAim()
    EndIf
EndFunc   ;==>AimBot
 
Func ActionTrigger()
    Local $TriggerPixelSearch = TriggerPixelSearch()
    If $TriggerPixelSearch > $SettingHitChance Then
        ActionShoot()
    EndIf
EndFunc   ;==>ActionTrigger
 
Func ActionAim()
    If $CurrentCoord = "" Then $CurrentCoord = SearchPixel()
    If IsArray($CurrentCoord) = 0 Then Return False
    If ActionMoveMouse($CurrentCoord) Then
        If $SettingAutoShoot And IsWithinBounds($CurrentCoord, $AimShootAreaPoints) Then ActionShoot()
    EndIf
 
EndFunc   ;==>ActionAim
 
Func ActionShoot()
    _MouseClickFast2("left")
EndFunc   ;==>ActionShoot
 
Func ActionMoveMouse($Coord)
    Local $MoveToX = ($Coord[0] - $MiddleX)
    Local $MoveToY = ($Coord[1] - $MiddleY)
 
    If $MoveToX Then
        If Abs($MoveToX) < $SettingAimBotStepSize Then
            $Moving = $MoveToX
        Else
            $Moving = $SettingAimBotStepSize * $X_Ratio
            If ($MoveToX) < 0 Then $Moving *= -1
        EndIf
        _MouseMovePlus($Moving, 0)
    EndIf
 
 
    If $MoveToY Then
        If Abs($MoveToY) < $SettingAimBotStepSize Then
            $Moving = $MoveToY
        Else
            $Moving = $SettingAimBotStepSize * $Y_Ratio
            If ($MoveToY) < 0 Then $Moving *= -1
        EndIf
        _MouseMovePlus(0, $Moving)
    EndIf
 
    Return True
EndFunc   ;==>ActionMoveMouse
 
Func IsWithinBounds($Coord, $AreaPoints)
    Local $IsWithinBounds = $Coord[0] >= $AreaPoints[0] And $Coord[0] <= $AreaPoints[2] And $Coord[1] >= $AreaPoints[1] And $Coord[1] <= $AreaPoints[3]
    Return $IsWithinBounds
EndFunc   ;==>IsWithinBounds
 
Func _MouseMovePlus($x, $y)
    DllCall("user32.dll", "none", "mouse_event", "long", 1, "long", $x, "long", $y, "long", 0, "long", 0)
EndFunc   ;==>_MouseMovePlus
 
Func _MouseClickFast2($x = 0, $y = 0, $User32 = "User32.dll")
    DllCall($User32, "none", "mouse_event", "long", 2, "long", $x, "long", $y, "long", 0, "long", 0) ; 32770 0x8002 BitOR($MOUSEEVENTF_ABSOLUTE, $MOUSEEVENTF_LEFTDOWN)
    DllCall($User32, "none", "mouse_event", "long", 4, "long", $x, "long", $y, "long", 0, "long", 0) ; 32772 0x8004 BitOR($MOUSEEVENTF_ABSOLUTE, $MOUSEEVENTF_LEFTUP)
EndFunc   ;==>_MouseClickFast2
 
Func SearchPixel()
    Local $FoundPoints[4]
    $FoundPoints[0] = FFBestSpot($SearchAreaQuads[0][6], $SettingMinPureColors, $SettingMaxShades, $SearchAreaQuads[0][4], $SearchAreaQuads[0][5], -1, $SettingShadeVariation, False, $SearchAreaQuads[0][0], $SearchAreaQuads[0][1], $SearchAreaQuads[0][2], $SearchAreaQuads[0][3]) ;top left
    $FoundPoints[1] = FFBestSpot($SearchAreaQuads[1][6], $SettingMinPureColors, $SettingMaxShades, $SearchAreaQuads[1][4], $SearchAreaQuads[1][5], -1, $SettingShadeVariation, False, $SearchAreaQuads[1][0], $SearchAreaQuads[1][1], $SearchAreaQuads[1][2], $SearchAreaQuads[1][3]) ;bottom right
    $FoundPoints[2] = FFBestSpot($SearchAreaQuads[2][6], $SettingMinPureColors, $SettingMaxShades, $SearchAreaQuads[2][4], $SearchAreaQuads[2][5], -1, $SettingShadeVariation, False, $SearchAreaQuads[2][0], $SearchAreaQuads[2][1], $SearchAreaQuads[2][2], $SearchAreaQuads[2][3]) ;bottom left
    $FoundPoints[3] = FFBestSpot($SearchAreaQuads[3][6], $SettingMinPureColors, $SettingMaxShades, $SearchAreaQuads[3][4], $SearchAreaQuads[3][5], -1, $SettingShadeVariation, False, $SearchAreaQuads[3][0], $SearchAreaQuads[3][1], $SearchAreaQuads[3][2], $SearchAreaQuads[3][3]) ; top right
 
    Local $midX = 0
    Local $midY = 0
    Local $Count = 0
 
    For $Point In $FoundPoints
        If IsArray($Point) = 1 Then
            $Count += 1
            $midX += $Point[0]
            $midY += $Point[1]
        EndIf
    Next
 
    If $midX = 0 Or $midY = 0 Then Return
 
    $midX = Round($midX / $Count)
    $midY = Round($midY / $Count - 4)
 
    Local $midCoords[2] = [$midX, $midY]
 
    Return $midCoords
EndFunc   ;==>SearchPixel
 
 
Func TriggerPixelSearch()
    Local $OpenCount = 0
    Local $ClosedCount = 0
    Local $AvgDistance = 0
    Local $pct = 0
    For $dir = 0 To $SettingTriggerRadarSize
        $result = lineTest($MiddleX, $MiddleY, $UnitTable[$dir][0], $UnitTable[$dir][1])
 
        If IsArray($result) = 0 Then
            $OpenCount += 1
        Else
            If Sqrt(($MiddleX-$result[0])^2+($MiddleY-$result[1])^2) > 7 Then $ClosedCount += 1
        EndIf
    Next
    If $ClosedCount > 0 Then
        $pct = $ClosedCount / $SettingTriggerRadarSize
    EndIf
    UpdateGUIHitChance(Round($pct*100,2))
    Return $pct
EndFunc
 
 
Func lineTest($x1,$y1,$x2,$y2)
    ;Define differences and error check
    $dx = Abs($x2 - $x1)
    $dy = Abs($y2 - $y1)
    $sx = ($x1 < $x2) ? 1 : -1
    $sy = ($y1 < $y2) ? 1 : -1
    $err = $dx - $dy
 
    ;Main loop
    While (Not ($x1 = $x2 And $y1 = $y2))
        $result = IsCorrectShade($x1,$y1)
 
        If IsArray($result) = 1 Then
            Return $result
        EndIf
 
        $e2 = BitShift($err, -1)
 
        If $e2 > -$dy Then
            $err -= $dy
            $x1 += $sx
        EndIf
        If $e2 < $dx Then
            $err += $dx
            $y1 += $sy
        EndIf
    WEnd
EndFunc
 
Func IsCorrectShade($x0, $y0)
    $color = _ColorGetRGB(FFGetPixel($x0,$y0))
    If IsArray($color) = 1 Then
        $r = $color[0]
        $g = $color[1]
        $b = $color[2]
        If $r >= $SettingMinR  And $r <= $SettingMaxR Then
           If $g >= $SettingMinG  And $g <= $SettingMaxG Then
                If $b >= $SettingMinB  And $b <= $SettingMaxB  Then
 
                    Local $Result[2]
                    $Result[0] = $x0
                    $Result[1] = $y0
                    Return $Result
                EndIf
            EndIf
        EndIf
    EndIf
 
    Return 0
EndFunc
 
Func DrawSearchAreaGUI($GUI, $Points, $Color, $comment = "")
    Local $DrawAreaWidth = $Points[2] - $Points[0]
    Local $DrawAreaHeight = $Points[3] - $Points[1]
 
    $hDC = _WinAPI_GetWindowDC($GUI)
    $hPen = _WinAPI_CreatePen($PS_SOLID, 2, $Color)
    $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
 
    _WinAPI_DrawLine($hDC, $Points[0], $Points[1], $Points[0] + $DrawAreaWidth, $Points[1])
    _WinAPI_DrawLine($hDC, $Points[0], $Points[1], $Points[0],  $Points[1] + $DrawAreaHeight)
    _WinAPI_DrawLine($hDC, $Points[0], $Points[1] + $DrawAreaHeight, $Points[0] + $DrawAreaWidth, $Points[1] + $DrawAreaHeight)
    _WinAPI_DrawLine($hDC, $Points[0] + $DrawAreaWidth, $Points[1] + $DrawAreaHeight, $Points[0] + $DrawAreaWidth, $Points[1])
 
    _WinAPI_SetTextColor($hDC, 0x000000)
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)
 
    $tRECT = DllStructCreate($tagRect)
    DllStructSetData($tRECT, "Left", $Points[0])
    DllStructSetData($tRECT, "Top", $Points[1])
    DllStructSetData($tRECT, "Right", $Points[0]+50)
    DllStructSetData($tRECT, "Bottom", $Points[1]+50)
    _WinAPI_DrawText($hDC, $comment, $tRECT, 1)
 
    WinSetOnTop($GUI, "", 1)
EndFunc   ;==>DrawSearchAreaGUI
 
;hotkey functions
Func Pause()
    $SettingAutoRun = Not $SettingAutoRun
    UpdateGUIStatus()
EndFunc   ;==>Pause
 
;0 = Triggerbot and aimbot ON,1 = Triggerbot ON,2 = Aimbot ON
Func SwitchAimMode()
    If $SettingAimMode = 2 Then
        $SettingAimMode = 0
    Else
        $SettingAimMode = $SettingAimMode + 1
    EndIf
 
    If $SettingAimMode = 0 Then
        $SettingTriggerBot = 1
        $SettingAimBot = 1
    ElseIf $SettingAimMode = 1 Then
        $SettingTriggerBot = 1
        $SettingAimBot = 0
    ElseIf $SettingAimMode = 2 Then
        $SettingTriggerBot = 0
        $SettingAimBot = 1
    EndIf
 
    UpdateGUIAimMode()
EndFunc   ;==>SwitchAimMode
 
Func Stop()
    Exit
EndFunc   ;==>Stop
 
Func UpdateGUIStatus($Time = "0ms")
    If $SettingAutoRun = 1 Then
        GUICtrlSetData($lblStatus, "Average Loop Time:  " & $Time)
    Else
        GUICtrlSetData($lblStatus, "Average Loop Time:  Paused")
    EndIf
EndFunc   ;==>UpdateGUIStatus
 
Func UpdateAverageTime($BeginTime)
    Local $EndTime = TimerDiff($BeginTime)
 
    _ArrayAdd($LoopTimeArray, Round($EndTime))
 
    If UBound($LoopTimeArray) >= 25 Then
        Local $AverageTime = GetAverageTime()
        UpdateGUIStatus($AverageTime & "ms")
        ReDim $LoopTimeArray[0]
        _ArrayAdd($LoopTimeArray, $AverageTime)
    EndIf
EndFunc   ;==>UpdateAverageTime
 
Func UpdateGUIHitChance($pct)
    GUICtrlSetData($lblHitChance, "HitChance: " & $pct & " %")
EndFunc   ;==>UpdateGUIPixel
 
Func UpdateGUIAimMode()
    GUICtrlSetData($lblfrmTriggerBot, "Trigger Bot: " & GetTriggerBotState())
    GUICtrlSetData($lblfrmAimBot, "Aim Bot: " & GetAimBotState())
EndFunc   ;==>UpdateGUIAimMode
 
Func GetAimBotState()
    If $SettingAimBot = 0 Then Return "OFF"
    If $SettingAimKey = "" Then
        Return "Auto"
    Else
        Return GetFriendlyKeyName($SettingAimKey)
    EndIf
EndFunc   ;==>GetAimBotState
 
Func GetTriggerBotState()
    If $SettingTriggerBot = 0 Then Return "OFF"
    If $SettingTriggerAimKey = "" Then
        Return "Auto"
    Else
        Return GetFriendlyKeyName($SettingTriggerAimKey)
    EndIf
EndFunc   ;==>GetTriggerBotState
 
;GUI Title Bar
Func GetTitle()
    Local $Title = ""
    For $i = 0 To Random(0, 7, 1)
        $Title &= Chr(Random(97, 122, 1))
    Next
    For $i = 0 To Random(5, 10, 1)
        $Title &= Chr(Random(65, 90, 1))
    Next
    Return $Title
EndFunc   ;==>GetTitle
 
Func UpdateGUI()
    ;Game Handle Name
    GUIUpdate($txtWindowClass, $SettingWindowClass)
 
    ;Bot Settings
    GUISetCheck($cbAutoRun, $SettingAutoRun)
 
    ;Triggerbot
    GUISetCheck($cbTriggerBot, $SettingTriggerBot)
    GUIUpdate($txtTriggerScanSize, $SettingTriggerScanSize)
    GUIUpdate($txtTriggerAimKey, $SettingTriggerAimKey)
 
    ;Aimbot
    GUISetCheck($cbAimBot, $SettingAimBot)
    GUIUpdate($txtAimShootAreaSize, $SettingAimShootAreaSize)
    GUIUpdate($txtAimBotStepSize, $SettingAimBotStepSize)
    GUIUpdate($txtAimKey, $SettingAimKey)
 
 
    ;Pixel Search settings
    GUIUpdate($txtSearchAreaSize, $SettingSearchAreaSize)
    GUIUpdate($txtShadeVariation, $SettingShadeVariation)
    GUIUpdate($txtMinPureColors, $SettingMinPureColors)
    GUIUpdate($txtMaxShades, $SettingMaxShades)
EndFunc   ;==>UpdateGUI
 
Func SaveColors()
    Local $string = GUICtrlRead($editSearchColors)
    If $string = "" Then Return
    local $temp = StringReplace($string,      @CRLF, " ")
    $temp = StringStripWS($temp, 7)
    Local $SearchColors = StringSplit($temp, " ")
 
    For $ColorIndex = 1 To $SearchColors[0]
        IniWrite($SettingsPath, "Pixel Settings", "Color" & $ColorIndex, $SearchColors[$ColorIndex])
    Next
EndFunc   ;==>SaveColors
 
Func GetColors()
    Local $string = ""
    Local $SearchColors = IniReadSection($SettingsPath, "Pixel Settings")
    If      @error Then Return
 
    Local $TotalColors = $SearchColors[0][0]
 
    If $TotalColors > 0 Then
        ReDim $SettingSearchColors[$TotalColors]
    EndIf
 
    For $ColorIndex = 1 To $TotalColors
        $SettingSearchColors[$ColorIndex - 1] = $SearchColors[$ColorIndex][1]
        $string &= $SettingSearchColors[$ColorIndex - 1] &      @CRLF
    Next
 
    If Not $string = "" Then GUICtrlSetData($editSearchColors, $string)
EndFunc   ;==>GetColors
 
Func SearchColorsToString($SearchColors)
    Local $string = ""
    For $Color In $SearchColors
        $string &= $Color &      @CRLF
    Next
 
    Return $string
EndFunc   ;==>SearchColorsToString
 
Func GUISetCheck($Control, $Flag)
    If $Flag = 0 Then
        GUICtrlSetState($Control, $GUI_UNCHECKED)
    ElseIf $Flag = 1 Then
        GUICtrlSetState($Control, $GUI_CHECKED)
    EndIf
EndFunc   ;==>GUISetCheck
 
Func ConvertFlag($Control)
    If GUICtrlRead($Control) = 4 Or GUICtrlRead($Control) = 68 Then
        Return 0
    Else
        Return 1
    EndIf
EndFunc   ;==>ConvertFlag
 
Func IsChecked($Control)
    Return BitAND(GUICtrlRead($Control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>IsChecked
 
Func GUIUpdate($Control, $Value)
    GUICtrlSetData($Control, $Value)
EndFunc   ;==>GUIUpdate
 
Func ReadINI()
    ;SHOW GUI SETTING
    $SettingDrawDebug = IniRead($SettingsPath, "BotSettings", "DrawDebug", $SettingDrawDebug)
 
    ;Game Handle Name
    $SettingWindowClass = IniRead($SettingsPath, "BotSettings", "WindowClass", $SettingWindowClass)
 
    ;Bot Settings
    $SettingRunning = IniRead($SettingsPath, "BotSettings", "AutoRun", $SettingAutoRun)
    $SettingAutoUpdate = IniRead($SettingsPath, "BotSettings", "AutoUpdate", $SettingAutoUpdate)
 
    ;AIMBOT $ TRIGGERBOT SETTINGS
    $SettingAimMode = IniRead($SettingsPath, "BotSettings", "AimMode", $SettingAimMode)
 
    ;Triggerbot
    $SettingTriggerScanSize = IniRead($SettingsPath, "TriggerbotSettings", "ScanSize", $SettingTriggerScanSize)
    $SettingTriggerBot = IniRead($SettingsPath, "TriggerSettings", "Enabled", $SettingTriggerBot)
    $SettingTriggerAimKey = IniRead($SettingsPath, "TriggerSettings", "Key", $SettingTriggerAimKey)
 
    ;Aimbot
    $SettingAimShootAreaSize = IniRead($SettingsPath, "AimbotSettings", "ShootAreaSize", $SettingAimShootAreaSize)
    $SettingAimBot = IniRead($SettingsPath, "AimbotSettings", "Enabled", $SettingAimBot)
    $SettingAimKey = IniRead($SettingsPath, "AimbotSettings", "Key", $SettingAimKey)
    $SettingAutoShoot = IniRead($SettingsPath, "AimbotSettings", "Shoot", $SettingAutoShoot)
    $SettingAimBotStepSize = IniRead($SettingsPath, "AimbotSettings", "StepSize", $SettingAimBotStepSize)
 
    ;Pixel Search settings
    $SettingSearchAreaSize = IniRead($SettingsPath, "PixelSettings", "SearchAreaSize", $SettingSearchAreaSize)
    $SettingShadeVariation = IniRead($SettingsPath, "PixelSettings", "ShadeVariation ", $SettingShadeVariation)
    $SettingMinPureColors = IniRead($SettingsPath, "PixelSettings", "MinPureColors", $SettingMinPureColors)
    $SettingMaxShades = IniRead($SettingsPath, "PixelSettings", "MaxShades", $SettingMaxShades)
 
    GetColors()
EndFunc   ;==>ReadINI
 
Func SaveINI()
    FileDelete($SettingsPath)
 
    ;Game Handle Name
    IniWrite($SettingsPath, "BotSettings", "WindowClass", GUICtrlRead($txtWindowClass))
 
    ;Bot Settings
    IniWrite($SettingsPath, "BotSettings", "AutoRun", ConvertFlag($cbAutoRun))
    IniWrite($SettingsPath, "BotSettings", "AutoUpdate", ConvertFlag($mAutoUpdate))
    IniWrite($SettingsPath, "BotSettings", "DrawDebug", ConvertFlag($mDrawDebug))
 
    ;Triggerbot
    IniWrite($SettingsPath, "TriggerbotSettings", "ScanSize", GUICtrlRead($txtTriggerScanSize))
    IniWrite($SettingsPath, "TriggerSettings", "Enabled", ConvertFlag($cbTriggerBot))
    IniWrite($SettingsPath, "TriggerSettings", "Key", GUICtrlRead($txtTriggerAimKey))
 
    ;Aimbot
    IniWrite($SettingsPath, "AimbotSettings", "ShootAreaSize", GUICtrlRead($txtAimShootAreaSize))
    IniWrite($SettingsPath, "AimbotSettings", "Enabled", ConvertFlag($cbAimBot))
    IniWrite($SettingsPath, "AimbotSettings", "Key", GUICtrlRead($txtAimKey))
    IniWrite($SettingsPath, "AimbotSettings", "StepSize", GUICtrlRead($txtAimBotStepSize))
 
    ;Pixel Search settings
    IniWrite($SettingsPath, "PixelSettings", "SearchAreaSize", GUICtrlRead($txtSearchAreaSize))
    IniWrite($SettingsPath, "PixelSettings", "ShadeVariation ", GUICtrlRead($txtShadeVariation))
    IniWrite($SettingsPath, "PixelSettings", "MinPureColors", GUICtrlRead($txtMinPureColors))
    IniWrite($SettingsPath, "PixelSettings", "MaxShades", GUICtrlRead($txtMaxShades))
 
    SaveColors()
    Call("ReadINI")
EndFunc   ;==>SaveINI
 
Func GetFriendlyKeyName($Key)
    If $Key = "01" Then Return "Left mouse button"
    If $Key = "02" Then Return "Right mouse button"
    If $Key = "03" Then Return "Control-break processing"
    If $Key = "04" Then Return "Middle mouse button (three-button mouse)"
    If $Key = "05" Then Return "X1 mouse button"
    If $Key = "06" Then Return "X2 mouse button"
    If $Key = "08" Then Return "BACKSPACE key"
    If $Key = "09" Then Return "TAB key"
    If $Key = "0C" Then Return "CLEAR key"
    If $Key = "0D" Then Return "ENTER key"
    If $Key = "10" Then Return "SHIFT key"
    If $Key = "11" Then Return "CTRL key"
    If $Key = "12" Then Return "ALT key"
    If $Key = "13" Then Return "PAUSE key"
    If $Key = "14" Then Return "CAPS LOCK key"
    If $Key = "1B" Then Return "ESC key"
    If $Key = "20" Then Return "SPACEBAR"
    If $Key = "21" Then Return "PAGE UP key"
    If $Key = "22" Then Return "PAGE DOWN key"
    If $Key = "23" Then Return "END key"
    If $Key = "24" Then Return "HOME key"
    If $Key = "25" Then Return "LEFT ARROW key"
    If $Key = "26" Then Return "UP ARROW key"
    If $Key = "27" Then Return "RIGHT ARROW key"
    If $Key = "28" Then Return "DOWN ARROW key"
    If $Key = "29" Then Return "SELECT key"
    If $Key = "2A" Then Return "PRINT key"
    If $Key = "2B" Then Return "EXECUTE key"
    If $Key = "2C" Then Return "PRINT SCREEN key"
    If $Key = "2D" Then Return "INS key"
    If $Key = "2E" Then Return "DEL key"
    If $Key = "30" Then Return "0 key"
    If $Key = "31" Then Return "1 key"
    If $Key = "32" Then Return "2 key"
    If $Key = "33" Then Return "3 key"
    If $Key = "34" Then Return "4 key"
    If $Key = "35" Then Return "5 key"
    If $Key = "36" Then Return "6 key"
    If $Key = "37" Then Return "7 key"
    If $Key = "38" Then Return "8 key"
    If $Key = "39" Then Return "9 key"
    If $Key = "41" Then Return "A key"
    If $Key = "42" Then Return "B key"
    If $Key = "43" Then Return "C key"
    If $Key = "44" Then Return "D key"
    If $Key = "45" Then Return "E key"
    If $Key = "46" Then Return "F key"
    If $Key = "47" Then Return "G key"
    If $Key = "48" Then Return "H key"
    If $Key = "49" Then Return "I key"
    If $Key = "4A" Then Return "J key"
    If $Key = "4B" Then Return "K key"
    If $Key = "4C" Then Return "L key"
    If $Key = "4D" Then Return "M key"
    If $Key = "4E" Then Return "N key"
    If $Key = "4F" Then Return "O key"
    If $Key = "50" Then Return "P key"
    If $Key = "51" Then Return "Q key"
    If $Key = "52" Then Return "R key"
    If $Key = "53" Then Return "S key"
    If $Key = "54" Then Return "T key"
    If $Key = "55" Then Return "U key"
    If $Key = "56" Then Return "V key"
    If $Key = "57" Then Return "W key"
    If $Key = "58" Then Return "X key"
    If $Key = "59" Then Return "Y key"
    If $Key = "5A" Then Return "Z key"
    If $Key = "5B" Then Return "Left Windows key"
    If $Key = "5C" Then Return "Right Windows key"
    If $Key = "60" Then Return "Numeric keypad 0 key"
    If $Key = "61" Then Return "Numeric keypad 1 key"
    If $Key = "62" Then Return "Numeric keypad 2 key"
    If $Key = "63" Then Return "Numeric keypad 3 key"
    If $Key = "64" Then Return "Numeric keypad 4 key"
    If $Key = "65" Then Return "Numeric keypad 5 key"
    If $Key = "66" Then Return "Numeric keypad 6 key"
    If $Key = "67" Then Return "Numeric keypad 7 key"
    If $Key = "68" Then Return "Numeric keypad 8 key"
    If $Key = "69" Then Return "Numeric keypad 9 key"
    If $Key = "6A" Then Return "Multiply key"
    If $Key = "6B" Then Return "Add key"
    If $Key = "6C" Then Return "Separator key"
    If $Key = "6D" Then Return "Subtract key"
    If $Key = "6E" Then Return "Decimal key"
    If $Key = "6F" Then Return "Divide key"
    If $Key = "70" Then Return "F1 key"
    If $Key = "71" Then Return "F2 key"
    If $Key = "72" Then Return "F3 key"
    If $Key = "73" Then Return "F4 key"
    If $Key = "74" Then Return "F5 key"
    If $Key = "75" Then Return "F6 key"
    If $Key = "76" Then Return "F7 key"
    If $Key = "77" Then Return "F8 key"
    If $Key = "78" Then Return "F9 key"
    If $Key = "79" Then Return "F10 key"
    If $Key = "7A" Then Return "F11 key"
    If $Key = "7B" Then Return "F12 key"
    If $Key = "90" Then Return "NUM LOCK key"
    If $Key = "91" Then Return "SCROLL LOCK key"
    If $Key = "A0" Then Return "Left SHIFT key"
    If $Key = "A1" Then Return "Right SHIFT key"
    If $Key = "A2" Then Return "Left CONTROL key"
    If $Key = "A3" Then Return "Right CONTROL key"
    If $Key = "A4" Then Return "Left MENU key"
    If $Key = "A5" Then Return "Right MENU key"
    If $Key = "BA" Then Return ";"
    If $Key = "BB" Then Return "="
    If $Key = "BC" Then Return ","
    If $Key = "BD" Then Return "-"
    If $Key = "BE" Then Return "."
    If $Key = "BF" Then Return "/"
    If $Key = "C0" Then Return "`"
    If $Key = "DB" Then Return "["
    If $Key = "DC" Then Return ""
    If $Key = "DD" Then Return "]"
EndFunc   ;==>GetFriendlyKeyName
 
Func RefreshSettings()
    FFResetColors()
    RemoveDebugGUI()
    ReadINI()
    ;Game Handle
    $WindowHandle = WinGetHandle($SettingWindowClass)
 
    ;Game window size shit
    $Size = WinGetClientSize($WindowHandle)
    If $Size = 0 Then
        MsgBox(16, "Error", "Game is not running, cannot grab resolution!" &      @CRLF & "Exiting...")
        Exit
    EndIf
 
    $X_Ratio = $size[0] / 1920
    $Y_Ratio = $size[1] / 1080
    $MiddleX = $size[0] / 2
    $MiddleY = $size[1] / 2
 
    $SearchAreaSizeX = $SettingSearchAreaSize * $X_Ratio
    $AimShootAreaSizeX = $SettingAimShootAreaSize * $X_Ratio
 
    $SearchAreaSizeY = $SettingSearchAreaSize * $Y_Ratio
    $AimShootAreaSizeY = $SettingAimShootAreaSize * $Y_Ratio
 
    ;Search Area
    $SearchAreaPoints[0] = Round($MiddleX - $SearchAreaSizeX)
    $SearchAreaPoints[1] = Round($MiddleY - $SearchAreaSizeY)
    $SearchAreaPoints[2] = Round($MiddleX + $SearchAreaSizeX)
    $SearchAreaPoints[3] = Round($MiddleY + $SearchAreaSizeY)
 
    $SearchAreaQuads[0][0] = $SearchAreaPoints[0]
    $SearchAreaQuads[0][1] = $SearchAreaPoints[1]
    $SearchAreaQuads[0][2] = $SearchAreaPoints[0] + $SearchAreaSizeX
    $SearchAreaQuads[0][3] = $SearchAreaPoints[1] + $SearchAreaSizeY
    $SearchAreaQuads[0][4] = ($SearchAreaQuads[0][0] + $SearchAreaQuads[0][2]) / 2
    $SearchAreaQuads[0][5] = ($SearchAreaQuads[0][1] + $SearchAreaQuads[0][3]) / 2
    $SearchAreaQuads[0][6] = $SearchAreaQuads[0][2] - $SearchAreaQuads[0][0]
 
    $SearchAreaQuads[1][0] = $SearchAreaPoints[0] + $SearchAreaSizeX
    $SearchAreaQuads[1][1] = $SearchAreaPoints[1]
    $SearchAreaQuads[1][2] = $SearchAreaPoints[0] + $SearchAreaSizeX * 2
    $SearchAreaQuads[1][3] = $SearchAreaPoints[1] + $SearchAreaSizeY
    $SearchAreaQuads[1][4] = ($SearchAreaQuads[1][0] + $SearchAreaQuads[1][2]) / 2
    $SearchAreaQuads[1][5] = ($SearchAreaQuads[1][1] + $SearchAreaQuads[1][3]) / 2
    $SearchAreaQuads[1][6] = $SearchAreaQuads[1][2] - $SearchAreaQuads[1][0]
 
    $SearchAreaQuads[2][0] = $SearchAreaPoints[0]
    $SearchAreaQuads[2][1] = $SearchAreaPoints[1] + $SearchAreaSizeY
    $SearchAreaQuads[2][2] = $SearchAreaPoints[0] + $SearchAreaSizeX
    $SearchAreaQuads[2][3] = $SearchAreaPoints[1] + $SearchAreaSizeY * 2
    $SearchAreaQuads[2][4] = ($SearchAreaQuads[2][0] + $SearchAreaQuads[2][2]) / 2
    $SearchAreaQuads[2][5] = ($SearchAreaQuads[2][1] + $SearchAreaQuads[2][3]) / 2
    $SearchAreaQuads[2][6] = $SearchAreaQuads[2][2] - $SearchAreaQuads[2][0]
 
    $SearchAreaQuads[3][0] = $SearchAreaPoints[0] + $SearchAreaSizeX
    $SearchAreaQuads[3][1] = $SearchAreaPoints[1] + $SearchAreaSizeY
    $SearchAreaQuads[3][2] = $SearchAreaPoints[0] + $SearchAreaSizeX * 2
    $SearchAreaQuads[3][3] = $SearchAreaPoints[1] + $SearchAreaSizeY * 2
    $SearchAreaQuads[3][4] = ($SearchAreaQuads[3][0] + $SearchAreaQuads[3][2]) / 2
    $SearchAreaQuads[3][5] = ($SearchAreaQuads[3][1] + $SearchAreaQuads[3][3]) / 2
    $SearchAreaQuads[3][6] = $SearchAreaQuads[3][2] - $SearchAreaQuads[3][0]
 
    ;Aimbot Area
    $AimShootAreaPoints[0] = Round($MiddleX - $AimShootAreaSizeX)
    $AimShootAreaPoints[1] = Round($MiddleY - $AimShootAreaSizeY)
    $AimShootAreaPoints[2] = Round($MiddleX + $AimShootAreaSizeX)
    $AimShootAreaPoints[3] = Round($MiddleY + $AimShootAreaSizeY)
 
    Local $UnitTable1[$SettingTriggerRadarSize + 1][4]
 
    Local $PI = 3.141592653589793
 
    Local $Rad = $PI / 180
    Local $Offset = 0
    Local $Increment = 360 / $SettingTriggerRadarSize
 
    For $a = 0 To $SettingTriggerRadarSize
        $Angle = $Rad * $Offset;
        $UnitTable1[$a][0] = Round($MiddleX + Cos($Angle) * $SettingTriggerScanSize);
        $UnitTable1[$a][1] = Round($MiddleY + Sin($Angle) * $SettingTriggerScanSize);
        $UnitTable1[$a][2] = $Offset
        $UnitTable1[$a][3] = $Angle;
        $Offset = $Offset + $Increment
    Next
 
    $UnitTable = $UnitTable1
 
    $SettingAutoShoot = $SettingAutoShoot And Not $SettingAimKey = "01"
 
    If $SettingDrawDebug = 1 Then
        DrawDebugGUI()
    EndIf
 
    For $Color In $SettingSearchColors
        $color = _ColorGetRGB($Color)
        If IsArray($color) = 1 Then
            $r = $color[0]
            $g = $color[1]
            $b = $color[2]
            ;ConsoleWrite($r & "," & $g & "," & $b &      @CRLF)
 
            If $r >= $SettingMaxR Then $SettingMaxR = $r
            If $g >= $SettingMaxG Then $SettingMaxG = $g
            If $b >= $SettingMaxB Then $SettingMaxB = $b
;
            If $r <= $SettingMinR Then $SettingMinR = $r
            If $g <= $SettingMinG Then $SettingMinG = $g
            If $b <= $SettingMinB Then $SettingMinB = $b
        EndIf
    Next
 
    FFSetDebugMode(0)
    FFSetWnd($WindowHandle)
    FFAddColor($SettingSearchColors)
EndFunc
 
Func DoUpdate()
    $ini = InetGet($VersionsInfo,      @sCripTDir & "\version.ini") ;download version.ini
    If $ini = 0 Then ;was the download of version.ini successful?
        MsgBox(16, "Fatal Error", "The server seems to be offline. No update will be done.")
    Else
        $NewVersion = IniRead      @sCripTDir & "\version.ini", "Version", "Version", "") ;reads the new version out of version.ini
        If $NewVersion = $OldVersion Then ;compare old and new
            MsgBox(0, "No update", "There is no update available!")
            FileDelete      @sCripTDir & "\version.ini")
        Else
            $msg = MsgBox(68, "Update", "A new version is available: " & $NewVersion & "! Current version: " & $OldVersion &      @CRLF & "Do you want to download the new version?")
            If $msg = 7 Then ;No was pressed
                FileDelete      @sCripTDir & "\version.ini")
            ElseIf $msg = 6 Then ;OK was pressed
                $downloadLink = IniRead      @sCripTDir & "\version.ini", "Version", "download", "NotFound")
                $dlhandle = InetGet($downloadLink,      @sCripTDir & "\Update_" & $NewVersion & ".zip", 1, 1)
                ProgressOn("Update", "Downloading Updates", "", -1, -1, 16) ;creates a progressbar
 
                $size = InetGetSize($downloadLink, 1) ;get the size of the update
                While Not InetGetInfo($dlhandle, 2)
                    $Percent = Round((InetGetInfo($dlhandle, 0) / $size) * 100)
                    ProgressSet($Percent, $Percent & "%") ;update progressbar
                    Sleep(1)
                WEnd
                ProgressSet(100, "Done", "Complete") ;show complete progressbar
                Sleep(500)
                ProgressOff() ;close progress window
                IniWrite("updater.ini", "version", "version", $newVersion)
                InetClose($dlhandle)
                $iniMsg = IniRead      @sCripTDir & "\version.ini", "Version", "message", "Exiting...")
                MsgBox(64, "Success", "Download Complete!" &      @CRLF & "Please restart the bot by extracting the Au3 from Update_" & $NewVersion & ".zip" &      @CRLF & $iniMsg)
                FileDelete      @sCripTDir & "\version.ini")
                Exit
            EndIf
        EndIf
    EndIf
    WinSetTitle($GUITitle, "", $GUITitle & $Version & " - Waiting")
EndFunc   ;==>DoUpdate
Multi hack Code 2

Code:


- - - Updated - - -

C++ Multihack Code 2
Code:
#include <GUIConstants.au3>
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <WinAPI.au3>
#include <Array.au3>

Opt("MouseClickDelay", 0)
Opt('MouseCoordMode', 2)
Opt('PixelCoordMode', 2)
Opt("MouseClickDownDelay", 0)

;MODIFY TO YOUR LIKINGS!!
Global $SettingShootBoundWidth = 45
Global $SettingShootBoundHeight = 150
Global $SettingSearchAreaWidth = 25
Global $SettingSearchAreaHeight = 125
Global $SettingAimMode = False ;False = triggerbot, True = aimbot
Global $SettingsGUI = False ;Show GUI?
Global $SettingHoldClick = False ;Rapid fire = true, Single fire = false
Global $SettingAimBotStepSize = 10 ;Lower the value = slower aimbot, higher equal faster aimbot
;MODIFY TO YOUR LIKINGS!!

;HotKeys
HotKeySet("{HOME}", "Stop")
HotKeySet("{END}", "Pause")
HotKeySet("{INS}", "HoldClickOn")
HotKeySet("{DELETE}", "SwitchAimMode")

;Game Handle
Global $WindowClass = "[CLASS:TankWindowClass]"
Global $WindowHandle = WinGetHandle($WindowClass)

;Settings
Global $SettingTriggerBot = True
Global $SettingRunning = True
Global $SettingShooting = False
Global $IsUserShooting = False

;Pixel Search settings
$SettingSearchAreaSize = 100
Global $SettingSearchColors[13] = [0xF2361B, 0xEF3519, 0xEE4131, 0xED4233, 0xEE4031, 0xCF8790, 0xCF878F, 0xD92411, 0xDC2613, 0xA24D53, 0xA84547, 0xB25C62, 0xAB545B] ;Color to search for, hex!
$SettingShadeVariation = 10
$SettingMinPureColors = 13
$SettingMaxShades = 25

$SettingMaxR = 242
$SettingMaxG = 135
$SettingMaxB = 144
$SettingMinR = 162
$SettingMinG = 36
$SettingMinB = 17

;Game window size
Global $size = WinGetClientSize($WindowHandle)
If $size = 0 Then
 MsgBox(16, "Error", "Game is not running, cannot grab resolution!" &     @CRLF & "Exiting...")
 Exit
EndIf
Global $x_ratio = $size[0] / 1920
Global $y_ratio = $size[1] / 1080
Global $middleX = $size[0]/2
Global $middleY = $size[1]/2

;Search Area
Global $SearchAreaBoundsX = [$middleX - ($SettingSearchAreaWidth* $x_ratio),  $middleX + ($SettingSearchAreaWidth * $x_ratio)]
Global $SearchAreaBoundsY = [$middleY - ($SettingSearchAreaHeight * $y_ratio), $middleY + ($SettingSearchAreaHeight/2 * $y_ratio)]
Global $SearchAreaPoints[4] = [$SearchAreaBoundsX[0],$SearchAreaBoundsY[0],$SearchAreaBoundsX[1],$SearchAreaBoundsY[1]]

;Shoot Area
Global $ShootBoundsX[2] = [$middleX - ($SettingShootBoundWidth * $x_ratio), $middleX + ($SettingShootBoundWidth * $x_ratio)]
Global $ShootBoundsY[2] = [$middleY - ($SettingShootBoundHeight * $y_ratio), $middleY + ($SettingShootBoundHeight/2 * $y_ratio)]
Global $ShootAreaPoints[4] = [$ShootBoundsX[0], $ShootBoundsY[0], $ShootBoundsX[1], $ShootBoundsY[1]]

;Draw GUI
If $SettingsGUI Then
   DrawSearchAreaGUI($SearchAreaPoints, 0x66FF33, "Search")
   DrawSearchAreaGUI($ShootAreaPoints, 0x0000FF, "Shoot")
   $frmBot = GUICreate("Pixel Triggerbot" & "1.0" & " - OFF", 270, 145, 0, 0, -1, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW), 0)
   $lblPixel = GUICtrlCreateLabel("Pixel Found: 0,0" , 4, 0, 280, 24)
   GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
   GUICtrlSetColor(-1, 0x330000)
   $lblStatus = GUICtrlCreateLabel("Status: Running", 4, 20, 240, 17)
   GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
   GUICtrlSetColor(-1, 0x330000)
   $lblMode = GUICtrlCreateLabel("Mode: Single Click", 4, 40, 240, 17)
   GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
   GUICtrlSetColor(-1, 0x330000)
   $lblHelpMsg1 = GUICtrlCreateLabel("Press INSERT to change modes", 4, 60, 240, 17)
   GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
   GUICtrlSetColor(-1, 0xFF0000)
   $lblHelpMsg2 = GUICtrlCreateLabel("Press END to pause", 4, 80, 240, 17)
   GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
   GUICtrlSetColor(-1, 0xFF0000)
   $lblHelpMsg3 = GUICtrlCreateLabel("Press HOME to end", 4, 100, 240, 17)
   GUICtrlSetFont(-1, 10, 600, 0, "Segoe UI")
   GUICtrlSetColor(-1, 0xFF0000)
   GUISetState()
EndIf

;Mainbot
While $SettingRunning
   WinActivate($WindowHandle)
   If $SettingsGUI Then
  If Not $SettingTriggerBot Then
   GUICtrlSetData($lblStatus,"Status: Paused")
  Else
  GUICtrlSetData($lblStatus,"Status: Searching For Pixel")
  EndIf
   EndIf
   TryShoot()
WEnd
Func TryShoot()
   While $SettingTriggerBot
  If  Not IsUserPressing() Then
  ShootGun()
  StopShooting()
  EndIf
   WEnd
EndFunc

;Check if gun can shoot and draws a box around the pixel found
Func CanShootGun($coord)
   If IsArray($coord) = 1 Then
  If $SettingsGUI Then
  DrawFoundCoordArea($coord)
  GUICtrlSetData($lblPixel,"Pixel Found: " & $coord[0] & "," & $coord[1])
  EndIf
  If Not $SettingAimMode Then
  If $coord[0] >= $ShootBoundsX[0] And $coord[0] <= $ShootBoundsX[1] And  $coord[1] >= $ShootBoundsY[0] And $coord[1] <= $ShootBoundsY[1] Then
   Return True
  Else
    Return False
  EndIf
  Else
  MoveMouse($coord[0], $coord[1])
  Return True
  EndIf
   Else
  Return False
   EndIf
EndFunc
Func IsUserPressing()
   Return Not $SettingShooting And _IsPressed("01")
EndFunc
Func StopShooting()
   If $SettingShooting And $SettingHoldClick Then
  MouseUp("left")
  $SettingShooting = False
   EndIf
EndFunc
Func MoveMouse($x, $y)
   Local $MoveToX = ($x - $middleX)
   Local $MoveToY = ($y - $middleY)
   If $MoveToX Then
  If Abs($MoveToX) < $SettingAimBotStepSize Then
   $iMoving = $MoveToX
  Else
   $iMoving = $SettingAimBotStepSize
   If ($MoveToX) < 0 Then $iMoving *= -1
  EndIf
  _MouseMovePlus($iMoving, 0)
   EndIf

   If $MoveToY Then
  If Abs($MoveToY) < $SettingAimBotStepSize Then
   $iMoving = $MoveToY
  Else
   $iMoving = $SettingAimBotStepSize
   If ($MoveToY) < 0 Then $iMoving *= -1
  EndIf
  _MouseMovePlus(0, $iMoving)
   EndIf
EndFunc
Func _MouseMovePlus($x, $y)
    DllCall("user32.dll", _
   "none", _
   "mouse_event", _
            "long",  1 , _
            "long",  $x, _
            "long",  $y, _
            "long",  0, _
   "long",  0)
  EndFunc
Func _MouseClickFast2($x = 0, $y = 0, $User32 = "User32.dll")
    DllCall($User32, "none", "mouse_event", "long", 2, "long", $x, "long", $y, "long", 0, "long", 0) ; 32770 0x8002 BitOR($MOUSEEVENTF_ABSOLUTE, $MOUSEEVENTF_LEFTDOWN)
    DllCall($User32, "none", "mouse_event", "long", 4, "long", $x, "long", $y, "long", 0, "long", 0) ; 32772 0x8004 BitOR($MOUSEEVENTF_ABSOLUTE, $MOUSEEVENTF_LEFTUP)
EndFunc

Func ShootGun()
   While CanShootGun(SearchPixel())
  If $SettingHoldClick Then
  $SettingShooting = true
  MouseDown("left")
  Else
  _MouseClickFast2("left")
  EndIf
   WEnd
EndFunc

Func SearchPixel()
   Return PixelSearch($SearchAreaPoints[0], $SearchAreaPoints[1],$SearchAreaPoints[2], $SearchAreaPoints[3], $searchColor,15)
EndFunc
Func DrawSearchAreaGUI($Points, $Color, $comment = "")
   Local $DrawAreaWidth = $Points[2] - $Points[0]
   Local $DrawAreaHeight = $Points[3] - $Points[1]
   Local $AreaGUI = GUICreate("", $DrawAreaWidth + 2, $DrawAreaHeight + 2, $Points[0], $Points[1], $WS_POPUP, BitOR($WS_EX_LAYERED, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)))
   GUISetBkColor(0xABCDEF)
   _WinAPI_SetLayeredWindowAttributes($AreaGUI, 0xABCDEF, 0xA0)
   WinSetOnTop($AreaGUI, "", 1)
   GUISetState()
   $hDC = _WinAPI_GetWindowDC($AreaGUI)
   $hPen = _WinAPI_CreatePen($PS_SOLID, 2, $Color)
   $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
   _WinAPI_DrawLine($hDC, 0, 1, $DrawAreaWidth, 0)
   _WinAPI_DrawLine($hDC, 1, 0, 0, $DrawAreaHeight)
   _WinAPI_DrawLine($hDC, $DrawAreaWidth, $DrawAreaHeight, $DrawAreaWidth, 0)
   _WinAPI_DrawLine($hDC, $DrawAreaWidth, $DrawAreaHeight, 0, $DrawAreaHeight)
   _WinAPI_SetTextColor($hDC, 0x000000)
   _WinAPI_SetBkMode($hDC, $TRANSPARENT)
   $tRECT = DllStructCreate($tagRect)
   DllStructSetData($tRECT, "Left", 5)
   DllStructSetData($tRECT, "Top", 5)
   DllStructSetData($tRECT, "Right", 250)
   DllStructSetData($tRECT, "Bottom", 50)
   _WinAPI_DrawText($hDC, $comment, $tRECT, 0)
EndFunc   ;==>DrawArea

Func DrawFoundCoordArea($FoundCoord)
   Local $hDC, $hPen, $o_Orig
   Local $FoundAreaPoints[4] = [$FoundCoord[0] - 5, $FoundCoord[1] - 5, $FoundCoord[0] + 5, $FoundCoord[1] + 5]
   Local $FoundAreaWidth = $FoundAreaPoints[2] - $FoundAreaPoints[0]
   Local $FoundAreaHeight = $FoundAreaPoints[3] - $FoundAreaPoints[1]
   Local $FoundTopLine[4] = [$FoundAreaPoints[0], $FoundAreaPoints[1], $FoundAreaPoints[0] + $FoundAreaWidth, $FoundAreaPoints[1]]
   Local $FoundBottomLine[4] = [$FoundAreaPoints[0], $FoundAreaPoints[1], $FoundAreaPoints[0], $FoundAreaPoints[1] + $FoundAreaHeight]
   Local $FoundLeftLine[4] = [$FoundAreaPoints[0] + $FoundAreaWidth, $FoundAreaPoints[1], $FoundAreaPoints[0] + $FoundAreaWidth, $FoundAreaPoints[1] + $FoundAreaHeight]
   Local $FoundRightLine[4] = [$FoundAreaPoints[0], $FoundAreaPoints[1] + $FoundAreaHeight, $FoundAreaPoints[0] + $FoundAreaWidth, $FoundAreaPoints[1] + $FoundAreaHeight]
   $hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop)
   $hPen = _WinAPI_CreatePen($PS_SOLID, 2, 0xFF0000)
   $o_Orig = _WinAPI_SelectObject($hDC, $hPen)
   _WinAPI_DrawLine($hDC, $FoundTopLine[0], $FoundTopLine[1], $FoundTopLine[2], $FoundTopLine[3])
   _WinAPI_DrawLine($hDC, $FoundLeftLine[0], $FoundLeftLine[1], $FoundLeftLine[2], $FoundLeftLine[3])
   _WinAPI_DrawLine($hDC, $FoundRightLine[0], $FoundRightLine[1], $FoundRightLine[2], $FoundRightLine[3])
   _WinAPI_DrawLine($hDC, $FoundBottomLine[0], $FoundBottomLine[1], $FoundBottomLine[2], $FoundBottomLine[3])
   ; refresh desktop (clear cross)
   _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
   ; clear resources
   _WinAPI_SelectObject($hDC, $o_Orig)
   _WinAPI_DeleteObject($hPen)
   _WinAPI_ReleaseDC(0, $hDC)
EndFunc
;hotkey functions

Func Pause()
   $SettingTriggerBot = Not $SettingTriggerBot
EndFunc
Func SwitchAimMode()
   $SettingAimMode = Not $SettingAimMode
   If $SettingAimMode Then
  $SearchColor = 0xFF0000
   Else
  $SearchColor = 0xEB1D2F
   EndIf
EndFunc
Func HoldClickOn()
   StopShooting()
   $SettingHoldClick = Not $SettingHoldClick
   If $SettingHoldClick Then
  If $SettingsGUI Then
  GUICtrlSetData($lblMode,"Mode: Rapid Fire")
  EndIf
   Else
  If $SettingsGUI Then
  GUICtrlSetData($lblMode,"Mode: Single Fire")
  EndIf
   EndIf
EndFunc
Func Stop()
   Exit
EndFunc


- - - Updated - - -

Performance Statistics Hotkey
Code:
Hotkey, IfWinActive, Overwatch ahk_exe Overwatch.exe
Hotkey, Media_Play_Pause, Overwatch
Return
 
Overwatch:
Send {Ctrl Down}{Shift Down}{R Down}{Ctrl Up}{Shift Up}{R Up}
Return


- - - Updated - - -

DW TriggerBot
Code:
Firing := 0
 
 
Gui, Add, CheckBox, x12 y220 w150 h40 gTrigerSub vtrigger, Trigger Bot
Gui, Show
 
TrigerSub:
GuiControlGet, trigger
if trigger
	loop
	{
		GuiControlGet, trigger
		ImageSearch, , , 960, 0, 960, 540, *100 1.png
		If !Errorlevel
			Loop
			{
				ImageSearch, , , 960, 541, 960, 1080, *100 1.png
				If !Errorlevel
				{
					gosub, Fire_on
				}
				else
				{
					gosub, Fire_off
					break
				}
			}
		if !trigger
			break
	}
return
 
Fire_on:
if !Firing
{
	Send, {LButton Down}
	Firing := 1
}
return
 
Fire_off:
if Firing
{
	Send, {LButton Up}
	Firing := 0
}
return
 
GuiClose:
ExitApp
return


- - - Updated - - -

Other Triggerbot version
Code:
loop
{
ImageSearch, , , 960, 0, 960, 540, *100 1.png
If Errorlevel = 0
ImageSearch, , , 960, 541, 960, 1080, *100 1.png
If Errorlevel = 0
mouseclick, left
 
}
return


- - - Updated - - -

Decent Triggerbot
Code:
Gui, Add, CheckBox, x12 y220 w150 h40 gTrigerSub vtrigger, Trigger Bot
Gui, Show
 
TrigerSub:
i := 0
GuiControlGet, trigger
if trigger
	loop
	{
		ToolTip, % ++i
		GuiControlGet, trigger
#3 · 9y ago
overdose_stinkyjoint
overdose_stinkyjoint
thanks for the tag,

you may as well remove

First Pixelbot, Modified Pixelbot,C++ Multihack Code 1, C++ Multihack Code 2

they dont work

also you havent posted the full code for your last trigger bot
#4 · edited 9y ago · 9y ago
Jov
[MPGH]Jov
Quote Originally Posted by overdose_stinkyjoint View Post
thanks for the tag,

you may as well remove

First Pixelbot, Modified Pixelbot,C++ Multihack Code 1, C++ Multihack Code 2

they dont work

also you havent posted the full code for your last trigger bot
Ima just leave it to let someone mess with it u kno


- - - Updated - - -

thanks do /tooshort
#5 · 9y ago
overdose_stinkyjoint
overdose_stinkyjoint
do you have the full code for the last trigger bot you posted?

or is it just an edition for the one posted above it?

as it only has a call sub fuction
#6 · 9y ago
Jov
[MPGH]Jov
Quote Originally Posted by overdose_stinkyjoint View Post
do you have the full code for the last trigger bot you posted?

or is it just an edition for the one posted above it?

as it only has a call sub fuction
Yea, im gonna have to update it i think its cus i reached code limit
#7 · 9y ago
Jov
[MPGH]Jov
RapidJS Aimbot
Code:
"use strict";

var robot = require("robot-js");
var mouse = robot.Mouse();
var keyboard = robot.Keyboard();

mouse.autoDelay.min = 1;
mouse.autoDelay.max = 1;
var img = robot.Image();
var targetColor = [0xF2361B,0xEF3519,0xEE4131,0xED4233,0xEE4031,0xCF8790,0xCF878F,0xD92411,0xDC2613,0xA24D53,0xA84547,0xB25C62,0xAB545B];
var pixelColor = robo*****lor();
var i = 0;
var k = 0;
var data,r2,g2,b2,r1,g1,b1,s;


if (robot.Screen.synchronize()) {
	robot.Screen.setCompositing (false);
	robot.Screen.grabScreen(img);
}

var w = img.getWidth()/2;
var h = img.getHeight()/2;
var searchSize = .97;
var step = 3;

console.log("Only single monitor is supported. Please run CMD as administrator (prevents Overwatch from seeing CMD's actions). Change SearchSize and Step to your liking, SearchSize should be between .90 and .99, the bigger SearchSize is, the smaller the search box. Step is how many pixels to skip, will result in a faster scan but slower response. Center is: " + w + ", " + h);

while(1)
{
	s = robot.Mouse.getState();
	if(s[robot.BUTTON_X2])
		bang();
}

function bang()
{
	robot.Screen.grabScreen(img, Math****und(searchSize * w), Math****und(searchSize * h), Math****und((1-searchSize) * w), Math****und((1-searchSize) * h));
	data = img.getData();

	for(i = 0; i < img.getLength(); i+=step)
	{
		if(similar((data[i] & 0x00FFFFFF).toString(16).toUpperCase(),15) )
		{
			keyboard.click(robot.KEY_N);
			return;
		}
	}
	return;
}

function similar (aneighbor, atolerance)
{

	if(atolerance == undefined) 
	{
        atolerance = 10;
    }

	r2 = parseInt(aneighbor.substr(0,2), 16);
	g2 = parseInt(aneighbor.substr(2,2), 16);
	b2 = parseInt(aneighbor.substr(4,2), 16);

	for(k = 0; k < targetColor.length; k++)
	{

		r1 = parseInt(targetColor[k].toString(16).toUpperCase().substr(0,2), 16);
		g1 = parseInt(targetColor[k].toString(16).toUpperCase().substr(2,2), 16);
		b1 = parseInt(targetColor[k].toString(16).toUpperCase().substr(4,2), 16);
		if (Math.abs(r1 - r2) <= atolerance && Math.abs(g1 - g2) <= atolerance && Math.abs(b1 - b2) <= atolerance)
		{
			//console.log(r2 + " " + b2 + " " + g2 + " " + r1 + " " + b1 + " " + g1);
			return true;
		}
	}
	return false;
#8 · 9y ago
LE
Legendeee
The "decent triggerbot" code its not complete
#9 · 9y ago
SA
Sarone
how to use it ?
#10 · 9y ago
BL
blr69
Anyone got source code for nametag search
#11 · 9y ago
Posts 1–11 of 11 · Page 1 of 1

Post a Reply

Similar Threads

  • HALO 2 (XBOX) Source CodeBy mirelesmichael in General Game Hacking
    12Last post 20y ago
  • [Release] WarHax DLL Source CodeBy OneWhoSighs in WarRock - International Hacks
    20Last post 18y ago
  • keylogger source codeBy obsedianpk in WarRock - International Hacks
    8Last post 18y ago
  • [TUT] arnold's hack v1.1 vb6 source codeBy arnold in WarRock - International Hacks
    6Last post 18y ago
  • Stamina Hack and source code ?By Teh Sasuke in C++/C Programming
    0Last post 18y ago

Tags for this Thread

None