-
-
Save Sniffx/ee5ae43d42894a6499c24b66586cc10c to your computer and use it in GitHub Desktop.
afk fishing macro for destiny 2. You will need to install the Gdip_all library which you can find here: https://www.autohotkey.com/boards/viewtopic.php?t=6517 and the virtual controller from here: https://github.com/A2TC-YT/Tabbed-Out-AFK
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;afk fishing macro for destiny 2. You will need to install the Gdip_all library which you can find here: https://www.autohotkey.com/boards/viewtopic.php?t=6517 | |
;The virtual controller from the instructions here: https://github.com/A2TC-YT/Tabbed-Out-AFK | |
;F5 Starts the script | |
;F6 Stops the script | |
;F8 Completely exits the script | |
;Destiny 2 "Window Mode" must be set to "Windowed" | |
;Destiny 2 "Resolution" must be set to "1280x720" | |
;You can put Destiny 2 window anywhere but it must be visible. It must not be covered by any other window (at least not the center of the window where we check for fish). | |
;You can do anything else while you fish, like use the browser. | |
#SingleInstance, Force ;Only 1 "auto_fishing.ahk" can run at the same time | |
#Persistent | |
#include <AHK-ViGEm-Bus> ;Needed for PS4 controller support | |
#Include %A_ScriptDir%\Gdip_all.ahk ;Needed for image comparation support | |
SendMode Input | |
SetWorkingDir, %A_ScriptDir% | |
CoordMode, ToolTip, Screen ;for tooltip position | |
controller := new ViGEmDS4() ;Create a new virtual PS4 controller | |
pToken := Gdip_Startup() ;Initialize capture image zone script (Gdip_all.ahk) | |
F5:: ;Start fishing when pressing F5 | |
{ | |
WinGetPos, xWindowPos, yWindowPos, wWindowWidth, hWindowHeight, ahk_exe destiny2.exe ;Get the position and size of "Destiny 2" | |
xOriginalWindowPos:=6 | |
yOriginalWindowPos:=1400 | |
xOriginalCaptureZone:=638 | |
yOriginalCaptureZone:=1924 | |
xCaptureZone:= xOriginalCaptureZone + xWindowPos - xOriginalWindowPos | |
yCaptureZone:= yOriginalCaptureZone + yWindowPos - yOriginalWindowPos | |
coords:= xCaptureZone "|" yCaptureZone "|24|12" ;Coordinates and size of the image we will use to check if we must cast or recover the fishing line. | |
width := 24 | |
height := 13 | |
threshold := 0.03 ; We look for White stuff to determine if we can cast or recover the fishing line like the words "Go fishing" or "Perfect catch" | |
; a higher threshold like 0.12 helps with false positives like identifying the white "vex milk" as the white words. | |
; a lower threshold like 0.03 is useful in Nexus | |
Gosub, CheckCapsState ; If keyboard "Capslock" is enabled, disable it. Don't know why but when it is enabled AHK scripts behave weird in Destiny 2 | |
controller.Buttons.Square.SetState(true) ;Initial fishing cast using the virtual gamepad. Equivalent to pressing the button "E" on the keyboard. | |
Sleep, 800 ; DO NOT CHANGE | |
controller.Buttons.Square.SetState(false) ;We release the button. Equivalent to stop touching the "E" key on the keyboard. | |
Sleep, 250 | |
StartTime := A_TickCount ;measures how much time it takes to do 1 loop ;Time every loop | |
timeloop:=A_TickCount ;measures how much time it takes to do 1 loop ;Time every loop | |
Loop, | |
{ | |
ElapsedSeconds := round((A_TickCount - StartTime) / 1000) ;measures how much time it takes to do 1 loop ;Time every loop | |
ElapsedMinutes := round(elapsedseconds /60) ;measures how much time it takes to do 1 loop ;Time every loop | |
ElapsedTime := FormatSeconds(ElapsedSeconds) ;measures how much time it takes to do 1 loop ;Time every loop | |
ElapsedTime2 := FormatSeconds2(ElapsedSeconds) ;measures how much time it takes to do 1 loop ;Time every loop | |
xToolTipPos:= xWindowPos + 16 | |
yToolTipPos:= yWindowPos + hWindowHeight -42 | |
ToolTip, Enabled: %ElapsedTime% - Loop: %A_Index% , xToolTipPos, yToolTipPos ;Tooltip at the botton-left of the Destiny 2 window where it shows the script is active and during how much time. | |
loop, | |
{ | |
pBitmap := Gdip_BitmapFromScreen(coords) ;Capture a region of the screen | |
pWhite := simpleColorCheck(pBitmap, width, height) ;Check for White on that captured region | |
Gdip_DisposeImage(pBitmap) ;release the memory used for the captured region | |
if (pWhite >= threshold) ;Check if we found enough whiteness | |
Break ;YES! We found whiteness so we interrupt this loop to cast or recover the fishing line | |
} | |
controller.Buttons.Square.SetState(true) ;Cast or recover the fishing line | |
Sleep, 800 | |
controller.Buttons.Square.SetState(false) ;Cast or recover the fishing line | |
ElapsedMS := A_TickCount - timeloop ;Time every loop | |
timeloop := A_TickCount ;Time every loop | |
if (Mod(A_Index,5)=0 ){ ;ANTI AFK stuff. Every few iterations we slightly move left or right to avoid being kicked AND getting fish nearby us. There is a limit of fish on the ground. | |
sleep, 2500 ;That limit is around 60? If more fish is on the ground, old fish gets despawned . | |
controller.Buttons.Square.SetState(true) ;Slightly press a virtual controller button so the game recognized there is controller connected. | |
Sleep, 100 | |
controller.Buttons.Square.SetState(false) ;Release slightly pressed button | |
sleep, 150 ;Note: If we don't do this, Destiny 2 doesnt recognize the below lines that we use to move left or right. Super weird OoO | |
controller.Axes.LX.SetState(100) ; Slightly move left | |
sleep 100 | |
controller.Axes.LX.SetState(50) ; Stop moving | |
sleep 150 | |
controller.Axes.LX.SetState(0) ; Slightly move Right | |
sleep 100 | |
controller.Axes.LX.SetState(50) ; Stop moving | |
} | |
} | |
} | |
Return | |
simpleColorCheck(pBitmap, w, h) ;Function to check for white stuff | |
{ | |
x := 0 | |
y := 0 | |
white := 0 | |
total := 0 | |
loop %h% | |
{ | |
loop %w% | |
{ | |
color := (Gdip_GetPixel(pBitmap, x, y) & 0x00F0F0F0) | |
if (color == 0xF0F0F0) | |
white += 1 | |
total += 1 | |
x+= 1 | |
} | |
x := 0 | |
y += 1 | |
} | |
pWhite := white/total | |
return pWhite | |
} | |
F6::Reload ;Stop fishing when pressing F6 | |
F8::ExitApp ;Stop fishing AND exit "auto_fishing.ahk" | |
;================================================== | |
;Helper Functions | |
CheckCapsState: | |
bCapsLockState := GetKeyState("Capslock", "T") ; 1 if CapsLock is ON, 0 otherwise. | |
IF (bCapsLockState== 1) { | |
SetCapsLockState OFF | |
sleep, 500 | |
send, {Esc} | |
sleep 500 | |
} | |
return | |
;================================================== | |
RemoveToolTip: | |
ToolTip | |
return | |
;================================================== | |
;================================================== | |
CreateToolTip(sMsg,delay:=0,xCoord:=1,yCoord:=720){ | |
Tooltip, %sMsg%, xCoord,yCoord | |
SetTimer, RemoveToolTip, -1500 | |
sleep, %delay% | |
} | |
;================================================== | |
FormatSeconds(NumberOfSeconds) ; Convert the specified number of seconds to hh:mm:ss format. | |
{ | |
time = 19990101 ; *Midnight* of an arbitrary date. | |
time += %NumberOfSeconds%, seconds | |
FormatTime, mmss, %time%, mm:ss | |
return NumberOfSeconds//3600 ":" mmss ; This method is used to support more than 24 hours worth of sections. | |
} | |
;================================================== | |
FormatSeconds2(NumberOfSeconds) ; Convert the specified number of seconds to hh:mm:ss format. | |
{ | |
time = 19990101 ; *Midnight* of an arbitrary date. | |
time += %NumberOfSeconds%, seconds | |
FormatTime, mmss, %time%, mm | |
return NumberOfSeconds//3600 "h" mmss ; This method is used to support more than 24 hours worth of sections. | |
} | |
;================================================== | |
CommaAdd(num) | |
{ | |
VarSetCapacity(fNum,32) | |
DllCall("GetNumberFormat",UInt,0x0409,UInt,0,Str,Num,UInt,0,Str,fNum,Int,32) | |
return SubStr(fNum,1,StrLen(fNum) - 3) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
#MaxThreadsPerHotKey, 2
Toggle := 0
F1::
Toggle := !Toggle
While (Toggle) {
}