2015년 2월 11일 수요일

[오토핫키스크립트] 디아블로자동사냥, 공부용, 해부용


#NoEnv
#SingleInstance Force
#Persistent
SetKeyDelay,0,1
ProgramName=Siz봇
ProgramVersion=1.02

TotalCount = 0
PassedCount = 0
FailedCount = 0
DiedCount = 0
RepairCount = 0
LogFileName = %a_scriptdir%\log\log1.html
IfNotExist,%a_scriptdir%\log\
FileCreateDir,%a_scriptdir%\log\
First_Start = 0
MagicCount =  0
RareCount = 0
SetCount = 0
LegendCount = 0
;SuccessCount=0

loop,60
{
inven%A_index%=1
}


end::
PostMessage,0x111,65307,,,sub.ahk - AutoHotkey 
process,close,sub.exe
exitapp                ; END 키 종료
;process,close,sub.exe
return
pause::
pause                ; PAUSE : 일시 중지 & 재시작
return
F5::                        ; F5 : 시작
run,%A_scriptDir%\sub.exe
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
loop
{

WinWait, 디아블로 III, 
        IfWinNotActive, 디아블로 III, , WinActivate, 디아블로 III, 
        WinWaitActive, 디아블로 III, 
        ResizeWin(1282,944) ;window rezie as 1292 X 850
        StartTime := A_TickCount
        ElapedTime := 0
gosub, WaitRoom        ; 방생성 완료 체크
        if res = 1
{
                        gosub, StartBot
                        ElapsedTime := A_TickCount - StartTime
        }     
}
return

ResizeWin(W,H)                ; 해상도 셋팅
{
  WinMove,디아블로 III,,0,0,%W%,%H%
}
return

WaitRoom:
        global count= 0
        loop, 40 
        {
                imagesearch,vx,vy,9,130,38,170,*30 %A_scriptDir%\image\방생성확인.bmp
                If errorLevel = 0
                {
                       global TotalCount
                        TotalCount := TotalCount+1
                        FileAppend, [%A_now%]봇시작<br> , %LogFileName%
IniWrite,1,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
res = 1
                        return
                }
                else
                {
                        sleep, 1500
                                imagesearch,vx,vy,549,530,725,588,*30 %A_scriptDir%\image\main_error.bmp        
                                if errorLevel = 0
                                {
                                        MouseClick, left,  637,  560
Sleep, 500
                                }    
                }
                
        }
res = 0
return
;;;;;;;;;;;;;;;;;;;;; [ 전투 함수 ] ;;;;;;;;;;;;;;;;;;;;;;;;;;
StartBot:
IfWinNotActive, 디아블로 III, , WinActivate, 디아블로 III, 
WinWaitActive, 디아블로 III, 
gosub,비명
if res = 1
{
gosub,동영상
if res = 1
{
gosub,인던안2
if res = 1
{
gosub,전투종료
if res = 1
{
Sleep,1000
send, {Shift Up}
Send,{Click up left} 
sleep,500
;gosub,GettingMoney
;gosub,GettingGem
gosub,GettingMagic
gosub,GettingLegend                        ; Legend Item 줍기
gosub,GettingSetItem                ; Set Item 줍기
gosub,GettingRare                        ; Rare Item줍기
gosub,town
global PassedCount
PassedCount++
;FileAppend, [%A_now%]성공<br> , %LogFileName%
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
;gosub,QuitRoom
}
else if res = 3
{
Sleep,500
Send,{Click up left} 
send, {Shift Up}
Sleep,500
global DiedCount
DiedCount++
;FileAppend, [%A_now%]사망<br> , %LogFileName%
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
;gosub,QuitRoom
sleep,12000
}
else
{
Sleep,1000
send, {Shift Up}
Send,{Click up left} 
sleep,500
;gosub,GettingMoney
;gosub,GettingGem
gosub,GettingMagic
gosub,GettingLegend                        ; Legend Item 줍기
gosub,GettingSetItem                ; Set Item 줍기
gosub,GettingRare                        ; Rare Item줍기
gosub,town
global PassedCount
PassedCount++
;FileAppend, [%A_now%]성공<br> , %LogFileName%
;gosub,QuitRoom
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
}
}
else
{
global DiedCount
        DiedCount++  
FileAppend, [%A_now%]실패<br> , %LogFileName%
;gosub,QuitRoom 
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
}
}
else
{
global FailedCount
        FailedCount++
FileAppend, [%A_now%]실패<br> , %LogFileName%
;gosub,QuitRoom 
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
}

}
return

비명:
loop, 60 
{
pixelgetcolor check1, 1121, 39
StringLeft,check1,check1,4
if (check1=0xCD or check1=0xCE)
{
sleep,100
send,4
send,1
send,2
send,3
sleep,2000
mouseclick, right, 985,225
sleep,100
mouseclick, right, 985,225
sleep,100
mouseclick, right, 985,225
sleep,100
mouseclick, right, 985,225
sleep,100
mouseclick, right, 985,225
sleep,100
MouseClick, left,  1161,  389
sleep,1000
MouseClick, left,  1161,  389
sleep,500
MouseClick, left,  582,  371
sleep,500
MouseClick, left,  622,  249
sleep,500
MouseClick, left,  747,  300
IniWrite,1,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
res = 1
return
}
else
{
imagesearch,vx,vy,1140,25,1210,59,*30 %A_scriptDir%\image\마을체크.bmp
if errorLevel = 0
{
chh:=1
}
pixelgetcolor check2, 1172, 36
StringLeft,check2,check2,4
if (check2=0xD1 or check2=0xD2 or check2=0xB3 or check2=0xB4 or check2=0xC2 or check2=0xC3 or check2=0xFF or chh = 1)
{
MouseClick, left,  445,  185
sleep,1500
}
sleep,500
chh:=0
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
}
}
res = 0
return

동영상:
loop, 15
{
pixelgetcolor m1, 74, 913
pixelgetcolor m2, 75, 913
pixelgetcolor m3, 76, 913
pixelgetcolor m4, 77, 913
If (m1=0x000000 and m2=0x000000 and m3=0x000000 and m4=0x000000)
                {
sleep,2000
send,{esc}
sleep,500
send,{enter}
sleep,100
res = 1
return
                }
else
{
sleep,1000
}
}
res = 0
return
인던안2:
loop, 15 
{
imagesearch,vx,vy,1170,25,1230,53,*30 %A_scriptDir%\image\보스방.bmp
                If errorLevel = 0
                {
MouseClick,left,655,834
sleep,1500
MouseClick,left,655,834
sleep,1500
MouseClick,left,655,834
sleep,1500
send, {Shift Down}
Send,{Click down left}
sleep,100
mousemove, 620,288
res = 1
return
                }
else
{
sleep,1000
}
}
res = 0
return

전투종료:
loop 
{
imagesearch,vx,vy,479,746,791,850,*30 %A_scriptDir%\image\전투종료.bmp
if ErrorLevel = 0
{
   Send, {esc}
sleep,100
res = 1
return
}
else
{
gosub,죽음체크
if res = 1
{
res = 3
return
}
else
{
send,123
}
}
}
res = 0
return

죽음체크:
        Sleep, 300
        imagesearch,vx,vy,704,727,741,752,*30 %A_scriptDir%\image\죽음체크.bmp
        if ErrorLevel
        {
res = 0
                return
        }
        else
        {
res = 1
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
                return
        }
return

;;;;;;;;;;;;;;;;;;;;; [ 전투 함수 ] ;;;;;;;;;;;;;;;;;;;;;;;;;;

QuitRoom:                ; 방에서 나감
        sleep, 1000
        MouseClick, left, 888, 900
        sleep, 500
        RandomClick(640,450,1)
FileAppend, [%A_now%]방나가기<br> , %LogFileName%
return

town:
sleep,500
send,t
;sleep,500
loop, 30 
{
imagesearch,vx,vy,1140,25,1210,59,*30 %A_scriptDir%\image\마을체크.bmp
If errorLevel = 0
{
sleep,2500
MouseClick, left, 994,206
sleep,2500
gosub,Inven_First
if res = 1
{
gosub, Inven_Input ;초기 인벤값을 불러와서 저장한다.
}
gosub,CheckRepair                        
if res = 1
{
gosub, GoToMerchant
gosub, RepairItem
gosub, RepairBack
}
gosub,Inven_clean
if res = 1
{
gosub,GoToSmith ;대장간으로 가서 아이템레벨 62-63을 제외한 아이템을 융해시킨다.
gosub,decomposition ;초기인벤값과 비교후 융해시키기
gosub,BackSmith
gosub,InputStore ;인벤이 가득 찼다면, 창고이용, 인벤을 정리한다.
gosub,BackStore ;창고정리후 복귀
}
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
return
}
else
{
sleep,1000
}
}
IniWrite,2,C:\Documents and Settings\All Users\Documents\tran.ini,방,확인
return

Inven_First:
        Sleep, 300
        if First_Start = 0
        {
First_Start = 1
res = 1
                return
        }
        else
        {
res = 0
                return
        }
return

Inven_Input:
        Sleep, 300
        X:=867, Y:=540, pW:=41, pH:=41, C:=1, Ix:=1
loop,60
{
inven%Ix%X:=X, inven%Ix%Y:=Y
X:=X+pW , C:=C+1, Ix:=Ix+1
If ( C > 10 )
X:=867, Y:=Y+pH, C:=1
}
sleep,500
mouseclick,left, 840, 894
sleep,500
gosub,인벤체크
sleep,500
loop,60
{   
pX:=inven%A_Index%X
pY:=inven%A_Index%Y
pixelgetcolor inven%A_Index%, %pX%, %pY%
if (inven%A_Index%=0x080C11 or inven%A_Index%=0x080C12 or inven%A_Index%=0x080C13 or inven%A_Index%=0x080C14 or inven%A_Index%=0x080C16)
{
F_inven%A_Index% = 0
}
else
{
F_inven%A_Index% = 1
}
}
sleep,1000
send, {esc}
sleep,500
return

인벤체크:
loop, 15 
{
imagesearch,vx,vy,1016,44,1085,109,*30 %A_scriptDir%\image\인벤체크.bmp
                If errorLevel = 0
                {
return
                }
else
{
sleep,1000
}
}
return

Inven_clean:
        Sleep, 300
        imagesearch,vx,vy,970,660,1070,692,*30 %A_scriptDir%\image\full.bmp
        if ErrorLevel
        {
res = 0
                return
        }
        else
        {
MouseClick, left, 1212, 675
sleep,500
res = 1
                return
        }
return

CheckRepair:
        Sleep, 300
        PixelSearch, Px, Py, 916, 40, 950,100, 0x00F0FF, 10, Fast        ;수리 아이콘 픽셀 체크
        if ErrorLevel
        {
res = 0
                return
        }
        else
        {
res = 1
                return
        }
return

GoToMerchant:                ; 상인에게로...
        sleep, 1000
        mouseclick, left, 888,58
        sleep, 5000
        mouseclick, left, 678,370
sleep, 1000
return

RepairItem:                ; 수리 -> 모두 수리 버튼 클릭
        global RepairCount 
        sleep, 1000
mouseclick, left, 436,432
sleep, 1000
mouseclick, left, 223,528
        Sleep,500
        send, {esc}
        RepairCount++
        FileAppend, [%A_now%]장비를 수리하였습니다.<br>, %LogFileName% 
        sleep, 200
return

RepairBack:
        sleep, 1000
        mouseclick, left,496,846
sleep, 5000
        mouseclick, left,413,597
sleep, 2000
return

GoToSmith:
        sleep, 1000
        mouseclick, left, 1184,566
        sleep, 3000
        mouseclick, left, 743,404
        sleep, 1000
mouseclick, left, 440,432
        sleep, 1000
mouseclick, left, 227,266
        sleep, 1000
return

decomposition:
        Sleep, 300
gosub,인벤체크
X:=887, Y:=560, pW:=41, pH:=41, C:=1, Ix:=1
loop,60
{
if (C=2 or C=6)
{
pW=42
}
else
{
pW=41
}
if Y=765
{
Y=764
}
check%Ix%X:=X-3, check%Ix%Y:=Y-2
X:=X+pW , C:=C+1, Ix:=Ix+1
If ( C > 10 )
X:=887, Y:=Y+pH, C:=1
}
loop,60
{   
pX:=check%A_Index%X
pY:=check%A_Index%Y
pixelgetcolor check%A_Index%, %pX%, %pY%
}
Bx:=60
loop,60
{   
if F_inven%Bx% = 0
{

if (check%Bx% = 0xB9150E or check%Bx% = 0xB7130D or check%Bx% = 0xB4120C or check%Bx% = 0x5F301F or check%Bx% = 0x592C1D or check%Bx% = 0x53291B or check%Bx% = 0xF00000 or check%Bx% = 0xF10000 or check%Bx% = 0x040305 or check%Bx% = 0x030205)
{
global xx 
global yy
xx:=check%Bx%X-10
yy:=check%Bx%Y-10
;sleep,100
MouseMove,%xx%,%yy%
sleep,100
gosub,확인
if (rex=0)
{
sleep,500
mouseclick, left
}
sleep,500
}

}
Bx:=Bx-1
}
sleep,300
return


BackSmith: ;창고로 가서 열기
        sleep, 1000
        send,{esc}
        sleep, 1000
        mouseclick, left, 311,304
        sleep, 3000
mouseclick, left, 269,555
sleep, 2000
mouseclick, left, 437,329
sleep, 1000
return

InputStore:
Sleep, 300
X:=867, Y:=540, pW:=41, pH:=41, C:=1, Ix:=1
loop,60
{
inven%Ix%X:=X, inven%Ix%Y:=Y
X:=X+pW , C:=C+1, Ix:=Ix+1
If ( C > 10 )
X:=867, Y:=Y+pH, C:=1
}
loop,60
{   
pX:=inven%A_Index%X
pY:=inven%A_Index%Y
pixelgetcolor C_inven%A_Index%, %pX%, %pY%
if (F_inven%A_Index% = 0)
{
if (C_inven%A_Index%=0x080C11 or C_inven%A_Index%=0x080C12 or C_inven%A_Index%=0x080C13 or C_inven%A_Index%=0x080C14 or C_inven%A_Index%=0x080C16)
{
}
else
{
sleep,500
MouseClick, right,  %pX%,  %pY%
sleep,500
}
}
}
return

BackStore:
        sleep, 1000
        send,{esc}
        ;sleep, 1000
return

GettingSetItem:
{
        loop 5
        {
                send, {alt}
                PixelSearch, Px, Py, 0, 0, 900,834, 0x00FF00, 10, Fast
                if ErrorLevel = 0
                {
                        global SetCount
                        sleep 500
                        send, {alt}
                        MouseClick, left, Px + 15, Py + 10
                        ;SetCount++
                        sleep 1500
                        ;FileAppend, [%A_now%]Get a Set Item..yes!yes!...<br>, C:\Log\Google 드라이브\log1.html
                }
        }
}
return
GettingRare:
{
        loop 5
        {
                send, {alt}
                PixelSearch, Px, Py, 0, 0, 900,834, 0x02F0F0, 6, Fast
                if ErrorLevel = 0
                {
                        global RareCount
                        sleep 500
                        send, {alt}
                        MouseClick, left, Px + 15, Py + 10
                        RareCount++
                        sleep 1500
                ;FileAppend, [%A_now%]Get a Rare Item..yes!...<br>, C:\Log\Google 드라이브\log1.html
                }
        }
}

return
GettingMagic:
{
        loop 30
        {
                send, {alt}
                PixelSearch, Px, Py, 278, 189, 900,834, 0xF06463, 1, Fast
                if ErrorLevel = 0
                {
                        global MagicCount
                        sleep 500
                        send, {alt}
                        MagicCount++
                        MouseClick, left, Px + 15, Py + 10
                        sleep 500
                        ;FileAppend, [%A_now%]Get a magic..! %MagicCount% <br>, C:\Log\Google 드라이브\log1.html
                }
        }
}
return
GettingLegend:
{
        loop 5
        {
                send, {alt}
                PixelSearch, Px, Py, 0, 0, 900,834, 0x2F64BF, 2, Fast
                if ErrorLevel = 0
                {
                        global LegendCount
                        sleep 500
                        send, {alt}
                        MouseClick, left, Px + 15, Py + 10
                        LegendCount++
                        sleep 1500
                ;FileAppend, [%A_now%]Get a Legend Item..yes!yes!...<br>, C:\Log\Google 드라이브\log1.html
                }
        }
}
return

확인:
rex:=0
loop,2
{
xxx1:=xx+10-422
xxx2:=xx+10
imagesearch,vx,vy,%xxx1%,660,%xxx2%,870,*30 %A_scriptDir%\image\item%A_index%.bmp
If errorLevel = 0
{
rex:=1
}

}
return

;************* 랜덤 함수 A P I **************;0x1000BD
PingDelay(delay)
{
pixelgetcolor pingvlaue, 917,915
if (pingvlaue=0x164823)
{
t_time=250
}
else if (pingvlaue=0x0056AF)
{
t_time=500
}
else
{
t_time=900
}
sleep, delay * 1000 + t_time
}
return
RandomClick(x,y,delay)
{
        random,randX, -3, 3
        random,randY, -3, 3
        
        x := x + randX
        y := y + randY

        mouseclick,left, x, y
        sleep, delay * 1000        
}
return
RandomMove(x,y,delay)
{
        random,randX, -3, 3
        random,randY, -3, 3
        
        x := x + randX
        y := y + randY

        mousemove, x, y
        send, '
        sleep, delay * 1000        
}
return
;************* 랜덤 함수 A P I **************


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;여기서 부터 보조컴퓨터용 2번째 스크립트 입니다 ;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;적이없는 안전한 위치가 확인되면 파티초대 신청을 합니다 ;;;;;

Loop
{
sleep,100
WinMove,디아블로 III,,0,0,1282,944
gosub,건달
gosub,멀티플레이어체크
gosub,퀘스트확인창
gosub,퀘스트비수락
gosub,초대수락
gosub,초대나가기확인
}
초대수락:
        imagesearch,vx,vy,1070,663,1200,854,*30, %A_scriptDir%\image\초대수락.bmp
        If errorLevel = 0
        {
                MouseClick, left,  1116,  810
                return
        }
return

초대나가기확인:
        imagesearch,vx,vy,472,541,603,577,*30, %A_scriptDir%\image\초대나가기확인.bmp
        If errorLevel = 0
        {
                MouseClick, left,  546,  559
                return
        }
return

건달:
imagesearch,vx,vy,562,57,620,97,*30 %A_scriptDir%\image\건달.bmp
If errorLevel = 0
{
MouseClick, left,  573,  304
return
}
return

멀티플레이어체크:
imagesearch,vx,vy,955,663,1060,689,*30 %A_scriptDir%\image\멀티플레이어창.bmp
If errorLevel = 0
{
MouseClick, left,  1211,  677
return
}
return

댓글 없음:

댓글 쓰기