ããã¯ãWorld of Warcraftã²ãŒã çšã®åçŽãªãããã®äœæã«é¢ããèšäºã®2çªç®ã®éšåã§ãã æåã®éšåã¯
ããã«ãããŸã ã ä»æ¥ã¯
- AutoIt㧠Recorderã®ããŒãšåº§æšãèšè¿°ãã
- ãããã«å¯ŸããPlayerã®æ瀺ãæžã
- æ°åŠ2D ãã³ãµã€ã³å®çãªãã§ãã«ã«ã座æšç³»ãããã²ãŒãããæ¹æ³
- ã»ã³ãµãŒãäžååãªããããå¶åŸ¡
- ããããžã®å¯Ÿç

ã¬ã³ãŒããŒ
ç§ãã¡ã®ã¿ã¹ã¯ïŒãã¯ã»ã«ã®è²ã®èªã¿åããããŒã¹ãããŒã¯ã®æ±ºå®ãäžæåæ¢æ©èœãåããããã¯ã°ã©ãŠã³ãäœæ¥ãã¢ããªã±ãŒã·ã§ã³ãžã®ã¯ãªãã¯ã®éä¿¡ã ããã§
ã¯ãAutoItãæé©ã§ãã Cã§åãããšãæžãã«ã¯
ãã³ãã«ãããã€ã¹ãããã¯ãWindowsã€ãã³ãã«æ©ãŸãããŸã...ããã«ããããã®ã¢ã¯ã·ã§ã³ã®ããããã«ã€ããŠããã«ããèªã¿ãæ¹æ³ãèŠã€ããæ§é ãã¿ã€ããCookieã決å®ããå¿
èŠããããŸãã
ã¹ã¯ãªããã®ç·šéãšã¯ã€ãã¯èµ·åã«ã¯ã
SciTE-Liteã䜿çšããŸãããããã«ã¯ã匷調衚瀺ãCodeFoldingããªãŒãã³ã³ããªãŒããIntellisenseãSyntaxCheckãå«ãŸããŸãã çµã¿èŸŒã¿ã®èšèªãã«ãã¯ç¡æã§ãã æšæºãããã
ãããããŒ
ãã¹ã¯ãããã§åäœãã
ãããå¶åŸ¡ã§ããåã¹ã¯ãªããã§ã¯ãããã€ãã®ãããããŒãã³ãã©ã䜿çšããããšããå§ãããŸã
$paused = false HotKeySet("{F11}", "Pause") HotKeySet("{F10}", "Kill") Func Pause() $Paused = NOT $Paused While $Paused Sleep(100) WEnd EndFunc Func Kill() FileClose($hfile) Exit EndFunc
ããããªããšãã·ã¹ãã ãå¶åŸ¡ã§ããã«ãªãã¶ãŒããŒç¶æ
ã«é¥ãå±éºããããŸãã 審å€ã®æ¥
ãã³ãã©ãŒã
F12ããã®ä»ã®ãã¿ã³ã«æããããšã¯ã§ããŸããã ãã°ããã®éããªãåŒã³åºãããªãã£ãã®ãç解ã§ããŸããã§ããã
座æšãååŸãã
ã¢ããªã³ã§ã¯ããã¯ã»ã«ã®è²æåã«æµ®åå°æ°ç¹æ°ãå
¥ããŸããããããã¯ãã€ãå
šäœã®åœ¢ã§éãããŠããããšãæãåºããŠãã ããã
#include <Color.au3> Opt("PixelCoordMode", 2) ; Opt("MouseCoordMode", 2) ; $WinName = "World of Warcraft" $hwnd = WinGetHandle($WinName) Func GetPitch() $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd)); Return ($pixel2[2]/255.0-0.5)*4 EndFunc Func GetPos() $pixel1 = _ColorGetRGB(PixelGetColor(0, 0, $hwnd)); $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd)); $result[3] = [ ($pixel1[0]+$pixel1[1]/255.0)/255*100, ($pixel2[0]+$pixel2[1]/255.0)/255*100, $pixel1[2]*7.0/255 ] return $result EndFunc
ããŒã¿ãèªã¿åã£ãåŸããããã䜿çšããŠéå€æãå®è¡ããŸãã é¢æ°ã¯é
åãè¿ããé
åã¯ããã°ã©ããŒã«ãšã£ãŠå®å
šã«ééçãªå€æ°ã«æžã蟌ãŸããŸãã
ããŒãã®ã³ã°
AutoItã®äœè
ã¯ããã«ãŠã§ã¢ãäœæããããã«ãµã€ããŒç¯çœªè
ããã®ãããªã·ã³ãã«ã§åŒ·åãªèšèªã䜿çšããããšãæãã§ããªãããšãã©ããã§èªã¿ãŸããã ãããã£ãŠã圌ã¯ãã¹ãŠã®ããŒã®ããŒã¹ãããŒã¯ãã³ãã©ãŒãäžåºŠã«äœæããæ©èœãåé€ããå°ãªããšã
ããŒãã¬ãŒããªãããããªãããã«ããŸããã
ãªããŠèšããŸããã
AutoItã¯ãã«ãŠã§ã¢ã®äœæã«éåžžã«
ç©æ¥µçã«äœ¿çšãããŠããã次ã®ããã«å¿
èŠãªããŒãæŒãååãè¡ããŸãã
local $keys = StringSplit("` [ ] 1 2 3 4 5 6 7 8 9 0 !1 !2 !3 !4 !5 !6 !7 !8 !9 !0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +f {SPACE} {TAB} {ESC} {PAUSE} {DELETE} {BACKSPACE}", " ", 2) for $i = 0 to UBound($keys)-1 HotKeySet($keys[$i], "OnHotKey") Next Func OnHotKey() ;ToolTip(@HotKeyPressed) HotKeySet(@HotKeyPressed) Send(@HotKeyPressed) HotKeySet(@HotKeyPressed, "OnHotKey") Switch @HotKeyPressed Case "[" FileWriteLine($hfile, "mouse left " & MouseGetPos(0) & " " & MouseGetPos(1)) Case "]" FileWriteLine($hfile, "mouse right " & MouseGetPos(0) & " " & MouseGetPos(1)) Case "{PAUSE}" FileWriteLine($hfile, "pause 1000") Case "{BACKSPACE}" FileWriteLine($hfile, StringFormat("pitch %.2f", GetPitch())) Case Else FileWriteLine($hfile, "key " & @HotKeyPressed) EndSwitch EndFunc
ãããã£ãŠããã¡ã€ã«ã«ä¿åããããã«ããŒã«ååãä»ããç¬èªã®ã·ã¹ãã ãèæ¡ããå¿
èŠã¯ãããŸãã
ãAutoITã§æ¡çšãããŠãããã®ã䜿çš
ããŠãã ããä»ã®äœããã€ã³ã¿ãŒã»ããããå¿
èŠãããå ŽåïŒãããŠã²ãŒã äžã«æŒããã®ãšäœ¿çšããã¹ãã«ãäºåã«ç¥ã£ãŠããå ŽåïŒãããããæåã«é·ããªã¹ãã«è¿œå ããŸãã
ããŒã¹ãããŒã¯ãã€ã³ã¿ãŒã»ããããåŸããããã¢ããªã±ãŒã·ã§ã³ã«ããã«éä¿¡ããå¿
èŠããããŸãããã®ããããã³ãã©ãŒãäžæçã«åé€ããŸã
HotKeySet(@HotKeyPressed) Send(@HotKeyPressed) HotKeySet(@HotKeyPressed, "OnHotKey")
ãã®ã¢ãããŒãã¯ãã«ãã§æšå¥šãããŠããŸãããå®éã«ã¯ã
Altãªã©ãšã®çµã¿åãããã¯ãªãã¯ãããšãæããã«ãã°ãå€ããªããŸãã ç§ã¯ç解ããŠããŸããã§ãããããã®ãããªçµã¿åããã®äœ¿çšãé¿ããŸããã
ããŠã¹ãã®ã³ã°
AutoItã«ã¯ãããŠã¹ã¯ãªãã¯ãã€ã³ã¿ãŒã»ããããããã®éåžžã®æ¹æ³ããããŸããã
䜿çšäŸãèšèŒããããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ã
ãããŸã ã ãŸãã¯ã
SetWindowsHookExïŒWH_MOUSE_LLïŒããã³ã°ãããããšãã§ããŸãã
AutoIt㧠WinAPIã³ãŒã«ããã¯é¢æ°ã䜿çšãã䟿å©ãªäŸ
㯠ãã¡ãã§ãã ãã ãã次ã®2ã€ã®çç±ã§ãã®ã¢ãããŒãã䜿çšããŸããã§ããã
- ãã£ã©ã¯ã¿ãŒã®åãã¯ããã°ã«èšé²ããå¿
èŠã®ãªãå€æ°ã®ããŠã¹ã¯ãªãã¯ã«é¢é£ä»ããããŠããŸãã ããã«ãã©ã³ãã ãªã¯ãªãã¯ãå¯èœã§ãã ããšãã«ãã¬ãããåé¢ããããã®ããžãã¯ãèšè¿°ããå¿
èŠããããŸãã
- ããã¯ã䜿çšãããšããç¹å¥ãªãµãŒãã¹ãã®æ³šç®ãéããå¯èœæ§ãé«ããªããŸãã ããã«ã€ããŠã¯ãããããã«å¯Ÿæãããã»ã¯ã·ã§ã³ã§è©³ãã説æããŸãã
ãããã£ãŠãæ¢ã«ãæ°ä»ãã®ããã«ãã
[ ãããã³ã
] ããã¿ã³ã䜿çšããå¿
èŠã«å¿ããŠããããæŒããã ãã§ãã äž»ãªããšã¯ãããããã¯ãªãã¯ããããšãå¿ããªãããšã§ãã
座æšèšé²
ãã¡ããã
ã¬ã³ãŒããŒã¯ããã¯ã°ã©ãŠã³ãã§ãã£ã©ã¯ã¿ãŒã®åããèšé²ããå¿
èŠããããŸã
$hfile = FileOpen("output.txt", 1) $prev = "" While true WinWaitActive($hwnd) local $pos = GetPos() $command = StringFormat("move %.3f %.3f %.3f", $pos[0], $pos[1], $pos[2]); if $pos[0] + $pos[1] > 0 And $command <> $prev Then FileWriteLine($hfile, $command) EndIf $prev = $command Sleep(100) WEnd
ãªãé »ç¹ã«ïŒ1ç§ã«10åïŒåº§æšãèšé²ããã®ããšå°ããããšãã§ããŸããïŒ äºå®ãç§ãã¡ã®ã«ãŒãã«ã¯é害ç©ããããŸãïŒç®±ãè§ãæžå£ãè¡ç¯æ±ã
çæã§ãã ãããŠããã£ã©ã¯ã¿ãŒã¯åã«åœŒãã«ãç£åãããŸãã ã©ãããéãéããŠã圌ãç«ã¡åŸçããå Žåã圌ã¯ééããªããããè¡ããŸãã é·ãéçŽç·ã§èµ°ã£ãŠãããšããŠããåãã®æ¹äœè§ã¯å®ç§ã«èšå®ãããŠããªãã£ãã®ã§ãé¡ã«å£ãåœãŠãŠé·æéèµ°ã£ãŠããå¯èœæ§ããããŸãã
å®å
šãªã¬ã³ãŒããŒãœãŒã¹ã³ãŒã #include <Color.au3> Global $WinName = "World of Warcraft" Opt("PixelCoordMode", 2) ; Opt("MouseCoordMode", 2) ; $paused = false HotKeySet("{F11}", "Pause") HotKeySet("{F10}", "Kill") local $keys = StringSplit("` [ ] 1 2 3 4 5 6 7 8 9 0 !1 !2 !3 !4 !5 !6 !7 !8 !9 !0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +f {SPACE} {TAB} {ESC} {PAUSE} {DELETE} {BACKSPACE}", " ", 2) for $i = 0 to UBound($keys)-1 HotKeySet($keys[$i], "OnHotKey") Next $hwnd = WinGetHandle($WinName) $hfile = FileOpen("output.txt", 1) $prev = "" While true WinWaitActive($hwnd) local $pos = GetPos() $command = StringFormat("move %.3f %.3f %.3f", $pos[0], $pos[1], $pos[2]); if $pos[0] + $pos[1] > 0 And $command <> $prev Then FileWriteLine($hfile, $command) EndIf $prev = $command Sleep(100) WEnd Func Pause() $Paused = NOT $Paused While $Paused Sleep(100) WEnd EndFunc Func Kill() FileClose($hfile) Exit EndFunc Func GetPitch() $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd)); Return ($pixel2[2]/255.0-0.5)*4 EndFunc Func GetPos() $pixel1 = _ColorGetRGB(PixelGetColor(0, 0, $hwnd)); $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd)); local $result[3] = [ ($pixel1[0]+$pixel1[1]/255.0)/255*100, ($pixel2[0]+$pixel2[1]/255.0)/255*100, $pixel1[2]*7.0/255 ] return $result EndFunc Func OnHotKey() ;ToolTip(@HotKeyPressed) HotKeySet(@HotKeyPressed) Send(@HotKeyPressed) HotKeySet(@HotKeyPressed, "OnHotKey") Switch @HotKeyPressed Case "[" FileWriteLine($hfile, "mouse left " & MouseGetPos(0) & " " & MouseGetPos(1)) Case "]" FileWriteLine($hfile, "mouse right " & MouseGetPos(0) & " " & MouseGetPos(1)) Case "{PAUSE}" FileWriteLine($hfile, "pause 1000") Case "{BACKSPACE}" FileWriteLine($hfile, StringFormat("pitch %.2f", GetPitch())) Case Else FileWriteLine($hfile, "key " & @HotKeyPressed) EndSwitch EndFunc
Au3record
AutoIt3 \ Extras \ Au3Record \ Au3Record.exeã¯SciTE4AutoIt3ã«ä»å±ããŠããããã¹ã¯ãããã§ã¢ã¯ã·ã§ã³ãèšé²ãã
AutoItã¹ã¯ãªãããšããŠããã«äœæã§ããŸãã èããã«äžé£ã®ãã·ã³ã¢ã¯ã·ã§ã³ãäœåºŠãå®è¡ããå¿
èŠãããå ŽåïŒããšãã°ãå€æ°ã®ã³ã³ãã¥ãŒã¿ãŒã«ãœãããŠã§ã¢ãŸãã¯ããããã€ã³ã¹ããŒã«ããå ŽåïŒããã®ããŒã«ãã芧ãã ããã
ãã¬ã€ã€ãŒ
åã®ç« ã§èª¬æãã
Recorderã®äœæ¥ã®çµæã¯ã次ã®åœ¢åŒã®ã³ãã³ãã»ããã§ããããšã«æ³šæããŠãã ããã
ããŠã¹å·Š1892 1021
äžæåæ¢10000
ããã-0.89
ããŠã¹å³942 498
äžæåæ¢10000
移å83.72 50.03 0.604
ã㌠`
äžæåæ¢1000
ããŒ{SPACE}
ããã-0.1
移å83.777 50.207 1.235
移å83.777 50.207 2.114
移å83.777 50.207 2.827
移å83.777 50.207 2.855
移å83.754 50.327 2.855
äžèŠãããããã倱ããããšã¯é£ããããšã§ã¯ãªãããã§ããããã®ããã»ã¹ã詳ããèŠãŠã¿ãŸãããã
ãã³ãšãã«ã
ãã¿ã³ãæŒããŠå転ããã³åŸæããããšãçŽ30床ã®ç²ŸåºŠãåŸãããŸãããããã¯ã¿ã¹ã¯ã§ã¯åãå
¥ããããŸããã ãããã£ãŠããã®ããã«2çªç®ã®æ©äŒã䜿çšããŸãïŒå³ãã¿ã³ãæŒãããŸãŸããŠã¹ã移åããŸãã ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- ããŠã¹ã®å³ãã¿ã³ãæŒãããŸãŸã«ãã
- ã²ãŒã èªäœã¯ãç»é¢ã®äžå€®ã«ã«ãŒãœã«ã眮ããããã«ä¿æããŸãã ããã«ããããŠãŒã¶ãŒã¯ãç»é¢ã®ç«¯ã«ã«ãŒãœã«ã眮ããŠæåŸã«äŒãŸãªãããã«ãªããŸãã
- ã«ãŒãœã«ãç¹å®ã®ãã¯ã»ã«æ°ã ãå·Šå³ã«ç§»åããŸã
- ãã£ã©ã¯ã¿ãŒã®æ¹åã¯å·ŠãŸãã¯å³ã«ã·ããããŸãã ããã«ãã«ãŒãœã«ãéãåããã»ã©ããã£ã©ã¯ã¿ãŒã¯éãå転ããŸã
çŸåšãšå¿
é ã®2ã€ã®è§åºŠãããå Žåãã©ã®æ¹åãããåçæ§ãé«ãããå€æããã®ã¯ã©ã®ããã«ç°¡åã§ããïŒ

æ£ã®å Žåã¯ãè§åºŠã®éããå³ã«èŠãããšãã§ããŸãã ãã ããçŸåšã®è§åºŠã¯30床ãå¿
èŠãªè§åºŠã¯330床ã§ãã éãã¯ãã€ãã¹ã§ãããç§ãã¡ã¯æ°ã«ããŸããã ãŸããè§åºŠã¯è² ã®å€ã«ããããšãã§ããŸãã ããããã¹ãŠã®æ¡ä»¶ãæžãåºãå¿
èŠããªãããã«ãåã«è§åºŠã®å·®ã®ãµã€ã³ã䜿çšããŠããã®ãµã€ã³ã®ã¿ã調ã¹ãŸãã
$ wantããã³
$ currentå€æ°ã«ã¯
ïŒxãyãazimuthïŒãå«ãŸããŸã
Func Turn($want) while true $current = GetPos() $sin = sin($current[2] - $want[2]) ;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f,%.2f)", $current[0], $current[1], $sin, $want[0], $want[1], $want[2])) if abs($sin) < 0.05 then return MouseMove(MouseGetPos(0)+50*$sin, MouseGetPos(1), 1) wend EndFunc
ãµã€ã³ã«ãããå転é床ã調æŽããããšãã§ããŸãã è§åºŠãå°ããã»ã©ãã«ãŒãœã«ã¯ããæ£ç¢ºã«åããããæ£ç¢ºã«å転ããŸãã éããŸãç¶ãã§ã倧ããªè§åºŠã§ã¯ããéãå転ãããã
æ°Žå¹³ç·ãžã®åŸããå€æŽããæ©èœã¯å®å
šã«é¡äŒŒããŠãããã«ãŒãœã«ãåçŽã«ç§»åããå¿
èŠãããã ãã§ãã
äžèšã®ã³ãŒãäŸã§ã¯ãäžæ£ãªãããã®åäœã«ã€ãªããå¯èœæ§ã®ããè«çãšã©ãŒããããŸãã ç§ã¯å¥œå¥å¿ã®åŒ·ãèªè
ã«ãããèªåã§èŠã€ããããã«å§ããŸãã
ã ãŒãã¡ã³ã
次ã®èŠä»¶ããã©ãã£ãã¯ã«é©çšãããŸã
- äœçœ®æ±ºã粟床ãäœãã ããªããæãå Žæã«æ£ç¢ºã«å°éããããšã¯ã§ããŸãã
- æ¹å転æããã«ç§»åããå¿
èŠããããŸãã å©çšå¯èœãªåãã®ãã¡ãåæ¹ãžã®èµ°è¡ãåŸæ¹ãžã®åŸéãããã³æšªè¡ã®ã¿ããããŸãïŒæåããã«æšªåãã®åãïŒ
- åãã¯ãåæ¢ãŸãã¯ãããããªãã§é£ç¶çã§ãªããã°ãªããŸãã
- ã§ããã ãå°ãªããªã¿ãŒã³ãšæ¹åã®å€æŽã ãã£ã©ã¯ã¿ãŒãå°ãèµ°ã£ãŠããåŸéããåã³èµ°ã£ãå Žåãªã©ãã¢ãã¿ãŒãèŠãã®ã¯äžå¿«ã§ã
åæ¹ãåŸæ¹ãïŒ
æ°åŠã奜ãã§ã¯ãªãããŸãã¯é«æ ¡ãé·ãéåæ¥ããŠããªãå Žåã¯ãç解ãæãªãããšãªããã®ã»ã¯ã·ã§ã³ãã¹ãããã§ããŸãã ããããããã§ã¯ç¹ã«è€éãªããšã¯ãããŸããã ãã£ã©ã¯ã¿ãŒã
ïŒa x ãa y ïŒã®äžã«ç«ã£ãŠãè§åºŠãèŠãŠã¿ãŸããã

ãããŠã圌ã¯
ïŒb x ãb y ïŒã«å
¥ãå¿
èŠããããŸãã圌ã¯åæ¹ãŸãã¯åŸæ¹ã«èµ°ããŸããïŒ ãŸããã¿ã¹ã¯ããããã«èšãæããŸãããã£ã©ã¯ã¿ãŒã
ïŒ0ã0ïŒã«ç«ã£ãŠã

ãããã
ïŒd x ãd y ïŒã§åœŒãå¿
èŠãšããŸãã

åé¡ãçæ£é¢ãã解決ããå Žåããã¯ãã«éã®è§åºŠã®äœåŒŠãèšç®ããå¿
èŠããããŸãã æ£ã®å Žåãè§åºŠã¯éããåæ¹ã«é²ã¿ãŸãã è² ã®å Žå-æããããªãã¯åŸéããå¿
èŠããããŸãã ã³ãµã€ã³
ã¯ã³ãµã€ã³å®çã«ãã£ãŠèšç®ã§ããŸã

ãã ãããã®ããã«ã¯ãåãã¯ãã«ã®é·ããèšç®ããæ ¹ãæœåºããå¿
èŠããããéåžžã«é¢åã§ãã
ã¹ã«ã©ãŒç©å
¬åŒããããŸã
ãåç¥ã®ããã«ããã«ã«ã座æšç³»ã§ã¯æ¬¡ã®åŒã§èšç®ã§ããŸã

ãããã£ãŠãã¹ã«ã©ãŒç©ãèšç®ããŠãã®ç¬Šå·ã調ã¹ãåŸãåæ¹ã«å®è¡ãããåŸæ¹ã«å®è¡ãããã決å®ã§ããŸãã ãããŠãç§ãã¡ã®å Žåã次ã®åŒã§èšç®ããŸã

ã ããã«ããã®åãã¹ã«ã©ãŒç©ã¯ã
幟äœåŠçå®çŸ© ïŒãããã¯ãã«ã®å¥ã®ãã¯ãã«ãžã®æ圱ã«2çªç®ã®ãã¯ãã«ã®é·ããæãããã®ïŒã«å¿ããŠæ£ç¢ºã«ã©ãã ãåé²ãŸãã¯åŸéããå¿
èŠããããã瀺ããŠããŸãã

å·Šãå³ã
åæ§ã«ããã¥ãŒãã¯ãã«éã®è§åºŠã®ãµã€ã³

ãããŠã¿ãŒã²ãããžã®æ¹å
ïŒd x ãd y ïŒã¯ã©ã¡ãã®åŽã«è¡ããã決å®ããŸãã æ£ã®å Žåãç®æšã¯å³æã«ããããã®éãåæ§ã§ãã ããã§ã
ãã¯ãã«ç©ã¯ãããæ£ç¢ºã«ã¯ãåŒã«ãã£ãŠãã«ã«ã座æšã§èšç®ããã
æ¬äŒŒã¹ã«ã©ãŒç©ã«åœ¹ç«ã¡ãŸãã

ç¹°ãè¿ããŸããããã®æ°å€ã®å€§ããã«ãã£ãŠãå¿
èŠãªãµã€ãã¹ãããã®æ°ã決ãŸããŸãã
å®è£
æšè«ãããã°ã©ã ããŸã
Func ScalarMult($a, $b, $x, $y) return $a*$x + $b*$y EndFunc Func VectorMult($a, $b, $x, $y) return $a*$y - $b*$x EndFunc Func GetDirection($x, $y, $wx, $wy, $angle) $dx = $x - $wx $dy = $y - $wy local $result[2] = [ ScalarMult(-sin($angle), -cos($angle), $dx, $dy), VectorMult(-sin($angle), -cos($angle), $dx, $dy) ] Return $result EndFunc
ããã°ã©ã å
ã§ãµã€ã³ãšã³ãµã€ã³ãå
¥ãæ¿ãããå察ã®ç¬Šå·ã§ãšãããŠããããšãæ··åããªãã§ãã ããã WoWã§ã¯ãæ¹äœè§ã¯åããåæèšåãã«ã«ãŠã³ããããŸãã ãããã®è©³çŽ°ã¯ãå®éã®ããã°ã©ã ã§åçŽã«ãè©Šããããšãã§ããŸãã ãããŠããããéã«ãªã£ãå Žåãæšèã§éãã§ãã ããã
GetDirectionïŒïŒé¢æ°ã¯ã次ã®2ã€ã®å€ã®é
åãè¿ããŸãïŒã©ãã ãåé²/åŸéããããã©ãã ã暪ã«ç§»åãããã
ããã¯ã²ããã§ãïŒ
äžéšã®èªè
ã¯æ¬¡ã®ããã«å«ã¶ãããããŸãããããªãããããã®æ£åŒŠ-äœåŒŠã«ããä¹ç®
ã¯ã座æšç³»ã®éåžžã®
å転ã«ãããªãã

説æãã

ãªãç§ãã¡ã®é ãã ãŸãããã
確ãã«ããããããããªãã¯ã¹ããã®ãããªãã®ã§ããçç±ã説æããããšã¯ç§ã«ãšã£ãŠããé£ããã§ãããã
ãããŠ
ããã§å®è¡ãã¿ã³ãæŒãæºåãã§ããŸãã
Func Move($want) while true StartMoving() local $pos = GetPos() local $dir = GetDirection($pos[0], $pos[1], $want[0], $want[1], $pos[2]) ;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f, %.2f): (%.2f,%.2f)", $pos[0], $pos[1], $pos[2], $want[0], $want[1], $want[2], $dir[0], $dir[1])) if abs($dir[0]) < 0.1 And abs($dir[1]) < 0.1 then ExitLoop if abs($dir[0]) >= abs($dir[1]) Then Send("{a up}{d up}") if $dir[0] <=0 Then Send("{w down}{s up}") ; forward Else Send("{s down}{w up}") ; backward EndIf Else Send("{s up}") if $dir[1] < 0 Then Send("{d down}{a up}") ; right Else Send("{a down}{d up}") ; left EndIf EndIf wend Send("{s up}{a up}{d up}") EndFunc
ç§ãã¡ã¯æãé ãã«è¡ãæ¹åã«é²ãã§ãããç§ãã¡ãã»ãšãã©ããã«ãããšãã«ãã¹ãçµäºããããšã«æ³šæããŠãã ããã ããã«ããããã£ã©ã¯ã¿ãŒãã¡ãã€ããŸããã 転éãã¿ã³ã¯ãå®å
ã«å°éããŠããªãªãŒã¹ãããŸããã ãããã£ãŠãå¿
èŠãªè§åºŠã§æ¯èŒçè¿
éã«æåããå¿
èŠããããŸãã
ã³ãã³ããã¡ã€ã«ã®åçãæ
åœããã³ãŒãã¯ãèå³æ·±ããã®ã§ã¯ãããŸãããå¿
èŠã«å¿ããŠãèªåã§æ
£ããããšãã§ããŸãã
ãã¬ãŒã€ãŒã®å®å
šãªãœãŒã¹ã³ãŒã #include <Color.au3> Global $WinName = "World of Warcraft" Opt("PixelCoordMode", 2) ; Opt("MouseCoordMode", 2) ; $paused = false $moving = false HotKeySet("{F11}", "Pause") HotKeySet("{F10}", "Kill") ;WinActivate($WinName) $hwnd = WinGetHandle($WinName) WinWaitActive($hwnd) PlayFile("outdoor.txt", 0) PlayFile("indoor.txt", 0) PlayFile("outdoor.txt", 0) PlayFile("indoor.txt", 0) PlayFile("outdoor.txt", 0) PlayFile("indoor.txt", 0) PlayFile("outdoor.txt", 0) PlayFile("indoor.txt", 0) PlayFile("outdoor.txt", 0) PlayFile("indoor.txt", 0) Func PlayLine($line) local $command = StringSplit($line, " ", 2) ;ToolTip(StringFormat("%s %s %s", $command[0], $command[1], $command[2])) Switch $command[0] Case "move" local $want[3] = [ number($command[1]), number($command[2]), number($command[3]) ] Move($want) Turn($want) Case "pause" StopMoving() Sleep($command[1]) Case "key" If $command[1] = "{SPACE}" Then Send("{SPACE down}") Sleep(300) Send("{SPACE up}") Else StopMoving() if UBound($command) > 2 Then Send($command[1] & " " & $command[2]) Else Send($command[1]) EndIf Sleep(1500) EndIf Case "mouse" StopMoving() MouseClick($command[1], $command[2], $command[3]) Sleep(500) Case "pitch" SetPitch($command[1]) EndSwitch EndFunc Func PlayFile($filename, $skip = 0) $hfile = FileOpen($filename, 0) For $i = 1 to $skip $line = FileReadLine($hfile) Next while True $line = FileReadLine($hfile) if @error = -1 Then ExitLoop PlayLine($line) wend FileClose($hfile) StopMoving() EndFunc Func Sign($x) if ($x < 0) then return -1 else return 1 EndIf EndFunc Func ScalarMult($a, $b, $x, $y) return $a*$x + $b*$y EndFunc Func VectorMult($a, $b, $x, $y) return $a*$y - $b*$x EndFunc Func StartMoving() if $moving then return $moving = true; WinWaitActive($hwnd) MouseMove(@DesktopWidth/2, @DesktopHeight/2, 0) MouseDown("right") Sleep(300) EndFunc Func StopMoving() $moving = false Send("{w up}{s up}{a up}{d up}") MouseUp("right") Sleep(300) EndFunc Func GetPitch() StartMoving() $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd)); Return ($pixel2[2]/255.0-0.5)*4 EndFunc Func GetPos() StartMoving() $pixel1 = _ColorGetRGB(PixelGetColor(0, 0, $hwnd)); $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd)); local $result[3] = [ ($pixel1[0]+$pixel1[1]/255.0)/255*100, ($pixel2[0]+$pixel2[1]/255.0)/255*100, $pixel1[2]*7.0/255 ] return $result EndFunc Func GetDirection($x, $y, $wx, $wy, $angle) $dx = $x - $wx $dy = $y - $wy local $result[2] = [ ScalarMult(-sin($angle), -cos($angle), $dx, $dy), VectorMult(-sin($angle), -cos($angle), $dx, $dy) ] Return $result EndFunc Func Move($want) while true local $pos = GetPos() local $dir = GetDirection($pos[0], $pos[1], $want[0], $want[1], $pos[2]) ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f, %.2f): (%.2f,%.2f)", $pos[0], $pos[1], $pos[2], $want[0], $want[1], $want[2], $dir[0], $dir[1])) if abs($dir[0]) < 0.1 And abs($dir[1]) < 0.1 then ExitLoop if abs($dir[0]) >= abs($dir[1]) Then Send("{a up}{d up}") if $dir[0] <=0 Then Send("{w down}{s up}") ; forward Else Send("{s down}{w up}") ; backward EndIf Else Send("{s up}") if $dir[1] < 0 Then Send("{d down}{a up}") ; right Else Send("{a down}{d up}") ; left EndIf EndIf wend Send("{s up}{a up}{d up}") EndFunc Func Turn($want) while true local $current = GetPos() $sin = sin($current[2] - $want[2]) ;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f,%.2f)", $current[0], $current[1], $sin, $want[0], $want[1], $want[2])) if abs($sin) < 0.05 then return MouseMove(MouseGetPos(0)+50*$sin, MouseGetPos(1), 1) wend EndFunc Func SetPitch($want) while true $current = GetPitch() $sin = sin($current - $want) ;ToolTip(StringFormat("pitch %.2f to %.2f: %.2f", $current, $want, $sin)) if abs($sin) < 0.05 then return MouseMove(MouseGetPos(0), MouseGetPos(1)+50*$sin, 1) wend EndFunc Func Pause() $paused = not $paused if $paused then StopMoving() While $Paused Sleep(1000) WEnd EndFunc Func Kill() StopMoving() Exit EndFunc
管çïŒroïŒããã

ããããã¹ãŠã®ããã§ãã ã«ãŒãã«æ²¿ã£ãŠå®è¡ãã座æšãããŒã¹ãããŒã¯ãã¯ãªãã¯ãæžãçããåçãæå¹ã«ããŸãã ããããããã«ãããŸããã ãããæãé£ããéšåã®å§ãŸãã§ãã
Mobã¯ãã³ãžã§ã³ã«äœãã§ããŸã
ãMobã¯ãã£ã©ã¯ã¿ãŒã®ç掻ã«è
åšãäžããŸããããæ°çµ¶ããããæ²é»ããæãã殺ããããšãã«èã«éããæãã€ããç¬éã«å®¹èµŠãªãé§ãã€ããŸããå®å
šã«ç°ãªãæŽåŸãã¿ãŒã²ããã«æã¡èŸŒã¿ãŸãã ã¿ãŒã²ãããèäžã®åŸããèµ°ãå Žåãããã°ãäžæã§æ»ã¬å ŽåããããŸããã3åçããã¯ãã§ãã äžè¬ã«ããããã®æ··oticãšããæ¯ãèãã¯ç§ãã¡ã®ã«ãŒãã«ã©ã³ãã æ§ã®é¡èãªèŠçŽ ãå°å
¥ãããã®çµæããã£ã©ã¯ã¿ãŒã¯æåã«èª°ãã殺ãããšãã§ããªãã£ããšããçç±ã ãã§ãã«ãŒãã®æåŸã®ããã¯ããããã¢ã«ããå¯èœæ§ããããŸãã
ã¯ããã²ãŒã å
ã®ãã¯ããäœæããŠç®çã®Mobãã¿ãŒã²ããã«ããããã«ãã£ãŠããã€ãã®åé¡ãåãé€ãããšãã§ããŸããããããããå¯èœãªéãæ±çšçã«ãããã£ãã®ã§ãã
æ Œåãã¢ã éãã«ã¯ããããã¯ãªãã¯ããå¿
èŠããããŸãã ãããŠããããã¯æ Œåã§ããããã誀ã£ãŠç©Žã«åªããã¯ãªãã¯ããããšãã§ããŸãã ãããŠãã£ã©ã¯ã¿ãŒã¯ãããã«èµ°ãããšããŠé¡ããã¢ã«ã¶ã€ããŸãã
ãããã£ãŠãã«ãŒããèšé²ããããããŒãããã¯ã§éããŠãããã°ããŸãã ããªãã¯ãã£ã©ã¯ã¿ãŒã芳å¯ããåé¡ãèµ·ããããåé¡ã®å Žåãã«ãŒãã«ãæŸèæãé転ãããŸãïŒå¿ å®åºŠã®ããã«è¿œå ã®åªæãæ¿å
¥ãïŒçªç¶æŽåŸãçãæ®ããŸãïŒãæ©ããããšããé¡æã«é¢ä¿ãªããæŽåŸãæ£ç¢ºã«èŠããŠå°éãããã€ã³ãã«å°éããŸãã ããªãã¯ã«ãŒããå€ããã®ã§ãããªãã¯ç¢ºãã«ãã®äžéãªç®±ã«ã€ãŸãããªãããšã¯ãããŸããã 10ã¬ãŒã¹åŸãããã§çªç¶ãã¹ãŠã®ã¯ã¢ã殺ããæ¹ããåŸã®10åã®1ã§çªç¶ã®åªæã§ãªãã³ãžã§ããããã«ãªããããè¯ããšããçµè«ã«éããŸããã ãããããã£ã©ã¯ã¿ãŒããã§ã«èªåã§èµ°ã£ãŠãããšãã¯ãèªåã®è¶³ã§èµ°ãã®ã§ã¯ãªãããã èŠããã ãã§ãã
ããŒããŒãèµ·åããããããããæé€æ©ãããã°ã©ã ããããçã£æéã®äžã§ã¢ããŒããæ©ãåã£ãããããããã«ãµãã«ãŒãæããããšã®æ°æã¡ãå®æããŸããã äœè£ãæã£ãŠãã¹ãŠã確å®ã«è¡ãå¿
èŠããããŸãã ç«æã§ã¯ãç©Žãããããšããã«ãããçªåºãã岩ãæŽçªããããŸãã ã¢ããŒãã§ã¯ãã©ãã§ãã¯ã€ã€ãŒãšã¹ãªãããããããæé€æ©ã«çŽé¢ããŸãããŸããéã³ããç«ãããŸãã çã£æéã§ã¯ãè§ãæ€
åã®è¶³ãããã«ã¯åºã«èœã¡ããã€ãããããŸãã ã¿ããããã ãïŒ
ç§ã¯èªããŸããç§ã¯æåŸã®éšåã§è¿°ã¹ãããæå°éã®ããã°ã©ã ã ããå®è¡ããŸããã ãããã¯ãŸã 1ïŒ
ã®ç¢ºçã§ã¿ã¹ã¯ãå®äºããªãå ŽåããããŸãã ã§ããããããªãã¯å€ã«åœŒãã³ã³ãããŒã«ããããšãªãé¢ããããšãã§ããŸããã圌ã¯ç«ã¡åŸçããŸãã
ãããã«å¯Ÿæãã
MMORPGã²ãŒã ããé ãé¢ãã人ã
ã¯ãããªããããã«ç
©ããããã®ã§ããïŒ çµå±ã®ãšãããèªååã¯ã©ãã§ãæè¿ãããŠããŸãã å
šå¡
ãåããæ¯æãå Žåãæ©äŒã¯çãããªããã°ãªããŸããã ãã以å€ã®å Žåã䟵害ãããéšåã¯æ°åã害ããåçãåæ¢ããŸãã ããšãã°ãã²ãŒã ã§ãã¯ãã䜿çšã§ããå Žåãããã°ã©ããŒã¯ããããç解ããã¹ãã§ã¯ãããŸããã ãããã£ãŠãã²ãŒã éçºè
ã¯ãã©ã€ã»ã³ã¹å¥çŽãšã¢ãã¿ãŒã®ã¬ãã«ã§ã®èªååã®äœ¿çšãçŠæ¢ããŠããŸãã
ç§ã¯ãã
Blizzard ïŒããã¯WoWã®éçºè
ïŒã®ç£èŠãäžååã§ããããããã¯ã©ãã«ã§ããããšããæåã«äŒããŸããã ãŸããç§ã¯ããã¯æããªãã圌ãã®ã·ã§ã¢ã¯èªåŒµãããŠãããšæãã ãããŠæ¬¡ã«ãéçºè
ã®å
µåšåº«ã«ãããã®ã«ã€ããŠè°è«ããŸãããã ããããèªèããã ãã§ãªããè£ä»ããšãªãäºå®ãã©ã®ããã«æã€ãã å®éãçæã«åºã¥ããŠããã¬ãŒã€ãŒãçŠæ¢ããããšã¯ç¡ç€Œã§ãã
,
- ( ) . , «» , : , , ( ), , â . , , , , «».
Blizzard Warden .
:
- - , -
- , ,
, -
Wine .
Blizzard .
, , :
- , ,
- -
ban-wave .
AutoIt , , «» .
Blizzard , , .
ãããã«
:
- ,
, , . 20 ( 5 ). , , . . , ,
, - .
, , . ããã°ã£ãŠã