The Wiki for Tale 5 is in read-only mode and is available for archival and reference purposes only. Please visit the current Tale 11 Wiki in the meantime.
If you have any issues with this Wiki, please post in #wiki-editing on Discord or contact Brad in-game.
Code
From ATITD5
Jump to navigationJump to searchLoop 5 { FirstStone := A_Index NumToRun1 := 6-A_Index Loop, %NumToRun% { SecondStone := FirstStone+A_Index NuumToRun2 := 5-A_Index Loop, %NumToRun2% [ ThirdStone := SecondStone+A_Index ;cegaiel's code MouseMove, MineX%FirstStone%, MineY%FirstStone% Sleep 100 Send {A} Sleep 100 MouseMove, MineX%SecondStone%, MineY%SecondStone% Sleep 100 Send {A} Sleep 100 MouseMove, MineX%A_Index%, MineY%A_Index% Sleep 100 Send {A} Sleep 100 Send {S} Sleep 100 Gosub, Popup } } }
;Ctrl+R to reload ;Ctrl+P to pause IfWinExist eGenesis Client { WinGet, GameWinHandle, ID, eGenesis Client } else { Msgbox, eGenesis client not running, exiting... Exit } ;~ Info WinActivate, eGenesis Client WinGetActiveStats, win_Title, Xmax, Ymax, win_Xpos, win_Ypos StartXGUI := Xmax+win_Xpos-255 StartYGUI := win_Ypos+35 Gui, +AlwaysOnTop +ToolWindow -Border +Background Gui, Add, Text,,Make sure you have: `n"Right-Click Pins/Unpins a Menu" and `n"Right-Click opens a Menu as Pinned"´`nchecked under options\interface. Gui, Add, Button, x10 y70 gStart, Next » Gui, Add, Button, x200 y5 gClose, Close Gui, Show, X%StartXGUI% Y%StartYGUI% w240 h100, New GUI Window Return Start: Gui, Destroy ;~ Ask for config WinActivate, eGenesis Client WinGetActiveStats, win_Title, Xmax, Ymax, win_Xpos, win_Ypos StartXGUI := Xmax+win_Xpos-255 StartYGUI := win_Ypos+35 Gui, +AlwaysOnTop +ToolWindow -Border +Background Gui, Add, Text,,Type in how many rows and columns `nof kettles you will be working with: Gui, Add, Text, x10 y40, Rows: Gui, Add, Edit,xp+35 yp-4 vnumRows, 1 Gui, Add, Text,xp+20 y40, Columns: Gui, Add, Edit,xp+45 yp-4 vnumColumns, 4 Gui, Add, Button, x10 y70 gNext, Next » Gui, Add, Button, x200 y5 gClose, Close Gui, Show, X%StartXGUI% Y%StartYGUI% w240 h100, New GUI Window Return Next: Gui, submit Gui, Destroy ;Get Top Left Gui, +AlwaysOnTop +ToolWindow -Border +Background Gui, Add, Text,,Using F8F8 camera view make `nsure you can see all kettles. Gui, Add, Text,,Position your mouse over `nthe topleft kettle and press the F2 key. Gui, Add, Button, x200 y5 gClose, Close Gui, Show, X%StartXGUI% Y%StartYGUI% w240 h100, New GUI Window loop { WinActivate eGenesis Client KeyWait, F2, D KeyWait, F2 MouseGetPos, FirstX, FirstY, WinHandle if (WinHandle = GameWinHandle) { Gosub, GotTopLeft } } return GotTopLeft: Gui, Destroy ;Get Bottom Right Gui, +AlwaysOnTop +ToolWindow -Border +Background Gui, Add, Text,,Position your mouse over `nthe bottom right kettle `nand press the F2 key. Gui, Add, Button, x200 y5 gClose, Close Gui, Show, X%StartXGUI% Y%StartYGUI% w240 h100, New GUI Window loop { WinActivate eGenesis Client KeyWait, F2, D KeyWait, F2 MouseGetPos, LastX, LastY, WinHandle if (WinHandle = GameWinHandle) { Gosub, GotBottomRight } } return GotBottomRight: Gui, Destroy ;~ Open Windows ;~ Hands off Gui, +AlwaysOnTop +ToolWindow -Border +Background Gui, Add, Text,vTimeLeft,Leave your mouse alone, `nopening windows in 5 seconds. Gui, Add, Button, x200 y5 gClose, Close Gui, Show, X%StartXGUI% Y%StartYGUI% w240 h100, New GUI Window SmallPause := 5 Loop, %SmallPause% { GuiControl, Text, TimeLeft, Leave your mouse alone, `nopening windows in %SmallPause% seconds. SmallPause -- Sleep 1000 } GuiControl, Text, TimeLeft, Opening Windows Now. WinActivate eGenesis Client ;~ loop through windows to open and arrange topNotFound := true Loop, %numColumns% { curColumn := A_Index openPosX := FirstX+(A_Index-1)*floor((LastX-FirstX)/(numColumns-1)) Loop, %numRows% { openPosY := FirstY+(A_Index-1)*floor((LastY-FirstY)/(numRows-1)) MouseClick,Right,openPosX,openPosY sleep, 200 startSeaX := openPosX+5 finishSeaY := openPosY-200 ;~ If the window size is not known find it If topNotFound { GuiControl, Text, TimeLeft, Verifying Window Height. (0 / 200) Loop, 20 { curStartB := openPosY-(10*A_Index) proBar := 10*A_Index GuiControl, Text, TimeLeft, Verifying Window Height. (%proBar% / 200) curStartT := openPosY-(10*A_Index)-10 PixelSearch,OutX,OutY,%startSeaX%,%curStartT%,%startSeaX%,%curStartB%,0x000000,Fast if ErrorLevel < 1 { break } } GuiControl, Text, TimeLeft, Final Height Check. PixelSearch,OutX,OutY,%startSeaX%,%curStartB%,%startSeaX%,%curStartT%,0x000000 curStartB := openPosY-OutY+3 curStartT := openPosY-OutY-3 topNotFound := false } ;~ Search for black line on top of window GuiControl, Text, TimeLeft, Arranging Row:%A_Index% Column:%curColumn% startSeaYB := openPosY-curStartB startSeaYT := openPosY-curStartT PixelSearch,OutX,OutY,%startSeaX%,%startSeaYT%,%startSeaX%,%startSeaYB%,0x000000,50 arrX := 18+20*(numRows)*(curColumn-1)+20*(A_Index-1) ;~ Drag the window to position MouseClick,Left,%OutX%,%OutY%,,,D sleep 100 MouseMove,%arrX%,50 sleep 300 MouseClick,Left,,,,,U sleep, 100 } } ;~ focus gosub, Focus GuiControl, Text, TimeLeft, Checking Window Width. ;~ Check windWidth PixelSearch,winWX,winWY,18,52,500,52,0x000000,50 baseXofWidth := winWX-18 ;~ Run the kettles GuiControl, Text, TimeLeft, Running The Kettles totalWindows := numColumns*numRows Winactivate allFinished := false ;~ Clear Vector GuiControl, Text, TimeLeft, Clearing Records. Loop, %totalWindows% { ketDone%A_Index% := False } NotReady := True Loop { loop, %totalWindows% { GuiControl, Text, TimeLeft, Checking Kettle: %A_Index% of %totalWindows% focusPos := floor(18+20*(A_Index-1)) focusPosEnd := floor(18+20*(A_Index-1)+baseXofWidth) ;~ Focus Next ;~ Start Kettle ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,316,Potash.png If ErrorLevel<1 { MouseClick, Left, OutX,OutY Sleep, 200 } ;~ Find and click Begin ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,316,Begin.png If ErrorLevel<1 { MouseClick, Left, OutX,OutY Sleep, 200 } ;~ Find and Click Ignite ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,316,Ignite.png If ErrorLevel<1 { MouseClick, Left, OutX,OutY Sleep, 300 } ;~ Find and Click Max centerOfWindowX := floor(Xmax/2) centerOfWindowY := floor(Ymax/2) baseMaxXB := centerOfWindowX-100 baseMaxXE := centerOfWindowX+100 baseMaxYB := centerOfWindowY baseMaxYE := centerOfWindowY+100 ImageSearch, OutX,OutY,0,0,Xmax,Ymax,How.png baseYofMax := OutY+74 baseXofMax := OutX+81 If ErrorLevel<1 { Mousemove,baseXofMax,baseYofMax MouseClick, Left,baseXofMax,baseYofMax sleep, 200 } ;~ Check if completed ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,316,Take.png if ErrorLevel<1 { ketDone%A_Index% := True } ;~ Skip if completed CurrentState := ketDone%A_Index% If CurrentState=False { ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,180,StokeMax.png stokeX := OutX stokeY := OutY ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,280,Water6Wood5.png If ErrorLevel<1 { ketDone%A_Index% := True } else { ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,280,Wood0.png if ErrorLevel<1 { MouseClick, Left, stokeX,stokeY sleep, 100 } else { ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,280,Water6.png if ErrorLevel<1 { MouseClick, Left, stokeX,stokeY sleep, 100 } } } } ;~ Focus Next nextFocus := focusPosEnd+20 if (A_Index<totalWindows) { MouseClick, Left,nextFocus,52 sleep, 100 } } gosub, Focus NotReady := False Loop, %totalWindows% { CurrentState := ketDone%A_Index% If CurrentState=False { GuiControl, Text, TimeLeft, LOOP %A_Index% - NotReady:%NotReady% - `nBAD!! Sleep 5000 NotReady := True } } If (NotReady=False) { Break } } ;~ Take Loop, %totalWindows% { GuiControl, Text, TimeLeft, Taking from Kettle: %A_Index% of %totalWindows% focusPos := floor(18+20*(A_Index-1)) focusPosEnd := floor(18+20*(A_Index-1)+baseXofWidth) ImageSearch, OutX,OutY,focusPos,52,focusPosEnd,316,Take.png if ErrorLevel<1 { MouseClick, Left,OutX,OutY sleep, 100 } nextFocus := focusPosEnd+20 if (A_Index<totalWindows) { MouseClick, Left,nextFocus,52 sleep, 100 } } gosub, Focus ExitApp Focus: GuiControl, Text, TimeLeft, Reversing Order. totalWindows := numColumns*numRows loop, %totalWindows% { focusPos := 18+20*(totalWindows-A_Index) MouseClick, Left,focusPos,50 sleep 100 } return Close: ExitApp ^r::reload ^p::Pause