goto, gosub 은 전혀 사용하지 않았습니다.
1시간정도는 잘 돌아가는데 그 이후로 에러가 뜹니다.
제가 작성한 코드는 이렇습니다.
(밑에 보기 어려우시면 파일로 올려드렸습니다.
파일명 : 서큐버스 잡기(로그제거).ahk
입니다.)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Gui, Add, Text, x30 y5 w400 h900, 매크로 프로그램
Gui, Add, Text, x60 y30 w50 h20 v횟수 ,0 회
Gui, Add, ComboBox, x48 y50 w70 h80 v몬스터 choose1, 키라|서큐버스|애빌
Gui, Add, Button, x20 y80 w100 h40,몬스터잡기(ctrl+1)
Gui, Add, Button, x20 y140 w100 h40, 멈춤(ctrl+2)
Gui, Add, Button, x20 y200 w100 h20, 종료
Gui, Show, , 매크로
return
^z::
Button시작:
{
global 매크로상태 := true
CoordMode, mouse, Screen
CoordMode, Pixel, Screen
Gui, Submit, nohide
global wX
global wY
global eX
global eY
loop
{
loop, 2
{
loop, 6
{
몹검색(몬스터)
}
Send,{3 2}
}
send {i}
sleep, 100
WinGetPos, wX, wY, wWidth, wHeight, NeoDarkSaver - Lapis
eX := wX + wWidth
eY := wY + wHeight
ImageSearch, OutX, OutY, wX, wY, eX, eY, *100 C:\mGame\Lapis\image\change.png
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
}
sleep, 100
send {i}
}
}
return
^c::
Button멈춤:
{
매크로상태 := false
}
return
; 1. 서큐 검색
몹검색(몬스터)
{
; 10번 몹을 찾은 후, 그때도 적이 없으면 전투중인지 확인.
loop 10
{
WinGetPos, wX, wY, wWidth, wHeight, NeoDarkSaver - Lapis
eX := wX + wWidth
eY := wY + wHeight
aX := wX + 210
aY := wY + 210
rX := eX - 201
rY := eY - 262
ImageSearch, OutX, OutY, aX, aY, rX, rY, *140 C:\mGame\Lapis\image\%몬스터%.PNG
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
return 전투중인지확인()
}
else
{
ImageSearch, OutX, OutY, aX, aY, rX, rY, *140 C:\mGame\Lapis\image\%몬스터%뒤.PNG
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
return 전투중인지확인()
}
else
{
ImageSearch, OutX, OutY, aX, aY, rX, rY, *140 C:\mGame\Lapis\image\%몬스터%오.PNG
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
return 전투중인지확인()
}
else
{
ImageSearch, OutX, OutY, aX, aY, rX, rY, *140 C:\mGame\Lapis\image\%몬스터%왼.PNG
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
return 전투중인지확인()
}
}
}
}
}
return 전투중인지확인()
}
;2. 전투중인지 확인
전투중인지확인()
{
sleep, 1000
CoordMode, Pixel, Window
ImageSearch, OutX, OutY, 700, 740, 760, 800, *100 C:\mGame\Lapis\image\fight.png
if (ErrorLevel = 0)
{
sleep, 1000
return 서큐까지이동및공격()
}
else
{
return 죽었는지검색()
}
}
;3. 서큐까지 이동 및 공격
서큐까지이동및공격()
{
MouseClick Left, 224, 335, 30
MouseClick Left, 9, 189, 60
sleep,1500
Send, {0 2}
sleep,2000
loop 10
{
Send {1}
sleep,100
Click, 2
}
return 전투안에서전투중인지확인()
}
;4. 전투 안에서 전투 중인지 확인
전투안에서전투중인지확인()
{
CoordMode, Pixel, Window
ImageSearch, OutX, OutY, 700, 740, 760, 800, *100 C:\mGame\Lapis\image\fight.png
if (ErrorLevel = 0)
{
return 서큐공격()
}
else
{
return 죽었는지검색()
}
}
;5. 서큐 공격
서큐공격()
{
loop 5
{
Send {1}
sleep,100
Click, 2
}
return 전투안에서전투중인지확인()
}
; mp 채우기
MP채우기()
{
CoordMode, Pixel, Window
PixelSearch, OutX, OutY, 106, 62, 107, 63, 0x2992EF, 0, Fast RGB
if (ErrorLevel =1)
{
Send,{3 2}
}
else
{
}
}
; 6. 죽었는지 검색
죽었는지검색()
{
CoordMode, Pixel, Window
ImageSearch, OutX, OutY, 4, 20, 50, 80, *130 C:\mGame\Lapis\image\die.png
if (ErrorLevel = 0)
{
sleep, 1000
Send {i}
sleep, 1000
loop 3
{
WinGetPos, wX, wY, wWidth, wHeight, NeoDarkSaver - Lapis
eX := wX + wWidth
eY := wY + wHeight
ImageSearch, OutX, OutY, wX, wY, eX, eY, *100 C:\mGame\Lapis\image\pet_revive.png
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
sleep, 1000
MouseClick, R
}
else
{
}
}
sleep, 1000
loop 3
{
WinGetPos, wX, wY, wWidth, wHeight, NeoDarkSaver - Lapis
eX := wX + wWidth
eY := wY + wHeight
ImageSearch, OutX, OutY, wX, wY, eX, eY, *100 C:\mGame\Lapis\image\revive.png
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
}
else
{
}
}
sleep, 1000
loop 3
{
WinGetPos, wX, wY, wWidth, wHeight, NeoDarkSaver - Lapis
eX := wX + wWidth
eY := wY + wHeight
ImageSearch, OutX, OutY, wX, wY, eX, eY, *100 C:\mGame\Lapis\image\change.png
if (ErrorLevel = 0)
{
A := OutX + 5
B := OutY + 10
MouseMove %A%, %B%
MouseClick, R
}
else
{
}
}
Send {i}
sleep, 1000
}
else
{
}
}
^x::
Button종료:
{
ExitApp
}
return
GuiClose:
{
ExitApp
}
return