Скрипт бот для ArcheAge

Безопасный и надёжный обменник криптовалют на наличные — Insight
L

Lizo4ka

Данный бот умеет:
Таргетить все красное, при отсутствии целей крутится.
Дамажит или контролит 2-мя скилами, следит за своим хп и петом, если надо
Определяет тип цели и процент хп, лутает только после убийства моба!
Бафается и можно настроить тип дудки[ хп или мп]
Работает с одним окном! Все интервалы, между нажатиями кнопок, рандомные
Запуск и остановка по F10
Настроен на разрешение окна 1280 х 1024

Код:
Func _WinWaitActivate($title,$text,$timeout=0)
    WinWait($title,$text,$timeout)
    If Not WinActive($title,$text) Then WinActivate($title,$text)
    WinWaitActive($title,$text,$timeout)
EndFunc

;init

HotKeySet("{F10}","StartOrStop")
;------- Global control information --------------------
Global $STOP = True

_WinWaitActivate("- ArcheAge ","")

Global $hWnd = WinActive("- ArcheAge ","")

Global $TOTAL_KILLED = 0
Global $HP = 0
Global $MP = 0
Global $PET_HP = 0
Global $PET_MP = 0
Global $TARGET_HP = 0
Global $TARGET_MP = 0
Global $TARGET_STATE = 0
Global $LOOT_TIMES = 3
Global $LOOT_FLAG = True
Global $BAR_PERC = 0 ;return percent filling
Global $EMPTYHP_COLOR = '372A11'
Global $EMPTYMP_COLOR = '2B210E'
Global $HPPOT_PERC = 50
Global $HPPOT_KEY = "{F6}"
Global $HPPOT_TIMER = 30
Global $HP_REGEN_STOP = 98
Global $MPPOT_PERC = 20
Global $MPPOT_KEY = "{F5}"
Global $MPPOT_TIMER = 30
Global $MP_REGEN_STOP = 98
Global $HPSKILL_PERC = 70
Global $HPSKILL_KEY = "{F8}"
Global $HPSKILL_TIMER = 21
Global $MPSKILL_PERC = 50
Global $MPSKILL_KEY = "{F7}"
Global $MPSKILL_TIMER = 120
Global $FLUITE_PERC = 80
Global $FLUITE_KEY = "{F4}"
Global $FLUITE_HP_TYPE = True ; true - HP / False - MP
Global $ROTATE_SEARCH = True
Global $SKILL1_KEY = "{F1}" ; Agro for target
Global $SKILL1_TIMER = 6
Global $SKILL2_KEY = "{F2}" ; Damage
Global $SKILL2_TIMER = 0
Global $SKILL3_KEY = "{F3}" ; Control
Global $SKILL3_TIMER = 15
Global $HP_PET_PERC = 80
Global $HP_PET_REGENSTOP = 98
Global $BUFF1_KEY = "{F11}"
Global $BUFF1_TIMER = 60
Global $BUFF2_KEY = "{F12}"
Global $BUFF2_TIMER = 900
Global $BUFF1_COUNT = TimerInit()
Global $BUFF2_COUNT = TimerInit()
Global $HPPOT_COUNT = TimerInit()
Global $MPPOT_COUNT = TimerInit()
Global $HPSKILL_COUNT = TimerInit()
Global $MPSKILL_COUNT = TimerInit()
Global $SKILL1_COUNT = TimerInit()
Global $SKILL2_COUNT = TimerInit()
Global $SKILL3_COUNT = TimerInit()
Global $MP_YPOS = 80
Global $HP_YPOS = 65
Global $CHAR_XMIN_POS = 11
Global $CHAR_XMAX_POS = 308
Global $PET_XMIN_POS = 331
Global $PET_XMAX_POS = 448


Do
    Sleep(1000)
    ;This part run on OFF mode
    ;Update Char HP and MP
    ;UpdateCharInfo()

Until $STOP = False
While (1)

    UpdateCharInfo()
    UpdatePetInfo()
    TargetTypeCheck()
    Main()

WEnd


Func Main()

    If $STOP = False Then

            TargetMob()

            If $TARGET_STATE > 9 Then
                KillTarget()
            EndIf

            UpdateCharInfo()
            ;Stop on die
            StopCheck()
            HPMPRestore()
            BuffsCheck()

    Else
        Sleep(300)

    EndIf

EndFunc   ;==>Main

Func StartOrStop()

    If $STOP = True Then
        $STOP = False
    Else
        $STOP = True
    EndIf

EndFunc

Func BarDetect($BAR_XMIN,$BAR_XMAX,$BAR_YPOS,$BAR_EMPTYCOLOR)
    ;Func for get bar fill in %
    ;Left to right scan
    ;-------------------------------------------------------
    ;                  BAR check
    ;-------------------------------------------------------
    Local $BAR_SEARCH = $BAR_XMIN - 1
    Local $BAR_TEMP = 1
    Local $BAR_LENGHT = $BAR_XMAX - $BAR_XMIN
    Do
        $BAR_SEARCH = $BAR_SEARCH + 1
        Local $iColorTEMPbar = PixelGetColor($BAR_SEARCH,$BAR_YPOS,$hWnd)
        If Hex($iColorTEMPbar,6) = $BAR_EMPTYCOLOR Then ExitLoop
    Until $BAR_SEARCH = $BAR_XMAX
    $BAR_TEMP = $BAR_SEARCH - $BAR_XMIN
    $BAR_PERC = Int($BAR_TEMP / $BAR_LENGHT * 100)
    Return $BAR_PERC

EndFunc   ;==> BarDetect

;-----------------------------------------------------------------------------------------
;
;                  TARGET SECTION
;
;-----------------------------------------------------------------------------------------

Func TargetMob()

    ;Use Skill for agro
    If TimerDiff($SKILL1_COUNT) > ($SKILL1_TIMER * 1000) Then
        ControlSend($hWnd, "", "", $SKILL1_KEY)
        Sleep(100)
        TargetTypeCheck()
        TargetHPCheck()
        If $TARGET_STATE > 9 Then $SKILL1_COUNT = TimerInit()
    EndIf
    If $ROTATE_SEARCH = True Then
        If $TARGET_STATE = 0 Then
            ControlSend($hWnd, "", "", "{UP}")
            Sleep(Random(30,60,1))
            ControlSend($hWnd, "", "", "{DOWN}")
            Sleep(Random(30,60,1))
            Sleep(200)
            If TimerDiff($SKILL1_COUNT) > ($SKILL1_TIMER * 1000) Then
                ControlSend($hWnd, "", "", $SKILL1_KEY)
                Sleep(300)
                TargetTypeCheck()
                TargetHPCheck()
                If $TARGET_STATE > 9 Then $SKILL1_COUNT = TimerInit()
            EndIf
        EndIf
        If $TARGET_STATE = 0 Then
            If Random(0,1,1) = 1 Then
                ControlSend($hWnd, "", "", "{PGUP}")
                Sleep(Random(30,60,1))
                ControlSend($hWnd, "", "", "{DOWN}")
                Sleep(Random(30,60,1))
                ControlSend($hWnd, "", "", "{UP}")
                Sleep(Random(30,60,1))
            Else
                ControlSend($hWnd, "", "", "{PGDN}")
                Sleep(Random(30,60,1))
                ControlSend($hWnd, "", "", "{DOWN}")
                Sleep(Random(30,60,1))
                ControlSend($hWnd, "", "", "{UP}")
                Sleep(Random(30,60,1))
            EndIf
            Sleep(200)
            If TimerDiff($SKILL1_COUNT) > ($SKILL1_TIMER * 1000) Then
                ControlSend($hWnd, "", "", $SKILL1_KEY)
                Sleep(100)
                TargetTypeCheck()
                TargetHPCheck()
                If $TARGET_STATE > 9 Then $SKILL1_COUNT = TimerInit()
            EndIf
        EndIf
    EndIf

EndFunc   ;==>TargetMob

Func TargetTypeCheck()

    $TARGET_STATE = 0
    Local $iColorTEMP3 = PixelGetColor(729,$HP_YPOS,$hWnd);miniHPmax
    Local $iColorTEMP4 = PixelGetColor(553,$HP_YPOS,$hWnd);miniHPmin
    Local $iColorTEMP5 = PixelGetColor(494,$HP_YPOS,$hWnd);mobHPmin
    Local $iColorTEMP6 = PixelGetColor(428,$HP_YPOS,$hWnd);bossHPmin
    If Hex($iColorTEMP3,6) = '372A11' Then $TARGET_STATE = 1
    If Hex($iColorTEMP3,6) = '579134' Then $TARGET_STATE = 2
    If Hex($iColorTEMP3,6) = 'D45A5A' Or Hex($iColorTEMP4,6) = '902727' Then $TARGET_STATE = 10
    If Hex($iColorTEMP3,6) = 'A0322D' Or Hex($iColorTEMP5,6) = '892020' Then $TARGET_STATE = 11
    If Hex($iColorTEMP3,6) = '9A2D2A' Or Hex($iColorTEMP6,6) = '972E2E' Then $TARGET_STATE = 12


EndFunc   ;==>TargetTypeCheck

Func TargetHPCheck()
    ;for Mini MOB
    If $TARGET_STATE = 10 Then
        $TARGET_HP = BarDetect(553,729,$HP_YPOS,$EMPTYHP_COLOR)
    EndIf
    ;for Normal MOB
    If $TARGET_STATE = 11 Then
        $TARGET_HP = BarDetect(494,788,$HP_YPOS,$EMPTYHP_COLOR)
    EndIf
    ;For Boss MOB
    If $TARGET_STATE = 12 Then
        $TARGET_HP = BarDetect(428,854,$HP_YPOS,$EMPTYHP_COLOR)
    EndIf

EndFunc   ;==>TargetCheck

;-----------------------------------------------------------------------------------------
;
;              END TARGET SECTION
;
;-----------------------------------------------------------------------------------------

;-----------------------------------------------------------------------------------------
;
;               IN COMBAT ACTION SECTION
;
;-----------------------------------------------------------------------------------------

Func StopCheck()

    UpdateCharInfo()
    If $HP = 0 Then
        StartOrStop()
    EndIf

EndFunc

Func KillTarget()

    ;Read Last HP Info
    ;UpdateCharInfo()

    If $TARGET_STATE > 9 Then

        Do
            ;Loop for skill spaming
            If TimerDiff($SKILL2_COUNT) > ($SKILL2_TIMER * 1000) Then
                ControlSend($hWnd, "", "", $SKILL2_KEY)
                $SKILL2_COUNT = TimerInit()
                Sleep(Random(20,30,1))
            EndIf
            If TimerDiff($SKILL3_COUNT) > ($SKILL3_TIMER * 1000) Then
                ControlSend($hWnd, "", "", $SKILL3_KEY)
                $SKILL3_COUNT = TimerInit()
                Sleep(Random(20,30,1))
            EndIf
            ;Check if Auto-Pot is Needed
            HPMPFightAutoPotCheck()

            TargetHPCheck()
            If $TARGET_HP = 0 Then
                Sleep(500)
                $TOTAL_KILLED = $TOTAL_KILLED + 1
                PickLoot($LOOT_TIMES)
                TargetTypeCheck()
                If $TARGET_STATE = 1 Then ControlSend($hWnd, "", "", "{ESC}") ;drop dead target
            EndIf

        Until $TARGET_STATE < 10
        ;Pick loot thin mob die
        PickLoot($LOOT_TIMES)
    Else
        ControlSend($hWnd, "", "", "{ESC}")
    EndIf

EndFunc

Func HPMPFightAutoPotCheck()
    ;HP and MP restore in Combat

    UpdateCharInfo()
    If $HP < $HPPOT_PERC And TimerDiff($HPPOT_COUNT) > ($HPPOT_TIMER * 1000) Then
        ControlSend($hWnd, "", "", $HPPOT_KEY)
        $HPPOT_COUNT = TimerInit()
        Sleep(30)
    EndIf
    If $MP < $MPPOT_PERC And TimerDiff($MPPOT_COUNT) > ($MPPOT_TIMER * 1000) Then
        ControlSend($hWnd, "", "", $MPPOT_KEY)
        $MPPOT_COUNT = TimerInit()
        Sleep(30)
    EndIf

EndFunc   ;==> HPMPFightAutoPotCheck

;-----------------------------------------------------------------------------------------
;
;              END IN COMBAT ACTION SECTION
;
;-----------------------------------------------------------------------------------------

;-----------------------------------------------------------------------------------------
;
;               OUT COMBAT ACTION SECTION
;
;-----------------------------------------------------------------------------------------

Func PickLoot($MAX)

    ;Check if need pick loot
    If $LOOT_FLAG = True Then
        For $P = $MAX To 1 Step -1
            ControlSend($hWnd, "", "", "f")
            Sleep(Random(100,200,1))
        Next
    EndIf

EndFunc   ;==>PickLoot

Func HPMPRestore()

    UpdateCharInfo()
    UpdatePetInfo()
    TargetTypeCheck()
    If $TARGET_STATE = 0 Then
        Do
            Sleep(500)
            If $MP > $MP_REGEN_STOP And ($HP < $HPSKILL_PERC Or $PET_HP < $HP_PET_PERC) And TimerDiff($HPSKILL_COUNT) > ($HPSKILL_TIMER * 1000) Then
                ControlSend($hWnd, "", "", $HPSKILL_KEY)
                $HPSKILL_COUNT = TimerInit()
                Sleep(500)
            ElseIf $FLUITE_HP_TYPE = True And ($HP < $FLUITE_PERC Or $PET_HP < $HP_PET_PERC) Then
                ControlSend($hWnd, "", "", $FLUITE_KEY)
                Sleep(7000)
            EndIf
            If $FLUITE_HP_TYPE = False And $MP < $FLUITE_PERC Then
                ControlSend($hWnd, "", "", $FLUITE_KEY)
                Sleep(7000)
            ElseIf $MP < $MPSKILL_PERC And TimerDiff($MPSKILL_COUNT) > ($MPSKILL_TIMER * 1000) Then
                ControlSend($hWnd, "", "", $MPSKILL_KEY)
                $MPSKILL_COUNT = TimerInit()
                Sleep(9000)
            EndIf
            UpdateCharInfo()
            UpdatePetInfo()
            TargetTypeCheck()
        Until ($HP > $HP_REGEN_STOP And $MP > $MP_REGEN_STOP And $PET_HP > $HP_PET_REGENSTOP) Or $TARGET_STATE <> 0
    EndIf

EndFunc ; ==> HPMPRestore

Func BuffsCheck()

    If TimerDiff($BUFF1_COUNT) > ($BUFF1_TIMER * 1000) Then
        ControlSend($hWnd, "", "", $BUFF1_KEY)
        Sleep(2000)
        $BUFF1_COUNT = TimerInit()
    EndIf
    If TimerDiff($BUFF2_COUNT) > ($BUFF2_TIMER * 1000) Then
        ControlSend($hWnd, "", "", $BUFF2_KEY)
        Sleep(2000)
        $BUFF2_COUNT = TimerInit()
    EndIf

EndFunc


;-----------------------------------------------------------------------------------------
;
;               END OUT COMBAT ACTION SECTION
;
;-----------------------------------------------------------------------------------------

;-----------------------------------------------------------------------------------------
;
;               CHAR and PET STATUS SECTION
;
;-----------------------------------------------------------------------------------------

Func UpdatePetInfo()

    $PET_HP = BarDetect($PET_XMIN_POS,$PET_XMAX_POS,$HP_YPOS,$EMPTYHP_COLOR)
    $PET_MP = BarDetect($PET_XMIN_POS,$PET_XMAX_POS,$MP_YPOS,$EMPTYMP_COLOR)

EndFunc ;==>UpdatePetInfo

Func UpdateCharInfo()

    $HP = BarDetect($CHAR_XMIN_POS,$CHAR_XMAX_POS,$HP_YPOS,$EMPTYHP_COLOR)
    $MP = BarDetect($CHAR_XMIN_POS,$CHAR_XMAX_POS,$MP_YPOS,$EMPTYMP_COLOR)

EndFunc   ;==>UpdateCharInfo

;-----------------------------------------------------------------------------------------
;
;               End CHAR and PET STATUS SECTION
;
;-----------------------------------------------------------------------------------------
 

Mr.Bean

Администратор
Сообщения
280
Реакции
154
Блин лучше бы кто нить бота создал бы:)
 
kaspersky keys
Верх