zoukankan      html  css  js  c++  java
  • Trove自动钓鱼脚本(国际服

    #WinActivateForce
    ; Script config. Do NOT change value here, might working inproperly!
    global Version := "v20200909"    ; The version number of this script
    global FishAddress := "0xF1ABCC"    ; The memory address for fishing
    
    ; Tooltip settings
    global TooltipX := 80    ; Tooltip's X position
    global TooltipY := 150    ; Tooltip's Y position
    
    ; Hotkeys settings, change the hotkeys here
    global HK_AutoFish := "F11"    ; Hotkey for auto fishing
    global HK_AutoBoot := "F10"    ; Hotkey for auto boot throw
    global HK_AntiAFK := "F9"    ; Hotkey for anti-AFK
    global HK_Info := "F8"    ; Hotkey for info tooltip toggle
    global HK_Exit := "F6"    ; Hotkey for exit the script
    
    ; Auto Boot Throw settings
    global Interval_Boot := 2000    ; Auto Throw Boot trigger interval in milliseconds.  The default is 2000ms.  Set longer interval to save CPU usage.  Set shorter interval to throw boot faster.
    global worddir = A_WorkingDir
    global BootImgPath := worddir . "oot.bmp"    ; set your Old Boot image path here
    global ABootImgPath := worddir . "Aboot.bmp"    ; set your Ancient Boot image path here
    global TraserImgPath := worddir . "	raser.bmp"    ; set your Traser image path here
    global ClickImgPath := worddir . "click.bmp" ; set your Traser image path here
    global FastABTDelay := 0.5    ; Long press delay before triggering Fast ABT.  The default is 0.5 seconds
    
    
    ; Anti-AFK settings
    global Interval_AFK := 10000    ; Anti-AFK trigger interval in milliseconds.  The default is 10 seconds (10000ms)
    global AFK_Key := "End"    ; The key to send to prevent AFK by Anti-AFK.  The default is "End" key which will not effect Trove gameplay
    
    ; Flags startup settings. Do NOT change value here, might working inproperly!
    global Flag_ABT := false    ; Auto boot throw default setting, 1 is on, 0 is off
    global Flag_AFK := false    ; Anti-AFK default setting, 1 is on, 0 is off
    global Flag_Tooltip := true    ; 1 for showing tooltip, 0 for hiding tooltip
    global Flag_Fishing := false    ; If auto fishing started, set to 1
    
    ; Fishing info settings. Do NOT change value here, might working inproperly!
    global TimerS := 0    ; Fishing timer seconds
    global TimerM := 0    ; Fishing timer minutes
    global TimerH := 0    ; Fishing timer hours
    global LureCount := 0    ; Used lure count
    
    CoordMode, ToolTip, Screen
    UpdateTooltip()
    
    Hotkey, %HK_AutoFish%, L_AutoFish
    Hotkey, %HK_AutoBoot%, L_AutoBoot
    Hotkey, %HK_AntiAFK%, L_AntiAFK
    Hotkey, %HK_Info%, L_Info
    Hotkey, %HK_Exit%, L_Exit
    Return
    
    L_AutoFish:    ; Auto Fishing
        if (Flag_Fishing) {
            Flag_Fishing := false
            TimerS := 0
            TimerM := 0
            TimerH := 0
            LureCount := 0
            ; Stop fishing timer
            SetTimer, UpdateTimer, Off
            UpdateTooltip()
        } else {
            Flag_Fishing := true
            SetTimer, AutoFish, -1
            ; Start fishing timer
            SetTimer, UpdateTimer, 1000
        }
    Return
    
    AutoFish:
        WinGet, pidn, PID, A
        pid := pidn
        WinGet, hwnds, ID, A
        Handle := hwnds
    
        Lure := 9999    ; Set max lure
        Base := getProcessBaseAddress()
        WaterAddress := GetAddressWater(Base,FishAddress)    ; Water memory address
        LavaAddress := GetAddressLava(Base,FishAddress)        ; Lava memory address
        ChocoAddress := GetAddressChoco(Base,FishAddress)    ; Choco memory address
        PlasmaAddress := GetAddressPlasma(Base,FishAddress) ; Plasma memory address
    
        Loop %Lure% {
        ; If still have lure (by counting)
            if (!Flag_Fishing)
                break
    
            NatualPress("b", pid)    ; Open backpack to prevent camera rotate while moving mouse, and also for ImageSearch to find the Old Boot
    
            LureCount := LureCount +1
            UpdateTooltip()
    
            ; Anti-AFK
            Gosub, AntiAFK
    
            NatualPress("f", pid)    ; Casting the line
            Sleep, 15000    ; Check for bite after 15 seconds.  Players must wait for 20-30 seconds for the lure to start splashing in order to reel in a fish. Reduce the pole checking loop.
            FishingTimeCount := 0
            
            Loop {
            ; Line casted and pole checking loop, 1 second per check
                if (!Flag_Fishing)
                    break
    
                UpdateTooltip()
                
                ; Already cast and checking for biting
                CaughtWater := ReadMemory(WaterAddress)
                CaughtLava := ReadMemory(LavaAddress)
                CaughtChoco := ReadMemory(ChocoAddress)
                CaughtPlasma := ReadMemory(PlasmaAddress)
    
                if (CaughtWater || CaughtLava || CaughtChoco || CaughtPlasma) {
                ; Fish caught, reel in
                    NatualPress("f", pid)
                    Random, Wait, 2000, 3500 ; Wait a few seconds
                    Sleep, %Wait%
                    NatualPress("b", pid)
                    break
                }
                
                ; caught nothing, wait 1 second and continue checking
                Sleep, 1000
                
                if (FishingTimeCount++ > 20) {    ; If waiting time is over 35 seconds, it must be a miss or something wrong.  Re-cast.
                    NatualPress("b", pid)
                    break
                }
                    
            }
        }
    Return
    
    L_AutoBoot:    ; Toggle auto boot throw
        KeyWait, %HK_AutoBoot%, T%FastABTDelay%    ;Detect how long HK_AutoBoot has been pressed. Set 0.5 second
        if (errorlevel) {
            loop {
                UpdateTooltip()
                if (!GetKeyState(HK_AutoBoot, "P"))
                    Break
                Gosub, AutoBootThrow
                Random, Wait, 10, 50 ; Wait a few milliseconds
                Sleep, %Wait%
            }
        } else {
            if (Flag_ABT) {
                Flag_ABT := false
                UpdateTooltip()
                SetTimer, AutoBootThrow, Off
            } else {
                Flag_ABT := true
                UpdateTooltip()
                Gosub, AutoBootThrow
                SetTimer, AutoBootThrow, %Interval_Boot%
            }
        }
    Return
    
    L_AntiAFK:    ; Anti-AFK
        if (Flag_AFK) {
            SetTimer, AntiAFK, Off
            Flag_AFK := false
        } else {
            WinGet, pidn, PID, A
            pid := pidn
    
            SetTimer, AntiAFK, %Interval_AFK%
            Flag_AFK := true
        }
        UpdateTooltip()
    Return
    
    L_Info:    ; Toggle tooltip
        if (Flag_Tooltip) {
            Flag_Tooltip := false
            ToolTip
        } else {
            Flag_Tooltip := true
            UpdateTooltip()
        }
    Return
    
    L_Exit:    ; Stop the script
    ExitApp
    
    AutoBootThrow:
        Imagesearch, OBFoundX, OBFoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *70 %BootImgPath%
        if (errorlevel = 0) {
            if (GetKeyState(HK_AutoBoot, "P")) {
                DragSpeed = 2    ; Fast ABT
            } else {
                Random, DragSpeed, 4, 10    ; Throw naturally
            }
            Imagesearch, TFoundX,TFoundY,0,0, A_ScreenWidth, A_ScreenHeight, *70 %TraserImgPath%
            MouseClickDrag, Left, %OBFoundX%, %OBFoundY%, %TFoundX%, %TFoundY% ,%DragSpeed%
            sleep , 500
            Imagesearch, CFoundX,CFoundY,0,0, A_ScreenWidth, A_ScreenHeight, *70 %ClickImgPath%
            Random, DragSpeed, 4, 10
            MouseClick, Left, CFoundX, CFoundY, 1, DragSpeed
        }
        Imagesearch, ABFoundX, ABFoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *70 %ABootImgPath%
        if (errorlevel = 0) {
            if (GetKeyState(HK_AutoBoot, "P")) {
                DragSpeed = 2    ; Fast ABT
            } else {
                Random, DragSpeed, 4, 10    ; Throw naturally
            }
            Imagesearch, TFoundX,TFoundY,0,0, A_ScreenWidth, A_ScreenHeight, *70 %TraserImgPath%
            MouseClickDrag, Left, %ABFoundX%, %ABFoundY%, %TFoundX%, %TFoundY% ,%DragSpeed%
            sleep , 500
            Imagesearch, CFoundX,CFoundY,0,0, A_ScreenWidth, A_ScreenHeight, *70 %ClickImgPath%
            Random, DragSpeed, 4, 10
            MouseClick, Left, CFoundX, CFoundY, 1, DragSpeed
        }
    Return
    
    AntiAFK:
    ; Sending key to prevent AFK
        NatualPress(AFK_Key, pid)
    Return
    
    UpdateTimer:
        if (TimerS = 59) { 
            TimerS = 0 
            TimerM += 1
        }
        if (TimerM = 60) { 
            TimerM = 0 
            TimerH += 1 
            UpdateTooltip()
            Return
        }
        TimerS += 1
        UpdateTooltip()
    Return
    
    GetAddressWater(Base, Address) {
        pointerBase := Base + Address
        y1 := ReadMemory(pointerBase)
        y2 := ReadMemory(y1 + 0x68)
        y3 := ReadMemory(y2 + 0xe4)
        Return WaterAddress := (y3 + 0x3c4)  ;1
    }
    
    GetAddressLava(Base, Address) {
        pointerBase := Base + Address
        y1 := ReadMemory(pointerBase)
        y2 := ReadMemory(y1 + 0x68)
        y3 := ReadMemory(y2 + 0xe4)
        Return LavaAddress := (y3 + 0x898) ;3
    }
    
    GetAddressChoco(Base, Address) {
        pointerBase := Base + Address
        y1 := ReadMemory(pointerBase)
        y2 := ReadMemory(y1 + 0x68)
        y3 := ReadMemory(y2 + 0xe4)
        Return ChocoAddress := (y3 + 0x62c) ;2
    }
    
    GetAddressPlasma(Base, Address){
        pointerBase := Base + Address
        y1 := ReadMemory(pointerBase)
        y2 := ReadMemory(y1 + 0x68)
        y3 := ReadMemory(y2 + 0xe4)
        Return PlasmaAddress := (y3 + 0xb00) ;4
    }
    
    getProcessBaseAddress() {
        global Handle
        return DllCall( A_PtrSize = 4
            ? "GetWindowLong"
            : "GetWindowLongPtr"
            , "Ptr", Handle
            , "Int", -6
            , "Int64") ; Use Int64 to prevent negative overflow when AHK is 32 bit and target process is 64bit
        ; if DLL call fails, returned value will = 0
    } 
    
    ReadMemory(MADDRESS) {
        global pid
        VarSetCapacity(MVALUE,4,0)
        ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", pid, "UInt")
        ;DllCall("ReadProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Str", MVALUE, "UInt", 4, "UInt *", 0)
        DllCall("ReadProcessMemory", "UInt", ProcessHandle, "Ptr", MADDRESS, "Ptr", &MVALUE, "Uint", 4)
        Loop 4
        result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)
        return, result
    }
    
    NatualSleep() {
        Random, SleepTime, 66, 122
        Sleep, %SleepTime%
    }
    
    NatualPress(npbtn, nppid) {
        ControlSend, , {%npbtn% down}, ahk_pid %nppid%
        NatualSleep()
        ControlSend, , {%npbtn% up}, ahk_pid %nppid%
        NatualSleep()
    }
    
    UpdateTooltip() {
        if (!Flag_Tooltip) {
            return
        }
    
        Info_Tips := "`n[" . HK_Info . "] Toggle this info."
        Info_Exit := "`n[" . HK_Exit . "] Exit script."
        Info_Lure := "`nLure used - " . (LureCount - 1)
    
        if (!Flag_Fishing) {
            Info_Fish := "`n[" . HK_AutoFish . "] Auto Fishing is OFF."
        } else if (Flag_Fishing) {
            Info_Fish := "`n[" . HK_AutoFish . "] Auto Fishing is ON."
        }
    
        if (GetKeyState(HK_AutoBoot, "P")) {
            Info_Boot := "`n[FAST] Auto Boot Throw is ON."
        } else {
            if (!Flag_ABT) {
                    Info_Boot := "`n[" . HK_AutoBoot . "] Auto Boot Throw is OFF."
            } else if (Flag_ABT) {
                Info_Boot := "`n[" . HK_AutoBoot . "] Auto Boot Throw is ON."
            }
        }
    
        if (!Flag_AFK) {
            Info_AFK := "`n[" . HK_AntiAFK . "] Anti-AFK is OFF."
        } else if (Flag_AFK) {
            Info_AFK := "`n[" . HK_AntiAFK . "] Anti-AFK is ON."
        }
    
        TimerS := SubStr("0" . TimerS, -1)
        TimerM := SubStr("0" . TimerM, -1)
        Timerinfo := "`nFishing Time - " . TimerH . ":" . TimerM . ":" . TimerS
    
        HeaderTip :=  "<AutoFish>`  " . Version . "`n Developer : Howar31 `n Updated by MiraculousB `n https://www.cnblogs.com/MiraculousB/"
        FuncTip := Info_Fish . Info_Boot . Info_AFK
        StatusTip := "" . Info_Lure . Timerinfo
        FooterTip := "" . Info_Tips . Info_Exit
    
        if (!Flag_Fishing) {
            ToolTip, %HeaderTip%%FuncTip%%FooterTip%, TooltipX, TooltipY
        } else if (Flag_Fishing) {
            ToolTip, %HeaderTip%%FuncTip%%StatusTip%%FooterTip%, TooltipX, TooltipY
        }
    }
    使用AHK编写。
    不同水之间偏移大小是相同的,只需要先找到水的基址,即可更新其他的地址。
    水的基址通过CE搜索找到。钓鱼时浮标抖动时动态地址状态为1,找到之后多次重启游戏查找三层偏移指针即可找到静态地址。
  • 相关阅读:
    导入Excel的时候使用TransactionScope事务控制来进行数据
    【项目相关】MVC中将WebUploader进行封装
    【项目相关】MVC中使用WebUploader进行图片预览上传以及编辑
    Java学习-2 其它公司合作项目源码分析
    Linux开发环境搭建
    新春畅想未来
    Java学习-1 框架、测试及学习误区
    Java学习-1 Myeclipse与Idea
    又到了一年一度圣诞新年立志许愿的时候了
    WebStorm神器啊,一旦上手根本停不下来
  • 原文地址:https://www.cnblogs.com/MiraculousB/p/13647600.html
Copyright © 2011-2022 走看看