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
Revision as of 05:08, 24 October 2010 by Takhetu (talk | contribs)
Jump to navigationJump to search
Loop 5
{
	FirstStone := A_Index
	NumToRun1 := 6-A_Index
	;Select Stone A_Index (code) (shortcut A)
	Loop, %NumToRun%
	{
		SecondStone := FirstStone+A_Index
		NuumToRun2 := 5-A_Index 
		;Select Stone B_Index (code) (shortcut A)
		Loop, %NumToRun2%
		[
			ThirdStone := SecondStone+A_Index
			;Select Stone B_Index (code) (shortcut S)
			;Check if popup opened and close it
		}
	}
}
;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