<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.atitd.org/wiki/t6w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Selune</id>
	<title>ATITD6 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.atitd.org/wiki/t6w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Selune"/>
	<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/tale6/Special:Contributions/Selune"/>
	<updated>2026-04-07T13:40:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=229030</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=229030"/>
		<updated>2013-02-09T21:04:33Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fishing Macro for Testing}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Pin up your Lures menu 'Self Click, Skills, Fishing, Use Lure' (no other pinned up windows can exist)&lt;br /&gt;
-- Should have (Chat-Related): 'Chat and Inventory can be minimized' AND 'Minimized chat-channels are still visible'.&lt;br /&gt;
-- You must have Main Chat tab showing at all times and window is long/wide enough so no lines don't wrap.&lt;br /&gt;
&lt;br /&gt;
-- Yes, this macro reads your MAIN chat screen, so make sure you read the above statement for it to work correctly.&lt;br /&gt;
-- Each line of text must not scroll/wrap to the next line. If it does, then drag your chat window wider so it doesn't wrap.&lt;br /&gt;
-- You want to make your chat very wide. Note: It is possible to see a LONG message like &amp;quot;Though you lost your lure, you did catch a 15 deben Orange Spongefish&amp;quot;&lt;br /&gt;
-- Another long message is &amp;quot;You didn't catch anything. You also lost your lure. Try different lures and locations&amp;quot;&lt;br /&gt;
-- At 1280x1024 your chat screen should reach at least to the mid point of your screen to avoid having a chat line wrap to next line, for a long message, like above.&lt;br /&gt;
-- Higher resolutions may not have to reach quite to the mid point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ********** This macro writes to a log file (Fishlog.txt) for most actions, so you can review later! ******&lt;br /&gt;
-- ********** This also macro writes to a log file (Fishstats.txt) showing stats of your last fishing session, so you can review later! ******&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--You can delete any of the log files if you wish. It will automatically create new ones if they dont exist.&lt;br /&gt;
--The fishlog.txt file gets appended everytime you fish, so the file can grow quite long over time.&lt;br /&gt;
--The fishstats.txt file gets overwritten everytime your gui program window updates, so it doesn't 'grow' over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Main chat tab is not showing&amp;quot; and other errors can usually be overcome by adjusting the main chat window size and restarting, assuming main chat is showing.&lt;br /&gt;
-- And also verify the lines aren't wrapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The very first thing this macro does is to Self Click, Special, What Time is it? option. This will then display the time in main chat window.&lt;br /&gt;
-- The macro then parses time displayed, in main chat tab, so it can use it while the macro runs (Log files and on screen display).&lt;br /&gt;
-- Thats what the mysterious Self Click is doing, its not a bug, it is suppose to do that and thats why, to fetch the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Note: These are currently refered to as Common Fish in the below 'SkipCommon' type of fishes (True or False), in the 'Custom Variables' section.&lt;br /&gt;
&lt;br /&gt;
	--Abdju&lt;br /&gt;
	--Chromis&lt;br /&gt;
	--Catfish&lt;br /&gt;
	--Carp&lt;br /&gt;
	--Perch&lt;br /&gt;
	--Phagrus&lt;br /&gt;
	--Tilapia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--CUSTOM VARIABLES -- EDIT HERE To Change Fishing Casts, Skips, Updates.&lt;br /&gt;
&lt;br /&gt;
TotalCasts=3; --Total Casts per lure, if a fish caught. If no fish then it skips.&lt;br /&gt;
SkipCommon = false; --Skips to next lure if fish caught is a common (Choose True or False).&lt;br /&gt;
LureChangesToUpdateTimer = 7; --Total lures used before time is updated. Zero updates every new lure.&lt;br /&gt;
IgnoreUnknown = false; --Continues the script if fish is not recognized&lt;br /&gt;
&lt;br /&gt;
--AlmostCaughtAttempts = 0; --Adds additional attempts to the current lure if Unusual, Strange fish are seen;&lt;br /&gt;
-- Note: AlmostCaughtAttempts above was already commented out upon arriving to Talescripts.&lt;br /&gt;
-- It is also commented out during the script, so uncommenting above will NOT activate the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Additional reporting in the log file&lt;br /&gt;
-- Choose True or False.&lt;br /&gt;
	-- Note 'LogStrangeUnusual' and 'LogOdd' (below) overrides LogFails setting. ie if LogStrange true, then it would still log even if LogFails = False&lt;br /&gt;
	--If LogFails = false and LogStrangeUnusual or LogOdd = true, then failed catches those would still be included in the log file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LogFails = true;  	-- Do you want to add Failed Catches to log file? 'Failed to catch anything' or 'No fish bit'. Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogStrangeUnusual = true; 	-- Do you want to add Strange and Unusual fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogOdd = true; 	-- Do you want to add Odd fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- END CUSTOM VARIABLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Fishing_Func.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetupLureGroup()&lt;br /&gt;
&lt;br /&gt;
	TLures = {};&lt;br /&gt;
	FirstLure=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLure = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindPin = srFindImage(&amp;quot;UnPin.png&amp;quot;);&lt;br /&gt;
	if FindPin then&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	--Click the pinup to refresh the lures window&lt;br /&gt;
&lt;br /&gt;
	srClickMouseNoMove(FindPin[0]+5,FindPin[1]+30);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		DownPin = srFindImageInRange(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,500);&lt;br /&gt;
		if DownPin then&lt;br /&gt;
			--Just Incase&lt;br /&gt;
			UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
			if UpArrow then&lt;br /&gt;
				srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				srReadScreen();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		--	srClickMouseNoMove(DownPin[0]+5,DownPin[1]+5);&lt;br /&gt;
			LastLure=FindLureName(DownPin[0]-150,DownPin[1]-10,150,25);&lt;br /&gt;
			--error(LastLure);&lt;br /&gt;
			FirstLure = FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
		--	error(FirstLure);&lt;br /&gt;
		else&lt;br /&gt;
			--No Arrows on lure menu?&lt;br /&gt;
			FirstLure=FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
			LastLure=nil;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Didn\'t find Lures pinned window - Self Click-&amp;gt;Skills, Fishing -&amp;gt; Use Lure, PIN THIS WINDOW!&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if  LastLure ~= nil then&lt;br /&gt;
		--We have last lure, and arrows showing&lt;br /&gt;
		ChangeLureMenu = LastLure;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		FirstLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. FirstLure);&lt;br /&gt;
		LastLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. LastLure);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #Lures,1 do&lt;br /&gt;
			test = srFindImageInRange((&amp;quot;fishing/&amp;quot; .. Lures[i]),FirstLurLoc[0]-5,FirstLurLoc[1]-5,175,500);&lt;br /&gt;
&lt;br /&gt;
			if test then&lt;br /&gt;
				--Add Lure&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
				if Lures[i] == LastLure then&lt;br /&gt;
					--End of Menu, Use Down Arrow&lt;br /&gt;
					arrow=srFindImageInRange(&amp;quot;Fishing/menu_downarrow.png&amp;quot;,test[0],test[1]-5,175,50);&lt;br /&gt;
					if arrow then&lt;br /&gt;
						DownArrowLocs = arrow;&lt;br /&gt;
						srClickMouseNoMove(arrow[0]+5,arrow[1]+5);&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
						srReadScreen();&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
					else&lt;br /&gt;
						error(&amp;quot;no arrow found&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				LastLureMenu = Lures[i];&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--Reset Lure Menu&lt;br /&gt;
		UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
		if UpArrow then&lt;br /&gt;
			srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	else&lt;br /&gt;
		--No arrows, just get lures&lt;br /&gt;
		for i = 1, #Lures, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lures[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return TLures;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function FindLureName(x,y,w,h)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #Lures, 1 do &lt;br /&gt;
		Lure = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Lures[i], x,y,w,h);&lt;br /&gt;
		if Lure then&lt;br /&gt;
			return Lures[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GetLure()&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	&lt;br /&gt;
	if CurrentLureIndex == LastLureIndex then&lt;br /&gt;
		-- Use Down Menu&lt;br /&gt;
		srClickMouseNoMove(DownArrowLocs[0]-5,DownArrowLocs[1]-5);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
	if not lure then&lt;br /&gt;
		--Failed to find lure&lt;br /&gt;
		error(&amp;quot;Can\'t find a lure!&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		slure = Lures[PlayersLures[CurrentLureIndex]];&lt;br /&gt;
		slure = string.sub(slure,string.find(slure,&amp;quot;_&amp;quot;)+1,string.len(slure) - 4);&lt;br /&gt;
		--statusScreen(&amp;quot;Using Lure &amp;quot; .. slure);&lt;br /&gt;
		return slure&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UseLure()&lt;br /&gt;
	-- Uses lure according to CurrentLureIndex, which is used in PlayersLures which contains each lure the player has. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if #TLures == 0 then&lt;br /&gt;
	error 'Can\'t find any lures on the pinned window. Did you run out of lures?'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
	if lure then&lt;br /&gt;
		srClickMouseNoMove(lure[0]+3,lure[1]+3);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		-- Find Lure Type&lt;br /&gt;
		for i = 1, #Lure_Types, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lure_Types[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				--Click it!&lt;br /&gt;
				srClickMouseNoMove(test[0]+3,test[1]+3);&lt;br /&gt;
				gui_refresh();&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if PlayersLures[CurrentLureIndex] == ChangeLureMenu then&lt;br /&gt;
		down = srFindImage(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(down[0]+5,down[1]+5);&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	elseif PlayersLures[CurrentLureIndex] == LastLureMenu  then&lt;br /&gt;
		up = srFindImage(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(up[0]+5,up[1]+5);&lt;br /&gt;
		CurrentLureIndex=1;&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ChatReadFish()&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
	&lt;br /&gt;
	-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
	if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Caught Something..  Find Fish Details&lt;br /&gt;
	Sfish = &amp;quot;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, #CL_Fish do&lt;br /&gt;
		ChatFish = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Fish[i],Coords[0] ,Coords[1],500,25);&lt;br /&gt;
		if ChatFish then&lt;br /&gt;
			Sfish = string.sub(CL_Fish[i],string.find(CL_Fish[i],&amp;quot;Fish_&amp;quot;) + 5,string.len(CL_Fish[i]) - 4);&lt;br /&gt;
			GrandTotalCaught = GrandTotalCaught + 1&lt;br /&gt;
			break;&lt;br /&gt;
		end					&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	if  string.len(Sfish) &amp;lt; 1 then&lt;br /&gt;
		-- This fish name and fishname.png file likely needs to be added to Fishing_Func.inc, under the CL_Fish array and the .png added to /Images/Fishing folder&lt;br /&gt;
		if IgnoreUnknown then&lt;br /&gt;
			Sfish = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
			SNum = &amp;quot;1&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Unknown Fish! PLEASE, Take screenshot (Alt+C) of main chat tab, share with Talescripts team!&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--Find Size&lt;br /&gt;
		for i = #CL_Number,1,-1 do&lt;br /&gt;
			ChatSize =  srFindImageInRange(&amp;quot;fishing/&amp;quot; .. CL_Number[i],Coords[0],Coords[1],500,25);&lt;br /&gt;
			if ChatSize then&lt;br /&gt;
				SNum = string.sub(CL_Number[i],string.find(CL_Number[i],&amp;quot;_&amp;quot;) + 1, string.len(CL_Number[i]) - 4);&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		GrandTotaldb = GrandTotaldb + SNum;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return(Sfish .. &amp;quot; (&amp;quot; .. SNum .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function findchat(line)&lt;br /&gt;
	--Reads a chat line and returns a basic string for better processing&lt;br /&gt;
	&lt;br /&gt;
	-- Odd fish means your fly fishing skill is not high enough. Raise it with enormous amounts of fishing.&lt;br /&gt;
	-- Strange fish means you need a better rod to catch the rish. You may succeed on future attempts.&lt;br /&gt;
	-- Unusual fish means your speed skill was not high enough to catch this type of fish. If it is almost enough, you may catch them on future casts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Possible fishing messages&lt;br /&gt;
	--	Caught A (SIZE) Deben (FISH)&lt;br /&gt;
	--	You almost caught a strange fish&lt;br /&gt;
	--		(You almost caught a strange fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an unusual fish&lt;br /&gt;
	--		(You almost caught an unusual fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an odd fish&lt;br /&gt;
	--		(You almost caught an odd fish. You also lost your lure.)&lt;br /&gt;
	--	Although you lost your lure  (Caught a fish)&lt;br /&gt;
	--	Using a (LURE) (TYPE) lure.&lt;br /&gt;
	--	You are carrying more than you can manage.&lt;br /&gt;
	--	You are carrying too much bulk.&lt;br /&gt;
	--	You didn't catch anything.&lt;br /&gt;
	--		(You didn't catch anything. You also lost your lure.)&lt;br /&gt;
	--	No Fish Bit.&lt;br /&gt;
	--		(No Fish Bit. You also lost your lure.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if line and line &amp;gt; 0 then&lt;br /&gt;
		Coords = imgs[(#imgs) - line];&lt;br /&gt;
			if not Coords then&lt;br /&gt;
			error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Find What Happened&lt;br /&gt;
&lt;br /&gt;
	ChatType = &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #Chat_Types -1,2 do&lt;br /&gt;
		test = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Chat_Types[i],Coords[0],Coords[1],500,30);		&lt;br /&gt;
		if test then&lt;br /&gt;
			--Found Chat&lt;br /&gt;
			ChatType = Chat_Types[i + 1];&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	--Break down!&lt;br /&gt;
	if ChatType then&lt;br /&gt;
		--if ChatType == &amp;quot;lure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofishlostlure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofish&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
		return ChatType;&lt;br /&gt;
	else&lt;br /&gt;
		error(ChatType);&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GetTime()&lt;br /&gt;
	--Reads time stamp using special-&amp;gt;what time menu&lt;br /&gt;
	winsize = srGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	--Open Menu, Press the Esc key to open the Self Click menu&lt;br /&gt;
&lt;br /&gt;
	-- Move mouse to center of screen before Sending the Esc key, to get the Self Click menu. We dont want it self clicking near the edge of screen causing an error.&lt;br /&gt;
	srSetMousePos(winsize[0]/2,winsize[1]/2);&lt;br /&gt;
	lsSleep(100);  -- This delay is critical for any srSetMousePos. Without it, the mouse will not have time to actually move!&lt;br /&gt;
&lt;br /&gt;
	srKeyEvent(string.char(27));  -- Send Esc Key&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
	&lt;br /&gt;
	--Find Special Menu&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	menu = srFindImage(&amp;quot;Fishing/Menu_Special.png&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if menu then&lt;br /&gt;
		--Click it!&lt;br /&gt;
		srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
		&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
		-- Look for the What Time Is It? option in menu&lt;br /&gt;
		menu = srFindImage(&amp;quot;Fishing/Menu_WhatTime.png&amp;quot;);&lt;br /&gt;
		if menu then&lt;br /&gt;
			--Click it!&lt;br /&gt;
			srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	for i = #CL_Time, 1, -1 do&lt;br /&gt;
		Stime = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Time[i],Coords[0],Coords[1],400,25);&lt;br /&gt;
		if Stime then&lt;br /&gt;
			Hour = string.sub(CL_Time[i],string.find(CL_Time[i],&amp;quot;ime_&amp;quot;)+4,string.len(CL_Time[i])-4);&lt;br /&gt;
			&lt;br /&gt;
			AM = srFindImageInRange(&amp;quot;Fishing/Chatlog_Time_AM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
			if AM then&lt;br /&gt;
				CurrentTime=(Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
				return (Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				PM = srFindImageInRange(&amp;quot;Fishing/chatlog_time_PM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
				if PM then&lt;br /&gt;
					CurrentTime=(Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
					return (Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gui_refresh()&lt;br /&gt;
	lsDoFrame();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if GrandTotalCaught &amp;lt; 10 then&lt;br /&gt;
	last10 = GrandTotalCaught .. &amp;quot;/10&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	last10 = 10;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Stats (On Screen Display)&lt;br /&gt;
	--CurrentLureIndex  out of  PlayersLures&lt;br /&gt;
	winsize = lsGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	lsPrintWrapped(10, 0, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lure Index: &amp;quot; .. CurrentLureIndex .. &amp;quot; out of &amp;quot; .. #PlayersLures .. &amp;quot;       &amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 20, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Time: &amp;quot; .. CurrentTime);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 40, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Last [&amp;quot; .. last10 .. &amp;quot;] Fish Caught:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Reset this string before showing last 10 fish below. Else the entries will multiply with entries from previous loops/call to this function&lt;br /&gt;
	last10caught = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if #gui_log_fish &amp;gt; 10 then&lt;br /&gt;
		table.remove(gui_log_fish,1);&lt;br /&gt;
	end&lt;br /&gt;
		for i = 1, #gui_log_fish,1 do&lt;br /&gt;
			lsPrintWrapped(10, 50 + (12*i), 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, gui_log_fish[i]);&lt;br /&gt;
			last10caught = last10caught .. gui_log_fish[i] .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-133, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Odd Fish Seen: &amp;quot; .. GrandTotalOdd);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-121, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Unusual Fish Seen: &amp;quot; .. GrandTotalUnusual);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-109, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Strange Fish Seen: &amp;quot; .. GrandTotalStrange);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-97, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-85, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Clicked: &amp;quot; .. GrandTotalLuresUsed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-73, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Lost: &amp;quot; .. GrandTotalLostLures);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-61, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-49, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Total Casts: &amp;quot; .. GrandTotalCasts);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-37, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Failed Catches: &amp;quot; .. GrandTotalFailed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-25, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Fish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Write stats to log file. Everytime the GUI screen is updated, so is the log file.&lt;br /&gt;
&lt;br /&gt;
	WriteFishStats(&amp;quot;Last Session Hour: &amp;quot; .. CurrentTime .. &amp;quot;\n\nOdd Fish Seen: &amp;quot; .. GrandTotalOdd .. &amp;quot;\nUnusual Fish Seen: &amp;quot; .. GrandTotalUnusual .. &amp;quot;\nStrange Fish Seen: &amp;quot; .. GrandTotalStrange .. &amp;quot;\n---------------------\nLures Clicked: &amp;quot; .. GrandTotalLuresUsed .. &amp;quot;\nLures Lost: &amp;quot; .. GrandTotalLostLures .. &amp;quot; \n---------------------\nTotal Casts: &amp;quot; .. GrandTotalCasts .. &amp;quot;\nFailed Catches: &amp;quot; .. GrandTotalFailed .. &amp;quot;\nFish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)\n---------------------\n\nLast 10 Fish Caught:\n\n&amp;quot;.. last10caught);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;MAIN chat tab MUST be showing and wide enough so that each lines doesn't wrap. Pin up Lures Menu (Self, Skills, Fishing, Use Lures). No other pinned menus can exist. More detailed instructions are included inside the script as comments at top. There are options you can set in the script such as how many casts per lure, what gets written to the log file and more! History will be recorded in FishLog.txt and stats in FishStats.txt. Most errors can be fixed by slightly adjusting/moving your chat screen! Press Shift to continue.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Gui_Main();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Variables Used By Program -- Don't Edit Unless you know what you're doing!&lt;br /&gt;
	CurrentLure = &amp;quot;&amp;quot;; --Don't Edit&lt;br /&gt;
	gui_log_fish = {}; --Don't Edit, holds log display&lt;br /&gt;
	log_fish = {};&lt;br /&gt;
	CurrentLureIndex=0; -- 1 = First Lure Player Owns in alphabetical order&lt;br /&gt;
	ChangeLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	DownArrowLocs=nil;&lt;br /&gt;
	PlayersLures={}; --Don't Edit, Holds Current Player Lures&lt;br /&gt;
	CurrentTime=&amp;quot;&amp;quot;; --Don't Edit, Holds Time Check Value&lt;br /&gt;
	TotalLuresUsed = 0;&lt;br /&gt;
	castcount = 0;&lt;br /&gt;
	--strangecounter = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--These variables were later added for displaying additional info on the screen.&lt;br /&gt;
-- Used for the extra reporting/statistics, on screen.&lt;br /&gt;
-- Dont Edit Unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
	GrandTotalCaught = 0;&lt;br /&gt;
	GrandTotalCasts = 0;&lt;br /&gt;
	GrandTotaldb = 0;&lt;br /&gt;
	GrandTotalStrange = 0;&lt;br /&gt;
	GrandTotalOdd = 0;&lt;br /&gt;
	GrandTotalUnusual = 0;&lt;br /&gt;
	GrandTotalLuresUsed = 0;&lt;br /&gt;
	GrandTotalLostLures = 0;&lt;br /&gt;
	GrandTotalFailed = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	PlayersLures = SetupLureGroup();&lt;br /&gt;
	CurrentTime = GetTime();&lt;br /&gt;
	lsSleep(1500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Write an entry into log file to show this is a new session&lt;br /&gt;
	WriteFishLog(&amp;quot;[New Session]\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while 1 do&lt;br /&gt;
		&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		--cast = srFindImage(&amp;quot;Fishing/Button_Fish.png&amp;quot;);&lt;br /&gt;
		cast = srFindImage(&amp;quot;fishicon.png&amp;quot;);&lt;br /&gt;
		if not cast then&lt;br /&gt;
			error(&amp;quot;cannot find fishing button&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if castcount == 0 then&lt;br /&gt;
			--Update counters&lt;br /&gt;
			castcount = 1;&lt;br /&gt;
			CurrentLureIndex = CurrentLureIndex +1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if CurrentLureIndex &amp;gt; #PlayersLures then&lt;br /&gt;
				--Refresh the Lure window, and reindex it, in case some were lost.&lt;br /&gt;
				PlayersLures = SetupLureGroup();&lt;br /&gt;
				CurrentLureIndex = 1;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			--Update the time if ready, always update before new lure to keep chat/log proper&lt;br /&gt;
			if TotalLuresUsed == LureChangesToUpdateTimer then&lt;br /&gt;
				--Update Time&lt;br /&gt;
&lt;br /&gt;
				CurrentTime = GetTime();&lt;br /&gt;
				TotalLuresUsed = 0;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			--Since no casts been made at all, use a lure&lt;br /&gt;
			UseLure();&lt;br /&gt;
			lsSleep(2000);&lt;br /&gt;
			TotalLuresUsed = TotalLuresUsed + 1;&lt;br /&gt;
			GrandTotalLuresUsed = GrandTotalLuresUsed + 1;&lt;br /&gt;
			&lt;br /&gt;
			--update log&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			&lt;br /&gt;
		elseif castcount  &amp;gt; TotalCasts then&lt;br /&gt;
		--	if strangecounter &amp;gt; 0 and strangecounter &amp;lt; AlmostCaughtAttempts then&lt;br /&gt;
				--we don't reset yet!&lt;br /&gt;
		--	else&lt;br /&gt;
				--Reset&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				strangecounter = 0;&lt;br /&gt;
		--	end&lt;br /&gt;
		else&lt;br /&gt;
			--Cast&lt;br /&gt;
			srClickMouseNoMove(cast[0]+3,cast[1]+3);&lt;br /&gt;
			lsSleep(1000);&lt;br /&gt;
			checkBreak();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			while findchat(castcount - 1) == &amp;quot;lure&amp;quot; do&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				checkBreak();&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			castcount = castcount + 1;&lt;br /&gt;
			GrandTotalCasts = GrandTotalCasts + 1;	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--Read Chat&lt;br /&gt;
			ChatType = findchat();&lt;br /&gt;
&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
&lt;br /&gt;
			CurrentLure = string.sub(PlayersLures[CurrentLureIndex],string.find(PlayersLures[CurrentLureIndex],&amp;quot;_&amp;quot;)+1,string.len(PlayersLures[CurrentLureIndex])-4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ChatType == &amp;quot;nobitlostlure&amp;quot; then&lt;br /&gt;
				--No fish bit. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nobit&amp;quot; then&lt;br /&gt;
				--No fishbit&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatchlostlure&amp;quot; then&lt;br /&gt;
				--You didn't catch anything. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatch&amp;quot; then&lt;br /&gt;
				--You didn't catch anything.&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;alreadyfishing&amp;quot; then&lt;br /&gt;
				--castcount = castcount-1;&lt;br /&gt;
				lsSleep(15000); -- Long pause to wait for fishing queue to stop. Somehow it pushed the Fish button twice and now you will cast 2 times in a row. &lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You are already fishing!&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
				--Strange Fish&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
			&lt;br /&gt;
	&lt;br /&gt;
			elseif ChatType == &amp;quot;strangelostlure&amp;quot; then&lt;br /&gt;
				-- Strange Fish and lost lure&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Can't uncomment below elseif statement until we get a screenshot of a message of you were not quick enough. You also lost your lure.&lt;br /&gt;
-- This would need to be added to Fishing_Func.inc , in the Chat_Types {array} along with adding Chatlog_AlmostUnusualLostlure.png). Add above &amp;quot;unusual&amp;quot; line in the array				&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--elseif ChatType == &amp;quot;unusuallostlure&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				--GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				--GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				--GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--if LogStrangeUnusual == true then&lt;br /&gt;
					--WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					--end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;odd&amp;quot; then&lt;br /&gt;
				-- Odd Fish&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogOdd == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;oddlostlure&amp;quot; then&lt;br /&gt;
				-- Odd Fish and lost lure&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;carry&amp;quot; then&lt;br /&gt;
				--chat lines are messed up now&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;caught&amp;quot; or ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
				Fish = ChatReadFish();&lt;br /&gt;
&lt;br /&gt;
				table.insert(gui_log_fish,Fish);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				if ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
					GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Though you lost your lure, you did catch a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					-- This Needs Check for new lure. This will cause a error if not.&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
				else&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Caught a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				--gui_refresh();&lt;br /&gt;
				&lt;br /&gt;
				if SkipCommon == true then&lt;br /&gt;
					FishType = string.sub(Fish,string.find(Fish,&amp;quot;,&amp;quot;) + 1);&lt;br /&gt;
					if FishType == &amp;quot;Abdju&amp;quot; or FishType == &amp;quot;Chromis&amp;quot; or FishType == &amp;quot;Catfish&amp;quot; or FishType == &amp;quot;Carp&amp;quot; or FishType == &amp;quot;Perch&amp;quot; or FishType == &amp;quot;Phagrus&amp;quot; or FishType == &amp;quot;Tilapia&amp;quot; then&lt;br /&gt;
						--Skip it&lt;br /&gt;
						castcount=0;&lt;br /&gt;
&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		gui_refresh();&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	gui_refresh();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=New Raeli Oven Monitor (IN TESTING v3)}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Raeli Color Monitor v1.1c (edit by Selune) --&lt;br /&gt;
  Make sure the Raeli Oven is pinned, select the ATITD window, and press shift.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
stop_at_CB = false;&lt;br /&gt;
take_screenshots = true;&lt;br /&gt;
stop_at_color = &amp;quot;White&amp;quot;;&lt;br /&gt;
confidence_threshold = 15;&lt;br /&gt;
saved_x = 0;&lt;br /&gt;
saved_y = 0;&lt;br /&gt;
go_now = false;&lt;br /&gt;
&lt;br /&gt;
color_names = {&amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;, &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;Burlywood&amp;quot;, &amp;quot;CadetBlue&amp;quot;, &amp;quot;Carrot&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;, &amp;quot;Crimson&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGray&amp;quot;, &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;, &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;, &amp;quot;DarkSlateGray&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;, &amp;quot;DimGray&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;Feldspar&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;, &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Gray&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;, &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;, &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;, &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;, &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateBlue&amp;quot;, &amp;quot;LightSlateGray&amp;quot;, &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Maroon &amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue &amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;, &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;, &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;, &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy &amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;, &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;, &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple &amp;quot;, &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;, &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGray&amp;quot;, &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue &amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;, &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;VioletRed&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot;};&lt;br /&gt;
color_values = {0xF0F8FF, 0xFAEBD7, 0x00FFFF, 0x7FFFD4, 0xF0FFFF, 0xF5F5DC, 0xFFE4C4, 0x000000, 0xFFEBCD, 0x0000FF, 0x8A2BE2, 0xA52A2A, 0xDEB887, 0x5F9EA0, 0xE07020, 0x7FFF00, 0xD2691E, 0xFF7F50, 0x6495ED, 0xFFF8DC, 0xDC143C, 0x00008B, 0x008B8B, 0xB8860B, 0xA9A9A9, 0x006400, 0xBDB76B, 0x8B008B, 0x556B2F, 0xFF8C00, 0x9932CC, 0x8B0000, 0xE9967A, 0x8FBC8F, 0x483D8B, 0x2F4F4F, 0x00CED1, 0x9400D3, 0xFF1493, 0x00BFFF, 0x696969, 0x1E90FF, 0xD19275, 0xB22222, 0xFFFAF0, 0x228B22, 0xFF00FF, 0xDCDCDC, 0xF8F8FF, 0xFFD700, 0xDAA520, 0x808080, 0x008000, 0xADFF2F, 0xF0FFF0, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0xFFFFF0, 0xF0E68C, 0xE6E6FA, 0xFFF0F5, 0x7CFC00, 0xFFFACD, 0xADD8E6, 0xF08080, 0xE0FFFF, 0xFAFAD2, 0x90EE90, 0xD3D3D3, 0xFFB6C1, 0xFFA07A, 0x20B2AA, 0x87CEFA, 0x8470FF, 0x778899, 0xB0C4DE, 0xFFFFE0, 0x00FF00, 0x32CD32, 0xFAF0E6, 0x800000, 0x66CDAA, 0x0000CD, 0xBA55D3, 0x9370DB, 0x3CB371, 0x7B68EE, 0x00FA9A, 0x48D1CC, 0xC71585, 0x191970, 0xF5FFFA, 0xFFE4E1, 0xFFE4B5, 0xFFDEAD, 0x000080, 0xFDF5E6, 0x808000, 0x6B8E23, 0xFFA500, 0xFF4500, 0xDA70D6, 0xEEE8AA, 0x98FB98, 0xAFEEEE, 0xDB7093, 0xFFEFD5, 0xFFDAB9, 0xCD853F, 0xFFC0CB, 0xDDA0DD, 0xB0E0E6, 0x800080, 0xFF0000, 0xBC8F8F, 0x4169E1, 0x8B4513, 0xFA8072, 0xF4A460, 0x2E8B57, 0xFFF5EE, 0xA0522D, 0xC0C0C0, 0x87CEEB, 0x6A5ACD, 0x708090, 0xFFFAFA, 0x00FF7F, 0x4682B4, 0xD2B48C, 0x008080, 0xD8BFD8, 0xFF6347, 0x40E0D0, 0xEE82EE, 0xD02090, 0xF5DEB3, 0xFFFFFF, 0xF5F5F5, 0xFFFF00, 0x9ACD32};&lt;br /&gt;
&lt;br /&gt;
-- Decimal to Hex conversion&lt;br /&gt;
function DEC_HEX(IN)&lt;br /&gt;
    local B,K,OUT,I,D=16,&amp;quot;0123456789ABCDEF&amp;quot;,&amp;quot;&amp;quot;,0&lt;br /&gt;
    while IN&amp;gt;0 do&lt;br /&gt;
        I=I+1&lt;br /&gt;
        IN,D=math.floor(IN/B),math.mod(IN,B)+1&lt;br /&gt;
        OUT=string.sub(K,D,D)..OUT&lt;br /&gt;
    end&lt;br /&gt;
    return OUT&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Color Conversions&lt;br /&gt;
function rgb2hsl(src_r, src_g, src_b)&lt;br /&gt;
	local h, s, l, d;&lt;br /&gt;
	src_r = src_r / 255;&lt;br /&gt;
	src_g = src_g / 255;&lt;br /&gt;
	src_b = src_b / 255;&lt;br /&gt;
    local max_rgb = math.max(src_r, src_g, src_b); &lt;br /&gt;
	local min_rgb = math.min(src_r, src_g, src_b);&lt;br /&gt;
    l = (max_rgb + min_rgb) / 2;&lt;br /&gt;
&lt;br /&gt;
    if(max_rgb == min_rgb) then&lt;br /&gt;
        h = 0; --achromatic&lt;br /&gt;
		s = 0;&lt;br /&gt;
    else&lt;br /&gt;
        d = max_rgb - min_rgb;&lt;br /&gt;
		if l &amp;gt; 0.5 then&lt;br /&gt;
			s = d / (2 - max_rgb - min_rgb);&lt;br /&gt;
		else&lt;br /&gt;
			s = d / (max_rgb + min_rgb);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if src_g &amp;gt; src_b then&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_b - src_r) / d + 2;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d + 6;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_r - src_g) / d + 4;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
        h = h / 6;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if h == nil then&lt;br /&gt;
		error &amp;quot;NO H&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if s == nil then&lt;br /&gt;
		error (&amp;quot;NO S   D:&amp;quot; .. d);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if l == nil then&lt;br /&gt;
		error &amp;quot;NO L&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    return h, s, l;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function rgb2lab(src_r, src_g, src_b)&lt;br /&gt;
	--R from 0 to 255&lt;br /&gt;
	--G from 0 to 255&lt;br /&gt;
	--B from 0 to 255&lt;br /&gt;
	local r = src_r/255;&lt;br /&gt;
	local g = src_g/255;&lt;br /&gt;
	local b = src_b/255;&lt;br /&gt;
 &lt;br /&gt;
	if (r &amp;gt; 0.04045) then&lt;br /&gt;
		r = math.pow((r + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		r = r / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if ( g &amp;gt; 0.04045) then&lt;br /&gt;
		g = math.pow((g + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		g = g / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if (b &amp;gt; 0.04045) then&lt;br /&gt;
		b = math.pow((b + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		b = b / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	r = r * 100;&lt;br /&gt;
	g = g * 100;&lt;br /&gt;
	b = b * 100;&lt;br /&gt;
 &lt;br /&gt;
	local x = r * 0.4124 + g * 0.3576 + b * 0.1805;&lt;br /&gt;
	local y = r * 0.2126 + g * 0.7152 + b * 0.0722;&lt;br /&gt;
	local z = r * 0.0193 + g * 0.1192 + b * 0.9505;&lt;br /&gt;
	&lt;br /&gt;
	x = x / 95.047;&lt;br /&gt;
	y = y / 100.000;  &lt;br /&gt;
	z = z / 108.883;&lt;br /&gt;
 &lt;br /&gt;
	if ( x &amp;gt; 0.008856 ) then&lt;br /&gt;
		x = math.pow( x , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		x = ( 7.787 * x ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( y &amp;gt; 0.008856 ) then&lt;br /&gt;
		y = math.pow( y , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		y = ( 7.787 * y ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( z &amp;gt; 0.008856 ) then&lt;br /&gt;
		z = math.pow( z , 1/3 );&lt;br /&gt;
	else&lt;br /&gt;
		z = ( 7.787 * z ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lab_l = ( 116 * y ) - 16;&lt;br /&gt;
	local lab_a = 500 * ( x - y );&lt;br /&gt;
	local lab_b = 200 * ( y - z );&lt;br /&gt;
 &lt;br /&gt;
	return lab_l, lab_a, lab_b;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Get nearest color name&lt;br /&gt;
function nearestColor(px)&lt;br /&gt;
	local rgb_r, rgb_g, rgb_b, tst_r, tst_g, tst_b, test_px;&lt;br /&gt;
	local lab_l, lab_a, lab_b, lab_tst_l, lab_tst_a, lab_tst_b;&lt;br /&gt;
	local hsl_h, hsl_s, hsl_l, hsl_tst_h, hsl_tst_s, hsl_tst_l;&lt;br /&gt;
	local offset, best_name, best_offset, next_best_offset, confidence;&lt;br /&gt;
	best_offset = 100000;&lt;br /&gt;
	next_best_offset = 1000000;&lt;br /&gt;
	rgb_r = ((math.floor(px/256/256/256) % 256) - 7) * 255/247;&lt;br /&gt;
	rgb_g = ((math.floor(px/256/256) % 256) - 7) * 255/247;&lt;br /&gt;
	rgb_b = ((math.floor(px/256) % 256) - 5.5) * 255/247;&lt;br /&gt;
	lab_l, lab_a, lab_b = rgb2lab(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	hsl_h, hsl_s, hsl_l = rgb2hsl(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	&lt;br /&gt;
	for i=1, #color_names do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		test_px = color_values[i];&lt;br /&gt;
		tst_r = (math.floor(test_px/256/256) % 256);&lt;br /&gt;
		tst_g = (math.floor(test_px/256) % 256);&lt;br /&gt;
		tst_b = (math.floor(test_px) % 256);&lt;br /&gt;
		lab_tst_l, lab_tst_a, lab_tst_b = rgb2lab(tst_r, tst_g, tst_b);&lt;br /&gt;
		hsl_tst_h, hsl_tst_s, hsl_tst_l = rgb2hsl(tst_r, tst_g, tst_b);&lt;br /&gt;
		&lt;br /&gt;
		---- Different methods to determine &amp;quot;distance&amp;quot; from the ideal colors. Change these to test different options.&lt;br /&gt;
		&lt;br /&gt;
		--offset = math.abs(rgb_r - tst_r) + math.abs(rgb_g - tst_g) + math.abs(rgb_b - tst_b);&lt;br /&gt;
		--offset = math.max(math.max((math.abs(rgb_r - tst_r)), math.abs(rgb_g - tst_g)), math.abs(rgb_b - tst_b));&lt;br /&gt;
		offset = (rgb_r - tst_r)^2 + (rgb_g - tst_g)^2 + (rgb_b - tst_b)^2;&lt;br /&gt;
		--offset = math.abs(lab_l - lab_tst_l) + math.abs(lab_a - lab_tst_a) + math.abs(lab_b - lab_tst_b);&lt;br /&gt;
		--offset = (lab_l - lab_tst_l)^2 + (lab_a - lab_tst_a)^2 + (lab_b - lab_tst_b)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(lab_l - lab_tst_l)), math.abs(lab_a - lab_tst_a)), math.abs(lab_b - lab_tst_b));&lt;br /&gt;
		--offset = math.abs(hsl_h - hsl_tst_h) + math.abs(hsl_s - hsl_tst_s) + math.abs(hsl_l - hsl_tst_l);&lt;br /&gt;
		--offset = (hsl_h - hsl_tst_h)^2 + (hsl_s - hsl_tst_s)^2 + (hsl_l - hsl_tst_l)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(hsl_h - hsl_tst_h)), math.abs(hsl_s - hsl_tst_s)), math.abs(hsl_l - hsl_tst_l));&lt;br /&gt;
		if (offset &amp;lt; next_best_offset) then&lt;br /&gt;
			if (offset &amp;lt; best_offset) then&lt;br /&gt;
				next_best_offset = best_offset;&lt;br /&gt;
				best_offset = offset;&lt;br /&gt;
				best_name = color_names[i]; -- .. &amp;quot;   Hex: &amp;quot; .. DEC_HEX(color_values[i]);&lt;br /&gt;
			else&lt;br /&gt;
				next_best_offset = offset;&lt;br /&gt;
			end&lt;br /&gt;
			confidence = ((next_best_offset - best_offset) / best_offset) * 100;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return best_name, math.floor(confidence);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Check pixel against target&lt;br /&gt;
function checkColor(px)&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	color_name, confidence = nearestColor(px);&lt;br /&gt;
	&lt;br /&gt;
	if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
		return true, confidence;&lt;br /&gt;
	else&lt;br /&gt;
		return false, 0;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- optional message&lt;br /&gt;
function askForPixel()&lt;br /&gt;
	local is_done = false;&lt;br /&gt;
	local have_coords = false;&lt;br /&gt;
	local color_found = false;&lt;br /&gt;
	local color_guess = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
	local tst_r, tst_g, tst_b, rgb_r, rgb_g, rgb_b;&lt;br /&gt;
	local confidence = 0;&lt;br /&gt;
	-- Display message until shift is held&lt;br /&gt;
	while not go_now do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		y = 0;&lt;br /&gt;
		mouse_x, mouse_y = srMousePos();&lt;br /&gt;
		if not have_coords then&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Mouse over one of the Raeli Oven color pixels and press Shift.&amp;quot;);&lt;br /&gt;
			if lsShiftHeld() then&lt;br /&gt;
				saved_x = mouse_x;&lt;br /&gt;
				saved_y = mouse_y;&lt;br /&gt;
				have_coords = true;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Coords chosen, press 'Reset' to change or 'Do It' to start.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 40;&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xffffff,&lt;br /&gt;
				saved_x .. &amp;quot;, &amp;quot; .. saved_y);&lt;br /&gt;
		else&lt;br /&gt;
			px = srReadPixel(mouse_x, mouse_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
				mouse_x .. &amp;quot;, &amp;quot; .. mouse_y);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		color_guess, confidence = nearestColor(px);&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;) Hex: &amp;quot; .. DEC_HEX(math.floor((px/256) % 16777216)));&lt;br /&gt;
			&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Best guess: &amp;quot; .. color_guess);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Confidence: &amp;quot; .. confidence .. &amp;quot;  (higher is better)&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- Testing other methods of grabbing the pixel, making sure RGBA values match&lt;br /&gt;
		-- srReadScreen();&lt;br /&gt;
		-- px2 = srReadPixelFromBuffer(mouse_x, mouse_y);&lt;br /&gt;
		-- lsPrintWrapped(0, 80, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
		-- 	mouse_x .. &amp;quot;, &amp;quot; .. mouse_y .. &amp;quot; = &amp;quot; .. (math.floor(px2/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256) % 256) .. &amp;quot;,&amp;quot; .. (px2 % 256) );&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 90, 0, 100, px, &amp;quot;test1&amp;quot;);&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 60, 0, 100, px2, &amp;quot;test2&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		take_screenshots = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Take Screenshots&amp;quot;, take_screenshots);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		stop_at_CB = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Stop at Color&amp;quot;, stop_at_CB);&lt;br /&gt;
		&lt;br /&gt;
		if stop_at_CB then&lt;br /&gt;
			y = y + 25;&lt;br /&gt;
			is_done = false;&lt;br /&gt;
			color_found = false;&lt;br /&gt;
			-- Edit box and text display&lt;br /&gt;
			lsPrint(10, y, z, 0.7, 0.7, 0xFFFFFFff, &amp;quot;Desired Color:&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			y = y + 20;&lt;br /&gt;
			-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
			is_done, stop_at_color = lsEditBox(&amp;quot;Desired Color:&amp;quot;, 10, y, z, 250, 30, 0.7, 0.7, 0x000000ff, &amp;quot;White&amp;quot;);&lt;br /&gt;
			--dropdown_color_cur_value = lsDropdown(&amp;quot;ColorDropDown1&amp;quot;, 5, y, 0, 200, dropdown_color_cur_value, color_names);&lt;br /&gt;
			&lt;br /&gt;
			for i=0, #color_names do&lt;br /&gt;
				if stop_at_color and color_names[i] then&lt;br /&gt;
					if (stop_at_color:upper() == (color_names[i]):upper()) then&lt;br /&gt;
						color_found = true;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not color_found then&lt;br /&gt;
				lsPrint(130, y - 20, z, 0.7, 0.7, 0xFF0000ff, &amp;quot;No such color (Remove any spaces)&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			y = y + 35;&lt;br /&gt;
			lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, &amp;quot;Confidence Required:&amp;quot;);&lt;br /&gt;
			is_done, confidence_threshold = lsEditBox(&amp;quot;confthresh&amp;quot;, 150, y, 0, 50, 30, 0.7, 0.7, 0x000000ff, confidence_threshold);&lt;br /&gt;
			confidence_threshold = tonumber(confidence_threshold);&lt;br /&gt;
			if not confidence_threshold then&lt;br /&gt;
				lsPrint(10, y+17, 10, 0.4, 0.4, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
				confidence_threshold = 10;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			is_done = true;&lt;br /&gt;
			color_found = true;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			if color_found then&lt;br /&gt;
				if lsButtonText(10, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Do It&amp;quot;) then&lt;br /&gt;
					go_now = true;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if lsButtonText(100, lsScreenY - 30, 0, 80, 0xFFA500ff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
				have_coords = false;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
	-- Wait for shift to be released&lt;br /&gt;
	while lsShiftHeld() do end;&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(askText);&lt;br /&gt;
	askForPixel();&lt;br /&gt;
	&lt;br /&gt;
	local t0 = lsGetTimer();&lt;br /&gt;
	local px = 0;&lt;br /&gt;
	local index=0;&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	local do_screenshot, do_end_burn;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		local y = 0;&lt;br /&gt;
		do_screenshot = false;&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		new_px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
		local t = (lsGetTimer() - t0) / 1000 / 60;&lt;br /&gt;
		t = math.floor(t*10 + 0.5)/10;&lt;br /&gt;
		local t_string = t;&lt;br /&gt;
		if not (new_px == px) then&lt;br /&gt;
			index = index+1;&lt;br /&gt;
			px = new_px;&lt;br /&gt;
			color_name, confidence = nearestColor(px);&lt;br /&gt;
			if take_screenshots then&lt;br /&gt;
				do_screenshot = true;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if stop_at_CB then&lt;br /&gt;
				if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
					if confidence &amp;gt; confidence_threshold then&lt;br /&gt;
						do_end_burn = true;&lt;br /&gt;
					else&lt;br /&gt;
						for i = 1, 3 do&lt;br /&gt;
							lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
							lsSleep(50);&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		y = y + 5;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Screen: &amp;quot; .. index .. &amp;quot;  Timer: &amp;quot; .. t_string);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Color: &amp;quot; .. color_name .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;)  Hex: &amp;quot; .. DEC_HEX(math.floor((new_px/256) % 16777216)));&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end	&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		if do_screenshot then&lt;br /&gt;
				srSaveLastReadScreen(&amp;quot;screen_&amp;quot; .. index .. &amp;quot;_&amp;quot; .. t_string .. &amp;quot;.png&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if do_end_burn then&lt;br /&gt;
			clickAllText(&amp;quot;Interrupt&amp;quot;);&lt;br /&gt;
			lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
			error (&amp;quot;Stopped burn at: &amp;quot; .. stop_at_color .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Food Timer (IN TESTING v1)}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Food stat timer, made by Selune. Version 1.&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
log_lines = {};&lt;br /&gt;
num_log_lines = 10;&lt;br /&gt;
food_name = &amp;quot;Blocker&amp;quot;;&lt;br /&gt;
function log(msg)&lt;br /&gt;
	lsPrintln(msg);&lt;br /&gt;
	if #log_lines == num_log_lines then&lt;br /&gt;
		for i=1,num_log_lines-1 do&lt;br /&gt;
			log_lines[i] = log_lines[i+1];&lt;br /&gt;
		end&lt;br /&gt;
		log_lines[num_log_lines] = msg;&lt;br /&gt;
	else&lt;br /&gt;
		log_lines[#log_lines+1] = msg;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local last_time = 0;&lt;br /&gt;
function timedLog(new_time)&lt;br /&gt;
	local timeDiff;&lt;br /&gt;
	&lt;br /&gt;
	timeDiff = new_time - last_time;&lt;br /&gt;
	last_time = new_time;&lt;br /&gt;
	&lt;br /&gt;
	log(food_name .. &amp;quot; -- Duration: &amp;quot; .. math.floor(timeDiff / 1000 / 60) .. &amp;quot;:&amp;quot; .. math.mod(timeDiff / 1000, 60));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function askForImage()&lt;br /&gt;
	haveCoords = false;&lt;br /&gt;
	go_now = false;&lt;br /&gt;
	while not go_now do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		mouse_x, mouse_y = srMousePos();&lt;br /&gt;
		local y = 10;&lt;br /&gt;
		local x = 40;&lt;br /&gt;
		&lt;br /&gt;
		if not have_coords then&lt;br /&gt;
			lsPrintWrapped(x, y, 1, lsScreenX - x - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Put your mouse in the top left of the Strength stat NUMBER. You should see all stat values in the preview. It doesn't have to be perfect!&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			srMakeImage(&amp;quot;CUSTOM&amp;quot;, mouse_x, mouse_y, 10, 100);&lt;br /&gt;
			if lsShiftHeld() then&lt;br /&gt;
				saved_x = mouse_x;&lt;br /&gt;
				saved_y = mouse_y;&lt;br /&gt;
				have_coords = true;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(x, y, 1, lsScreenX - x - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Coords chosen, press 'Reset' to change or 'Do It' to start.&amp;quot;);&lt;br /&gt;
			srMakeImage(&amp;quot;CUSTOM&amp;quot;, saved_x, saved_y, 10, 100);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			if lsButtonText(10, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Do It&amp;quot;) then&lt;br /&gt;
				go_now = true;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if lsButtonText(100, lsScreenY - 30, 0, 80, 0xFFA500ff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
				have_coords = false;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 100, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		srShowImageDebug(&amp;quot;CUSTOM&amp;quot;, 8, 8, 1, 3);&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;Food Timer - Records how long a particular meal lasts, down to the half-second. Works even with aqueduct or other already-running food buffs (So eat blocker first!) Made by Selune!&amp;quot;);&lt;br /&gt;
	askForImage();&lt;br /&gt;
	srMakeImage(&amp;quot;CUR_STATS&amp;quot;, saved_x, saved_y, 10, 100);&lt;br /&gt;
	&lt;br /&gt;
	for i=1, 20 do&lt;br /&gt;
		log(&amp;quot;...&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local t0 = lsGetTimer();&lt;br /&gt;
	local new_time;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		local i = 0;&lt;br /&gt;
		local y = 5;&lt;br /&gt;
		local x = 40;&lt;br /&gt;
		local is_done = false;&lt;br /&gt;
		new_time = lsGetTimer();&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		lsPrintWrapped(x, y, 1, lsScreenX - x - 10, 1, 1, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Now recording, eat up!&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		y = y + 25;&lt;br /&gt;
		lsPrintWrapped(x, y, 1, lsScreenX - x - 10, 1, 1, 0xFF2020ff,&lt;br /&gt;
				&amp;quot;Remember to block first!&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		lsPrintWrapped(x, y, 1, lsScreenX - x - 10, 0.7, 0.7, 0xC0C0C0ff,&lt;br /&gt;
				&amp;quot;Name (for log):&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		is_done, food_name = lsEditBox(&amp;quot;Food Name:&amp;quot;, x, y, z, 250, 30, 0.7, 0.7, 0x000000ff, food_name);&lt;br /&gt;
		&lt;br /&gt;
		if not srFindImageInRange(&amp;quot;CUR_STATS&amp;quot;, saved_x, saved_y, 10, 100) then&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			srMakeImage(&amp;quot;CUR_STATS&amp;quot;, saved_x, saved_y, 10, 100);&lt;br /&gt;
			for i = 1, 3 do&lt;br /&gt;
				lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
				lsSleep(100);&lt;br /&gt;
			end&lt;br /&gt;
			timedLog(new_time - t0);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		if #log_lines then&lt;br /&gt;
			for i=1, #log_lines do&lt;br /&gt;
				lsPrint(x + 10, y, 1, 0.7, 0.7, 0x808080ff, log_lines[i]);&lt;br /&gt;
				y = y + 15;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		srShowImageDebug(&amp;quot;CUR_STATS&amp;quot;, 8, 8, 1, 3);&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW/mats&amp;diff=228123</id>
		<title>Guilds/HHOFW/mats</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW/mats&amp;diff=228123"/>
		<updated>2013-01-28T17:00:13Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Cut Gems Needed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.atitd.org/wiki/tale6/Guilds/HHOFW_of_Egypt&lt;br /&gt;
&lt;br /&gt;
content from tale 5:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Donations ==&lt;br /&gt;
&lt;br /&gt;
Always Welcome!!!!!!&lt;br /&gt;
&lt;br /&gt;
The elders of the HHoFW guild do try to gather as many mats as possible, but as a quick scan of the list should make clear, the amount of mats required is prodigious. Our success with vigils in the past, and, undoubtedly, our future success, is dependent on the wonderful folk who keep our chests filled.&lt;br /&gt;
&lt;br /&gt;
Always Needed!!!!&lt;br /&gt;
&lt;br /&gt;
Clearly, a comparison of the &amp;quot;On Hand&amp;quot; column to the &amp;quot;Safe Target&amp;quot; below will show which items we have the most pressing immediate for, but HHoFW plans to run vigils regularly and frequently, so any item in the list you can help with will help a vigil succeed at some point.&lt;br /&gt;
&lt;br /&gt;
Always Appreciated!!!!!&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
• The &amp;quot;Avg. Requirement&amp;quot; column is the mean amount required for a 1250 sacrifice vigil (this was the normal number of sacs accomplished in a T4 vigil extending from dinner time Friday until late afternoon Sunday). However, in any given vigil, the actual amount of any given material requested can vary substantially from this mean.&lt;br /&gt;
&lt;br /&gt;
• The &amp;quot;Safe Target&amp;quot; column is the amount which should be on hand to insure, given the variance in amounts requested for a given vigil, that we will not run out of that material. Note that the amount here reflects the ease or difficulty of manufacture or collection of the given item. For example, the &amp;quot;safe&amp;quot; amount for crucibles is not terribly greater that the mean required amount, since we will have Mason's Benches near the vigil site and can easily generate more if demand is high. However, the safe amount for medium stones is well above the mean required amount, to  insure there is a supply for crucible and nail mould manufacture, and reflecting the difficulty (you try to organize a dig in the middle of the night!) of gathering more on short notice.&lt;br /&gt;
&lt;br /&gt;
• We believe this is the complete list. Note that, for example, large gems, cactus sap, metals (as opposed to ores), serpent fish, forged items, glass, grilled vegetables, flystones, gravel were never asked for.&lt;br /&gt;
&lt;br /&gt;
'''We are not sure at this point what additional items will be asked for in T6.'''&lt;br /&gt;
&lt;br /&gt;
'''Altar location 1337 2826'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Donation warehouses 1337 2826 River Plain  &amp;lt;br&amp;gt; PLEASE BRING YOUR DONATIONS TO RP IF POSSIBLE if not other locations are  &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== The Rules ==&lt;br /&gt;
&lt;br /&gt;
An elder will be running the vigil fire.  This person will be keeping a list and handing out mats to sac when your name comes up.&lt;br /&gt;
&lt;br /&gt;
We ask the following to make things easier.&lt;br /&gt;
&lt;br /&gt;
1 - Please ask to be added to the list when you arrive at the vigil fire.  We do not add people to the list unless they are present at the fire.&lt;br /&gt;
&lt;br /&gt;
2 - If you have to go afk during the time you are on the list please tell the elder running the fire.  If you are away an extended period of time you will be skipped.  (we do not want to hand out mats to people afk) It is helpful for the fire tender if you sit afk.&lt;br /&gt;
&lt;br /&gt;
3 - If your name is called 3 times and you do not answer your turn will be skipped.&lt;br /&gt;
&lt;br /&gt;
4 - If you are working on mats for vigil and are away from the fire when your name is called we will hold your sac.&lt;br /&gt;
&lt;br /&gt;
5 - If you want to acro during vigil please do, we encourage that but please watch guild chat and come back for your sac if it is your turn.&lt;br /&gt;
&lt;br /&gt;
6 - When you are leaving please let the elder know so they can take you off the list.&lt;br /&gt;
&lt;br /&gt;
7 - '''SACS ARE LIMITED TO 35 PER PERSON'''&lt;br /&gt;
&lt;br /&gt;
'''Donations'''&lt;br /&gt;
&lt;br /&gt;
We do our best to have the safe target on hand before each vigil but as you can see on the materials page it is a huge task.  We don't require a fee to do a vigil but do appreciate donations.  We have a stashable wh at the vigil site and would appreciate donations to be brought there.  If you can't do this we also have whs in each region.  Coords of all whs are above.&lt;br /&gt;
&lt;br /&gt;
1 - Please only put items in the donation wh that are listed below.  While we'd love to have your large gems they aren't an item asked for by the vigil.&lt;br /&gt;
&lt;br /&gt;
2 - There are chests in the cp that you can unload things like insects, fish oil, etc that you accumulate while collecting for vigil.  Please put those items there.&lt;br /&gt;
&lt;br /&gt;
3 - When vigil is over we appreciate everyone who participated to help refill the whs for the next group.&lt;br /&gt;
&lt;br /&gt;
4 - Please don't update the wiki.  This will be done by an elder.&lt;br /&gt;
&lt;br /&gt;
There aren't a lot of rules.  Please remember it is very hard to keep track of the fire and we need to make it easier for the elder running it.&lt;br /&gt;
&lt;br /&gt;
Besides passing a test this is a great opportunity to make new friends and have some fun.  Acro, smoke the hookah, chat.  The smoother the vigil runs the more fun it is!&lt;br /&gt;
&lt;br /&gt;
Thanks for all your help!&lt;br /&gt;
&lt;br /&gt;
== The List  ==&lt;br /&gt;
===  ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used last vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| Abdju Meat          || 2538   ||         2500        ||  2000 ||                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Aluminum Ore            || 308    ||   200 ||  300      || Public mine: 950, 3687         &lt;br /&gt;
||                                                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Antimony Ore ||   783   ||    ||  150    ||        300       ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                    &lt;br /&gt;
| Ash                 ||  724        ||  700    ||  700   || no potash, ONLY ash.     ||  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Baskets             ||    52    ||  25        ||  50     || baskets are 200 dried papy EACH    ||                       &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Beeswax             ||  5500   ||  4000     ||  5000  ||                                                                          &lt;br /&gt;
|-&lt;br /&gt;
| Boards              ||    13256        ||  10000               ||  15000               ||some in gh       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Bricks              ||  7500   ||  6500                ||  7500                ||  some in gh        ||                                                          &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| cabbage             ||   4432  ||  3000               ||  3500                ||            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cabbage seeds        ||     8   ||        7       ||    8       ||                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| camel meat          ||    4271    ||  4000                ||  4200               ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| camel milk         ||    2150     ||  300                ||  500               ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| canvas              || 701 ||  500                  ||  600                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Carp Meat            ||  4401       ||  2700                ||  3200                ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| carrots             ||   2392      ||  1500                ||  2000                ||       || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| carrot seeds        ||     10       ||      6         ||    8       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Catfish Meat       ||    2100      ||  1500                ||  2000                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Charcoal            ||     6006     ||  5000                ||  6000                ||     ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Chicken meat        ||   2111   ||  500             ||  600                ||      ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Chromis Meat         ||   2124                 ||  1500               || 2000         ||                                                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| clay                ||    4726        ||  3500                ||  4000                ||     ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| clay mortars        ||   582     ||  300                  ||  350                || not wet, just  fired    ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
|copper ore      ||   2166    ||  1000                  ||  1500                 ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| crucible            ||    513     ||  150                 ||  250                  ||    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cut stone           ||   1033     ||  700                  ||  950                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cuttable stone       ||   1803      ||1500               ||  1700                ||    ||                                                  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Dirt                ||     3568 ||  2500                ||  3000                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Dried Flax          ||   4575 ||  4000               ||  4500               ||                                                                    &lt;br /&gt;
|- &lt;br /&gt;
| Dried Pappy         ||   2795   ||  1500           ||       3000        ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Dung                ||   3559      ||  2500                ||  3000                ||     ||&lt;br /&gt;
|- &lt;br /&gt;
| Fertile Papy        ||  6653        ||  6000                ||  7000                ||     ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                    &lt;br /&gt;
| Firebricks          ||   15000    ||  10000               ||  15000               || not wet, just fired   ||                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;    &lt;br /&gt;
| Flax          ||   7232  ||  6000              ||  7000               ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Flimsy Brick Racks  ||    600  ||  500                ||  600                ||     ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Flint               || 581      || 250                   ||  300                  ||    ||                                                                &lt;br /&gt;
|- &lt;br /&gt;
| garlic              ||      1824    ||  1500                ||  2000                ||   || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| garlic seeds        ||       8    ||  8             ||    8  ||     ||                                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Gold Ore                ||  234       ||  150                  ||  200                  ||    ||                                                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-  &lt;br /&gt;
| Grilled Fish        ||     1993        ||  2500                ||  3000               || Note that you do not need grilled veggies. Only fish. ||             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Honey               ||       4960       ||  3500                ||  4000                 ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Iron Ore                ||    335    ||  200                  ||  300                 ||    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Jugs                ||    5203  ||  2500                ||  3500               ||                                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Lead Ore            ||      523         ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Leather             ||   2068      ||  1500                ||  2000                ||     ||                                                            &lt;br /&gt;
|- &lt;br /&gt;
| Leeks               ||   1614    ||  1500                ||  2000                ||         &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Leek seeds        ||      9      ||     6|| 8||                                       &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Lime                ||   600     ||  500                  ||  600                  ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Limestone           ||  4025    ||  3000               ||  4000                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Linen               ||  668      ||  500                  ||  600                ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Lint                ||  3302            ||  2500                ||  3000                ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Lithium Ore        ||      373        ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Magnesium Ore        || 1782           ||  200                  ||  300                  ||      ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Mandibular Glue    ||  642     || 300 || 600 ||  ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Diamond         ||    238     ||  150                  ||  200                  ||       ||  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                                &lt;br /&gt;
| Med Emeralds       ||     228    ||  150                  ||  200                 ||       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Quartz          ||    564   ||  400                  ||  500                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Ruby            ||   319   ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med sapphire        ||    240       ||  150                  ||  200                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Stone           ||  425   ||  300                  ||  400                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Topaz           ||   210    ||  150                  ||  200                  ||       ||                                                             &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Mutton              ||      2200   ||  2000                ||  2200                ||    ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Nail Mould     ||   175   ||  114                ||  150                ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Oil                 ||      2036    ||  1000                ||  2000                ||      ||                                                              &lt;br /&gt;
|-&lt;br /&gt;
| Onions              ||     2358    ||  2000                ||  2500                ||      || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| onion seeds        ||      8       ||     7          ||    8       ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Perch Meat          ||  2600      ||  2000                ||  2500                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Phagrus Meat        ||   2273   ||  1500                ||  2000                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Platinum Ore             ||  313       ||  200                ||  250                ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Pulley              ||    324   ||  250                  ||  300                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Rope                ||   3000   ||  2500                ||  3000         ||                                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Rotten Flax         ||    7070    ||  6000                ||  7000                ||                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Saltpeter           ||  440  ||  350                 ||  400                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Silt                ||   9010  ||  5000               ||  7500               ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Silver              ||   270     ||  100                  ||  200         ||         ||36                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Slate               ||    5981     ||  3000                ||  4000                 || between slate, stone blades and slate shovels (2 slate ea) you will need LOTS of slate   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Slate Shovel        ||    400     ||  300                  ||  400               || 800 slate + 800 boards    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sm Diamond          ||      455       ||  400                  ||  450                 ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Emerald          ||       400     ||  300                  ||  400                  ||       ||                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Quartz           ||     504          ||  400                 ||  500                  ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Ruby             ||   462     ||  400                 ||  450                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sm Sapphire         ||     410        ||  300                ||  400                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm topaz            ||  412            ||  300                  ||  400                 ||        ||                                                           &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Stone Blade         ||  3997    ||  1500               ||  2000               || 4000 slate ||                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Straw               ||        5070 ||  4000               ||  5000           || grass is not called for, only straw ||                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Strontium Ore    ||  300          ||  200                  ||  300                  ||     ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sulfur              ||    370     ||  250      ||  300          || sulfurous  water is not called for, only sulphur   ||                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Thorns              || 11703     ||  6000                ||  7500               ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Thread              ||    8003  ||  6000               ||  8000               ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;   &lt;br /&gt;
| Tilapia Meat            ||     1201  ||  800                ||  1100                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Tin Ore                 ||    398     ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Titanium Ore          || 661            ||  100                 ||  200                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Tow                 ||  3601   ||  3000                ||  3500                ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Tungsten  Ore          ||  462    ||  150                 ||  200                  ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Twine               ||   2876     ||  1500                ||  2000                ||     ||                                &lt;br /&gt;
|-  &lt;br /&gt;
| Wood                ||   17313       ||  17000              ||  20000               ||        ||                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Zinc Ore                 ||    224         ||  150                 ||  200                  ||       ||                                                             &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other Mats Needed ==&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Target&lt;br /&gt;
!Comments&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cactus Sap || 793  ||   200  || For lures&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Iron    ||  100 ||  100    || For construction and blacksmithing &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Shovel 8K+                ||  7     ||  2               || Will be requested; need several qualities                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Shovel 7K+                ||   2    ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Shovel 6K+                ||     7    ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Shovel 5K+                ||  2     ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Carp Blades                ||          ||  20               || Might be be requested; need a bunch to support our carpentry shops(in wh near carp shops)                                                                           &lt;br /&gt;
|- &lt;br /&gt;
| Hookah                ||         ||  1               ||  Donor gets naming rights   &lt;br /&gt;
|-&lt;br /&gt;
| Herbs               ||          ||  Lots               || Variety rather than quantity. So the donor of the hookah doesn't feel like it was wasted effort&lt;br /&gt;
|-&lt;br /&gt;
| Resin     ||      || lots    || Need variety      &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cuttables ==&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Amethyst ||  35  ||20||25||  ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Citrine  ||  46 ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Garnet ||  47  ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Jade || 57   ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Lapis  ||  35  ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Sunstone ||   28 ||20||25||  ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Turquoise ||  36 ||20||25||     ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cut Gems Needed ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
|-&lt;br /&gt;
!Gem !! Qty On Hand !! Target !! Qty Needed&lt;br /&gt;
|-&lt;br /&gt;
|Aidenn Mask ||6 || 3|| 0&lt;br /&gt;
|-&lt;br /&gt;
|Amanti ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Amunet ||9 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Appolonia ||4 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Bastet ||11  ||5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Bridge ||5 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Cat's Eye ||2 || 5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Choronzon ||2 || 3 ||1  &lt;br /&gt;
|-&lt;br /&gt;
|Corner Heart ||3 || 3 ||0  &lt;br /&gt;
|-&lt;br /&gt;
|Crater ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Dalessi ||1 || 3 ||2&lt;br /&gt;
|-&lt;br /&gt;
|Dragyn's Eye ||2 || 5 ||3  &lt;br /&gt;
|-&lt;br /&gt;
||Eyelet ||26 || 5|| 0&lt;br /&gt;
|-&lt;br /&gt;
|Full Aidenn Mask ||11 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Full Eye ||12 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Hexas Plate ||2 ||3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Hile's Chevrons ||2 || 3 ||1  &lt;br /&gt;
|-&lt;br /&gt;
|Khufu's Ship ||4 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|King's Tomb ||2 || 5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Lens ||27 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Looking Glass ||8 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Lotus ||7 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Moorish Arch ||0 || 3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Osiris Eye ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Prism ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Queen's Tomb ||4  ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Ra's Lantern ||3 || 5 ||2&lt;br /&gt;
|-&lt;br /&gt;
|Reflection ||1 ||5 ||4  &lt;br /&gt;
|-&lt;br /&gt;
|Refractor ||2 || 3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Ring ||2 ||5 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Shen of Horus ||0 || 3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Solarkin ||2 ||3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Sprocket ||6 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Suspension ||3 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Symmetry ||17 || 3 ||0  &lt;br /&gt;
|-&lt;br /&gt;
|The Shark ||7 || 5 || 0&lt;br /&gt;
|-&lt;br /&gt;
|Thistle ||23  ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Thoth's Knot ||2 ||5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Tiki Mask ||0 ||5|| 5  &lt;br /&gt;
|-&lt;br /&gt;
|Tombstone ||0 ||3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
| Triclops||4||3||0&lt;br /&gt;
|-&lt;br /&gt;
| Unity ||3||5||2&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW/mats&amp;diff=228122</id>
		<title>Guilds/HHOFW/mats</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW/mats&amp;diff=228122"/>
		<updated>2013-01-28T16:58:14Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Cut Gems Needed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.atitd.org/wiki/tale6/Guilds/HHOFW_of_Egypt&lt;br /&gt;
&lt;br /&gt;
content from tale 5:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Donations ==&lt;br /&gt;
&lt;br /&gt;
Always Welcome!!!!!!&lt;br /&gt;
&lt;br /&gt;
The elders of the HHoFW guild do try to gather as many mats as possible, but as a quick scan of the list should make clear, the amount of mats required is prodigious. Our success with vigils in the past, and, undoubtedly, our future success, is dependent on the wonderful folk who keep our chests filled.&lt;br /&gt;
&lt;br /&gt;
Always Needed!!!!&lt;br /&gt;
&lt;br /&gt;
Clearly, a comparison of the &amp;quot;On Hand&amp;quot; column to the &amp;quot;Safe Target&amp;quot; below will show which items we have the most pressing immediate for, but HHoFW plans to run vigils regularly and frequently, so any item in the list you can help with will help a vigil succeed at some point.&lt;br /&gt;
&lt;br /&gt;
Always Appreciated!!!!!&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
• The &amp;quot;Avg. Requirement&amp;quot; column is the mean amount required for a 1250 sacrifice vigil (this was the normal number of sacs accomplished in a T4 vigil extending from dinner time Friday until late afternoon Sunday). However, in any given vigil, the actual amount of any given material requested can vary substantially from this mean.&lt;br /&gt;
&lt;br /&gt;
• The &amp;quot;Safe Target&amp;quot; column is the amount which should be on hand to insure, given the variance in amounts requested for a given vigil, that we will not run out of that material. Note that the amount here reflects the ease or difficulty of manufacture or collection of the given item. For example, the &amp;quot;safe&amp;quot; amount for crucibles is not terribly greater that the mean required amount, since we will have Mason's Benches near the vigil site and can easily generate more if demand is high. However, the safe amount for medium stones is well above the mean required amount, to  insure there is a supply for crucible and nail mould manufacture, and reflecting the difficulty (you try to organize a dig in the middle of the night!) of gathering more on short notice.&lt;br /&gt;
&lt;br /&gt;
• We believe this is the complete list. Note that, for example, large gems, cactus sap, metals (as opposed to ores), serpent fish, forged items, glass, grilled vegetables, flystones, gravel were never asked for.&lt;br /&gt;
&lt;br /&gt;
'''We are not sure at this point what additional items will be asked for in T6.'''&lt;br /&gt;
&lt;br /&gt;
'''Altar location 1337 2826'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Donation warehouses 1337 2826 River Plain  &amp;lt;br&amp;gt; PLEASE BRING YOUR DONATIONS TO RP IF POSSIBLE if not other locations are  &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== The Rules ==&lt;br /&gt;
&lt;br /&gt;
An elder will be running the vigil fire.  This person will be keeping a list and handing out mats to sac when your name comes up.&lt;br /&gt;
&lt;br /&gt;
We ask the following to make things easier.&lt;br /&gt;
&lt;br /&gt;
1 - Please ask to be added to the list when you arrive at the vigil fire.  We do not add people to the list unless they are present at the fire.&lt;br /&gt;
&lt;br /&gt;
2 - If you have to go afk during the time you are on the list please tell the elder running the fire.  If you are away an extended period of time you will be skipped.  (we do not want to hand out mats to people afk) It is helpful for the fire tender if you sit afk.&lt;br /&gt;
&lt;br /&gt;
3 - If your name is called 3 times and you do not answer your turn will be skipped.&lt;br /&gt;
&lt;br /&gt;
4 - If you are working on mats for vigil and are away from the fire when your name is called we will hold your sac.&lt;br /&gt;
&lt;br /&gt;
5 - If you want to acro during vigil please do, we encourage that but please watch guild chat and come back for your sac if it is your turn.&lt;br /&gt;
&lt;br /&gt;
6 - When you are leaving please let the elder know so they can take you off the list.&lt;br /&gt;
&lt;br /&gt;
7 - '''SACS ARE LIMITED TO 35 PER PERSON'''&lt;br /&gt;
&lt;br /&gt;
'''Donations'''&lt;br /&gt;
&lt;br /&gt;
We do our best to have the safe target on hand before each vigil but as you can see on the materials page it is a huge task.  We don't require a fee to do a vigil but do appreciate donations.  We have a stashable wh at the vigil site and would appreciate donations to be brought there.  If you can't do this we also have whs in each region.  Coords of all whs are above.&lt;br /&gt;
&lt;br /&gt;
1 - Please only put items in the donation wh that are listed below.  While we'd love to have your large gems they aren't an item asked for by the vigil.&lt;br /&gt;
&lt;br /&gt;
2 - There are chests in the cp that you can unload things like insects, fish oil, etc that you accumulate while collecting for vigil.  Please put those items there.&lt;br /&gt;
&lt;br /&gt;
3 - When vigil is over we appreciate everyone who participated to help refill the whs for the next group.&lt;br /&gt;
&lt;br /&gt;
4 - Please don't update the wiki.  This will be done by an elder.&lt;br /&gt;
&lt;br /&gt;
There aren't a lot of rules.  Please remember it is very hard to keep track of the fire and we need to make it easier for the elder running it.&lt;br /&gt;
&lt;br /&gt;
Besides passing a test this is a great opportunity to make new friends and have some fun.  Acro, smoke the hookah, chat.  The smoother the vigil runs the more fun it is!&lt;br /&gt;
&lt;br /&gt;
Thanks for all your help!&lt;br /&gt;
&lt;br /&gt;
== The List  ==&lt;br /&gt;
===  ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used last vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| Abdju Meat          || 2538   ||         2500        ||  2000 ||                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Aluminum Ore            || 308    ||   200 ||  300      || Public mine: 950, 3687         &lt;br /&gt;
||                                                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Antimony Ore ||   783   ||    ||  150    ||        300       ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                    &lt;br /&gt;
| Ash                 ||  724        ||  700    ||  700   || no potash, ONLY ash.     ||  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Baskets             ||    52    ||  25        ||  50     || baskets are 200 dried papy EACH    ||                       &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Beeswax             ||  5500   ||  4000     ||  5000  ||                                                                          &lt;br /&gt;
|-&lt;br /&gt;
| Boards              ||    13256        ||  10000               ||  15000               ||some in gh       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Bricks              ||  7500   ||  6500                ||  7500                ||  some in gh        ||                                                          &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| cabbage             ||   4432  ||  3000               ||  3500                ||            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cabbage seeds        ||     8   ||        7       ||    8       ||                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| camel meat          ||    4271    ||  4000                ||  4200               ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| camel milk         ||    2150     ||  300                ||  500               ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| canvas              || 701 ||  500                  ||  600                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Carp Meat            ||  4401       ||  2700                ||  3200                ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| carrots             ||   2392      ||  1500                ||  2000                ||       || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| carrot seeds        ||     10       ||      6         ||    8       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Catfish Meat       ||    2100      ||  1500                ||  2000                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Charcoal            ||     6006     ||  5000                ||  6000                ||     ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Chicken meat        ||   2111   ||  500             ||  600                ||      ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Chromis Meat         ||   2124                 ||  1500               || 2000         ||                                                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| clay                ||    4726        ||  3500                ||  4000                ||     ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| clay mortars        ||   582     ||  300                  ||  350                || not wet, just  fired    ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
|copper ore      ||   2166    ||  1000                  ||  1500                 ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| crucible            ||    513     ||  150                 ||  250                  ||    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cut stone           ||   1033     ||  700                  ||  950                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cuttable stone       ||   1803      ||1500               ||  1700                ||    ||                                                  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Dirt                ||     3568 ||  2500                ||  3000                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Dried Flax          ||   4575 ||  4000               ||  4500               ||                                                                    &lt;br /&gt;
|- &lt;br /&gt;
| Dried Pappy         ||   2795   ||  1500           ||       3000        ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Dung                ||   3559      ||  2500                ||  3000                ||     ||&lt;br /&gt;
|- &lt;br /&gt;
| Fertile Papy        ||  6653        ||  6000                ||  7000                ||     ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                    &lt;br /&gt;
| Firebricks          ||   15000    ||  10000               ||  15000               || not wet, just fired   ||                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;    &lt;br /&gt;
| Flax          ||   7232  ||  6000              ||  7000               ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Flimsy Brick Racks  ||    600  ||  500                ||  600                ||     ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Flint               || 581      || 250                   ||  300                  ||    ||                                                                &lt;br /&gt;
|- &lt;br /&gt;
| garlic              ||      1824    ||  1500                ||  2000                ||   || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| garlic seeds        ||       8    ||  8             ||    8  ||     ||                                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Gold Ore                ||  234       ||  150                  ||  200                  ||    ||                                                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-  &lt;br /&gt;
| Grilled Fish        ||     1993        ||  2500                ||  3000               || Note that you do not need grilled veggies. Only fish. ||             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Honey               ||       4960       ||  3500                ||  4000                 ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Iron Ore                ||    335    ||  200                  ||  300                 ||    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Jugs                ||    5203  ||  2500                ||  3500               ||                                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Lead Ore            ||      523         ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Leather             ||   2068      ||  1500                ||  2000                ||     ||                                                            &lt;br /&gt;
|- &lt;br /&gt;
| Leeks               ||   1614    ||  1500                ||  2000                ||         &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Leek seeds        ||      9      ||     6|| 8||                                       &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Lime                ||   600     ||  500                  ||  600                  ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Limestone           ||  4025    ||  3000               ||  4000                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Linen               ||  668      ||  500                  ||  600                ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Lint                ||  3302            ||  2500                ||  3000                ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Lithium Ore        ||      373        ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Magnesium Ore        || 1782           ||  200                  ||  300                  ||      ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Mandibular Glue    ||  642     || 300 || 600 ||  ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Diamond         ||    238     ||  150                  ||  200                  ||       ||  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                                &lt;br /&gt;
| Med Emeralds       ||     228    ||  150                  ||  200                 ||       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Quartz          ||    564   ||  400                  ||  500                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Ruby            ||   319   ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med sapphire        ||    240       ||  150                  ||  200                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Stone           ||  425   ||  300                  ||  400                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Topaz           ||   210    ||  150                  ||  200                  ||       ||                                                             &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Mutton              ||      2200   ||  2000                ||  2200                ||    ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Nail Mould     ||   175   ||  114                ||  150                ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Oil                 ||      2036    ||  1000                ||  2000                ||      ||                                                              &lt;br /&gt;
|-&lt;br /&gt;
| Onions              ||     2358    ||  2000                ||  2500                ||      || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| onion seeds        ||      8       ||     7          ||    8       ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Perch Meat          ||  2600      ||  2000                ||  2500                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Phagrus Meat        ||   2273   ||  1500                ||  2000                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Platinum Ore             ||  313       ||  200                ||  250                ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Pulley              ||    324   ||  250                  ||  300                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Rope                ||   3000   ||  2500                ||  3000         ||                                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Rotten Flax         ||    7070    ||  6000                ||  7000                ||                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Saltpeter           ||  440  ||  350                 ||  400                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Silt                ||   9010  ||  5000               ||  7500               ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Silver              ||   270     ||  100                  ||  200         ||         ||36                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Slate               ||    5981     ||  3000                ||  4000                 || between slate, stone blades and slate shovels (2 slate ea) you will need LOTS of slate   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Slate Shovel        ||    400     ||  300                  ||  400               || 800 slate + 800 boards    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sm Diamond          ||      455       ||  400                  ||  450                 ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Emerald          ||       400     ||  300                  ||  400                  ||       ||                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Quartz           ||     504          ||  400                 ||  500                  ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Ruby             ||   462     ||  400                 ||  450                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sm Sapphire         ||     410        ||  300                ||  400                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm topaz            ||  412            ||  300                  ||  400                 ||        ||                                                           &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Stone Blade         ||  3997    ||  1500               ||  2000               || 4000 slate ||                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Straw               ||        5070 ||  4000               ||  5000           || grass is not called for, only straw ||                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Strontium Ore    ||  300          ||  200                  ||  300                  ||     ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sulfur              ||    370     ||  250      ||  300          || sulfurous  water is not called for, only sulphur   ||                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Thorns              || 11703     ||  6000                ||  7500               ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Thread              ||    8003  ||  6000               ||  8000               ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;   &lt;br /&gt;
| Tilapia Meat            ||     1201  ||  800                ||  1100                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Tin Ore                 ||    398     ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Titanium Ore          || 661            ||  100                 ||  200                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Tow                 ||  3601   ||  3000                ||  3500                ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Tungsten  Ore          ||  462    ||  150                 ||  200                  ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Twine               ||   2876     ||  1500                ||  2000                ||     ||                                &lt;br /&gt;
|-  &lt;br /&gt;
| Wood                ||   17313       ||  17000              ||  20000               ||        ||                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Zinc Ore                 ||    224         ||  150                 ||  200                  ||       ||                                                             &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other Mats Needed ==&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Target&lt;br /&gt;
!Comments&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cactus Sap || 793  ||   200  || For lures&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Iron    ||  100 ||  100    || For construction and blacksmithing &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Shovel 8K+                ||  7     ||  2               || Will be requested; need several qualities                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Shovel 7K+                ||   2    ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Shovel 6K+                ||     7    ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Shovel 5K+                ||  2     ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Carp Blades                ||          ||  20               || Might be be requested; need a bunch to support our carpentry shops(in wh near carp shops)                                                                           &lt;br /&gt;
|- &lt;br /&gt;
| Hookah                ||         ||  1               ||  Donor gets naming rights   &lt;br /&gt;
|-&lt;br /&gt;
| Herbs               ||          ||  Lots               || Variety rather than quantity. So the donor of the hookah doesn't feel like it was wasted effort&lt;br /&gt;
|-&lt;br /&gt;
| Resin     ||      || lots    || Need variety      &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cuttables ==&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Amethyst ||  35  ||20||25||  ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Citrine  ||  46 ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Garnet ||  47  ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Jade || 57   ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Lapis  ||  35  ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Sunstone ||   28 ||20||25||  ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Turquoise ||  36 ||20||25||     ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cut Gems Needed ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
|-&lt;br /&gt;
!Gem !! Qty On Hand !! Target !! Qty Needed&lt;br /&gt;
|-&lt;br /&gt;
|Aidenn Mask ||6 || 3|| 0&lt;br /&gt;
|-&lt;br /&gt;
|Amanti ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Amunet ||9 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Appolonia ||4 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Bastet ||11  ||5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Bridge ||5 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Cat's Eye ||2 || 5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Choronzon ||2 || 3 ||1  &lt;br /&gt;
|-&lt;br /&gt;
|Corner Heart ||3 || 3 ||0  &lt;br /&gt;
|-&lt;br /&gt;
|Crater ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Dalessi ||1 || 3 ||2&lt;br /&gt;
|-&lt;br /&gt;
|Dragyn's Eye ||2 || 5 ||3  &lt;br /&gt;
|-&lt;br /&gt;
||Eyelet ||26 || 5|| 10  &lt;br /&gt;
|-&lt;br /&gt;
|Full Aidenn Mask ||11 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Full Eye ||12 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Hexas Plate ||2 ||3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Hile's Chevrons ||2 || 3 ||1  &lt;br /&gt;
|-&lt;br /&gt;
|Khufu's Ship ||4 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|King's Tomb ||2 || 5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Lens ||27 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Looking Glass ||8 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Lotus ||7 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Moorish Arch ||0 || 3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Osiris Eye ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Prism ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Queen's Tomb ||4  ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Ra's Lantern ||3 || 5 ||2&lt;br /&gt;
|-&lt;br /&gt;
|Reflection ||1 ||5 ||4  &lt;br /&gt;
|-&lt;br /&gt;
|Refractor ||2 || 3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Ring ||2 ||5 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Shen of Horus ||0 || 3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Solarkin ||2 ||3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Sprocket ||6 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Suspension ||3 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Symmetry ||17 || 3 ||0  &lt;br /&gt;
|-&lt;br /&gt;
|The Shark ||7 || 5 || 0&lt;br /&gt;
|-&lt;br /&gt;
|Thistle ||23  ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Thoth's Knot ||2 ||5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Tiki Mask ||0 ||5|| 5  &lt;br /&gt;
|-&lt;br /&gt;
|Tombstone ||0 ||3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
| Triclops||4||3||0&lt;br /&gt;
|-&lt;br /&gt;
| Unity ||3||5||2&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW/mats&amp;diff=228121</id>
		<title>Guilds/HHOFW/mats</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW/mats&amp;diff=228121"/>
		<updated>2013-01-28T16:56:58Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Cut Gems Needed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.atitd.org/wiki/tale6/Guilds/HHOFW_of_Egypt&lt;br /&gt;
&lt;br /&gt;
content from tale 5:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Donations ==&lt;br /&gt;
&lt;br /&gt;
Always Welcome!!!!!!&lt;br /&gt;
&lt;br /&gt;
The elders of the HHoFW guild do try to gather as many mats as possible, but as a quick scan of the list should make clear, the amount of mats required is prodigious. Our success with vigils in the past, and, undoubtedly, our future success, is dependent on the wonderful folk who keep our chests filled.&lt;br /&gt;
&lt;br /&gt;
Always Needed!!!!&lt;br /&gt;
&lt;br /&gt;
Clearly, a comparison of the &amp;quot;On Hand&amp;quot; column to the &amp;quot;Safe Target&amp;quot; below will show which items we have the most pressing immediate for, but HHoFW plans to run vigils regularly and frequently, so any item in the list you can help with will help a vigil succeed at some point.&lt;br /&gt;
&lt;br /&gt;
Always Appreciated!!!!!&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
• The &amp;quot;Avg. Requirement&amp;quot; column is the mean amount required for a 1250 sacrifice vigil (this was the normal number of sacs accomplished in a T4 vigil extending from dinner time Friday until late afternoon Sunday). However, in any given vigil, the actual amount of any given material requested can vary substantially from this mean.&lt;br /&gt;
&lt;br /&gt;
• The &amp;quot;Safe Target&amp;quot; column is the amount which should be on hand to insure, given the variance in amounts requested for a given vigil, that we will not run out of that material. Note that the amount here reflects the ease or difficulty of manufacture or collection of the given item. For example, the &amp;quot;safe&amp;quot; amount for crucibles is not terribly greater that the mean required amount, since we will have Mason's Benches near the vigil site and can easily generate more if demand is high. However, the safe amount for medium stones is well above the mean required amount, to  insure there is a supply for crucible and nail mould manufacture, and reflecting the difficulty (you try to organize a dig in the middle of the night!) of gathering more on short notice.&lt;br /&gt;
&lt;br /&gt;
• We believe this is the complete list. Note that, for example, large gems, cactus sap, metals (as opposed to ores), serpent fish, forged items, glass, grilled vegetables, flystones, gravel were never asked for.&lt;br /&gt;
&lt;br /&gt;
'''We are not sure at this point what additional items will be asked for in T6.'''&lt;br /&gt;
&lt;br /&gt;
'''Altar location 1337 2826'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Donation warehouses 1337 2826 River Plain  &amp;lt;br&amp;gt; PLEASE BRING YOUR DONATIONS TO RP IF POSSIBLE if not other locations are  &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== The Rules ==&lt;br /&gt;
&lt;br /&gt;
An elder will be running the vigil fire.  This person will be keeping a list and handing out mats to sac when your name comes up.&lt;br /&gt;
&lt;br /&gt;
We ask the following to make things easier.&lt;br /&gt;
&lt;br /&gt;
1 - Please ask to be added to the list when you arrive at the vigil fire.  We do not add people to the list unless they are present at the fire.&lt;br /&gt;
&lt;br /&gt;
2 - If you have to go afk during the time you are on the list please tell the elder running the fire.  If you are away an extended period of time you will be skipped.  (we do not want to hand out mats to people afk) It is helpful for the fire tender if you sit afk.&lt;br /&gt;
&lt;br /&gt;
3 - If your name is called 3 times and you do not answer your turn will be skipped.&lt;br /&gt;
&lt;br /&gt;
4 - If you are working on mats for vigil and are away from the fire when your name is called we will hold your sac.&lt;br /&gt;
&lt;br /&gt;
5 - If you want to acro during vigil please do, we encourage that but please watch guild chat and come back for your sac if it is your turn.&lt;br /&gt;
&lt;br /&gt;
6 - When you are leaving please let the elder know so they can take you off the list.&lt;br /&gt;
&lt;br /&gt;
7 - '''SACS ARE LIMITED TO 35 PER PERSON'''&lt;br /&gt;
&lt;br /&gt;
'''Donations'''&lt;br /&gt;
&lt;br /&gt;
We do our best to have the safe target on hand before each vigil but as you can see on the materials page it is a huge task.  We don't require a fee to do a vigil but do appreciate donations.  We have a stashable wh at the vigil site and would appreciate donations to be brought there.  If you can't do this we also have whs in each region.  Coords of all whs are above.&lt;br /&gt;
&lt;br /&gt;
1 - Please only put items in the donation wh that are listed below.  While we'd love to have your large gems they aren't an item asked for by the vigil.&lt;br /&gt;
&lt;br /&gt;
2 - There are chests in the cp that you can unload things like insects, fish oil, etc that you accumulate while collecting for vigil.  Please put those items there.&lt;br /&gt;
&lt;br /&gt;
3 - When vigil is over we appreciate everyone who participated to help refill the whs for the next group.&lt;br /&gt;
&lt;br /&gt;
4 - Please don't update the wiki.  This will be done by an elder.&lt;br /&gt;
&lt;br /&gt;
There aren't a lot of rules.  Please remember it is very hard to keep track of the fire and we need to make it easier for the elder running it.&lt;br /&gt;
&lt;br /&gt;
Besides passing a test this is a great opportunity to make new friends and have some fun.  Acro, smoke the hookah, chat.  The smoother the vigil runs the more fun it is!&lt;br /&gt;
&lt;br /&gt;
Thanks for all your help!&lt;br /&gt;
&lt;br /&gt;
== The List  ==&lt;br /&gt;
===  ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used last vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| Abdju Meat          || 2538   ||         2500        ||  2000 ||                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Aluminum Ore            || 308    ||   200 ||  300      || Public mine: 950, 3687         &lt;br /&gt;
||                                                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Antimony Ore ||   783   ||    ||  150    ||        300       ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                    &lt;br /&gt;
| Ash                 ||  724        ||  700    ||  700   || no potash, ONLY ash.     ||  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Baskets             ||    52    ||  25        ||  50     || baskets are 200 dried papy EACH    ||                       &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Beeswax             ||  5500   ||  4000     ||  5000  ||                                                                          &lt;br /&gt;
|-&lt;br /&gt;
| Boards              ||    13256        ||  10000               ||  15000               ||some in gh       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Bricks              ||  7500   ||  6500                ||  7500                ||  some in gh        ||                                                          &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| cabbage             ||   4432  ||  3000               ||  3500                ||            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cabbage seeds        ||     8   ||        7       ||    8       ||                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| camel meat          ||    4271    ||  4000                ||  4200               ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| camel milk         ||    2150     ||  300                ||  500               ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| canvas              || 701 ||  500                  ||  600                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Carp Meat            ||  4401       ||  2700                ||  3200                ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| carrots             ||   2392      ||  1500                ||  2000                ||       || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| carrot seeds        ||     10       ||      6         ||    8       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Catfish Meat       ||    2100      ||  1500                ||  2000                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Charcoal            ||     6006     ||  5000                ||  6000                ||     ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Chicken meat        ||   2111   ||  500             ||  600                ||      ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Chromis Meat         ||   2124                 ||  1500               || 2000         ||                                                          &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| clay                ||    4726        ||  3500                ||  4000                ||     ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| clay mortars        ||   582     ||  300                  ||  350                || not wet, just  fired    ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
|copper ore      ||   2166    ||  1000                  ||  1500                 ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| crucible            ||    513     ||  150                 ||  250                  ||    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cut stone           ||   1033     ||  700                  ||  950                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| cuttable stone       ||   1803      ||1500               ||  1700                ||    ||                                                  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Dirt                ||     3568 ||  2500                ||  3000                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Dried Flax          ||   4575 ||  4000               ||  4500               ||                                                                    &lt;br /&gt;
|- &lt;br /&gt;
| Dried Pappy         ||   2795   ||  1500           ||       3000        ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Dung                ||   3559      ||  2500                ||  3000                ||     ||&lt;br /&gt;
|- &lt;br /&gt;
| Fertile Papy        ||  6653        ||  6000                ||  7000                ||     ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                    &lt;br /&gt;
| Firebricks          ||   15000    ||  10000               ||  15000               || not wet, just fired   ||                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;    &lt;br /&gt;
| Flax          ||   7232  ||  6000              ||  7000               ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Flimsy Brick Racks  ||    600  ||  500                ||  600                ||     ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Flint               || 581      || 250                   ||  300                  ||    ||                                                                &lt;br /&gt;
|- &lt;br /&gt;
| garlic              ||      1824    ||  1500                ||  2000                ||   || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| garlic seeds        ||       8    ||  8             ||    8  ||     ||                                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Gold Ore                ||  234       ||  150                  ||  200                  ||    ||                                                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-  &lt;br /&gt;
| Grilled Fish        ||     1993        ||  2500                ||  3000               || Note that you do not need grilled veggies. Only fish. ||             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Honey               ||       4960       ||  3500                ||  4000                 ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Iron Ore                ||    335    ||  200                  ||  300                 ||    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Jugs                ||    5203  ||  2500                ||  3500               ||                                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Lead Ore            ||      523         ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Leather             ||   2068      ||  1500                ||  2000                ||     ||                                                            &lt;br /&gt;
|- &lt;br /&gt;
| Leeks               ||   1614    ||  1500                ||  2000                ||         &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Leek seeds        ||      9      ||     6|| 8||                                       &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Lime                ||   600     ||  500                  ||  600                  ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Limestone           ||  4025    ||  3000               ||  4000                ||                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Linen               ||  668      ||  500                  ||  600                ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Lint                ||  3302            ||  2500                ||  3000                ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Lithium Ore        ||      373        ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Magnesium Ore        || 1782           ||  200                  ||  300                  ||      ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Mandibular Glue    ||  642     || 300 || 600 ||  ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Diamond         ||    238     ||  150                  ||  200                  ||       ||  &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;                                &lt;br /&gt;
| Med Emeralds       ||     228    ||  150                  ||  200                 ||       ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Quartz          ||    564   ||  400                  ||  500                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Ruby            ||   319   ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med sapphire        ||    240       ||  150                  ||  200                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Stone           ||  425   ||  300                  ||  400                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Med Topaz           ||   210    ||  150                  ||  200                  ||       ||                                                             &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Mutton              ||      2200   ||  2000                ||  2200                ||    ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Nail Mould     ||   175   ||  114                ||  150                ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Oil                 ||      2036    ||  1000                ||  2000                ||      ||                                                              &lt;br /&gt;
|-&lt;br /&gt;
| Onions              ||     2358    ||  2000                ||  2500                ||      || &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| onion seeds        ||      8       ||     7          ||    8       ||                                 &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Perch Meat          ||  2600      ||  2000                ||  2500                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Phagrus Meat        ||   2273   ||  1500                ||  2000                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Platinum Ore             ||  313       ||  200                ||  250                ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Pulley              ||    324   ||  250                  ||  300                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Rope                ||   3000   ||  2500                ||  3000         ||                                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Rotten Flax         ||    7070    ||  6000                ||  7000                ||                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Saltpeter           ||  440  ||  350                 ||  400                  ||       ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Silt                ||   9010  ||  5000               ||  7500               ||        ||                                                            &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Silver              ||   270     ||  100                  ||  200         ||         ||36                                                                    &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Slate               ||    5981     ||  3000                ||  4000                 || between slate, stone blades and slate shovels (2 slate ea) you will need LOTS of slate   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Slate Shovel        ||    400     ||  300                  ||  400               || 800 slate + 800 boards    ||                                                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sm Diamond          ||      455       ||  400                  ||  450                 ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Emerald          ||       400     ||  300                  ||  400                  ||       ||                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Quartz           ||     504          ||  400                 ||  500                  ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm Ruby             ||   462     ||  400                 ||  450                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sm Sapphire         ||     410        ||  300                ||  400                  ||         ||                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Sm topaz            ||  412            ||  300                  ||  400                 ||        ||                                                           &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Stone Blade         ||  3997    ||  1500               ||  2000               || 4000 slate ||                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Straw               ||        5070 ||  4000               ||  5000           || grass is not called for, only straw ||                                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Strontium Ore    ||  300          ||  200                  ||  300                  ||     ||                                                             &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Sulfur              ||    370     ||  250      ||  300          || sulfurous  water is not called for, only sulphur   ||                &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Thorns              || 11703     ||  6000                ||  7500               ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Thread              ||    8003  ||  6000               ||  8000               ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;   &lt;br /&gt;
| Tilapia Meat            ||     1201  ||  800                ||  1100                ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Tin Ore                 ||    398     ||  200                  ||  300                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Titanium Ore          || 661            ||  100                 ||  200                  ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Tow                 ||  3601   ||  3000                ||  3500                ||     ||                                                               &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Tungsten  Ore          ||  462    ||  150                 ||  200                  ||      ||                                                              &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Twine               ||   2876     ||  1500                ||  2000                ||     ||                                &lt;br /&gt;
|-  &lt;br /&gt;
| Wood                ||   17313       ||  17000              ||  20000               ||        ||                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Zinc Ore                 ||    224         ||  150                 ||  200                  ||       ||                                                             &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other Mats Needed ==&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Target&lt;br /&gt;
!Comments&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cactus Sap || 793  ||   200  || For lures&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Iron    ||  100 ||  100    || For construction and blacksmithing &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Shovel 8K+                ||  7     ||  2               || Will be requested; need several qualities                                                           &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot; &lt;br /&gt;
| Shovel 7K+                ||   2    ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Shovel 6K+                ||     7    ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;  &lt;br /&gt;
| Shovel 5K+                ||  2     ||  2               || Will be requested; need several qualities                                                                   &lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Carp Blades                ||          ||  20               || Might be be requested; need a bunch to support our carpentry shops(in wh near carp shops)                                                                           &lt;br /&gt;
|- &lt;br /&gt;
| Hookah                ||         ||  1               ||  Donor gets naming rights   &lt;br /&gt;
|-&lt;br /&gt;
| Herbs               ||          ||  Lots               || Variety rather than quantity. So the donor of the hookah doesn't feel like it was wasted effort&lt;br /&gt;
|-&lt;br /&gt;
| Resin     ||      || lots    || Need variety      &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cuttables ==&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item&lt;br /&gt;
!On Hand&lt;br /&gt;
!Avg. Requirement&lt;br /&gt;
!Safe Target&lt;br /&gt;
!Comments&lt;br /&gt;
!Used Last Vigil&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Amethyst ||  35  ||20||25||  ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Citrine  ||  46 ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Garnet ||  47  ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Jade || 57   ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Lapis  ||  35  ||20||25||   ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Sunstone ||   28 ||20||25||  ||&lt;br /&gt;
|-style=&amp;quot;background-color:#aaffaa;&amp;quot;&lt;br /&gt;
| Cuttable Turquoise ||  36 ||20||25||     ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cut Gems Needed ==&lt;br /&gt;
&lt;br /&gt;
{|border=1 cellpadding=2 cellspacing=0&lt;br /&gt;
|-&lt;br /&gt;
!Gem !! Qty On Hand !! Target !! Qty Needed&lt;br /&gt;
|-&lt;br /&gt;
|Aidenn Mask ||6 || 3|| 0&lt;br /&gt;
|-&lt;br /&gt;
|Amanti ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Amunet ||9 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Appolonia ||4 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Bastet ||11  ||5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Bridge ||5 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Cat's Eye ||2 || 5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Choronzon ||2 || 3 ||1  &lt;br /&gt;
|-&lt;br /&gt;
|Corner Heart ||3 || 3 ||0  &lt;br /&gt;
|-&lt;br /&gt;
|Crater ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Dalessi ||1 || 3 ||2&lt;br /&gt;
|-&lt;br /&gt;
|Dragyn's Eye ||2 || 5 ||3  &lt;br /&gt;
|-&lt;br /&gt;
||Eyelet ||26 || 5|| 10  &lt;br /&gt;
|-&lt;br /&gt;
|Full Aidenn Mask ||11 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Full Eye ||12 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Hexas Plate ||2 ||3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Hile's Chevrons ||2 || 3 ||1  &lt;br /&gt;
|-&lt;br /&gt;
|Khufu's Ship ||4 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|King's Tomb ||2 || 5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Lens ||27 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Looking Glass ||8 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Lotus ||7 || 5 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Moorish Arch ||0 || 3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Osiris Eye ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Prism ||4 || 3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Queen's Tomb ||4  ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Ra's Lantern ||3 || 5 ||2&lt;br /&gt;
|-&lt;br /&gt;
|Reflection ||1 ||5 ||4  &lt;br /&gt;
|-&lt;br /&gt;
|Refractor ||2 || 3 ||1&lt;br /&gt;
|-&lt;br /&gt;
|Ring ||2 ||5 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Shen of Horus ||0 || 3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Solarkin ||0 ||3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
|Sprocket ||6 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Suspension ||3 ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Symmetry ||17 || 3 ||0  &lt;br /&gt;
|-&lt;br /&gt;
|The Shark ||7 || 5 || 0&lt;br /&gt;
|-&lt;br /&gt;
|Thistle ||23  ||3 ||0&lt;br /&gt;
|-&lt;br /&gt;
|Thoth's Knot ||2 ||5 ||3&lt;br /&gt;
|-&lt;br /&gt;
|Tiki Mask ||0 ||5|| 5  &lt;br /&gt;
|-&lt;br /&gt;
|Tombstone ||0 ||3 ||3  &lt;br /&gt;
|-&lt;br /&gt;
| Triclops||4||3||0&lt;br /&gt;
|-&lt;br /&gt;
| Unity ||3||5||2&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227364</id>
		<title>User:Selune/Leavened Bread</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227364"/>
		<updated>2013-01-23T04:30:44Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ATITD - Leavened Bread Funtimes&lt;br /&gt;
&lt;br /&gt;
Priest 1: Selune&lt;br /&gt;
Priest 2: Strutter&lt;br /&gt;
Priest 3: kuupid&lt;br /&gt;
Priest 4: Rania&lt;br /&gt;
Priest 5: Zotep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Selune chooses &amp;quot;Begin the Ritual of Leavened Bread&amp;quot; under his/her Tests/Test of Leavened Bread menu.&lt;br /&gt;
Players 1-5 drink a cup of beer in order from the tasting table. Selune, Strutter, kuupid, Rania, Zotep.&lt;br /&gt;
Selune does the &amp;quot;Command Me from Heaven&amp;quot; emote and says (in Main): &amp;quot;Bless us oh god as we humbly seek your wisdom&amp;quot;&lt;br /&gt;
Strutter does the &amp;quot;Take My Blood&amp;quot; emote and says (in Main): &amp;quot;We ask for your blessings on this home and its generous proprietor&amp;quot;&lt;br /&gt;
kuupid does the &amp;quot;Show Me Mercy&amp;quot; emote and says (in Main): &amp;quot;We ask that you bless us all your humble servants&amp;quot;&lt;br /&gt;
Rania does the &amp;quot;Enter My Soul&amp;quot; emote and says (in Main): &amp;quot;Reveal to us your spirit and wisdom and how we might please you&amp;quot;&lt;br /&gt;
Zotep does the &amp;quot;Share My Joy&amp;quot; emote and says (in main): &amp;quot;Guide us in preparing our day's bread to fortify and enlighten us and our brethren and to earn your blessings&amp;quot; &lt;br /&gt;
All players should press the &amp;quot;Clipboard&amp;quot; button on the popup and then paste it into guild chat (Ctrl-V). Make sure to note this information down!&lt;br /&gt;
&lt;br /&gt;
God: Horus&lt;br /&gt;
Wheat: Akhet Wheat&lt;br /&gt;
Enriched: With Dates&lt;br /&gt;
Moistener &amp;amp; Beer: Water in Jugs, Blackberry Beer&lt;br /&gt;
Tasks: Gather Clay, Catch a Fish&lt;br /&gt;
Bread is for: New Initiates of Harmony&lt;br /&gt;
&lt;br /&gt;
Incantations:&lt;br /&gt;
Oh Horus, we ask you to bless Selune.&lt;br /&gt;
Oh Horus, we ask you to bless Strutter.&lt;br /&gt;
Oh Horus, we ask you to bless kuupid.&lt;br /&gt;
Oh Horus, we ask you to bless Rania.&lt;br /&gt;
Oh Horus, we ask you to bless Zotep.&lt;br /&gt;
&lt;br /&gt;
Strutter drops an emir mortar on the ground and builds a bonfire of exactly 105 wood near it.&lt;br /&gt;
Strutter adds wheat (5000 per loaf) to this single mortar. All the wheat used goes into *one* mortar.&lt;br /&gt;
kuupid adds moistener (1 per loaf) and beer (1 barrel total no matter how many loaves) to the mortar.&lt;br /&gt;
Strutter adds the additive (1 per loaf) to the mortar.&lt;br /&gt;
*PAUSE*&lt;br /&gt;
Strutter lights the bonfire.&lt;br /&gt;
When the wood gets down to about 50, Selune pastes the five prepared lines one by one into Main.&lt;br /&gt;
When the fire reaches 0 wood, Strutter moves the emir mortar to the bonfire. This is a menu option on the mortar.&lt;br /&gt;
Once the mortar has been moved to the fire, one player (any) must perform stoking duty. Each time the fire reaches 0 wood, that player adds 1 wood and 1 water to the bonfire until the bread is baked.&lt;br /&gt;
During the stoking phase, Rania performs the common actions mentioned in the vision.&lt;br /&gt;
Strutter will get a clear notice (popup) when the bread is ready.&lt;br /&gt;
Strutter builds a second bonfire of 10 wood, lights it, and sacrifices one of the breads on the bonfire. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227363</id>
		<title>User:Selune/Leavened Bread</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227363"/>
		<updated>2013-01-23T03:59:05Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;ATITD - Leavened Bread Funtimes&lt;br /&gt;
&lt;br /&gt;
Priest 1: Selune&lt;br /&gt;
Priest 2: Strutter&lt;br /&gt;
Priest 3: kuupid&lt;br /&gt;
Priest 4: Rania&lt;br /&gt;
Priest 5: Zotep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Selune chooses &amp;quot;Begin the Ritual of Leavened Bread&amp;quot; under his/her Tests/Test of Leavened Bread menu.&lt;br /&gt;
Players 1-5 drink a cup of beer in order from the tasting table. Selune, Strutter, kuupid, Rania, Zotep.&lt;br /&gt;
Selune does the &amp;quot;Command Me from Heaven&amp;quot; emote and says (in Main): &amp;quot;Bless us oh god as we humbly seek your wisdom&amp;quot;&lt;br /&gt;
Strutter does the &amp;quot;Take My Blood&amp;quot; emote and says (in Main): &amp;quot;We ask for your blessings on this home and its generous proprietor&amp;quot;&lt;br /&gt;
kuupid does the &amp;quot;Show Me Mercy&amp;quot; emote and says (in Main): &amp;quot;We ask that you bless us all your humble servants&amp;quot;&lt;br /&gt;
Rania does the &amp;quot;Enter My Soul&amp;quot; emote and says (in Main): &amp;quot;Reveal to us your spirit and wisdom and how we might please you&amp;quot;&lt;br /&gt;
Zotep does the &amp;quot;Share My Joy&amp;quot; emote and says (in main): &amp;quot;Guide us in preparing our day's bread to fortify and enlighten us and our brethren and to earn your blessings&amp;quot; &lt;br /&gt;
All players should press the &amp;quot;Clipboard&amp;quot; button on the popup and then paste it into guild chat (Ctrl-V). Make sure to note this information down!&lt;br /&gt;
&lt;br /&gt;
God: Buto&lt;br /&gt;
Wheat: Peret Wheat&lt;br /&gt;
Enriched: With Aromatic Honey&lt;br /&gt;
Moistener &amp;amp; Beer: Water in Jugs, and Orange Beer&lt;br /&gt;
Tasks: Harvest Wood, Feed a Rabbit&lt;br /&gt;
Bread is for: New Initiate of Art and Music&lt;br /&gt;
&lt;br /&gt;
Incantations:&lt;br /&gt;
Oh Buto, we ask you to bless Selune.&lt;br /&gt;
Oh Buto, we ask you to bless Strutter.&lt;br /&gt;
Oh Buto, we ask you to bless kuupid.&lt;br /&gt;
Oh Buto, we ask you to bless Rania.&lt;br /&gt;
Oh Buto, we ask you to bless Zotep.&lt;br /&gt;
&lt;br /&gt;
Strutter drops an emir mortar on the ground and builds a bonfire of exactly 105 wood near it.&lt;br /&gt;
Strutter adds wheat (5000 per loaf) to this single mortar. All the wheat used goes into *one* mortar.&lt;br /&gt;
kuupid adds moistener (1 per loaf) and beer (1 barrel total no matter how many loaves) to the mortar.&lt;br /&gt;
Strutter adds the additive (1 per loaf) to the mortar.&lt;br /&gt;
*PAUSE*&lt;br /&gt;
Strutter lights the bonfire.&lt;br /&gt;
When the wood gets down to about 50, Selune pastes the five prepared lines one by one into Main.&lt;br /&gt;
When the fire reaches 0 wood, Strutter moves the emir mortar to the bonfire. This is a menu option on the mortar.&lt;br /&gt;
Once the mortar has been moved to the fire, one player (any) must perform stoking duty. Each time the fire reaches 0 wood, that player adds 1 wood and 1 water to the bonfire until the bread is baked.&lt;br /&gt;
During the stoking phase, Rania performs the common actions mentioned in the vision.&lt;br /&gt;
Strutter will get a clear notice (popup) when the bread is ready.&lt;br /&gt;
Strutter builds a second bonfire of 10 wood, lights it, and sacrifices one of the breads on the bonfire. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227362</id>
		<title>User:Selune/Leavened Bread</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227362"/>
		<updated>2013-01-23T02:28:32Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ATITD - Leavened Bread Funtimes&lt;br /&gt;
&lt;br /&gt;
Priest 1: Selune&lt;br /&gt;
Priest 2: Strutter&lt;br /&gt;
Priest 3: kuupid&lt;br /&gt;
Priest 4: Aubery&lt;br /&gt;
Priest 5: Saicosis&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Selune chooses &amp;quot;Begin the Ritual of Leavened Bread&amp;quot; under his/her Tests/Test of Leavened Bread menu.&lt;br /&gt;
Players 1-5 drink a cup of beer in order from the tasting table. Selune, Strutter, kuupid, Aubery, Saicosis.&lt;br /&gt;
Selune does the &amp;quot;Command Me from Heaven&amp;quot; emote and says (in Main): &amp;quot;Bless us oh god as we humbly seek your wisdom&amp;quot;&lt;br /&gt;
Strutter does the &amp;quot;Take My Blood&amp;quot; emote and says (in Main): &amp;quot;We ask for your blessings on this home and its generous proprietor&amp;quot;&lt;br /&gt;
kuupid does the &amp;quot;Show Me Mercy&amp;quot; emote and says (in Main): &amp;quot;We ask that you bless us all your humble servants&amp;quot;&lt;br /&gt;
Aubery does the &amp;quot;Enter My Soul&amp;quot; emote and says (in Main): &amp;quot;Reveal to us your spirit and wisdom and how we might please you&amp;quot;&lt;br /&gt;
Saicosis does the &amp;quot;Share My Joy&amp;quot; emote and says (in main): &amp;quot;Guide us in preparing our day's bread to fortify and enlighten us and our brethren and to earn your blessings&amp;quot; &lt;br /&gt;
All players should press the &amp;quot;Clipboard&amp;quot; button on the popup and then paste it into guild chat (Ctrl-V). Make sure to note this information down!&lt;br /&gt;
&lt;br /&gt;
God: Anubis&lt;br /&gt;
Wheat: Peret Wheat&lt;br /&gt;
Enriched: With wine&lt;br /&gt;
Moistener &amp;amp; Beer: Cabbage Juice, Black Beer&lt;br /&gt;
Tasks: Dig clay, catch fish&lt;br /&gt;
Bread is for: Newly Wed&lt;br /&gt;
&lt;br /&gt;
Incantations:&lt;br /&gt;
Oh Anubis, we ask you to bless Selune.&lt;br /&gt;
Oh Anubis, we ask you to bless Strutter.&lt;br /&gt;
Oh Anubis, we ask you to bless kuupid.&lt;br /&gt;
Oh Anubis, we ask you to bless Aubery.&lt;br /&gt;
Oh Anubis, we ask you to bless Saicosis.&lt;br /&gt;
&lt;br /&gt;
Strutter drops an emir mortar on the ground and builds a bonfire of exactly 105 wood near it.&lt;br /&gt;
Strutter adds wheat (5000 per loaf) to this single mortar. All the wheat used goes into *one* mortar.&lt;br /&gt;
kuupid adds moistener (1 per loaf) and beer (1 barrel total no matter how many loaves) to the mortar.&lt;br /&gt;
Strutter adds the additive (1 per loaf) to the mortar.&lt;br /&gt;
*PAUSE*&lt;br /&gt;
Strutter lights the bonfire.&lt;br /&gt;
When the wood gets down to about 50, Selune pastes the five prepared lines one by one into Main.&lt;br /&gt;
When the fire reaches 0 wood, Strutter moves the emir mortar to the bonfire. This is a menu option on the mortar.&lt;br /&gt;
Once the mortar has been moved to the fire, one player (any) must perform stoking duty. Each time the fire reaches 0 wood, that player adds 1 wood and 1 water to the bonfire until the bread is baked.&lt;br /&gt;
During the stoking phase, Aubery performs the common actions mentioned in the vision.&lt;br /&gt;
Strutter will get a clear notice (popup) when the bread is ready.&lt;br /&gt;
Strutter builds a second bonfire of 10 wood, lights it, and sacrifices one of the breads on the bonfire. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227361</id>
		<title>User:Selune/Leavened Bread</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune/Leavened_Bread&amp;diff=227361"/>
		<updated>2013-01-23T02:19:45Z</updated>

		<summary type="html">&lt;p&gt;Selune: Created page with &amp;quot;&amp;lt;pre&amp;gt; ATITD - Leavened Bread Funtimes  Priest 1: Selune Priest 2: Strutter Priest 3: kuupid Priest 4: Aubery Priest 5: Saicosis   Selune chooses &amp;quot;Begin the Ritual of Leavened Bre...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ATITD - Leavened Bread Funtimes&lt;br /&gt;
&lt;br /&gt;
Priest 1: Selune&lt;br /&gt;
Priest 2: Strutter&lt;br /&gt;
Priest 3: kuupid&lt;br /&gt;
Priest 4: Aubery&lt;br /&gt;
Priest 5: Saicosis&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Selune chooses &amp;quot;Begin the Ritual of Leavened Bread&amp;quot; under his/her Tests/Test of Leavened Bread menu.&lt;br /&gt;
Players 1-5 drink a cup of beer in order from the tasting table. Selune, Strutter, kuupid, Aubery, Saicosis.&lt;br /&gt;
Selune does the &amp;quot;Command Me from Heaven&amp;quot; emote and says (in Main): &amp;quot;Bless us oh god as we humbly seek your wisdom&amp;quot;&lt;br /&gt;
Strutter does the &amp;quot;Take My Blood&amp;quot; emote and says (in Main): &amp;quot;We ask for your blessings on this home and its generous proprietor&amp;quot;&lt;br /&gt;
kuupid does the &amp;quot;Show Me Mercy&amp;quot; emote and says (in Main): &amp;quot;We ask that you bless us all your humble servants&amp;quot;&lt;br /&gt;
Aubery does the &amp;quot;Enter My Soul&amp;quot; emote and says (in Main): &amp;quot;Reveal to us your spirit and wisdom and how we might please you&amp;quot;&lt;br /&gt;
Saicosis does the &amp;quot;Share My Joy&amp;quot; emote and says (in main): &amp;quot;Guide us in preparing our day's bread to fortify and enlighten us and our brethren and to earn your blessings&amp;quot; &lt;br /&gt;
All players should press the &amp;quot;Clipboard&amp;quot; button on the popup and then paste it into guild chat (Ctrl-V). Make sure to note this information down!&lt;br /&gt;
&lt;br /&gt;
God: Bhuto&lt;br /&gt;
&lt;br /&gt;
Incantations:&lt;br /&gt;
Oh Buto, we ask you to bless Selune.&lt;br /&gt;
Oh Buto, we ask you to bless Strutter.&lt;br /&gt;
Oh Buto, we ask you to bless kuupid.&lt;br /&gt;
Oh Buto, we ask you to bless Aubery.&lt;br /&gt;
Oh Buto, we ask you to bless Saicosis.&lt;br /&gt;
&lt;br /&gt;
Strutter drops an emir mortar on the ground and builds a bonfire of exactly 105 wood near it.&lt;br /&gt;
Strutter adds wheat (5000 per loaf) to this single mortar. All the wheat used goes into *one* mortar.&lt;br /&gt;
kuupid adds moistener (1 per loaf) and beer (1 barrel total no matter how many loaves) to the mortar.&lt;br /&gt;
Strutter adds the additive (1 per loaf) to the mortar.&lt;br /&gt;
*PAUSE*&lt;br /&gt;
Strutter lights the bonfire.&lt;br /&gt;
When the wood gets down to about 50, Selune pastes the five prepared lines one by one into Main.&lt;br /&gt;
When the fire reaches 0 wood, Strutter moves the emir mortar to the bonfire. This is a menu option on the mortar.&lt;br /&gt;
Once the mortar has been moved to the fire, one player (any) must perform stoking duty. Each time the fire reaches 0 wood, that player adds 1 wood and 1 water to the bonfire until the bread is baked.&lt;br /&gt;
During the stoking phase, Aubery performs the common actions mentioned in the vision.&lt;br /&gt;
Strutter will get a clear notice (popup) when the bread is ready.&lt;br /&gt;
Strutter builds a second bonfire of 10 wood, lights it, and sacrifices one of the breads on the bonfire. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Marble_Obelisk&amp;diff=227356</id>
		<title>Marble Obelisk</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Marble_Obelisk&amp;diff=227356"/>
		<updated>2013-01-22T20:45:42Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Material Requirements by Size */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:BuildingInfo|image=Obemarbre.JPG|size=n/a|where=[[where::Small Construction Site]]|description=Fifth obelisk type.}}&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
This building becomes available when you learn the [[Obelisk Construction 5]]* tech. You must also have started the [[Test of the Obelisk]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;Note that this tech CANNOT be taught. You must learn it from the University.&lt;br /&gt;
&lt;br /&gt;
== Time Required To Hold Power ==&lt;br /&gt;
Once built your obelisk must be the tallest in the region for a number of days without anyone building a larger one in order to pass the test.&lt;br /&gt;
&lt;br /&gt;
35 Egyptian days = approx. 12 days real time.&lt;br /&gt;
&lt;br /&gt;
==Material Requirements by Size==&lt;br /&gt;
Built in a [[requires::Small Construction Site]].&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Height&lt;br /&gt;
![[requires::Oyster Shell Marble]]&lt;br /&gt;
![[requires::Yellow Alabaster]]&lt;br /&gt;
![[requires::Mud Granite]]&lt;br /&gt;
![[requires::White Travertine]]&lt;br /&gt;
![[requires::Canary Granite]]&lt;br /&gt;
![[requires::Night Granite]]&lt;br /&gt;
![[requires::Grey Star Marble]]&lt;br /&gt;
![[Gems#Diamond | Small Diamond]]&lt;br /&gt;
![[requires::Cobra Skin]]&lt;br /&gt;
![[requires::Sun Steel]]&lt;br /&gt;
![[requires::Dried Flax]]&lt;br /&gt;
![[requires::Gold Wire]]&lt;br /&gt;
![[requires::Rabbit Pelt]]&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|  7||  0||  0||  0||  0||  0||  0||  0||  2||  0||  0|| 1000|| 100|| 100&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|  8||  0||  0||  0||  0||  0||  0||  0||  2||  0||  0|| 1000|| 100|| 100   &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|  9||  0||  0||  0||  0||  0||  0||  0||  3||  0||  0|| 1000|| 100|| 100&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|  10||  1||  0||  0||  0||  0||  0||  0||  3||  1||  0|| 1000|| 100|| 100   &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|  12||  1||  0||  0||  0||  0||  0||  0||  4||  1||  0|| 1000|| 100|| 100   &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|  1000||  912||  501||  631||  611||  325||  54||  29||  2313||  1100||  1297|| 1000|| 100|| 100   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Buildings]]&lt;br /&gt;
[[Category:Obelisks]]&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Strutter/macro&amp;diff=227309</id>
		<title>User:Strutter/macro</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Strutter/macro&amp;diff=227309"/>
		<updated>2013-01-21T21:23:57Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* jug.lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;edit and copy code to notepad or other text editor&lt;br /&gt;
==jug.lua==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
 loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
 loadfile(&amp;quot;luaScripts/common.inc&amp;quot;)();&lt;br /&gt;
 loadfile(&amp;quot;luaScripts/serialize.inc&amp;quot;)();&lt;br /&gt;
 loadfile(&amp;quot;luaScripts/settings.inc&amp;quot;)();&lt;br /&gt;
 loadfile(&amp;quot;luaScripts/constants.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
 gridHeight = 5;&lt;br /&gt;
 gridWidth = 6; &lt;br /&gt;
 firstx =  200;&lt;br /&gt;
 firsty = 166;&lt;br /&gt;
 incx = 82; &lt;br /&gt;
 incy = 82;&lt;br /&gt;
 x = 0;&lt;br /&gt;
 y = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 function doit()&lt;br /&gt;
&lt;br /&gt;
 askForWindow( &amp;quot;Make sure your chats are minimized, you are in the F8F8 view, &amp;quot; .. &amp;quot;and you can see all your pottery wheels then  hover ATITD window and press Shift to continue.&amp;quot;);&lt;br /&gt;
 -- or press Control for setup&amp;quot;); &lt;br /&gt;
 promptForSettings();&lt;br /&gt;
  while 1 do&lt;br /&gt;
  lsSleep(150); &lt;br /&gt;
 &lt;br /&gt;
  prompt()&lt;br /&gt;
&lt;br /&gt;
 	x = firstx; &lt;br /&gt;
 	y = firsty;&lt;br /&gt;
&lt;br /&gt;
	for row =1, gridHeight do&lt;br /&gt;
  &lt;br /&gt;
 		for column=1,  gridWidth do&lt;br /&gt;
   			checkBreak(); &lt;br /&gt;
    &lt;br /&gt;
    			srSetMousePos(x , y);&lt;br /&gt;
    			lsSleep(150);&lt;br /&gt;
   			srKeyEvent(&amp;quot;t&amp;quot;);&lt;br /&gt;
    			lsSleep(150);&lt;br /&gt;
   			srKeyEvent(&amp;quot;j&amp;quot;);&lt;br /&gt;
    			x = x + incx;&lt;br /&gt;
    			--lsSleep(150);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			if(srFindImage(&amp;quot;toMake.png&amp;quot;,5000)) then&lt;br /&gt;
				closeAllWindows();&lt;br /&gt;
				error(&amp;quot;Out of supplies&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
  		end&lt;br /&gt;
   		x = firstx;&lt;br /&gt;
   		y = y + incy;&lt;br /&gt;
	end&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 function promptForSettings() &lt;br /&gt;
 -- lifted from brickhotkeys.lua&lt;br /&gt;
&lt;br /&gt;
  scale = 1;&lt;br /&gt;
    &lt;br /&gt;
  local z = 0;&lt;br /&gt;
  local is_done = nil;&lt;br /&gt;
  local value = nil;&lt;br /&gt;
  -- Edit box and text display&lt;br /&gt;
  while not is_done do&lt;br /&gt;
    checkBreak();&lt;br /&gt;
&lt;br /&gt;
    local y = 5;&lt;br /&gt;
&lt;br /&gt;
    lsSetCamera(0,0,lsScreenX*scale,lsScreenY*scale);&lt;br /&gt;
&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Grid width:&amp;quot;);&lt;br /&gt;
    gridWidth = readSetting(&amp;quot;gridWidth&amp;quot;,gridWidth);&lt;br /&gt;
    is_done, gridWidth = lsEditBox(&amp;quot;gridWidth&amp;quot;, 125, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                0x000000ff, gridWidth);&lt;br /&gt;
    if not tonumber(gridWidth) then&lt;br /&gt;
      is_done = nil;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      gridWidth = 1;&lt;br /&gt;
    end&lt;br /&gt;
    gridWidth = tonumber(gridWidth);&lt;br /&gt;
    writeSetting(&amp;quot;gridWidth&amp;quot;,gridWidth);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
	&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Grid height:&amp;quot;);&lt;br /&gt;
    gridHeight = readSetting(&amp;quot;gridHeight&amp;quot;,gridHeight);&lt;br /&gt;
    is_done, gridHeight = lsEditBox(&amp;quot;gridHeight&amp;quot;, 125, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                0x000000ff, gridHeight);&lt;br /&gt;
    if not tonumber(gridHeight) then&lt;br /&gt;
      is_done = nil;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      gridHeight = 1;&lt;br /&gt;
    end&lt;br /&gt;
    gridHeight = tonumber(gridHeight);&lt;br /&gt;
    writeSetting(&amp;quot;gridHeight&amp;quot;,gridHeight);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
	&lt;br /&gt;
    if lsButtonText(10, (lsScreenY - 30) * scale, z, 100, 0xFFFFFFff, &amp;quot;OK&amp;quot;) then&lt;br /&gt;
      is_done = 1;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if lsButtonText((lsScreenX - 100) * scale, (lsScreenY - 30) * scale, z, 100, 0xFFFFFFff,&lt;br /&gt;
                    &amp;quot;End script&amp;quot;) then&lt;br /&gt;
      error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    lsDoFrame();&lt;br /&gt;
    lsSleep(150);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 function prompt()&lt;br /&gt;
	statusScreen(&amp;quot;Press  Ctrl to continue.&amp;quot;);&lt;br /&gt;
	waitForKeypress(true);&lt;br /&gt;
	statusScreen(&amp;quot;Release the Ctrl button.&amp;quot;);&lt;br /&gt;
	waitForKeyrelease();&lt;br /&gt;
	lsSleep(150);&lt;br /&gt;
	statusScreen(&amp;quot;&amp;quot;);&lt;br /&gt;
	lsSleep(150);&lt;br /&gt;
	return &lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW_of_Egypt&amp;diff=227093</id>
		<title>Guilds/HHOFW of Egypt</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Guilds/HHOFW_of_Egypt&amp;diff=227093"/>
		<updated>2013-01-19T19:36:25Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Guild Elder Shift Sign Ups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HHOFW of Egypt&lt;br /&gt;
&lt;br /&gt;
A worship guild connected with Helping Hands of Friends.&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]]&lt;br /&gt;
&lt;br /&gt;
== [[Festival Supplies|HHOFW festival supplies]]==&lt;br /&gt;
&lt;br /&gt;
==Leavend Bread==&lt;br /&gt;
Date to run: February 24, 6:00EST&lt;br /&gt;
Group #1 &lt;br /&gt;
Asheara&lt;br /&gt;
kuupid&lt;br /&gt;
Arahgon&lt;br /&gt;
Pheros&lt;br /&gt;
Nitocris&lt;br /&gt;
&lt;br /&gt;
Group #2&lt;br /&gt;
Eclypse&lt;br /&gt;
Milythael&lt;br /&gt;
Lindie&lt;br /&gt;
Hamadi&lt;br /&gt;
farmer&lt;br /&gt;
&lt;br /&gt;
Group #3 &lt;br /&gt;
Yondri&lt;br /&gt;
Fumen&lt;br /&gt;
Morrigan&lt;br /&gt;
Jaylenaeybarre&lt;br /&gt;
Sasha&lt;br /&gt;
&lt;br /&gt;
Group #4&lt;br /&gt;
Dalia&lt;br /&gt;
BlueBell&lt;br /&gt;
&lt;br /&gt;
== Pilgrimage ==&lt;br /&gt;
&lt;br /&gt;
 PILGRIM GROUP!! &lt;br /&gt;
group #1 Running: Feb. 9 at 12:00 EST&lt;br /&gt;
        &lt;br /&gt;
Milythael&lt;br /&gt;
Windsong&lt;br /&gt;
Sasha&lt;br /&gt;
Fumen&lt;br /&gt;
Asheara&lt;br /&gt;
Kuupid&lt;br /&gt;
Zhukuram&lt;br /&gt;
(PASSED)&lt;br /&gt;
&lt;br /&gt;
Group #2&lt;br /&gt;
Obol&lt;br /&gt;
Shemei&lt;br /&gt;
Nethkharia&lt;br /&gt;
Jyin&lt;br /&gt;
wulffgrymm&lt;br /&gt;
Remco&lt;br /&gt;
natta&lt;br /&gt;
(PASSED)&lt;br /&gt;
&lt;br /&gt;
GROUP #3&lt;br /&gt;
Casino, Dalia, Hamadi, Yari, Bryce, Chet Stevehotep  (PASSED)&lt;br /&gt;
&lt;br /&gt;
GROUP #4&lt;br /&gt;
Farmer, Rana, Eclypse, Menoblack, gyges, Roweena, windingo (passed)&lt;br /&gt;
&lt;br /&gt;
GROUP #5&lt;br /&gt;
PetrusIV, GHawkins, Pira, Arahgon, Nitocris,Mariamom, Pheros (passed)&lt;br /&gt;
&lt;br /&gt;
GROUP 6: Bluebell, Kohaus, Peaches, Orchid, River,Tripps,SinDrome&lt;br /&gt;
WAITING LIST:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bluebell&lt;br /&gt;
Nicko&lt;br /&gt;
JaylenaeYbarre&lt;br /&gt;
Thunderstorm&lt;br /&gt;
Xaxyx&lt;br /&gt;
Helena&lt;br /&gt;
Mariamom&lt;br /&gt;
PetrusIV&lt;br /&gt;
Sheeba&lt;br /&gt;
Naia&lt;br /&gt;
Wing&lt;br /&gt;
Chip&lt;br /&gt;
Dale&lt;br /&gt;
Ahnati&lt;br /&gt;
Lindie&lt;br /&gt;
Torendo&lt;br /&gt;
Keta&lt;br /&gt;
Olivia&lt;br /&gt;
Anuket&lt;br /&gt;
Porthos&lt;br /&gt;
Bessieloo&lt;br /&gt;
Armatus&lt;br /&gt;
Bastia&lt;br /&gt;
Strutter&lt;br /&gt;
Menmaatre&lt;br /&gt;
&lt;br /&gt;
See info on link below:&lt;br /&gt;
Please see the [[Guilds/HHOFW/pilgrim|planning page]].&lt;br /&gt;
&lt;br /&gt;
== Vigil == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
HHoFW vigils are run on a donation basis; we attempt, through donations and the efforts of guild members,  to stockpile sufficient materials to fully meet the requirements of a 48+ hour vigil. Participants are required to bring nothing, but donations are welcome and appreciated. (Participants need to have signed up at UWorship for Test of the Vigil.)&lt;br /&gt;
&lt;br /&gt;
During the vigil, one guild elder will always be acting as the leader. That person will maintain a list of the individuals currently participating. The leader will assign sacrifices to those individuals on a round robin basis, withdrawing the required mats from guild storage and giving them to the individual to whom a sac is assigned.&lt;br /&gt;
&lt;br /&gt;
Participants are required to join the HHoFW of Egypt guild; guild house is at 1343 2798 in River Plains.  Altar located at 1337 2826 (West of Uthought).&lt;br /&gt;
Upon arrival at the vigil site, guild members who wish to join the group currently being given sacs should announce to the leader their arrival and request to be added to the active list.&lt;br /&gt;
&lt;br /&gt;
Individuals in the current active sac list are expected to be available and reasonably close to the vigil leader when it is their turn to make a sacrifice. If you are AFK or not nearby, the leader may skip you and move on to the next name on the list. Some sacrifices may exceed your carry capacity, so try to stand within range of the vigil fire, while being in a spot where the leader can easily see and select you (so as to give you mats). Participants are free to leave and return as often as they like, however, when doing do, please inform the leader so the list can be updated. Similarly, when going AFK or logging out, please also inform the leader.&lt;br /&gt;
&lt;br /&gt;
Please do not ask to sac unless you have not passed Test of the Vigil. In the past there was a myth which surfaced from time to time that the more people who participated in a vigil, including those who have passed, the better it was.  In fact, as simply doing some arithmetic with the scoring system will show, anytime a person who has passed makes a sacrifice instead of someone who has not, the only effect is to lower the points credited to at least one person who needs to pass.&lt;br /&gt;
&lt;br /&gt;
Again, we operate through donations. Please do consider helping out.&lt;br /&gt;
&lt;br /&gt;
'''SACS UNLIMITED PER PERSON. SUBJECT TO CHANGE LATER IN THE GAME'''&lt;br /&gt;
&lt;br /&gt;
'''Altar 1337 2826'''&amp;lt;br&amp;gt;&lt;br /&gt;
'''Donation warehouses 1331 2827'''&lt;br /&gt;
&lt;br /&gt;
=== Material Needed and Inventories ===&lt;br /&gt;
&lt;br /&gt;
Please see the [[Guilds/HHOFW/mats|materials page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Guild Elder Shift Sign Ups ===&lt;br /&gt;
&lt;br /&gt;
Next Vigil: January 25th, 26th  and Ends at 1AM EST on the  27th&lt;br /&gt;
&lt;br /&gt;
Time:8:00 PM EST&lt;br /&gt;
&lt;br /&gt;
Date: to be announced &lt;br /&gt;
&lt;br /&gt;
Day:to be announced (will be shut down at  on )&lt;br /&gt;
&lt;br /&gt;
Times are EST&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Time&lt;br /&gt;
!Elder&lt;br /&gt;
|-&lt;br /&gt;
| day 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8pm - 12am ||kuupid&lt;br /&gt;
|-&lt;br /&gt;
| day 2||&lt;br /&gt;
|-&lt;br /&gt;
| 12am - 4am || Selune&lt;br /&gt;
|-&lt;br /&gt;
| 4am - 8am || Selune&lt;br /&gt;
|-&lt;br /&gt;
| 8am - 12pm ||&lt;br /&gt;
|-&lt;br /&gt;
| 12pm - 4pm ||&lt;br /&gt;
|-&lt;br /&gt;
| 4pm - 8pm || &lt;br /&gt;
|-&lt;br /&gt;
| 8pm - 12am || &lt;br /&gt;
|-&lt;br /&gt;
| day 3||&lt;br /&gt;
|-&lt;br /&gt;
| 12am - 4am ||&lt;br /&gt;
|-&lt;br /&gt;
| 4am - 8am || &lt;br /&gt;
|-&lt;br /&gt;
| 8am - 12pm ||&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]]{{DEFAULTSORT:HHOFW_of_Egypt}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226746</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226746"/>
		<updated>2013-01-16T16:35:23Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fishing Macro for Testing}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Pin up your Lures menu 'Self Click, Skills, Fishing, Use Lure' (no other pinned up windows can exist)&lt;br /&gt;
-- Should have (Chat-Related): 'Chat and Inventory can be minimized' AND 'Minimized chat-channels are still visible'.&lt;br /&gt;
-- You must have Main Chat tab showing at all times and window is long/wide enough so no lines don't wrap.&lt;br /&gt;
&lt;br /&gt;
-- Yes, this macro reads your MAIN chat screen, so make sure you read the above statement for it to work correctly.&lt;br /&gt;
-- Each line of text must not scroll/wrap to the next line. If it does, then drag your chat window wider so it doesn't wrap.&lt;br /&gt;
-- You want to make your chat very wide. Note: It is possible to see a LONG message like &amp;quot;Though you lost your lure, you did catch a 15 deben Orange Spongefish&amp;quot;&lt;br /&gt;
-- Another long message is &amp;quot;You didn't catch anything. You also lost your lure. Try different lures and locations&amp;quot;&lt;br /&gt;
-- At 1280x1024 your chat screen should reach at least to the mid point of your screen to avoid having a chat line wrap to next line, for a long message, like above.&lt;br /&gt;
-- Higher resolutions may not have to reach quite to the mid point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ********** This macro writes to a log file (Fishlog.txt) for most actions, so you can review later! ******&lt;br /&gt;
-- ********** This also macro writes to a log file (Fishstats.txt) showing stats of your last fishing session, so you can review later! ******&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--You can delete any of the log files if you wish. It will automatically create new ones if they dont exist.&lt;br /&gt;
--The fishlog.txt file gets appended everytime you fish, so the file can grow quite long over time.&lt;br /&gt;
--The fishstats.txt file gets overwritten everytime your gui program window updates, so it doesn't 'grow' over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Main chat tab is not showing&amp;quot; and other errors can usually be overcome by adjusting the main chat window size and restarting, assuming main chat is showing.&lt;br /&gt;
-- And also verify the lines aren't wrapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The very first thing this macro does is to Self Click, Special, What Time is it? option. This will then display the time in main chat window.&lt;br /&gt;
-- The macro then parses time displayed, in main chat tab, so it can use it while the macro runs (Log files and on screen display).&lt;br /&gt;
-- Thats what the mysterious Self Click is doing, its not a bug, it is suppose to do that and thats why, to fetch the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Note: These are currently refered to as Common Fish in the below 'SkipCommon' type of fishes (True or False), in the 'Custom Variables' section.&lt;br /&gt;
&lt;br /&gt;
	--Abdju&lt;br /&gt;
	--Chromis&lt;br /&gt;
	--Catfish&lt;br /&gt;
	--Carp&lt;br /&gt;
	--Perch&lt;br /&gt;
	--Phagrus&lt;br /&gt;
	--Tilapia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--CUSTOM VARIABLES -- EDIT HERE To Change Fishing Casts, Skips, Updates.&lt;br /&gt;
&lt;br /&gt;
TotalCasts=3; --Total Casts per lure, if a fish caught. If no fish then it skips.&lt;br /&gt;
SkipCommon = false; --Skips to next lure if fish caught is a common (Choose True or False).&lt;br /&gt;
LureChangesToUpdateTimer = 7; --Total lures used before time is updated. Zero updates every new lure.&lt;br /&gt;
IgnoreUnknown = false; --Continues the script if fish is not recognized&lt;br /&gt;
&lt;br /&gt;
--AlmostCaughtAttempts = 0; --Adds additional attempts to the current lure if Unusual, Strange fish are seen;&lt;br /&gt;
-- Note: AlmostCaughtAttempts above was already commented out upon arriving to Talescripts.&lt;br /&gt;
-- It is also commented out during the script, so uncommenting above will NOT activate the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Additional reporting in the log file&lt;br /&gt;
-- Choose True or False.&lt;br /&gt;
	-- Note 'LogStrangeUnusual' and 'LogOdd' (below) overrides LogFails setting. ie if LogStrange true, then it would still log even if LogFails = False&lt;br /&gt;
	--If LogFails = false and LogStrangeUnusual or LogOdd = true, then failed catches those would still be included in the log file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LogFails = true;  	-- Do you want to add Failed Catches to log file? 'Failed to catch anything' or 'No fish bit'. Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogStrangeUnusual = true; 	-- Do you want to add Strange and Unusual fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogOdd = true; 	-- Do you want to add Odd fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- END CUSTOM VARIABLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Fishing_Func.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetupLureGroup()&lt;br /&gt;
&lt;br /&gt;
	TLures = {};&lt;br /&gt;
	FirstLure=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLure = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindPin = srFindImage(&amp;quot;UnPin.png&amp;quot;);&lt;br /&gt;
	if FindPin then&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	--Click the pinup to refresh the lures window&lt;br /&gt;
&lt;br /&gt;
	srClickMouseNoMove(FindPin[0]+5,FindPin[1]+30);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		DownPin = srFindImageInRange(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,500);&lt;br /&gt;
		if DownPin then&lt;br /&gt;
			--Just Incase&lt;br /&gt;
			UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
			if UpArrow then&lt;br /&gt;
				srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				srReadScreen();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		--	srClickMouseNoMove(DownPin[0]+5,DownPin[1]+5);&lt;br /&gt;
			LastLure=FindLureName(DownPin[0]-150,DownPin[1]-10,150,25);&lt;br /&gt;
			--error(LastLure);&lt;br /&gt;
			FirstLure = FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
		--	error(FirstLure);&lt;br /&gt;
		else&lt;br /&gt;
			--No Arrows on lure menu?&lt;br /&gt;
			FirstLure=FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
			LastLure=nil;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Didn\'t find Lures pinned window - Self Click-&amp;gt;Skills, Fishing -&amp;gt; Use Lure, PIN THIS WINDOW!&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if  LastLure ~= nil then&lt;br /&gt;
		--We have last lure, and arrows showing&lt;br /&gt;
		ChangeLureMenu = LastLure;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		FirstLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. FirstLure);&lt;br /&gt;
		LastLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. LastLure);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #Lures,1 do&lt;br /&gt;
			test = srFindImageInRange((&amp;quot;fishing/&amp;quot; .. Lures[i]),FirstLurLoc[0]-5,FirstLurLoc[1]-5,175,500);&lt;br /&gt;
&lt;br /&gt;
			if test then&lt;br /&gt;
				--Add Lure&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
				if Lures[i] == LastLure then&lt;br /&gt;
					--End of Menu, Use Down Arrow&lt;br /&gt;
					arrow=srFindImageInRange(&amp;quot;Fishing/menu_downarrow.png&amp;quot;,test[0],test[1]-5,175,50);&lt;br /&gt;
					if arrow then&lt;br /&gt;
						DownArrowLocs = arrow;&lt;br /&gt;
						srClickMouseNoMove(arrow[0]+5,arrow[1]+5);&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
						srReadScreen();&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
					else&lt;br /&gt;
						error(&amp;quot;no arrow found&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				LastLureMenu = Lures[i];&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--Reset Lure Menu&lt;br /&gt;
		UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
		if UpArrow then&lt;br /&gt;
			srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	else&lt;br /&gt;
		--No arrows, just get lures&lt;br /&gt;
		for i = 1, #Lures, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lures[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return TLures;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function FindLureName(x,y,w,h)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #Lures, 1 do &lt;br /&gt;
		Lure = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Lures[i], x,y,w,h);&lt;br /&gt;
		if Lure then&lt;br /&gt;
			return Lures[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GetLure()&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	&lt;br /&gt;
	if CurrentLureIndex == LastLureIndex then&lt;br /&gt;
		-- Use Down Menu&lt;br /&gt;
		srClickMouseNoMove(DownArrowLocs[0]-5,DownArrowLocs[1]-5);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
	if not lure then&lt;br /&gt;
		--Failed to find lure&lt;br /&gt;
		error(&amp;quot;Can\'t find a lure!&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		slure = Lures[PlayersLures[CurrentLureIndex]];&lt;br /&gt;
		slure = string.sub(slure,string.find(slure,&amp;quot;_&amp;quot;)+1,string.len(slure) - 4);&lt;br /&gt;
		--statusScreen(&amp;quot;Using Lure &amp;quot; .. slure);&lt;br /&gt;
		return slure&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UseLure()&lt;br /&gt;
	-- Uses lure according to CurrentLureIndex, which is used in PlayersLures which contains each lure the player has. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if #TLures == 0 then&lt;br /&gt;
	error 'Can\'t find any lures on the pinned window. Did you run out of lures?'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
	if lure then&lt;br /&gt;
		srClickMouseNoMove(lure[0]+3,lure[1]+3);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		-- Find Lure Type&lt;br /&gt;
		for i = 1, #Lure_Types, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lure_Types[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				--Click it!&lt;br /&gt;
				srClickMouseNoMove(test[0]+3,test[1]+3);&lt;br /&gt;
				gui_refresh();&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if PlayersLures[CurrentLureIndex] == ChangeLureMenu then&lt;br /&gt;
		down = srFindImage(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(down[0]+5,down[1]+5);&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	elseif PlayersLures[CurrentLureIndex] == LastLureMenu  then&lt;br /&gt;
		up = srFindImage(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(up[0]+5,up[1]+5);&lt;br /&gt;
		CurrentLureIndex=1;&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ChatReadFish()&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
	&lt;br /&gt;
	-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
	if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Caught Something..  Find Fish Details&lt;br /&gt;
	Sfish = &amp;quot;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, #CL_Fish do&lt;br /&gt;
		ChatFish = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Fish[i],Coords[0] ,Coords[1],500,25);&lt;br /&gt;
		if ChatFish then&lt;br /&gt;
			Sfish = string.sub(CL_Fish[i],string.find(CL_Fish[i],&amp;quot;Fish_&amp;quot;) + 5,string.len(CL_Fish[i]) - 4);&lt;br /&gt;
			GrandTotalCaught = GrandTotalCaught + 1&lt;br /&gt;
			break;&lt;br /&gt;
		end					&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	if  string.len(Sfish) &amp;lt; 1 then&lt;br /&gt;
		-- This fish name and fishname.png file likely needs to be added to Fishing_Func.inc, under the CL_Fish array and the .png added to /Images/Fishing folder&lt;br /&gt;
		if IgnoreUnknown then&lt;br /&gt;
			Sfish = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
			SNum = &amp;quot;1&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Unknown Fish! PLEASE, Take screenshot (Alt+C) of main chat tab, share with Talescripts team!&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--Find Size&lt;br /&gt;
		for i = #CL_Number,1,-1 do&lt;br /&gt;
			ChatSize =  srFindImageInRange(&amp;quot;fishing/&amp;quot; .. CL_Number[i],Coords[0],Coords[1],500,25);&lt;br /&gt;
			if ChatSize then&lt;br /&gt;
				SNum = string.sub(CL_Number[i],string.find(CL_Number[i],&amp;quot;_&amp;quot;) + 1, string.len(CL_Number[i]) - 4);&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		GrandTotaldb = GrandTotaldb + SNum;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return(Sfish .. &amp;quot; (&amp;quot; .. SNum .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function findchat(line)&lt;br /&gt;
	--Reads a chat line and returns a basic string for better processing&lt;br /&gt;
	&lt;br /&gt;
	-- Odd fish means your fly fishing skill is not high enough. Raise it with enormous amounts of fishing.&lt;br /&gt;
	-- Strange fish means you need a better rod to catch the rish. You may succeed on future attempts.&lt;br /&gt;
	-- Unusual fish means your speed skill was not high enough to catch this type of fish. If it is almost enough, you may catch them on future casts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Possible fishing messages&lt;br /&gt;
	--	Caught A (SIZE) Deben (FISH)&lt;br /&gt;
	--	You almost caught a strange fish&lt;br /&gt;
	--		(You almost caught a strange fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an unusual fish&lt;br /&gt;
	--		(You almost caught an unusual fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an odd fish&lt;br /&gt;
	--		(You almost caught an odd fish. You also lost your lure.)&lt;br /&gt;
	--	Although you lost your lure  (Caught a fish)&lt;br /&gt;
	--	Using a (LURE) (TYPE) lure.&lt;br /&gt;
	--	You are carrying more than you can manage.&lt;br /&gt;
	--	You are carrying too much bulk.&lt;br /&gt;
	--	You didn't catch anything.&lt;br /&gt;
	--		(You didn't catch anything. You also lost your lure.)&lt;br /&gt;
	--	No Fish Bit.&lt;br /&gt;
	--		(No Fish Bit. You also lost your lure.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if line and line &amp;gt; 0 then&lt;br /&gt;
		Coords = imgs[(#imgs) - line];&lt;br /&gt;
			if not Coords then&lt;br /&gt;
			error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Find What Happened&lt;br /&gt;
&lt;br /&gt;
	ChatType = &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #Chat_Types -1,2 do&lt;br /&gt;
		test = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Chat_Types[i],Coords[0],Coords[1],500,30);		&lt;br /&gt;
		if test then&lt;br /&gt;
			--Found Chat&lt;br /&gt;
			ChatType = Chat_Types[i + 1];&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	--Break down!&lt;br /&gt;
	if ChatType then&lt;br /&gt;
		--if ChatType == &amp;quot;lure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofishlostlure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofish&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
		return ChatType;&lt;br /&gt;
	else&lt;br /&gt;
		error(ChatType);&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GetTime()&lt;br /&gt;
	--Reads time stamp using special-&amp;gt;what time menu&lt;br /&gt;
	winsize = srGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	--Open Menu, Press the Esc key to open the Self Click menu&lt;br /&gt;
&lt;br /&gt;
	-- Move mouse to center of screen before Sending the Esc key, to get the Self Click menu. We dont want it self clicking near the edge of screen causing an error.&lt;br /&gt;
	srSetMousePos(winsize[0]/2,winsize[1]/2);&lt;br /&gt;
	lsSleep(100);  -- This delay is critical for any srSetMousePos. Without it, the mouse will not have time to actually move!&lt;br /&gt;
&lt;br /&gt;
	srKeyEvent(string.char(27));  -- Send Esc Key&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
	&lt;br /&gt;
	--Find Special Menu&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	menu = srFindImage(&amp;quot;Fishing/Menu_Special.png&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if menu then&lt;br /&gt;
		--Click it!&lt;br /&gt;
		srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
		&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
		-- Look for the What Time Is It? option in menu&lt;br /&gt;
		menu = srFindImage(&amp;quot;Fishing/Menu_WhatTime.png&amp;quot;);&lt;br /&gt;
		if menu then&lt;br /&gt;
			--Click it!&lt;br /&gt;
			srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	for i = #CL_Time, 1, -1 do&lt;br /&gt;
		Stime = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Time[i],Coords[0],Coords[1],400,25);&lt;br /&gt;
		if Stime then&lt;br /&gt;
			Hour = string.sub(CL_Time[i],string.find(CL_Time[i],&amp;quot;ime_&amp;quot;)+4,string.len(CL_Time[i])-4);&lt;br /&gt;
			&lt;br /&gt;
			AM = srFindImageInRange(&amp;quot;Fishing/Chatlog_Time_AM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
			if AM then&lt;br /&gt;
				CurrentTime=(Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
				return (Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				PM = srFindImageInRange(&amp;quot;Fishing/chatlog_time_PM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
				if PM then&lt;br /&gt;
					CurrentTime=(Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
					return (Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gui_refresh()&lt;br /&gt;
	lsDoFrame();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if GrandTotalCaught &amp;lt; 10 then&lt;br /&gt;
	last10 = GrandTotalCaught .. &amp;quot;/10&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	last10 = 10;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Stats (On Screen Display)&lt;br /&gt;
	--CurrentLureIndex  out of  PlayersLures&lt;br /&gt;
	winsize = lsGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	lsPrintWrapped(10, 0, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lure Index: &amp;quot; .. CurrentLureIndex .. &amp;quot; out of &amp;quot; .. #PlayersLures .. &amp;quot;       &amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 20, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Time: &amp;quot; .. CurrentTime);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 40, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Last [&amp;quot; .. last10 .. &amp;quot;] Fish Caught:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Reset this string before showing last 10 fish below. Else the entries will multiply with entries from previous loops/call to this function&lt;br /&gt;
	last10caught = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if #gui_log_fish &amp;gt; 10 then&lt;br /&gt;
		table.remove(gui_log_fish,1);&lt;br /&gt;
	end&lt;br /&gt;
		for i = 1, #gui_log_fish,1 do&lt;br /&gt;
			lsPrintWrapped(10, 50 + (12*i), 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, gui_log_fish[i]);&lt;br /&gt;
			last10caught = last10caught .. gui_log_fish[i] .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-133, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Odd Fish Seen: &amp;quot; .. GrandTotalOdd);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-121, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Unusual Fish Seen: &amp;quot; .. GrandTotalUnusual);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-109, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Strange Fish Seen: &amp;quot; .. GrandTotalStrange);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-97, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-85, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Clicked: &amp;quot; .. GrandTotalLuresUsed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-73, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Lost: &amp;quot; .. GrandTotalLostLures);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-61, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-49, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Total Casts: &amp;quot; .. GrandTotalCasts);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-37, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Failed Catches: &amp;quot; .. GrandTotalFailed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-25, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Fish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Write stats to log file. Everytime the GUI screen is updated, so is the log file.&lt;br /&gt;
&lt;br /&gt;
	WriteFishStats(&amp;quot;Last Session Hour: &amp;quot; .. CurrentTime .. &amp;quot;\n\nOdd Fish Seen: &amp;quot; .. GrandTotalOdd .. &amp;quot;\nUnusual Fish Seen: &amp;quot; .. GrandTotalUnusual .. &amp;quot;\nStrange Fish Seen: &amp;quot; .. GrandTotalStrange .. &amp;quot;\n---------------------\nLures Clicked: &amp;quot; .. GrandTotalLuresUsed .. &amp;quot;\nLures Lost: &amp;quot; .. GrandTotalLostLures .. &amp;quot; \n---------------------\nTotal Casts: &amp;quot; .. GrandTotalCasts .. &amp;quot;\nFailed Catches: &amp;quot; .. GrandTotalFailed .. &amp;quot;\nFish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)\n---------------------\n\nLast 10 Fish Caught:\n\n&amp;quot;.. last10caught);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;MAIN chat tab MUST be showing and wide enough so that each lines doesn't wrap. Pin up Lures Menu (Self, Skills, Fishing, Use Lures). No other pinned menus can exist. More detailed instructions are included inside the script as comments at top. There are options you can set in the script such as how many casts per lure, what gets written to the log file and more! History will be recorded in FishLog.txt and stats in FishStats.txt. Most errors can be fixed by slightly adjusting/moving your chat screen! Press Shift to continue.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Gui_Main();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Variables Used By Program -- Don't Edit Unless you know what you're doing!&lt;br /&gt;
	CurrentLure = &amp;quot;&amp;quot;; --Don't Edit&lt;br /&gt;
	gui_log_fish = {}; --Don't Edit, holds log display&lt;br /&gt;
	log_fish = {};&lt;br /&gt;
	CurrentLureIndex=0; -- 1 = First Lure Player Owns in alphabetical order&lt;br /&gt;
	ChangeLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	DownArrowLocs=nil;&lt;br /&gt;
	PlayersLures={}; --Don't Edit, Holds Current Player Lures&lt;br /&gt;
	CurrentTime=&amp;quot;&amp;quot;; --Don't Edit, Holds Time Check Value&lt;br /&gt;
	TotalLuresUsed = 0;&lt;br /&gt;
	castcount = 0;&lt;br /&gt;
	--strangecounter = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--These variables were later added for displaying additional info on the screen.&lt;br /&gt;
-- Used for the extra reporting/statistics, on screen.&lt;br /&gt;
-- Dont Edit Unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
	GrandTotalCaught = 0;&lt;br /&gt;
	GrandTotalCasts = 0;&lt;br /&gt;
	GrandTotaldb = 0;&lt;br /&gt;
	GrandTotalStrange = 0;&lt;br /&gt;
	GrandTotalOdd = 0;&lt;br /&gt;
	GrandTotalUnusual = 0;&lt;br /&gt;
	GrandTotalLuresUsed = 0;&lt;br /&gt;
	GrandTotalLostLures = 0;&lt;br /&gt;
	GrandTotalFailed = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	PlayersLures = SetupLureGroup();&lt;br /&gt;
	CurrentTime = GetTime();&lt;br /&gt;
	lsSleep(1500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Write an entry into log file to show this is a new session&lt;br /&gt;
	WriteFishLog(&amp;quot;[New Session]\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while 1 do&lt;br /&gt;
		&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		--cast = srFindImage(&amp;quot;Fishing/Button_Fish.png&amp;quot;);&lt;br /&gt;
		cast = srFindImage(&amp;quot;fishicon.png&amp;quot;);&lt;br /&gt;
		if not cast then&lt;br /&gt;
			error(&amp;quot;cannot find fishing button&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if castcount == 0 then&lt;br /&gt;
			--Update counters&lt;br /&gt;
			castcount = 1;&lt;br /&gt;
			CurrentLureIndex = CurrentLureIndex +1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if CurrentLureIndex &amp;gt; #PlayersLures then&lt;br /&gt;
				--Refresh the Lure window, and reindex it, in case some were lost.&lt;br /&gt;
				PlayersLures = SetupLureGroup();&lt;br /&gt;
				CurrentLureIndex = 1;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			--Update the time if ready, always update before new lure to keep chat/log proper&lt;br /&gt;
			if TotalLuresUsed == LureChangesToUpdateTimer then&lt;br /&gt;
				--Update Time&lt;br /&gt;
&lt;br /&gt;
				CurrentTime = GetTime();&lt;br /&gt;
				TotalLuresUsed = 0;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			--Since no casts been made at all, use a lure&lt;br /&gt;
			UseLure();&lt;br /&gt;
			lsSleep(2000);&lt;br /&gt;
			TotalLuresUsed = TotalLuresUsed + 1;&lt;br /&gt;
			GrandTotalLuresUsed = GrandTotalLuresUsed + 1;&lt;br /&gt;
			&lt;br /&gt;
			--update log&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			&lt;br /&gt;
		elseif castcount  &amp;gt; TotalCasts then&lt;br /&gt;
		--	if strangecounter &amp;gt; 0 and strangecounter &amp;lt; AlmostCaughtAttempts then&lt;br /&gt;
				--we don't reset yet!&lt;br /&gt;
		--	else&lt;br /&gt;
				--Reset&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				strangecounter = 0;&lt;br /&gt;
		--	end&lt;br /&gt;
		else&lt;br /&gt;
			--Cast&lt;br /&gt;
			srClickMouseNoMove(cast[0]+3,cast[1]+3);&lt;br /&gt;
			lsSleep(1000);&lt;br /&gt;
			checkBreak();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			while findchat(castcount - 1) == &amp;quot;lure&amp;quot; do&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				checkBreak();&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			castcount = castcount + 1;&lt;br /&gt;
			GrandTotalCasts = GrandTotalCasts + 1;	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--Read Chat&lt;br /&gt;
			ChatType = findchat();&lt;br /&gt;
&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
&lt;br /&gt;
			CurrentLure = string.sub(PlayersLures[CurrentLureIndex],string.find(PlayersLures[CurrentLureIndex],&amp;quot;_&amp;quot;)+1,string.len(PlayersLures[CurrentLureIndex])-4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ChatType == &amp;quot;nobitlostlure&amp;quot; then&lt;br /&gt;
				--No fish bit. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nobit&amp;quot; then&lt;br /&gt;
				--No fishbit&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatchlostlure&amp;quot; then&lt;br /&gt;
				--You didn't catch anything. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatch&amp;quot; then&lt;br /&gt;
				--You didn't catch anything.&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;alreadyfishing&amp;quot; then&lt;br /&gt;
				--castcount = castcount-1;&lt;br /&gt;
				lsSleep(15000); -- Long pause to wait for fishing queue to stop. Somehow it pushed the Fish button twice and now you will cast 2 times in a row. &lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You are already fishing!&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
				--Strange Fish&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
			&lt;br /&gt;
	&lt;br /&gt;
			elseif ChatType == &amp;quot;strangelostlure&amp;quot; then&lt;br /&gt;
				-- Strange Fish and lost lure&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Can't uncomment below elseif statement until we get a screenshot of a message of you were not quick enough. You also lost your lure.&lt;br /&gt;
-- This would need to be added to Fishing_Func.inc , in the Chat_Types {array} along with adding Chatlog_AlmostUnusualLostlure.png). Add above &amp;quot;unusual&amp;quot; line in the array				&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--elseif ChatType == &amp;quot;unusuallostlure&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				--GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				--GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				--GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--if LogStrangeUnusual == true then&lt;br /&gt;
					--WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					--end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;odd&amp;quot; then&lt;br /&gt;
				-- Odd Fish&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogOdd == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;oddlostlure&amp;quot; then&lt;br /&gt;
				-- Odd Fish and lost lure&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;carry&amp;quot; then&lt;br /&gt;
				--chat lines are messed up now&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;caught&amp;quot; or ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
				Fish = ChatReadFish();&lt;br /&gt;
&lt;br /&gt;
				table.insert(gui_log_fish,Fish);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				if ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
					GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Though you lost your lure, you did catch a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					-- This Needs Check for new lure. This will cause a error if not.&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
				else&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Caught a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				--gui_refresh();&lt;br /&gt;
				&lt;br /&gt;
				if SkipCommon == true then&lt;br /&gt;
					FishType = string.sub(Fish,string.find(Fish,&amp;quot;,&amp;quot;) + 1);&lt;br /&gt;
					if FishType == &amp;quot;Abdju&amp;quot; or FishType == &amp;quot;Chromis&amp;quot; or FishType == &amp;quot;Catfish&amp;quot; or FishType == &amp;quot;Carp&amp;quot; or FishType == &amp;quot;Perch&amp;quot; or FishType == &amp;quot;Phagrus&amp;quot; or FishType == &amp;quot;Tilapia&amp;quot; then&lt;br /&gt;
						--Skip it&lt;br /&gt;
						castcount=0;&lt;br /&gt;
&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		gui_refresh();&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	gui_refresh();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=New Raeli Oven Monitor (IN TESTING v3)}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Raeli Color Monitor v1.1c (edit by Selune) --&lt;br /&gt;
  Make sure the Raeli Oven is pinned, select the ATITD window, and press shift.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
stop_at_CB = false;&lt;br /&gt;
take_screenshots = true;&lt;br /&gt;
stop_at_color = &amp;quot;White&amp;quot;;&lt;br /&gt;
confidence_threshold = 15;&lt;br /&gt;
saved_x = 0;&lt;br /&gt;
saved_y = 0;&lt;br /&gt;
go_now = false;&lt;br /&gt;
&lt;br /&gt;
color_names = {&amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;, &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;Burlywood&amp;quot;, &amp;quot;CadetBlue&amp;quot;, &amp;quot;Carrot&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;, &amp;quot;Crimson&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGray&amp;quot;, &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;, &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;, &amp;quot;DarkSlateGray&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;, &amp;quot;DimGray&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;Feldspar&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;, &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Gray&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;, &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;, &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;, &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;, &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateBlue&amp;quot;, &amp;quot;LightSlateGray&amp;quot;, &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Maroon &amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue &amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;, &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;, &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;, &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy &amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;, &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;, &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple &amp;quot;, &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;, &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGray&amp;quot;, &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue &amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;, &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;VioletRed&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot;};&lt;br /&gt;
color_values = {0xF0F8FF, 0xFAEBD7, 0x00FFFF, 0x7FFFD4, 0xF0FFFF, 0xF5F5DC, 0xFFE4C4, 0x000000, 0xFFEBCD, 0x0000FF, 0x8A2BE2, 0xA52A2A, 0xDEB887, 0x5F9EA0, 0xE07020, 0x7FFF00, 0xD2691E, 0xFF7F50, 0x6495ED, 0xFFF8DC, 0xDC143C, 0x00008B, 0x008B8B, 0xB8860B, 0xA9A9A9, 0x006400, 0xBDB76B, 0x8B008B, 0x556B2F, 0xFF8C00, 0x9932CC, 0x8B0000, 0xE9967A, 0x8FBC8F, 0x483D8B, 0x2F4F4F, 0x00CED1, 0x9400D3, 0xFF1493, 0x00BFFF, 0x696969, 0x1E90FF, 0xD19275, 0xB22222, 0xFFFAF0, 0x228B22, 0xFF00FF, 0xDCDCDC, 0xF8F8FF, 0xFFD700, 0xDAA520, 0x808080, 0x008000, 0xADFF2F, 0xF0FFF0, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0xFFFFF0, 0xF0E68C, 0xE6E6FA, 0xFFF0F5, 0x7CFC00, 0xFFFACD, 0xADD8E6, 0xF08080, 0xE0FFFF, 0xFAFAD2, 0x90EE90, 0xD3D3D3, 0xFFB6C1, 0xFFA07A, 0x20B2AA, 0x87CEFA, 0x8470FF, 0x778899, 0xB0C4DE, 0xFFFFE0, 0x00FF00, 0x32CD32, 0xFAF0E6, 0x800000, 0x66CDAA, 0x0000CD, 0xBA55D3, 0x9370DB, 0x3CB371, 0x7B68EE, 0x00FA9A, 0x48D1CC, 0xC71585, 0x191970, 0xF5FFFA, 0xFFE4E1, 0xFFE4B5, 0xFFDEAD, 0x000080, 0xFDF5E6, 0x808000, 0x6B8E23, 0xFFA500, 0xFF4500, 0xDA70D6, 0xEEE8AA, 0x98FB98, 0xAFEEEE, 0xDB7093, 0xFFEFD5, 0xFFDAB9, 0xCD853F, 0xFFC0CB, 0xDDA0DD, 0xB0E0E6, 0x800080, 0xFF0000, 0xBC8F8F, 0x4169E1, 0x8B4513, 0xFA8072, 0xF4A460, 0x2E8B57, 0xFFF5EE, 0xA0522D, 0xC0C0C0, 0x87CEEB, 0x6A5ACD, 0x708090, 0xFFFAFA, 0x00FF7F, 0x4682B4, 0xD2B48C, 0x008080, 0xD8BFD8, 0xFF6347, 0x40E0D0, 0xEE82EE, 0xD02090, 0xF5DEB3, 0xFFFFFF, 0xF5F5F5, 0xFFFF00, 0x9ACD32};&lt;br /&gt;
&lt;br /&gt;
-- Decimal to Hex conversion&lt;br /&gt;
function DEC_HEX(IN)&lt;br /&gt;
    local B,K,OUT,I,D=16,&amp;quot;0123456789ABCDEF&amp;quot;,&amp;quot;&amp;quot;,0&lt;br /&gt;
    while IN&amp;gt;0 do&lt;br /&gt;
        I=I+1&lt;br /&gt;
        IN,D=math.floor(IN/B),math.mod(IN,B)+1&lt;br /&gt;
        OUT=string.sub(K,D,D)..OUT&lt;br /&gt;
    end&lt;br /&gt;
    return OUT&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Color Conversions&lt;br /&gt;
function rgb2hsl(src_r, src_g, src_b)&lt;br /&gt;
	local h, s, l, d;&lt;br /&gt;
	src_r = src_r / 255;&lt;br /&gt;
	src_g = src_g / 255;&lt;br /&gt;
	src_b = src_b / 255;&lt;br /&gt;
    local max_rgb = math.max(src_r, src_g, src_b); &lt;br /&gt;
	local min_rgb = math.min(src_r, src_g, src_b);&lt;br /&gt;
    l = (max_rgb + min_rgb) / 2;&lt;br /&gt;
&lt;br /&gt;
    if(max_rgb == min_rgb) then&lt;br /&gt;
        h = 0; --achromatic&lt;br /&gt;
		s = 0;&lt;br /&gt;
    else&lt;br /&gt;
        d = max_rgb - min_rgb;&lt;br /&gt;
		if l &amp;gt; 0.5 then&lt;br /&gt;
			s = d / (2 - max_rgb - min_rgb);&lt;br /&gt;
		else&lt;br /&gt;
			s = d / (max_rgb + min_rgb);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if src_g &amp;gt; src_b then&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_b - src_r) / d + 2;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d + 6;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_r - src_g) / d + 4;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
        h = h / 6;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if h == nil then&lt;br /&gt;
		error &amp;quot;NO H&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if s == nil then&lt;br /&gt;
		error (&amp;quot;NO S   D:&amp;quot; .. d);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if l == nil then&lt;br /&gt;
		error &amp;quot;NO L&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    return h, s, l;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function rgb2lab(src_r, src_g, src_b)&lt;br /&gt;
	--R from 0 to 255&lt;br /&gt;
	--G from 0 to 255&lt;br /&gt;
	--B from 0 to 255&lt;br /&gt;
	local r = src_r/255;&lt;br /&gt;
	local g = src_g/255;&lt;br /&gt;
	local b = src_b/255;&lt;br /&gt;
 &lt;br /&gt;
	if (r &amp;gt; 0.04045) then&lt;br /&gt;
		r = math.pow((r + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		r = r / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if ( g &amp;gt; 0.04045) then&lt;br /&gt;
		g = math.pow((g + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		g = g / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if (b &amp;gt; 0.04045) then&lt;br /&gt;
		b = math.pow((b + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		b = b / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	r = r * 100;&lt;br /&gt;
	g = g * 100;&lt;br /&gt;
	b = b * 100;&lt;br /&gt;
 &lt;br /&gt;
	local x = r * 0.4124 + g * 0.3576 + b * 0.1805;&lt;br /&gt;
	local y = r * 0.2126 + g * 0.7152 + b * 0.0722;&lt;br /&gt;
	local z = r * 0.0193 + g * 0.1192 + b * 0.9505;&lt;br /&gt;
	&lt;br /&gt;
	x = x / 95.047;&lt;br /&gt;
	y = y / 100.000;  &lt;br /&gt;
	z = z / 108.883;&lt;br /&gt;
 &lt;br /&gt;
	if ( x &amp;gt; 0.008856 ) then&lt;br /&gt;
		x = math.pow( x , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		x = ( 7.787 * x ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( y &amp;gt; 0.008856 ) then&lt;br /&gt;
		y = math.pow( y , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		y = ( 7.787 * y ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( z &amp;gt; 0.008856 ) then&lt;br /&gt;
		z = math.pow( z , 1/3 );&lt;br /&gt;
	else&lt;br /&gt;
		z = ( 7.787 * z ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lab_l = ( 116 * y ) - 16;&lt;br /&gt;
	local lab_a = 500 * ( x - y );&lt;br /&gt;
	local lab_b = 200 * ( y - z );&lt;br /&gt;
 &lt;br /&gt;
	return lab_l, lab_a, lab_b;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Get nearest color name&lt;br /&gt;
function nearestColor(px)&lt;br /&gt;
	local rgb_r, rgb_g, rgb_b, tst_r, tst_g, tst_b, test_px;&lt;br /&gt;
	local lab_l, lab_a, lab_b, lab_tst_l, lab_tst_a, lab_tst_b;&lt;br /&gt;
	local hsl_h, hsl_s, hsl_l, hsl_tst_h, hsl_tst_s, hsl_tst_l;&lt;br /&gt;
	local offset, best_name, best_offset, next_best_offset, confidence;&lt;br /&gt;
	best_offset = 100000;&lt;br /&gt;
	next_best_offset = 1000000;&lt;br /&gt;
	rgb_r = ((math.floor(px/256/256/256) % 256) - 7) * 255/247;&lt;br /&gt;
	rgb_g = ((math.floor(px/256/256) % 256) - 7) * 255/247;&lt;br /&gt;
	rgb_b = ((math.floor(px/256) % 256) - 5.5) * 255/247;&lt;br /&gt;
	lab_l, lab_a, lab_b = rgb2lab(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	hsl_h, hsl_s, hsl_l = rgb2hsl(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	&lt;br /&gt;
	for i=1, #color_names do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		test_px = color_values[i];&lt;br /&gt;
		tst_r = (math.floor(test_px/256/256) % 256);&lt;br /&gt;
		tst_g = (math.floor(test_px/256) % 256);&lt;br /&gt;
		tst_b = (math.floor(test_px) % 256);&lt;br /&gt;
		lab_tst_l, lab_tst_a, lab_tst_b = rgb2lab(tst_r, tst_g, tst_b);&lt;br /&gt;
		hsl_tst_h, hsl_tst_s, hsl_tst_l = rgb2hsl(tst_r, tst_g, tst_b);&lt;br /&gt;
		&lt;br /&gt;
		---- Different methods to determine &amp;quot;distance&amp;quot; from the ideal colors. Change these to test different options.&lt;br /&gt;
		&lt;br /&gt;
		--offset = math.abs(rgb_r - tst_r) + math.abs(rgb_g - tst_g) + math.abs(rgb_b - tst_b);&lt;br /&gt;
		--offset = math.max(math.max((math.abs(rgb_r - tst_r)), math.abs(rgb_g - tst_g)), math.abs(rgb_b - tst_b));&lt;br /&gt;
		offset = (rgb_r - tst_r)^2 + (rgb_g - tst_g)^2 + (rgb_b - tst_b)^2;&lt;br /&gt;
		--offset = math.abs(lab_l - lab_tst_l) + math.abs(lab_a - lab_tst_a) + math.abs(lab_b - lab_tst_b);&lt;br /&gt;
		--offset = (lab_l - lab_tst_l)^2 + (lab_a - lab_tst_a)^2 + (lab_b - lab_tst_b)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(lab_l - lab_tst_l)), math.abs(lab_a - lab_tst_a)), math.abs(lab_b - lab_tst_b));&lt;br /&gt;
		--offset = math.abs(hsl_h - hsl_tst_h) + math.abs(hsl_s - hsl_tst_s) + math.abs(hsl_l - hsl_tst_l);&lt;br /&gt;
		--offset = (hsl_h - hsl_tst_h)^2 + (hsl_s - hsl_tst_s)^2 + (hsl_l - hsl_tst_l)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(hsl_h - hsl_tst_h)), math.abs(hsl_s - hsl_tst_s)), math.abs(hsl_l - hsl_tst_l));&lt;br /&gt;
		if (offset &amp;lt; next_best_offset) then&lt;br /&gt;
			if (offset &amp;lt; best_offset) then&lt;br /&gt;
				next_best_offset = best_offset;&lt;br /&gt;
				best_offset = offset;&lt;br /&gt;
				best_name = color_names[i]; -- .. &amp;quot;   Hex: &amp;quot; .. DEC_HEX(color_values[i]);&lt;br /&gt;
			else&lt;br /&gt;
				next_best_offset = offset;&lt;br /&gt;
			end&lt;br /&gt;
			confidence = ((next_best_offset - best_offset) / best_offset) * 100;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return best_name, math.floor(confidence);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Check pixel against target&lt;br /&gt;
function checkColor(px)&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	color_name, confidence = nearestColor(px);&lt;br /&gt;
	&lt;br /&gt;
	if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
		return true, confidence;&lt;br /&gt;
	else&lt;br /&gt;
		return false, 0;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- optional message&lt;br /&gt;
function askForPixel()&lt;br /&gt;
	local is_done = false;&lt;br /&gt;
	local have_coords = false;&lt;br /&gt;
	local color_found = false;&lt;br /&gt;
	local color_guess = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
	local tst_r, tst_g, tst_b, rgb_r, rgb_g, rgb_b;&lt;br /&gt;
	local confidence = 0;&lt;br /&gt;
	-- Display message until shift is held&lt;br /&gt;
	while not go_now do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		y = 0;&lt;br /&gt;
		mouse_x, mouse_y = srMousePos();&lt;br /&gt;
		if not have_coords then&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Mouse over one of the Raeli Oven color pixels and press Shift.&amp;quot;);&lt;br /&gt;
			if lsShiftHeld() then&lt;br /&gt;
				saved_x = mouse_x;&lt;br /&gt;
				saved_y = mouse_y;&lt;br /&gt;
				have_coords = true;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Coords chosen, press 'Reset' to change or 'Do It' to start.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 40;&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xffffff,&lt;br /&gt;
				saved_x .. &amp;quot;, &amp;quot; .. saved_y);&lt;br /&gt;
		else&lt;br /&gt;
			px = srReadPixel(mouse_x, mouse_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
				mouse_x .. &amp;quot;, &amp;quot; .. mouse_y);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		color_guess, confidence = nearestColor(px);&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;) Hex: &amp;quot; .. DEC_HEX(math.floor((px/256) % 16777216)));&lt;br /&gt;
			&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Best guess: &amp;quot; .. color_guess);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Confidence: &amp;quot; .. confidence .. &amp;quot;  (higher is better)&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- Testing other methods of grabbing the pixel, making sure RGBA values match&lt;br /&gt;
		-- srReadScreen();&lt;br /&gt;
		-- px2 = srReadPixelFromBuffer(mouse_x, mouse_y);&lt;br /&gt;
		-- lsPrintWrapped(0, 80, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
		-- 	mouse_x .. &amp;quot;, &amp;quot; .. mouse_y .. &amp;quot; = &amp;quot; .. (math.floor(px2/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256) % 256) .. &amp;quot;,&amp;quot; .. (px2 % 256) );&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 90, 0, 100, px, &amp;quot;test1&amp;quot;);&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 60, 0, 100, px2, &amp;quot;test2&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		take_screenshots = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Take Screenshots&amp;quot;, take_screenshots);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		stop_at_CB = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Stop at Color&amp;quot;, stop_at_CB);&lt;br /&gt;
		&lt;br /&gt;
		if stop_at_CB then&lt;br /&gt;
			y = y + 25;&lt;br /&gt;
			is_done = false;&lt;br /&gt;
			color_found = false;&lt;br /&gt;
			-- Edit box and text display&lt;br /&gt;
			lsPrint(10, y, z, 0.7, 0.7, 0xFFFFFFff, &amp;quot;Desired Color:&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			y = y + 20;&lt;br /&gt;
			-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
			is_done, stop_at_color = lsEditBox(&amp;quot;Desired Color:&amp;quot;, 10, y, z, 250, 30, 0.7, 0.7, 0x000000ff, &amp;quot;White&amp;quot;);&lt;br /&gt;
			--dropdown_color_cur_value = lsDropdown(&amp;quot;ColorDropDown1&amp;quot;, 5, y, 0, 200, dropdown_color_cur_value, color_names);&lt;br /&gt;
			&lt;br /&gt;
			for i=0, #color_names do&lt;br /&gt;
				if stop_at_color and color_names[i] then&lt;br /&gt;
					if (stop_at_color:upper() == (color_names[i]):upper()) then&lt;br /&gt;
						color_found = true;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not color_found then&lt;br /&gt;
				lsPrint(130, y - 20, z, 0.7, 0.7, 0xFF0000ff, &amp;quot;No such color (Remove any spaces)&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			y = y + 35;&lt;br /&gt;
			lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, &amp;quot;Confidence Required:&amp;quot;);&lt;br /&gt;
			is_done, confidence_threshold = lsEditBox(&amp;quot;confthresh&amp;quot;, 150, y, 0, 50, 30, 0.7, 0.7, 0x000000ff, confidence_threshold);&lt;br /&gt;
			confidence_threshold = tonumber(confidence_threshold);&lt;br /&gt;
			if not confidence_threshold then&lt;br /&gt;
				lsPrint(10, y+17, 10, 0.4, 0.4, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
				confidence_threshold = 10;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			is_done = true;&lt;br /&gt;
			color_found = true;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			if color_found then&lt;br /&gt;
				if lsButtonText(10, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Do It&amp;quot;) then&lt;br /&gt;
					go_now = true;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if lsButtonText(100, lsScreenY - 30, 0, 80, 0xFFA500ff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
				have_coords = false;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
	-- Wait for shift to be released&lt;br /&gt;
	while lsShiftHeld() do end;&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(askText);&lt;br /&gt;
	askForPixel();&lt;br /&gt;
	&lt;br /&gt;
	local t0 = lsGetTimer();&lt;br /&gt;
	local px = 0;&lt;br /&gt;
	local index=0;&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	local do_screenshot, do_end_burn;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		local y = 0;&lt;br /&gt;
		do_screenshot = false;&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		new_px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
		local t = (lsGetTimer() - t0) / 1000 / 60;&lt;br /&gt;
		t = math.floor(t*10 + 0.5)/10;&lt;br /&gt;
		local t_string = t;&lt;br /&gt;
		if not (new_px == px) then&lt;br /&gt;
			index = index+1;&lt;br /&gt;
			px = new_px;&lt;br /&gt;
			color_name, confidence = nearestColor(px);&lt;br /&gt;
			if take_screenshots then&lt;br /&gt;
				do_screenshot = true;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if stop_at_CB then&lt;br /&gt;
				if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
					if confidence &amp;gt; confidence_threshold then&lt;br /&gt;
						do_end_burn = true;&lt;br /&gt;
					else&lt;br /&gt;
						for i = 1, 3 do&lt;br /&gt;
							lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
							lsSleep(50);&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		y = y + 5;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Screen: &amp;quot; .. index .. &amp;quot;  Timer: &amp;quot; .. t_string);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Color: &amp;quot; .. color_name .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;)  Hex: &amp;quot; .. DEC_HEX(math.floor((new_px/256) % 16777216)));&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end	&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		if do_screenshot then&lt;br /&gt;
				srSaveLastReadScreen(&amp;quot;screen_&amp;quot; .. index .. &amp;quot;_&amp;quot; .. t_string .. &amp;quot;.png&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if do_end_burn then&lt;br /&gt;
			clickAllText(&amp;quot;Interrupt&amp;quot;);&lt;br /&gt;
			lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
			error (&amp;quot;Stopped burn at: &amp;quot; .. stop_at_color .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226722</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226722"/>
		<updated>2013-01-16T00:16:57Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fishing Macro for Testing}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Pin up your Lures menu 'Self Click, Skills, Fishing, Use Lure' (no other pinned up windows can exist)&lt;br /&gt;
-- Should have (Chat-Related): 'Chat and Inventory can be minimized' AND 'Minimized chat-channels are still visible'.&lt;br /&gt;
-- You must have Main Chat tab showing at all times and window is long/wide enough so no lines don't wrap.&lt;br /&gt;
&lt;br /&gt;
-- Yes, this macro reads your MAIN chat screen, so make sure you read the above statement for it to work correctly.&lt;br /&gt;
-- Each line of text must not scroll/wrap to the next line. If it does, then drag your chat window wider so it doesn't wrap.&lt;br /&gt;
-- You want to make your chat very wide. Note: It is possible to see a LONG message like &amp;quot;Though you lost your lure, you did catch a 15 deben Orange Spongefish&amp;quot;&lt;br /&gt;
-- Another long message is &amp;quot;You didn't catch anything. You also lost your lure. Try different lures and locations&amp;quot;&lt;br /&gt;
-- At 1280x1024 your chat screen should reach at least to the mid point of your screen to avoid having a chat line wrap to next line, for a long message, like above.&lt;br /&gt;
-- Higher resolutions may not have to reach quite to the mid point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ********** This macro writes to a log file (Fishlog.txt) for most actions, so you can review later! ******&lt;br /&gt;
-- ********** This also macro writes to a log file (Fishstats.txt) showing stats of your last fishing session, so you can review later! ******&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--You can delete any of the log files if you wish. It will automatically create new ones if they dont exist.&lt;br /&gt;
--The fishlog.txt file gets appended everytime you fish, so the file can grow quite long over time.&lt;br /&gt;
--The fishstats.txt file gets overwritten everytime your gui program window updates, so it doesn't 'grow' over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Main chat tab is not showing&amp;quot; and other errors can usually be overcome by adjusting the main chat window size and restarting, assuming main chat is showing.&lt;br /&gt;
-- And also verify the lines aren't wrapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The very first thing this macro does is to Self Click, Special, What Time is it? option. This will then display the time in main chat window.&lt;br /&gt;
-- The macro then parses time displayed, in main chat tab, so it can use it while the macro runs (Log files and on screen display).&lt;br /&gt;
-- Thats what the mysterious Self Click is doing, its not a bug, it is suppose to do that and thats why, to fetch the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Note: These are currently refered to as Common Fish in the below 'SkipCommon' type of fishes (True or False), in the 'Custom Variables' section.&lt;br /&gt;
&lt;br /&gt;
	--Abdju&lt;br /&gt;
	--Chromis&lt;br /&gt;
	--Catfish&lt;br /&gt;
	--Carp&lt;br /&gt;
	--Perch&lt;br /&gt;
	--Phagrus&lt;br /&gt;
	--Tilapia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--CUSTOM VARIABLES -- EDIT HERE To Change Fishing Casts, Skips, Updates.&lt;br /&gt;
&lt;br /&gt;
TotalCasts=3; --Total Casts per lure, if a fish caught. If no fish then it skips.&lt;br /&gt;
SkipCommon = false; --Skips to next lure if fish caught is a common (Choose True or False).&lt;br /&gt;
LureChangesToUpdateTimer = 7; --Total lures used before time is updated. Zero updates every new lure.&lt;br /&gt;
IgnoreUnknown = false; --Continues the script if fish is not recognized&lt;br /&gt;
&lt;br /&gt;
--AlmostCaughtAttempts = 0; --Adds additional attempts to the current lure if Unusual, Strange fish are seen;&lt;br /&gt;
-- Note: AlmostCaughtAttempts above was already commented out upon arriving to Talescripts.&lt;br /&gt;
-- It is also commented out during the script, so uncommenting above will NOT activate the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Additional reporting in the log file&lt;br /&gt;
-- Choose True or False.&lt;br /&gt;
	-- Note 'LogStrangeUnusual' and 'LogOdd' (below) overrides LogFails setting. ie if LogStrange true, then it would still log even if LogFails = False&lt;br /&gt;
	--If LogFails = false and LogStrangeUnusual or LogOdd = true, then failed catches those would still be included in the log file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LogFails = true;  	-- Do you want to add Failed Catches to log file? 'Failed to catch anything' or 'No fish bit'. Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogStrangeUnusual = true; 	-- Do you want to add Strange and Unusual fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogOdd = true; 	-- Do you want to add Odd fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- END CUSTOM VARIABLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Fishing_Func.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetupLureGroup()&lt;br /&gt;
&lt;br /&gt;
	TLures = {};&lt;br /&gt;
	FirstLure=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLure = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindPin = srFindImage(&amp;quot;UnPin.png&amp;quot;);&lt;br /&gt;
	if FindPin then&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	--Click the pinup to refresh the lures window&lt;br /&gt;
&lt;br /&gt;
	srClickMouseNoMove(FindPin[0]+5,FindPin[1]+30);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		DownPin = srFindImageInRange(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,500);&lt;br /&gt;
		if DownPin then&lt;br /&gt;
			--Just Incase&lt;br /&gt;
			UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
			if UpArrow then&lt;br /&gt;
				srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				srReadScreen();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		--	srClickMouseNoMove(DownPin[0]+5,DownPin[1]+5);&lt;br /&gt;
			LastLure=FindLureName(DownPin[0]-150,DownPin[1]-10,150,25);&lt;br /&gt;
			--error(LastLure);&lt;br /&gt;
			FirstLure = FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
		--	error(FirstLure);&lt;br /&gt;
		else&lt;br /&gt;
			--No Arrows on lure menu?&lt;br /&gt;
			FirstLure=FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
			LastLure=nil;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Didn\'t find Lures pinned window - Self Click-&amp;gt;Skills, Fishing -&amp;gt; Use Lure, PIN THIS WINDOW!&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if  LastLure ~= nil then&lt;br /&gt;
		--We have last lure, and arrows showing&lt;br /&gt;
		ChangeLureMenu = LastLure;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		FirstLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. FirstLure);&lt;br /&gt;
		LastLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. LastLure);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #Lures,1 do&lt;br /&gt;
			test = srFindImageInRange((&amp;quot;fishing/&amp;quot; .. Lures[i]),FirstLurLoc[0]-5,FirstLurLoc[1]-5,175,500);&lt;br /&gt;
&lt;br /&gt;
			if test then&lt;br /&gt;
				--Add Lure&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
				if Lures[i] == LastLure then&lt;br /&gt;
					--End of Menu, Use Down Arrow&lt;br /&gt;
					arrow=srFindImageInRange(&amp;quot;Fishing/menu_downarrow.png&amp;quot;,test[0],test[1]-5,175,50);&lt;br /&gt;
					if arrow then&lt;br /&gt;
						DownArrowLocs = arrow;&lt;br /&gt;
						srClickMouseNoMove(arrow[0]+5,arrow[1]+5);&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
						srReadScreen();&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
					else&lt;br /&gt;
						error(&amp;quot;no arrow found&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				LastLureMenu = Lures[i];&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--Reset Lure Menu&lt;br /&gt;
		UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
		if UpArrow then&lt;br /&gt;
			srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	else&lt;br /&gt;
		--No arrows, just get lures&lt;br /&gt;
		for i = 1, #Lures, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lures[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return TLures;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function FindLureName(x,y,w,h)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #Lures, 1 do &lt;br /&gt;
		Lure = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Lures[i], x,y,w,h);&lt;br /&gt;
		if Lure then&lt;br /&gt;
			return Lures[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GetLure()&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	&lt;br /&gt;
	if CurrentLureIndex == LastLureIndex then&lt;br /&gt;
		-- Use Down Menu&lt;br /&gt;
		srClickMouseNoMove(DownArrowLocs[0]-5,DownArrowLocs[1]-5);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
	if not lure then&lt;br /&gt;
		--Failed to find lure&lt;br /&gt;
		error(&amp;quot;Can\'t find a lure!&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		slure = Lures[PlayersLures[CurrentLureIndex]];&lt;br /&gt;
		slure = string.sub(slure,string.find(slure,&amp;quot;_&amp;quot;)+1,string.len(slure) - 4);&lt;br /&gt;
		--statusScreen(&amp;quot;Using Lure &amp;quot; .. slure);&lt;br /&gt;
		return slure&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UseLure()&lt;br /&gt;
	-- Uses lure according to CurrentLureIndex, which is used in PlayersLures which contains each lure the player has. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if #TLures == 0 then&lt;br /&gt;
	error 'Can\'t find any lures on the pinned window. Did you run out of lures?'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
	if lure then&lt;br /&gt;
		srClickMouseNoMove(lure[0]+3,lure[1]+3);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		-- Find Lure Type&lt;br /&gt;
		for i = 1, #Lure_Types, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lure_Types[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				--Click it!&lt;br /&gt;
				srClickMouseNoMove(test[0]+3,test[1]+3);&lt;br /&gt;
				gui_refresh();&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if PlayersLures[CurrentLureIndex] == ChangeLureMenu then&lt;br /&gt;
		down = srFindImage(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(down[0]+5,down[1]+5);&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	elseif PlayersLures[CurrentLureIndex] == LastLureMenu  then&lt;br /&gt;
		up = srFindImage(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(up[0]+5,up[1]+5);&lt;br /&gt;
		CurrentLureIndex=1;&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ChatReadFish()&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
	&lt;br /&gt;
	-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
	if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Caught Something..  Find Fish Details&lt;br /&gt;
	Sfish = &amp;quot;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, #CL_Fish do&lt;br /&gt;
		ChatFish = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Fish[i],Coords[0] ,Coords[1],500,25);&lt;br /&gt;
		if ChatFish then&lt;br /&gt;
			Sfish = string.sub(CL_Fish[i],string.find(CL_Fish[i],&amp;quot;Fish_&amp;quot;) + 5,string.len(CL_Fish[i]) - 4);&lt;br /&gt;
			GrandTotalCaught = GrandTotalCaught + 1&lt;br /&gt;
			break;&lt;br /&gt;
		end					&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	if  string.len(Sfish) &amp;lt; 1 then&lt;br /&gt;
		-- This fish name and fishname.png file likely needs to be added to Fishing_Func.inc, under the CL_Fish array and the .png added to /Images/Fishing folder&lt;br /&gt;
		if IgnoreUnknown then&lt;br /&gt;
			Sfish = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
			SNum = &amp;quot;1&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Unknown Fish! PLEASE, Take screenshot (Alt+C) of main chat tab, share with Talescripts team!&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--Find Size&lt;br /&gt;
		for i = #CL_Number,1,-1 do&lt;br /&gt;
			ChatSize =  srFindImageInRange(&amp;quot;fishing/&amp;quot; .. CL_Number[i],Coords[0],Coords[1],500,25);&lt;br /&gt;
			if ChatSize then&lt;br /&gt;
				SNum = string.sub(CL_Number[i],string.find(CL_Number[i],&amp;quot;_&amp;quot;) + 1, string.len(CL_Number[i]) - 4);&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		GrandTotaldb = GrandTotaldb + SNum;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return(Sfish .. &amp;quot; (&amp;quot; .. SNum .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function findchat(line)&lt;br /&gt;
	--Reads a chat line and returns a basic string for better processing&lt;br /&gt;
	&lt;br /&gt;
	-- Odd fish means your fly fishing skill is not high enough. Raise it with enormous amounts of fishing.&lt;br /&gt;
	-- Strange fish means you need a better rod to catch the rish. You may succeed on future attempts.&lt;br /&gt;
	-- Unusual fish means your speed skill was not high enough to catch this type of fish. If it is almost enough, you may catch them on future casts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Possible fishing messages&lt;br /&gt;
	--	Caught A (SIZE) Deben (FISH)&lt;br /&gt;
	--	You almost caught a strange fish&lt;br /&gt;
	--		(You almost caught a strange fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an unusual fish&lt;br /&gt;
	--		(You almost caught an unusual fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an odd fish&lt;br /&gt;
	--		(You almost caught an odd fish. You also lost your lure.)&lt;br /&gt;
	--	Although you lost your lure  (Caught a fish)&lt;br /&gt;
	--	Using a (LURE) (TYPE) lure.&lt;br /&gt;
	--	You are carrying more than you can manage.&lt;br /&gt;
	--	You are carrying too much bulk.&lt;br /&gt;
	--	You didn't catch anything.&lt;br /&gt;
	--		(You didn't catch anything. You also lost your lure.)&lt;br /&gt;
	--	No Fish Bit.&lt;br /&gt;
	--		(No Fish Bit. You also lost your lure.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if line and line &amp;gt; 0 then&lt;br /&gt;
		Coords = imgs[(#imgs) - line];&lt;br /&gt;
			if not Coords then&lt;br /&gt;
			error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Find What Happened&lt;br /&gt;
&lt;br /&gt;
	ChatType = &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #Chat_Types -1,2 do&lt;br /&gt;
		test = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Chat_Types[i],Coords[0],Coords[1],500,30);		&lt;br /&gt;
		if test then&lt;br /&gt;
			--Found Chat&lt;br /&gt;
			ChatType = Chat_Types[i + 1];&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	--Break down!&lt;br /&gt;
	if ChatType then&lt;br /&gt;
		--if ChatType == &amp;quot;lure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofishlostlure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofish&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
		return ChatType;&lt;br /&gt;
	else&lt;br /&gt;
		error(ChatType);&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GetTime()&lt;br /&gt;
	--Reads time stamp using special-&amp;gt;what time menu&lt;br /&gt;
	winsize = srGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	--Open Menu, Press the Esc key to open the Self Click menu&lt;br /&gt;
&lt;br /&gt;
	-- Move mouse to center of screen before Sending the Esc key, to get the Self Click menu. We dont want it self clicking near the edge of screen causing an error.&lt;br /&gt;
	srSetMousePos(winsize[0]/2,winsize[1]/2);&lt;br /&gt;
	lsSleep(100);  -- This delay is critical for any srSetMousePos. Without it, the mouse will not have time to actually move!&lt;br /&gt;
&lt;br /&gt;
	srKeyEvent(string.char(27));  -- Send Esc Key&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
	&lt;br /&gt;
	--Find Special Menu&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	menu = srFindImage(&amp;quot;Fishing/Menu_Special.png&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if menu then&lt;br /&gt;
		--Click it!&lt;br /&gt;
		srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
		&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
		-- Look for the What Time Is It? option in menu&lt;br /&gt;
		menu = srFindImage(&amp;quot;Fishing/Menu_WhatTime.png&amp;quot;);&lt;br /&gt;
		if menu then&lt;br /&gt;
			--Click it!&lt;br /&gt;
			srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	for i = #CL_Time, 1, -1 do&lt;br /&gt;
		Stime = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Time[i],Coords[0],Coords[1],400,25);&lt;br /&gt;
		if Stime then&lt;br /&gt;
			Hour = string.sub(CL_Time[i],string.find(CL_Time[i],&amp;quot;ime_&amp;quot;)+4,string.len(CL_Time[i])-4);&lt;br /&gt;
			&lt;br /&gt;
			AM = srFindImageInRange(&amp;quot;Fishing/Chatlog_Time_AM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
			if AM then&lt;br /&gt;
				CurrentTime=(Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
				return (Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				PM = srFindImageInRange(&amp;quot;Fishing/chatlog_time_PM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
				if PM then&lt;br /&gt;
					CurrentTime=(Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
					return (Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gui_refresh()&lt;br /&gt;
	lsDoFrame();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if GrandTotalCaught &amp;lt; 10 then&lt;br /&gt;
	last10 = GrandTotalCaught .. &amp;quot;/10&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	last10 = 10;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Stats (On Screen Display)&lt;br /&gt;
	--CurrentLureIndex  out of  PlayersLures&lt;br /&gt;
	winsize = lsGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	lsPrintWrapped(10, 0, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lure Index: &amp;quot; .. CurrentLureIndex .. &amp;quot; out of &amp;quot; .. #PlayersLures .. &amp;quot;       &amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 20, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Time: &amp;quot; .. CurrentTime);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 40, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Last [&amp;quot; .. last10 .. &amp;quot;] Fish Caught:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Reset this string before showing last 10 fish below. Else the entries will multiply with entries from previous loops/call to this function&lt;br /&gt;
	last10caught = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if #gui_log_fish &amp;gt; 10 then&lt;br /&gt;
		table.remove(gui_log_fish,1);&lt;br /&gt;
	end&lt;br /&gt;
		for i = 1, #gui_log_fish,1 do&lt;br /&gt;
			lsPrintWrapped(10, 50 + (12*i), 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, gui_log_fish[i]);&lt;br /&gt;
			last10caught = last10caught .. gui_log_fish[i] .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-133, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Odd Fish Seen: &amp;quot; .. GrandTotalOdd);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-121, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Unusual Fish Seen: &amp;quot; .. GrandTotalUnusual);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-109, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Strange Fish Seen: &amp;quot; .. GrandTotalStrange);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-97, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-85, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Clicked: &amp;quot; .. GrandTotalLuresUsed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-73, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Lost: &amp;quot; .. GrandTotalLostLures);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-61, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-49, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Total Casts: &amp;quot; .. GrandTotalCasts);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-37, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Failed Catches: &amp;quot; .. GrandTotalFailed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-25, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Fish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Write stats to log file. Everytime the GUI screen is updated, so is the log file.&lt;br /&gt;
&lt;br /&gt;
	WriteFishStats(&amp;quot;Last Session Hour: &amp;quot; .. CurrentTime .. &amp;quot;\n\nOdd Fish Seen: &amp;quot; .. GrandTotalOdd .. &amp;quot;\nUnusual Fish Seen: &amp;quot; .. GrandTotalUnusual .. &amp;quot;\nStrange Fish Seen: &amp;quot; .. GrandTotalStrange .. &amp;quot;\n---------------------\nLures Clicked: &amp;quot; .. GrandTotalLuresUsed .. &amp;quot;\nLures Lost: &amp;quot; .. GrandTotalLostLures .. &amp;quot; \n---------------------\nTotal Casts: &amp;quot; .. GrandTotalCasts .. &amp;quot;\nFailed Catches: &amp;quot; .. GrandTotalFailed .. &amp;quot;\nFish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)\n---------------------\n\nLast 10 Fish Caught:\n\n&amp;quot;.. last10caught);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;MAIN chat tab MUST be showing and wide enough so that each lines doesn't wrap. Pin up Lures Menu (Self, Skills, Fishing, Use Lures). No other pinned menus can exist. More detailed instructions are included inside the script as comments at top. There are options you can set in the script such as how many casts per lure, what gets written to the log file and more! History will be recorded in FishLog.txt and stats in FishStats.txt. Most errors can be fixed by slightly adjusting/moving your chat screen! Press Shift to continue.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Gui_Main();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Variables Used By Program -- Don't Edit Unless you know what you're doing!&lt;br /&gt;
	CurrentLure = &amp;quot;&amp;quot;; --Don't Edit&lt;br /&gt;
	gui_log_fish = {}; --Don't Edit, holds log display&lt;br /&gt;
	log_fish = {};&lt;br /&gt;
	CurrentLureIndex=0; -- 1 = First Lure Player Owns in alphabetical order&lt;br /&gt;
	ChangeLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	DownArrowLocs=nil;&lt;br /&gt;
	PlayersLures={}; --Don't Edit, Holds Current Player Lures&lt;br /&gt;
	CurrentTime=&amp;quot;&amp;quot;; --Don't Edit, Holds Time Check Value&lt;br /&gt;
	TotalLuresUsed = 0;&lt;br /&gt;
	castcount = 0;&lt;br /&gt;
	--strangecounter = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--These variables were later added for displaying additional info on the screen.&lt;br /&gt;
-- Used for the extra reporting/statistics, on screen.&lt;br /&gt;
-- Dont Edit Unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
	GrandTotalCaught = 0;&lt;br /&gt;
	GrandTotalCasts = 0;&lt;br /&gt;
	GrandTotaldb = 0;&lt;br /&gt;
	GrandTotalStrange = 0;&lt;br /&gt;
	GrandTotalOdd = 0;&lt;br /&gt;
	GrandTotalUnusual = 0;&lt;br /&gt;
	GrandTotalLuresUsed = 0;&lt;br /&gt;
	GrandTotalLostLures = 0;&lt;br /&gt;
	GrandTotalFailed = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	PlayersLures = SetupLureGroup();&lt;br /&gt;
	CurrentTime = GetTime();&lt;br /&gt;
	lsSleep(1500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Write an entry into log file to show this is a new session&lt;br /&gt;
	WriteFishLog(&amp;quot;[New Session]\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while 1 do&lt;br /&gt;
		&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		--cast = srFindImage(&amp;quot;Fishing/Button_Fish.png&amp;quot;);&lt;br /&gt;
		cast = srFindImage(&amp;quot;fishicon.png&amp;quot;);&lt;br /&gt;
		if not cast then&lt;br /&gt;
			error(&amp;quot;cannot find fishing button&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if castcount == 0 then&lt;br /&gt;
			--Update counters&lt;br /&gt;
			castcount = 1;&lt;br /&gt;
			CurrentLureIndex = CurrentLureIndex +1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if CurrentLureIndex &amp;gt; #PlayersLures then&lt;br /&gt;
				--Refresh the Lure window, and reindex it, in case some were lost.&lt;br /&gt;
				PlayersLures = SetupLureGroup();&lt;br /&gt;
				CurrentLureIndex = 1;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			--Update the time if ready, always update before new lure to keep chat/log proper&lt;br /&gt;
			if TotalLuresUsed == LureChangesToUpdateTimer then&lt;br /&gt;
				--Update Time&lt;br /&gt;
&lt;br /&gt;
				CurrentTime = GetTime();&lt;br /&gt;
				TotalLuresUsed = 0;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			--Since no casts been made at all, use a lure&lt;br /&gt;
			UseLure();&lt;br /&gt;
			lsSleep(2000);&lt;br /&gt;
			TotalLuresUsed = TotalLuresUsed + 1;&lt;br /&gt;
			GrandTotalLuresUsed = GrandTotalLuresUsed + 1;&lt;br /&gt;
			&lt;br /&gt;
			--update log&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			&lt;br /&gt;
		elseif castcount  &amp;gt; TotalCasts then&lt;br /&gt;
		--	if strangecounter &amp;gt; 0 and strangecounter &amp;lt; AlmostCaughtAttempts then&lt;br /&gt;
				--we don't reset yet!&lt;br /&gt;
		--	else&lt;br /&gt;
				--Reset&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				strangecounter = 0;&lt;br /&gt;
		--	end&lt;br /&gt;
		else&lt;br /&gt;
			--Cast&lt;br /&gt;
			srClickMouseNoMove(cast[0]+3,cast[1]+3);&lt;br /&gt;
			lsSleep(1000);&lt;br /&gt;
			checkBreak();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			while findchat(castcount - 1) == &amp;quot;lure&amp;quot; do&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				checkBreak();&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			castcount = castcount + 1;&lt;br /&gt;
			GrandTotalCasts = GrandTotalCasts + 1;	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--Read Chat&lt;br /&gt;
			ChatType = findchat();&lt;br /&gt;
&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
&lt;br /&gt;
			CurrentLure = string.sub(PlayersLures[CurrentLureIndex],string.find(PlayersLures[CurrentLureIndex],&amp;quot;_&amp;quot;)+1,string.len(PlayersLures[CurrentLureIndex])-4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ChatType == &amp;quot;nobitlostlure&amp;quot; then&lt;br /&gt;
				--No fish bit. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nobit&amp;quot; then&lt;br /&gt;
				--No fishbit&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatchlostlure&amp;quot; then&lt;br /&gt;
				--You didn't catch anything. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatch&amp;quot; then&lt;br /&gt;
				--You didn't catch anything.&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;alreadyfishing&amp;quot; then&lt;br /&gt;
				--castcount = castcount-1;&lt;br /&gt;
				lsSleep(15000); -- Long pause to wait for fishing queue to stop. Somehow it pushed the Fish button twice and now you will cast 2 times in a row. &lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You are already fishing!&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
				--Strange Fish&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
			&lt;br /&gt;
	&lt;br /&gt;
			elseif ChatType == &amp;quot;strangelostlure&amp;quot; then&lt;br /&gt;
				-- Strange Fish and lost lure&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Can't uncomment below elseif statement until we get a screenshot of a message of you were not quick enough. You also lost your lure.&lt;br /&gt;
-- This would need to be added to Fishing_Func.inc , in the Chat_Types {array} along with adding Chatlog_AlmostUnusualLostlure.png). Add above &amp;quot;unusual&amp;quot; line in the array				&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--elseif ChatType == &amp;quot;unusuallostlure&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				--GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				--GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				--GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--if LogStrangeUnusual == true then&lt;br /&gt;
					--WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					--end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;odd&amp;quot; then&lt;br /&gt;
				-- Odd Fish&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogOdd == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;oddlostlure&amp;quot; then&lt;br /&gt;
				-- Odd Fish and lost lure&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;carry&amp;quot; then&lt;br /&gt;
				--chat lines are messed up now&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;caught&amp;quot; or ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
				Fish = ChatReadFish();&lt;br /&gt;
&lt;br /&gt;
				table.insert(gui_log_fish,Fish);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				if ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
					GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Though you lost your lure, you did catch a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					-- This Needs Check for new lure. This will cause a error if not.&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
				else&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Caught a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				--gui_refresh();&lt;br /&gt;
				&lt;br /&gt;
				if SkipCommon == true then&lt;br /&gt;
					FishType = string.sub(Fish,string.find(Fish,&amp;quot;,&amp;quot;) + 1);&lt;br /&gt;
					if FishType == &amp;quot;Abdju&amp;quot; or FishType == &amp;quot;Chromis&amp;quot; or FishType == &amp;quot;Catfish&amp;quot; or FishType == &amp;quot;Carp&amp;quot; or FishType == &amp;quot;Perch&amp;quot; or FishType == &amp;quot;Phagrus&amp;quot; or FishType == &amp;quot;Tilapia&amp;quot; then&lt;br /&gt;
						--Skip it&lt;br /&gt;
						castcount=0;&lt;br /&gt;
&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		gui_refresh();&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	gui_refresh();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=New Raeli Oven Monitor (IN TESTING v2)}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Raeli Color Monitor v1.1b (edit by Selune) --&lt;br /&gt;
  Make sure the Raeli Oven is pinned, then select the ATITD window and press shift.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
stop_at_CB = false;&lt;br /&gt;
take_screenshots = true;&lt;br /&gt;
stop_at_color = &amp;quot;White&amp;quot;;&lt;br /&gt;
confidence_threshold = 15;&lt;br /&gt;
saved_x = 0;&lt;br /&gt;
saved_y = 0;&lt;br /&gt;
go_now = false;&lt;br /&gt;
&lt;br /&gt;
color_names = {&amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;, &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;Burlywood&amp;quot;, &amp;quot;CadetBlue&amp;quot;, &amp;quot;Carrot&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;, &amp;quot;Crimson&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGray&amp;quot;, &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;, &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;, &amp;quot;DarkSlateGray&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;, &amp;quot;DimGray&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;Feldspar&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;, &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Gray&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;, &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;, &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;, &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;, &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateBlue&amp;quot;, &amp;quot;LightSlateGray&amp;quot;, &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Maroon &amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue &amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;, &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;, &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;, &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy &amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;, &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;, &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple &amp;quot;, &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;, &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGray&amp;quot;, &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue &amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;, &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;VioletRed&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot;};&lt;br /&gt;
color_values = {0xF0F8FF, 0xFAEBD7, 0x00FFFF, 0x7FFFD4, 0xF0FFFF, 0xF5F5DC, 0xFFE4C4, 0x000000, 0xFFEBCD, 0x0000FF, 0x8A2BE2, 0xA52A2A, 0xDEB887, 0x5F9EA0, 0xE07020, 0x7FFF00, 0xD2691E, 0xFF7F50, 0x6495ED, 0xFFF8DC, 0xDC143C, 0x00008B, 0x008B8B, 0xB8860B, 0xA9A9A9, 0x006400, 0xBDB76B, 0x8B008B, 0x556B2F, 0xFF8C00, 0x9932CC, 0x8B0000, 0xE9967A, 0x8FBC8F, 0x483D8B, 0x2F4F4F, 0x00CED1, 0x9400D3, 0xFF1493, 0x00BFFF, 0x696969, 0x1E90FF, 0xD19275, 0xB22222, 0xFFFAF0, 0x228B22, 0xFF00FF, 0xDCDCDC, 0xF8F8FF, 0xFFD700, 0xDAA520, 0x808080, 0x008000, 0xADFF2F, 0xF0FFF0, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0xFFFFF0, 0xF0E68C, 0xE6E6FA, 0xFFF0F5, 0x7CFC00, 0xFFFACD, 0xADD8E6, 0xF08080, 0xE0FFFF, 0xFAFAD2, 0x90EE90, 0xD3D3D3, 0xFFB6C1, 0xFFA07A, 0x20B2AA, 0x87CEFA, 0x8470FF, 0x778899, 0xB0C4DE, 0xFFFFE0, 0x00FF00, 0x32CD32, 0xFAF0E6, 0x800000, 0x66CDAA, 0x0000CD, 0xBA55D3, 0x9370DB, 0x3CB371, 0x7B68EE, 0x00FA9A, 0x48D1CC, 0xC71585, 0x191970, 0xF5FFFA, 0xFFE4E1, 0xFFE4B5, 0xFFDEAD, 0x000080, 0xFDF5E6, 0x808000, 0x6B8E23, 0xFFA500, 0xFF4500, 0xDA70D6, 0xEEE8AA, 0x98FB98, 0xAFEEEE, 0xDB7093, 0xFFEFD5, 0xFFDAB9, 0xCD853F, 0xFFC0CB, 0xDDA0DD, 0xB0E0E6, 0x800080, 0xFF0000, 0xBC8F8F, 0x4169E1, 0x8B4513, 0xFA8072, 0xF4A460, 0x2E8B57, 0xFFF5EE, 0xA0522D, 0xC0C0C0, 0x87CEEB, 0x6A5ACD, 0x708090, 0xFFFAFA, 0x00FF7F, 0x4682B4, 0xD2B48C, 0x008080, 0xD8BFD8, 0xFF6347, 0x40E0D0, 0xEE82EE, 0xD02090, 0xF5DEB3, 0xFFFFFF, 0xF5F5F5, 0xFFFF00, 0x9ACD32};&lt;br /&gt;
&lt;br /&gt;
-- Decimal to Hex conversion&lt;br /&gt;
function DEC_HEX(IN)&lt;br /&gt;
    local B,K,OUT,I,D=16,&amp;quot;0123456789ABCDEF&amp;quot;,&amp;quot;&amp;quot;,0&lt;br /&gt;
    while IN&amp;gt;0 do&lt;br /&gt;
        I=I+1&lt;br /&gt;
        IN,D=math.floor(IN/B),math.mod(IN,B)+1&lt;br /&gt;
        OUT=string.sub(K,D,D)..OUT&lt;br /&gt;
    end&lt;br /&gt;
    return OUT&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Color Conversions&lt;br /&gt;
function rgb2hsl(src_r, src_g, src_b)&lt;br /&gt;
	local h, s, l, d;&lt;br /&gt;
	src_r = src_r / 255;&lt;br /&gt;
	src_g = src_g / 255;&lt;br /&gt;
	src_b = src_b / 255;&lt;br /&gt;
    local max_rgb = math.max(src_r, src_g, src_b); &lt;br /&gt;
	local min_rgb = math.min(src_r, src_g, src_b);&lt;br /&gt;
    l = (max_rgb + min_rgb) / 2;&lt;br /&gt;
&lt;br /&gt;
    if(max_rgb == min_rgb) then&lt;br /&gt;
        h = 0; --achromatic&lt;br /&gt;
		s = 0;&lt;br /&gt;
    else&lt;br /&gt;
        d = max_rgb - min_rgb;&lt;br /&gt;
		if l &amp;gt; 0.5 then&lt;br /&gt;
			s = d / (2 - max_rgb - min_rgb);&lt;br /&gt;
		else&lt;br /&gt;
			s = d / (max_rgb + min_rgb);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if src_g &amp;gt; src_b then&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_b - src_r) / d + 2;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d + 6;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_r - src_g) / d + 4;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
        h = h / 6;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if h == nil then&lt;br /&gt;
		error &amp;quot;NO H&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if s == nil then&lt;br /&gt;
		error (&amp;quot;NO S   D:&amp;quot; .. d);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if l == nil then&lt;br /&gt;
		error &amp;quot;NO L&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    return h, s, l;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function rgb2lab(src_r, src_g, src_b)&lt;br /&gt;
	--R from 0 to 255&lt;br /&gt;
	--G from 0 to 255&lt;br /&gt;
	--B from 0 to 255&lt;br /&gt;
	local r = src_r/255;&lt;br /&gt;
	local g = src_g/255;&lt;br /&gt;
	local b = src_b/255;&lt;br /&gt;
 &lt;br /&gt;
	if (r &amp;gt; 0.04045) then&lt;br /&gt;
		r = math.pow((r + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		r = r / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if ( g &amp;gt; 0.04045) then&lt;br /&gt;
		g = math.pow((g + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		g = g / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if (b &amp;gt; 0.04045) then&lt;br /&gt;
		b = math.pow((b + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		b = b / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	r = r * 100;&lt;br /&gt;
	g = g * 100;&lt;br /&gt;
	b = b * 100;&lt;br /&gt;
 &lt;br /&gt;
	local x = r * 0.4124 + g * 0.3576 + b * 0.1805;&lt;br /&gt;
	local y = r * 0.2126 + g * 0.7152 + b * 0.0722;&lt;br /&gt;
	local z = r * 0.0193 + g * 0.1192 + b * 0.9505;&lt;br /&gt;
	&lt;br /&gt;
	x = x / 95.047;&lt;br /&gt;
	y = y / 100.000;  &lt;br /&gt;
	z = z / 108.883;&lt;br /&gt;
 &lt;br /&gt;
	if ( x &amp;gt; 0.008856 ) then&lt;br /&gt;
		x = math.pow( x , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		x = ( 7.787 * x ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( y &amp;gt; 0.008856 ) then&lt;br /&gt;
		y = math.pow( y , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		y = ( 7.787 * y ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( z &amp;gt; 0.008856 ) then&lt;br /&gt;
		z = math.pow( z , 1/3 );&lt;br /&gt;
	else&lt;br /&gt;
		z = ( 7.787 * z ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lab_l = ( 116 * y ) - 16;&lt;br /&gt;
	local lab_a = 500 * ( x - y );&lt;br /&gt;
	local lab_b = 200 * ( y - z );&lt;br /&gt;
 &lt;br /&gt;
	return lab_l, lab_a, lab_b;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Get nearest color name&lt;br /&gt;
function nearestColor(px)&lt;br /&gt;
	local rgb_r, rgb_g, rgb_b, tst_r, tst_g, tst_b, test_px;&lt;br /&gt;
	local lab_l, lab_a, lab_b, lab_tst_l, lab_tst_a, lab_tst_b;&lt;br /&gt;
	local hsl_h, hsl_s, hsl_l, hsl_tst_h, hsl_tst_s, hsl_tst_l;&lt;br /&gt;
	local offset, best_name, best_offset, next_best_offset, confidence;&lt;br /&gt;
	best_offset = 100000;&lt;br /&gt;
	next_best_offset = 1000000;&lt;br /&gt;
	rgb_r = ((math.floor(px/256/256/256) % 256) - 7) * 255/248;&lt;br /&gt;
	rgb_g = ((math.floor(px/256/256) % 256) - 7) * 255/248;&lt;br /&gt;
	rgb_b = ((math.floor(px/256) % 256) - 6) * 255/248;&lt;br /&gt;
	lab_l, lab_a, lab_b = rgb2lab(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	hsl_h, hsl_s, hsl_l = rgb2hsl(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	&lt;br /&gt;
	for i=1, #color_names do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		test_px = color_values[i];&lt;br /&gt;
		tst_r = (math.floor(test_px/256/256) % 256);&lt;br /&gt;
		tst_g = (math.floor(test_px/256) % 256);&lt;br /&gt;
		tst_b = (math.floor(test_px) % 256);&lt;br /&gt;
		lab_tst_l, lab_tst_a, lab_tst_b = rgb2lab(tst_r, tst_g, tst_b);&lt;br /&gt;
		hsl_tst_h, hsl_tst_s, hsl_tst_l = rgb2hsl(tst_r, tst_g, tst_b);&lt;br /&gt;
		&lt;br /&gt;
		---- Different methods to determine &amp;quot;distance&amp;quot; from the ideal colors. Change these to test different options.&lt;br /&gt;
		&lt;br /&gt;
		--offset = math.abs(rgb_r - tst_r) + math.abs(rgb_g - tst_g) + math.abs(rgb_b - tst_b);&lt;br /&gt;
		--offset = math.max(math.max((math.abs(rgb_r - tst_r)), math.abs(rgb_g - tst_g)), math.abs(rgb_b - tst_b));&lt;br /&gt;
		offset = (rgb_r - tst_r)^2 + (rgb_g - tst_g)^2 + (rgb_b - tst_b)^2;&lt;br /&gt;
		--offset = math.abs(lab_l - lab_tst_l) + math.abs(lab_a - lab_tst_a) + math.abs(lab_b - lab_tst_b);&lt;br /&gt;
		--offset = (lab_l - lab_tst_l)^2 + (lab_a - lab_tst_a)^2 + (lab_b - lab_tst_b)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(lab_l - lab_tst_l)), math.abs(lab_a - lab_tst_a)), math.abs(lab_b - lab_tst_b));&lt;br /&gt;
		--offset = math.abs(hsl_h - hsl_tst_h) + math.abs(hsl_s - hsl_tst_s) + math.abs(hsl_l - hsl_tst_l);&lt;br /&gt;
		--offset = (hsl_h - hsl_tst_h)^2 + (hsl_s - hsl_tst_s)^2 + (hsl_l - hsl_tst_l)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(hsl_h - hsl_tst_h)), math.abs(hsl_s - hsl_tst_s)), math.abs(hsl_l - hsl_tst_l));&lt;br /&gt;
		if (offset &amp;lt; next_best_offset) then&lt;br /&gt;
			if (offset &amp;lt; best_offset) then&lt;br /&gt;
				next_best_offset = best_offset;&lt;br /&gt;
				best_offset = offset;&lt;br /&gt;
				best_name = color_names[i]; -- .. &amp;quot;   Hex: &amp;quot; .. DEC_HEX(color_values[i]);&lt;br /&gt;
			else&lt;br /&gt;
				next_best_offset = offset;&lt;br /&gt;
			end&lt;br /&gt;
			confidence = ((next_best_offset - best_offset) / best_offset) * 100;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return best_name, math.floor(confidence);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Check pixel against target&lt;br /&gt;
function checkColor(px)&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	color_name, confidence = nearestColor(px);&lt;br /&gt;
	&lt;br /&gt;
	if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
		return true, confidence;&lt;br /&gt;
	else&lt;br /&gt;
		return false, 0;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- optional message&lt;br /&gt;
function askForPixel()&lt;br /&gt;
	local is_done = false;&lt;br /&gt;
	local have_coords = false;&lt;br /&gt;
	local color_found = false;&lt;br /&gt;
	local color_guess = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
	local tst_r, tst_g, tst_b, rgb_r, rgb_g, rgb_b;&lt;br /&gt;
	local confidence = 0;&lt;br /&gt;
	-- Display message until shift is held&lt;br /&gt;
	while not go_now do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		y = 0;&lt;br /&gt;
		mouse_x, mouse_y = srMousePos();&lt;br /&gt;
		if not have_coords then&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Mouse over one of the Raeli Oven color pixels and press Shift.&amp;quot;);&lt;br /&gt;
			if lsShiftHeld() then&lt;br /&gt;
				saved_x = mouse_x;&lt;br /&gt;
				saved_y = mouse_y;&lt;br /&gt;
				have_coords = true;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Coords chosen, press 'Reset' to change or 'Do It' to start.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 40;&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xffffff,&lt;br /&gt;
				saved_x .. &amp;quot;, &amp;quot; .. saved_y);&lt;br /&gt;
		else&lt;br /&gt;
			px = srReadPixel(mouse_x, mouse_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
				mouse_x .. &amp;quot;, &amp;quot; .. mouse_y);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		color_guess, confidence = nearestColor(px);&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;) Hex: &amp;quot; .. DEC_HEX(math.floor((px/256) % 16777216)));&lt;br /&gt;
			&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Best guess: &amp;quot; .. color_guess);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Confidence: &amp;quot; .. confidence .. &amp;quot;  (higher is better)&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- Testing other methods of grabbing the pixel, making sure RGBA values match&lt;br /&gt;
		-- srReadScreen();&lt;br /&gt;
		-- px2 = srReadPixelFromBuffer(mouse_x, mouse_y);&lt;br /&gt;
		-- lsPrintWrapped(0, 80, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
		-- 	mouse_x .. &amp;quot;, &amp;quot; .. mouse_y .. &amp;quot; = &amp;quot; .. (math.floor(px2/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256) % 256) .. &amp;quot;,&amp;quot; .. (px2 % 256) );&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 90, 0, 100, px, &amp;quot;test1&amp;quot;);&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 60, 0, 100, px2, &amp;quot;test2&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		take_screenshots = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Take Screenshots&amp;quot;, take_screenshots);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		stop_at_CB = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Stop at Color&amp;quot;, stop_at_CB);&lt;br /&gt;
		&lt;br /&gt;
		if stop_at_CB then&lt;br /&gt;
			y = y + 25;&lt;br /&gt;
			is_done = false;&lt;br /&gt;
			color_found = false;&lt;br /&gt;
			-- Edit box and text display&lt;br /&gt;
			lsPrint(10, y, z, 0.7, 0.7, 0xFFFFFFff, &amp;quot;Desired Color:&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			y = y + 20;&lt;br /&gt;
			-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
			is_done, stop_at_color = lsEditBox(&amp;quot;Desired Color:&amp;quot;, 10, y, z, 250, 30, 0.7, 0.7, 0x000000ff, &amp;quot;White&amp;quot;);&lt;br /&gt;
			--dropdown_color_cur_value = lsDropdown(&amp;quot;ColorDropDown1&amp;quot;, 5, y, 0, 200, dropdown_color_cur_value, color_names);&lt;br /&gt;
			&lt;br /&gt;
			for i=0, #color_names do&lt;br /&gt;
				if stop_at_color and color_names[i] then&lt;br /&gt;
					if (stop_at_color:upper() == (color_names[i]):upper()) then&lt;br /&gt;
						color_found = true;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not color_found then&lt;br /&gt;
				lsPrint(130, y - 20, z, 0.7, 0.7, 0xFF0000ff, &amp;quot;No such color&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			y = y + 35;&lt;br /&gt;
			lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, &amp;quot;Confidence Required:&amp;quot;);&lt;br /&gt;
			is_done, confidence_threshold = lsEditBox(&amp;quot;confthresh&amp;quot;, 150, y, 0, 50, 30, 0.7, 0.7, 0x000000ff, confidence_threshold);&lt;br /&gt;
			confidence_threshold = tonumber(confidence_threshold);&lt;br /&gt;
			if not confidence_threshold then&lt;br /&gt;
				lsPrint(10, y+17, 10, 0.4, 0.4, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
				confidence_threshold = 10;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			is_done = true;&lt;br /&gt;
			color_found = true;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			if color_found then&lt;br /&gt;
				if lsButtonText(10, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Do It&amp;quot;) then&lt;br /&gt;
					go_now = true;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if lsButtonText(100, lsScreenY - 30, 0, 80, 0xFFA500ff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
				have_coords = false;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
	-- Wait for shift to be released&lt;br /&gt;
	while lsShiftHeld() do end;&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(askText);&lt;br /&gt;
	while lsShiftHeld() do&lt;br /&gt;
		-- Make user release shift key&lt;br /&gt;
		lsCheckBreak();&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	askForPixel();&lt;br /&gt;
	&lt;br /&gt;
	local t0 = lsGetTimer();&lt;br /&gt;
	local px = 0;&lt;br /&gt;
	local index=0;&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		local y = 0;&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		new_px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
		local t = (lsGetTimer() - t0) / 1000 / 60;&lt;br /&gt;
		t = math.floor(t*10 + 0.5)/10;&lt;br /&gt;
		local t_string = t;&lt;br /&gt;
		if not (new_px == px) then&lt;br /&gt;
			index = index+1;&lt;br /&gt;
			if take_screenshots then&lt;br /&gt;
				srSaveLastReadScreen(&amp;quot;screen_&amp;quot; .. index .. &amp;quot;_&amp;quot; .. t_string .. &amp;quot;.png&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			px = new_px;&lt;br /&gt;
			&lt;br /&gt;
			if stop_at_CB then&lt;br /&gt;
				color_name, confidence = nearestColor(px);&lt;br /&gt;
				if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
					if confidence &amp;gt; confidence_threshold then&lt;br /&gt;
						clickAllText(&amp;quot;Interrupt&amp;quot;);&lt;br /&gt;
						lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
						error (&amp;quot;Stopped burn at: &amp;quot; .. stop_at_color .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
					else&lt;br /&gt;
						for i = 1, 3 do&lt;br /&gt;
							lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
							lsSleep(50);&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		y = y + 5;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Screen: &amp;quot; .. index .. &amp;quot;  Timer: &amp;quot; .. t_string);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Color: &amp;quot; .. color_name .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;)  Hex: &amp;quot; .. DEC_HEX(math.floor((new_px/256) % 16777216)));&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end	&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226721</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226721"/>
		<updated>2013-01-16T00:16:37Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fishing Macro for Testing}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Pin up your Lures menu 'Self Click, Skills, Fishing, Use Lure' (no other pinned up windows can exist)&lt;br /&gt;
-- Should have (Chat-Related): 'Chat and Inventory can be minimized' AND 'Minimized chat-channels are still visible'.&lt;br /&gt;
-- You must have Main Chat tab showing at all times and window is long/wide enough so no lines don't wrap.&lt;br /&gt;
&lt;br /&gt;
-- Yes, this macro reads your MAIN chat screen, so make sure you read the above statement for it to work correctly.&lt;br /&gt;
-- Each line of text must not scroll/wrap to the next line. If it does, then drag your chat window wider so it doesn't wrap.&lt;br /&gt;
-- You want to make your chat very wide. Note: It is possible to see a LONG message like &amp;quot;Though you lost your lure, you did catch a 15 deben Orange Spongefish&amp;quot;&lt;br /&gt;
-- Another long message is &amp;quot;You didn't catch anything. You also lost your lure. Try different lures and locations&amp;quot;&lt;br /&gt;
-- At 1280x1024 your chat screen should reach at least to the mid point of your screen to avoid having a chat line wrap to next line, for a long message, like above.&lt;br /&gt;
-- Higher resolutions may not have to reach quite to the mid point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ********** This macro writes to a log file (Fishlog.txt) for most actions, so you can review later! ******&lt;br /&gt;
-- ********** This also macro writes to a log file (Fishstats.txt) showing stats of your last fishing session, so you can review later! ******&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--You can delete any of the log files if you wish. It will automatically create new ones if they dont exist.&lt;br /&gt;
--The fishlog.txt file gets appended everytime you fish, so the file can grow quite long over time.&lt;br /&gt;
--The fishstats.txt file gets overwritten everytime your gui program window updates, so it doesn't 'grow' over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Main chat tab is not showing&amp;quot; and other errors can usually be overcome by adjusting the main chat window size and restarting, assuming main chat is showing.&lt;br /&gt;
-- And also verify the lines aren't wrapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The very first thing this macro does is to Self Click, Special, What Time is it? option. This will then display the time in main chat window.&lt;br /&gt;
-- The macro then parses time displayed, in main chat tab, so it can use it while the macro runs (Log files and on screen display).&lt;br /&gt;
-- Thats what the mysterious Self Click is doing, its not a bug, it is suppose to do that and thats why, to fetch the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Note: These are currently refered to as Common Fish in the below 'SkipCommon' type of fishes (True or False), in the 'Custom Variables' section.&lt;br /&gt;
&lt;br /&gt;
	--Abdju&lt;br /&gt;
	--Chromis&lt;br /&gt;
	--Catfish&lt;br /&gt;
	--Carp&lt;br /&gt;
	--Perch&lt;br /&gt;
	--Phagrus&lt;br /&gt;
	--Tilapia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--CUSTOM VARIABLES -- EDIT HERE To Change Fishing Casts, Skips, Updates.&lt;br /&gt;
&lt;br /&gt;
TotalCasts=3; --Total Casts per lure, if a fish caught. If no fish then it skips.&lt;br /&gt;
SkipCommon = false; --Skips to next lure if fish caught is a common (Choose True or False).&lt;br /&gt;
LureChangesToUpdateTimer = 7; --Total lures used before time is updated. Zero updates every new lure.&lt;br /&gt;
IgnoreUnknown = false; --Continues the script if fish is not recognized&lt;br /&gt;
&lt;br /&gt;
--AlmostCaughtAttempts = 0; --Adds additional attempts to the current lure if Unusual, Strange fish are seen;&lt;br /&gt;
-- Note: AlmostCaughtAttempts above was already commented out upon arriving to Talescripts.&lt;br /&gt;
-- It is also commented out during the script, so uncommenting above will NOT activate the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Additional reporting in the log file&lt;br /&gt;
-- Choose True or False.&lt;br /&gt;
	-- Note 'LogStrangeUnusual' and 'LogOdd' (below) overrides LogFails setting. ie if LogStrange true, then it would still log even if LogFails = False&lt;br /&gt;
	--If LogFails = false and LogStrangeUnusual or LogOdd = true, then failed catches those would still be included in the log file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LogFails = true;  	-- Do you want to add Failed Catches to log file? 'Failed to catch anything' or 'No fish bit'. Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogStrangeUnusual = true; 	-- Do you want to add Strange and Unusual fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogOdd = true; 	-- Do you want to add Odd fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- END CUSTOM VARIABLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Fishing_Func.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetupLureGroup()&lt;br /&gt;
&lt;br /&gt;
	TLures = {};&lt;br /&gt;
	FirstLure=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLure = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindPin = srFindImage(&amp;quot;UnPin.png&amp;quot;);&lt;br /&gt;
	if FindPin then&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	--Click the pinup to refresh the lures window&lt;br /&gt;
&lt;br /&gt;
	srClickMouseNoMove(FindPin[0]+5,FindPin[1]+30);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		DownPin = srFindImageInRange(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,500);&lt;br /&gt;
		if DownPin then&lt;br /&gt;
			--Just Incase&lt;br /&gt;
			UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
			if UpArrow then&lt;br /&gt;
				srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				srReadScreen();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		--	srClickMouseNoMove(DownPin[0]+5,DownPin[1]+5);&lt;br /&gt;
			LastLure=FindLureName(DownPin[0]-150,DownPin[1]-10,150,25);&lt;br /&gt;
			--error(LastLure);&lt;br /&gt;
			FirstLure = FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
		--	error(FirstLure);&lt;br /&gt;
		else&lt;br /&gt;
			--No Arrows on lure menu?&lt;br /&gt;
			FirstLure=FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
			LastLure=nil;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Didn\'t find Lures pinned window - Self Click-&amp;gt;Skills, Fishing -&amp;gt; Use Lure, PIN THIS WINDOW!&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if  LastLure ~= nil then&lt;br /&gt;
		--We have last lure, and arrows showing&lt;br /&gt;
		ChangeLureMenu = LastLure;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		FirstLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. FirstLure);&lt;br /&gt;
		LastLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. LastLure);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #Lures,1 do&lt;br /&gt;
			test = srFindImageInRange((&amp;quot;fishing/&amp;quot; .. Lures[i]),FirstLurLoc[0]-5,FirstLurLoc[1]-5,175,500);&lt;br /&gt;
&lt;br /&gt;
			if test then&lt;br /&gt;
				--Add Lure&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
				if Lures[i] == LastLure then&lt;br /&gt;
					--End of Menu, Use Down Arrow&lt;br /&gt;
					arrow=srFindImageInRange(&amp;quot;Fishing/menu_downarrow.png&amp;quot;,test[0],test[1]-5,175,50);&lt;br /&gt;
					if arrow then&lt;br /&gt;
						DownArrowLocs = arrow;&lt;br /&gt;
						srClickMouseNoMove(arrow[0]+5,arrow[1]+5);&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
						srReadScreen();&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
					else&lt;br /&gt;
						error(&amp;quot;no arrow found&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				LastLureMenu = Lures[i];&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--Reset Lure Menu&lt;br /&gt;
		UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
		if UpArrow then&lt;br /&gt;
			srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	else&lt;br /&gt;
		--No arrows, just get lures&lt;br /&gt;
		for i = 1, #Lures, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lures[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return TLures;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function FindLureName(x,y,w,h)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #Lures, 1 do &lt;br /&gt;
		Lure = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Lures[i], x,y,w,h);&lt;br /&gt;
		if Lure then&lt;br /&gt;
			return Lures[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GetLure()&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	&lt;br /&gt;
	if CurrentLureIndex == LastLureIndex then&lt;br /&gt;
		-- Use Down Menu&lt;br /&gt;
		srClickMouseNoMove(DownArrowLocs[0]-5,DownArrowLocs[1]-5);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
	if not lure then&lt;br /&gt;
		--Failed to find lure&lt;br /&gt;
		error(&amp;quot;Can\'t find a lure!&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		slure = Lures[PlayersLures[CurrentLureIndex]];&lt;br /&gt;
		slure = string.sub(slure,string.find(slure,&amp;quot;_&amp;quot;)+1,string.len(slure) - 4);&lt;br /&gt;
		--statusScreen(&amp;quot;Using Lure &amp;quot; .. slure);&lt;br /&gt;
		return slure&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UseLure()&lt;br /&gt;
	-- Uses lure according to CurrentLureIndex, which is used in PlayersLures which contains each lure the player has. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if #TLures == 0 then&lt;br /&gt;
	error 'Can\'t find any lures on the pinned window. Did you run out of lures?'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
	if lure then&lt;br /&gt;
		srClickMouseNoMove(lure[0]+3,lure[1]+3);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		-- Find Lure Type&lt;br /&gt;
		for i = 1, #Lure_Types, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lure_Types[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				--Click it!&lt;br /&gt;
				srClickMouseNoMove(test[0]+3,test[1]+3);&lt;br /&gt;
				gui_refresh();&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if PlayersLures[CurrentLureIndex] == ChangeLureMenu then&lt;br /&gt;
		down = srFindImage(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(down[0]+5,down[1]+5);&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	elseif PlayersLures[CurrentLureIndex] == LastLureMenu  then&lt;br /&gt;
		up = srFindImage(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(up[0]+5,up[1]+5);&lt;br /&gt;
		CurrentLureIndex=1;&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ChatReadFish()&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
	&lt;br /&gt;
	-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
	if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Caught Something..  Find Fish Details&lt;br /&gt;
	Sfish = &amp;quot;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, #CL_Fish do&lt;br /&gt;
		ChatFish = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Fish[i],Coords[0] ,Coords[1],500,25);&lt;br /&gt;
		if ChatFish then&lt;br /&gt;
			Sfish = string.sub(CL_Fish[i],string.find(CL_Fish[i],&amp;quot;Fish_&amp;quot;) + 5,string.len(CL_Fish[i]) - 4);&lt;br /&gt;
			GrandTotalCaught = GrandTotalCaught + 1&lt;br /&gt;
			break;&lt;br /&gt;
		end					&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	if  string.len(Sfish) &amp;lt; 1 then&lt;br /&gt;
		-- This fish name and fishname.png file likely needs to be added to Fishing_Func.inc, under the CL_Fish array and the .png added to /Images/Fishing folder&lt;br /&gt;
		if IgnoreUnknown then&lt;br /&gt;
			Sfish = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
			SNum = &amp;quot;1&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Unknown Fish! PLEASE, Take screenshot (Alt+C) of main chat tab, share with Talescripts team!&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--Find Size&lt;br /&gt;
		for i = #CL_Number,1,-1 do&lt;br /&gt;
			ChatSize =  srFindImageInRange(&amp;quot;fishing/&amp;quot; .. CL_Number[i],Coords[0],Coords[1],500,25);&lt;br /&gt;
			if ChatSize then&lt;br /&gt;
				SNum = string.sub(CL_Number[i],string.find(CL_Number[i],&amp;quot;_&amp;quot;) + 1, string.len(CL_Number[i]) - 4);&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		GrandTotaldb = GrandTotaldb + SNum;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return(Sfish .. &amp;quot; (&amp;quot; .. SNum .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function findchat(line)&lt;br /&gt;
	--Reads a chat line and returns a basic string for better processing&lt;br /&gt;
	&lt;br /&gt;
	-- Odd fish means your fly fishing skill is not high enough. Raise it with enormous amounts of fishing.&lt;br /&gt;
	-- Strange fish means you need a better rod to catch the rish. You may succeed on future attempts.&lt;br /&gt;
	-- Unusual fish means your speed skill was not high enough to catch this type of fish. If it is almost enough, you may catch them on future casts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Possible fishing messages&lt;br /&gt;
	--	Caught A (SIZE) Deben (FISH)&lt;br /&gt;
	--	You almost caught a strange fish&lt;br /&gt;
	--		(You almost caught a strange fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an unusual fish&lt;br /&gt;
	--		(You almost caught an unusual fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an odd fish&lt;br /&gt;
	--		(You almost caught an odd fish. You also lost your lure.)&lt;br /&gt;
	--	Although you lost your lure  (Caught a fish)&lt;br /&gt;
	--	Using a (LURE) (TYPE) lure.&lt;br /&gt;
	--	You are carrying more than you can manage.&lt;br /&gt;
	--	You are carrying too much bulk.&lt;br /&gt;
	--	You didn't catch anything.&lt;br /&gt;
	--		(You didn't catch anything. You also lost your lure.)&lt;br /&gt;
	--	No Fish Bit.&lt;br /&gt;
	--		(No Fish Bit. You also lost your lure.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if line and line &amp;gt; 0 then&lt;br /&gt;
		Coords = imgs[(#imgs) - line];&lt;br /&gt;
			if not Coords then&lt;br /&gt;
			error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Find What Happened&lt;br /&gt;
&lt;br /&gt;
	ChatType = &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #Chat_Types -1,2 do&lt;br /&gt;
		test = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Chat_Types[i],Coords[0],Coords[1],500,30);		&lt;br /&gt;
		if test then&lt;br /&gt;
			--Found Chat&lt;br /&gt;
			ChatType = Chat_Types[i + 1];&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	--Break down!&lt;br /&gt;
	if ChatType then&lt;br /&gt;
		--if ChatType == &amp;quot;lure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofishlostlure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofish&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
		return ChatType;&lt;br /&gt;
	else&lt;br /&gt;
		error(ChatType);&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GetTime()&lt;br /&gt;
	--Reads time stamp using special-&amp;gt;what time menu&lt;br /&gt;
	winsize = srGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	--Open Menu, Press the Esc key to open the Self Click menu&lt;br /&gt;
&lt;br /&gt;
	-- Move mouse to center of screen before Sending the Esc key, to get the Self Click menu. We dont want it self clicking near the edge of screen causing an error.&lt;br /&gt;
	srSetMousePos(winsize[0]/2,winsize[1]/2);&lt;br /&gt;
	lsSleep(100);  -- This delay is critical for any srSetMousePos. Without it, the mouse will not have time to actually move!&lt;br /&gt;
&lt;br /&gt;
	srKeyEvent(string.char(27));  -- Send Esc Key&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
	&lt;br /&gt;
	--Find Special Menu&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	menu = srFindImage(&amp;quot;Fishing/Menu_Special.png&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if menu then&lt;br /&gt;
		--Click it!&lt;br /&gt;
		srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
		&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
		-- Look for the What Time Is It? option in menu&lt;br /&gt;
		menu = srFindImage(&amp;quot;Fishing/Menu_WhatTime.png&amp;quot;);&lt;br /&gt;
		if menu then&lt;br /&gt;
			--Click it!&lt;br /&gt;
			srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	for i = #CL_Time, 1, -1 do&lt;br /&gt;
		Stime = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Time[i],Coords[0],Coords[1],400,25);&lt;br /&gt;
		if Stime then&lt;br /&gt;
			Hour = string.sub(CL_Time[i],string.find(CL_Time[i],&amp;quot;ime_&amp;quot;)+4,string.len(CL_Time[i])-4);&lt;br /&gt;
			&lt;br /&gt;
			AM = srFindImageInRange(&amp;quot;Fishing/Chatlog_Time_AM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
			if AM then&lt;br /&gt;
				CurrentTime=(Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
				return (Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				PM = srFindImageInRange(&amp;quot;Fishing/chatlog_time_PM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
				if PM then&lt;br /&gt;
					CurrentTime=(Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
					return (Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gui_refresh()&lt;br /&gt;
	lsDoFrame();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if GrandTotalCaught &amp;lt; 10 then&lt;br /&gt;
	last10 = GrandTotalCaught .. &amp;quot;/10&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	last10 = 10;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Stats (On Screen Display)&lt;br /&gt;
	--CurrentLureIndex  out of  PlayersLures&lt;br /&gt;
	winsize = lsGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	lsPrintWrapped(10, 0, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lure Index: &amp;quot; .. CurrentLureIndex .. &amp;quot; out of &amp;quot; .. #PlayersLures .. &amp;quot;       &amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 20, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Time: &amp;quot; .. CurrentTime);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 40, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Last [&amp;quot; .. last10 .. &amp;quot;] Fish Caught:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Reset this string before showing last 10 fish below. Else the entries will multiply with entries from previous loops/call to this function&lt;br /&gt;
	last10caught = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if #gui_log_fish &amp;gt; 10 then&lt;br /&gt;
		table.remove(gui_log_fish,1);&lt;br /&gt;
	end&lt;br /&gt;
		for i = 1, #gui_log_fish,1 do&lt;br /&gt;
			lsPrintWrapped(10, 50 + (12*i), 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, gui_log_fish[i]);&lt;br /&gt;
			last10caught = last10caught .. gui_log_fish[i] .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-133, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Odd Fish Seen: &amp;quot; .. GrandTotalOdd);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-121, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Unusual Fish Seen: &amp;quot; .. GrandTotalUnusual);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-109, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Strange Fish Seen: &amp;quot; .. GrandTotalStrange);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-97, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-85, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Clicked: &amp;quot; .. GrandTotalLuresUsed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-73, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Lost: &amp;quot; .. GrandTotalLostLures);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-61, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-49, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Total Casts: &amp;quot; .. GrandTotalCasts);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-37, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Failed Catches: &amp;quot; .. GrandTotalFailed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-25, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Fish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Write stats to log file. Everytime the GUI screen is updated, so is the log file.&lt;br /&gt;
&lt;br /&gt;
	WriteFishStats(&amp;quot;Last Session Hour: &amp;quot; .. CurrentTime .. &amp;quot;\n\nOdd Fish Seen: &amp;quot; .. GrandTotalOdd .. &amp;quot;\nUnusual Fish Seen: &amp;quot; .. GrandTotalUnusual .. &amp;quot;\nStrange Fish Seen: &amp;quot; .. GrandTotalStrange .. &amp;quot;\n---------------------\nLures Clicked: &amp;quot; .. GrandTotalLuresUsed .. &amp;quot;\nLures Lost: &amp;quot; .. GrandTotalLostLures .. &amp;quot; \n---------------------\nTotal Casts: &amp;quot; .. GrandTotalCasts .. &amp;quot;\nFailed Catches: &amp;quot; .. GrandTotalFailed .. &amp;quot;\nFish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)\n---------------------\n\nLast 10 Fish Caught:\n\n&amp;quot;.. last10caught);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;MAIN chat tab MUST be showing and wide enough so that each lines doesn't wrap. Pin up Lures Menu (Self, Skills, Fishing, Use Lures). No other pinned menus can exist. More detailed instructions are included inside the script as comments at top. There are options you can set in the script such as how many casts per lure, what gets written to the log file and more! History will be recorded in FishLog.txt and stats in FishStats.txt. Most errors can be fixed by slightly adjusting/moving your chat screen! Press Shift to continue.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Gui_Main();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Variables Used By Program -- Don't Edit Unless you know what you're doing!&lt;br /&gt;
	CurrentLure = &amp;quot;&amp;quot;; --Don't Edit&lt;br /&gt;
	gui_log_fish = {}; --Don't Edit, holds log display&lt;br /&gt;
	log_fish = {};&lt;br /&gt;
	CurrentLureIndex=0; -- 1 = First Lure Player Owns in alphabetical order&lt;br /&gt;
	ChangeLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	DownArrowLocs=nil;&lt;br /&gt;
	PlayersLures={}; --Don't Edit, Holds Current Player Lures&lt;br /&gt;
	CurrentTime=&amp;quot;&amp;quot;; --Don't Edit, Holds Time Check Value&lt;br /&gt;
	TotalLuresUsed = 0;&lt;br /&gt;
	castcount = 0;&lt;br /&gt;
	--strangecounter = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--These variables were later added for displaying additional info on the screen.&lt;br /&gt;
-- Used for the extra reporting/statistics, on screen.&lt;br /&gt;
-- Dont Edit Unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
	GrandTotalCaught = 0;&lt;br /&gt;
	GrandTotalCasts = 0;&lt;br /&gt;
	GrandTotaldb = 0;&lt;br /&gt;
	GrandTotalStrange = 0;&lt;br /&gt;
	GrandTotalOdd = 0;&lt;br /&gt;
	GrandTotalUnusual = 0;&lt;br /&gt;
	GrandTotalLuresUsed = 0;&lt;br /&gt;
	GrandTotalLostLures = 0;&lt;br /&gt;
	GrandTotalFailed = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	PlayersLures = SetupLureGroup();&lt;br /&gt;
	CurrentTime = GetTime();&lt;br /&gt;
	lsSleep(1500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Write an entry into log file to show this is a new session&lt;br /&gt;
	WriteFishLog(&amp;quot;[New Session]\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while 1 do&lt;br /&gt;
		&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		--cast = srFindImage(&amp;quot;Fishing/Button_Fish.png&amp;quot;);&lt;br /&gt;
		cast = srFindImage(&amp;quot;fishicon.png&amp;quot;);&lt;br /&gt;
		if not cast then&lt;br /&gt;
			error(&amp;quot;cannot find fishing button&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if castcount == 0 then&lt;br /&gt;
			--Update counters&lt;br /&gt;
			castcount = 1;&lt;br /&gt;
			CurrentLureIndex = CurrentLureIndex +1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if CurrentLureIndex &amp;gt; #PlayersLures then&lt;br /&gt;
				--Refresh the Lure window, and reindex it, in case some were lost.&lt;br /&gt;
				PlayersLures = SetupLureGroup();&lt;br /&gt;
				CurrentLureIndex = 1;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			--Update the time if ready, always update before new lure to keep chat/log proper&lt;br /&gt;
			if TotalLuresUsed == LureChangesToUpdateTimer then&lt;br /&gt;
				--Update Time&lt;br /&gt;
&lt;br /&gt;
				CurrentTime = GetTime();&lt;br /&gt;
				TotalLuresUsed = 0;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			--Since no casts been made at all, use a lure&lt;br /&gt;
			UseLure();&lt;br /&gt;
			lsSleep(2000);&lt;br /&gt;
			TotalLuresUsed = TotalLuresUsed + 1;&lt;br /&gt;
			GrandTotalLuresUsed = GrandTotalLuresUsed + 1;&lt;br /&gt;
			&lt;br /&gt;
			--update log&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			&lt;br /&gt;
		elseif castcount  &amp;gt; TotalCasts then&lt;br /&gt;
		--	if strangecounter &amp;gt; 0 and strangecounter &amp;lt; AlmostCaughtAttempts then&lt;br /&gt;
				--we don't reset yet!&lt;br /&gt;
		--	else&lt;br /&gt;
				--Reset&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				strangecounter = 0;&lt;br /&gt;
		--	end&lt;br /&gt;
		else&lt;br /&gt;
			--Cast&lt;br /&gt;
			srClickMouseNoMove(cast[0]+3,cast[1]+3);&lt;br /&gt;
			lsSleep(1000);&lt;br /&gt;
			checkBreak();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			while findchat(castcount - 1) == &amp;quot;lure&amp;quot; do&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				checkBreak();&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			castcount = castcount + 1;&lt;br /&gt;
			GrandTotalCasts = GrandTotalCasts + 1;	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--Read Chat&lt;br /&gt;
			ChatType = findchat();&lt;br /&gt;
&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
&lt;br /&gt;
			CurrentLure = string.sub(PlayersLures[CurrentLureIndex],string.find(PlayersLures[CurrentLureIndex],&amp;quot;_&amp;quot;)+1,string.len(PlayersLures[CurrentLureIndex])-4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ChatType == &amp;quot;nobitlostlure&amp;quot; then&lt;br /&gt;
				--No fish bit. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nobit&amp;quot; then&lt;br /&gt;
				--No fishbit&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatchlostlure&amp;quot; then&lt;br /&gt;
				--You didn't catch anything. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatch&amp;quot; then&lt;br /&gt;
				--You didn't catch anything.&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;alreadyfishing&amp;quot; then&lt;br /&gt;
				--castcount = castcount-1;&lt;br /&gt;
				lsSleep(15000); -- Long pause to wait for fishing queue to stop. Somehow it pushed the Fish button twice and now you will cast 2 times in a row. &lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You are already fishing!&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
				--Strange Fish&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
			&lt;br /&gt;
	&lt;br /&gt;
			elseif ChatType == &amp;quot;strangelostlure&amp;quot; then&lt;br /&gt;
				-- Strange Fish and lost lure&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Can't uncomment below elseif statement until we get a screenshot of a message of you were not quick enough. You also lost your lure.&lt;br /&gt;
-- This would need to be added to Fishing_Func.inc , in the Chat_Types {array} along with adding Chatlog_AlmostUnusualLostlure.png). Add above &amp;quot;unusual&amp;quot; line in the array				&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--elseif ChatType == &amp;quot;unusuallostlure&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				--GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				--GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				--GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--if LogStrangeUnusual == true then&lt;br /&gt;
					--WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					--end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;odd&amp;quot; then&lt;br /&gt;
				-- Odd Fish&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogOdd == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;oddlostlure&amp;quot; then&lt;br /&gt;
				-- Odd Fish and lost lure&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;carry&amp;quot; then&lt;br /&gt;
				--chat lines are messed up now&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;caught&amp;quot; or ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
				Fish = ChatReadFish();&lt;br /&gt;
&lt;br /&gt;
				table.insert(gui_log_fish,Fish);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				if ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
					GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Though you lost your lure, you did catch a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					-- This Needs Check for new lure. This will cause a error if not.&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
				else&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Caught a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				--gui_refresh();&lt;br /&gt;
				&lt;br /&gt;
				if SkipCommon == true then&lt;br /&gt;
					FishType = string.sub(Fish,string.find(Fish,&amp;quot;,&amp;quot;) + 1);&lt;br /&gt;
					if FishType == &amp;quot;Abdju&amp;quot; or FishType == &amp;quot;Chromis&amp;quot; or FishType == &amp;quot;Catfish&amp;quot; or FishType == &amp;quot;Carp&amp;quot; or FishType == &amp;quot;Perch&amp;quot; or FishType == &amp;quot;Phagrus&amp;quot; or FishType == &amp;quot;Tilapia&amp;quot; then&lt;br /&gt;
						--Skip it&lt;br /&gt;
						castcount=0;&lt;br /&gt;
&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		gui_refresh();&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	gui_refresh();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=New Raeli Oven Monitor (IN TESTING)}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Raeli Color Monitor v1.1b (edit by Selune) --&lt;br /&gt;
  Make sure the Raeli Oven is pinned, then select the ATITD window and press shift.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
stop_at_CB = false;&lt;br /&gt;
take_screenshots = true;&lt;br /&gt;
stop_at_color = &amp;quot;White&amp;quot;;&lt;br /&gt;
confidence_threshold = 15;&lt;br /&gt;
saved_x = 0;&lt;br /&gt;
saved_y = 0;&lt;br /&gt;
go_now = false;&lt;br /&gt;
&lt;br /&gt;
color_names = {&amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;, &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;Burlywood&amp;quot;, &amp;quot;CadetBlue&amp;quot;, &amp;quot;Carrot&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;, &amp;quot;Crimson&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGray&amp;quot;, &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;, &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;, &amp;quot;DarkSlateGray&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;, &amp;quot;DimGray&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;Feldspar&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;, &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Gray&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;, &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;, &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;, &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;, &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateBlue&amp;quot;, &amp;quot;LightSlateGray&amp;quot;, &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Maroon &amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue &amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;, &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;, &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;, &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy &amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;, &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;, &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple &amp;quot;, &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;, &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGray&amp;quot;, &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue &amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;, &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;VioletRed&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot;};&lt;br /&gt;
color_values = {0xF0F8FF, 0xFAEBD7, 0x00FFFF, 0x7FFFD4, 0xF0FFFF, 0xF5F5DC, 0xFFE4C4, 0x000000, 0xFFEBCD, 0x0000FF, 0x8A2BE2, 0xA52A2A, 0xDEB887, 0x5F9EA0, 0xE07020, 0x7FFF00, 0xD2691E, 0xFF7F50, 0x6495ED, 0xFFF8DC, 0xDC143C, 0x00008B, 0x008B8B, 0xB8860B, 0xA9A9A9, 0x006400, 0xBDB76B, 0x8B008B, 0x556B2F, 0xFF8C00, 0x9932CC, 0x8B0000, 0xE9967A, 0x8FBC8F, 0x483D8B, 0x2F4F4F, 0x00CED1, 0x9400D3, 0xFF1493, 0x00BFFF, 0x696969, 0x1E90FF, 0xD19275, 0xB22222, 0xFFFAF0, 0x228B22, 0xFF00FF, 0xDCDCDC, 0xF8F8FF, 0xFFD700, 0xDAA520, 0x808080, 0x008000, 0xADFF2F, 0xF0FFF0, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0xFFFFF0, 0xF0E68C, 0xE6E6FA, 0xFFF0F5, 0x7CFC00, 0xFFFACD, 0xADD8E6, 0xF08080, 0xE0FFFF, 0xFAFAD2, 0x90EE90, 0xD3D3D3, 0xFFB6C1, 0xFFA07A, 0x20B2AA, 0x87CEFA, 0x8470FF, 0x778899, 0xB0C4DE, 0xFFFFE0, 0x00FF00, 0x32CD32, 0xFAF0E6, 0x800000, 0x66CDAA, 0x0000CD, 0xBA55D3, 0x9370DB, 0x3CB371, 0x7B68EE, 0x00FA9A, 0x48D1CC, 0xC71585, 0x191970, 0xF5FFFA, 0xFFE4E1, 0xFFE4B5, 0xFFDEAD, 0x000080, 0xFDF5E6, 0x808000, 0x6B8E23, 0xFFA500, 0xFF4500, 0xDA70D6, 0xEEE8AA, 0x98FB98, 0xAFEEEE, 0xDB7093, 0xFFEFD5, 0xFFDAB9, 0xCD853F, 0xFFC0CB, 0xDDA0DD, 0xB0E0E6, 0x800080, 0xFF0000, 0xBC8F8F, 0x4169E1, 0x8B4513, 0xFA8072, 0xF4A460, 0x2E8B57, 0xFFF5EE, 0xA0522D, 0xC0C0C0, 0x87CEEB, 0x6A5ACD, 0x708090, 0xFFFAFA, 0x00FF7F, 0x4682B4, 0xD2B48C, 0x008080, 0xD8BFD8, 0xFF6347, 0x40E0D0, 0xEE82EE, 0xD02090, 0xF5DEB3, 0xFFFFFF, 0xF5F5F5, 0xFFFF00, 0x9ACD32};&lt;br /&gt;
&lt;br /&gt;
-- Decimal to Hex conversion&lt;br /&gt;
function DEC_HEX(IN)&lt;br /&gt;
    local B,K,OUT,I,D=16,&amp;quot;0123456789ABCDEF&amp;quot;,&amp;quot;&amp;quot;,0&lt;br /&gt;
    while IN&amp;gt;0 do&lt;br /&gt;
        I=I+1&lt;br /&gt;
        IN,D=math.floor(IN/B),math.mod(IN,B)+1&lt;br /&gt;
        OUT=string.sub(K,D,D)..OUT&lt;br /&gt;
    end&lt;br /&gt;
    return OUT&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Color Conversions&lt;br /&gt;
function rgb2hsl(src_r, src_g, src_b)&lt;br /&gt;
	local h, s, l, d;&lt;br /&gt;
	src_r = src_r / 255;&lt;br /&gt;
	src_g = src_g / 255;&lt;br /&gt;
	src_b = src_b / 255;&lt;br /&gt;
    local max_rgb = math.max(src_r, src_g, src_b); &lt;br /&gt;
	local min_rgb = math.min(src_r, src_g, src_b);&lt;br /&gt;
    l = (max_rgb + min_rgb) / 2;&lt;br /&gt;
&lt;br /&gt;
    if(max_rgb == min_rgb) then&lt;br /&gt;
        h = 0; --achromatic&lt;br /&gt;
		s = 0;&lt;br /&gt;
    else&lt;br /&gt;
        d = max_rgb - min_rgb;&lt;br /&gt;
		if l &amp;gt; 0.5 then&lt;br /&gt;
			s = d / (2 - max_rgb - min_rgb);&lt;br /&gt;
		else&lt;br /&gt;
			s = d / (max_rgb + min_rgb);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if src_g &amp;gt; src_b then&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_b - src_r) / d + 2;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d + 6;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_r - src_g) / d + 4;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
        h = h / 6;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if h == nil then&lt;br /&gt;
		error &amp;quot;NO H&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if s == nil then&lt;br /&gt;
		error (&amp;quot;NO S   D:&amp;quot; .. d);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if l == nil then&lt;br /&gt;
		error &amp;quot;NO L&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    return h, s, l;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function rgb2lab(src_r, src_g, src_b)&lt;br /&gt;
	--R from 0 to 255&lt;br /&gt;
	--G from 0 to 255&lt;br /&gt;
	--B from 0 to 255&lt;br /&gt;
	local r = src_r/255;&lt;br /&gt;
	local g = src_g/255;&lt;br /&gt;
	local b = src_b/255;&lt;br /&gt;
 &lt;br /&gt;
	if (r &amp;gt; 0.04045) then&lt;br /&gt;
		r = math.pow((r + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		r = r / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if ( g &amp;gt; 0.04045) then&lt;br /&gt;
		g = math.pow((g + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		g = g / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if (b &amp;gt; 0.04045) then&lt;br /&gt;
		b = math.pow((b + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		b = b / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	r = r * 100;&lt;br /&gt;
	g = g * 100;&lt;br /&gt;
	b = b * 100;&lt;br /&gt;
 &lt;br /&gt;
	local x = r * 0.4124 + g * 0.3576 + b * 0.1805;&lt;br /&gt;
	local y = r * 0.2126 + g * 0.7152 + b * 0.0722;&lt;br /&gt;
	local z = r * 0.0193 + g * 0.1192 + b * 0.9505;&lt;br /&gt;
	&lt;br /&gt;
	x = x / 95.047;&lt;br /&gt;
	y = y / 100.000;  &lt;br /&gt;
	z = z / 108.883;&lt;br /&gt;
 &lt;br /&gt;
	if ( x &amp;gt; 0.008856 ) then&lt;br /&gt;
		x = math.pow( x , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		x = ( 7.787 * x ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( y &amp;gt; 0.008856 ) then&lt;br /&gt;
		y = math.pow( y , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		y = ( 7.787 * y ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( z &amp;gt; 0.008856 ) then&lt;br /&gt;
		z = math.pow( z , 1/3 );&lt;br /&gt;
	else&lt;br /&gt;
		z = ( 7.787 * z ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lab_l = ( 116 * y ) - 16;&lt;br /&gt;
	local lab_a = 500 * ( x - y );&lt;br /&gt;
	local lab_b = 200 * ( y - z );&lt;br /&gt;
 &lt;br /&gt;
	return lab_l, lab_a, lab_b;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Get nearest color name&lt;br /&gt;
function nearestColor(px)&lt;br /&gt;
	local rgb_r, rgb_g, rgb_b, tst_r, tst_g, tst_b, test_px;&lt;br /&gt;
	local lab_l, lab_a, lab_b, lab_tst_l, lab_tst_a, lab_tst_b;&lt;br /&gt;
	local hsl_h, hsl_s, hsl_l, hsl_tst_h, hsl_tst_s, hsl_tst_l;&lt;br /&gt;
	local offset, best_name, best_offset, next_best_offset, confidence;&lt;br /&gt;
	best_offset = 100000;&lt;br /&gt;
	next_best_offset = 1000000;&lt;br /&gt;
	rgb_r = ((math.floor(px/256/256/256) % 256) - 7) * 255/248;&lt;br /&gt;
	rgb_g = ((math.floor(px/256/256) % 256) - 7) * 255/248;&lt;br /&gt;
	rgb_b = ((math.floor(px/256) % 256) - 6) * 255/248;&lt;br /&gt;
	lab_l, lab_a, lab_b = rgb2lab(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	hsl_h, hsl_s, hsl_l = rgb2hsl(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	&lt;br /&gt;
	for i=1, #color_names do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		test_px = color_values[i];&lt;br /&gt;
		tst_r = (math.floor(test_px/256/256) % 256);&lt;br /&gt;
		tst_g = (math.floor(test_px/256) % 256);&lt;br /&gt;
		tst_b = (math.floor(test_px) % 256);&lt;br /&gt;
		lab_tst_l, lab_tst_a, lab_tst_b = rgb2lab(tst_r, tst_g, tst_b);&lt;br /&gt;
		hsl_tst_h, hsl_tst_s, hsl_tst_l = rgb2hsl(tst_r, tst_g, tst_b);&lt;br /&gt;
		&lt;br /&gt;
		---- Different methods to determine &amp;quot;distance&amp;quot; from the ideal colors. Change these to test different options.&lt;br /&gt;
		&lt;br /&gt;
		--offset = math.abs(rgb_r - tst_r) + math.abs(rgb_g - tst_g) + math.abs(rgb_b - tst_b);&lt;br /&gt;
		--offset = math.max(math.max((math.abs(rgb_r - tst_r)), math.abs(rgb_g - tst_g)), math.abs(rgb_b - tst_b));&lt;br /&gt;
		offset = (rgb_r - tst_r)^2 + (rgb_g - tst_g)^2 + (rgb_b - tst_b)^2;&lt;br /&gt;
		--offset = math.abs(lab_l - lab_tst_l) + math.abs(lab_a - lab_tst_a) + math.abs(lab_b - lab_tst_b);&lt;br /&gt;
		--offset = (lab_l - lab_tst_l)^2 + (lab_a - lab_tst_a)^2 + (lab_b - lab_tst_b)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(lab_l - lab_tst_l)), math.abs(lab_a - lab_tst_a)), math.abs(lab_b - lab_tst_b));&lt;br /&gt;
		--offset = math.abs(hsl_h - hsl_tst_h) + math.abs(hsl_s - hsl_tst_s) + math.abs(hsl_l - hsl_tst_l);&lt;br /&gt;
		--offset = (hsl_h - hsl_tst_h)^2 + (hsl_s - hsl_tst_s)^2 + (hsl_l - hsl_tst_l)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(hsl_h - hsl_tst_h)), math.abs(hsl_s - hsl_tst_s)), math.abs(hsl_l - hsl_tst_l));&lt;br /&gt;
		if (offset &amp;lt; next_best_offset) then&lt;br /&gt;
			if (offset &amp;lt; best_offset) then&lt;br /&gt;
				next_best_offset = best_offset;&lt;br /&gt;
				best_offset = offset;&lt;br /&gt;
				best_name = color_names[i]; -- .. &amp;quot;   Hex: &amp;quot; .. DEC_HEX(color_values[i]);&lt;br /&gt;
			else&lt;br /&gt;
				next_best_offset = offset;&lt;br /&gt;
			end&lt;br /&gt;
			confidence = ((next_best_offset - best_offset) / best_offset) * 100;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return best_name, math.floor(confidence);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Check pixel against target&lt;br /&gt;
function checkColor(px)&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	color_name, confidence = nearestColor(px);&lt;br /&gt;
	&lt;br /&gt;
	if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
		return true, confidence;&lt;br /&gt;
	else&lt;br /&gt;
		return false, 0;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- optional message&lt;br /&gt;
function askForPixel()&lt;br /&gt;
	local is_done = false;&lt;br /&gt;
	local have_coords = false;&lt;br /&gt;
	local color_found = false;&lt;br /&gt;
	local color_guess = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
	local tst_r, tst_g, tst_b, rgb_r, rgb_g, rgb_b;&lt;br /&gt;
	local confidence = 0;&lt;br /&gt;
	-- Display message until shift is held&lt;br /&gt;
	while not go_now do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		y = 0;&lt;br /&gt;
		mouse_x, mouse_y = srMousePos();&lt;br /&gt;
		if not have_coords then&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Mouse over one of the Raeli Oven color pixels and press Shift.&amp;quot;);&lt;br /&gt;
			if lsShiftHeld() then&lt;br /&gt;
				saved_x = mouse_x;&lt;br /&gt;
				saved_y = mouse_y;&lt;br /&gt;
				have_coords = true;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Coords chosen, press 'Reset' to change or 'Do It' to start.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 40;&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xffffff,&lt;br /&gt;
				saved_x .. &amp;quot;, &amp;quot; .. saved_y);&lt;br /&gt;
		else&lt;br /&gt;
			px = srReadPixel(mouse_x, mouse_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
				mouse_x .. &amp;quot;, &amp;quot; .. mouse_y);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		color_guess, confidence = nearestColor(px);&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;) Hex: &amp;quot; .. DEC_HEX(math.floor((px/256) % 16777216)));&lt;br /&gt;
			&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Best guess: &amp;quot; .. color_guess);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Confidence: &amp;quot; .. confidence .. &amp;quot;  (higher is better)&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- Testing other methods of grabbing the pixel, making sure RGBA values match&lt;br /&gt;
		-- srReadScreen();&lt;br /&gt;
		-- px2 = srReadPixelFromBuffer(mouse_x, mouse_y);&lt;br /&gt;
		-- lsPrintWrapped(0, 80, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
		-- 	mouse_x .. &amp;quot;, &amp;quot; .. mouse_y .. &amp;quot; = &amp;quot; .. (math.floor(px2/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256) % 256) .. &amp;quot;,&amp;quot; .. (px2 % 256) );&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 90, 0, 100, px, &amp;quot;test1&amp;quot;);&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 60, 0, 100, px2, &amp;quot;test2&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		take_screenshots = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Take Screenshots&amp;quot;, take_screenshots);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		stop_at_CB = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Stop at Color&amp;quot;, stop_at_CB);&lt;br /&gt;
		&lt;br /&gt;
		if stop_at_CB then&lt;br /&gt;
			y = y + 25;&lt;br /&gt;
			is_done = false;&lt;br /&gt;
			color_found = false;&lt;br /&gt;
			-- Edit box and text display&lt;br /&gt;
			lsPrint(10, y, z, 0.7, 0.7, 0xFFFFFFff, &amp;quot;Desired Color:&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			y = y + 20;&lt;br /&gt;
			-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
			is_done, stop_at_color = lsEditBox(&amp;quot;Desired Color:&amp;quot;, 10, y, z, 250, 30, 0.7, 0.7, 0x000000ff, &amp;quot;White&amp;quot;);&lt;br /&gt;
			--dropdown_color_cur_value = lsDropdown(&amp;quot;ColorDropDown1&amp;quot;, 5, y, 0, 200, dropdown_color_cur_value, color_names);&lt;br /&gt;
			&lt;br /&gt;
			for i=0, #color_names do&lt;br /&gt;
				if stop_at_color and color_names[i] then&lt;br /&gt;
					if (stop_at_color:upper() == (color_names[i]):upper()) then&lt;br /&gt;
						color_found = true;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not color_found then&lt;br /&gt;
				lsPrint(130, y - 20, z, 0.7, 0.7, 0xFF0000ff, &amp;quot;No such color&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			y = y + 35;&lt;br /&gt;
			lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, &amp;quot;Confidence Required:&amp;quot;);&lt;br /&gt;
			is_done, confidence_threshold = lsEditBox(&amp;quot;confthresh&amp;quot;, 150, y, 0, 50, 30, 0.7, 0.7, 0x000000ff, confidence_threshold);&lt;br /&gt;
			confidence_threshold = tonumber(confidence_threshold);&lt;br /&gt;
			if not confidence_threshold then&lt;br /&gt;
				lsPrint(10, y+17, 10, 0.4, 0.4, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
				confidence_threshold = 10;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			is_done = true;&lt;br /&gt;
			color_found = true;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			if color_found then&lt;br /&gt;
				if lsButtonText(10, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Do It&amp;quot;) then&lt;br /&gt;
					go_now = true;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if lsButtonText(100, lsScreenY - 30, 0, 80, 0xFFA500ff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
				have_coords = false;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
	-- Wait for shift to be released&lt;br /&gt;
	while lsShiftHeld() do end;&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(askText);&lt;br /&gt;
	while lsShiftHeld() do&lt;br /&gt;
		-- Make user release shift key&lt;br /&gt;
		lsCheckBreak();&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	askForPixel();&lt;br /&gt;
	&lt;br /&gt;
	local t0 = lsGetTimer();&lt;br /&gt;
	local px = 0;&lt;br /&gt;
	local index=0;&lt;br /&gt;
	local color_name, confidence;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		local y = 0;&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		new_px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
		local t = (lsGetTimer() - t0) / 1000 / 60;&lt;br /&gt;
		t = math.floor(t*10 + 0.5)/10;&lt;br /&gt;
		local t_string = t;&lt;br /&gt;
		if not (new_px == px) then&lt;br /&gt;
			index = index+1;&lt;br /&gt;
			if take_screenshots then&lt;br /&gt;
				srSaveLastReadScreen(&amp;quot;screen_&amp;quot; .. index .. &amp;quot;_&amp;quot; .. t_string .. &amp;quot;.png&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			px = new_px;&lt;br /&gt;
			&lt;br /&gt;
			if stop_at_CB then&lt;br /&gt;
				color_name, confidence = nearestColor(px);&lt;br /&gt;
				if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
					if confidence &amp;gt; confidence_threshold then&lt;br /&gt;
						clickAllText(&amp;quot;Interrupt&amp;quot;);&lt;br /&gt;
						lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
						error (&amp;quot;Stopped burn at: &amp;quot; .. stop_at_color .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
					else&lt;br /&gt;
						for i = 1, 3 do&lt;br /&gt;
							lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
							lsSleep(50);&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		y = y + 5;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Screen: &amp;quot; .. index .. &amp;quot;  Timer: &amp;quot; .. t_string);&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;Color: &amp;quot; .. color_name .. &amp;quot;  Confidence: &amp;quot; .. confidence);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		lsPrintWrapped(5, y, 1, lsScreenX - 10, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;)  Hex: &amp;quot; .. DEC_HEX(math.floor((new_px/256) % 16777216)));&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end	&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226640</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226640"/>
		<updated>2013-01-15T05:54:17Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fishing Macro for Testing}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Pin up your Lures menu 'Self Click, Skills, Fishing, Use Lure' (no other pinned up windows can exist)&lt;br /&gt;
-- Should have (Chat-Related): 'Chat and Inventory can be minimized' AND 'Minimized chat-channels are still visible'.&lt;br /&gt;
-- You must have Main Chat tab showing at all times and window is long/wide enough so no lines don't wrap.&lt;br /&gt;
&lt;br /&gt;
-- Yes, this macro reads your MAIN chat screen, so make sure you read the above statement for it to work correctly.&lt;br /&gt;
-- Each line of text must not scroll/wrap to the next line. If it does, then drag your chat window wider so it doesn't wrap.&lt;br /&gt;
-- You want to make your chat very wide. Note: It is possible to see a LONG message like &amp;quot;Though you lost your lure, you did catch a 15 deben Orange Spongefish&amp;quot;&lt;br /&gt;
-- Another long message is &amp;quot;You didn't catch anything. You also lost your lure. Try different lures and locations&amp;quot;&lt;br /&gt;
-- At 1280x1024 your chat screen should reach at least to the mid point of your screen to avoid having a chat line wrap to next line, for a long message, like above.&lt;br /&gt;
-- Higher resolutions may not have to reach quite to the mid point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ********** This macro writes to a log file (Fishlog.txt) for most actions, so you can review later! ******&lt;br /&gt;
-- ********** This also macro writes to a log file (Fishstats.txt) showing stats of your last fishing session, so you can review later! ******&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--You can delete any of the log files if you wish. It will automatically create new ones if they dont exist.&lt;br /&gt;
--The fishlog.txt file gets appended everytime you fish, so the file can grow quite long over time.&lt;br /&gt;
--The fishstats.txt file gets overwritten everytime your gui program window updates, so it doesn't 'grow' over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Main chat tab is not showing&amp;quot; and other errors can usually be overcome by adjusting the main chat window size and restarting, assuming main chat is showing.&lt;br /&gt;
-- And also verify the lines aren't wrapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The very first thing this macro does is to Self Click, Special, What Time is it? option. This will then display the time in main chat window.&lt;br /&gt;
-- The macro then parses time displayed, in main chat tab, so it can use it while the macro runs (Log files and on screen display).&lt;br /&gt;
-- Thats what the mysterious Self Click is doing, its not a bug, it is suppose to do that and thats why, to fetch the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Note: These are currently refered to as Common Fish in the below 'SkipCommon' type of fishes (True or False), in the 'Custom Variables' section.&lt;br /&gt;
&lt;br /&gt;
	--Abdju&lt;br /&gt;
	--Chromis&lt;br /&gt;
	--Catfish&lt;br /&gt;
	--Carp&lt;br /&gt;
	--Perch&lt;br /&gt;
	--Phagrus&lt;br /&gt;
	--Tilapia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--CUSTOM VARIABLES -- EDIT HERE To Change Fishing Casts, Skips, Updates.&lt;br /&gt;
&lt;br /&gt;
TotalCasts=3; --Total Casts per lure, if a fish caught. If no fish then it skips.&lt;br /&gt;
SkipCommon = false; --Skips to next lure if fish caught is a common (Choose True or False).&lt;br /&gt;
LureChangesToUpdateTimer = 7; --Total lures used before time is updated. Zero updates every new lure.&lt;br /&gt;
IgnoreUnknown = false; --Continues the script if fish is not recognized&lt;br /&gt;
&lt;br /&gt;
--AlmostCaughtAttempts = 0; --Adds additional attempts to the current lure if Unusual, Strange fish are seen;&lt;br /&gt;
-- Note: AlmostCaughtAttempts above was already commented out upon arriving to Talescripts.&lt;br /&gt;
-- It is also commented out during the script, so uncommenting above will NOT activate the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Additional reporting in the log file&lt;br /&gt;
-- Choose True or False.&lt;br /&gt;
	-- Note 'LogStrangeUnusual' and 'LogOdd' (below) overrides LogFails setting. ie if LogStrange true, then it would still log even if LogFails = False&lt;br /&gt;
	--If LogFails = false and LogStrangeUnusual or LogOdd = true, then failed catches those would still be included in the log file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LogFails = true;  	-- Do you want to add Failed Catches to log file? 'Failed to catch anything' or 'No fish bit'. Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogStrangeUnusual = true; 	-- Do you want to add Strange and Unusual fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogOdd = true; 	-- Do you want to add Odd fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- END CUSTOM VARIABLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Fishing_Func.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetupLureGroup()&lt;br /&gt;
&lt;br /&gt;
	TLures = {};&lt;br /&gt;
	FirstLure=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLure = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindPin = srFindImage(&amp;quot;UnPin.png&amp;quot;);&lt;br /&gt;
	if FindPin then&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	--Click the pinup to refresh the lures window&lt;br /&gt;
&lt;br /&gt;
	srClickMouseNoMove(FindPin[0]+5,FindPin[1]+30);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		DownPin = srFindImageInRange(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,500);&lt;br /&gt;
		if DownPin then&lt;br /&gt;
			--Just Incase&lt;br /&gt;
			UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
			if UpArrow then&lt;br /&gt;
				srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				srReadScreen();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		--	srClickMouseNoMove(DownPin[0]+5,DownPin[1]+5);&lt;br /&gt;
			LastLure=FindLureName(DownPin[0]-150,DownPin[1]-10,150,25);&lt;br /&gt;
			--error(LastLure);&lt;br /&gt;
			FirstLure = FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
		--	error(FirstLure);&lt;br /&gt;
		else&lt;br /&gt;
			--No Arrows on lure menu?&lt;br /&gt;
			FirstLure=FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
			LastLure=nil;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Didn\'t find Lures pinned window - Self Click-&amp;gt;Skills, Fishing -&amp;gt; Use Lure, PIN THIS WINDOW!&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if  LastLure ~= nil then&lt;br /&gt;
		--We have last lure, and arrows showing&lt;br /&gt;
		ChangeLureMenu = LastLure;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		FirstLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. FirstLure);&lt;br /&gt;
		LastLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. LastLure);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #Lures,1 do&lt;br /&gt;
			test = srFindImageInRange((&amp;quot;fishing/&amp;quot; .. Lures[i]),FirstLurLoc[0]-5,FirstLurLoc[1]-5,175,500);&lt;br /&gt;
&lt;br /&gt;
			if test then&lt;br /&gt;
				--Add Lure&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
				if Lures[i] == LastLure then&lt;br /&gt;
					--End of Menu, Use Down Arrow&lt;br /&gt;
					arrow=srFindImageInRange(&amp;quot;Fishing/menu_downarrow.png&amp;quot;,test[0],test[1]-5,175,50);&lt;br /&gt;
					if arrow then&lt;br /&gt;
						DownArrowLocs = arrow;&lt;br /&gt;
						srClickMouseNoMove(arrow[0]+5,arrow[1]+5);&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
						srReadScreen();&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
					else&lt;br /&gt;
						error(&amp;quot;no arrow found&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				LastLureMenu = Lures[i];&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--Reset Lure Menu&lt;br /&gt;
		UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
		if UpArrow then&lt;br /&gt;
			srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	else&lt;br /&gt;
		--No arrows, just get lures&lt;br /&gt;
		for i = 1, #Lures, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lures[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return TLures;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function FindLureName(x,y,w,h)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #Lures, 1 do &lt;br /&gt;
		Lure = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Lures[i], x,y,w,h);&lt;br /&gt;
		if Lure then&lt;br /&gt;
			return Lures[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GetLure()&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	&lt;br /&gt;
	if CurrentLureIndex == LastLureIndex then&lt;br /&gt;
		-- Use Down Menu&lt;br /&gt;
		srClickMouseNoMove(DownArrowLocs[0]-5,DownArrowLocs[1]-5);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
	if not lure then&lt;br /&gt;
		--Failed to find lure&lt;br /&gt;
		error(&amp;quot;Can\'t find a lure!&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		slure = Lures[PlayersLures[CurrentLureIndex]];&lt;br /&gt;
		slure = string.sub(slure,string.find(slure,&amp;quot;_&amp;quot;)+1,string.len(slure) - 4);&lt;br /&gt;
		--statusScreen(&amp;quot;Using Lure &amp;quot; .. slure);&lt;br /&gt;
		return slure&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UseLure()&lt;br /&gt;
	-- Uses lure according to CurrentLureIndex, which is used in PlayersLures which contains each lure the player has. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if #TLures == 0 then&lt;br /&gt;
	error 'Can\'t find any lures on the pinned window. Did you run out of lures?'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
	if lure then&lt;br /&gt;
		srClickMouseNoMove(lure[0]+3,lure[1]+3);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		-- Find Lure Type&lt;br /&gt;
		for i = 1, #Lure_Types, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lure_Types[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				--Click it!&lt;br /&gt;
				srClickMouseNoMove(test[0]+3,test[1]+3);&lt;br /&gt;
				gui_refresh();&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if PlayersLures[CurrentLureIndex] == ChangeLureMenu then&lt;br /&gt;
		down = srFindImage(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(down[0]+5,down[1]+5);&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	elseif PlayersLures[CurrentLureIndex] == LastLureMenu  then&lt;br /&gt;
		up = srFindImage(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(up[0]+5,up[1]+5);&lt;br /&gt;
		CurrentLureIndex=1;&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ChatReadFish()&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
	&lt;br /&gt;
	-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
	if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Caught Something..  Find Fish Details&lt;br /&gt;
	Sfish = &amp;quot;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, #CL_Fish do&lt;br /&gt;
		ChatFish = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Fish[i],Coords[0] ,Coords[1],500,25);&lt;br /&gt;
		if ChatFish then&lt;br /&gt;
			Sfish = string.sub(CL_Fish[i],string.find(CL_Fish[i],&amp;quot;Fish_&amp;quot;) + 5,string.len(CL_Fish[i]) - 4);&lt;br /&gt;
			GrandTotalCaught = GrandTotalCaught + 1&lt;br /&gt;
			break;&lt;br /&gt;
		end					&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	if  string.len(Sfish) &amp;lt; 1 then&lt;br /&gt;
		-- This fish name and fishname.png file likely needs to be added to Fishing_Func.inc, under the CL_Fish array and the .png added to /Images/Fishing folder&lt;br /&gt;
		if IgnoreUnknown then&lt;br /&gt;
			Sfish = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
			SNum = &amp;quot;1&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Unknown Fish! PLEASE, Take screenshot (Alt+C) of main chat tab, share with Talescripts team!&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--Find Size&lt;br /&gt;
		for i = #CL_Number,1,-1 do&lt;br /&gt;
			ChatSize =  srFindImageInRange(&amp;quot;fishing/&amp;quot; .. CL_Number[i],Coords[0],Coords[1],500,25);&lt;br /&gt;
			if ChatSize then&lt;br /&gt;
				SNum = string.sub(CL_Number[i],string.find(CL_Number[i],&amp;quot;_&amp;quot;) + 1, string.len(CL_Number[i]) - 4);&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		GrandTotaldb = GrandTotaldb + SNum;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return(Sfish .. &amp;quot; (&amp;quot; .. SNum .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function findchat(line)&lt;br /&gt;
	--Reads a chat line and returns a basic string for better processing&lt;br /&gt;
	&lt;br /&gt;
	-- Odd fish means your fly fishing skill is not high enough. Raise it with enormous amounts of fishing.&lt;br /&gt;
	-- Strange fish means you need a better rod to catch the rish. You may succeed on future attempts.&lt;br /&gt;
	-- Unusual fish means your speed skill was not high enough to catch this type of fish. If it is almost enough, you may catch them on future casts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Possible fishing messages&lt;br /&gt;
	--	Caught A (SIZE) Deben (FISH)&lt;br /&gt;
	--	You almost caught a strange fish&lt;br /&gt;
	--		(You almost caught a strange fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an unusual fish&lt;br /&gt;
	--		(You almost caught an unusual fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an odd fish&lt;br /&gt;
	--		(You almost caught an odd fish. You also lost your lure.)&lt;br /&gt;
	--	Although you lost your lure  (Caught a fish)&lt;br /&gt;
	--	Using a (LURE) (TYPE) lure.&lt;br /&gt;
	--	You are carrying more than you can manage.&lt;br /&gt;
	--	You are carrying too much bulk.&lt;br /&gt;
	--	You didn't catch anything.&lt;br /&gt;
	--		(You didn't catch anything. You also lost your lure.)&lt;br /&gt;
	--	No Fish Bit.&lt;br /&gt;
	--		(No Fish Bit. You also lost your lure.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if line and line &amp;gt; 0 then&lt;br /&gt;
		Coords = imgs[(#imgs) - line];&lt;br /&gt;
			if not Coords then&lt;br /&gt;
			error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Find What Happened&lt;br /&gt;
&lt;br /&gt;
	ChatType = &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #Chat_Types -1,2 do&lt;br /&gt;
		test = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Chat_Types[i],Coords[0],Coords[1],500,30);		&lt;br /&gt;
		if test then&lt;br /&gt;
			--Found Chat&lt;br /&gt;
			ChatType = Chat_Types[i + 1];&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	--Break down!&lt;br /&gt;
	if ChatType then&lt;br /&gt;
		--if ChatType == &amp;quot;lure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofishlostlure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofish&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
		return ChatType;&lt;br /&gt;
	else&lt;br /&gt;
		error(ChatType);&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GetTime()&lt;br /&gt;
	--Reads time stamp using special-&amp;gt;what time menu&lt;br /&gt;
	winsize = srGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	--Open Menu, Press the Esc key to open the Self Click menu&lt;br /&gt;
&lt;br /&gt;
	-- Move mouse to center of screen before Sending the Esc key, to get the Self Click menu. We dont want it self clicking near the edge of screen causing an error.&lt;br /&gt;
	srSetMousePos(winsize[0]/2,winsize[1]/2);&lt;br /&gt;
	lsSleep(100);  -- This delay is critical for any srSetMousePos. Without it, the mouse will not have time to actually move!&lt;br /&gt;
&lt;br /&gt;
	srKeyEvent(string.char(27));  -- Send Esc Key&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
	&lt;br /&gt;
	--Find Special Menu&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	menu = srFindImage(&amp;quot;Fishing/Menu_Special.png&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if menu then&lt;br /&gt;
		--Click it!&lt;br /&gt;
		srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
		&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
		-- Look for the What Time Is It? option in menu&lt;br /&gt;
		menu = srFindImage(&amp;quot;Fishing/Menu_WhatTime.png&amp;quot;);&lt;br /&gt;
		if menu then&lt;br /&gt;
			--Click it!&lt;br /&gt;
			srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	for i = #CL_Time, 1, -1 do&lt;br /&gt;
		Stime = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Time[i],Coords[0],Coords[1],400,25);&lt;br /&gt;
		if Stime then&lt;br /&gt;
			Hour = string.sub(CL_Time[i],string.find(CL_Time[i],&amp;quot;ime_&amp;quot;)+4,string.len(CL_Time[i])-4);&lt;br /&gt;
			&lt;br /&gt;
			AM = srFindImageInRange(&amp;quot;Fishing/Chatlog_Time_AM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
			if AM then&lt;br /&gt;
				CurrentTime=(Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
				return (Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				PM = srFindImageInRange(&amp;quot;Fishing/chatlog_time_PM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
				if PM then&lt;br /&gt;
					CurrentTime=(Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
					return (Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gui_refresh()&lt;br /&gt;
	lsDoFrame();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if GrandTotalCaught &amp;lt; 10 then&lt;br /&gt;
	last10 = GrandTotalCaught .. &amp;quot;/10&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	last10 = 10;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Stats (On Screen Display)&lt;br /&gt;
	--CurrentLureIndex  out of  PlayersLures&lt;br /&gt;
	winsize = lsGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	lsPrintWrapped(10, 0, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lure Index: &amp;quot; .. CurrentLureIndex .. &amp;quot; out of &amp;quot; .. #PlayersLures .. &amp;quot;       &amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 20, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Time: &amp;quot; .. CurrentTime);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 40, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Last [&amp;quot; .. last10 .. &amp;quot;] Fish Caught:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Reset this string before showing last 10 fish below. Else the entries will multiply with entries from previous loops/call to this function&lt;br /&gt;
	last10caught = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if #gui_log_fish &amp;gt; 10 then&lt;br /&gt;
		table.remove(gui_log_fish,1);&lt;br /&gt;
	end&lt;br /&gt;
		for i = 1, #gui_log_fish,1 do&lt;br /&gt;
			lsPrintWrapped(10, 50 + (12*i), 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, gui_log_fish[i]);&lt;br /&gt;
			last10caught = last10caught .. gui_log_fish[i] .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-133, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Odd Fish Seen: &amp;quot; .. GrandTotalOdd);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-121, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Unusual Fish Seen: &amp;quot; .. GrandTotalUnusual);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-109, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Strange Fish Seen: &amp;quot; .. GrandTotalStrange);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-97, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-85, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Clicked: &amp;quot; .. GrandTotalLuresUsed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-73, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Lost: &amp;quot; .. GrandTotalLostLures);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-61, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-49, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Total Casts: &amp;quot; .. GrandTotalCasts);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-37, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Failed Catches: &amp;quot; .. GrandTotalFailed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-25, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Fish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Write stats to log file. Everytime the GUI screen is updated, so is the log file.&lt;br /&gt;
&lt;br /&gt;
	WriteFishStats(&amp;quot;Last Session Hour: &amp;quot; .. CurrentTime .. &amp;quot;\n\nOdd Fish Seen: &amp;quot; .. GrandTotalOdd .. &amp;quot;\nUnusual Fish Seen: &amp;quot; .. GrandTotalUnusual .. &amp;quot;\nStrange Fish Seen: &amp;quot; .. GrandTotalStrange .. &amp;quot;\n---------------------\nLures Clicked: &amp;quot; .. GrandTotalLuresUsed .. &amp;quot;\nLures Lost: &amp;quot; .. GrandTotalLostLures .. &amp;quot; \n---------------------\nTotal Casts: &amp;quot; .. GrandTotalCasts .. &amp;quot;\nFailed Catches: &amp;quot; .. GrandTotalFailed .. &amp;quot;\nFish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)\n---------------------\n\nLast 10 Fish Caught:\n\n&amp;quot;.. last10caught);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;MAIN chat tab MUST be showing and wide enough so that each lines doesn't wrap. Pin up Lures Menu (Self, Skills, Fishing, Use Lures). No other pinned menus can exist. More detailed instructions are included inside the script as comments at top. There are options you can set in the script such as how many casts per lure, what gets written to the log file and more! History will be recorded in FishLog.txt and stats in FishStats.txt. Most errors can be fixed by slightly adjusting/moving your chat screen! Press Shift to continue.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Gui_Main();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Variables Used By Program -- Don't Edit Unless you know what you're doing!&lt;br /&gt;
	CurrentLure = &amp;quot;&amp;quot;; --Don't Edit&lt;br /&gt;
	gui_log_fish = {}; --Don't Edit, holds log display&lt;br /&gt;
	log_fish = {};&lt;br /&gt;
	CurrentLureIndex=0; -- 1 = First Lure Player Owns in alphabetical order&lt;br /&gt;
	ChangeLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	DownArrowLocs=nil;&lt;br /&gt;
	PlayersLures={}; --Don't Edit, Holds Current Player Lures&lt;br /&gt;
	CurrentTime=&amp;quot;&amp;quot;; --Don't Edit, Holds Time Check Value&lt;br /&gt;
	TotalLuresUsed = 0;&lt;br /&gt;
	castcount = 0;&lt;br /&gt;
	--strangecounter = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--These variables were later added for displaying additional info on the screen.&lt;br /&gt;
-- Used for the extra reporting/statistics, on screen.&lt;br /&gt;
-- Dont Edit Unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
	GrandTotalCaught = 0;&lt;br /&gt;
	GrandTotalCasts = 0;&lt;br /&gt;
	GrandTotaldb = 0;&lt;br /&gt;
	GrandTotalStrange = 0;&lt;br /&gt;
	GrandTotalOdd = 0;&lt;br /&gt;
	GrandTotalUnusual = 0;&lt;br /&gt;
	GrandTotalLuresUsed = 0;&lt;br /&gt;
	GrandTotalLostLures = 0;&lt;br /&gt;
	GrandTotalFailed = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	PlayersLures = SetupLureGroup();&lt;br /&gt;
	CurrentTime = GetTime();&lt;br /&gt;
	lsSleep(1500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Write an entry into log file to show this is a new session&lt;br /&gt;
	WriteFishLog(&amp;quot;[New Session]\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while 1 do&lt;br /&gt;
		&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		--cast = srFindImage(&amp;quot;Fishing/Button_Fish.png&amp;quot;);&lt;br /&gt;
		cast = srFindImage(&amp;quot;fishicon.png&amp;quot;);&lt;br /&gt;
		if not cast then&lt;br /&gt;
			error(&amp;quot;cannot find fishing button&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if castcount == 0 then&lt;br /&gt;
			--Update counters&lt;br /&gt;
			castcount = 1;&lt;br /&gt;
			CurrentLureIndex = CurrentLureIndex +1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if CurrentLureIndex &amp;gt; #PlayersLures then&lt;br /&gt;
				--Refresh the Lure window, and reindex it, in case some were lost.&lt;br /&gt;
				PlayersLures = SetupLureGroup();&lt;br /&gt;
				CurrentLureIndex = 1;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			--Update the time if ready, always update before new lure to keep chat/log proper&lt;br /&gt;
			if TotalLuresUsed == LureChangesToUpdateTimer then&lt;br /&gt;
				--Update Time&lt;br /&gt;
&lt;br /&gt;
				CurrentTime = GetTime();&lt;br /&gt;
				TotalLuresUsed = 0;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			--Since no casts been made at all, use a lure&lt;br /&gt;
			UseLure();&lt;br /&gt;
			lsSleep(2000);&lt;br /&gt;
			TotalLuresUsed = TotalLuresUsed + 1;&lt;br /&gt;
			GrandTotalLuresUsed = GrandTotalLuresUsed + 1;&lt;br /&gt;
			&lt;br /&gt;
			--update log&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			&lt;br /&gt;
		elseif castcount  &amp;gt; TotalCasts then&lt;br /&gt;
		--	if strangecounter &amp;gt; 0 and strangecounter &amp;lt; AlmostCaughtAttempts then&lt;br /&gt;
				--we don't reset yet!&lt;br /&gt;
		--	else&lt;br /&gt;
				--Reset&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				strangecounter = 0;&lt;br /&gt;
		--	end&lt;br /&gt;
		else&lt;br /&gt;
			--Cast&lt;br /&gt;
			srClickMouseNoMove(cast[0]+3,cast[1]+3);&lt;br /&gt;
			lsSleep(1000);&lt;br /&gt;
			checkBreak();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			while findchat(castcount - 1) == &amp;quot;lure&amp;quot; do&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				checkBreak();&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			castcount = castcount + 1;&lt;br /&gt;
			GrandTotalCasts = GrandTotalCasts + 1;	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--Read Chat&lt;br /&gt;
			ChatType = findchat();&lt;br /&gt;
&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
&lt;br /&gt;
			CurrentLure = string.sub(PlayersLures[CurrentLureIndex],string.find(PlayersLures[CurrentLureIndex],&amp;quot;_&amp;quot;)+1,string.len(PlayersLures[CurrentLureIndex])-4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ChatType == &amp;quot;nobitlostlure&amp;quot; then&lt;br /&gt;
				--No fish bit. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nobit&amp;quot; then&lt;br /&gt;
				--No fishbit&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatchlostlure&amp;quot; then&lt;br /&gt;
				--You didn't catch anything. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatch&amp;quot; then&lt;br /&gt;
				--You didn't catch anything.&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;alreadyfishing&amp;quot; then&lt;br /&gt;
				--castcount = castcount-1;&lt;br /&gt;
				lsSleep(15000); -- Long pause to wait for fishing queue to stop. Somehow it pushed the Fish button twice and now you will cast 2 times in a row. &lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You are already fishing!&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
				--Strange Fish&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
			&lt;br /&gt;
	&lt;br /&gt;
			elseif ChatType == &amp;quot;strangelostlure&amp;quot; then&lt;br /&gt;
				-- Strange Fish and lost lure&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Can't uncomment below elseif statement until we get a screenshot of a message of you were not quick enough. You also lost your lure.&lt;br /&gt;
-- This would need to be added to Fishing_Func.inc , in the Chat_Types {array} along with adding Chatlog_AlmostUnusualLostlure.png). Add above &amp;quot;unusual&amp;quot; line in the array				&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--elseif ChatType == &amp;quot;unusuallostlure&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				--GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				--GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				--GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--if LogStrangeUnusual == true then&lt;br /&gt;
					--WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					--end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;odd&amp;quot; then&lt;br /&gt;
				-- Odd Fish&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogOdd == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;oddlostlure&amp;quot; then&lt;br /&gt;
				-- Odd Fish and lost lure&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;carry&amp;quot; then&lt;br /&gt;
				--chat lines are messed up now&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;caught&amp;quot; or ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
				Fish = ChatReadFish();&lt;br /&gt;
&lt;br /&gt;
				table.insert(gui_log_fish,Fish);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				if ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
					GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Though you lost your lure, you did catch a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					-- This Needs Check for new lure. This will cause a error if not.&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
				else&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Caught a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				--gui_refresh();&lt;br /&gt;
				&lt;br /&gt;
				if SkipCommon == true then&lt;br /&gt;
					FishType = string.sub(Fish,string.find(Fish,&amp;quot;,&amp;quot;) + 1);&lt;br /&gt;
					if FishType == &amp;quot;Abdju&amp;quot; or FishType == &amp;quot;Chromis&amp;quot; or FishType == &amp;quot;Catfish&amp;quot; or FishType == &amp;quot;Carp&amp;quot; or FishType == &amp;quot;Perch&amp;quot; or FishType == &amp;quot;Phagrus&amp;quot; or FishType == &amp;quot;Tilapia&amp;quot; then&lt;br /&gt;
						--Skip it&lt;br /&gt;
						castcount=0;&lt;br /&gt;
&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		gui_refresh();&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	gui_refresh();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=New Raeli Oven Monitor (IN TESTING)}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Raeli Color Monitor v1.1a (edit by Selune) --&lt;br /&gt;
  Make sure the Raeli Oven is pinned, then select the ATITD window and press shift.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
stop_at_CB = false;&lt;br /&gt;
take_screenshots = true;&lt;br /&gt;
stop_at_color = &amp;quot;White&amp;quot;;&lt;br /&gt;
saved_x = 0;&lt;br /&gt;
saved_y = 0;&lt;br /&gt;
go_now = false;&lt;br /&gt;
&lt;br /&gt;
color_names = {&amp;quot;AliceBlue&amp;quot;, &amp;quot;AntiqueWhite&amp;quot;, &amp;quot;Aqua&amp;quot;, &amp;quot;Aquamarine&amp;quot;, &amp;quot;Azure&amp;quot;, &amp;quot;Beige&amp;quot;, &amp;quot;Bisque&amp;quot;, &amp;quot;Black&amp;quot;, &amp;quot;BlanchedAlmond&amp;quot;, &amp;quot;Blue&amp;quot;, &amp;quot;BlueViolet&amp;quot;, &amp;quot;Brown&amp;quot;, &amp;quot;Burlywood&amp;quot;, &amp;quot;CadetBlue&amp;quot;, &amp;quot;Carrot&amp;quot;, &amp;quot;Chartreuse&amp;quot;, &amp;quot;Chocolate&amp;quot;, &amp;quot;Coral&amp;quot;, &amp;quot;CornflowerBlue&amp;quot;, &amp;quot;Cornsilk&amp;quot;, &amp;quot;Crimson&amp;quot;, &amp;quot;DarkBlue&amp;quot;, &amp;quot;DarkCyan&amp;quot;, &amp;quot;DarkGoldenrod&amp;quot;, &amp;quot;DarkGray&amp;quot;, &amp;quot;DarkGreen&amp;quot;, &amp;quot;DarkKhaki&amp;quot;, &amp;quot;DarkMagenta&amp;quot;, &amp;quot;DarkOliveGreen&amp;quot;, &amp;quot;DarkOrange&amp;quot;, &amp;quot;DarkOrchid&amp;quot;, &amp;quot;DarkRed&amp;quot;, &amp;quot;DarkSalmon&amp;quot;, &amp;quot;DarkSeaGreen&amp;quot;, &amp;quot;DarkSlateBlue&amp;quot;, &amp;quot;DarkSlateGray&amp;quot;, &amp;quot;DarkTurquoise&amp;quot;, &amp;quot;DarkViolet&amp;quot;, &amp;quot;DeepPink&amp;quot;, &amp;quot;DeepSkyBlue&amp;quot;, &amp;quot;DimGray&amp;quot;, &amp;quot;DodgerBlue&amp;quot;, &amp;quot;Feldspar&amp;quot;, &amp;quot;FireBrick&amp;quot;, &amp;quot;FloralWhite&amp;quot;, &amp;quot;ForestGreen&amp;quot;, &amp;quot;Fuchsia&amp;quot;, &amp;quot;Gainsboro&amp;quot;, &amp;quot;GhostWhite&amp;quot;, &amp;quot;Gold&amp;quot;, &amp;quot;Goldenrod&amp;quot;, &amp;quot;Gray&amp;quot;, &amp;quot;Green&amp;quot;, &amp;quot;GreenYellow&amp;quot;, &amp;quot;Honeydew&amp;quot;, &amp;quot;HotPink&amp;quot;, &amp;quot;IndianRed&amp;quot;, &amp;quot;Indigo&amp;quot;, &amp;quot;Ivory&amp;quot;, &amp;quot;Khaki&amp;quot;, &amp;quot;Lavender&amp;quot;, &amp;quot;LavenderBlush&amp;quot;, &amp;quot;LawnGreen&amp;quot;, &amp;quot;LemonChiffon&amp;quot;, &amp;quot;LightBlue&amp;quot;, &amp;quot;LightCoral&amp;quot;, &amp;quot;LightCyan&amp;quot;, &amp;quot;LightGoldenrodYellow&amp;quot;, &amp;quot;LightGreen&amp;quot;, &amp;quot;LightGrey&amp;quot;, &amp;quot;LightPink&amp;quot;, &amp;quot;LightSalmon&amp;quot;, &amp;quot;LightSeaGreen&amp;quot;, &amp;quot;LightSkyBlue&amp;quot;, &amp;quot;LightSlateBlue&amp;quot;, &amp;quot;LightSlateGray&amp;quot;, &amp;quot;LightSteelBlue&amp;quot;, &amp;quot;LightYellow&amp;quot;, &amp;quot;Lime&amp;quot;, &amp;quot;LimeGreen&amp;quot;, &amp;quot;Linen&amp;quot;, &amp;quot;Maroon &amp;quot;, &amp;quot;MediumAquamarine&amp;quot;, &amp;quot;MediumBlue &amp;quot;, &amp;quot;MediumOrchid&amp;quot;, &amp;quot;MediumPurple&amp;quot;, &amp;quot;MediumSeaGreen&amp;quot;, &amp;quot;MediumSlateBlue&amp;quot;, &amp;quot;MediumSpringGreen&amp;quot;, &amp;quot;MediumTurquoise&amp;quot;, &amp;quot;MediumVioletRed&amp;quot;, &amp;quot;MidnightBlue&amp;quot;, &amp;quot;MintCream&amp;quot;, &amp;quot;MistyRose&amp;quot;, &amp;quot;Moccasin&amp;quot;, &amp;quot;NavajoWhite&amp;quot;, &amp;quot;Navy &amp;quot;, &amp;quot;OldLace&amp;quot;, &amp;quot;Olive&amp;quot;, &amp;quot;OliveDrab&amp;quot;, &amp;quot;Orange&amp;quot;, &amp;quot;OrangeRed&amp;quot;, &amp;quot;Orchid&amp;quot;, &amp;quot;PaleGoldenrod&amp;quot;, &amp;quot;PaleGreen&amp;quot;, &amp;quot;PaleTurquoise&amp;quot;, &amp;quot;PaleVioletRed&amp;quot;, &amp;quot;PapayaWhip&amp;quot;, &amp;quot;PeachPuff&amp;quot;, &amp;quot;Peru&amp;quot;, &amp;quot;Pink&amp;quot;, &amp;quot;Plum&amp;quot;, &amp;quot;PowderBlue&amp;quot;, &amp;quot;Purple &amp;quot;, &amp;quot;Red&amp;quot;, &amp;quot;RosyBrown&amp;quot;, &amp;quot;RoyalBlue&amp;quot;, &amp;quot;SaddleBrown&amp;quot;, &amp;quot;Salmon&amp;quot;, &amp;quot;SandyBrown&amp;quot;, &amp;quot;SeaGreen&amp;quot;, &amp;quot;Seashell&amp;quot;, &amp;quot;Sienna&amp;quot;, &amp;quot;Silver&amp;quot;, &amp;quot;SkyBlue&amp;quot;, &amp;quot;SlateBlue&amp;quot;, &amp;quot;SlateGray&amp;quot;, &amp;quot;Snow&amp;quot;, &amp;quot;SpringGreen&amp;quot;, &amp;quot;SteelBlue &amp;quot;, &amp;quot;Tan&amp;quot;, &amp;quot;Teal&amp;quot;, &amp;quot;Thistle&amp;quot;, &amp;quot;Tomato&amp;quot;, &amp;quot;Turquoise&amp;quot;, &amp;quot;Violet&amp;quot;, &amp;quot;VioletRed&amp;quot;, &amp;quot;Wheat&amp;quot;, &amp;quot;White&amp;quot;, &amp;quot;WhiteSmoke&amp;quot;, &amp;quot;Yellow&amp;quot;, &amp;quot;YellowGreen&amp;quot;};&lt;br /&gt;
color_values = {0xF0F8FF, 0xFAEBD7, 0x00FFFF, 0x7FFFD4, 0xF0FFFF, 0xF5F5DC, 0xFFE4C4, 0x000000, 0xFFEBCD, 0x0000FF, 0x8A2BE2, 0xA52A2A, 0xDEB887, 0x5F9EA0, 0xE07020, 0x7FFF00, 0xD2691E, 0xFF7F50, 0x6495ED, 0xFFF8DC, 0xDC143C, 0x00008B, 0x008B8B, 0xB8860B, 0xA9A9A9, 0x006400, 0xBDB76B, 0x8B008B, 0x556B2F, 0xFF8C00, 0x9932CC, 0x8B0000, 0xE9967A, 0x8FBC8F, 0x483D8B, 0x2F4F4F, 0x00CED1, 0x9400D3, 0xFF1493, 0x00BFFF, 0x696969, 0x1E90FF, 0xD19275, 0xB22222, 0xFFFAF0, 0x228B22, 0xFF00FF, 0xDCDCDC, 0xF8F8FF, 0xFFD700, 0xDAA520, 0x808080, 0x008000, 0xADFF2F, 0xF0FFF0, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0xFFFFF0, 0xF0E68C, 0xE6E6FA, 0xFFF0F5, 0x7CFC00, 0xFFFACD, 0xADD8E6, 0xF08080, 0xE0FFFF, 0xFAFAD2, 0x90EE90, 0xD3D3D3, 0xFFB6C1, 0xFFA07A, 0x20B2AA, 0x87CEFA, 0x8470FF, 0x778899, 0xB0C4DE, 0xFFFFE0, 0x00FF00, 0x32CD32, 0xFAF0E6, 0x800000, 0x66CDAA, 0x0000CD, 0xBA55D3, 0x9370DB, 0x3CB371, 0x7B68EE, 0x00FA9A, 0x48D1CC, 0xC71585, 0x191970, 0xF5FFFA, 0xFFE4E1, 0xFFE4B5, 0xFFDEAD, 0x000080, 0xFDF5E6, 0x808000, 0x6B8E23, 0xFFA500, 0xFF4500, 0xDA70D6, 0xEEE8AA, 0x98FB98, 0xAFEEEE, 0xDB7093, 0xFFEFD5, 0xFFDAB9, 0xCD853F, 0xFFC0CB, 0xDDA0DD, 0xB0E0E6, 0x800080, 0xFF0000, 0xBC8F8F, 0x4169E1, 0x8B4513, 0xFA8072, 0xF4A460, 0x2E8B57, 0xFFF5EE, 0xA0522D, 0xC0C0C0, 0x87CEEB, 0x6A5ACD, 0x708090, 0xFFFAFA, 0x00FF7F, 0x4682B4, 0xD2B48C, 0x008080, 0xD8BFD8, 0xFF6347, 0x40E0D0, 0xEE82EE, 0xD02090, 0xF5DEB3, 0xFFFFFF, 0xF5F5F5, 0xFFFF00, 0x9ACD32};&lt;br /&gt;
&lt;br /&gt;
-- Decimal to Hex conversion&lt;br /&gt;
function DEC_HEX(IN)&lt;br /&gt;
    local B,K,OUT,I,D=16,&amp;quot;0123456789ABCDEF&amp;quot;,&amp;quot;&amp;quot;,0&lt;br /&gt;
    while IN&amp;gt;0 do&lt;br /&gt;
        I=I+1&lt;br /&gt;
        IN,D=math.floor(IN/B),math.mod(IN,B)+1&lt;br /&gt;
        OUT=string.sub(K,D,D)..OUT&lt;br /&gt;
    end&lt;br /&gt;
    return OUT&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Color Conversions&lt;br /&gt;
function rgb2hsl(src_r, src_g, src_b)&lt;br /&gt;
	local h, s, l, d;&lt;br /&gt;
	src_r = src_r / 255;&lt;br /&gt;
	src_g = src_g / 255;&lt;br /&gt;
	src_b = src_b / 255;&lt;br /&gt;
    local max_rgb = math.max(src_r, src_g, src_b); &lt;br /&gt;
	local min_rgb = math.min(src_r, src_g, src_b);&lt;br /&gt;
    l = (max_rgb + min_rgb) / 2;&lt;br /&gt;
&lt;br /&gt;
    if(max_rgb == min_rgb) then&lt;br /&gt;
        h = 0; --achromatic&lt;br /&gt;
		s = 0;&lt;br /&gt;
    else&lt;br /&gt;
        d = max_rgb - min_rgb;&lt;br /&gt;
		if l &amp;gt; 0.5 then&lt;br /&gt;
			s = d / (2 - max_rgb - min_rgb);&lt;br /&gt;
		else&lt;br /&gt;
			s = d / (max_rgb + min_rgb);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if src_g &amp;gt; src_b then&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_b - src_r) / d + 2;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if src_r &amp;gt; src_g then&lt;br /&gt;
				h = (src_g - src_b) / d + 6;&lt;br /&gt;
			else&lt;br /&gt;
				h = (src_r - src_g) / d + 4;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
        h = h / 6;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if h == nil then&lt;br /&gt;
		error &amp;quot;NO H&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if s == nil then&lt;br /&gt;
		error (&amp;quot;NO S   D:&amp;quot; .. d);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if l == nil then&lt;br /&gt;
		error &amp;quot;NO L&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    return h, s, l;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function rgb2lab(src_r, src_g, src_b)&lt;br /&gt;
	--R from 0 to 255&lt;br /&gt;
	--G from 0 to 255&lt;br /&gt;
	--B from 0 to 255&lt;br /&gt;
	local r = src_r/255;&lt;br /&gt;
	local g = src_g/255;&lt;br /&gt;
	local b = src_b/255;&lt;br /&gt;
 &lt;br /&gt;
	if (r &amp;gt; 0.04045) then&lt;br /&gt;
		r = math.pow((r + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		r = r / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if ( g &amp;gt; 0.04045) then&lt;br /&gt;
		g = math.pow((g + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		g = g / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	if (b &amp;gt; 0.04045) then&lt;br /&gt;
		b = math.pow((b + 0.055) / 1.055, 2.4);&lt;br /&gt;
	else&lt;br /&gt;
		b = b / 12.92;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	r = r * 100;&lt;br /&gt;
	g = g * 100;&lt;br /&gt;
	b = b * 100;&lt;br /&gt;
 &lt;br /&gt;
	local x = r * 0.4124 + g * 0.3576 + b * 0.1805;&lt;br /&gt;
	local y = r * 0.2126 + g * 0.7152 + b * 0.0722;&lt;br /&gt;
	local z = r * 0.0193 + g * 0.1192 + b * 0.9505;&lt;br /&gt;
	&lt;br /&gt;
	x = x / 95.047;&lt;br /&gt;
	y = y / 100.000;  &lt;br /&gt;
	z = z / 108.883;&lt;br /&gt;
 &lt;br /&gt;
	if ( x &amp;gt; 0.008856 ) then&lt;br /&gt;
		x = math.pow( x , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		x = ( 7.787 * x ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( y &amp;gt; 0.008856 ) then&lt;br /&gt;
		y = math.pow( y , 1/3 );&lt;br /&gt;
	else &lt;br /&gt;
		y = ( 7.787 * y ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	if ( z &amp;gt; 0.008856 ) then&lt;br /&gt;
		z = math.pow( z , 1/3 );&lt;br /&gt;
	else&lt;br /&gt;
		z = ( 7.787 * z ) + ( 16/116 );&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lab_l = ( 116 * y ) - 16;&lt;br /&gt;
	local lab_a = 500 * ( x - y );&lt;br /&gt;
	local lab_b = 200 * ( y - z );&lt;br /&gt;
 &lt;br /&gt;
	return lab_l, lab_a, lab_b;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Get nearest color name&lt;br /&gt;
function nearestColor(px)&lt;br /&gt;
	local rgb_r, rgb_g, rgb_b, tst_r, tst_g, tst_b, test_px;&lt;br /&gt;
	local lab_l, lab_a, lab_b, lab_tst_l, lab_tst_a, lab_tst_b;&lt;br /&gt;
	local hsl_h, hsl_s, hsl_l, hsl_tst_h, hsl_tst_s, hsl_tst_l;&lt;br /&gt;
	local offset, best_name, best_offset;&lt;br /&gt;
	best_offset = 100000;&lt;br /&gt;
	rgb_r = (math.floor(px/256/256/256) % 256);&lt;br /&gt;
	rgb_g = (math.floor(px/256/256) % 256);&lt;br /&gt;
	rgb_b = (math.floor(px/256) % 256);&lt;br /&gt;
	lab_l, lab_a, lab_b = rgb2lab(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	hsl_h, hsl_s, hsl_l = rgb2hsl(rgb_r, rgb_g, rgb_b);&lt;br /&gt;
	&lt;br /&gt;
	for i=1, #color_names do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		test_px = color_values[i];&lt;br /&gt;
		tst_r = (math.floor(test_px/256/256) % 256);&lt;br /&gt;
		tst_g = (math.floor(test_px/256) % 256);&lt;br /&gt;
		tst_b = (math.floor(test_px) % 256);&lt;br /&gt;
		lab_tst_l, lab_tst_a, lab_tst_b = rgb2lab(tst_r, tst_g, tst_b);&lt;br /&gt;
		hsl_tst_h, hsl_tst_s, hsl_tst_l = rgb2hsl(tst_r, tst_g, tst_b);&lt;br /&gt;
		&lt;br /&gt;
		---- Different methods to determine &amp;quot;distance&amp;quot; from the ideal colors. Change these to test different options.&lt;br /&gt;
		&lt;br /&gt;
		--offset = math.abs(rgb_r - tst_r) + math.abs(rgb_g - tst_g) + math.abs(rgb_b - tst_b);&lt;br /&gt;
		--offset = math.max(math.max((math.abs(rgb_r - tst_r)), math.abs(rgb_g - tst_g)), math.abs(rgb_b - tst_b));&lt;br /&gt;
		--offset = (rgb_r - tst_r)^2 + (rgb_g - tst_g)^2 + (rgb_b - tst_b)^2;&lt;br /&gt;
		--offset = (lab_l - lab_tst_l)^2 + (lab_a - lab_tst_a)^2 + (lab_b - lab_tst_b)^2;&lt;br /&gt;
		offset = math.max(math.max((math.abs(lab_l - lab_tst_l)), math.abs(lab_a - lab_tst_a)), math.abs(lab_b - lab_tst_b));&lt;br /&gt;
		--offset = (hsl_h - hsl_tst_h)^2 + (hsl_s - hsl_tst_s)^2 + (hsl_l - hsl_tst_l)^2;&lt;br /&gt;
		--offset = math.max(math.max((math.abs(hsl_h - hsl_tst_h)), math.abs(hsl_s - hsl_tst_s)), math.abs(hsl_l - hsl_tst_l));&lt;br /&gt;
		&lt;br /&gt;
		if (offset &amp;lt; best_offset) then&lt;br /&gt;
			best_name = color_names[i] .. &amp;quot;   Hex: &amp;quot; .. DEC_HEX(color_values[i]);&lt;br /&gt;
			best_offset = offset;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return best_name;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Check pixel against target&lt;br /&gt;
function checkColor(px)&lt;br /&gt;
	local color_name = nearestColor(px);&lt;br /&gt;
	if (color_name:upper() == stop_at_color:upper()) then&lt;br /&gt;
		return true;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- optional message&lt;br /&gt;
function askForPixel()&lt;br /&gt;
	local is_done = false;&lt;br /&gt;
	local have_coords = false;&lt;br /&gt;
	local color_found = false;&lt;br /&gt;
	local color_guess = &amp;quot;NONE&amp;quot;;&lt;br /&gt;
	local tst_r, tst_g, tst_b, rgb_r, rgb_g, rgb_b;&lt;br /&gt;
	-- Display message until shift is held&lt;br /&gt;
	while not go_now do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		y = 0;&lt;br /&gt;
		mouse_x, mouse_y = srMousePos();&lt;br /&gt;
		if not have_coords then&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Mouse over one of the Raeli Oven color pixels and press Shift.&amp;quot;);&lt;br /&gt;
			if lsShiftHeld() then&lt;br /&gt;
				saved_x = mouse_x;&lt;br /&gt;
				saved_y = mouse_y;&lt;br /&gt;
				have_coords = true;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
				&amp;quot;Coords chosen, press 'Reset' to change or 'Do It' to start.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 40;&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			px = srReadPixel(saved_x, saved_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xffffff,&lt;br /&gt;
				saved_x .. &amp;quot;, &amp;quot; .. saved_y);&lt;br /&gt;
		else&lt;br /&gt;
			px = srReadPixel(mouse_x, mouse_y);&lt;br /&gt;
			lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
				mouse_x .. &amp;quot;, &amp;quot; .. mouse_y);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		color_guess = nearestColor(px);&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;) Hex: &amp;quot; .. DEC_HEX(px));&lt;br /&gt;
			&lt;br /&gt;
		y = y + 15;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Best guess: &amp;quot; .. color_guess);&lt;br /&gt;
		y = y + 30;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 0.7, 0.7, px, &amp;quot;Dec: &amp;quot; .. math.floor((px/256) % 16777216) .. &amp;quot;   Hex: &amp;quot; .. DEC_HEX(math.floor((px/256) % 16777216)));&lt;br /&gt;
		&lt;br /&gt;
		-- Testing other methods of grabbing the pixel, making sure RGBA values match&lt;br /&gt;
		-- srReadScreen();&lt;br /&gt;
		-- px2 = srReadPixelFromBuffer(mouse_x, mouse_y);&lt;br /&gt;
		-- lsPrintWrapped(0, 80, 1, lsScreenX, 0.7, 0.7, 0xB0B0B0ff,&lt;br /&gt;
		-- 	mouse_x .. &amp;quot;, &amp;quot; .. mouse_y .. &amp;quot; = &amp;quot; .. (math.floor(px2/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px2/256) % 256) .. &amp;quot;,&amp;quot; .. (px2 % 256) );&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 90, 0, 100, px, &amp;quot;test1&amp;quot;);&lt;br /&gt;
		-- lsButtonText(lsScreenX - 110, lsScreenY - 60, 0, 100, px2, &amp;quot;test2&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		take_screenshots = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Take Screenshots&amp;quot;, take_screenshots);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 20;&lt;br /&gt;
		stop_at_CB = lsCheckBox(15, y, z, 0xffffffff, &amp;quot; Stop at Color&amp;quot;, stop_at_CB);&lt;br /&gt;
		&lt;br /&gt;
		if stop_at_CB then&lt;br /&gt;
			y = y + 25;&lt;br /&gt;
			is_done = false;&lt;br /&gt;
			color_found = false;&lt;br /&gt;
			-- Edit box and text display&lt;br /&gt;
			lsPrint(10, y, z, 0.7, 0.7, 0xFFFFFFff, &amp;quot;Desired Color:&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			y = y + 20;&lt;br /&gt;
			-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
			is_done, stop_at_color = lsEditBox(&amp;quot;Desired Color:&amp;quot;, 10, y, z, 250, 30, 0.7, 0.7, 0x000000ff, &amp;quot;White&amp;quot;);&lt;br /&gt;
			--dropdown_color_cur_value = lsDropdown(&amp;quot;ColorDropDown1&amp;quot;, 5, y, 0, 200, dropdown_color_cur_value, color_names);&lt;br /&gt;
			&lt;br /&gt;
			for i=0, #color_names do&lt;br /&gt;
				if stop_at_color and color_names[i] then&lt;br /&gt;
					if (stop_at_color:upper() == (color_names[i]):upper()) then&lt;br /&gt;
						color_found = true;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			y = y + 30;&lt;br /&gt;
			if not color_found then&lt;br /&gt;
				lsPrint(10, y, z, 0.7, 0.7, 0xFF0000ff, &amp;quot;No such color&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			&lt;br /&gt;
			y = y + 30;&lt;br /&gt;
			&lt;br /&gt;
		else&lt;br /&gt;
			is_done = true;&lt;br /&gt;
			color_found = true;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if have_coords then&lt;br /&gt;
			if color_found then&lt;br /&gt;
				if lsButtonText(10, lsScreenY - 30, 0, 80, 0xFFFFFFff, &amp;quot;Do It&amp;quot;) then&lt;br /&gt;
					go_now = true;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if lsButtonText(100, lsScreenY - 30, 0, 80, 0xFFA500ff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
				have_coords = false;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
	-- Wait for shift to be released&lt;br /&gt;
	while lsShiftHeld() do end;&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(askText);&lt;br /&gt;
	while lsShiftHeld() do&lt;br /&gt;
		-- Make user release shift key&lt;br /&gt;
		lsCheckBreak();&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	askForPixel();&lt;br /&gt;
	&lt;br /&gt;
	local t0 = lsGetTimer();&lt;br /&gt;
	local px = 0;&lt;br /&gt;
	local index=0;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		new_px = srReadPixel(mouse_x, mouse_y);&lt;br /&gt;
		local t = (lsGetTimer() - t0) / 1000 / 60;&lt;br /&gt;
		t = math.floor(t*10 + 0.5)/10;&lt;br /&gt;
		local t_string = t;&lt;br /&gt;
		if not (new_px == px) then&lt;br /&gt;
			index = index+1;&lt;br /&gt;
			if take_screenshots then&lt;br /&gt;
				srSaveLastReadScreen(&amp;quot;screen_&amp;quot; .. index .. &amp;quot;_&amp;quot; .. t_string .. &amp;quot;.png&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
			px = new_px;&lt;br /&gt;
			if stop_at_CB then&lt;br /&gt;
				if checkColor(px) then&lt;br /&gt;
					clickAllText(&amp;quot;Interrupt&amp;quot;);&lt;br /&gt;
					lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
					break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			lsPlaySound(&amp;quot;Clank.wav&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		lsPrintWrapped(0, 0, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Color: &amp;quot; .. DEC_HEX(new_px) .. &amp;quot;  screen: &amp;quot; .. index .. &amp;quot; timer: &amp;quot; .. t_string);&lt;br /&gt;
		lsPrintWrapped(0, 60, 1, lsScreenX, 0.7, 0.7, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot;(&amp;quot; .. (math.floor(px/256/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256/256) % 256) .. &amp;quot;,&amp;quot; .. (math.floor(px/256) % 256) .. &amp;quot;,&amp;quot; .. (px % 256) .. &amp;quot;)&amp;quot; );&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end	&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Festivals_Player_Progress&amp;diff=226427</id>
		<title>Festivals Player Progress</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Festivals_Player_Progress&amp;diff=226427"/>
		<updated>2013-01-12T14:31:00Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for players to state their current percentage progress in each of the 7 festivals. We also ask that you state your time zone and any notes regarding your log on ability to help arrange festivals on a useful day and time.&lt;br /&gt;
&lt;br /&gt;
Please keep your information up to date and remind folks to add their information. We will be checking this information often to help with festival scheduling.&lt;br /&gt;
=The Chart=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Avatar Name !! Isis !! Osiris !! Bastet !! Ra !! Maat !! Hathor !! Thoth !! [http://www.timeanddate.com/library/abbreviations/timezones/ Timezone (UTC)] !!class=&amp;quot;unsortable&amp;quot; | Notes (e.g. mule, can't do Tues)&lt;br /&gt;
&amp;lt;!-- COPY THE ROW BELOW AND PASTE INTO THE TABLE TO ADD YOUR NAME --&amp;gt;&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Name || 0 || 0 || 0 || 0 || 0 || 0 || 0 || UTC ||align=&amp;quot;left&amp;quot;| Notes&lt;br /&gt;
&amp;lt;!-- END OF COPY ROW --&amp;gt;&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Shiranai || 100 || 0 || 100 || 100 || 100 || 79 || 100 || GMT-8 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Myn || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+10 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Myna || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+10 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| JosS || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Waerloga || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Macrodamia || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Menmaatre || 100|| 100 || 100 || 100 || 78 || 100 || 75 || GMT-4 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Bryce || 0|| 0 || 0 || 0 || 0 || 0 || 0 || GMT-5 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| kuupid || 100 || 89 || 100 || 100 ||100 || 25 ||100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Farmer || 100|| 89|| 71 || 100 || 100 || 69 || 100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| crashley ||100 || 37 || 71 ||79|| 100 || 69 || 100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Bognor || 100 || 32 || 71 ||79|| 100|| 69 || 100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| SinDrome || 100|| 59 || 71 || 0 ||100 || 0 || 100||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Hipta || 100|| 0 || 71 || 0 || 100|| 0 || 100||  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Arahgon || 100 || 100|| 100 || 79 || 100||25||100 ||GMT+1  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Nitocris||100 || 100 || 100 ||79 || 100|| 94 || 100 || GMT-5 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Veri || 100 || 100 || 100 || 100 || 100 || 100 || 75 ||GMT-6 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| natta || 100 || 100 ||100 || 68 || 0 || 65 || 0 ||GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| pira || 100 || 100 || 100 || 68 || 0 || 65 || 0 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Spark || 63 || 100 || 100 || 68 || 0 || 65 || 0 ||  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Jyin || 100 || 100 || 100 || 68 || 0 || 65 || 0 ||  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Gyges|| 63 || 92 || 71 || 79 || 78 || 69 || 0 ||GMT-5  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| buttah|| 100 || 59 || 100 || 100 || 100 || 0 || 100 ||GMT-5  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Tammy ||100 || 100 || 100 || 100 || 100 || 94 ||100  || GMT-5 ||align=&amp;quot;left&amp;quot;| Notes&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Larynth || 0 || 0 || 71 || 0 || 0 || 65 || 0 || GMT-6 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Huntersmoon || 100 || 89 ||100|| 0 ||100 || 25 || 84 ||GMT-0600  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| McArine || 100 || 67 || 39 || 100 || 100 || 39 || 100 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Ardagan|| 100 || 99 || 39 || 79 || 100 || 39 || 100 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Desim || 100 || 69 || 0 || 0 || 78 || 14 || 84 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Sirena || 0 || 0 || 0 || 0 || 46 || 0 || 29 || GMT-8 ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
== People Passed ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Avatar Name &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Renard &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Bessodia &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| GHawkins&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Solaris&lt;br /&gt;
|-&lt;br /&gt;
| Ruby&lt;br /&gt;
|-&lt;br /&gt;
| Stevehotep&lt;br /&gt;
|- &lt;br /&gt;
| Mariamom&lt;br /&gt;
|-&lt;br /&gt;
| PetrusIV&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Cate &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Kalmkitty &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Windrider &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| TheMazeEcho&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Avanya&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Maata &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Alphabob &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| sparkle &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| JaylenaeYbarre &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Hounddog&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Thunderstorm &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226318</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=226318"/>
		<updated>2013-01-11T18:28:43Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fishing Macro for Testing}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Pin up your Lures menu 'Self Click, Skills, Fishing, Use Lure' (no other pinned up windows can exist)&lt;br /&gt;
-- Should have (Chat-Related): 'Chat and Inventory can be minimized' AND 'Minimized chat-channels are still visible'.&lt;br /&gt;
-- You must have Main Chat tab showing at all times and window is long/wide enough so no lines don't wrap.&lt;br /&gt;
&lt;br /&gt;
-- Yes, this macro reads your MAIN chat screen, so make sure you read the above statement for it to work correctly.&lt;br /&gt;
-- Each line of text must not scroll/wrap to the next line. If it does, then drag your chat window wider so it doesn't wrap.&lt;br /&gt;
-- You want to make your chat very wide. Note: It is possible to see a LONG message like &amp;quot;Though you lost your lure, you did catch a 15 deben Orange Spongefish&amp;quot;&lt;br /&gt;
-- Another long message is &amp;quot;You didn't catch anything. You also lost your lure. Try different lures and locations&amp;quot;&lt;br /&gt;
-- At 1280x1024 your chat screen should reach at least to the mid point of your screen to avoid having a chat line wrap to next line, for a long message, like above.&lt;br /&gt;
-- Higher resolutions may not have to reach quite to the mid point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- ********** This macro writes to a log file (Fishlog.txt) for most actions, so you can review later! ******&lt;br /&gt;
-- ********** This also macro writes to a log file (Fishstats.txt) showing stats of your last fishing session, so you can review later! ******&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--You can delete any of the log files if you wish. It will automatically create new ones if they dont exist.&lt;br /&gt;
--The fishlog.txt file gets appended everytime you fish, so the file can grow quite long over time.&lt;br /&gt;
--The fishstats.txt file gets overwritten everytime your gui program window updates, so it doesn't 'grow' over time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;Main chat tab is not showing&amp;quot; and other errors can usually be overcome by adjusting the main chat window size and restarting, assuming main chat is showing.&lt;br /&gt;
-- And also verify the lines aren't wrapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The very first thing this macro does is to Self Click, Special, What Time is it? option. This will then display the time in main chat window.&lt;br /&gt;
-- The macro then parses time displayed, in main chat tab, so it can use it while the macro runs (Log files and on screen display).&lt;br /&gt;
-- Thats what the mysterious Self Click is doing, its not a bug, it is suppose to do that and thats why, to fetch the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Note: These are currently refered to as Common Fish in the below 'SkipCommon' type of fishes (True or False), in the 'Custom Variables' section.&lt;br /&gt;
&lt;br /&gt;
	--Abdju&lt;br /&gt;
	--Chromis&lt;br /&gt;
	--Catfish&lt;br /&gt;
	--Carp&lt;br /&gt;
	--Perch&lt;br /&gt;
	--Phagrus&lt;br /&gt;
	--Tilapia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--CUSTOM VARIABLES -- EDIT HERE To Change Fishing Casts, Skips, Updates.&lt;br /&gt;
&lt;br /&gt;
TotalCasts=3; --Total Casts per lure, if a fish caught. If no fish then it skips.&lt;br /&gt;
SkipCommon = false; --Skips to next lure if fish caught is a common (Choose True or False).&lt;br /&gt;
LureChangesToUpdateTimer = 7; --Total lures used before time is updated. Zero updates every new lure.&lt;br /&gt;
IgnoreUnknown = false; --Continues the script if fish is not recognized&lt;br /&gt;
&lt;br /&gt;
--AlmostCaughtAttempts = 0; --Adds additional attempts to the current lure if Unusual, Strange fish are seen;&lt;br /&gt;
-- Note: AlmostCaughtAttempts above was already commented out upon arriving to Talescripts.&lt;br /&gt;
-- It is also commented out during the script, so uncommenting above will NOT activate the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Additional reporting in the log file&lt;br /&gt;
-- Choose True or False.&lt;br /&gt;
	-- Note 'LogStrangeUnusual' and 'LogOdd' (below) overrides LogFails setting. ie if LogStrange true, then it would still log even if LogFails = False&lt;br /&gt;
	--If LogFails = false and LogStrangeUnusual or LogOdd = true, then failed catches those would still be included in the log file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LogFails = true;  	-- Do you want to add Failed Catches to log file? 'Failed to catch anything' or 'No fish bit'. Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogStrangeUnusual = true; 	-- Do you want to add Strange and Unusual fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
LogOdd = true; 	-- Do you want to add Odd fish to the log file? Note the log will still add an entry if you lost lure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- END CUSTOM VARIABLES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Fishing_Func.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetupLureGroup()&lt;br /&gt;
&lt;br /&gt;
	TLures = {};&lt;br /&gt;
	FirstLure=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLure = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindPin = srFindImage(&amp;quot;UnPin.png&amp;quot;);&lt;br /&gt;
	if FindPin then&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	--Click the pinup to refresh the lures window&lt;br /&gt;
&lt;br /&gt;
	srClickMouseNoMove(FindPin[0]+5,FindPin[1]+30);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		DownPin = srFindImageInRange(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,500);&lt;br /&gt;
		if DownPin then&lt;br /&gt;
			--Just Incase&lt;br /&gt;
			UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
			if UpArrow then&lt;br /&gt;
				srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				srReadScreen();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		--	srClickMouseNoMove(DownPin[0]+5,DownPin[1]+5);&lt;br /&gt;
			LastLure=FindLureName(DownPin[0]-150,DownPin[1]-10,150,25);&lt;br /&gt;
			--error(LastLure);&lt;br /&gt;
			FirstLure = FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
		--	error(FirstLure);&lt;br /&gt;
		else&lt;br /&gt;
			--No Arrows on lure menu?&lt;br /&gt;
			FirstLure=FindLureName(FindPin[0]-150,FindPin[1]-10,150,25);&lt;br /&gt;
			LastLure=nil;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Didn\'t find Lures pinned window - Self Click-&amp;gt;Skills, Fishing -&amp;gt; Use Lure, PIN THIS WINDOW!&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if  LastLure ~= nil then&lt;br /&gt;
		--We have last lure, and arrows showing&lt;br /&gt;
		ChangeLureMenu = LastLure;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		FirstLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. FirstLure);&lt;br /&gt;
		LastLurLoc = srFindImage(&amp;quot;fishing/&amp;quot; .. LastLure);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #Lures,1 do&lt;br /&gt;
			test = srFindImageInRange((&amp;quot;fishing/&amp;quot; .. Lures[i]),FirstLurLoc[0]-5,FirstLurLoc[1]-5,175,500);&lt;br /&gt;
&lt;br /&gt;
			if test then&lt;br /&gt;
				--Add Lure&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
				if Lures[i] == LastLure then&lt;br /&gt;
					--End of Menu, Use Down Arrow&lt;br /&gt;
					arrow=srFindImageInRange(&amp;quot;Fishing/menu_downarrow.png&amp;quot;,test[0],test[1]-5,175,50);&lt;br /&gt;
					if arrow then&lt;br /&gt;
						DownArrowLocs = arrow;&lt;br /&gt;
						srClickMouseNoMove(arrow[0]+5,arrow[1]+5);&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
						srReadScreen();&lt;br /&gt;
						lsSleep(1000);&lt;br /&gt;
					else&lt;br /&gt;
						error(&amp;quot;no arrow found&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				LastLureMenu = Lures[i];&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		--Reset Lure Menu&lt;br /&gt;
		UpArrow = srFindImageInRange(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;,FindPin[0]-10,FindPin[1],50,50);&lt;br /&gt;
		if UpArrow then&lt;br /&gt;
			srClickMouseNoMove(UpArrow[0]+5,UpArrow[1]+5);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	else&lt;br /&gt;
		--No arrows, just get lures&lt;br /&gt;
		for i = 1, #Lures, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lures[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				table.insert(TLures,Lures[i]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return TLures;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function FindLureName(x,y,w,h)&lt;br /&gt;
&lt;br /&gt;
	for i = 1, #Lures, 1 do &lt;br /&gt;
		Lure = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Lures[i], x,y,w,h);&lt;br /&gt;
		if Lure then&lt;br /&gt;
			return Lures[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GetLure()&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	&lt;br /&gt;
	if CurrentLureIndex == LastLureIndex then&lt;br /&gt;
		-- Use Down Menu&lt;br /&gt;
		srClickMouseNoMove(DownArrowLocs[0]-5,DownArrowLocs[1]-5);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
	if not lure then&lt;br /&gt;
		--Failed to find lure&lt;br /&gt;
		error(&amp;quot;Can\'t find a lure!&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		slure = Lures[PlayersLures[CurrentLureIndex]];&lt;br /&gt;
		slure = string.sub(slure,string.find(slure,&amp;quot;_&amp;quot;)+1,string.len(slure) - 4);&lt;br /&gt;
		--statusScreen(&amp;quot;Using Lure &amp;quot; .. slure);&lt;br /&gt;
		return slure&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function UseLure()&lt;br /&gt;
	-- Uses lure according to CurrentLureIndex, which is used in PlayersLures which contains each lure the player has. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if #TLures == 0 then&lt;br /&gt;
	error 'Can\'t find any lures on the pinned window. Did you run out of lures?'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	lure = srFindImage(&amp;quot;Fishing/&amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
	if lure then&lt;br /&gt;
		srClickMouseNoMove(lure[0]+3,lure[1]+3);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		-- Find Lure Type&lt;br /&gt;
		for i = 1, #Lure_Types, 1 do&lt;br /&gt;
			test = srFindImage(&amp;quot;Fishing/&amp;quot; .. Lure_Types[i]);&lt;br /&gt;
			if test then&lt;br /&gt;
				--Click it!&lt;br /&gt;
				srClickMouseNoMove(test[0]+3,test[1]+3);&lt;br /&gt;
				gui_refresh();&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if PlayersLures[CurrentLureIndex] == ChangeLureMenu then&lt;br /&gt;
		down = srFindImage(&amp;quot;Fishing/Menu_DownArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(down[0]+5,down[1]+5);&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	elseif PlayersLures[CurrentLureIndex] == LastLureMenu  then&lt;br /&gt;
		up = srFindImage(&amp;quot;Fishing/Menu_UpArrow.png&amp;quot;);&lt;br /&gt;
		srClickMouseNoMove(up[0]+5,up[1]+5);&lt;br /&gt;
		CurrentLureIndex=1;&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ChatReadFish()&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
	&lt;br /&gt;
	-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
	if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Caught Something..  Find Fish Details&lt;br /&gt;
	Sfish = &amp;quot;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, #CL_Fish do&lt;br /&gt;
		ChatFish = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Fish[i],Coords[0] ,Coords[1],500,25);&lt;br /&gt;
		if ChatFish then&lt;br /&gt;
			Sfish = string.sub(CL_Fish[i],string.find(CL_Fish[i],&amp;quot;Fish_&amp;quot;) + 5,string.len(CL_Fish[i]) - 4);&lt;br /&gt;
			GrandTotalCaught = GrandTotalCaught + 1&lt;br /&gt;
			break;&lt;br /&gt;
		end					&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	if  string.len(Sfish) &amp;lt; 1 then&lt;br /&gt;
		-- This fish name and fishname.png file likely needs to be added to Fishing_Func.inc, under the CL_Fish array and the .png added to /Images/Fishing folder&lt;br /&gt;
		if IgnoreUnknown then&lt;br /&gt;
			Sfish = &amp;quot;Unknown&amp;quot;;&lt;br /&gt;
			SNum = &amp;quot;1&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Unknown Fish! PLEASE, Take screenshot (Alt+C) of main chat tab, share with Talescripts team!&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		--Find Size&lt;br /&gt;
		for i = #CL_Number,1,-1 do&lt;br /&gt;
			ChatSize =  srFindImageInRange(&amp;quot;fishing/&amp;quot; .. CL_Number[i],Coords[0],Coords[1],500,25);&lt;br /&gt;
			if ChatSize then&lt;br /&gt;
				SNum = string.sub(CL_Number[i],string.find(CL_Number[i],&amp;quot;_&amp;quot;) + 1, string.len(CL_Number[i]) - 4);&lt;br /&gt;
				break;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		GrandTotaldb = GrandTotaldb + SNum;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return(Sfish .. &amp;quot; (&amp;quot; .. SNum .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function findchat(line)&lt;br /&gt;
	--Reads a chat line and returns a basic string for better processing&lt;br /&gt;
	&lt;br /&gt;
	-- Odd fish means your fly fishing skill is not high enough. Raise it with enormous amounts of fishing.&lt;br /&gt;
	-- Strange fish means you need a better rod to catch the rish. You may succeed on future attempts.&lt;br /&gt;
	-- Unusual fish means your speed skill was not high enough to catch this type of fish. If it is almost enough, you may catch them on future casts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Possible fishing messages&lt;br /&gt;
	--	Caught A (SIZE) Deben (FISH)&lt;br /&gt;
	--	You almost caught a strange fish&lt;br /&gt;
	--		(You almost caught a strange fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an unusual fish&lt;br /&gt;
	--		(You almost caught an unusual fish. You also lost your lure.)&lt;br /&gt;
	--	You almost caught an odd fish&lt;br /&gt;
	--		(You almost caught an odd fish. You also lost your lure.)&lt;br /&gt;
	--	Although you lost your lure  (Caught a fish)&lt;br /&gt;
	--	Using a (LURE) (TYPE) lure.&lt;br /&gt;
	--	You are carrying more than you can manage.&lt;br /&gt;
	--	You are carrying too much bulk.&lt;br /&gt;
	--	You didn't catch anything.&lt;br /&gt;
	--		(You didn't catch anything. You also lost your lure.)&lt;br /&gt;
	--	No Fish Bit.&lt;br /&gt;
	--		(No Fish Bit. You also lost your lure.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	--Find the last line of chat&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if line and line &amp;gt; 0 then&lt;br /&gt;
		Coords = imgs[(#imgs) - line];&lt;br /&gt;
			if not Coords then&lt;br /&gt;
			error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Find What Happened&lt;br /&gt;
&lt;br /&gt;
	ChatType = &amp;quot;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #Chat_Types -1,2 do&lt;br /&gt;
		test = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. Chat_Types[i],Coords[0],Coords[1],500,30);		&lt;br /&gt;
		if test then&lt;br /&gt;
			--Found Chat&lt;br /&gt;
			ChatType = Chat_Types[i + 1];&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	--Break down!&lt;br /&gt;
	if ChatType then&lt;br /&gt;
		--if ChatType == &amp;quot;lure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofishlostlure&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;nofish&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
		--elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
		return ChatType;&lt;br /&gt;
	else&lt;br /&gt;
		error(ChatType);&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function GetTime()&lt;br /&gt;
	--Reads time stamp using special-&amp;gt;what time menu&lt;br /&gt;
	winsize = srGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	--Open Menu, Press the Esc key to open the Self Click menu&lt;br /&gt;
&lt;br /&gt;
	-- Move mouse to center of screen before Sending the Esc key, to get the Self Click menu. We dont want it self clicking near the edge of screen causing an error.&lt;br /&gt;
	srSetMousePos(winsize[0]/2,winsize[1]/2);&lt;br /&gt;
	lsSleep(100);  -- This delay is critical for any srSetMousePos. Without it, the mouse will not have time to actually move!&lt;br /&gt;
&lt;br /&gt;
	srKeyEvent(string.char(27));  -- Send Esc Key&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
	&lt;br /&gt;
	--Find Special Menu&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	menu = srFindImage(&amp;quot;Fishing/Menu_Special.png&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if menu then&lt;br /&gt;
		--Click it!&lt;br /&gt;
		srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
		&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
		-- Look for the What Time Is It? option in menu&lt;br /&gt;
		menu = srFindImage(&amp;quot;Fishing/Menu_WhatTime.png&amp;quot;);&lt;br /&gt;
		if menu then&lt;br /&gt;
			--Click it!&lt;br /&gt;
			srClickMouseNoMove(menu[0]+3,menu[1]+3);&lt;br /&gt;
			lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	imgs = findAllImages(&amp;quot;Fishing/chatlog_reddots.png&amp;quot;);&lt;br /&gt;
	Coords = imgs[#imgs];&lt;br /&gt;
&lt;br /&gt;
		-- Look for the ** red dots in main chat to see if they exist.	&lt;br /&gt;
		if #imgs == 0 then&lt;br /&gt;
		error 'Main chat tab is not showing or the chat window needs to be adjusted!'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	for i = #CL_Time, 1, -1 do&lt;br /&gt;
		Stime = srFindImageInRange(&amp;quot;Fishing/&amp;quot; .. CL_Time[i],Coords[0],Coords[1],400,25);&lt;br /&gt;
		if Stime then&lt;br /&gt;
			Hour = string.sub(CL_Time[i],string.find(CL_Time[i],&amp;quot;ime_&amp;quot;)+4,string.len(CL_Time[i])-4);&lt;br /&gt;
			&lt;br /&gt;
			AM = srFindImageInRange(&amp;quot;Fishing/Chatlog_Time_AM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
			if AM then&lt;br /&gt;
				CurrentTime=(Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
				return (Hour .. &amp;quot;AM&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				PM = srFindImageInRange(&amp;quot;Fishing/chatlog_time_PM.png&amp;quot;,Coords[0],Coords[1],400,25);&lt;br /&gt;
				if PM then&lt;br /&gt;
					CurrentTime=(Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
					return (Hour .. &amp;quot;PM&amp;quot;);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gui_refresh()&lt;br /&gt;
	lsDoFrame();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if GrandTotalCaught &amp;lt; 10 then&lt;br /&gt;
	last10 = GrandTotalCaught .. &amp;quot;/10&amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	last10 = 10;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Stats (On Screen Display)&lt;br /&gt;
	--CurrentLureIndex  out of  PlayersLures&lt;br /&gt;
	winsize = lsGetWindowSize();&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	lsPrintWrapped(10, 0, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lure Index: &amp;quot; .. CurrentLureIndex .. &amp;quot; out of &amp;quot; .. #PlayersLures .. &amp;quot;       &amp;quot; .. PlayersLures[CurrentLureIndex]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 20, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Time: &amp;quot; .. CurrentTime);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, 40, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Last [&amp;quot; .. last10 .. &amp;quot;] Fish Caught:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Reset this string before showing last 10 fish below. Else the entries will multiply with entries from previous loops/call to this function&lt;br /&gt;
	last10caught = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if #gui_log_fish &amp;gt; 10 then&lt;br /&gt;
		table.remove(gui_log_fish,1);&lt;br /&gt;
	end&lt;br /&gt;
		for i = 1, #gui_log_fish,1 do&lt;br /&gt;
			lsPrintWrapped(10, 50 + (12*i), 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, gui_log_fish[i]);&lt;br /&gt;
			last10caught = last10caught .. gui_log_fish[i] .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-133, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Odd Fish Seen: &amp;quot; .. GrandTotalOdd);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-121, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Unusual Fish Seen: &amp;quot; .. GrandTotalUnusual);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-109, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Strange Fish Seen: &amp;quot; .. GrandTotalStrange);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-97, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-85, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Clicked: &amp;quot; .. GrandTotalLuresUsed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-73, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Lures Lost: &amp;quot; .. GrandTotalLostLures);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-61, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;-----------------------------&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-49, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Total Casts: &amp;quot; .. GrandTotalCasts);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-37, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Failed Catches: &amp;quot; .. GrandTotalFailed);&lt;br /&gt;
	lsPrintWrapped(10, winsize[1]-25, 0, lsScreenX - 20, 0.5, 0.5, 0xFFFFFFff, &amp;quot;Fish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Write stats to log file. Everytime the GUI screen is updated, so is the log file.&lt;br /&gt;
&lt;br /&gt;
	WriteFishStats(&amp;quot;Last Session Hour: &amp;quot; .. CurrentTime .. &amp;quot;\n\nOdd Fish Seen: &amp;quot; .. GrandTotalOdd .. &amp;quot;\nUnusual Fish Seen: &amp;quot; .. GrandTotalUnusual .. &amp;quot;\nStrange Fish Seen: &amp;quot; .. GrandTotalStrange .. &amp;quot;\n---------------------\nLures Clicked: &amp;quot; .. GrandTotalLuresUsed .. &amp;quot;\nLures Lost: &amp;quot; .. GrandTotalLostLures .. &amp;quot; \n---------------------\nTotal Casts: &amp;quot; .. GrandTotalCasts .. &amp;quot;\nFailed Catches: &amp;quot; .. GrandTotalFailed .. &amp;quot;\nFish Caught: &amp;quot; .. GrandTotalCaught .. &amp;quot; (&amp;quot; .. GrandTotaldb .. &amp;quot;db)\n---------------------\n\nLast 10 Fish Caught:\n\n&amp;quot;.. last10caught);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	askForWindow(&amp;quot;MAIN chat tab MUST be showing and wide enough so that each lines doesn't wrap. Pin up Lures Menu (Self, Skills, Fishing, Use Lures). No other pinned menus can exist. More detailed instructions are included inside the script as comments at top. There are options you can set in the script such as how many casts per lure, what gets written to the log file and more! History will be recorded in FishLog.txt and stats in FishStats.txt. Most errors can be fixed by slightly adjusting/moving your chat screen! Press Shift to continue.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	--Gui_Main();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Variables Used By Program -- Don't Edit Unless you know what you're doing!&lt;br /&gt;
	CurrentLure = &amp;quot;&amp;quot;; --Don't Edit&lt;br /&gt;
	gui_log_fish = {}; --Don't Edit, holds log display&lt;br /&gt;
	log_fish = {};&lt;br /&gt;
	CurrentLureIndex=0; -- 1 = First Lure Player Owns in alphabetical order&lt;br /&gt;
	ChangeLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	LastLureMenu=&amp;quot;&amp;quot;;&lt;br /&gt;
	DownArrowLocs=nil;&lt;br /&gt;
	PlayersLures={}; --Don't Edit, Holds Current Player Lures&lt;br /&gt;
	CurrentTime=&amp;quot;&amp;quot;; --Don't Edit, Holds Time Check Value&lt;br /&gt;
	TotalLuresUsed = 0;&lt;br /&gt;
	castcount = 0;&lt;br /&gt;
	--strangecounter = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--These variables were later added for displaying additional info on the screen.&lt;br /&gt;
-- Used for the extra reporting/statistics, on screen.&lt;br /&gt;
-- Dont Edit Unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
	GrandTotalCaught = 0;&lt;br /&gt;
	GrandTotalCasts = 0;&lt;br /&gt;
	GrandTotaldb = 0;&lt;br /&gt;
	GrandTotalStrange = 0;&lt;br /&gt;
	GrandTotalOdd = 0;&lt;br /&gt;
	GrandTotalUnusual = 0;&lt;br /&gt;
	GrandTotalLuresUsed = 0;&lt;br /&gt;
	GrandTotalLostLures = 0;&lt;br /&gt;
	GrandTotalFailed = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	PlayersLures = SetupLureGroup();&lt;br /&gt;
	CurrentTime = GetTime();&lt;br /&gt;
	lsSleep(1500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--Write an entry into log file to show this is a new session&lt;br /&gt;
	WriteFishLog(&amp;quot;[New Session]\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while 1 do&lt;br /&gt;
		&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		--cast = srFindImage(&amp;quot;Fishing/Button_Fish.png&amp;quot;);&lt;br /&gt;
		cast = srFindImage(&amp;quot;fishicon.png&amp;quot;);&lt;br /&gt;
		if not cast then&lt;br /&gt;
			error(&amp;quot;cannot find fishing button&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if castcount == 0 then&lt;br /&gt;
			--Update counters&lt;br /&gt;
			castcount = 1;&lt;br /&gt;
			CurrentLureIndex = CurrentLureIndex +1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if CurrentLureIndex &amp;gt; #PlayersLures then&lt;br /&gt;
				--Refresh the Lure window, and reindex it, in case some were lost.&lt;br /&gt;
				PlayersLures = SetupLureGroup();&lt;br /&gt;
				CurrentLureIndex = 1;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			--Update the time if ready, always update before new lure to keep chat/log proper&lt;br /&gt;
			if TotalLuresUsed == LureChangesToUpdateTimer then&lt;br /&gt;
				--Update Time&lt;br /&gt;
&lt;br /&gt;
				CurrentTime = GetTime();&lt;br /&gt;
				TotalLuresUsed = 0;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			--Since no casts been made at all, use a lure&lt;br /&gt;
			UseLure();&lt;br /&gt;
			lsSleep(2000);&lt;br /&gt;
			TotalLuresUsed = TotalLuresUsed + 1;&lt;br /&gt;
			GrandTotalLuresUsed = GrandTotalLuresUsed + 1;&lt;br /&gt;
			&lt;br /&gt;
			--update log&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			&lt;br /&gt;
		elseif castcount  &amp;gt; TotalCasts then&lt;br /&gt;
		--	if strangecounter &amp;gt; 0 and strangecounter &amp;lt; AlmostCaughtAttempts then&lt;br /&gt;
				--we don't reset yet!&lt;br /&gt;
		--	else&lt;br /&gt;
				--Reset&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				strangecounter = 0;&lt;br /&gt;
		--	end&lt;br /&gt;
		else&lt;br /&gt;
			--Cast&lt;br /&gt;
			srClickMouseNoMove(cast[0]+3,cast[1]+3);&lt;br /&gt;
			lsSleep(1000);&lt;br /&gt;
			checkBreak();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			while findchat(castcount - 1) == &amp;quot;lure&amp;quot; do&lt;br /&gt;
				lsSleep(1000);&lt;br /&gt;
				checkBreak();&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			castcount = castcount + 1;&lt;br /&gt;
			GrandTotalCasts = GrandTotalCasts + 1;	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--Read Chat&lt;br /&gt;
			ChatType = findchat();&lt;br /&gt;
&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
&lt;br /&gt;
			CurrentLure = string.sub(PlayersLures[CurrentLureIndex],string.find(PlayersLures[CurrentLureIndex],&amp;quot;_&amp;quot;)+1,string.len(PlayersLures[CurrentLureIndex])-4);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			if ChatType == &amp;quot;nobitlostlure&amp;quot; then&lt;br /&gt;
				--No fish bit. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nobit&amp;quot; then&lt;br /&gt;
				--No fishbit&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;No fish bit.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatchlostlure&amp;quot; then&lt;br /&gt;
				--You didn't catch anything. You also lost your lure.&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;nocatch&amp;quot; then&lt;br /&gt;
				--You didn't catch anything.&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogFails == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You didn\'t catch anything.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;alreadyfishing&amp;quot; then&lt;br /&gt;
				--castcount = castcount-1;&lt;br /&gt;
				lsSleep(15000); -- Long pause to wait for fishing queue to stop. Somehow it pushed the Fish button twice and now you will cast 2 times in a row. &lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You are already fishing!&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;strange&amp;quot; then&lt;br /&gt;
				--Strange Fish&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
			&lt;br /&gt;
	&lt;br /&gt;
			elseif ChatType == &amp;quot;strangelostlure&amp;quot; then&lt;br /&gt;
				-- Strange Fish and lost lure&lt;br /&gt;
				GrandTotalStrange = GrandTotalStrange + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught a STRANGE fish, but your rod was just too clumbsy. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;unusual&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogStrangeUnusual == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Can't uncomment below elseif statement until we get a screenshot of a message of you were not quick enough. You also lost your lure.&lt;br /&gt;
-- This would need to be added to Fishing_Func.inc , in the Chat_Types {array} along with adding Chatlog_AlmostUnusualLostlure.png). Add above &amp;quot;unusual&amp;quot; line in the array				&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--elseif ChatType == &amp;quot;unusuallostlure&amp;quot; then&lt;br /&gt;
				-- Unusual Fish&lt;br /&gt;
				--GrandTotalUnusual = GrandTotalUnusual + 1;&lt;br /&gt;
				--GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				--GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--if LogStrangeUnusual == true then&lt;br /&gt;
					--WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an UNUSUAL fish, but you were not quick enough.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					--end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			--	if AlmostCaughtAttempts &amp;gt; 0 then&lt;br /&gt;
			--		strangecounter = strangecounter +1;&lt;br /&gt;
			--	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;odd&amp;quot; then&lt;br /&gt;
				-- Odd Fish&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					if LogOdd == true then&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;oddlostlure&amp;quot; then&lt;br /&gt;
				-- Odd Fish and lost lure&lt;br /&gt;
				GrandTotalOdd = GrandTotalOdd + 1;&lt;br /&gt;
				GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
				GrandTotalFailed = GrandTotalFailed + 1;&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;You almost caught an ODD fish, but were too late recognizing the bite. You also lost your lure.&amp;quot; .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;carry&amp;quot; then&lt;br /&gt;
				--chat lines are messed up now&lt;br /&gt;
				castcount=0;&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
			elseif ChatType == &amp;quot;caught&amp;quot; or ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
				Fish = ChatReadFish();&lt;br /&gt;
&lt;br /&gt;
				table.insert(gui_log_fish,Fish);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				if ChatType == &amp;quot;caughtlostlure&amp;quot; then&lt;br /&gt;
					GrandTotalLostLures = GrandTotalLostLures + 1;&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Though you lost your lure, you did catch a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
					-- This Needs Check for new lure. This will cause a error if not.&lt;br /&gt;
					--Reset, skip to next lure&lt;br /&gt;
					castcount=0;&lt;br /&gt;
				else&lt;br /&gt;
					WriteFishLog(&amp;quot;[&amp;quot; .. CurrentTime .. &amp;quot;]\t[&amp;quot; .. CurrentLure .. &amp;quot;]\t&amp;quot; .. &amp;quot;Caught a &amp;quot; .. Fish .. &amp;quot;\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				--gui_refresh();&lt;br /&gt;
				&lt;br /&gt;
				if SkipCommon == true then&lt;br /&gt;
					FishType = string.sub(Fish,string.find(Fish,&amp;quot;,&amp;quot;) + 1);&lt;br /&gt;
					if FishType == &amp;quot;Abdju&amp;quot; or FishType == &amp;quot;Chromis&amp;quot; or FishType == &amp;quot;Catfish&amp;quot; or FishType == &amp;quot;Carp&amp;quot; or FishType == &amp;quot;Perch&amp;quot; or FishType == &amp;quot;Phagrus&amp;quot; or FishType == &amp;quot;Tilapia&amp;quot; then&lt;br /&gt;
						--Skip it&lt;br /&gt;
						castcount=0;&lt;br /&gt;
&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			&lt;br /&gt;
			gui_refresh();&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		gui_refresh();&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	gui_refresh();&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Macros&amp;diff=225877</id>
		<title>Macros</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Macros&amp;diff=225877"/>
		<updated>2013-01-07T06:04:01Z</updated>

		<summary type="html">&lt;p&gt;Selune: /*  Selune's Fixed VT Macros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Macros==&lt;br /&gt;
&lt;br /&gt;
Well, I see some people are discussing/sharing macros, and I think that's a good thing. Nobody likes the tedium of clicking, and not everyone has the ability to write good macros/scripts to handle that while they are there.&lt;br /&gt;
&lt;br /&gt;
REMEMBER - it is '''ILLEGAL''' to go afk while macroing. If a eGenesis staff member catches you, you could be banned for breaking the terms of service.&lt;br /&gt;
&lt;br /&gt;
With that in mind, let's make this a normal page of the wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Corrupt Zip File Work Around===&lt;br /&gt;
&lt;br /&gt;
Sometimes when you download a zip file (via Internet Explorer) from this wiki the file will show as corrupt and you cannot open it.  There is a browser setting that prevents the download from happening properly.&lt;br /&gt;
&lt;br /&gt;
For Windows IE you need to alter the HTTP options:&lt;br /&gt;
&lt;br /&gt;
#Tools/Internet Options/Advanced Tab/HTTP 1.1 Settings&lt;br /&gt;
##'''untick''' Use HTTP 1.1&lt;br /&gt;
##'''untick''' Use HTTP 1.1 through proxy connections&lt;br /&gt;
#Apply the change and restart the browser (close it and reopen).&lt;br /&gt;
&lt;br /&gt;
Now try to do the download again and your zip file should be OK.&lt;br /&gt;
Reverse the above steps once you have the zip files downloaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;You know what, I've left this option unticked for quite sometime and have yet to see any negative side effects. I can still download files from various sites, no problems... Now I just leave it unticked all the time so it continues to download uncorrupted .zip files off wiki, via IE.&amp;lt;/i&amp;gt; ~Cegaiel&lt;br /&gt;
&lt;br /&gt;
:*Here is why you might want to re-enable this: ~Zhukuram&lt;br /&gt;
::HTTP 1.1 is a newer protocol. With this unticked the browser uses HTTP 1.0.  &lt;br /&gt;
::From Wikipedia http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&lt;br /&gt;
:::'''HTTP/1.0 uses a separate connection to the same server for every request-response transaction&amp;lt;br /&amp;gt;HTTP/1.1 can reuse a connection multiple times'''&amp;lt;br /&amp;gt; Hence HTTP/1.1 communications experience less latency as the establishment of TCP connections presents considerable overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TaleScripts for VeggieTales==&lt;br /&gt;
*&amp;lt;B&amp;gt;&amp;lt;font color=green&amp;gt;[[TaleScripts]] is now online and functional&amp;lt;/font&amp;gt; - Jan 29, 2012&amp;lt;/b&amp;gt;&lt;br /&gt;
**Keep your VeggieTales up to date from a central repository, via GIT or SVN (and NOW an Update button in VeggieTales v1.6.0+).&lt;br /&gt;
**More tweaks and 3rd party macros will still be added over time. Check updates often!&lt;br /&gt;
***The goal is to eventually get every useful 3rd party VT macros added (listed on this page and some that are not) to the repository, as well as other updates and tweaks. &lt;br /&gt;
***Once this happens, then you can just download everything with two clicks (and keep everything patched with new updates, also two clicks).&lt;br /&gt;
***Note there is a fully automated &amp;lt;b&amp;gt;crematory macro&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;charcoal macro&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;kettle macro&amp;lt;/b&amp;gt; included here, if you are hunting for one!&lt;br /&gt;
&lt;br /&gt;
We will not update or modify the &amp;lt;u&amp;gt;original&amp;lt;/u&amp;gt; zipped versions from their respective author that are displayed on this page. However, any fine tuning/tweaks we find that are needed or would be beneficial will be done in TaleScripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;NEWS:&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; Read about VeggieTales v1.6.5, It now includes an update button to sync/get updates from TaleScripts. You no longer need to use the Git or SVN program to get your updates. See news in TaleScripts for more info!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[TaleScripts |Read more...]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==VeggieTales Macro Program==&lt;br /&gt;
* LUA-based macro engine named &amp;lt;b&amp;gt;VeggieTales&amp;lt;/b&amp;gt;&lt;br /&gt;
* Special modes for:&lt;br /&gt;
** Thistle recipe generation&lt;br /&gt;
** Carrot harvesting&lt;br /&gt;
&lt;br /&gt;
* Macros for&lt;br /&gt;
** Flax&lt;br /&gt;
** Glass making&lt;br /&gt;
** Quarrying&lt;br /&gt;
** Generic repetitive clicking while monitoring your stats (digging, pumping, sand mining, weaving, carving, etc)&lt;br /&gt;
** Wood gathering from a copse of trees&lt;br /&gt;
** ...and more!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Created during Tale 4, but continuously updated and maintained by the community, during Tales 5 and above. Now maintained with [[TaleScripts|TaleScripts]] beginning Tale 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Jimbly's Macros | View Jimby's Macro page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tale 6 Macros==&lt;br /&gt;
&lt;br /&gt;
===[[User:Bardoth|Bardoth's VeggieTales Macros]]===&lt;br /&gt;
*[[File:Brick_rack.zip|Brick_rack.zip]]&lt;br /&gt;
*[[File:Kettle_full.zip]]&lt;br /&gt;
*[[File:Kiln.zip]]&lt;br /&gt;
*[[File:HackingRack.zip]]&lt;br /&gt;
*[[File:Wheat.zip]]&lt;br /&gt;
*[[File:Casting.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Gyges#Macros|Gyges' Macros]]===&lt;br /&gt;
*All use AutoHotkey&lt;br /&gt;
*Autoharvest - middle click to examine for chickens/queen ants, nick for resin, gather resin, gather wood.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Larame/VTMacros|Larame's VeggieTales Macros]]===&lt;br /&gt;
I will slowly be releasing some of my own macros for VeggieTales here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:TheMazeEcho|TheMazeEcho]]'s macros===&lt;br /&gt;
*[[File:barley.zip|Barley]] macro for ACTools, set up for a ful HD screen resolution (1920*1024). Plants 29 beds per round, pin the plant menu to the top right corner, make sure you carry at least 30 barley, and enough water and grain fertilizer.&lt;br /&gt;
&lt;br /&gt;
*[[File:rake.zip | Hackling Rake]] (for VeggieTales)&lt;br /&gt;
** Will also crack coconuts while working the rake if you have a kitchen window open with coconuts in your inventory!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Mindl/Macros|Mindl's Macros]]===&lt;br /&gt;
*Flax 3x5 Seed / Flax Harvest Macro - AutoHotKey - Based on Iggy's Flax Macro&lt;br /&gt;
*8x Woodplane Macro - Autohotkey - Planes and Repairs for you&lt;br /&gt;
*Up to 4x4 Onion Macro - Autohotkey - Becuase I couldn't get VeggieTales macro to work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Shayra|Shayra's]] Macros===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Sithid:Macros|Sithid]]'s Macros===&lt;br /&gt;
AutoIT macros I use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:KasumiGhia/Macros|KasumiGhia's Macros]]===&lt;br /&gt;
* updated veggietales macros are listed above in the Jimbly/VeggieTales section.&lt;br /&gt;
&lt;br /&gt;
* [[User:KasumiGhia/Macros/BarrelVise|Small Barrel Creation Macro]] by [[User:KasumiGhia|KasumiGhia]]&lt;br /&gt;
** Run as many barrel vises as you can pin without overlapping (If your computer is fast enough)&lt;br /&gt;
&lt;br /&gt;
*[[User:KasumiGhia/Macros/WaterMine|Water Mine Operation]] by [[User:KasumiGhia|KasumiGhia]]&lt;br /&gt;
&lt;br /&gt;
* [[User:KasumiGhia/lua|Edited macros]] for VeggieTales by [[User:KasumiGhia|KasumiGhia]]&lt;br /&gt;
** updated chem_helper Script for T5 essence values&lt;br /&gt;
** [[User:KasumiGhia/lua#Onions_macro|modified Onion]] Script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Cegaiel | Cegaiel's Macros]]===&lt;br /&gt;
&lt;br /&gt;
As of Feb 3, 2012 my macros have been added to my user page. Previously I was maintaining them on the T4 Wiki. Remove any bookmarks pointing to the T4 wiki.&lt;br /&gt;
&lt;br /&gt;
*Kettles (Run 1 to 21 kettles) - 1280x1024 (Autohotkey)          [see Zhukuram's note below on run-away macro]&lt;br /&gt;
*Mining (Autohotkey)&lt;br /&gt;
*Sand Mining (Autohotkey)&lt;br /&gt;
*Barrel Vise 1280x1024 (Autohotkey)&lt;br /&gt;
*Brick Racks (Unlimited) (Autohotkey)&lt;br /&gt;
*Carpentry Blade (7.1-7.2k) 1680x1050 (Autohotkey)  - Duplicate of Oni's Carp Blade Macro, but converted to Autohotkey with extra features - Thanks Oni! &lt;br /&gt;
*Flax Hammocks (Unlimited) (Autohotkey)&lt;br /&gt;
*Get Mouse Coordinates and Color (Autohotkey)&lt;br /&gt;
*Glaziers' Bench (Autohotkey)&lt;br /&gt;
*Grass (Autohotkey)&lt;br /&gt;
*Grow Barley 1280x1024 (Autohotkey)&lt;br /&gt;
*Grow Wheat (Unlimited) (Autohotkey)&lt;br /&gt;
*Hackling Rake (Autohotkey)&lt;br /&gt;
*Malting Trays (Unlimited) (Autohotkey)&lt;br /&gt;
*Plane boards (on Carpentry Shop) (Unlimited) (Autohotkey)&lt;br /&gt;
*Popup box closer (Autohotkey)&lt;br /&gt;
*Pottery Wheels (Unlimited) (Autohotkey)&lt;br /&gt;
*Skills Timer Clicker (Digging, Loom, Dirt, etc - Anything that causes a skill to turn red (Autohotkey)&lt;br /&gt;
*Papy Picker (Autohotkey)&lt;br /&gt;
*Real Seconds Stopwatch (Autohotkey)&lt;br /&gt;
*Teppy and Real Seconds Timer (Great for Glazier Bench) (Autohotkey)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Leghk | Leghk's]] Macro Mods===&lt;br /&gt;
Update to Cegaiel's carpentry shop blade macro to allow any orientation of the anvil. Get the zip from [[User:Leghk|my user page]] with notes on usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Skyfeather | Skyfeather's]] VeggieTales Macros===&lt;br /&gt;
&lt;br /&gt;
* Nut's Essence Macro - Ensure you start a batch of nut's essence and pin your toxin kitchen macros so that you can see all options without scrolling.&lt;br /&gt;
&lt;br /&gt;
* Essence Macro Update - Performance improvements&lt;br /&gt;
&lt;br /&gt;
* Glass Macro Update - More time efficient and doesn't need to stop making glass items to spike the temperature&lt;br /&gt;
&lt;br /&gt;
* Board Macro Update - Reloads carpentry shops with carpentry blades, may not work if you don't have a dozen or so spare&lt;br /&gt;
&lt;br /&gt;
* Wood Treatment Macro - Must edit the lua file with the specific recipe you're attempting, recipes included should be close, but likely won't be exact&lt;br /&gt;
&lt;br /&gt;
* Metal Treatment Macro - Same as above for wood treatment, but you have to add a new image file for whatever metal you're using.  Sun Steel is included as FromSunSteel.png, currently set to Titanium&lt;br /&gt;
&lt;br /&gt;
* Thermometer Macro - Ensure your heater control is set to standard, hover the mouse over the glory hole when you press shift.  May still bungle 20% or so of therms.&lt;br /&gt;
&lt;br /&gt;
* Reactory Macro - Poorly documented, only works with upgraded reactories, automatically loads reactories when the 4x batch menu is pinned, and a reactory menu is pinned after the metal has been crystallized at some percentage.&lt;br /&gt;
&lt;br /&gt;
* Forge macro - Really poorly documented, just clicks all of an image on the screen&lt;br /&gt;
&lt;br /&gt;
* Weave Linen macro - Pin the hand loom, will process as much thread as you're holding, will not stop when you run out of thread&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[media:Sky's_VT_Macros.zip | Sky's VT Macros]]&lt;br /&gt;
&lt;br /&gt;
[[media:Glass.zip | Updated VeggieTales glass macro]]&lt;br /&gt;
&lt;br /&gt;
===[[User:Pheros | Pheros]] Block Macro===&lt;br /&gt;
* For Digging up Limestone Blocks for Pyramids and put on rollers&lt;br /&gt;
&lt;br /&gt;
===[[User:Selune | Selune]]'s Fixed VT Macros===&lt;br /&gt;
* Various improvements and fixes to the existing VT Macros. Now integrated into TaleScripts.&lt;br /&gt;
&lt;br /&gt;
==Tale 5 Macros== &lt;br /&gt;
&lt;br /&gt;
*Most Macros will still work in Tale 6.&lt;br /&gt;
*Note any links below in red, are because User pages were not copied from Tale 5 to Tale 6.&lt;br /&gt;
**You would need to visit the [http://www.atitd.org/wiki/tale5/Macros Tale 5 Macro page] to see the original links (that are now red).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Anka/Macros|Anka's Macros]]===&lt;br /&gt;
I'm back and will be updating all of my old macros&lt;br /&gt;
*Barley&lt;br /&gt;
*Charcoal Hearth&lt;br /&gt;
*Charcoal Oven&lt;br /&gt;
*Firepit - autohotkey&lt;br /&gt;
*Endless Flax&lt;br /&gt;
*MultiTool&lt;br /&gt;
*Multiple Resolutions - some are 1920x1080 only for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Iggy's Macros===&lt;br /&gt;
*[[Macros/Iggys|Iggy's AutoHotKey Macros]]&lt;br /&gt;
**[[Macros/Iggys/Flax|Flax Macro]] &lt;br /&gt;
**[[Macros/Iggys/Misc/Clicker|Clicking Macro]]&lt;br /&gt;
**[[Macros/Iggys/Gather|Clay, Grass &amp;amp; Slate Macro]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rogarian's Macros (Windows Executables)===&lt;br /&gt;
* [http://nemesis2.qx.net/pages/ATITD R-Cubed (Windows Only)]&lt;br /&gt;
** R-Cubed is simple program that will allow one to easily pick up grass, slate and clay. It will also do simple skill based tasks such as digging or gathering limestone. &lt;br /&gt;
** &amp;quot;It's stupdenous!&amp;quot; ~Traak&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Oni/Macros Oni's Macros] (ACTool)===&lt;br /&gt;
Macros with mentioned resolutions work only in that resolution.&lt;br /&gt;
*'''[[http://www.atitd.org/wiki/tale4/User:Oni/macros ONI's Macro Guide]]''' Macroing for Dummies (like me).&lt;br /&gt;
:*Learn to make a simple macro using ACTool.&lt;br /&gt;
*''' [[User:Oni/GrassAuto | Simple Grass/Clay auto move gatherer]] ''' v1.0&lt;br /&gt;
:* General purpose grass/clay collecting macro. 1280x1024 resolution. 2nd F8 zoomed all the way in.&lt;br /&gt;
*''' [[User:Oni/Macros/CarpBladeWide | Carpentry Blade Macro &amp;lt;b&amp;gt;1680x1050&amp;lt;/b&amp;gt;]]'''&lt;br /&gt;
*''' [[User:Oni/Macros/Limstone1024 | Simple Limestone Macro&amp;lt;b&amp;gt;1024x768&amp;lt;/b&amp;gt;]]'''.&lt;br /&gt;
*''' [[User:Oni/Macros/CC1680 | Charcoal Hearth Macro&amp;lt;b&amp;gt;1680x1050&amp;lt;/b&amp;gt;]]'''&lt;br /&gt;
*''' [[User:Oni/Macros/CC1024|Charcoal Hearth Macro 1024x768]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Blethezar/Macros Blethezar's macro]===&lt;br /&gt;
*[[User:Blethezar/Macros|CC hearth macro]]&lt;br /&gt;
**this is Anka's CC hearth Macro from T3&lt;br /&gt;
**         I've re-adjusted this macro to run in 1680x1050 resolution ,&lt;br /&gt;
**         only tried it with 4 hearths so far , but works fine.&lt;br /&gt;
**         Not lost a batch yet ( Galagah)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Thanatic/Macros Thanatic's macros]===&lt;br /&gt;
*[[User:Thanatic/Macros/CC|nka's CC macro, altered to work with ovens too]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Shayra Shayra's Macros]===&lt;br /&gt;
*[[User:Shayra|Flax]] --- Dharma's Continuous Flaxer from T3 updated for T5&lt;br /&gt;
**Clay Gatherer (nice, try this one)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Macros/tehm_Grass | Tehm's Grass]] (ACTool)===&lt;br /&gt;
*Collects Grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Makazi/Macro Makazi's Macros] (VeggieTales)===&lt;br /&gt;
* [[User:Makazi/Macro#Flax Assist|Flax Assist]]&lt;br /&gt;
** Click saver, helps when running many flax beds at once.&lt;br /&gt;
* [[User:Makazi/Macro#CC Assist|CC Assist]]&lt;br /&gt;
** CC Heart/Oven interface, run multiple CC Hearts/Ovens from one interface.&lt;br /&gt;
* [[User:Makazi/Macro#Pixel_Click|Pixel Click]]&lt;br /&gt;
** Select pixel area (16x8) and macro will click that image everytime it sees it. (Grass icon, clay icon, etc.)&lt;br /&gt;
* [[User:Makazi/Macro#Clay_Gatherer|Clay Gatherer]]&lt;br /&gt;
** Fully automated clay gathering macro.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Darkfyre/Macros Darkfyre's Macros] VeggieTales===&lt;br /&gt;
http://www.atitd.org/wiki/tale5/User:Darkfyre/Macros&lt;br /&gt;
#Forge&lt;br /&gt;
#Kettle&lt;br /&gt;
#Casting Box (In progress)&lt;br /&gt;
#Kiln (In progress)&lt;br /&gt;
#Pottery Wheel (In progress)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.atitd.org/wiki/tale6/images/f/f6/VeggieTalesForge.zip Forge Helper]&lt;br /&gt;
** &amp;lt;B&amp;gt;1/28/2012:&amp;lt;/b&amp;gt; &amp;lt;font color=green&amp;gt;&amp;lt;b&amp;gt;Fixed:&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; Sheeting and Wire would give image not found, nill value error. Uploaded the fixed version to T6 wiki and TaleScripts. &amp;lt;font color=green&amp;gt;~Cegaiel&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Tutmault/Macros/Fishing | Tutmault Macros]] (VeggieTales)===&lt;br /&gt;
[[Tutmault/Macros/Fishing | Fishing Macro]]&lt;br /&gt;
#VeggieTale Fishing Script (Ghostmouse,Screenreading) --&lt;br /&gt;
#Cycles Lures, Reads Fish Name/Size, Writes to Log File --&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Daniels#Macros | Daniels' Macros]]===&lt;br /&gt;
Click the link to find my altered/original macros for: Charcoal Hearth, Barrel Vise, Crematory, and an updated Shu's Clicker Macro.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Information on Distances==&lt;br /&gt;
&lt;br /&gt;
'''Additional Information lifted from Tale 3 Wiki'''&lt;br /&gt;
&lt;br /&gt;
This is a distance chart for mouse locations for items. All locations are in cartographer mode, zoomed in, on Windows. Your mileage may vary depending on OS. Please contribute!&lt;br /&gt;
&lt;br /&gt;
* Brick Rack: Horizontal 32px, Vertical 32px&lt;br /&gt;
* One line of text in a box: 16px&lt;br /&gt;
* Large Buttons&lt;br /&gt;
      o The Level button is 128px&lt;br /&gt;
      o Other buttons are 64px ea &lt;br /&gt;
* Small Buttons&lt;br /&gt;
      o The Level button is 64px&lt;br /&gt;
      o Other buttons are 32px ea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Macro Programs==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;background-color:#FFF8C6&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Program Name   !! Web Address  !! Operating System(s) Supported !! Cost&lt;br /&gt;
|- &lt;br /&gt;
|  Macro Express&lt;br /&gt;
|  http://www.macros.com&lt;br /&gt;
|  Windows XP, 2000, ME, 9x, NT 4; Pentium or higher CPU; 32 MB RAM; 20 MB hard disk space&lt;br /&gt;
|  $39.95 / 30 day trial&lt;br /&gt;
|-&lt;br /&gt;
|  ACTool (Asheron's Call Tool)&lt;br /&gt;
|  http://www.actool.net&lt;br /&gt;
|  Windows&lt;br /&gt;
|  Free and open source&lt;br /&gt;
|-&lt;br /&gt;
|  AutoHotkey&lt;br /&gt;
|  http://www.autohotkey.com/&lt;br /&gt;
|  Windows&lt;br /&gt;
|  Free and open source&lt;br /&gt;
|-&lt;br /&gt;
|  AutoIt 3.0&lt;br /&gt;
|  http://www.hiddensoft.com/autoit3/&lt;br /&gt;
|  Windows - no libs added&lt;br /&gt;
|  Free and open source&lt;br /&gt;
|-&lt;br /&gt;
|  LTool-0.3 (Linux)&lt;br /&gt;
|  http://ltool.sourceforge.net&lt;br /&gt;
|  Linux&lt;br /&gt;
|  Free and open source (Python script)&lt;br /&gt;
|-&lt;br /&gt;
|  xautomation&lt;br /&gt;
|  http://hoopajoo.net/projects/xautomation.html &lt;br /&gt;
|  Linux (You Compile, gcc c++)&lt;br /&gt;
|  Free, Open Source, GPL&lt;br /&gt;
|-&lt;br /&gt;
|  xnee&lt;br /&gt;
|  http://www.sandklef.com/xnee/&lt;br /&gt;
|  Linux, Mac&lt;br /&gt;
|  Free, Open Source, GPL&lt;br /&gt;
|-&lt;br /&gt;
|  SCAR Divi &lt;br /&gt;
|  http://freddy1990.com/index.php?page=product&amp;amp;name=scar&lt;br /&gt;
|  Windows&lt;br /&gt;
|  Free&lt;br /&gt;
|-&lt;br /&gt;
| Java&lt;br /&gt;
| http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Robot.html&lt;br /&gt;
| Windows, Linux, Mac&lt;br /&gt;
| Free&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AC Tool===&lt;br /&gt;
There are a couple of issues with AC Tool that, once you fix, make it very easy and good to use.&lt;br /&gt;
&lt;br /&gt;
* Windows XP, start the program in Administrator Mode.  &lt;br /&gt;
* If you get the error &amp;quot;Could not find Decal's MEMLOCKS.XML&amp;quot;, just click Macro &amp;gt; Asheron's Call 1 Settings &amp;gt; Skip AC Mouse Memory Writes&lt;br /&gt;
* Setting &amp;lt;f2&amp;gt; and &amp;lt;f3&amp;gt; as start and stop hot keys will help fix most of the issues of &amp;quot;run away&amp;quot; macros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Misc===&lt;br /&gt;
&lt;br /&gt;
* {{5}} [[http://www.fileden.com/files/2010/9/10/2965860/A%20Click%20In%20Time.zip A Click in Time]]&lt;br /&gt;
** Written by GarethDahm in Tale4 for Windows.&lt;br /&gt;
** Free Application!&lt;br /&gt;
** Position a small arrow anywhere on your screen.&lt;br /&gt;
** Set the timer.&lt;br /&gt;
** Let it ease your RSI factor!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://www.atitd.org/wiki/tale4/images/8/8f/Ghostmouse.zip Ghostmouse] (Windows Executable) - Simple old freeware program that records your mouse movements/clicks.  Can adjust the speed with a click in Options, if necessary. Records in real time, no scripts to edit, easy for anyone to use. Program no longer made or supported, found in old archived backup CD. ([http://www.atitd.org/wiki/tale4/images/e/e0/Ghostmouse.jpg Screenshot])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Personally I like autohotkey because it's freeware and is still being updated - Blogot&lt;br /&gt;
&lt;br /&gt;
I second the Autohotkey recommendation, it has some extremely powerful features but is still fast and lightweight, and new features are being added all the time. - Dragyn&lt;br /&gt;
&lt;br /&gt;
Personally I like AutoIt 3.0 it is freeware updated alot and it is very powerful allows macroing of almost anything windows - Ledeanna&lt;br /&gt;
&lt;br /&gt;
I second the AutoIt recommendation, it is very powerful as well, easy to code and allows compiling the scripts for use by people who want to macro but feel not competent enough to write their own or who dont want to install the scripting software. ~Anguz &lt;br /&gt;
- Note - AutoHotKey also allows you to compile an exe for machines with out AHK installed. ~Jhnny&lt;br /&gt;
&lt;br /&gt;
Added SCAR Divi, its similar to ACtool, but in my opinion much better. It has very nice support for Bitmap searching, and even Bitmask searching. The bitmaps can be converted to strings, and loaded directly in from the script (Rather then saved as images). Lots of other features, but people will have to find them. SCAR also supports bitmap masks, and Deformable template models, which allows the macro to find and identify multiple images, or peices of text, even when the colours, position, or even size has changed. Its possible to make fairly advanced macros that will work regardless of window positions ingame, or resolution.--Kinslayer 08:32, 29 August 2009 (EST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Running without Windows?===&lt;br /&gt;
A lot of the macro effort has gone towards programs for windows. The windows version of atitd can be run using www.winehq.org (run Windows applications on Linux, BSD, Solaris and Mac OS X).&lt;br /&gt;
&lt;br /&gt;
VeggieTales and autohotkey work to some extent using this emulator along with the windows emulation of atitd.&lt;br /&gt;
&lt;br /&gt;
Autohotkey 'keys' need to be changed to ones that work (Scrolllock, Numpad up/down/left/pageup/down buttons seem to work on ubuntu10). Recording and playback work only on windows emulated programs, but that's enough to save you from windows.&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Festivals_Player_Progress&amp;diff=225876</id>
		<title>Festivals Player Progress</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Festivals_Player_Progress&amp;diff=225876"/>
		<updated>2013-01-07T06:00:13Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for players to state their current percentage progress in each of the 7 festivals. We also ask that you state your time zone and any notes regarding your log on ability to help arrange festivals on a useful day and time.&lt;br /&gt;
&lt;br /&gt;
Please keep your information up to date and remind folks to add their information. We will be checking this information often to help with festival scheduling.&lt;br /&gt;
=The Chart=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Avatar Name !! Isis !! Osiris !! Bastet !! Ra !! Maat !! Hathor !! Thoth !! [http://www.timeanddate.com/library/abbreviations/timezones/ Timezone (UTC)] !!class=&amp;quot;unsortable&amp;quot; | Notes (e.g. mule, can't do Tues)&lt;br /&gt;
&amp;lt;!-- COPY THE ROW BELOW AND PASTE INTO THE TABLE TO ADD YOUR NAME --&amp;gt;&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Name || 0 || 0 || 0 || 0 || 0 || 0 || 0 || UTC ||align=&amp;quot;left&amp;quot;| Notes&lt;br /&gt;
&amp;lt;!-- END OF COPY ROW --&amp;gt;&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Shiranai || 100 || 0 || 100 || 100 || 100 || 65 || 100 || GMT-8 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Thunderstorm || 100 || 94 || 100 || 100 || 100 || 100 || 100 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Myn || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+10 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Myna || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+10 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| JosS || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Waerloga || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Macrodamia || 100 || 100 || 100 || 100 || 0 || 100 || 0 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Menmaatre || 100|| 100 || 100 || 100 || 78 || 100 || 75 || GMT-4 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Bryce || 0|| 0 || 0 || 0 || 0 || 0 || 0 || GMT-5 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| kuupid || 100 || 89 || 100 || 100 ||100 || 25 ||100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Farmer || 100|| 89|| 71 || 100 || 100 || 69 || 100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| crashley ||100 || 37 || 71 ||79|| 100 || 69 || 100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Bognor || 100 || 32 || 71 ||79|| 100|| 69 || 100 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| SinDrome || 100|| 59 || 71 || 0 ||100 || 0 || 100||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Hipta || 100|| 0 || 71 || 0 || 100|| 0 || 100||  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Arahgon || 100 || 100|| 100 || 79 || 100||25||100 ||GMT+1  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Nitocris||100 || 100 || 100 ||79 || 100|| 94 || 100 || GMT-5 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Veri || 100 || 100 || 100 || 100 || 100 || 100 || 75 ||GMT-6 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| natta || 100 || 100 ||100 || 68 || 0 || 65 || 0 ||GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| pira || 100 || 100 || 100 || 68 || 0 || 65 || 0 ||  ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Spark || 63 || 100 || 100 || 68 || 0 || 65 || 0 ||  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Jyin || 100 || 100 || 100 || 68 || 0 || 65 || 0 ||  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Gyges|| 63 || 92 || 71 || 79 || 78 || 69 || 0 ||GMT-5  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| buttah|| 100 || 59 || 100 || 100 || 100 || 0 || 100 ||GMT-5  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Tammy ||100 || 100 || 100 || 100 || 100 || 94 ||100  || GMT-5 ||align=&amp;quot;left&amp;quot;| Notes&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Larynth || 0 || 0 || 71 || 0 || 0 || 65 || 0 || GMT-6 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Huntersmoon || 100 || 89 ||100|| 0 ||100 || 25 || 84 ||GMT-0600  ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| McArine || 100 || 57 || 39 || 100 || 100 || 25 || 100 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Ardagan|| 100 || 89 || 39 || 79 || 100 || 39 || 100 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Desim || 100 || 59 || 0 || 0 || 78 || 14 || 84 || GMT+1 ||align=&amp;quot;left&amp;quot;|&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Sirena || 0 || 0 || 0 || 0 || 46 || 0 || 29 || GMT-8 ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Selune|| 0 || 27 || 0 || 0 || 0 || 0 || 29 || GMT-7 ||align=&amp;quot;left&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
== People Passed ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Avatar Name &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Renard &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Bessodia &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| GHawkins&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Solaris&lt;br /&gt;
|-&lt;br /&gt;
| Ruby&lt;br /&gt;
|-&lt;br /&gt;
| Stevehotep&lt;br /&gt;
|- &lt;br /&gt;
| Mariamom&lt;br /&gt;
|-&lt;br /&gt;
| PetrusIV&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Cate &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Kalmkitty &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Windrider &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| TheMazeEcho&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Avanya&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Maata &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Alphabob &lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| sparkle &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| JaylenaeYbarre &lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot;| Hounddog&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225874</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225874"/>
		<updated>2013-01-07T05:51:33Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's Macros have been updated to the TaleScripts repository. Please leave any ideas for improvements or new macros here.&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Macros&amp;diff=225859</id>
		<title>Macros</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Macros&amp;diff=225859"/>
		<updated>2013-01-07T03:38:09Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Tale 6 Macros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Macros==&lt;br /&gt;
&lt;br /&gt;
Well, I see some people are discussing/sharing macros, and I think that's a good thing. Nobody likes the tedium of clicking, and not everyone has the ability to write good macros/scripts to handle that while they are there.&lt;br /&gt;
&lt;br /&gt;
REMEMBER - it is '''ILLEGAL''' to go afk while macroing. If a eGenesis staff member catches you, you could be banned for breaking the terms of service.&lt;br /&gt;
&lt;br /&gt;
With that in mind, let's make this a normal page of the wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Corrupt Zip File Work Around===&lt;br /&gt;
&lt;br /&gt;
Sometimes when you download a zip file (via Internet Explorer) from this wiki the file will show as corrupt and you cannot open it.  There is a browser setting that prevents the download from happening properly.&lt;br /&gt;
&lt;br /&gt;
For Windows IE you need to alter the HTTP options:&lt;br /&gt;
&lt;br /&gt;
#Tools/Internet Options/Advanced Tab/HTTP 1.1 Settings&lt;br /&gt;
##'''untick''' Use HTTP 1.1&lt;br /&gt;
##'''untick''' Use HTTP 1.1 through proxy connections&lt;br /&gt;
#Apply the change and restart the browser (close it and reopen).&lt;br /&gt;
&lt;br /&gt;
Now try to do the download again and your zip file should be OK.&lt;br /&gt;
Reverse the above steps once you have the zip files downloaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;i&amp;gt;You know what, I've left this option unticked for quite sometime and have yet to see any negative side effects. I can still download files from various sites, no problems... Now I just leave it unticked all the time so it continues to download uncorrupted .zip files off wiki, via IE.&amp;lt;/i&amp;gt; ~Cegaiel&lt;br /&gt;
&lt;br /&gt;
:*Here is why you might want to re-enable this: ~Zhukuram&lt;br /&gt;
::HTTP 1.1 is a newer protocol. With this unticked the browser uses HTTP 1.0.  &lt;br /&gt;
::From Wikipedia http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol&lt;br /&gt;
:::'''HTTP/1.0 uses a separate connection to the same server for every request-response transaction&amp;lt;br /&amp;gt;HTTP/1.1 can reuse a connection multiple times'''&amp;lt;br /&amp;gt; Hence HTTP/1.1 communications experience less latency as the establishment of TCP connections presents considerable overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TaleScripts for VeggieTales==&lt;br /&gt;
*&amp;lt;B&amp;gt;&amp;lt;font color=green&amp;gt;[[TaleScripts]] is now online and functional&amp;lt;/font&amp;gt; - Jan 29, 2012&amp;lt;/b&amp;gt;&lt;br /&gt;
**Keep your VeggieTales up to date from a central repository, via GIT or SVN (and NOW an Update button in VeggieTales v1.6.0+).&lt;br /&gt;
**More tweaks and 3rd party macros will still be added over time. Check updates often!&lt;br /&gt;
***The goal is to eventually get every useful 3rd party VT macros added (listed on this page and some that are not) to the repository, as well as other updates and tweaks. &lt;br /&gt;
***Once this happens, then you can just download everything with two clicks (and keep everything patched with new updates, also two clicks).&lt;br /&gt;
***Note there is a fully automated &amp;lt;b&amp;gt;crematory macro&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;charcoal macro&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;kettle macro&amp;lt;/b&amp;gt; included here, if you are hunting for one!&lt;br /&gt;
&lt;br /&gt;
We will not update or modify the &amp;lt;u&amp;gt;original&amp;lt;/u&amp;gt; zipped versions from their respective author that are displayed on this page. However, any fine tuning/tweaks we find that are needed or would be beneficial will be done in TaleScripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;NEWS:&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; Read about VeggieTales v1.6.5, It now includes an update button to sync/get updates from TaleScripts. You no longer need to use the Git or SVN program to get your updates. See news in TaleScripts for more info!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[TaleScripts |Read more...]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==VeggieTales Macro Program==&lt;br /&gt;
* LUA-based macro engine named &amp;lt;b&amp;gt;VeggieTales&amp;lt;/b&amp;gt;&lt;br /&gt;
* Special modes for:&lt;br /&gt;
** Thistle recipe generation&lt;br /&gt;
** Carrot harvesting&lt;br /&gt;
&lt;br /&gt;
* Macros for&lt;br /&gt;
** Flax&lt;br /&gt;
** Glass making&lt;br /&gt;
** Quarrying&lt;br /&gt;
** Generic repetitive clicking while monitoring your stats (digging, pumping, sand mining, weaving, carving, etc)&lt;br /&gt;
** Wood gathering from a copse of trees&lt;br /&gt;
** ...and more!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Created during Tale 4, but continuously updated and maintained by the community, during Tales 5 and above. Now maintained with [[TaleScripts|TaleScripts]] beginning Tale 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Jimbly's Macros | View Jimby's Macro page]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tale 6 Macros==&lt;br /&gt;
&lt;br /&gt;
===[[User:Bardoth|Bardoth's VeggieTales Macros]]===&lt;br /&gt;
*[[File:Brick_rack.zip|Brick_rack.zip]]&lt;br /&gt;
*[[File:Kettle_full.zip]]&lt;br /&gt;
*[[File:Kiln.zip]]&lt;br /&gt;
*[[File:HackingRack.zip]]&lt;br /&gt;
*[[File:Wheat.zip]]&lt;br /&gt;
*[[File:Casting.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Gyges#Macros|Gyges' Macros]]===&lt;br /&gt;
*All use AutoHotkey&lt;br /&gt;
*Autoharvest - middle click to examine for chickens/queen ants, nick for resin, gather resin, gather wood.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Larame/VTMacros|Larame's VeggieTales Macros]]===&lt;br /&gt;
I will slowly be releasing some of my own macros for VeggieTales here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:TheMazeEcho|TheMazeEcho]]'s macros===&lt;br /&gt;
*[[File:barley.zip|Barley]] macro for ACTools, set up for a ful HD screen resolution (1920*1024). Plants 29 beds per round, pin the plant menu to the top right corner, make sure you carry at least 30 barley, and enough water and grain fertilizer.&lt;br /&gt;
&lt;br /&gt;
*[[File:rake.zip | Hackling Rake]] (for VeggieTales)&lt;br /&gt;
** Will also crack coconuts while working the rake if you have a kitchen window open with coconuts in your inventory!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Mindl/Macros|Mindl's Macros]]===&lt;br /&gt;
*Flax 3x5 Seed / Flax Harvest Macro - AutoHotKey - Based on Iggy's Flax Macro&lt;br /&gt;
*8x Woodplane Macro - Autohotkey - Planes and Repairs for you&lt;br /&gt;
*Up to 4x4 Onion Macro - Autohotkey - Becuase I couldn't get VeggieTales macro to work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Shayra|Shayra's]] Macros===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Sithid:Macros|Sithid]]'s Macros===&lt;br /&gt;
AutoIT macros I use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:KasumiGhia/Macros|KasumiGhia's Macros]]===&lt;br /&gt;
* updated veggietales macros are listed above in the Jimbly/VeggieTales section.&lt;br /&gt;
&lt;br /&gt;
* [[User:KasumiGhia/Macros/BarrelVise|Small Barrel Creation Macro]] by [[User:KasumiGhia|KasumiGhia]]&lt;br /&gt;
** Run as many barrel vises as you can pin without overlapping (If your computer is fast enough)&lt;br /&gt;
&lt;br /&gt;
*[[User:KasumiGhia/Macros/WaterMine|Water Mine Operation]] by [[User:KasumiGhia|KasumiGhia]]&lt;br /&gt;
&lt;br /&gt;
* [[User:KasumiGhia/lua|Edited macros]] for VeggieTales by [[User:KasumiGhia|KasumiGhia]]&lt;br /&gt;
** updated chem_helper Script for T5 essence values&lt;br /&gt;
** [[User:KasumiGhia/lua#Onions_macro|modified Onion]] Script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Cegaiel | Cegaiel's Macros]]===&lt;br /&gt;
&lt;br /&gt;
As of Feb 3, 2012 my macros have been added to my user page. Previously I was maintaining them on the T4 Wiki. Remove any bookmarks pointing to the T4 wiki.&lt;br /&gt;
&lt;br /&gt;
*Kettles (Run 1 to 21 kettles) - 1280x1024 (Autohotkey)          [see Zhukuram's note below on run-away macro]&lt;br /&gt;
*Mining (Autohotkey)&lt;br /&gt;
*Sand Mining (Autohotkey)&lt;br /&gt;
*Barrel Vise 1280x1024 (Autohotkey)&lt;br /&gt;
*Brick Racks (Unlimited) (Autohotkey)&lt;br /&gt;
*Carpentry Blade (7.1-7.2k) 1680x1050 (Autohotkey)  - Duplicate of Oni's Carp Blade Macro, but converted to Autohotkey with extra features - Thanks Oni! &lt;br /&gt;
*Flax Hammocks (Unlimited) (Autohotkey)&lt;br /&gt;
*Get Mouse Coordinates and Color (Autohotkey)&lt;br /&gt;
*Glaziers' Bench (Autohotkey)&lt;br /&gt;
*Grass (Autohotkey)&lt;br /&gt;
*Grow Barley 1280x1024 (Autohotkey)&lt;br /&gt;
*Grow Wheat (Unlimited) (Autohotkey)&lt;br /&gt;
*Hackling Rake (Autohotkey)&lt;br /&gt;
*Malting Trays (Unlimited) (Autohotkey)&lt;br /&gt;
*Plane boards (on Carpentry Shop) (Unlimited) (Autohotkey)&lt;br /&gt;
*Popup box closer (Autohotkey)&lt;br /&gt;
*Pottery Wheels (Unlimited) (Autohotkey)&lt;br /&gt;
*Skills Timer Clicker (Digging, Loom, Dirt, etc - Anything that causes a skill to turn red (Autohotkey)&lt;br /&gt;
*Papy Picker (Autohotkey)&lt;br /&gt;
*Real Seconds Stopwatch (Autohotkey)&lt;br /&gt;
*Teppy and Real Seconds Timer (Great for Glazier Bench) (Autohotkey)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Leghk | Leghk's]] Macro Mods===&lt;br /&gt;
Update to Cegaiel's carpentry shop blade macro to allow any orientation of the anvil. Get the zip from [[User:Leghk|my user page]] with notes on usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Skyfeather | Skyfeather's]] VeggieTales Macros===&lt;br /&gt;
&lt;br /&gt;
* Nut's Essence Macro - Ensure you start a batch of nut's essence and pin your toxin kitchen macros so that you can see all options without scrolling.&lt;br /&gt;
&lt;br /&gt;
* Essence Macro Update - Performance improvements&lt;br /&gt;
&lt;br /&gt;
* Glass Macro Update - More time efficient and doesn't need to stop making glass items to spike the temperature&lt;br /&gt;
&lt;br /&gt;
* Board Macro Update - Reloads carpentry shops with carpentry blades, may not work if you don't have a dozen or so spare&lt;br /&gt;
&lt;br /&gt;
* Wood Treatment Macro - Must edit the lua file with the specific recipe you're attempting, recipes included should be close, but likely won't be exact&lt;br /&gt;
&lt;br /&gt;
* Metal Treatment Macro - Same as above for wood treatment, but you have to add a new image file for whatever metal you're using.  Sun Steel is included as FromSunSteel.png, currently set to Titanium&lt;br /&gt;
&lt;br /&gt;
* Thermometer Macro - Ensure your heater control is set to standard, hover the mouse over the glory hole when you press shift.  May still bungle 20% or so of therms.&lt;br /&gt;
&lt;br /&gt;
* Reactory Macro - Poorly documented, only works with upgraded reactories, automatically loads reactories when the 4x batch menu is pinned, and a reactory menu is pinned after the metal has been crystallized at some percentage.&lt;br /&gt;
&lt;br /&gt;
* Forge macro - Really poorly documented, just clicks all of an image on the screen&lt;br /&gt;
&lt;br /&gt;
* Weave Linen macro - Pin the hand loom, will process as much thread as you're holding, will not stop when you run out of thread&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[media:Sky's_VT_Macros.zip | Sky's VT Macros]]&lt;br /&gt;
&lt;br /&gt;
[[media:Glass.zip | Updated VeggieTales glass macro]]&lt;br /&gt;
&lt;br /&gt;
===[[User:Pheros | Pheros]] Block Macro===&lt;br /&gt;
* For Digging up Limestone Blocks for Pyramids and put on rollers&lt;br /&gt;
&lt;br /&gt;
===[[User:Selune | Selune]]'s Fixed VT Macros===&lt;br /&gt;
* Various improvements and fixes to the existing VT Macros. PLEASE Contact me if you know how to work with the TaleScripts repository!&lt;br /&gt;
&lt;br /&gt;
==Tale 5 Macros== &lt;br /&gt;
&lt;br /&gt;
*Most Macros will still work in Tale 6.&lt;br /&gt;
*Note any links below in red, are because User pages were not copied from Tale 5 to Tale 6.&lt;br /&gt;
**You would need to visit the [http://www.atitd.org/wiki/tale5/Macros Tale 5 Macro page] to see the original links (that are now red).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Anka/Macros|Anka's Macros]]===&lt;br /&gt;
I'm back and will be updating all of my old macros&lt;br /&gt;
*Barley&lt;br /&gt;
*Charcoal Hearth&lt;br /&gt;
*Charcoal Oven&lt;br /&gt;
*Firepit - autohotkey&lt;br /&gt;
*Endless Flax&lt;br /&gt;
*MultiTool&lt;br /&gt;
*Multiple Resolutions - some are 1920x1080 only for now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Iggy's Macros===&lt;br /&gt;
*[[Macros/Iggys|Iggy's AutoHotKey Macros]]&lt;br /&gt;
**[[Macros/Iggys/Flax|Flax Macro]] &lt;br /&gt;
**[[Macros/Iggys/Misc/Clicker|Clicking Macro]]&lt;br /&gt;
**[[Macros/Iggys/Gather|Clay, Grass &amp;amp; Slate Macro]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rogarian's Macros (Windows Executables)===&lt;br /&gt;
* [http://nemesis2.qx.net/pages/ATITD R-Cubed (Windows Only)]&lt;br /&gt;
** R-Cubed is simple program that will allow one to easily pick up grass, slate and clay. It will also do simple skill based tasks such as digging or gathering limestone. &lt;br /&gt;
** &amp;quot;It's stupdenous!&amp;quot; ~Traak&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Oni/Macros Oni's Macros] (ACTool)===&lt;br /&gt;
Macros with mentioned resolutions work only in that resolution.&lt;br /&gt;
*'''[[http://www.atitd.org/wiki/tale4/User:Oni/macros ONI's Macro Guide]]''' Macroing for Dummies (like me).&lt;br /&gt;
:*Learn to make a simple macro using ACTool.&lt;br /&gt;
*''' [[User:Oni/GrassAuto | Simple Grass/Clay auto move gatherer]] ''' v1.0&lt;br /&gt;
:* General purpose grass/clay collecting macro. 1280x1024 resolution. 2nd F8 zoomed all the way in.&lt;br /&gt;
*''' [[User:Oni/Macros/CarpBladeWide | Carpentry Blade Macro &amp;lt;b&amp;gt;1680x1050&amp;lt;/b&amp;gt;]]'''&lt;br /&gt;
*''' [[User:Oni/Macros/Limstone1024 | Simple Limestone Macro&amp;lt;b&amp;gt;1024x768&amp;lt;/b&amp;gt;]]'''.&lt;br /&gt;
*''' [[User:Oni/Macros/CC1680 | Charcoal Hearth Macro&amp;lt;b&amp;gt;1680x1050&amp;lt;/b&amp;gt;]]'''&lt;br /&gt;
*''' [[User:Oni/Macros/CC1024|Charcoal Hearth Macro 1024x768]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Blethezar/Macros Blethezar's macro]===&lt;br /&gt;
*[[User:Blethezar/Macros|CC hearth macro]]&lt;br /&gt;
**this is Anka's CC hearth Macro from T3&lt;br /&gt;
**         I've re-adjusted this macro to run in 1680x1050 resolution ,&lt;br /&gt;
**         only tried it with 4 hearths so far , but works fine.&lt;br /&gt;
**         Not lost a batch yet ( Galagah)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Thanatic/Macros Thanatic's macros]===&lt;br /&gt;
*[[User:Thanatic/Macros/CC|nka's CC macro, altered to work with ovens too]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Shayra Shayra's Macros]===&lt;br /&gt;
*[[User:Shayra|Flax]] --- Dharma's Continuous Flaxer from T3 updated for T5&lt;br /&gt;
**Clay Gatherer (nice, try this one)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Macros/tehm_Grass | Tehm's Grass]] (ACTool)===&lt;br /&gt;
*Collects Grass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Makazi/Macro Makazi's Macros] (VeggieTales)===&lt;br /&gt;
* [[User:Makazi/Macro#Flax Assist|Flax Assist]]&lt;br /&gt;
** Click saver, helps when running many flax beds at once.&lt;br /&gt;
* [[User:Makazi/Macro#CC Assist|CC Assist]]&lt;br /&gt;
** CC Heart/Oven interface, run multiple CC Hearts/Ovens from one interface.&lt;br /&gt;
* [[User:Makazi/Macro#Pixel_Click|Pixel Click]]&lt;br /&gt;
** Select pixel area (16x8) and macro will click that image everytime it sees it. (Grass icon, clay icon, etc.)&lt;br /&gt;
* [[User:Makazi/Macro#Clay_Gatherer|Clay Gatherer]]&lt;br /&gt;
** Fully automated clay gathering macro.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[http://www.atitd.org/wiki/tale5/User:Darkfyre/Macros Darkfyre's Macros] VeggieTales===&lt;br /&gt;
http://www.atitd.org/wiki/tale5/User:Darkfyre/Macros&lt;br /&gt;
#Forge&lt;br /&gt;
#Kettle&lt;br /&gt;
#Casting Box (In progress)&lt;br /&gt;
#Kiln (In progress)&lt;br /&gt;
#Pottery Wheel (In progress)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.atitd.org/wiki/tale6/images/f/f6/VeggieTalesForge.zip Forge Helper]&lt;br /&gt;
** &amp;lt;B&amp;gt;1/28/2012:&amp;lt;/b&amp;gt; &amp;lt;font color=green&amp;gt;&amp;lt;b&amp;gt;Fixed:&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; Sheeting and Wire would give image not found, nill value error. Uploaded the fixed version to T6 wiki and TaleScripts. &amp;lt;font color=green&amp;gt;~Cegaiel&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Tutmault/Macros/Fishing | Tutmault Macros]] (VeggieTales)===&lt;br /&gt;
[[Tutmault/Macros/Fishing | Fishing Macro]]&lt;br /&gt;
#VeggieTale Fishing Script (Ghostmouse,Screenreading) --&lt;br /&gt;
#Cycles Lures, Reads Fish Name/Size, Writes to Log File --&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[User:Daniels#Macros | Daniels' Macros]]===&lt;br /&gt;
Click the link to find my altered/original macros for: Charcoal Hearth, Barrel Vise, Crematory, and an updated Shu's Clicker Macro.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Information on Distances==&lt;br /&gt;
&lt;br /&gt;
'''Additional Information lifted from Tale 3 Wiki'''&lt;br /&gt;
&lt;br /&gt;
This is a distance chart for mouse locations for items. All locations are in cartographer mode, zoomed in, on Windows. Your mileage may vary depending on OS. Please contribute!&lt;br /&gt;
&lt;br /&gt;
* Brick Rack: Horizontal 32px, Vertical 32px&lt;br /&gt;
* One line of text in a box: 16px&lt;br /&gt;
* Large Buttons&lt;br /&gt;
      o The Level button is 128px&lt;br /&gt;
      o Other buttons are 64px ea &lt;br /&gt;
* Small Buttons&lt;br /&gt;
      o The Level button is 64px&lt;br /&gt;
      o Other buttons are 32px ea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Macro Programs==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;background-color:#FFF8C6&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Program Name   !! Web Address  !! Operating System(s) Supported !! Cost&lt;br /&gt;
|- &lt;br /&gt;
|  Macro Express&lt;br /&gt;
|  http://www.macros.com&lt;br /&gt;
|  Windows XP, 2000, ME, 9x, NT 4; Pentium or higher CPU; 32 MB RAM; 20 MB hard disk space&lt;br /&gt;
|  $39.95 / 30 day trial&lt;br /&gt;
|-&lt;br /&gt;
|  ACTool (Asheron's Call Tool)&lt;br /&gt;
|  http://www.actool.net&lt;br /&gt;
|  Windows&lt;br /&gt;
|  Free and open source&lt;br /&gt;
|-&lt;br /&gt;
|  AutoHotkey&lt;br /&gt;
|  http://www.autohotkey.com/&lt;br /&gt;
|  Windows&lt;br /&gt;
|  Free and open source&lt;br /&gt;
|-&lt;br /&gt;
|  AutoIt 3.0&lt;br /&gt;
|  http://www.hiddensoft.com/autoit3/&lt;br /&gt;
|  Windows - no libs added&lt;br /&gt;
|  Free and open source&lt;br /&gt;
|-&lt;br /&gt;
|  LTool-0.3 (Linux)&lt;br /&gt;
|  http://ltool.sourceforge.net&lt;br /&gt;
|  Linux&lt;br /&gt;
|  Free and open source (Python script)&lt;br /&gt;
|-&lt;br /&gt;
|  xautomation&lt;br /&gt;
|  http://hoopajoo.net/projects/xautomation.html &lt;br /&gt;
|  Linux (You Compile, gcc c++)&lt;br /&gt;
|  Free, Open Source, GPL&lt;br /&gt;
|-&lt;br /&gt;
|  xnee&lt;br /&gt;
|  http://www.sandklef.com/xnee/&lt;br /&gt;
|  Linux, Mac&lt;br /&gt;
|  Free, Open Source, GPL&lt;br /&gt;
|-&lt;br /&gt;
|  SCAR Divi &lt;br /&gt;
|  http://freddy1990.com/index.php?page=product&amp;amp;name=scar&lt;br /&gt;
|  Windows&lt;br /&gt;
|  Free&lt;br /&gt;
|-&lt;br /&gt;
| Java&lt;br /&gt;
| http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Robot.html&lt;br /&gt;
| Windows, Linux, Mac&lt;br /&gt;
| Free&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===AC Tool===&lt;br /&gt;
There are a couple of issues with AC Tool that, once you fix, make it very easy and good to use.&lt;br /&gt;
&lt;br /&gt;
* Windows XP, start the program in Administrator Mode.  &lt;br /&gt;
* If you get the error &amp;quot;Could not find Decal's MEMLOCKS.XML&amp;quot;, just click Macro &amp;gt; Asheron's Call 1 Settings &amp;gt; Skip AC Mouse Memory Writes&lt;br /&gt;
* Setting &amp;lt;f2&amp;gt; and &amp;lt;f3&amp;gt; as start and stop hot keys will help fix most of the issues of &amp;quot;run away&amp;quot; macros.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Misc===&lt;br /&gt;
&lt;br /&gt;
* {{5}} [[http://www.fileden.com/files/2010/9/10/2965860/A%20Click%20In%20Time.zip A Click in Time]]&lt;br /&gt;
** Written by GarethDahm in Tale4 for Windows.&lt;br /&gt;
** Free Application!&lt;br /&gt;
** Position a small arrow anywhere on your screen.&lt;br /&gt;
** Set the timer.&lt;br /&gt;
** Let it ease your RSI factor!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[http://www.atitd.org/wiki/tale4/images/8/8f/Ghostmouse.zip Ghostmouse] (Windows Executable) - Simple old freeware program that records your mouse movements/clicks.  Can adjust the speed with a click in Options, if necessary. Records in real time, no scripts to edit, easy for anyone to use. Program no longer made or supported, found in old archived backup CD. ([http://www.atitd.org/wiki/tale4/images/e/e0/Ghostmouse.jpg Screenshot])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Personally I like autohotkey because it's freeware and is still being updated - Blogot&lt;br /&gt;
&lt;br /&gt;
I second the Autohotkey recommendation, it has some extremely powerful features but is still fast and lightweight, and new features are being added all the time. - Dragyn&lt;br /&gt;
&lt;br /&gt;
Personally I like AutoIt 3.0 it is freeware updated alot and it is very powerful allows macroing of almost anything windows - Ledeanna&lt;br /&gt;
&lt;br /&gt;
I second the AutoIt recommendation, it is very powerful as well, easy to code and allows compiling the scripts for use by people who want to macro but feel not competent enough to write their own or who dont want to install the scripting software. ~Anguz &lt;br /&gt;
- Note - AutoHotKey also allows you to compile an exe for machines with out AHK installed. ~Jhnny&lt;br /&gt;
&lt;br /&gt;
Added SCAR Divi, its similar to ACtool, but in my opinion much better. It has very nice support for Bitmap searching, and even Bitmask searching. The bitmaps can be converted to strings, and loaded directly in from the script (Rather then saved as images). Lots of other features, but people will have to find them. SCAR also supports bitmap masks, and Deformable template models, which allows the macro to find and identify multiple images, or peices of text, even when the colours, position, or even size has changed. Its possible to make fairly advanced macros that will work regardless of window positions ingame, or resolution.--Kinslayer 08:32, 29 August 2009 (EST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Running without Windows?===&lt;br /&gt;
A lot of the macro effort has gone towards programs for windows. The windows version of atitd can be run using www.winehq.org (run Windows applications on Linux, BSD, Solaris and Mac OS X).&lt;br /&gt;
&lt;br /&gt;
VeggieTales and autohotkey work to some extent using this emulator along with the windows emulation of atitd.&lt;br /&gt;
&lt;br /&gt;
Autohotkey 'keys' need to be changed to ones that work (Scrolllock, Numpad up/down/left/pageup/down buttons seem to work on ubuntu10). Recording and playback work only on windows emulated programs, but that's enough to save you from windows.&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225858</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225858"/>
		<updated>2013-01-07T03:36:06Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's updated VT Macros. If you know how to upload changes to TaleScripts, PLEASE contact me! Thanks!&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=VT Paint Watch with Reset}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fixed VT Crematory macro}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- crematory.lua v1.2 by Tallow&lt;br /&gt;
--&lt;br /&gt;
-- Runs one or more crematories. Automatically discovers button&lt;br /&gt;
-- configuration on its own and loads/unloads materials.&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
assert(loadfile(&amp;quot;luaScripts/common.inc&amp;quot;))();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Crematory v1.2 (by Tallow) --&lt;br /&gt;
  Automatically runs one or more crematories.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
wmText = &amp;quot;Tap control on Crematories to open and pin.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
OPP = 0;&lt;br /&gt;
SAME_UP = 1;&lt;br /&gt;
SAME_DOWN = 2;&lt;br /&gt;
&lt;br /&gt;
tolerance = 6500;&lt;br /&gt;
tickTime = 1000;&lt;br /&gt;
maxWait = 1000;&lt;br /&gt;
longWait = 500;&lt;br /&gt;
shortWait = 30;&lt;br /&gt;
&lt;br /&gt;
colOffsets = {&lt;br /&gt;
  {35-40-3, 204-182},&lt;br /&gt;
  {71-40-3, 204-182},&lt;br /&gt;
  {107-40-3, 204-182},&lt;br /&gt;
  {143-40-3, 204-182},&lt;br /&gt;
  {179-40-3, 204-182},&lt;br /&gt;
  {215-40-3, 204-182},&lt;br /&gt;
  {251-40-3, 204-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
colWidth = 36-35+6;&lt;br /&gt;
colHeight = 323-204;&lt;br /&gt;
colMiddle = 57;&lt;br /&gt;
&lt;br /&gt;
buttonOffsets = {&lt;br /&gt;
  {49-40, 333-182},&lt;br /&gt;
  {89-40, 333-182},&lt;br /&gt;
  {129-40, 333-182},&lt;br /&gt;
  {169-40, 333-182},&lt;br /&gt;
  {209-40, 333-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
buttonWidth = 78-49;&lt;br /&gt;
buttonHeight = 354-333;&lt;br /&gt;
buttonClick = 10;&lt;br /&gt;
&lt;br /&gt;
limestoneOffset = 0;&lt;br /&gt;
leeksOffset = 16;&lt;br /&gt;
flaxOffset = 32;&lt;br /&gt;
papyrusOffset = 48;&lt;br /&gt;
woodOffset = 64;&lt;br /&gt;
&lt;br /&gt;
load_flax = true;&lt;br /&gt;
load_papyrus = true;&lt;br /&gt;
load_leeks = true;&lt;br /&gt;
load_limestone = true;&lt;br /&gt;
&lt;br /&gt;
currentPass = 1;&lt;br /&gt;
passCount = 5;&lt;br /&gt;
&lt;br /&gt;
windows = nil;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- doit&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
  windowManager(&amp;quot;Crematory Setup&amp;quot;, wmText);&lt;br /&gt;
  unpinOnExit(runCrematories);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function runCrematories()&lt;br /&gt;
  promptLoad();&lt;br /&gt;
  askForFocus();&lt;br /&gt;
  for i=1,passCount do&lt;br /&gt;
    currentPass = i;&lt;br /&gt;
    takeAll();&lt;br /&gt;
    loadAll();&lt;br /&gt;
    start();&lt;br /&gt;
    local is_done = false;&lt;br /&gt;
    while not is_done do&lt;br /&gt;
      tick();&lt;br /&gt;
      is_done = checkDone();&lt;br /&gt;
    end&lt;br /&gt;
    sleepWithStatus(longWait*5, updateMessage(&amp;quot;Waiting to take&amp;quot;));&lt;br /&gt;
  end&lt;br /&gt;
  takeAll();&lt;br /&gt;
  lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- addWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function addWindow(vPos)&lt;br /&gt;
  local newWindow = {&lt;br /&gt;
    origin = {vPos[0], vPos[1]},&lt;br /&gt;
    ups = {nil, nil, nil, nil, nil},&lt;br /&gt;
    downs = {nil, nil, nil, nil, nil},&lt;br /&gt;
    dirs = {OPP, OPP, OPP, OPP, OPP},&lt;br /&gt;
    double = {false, false, false, false, false, false, false},&lt;br /&gt;
    probe = 0,&lt;br /&gt;
    lastPos = nil;&lt;br /&gt;
    lastDiff = nil;&lt;br /&gt;
    buttonState = {true, true, true, true, true},&lt;br /&gt;
    sameCount = 0,&lt;br /&gt;
    done = false&lt;br /&gt;
  };&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, newWindow.origin[1] - 31,&lt;br /&gt;
                                   newWindow.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    newWindow.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  else&lt;br /&gt;
    error &amp;quot;No fire button. Do you have Advanced Chemistry?&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  windows[#windows + 1] = newWindow;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- resetWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function resetWindow(current)&lt;br /&gt;
  local vLime = srFindImageInRange(&amp;quot;crem-lime.png&amp;quot;, current.origin[1] - 20,&lt;br /&gt;
                                   current.origin[2] - 20, 100, 100,&lt;br /&gt;
				   tolerance);&lt;br /&gt;
  if (not vLime) then&lt;br /&gt;
     error &amp;quot;Could not find origin again.&amp;quot;;&lt;br /&gt;
  end&lt;br /&gt;
  if ((vLime[0] ~= current.origin[1]) or&lt;br /&gt;
      (vLime[1] ~= current.origin[2])) then&lt;br /&gt;
     error(&amp;quot;Window moved from (&amp;quot; .. current.origin[1] .. &amp;quot;, &amp;quot; ..&lt;br /&gt;
       current.origin[2] .. &amp;quot;) to (&amp;quot; .. vLime[0] .. &amp;quot;, &amp;quot; .. vLime[1] .. &amp;quot;)&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, current.origin[1] - 31,&lt;br /&gt;
                                   current.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    current.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  end&lt;br /&gt;
  if current.probe &amp;lt; 6 then&lt;br /&gt;
    current.probe = 0;&lt;br /&gt;
    current.ups = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.downs = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.dirs = {OPP, OPP, OPP, OPP, OPP};&lt;br /&gt;
    current.double = {false, false, false, false, false, false, false};&lt;br /&gt;
  end&lt;br /&gt;
  current.lastPos = nil;&lt;br /&gt;
  current.lastDiff = nil;&lt;br /&gt;
  current.buttonState = {true, true, true, true, true};&lt;br /&gt;
  current.sameCount = 0;&lt;br /&gt;
  current.done = false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- start&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function start()&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Waiting to begin&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  if windows then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      resetWindow(windows[i]);&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    windows = {};&lt;br /&gt;
    local posList = findAllImages(&amp;quot;crem-lime.png&amp;quot;);&lt;br /&gt;
    if #posList == 0 then&lt;br /&gt;
      error &amp;quot;No crematories found&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    for i=1,#posList do&lt;br /&gt;
      addWindow(posList[i]);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if windows[i].fire then&lt;br /&gt;
      safeClick(windows[i].fire[1] + 5, windows[i].fire[2] + 5);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Finding my Chi&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    windows[i].lastPos = findPoints(windows[i]);&lt;br /&gt;
    if not windows[i].lastPos then&lt;br /&gt;
      windows[i].done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tick&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tick()&lt;br /&gt;
  sleepWithStatus(tickTime, updateMessage(&amp;quot;Tending Crematory&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    tickWindow(windows[i]);&lt;br /&gt;
  end&lt;br /&gt;
  checkBreak();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tickWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tickWindow(current)&lt;br /&gt;
  if not current.done then&lt;br /&gt;
    local points = findPoints(current);&lt;br /&gt;
    if points then&lt;br /&gt;
      probeNext(current, points);&lt;br /&gt;
      if current.probe &amp;gt; 5 then&lt;br /&gt;
        toggleButtons(current, points, current.buttonState);&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkDone&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkDone()&lt;br /&gt;
  local all_done = true;&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if not windows[i].done then&lt;br /&gt;
      local done = srFindImageInRange(&amp;quot;crem-done.png&amp;quot;, windows[i].origin[1] - 3,&lt;br /&gt;
                                      windows[i].origin[2] - 15, 40, 40,&lt;br /&gt;
                                      tolerance);&lt;br /&gt;
      if done then&lt;br /&gt;
        windows[i].done = true;&lt;br /&gt;
      else&lt;br /&gt;
        all_done = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return all_done;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findPoints&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findPoints(current)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    local offset = {current.origin[1] + colOffsets[i][1],&lt;br /&gt;
                    current.origin[2] + colOffsets[i][2]};&lt;br /&gt;
    local point = srFindImageInRange(&amp;quot;crem-point.png&amp;quot;, offset[1],&lt;br /&gt;
                                     offset[2] - 5,&lt;br /&gt;
                                     colWidth, colHeight + 10, tolerance);&lt;br /&gt;
    if point then&lt;br /&gt;
      result[i] = point[1] - colOffsets[i][2] - current.origin[2] - colMiddle;&lt;br /&gt;
    else&lt;br /&gt;
      result = nil;&lt;br /&gt;
      break;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findDiffs&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findDiffs(current, points)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  local all_zero = true;&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    result[i] = points[i] - current.lastPos[i];&lt;br /&gt;
    if result[i] ~= 0 then&lt;br /&gt;
      all_zero = false;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if all_zero then&lt;br /&gt;
    result = nil;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- probeNext&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function probeNext(current, points)&lt;br /&gt;
  local diffs = findDiffs(current, points);&lt;br /&gt;
  checkSame(current, diffs);&lt;br /&gt;
  if diffs and current.probe &amp;lt; 6 then&lt;br /&gt;
    if current.probe &amp;gt; 0 then&lt;br /&gt;
      for i=1,7 do&lt;br /&gt;
        if current.lastDiffs[i] &amp;lt; 0 and diffs[i] &amp;gt; 0 then&lt;br /&gt;
          if current.ups[current.probe] then&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_UP;&lt;br /&gt;
          else&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        elseif current.lastDiffs[i] &amp;gt; 0 and diffs[i] &amp;lt; 0 then&lt;br /&gt;
          if current.downs[current.probe] then&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_DOWN;&lt;br /&gt;
          else&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if current.ups[current.probe] and current.downs[current.probe] then&lt;br /&gt;
        current.double[current.ups[current.probe]] = true;&lt;br /&gt;
        current.double[current.downs[current.probe]] = true;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    current.lastPos = points;&lt;br /&gt;
    current.lastDiffs = diffs;&lt;br /&gt;
    current.probe = current.probe + 1;&lt;br /&gt;
    if current.probe &amp;lt;= 5 then&lt;br /&gt;
      local newProbe = not current.buttonState[current.probe];&lt;br /&gt;
      local clickX = current.origin[1] + buttonOffsets[current.probe][1] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
      local clickY = current.origin[2] + buttonOffsets[current.probe][2] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
&lt;br /&gt;
      current.buttonState[current.probe] = newProbe;&lt;br /&gt;
      safeClick(clickX, clickY);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkSame&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkSame(current, diffs)&lt;br /&gt;
  if diffs then&lt;br /&gt;
    local all_same = true;&lt;br /&gt;
    for i=1,#diffs do&lt;br /&gt;
      if diffs[i] ~= 0 then&lt;br /&gt;
        all_same = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if all_same then&lt;br /&gt;
      current.sameCount = current.sameCount + 1;&lt;br /&gt;
    else&lt;br /&gt;
      current.sameCount = 0;&lt;br /&gt;
    end&lt;br /&gt;
    if current.sameCount &amp;gt; 10 then&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- toggleButtons&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function toggleButtons(current, points, buttonState)&lt;br /&gt;
  local balance = getBalance(points, current.double);&lt;br /&gt;
  for i=1,5 do&lt;br /&gt;
    local up = getPointValue(points, current.double, current.ups[i],&lt;br /&gt;
                             balance);&lt;br /&gt;
    local down = getPointValue(points, current.double, current.downs[i],&lt;br /&gt;
                               balance);&lt;br /&gt;
    local goalState = ((up &amp;gt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                       (up &amp;gt;= 0 and down &amp;gt;= 0 and up &amp;gt; down) or&lt;br /&gt;
                       (up &amp;lt;= 0 and down &amp;lt;= 0 and up &amp;gt; down));&lt;br /&gt;
    if current.dirs[i] == SAME_UP then&lt;br /&gt;
      goalState = ((up &amp;gt;= 0 and down &amp;gt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;gt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;lt;= down));&lt;br /&gt;
    elseif current.dirs[i] == SAME_DOWN then&lt;br /&gt;
      goalState = ((up &amp;lt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;lt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;gt;= down));&lt;br /&gt;
    end&lt;br /&gt;
    local goalStateStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if goalState then&lt;br /&gt;
      goalStateStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    local buttonStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if buttonState[i] then&lt;br /&gt;
      buttonStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if (goalState and not buttonState[i]) or&lt;br /&gt;
       (not goalState and buttonState[i]) then&lt;br /&gt;
      safeClick(current.origin[1] + buttonOffsets[i][1] + buttonClick,&lt;br /&gt;
		current.origin[2] + buttonOffsets[i][2] + buttonClick);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
      buttonState[i] = goalState;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getBalance&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getBalance(points, double)&lt;br /&gt;
  local above = 0;&lt;br /&gt;
  local below = 0;&lt;br /&gt;
  for i=1,#points do&lt;br /&gt;
    if points[i] &amp;gt; 0 and double[i] then&lt;br /&gt;
      below = below + 1;&lt;br /&gt;
    elseif points[i] &amp;lt; 0 and double[i] then&lt;br /&gt;
      above = above + 1;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if above &amp;gt;= 3 then&lt;br /&gt;
    result = -5;&lt;br /&gt;
  elseif below &amp;gt;= 3 then&lt;br /&gt;
    result = 5;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getPointValue&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getPointValue(points, double, index, balance)&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if index then&lt;br /&gt;
    result = points[index];&lt;br /&gt;
    if not double[index] then&lt;br /&gt;
      result = result + balance;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- takeAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function takeAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local updateList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#updateList do&lt;br /&gt;
    safeClick(updateList[i][0], updateList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local takeList = findAllImages(&amp;quot;crem-take.png&amp;quot;);&lt;br /&gt;
  for i=1,#takeList do&lt;br /&gt;
    safeClick(takeList[i][0] + 5, takeList[i][1] + 5);&lt;br /&gt;
    sleepWithStatus(shortWait*2, &amp;quot;Waiting for Everything&amp;quot;);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local all = waitForImage(&amp;quot;Everything.png&amp;quot;, maxWait, &amp;quot;Grabbing Everything&amp;quot;);&lt;br /&gt;
    if all then&lt;br /&gt;
      safeClick(all[0] + 5, all[1] + 5);&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(shortWait*2);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- promptLoad&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function promptLoad()&lt;br /&gt;
  scale = 1.0;&lt;br /&gt;
  local z = 0;&lt;br /&gt;
  local is_done = nil;&lt;br /&gt;
  while not is_done do&lt;br /&gt;
    checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
    lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Configure&amp;quot;);&lt;br /&gt;
    local y = 60;&lt;br /&gt;
&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xffffffff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
    is_done, passCount = lsEditBox(&amp;quot;passes&amp;quot;, 110, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                   0x000000ff, 5);&lt;br /&gt;
    if not tonumber(passCount) then&lt;br /&gt;
      is_done = false;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      passCount = 1;&lt;br /&gt;
    end&lt;br /&gt;
    y = y + 48;&lt;br /&gt;
&lt;br /&gt;
    load_flax = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Flax&amp;quot;,&lt;br /&gt;
                           load_flax);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_papyrus = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Papyrus&amp;quot;,&lt;br /&gt;
                              load_papyrus);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_leeks = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Leeks&amp;quot;,&lt;br /&gt;
                            load_leeks);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_limestone = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Limestone&amp;quot;,&lt;br /&gt;
                                load_limestone);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xd0d0d0ff,&lt;br /&gt;
                   &amp;quot;Make sure each crematory is pinned and empty.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if lsButtonText(10, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;Begin&amp;quot;) then&lt;br /&gt;
        is_done = 1;&lt;br /&gt;
    end&lt;br /&gt;
    if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff,&lt;br /&gt;
                    &amp;quot;End script&amp;quot;) then&lt;br /&gt;
      error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    lsDoFrame();&lt;br /&gt;
    lsSleep(shortWait);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local posList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    safeClick(posList[i][0], posList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  posList = findAllImages(&amp;quot;crem-fire.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    loadSingle(posList[i], woodOffset, &amp;quot;Wood&amp;quot;);&lt;br /&gt;
    if load_flax then&lt;br /&gt;
      loadSingle(posList[i], flaxOffset, &amp;quot;Flax&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_papyrus then&lt;br /&gt;
      loadSingle(posList[i], papyrusOffset, &amp;quot;Papyrus&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_leeks then&lt;br /&gt;
      loadSingle(posList[i], leeksOffset, &amp;quot;Leeks&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_limestone then&lt;br /&gt;
      loadSingle(posList[i], limestoneOffset, &amp;quot;Limestone&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadSingle&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadSingle(pos, offset, type)&lt;br /&gt;
  sleepWithStatus(200, &amp;quot;Waiting to load&amp;quot;);&lt;br /&gt;
  safeClick(pos[0]+5, pos[1]+5+16);&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  local limePos = waitForImage(&amp;quot;crem-limestone.png&amp;quot;, maxWait,&lt;br /&gt;
			       &amp;quot;Loading &amp;quot; .. type .. &amp;quot; Into Crematory&amp;quot;);&lt;br /&gt;
  if limePos then&lt;br /&gt;
    safeClick(limePos[0] + 5, limePos[1] + 5 + offset);&lt;br /&gt;
    lsSleep(100);&lt;br /&gt;
    local maxPos = waitForImage(&amp;quot;crem-max.png&amp;quot;, maxWait,&lt;br /&gt;
				&amp;quot;Adding Maximum Amount&amp;quot;);&lt;br /&gt;
    if maxPos then&lt;br /&gt;
      safeClick(maxPos[0]+5, maxPos[1]+5);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  sleepWithStatus(shortWait, &amp;quot;Waiting for load to complete&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- updateMessage&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function updateMessage(message)&lt;br /&gt;
  local result = &amp;quot;Pass &amp;quot; .. currentPass .. &amp;quot; / &amp;quot; .. passCount .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
  result = result .. message .. &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  if message == &amp;quot;Tending Crematory&amp;quot; then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      local status = &amp;quot;Buttons: &amp;quot;;&lt;br /&gt;
      for j=1,5 do&lt;br /&gt;
	if windows[i].dirs[j] == OPP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	elseif windows[i].dirs[j] == SAME_UP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;+&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. getDir(&amp;quot;-&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	end&lt;br /&gt;
	if j ~= 5 then&lt;br /&gt;
	  status = status .. &amp;quot;, &amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
      end&lt;br /&gt;
      result = result .. &amp;quot;\n&amp;quot; .. status;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getDir(sign, number)&lt;br /&gt;
  local result = &amp;quot;&amp;quot;;&lt;br /&gt;
  if number then&lt;br /&gt;
    result = sign .. number&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Forge.inc to add Treated Metal Sheeting}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;Knife Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Shovel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Nails&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Bars&amp;quot;,&lt;br /&gt;
&amp;quot;Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Straps&amp;quot;,&lt;br /&gt;
&amp;quot;Tools&amp;quot;,&lt;br /&gt;
&amp;quot;Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bar_button_names = {&lt;br /&gt;
&amp;quot;Iron Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Bar&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
sheeting_button_names = {&lt;br /&gt;
&amp;quot;Lead Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Foil&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Treated Metal Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Tin Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Moon Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Thoths Metal Sheeting&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
straps_button_names = {&lt;br /&gt;
&amp;quot;Water Metal Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Iron Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Aluminum Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Strap&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
tools_button_names = {&lt;br /&gt;
&amp;quot;Iron Poker&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Chisel&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
wire_button_names = {&lt;br /&gt;
&amp;quot;Thoths Metal Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Magnesium Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECTS 'SUPPORTING' FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function waitMinutes(minutes)&lt;br /&gt;
-- Teppy Minute is 66 seconds or 66000 ms&lt;br /&gt;
-- Add a 3 second delay (3000 ms) in case of lag&lt;br /&gt;
&lt;br /&gt;
wait_delay = 3000; -- Extra delay on top of Teppy Time, for lag purposes. Default is 3000&lt;br /&gt;
wait = (minutes * 66000) + wait_delay;&lt;br /&gt;
askForFocus(); -- Pause to allow user to focus back to ATITD (if they checked the Pause for Focus Box), before starting project.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doneGUI(totalPasses)&lt;br /&gt;
wait = 5000;  -- Gives a 5 second delay to review the GUI stats, before quitting/returing to Main Menu.&lt;br /&gt;
clickAllImages(&amp;quot;This.png&amp;quot;); -- Refresh the screen. Update forge window so we know how much charcoal is currently in each forge before next project&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. totalPasses .. &amp;quot;/&amp;quot; .. totalPasses .. &amp;quot;] ALL DONE!\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
runForge(); -- Return to/Display Main Menu&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function waitGUI(pass)&lt;br /&gt;
	--If any forge menus shows the Forge_StartFire.png - refreshWindows() function, then display the stalledMessage in the GUI. Suggests its not lit (or out of charcoal)&lt;br /&gt;
	if #stalled &amp;gt; 0 then&lt;br /&gt;
	stalledMessage = &amp;quot;\n[&amp;quot; .. #stalled .. &amp;quot;] Forges STALLED (Needs Lit)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
	stalledMessage = &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. pass .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;] Total Passes\n----------------------------------------------\n[&amp;quot; .. batch .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per forge\n[&amp;quot; .. project_windows .. &amp;quot;] Forges working&amp;quot; .. stalledMessage .. &amp;quot;\n----------------------------------------------\n[&amp;quot; .. batch*project_windows .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per pass\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
made = made + (batch*project_windows);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function refreshWindows()&lt;br /&gt;
	checkBreak();&lt;br /&gt;
	pinned_windows = clickAllImages(&amp;quot;This.png&amp;quot;);&lt;br /&gt;
	lsSleep(400);&lt;br /&gt;
		if pinned_windows == 0 then&lt;br /&gt;
		error(&amp;quot;No pinned windows found!&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		stalled = findAllImages(&amp;quot;Forge/Forge_StartFire.png&amp;quot;);&lt;br /&gt;
			if #stalled == pinned_windows/2 then -- The /2 is because each forge has 'This' located in window twice. Can't use ThisIs.png either because idle/working forge has different words (Idle Forge shows 'This' only and Working Forge shows 'This Is'&lt;br /&gt;
			error(&amp;quot;No forges are lit!&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECT FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function KnifeBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Knife Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Knife_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShovelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Shovel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Shovel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Nails()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Nails&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Nail.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Gold Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TreatedSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	typeOfMetal = promptText(&amp;quot;Enter the metal name:&amp;quot;);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Treated Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
				refreshWindows();&lt;br /&gt;
				clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
				lsSleep(400);&lt;br /&gt;
				project_windows = clickAllText(&amp;quot;Treated&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
					sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
					lsSleep(400);&lt;br /&gt;
					local numClicked = clickAllText(typeOfMetal);&lt;br /&gt;
					if numClicked == 0 then&lt;br /&gt;
						break;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloySheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 8;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 6;&lt;br /&gt;
	name = &amp;quot;Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldFoil()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Foil&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Foil.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Metal Blue Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TinSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Tin Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Tin_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MoonSteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Moon Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Moon_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function WaterMetalStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Water Metal Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Water_Metal_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(3);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function AluminumStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Aluminum Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Aluminum_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function CopperStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronPoker()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Poker&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Poker.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Steel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function LeadChisel()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Chisel&amp;quot;;&lt;br /&gt;
	waitMinutes(6);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Chisel.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 14;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Metal Blue Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MagnesiumWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Magnesium Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Magnesium_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloyWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 16;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 5;&lt;br /&gt;
	name = &amp;quot;Silver Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Copper Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Steel Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Gold Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Bars()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #bar_button_names do&lt;br /&gt;
				if bar_button_names[i] == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, bar_button_names[i]) then&lt;br /&gt;
					image_name = bar_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
			IronBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
			GoldBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
			SilverBar();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sheeting()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #sheeting_button_names do&lt;br /&gt;
				if sheeting_button_names[i] == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
        elseif sheeting_button_names[i] == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 285;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 210;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 235;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 260;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, sheeting_button_names[i]) then&lt;br /&gt;
					image_name = sheeting_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
			LeadSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
			GoldSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
			CopperSheeting();&lt;br /&gt;
    elseif image_name == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
			TreatedSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
			OctecsAlloySheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
			SilverSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
			SteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
			GoldFoil();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
			MetalBlueSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
			TinSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
			MoonSteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
			ThothsMetalSheeting();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Straps()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #straps_button_names do&lt;br /&gt;
				if straps_button_names[i] == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 100;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, straps_button_names[i]) then&lt;br /&gt;
					image_name = straps_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
			WaterMetalStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
			IronStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
			AluminumStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
			CopperStrap();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Tools()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #tools_button_names do&lt;br /&gt;
				if tools_button_names[i] == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, tools_button_names[i]) then&lt;br /&gt;
					image_name = tools_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
			IronPoker();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
			SteelBlade();&lt;br /&gt;
		elseif image_name == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
			LeadChisel();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Wire()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #wire_button_names do&lt;br /&gt;
				if wire_button_names[i] == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, wire_button_names[i]) then&lt;br /&gt;
					image_name = wire_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
			ThothsMetalWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
			MetalBlueWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
			MagnesiumWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
			OctecsAlloyWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
			SilverWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
			CopperWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
			SteelWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
			GoldWire();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=VT Barley with Skip Water}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Edit these first 2 to adjust how much is planted in a pass&lt;br /&gt;
-- May need to adjust walk_time in Barley_common.inc if you move too slowly to keep up&lt;br /&gt;
-- grids tested: 2x2, 3x3, 5x5, 6x6 (probably need 3+ dex and 600ms walk time)&lt;br /&gt;
grid_w = 5;&lt;br /&gt;
grid_h = 5;&lt;br /&gt;
watered = {};&lt;br /&gt;
loop_count = 0;&lt;br /&gt;
skip_water = 0;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Flax_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function promptBarleyNumbers(is_plant)&lt;br /&gt;
	scale = 1.0;&lt;br /&gt;
	&lt;br /&gt;
	local z = 0;&lt;br /&gt;
	local is_done = nil;&lt;br /&gt;
	local value = nil;&lt;br /&gt;
	-- Edit box and text display&lt;br /&gt;
	while not is_done do&lt;br /&gt;
		-- Put these everywhere to make sure we don't lock up with no easy way to escape!&lt;br /&gt;
		checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Choose passes and grid size&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- lsEditBox needs a key to uniquely name this edit box&lt;br /&gt;
		--   let's just use the prompt!&lt;br /&gt;
		-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
		local y = 40;&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
		is_done, num_loops = lsEditBox(&amp;quot;passes&amp;quot;,&lt;br /&gt;
			100, y, z, 50, 30, scale, scale,&lt;br /&gt;
			0x000000ff, 1);&lt;br /&gt;
		if not tonumber(num_loops) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			num_loops = 1;&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Grid size:&amp;quot;);&lt;br /&gt;
		is_done, grid_w = lsEditBox(&amp;quot;grid&amp;quot;,&lt;br /&gt;
			100, y, z, 50, 30, scale, scale,&lt;br /&gt;
			0x000000ff, grid_w);&lt;br /&gt;
		if not tonumber(grid_w) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			grid_w = 1;&lt;br /&gt;
			grid_h = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		grid_w = tonumber(grid_w);&lt;br /&gt;
		grid_h = grid_w;&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(170, y-32, z, 100, 0xFFFFFFff, &amp;quot;OK&amp;quot;) then&lt;br /&gt;
			is_done = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if is_plant then&lt;br /&gt;
			lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will plant and harvest a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w .. &amp;quot; grid of Barley &amp;quot; .. num_loops .. &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) .. &amp;quot; raw barley and &amp;quot;.. (grid_w * grid_w * num_loops * 4) .. &amp;quot;water in jugs, doing &amp;quot; .. (grid_w*grid_w*num_loops) .. &amp;quot; harvests.&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will plant a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w .. &amp;quot; grid of Flax &amp;quot; .. num_loops .. &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) .. &amp;quot; seeds, yielding &amp;quot; .. (grid_w * grid_w * num_loops) .. &amp;quot; seeds.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 50;&lt;br /&gt;
		skip_water = lsCheckBox(10, y, z, 0xFFFFFFff, &amp;quot;Skip Rain Barrel&amp;quot;, skip_water);&lt;br /&gt;
&lt;br /&gt;
		if is_done and (not num_loops or not grid_w) then&lt;br /&gt;
			error 'Canceled';&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(10); -- Sleep just so we don't eat up all the CPU for no reason&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
  promptBarleyNumbers(1);&lt;br /&gt;
  askForWindow(&amp;quot;Make sure the plant barley window is pinned and you are in F8F8 cam zoomed in.  You may need to F12 at low resolutions or hide your chat window (if it starts planting and fails to move downward, it probably clicked on your chat window).  Will plant grid NE of current location.  'Plant all crops where you stand' must be ON.  'Right click pins/unpins a menu' must be ON.&amp;quot;);&lt;br /&gt;
  lsSleep(1000);&lt;br /&gt;
  delay_time = 2000;&lt;br /&gt;
  local x = 1;&lt;br /&gt;
  local y = 1;&lt;br /&gt;
  initGlobals();&lt;br /&gt;
  -- Find the plant barley button&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
&lt;br /&gt;
  local imgBarley = &amp;quot;barley.png&amp;quot;;&lt;br /&gt;
  local xyPlantBarley = srFindImage(imgBarley);&lt;br /&gt;
  if not xyPlantBarley then&lt;br /&gt;
    error 'Could not find plant window';&lt;br /&gt;
  end&lt;br /&gt;
  xyPlantBarley[0] = xyPlantBarley[0] + 5;&lt;br /&gt;
  &lt;br /&gt;
  -- Find the Rain Barrel&lt;br /&gt;
  if not skip_water then&lt;br /&gt;
	local imgDrawWater = &amp;quot;draw_water.png&amp;quot;;&lt;br /&gt;
	local xyDrawWater = srFindImage(imgDrawWater);&lt;br /&gt;
	if not xyDrawWater then&lt;br /&gt;
		error 'Could not find rain barrel';&lt;br /&gt;
	end &lt;br /&gt;
	xyDrawWater[0] = xyDrawWater[0] + 5;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  for loop_count=1, num_loops do&lt;br /&gt;
    local start_time = lsGetTimer();&lt;br /&gt;
    harvested = 0;&lt;br /&gt;
    -- Init watered array to 0&lt;br /&gt;
    for y=grid_h, 1, -1 do&lt;br /&gt;
      for x=grid_w, 1, -1 do &lt;br /&gt;
        watered[x+((y-1)*grid_w)] = 1;&lt;br /&gt;
      end&lt;br /&gt;
    end	&lt;br /&gt;
	  -- Local variables&lt;br /&gt;
    local xyCenter = getCenterPos();&lt;br /&gt;
    local xyBarleyMenu = {};&lt;br /&gt;
    xyBarleyMenu[0] = xyCenter[0] - 43;&lt;br /&gt;
    xyBarleyMenu[1] = xyCenter[1] + 0;&lt;br /&gt;
    local dxi=1;&lt;br /&gt;
    local dt_max=grid_w;&lt;br /&gt;
    local dt=grid_w;&lt;br /&gt;
    local dx={1, 0, -1, 0};&lt;br /&gt;
    local dy={0, -1, 0, 1};&lt;br /&gt;
    local num_at_this_length = 3;&lt;br /&gt;
    local x_pos = 0;&lt;br /&gt;
    local y_pos = 0;&lt;br /&gt;
    for y=1, grid_h do&lt;br /&gt;
      for x=1, grid_w do&lt;br /&gt;
        lsPrintln('doing ' .. x .. ',' .. y .. ' of ' .. grid_w .. ',' .. grid_h);&lt;br /&gt;
        statusScreen(&amp;quot;Planting &amp;quot; .. x .. &amp;quot;, &amp;quot; .. y);&lt;br /&gt;
        &lt;br /&gt;
        -- Plant&lt;br /&gt;
        lsPrintln('planting ' .. xyPlantBarley[0] .. ',' .. xyPlantBarley[1]);&lt;br /&gt;
        setWaitSpot(xyBarleyMenu[0], xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouseNoMove(xyPlantBarley[0], xyPlantBarley[1], 0);&lt;br /&gt;
        srSetMousePos(xyBarleyMenu[0], xyBarleyMenu[1]);&lt;br /&gt;
        waitForChange();&lt;br /&gt;
        &lt;br /&gt;
        -- Bring up menu&lt;br /&gt;
        lsPrintln('menu ' .. xyBarleyMenu[0] .. ',' .. xyBarleyMenu[1]);&lt;br /&gt;
        setWaitSpot(xyBarleyMenu[0]+5, xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouse(xyBarleyMenu[0], xyBarleyMenu[1], 0);&lt;br /&gt;
        waitForChange();&lt;br /&gt;
&lt;br /&gt;
        -- Check for window size&lt;br /&gt;
        window_w = 214;&lt;br /&gt;
        window_h = 218;&lt;br /&gt;
&lt;br /&gt;
        -- Pin&lt;br /&gt;
        lsPrintln('pin ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouseNoMove(xyBarleyMenu[0]+5, xyBarleyMenu[1]+0, 1);&lt;br /&gt;
&lt;br /&gt;
        -- Move window&lt;br /&gt;
        local pp = pinnedPos(x, y);&lt;br /&gt;
        lsPrintln('move ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1] .. ' to ' .. pp[0] .. ',' .. pp[1]);&lt;br /&gt;
        drag(xyBarleyMenu[0] + 5, xyBarleyMenu[1], pp[0], pp[1], 0);&lt;br /&gt;
		&lt;br /&gt;
        -- Add 2 water now&lt;br /&gt;
        srReadScreen();&lt;br /&gt;
        local barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
        local barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
        if not barleyAddButton or not barleyWater then&lt;br /&gt;
          -- bugfix maybe for lag.&lt;br /&gt;
          lsSleep(100);&lt;br /&gt;
          srReadScreen();&lt;br /&gt;
          barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
          barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
        srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
        watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 2;&lt;br /&gt;
&lt;br /&gt;
        -- move to next position&lt;br /&gt;
        if not ((x == grid_w) and (y == grid_h)) then&lt;br /&gt;
          lsPrintln('walking dx=' .. dx[dxi] .. ' dy=' .. dy[dxi]);&lt;br /&gt;
          x_pos = x_pos + dx[dxi];&lt;br /&gt;
          y_pos = y_pos + dy[dxi];&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0] + walk_px_x*dx[dxi], xyCenter[1] + walk_px_y*dy[dxi], 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
          dt = dt - 1;&lt;br /&gt;
          if dt == 1 then&lt;br /&gt;
            dxi = dxi + 1;&lt;br /&gt;
            num_at_this_length = num_at_this_length - 1;&lt;br /&gt;
            if num_at_this_length == 0 then&lt;br /&gt;
              dt_max = dt_max - 1;&lt;br /&gt;
              num_at_this_length = 2;&lt;br /&gt;
            end&lt;br /&gt;
            if dxi == 5 then&lt;br /&gt;
              dxi = 1;&lt;br /&gt;
            end&lt;br /&gt;
            dt = dt_max;&lt;br /&gt;
          else&lt;br /&gt;
            lsPrintln('skipping walking, on last leg');&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        checkBreak();&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    statusScreen(&amp;quot;Refocusing windows...&amp;quot;);&lt;br /&gt;
    -- Bring windows to front&lt;br /&gt;
    for y=grid_h, 1, -1 do&lt;br /&gt;
      for x=grid_w, 1, -1 do &lt;br /&gt;
        local rp = refreshPosUp(x, y);&lt;br /&gt;
        srClickMouseNoMove(rp[0], rp[1], 0);&lt;br /&gt;
        lsSleep(refocus_click_time);&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again&lt;br /&gt;
  &lt;br /&gt;
    -- Barley has been planted, pinned and refocused	&lt;br /&gt;
 &lt;br /&gt;
    while 1 do&lt;br /&gt;
      for y=1, grid_h do&lt;br /&gt;
        for x=1, grid_w do &lt;br /&gt;
          local pp = pinnedPos(x, y);&lt;br /&gt;
          local rp = refreshPosDown(x, y);&lt;br /&gt;
          srClickMouse(rp[0],rp[1]);&lt;br /&gt;
          lsSleep(200);&lt;br /&gt;
          srReadScreen();&lt;br /&gt;
          local leftBar = srFindImageInRange(&amp;quot;barleyBarLeft.png&amp;quot;, pp[0], pp[1] - 50, 120, 100);&lt;br /&gt;
          if leftBar then&lt;br /&gt;
            leftBar[0] = leftBar[0] + 4;&lt;br /&gt;
          end&lt;br /&gt;
          local rightBar = srFindImageInRange(&amp;quot;barleyBarRight.png&amp;quot;, pp[0], pp[1] - 50, 220, 200);&lt;br /&gt;
          if rightBar then&lt;br /&gt;
            rightBar[0] = rightBar[0] + 1;&lt;br /&gt;
          end&lt;br /&gt;
          if not rightBar then&lt;br /&gt;
            error 'Could not find rightbar';&lt;br /&gt;
          end&lt;br /&gt;
          local barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
          if not barleyWater then error 'Could not find water button.'; end&lt;br /&gt;
          local barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
          if not barleyAddButton then error 'Could not find add button. Ended at batch '; end&lt;br /&gt;
&lt;br /&gt;
          while 1 do&lt;br /&gt;
            if leftBar then&lt;br /&gt;
              waterBlue = 0;&lt;br /&gt;
              if rightBar then&lt;br /&gt;
                if barleyWater then&lt;br /&gt;
                  srReadScreen();&lt;br /&gt;
                  for i=leftBar[0],rightBar[0] do&lt;br /&gt;
                    pxval = srReadPixelFromBuffer(i, barleyWater[1]);&lt;br /&gt;
                    b = (math.floor(pxval/256) % 256);&lt;br /&gt;
                    if b &amp;gt; 220 then&lt;br /&gt;
                      waterBlue = waterBlue + 1;&lt;br /&gt;
                    end&lt;br /&gt;
                  end&lt;br /&gt;
                  waterBlue = (waterBlue/(rightBar[0]-leftBar[0])*100);&lt;br /&gt;
                end&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
            checkBreak();&lt;br /&gt;
			&lt;br /&gt;
            if watered[x+((y-1)*grid_w)] &amp;lt; 5 then&lt;br /&gt;
              statusScreen(&amp;quot;Watering &amp;quot; .. x .. &amp;quot;,&amp;quot; .. y .. &amp;quot;step &amp;quot; .. watered[x+((y-1)*grid_w)] .. &amp;quot;.&amp;quot;);&lt;br /&gt;
              if waterBlue &amp;lt; 90 then&lt;br /&gt;
                if watered[x+((y-1)*grid_w)] == 0 then&lt;br /&gt;
                end&lt;br /&gt;
                srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
                watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 1;&lt;br /&gt;
                lsSleep(100);&lt;br /&gt;
                break;&lt;br /&gt;
              end&lt;br /&gt;
            else&lt;br /&gt;
              statusScreen(&amp;quot;Harvesting &amp;quot; .. x .. &amp;quot;,&amp;quot; .. y .. &amp;quot;.&amp;quot;);&lt;br /&gt;
              if waterBlue &amp;lt; 90 then&lt;br /&gt;
                srClickMouseNoMove(pp[0]+90, pp[1]+90);&lt;br /&gt;
                lsSleep(100);&lt;br /&gt;
                srClickMouseNoMove(pp[0]+180, pp[1]-25);&lt;br /&gt;
                if watered[x+((y-1)*grid_w)] == 5 then&lt;br /&gt;
                  harvested = 1;&lt;br /&gt;
                end&lt;br /&gt;
                break;&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if harvested == 0 then&lt;br /&gt;
        statusScreen(&amp;quot;Refocusing windows...&amp;quot;);&lt;br /&gt;
        -- Bring windows to front&lt;br /&gt;
        for y=grid_h, 1, -1 do&lt;br /&gt;
          for x=grid_w, 1, -1 do &lt;br /&gt;
            local rp = refreshPosUp(x, y);&lt;br /&gt;
            srClickMouseNoMove(rp[0], rp[1], 0);&lt;br /&gt;
            lsSleep(refocus_click_time);&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again&lt;br /&gt;
      else&lt;br /&gt;
        for x=1, x_pos do&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
        end&lt;br /&gt;
        for x=1, -y_pos do&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
        end&lt;br /&gt;
        break;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    local end_time = lsGetTimer();&lt;br /&gt;
    statusScreen(&amp;quot;Time taken: &amp;quot; .. (end_time-start_time)/1000);&lt;br /&gt;
    -- move X and Y every 4 batches, but skip the Y move every 20th batch&lt;br /&gt;
    if loop_count % 4 == 0 and loop_count % 5 == 0 then&lt;br /&gt;
      doCorrectiveMove('x')&lt;br /&gt;
    elseif loop_count % 4 == 0 then&lt;br /&gt;
      doCorrectiveMove('xy')&lt;br /&gt;
    end &lt;br /&gt;
    --doStashWH(num_loops*grid_w*grid_w);&lt;br /&gt;
    --doRefillWater(4*numloops*grid_w*grid_w);&lt;br /&gt;
    doStashWH(grid_w*grid_w);&lt;br /&gt;
	if not skip_water then&lt;br /&gt;
		doRefillWater(4*grid_w*grid_w);&lt;br /&gt;
	end&lt;br /&gt;
    debug('end of batch #' .. loop_count)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doCorrectiveMove(move)&lt;br /&gt;
  statusScreen(&amp;quot;Moving to correct for drift&amp;quot;);&lt;br /&gt;
  local xyCenter = getCenterPos();&lt;br /&gt;
  if move == 'xy' or move == 'x' then&lt;br /&gt;
    srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0);&lt;br /&gt;
    lsSleep(walk_time);&lt;br /&gt;
  end&lt;br /&gt;
  if move == 'xy' or move == 'y' then&lt;br /&gt;
    srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
    lsSleep(walk_time);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doStashWH(qty)&lt;br /&gt;
  local wh = srFindImage(&amp;quot;stash.png&amp;quot;);&lt;br /&gt;
  if wh then&lt;br /&gt;
    srClickMouseNoMove(wh[0]+9,wh[1]+9)&lt;br /&gt;
    debug('found stash, clicked it');&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local insects = srFindImage(&amp;quot;stashInsectEllipsis.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    local stashes = srFindImage(&amp;quot;stashBarley.png&amp;quot;);&lt;br /&gt;
    if not stashes then&lt;br /&gt;
      error &amp;quot;no barley to stash&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    srClickMouseNoMove(stashes[0],stashes[1]);&lt;br /&gt;
&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
    -- stash exactly the right amount by number so we don't lose our seed barley&lt;br /&gt;
    srKeyEvent(qty);&lt;br /&gt;
    srKeyEvent('\n');&lt;br /&gt;
&lt;br /&gt;
    if insects then&lt;br /&gt;
      srClickMouseNoMove(wh[0]+9,wh[1]+9)&lt;br /&gt;
      lsSleep(250);&lt;br /&gt;
      srReadScreen();&lt;br /&gt;
&lt;br /&gt;
      local insects = srFindImage(&amp;quot;stashInsectEllipsis.png&amp;quot;);&lt;br /&gt;
      if insects then&lt;br /&gt;
        srClickMouseNoMove(insects[0],insects[1]);&lt;br /&gt;
        lsSleep(250);&lt;br /&gt;
&lt;br /&gt;
        srReadScreen();&lt;br /&gt;
        insects = srFindImage(&amp;quot;stashAllTheInsects.png&amp;quot;);&lt;br /&gt;
        if not insects then&lt;br /&gt;
          error &amp;quot;found insects but couldn't stash them&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        srClickMouseNoMove(insects[0],insects[1]);&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doRefillWater(qty)&lt;br /&gt;
  debug(&amp;quot;in refill&amp;quot;)&lt;br /&gt;
  local rb = srFindImage(&amp;quot;draw_water.png&amp;quot;);&lt;br /&gt;
  if rb then&lt;br /&gt;
    srClickMouseNoMove(rb[0]+5,rb[1]+5)&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
    srKeyEvent(qty);&lt;br /&gt;
    srKeyEvent('\n');&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function debug(msg)&lt;br /&gt;
  if 0 then&lt;br /&gt;
    statusScreen(msg);&lt;br /&gt;
    lsSleep(1000);&lt;br /&gt;
  end &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Hackling Rake Fixed}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Hackling Rake - Original macro by Bardoth (T6) - Revised by Cegaiel&lt;br /&gt;
-- Runs the Hacking Rake (or Flax Comb). Monitors the skills tab and only clicks when its all black.&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
assert(loadfile(&amp;quot;luaScripts/common.inc&amp;quot;))();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
Hackling Rake v1.0 (by Bardoth - Revised by Cegaiel) --&lt;br /&gt;
Pin Hacking Rake or Flax Comb window up and have Rotten Flax in you inventory. Make sure your rake is on the first step before starting. You MUST have Skills window open and everything from Strength to Perception skill should be visible.&lt;br /&gt;
Press Shift to continue.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
do_click_refresh = 1;&lt;br /&gt;
do_click_refresh_when_end_red = 1;&lt;br /&gt;
improved_rake = 0;&lt;br /&gt;
num_flax = 0;&lt;br /&gt;
num_loops = 0;&lt;br /&gt;
per_rake = 10;&lt;br /&gt;
&lt;br /&gt;
function promptRakeNumbers()&lt;br /&gt;
	scale = 1.0;&lt;br /&gt;
	&lt;br /&gt;
	local z = 0;&lt;br /&gt;
	local is_done = nil;&lt;br /&gt;
	local value = nil;&lt;br /&gt;
	-- Edit box and text display&lt;br /&gt;
	while not is_done do&lt;br /&gt;
		-- Put these everywhere to make sure we don't lock up with no easy way to escape!&lt;br /&gt;
		checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Hackling Raking Setup&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- lsEditBox needs a key to uniquely name this edit box&lt;br /&gt;
		--   let's just use the prompt!&lt;br /&gt;
		-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
		local y = 40;&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;How much flax: &amp;quot;);&lt;br /&gt;
		is_done, num_flax = lsEditBox(&amp;quot;passes&amp;quot;,&lt;br /&gt;
			160, y, z, 70, 30, scale, scale,&lt;br /&gt;
			0x000000ff, 1);&lt;br /&gt;
		if not tonumber(num_flax) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			num_flax = 1;&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
		improved_rake = lsCheckBox(10, y, z, 0xFFFFFFff, &amp;quot;Improved Rake&amp;quot;, improved_rake);&lt;br /&gt;
		&lt;br /&gt;
		if improved_rake then&lt;br /&gt;
			per_rake = 30;&lt;br /&gt;
		else&lt;br /&gt;
			per_rake = 10;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		num_loops = math.floor(num_flax / per_rake);&lt;br /&gt;
		&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(170, y+32, z, 100, 0xFFFFFFff, &amp;quot;OK&amp;quot;) then&lt;br /&gt;
			is_done = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will attempt to rake &amp;quot; .. num_flax .. &amp;quot; rotten flax, requiring &amp;quot; .. num_loops .. &amp;quot; cycles.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		if is_done and (not num_flax) then&lt;br /&gt;
			error 'Canceled';&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(10); -- Sleep just so we don't eat up all the CPU for no reason&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	promptRakeNumbers();&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
&lt;br /&gt;
	local step = 1;&lt;br /&gt;
	local task = &amp;quot;&amp;quot;;&lt;br /&gt;
	local task_text = &amp;quot;&amp;quot;;&lt;br /&gt;
	local warn_small_font=nil;&lt;br /&gt;
	local warn_large_font=nil;&lt;br /&gt;
	local loop_count=1;&lt;br /&gt;
	local straw = 0;&lt;br /&gt;
	local tow = 0;&lt;br /&gt;
	local lint = 0;&lt;br /&gt;
	local clean = 0;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	while num_loops do&lt;br /&gt;
		checkBreak();&lt;br /&gt;
		lsSleep(250);&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		stats_black2 = nil;&lt;br /&gt;
		stats_black3 = nil;&lt;br /&gt;
		&lt;br /&gt;
		stats_black = srFindImage(&amp;quot;AllStats-Black.png&amp;quot;);&lt;br /&gt;
		if not stats_black then&lt;br /&gt;
			stats_black2 = srFindImage(&amp;quot;AllStats-Black2.png&amp;quot;);&lt;br /&gt;
			if not stats_black2 then&lt;br /&gt;
				stats_black3 = srFindImage(&amp;quot;AllStats-Black3.png&amp;quot;);&lt;br /&gt;
				if stats_black3 then&lt;br /&gt;
					warn_large_font = true;&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				warn_small_font = true;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local warning=&amp;quot;&amp;quot;;&lt;br /&gt;
		if warn_small_font then&lt;br /&gt;
			warning = &amp;quot;Your font size appears to be smaller than the default, many macros here will not work correctly.&amp;quot;;&lt;br /&gt;
		elseif warn_large_font then&lt;br /&gt;
			warning = &amp;quot;Your font size appears to be larger than the default, many macros here will not work correctly.&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if step == 1 then&lt;br /&gt;
			task = &amp;quot;Separate Rotten Flax&amp;quot;;&lt;br /&gt;
			task_text = &amp;quot;Separate Straw&amp;quot;;&lt;br /&gt;
		elseif step == 2 then&lt;br /&gt;
			task = &amp;quot;Continue processing Rotten&amp;quot;;&lt;br /&gt;
			task_text = &amp;quot;Separate Tow&amp;quot;;&lt;br /&gt;
		elseif step == 3 then&lt;br /&gt;
			task = &amp;quot;Continue processing&amp;quot;;&lt;br /&gt;
			task_text = &amp;quot;Refine the Lint&amp;quot;;&lt;br /&gt;
		elseif step == 4 then&lt;br /&gt;
			task = &amp;quot;Clean the&amp;quot;;&lt;br /&gt;
			task_text = &amp;quot;Clean the Rake&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if not stats_black and not stats_black2 and not stats_black3 then&lt;br /&gt;
			sleepWithStatus(1200, &amp;quot;Next Step: &amp;quot; .. step .. &amp;quot;/4 - &amp;quot; .. task_text .. &amp;quot;\n----------------------------------------------\n1) Straw Removed: &amp;quot; .. straw ..&amp;quot;/&amp;quot; .. num_loops*per_rake .. &amp;quot;\n2) Tow Seperated: &amp;quot; .. tow .. &amp;quot;/&amp;quot; .. num_loops*per_rake .. &amp;quot;\n3) Lint Refined: &amp;quot; .. lint .. &amp;quot;/&amp;quot; .. num_loops*per_rake .. &amp;quot;\n4) Cleanings: &amp;quot; .. clean .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;\n----------------------------------------------\nFlax Processed: &amp;quot; .. (loop_count-1)*per_rake .. &amp;quot;\nFlax Remaining: &amp;quot; .. num_flax - ((loop_count-1)*per_rake) .. &amp;quot;\n&amp;quot; .. warning);&lt;br /&gt;
		elseif loop_count &amp;gt;= num_loops then&lt;br /&gt;
			num_loops = nil;&lt;br /&gt;
		else&lt;br /&gt;
			&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(50);&lt;br /&gt;
			clickAllText(&amp;quot;This Is&amp;quot;);&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
		&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(50);&lt;br /&gt;
			clickAllText(task);&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
			if step == 1 then&lt;br /&gt;
				straw = straw + per_rake;&lt;br /&gt;
			elseif step == 2 then&lt;br /&gt;
				tow = tow + per_rake;&lt;br /&gt;
			elseif step == 3 then&lt;br /&gt;
				lint = lint + per_rake;&lt;br /&gt;
			elseif&lt;br /&gt;
				step == 4 then&lt;br /&gt;
				clean = clean + 1;			&lt;br /&gt;
				step = 0;&lt;br /&gt;
				loop_count= loop_count +1;&lt;br /&gt;
			end&lt;br /&gt;
			step = step + 1;&lt;br /&gt;
			sleepWithStatus(300, &amp;quot;Refreshing screen&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(50);&lt;br /&gt;
			clickAllText(&amp;quot;This Is&amp;quot;);&lt;br /&gt;
			lsSleep(200);&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
	if num_loops == nil then&lt;br /&gt;
			sleepWithStatus(5000, &amp;quot;ALL DONE!\n----------------------------------------------\n1) Straw Removed: &amp;quot; .. straw ..&amp;quot;/&amp;quot; .. clean*10 .. &amp;quot;\n2) Tow Seperated: &amp;quot; .. tow .. &amp;quot;/&amp;quot; .. clean*10 .. &amp;quot;\n3) Lint Refined: &amp;quot; .. lint .. &amp;quot;/&amp;quot; .. clean*10 .. &amp;quot;\n4) Cleanings: &amp;quot; .. clean .. &amp;quot;/&amp;quot; .. clean .. &amp;quot;\n----------------------------------------------\nFlax Processed: &amp;quot; .. (loop_count-1)*10 .. &amp;quot;\nFlax Remaining: &amp;quot; .. num_flax - ((loop_count-1)*10));&lt;br /&gt;
&lt;br /&gt;
	lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225672</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225672"/>
		<updated>2013-01-04T17:00:42Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
Cuttable Gem donation box next to Guild Hall. Please donate as many Cuttable Sunstone as you can spare!&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 48 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 28 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet |24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 12 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 16 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 800 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 6720 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 10000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 14000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 15600 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 6720 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 5212 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 8602 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 2340 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 701 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 10784 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 24600 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 8412 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 1200 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 736 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 64 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 64 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* OneBanana: 3 Carrot, 1 Cabbage, 6 Red Sand&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Lenala: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 6 Red Sand&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Chemistry_Laboratory&amp;diff=225619</id>
		<title>Chemistry Laboratory</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Chemistry_Laboratory&amp;diff=225619"/>
		<updated>2013-01-03T20:48:24Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Powdered Gems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:BuildingInfo|image=SL_Chemlab.png|size=19x19|where=[[where::Compound]]&lt;br /&gt;
|description=Basic chemistry lab for making simple chemicals/compounds, and can be upgrade for Advanced Chemistry}}&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
This building becomes available after you have learned the [[requires::Basic Chemistry]] tech.  &lt;br /&gt;
&lt;br /&gt;
== Cost ==&lt;br /&gt;
* 50 [[requires::Glass Jar|Glass Jars]]&lt;br /&gt;
* 20 [[requires::Glass Rods]]&lt;br /&gt;
* 900 [[requires::Boards]]&lt;br /&gt;
* 214 [[requires::Nails]]&lt;br /&gt;
* 19 [[requires::Rope]]&lt;br /&gt;
* 10 [[requires::Wooden Peg]]&lt;br /&gt;
* 5 [[requires::Copper Sheeting]]&lt;br /&gt;
* 1 [[requires::Wooden Pestle]]&lt;br /&gt;
* 1 [[requires::Clay Mortars]]&lt;br /&gt;
&lt;br /&gt;
Built in a [[Compound]]. Uses 19x19 cells.&lt;br /&gt;
&lt;br /&gt;
=== Upgrades ===&lt;br /&gt;
''''Tech required:''' [[Advanced Chemistry 2]]&lt;br /&gt;
&lt;br /&gt;
==== Level 1 ====&lt;br /&gt;
''&amp;quot;Upgrade this bench to allow advanced reactions&amp;quot;''&lt;br /&gt;
* 1 [[requires::Brass Plate]]&lt;br /&gt;
* 20 [[requires::Glass Jars]]&lt;br /&gt;
* 1 [[requires::Thermometer]]&lt;br /&gt;
* 4 [[requires::Bolt]]&lt;br /&gt;
* 8 [[requires::Washer]]&lt;br /&gt;
* 4 [[requires::Magnesium Wire]]&lt;br /&gt;
* 20 [[requires::Steel Wire]]&lt;br /&gt;
* 1 [[requires::Stainless Steel Pot]]&lt;br /&gt;
&lt;br /&gt;
==== Level 2 ====&lt;br /&gt;
This upgrade is only visible if you have an Essential Macerator in your inventory&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;Upgrade this bench to allow essence creation&amp;quot;''&lt;br /&gt;
* 1 [[requires::Essential Macerator]]&lt;br /&gt;
**Requires:&lt;br /&gt;
**1 [[requires::Marble Mortar]]&lt;br /&gt;
**4 [[requires::Linen]]&lt;br /&gt;
**1 [[requires::Reagent Bottle]]&lt;br /&gt;
**1 [[requires::Thermometer]]&lt;br /&gt;
**1 [[requires::Thoth's Metal Sheeting]]&lt;br /&gt;
**2 [[requires::Bolt]]&lt;br /&gt;
**2 [[requires::Washer]]&lt;br /&gt;
* 10 [[requires::Glass Pipe]]&lt;br /&gt;
* 4 [[requires::Tin Sheeting]]&lt;br /&gt;
* 4 [[requires::Bolt]]&lt;br /&gt;
* 8 [[requires::Washer]]&lt;br /&gt;
* 20 [[requires::Steel Wire]]&lt;br /&gt;
* 20 [[requires::Gold Wire]]&lt;br /&gt;
&lt;br /&gt;
==== Alcohol Lamp ====&lt;br /&gt;
The [[requires::Alcohol Lamp]] must first be assembled using the Skills-&amp;gt;Assembly menu. It requires:&lt;br /&gt;
*1 [[Reagent Bottle]]&lt;br /&gt;
*1 [[Small Gear]]&lt;br /&gt;
*1 [[Gold Wire]]&lt;br /&gt;
*1 [[Rope]]&lt;br /&gt;
&lt;br /&gt;
==== Glassware ====&lt;br /&gt;
Install one each of the following:&lt;br /&gt;
* [[requires::Thistle Tube]]&lt;br /&gt;
* [[requires::Test Tube]]&lt;br /&gt;
* [[requires::Distillation Coil]]&lt;br /&gt;
* [[requires::Beaker]]&lt;br /&gt;
* [[requires::Florence Flask]]&lt;br /&gt;
&lt;br /&gt;
Chemistry Labs require a level 1 upgrade to be able to install glassware.&lt;br /&gt;
&lt;br /&gt;
Glassware of specific quality will allow for the lab to be calibrated.  Calibrated labs give increased powdered gem yield, increased litmus strip solution, and require fewer essences per essential compound.&lt;br /&gt;
&lt;br /&gt;
Calibration level 2 requires the glassware to have an average quality exactly divisible by 100 (rounded down), and an average quality above 7000.&lt;br /&gt;
&lt;br /&gt;
For calibration level 3 the average quality of the glassware must be exactly 8000 or 9000, rounded down. (The sum of the glassware quality must be between 40000 and 40004, or 45000 and 45004)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Additional Information====&lt;br /&gt;
You will not get any upgrade stuff back when you salvage an upgraded Chem Lab at salvage level 7.&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
=== Products ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product !! Qty Made !! Recipe !! Upgrades Reqd !! Timer&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Arsenic]] || 1 || 1 [[Set's Compound Extract]], 100 [[Lead Ore]], 1 [[Acid]] || None || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Gunpowder]] || 10 || 1 [[Charcoal]], 1 [[Sulfur]], 10 [[Saltpeter]] || None || [[Constitution]]: 12 sec&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Ink]] || 20 || 5 [[Metal_Salts|Salts of Iron]], 5 [[Charcoal]], 20 [[Oil]] || None || [[Constitution]]: 7 sec&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Papyrus Strip]] || 8 || 1 [[Papyrus Paper]] || Level 1 || None&lt;br /&gt;
|- &lt;br /&gt;
| [[produces::Gear Oil]] || 6 || 100 [[Oil]], 50 [[Petroleum]], 5 [[Compound Extract]] (Maat, Set, or Osiris) || Level 1 + Glassware || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Potash Ointment]] || 6 || 50 [[Water in Jugs]], 25 [[Acid]], 5 [[Compound Extract]] (Geb, Maat, or Set) || Level 1 + Glassware || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Lime Emulsion]] || 6 || 50 [[Water in Jugs]], 10 [[Bauxite]], 5 [[Compound Extract]] (Maat, Set, or Osiris)) || Level 1 + Glassware || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Gem Glue]] || 1 || 10 [[Water in Jugs]], 25 [[Gypsum]], 10 [[Mandibular Glue]] 5 [[Compound Extract]] (Set, Osiris or Thoth)) || Level 1 + Glassware || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Explosives]] ||  || 50 [[Gunpowder]], 10 [[Aluminum Powder]], 2 [[Compound Extract]] (Set, Osiris, or Thoth) || Level 1 + Glassware || [[Constitution]]&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Essences]] || varies || Varies || Level 2 + Alcohol Lamp || 2 teppyminutes&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Essential Compound]] || 1 || 5 unique [[Essences]] || Level 2 || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Compound Extract]] || 3 || 1 [[Essential Compound]] with specific properties || Level 2 || None&lt;br /&gt;
|-&lt;br /&gt;
| [[produces::Litmus Test]] || 22 drops || Powdered Gems and other stuff, see [[Litmus Test]] || Level 2 || Complicated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Powdered Gems ===&lt;br /&gt;
&lt;br /&gt;
Used for [[Test of the Ritual Tattoo]]&lt;br /&gt;
&lt;br /&gt;
''You must have the gems in your inventory in order to see the option on the lab.''&lt;br /&gt;
&lt;br /&gt;
Powdered gem yield is multiplied by (1 + the precise calibration level of the lab).  At calibration 3 (maximum known), yields are multiplied by 4.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Gem Size !! Quantity Made&lt;br /&gt;
|-&lt;br /&gt;
| Huge || 7&lt;br /&gt;
|-&lt;br /&gt;
| Large || 4&lt;br /&gt;
|-&lt;br /&gt;
| Medium || 2&lt;br /&gt;
|-&lt;br /&gt;
| Small || 1&lt;br /&gt;
|-&lt;br /&gt;
| Cuttable || 1&lt;br /&gt;
|-&lt;br /&gt;
| Cut Gem (Any Cut) || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Buildings]]&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225596</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225596"/>
		<updated>2013-01-03T16:14:49Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Selune's updated VT Macros. If you know how to upload changes to TaleScripts, PLEASE contact me! Thanks!&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Paint Reaction Template}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=VT Paint Watch with Reset}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Fixed VT Crematory macro}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- crematory.lua v1.2 by Tallow&lt;br /&gt;
--&lt;br /&gt;
-- Runs one or more crematories. Automatically discovers button&lt;br /&gt;
-- configuration on its own and loads/unloads materials.&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
assert(loadfile(&amp;quot;luaScripts/common.inc&amp;quot;))();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Crematory v1.2 (by Tallow) --&lt;br /&gt;
  Automatically runs one or more crematories.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
wmText = &amp;quot;Tap control on Crematories to open and pin.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
OPP = 0;&lt;br /&gt;
SAME_UP = 1;&lt;br /&gt;
SAME_DOWN = 2;&lt;br /&gt;
&lt;br /&gt;
tolerance = 6500;&lt;br /&gt;
tickTime = 1000;&lt;br /&gt;
maxWait = 1000;&lt;br /&gt;
longWait = 500;&lt;br /&gt;
shortWait = 30;&lt;br /&gt;
&lt;br /&gt;
colOffsets = {&lt;br /&gt;
  {35-40-3, 204-182},&lt;br /&gt;
  {71-40-3, 204-182},&lt;br /&gt;
  {107-40-3, 204-182},&lt;br /&gt;
  {143-40-3, 204-182},&lt;br /&gt;
  {179-40-3, 204-182},&lt;br /&gt;
  {215-40-3, 204-182},&lt;br /&gt;
  {251-40-3, 204-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
colWidth = 36-35+6;&lt;br /&gt;
colHeight = 323-204;&lt;br /&gt;
colMiddle = 57;&lt;br /&gt;
&lt;br /&gt;
buttonOffsets = {&lt;br /&gt;
  {49-40, 333-182},&lt;br /&gt;
  {89-40, 333-182},&lt;br /&gt;
  {129-40, 333-182},&lt;br /&gt;
  {169-40, 333-182},&lt;br /&gt;
  {209-40, 333-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
buttonWidth = 78-49;&lt;br /&gt;
buttonHeight = 354-333;&lt;br /&gt;
buttonClick = 10;&lt;br /&gt;
&lt;br /&gt;
limestoneOffset = 0;&lt;br /&gt;
leeksOffset = 16;&lt;br /&gt;
flaxOffset = 32;&lt;br /&gt;
papyrusOffset = 48;&lt;br /&gt;
woodOffset = 64;&lt;br /&gt;
&lt;br /&gt;
load_flax = true;&lt;br /&gt;
load_papyrus = true;&lt;br /&gt;
load_leeks = true;&lt;br /&gt;
load_limestone = true;&lt;br /&gt;
&lt;br /&gt;
currentPass = 1;&lt;br /&gt;
passCount = 5;&lt;br /&gt;
&lt;br /&gt;
windows = nil;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- doit&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
  windowManager(&amp;quot;Crematory Setup&amp;quot;, wmText);&lt;br /&gt;
  unpinOnExit(runCrematories);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function runCrematories()&lt;br /&gt;
  promptLoad();&lt;br /&gt;
  askForFocus();&lt;br /&gt;
  for i=1,passCount do&lt;br /&gt;
    currentPass = i;&lt;br /&gt;
    takeAll();&lt;br /&gt;
    loadAll();&lt;br /&gt;
    start();&lt;br /&gt;
    local is_done = false;&lt;br /&gt;
    while not is_done do&lt;br /&gt;
      tick();&lt;br /&gt;
      is_done = checkDone();&lt;br /&gt;
    end&lt;br /&gt;
    sleepWithStatus(longWait*5, updateMessage(&amp;quot;Waiting to take&amp;quot;));&lt;br /&gt;
  end&lt;br /&gt;
  takeAll();&lt;br /&gt;
  lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- addWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function addWindow(vPos)&lt;br /&gt;
  local newWindow = {&lt;br /&gt;
    origin = {vPos[0], vPos[1]},&lt;br /&gt;
    ups = {nil, nil, nil, nil, nil},&lt;br /&gt;
    downs = {nil, nil, nil, nil, nil},&lt;br /&gt;
    dirs = {OPP, OPP, OPP, OPP, OPP},&lt;br /&gt;
    double = {false, false, false, false, false, false, false},&lt;br /&gt;
    probe = 0,&lt;br /&gt;
    lastPos = nil;&lt;br /&gt;
    lastDiff = nil;&lt;br /&gt;
    buttonState = {true, true, true, true, true},&lt;br /&gt;
    sameCount = 0,&lt;br /&gt;
    done = false&lt;br /&gt;
  };&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, newWindow.origin[1] - 31,&lt;br /&gt;
                                   newWindow.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    newWindow.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  else&lt;br /&gt;
    error &amp;quot;No fire button. Do you have Advanced Chemistry?&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  windows[#windows + 1] = newWindow;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- resetWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function resetWindow(current)&lt;br /&gt;
  local vLime = srFindImageInRange(&amp;quot;crem-lime.png&amp;quot;, current.origin[1] - 20,&lt;br /&gt;
                                   current.origin[2] - 20, 100, 100,&lt;br /&gt;
				   tolerance);&lt;br /&gt;
  if (not vLime) then&lt;br /&gt;
     error &amp;quot;Could not find origin again.&amp;quot;;&lt;br /&gt;
  end&lt;br /&gt;
  if ((vLime[0] ~= current.origin[1]) or&lt;br /&gt;
      (vLime[1] ~= current.origin[2])) then&lt;br /&gt;
     error(&amp;quot;Window moved from (&amp;quot; .. current.origin[1] .. &amp;quot;, &amp;quot; ..&lt;br /&gt;
       current.origin[2] .. &amp;quot;) to (&amp;quot; .. vLime[0] .. &amp;quot;, &amp;quot; .. vLime[1] .. &amp;quot;)&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, current.origin[1] - 31,&lt;br /&gt;
                                   current.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    current.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  end&lt;br /&gt;
  if current.probe &amp;lt; 6 then&lt;br /&gt;
    current.probe = 0;&lt;br /&gt;
    current.ups = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.downs = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.dirs = {OPP, OPP, OPP, OPP, OPP};&lt;br /&gt;
    current.double = {false, false, false, false, false, false, false};&lt;br /&gt;
  end&lt;br /&gt;
  current.lastPos = nil;&lt;br /&gt;
  current.lastDiff = nil;&lt;br /&gt;
  current.buttonState = {true, true, true, true, true};&lt;br /&gt;
  current.sameCount = 0;&lt;br /&gt;
  current.done = false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- start&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function start()&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Waiting to begin&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  if windows then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      resetWindow(windows[i]);&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    windows = {};&lt;br /&gt;
    local posList = findAllImages(&amp;quot;crem-lime.png&amp;quot;);&lt;br /&gt;
    if #posList == 0 then&lt;br /&gt;
      error &amp;quot;No crematories found&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    for i=1,#posList do&lt;br /&gt;
      addWindow(posList[i]);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if windows[i].fire then&lt;br /&gt;
      safeClick(windows[i].fire[1] + 5, windows[i].fire[2] + 5);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Finding my Chi&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    windows[i].lastPos = findPoints(windows[i]);&lt;br /&gt;
    if not windows[i].lastPos then&lt;br /&gt;
      windows[i].done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tick&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tick()&lt;br /&gt;
  sleepWithStatus(tickTime, updateMessage(&amp;quot;Tending Crematory&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    tickWindow(windows[i]);&lt;br /&gt;
  end&lt;br /&gt;
  checkBreak();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tickWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tickWindow(current)&lt;br /&gt;
  if not current.done then&lt;br /&gt;
    local points = findPoints(current);&lt;br /&gt;
    if points then&lt;br /&gt;
      probeNext(current, points);&lt;br /&gt;
      if current.probe &amp;gt; 5 then&lt;br /&gt;
        toggleButtons(current, points, current.buttonState);&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkDone&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkDone()&lt;br /&gt;
  local all_done = true;&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if not windows[i].done then&lt;br /&gt;
      local done = srFindImageInRange(&amp;quot;crem-done.png&amp;quot;, windows[i].origin[1] - 3,&lt;br /&gt;
                                      windows[i].origin[2] - 15, 40, 40,&lt;br /&gt;
                                      tolerance);&lt;br /&gt;
      if done then&lt;br /&gt;
        windows[i].done = true;&lt;br /&gt;
      else&lt;br /&gt;
        all_done = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return all_done;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findPoints&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findPoints(current)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    local offset = {current.origin[1] + colOffsets[i][1],&lt;br /&gt;
                    current.origin[2] + colOffsets[i][2]};&lt;br /&gt;
    local point = srFindImageInRange(&amp;quot;crem-point.png&amp;quot;, offset[1],&lt;br /&gt;
                                     offset[2] - 5,&lt;br /&gt;
                                     colWidth, colHeight + 10, tolerance);&lt;br /&gt;
    if point then&lt;br /&gt;
      result[i] = point[1] - colOffsets[i][2] - current.origin[2] - colMiddle;&lt;br /&gt;
    else&lt;br /&gt;
      result = nil;&lt;br /&gt;
      break;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findDiffs&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findDiffs(current, points)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  local all_zero = true;&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    result[i] = points[i] - current.lastPos[i];&lt;br /&gt;
    if result[i] ~= 0 then&lt;br /&gt;
      all_zero = false;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if all_zero then&lt;br /&gt;
    result = nil;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- probeNext&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function probeNext(current, points)&lt;br /&gt;
  local diffs = findDiffs(current, points);&lt;br /&gt;
  checkSame(current, diffs);&lt;br /&gt;
  if diffs and current.probe &amp;lt; 6 then&lt;br /&gt;
    if current.probe &amp;gt; 0 then&lt;br /&gt;
      for i=1,7 do&lt;br /&gt;
        if current.lastDiffs[i] &amp;lt; 0 and diffs[i] &amp;gt; 0 then&lt;br /&gt;
          if current.ups[current.probe] then&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_UP;&lt;br /&gt;
          else&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        elseif current.lastDiffs[i] &amp;gt; 0 and diffs[i] &amp;lt; 0 then&lt;br /&gt;
          if current.downs[current.probe] then&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_DOWN;&lt;br /&gt;
          else&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if current.ups[current.probe] and current.downs[current.probe] then&lt;br /&gt;
        current.double[current.ups[current.probe]] = true;&lt;br /&gt;
        current.double[current.downs[current.probe]] = true;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    current.lastPos = points;&lt;br /&gt;
    current.lastDiffs = diffs;&lt;br /&gt;
    current.probe = current.probe + 1;&lt;br /&gt;
    if current.probe &amp;lt;= 5 then&lt;br /&gt;
      local newProbe = not current.buttonState[current.probe];&lt;br /&gt;
      local clickX = current.origin[1] + buttonOffsets[current.probe][1] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
      local clickY = current.origin[2] + buttonOffsets[current.probe][2] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
&lt;br /&gt;
      current.buttonState[current.probe] = newProbe;&lt;br /&gt;
      safeClick(clickX, clickY);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkSame&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkSame(current, diffs)&lt;br /&gt;
  if diffs then&lt;br /&gt;
    local all_same = true;&lt;br /&gt;
    for i=1,#diffs do&lt;br /&gt;
      if diffs[i] ~= 0 then&lt;br /&gt;
        all_same = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if all_same then&lt;br /&gt;
      current.sameCount = current.sameCount + 1;&lt;br /&gt;
    else&lt;br /&gt;
      current.sameCount = 0;&lt;br /&gt;
    end&lt;br /&gt;
    if current.sameCount &amp;gt; 10 then&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- toggleButtons&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function toggleButtons(current, points, buttonState)&lt;br /&gt;
  local balance = getBalance(points, current.double);&lt;br /&gt;
  for i=1,5 do&lt;br /&gt;
    local up = getPointValue(points, current.double, current.ups[i],&lt;br /&gt;
                             balance);&lt;br /&gt;
    local down = getPointValue(points, current.double, current.downs[i],&lt;br /&gt;
                               balance);&lt;br /&gt;
    local goalState = ((up &amp;gt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                       (up &amp;gt;= 0 and down &amp;gt;= 0 and up &amp;gt; down) or&lt;br /&gt;
                       (up &amp;lt;= 0 and down &amp;lt;= 0 and up &amp;gt; down));&lt;br /&gt;
    if current.dirs[i] == SAME_UP then&lt;br /&gt;
      goalState = ((up &amp;gt;= 0 and down &amp;gt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;gt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;lt;= down));&lt;br /&gt;
    elseif current.dirs[i] == SAME_DOWN then&lt;br /&gt;
      goalState = ((up &amp;lt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;lt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;gt;= down));&lt;br /&gt;
    end&lt;br /&gt;
    local goalStateStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if goalState then&lt;br /&gt;
      goalStateStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    local buttonStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if buttonState[i] then&lt;br /&gt;
      buttonStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if (goalState and not buttonState[i]) or&lt;br /&gt;
       (not goalState and buttonState[i]) then&lt;br /&gt;
      safeClick(current.origin[1] + buttonOffsets[i][1] + buttonClick,&lt;br /&gt;
		current.origin[2] + buttonOffsets[i][2] + buttonClick);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
      buttonState[i] = goalState;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getBalance&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getBalance(points, double)&lt;br /&gt;
  local above = 0;&lt;br /&gt;
  local below = 0;&lt;br /&gt;
  for i=1,#points do&lt;br /&gt;
    if points[i] &amp;gt; 0 and double[i] then&lt;br /&gt;
      below = below + 1;&lt;br /&gt;
    elseif points[i] &amp;lt; 0 and double[i] then&lt;br /&gt;
      above = above + 1;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if above &amp;gt;= 3 then&lt;br /&gt;
    result = -5;&lt;br /&gt;
  elseif below &amp;gt;= 3 then&lt;br /&gt;
    result = 5;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getPointValue&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getPointValue(points, double, index, balance)&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if index then&lt;br /&gt;
    result = points[index];&lt;br /&gt;
    if not double[index] then&lt;br /&gt;
      result = result + balance;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- takeAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function takeAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local updateList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#updateList do&lt;br /&gt;
    safeClick(updateList[i][0], updateList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local takeList = findAllImages(&amp;quot;crem-take.png&amp;quot;);&lt;br /&gt;
  for i=1,#takeList do&lt;br /&gt;
    safeClick(takeList[i][0] + 5, takeList[i][1] + 5);&lt;br /&gt;
    sleepWithStatus(shortWait*2, &amp;quot;Waiting for Everything&amp;quot;);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local all = waitForImage(&amp;quot;Everything.png&amp;quot;, maxWait, &amp;quot;Grabbing Everything&amp;quot;);&lt;br /&gt;
    if all then&lt;br /&gt;
      safeClick(all[0] + 5, all[1] + 5);&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(shortWait*2);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- promptLoad&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function promptLoad()&lt;br /&gt;
  scale = 1.0;&lt;br /&gt;
  local z = 0;&lt;br /&gt;
  local is_done = nil;&lt;br /&gt;
  while not is_done do&lt;br /&gt;
    checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
    lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Configure&amp;quot;);&lt;br /&gt;
    local y = 60;&lt;br /&gt;
&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xffffffff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
    is_done, passCount = lsEditBox(&amp;quot;passes&amp;quot;, 110, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                   0x000000ff, 5);&lt;br /&gt;
    if not tonumber(passCount) then&lt;br /&gt;
      is_done = false;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      passCount = 1;&lt;br /&gt;
    end&lt;br /&gt;
    y = y + 48;&lt;br /&gt;
&lt;br /&gt;
    load_flax = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Flax&amp;quot;,&lt;br /&gt;
                           load_flax);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_papyrus = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Papyrus&amp;quot;,&lt;br /&gt;
                              load_papyrus);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_leeks = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Leeks&amp;quot;,&lt;br /&gt;
                            load_leeks);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_limestone = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Limestone&amp;quot;,&lt;br /&gt;
                                load_limestone);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xd0d0d0ff,&lt;br /&gt;
                   &amp;quot;Make sure each crematory is pinned and empty.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if lsButtonText(10, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;Begin&amp;quot;) then&lt;br /&gt;
        is_done = 1;&lt;br /&gt;
    end&lt;br /&gt;
    if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff,&lt;br /&gt;
                    &amp;quot;End script&amp;quot;) then&lt;br /&gt;
      error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    lsDoFrame();&lt;br /&gt;
    lsSleep(shortWait);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local posList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    safeClick(posList[i][0], posList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  posList = findAllImages(&amp;quot;crem-fire.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    loadSingle(posList[i], woodOffset, &amp;quot;Wood&amp;quot;);&lt;br /&gt;
    if load_flax then&lt;br /&gt;
      loadSingle(posList[i], flaxOffset, &amp;quot;Flax&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_papyrus then&lt;br /&gt;
      loadSingle(posList[i], papyrusOffset, &amp;quot;Papyrus&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_leeks then&lt;br /&gt;
      loadSingle(posList[i], leeksOffset, &amp;quot;Leeks&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_limestone then&lt;br /&gt;
      loadSingle(posList[i], limestoneOffset, &amp;quot;Limestone&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadSingle&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadSingle(pos, offset, type)&lt;br /&gt;
  sleepWithStatus(200, &amp;quot;Waiting to load&amp;quot;);&lt;br /&gt;
  safeClick(pos[0]+5, pos[1]+5+16);&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  local limePos = waitForImage(&amp;quot;crem-limestone.png&amp;quot;, maxWait,&lt;br /&gt;
			       &amp;quot;Loading &amp;quot; .. type .. &amp;quot; Into Crematory&amp;quot;);&lt;br /&gt;
  if limePos then&lt;br /&gt;
    safeClick(limePos[0] + 5, limePos[1] + 5 + offset);&lt;br /&gt;
    lsSleep(100);&lt;br /&gt;
    local maxPos = waitForImage(&amp;quot;crem-max.png&amp;quot;, maxWait,&lt;br /&gt;
				&amp;quot;Adding Maximum Amount&amp;quot;);&lt;br /&gt;
    if maxPos then&lt;br /&gt;
      safeClick(maxPos[0]+5, maxPos[1]+5);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  sleepWithStatus(shortWait, &amp;quot;Waiting for load to complete&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- updateMessage&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function updateMessage(message)&lt;br /&gt;
  local result = &amp;quot;Pass &amp;quot; .. currentPass .. &amp;quot; / &amp;quot; .. passCount .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
  result = result .. message .. &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  if message == &amp;quot;Tending Crematory&amp;quot; then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      local status = &amp;quot;Buttons: &amp;quot;;&lt;br /&gt;
      for j=1,5 do&lt;br /&gt;
	if windows[i].dirs[j] == OPP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	elseif windows[i].dirs[j] == SAME_UP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;+&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. getDir(&amp;quot;-&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	end&lt;br /&gt;
	if j ~= 5 then&lt;br /&gt;
	  status = status .. &amp;quot;, &amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
      end&lt;br /&gt;
      result = result .. &amp;quot;\n&amp;quot; .. status;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getDir(sign, number)&lt;br /&gt;
  local result = &amp;quot;&amp;quot;;&lt;br /&gt;
  if number then&lt;br /&gt;
    result = sign .. number&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=Forge.inc to add Treated Metal Sheeting}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;Knife Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Shovel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Nails&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Bars&amp;quot;,&lt;br /&gt;
&amp;quot;Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Straps&amp;quot;,&lt;br /&gt;
&amp;quot;Tools&amp;quot;,&lt;br /&gt;
&amp;quot;Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bar_button_names = {&lt;br /&gt;
&amp;quot;Iron Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Bar&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
sheeting_button_names = {&lt;br /&gt;
&amp;quot;Lead Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Foil&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Treated Metal Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Tin Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Moon Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Thoths Metal Sheeting&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
straps_button_names = {&lt;br /&gt;
&amp;quot;Water Metal Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Iron Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Aluminum Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Strap&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
tools_button_names = {&lt;br /&gt;
&amp;quot;Iron Poker&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Chisel&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
wire_button_names = {&lt;br /&gt;
&amp;quot;Thoths Metal Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Magnesium Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECTS 'SUPPORTING' FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function waitMinutes(minutes)&lt;br /&gt;
-- Teppy Minute is 66 seconds or 66000 ms&lt;br /&gt;
-- Add a 3 second delay (3000 ms) in case of lag&lt;br /&gt;
&lt;br /&gt;
wait_delay = 3000; -- Extra delay on top of Teppy Time, for lag purposes. Default is 3000&lt;br /&gt;
wait = (minutes * 66000) + wait_delay;&lt;br /&gt;
askForFocus(); -- Pause to allow user to focus back to ATITD (if they checked the Pause for Focus Box), before starting project.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doneGUI(totalPasses)&lt;br /&gt;
wait = 5000;  -- Gives a 5 second delay to review the GUI stats, before quitting/returing to Main Menu.&lt;br /&gt;
clickAllImages(&amp;quot;This.png&amp;quot;); -- Refresh the screen. Update forge window so we know how much charcoal is currently in each forge before next project&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. totalPasses .. &amp;quot;/&amp;quot; .. totalPasses .. &amp;quot;] ALL DONE!\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
runForge(); -- Return to/Display Main Menu&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function waitGUI(pass)&lt;br /&gt;
	--If any forge menus shows the Forge_StartFire.png - refreshWindows() function, then display the stalledMessage in the GUI. Suggests its not lit (or out of charcoal)&lt;br /&gt;
	if #stalled &amp;gt; 0 then&lt;br /&gt;
	stalledMessage = &amp;quot;\n[&amp;quot; .. #stalled .. &amp;quot;] Forges STALLED (Needs Lit)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
	stalledMessage = &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. pass .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;] Total Passes\n----------------------------------------------\n[&amp;quot; .. batch .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per forge\n[&amp;quot; .. project_windows .. &amp;quot;] Forges working&amp;quot; .. stalledMessage .. &amp;quot;\n----------------------------------------------\n[&amp;quot; .. batch*project_windows .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per pass\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
made = made + (batch*project_windows);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function refreshWindows()&lt;br /&gt;
	checkBreak();&lt;br /&gt;
	pinned_windows = clickAllImages(&amp;quot;This.png&amp;quot;);&lt;br /&gt;
	lsSleep(400);&lt;br /&gt;
		if pinned_windows == 0 then&lt;br /&gt;
		error(&amp;quot;No pinned windows found!&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		stalled = findAllImages(&amp;quot;Forge/Forge_StartFire.png&amp;quot;);&lt;br /&gt;
			if #stalled == pinned_windows/2 then -- The /2 is because each forge has 'This' located in window twice. Can't use ThisIs.png either because idle/working forge has different words (Idle Forge shows 'This' only and Working Forge shows 'This Is'&lt;br /&gt;
			error(&amp;quot;No forges are lit!&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECT FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function KnifeBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Knife Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Knife_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShovelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Shovel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Shovel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Nails()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Nails&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Nail.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Gold Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TreatedSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	typeOfMetal = promptText(&amp;quot;Enter the metal name:&amp;quot;);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Treated Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
				refreshWindows();&lt;br /&gt;
				clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
				lsSleep(400);&lt;br /&gt;
				project_windows = clickAllText(&amp;quot;Treated&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
					sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
					lsSleep(400);&lt;br /&gt;
					local numClicked = clickAllText(typeOfMetal);&lt;br /&gt;
					if numClicked == 0 then&lt;br /&gt;
						break;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloySheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 8;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 6;&lt;br /&gt;
	name = &amp;quot;Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldFoil()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Foil&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Foil.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Metal Blue Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TinSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Tin Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Tin_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MoonSteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Moon Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Moon_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function WaterMetalStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Water Metal Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Water_Metal_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(3);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function AluminumStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Aluminum Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Aluminum_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function CopperStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronPoker()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Poker&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Poker.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Steel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function LeadChisel()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Chisel&amp;quot;;&lt;br /&gt;
	waitMinutes(6);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Chisel.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 14;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Metal Blue Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MagnesiumWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Magnesium Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Magnesium_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloyWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 16;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 5;&lt;br /&gt;
	name = &amp;quot;Silver Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Copper Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Steel Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Gold Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Bars()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #bar_button_names do&lt;br /&gt;
				if bar_button_names[i] == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, bar_button_names[i]) then&lt;br /&gt;
					image_name = bar_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
			IronBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
			GoldBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
			SilverBar();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sheeting()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #sheeting_button_names do&lt;br /&gt;
				if sheeting_button_names[i] == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
        elseif sheeting_button_names[i] == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 285;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 210;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 235;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 260;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, sheeting_button_names[i]) then&lt;br /&gt;
					image_name = sheeting_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
			LeadSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
			GoldSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
			CopperSheeting();&lt;br /&gt;
    elseif image_name == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
			TreatedSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
			OctecsAlloySheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
			SilverSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
			SteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
			GoldFoil();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
			MetalBlueSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
			TinSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
			MoonSteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
			ThothsMetalSheeting();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Straps()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #straps_button_names do&lt;br /&gt;
				if straps_button_names[i] == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 100;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, straps_button_names[i]) then&lt;br /&gt;
					image_name = straps_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
			WaterMetalStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
			IronStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
			AluminumStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
			CopperStrap();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Tools()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #tools_button_names do&lt;br /&gt;
				if tools_button_names[i] == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, tools_button_names[i]) then&lt;br /&gt;
					image_name = tools_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
			IronPoker();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
			SteelBlade();&lt;br /&gt;
		elseif image_name == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
			LeadChisel();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Wire()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #wire_button_names do&lt;br /&gt;
				if wire_button_names[i] == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, wire_button_names[i]) then&lt;br /&gt;
					image_name = wire_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
			ThothsMetalWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
			MetalBlueWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
			MagnesiumWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
			OctecsAlloyWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
			SilverWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
			CopperWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
			SteelWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
			GoldWire();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=VT Barley with Skip Water}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Edit these first 2 to adjust how much is planted in a pass&lt;br /&gt;
-- May need to adjust walk_time in Barley_common.inc if you move too slowly to keep up&lt;br /&gt;
-- grids tested: 2x2, 3x3, 5x5, 6x6 (probably need 3+ dex and 600ms walk time)&lt;br /&gt;
grid_w = 5;&lt;br /&gt;
grid_h = 5;&lt;br /&gt;
watered = {};&lt;br /&gt;
loop_count = 0;&lt;br /&gt;
skip_water = 0;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Flax_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function promptBarleyNumbers(is_plant)&lt;br /&gt;
	scale = 1.0;&lt;br /&gt;
	&lt;br /&gt;
	local z = 0;&lt;br /&gt;
	local is_done = nil;&lt;br /&gt;
	local value = nil;&lt;br /&gt;
	-- Edit box and text display&lt;br /&gt;
	while not is_done do&lt;br /&gt;
		-- Put these everywhere to make sure we don't lock up with no easy way to escape!&lt;br /&gt;
		checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Choose passes and grid size&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- lsEditBox needs a key to uniquely name this edit box&lt;br /&gt;
		--   let's just use the prompt!&lt;br /&gt;
		-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
		local y = 40;&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
		is_done, num_loops = lsEditBox(&amp;quot;passes&amp;quot;,&lt;br /&gt;
			100, y, z, 50, 30, scale, scale,&lt;br /&gt;
			0x000000ff, 1);&lt;br /&gt;
		if not tonumber(num_loops) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			num_loops = 1;&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Grid size:&amp;quot;);&lt;br /&gt;
		is_done, grid_w = lsEditBox(&amp;quot;grid&amp;quot;,&lt;br /&gt;
			100, y, z, 50, 30, scale, scale,&lt;br /&gt;
			0x000000ff, grid_w);&lt;br /&gt;
		if not tonumber(grid_w) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			grid_w = 1;&lt;br /&gt;
			grid_h = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		grid_w = tonumber(grid_w);&lt;br /&gt;
		grid_h = grid_w;&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(170, y-32, z, 100, 0xFFFFFFff, &amp;quot;OK&amp;quot;) then&lt;br /&gt;
			is_done = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if is_plant then&lt;br /&gt;
			lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will plant and harvest a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w .. &amp;quot; grid of Barley &amp;quot; .. num_loops .. &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) .. &amp;quot; raw barley and &amp;quot;.. (grid_w * grid_w * num_loops * 4) .. &amp;quot;water in jugs, doing &amp;quot; .. (grid_w*grid_w*num_loops) .. &amp;quot; harvests.&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will plant a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w .. &amp;quot; grid of Flax &amp;quot; .. num_loops .. &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) .. &amp;quot; seeds, yielding &amp;quot; .. (grid_w * grid_w * num_loops) .. &amp;quot; seeds.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 50;&lt;br /&gt;
		skip_water = lsCheckBox(10, y, z, 0xFFFFFFff, &amp;quot;Skip Rain Barrel&amp;quot;, skip_water);&lt;br /&gt;
&lt;br /&gt;
		if is_done and (not num_loops or not grid_w) then&lt;br /&gt;
			error 'Canceled';&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(10); -- Sleep just so we don't eat up all the CPU for no reason&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
  promptBarleyNumbers(1);&lt;br /&gt;
  askForWindow(&amp;quot;Make sure the plant barley window is pinned and you are in F8F8 cam zoomed in.  You may need to F12 at low resolutions or hide your chat window (if it starts planting and fails to move downward, it probably clicked on your chat window).  Will plant grid NE of current location.  'Plant all crops where you stand' must be ON.  'Right click pins/unpins a menu' must be ON.&amp;quot;);&lt;br /&gt;
  lsSleep(1000);&lt;br /&gt;
  delay_time = 2000;&lt;br /&gt;
  local x = 1;&lt;br /&gt;
  local y = 1;&lt;br /&gt;
  initGlobals();&lt;br /&gt;
  -- Find the plant barley button&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
&lt;br /&gt;
  local imgBarley = &amp;quot;barley.png&amp;quot;;&lt;br /&gt;
  local xyPlantBarley = srFindImage(imgBarley);&lt;br /&gt;
  if not xyPlantBarley then&lt;br /&gt;
    error 'Could not find plant window';&lt;br /&gt;
  end&lt;br /&gt;
  xyPlantBarley[0] = xyPlantBarley[0] + 5;&lt;br /&gt;
  &lt;br /&gt;
  -- Find the Rain Barrel&lt;br /&gt;
  if not skip_water then&lt;br /&gt;
	local imgDrawWater = &amp;quot;draw_water.png&amp;quot;;&lt;br /&gt;
	local xyDrawWater = srFindImage(imgDrawWater);&lt;br /&gt;
	if not xyDrawWater then&lt;br /&gt;
		error 'Could not find rain barrel';&lt;br /&gt;
	end &lt;br /&gt;
	xyDrawWater[0] = xyDrawWater[0] + 5;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  for loop_count=1, num_loops do&lt;br /&gt;
    local start_time = lsGetTimer();&lt;br /&gt;
    harvested = 0;&lt;br /&gt;
    -- Init watered array to 0&lt;br /&gt;
    for y=grid_h, 1, -1 do&lt;br /&gt;
      for x=grid_w, 1, -1 do &lt;br /&gt;
        watered[x+((y-1)*grid_w)] = 1;&lt;br /&gt;
      end&lt;br /&gt;
    end	&lt;br /&gt;
	  -- Local variables&lt;br /&gt;
    local xyCenter = getCenterPos();&lt;br /&gt;
    local xyBarleyMenu = {};&lt;br /&gt;
    xyBarleyMenu[0] = xyCenter[0] - 43;&lt;br /&gt;
    xyBarleyMenu[1] = xyCenter[1] + 0;&lt;br /&gt;
    local dxi=1;&lt;br /&gt;
    local dt_max=grid_w;&lt;br /&gt;
    local dt=grid_w;&lt;br /&gt;
    local dx={1, 0, -1, 0};&lt;br /&gt;
    local dy={0, -1, 0, 1};&lt;br /&gt;
    local num_at_this_length = 3;&lt;br /&gt;
    local x_pos = 0;&lt;br /&gt;
    local y_pos = 0;&lt;br /&gt;
    for y=1, grid_h do&lt;br /&gt;
      for x=1, grid_w do&lt;br /&gt;
        lsPrintln('doing ' .. x .. ',' .. y .. ' of ' .. grid_w .. ',' .. grid_h);&lt;br /&gt;
        statusScreen(&amp;quot;Planting &amp;quot; .. x .. &amp;quot;, &amp;quot; .. y);&lt;br /&gt;
        &lt;br /&gt;
        -- Plant&lt;br /&gt;
        lsPrintln('planting ' .. xyPlantBarley[0] .. ',' .. xyPlantBarley[1]);&lt;br /&gt;
        setWaitSpot(xyBarleyMenu[0], xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouseNoMove(xyPlantBarley[0], xyPlantBarley[1], 0);&lt;br /&gt;
        srSetMousePos(xyBarleyMenu[0], xyBarleyMenu[1]);&lt;br /&gt;
        waitForChange();&lt;br /&gt;
        &lt;br /&gt;
        -- Bring up menu&lt;br /&gt;
        lsPrintln('menu ' .. xyBarleyMenu[0] .. ',' .. xyBarleyMenu[1]);&lt;br /&gt;
        setWaitSpot(xyBarleyMenu[0]+5, xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouse(xyBarleyMenu[0], xyBarleyMenu[1], 0);&lt;br /&gt;
        waitForChange();&lt;br /&gt;
&lt;br /&gt;
        -- Check for window size&lt;br /&gt;
        window_w = 214;&lt;br /&gt;
        window_h = 218;&lt;br /&gt;
&lt;br /&gt;
        -- Pin&lt;br /&gt;
        lsPrintln('pin ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouseNoMove(xyBarleyMenu[0]+5, xyBarleyMenu[1]+0, 1);&lt;br /&gt;
&lt;br /&gt;
        -- Move window&lt;br /&gt;
        local pp = pinnedPos(x, y);&lt;br /&gt;
        lsPrintln('move ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1] .. ' to ' .. pp[0] .. ',' .. pp[1]);&lt;br /&gt;
        drag(xyBarleyMenu[0] + 5, xyBarleyMenu[1], pp[0], pp[1], 0);&lt;br /&gt;
		&lt;br /&gt;
        -- Add 2 water now&lt;br /&gt;
        srReadScreen();&lt;br /&gt;
        local barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
        local barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
        if not barleyAddButton or not barleyWater then&lt;br /&gt;
          -- bugfix maybe for lag.&lt;br /&gt;
          lsSleep(100);&lt;br /&gt;
          srReadScreen();&lt;br /&gt;
          barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
          barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
        srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
        watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 2;&lt;br /&gt;
&lt;br /&gt;
        -- move to next position&lt;br /&gt;
        if not ((x == grid_w) and (y == grid_h)) then&lt;br /&gt;
          lsPrintln('walking dx=' .. dx[dxi] .. ' dy=' .. dy[dxi]);&lt;br /&gt;
          x_pos = x_pos + dx[dxi];&lt;br /&gt;
          y_pos = y_pos + dy[dxi];&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0] + walk_px_x*dx[dxi], xyCenter[1] + walk_px_y*dy[dxi], 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
          dt = dt - 1;&lt;br /&gt;
          if dt == 1 then&lt;br /&gt;
            dxi = dxi + 1;&lt;br /&gt;
            num_at_this_length = num_at_this_length - 1;&lt;br /&gt;
            if num_at_this_length == 0 then&lt;br /&gt;
              dt_max = dt_max - 1;&lt;br /&gt;
              num_at_this_length = 2;&lt;br /&gt;
            end&lt;br /&gt;
            if dxi == 5 then&lt;br /&gt;
              dxi = 1;&lt;br /&gt;
            end&lt;br /&gt;
            dt = dt_max;&lt;br /&gt;
          else&lt;br /&gt;
            lsPrintln('skipping walking, on last leg');&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        checkBreak();&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    statusScreen(&amp;quot;Refocusing windows...&amp;quot;);&lt;br /&gt;
    -- Bring windows to front&lt;br /&gt;
    for y=grid_h, 1, -1 do&lt;br /&gt;
      for x=grid_w, 1, -1 do &lt;br /&gt;
        local rp = refreshPosUp(x, y);&lt;br /&gt;
        srClickMouseNoMove(rp[0], rp[1], 0);&lt;br /&gt;
        lsSleep(refocus_click_time);&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again&lt;br /&gt;
  &lt;br /&gt;
    -- Barley has been planted, pinned and refocused	&lt;br /&gt;
 &lt;br /&gt;
    while 1 do&lt;br /&gt;
      for y=1, grid_h do&lt;br /&gt;
        for x=1, grid_w do &lt;br /&gt;
          local pp = pinnedPos(x, y);&lt;br /&gt;
          local rp = refreshPosDown(x, y);&lt;br /&gt;
          srClickMouse(rp[0],rp[1]);&lt;br /&gt;
          lsSleep(200);&lt;br /&gt;
          srReadScreen();&lt;br /&gt;
          local leftBar = srFindImageInRange(&amp;quot;barleyBarLeft.png&amp;quot;, pp[0], pp[1] - 50, 120, 100);&lt;br /&gt;
          if leftBar then&lt;br /&gt;
            leftBar[0] = leftBar[0] + 4;&lt;br /&gt;
          end&lt;br /&gt;
          local rightBar = srFindImageInRange(&amp;quot;barleyBarRight.png&amp;quot;, pp[0], pp[1] - 50, 220, 200);&lt;br /&gt;
          if rightBar then&lt;br /&gt;
            rightBar[0] = rightBar[0] + 1;&lt;br /&gt;
          end&lt;br /&gt;
          if not rightBar then&lt;br /&gt;
            error 'Could not find rightbar';&lt;br /&gt;
          end&lt;br /&gt;
          local barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
          if not barleyWater then error 'Could not find water button.'; end&lt;br /&gt;
          local barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
          if not barleyAddButton then error 'Could not find add button. Ended at batch '; end&lt;br /&gt;
&lt;br /&gt;
          while 1 do&lt;br /&gt;
            if leftBar then&lt;br /&gt;
              waterBlue = 0;&lt;br /&gt;
              if rightBar then&lt;br /&gt;
                if barleyWater then&lt;br /&gt;
                  srReadScreen();&lt;br /&gt;
                  for i=leftBar[0],rightBar[0] do&lt;br /&gt;
                    pxval = srReadPixelFromBuffer(i, barleyWater[1]);&lt;br /&gt;
                    b = (math.floor(pxval/256) % 256);&lt;br /&gt;
                    if b &amp;gt; 220 then&lt;br /&gt;
                      waterBlue = waterBlue + 1;&lt;br /&gt;
                    end&lt;br /&gt;
                  end&lt;br /&gt;
                  waterBlue = (waterBlue/(rightBar[0]-leftBar[0])*100);&lt;br /&gt;
                end&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
            checkBreak();&lt;br /&gt;
			&lt;br /&gt;
            if watered[x+((y-1)*grid_w)] &amp;lt; 5 then&lt;br /&gt;
              statusScreen(&amp;quot;Watering &amp;quot; .. x .. &amp;quot;,&amp;quot; .. y .. &amp;quot;step &amp;quot; .. watered[x+((y-1)*grid_w)] .. &amp;quot;.&amp;quot;);&lt;br /&gt;
              if waterBlue &amp;lt; 90 then&lt;br /&gt;
                if watered[x+((y-1)*grid_w)] == 0 then&lt;br /&gt;
                end&lt;br /&gt;
                srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
                watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 1;&lt;br /&gt;
                lsSleep(100);&lt;br /&gt;
                break;&lt;br /&gt;
              end&lt;br /&gt;
            else&lt;br /&gt;
              statusScreen(&amp;quot;Harvesting &amp;quot; .. x .. &amp;quot;,&amp;quot; .. y .. &amp;quot;.&amp;quot;);&lt;br /&gt;
              if waterBlue &amp;lt; 90 then&lt;br /&gt;
                srClickMouseNoMove(pp[0]+90, pp[1]+90);&lt;br /&gt;
                lsSleep(100);&lt;br /&gt;
                srClickMouseNoMove(pp[0]+180, pp[1]-25);&lt;br /&gt;
                if watered[x+((y-1)*grid_w)] == 5 then&lt;br /&gt;
                  harvested = 1;&lt;br /&gt;
                end&lt;br /&gt;
                break;&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if harvested == 0 then&lt;br /&gt;
        statusScreen(&amp;quot;Refocusing windows...&amp;quot;);&lt;br /&gt;
        -- Bring windows to front&lt;br /&gt;
        for y=grid_h, 1, -1 do&lt;br /&gt;
          for x=grid_w, 1, -1 do &lt;br /&gt;
            local rp = refreshPosUp(x, y);&lt;br /&gt;
            srClickMouseNoMove(rp[0], rp[1], 0);&lt;br /&gt;
            lsSleep(refocus_click_time);&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again&lt;br /&gt;
      else&lt;br /&gt;
        for x=1, x_pos do&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
        end&lt;br /&gt;
        for x=1, -y_pos do&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
        end&lt;br /&gt;
        break;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    local end_time = lsGetTimer();&lt;br /&gt;
    statusScreen(&amp;quot;Time taken: &amp;quot; .. (end_time-start_time)/1000);&lt;br /&gt;
    -- move X and Y every 4 batches, but skip the Y move every 20th batch&lt;br /&gt;
    if loop_count % 4 == 0 and loop_count % 5 == 0 then&lt;br /&gt;
      doCorrectiveMove('x')&lt;br /&gt;
    elseif loop_count % 4 == 0 then&lt;br /&gt;
      doCorrectiveMove('xy')&lt;br /&gt;
    end &lt;br /&gt;
    --doStashWH(num_loops*grid_w*grid_w);&lt;br /&gt;
    --doRefillWater(4*numloops*grid_w*grid_w);&lt;br /&gt;
    doStashWH(grid_w*grid_w);&lt;br /&gt;
	if not skip_water then&lt;br /&gt;
		doRefillWater(4*grid_w*grid_w);&lt;br /&gt;
	end&lt;br /&gt;
    debug('end of batch #' .. loop_count)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doCorrectiveMove(move)&lt;br /&gt;
  statusScreen(&amp;quot;Moving to correct for drift&amp;quot;);&lt;br /&gt;
  local xyCenter = getCenterPos();&lt;br /&gt;
  if move == 'xy' or move == 'x' then&lt;br /&gt;
    srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0);&lt;br /&gt;
    lsSleep(walk_time);&lt;br /&gt;
  end&lt;br /&gt;
  if move == 'xy' or move == 'y' then&lt;br /&gt;
    srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
    lsSleep(walk_time);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doStashWH(qty)&lt;br /&gt;
  local wh = srFindImage(&amp;quot;stash.png&amp;quot;);&lt;br /&gt;
  if wh then&lt;br /&gt;
    srClickMouseNoMove(wh[0]+9,wh[1]+9)&lt;br /&gt;
    debug('found stash, clicked it');&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local insects = srFindImage(&amp;quot;stashInsectEllipsis.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    local stashes = srFindImage(&amp;quot;stashBarley.png&amp;quot;);&lt;br /&gt;
    if not stashes then&lt;br /&gt;
      error &amp;quot;no barley to stash&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    srClickMouseNoMove(stashes[0],stashes[1]);&lt;br /&gt;
&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
    -- stash exactly the right amount by number so we don't lose our seed barley&lt;br /&gt;
    srKeyEvent(qty);&lt;br /&gt;
    srKeyEvent('\n');&lt;br /&gt;
&lt;br /&gt;
    if insects then&lt;br /&gt;
      srClickMouseNoMove(wh[0]+9,wh[1]+9)&lt;br /&gt;
      lsSleep(250);&lt;br /&gt;
      srReadScreen();&lt;br /&gt;
&lt;br /&gt;
      local insects = srFindImage(&amp;quot;stashInsectEllipsis.png&amp;quot;);&lt;br /&gt;
      if insects then&lt;br /&gt;
        srClickMouseNoMove(insects[0],insects[1]);&lt;br /&gt;
        lsSleep(250);&lt;br /&gt;
&lt;br /&gt;
        srReadScreen();&lt;br /&gt;
        insects = srFindImage(&amp;quot;stashAllTheInsects.png&amp;quot;);&lt;br /&gt;
        if not insects then&lt;br /&gt;
          error &amp;quot;found insects but couldn't stash them&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        srClickMouseNoMove(insects[0],insects[1]);&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doRefillWater(qty)&lt;br /&gt;
  debug(&amp;quot;in refill&amp;quot;)&lt;br /&gt;
  local rb = srFindImage(&amp;quot;draw_water.png&amp;quot;);&lt;br /&gt;
  if rb then&lt;br /&gt;
    srClickMouseNoMove(rb[0]+5,rb[1]+5)&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
    srKeyEvent(qty);&lt;br /&gt;
    srKeyEvent('\n');&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function debug(msg)&lt;br /&gt;
  if 0 then&lt;br /&gt;
    statusScreen(msg);&lt;br /&gt;
    lsSleep(1000);&lt;br /&gt;
  end &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225595</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225595"/>
		<updated>2013-01-03T16:06:33Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paint Reaction Template:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modified VT PaintWatch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed Crematory Macro:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- crematory.lua v1.2 by Tallow&lt;br /&gt;
--&lt;br /&gt;
-- Runs one or more crematories. Automatically discovers button&lt;br /&gt;
-- configuration on its own and loads/unloads materials.&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
assert(loadfile(&amp;quot;luaScripts/common.inc&amp;quot;))();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Crematory v1.2 (by Tallow) --&lt;br /&gt;
  Automatically runs one or more crematories.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
wmText = &amp;quot;Tap control on Crematories to open and pin.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
OPP = 0;&lt;br /&gt;
SAME_UP = 1;&lt;br /&gt;
SAME_DOWN = 2;&lt;br /&gt;
&lt;br /&gt;
tolerance = 6500;&lt;br /&gt;
tickTime = 1000;&lt;br /&gt;
maxWait = 1000;&lt;br /&gt;
longWait = 500;&lt;br /&gt;
shortWait = 30;&lt;br /&gt;
&lt;br /&gt;
colOffsets = {&lt;br /&gt;
  {35-40-3, 204-182},&lt;br /&gt;
  {71-40-3, 204-182},&lt;br /&gt;
  {107-40-3, 204-182},&lt;br /&gt;
  {143-40-3, 204-182},&lt;br /&gt;
  {179-40-3, 204-182},&lt;br /&gt;
  {215-40-3, 204-182},&lt;br /&gt;
  {251-40-3, 204-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
colWidth = 36-35+6;&lt;br /&gt;
colHeight = 323-204;&lt;br /&gt;
colMiddle = 57;&lt;br /&gt;
&lt;br /&gt;
buttonOffsets = {&lt;br /&gt;
  {49-40, 333-182},&lt;br /&gt;
  {89-40, 333-182},&lt;br /&gt;
  {129-40, 333-182},&lt;br /&gt;
  {169-40, 333-182},&lt;br /&gt;
  {209-40, 333-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
buttonWidth = 78-49;&lt;br /&gt;
buttonHeight = 354-333;&lt;br /&gt;
buttonClick = 10;&lt;br /&gt;
&lt;br /&gt;
limestoneOffset = 0;&lt;br /&gt;
leeksOffset = 16;&lt;br /&gt;
flaxOffset = 32;&lt;br /&gt;
papyrusOffset = 48;&lt;br /&gt;
woodOffset = 64;&lt;br /&gt;
&lt;br /&gt;
load_flax = true;&lt;br /&gt;
load_papyrus = true;&lt;br /&gt;
load_leeks = true;&lt;br /&gt;
load_limestone = true;&lt;br /&gt;
&lt;br /&gt;
currentPass = 1;&lt;br /&gt;
passCount = 5;&lt;br /&gt;
&lt;br /&gt;
windows = nil;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- doit&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
  windowManager(&amp;quot;Crematory Setup&amp;quot;, wmText);&lt;br /&gt;
  unpinOnExit(runCrematories);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function runCrematories()&lt;br /&gt;
  promptLoad();&lt;br /&gt;
  askForFocus();&lt;br /&gt;
  for i=1,passCount do&lt;br /&gt;
    currentPass = i;&lt;br /&gt;
    takeAll();&lt;br /&gt;
    loadAll();&lt;br /&gt;
    start();&lt;br /&gt;
    local is_done = false;&lt;br /&gt;
    while not is_done do&lt;br /&gt;
      tick();&lt;br /&gt;
      is_done = checkDone();&lt;br /&gt;
    end&lt;br /&gt;
    sleepWithStatus(longWait*5, updateMessage(&amp;quot;Waiting to take&amp;quot;));&lt;br /&gt;
  end&lt;br /&gt;
  takeAll();&lt;br /&gt;
  lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- addWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function addWindow(vPos)&lt;br /&gt;
  local newWindow = {&lt;br /&gt;
    origin = {vPos[0], vPos[1]},&lt;br /&gt;
    ups = {nil, nil, nil, nil, nil},&lt;br /&gt;
    downs = {nil, nil, nil, nil, nil},&lt;br /&gt;
    dirs = {OPP, OPP, OPP, OPP, OPP},&lt;br /&gt;
    double = {false, false, false, false, false, false, false},&lt;br /&gt;
    probe = 0,&lt;br /&gt;
    lastPos = nil;&lt;br /&gt;
    lastDiff = nil;&lt;br /&gt;
    buttonState = {true, true, true, true, true},&lt;br /&gt;
    sameCount = 0,&lt;br /&gt;
    done = false&lt;br /&gt;
  };&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, newWindow.origin[1] - 31,&lt;br /&gt;
                                   newWindow.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    newWindow.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  else&lt;br /&gt;
    error &amp;quot;No fire button. Do you have Advanced Chemistry?&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  windows[#windows + 1] = newWindow;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- resetWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function resetWindow(current)&lt;br /&gt;
  local vLime = srFindImageInRange(&amp;quot;crem-lime.png&amp;quot;, current.origin[1] - 20,&lt;br /&gt;
                                   current.origin[2] - 20, 100, 100,&lt;br /&gt;
				   tolerance);&lt;br /&gt;
  if (not vLime) then&lt;br /&gt;
     error &amp;quot;Could not find origin again.&amp;quot;;&lt;br /&gt;
  end&lt;br /&gt;
  if ((vLime[0] ~= current.origin[1]) or&lt;br /&gt;
      (vLime[1] ~= current.origin[2])) then&lt;br /&gt;
     error(&amp;quot;Window moved from (&amp;quot; .. current.origin[1] .. &amp;quot;, &amp;quot; ..&lt;br /&gt;
       current.origin[2] .. &amp;quot;) to (&amp;quot; .. vLime[0] .. &amp;quot;, &amp;quot; .. vLime[1] .. &amp;quot;)&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, current.origin[1] - 31,&lt;br /&gt;
                                   current.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    current.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  end&lt;br /&gt;
  if current.probe &amp;lt; 6 then&lt;br /&gt;
    current.probe = 0;&lt;br /&gt;
    current.ups = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.downs = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.dirs = {OPP, OPP, OPP, OPP, OPP};&lt;br /&gt;
    current.double = {false, false, false, false, false, false, false};&lt;br /&gt;
  end&lt;br /&gt;
  current.lastPos = nil;&lt;br /&gt;
  current.lastDiff = nil;&lt;br /&gt;
  current.buttonState = {true, true, true, true, true};&lt;br /&gt;
  current.sameCount = 0;&lt;br /&gt;
  current.done = false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- start&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function start()&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Waiting to begin&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  if windows then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      resetWindow(windows[i]);&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    windows = {};&lt;br /&gt;
    local posList = findAllImages(&amp;quot;crem-lime.png&amp;quot;);&lt;br /&gt;
    if #posList == 0 then&lt;br /&gt;
      error &amp;quot;No crematories found&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    for i=1,#posList do&lt;br /&gt;
      addWindow(posList[i]);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if windows[i].fire then&lt;br /&gt;
      safeClick(windows[i].fire[1] + 5, windows[i].fire[2] + 5);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Finding my Chi&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    windows[i].lastPos = findPoints(windows[i]);&lt;br /&gt;
    if not windows[i].lastPos then&lt;br /&gt;
      windows[i].done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tick&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tick()&lt;br /&gt;
  sleepWithStatus(tickTime, updateMessage(&amp;quot;Tending Crematory&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    tickWindow(windows[i]);&lt;br /&gt;
  end&lt;br /&gt;
  checkBreak();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tickWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tickWindow(current)&lt;br /&gt;
  if not current.done then&lt;br /&gt;
    local points = findPoints(current);&lt;br /&gt;
    if points then&lt;br /&gt;
      probeNext(current, points);&lt;br /&gt;
      if current.probe &amp;gt; 5 then&lt;br /&gt;
        toggleButtons(current, points, current.buttonState);&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkDone&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkDone()&lt;br /&gt;
  local all_done = true;&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if not windows[i].done then&lt;br /&gt;
      local done = srFindImageInRange(&amp;quot;crem-done.png&amp;quot;, windows[i].origin[1] - 3,&lt;br /&gt;
                                      windows[i].origin[2] - 15, 40, 40,&lt;br /&gt;
                                      tolerance);&lt;br /&gt;
      if done then&lt;br /&gt;
        windows[i].done = true;&lt;br /&gt;
      else&lt;br /&gt;
        all_done = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return all_done;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findPoints&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findPoints(current)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    local offset = {current.origin[1] + colOffsets[i][1],&lt;br /&gt;
                    current.origin[2] + colOffsets[i][2]};&lt;br /&gt;
    local point = srFindImageInRange(&amp;quot;crem-point.png&amp;quot;, offset[1],&lt;br /&gt;
                                     offset[2] - 5,&lt;br /&gt;
                                     colWidth, colHeight + 10, tolerance);&lt;br /&gt;
    if point then&lt;br /&gt;
      result[i] = point[1] - colOffsets[i][2] - current.origin[2] - colMiddle;&lt;br /&gt;
    else&lt;br /&gt;
      result = nil;&lt;br /&gt;
      break;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findDiffs&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findDiffs(current, points)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  local all_zero = true;&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    result[i] = points[i] - current.lastPos[i];&lt;br /&gt;
    if result[i] ~= 0 then&lt;br /&gt;
      all_zero = false;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if all_zero then&lt;br /&gt;
    result = nil;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- probeNext&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function probeNext(current, points)&lt;br /&gt;
  local diffs = findDiffs(current, points);&lt;br /&gt;
  checkSame(current, diffs);&lt;br /&gt;
  if diffs and current.probe &amp;lt; 6 then&lt;br /&gt;
    if current.probe &amp;gt; 0 then&lt;br /&gt;
      for i=1,7 do&lt;br /&gt;
        if current.lastDiffs[i] &amp;lt; 0 and diffs[i] &amp;gt; 0 then&lt;br /&gt;
          if current.ups[current.probe] then&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_UP;&lt;br /&gt;
          else&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        elseif current.lastDiffs[i] &amp;gt; 0 and diffs[i] &amp;lt; 0 then&lt;br /&gt;
          if current.downs[current.probe] then&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_DOWN;&lt;br /&gt;
          else&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if current.ups[current.probe] and current.downs[current.probe] then&lt;br /&gt;
        current.double[current.ups[current.probe]] = true;&lt;br /&gt;
        current.double[current.downs[current.probe]] = true;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    current.lastPos = points;&lt;br /&gt;
    current.lastDiffs = diffs;&lt;br /&gt;
    current.probe = current.probe + 1;&lt;br /&gt;
    if current.probe &amp;lt;= 5 then&lt;br /&gt;
      local newProbe = not current.buttonState[current.probe];&lt;br /&gt;
      local clickX = current.origin[1] + buttonOffsets[current.probe][1] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
      local clickY = current.origin[2] + buttonOffsets[current.probe][2] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
&lt;br /&gt;
      current.buttonState[current.probe] = newProbe;&lt;br /&gt;
      safeClick(clickX, clickY);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkSame&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkSame(current, diffs)&lt;br /&gt;
  if diffs then&lt;br /&gt;
    local all_same = true;&lt;br /&gt;
    for i=1,#diffs do&lt;br /&gt;
      if diffs[i] ~= 0 then&lt;br /&gt;
        all_same = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if all_same then&lt;br /&gt;
      current.sameCount = current.sameCount + 1;&lt;br /&gt;
    else&lt;br /&gt;
      current.sameCount = 0;&lt;br /&gt;
    end&lt;br /&gt;
    if current.sameCount &amp;gt; 10 then&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- toggleButtons&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function toggleButtons(current, points, buttonState)&lt;br /&gt;
  local balance = getBalance(points, current.double);&lt;br /&gt;
  for i=1,5 do&lt;br /&gt;
    local up = getPointValue(points, current.double, current.ups[i],&lt;br /&gt;
                             balance);&lt;br /&gt;
    local down = getPointValue(points, current.double, current.downs[i],&lt;br /&gt;
                               balance);&lt;br /&gt;
    local goalState = ((up &amp;gt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                       (up &amp;gt;= 0 and down &amp;gt;= 0 and up &amp;gt; down) or&lt;br /&gt;
                       (up &amp;lt;= 0 and down &amp;lt;= 0 and up &amp;gt; down));&lt;br /&gt;
    if current.dirs[i] == SAME_UP then&lt;br /&gt;
      goalState = ((up &amp;gt;= 0 and down &amp;gt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;gt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;lt;= down));&lt;br /&gt;
    elseif current.dirs[i] == SAME_DOWN then&lt;br /&gt;
      goalState = ((up &amp;lt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;lt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;gt;= down));&lt;br /&gt;
    end&lt;br /&gt;
    local goalStateStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if goalState then&lt;br /&gt;
      goalStateStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    local buttonStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if buttonState[i] then&lt;br /&gt;
      buttonStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if (goalState and not buttonState[i]) or&lt;br /&gt;
       (not goalState and buttonState[i]) then&lt;br /&gt;
      safeClick(current.origin[1] + buttonOffsets[i][1] + buttonClick,&lt;br /&gt;
		current.origin[2] + buttonOffsets[i][2] + buttonClick);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
      buttonState[i] = goalState;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getBalance&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getBalance(points, double)&lt;br /&gt;
  local above = 0;&lt;br /&gt;
  local below = 0;&lt;br /&gt;
  for i=1,#points do&lt;br /&gt;
    if points[i] &amp;gt; 0 and double[i] then&lt;br /&gt;
      below = below + 1;&lt;br /&gt;
    elseif points[i] &amp;lt; 0 and double[i] then&lt;br /&gt;
      above = above + 1;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if above &amp;gt;= 3 then&lt;br /&gt;
    result = -5;&lt;br /&gt;
  elseif below &amp;gt;= 3 then&lt;br /&gt;
    result = 5;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getPointValue&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getPointValue(points, double, index, balance)&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if index then&lt;br /&gt;
    result = points[index];&lt;br /&gt;
    if not double[index] then&lt;br /&gt;
      result = result + balance;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- takeAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function takeAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local updateList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#updateList do&lt;br /&gt;
    safeClick(updateList[i][0], updateList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local takeList = findAllImages(&amp;quot;crem-take.png&amp;quot;);&lt;br /&gt;
  for i=1,#takeList do&lt;br /&gt;
    safeClick(takeList[i][0] + 5, takeList[i][1] + 5);&lt;br /&gt;
    sleepWithStatus(shortWait*2, &amp;quot;Waiting for Everything&amp;quot;);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local all = waitForImage(&amp;quot;Everything.png&amp;quot;, maxWait, &amp;quot;Grabbing Everything&amp;quot;);&lt;br /&gt;
    if all then&lt;br /&gt;
      safeClick(all[0] + 5, all[1] + 5);&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(shortWait*2);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- promptLoad&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function promptLoad()&lt;br /&gt;
  scale = 1.0;&lt;br /&gt;
  local z = 0;&lt;br /&gt;
  local is_done = nil;&lt;br /&gt;
  while not is_done do&lt;br /&gt;
    checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
    lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Configure&amp;quot;);&lt;br /&gt;
    local y = 60;&lt;br /&gt;
&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xffffffff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
    is_done, passCount = lsEditBox(&amp;quot;passes&amp;quot;, 110, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                   0x000000ff, 5);&lt;br /&gt;
    if not tonumber(passCount) then&lt;br /&gt;
      is_done = false;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      passCount = 1;&lt;br /&gt;
    end&lt;br /&gt;
    y = y + 48;&lt;br /&gt;
&lt;br /&gt;
    load_flax = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Flax&amp;quot;,&lt;br /&gt;
                           load_flax);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_papyrus = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Papyrus&amp;quot;,&lt;br /&gt;
                              load_papyrus);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_leeks = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Leeks&amp;quot;,&lt;br /&gt;
                            load_leeks);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_limestone = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Limestone&amp;quot;,&lt;br /&gt;
                                load_limestone);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xd0d0d0ff,&lt;br /&gt;
                   &amp;quot;Make sure each crematory is pinned and empty.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if lsButtonText(10, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;Begin&amp;quot;) then&lt;br /&gt;
        is_done = 1;&lt;br /&gt;
    end&lt;br /&gt;
    if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff,&lt;br /&gt;
                    &amp;quot;End script&amp;quot;) then&lt;br /&gt;
      error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    lsDoFrame();&lt;br /&gt;
    lsSleep(shortWait);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local posList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    safeClick(posList[i][0], posList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  posList = findAllImages(&amp;quot;crem-fire.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    loadSingle(posList[i], woodOffset, &amp;quot;Wood&amp;quot;);&lt;br /&gt;
    if load_flax then&lt;br /&gt;
      loadSingle(posList[i], flaxOffset, &amp;quot;Flax&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_papyrus then&lt;br /&gt;
      loadSingle(posList[i], papyrusOffset, &amp;quot;Papyrus&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_leeks then&lt;br /&gt;
      loadSingle(posList[i], leeksOffset, &amp;quot;Leeks&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_limestone then&lt;br /&gt;
      loadSingle(posList[i], limestoneOffset, &amp;quot;Limestone&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadSingle&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadSingle(pos, offset, type)&lt;br /&gt;
  sleepWithStatus(200, &amp;quot;Waiting to load&amp;quot;);&lt;br /&gt;
  safeClick(pos[0]+5, pos[1]+5+16);&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  local limePos = waitForImage(&amp;quot;crem-limestone.png&amp;quot;, maxWait,&lt;br /&gt;
			       &amp;quot;Loading &amp;quot; .. type .. &amp;quot; Into Crematory&amp;quot;);&lt;br /&gt;
  if limePos then&lt;br /&gt;
    safeClick(limePos[0] + 5, limePos[1] + 5 + offset);&lt;br /&gt;
    lsSleep(100);&lt;br /&gt;
    local maxPos = waitForImage(&amp;quot;crem-max.png&amp;quot;, maxWait,&lt;br /&gt;
				&amp;quot;Adding Maximum Amount&amp;quot;);&lt;br /&gt;
    if maxPos then&lt;br /&gt;
      safeClick(maxPos[0]+5, maxPos[1]+5);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  sleepWithStatus(shortWait, &amp;quot;Waiting for load to complete&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- updateMessage&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function updateMessage(message)&lt;br /&gt;
  local result = &amp;quot;Pass &amp;quot; .. currentPass .. &amp;quot; / &amp;quot; .. passCount .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
  result = result .. message .. &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  if message == &amp;quot;Tending Crematory&amp;quot; then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      local status = &amp;quot;Buttons: &amp;quot;;&lt;br /&gt;
      for j=1,5 do&lt;br /&gt;
	if windows[i].dirs[j] == OPP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	elseif windows[i].dirs[j] == SAME_UP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;+&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. getDir(&amp;quot;-&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	end&lt;br /&gt;
	if j ~= 5 then&lt;br /&gt;
	  status = status .. &amp;quot;, &amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
      end&lt;br /&gt;
      result = result .. &amp;quot;\n&amp;quot; .. status;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getDir(sign, number)&lt;br /&gt;
  local result = &amp;quot;&amp;quot;;&lt;br /&gt;
  if number then&lt;br /&gt;
    result = sign .. number&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forge.inc to add Treated Metal Sheeting option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;Knife Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Shovel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Nails&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Bars&amp;quot;,&lt;br /&gt;
&amp;quot;Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Straps&amp;quot;,&lt;br /&gt;
&amp;quot;Tools&amp;quot;,&lt;br /&gt;
&amp;quot;Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bar_button_names = {&lt;br /&gt;
&amp;quot;Iron Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Bar&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
sheeting_button_names = {&lt;br /&gt;
&amp;quot;Lead Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Foil&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Treated Metal Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Tin Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Moon Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Thoths Metal Sheeting&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
straps_button_names = {&lt;br /&gt;
&amp;quot;Water Metal Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Iron Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Aluminum Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Strap&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
tools_button_names = {&lt;br /&gt;
&amp;quot;Iron Poker&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Chisel&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
wire_button_names = {&lt;br /&gt;
&amp;quot;Thoths Metal Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Magnesium Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECTS 'SUPPORTING' FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function waitMinutes(minutes)&lt;br /&gt;
-- Teppy Minute is 66 seconds or 66000 ms&lt;br /&gt;
-- Add a 3 second delay (3000 ms) in case of lag&lt;br /&gt;
&lt;br /&gt;
wait_delay = 3000; -- Extra delay on top of Teppy Time, for lag purposes. Default is 3000&lt;br /&gt;
wait = (minutes * 66000) + wait_delay;&lt;br /&gt;
askForFocus(); -- Pause to allow user to focus back to ATITD (if they checked the Pause for Focus Box), before starting project.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doneGUI(totalPasses)&lt;br /&gt;
wait = 5000;  -- Gives a 5 second delay to review the GUI stats, before quitting/returing to Main Menu.&lt;br /&gt;
clickAllImages(&amp;quot;This.png&amp;quot;); -- Refresh the screen. Update forge window so we know how much charcoal is currently in each forge before next project&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. totalPasses .. &amp;quot;/&amp;quot; .. totalPasses .. &amp;quot;] ALL DONE!\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
runForge(); -- Return to/Display Main Menu&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function waitGUI(pass)&lt;br /&gt;
	--If any forge menus shows the Forge_StartFire.png - refreshWindows() function, then display the stalledMessage in the GUI. Suggests its not lit (or out of charcoal)&lt;br /&gt;
	if #stalled &amp;gt; 0 then&lt;br /&gt;
	stalledMessage = &amp;quot;\n[&amp;quot; .. #stalled .. &amp;quot;] Forges STALLED (Needs Lit)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
	stalledMessage = &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. pass .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;] Total Passes\n----------------------------------------------\n[&amp;quot; .. batch .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per forge\n[&amp;quot; .. project_windows .. &amp;quot;] Forges working&amp;quot; .. stalledMessage .. &amp;quot;\n----------------------------------------------\n[&amp;quot; .. batch*project_windows .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per pass\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
made = made + (batch*project_windows);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function refreshWindows()&lt;br /&gt;
	checkBreak();&lt;br /&gt;
	pinned_windows = clickAllImages(&amp;quot;This.png&amp;quot;);&lt;br /&gt;
	lsSleep(400);&lt;br /&gt;
		if pinned_windows == 0 then&lt;br /&gt;
		error(&amp;quot;No pinned windows found!&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		stalled = findAllImages(&amp;quot;Forge/Forge_StartFire.png&amp;quot;);&lt;br /&gt;
			if #stalled == pinned_windows/2 then -- The /2 is because each forge has 'This' located in window twice. Can't use ThisIs.png either because idle/working forge has different words (Idle Forge shows 'This' only and Working Forge shows 'This Is'&lt;br /&gt;
			error(&amp;quot;No forges are lit!&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECT FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function KnifeBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Knife Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Knife_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShovelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Shovel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Shovel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Nails()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Nails&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Nail.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Gold Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TreatedSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	typeOfMetal = promptText(&amp;quot;Enter the metal name:&amp;quot;);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Treated Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
				refreshWindows();&lt;br /&gt;
				clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
				lsSleep(400);&lt;br /&gt;
				project_windows = clickAllText(&amp;quot;Treated&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
					sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
					lsSleep(400);&lt;br /&gt;
					local numClicked = clickAllText(typeOfMetal);&lt;br /&gt;
					if numClicked == 0 then&lt;br /&gt;
						break;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloySheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 8;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 6;&lt;br /&gt;
	name = &amp;quot;Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldFoil()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Foil&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Foil.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Metal Blue Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TinSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Tin Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Tin_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MoonSteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Moon Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Moon_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function WaterMetalStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Water Metal Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Water_Metal_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(3);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function AluminumStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Aluminum Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Aluminum_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function CopperStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronPoker()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Poker&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Poker.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Steel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function LeadChisel()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Chisel&amp;quot;;&lt;br /&gt;
	waitMinutes(6);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Chisel.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 14;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Metal Blue Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MagnesiumWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Magnesium Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Magnesium_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloyWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 16;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 5;&lt;br /&gt;
	name = &amp;quot;Silver Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Copper Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Steel Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Gold Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Bars()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #bar_button_names do&lt;br /&gt;
				if bar_button_names[i] == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, bar_button_names[i]) then&lt;br /&gt;
					image_name = bar_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
			IronBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
			GoldBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
			SilverBar();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sheeting()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #sheeting_button_names do&lt;br /&gt;
				if sheeting_button_names[i] == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
        elseif sheeting_button_names[i] == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 285;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 210;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 235;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 260;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, sheeting_button_names[i]) then&lt;br /&gt;
					image_name = sheeting_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
			LeadSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
			GoldSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
			CopperSheeting();&lt;br /&gt;
    elseif image_name == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
			TreatedSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
			OctecsAlloySheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
			SilverSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
			SteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
			GoldFoil();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
			MetalBlueSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
			TinSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
			MoonSteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
			ThothsMetalSheeting();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Straps()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #straps_button_names do&lt;br /&gt;
				if straps_button_names[i] == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 100;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, straps_button_names[i]) then&lt;br /&gt;
					image_name = straps_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
			WaterMetalStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
			IronStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
			AluminumStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
			CopperStrap();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Tools()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #tools_button_names do&lt;br /&gt;
				if tools_button_names[i] == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, tools_button_names[i]) then&lt;br /&gt;
					image_name = tools_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
			IronPoker();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
			SteelBlade();&lt;br /&gt;
		elseif image_name == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
			LeadChisel();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Wire()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #wire_button_names do&lt;br /&gt;
				if wire_button_names[i] == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, wire_button_names[i]) then&lt;br /&gt;
					image_name = wire_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
			ThothsMetalWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
			MetalBlueWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
			MagnesiumWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
			OctecsAlloyWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
			SilverWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
			CopperWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
			SteelWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
			GoldWire();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Barley with &amp;quot;Skip gather water&amp;quot; option:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- Edit these first 2 to adjust how much is planted in a pass&lt;br /&gt;
-- May need to adjust walk_time in Barley_common.inc if you move too slowly to keep up&lt;br /&gt;
-- grids tested: 2x2, 3x3, 5x5, 6x6 (probably need 3+ dex and 600ms walk time)&lt;br /&gt;
grid_w = 5;&lt;br /&gt;
grid_h = 5;&lt;br /&gt;
watered = {};&lt;br /&gt;
loop_count = 0;&lt;br /&gt;
skip_water = 0;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/Flax_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function promptBarleyNumbers(is_plant)&lt;br /&gt;
	scale = 1.0;&lt;br /&gt;
	&lt;br /&gt;
	local z = 0;&lt;br /&gt;
	local is_done = nil;&lt;br /&gt;
	local value = nil;&lt;br /&gt;
	-- Edit box and text display&lt;br /&gt;
	while not is_done do&lt;br /&gt;
		-- Put these everywhere to make sure we don't lock up with no easy way to escape!&lt;br /&gt;
		checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Choose passes and grid size&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- lsEditBox needs a key to uniquely name this edit box&lt;br /&gt;
		--   let's just use the prompt!&lt;br /&gt;
		-- lsEditBox returns two different things (a state and a value)&lt;br /&gt;
		local y = 40;&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
		is_done, num_loops = lsEditBox(&amp;quot;passes&amp;quot;,&lt;br /&gt;
			100, y, z, 50, 30, scale, scale,&lt;br /&gt;
			0x000000ff, 1);&lt;br /&gt;
		if not tonumber(num_loops) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			num_loops = 1;&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Grid size:&amp;quot;);&lt;br /&gt;
		is_done, grid_w = lsEditBox(&amp;quot;grid&amp;quot;,&lt;br /&gt;
			100, y, z, 50, 30, scale, scale,&lt;br /&gt;
			0x000000ff, grid_w);&lt;br /&gt;
		if not tonumber(grid_w) then&lt;br /&gt;
			is_done = nil;&lt;br /&gt;
			lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
			grid_w = 1;&lt;br /&gt;
			grid_h = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		grid_w = tonumber(grid_w);&lt;br /&gt;
		grid_h = grid_w;&lt;br /&gt;
		y = y + 32;&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(170, y-32, z, 100, 0xFFFFFFff, &amp;quot;OK&amp;quot;) then&lt;br /&gt;
			is_done = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if is_plant then&lt;br /&gt;
			lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will plant and harvest a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w .. &amp;quot; grid of Barley &amp;quot; .. num_loops .. &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) .. &amp;quot; raw barley and &amp;quot;.. (grid_w * grid_w * num_loops * 4) .. &amp;quot;water in jugs, doing &amp;quot; .. (grid_w*grid_w*num_loops) .. &amp;quot; harvests.&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
			lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, &amp;quot;This will plant a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w .. &amp;quot; grid of Flax &amp;quot; .. num_loops .. &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) .. &amp;quot; seeds, yielding &amp;quot; .. (grid_w * grid_w * num_loops) .. &amp;quot; seeds.&amp;quot;);&lt;br /&gt;
		end&lt;br /&gt;
		y = y + 50;&lt;br /&gt;
		skip_water = lsCheckBox(10, y, z, 0xFFFFFFff, &amp;quot;Skip Rain Barrel&amp;quot;, skip_water);&lt;br /&gt;
&lt;br /&gt;
		if is_done and (not num_loops or not grid_w) then&lt;br /&gt;
			error 'Canceled';&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(10); -- Sleep just so we don't eat up all the CPU for no reason&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
  promptBarleyNumbers(1);&lt;br /&gt;
  askForWindow(&amp;quot;Make sure the plant barley window is pinned and you are in F8F8 cam zoomed in.  You may need to F12 at low resolutions or hide your chat window (if it starts planting and fails to move downward, it probably clicked on your chat window).  Will plant grid NE of current location.  'Plant all crops where you stand' must be ON.  'Right click pins/unpins a menu' must be ON.&amp;quot;);&lt;br /&gt;
  lsSleep(1000);&lt;br /&gt;
  delay_time = 2000;&lt;br /&gt;
  local x = 1;&lt;br /&gt;
  local y = 1;&lt;br /&gt;
  initGlobals();&lt;br /&gt;
  -- Find the plant barley button&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
&lt;br /&gt;
  local imgBarley = &amp;quot;barley.png&amp;quot;;&lt;br /&gt;
  local xyPlantBarley = srFindImage(imgBarley);&lt;br /&gt;
  if not xyPlantBarley then&lt;br /&gt;
    error 'Could not find plant window';&lt;br /&gt;
  end&lt;br /&gt;
  xyPlantBarley[0] = xyPlantBarley[0] + 5;&lt;br /&gt;
  &lt;br /&gt;
  -- Find the Rain Barrel&lt;br /&gt;
  if not skip_water then&lt;br /&gt;
	local imgDrawWater = &amp;quot;draw_water.png&amp;quot;;&lt;br /&gt;
	local xyDrawWater = srFindImage(imgDrawWater);&lt;br /&gt;
	if not xyDrawWater then&lt;br /&gt;
		error 'Could not find rain barrel';&lt;br /&gt;
	end &lt;br /&gt;
	xyDrawWater[0] = xyDrawWater[0] + 5;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  for loop_count=1, num_loops do&lt;br /&gt;
    local start_time = lsGetTimer();&lt;br /&gt;
    harvested = 0;&lt;br /&gt;
    -- Init watered array to 0&lt;br /&gt;
    for y=grid_h, 1, -1 do&lt;br /&gt;
      for x=grid_w, 1, -1 do &lt;br /&gt;
        watered[x+((y-1)*grid_w)] = 1;&lt;br /&gt;
      end&lt;br /&gt;
    end	&lt;br /&gt;
	  -- Local variables&lt;br /&gt;
    local xyCenter = getCenterPos();&lt;br /&gt;
    local xyBarleyMenu = {};&lt;br /&gt;
    xyBarleyMenu[0] = xyCenter[0] - 43;&lt;br /&gt;
    xyBarleyMenu[1] = xyCenter[1] + 0;&lt;br /&gt;
    local dxi=1;&lt;br /&gt;
    local dt_max=grid_w;&lt;br /&gt;
    local dt=grid_w;&lt;br /&gt;
    local dx={1, 0, -1, 0};&lt;br /&gt;
    local dy={0, -1, 0, 1};&lt;br /&gt;
    local num_at_this_length = 3;&lt;br /&gt;
    local x_pos = 0;&lt;br /&gt;
    local y_pos = 0;&lt;br /&gt;
    for y=1, grid_h do&lt;br /&gt;
      for x=1, grid_w do&lt;br /&gt;
        lsPrintln('doing ' .. x .. ',' .. y .. ' of ' .. grid_w .. ',' .. grid_h);&lt;br /&gt;
        statusScreen(&amp;quot;Planting &amp;quot; .. x .. &amp;quot;, &amp;quot; .. y);&lt;br /&gt;
        &lt;br /&gt;
        -- Plant&lt;br /&gt;
        lsPrintln('planting ' .. xyPlantBarley[0] .. ',' .. xyPlantBarley[1]);&lt;br /&gt;
        setWaitSpot(xyBarleyMenu[0], xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouseNoMove(xyPlantBarley[0], xyPlantBarley[1], 0);&lt;br /&gt;
        srSetMousePos(xyBarleyMenu[0], xyBarleyMenu[1]);&lt;br /&gt;
        waitForChange();&lt;br /&gt;
        &lt;br /&gt;
        -- Bring up menu&lt;br /&gt;
        lsPrintln('menu ' .. xyBarleyMenu[0] .. ',' .. xyBarleyMenu[1]);&lt;br /&gt;
        setWaitSpot(xyBarleyMenu[0]+5, xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouse(xyBarleyMenu[0], xyBarleyMenu[1], 0);&lt;br /&gt;
        waitForChange();&lt;br /&gt;
&lt;br /&gt;
        -- Check for window size&lt;br /&gt;
        window_w = 214;&lt;br /&gt;
        window_h = 218;&lt;br /&gt;
&lt;br /&gt;
        -- Pin&lt;br /&gt;
        lsPrintln('pin ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1]);&lt;br /&gt;
        srClickMouseNoMove(xyBarleyMenu[0]+5, xyBarleyMenu[1]+0, 1);&lt;br /&gt;
&lt;br /&gt;
        -- Move window&lt;br /&gt;
        local pp = pinnedPos(x, y);&lt;br /&gt;
        lsPrintln('move ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1] .. ' to ' .. pp[0] .. ',' .. pp[1]);&lt;br /&gt;
        drag(xyBarleyMenu[0] + 5, xyBarleyMenu[1], pp[0], pp[1], 0);&lt;br /&gt;
		&lt;br /&gt;
        -- Add 2 water now&lt;br /&gt;
        srReadScreen();&lt;br /&gt;
        local barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
        local barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
        if not barleyAddButton or not barleyWater then&lt;br /&gt;
          -- bugfix maybe for lag.&lt;br /&gt;
          lsSleep(100);&lt;br /&gt;
          srReadScreen();&lt;br /&gt;
          barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
          barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
        srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
        watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 2;&lt;br /&gt;
&lt;br /&gt;
        -- move to next position&lt;br /&gt;
        if not ((x == grid_w) and (y == grid_h)) then&lt;br /&gt;
          lsPrintln('walking dx=' .. dx[dxi] .. ' dy=' .. dy[dxi]);&lt;br /&gt;
          x_pos = x_pos + dx[dxi];&lt;br /&gt;
          y_pos = y_pos + dy[dxi];&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0] + walk_px_x*dx[dxi], xyCenter[1] + walk_px_y*dy[dxi], 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
          dt = dt - 1;&lt;br /&gt;
          if dt == 1 then&lt;br /&gt;
            dxi = dxi + 1;&lt;br /&gt;
            num_at_this_length = num_at_this_length - 1;&lt;br /&gt;
            if num_at_this_length == 0 then&lt;br /&gt;
              dt_max = dt_max - 1;&lt;br /&gt;
              num_at_this_length = 2;&lt;br /&gt;
            end&lt;br /&gt;
            if dxi == 5 then&lt;br /&gt;
              dxi = 1;&lt;br /&gt;
            end&lt;br /&gt;
            dt = dt_max;&lt;br /&gt;
          else&lt;br /&gt;
            lsPrintln('skipping walking, on last leg');&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        checkBreak();&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  &lt;br /&gt;
    statusScreen(&amp;quot;Refocusing windows...&amp;quot;);&lt;br /&gt;
    -- Bring windows to front&lt;br /&gt;
    for y=grid_h, 1, -1 do&lt;br /&gt;
      for x=grid_w, 1, -1 do &lt;br /&gt;
        local rp = refreshPosUp(x, y);&lt;br /&gt;
        srClickMouseNoMove(rp[0], rp[1], 0);&lt;br /&gt;
        lsSleep(refocus_click_time);&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again&lt;br /&gt;
  &lt;br /&gt;
    -- Barley has been planted, pinned and refocused	&lt;br /&gt;
 &lt;br /&gt;
    while 1 do&lt;br /&gt;
      for y=1, grid_h do&lt;br /&gt;
        for x=1, grid_w do &lt;br /&gt;
          local pp = pinnedPos(x, y);&lt;br /&gt;
          local rp = refreshPosDown(x, y);&lt;br /&gt;
          srClickMouse(rp[0],rp[1]);&lt;br /&gt;
          lsSleep(200);&lt;br /&gt;
          srReadScreen();&lt;br /&gt;
          local leftBar = srFindImageInRange(&amp;quot;barleyBarLeft.png&amp;quot;, pp[0], pp[1] - 50, 120, 100);&lt;br /&gt;
          if leftBar then&lt;br /&gt;
            leftBar[0] = leftBar[0] + 4;&lt;br /&gt;
          end&lt;br /&gt;
          local rightBar = srFindImageInRange(&amp;quot;barleyBarRight.png&amp;quot;, pp[0], pp[1] - 50, 220, 200);&lt;br /&gt;
          if rightBar then&lt;br /&gt;
            rightBar[0] = rightBar[0] + 1;&lt;br /&gt;
          end&lt;br /&gt;
          if not rightBar then&lt;br /&gt;
            error 'Could not find rightbar';&lt;br /&gt;
          end&lt;br /&gt;
          local barleyWater = srFindImageInRange(&amp;quot;barleyWater.png&amp;quot;, pp[0], pp[1] - 50, 220, 150);&lt;br /&gt;
          if not barleyWater then error 'Could not find water button.'; end&lt;br /&gt;
          local barleyAddButton = srFindImageInRange(&amp;quot;BarleyAdd.png&amp;quot;, pp[0], pp[1], 200, 100);&lt;br /&gt;
          if not barleyAddButton then error 'Could not find add button. Ended at batch '; end&lt;br /&gt;
&lt;br /&gt;
          while 1 do&lt;br /&gt;
            if leftBar then&lt;br /&gt;
              waterBlue = 0;&lt;br /&gt;
              if rightBar then&lt;br /&gt;
                if barleyWater then&lt;br /&gt;
                  srReadScreen();&lt;br /&gt;
                  for i=leftBar[0],rightBar[0] do&lt;br /&gt;
                    pxval = srReadPixelFromBuffer(i, barleyWater[1]);&lt;br /&gt;
                    b = (math.floor(pxval/256) % 256);&lt;br /&gt;
                    if b &amp;gt; 220 then&lt;br /&gt;
                      waterBlue = waterBlue + 1;&lt;br /&gt;
                    end&lt;br /&gt;
                  end&lt;br /&gt;
                  waterBlue = (waterBlue/(rightBar[0]-leftBar[0])*100);&lt;br /&gt;
                end&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
            checkBreak();&lt;br /&gt;
			&lt;br /&gt;
            if watered[x+((y-1)*grid_w)] &amp;lt; 5 then&lt;br /&gt;
              statusScreen(&amp;quot;Watering &amp;quot; .. x .. &amp;quot;,&amp;quot; .. y .. &amp;quot;step &amp;quot; .. watered[x+((y-1)*grid_w)] .. &amp;quot;.&amp;quot;);&lt;br /&gt;
              if waterBlue &amp;lt; 90 then&lt;br /&gt;
                if watered[x+((y-1)*grid_w)] == 0 then&lt;br /&gt;
                end&lt;br /&gt;
                srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);&lt;br /&gt;
                watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 1;&lt;br /&gt;
                lsSleep(100);&lt;br /&gt;
                break;&lt;br /&gt;
              end&lt;br /&gt;
            else&lt;br /&gt;
              statusScreen(&amp;quot;Harvesting &amp;quot; .. x .. &amp;quot;,&amp;quot; .. y .. &amp;quot;.&amp;quot;);&lt;br /&gt;
              if waterBlue &amp;lt; 90 then&lt;br /&gt;
                srClickMouseNoMove(pp[0]+90, pp[1]+90);&lt;br /&gt;
                lsSleep(100);&lt;br /&gt;
                srClickMouseNoMove(pp[0]+180, pp[1]-25);&lt;br /&gt;
                if watered[x+((y-1)*grid_w)] == 5 then&lt;br /&gt;
                  harvested = 1;&lt;br /&gt;
                end&lt;br /&gt;
                break;&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if harvested == 0 then&lt;br /&gt;
        statusScreen(&amp;quot;Refocusing windows...&amp;quot;);&lt;br /&gt;
        -- Bring windows to front&lt;br /&gt;
        for y=grid_h, 1, -1 do&lt;br /&gt;
          for x=grid_w, 1, -1 do &lt;br /&gt;
            local rp = refreshPosUp(x, y);&lt;br /&gt;
            srClickMouseNoMove(rp[0], rp[1], 0);&lt;br /&gt;
            lsSleep(refocus_click_time);&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
        lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again&lt;br /&gt;
      else&lt;br /&gt;
        for x=1, x_pos do&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
        end&lt;br /&gt;
        for x=1, -y_pos do&lt;br /&gt;
          srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
          lsSleep(walk_time);&lt;br /&gt;
        end&lt;br /&gt;
        break;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    local end_time = lsGetTimer();&lt;br /&gt;
    statusScreen(&amp;quot;Time taken: &amp;quot; .. (end_time-start_time)/1000);&lt;br /&gt;
    -- move X and Y every 4 batches, but skip the Y move every 20th batch&lt;br /&gt;
    if loop_count % 4 == 0 and loop_count % 5 == 0 then&lt;br /&gt;
      doCorrectiveMove('x')&lt;br /&gt;
    elseif loop_count % 4 == 0 then&lt;br /&gt;
      doCorrectiveMove('xy')&lt;br /&gt;
    end &lt;br /&gt;
    --doStashWH(num_loops*grid_w*grid_w);&lt;br /&gt;
    --doRefillWater(4*numloops*grid_w*grid_w);&lt;br /&gt;
    doStashWH(grid_w*grid_w);&lt;br /&gt;
	if not skip_water then&lt;br /&gt;
		doRefillWater(4*grid_w*grid_w);&lt;br /&gt;
	end&lt;br /&gt;
    debug('end of batch #' .. loop_count)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doCorrectiveMove(move)&lt;br /&gt;
  statusScreen(&amp;quot;Moving to correct for drift&amp;quot;);&lt;br /&gt;
  local xyCenter = getCenterPos();&lt;br /&gt;
  if move == 'xy' or move == 'x' then&lt;br /&gt;
    srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0);&lt;br /&gt;
    lsSleep(walk_time);&lt;br /&gt;
  end&lt;br /&gt;
  if move == 'xy' or move == 'y' then&lt;br /&gt;
    srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
    lsSleep(walk_time);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doStashWH(qty)&lt;br /&gt;
  local wh = srFindImage(&amp;quot;stash.png&amp;quot;);&lt;br /&gt;
  if wh then&lt;br /&gt;
    srClickMouseNoMove(wh[0]+9,wh[1]+9)&lt;br /&gt;
    debug('found stash, clicked it');&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local insects = srFindImage(&amp;quot;stashInsectEllipsis.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    local stashes = srFindImage(&amp;quot;stashBarley.png&amp;quot;);&lt;br /&gt;
    if not stashes then&lt;br /&gt;
      error &amp;quot;no barley to stash&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    srClickMouseNoMove(stashes[0],stashes[1]);&lt;br /&gt;
&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
    -- stash exactly the right amount by number so we don't lose our seed barley&lt;br /&gt;
    srKeyEvent(qty);&lt;br /&gt;
    srKeyEvent('\n');&lt;br /&gt;
&lt;br /&gt;
    if insects then&lt;br /&gt;
      srClickMouseNoMove(wh[0]+9,wh[1]+9)&lt;br /&gt;
      lsSleep(250);&lt;br /&gt;
      srReadScreen();&lt;br /&gt;
&lt;br /&gt;
      local insects = srFindImage(&amp;quot;stashInsectEllipsis.png&amp;quot;);&lt;br /&gt;
      if insects then&lt;br /&gt;
        srClickMouseNoMove(insects[0],insects[1]);&lt;br /&gt;
        lsSleep(250);&lt;br /&gt;
&lt;br /&gt;
        srReadScreen();&lt;br /&gt;
        insects = srFindImage(&amp;quot;stashAllTheInsects.png&amp;quot;);&lt;br /&gt;
        if not insects then&lt;br /&gt;
          error &amp;quot;found insects but couldn't stash them&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        srClickMouseNoMove(insects[0],insects[1]);&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function doRefillWater(qty)&lt;br /&gt;
  debug(&amp;quot;in refill&amp;quot;)&lt;br /&gt;
  local rb = srFindImage(&amp;quot;draw_water.png&amp;quot;);&lt;br /&gt;
  if rb then&lt;br /&gt;
    srClickMouseNoMove(rb[0]+5,rb[1]+5)&lt;br /&gt;
    lsSleep(250);&lt;br /&gt;
    srKeyEvent(qty);&lt;br /&gt;
    srKeyEvent('\n');&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function debug(msg)&lt;br /&gt;
  if 0 then&lt;br /&gt;
    statusScreen(msg);&lt;br /&gt;
    lsSleep(1000);&lt;br /&gt;
  end &lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipes&amp;diff=225562</id>
		<title>Glenbard Resources/Treatment Recipes</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipes&amp;diff=225562"/>
		<updated>2013-01-03T03:26:54Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wood and Metal Treatment recipes for the GlenBard tanks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wood Treatment ==&lt;br /&gt;
*'''Blonde Glossy''': 140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil&lt;br /&gt;
*'''White Glossy''':  140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil, 5 potash&lt;br /&gt;
*'''Hard, Rigid, Fireproof, Blonde''': 30 lime, 20 lead, 10 sulfur, 10 lead, 30 lime, 10 lead, 10 lime, 10 petrol, 20 sulfur&lt;br /&gt;
*'''Hard, Rotproof''': 10 sulfur, 30 lime, 32 petrol, 7 lead&lt;br /&gt;
*'''Hard, Rotproof, Black, Termite-Resistant''': 160 petrol, 5 beeswax, 10 lead&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Metal Treatment - Do NOT Empty the bath. Please contact a Kinsman for Tong rental ==&lt;br /&gt;
*'''Stainless, Hard Titanium''': 20 cactus, 10 lime, 30 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Corrosion Resistant, Hard Titanium''': 20 cactus, 10 lime, 30 cactus, 5 gravel&lt;br /&gt;
*'''Stainless, Hard, Insulative, Nontoxic Steel''': 20 cactus, 10 lime, 60 cactus, 9 gravel,  17 potash&lt;br /&gt;
*'''Stainless, Hard Moonsteel''': 20 cactus, 10 lime, 10 cactus, 10 lime, 10 cactus, 10 lime, 27 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Stainless, Hard, Insulative Copper''': 60 cactus, 40 coal, 35 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Stainless, Hard, Insulative, Nontoxic Sunsteel''': 30 cactus, 10 lime, 60 cactus, 9 gravel, 17 potash&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225551</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225551"/>
		<updated>2013-01-03T01:22:10Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
Cuttable Gem donation box next to Guild Hall. Please donate as many Cuttable Sunstone as you can spare!&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 23 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 18 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 8 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 12 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 2 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 800 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 4000 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 6000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 14000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 3200 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 6720 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 5212 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 8300 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 2340 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 10150 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 16895 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 4055 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 1200 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 131 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 43 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 64 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* OneBanana: 3 Carrot, 1 Cabbage, 6 Red Sand&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Lenala: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 6 Red Sand&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225525</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225525"/>
		<updated>2013-01-02T18:23:24Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paint Reaction Template:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modified VT PaintWatch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed Crematory Macro:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- crematory.lua v1.2 by Tallow&lt;br /&gt;
--&lt;br /&gt;
-- Runs one or more crematories. Automatically discovers button&lt;br /&gt;
-- configuration on its own and loads/unloads materials.&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
assert(loadfile(&amp;quot;luaScripts/common.inc&amp;quot;))();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Crematory v1.2 (by Tallow) --&lt;br /&gt;
  Automatically runs one or more crematories.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
wmText = &amp;quot;Tap control on Crematories to open and pin.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
OPP = 0;&lt;br /&gt;
SAME_UP = 1;&lt;br /&gt;
SAME_DOWN = 2;&lt;br /&gt;
&lt;br /&gt;
tolerance = 6500;&lt;br /&gt;
tickTime = 1000;&lt;br /&gt;
maxWait = 1000;&lt;br /&gt;
longWait = 500;&lt;br /&gt;
shortWait = 30;&lt;br /&gt;
&lt;br /&gt;
colOffsets = {&lt;br /&gt;
  {35-40-3, 204-182},&lt;br /&gt;
  {71-40-3, 204-182},&lt;br /&gt;
  {107-40-3, 204-182},&lt;br /&gt;
  {143-40-3, 204-182},&lt;br /&gt;
  {179-40-3, 204-182},&lt;br /&gt;
  {215-40-3, 204-182},&lt;br /&gt;
  {251-40-3, 204-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
colWidth = 36-35+6;&lt;br /&gt;
colHeight = 323-204;&lt;br /&gt;
colMiddle = 57;&lt;br /&gt;
&lt;br /&gt;
buttonOffsets = {&lt;br /&gt;
  {49-40, 333-182},&lt;br /&gt;
  {89-40, 333-182},&lt;br /&gt;
  {129-40, 333-182},&lt;br /&gt;
  {169-40, 333-182},&lt;br /&gt;
  {209-40, 333-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
buttonWidth = 78-49;&lt;br /&gt;
buttonHeight = 354-333;&lt;br /&gt;
buttonClick = 10;&lt;br /&gt;
&lt;br /&gt;
limestoneOffset = 0;&lt;br /&gt;
leeksOffset = 16;&lt;br /&gt;
flaxOffset = 32;&lt;br /&gt;
papyrusOffset = 48;&lt;br /&gt;
woodOffset = 64;&lt;br /&gt;
&lt;br /&gt;
load_flax = true;&lt;br /&gt;
load_papyrus = true;&lt;br /&gt;
load_leeks = true;&lt;br /&gt;
load_limestone = true;&lt;br /&gt;
&lt;br /&gt;
currentPass = 1;&lt;br /&gt;
passCount = 5;&lt;br /&gt;
&lt;br /&gt;
windows = nil;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- doit&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
  windowManager(&amp;quot;Crematory Setup&amp;quot;, wmText);&lt;br /&gt;
  unpinOnExit(runCrematories);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function runCrematories()&lt;br /&gt;
  promptLoad();&lt;br /&gt;
  askForFocus();&lt;br /&gt;
  for i=1,passCount do&lt;br /&gt;
    currentPass = i;&lt;br /&gt;
    takeAll();&lt;br /&gt;
    loadAll();&lt;br /&gt;
    start();&lt;br /&gt;
    local is_done = false;&lt;br /&gt;
    while not is_done do&lt;br /&gt;
      tick();&lt;br /&gt;
      is_done = checkDone();&lt;br /&gt;
    end&lt;br /&gt;
    sleepWithStatus(longWait*5, updateMessage(&amp;quot;Waiting to take&amp;quot;));&lt;br /&gt;
  end&lt;br /&gt;
  takeAll();&lt;br /&gt;
  lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- addWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function addWindow(vPos)&lt;br /&gt;
  local newWindow = {&lt;br /&gt;
    origin = {vPos[0], vPos[1]},&lt;br /&gt;
    ups = {nil, nil, nil, nil, nil},&lt;br /&gt;
    downs = {nil, nil, nil, nil, nil},&lt;br /&gt;
    dirs = {OPP, OPP, OPP, OPP, OPP},&lt;br /&gt;
    double = {false, false, false, false, false, false, false},&lt;br /&gt;
    probe = 0,&lt;br /&gt;
    lastPos = nil;&lt;br /&gt;
    lastDiff = nil;&lt;br /&gt;
    buttonState = {true, true, true, true, true},&lt;br /&gt;
    sameCount = 0,&lt;br /&gt;
    done = false&lt;br /&gt;
  };&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, newWindow.origin[1] - 31,&lt;br /&gt;
                                   newWindow.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    newWindow.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  else&lt;br /&gt;
    error &amp;quot;No fire button. Do you have Advanced Chemistry?&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  windows[#windows + 1] = newWindow;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- resetWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function resetWindow(current)&lt;br /&gt;
  local vLime = srFindImageInRange(&amp;quot;crem-lime.png&amp;quot;, current.origin[1] - 20,&lt;br /&gt;
                                   current.origin[2] - 20, 100, 100,&lt;br /&gt;
				   tolerance);&lt;br /&gt;
  if (not vLime) then&lt;br /&gt;
     error &amp;quot;Could not find origin again.&amp;quot;;&lt;br /&gt;
  end&lt;br /&gt;
  if ((vLime[0] ~= current.origin[1]) or&lt;br /&gt;
      (vLime[1] ~= current.origin[2])) then&lt;br /&gt;
     error(&amp;quot;Window moved from (&amp;quot; .. current.origin[1] .. &amp;quot;, &amp;quot; ..&lt;br /&gt;
       current.origin[2] .. &amp;quot;) to (&amp;quot; .. vLime[0] .. &amp;quot;, &amp;quot; .. vLime[1] .. &amp;quot;)&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, current.origin[1] - 31,&lt;br /&gt;
                                   current.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    current.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  end&lt;br /&gt;
  if current.probe &amp;lt; 6 then&lt;br /&gt;
    current.probe = 0;&lt;br /&gt;
    current.ups = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.downs = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.dirs = {OPP, OPP, OPP, OPP, OPP};&lt;br /&gt;
    current.double = {false, false, false, false, false, false, false};&lt;br /&gt;
  end&lt;br /&gt;
  current.lastPos = nil;&lt;br /&gt;
  current.lastDiff = nil;&lt;br /&gt;
  current.buttonState = {true, true, true, true, true};&lt;br /&gt;
  current.sameCount = 0;&lt;br /&gt;
  current.done = false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- start&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function start()&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Waiting to begin&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  if windows then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      resetWindow(windows[i]);&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    windows = {};&lt;br /&gt;
    local posList = findAllImages(&amp;quot;crem-lime.png&amp;quot;);&lt;br /&gt;
    if #posList == 0 then&lt;br /&gt;
      error &amp;quot;No crematories found&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    for i=1,#posList do&lt;br /&gt;
      addWindow(posList[i]);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if windows[i].fire then&lt;br /&gt;
      safeClick(windows[i].fire[1] + 5, windows[i].fire[2] + 5);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Finding my Chi&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    windows[i].lastPos = findPoints(windows[i]);&lt;br /&gt;
    if not windows[i].lastPos then&lt;br /&gt;
      windows[i].done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tick&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tick()&lt;br /&gt;
  sleepWithStatus(tickTime, updateMessage(&amp;quot;Tending Crematory&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    tickWindow(windows[i]);&lt;br /&gt;
  end&lt;br /&gt;
  checkBreak();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tickWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tickWindow(current)&lt;br /&gt;
  if not current.done then&lt;br /&gt;
    local points = findPoints(current);&lt;br /&gt;
    if points then&lt;br /&gt;
      probeNext(current, points);&lt;br /&gt;
      if current.probe &amp;gt; 5 then&lt;br /&gt;
        toggleButtons(current, points, current.buttonState);&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkDone&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkDone()&lt;br /&gt;
  local all_done = true;&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if not windows[i].done then&lt;br /&gt;
      local done = srFindImageInRange(&amp;quot;crem-done.png&amp;quot;, windows[i].origin[1] - 3,&lt;br /&gt;
                                      windows[i].origin[2] - 15, 40, 40,&lt;br /&gt;
                                      tolerance);&lt;br /&gt;
      if done then&lt;br /&gt;
        windows[i].done = true;&lt;br /&gt;
      else&lt;br /&gt;
        all_done = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return all_done;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findPoints&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findPoints(current)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    local offset = {current.origin[1] + colOffsets[i][1],&lt;br /&gt;
                    current.origin[2] + colOffsets[i][2]};&lt;br /&gt;
    local point = srFindImageInRange(&amp;quot;crem-point.png&amp;quot;, offset[1],&lt;br /&gt;
                                     offset[2] - 5,&lt;br /&gt;
                                     colWidth, colHeight + 10, tolerance);&lt;br /&gt;
    if point then&lt;br /&gt;
      result[i] = point[1] - colOffsets[i][2] - current.origin[2] - colMiddle;&lt;br /&gt;
    else&lt;br /&gt;
      result = nil;&lt;br /&gt;
      break;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findDiffs&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findDiffs(current, points)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  local all_zero = true;&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    result[i] = points[i] - current.lastPos[i];&lt;br /&gt;
    if result[i] ~= 0 then&lt;br /&gt;
      all_zero = false;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if all_zero then&lt;br /&gt;
    result = nil;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- probeNext&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function probeNext(current, points)&lt;br /&gt;
  local diffs = findDiffs(current, points);&lt;br /&gt;
  checkSame(current, diffs);&lt;br /&gt;
  if diffs and current.probe &amp;lt; 6 then&lt;br /&gt;
    if current.probe &amp;gt; 0 then&lt;br /&gt;
      for i=1,7 do&lt;br /&gt;
        if current.lastDiffs[i] &amp;lt; 0 and diffs[i] &amp;gt; 0 then&lt;br /&gt;
          if current.ups[current.probe] then&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_UP;&lt;br /&gt;
          else&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        elseif current.lastDiffs[i] &amp;gt; 0 and diffs[i] &amp;lt; 0 then&lt;br /&gt;
          if current.downs[current.probe] then&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_DOWN;&lt;br /&gt;
          else&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if current.ups[current.probe] and current.downs[current.probe] then&lt;br /&gt;
        current.double[current.ups[current.probe]] = true;&lt;br /&gt;
        current.double[current.downs[current.probe]] = true;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    current.lastPos = points;&lt;br /&gt;
    current.lastDiffs = diffs;&lt;br /&gt;
    current.probe = current.probe + 1;&lt;br /&gt;
    if current.probe &amp;lt;= 5 then&lt;br /&gt;
      local newProbe = not current.buttonState[current.probe];&lt;br /&gt;
      local clickX = current.origin[1] + buttonOffsets[current.probe][1] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
      local clickY = current.origin[2] + buttonOffsets[current.probe][2] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
&lt;br /&gt;
      current.buttonState[current.probe] = newProbe;&lt;br /&gt;
      safeClick(clickX, clickY);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkSame&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkSame(current, diffs)&lt;br /&gt;
  if diffs then&lt;br /&gt;
    local all_same = true;&lt;br /&gt;
    for i=1,#diffs do&lt;br /&gt;
      if diffs[i] ~= 0 then&lt;br /&gt;
        all_same = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if all_same then&lt;br /&gt;
      current.sameCount = current.sameCount + 1;&lt;br /&gt;
    else&lt;br /&gt;
      current.sameCount = 0;&lt;br /&gt;
    end&lt;br /&gt;
    if current.sameCount &amp;gt; 10 then&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- toggleButtons&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function toggleButtons(current, points, buttonState)&lt;br /&gt;
  local balance = getBalance(points, current.double);&lt;br /&gt;
  for i=1,5 do&lt;br /&gt;
    local up = getPointValue(points, current.double, current.ups[i],&lt;br /&gt;
                             balance);&lt;br /&gt;
    local down = getPointValue(points, current.double, current.downs[i],&lt;br /&gt;
                               balance);&lt;br /&gt;
    local goalState = ((up &amp;gt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                       (up &amp;gt;= 0 and down &amp;gt;= 0 and up &amp;gt; down) or&lt;br /&gt;
                       (up &amp;lt;= 0 and down &amp;lt;= 0 and up &amp;gt; down));&lt;br /&gt;
    if current.dirs[i] == SAME_UP then&lt;br /&gt;
      goalState = ((up &amp;gt;= 0 and down &amp;gt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;gt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;lt;= down));&lt;br /&gt;
    elseif current.dirs[i] == SAME_DOWN then&lt;br /&gt;
      goalState = ((up &amp;lt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;lt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;gt;= down));&lt;br /&gt;
    end&lt;br /&gt;
    local goalStateStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if goalState then&lt;br /&gt;
      goalStateStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    local buttonStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if buttonState[i] then&lt;br /&gt;
      buttonStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if (goalState and not buttonState[i]) or&lt;br /&gt;
       (not goalState and buttonState[i]) then&lt;br /&gt;
      safeClick(current.origin[1] + buttonOffsets[i][1] + buttonClick,&lt;br /&gt;
		current.origin[2] + buttonOffsets[i][2] + buttonClick);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
      buttonState[i] = goalState;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getBalance&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getBalance(points, double)&lt;br /&gt;
  local above = 0;&lt;br /&gt;
  local below = 0;&lt;br /&gt;
  for i=1,#points do&lt;br /&gt;
    if points[i] &amp;gt; 0 and double[i] then&lt;br /&gt;
      below = below + 1;&lt;br /&gt;
    elseif points[i] &amp;lt; 0 and double[i] then&lt;br /&gt;
      above = above + 1;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if above &amp;gt;= 3 then&lt;br /&gt;
    result = -5;&lt;br /&gt;
  elseif below &amp;gt;= 3 then&lt;br /&gt;
    result = 5;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getPointValue&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getPointValue(points, double, index, balance)&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if index then&lt;br /&gt;
    result = points[index];&lt;br /&gt;
    if not double[index] then&lt;br /&gt;
      result = result + balance;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- takeAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function takeAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local updateList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#updateList do&lt;br /&gt;
    safeClick(updateList[i][0], updateList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local takeList = findAllImages(&amp;quot;crem-take.png&amp;quot;);&lt;br /&gt;
  for i=1,#takeList do&lt;br /&gt;
    safeClick(takeList[i][0] + 5, takeList[i][1] + 5);&lt;br /&gt;
    sleepWithStatus(shortWait*2, &amp;quot;Waiting for Everything&amp;quot;);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local all = waitForImage(&amp;quot;Everything.png&amp;quot;, maxWait, &amp;quot;Grabbing Everything&amp;quot;);&lt;br /&gt;
    if all then&lt;br /&gt;
      safeClick(all[0] + 5, all[1] + 5);&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(shortWait*2);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- promptLoad&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function promptLoad()&lt;br /&gt;
  scale = 1.0;&lt;br /&gt;
  local z = 0;&lt;br /&gt;
  local is_done = nil;&lt;br /&gt;
  while not is_done do&lt;br /&gt;
    checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
    lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Configure&amp;quot;);&lt;br /&gt;
    local y = 60;&lt;br /&gt;
&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xffffffff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
    is_done, passCount = lsEditBox(&amp;quot;passes&amp;quot;, 110, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                   0x000000ff, 5);&lt;br /&gt;
    if not tonumber(passCount) then&lt;br /&gt;
      is_done = false;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      passCount = 1;&lt;br /&gt;
    end&lt;br /&gt;
    y = y + 48;&lt;br /&gt;
&lt;br /&gt;
    load_flax = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Flax&amp;quot;,&lt;br /&gt;
                           load_flax);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_papyrus = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Papyrus&amp;quot;,&lt;br /&gt;
                              load_papyrus);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_leeks = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Leeks&amp;quot;,&lt;br /&gt;
                            load_leeks);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_limestone = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Limestone&amp;quot;,&lt;br /&gt;
                                load_limestone);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xd0d0d0ff,&lt;br /&gt;
                   &amp;quot;Make sure each crematory is pinned and empty.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if lsButtonText(10, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;Begin&amp;quot;) then&lt;br /&gt;
        is_done = 1;&lt;br /&gt;
    end&lt;br /&gt;
    if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff,&lt;br /&gt;
                    &amp;quot;End script&amp;quot;) then&lt;br /&gt;
      error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    lsDoFrame();&lt;br /&gt;
    lsSleep(shortWait);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local posList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    safeClick(posList[i][0], posList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  posList = findAllImages(&amp;quot;crem-fire.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    loadSingle(posList[i], woodOffset, &amp;quot;Wood&amp;quot;);&lt;br /&gt;
    if load_flax then&lt;br /&gt;
      loadSingle(posList[i], flaxOffset, &amp;quot;Flax&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_papyrus then&lt;br /&gt;
      loadSingle(posList[i], papyrusOffset, &amp;quot;Papyrus&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_leeks then&lt;br /&gt;
      loadSingle(posList[i], leeksOffset, &amp;quot;Leeks&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_limestone then&lt;br /&gt;
      loadSingle(posList[i], limestoneOffset, &amp;quot;Limestone&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadSingle&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadSingle(pos, offset, type)&lt;br /&gt;
  sleepWithStatus(200, &amp;quot;Waiting to load&amp;quot;);&lt;br /&gt;
  safeClick(pos[0]+5, pos[1]+5+16);&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  local limePos = waitForImage(&amp;quot;crem-limestone.png&amp;quot;, maxWait,&lt;br /&gt;
			       &amp;quot;Loading &amp;quot; .. type .. &amp;quot; Into Crematory&amp;quot;);&lt;br /&gt;
  if limePos then&lt;br /&gt;
    safeClick(limePos[0] + 5, limePos[1] + 5 + offset);&lt;br /&gt;
    lsSleep(100);&lt;br /&gt;
    local maxPos = waitForImage(&amp;quot;crem-max.png&amp;quot;, maxWait,&lt;br /&gt;
				&amp;quot;Adding Maximum Amount&amp;quot;);&lt;br /&gt;
    if maxPos then&lt;br /&gt;
      safeClick(maxPos[0]+5, maxPos[1]+5);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  sleepWithStatus(shortWait, &amp;quot;Waiting for load to complete&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- updateMessage&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function updateMessage(message)&lt;br /&gt;
  local result = &amp;quot;Pass &amp;quot; .. currentPass .. &amp;quot; / &amp;quot; .. passCount .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
  result = result .. message .. &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  if message == &amp;quot;Tending Crematory&amp;quot; then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      local status = &amp;quot;Buttons: &amp;quot;;&lt;br /&gt;
      for j=1,5 do&lt;br /&gt;
	if windows[i].dirs[j] == OPP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	elseif windows[i].dirs[j] == SAME_UP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;+&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. getDir(&amp;quot;-&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	end&lt;br /&gt;
	if j ~= 5 then&lt;br /&gt;
	  status = status .. &amp;quot;, &amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
      end&lt;br /&gt;
      result = result .. &amp;quot;\n&amp;quot; .. status;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getDir(sign, number)&lt;br /&gt;
  local result = &amp;quot;&amp;quot;;&lt;br /&gt;
  if number then&lt;br /&gt;
    result = sign .. number&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Forge.inc to add Treated Metal Sheeting option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;Knife Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Shovel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Nails&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Pipe&amp;quot;,&lt;br /&gt;
&amp;quot;Bars&amp;quot;,&lt;br /&gt;
&amp;quot;Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Straps&amp;quot;,&lt;br /&gt;
&amp;quot;Tools&amp;quot;,&lt;br /&gt;
&amp;quot;Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
bar_button_names = {&lt;br /&gt;
&amp;quot;Iron Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Bar&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Bar&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
sheeting_button_names = {&lt;br /&gt;
&amp;quot;Lead Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Foil&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Treated Metal Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Tin Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Moon Steel Sheeting&amp;quot;,&lt;br /&gt;
&amp;quot;Thoths Metal Sheeting&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
straps_button_names = {&lt;br /&gt;
&amp;quot;Water Metal Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Iron Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Aluminum Strap&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Strap&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
tools_button_names = {&lt;br /&gt;
&amp;quot;Iron Poker&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Blade&amp;quot;,&lt;br /&gt;
&amp;quot;Lead Chisel&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
wire_button_names = {&lt;br /&gt;
&amp;quot;Thoths Metal Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Metal Blue Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Magnesium Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Octecs Alloy Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Silver Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Copper Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Steel Wire&amp;quot;,&lt;br /&gt;
&amp;quot;Gold Wire&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECTS 'SUPPORTING' FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function waitMinutes(minutes)&lt;br /&gt;
-- Teppy Minute is 66 seconds or 66000 ms&lt;br /&gt;
-- Add a 3 second delay (3000 ms) in case of lag&lt;br /&gt;
&lt;br /&gt;
wait_delay = 3000; -- Extra delay on top of Teppy Time, for lag purposes. Default is 3000&lt;br /&gt;
wait = (minutes * 66000) + wait_delay;&lt;br /&gt;
askForFocus(); -- Pause to allow user to focus back to ATITD (if they checked the Pause for Focus Box), before starting project.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doneGUI(totalPasses)&lt;br /&gt;
wait = 5000;  -- Gives a 5 second delay to review the GUI stats, before quitting/returing to Main Menu.&lt;br /&gt;
clickAllImages(&amp;quot;This.png&amp;quot;); -- Refresh the screen. Update forge window so we know how much charcoal is currently in each forge before next project&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. totalPasses .. &amp;quot;/&amp;quot; .. totalPasses .. &amp;quot;] ALL DONE!\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
runForge(); -- Return to/Display Main Menu&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function waitGUI(pass)&lt;br /&gt;
	--If any forge menus shows the Forge_StartFire.png - refreshWindows() function, then display the stalledMessage in the GUI. Suggests its not lit (or out of charcoal)&lt;br /&gt;
	if #stalled &amp;gt; 0 then&lt;br /&gt;
	stalledMessage = &amp;quot;\n[&amp;quot; .. #stalled .. &amp;quot;] Forges STALLED (Needs Lit)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
	stalledMessage = &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
sleepWithStatus(wait, &amp;quot;[&amp;quot; .. pass .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;] Total Passes\n----------------------------------------------\n[&amp;quot; .. batch .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per forge\n[&amp;quot; .. project_windows .. &amp;quot;] Forges working&amp;quot; .. stalledMessage .. &amp;quot;\n----------------------------------------------\n[&amp;quot; .. batch*project_windows .. &amp;quot;] &amp;quot; .. name .. &amp;quot; per pass\n----------------------------------------------\n[&amp;quot; .. made .. &amp;quot;/&amp;quot; .. batch*project_windows*num_loops .. &amp;quot;] &amp;quot; .. name .. &amp;quot; / Completed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
made = made + (batch*project_windows);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function refreshWindows()&lt;br /&gt;
	checkBreak();&lt;br /&gt;
	pinned_windows = clickAllImages(&amp;quot;This.png&amp;quot;);&lt;br /&gt;
	lsSleep(400);&lt;br /&gt;
		if pinned_windows == 0 then&lt;br /&gt;
		error(&amp;quot;No pinned windows found!&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		stalled = findAllImages(&amp;quot;Forge/Forge_StartFire.png&amp;quot;);&lt;br /&gt;
			if #stalled == pinned_windows/2 then -- The /2 is because each forge has 'This' located in window twice. Can't use ThisIs.png either because idle/working forge has different words (Idle Forge shows 'This' only and Working Forge shows 'This Is'&lt;br /&gt;
			error(&amp;quot;No forges are lit!&amp;quot;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------- MAKE PROJECT FUNCTIONS -----------------&lt;br /&gt;
&lt;br /&gt;
function KnifeBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Knife Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Knife_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ShovelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Shovel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Shovel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Nails()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Nails&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Nail.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadPipe()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Pipe&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Pipe.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1500, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Gold Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverBar()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Bar&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Bars.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Bar.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function LeadSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TreatedSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	typeOfMetal = promptText(&amp;quot;Enter the metal name:&amp;quot;);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Treated Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
				refreshWindows();&lt;br /&gt;
				clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
				lsSleep(400);&lt;br /&gt;
				project_windows = clickAllText(&amp;quot;Treated&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
					sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
					lsSleep(400);&lt;br /&gt;
					local numClicked = clickAllText(typeOfMetal);&lt;br /&gt;
					if numClicked == 0 then&lt;br /&gt;
						break;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloySheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 8;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Silver Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 6;&lt;br /&gt;
	name = &amp;quot;Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldFoil()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 4;&lt;br /&gt;
	name = &amp;quot;Gold Foil&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Foil.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Metal Blue Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(15);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TinSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Tin Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Tin_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MoonSteelSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Moon Steel Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Moon_Steel_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalSheeting()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Sheeting&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Sheeting.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Sheeting.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function WaterMetalStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Water Metal Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Water_Metal_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(3);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function AluminumStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Aluminum Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Aluminum_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function CopperStrap()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Copper Strap&amp;quot;;&lt;br /&gt;
	waitMinutes(2);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Straps.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Strap.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IronPoker()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Iron Poker&amp;quot;;&lt;br /&gt;
	waitMinutes(20);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Iron_Poker.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelBlade()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Steel Blade&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Blade.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function LeadChisel()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 1;&lt;br /&gt;
	name = &amp;quot;Lead Chisel&amp;quot;;&lt;br /&gt;
	waitMinutes(6);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Tools.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Lead_Chisel.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ThothsMetalWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 14;&lt;br /&gt;
	name = &amp;quot;Thoths Metal Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Thoths_Metal_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MetalBlueWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 12;&lt;br /&gt;
	name = &amp;quot;Metal Blue Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Metal_Blue_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MagnesiumWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Magnesium Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(1);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Magnesium_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OctecsAlloyWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 16;&lt;br /&gt;
	name = &amp;quot;Octecs Alloy Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Octecs_Alloy_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SilverWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 5;&lt;br /&gt;
	name = &amp;quot;Silver Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Silver_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CopperWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Copper Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Copper_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function SteelWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 20;&lt;br /&gt;
	name = &amp;quot;Steel Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(5);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Steel_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function GoldWire()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	batch = 10;&lt;br /&gt;
	name = &amp;quot;Gold Wire&amp;quot;;&lt;br /&gt;
	waitMinutes(10);&lt;br /&gt;
		for i=1, num_loops do&lt;br /&gt;
			while 1 do&lt;br /&gt;
			refreshWindows();&lt;br /&gt;
			clickAllImages(&amp;quot;Forge/Forge_Wire.png&amp;quot;);&lt;br /&gt;
			lsSleep(400);&lt;br /&gt;
			project_windows = clickAllImages(&amp;quot;Forge/Forge_Gold_Wire.png&amp;quot;);&lt;br /&gt;
				if project_windows == 0 then&lt;br /&gt;
				sleepWithStatus(1100, &amp;quot;Waiting for Project windows&amp;quot;);&lt;br /&gt;
				else&lt;br /&gt;
				break;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			waitGUI(i);&lt;br /&gt;
		end&lt;br /&gt;
	doneGUI(num_loops);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function Bars()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #bar_button_names do&lt;br /&gt;
				if bar_button_names[i] == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif bar_button_names[i] == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, bar_button_names[i]) then&lt;br /&gt;
					image_name = bar_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Bar&amp;quot; then&lt;br /&gt;
			IronBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Bar&amp;quot; then&lt;br /&gt;
			GoldBar();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Bar&amp;quot; then&lt;br /&gt;
			SilverBar();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sheeting()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #sheeting_button_names do&lt;br /&gt;
				if sheeting_button_names[i] == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
        elseif sheeting_button_names[i] == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 285;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 210;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 235;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif sheeting_button_names[i] == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 260;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, sheeting_button_names[i]) then&lt;br /&gt;
					image_name = sheeting_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Lead Sheeting&amp;quot; then&lt;br /&gt;
			LeadSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Sheeting&amp;quot; then&lt;br /&gt;
			GoldSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Sheeting&amp;quot; then&lt;br /&gt;
			CopperSheeting();&lt;br /&gt;
    elseif image_name == &amp;quot;Treated Metal Sheeting&amp;quot; then&lt;br /&gt;
			TreatedSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Sheeting&amp;quot; then&lt;br /&gt;
			OctecsAlloySheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Sheeting&amp;quot; then&lt;br /&gt;
			SilverSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Sheeting&amp;quot; then&lt;br /&gt;
			SteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Foil&amp;quot; then&lt;br /&gt;
			GoldFoil();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Sheeting&amp;quot; then&lt;br /&gt;
			MetalBlueSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Tin Sheeting&amp;quot; then&lt;br /&gt;
			TinSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Moon Steel Sheeting&amp;quot; then&lt;br /&gt;
			MoonSteelSheeting();&lt;br /&gt;
		elseif image_name == &amp;quot;Thoths Metal Sheeting&amp;quot; then&lt;br /&gt;
			ThothsMetalSheeting();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Straps()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #straps_button_names do&lt;br /&gt;
				if straps_button_names[i] == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif straps_button_names[i] == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 100;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, straps_button_names[i]) then&lt;br /&gt;
					image_name = straps_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Water Metal Strap&amp;quot; then&lt;br /&gt;
			WaterMetalStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Iron Strap&amp;quot; then&lt;br /&gt;
			IronStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Aluminum Strap&amp;quot; then&lt;br /&gt;
			AluminumStrap();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Strap&amp;quot; then&lt;br /&gt;
			CopperStrap();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Tools()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #tools_button_names do&lt;br /&gt;
				if tools_button_names[i] == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 40;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				elseif tools_button_names[i] == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 70;&lt;br /&gt;
					bsize = 250;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, bsize, 0x80D080ff, tools_button_names[i]) then&lt;br /&gt;
					image_name = tools_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Iron Poker&amp;quot; then&lt;br /&gt;
			IronPoker();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Blade&amp;quot; then&lt;br /&gt;
			SteelBlade();&lt;br /&gt;
		elseif image_name == &amp;quot;Lead Chisel&amp;quot; then&lt;br /&gt;
			LeadChisel();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Wire()&lt;br /&gt;
	while 1 do&lt;br /&gt;
		-- Ask for which button&lt;br /&gt;
		local image_name = nil;&lt;br /&gt;
		local is_done = nil;	&lt;br /&gt;
		while not is_done do&lt;br /&gt;
			local y = nil;&lt;br /&gt;
			local x = nil;&lt;br /&gt;
			local bsize = nil;&lt;br /&gt;
			for i=1, #wire_button_names do&lt;br /&gt;
				if wire_button_names[i] == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 10;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 35;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 60;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 85;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 110;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 135;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 160;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				elseif wire_button_names[i] == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
					x = 30;&lt;br /&gt;
					y = 185;&lt;br /&gt;
					bsize = 150;&lt;br /&gt;
				end&lt;br /&gt;
				if lsButtonText(x, y, 0, 250, 0x80D080ff, wire_button_names[i]) then&lt;br /&gt;
					image_name = wire_button_names[i];&lt;br /&gt;
					is_done = 1;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;End script&amp;quot;) then&lt;br /&gt;
				error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
			end&lt;br /&gt;
			lsDoFrame();&lt;br /&gt;
			lsSleep(10);&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
		if image_name == &amp;quot;Thoths Metal Wire&amp;quot; then&lt;br /&gt;
			ThothsMetalWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Metal Blue Wire&amp;quot; then&lt;br /&gt;
			MetalBlueWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Magnesium Wire&amp;quot; then&lt;br /&gt;
			MagnesiumWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Octecs Alloy Wire&amp;quot; then&lt;br /&gt;
			OctecsAlloyWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Silver Wire&amp;quot; then&lt;br /&gt;
			SilverWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Copper Wire&amp;quot; then&lt;br /&gt;
			CopperWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Steel Wire&amp;quot; then&lt;br /&gt;
			SteelWire();&lt;br /&gt;
		elseif image_name == &amp;quot;Gold Wire&amp;quot; then&lt;br /&gt;
			GoldWire();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225466</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225466"/>
		<updated>2013-01-02T06:35:45Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
Cuttable Gem donation box next to Guild Hall. Please donate as many Lapis / Sunstone as you can spare!&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 5 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 11 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 3 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 2 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 800 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 4000 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 6000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 3000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 6720 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 5212 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 2600 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 1400 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 10150 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 15496 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 3635 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 1200 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 29 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 64 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* OneBanana: 3 Carrot, 1 Cabbage, 6 Red Sand&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Lenala: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 6 Red Sand&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225460</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225460"/>
		<updated>2013-01-02T04:46:33Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
Cuttable Gem donation box next to Guild Hall. Please donate as many Lapis / Sunstone as you can spare!&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 5 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 7 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 2 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 2 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 800 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 4000 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 6000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 3000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 6720 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 5212 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 2600 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 1400 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 10150 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 15496 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 3635 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 1200 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 29 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 64 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* OneBanana: 3 Carrot, 1 Cabbage, 6 Red Sand&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Lenala: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 6 Red Sand&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225449</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225449"/>
		<updated>2013-01-02T01:03:01Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paint Reaction Template:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modified VT PaintWatch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixed Crematory Macro:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- crematory.lua v1.2 by Tallow&lt;br /&gt;
--&lt;br /&gt;
-- Runs one or more crematories. Automatically discovers button&lt;br /&gt;
-- configuration on its own and loads/unloads materials.&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
assert(loadfile(&amp;quot;luaScripts/common.inc&amp;quot;))();&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  Crematory v1.2 (by Tallow) --&lt;br /&gt;
  Automatically runs one or more crematories.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
wmText = &amp;quot;Tap control on Crematories to open and pin.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
OPP = 0;&lt;br /&gt;
SAME_UP = 1;&lt;br /&gt;
SAME_DOWN = 2;&lt;br /&gt;
&lt;br /&gt;
tolerance = 6500;&lt;br /&gt;
tickTime = 1000;&lt;br /&gt;
maxWait = 1000;&lt;br /&gt;
longWait = 500;&lt;br /&gt;
shortWait = 30;&lt;br /&gt;
&lt;br /&gt;
colOffsets = {&lt;br /&gt;
  {35-40-3, 204-182},&lt;br /&gt;
  {71-40-3, 204-182},&lt;br /&gt;
  {107-40-3, 204-182},&lt;br /&gt;
  {143-40-3, 204-182},&lt;br /&gt;
  {179-40-3, 204-182},&lt;br /&gt;
  {215-40-3, 204-182},&lt;br /&gt;
  {251-40-3, 204-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
colWidth = 36-35+6;&lt;br /&gt;
colHeight = 323-204;&lt;br /&gt;
colMiddle = 57;&lt;br /&gt;
&lt;br /&gt;
buttonOffsets = {&lt;br /&gt;
  {49-40, 333-182},&lt;br /&gt;
  {89-40, 333-182},&lt;br /&gt;
  {129-40, 333-182},&lt;br /&gt;
  {169-40, 333-182},&lt;br /&gt;
  {209-40, 333-182}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
buttonWidth = 78-49;&lt;br /&gt;
buttonHeight = 354-333;&lt;br /&gt;
buttonClick = 10;&lt;br /&gt;
&lt;br /&gt;
limestoneOffset = 0;&lt;br /&gt;
leeksOffset = 16;&lt;br /&gt;
flaxOffset = 32;&lt;br /&gt;
papyrusOffset = 48;&lt;br /&gt;
woodOffset = 64;&lt;br /&gt;
&lt;br /&gt;
load_flax = true;&lt;br /&gt;
load_papyrus = true;&lt;br /&gt;
load_leeks = true;&lt;br /&gt;
load_limestone = true;&lt;br /&gt;
&lt;br /&gt;
currentPass = 1;&lt;br /&gt;
passCount = 5;&lt;br /&gt;
&lt;br /&gt;
windows = nil;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- doit&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
  windowManager(&amp;quot;Crematory Setup&amp;quot;, wmText);&lt;br /&gt;
  unpinOnExit(runCrematories);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function runCrematories()&lt;br /&gt;
  promptLoad();&lt;br /&gt;
  askForFocus();&lt;br /&gt;
  for i=1,passCount do&lt;br /&gt;
    currentPass = i;&lt;br /&gt;
    takeAll();&lt;br /&gt;
    loadAll();&lt;br /&gt;
    start();&lt;br /&gt;
    local is_done = false;&lt;br /&gt;
    while not is_done do&lt;br /&gt;
      tick();&lt;br /&gt;
      is_done = checkDone();&lt;br /&gt;
    end&lt;br /&gt;
    sleepWithStatus(longWait*5, updateMessage(&amp;quot;Waiting to take&amp;quot;));&lt;br /&gt;
  end&lt;br /&gt;
  takeAll();&lt;br /&gt;
  lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- addWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function addWindow(vPos)&lt;br /&gt;
  local newWindow = {&lt;br /&gt;
    origin = {vPos[0], vPos[1]},&lt;br /&gt;
    ups = {nil, nil, nil, nil, nil},&lt;br /&gt;
    downs = {nil, nil, nil, nil, nil},&lt;br /&gt;
    dirs = {OPP, OPP, OPP, OPP, OPP},&lt;br /&gt;
    double = {false, false, false, false, false, false, false},&lt;br /&gt;
    probe = 0,&lt;br /&gt;
    lastPos = nil;&lt;br /&gt;
    lastDiff = nil;&lt;br /&gt;
    buttonState = {true, true, true, true, true},&lt;br /&gt;
    sameCount = 0,&lt;br /&gt;
    done = false&lt;br /&gt;
  };&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, newWindow.origin[1] - 31,&lt;br /&gt;
                                   newWindow.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    newWindow.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  else&lt;br /&gt;
    error &amp;quot;No fire button. Do you have Advanced Chemistry?&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  windows[#windows + 1] = newWindow;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- resetWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function resetWindow(current)&lt;br /&gt;
  local vLime = srFindImageInRange(&amp;quot;crem-lime.png&amp;quot;, current.origin[1] - 20,&lt;br /&gt;
                                   current.origin[2] - 20, 100, 100,&lt;br /&gt;
				   tolerance);&lt;br /&gt;
  if (not vLime) then&lt;br /&gt;
     error &amp;quot;Could not find origin again.&amp;quot;;&lt;br /&gt;
  end&lt;br /&gt;
  if ((vLime[0] ~= current.origin[1]) or&lt;br /&gt;
      (vLime[1] ~= current.origin[2])) then&lt;br /&gt;
     error(&amp;quot;Window moved from (&amp;quot; .. current.origin[1] .. &amp;quot;, &amp;quot; ..&lt;br /&gt;
       current.origin[2] .. &amp;quot;) to (&amp;quot; .. vLime[0] .. &amp;quot;, &amp;quot; .. vLime[1] .. &amp;quot;)&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
  local vFire = srFindImageInRange(&amp;quot;crem-fire.png&amp;quot;, current.origin[1] - 31,&lt;br /&gt;
                                   current.origin[2] - 175, 238, 175,&lt;br /&gt;
                                   tolerance);&lt;br /&gt;
  if vFire then&lt;br /&gt;
    current.fire = {vFire[0], vFire[1]};&lt;br /&gt;
  end&lt;br /&gt;
  if current.probe &amp;lt; 6 then&lt;br /&gt;
    current.probe = 0;&lt;br /&gt;
    current.ups = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.downs = {nil, nil, nil, nil, nil};&lt;br /&gt;
    current.dirs = {OPP, OPP, OPP, OPP, OPP};&lt;br /&gt;
    current.double = {false, false, false, false, false, false, false};&lt;br /&gt;
  end&lt;br /&gt;
  current.lastPos = nil;&lt;br /&gt;
  current.lastDiff = nil;&lt;br /&gt;
  current.buttonState = {true, true, true, true, true};&lt;br /&gt;
  current.sameCount = 0;&lt;br /&gt;
  current.done = false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- start&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function start()&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Waiting to begin&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  if windows then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      resetWindow(windows[i]);&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    windows = {};&lt;br /&gt;
    local posList = findAllImages(&amp;quot;crem-lime.png&amp;quot;);&lt;br /&gt;
    if #posList == 0 then&lt;br /&gt;
      error &amp;quot;No crematories found&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    for i=1,#posList do&lt;br /&gt;
      addWindow(posList[i]);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if windows[i].fire then&lt;br /&gt;
      safeClick(windows[i].fire[1] + 5, windows[i].fire[2] + 5);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Finding my Chi&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    windows[i].lastPos = findPoints(windows[i]);&lt;br /&gt;
    if not windows[i].lastPos then&lt;br /&gt;
      windows[i].done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tick&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tick()&lt;br /&gt;
  sleepWithStatus(tickTime, updateMessage(&amp;quot;Tending Crematory&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    tickWindow(windows[i]);&lt;br /&gt;
  end&lt;br /&gt;
  checkBreak();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- tickWindow&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function tickWindow(current)&lt;br /&gt;
  if not current.done then&lt;br /&gt;
    local points = findPoints(current);&lt;br /&gt;
    if points then&lt;br /&gt;
      probeNext(current, points);&lt;br /&gt;
      if current.probe &amp;gt; 5 then&lt;br /&gt;
        toggleButtons(current, points, current.buttonState);&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkDone&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkDone()&lt;br /&gt;
  local all_done = true;&lt;br /&gt;
  for i=1,#windows do&lt;br /&gt;
    if not windows[i].done then&lt;br /&gt;
      local done = srFindImageInRange(&amp;quot;crem-done.png&amp;quot;, windows[i].origin[1] - 3,&lt;br /&gt;
                                      windows[i].origin[2] - 15, 40, 40,&lt;br /&gt;
                                      tolerance);&lt;br /&gt;
      if done then&lt;br /&gt;
        windows[i].done = true;&lt;br /&gt;
      else&lt;br /&gt;
        all_done = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return all_done;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findPoints&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findPoints(current)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    local offset = {current.origin[1] + colOffsets[i][1],&lt;br /&gt;
                    current.origin[2] + colOffsets[i][2]};&lt;br /&gt;
    local point = srFindImageInRange(&amp;quot;crem-point.png&amp;quot;, offset[1],&lt;br /&gt;
                                     offset[2] - 5,&lt;br /&gt;
                                     colWidth, colHeight + 10, tolerance);&lt;br /&gt;
    if point then&lt;br /&gt;
      result[i] = point[1] - colOffsets[i][2] - current.origin[2] - colMiddle;&lt;br /&gt;
    else&lt;br /&gt;
      result = nil;&lt;br /&gt;
      break;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- findDiffs&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function findDiffs(current, points)&lt;br /&gt;
  local result = {};&lt;br /&gt;
  local all_zero = true;&lt;br /&gt;
  for i=1,7 do&lt;br /&gt;
    result[i] = points[i] - current.lastPos[i];&lt;br /&gt;
    if result[i] ~= 0 then&lt;br /&gt;
      all_zero = false;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if all_zero then&lt;br /&gt;
    result = nil;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- probeNext&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function probeNext(current, points)&lt;br /&gt;
  local diffs = findDiffs(current, points);&lt;br /&gt;
  checkSame(current, diffs);&lt;br /&gt;
  if diffs and current.probe &amp;lt; 6 then&lt;br /&gt;
    if current.probe &amp;gt; 0 then&lt;br /&gt;
      for i=1,7 do&lt;br /&gt;
        if current.lastDiffs[i] &amp;lt; 0 and diffs[i] &amp;gt; 0 then&lt;br /&gt;
          if current.ups[current.probe] then&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_UP;&lt;br /&gt;
          else&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        elseif current.lastDiffs[i] &amp;gt; 0 and diffs[i] &amp;lt; 0 then&lt;br /&gt;
          if current.downs[current.probe] then&lt;br /&gt;
            current.ups[current.probe] = i;&lt;br /&gt;
            current.dirs[current.probe] = SAME_DOWN;&lt;br /&gt;
          else&lt;br /&gt;
            current.downs[current.probe] = i;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if current.ups[current.probe] and current.downs[current.probe] then&lt;br /&gt;
        current.double[current.ups[current.probe]] = true;&lt;br /&gt;
        current.double[current.downs[current.probe]] = true;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    current.lastPos = points;&lt;br /&gt;
    current.lastDiffs = diffs;&lt;br /&gt;
    current.probe = current.probe + 1;&lt;br /&gt;
    if current.probe &amp;lt;= 5 then&lt;br /&gt;
      local newProbe = not current.buttonState[current.probe];&lt;br /&gt;
      local clickX = current.origin[1] + buttonOffsets[current.probe][1] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
      local clickY = current.origin[2] + buttonOffsets[current.probe][2] +&lt;br /&gt;
	buttonClick;&lt;br /&gt;
&lt;br /&gt;
      current.buttonState[current.probe] = newProbe;&lt;br /&gt;
      safeClick(clickX, clickY);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkSame&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function checkSame(current, diffs)&lt;br /&gt;
  if diffs then&lt;br /&gt;
    local all_same = true;&lt;br /&gt;
    for i=1,#diffs do&lt;br /&gt;
      if diffs[i] ~= 0 then&lt;br /&gt;
        all_same = false;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if all_same then&lt;br /&gt;
      current.sameCount = current.sameCount + 1;&lt;br /&gt;
    else&lt;br /&gt;
      current.sameCount = 0;&lt;br /&gt;
    end&lt;br /&gt;
    if current.sameCount &amp;gt; 10 then&lt;br /&gt;
      current.done = true;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- toggleButtons&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function toggleButtons(current, points, buttonState)&lt;br /&gt;
  local balance = getBalance(points, current.double);&lt;br /&gt;
  for i=1,5 do&lt;br /&gt;
    local up = getPointValue(points, current.double, current.ups[i],&lt;br /&gt;
                             balance);&lt;br /&gt;
    local down = getPointValue(points, current.double, current.downs[i],&lt;br /&gt;
                               balance);&lt;br /&gt;
    local goalState = ((up &amp;gt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                       (up &amp;gt;= 0 and down &amp;gt;= 0 and up &amp;gt; down) or&lt;br /&gt;
                       (up &amp;lt;= 0 and down &amp;lt;= 0 and up &amp;gt; down));&lt;br /&gt;
    if current.dirs[i] == SAME_UP then&lt;br /&gt;
      goalState = ((up &amp;gt;= 0 and down &amp;gt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;gt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;lt;= down));&lt;br /&gt;
    elseif current.dirs[i] == SAME_DOWN then&lt;br /&gt;
      goalState = ((up &amp;lt;= 0 and down &amp;lt;= 0) or&lt;br /&gt;
                   (up &amp;gt;= 0 and down &amp;lt;= 0 and up &amp;lt;= -down) or&lt;br /&gt;
                   (up &amp;lt;= 0 and down &amp;gt;= 0 and -up &amp;gt;= down));&lt;br /&gt;
    end&lt;br /&gt;
    local goalStateStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if goalState then&lt;br /&gt;
      goalStateStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    local buttonStr = &amp;quot;false&amp;quot;;&lt;br /&gt;
    if buttonState[i] then&lt;br /&gt;
      buttonStr = &amp;quot;true&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if (goalState and not buttonState[i]) or&lt;br /&gt;
       (not goalState and buttonState[i]) then&lt;br /&gt;
      safeClick(current.origin[1] + buttonOffsets[i][1] + buttonClick,&lt;br /&gt;
		current.origin[2] + buttonOffsets[i][2] + buttonClick);&lt;br /&gt;
      lsSleep(shortWait);&lt;br /&gt;
      buttonState[i] = goalState;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getBalance&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getBalance(points, double)&lt;br /&gt;
  local above = 0;&lt;br /&gt;
  local below = 0;&lt;br /&gt;
  for i=1,#points do&lt;br /&gt;
    if points[i] &amp;gt; 0 and double[i] then&lt;br /&gt;
      below = below + 1;&lt;br /&gt;
    elseif points[i] &amp;lt; 0 and double[i] then&lt;br /&gt;
      above = above + 1;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if above &amp;gt;= 3 then&lt;br /&gt;
    result = -5;&lt;br /&gt;
  elseif below &amp;gt;= 3 then&lt;br /&gt;
    result = 5;&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getPointValue&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getPointValue(points, double, index, balance)&lt;br /&gt;
  local result = 0;&lt;br /&gt;
  if index then&lt;br /&gt;
    result = points[index];&lt;br /&gt;
    if not double[index] then&lt;br /&gt;
      result = result + balance;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- takeAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function takeAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local updateList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#updateList do&lt;br /&gt;
    safeClick(updateList[i][0], updateList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local takeList = findAllImages(&amp;quot;crem-take.png&amp;quot;);&lt;br /&gt;
  for i=1,#takeList do&lt;br /&gt;
    safeClick(takeList[i][0] + 5, takeList[i][1] + 5);&lt;br /&gt;
    sleepWithStatus(shortWait*2, &amp;quot;Waiting for Everything&amp;quot;);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local all = waitForImage(&amp;quot;Everything.png&amp;quot;, maxWait, &amp;quot;Grabbing Everything&amp;quot;);&lt;br /&gt;
    if all then&lt;br /&gt;
      safeClick(all[0] + 5, all[1] + 5);&lt;br /&gt;
    end&lt;br /&gt;
    lsSleep(shortWait*2);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- promptLoad&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function promptLoad()&lt;br /&gt;
  scale = 1.0;&lt;br /&gt;
  local z = 0;&lt;br /&gt;
  local is_done = nil;&lt;br /&gt;
  while not is_done do&lt;br /&gt;
    checkBreak(&amp;quot;disallow pause&amp;quot;);&lt;br /&gt;
    lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, &amp;quot;Configure&amp;quot;);&lt;br /&gt;
    local y = 60;&lt;br /&gt;
&lt;br /&gt;
    lsPrint(5, y, z, scale, scale, 0xffffffff, &amp;quot;Passes:&amp;quot;);&lt;br /&gt;
    is_done, passCount = lsEditBox(&amp;quot;passes&amp;quot;, 110, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                   0x000000ff, 5);&lt;br /&gt;
    if not tonumber(passCount) then&lt;br /&gt;
      is_done = false;&lt;br /&gt;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, &amp;quot;MUST BE A NUMBER&amp;quot;);&lt;br /&gt;
      passCount = 1;&lt;br /&gt;
    end&lt;br /&gt;
    y = y + 48;&lt;br /&gt;
&lt;br /&gt;
    load_flax = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Flax&amp;quot;,&lt;br /&gt;
                           load_flax);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_papyrus = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Dried Papyrus&amp;quot;,&lt;br /&gt;
                              load_papyrus);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_leeks = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Leeks&amp;quot;,&lt;br /&gt;
                            load_leeks);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    load_limestone = lsCheckBox(15, y, z+10, 0xffffffff, &amp;quot;Limestone&amp;quot;,&lt;br /&gt;
                                load_limestone);&lt;br /&gt;
    y = y + 32;&lt;br /&gt;
&lt;br /&gt;
    lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xd0d0d0ff,&lt;br /&gt;
                   &amp;quot;Make sure each crematory is pinned and empty.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if lsButtonText(10, lsScreenY - 30, z, 100, 0xFFFFFFff, &amp;quot;Begin&amp;quot;) then&lt;br /&gt;
        is_done = 1;&lt;br /&gt;
    end&lt;br /&gt;
    if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff,&lt;br /&gt;
                    &amp;quot;End script&amp;quot;) then&lt;br /&gt;
      error &amp;quot;Clicked End Script button&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    lsDoFrame();&lt;br /&gt;
    lsSleep(shortWait);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadAll&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadAll()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local posList = findAllImages(&amp;quot;ThisIs.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    safeClick(posList[i][0], posList[i][1]);&lt;br /&gt;
  end&lt;br /&gt;
  sleepWithStatus(longWait, updateMessage(&amp;quot;Update Crematory Windows&amp;quot;));&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  posList = findAllImages(&amp;quot;crem-fire.png&amp;quot;);&lt;br /&gt;
  for i=1,#posList do&lt;br /&gt;
    loadSingle(posList[i], woodOffset, &amp;quot;Wood&amp;quot;);&lt;br /&gt;
    if load_flax then&lt;br /&gt;
      loadSingle(posList[i], flaxOffset, &amp;quot;Flax&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_papyrus then&lt;br /&gt;
      loadSingle(posList[i], papyrusOffset, &amp;quot;Papyrus&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_leeks then&lt;br /&gt;
      loadSingle(posList[i], leeksOffset, &amp;quot;Leeks&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
    if load_limestone then&lt;br /&gt;
      loadSingle(posList[i], limestoneOffset, &amp;quot;Limestone&amp;quot;);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- loadSingle&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function loadSingle(pos, offset, type)&lt;br /&gt;
  sleepWithStatus(200, &amp;quot;Waiting to load&amp;quot;);&lt;br /&gt;
  safeClick(pos[0]+5, pos[1]+5+16);&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  local limePos = waitForImage(&amp;quot;crem-limestone.png&amp;quot;, maxWait,&lt;br /&gt;
			       &amp;quot;Loading &amp;quot; .. type .. &amp;quot; Into Crematory&amp;quot;);&lt;br /&gt;
  if limePos then&lt;br /&gt;
    safeClick(limePos[0] + 5, limePos[1] + 5 + offset);&lt;br /&gt;
    lsSleep(100);&lt;br /&gt;
    local maxPos = waitForImage(&amp;quot;crem-max.png&amp;quot;, maxWait,&lt;br /&gt;
				&amp;quot;Adding Maximum Amount&amp;quot;);&lt;br /&gt;
    if maxPos then&lt;br /&gt;
      safeClick(maxPos[0]+5, maxPos[1]+5);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  lsSleep(100);&lt;br /&gt;
  sleepWithStatus(shortWait, &amp;quot;Waiting for load to complete&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- updateMessage&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function updateMessage(message)&lt;br /&gt;
  local result = &amp;quot;Pass &amp;quot; .. currentPass .. &amp;quot; / &amp;quot; .. passCount .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
  result = result .. message .. &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  if message == &amp;quot;Tending Crematory&amp;quot; then&lt;br /&gt;
    for i=1,#windows do&lt;br /&gt;
      local status = &amp;quot;Buttons: &amp;quot;;&lt;br /&gt;
      for j=1,5 do&lt;br /&gt;
	if windows[i].dirs[j] == OPP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	elseif windows[i].dirs[j] == SAME_UP then&lt;br /&gt;
	  status = status .. getDir(&amp;quot;+&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;+&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. getDir(&amp;quot;-&amp;quot;, windows[i].ups[j]) ..&lt;br /&gt;
	    getDir(&amp;quot;-&amp;quot;, windows[i].downs[j]);&lt;br /&gt;
	end&lt;br /&gt;
	if j ~= 5 then&lt;br /&gt;
	  status = status .. &amp;quot;, &amp;quot;;&lt;br /&gt;
	else&lt;br /&gt;
	  status = status .. &amp;quot;\n&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
      end&lt;br /&gt;
      result = result .. &amp;quot;\n&amp;quot; .. status;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getDir(sign, number)&lt;br /&gt;
  local result = &amp;quot;&amp;quot;;&lt;br /&gt;
  if number then&lt;br /&gt;
    result = sign .. number&lt;br /&gt;
  end&lt;br /&gt;
  return result;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225366</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225366"/>
		<updated>2013-01-01T02:30:27Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
Cuttable Gem donation box next to Guild Hall. Please donate as many Lapis / Sunstone as you can spare!&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 4 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 4000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 2000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 14865 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 300 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 64 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&amp;lt;br /&amp;gt;--Sorry, I just added mine at the bottom. Can someone move mine if &amp;quot;cheaper&amp;quot; for each paint? -Sirena&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225365</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225365"/>
		<updated>2013-01-01T02:22:38Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 4 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 4000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 2000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 14865 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 300 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 64 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&amp;lt;br /&amp;gt;--Sorry, I just added mine at the bottom. Can someone move mine if &amp;quot;cheaper&amp;quot; for each paint? -Sirena&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225364</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225364"/>
		<updated>2013-01-01T02:16:04Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Paint Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 4 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 4000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 2000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 14865 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 300 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&amp;lt;br /&amp;gt;--Sorry, I just added mine at the bottom. Can someone move mine if &amp;quot;cheaper&amp;quot; for each paint? -Sirena&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225363</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225363"/>
		<updated>2013-01-01T02:15:09Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Paint Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 4 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 4000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 2000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 300 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 14865 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 300 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&amp;lt;br /&amp;gt;--Sorry, I just added mine at the bottom. Can someone move mine if &amp;quot;cheaper&amp;quot; for each paint? -Sirena&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
* Selune: 1 Clay, 3 RedSand, 1 Potash, 1 Cabbage, 5 Carrot&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
* Selune: 1 Lead, 5 RedSand, 4 Carrot, 1 Saltpeter&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225343</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225343"/>
		<updated>2013-01-01T00:45:53Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paint Reaction Template:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | B | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modified VT PaintWatch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225340</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225340"/>
		<updated>2013-01-01T00:30:46Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paint Reaction Template:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cabbage | RedSand | G | -11 | 26&lt;br /&gt;
Cabbage | Iron | W | 27 | 27&lt;br /&gt;
Cabbage | Copper | W | -20 | -60&lt;br /&gt;
Cabbage | Potash | B | 19 | -63&lt;br /&gt;
Carrot | RedSand | R | 32 | -26&lt;br /&gt;
Carrot | Lead | W | -17 | 61&lt;br /&gt;
Carrot | Potash | W | -59 | 56&lt;br /&gt;
Carrot | Lime | G | 0 | 23&lt;br /&gt;
Clay | Lead | B | 32 | -16&lt;br /&gt;
Clay | Copper | R | 20 | -12&lt;br /&gt;
Clay | Sulfur | G | -55 | -41&lt;br /&gt;
Clay | Saltpeter | B | 54 | 35&lt;br /&gt;
Lead | Iron | B | 4 | 14&lt;br /&gt;
Lead | Copper | W | -25 | -40&lt;br /&gt;
Lead | Saltpeter | G | -7 | 47&lt;br /&gt;
Iron | Sulfur | G | -17 | 0&lt;br /&gt;
Iron | Saltpeter | W | -55 | 7&lt;br /&gt;
Copper | Sulfur | W | -25 | -12&lt;br /&gt;
Copper | Saltpeter | B | 42 | 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modified VT PaintWatch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225339</id>
		<title>User:Selune</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=User:Selune&amp;diff=225339"/>
		<updated>2013-01-01T00:16:34Z</updated>

		<summary type="html">&lt;p&gt;Selune: Created page with &amp;quot;Modified VT PaintWatch: &amp;lt;pre&amp;gt; -- --  --  --Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10 --Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10 --Clay			| 128, 96, 32    ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modified VT PaintWatch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
-- &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
--Cabbage		| 129, 63, 145   | 8      | Y | bulk    | 10&lt;br /&gt;
--Carrot		| 225, 113, 33   | 10     | Y | bulk    | 10&lt;br /&gt;
--Clay			| 128, 96, 32    | 4      | Y | bulk    | 20&lt;br /&gt;
--DeadTongue		| 112, 64, 64    | 500    | N | normal  | 4&lt;br /&gt;
--ToadSkin		| 48, 96, 48     | 500    | N | normal  | 4&lt;br /&gt;
--EarthLight		| 128, 240, 224  | 10000  | N | normal  | 4&lt;br /&gt;
--RedSand		| 144, 16, 24    | 10     | Y | bulk    | 20&lt;br /&gt;
--Lead			| 80, 80, 96     | 50     | Y | normal  | 6&lt;br /&gt;
--Silver		| 16, 16, 32     | 50     | N | normal  | 6&lt;br /&gt;
--Iron			| 96, 48, 32     | 30     | Y | normal  | 8&lt;br /&gt;
--Copper		| 64, 192, 192   | 30     | Y | normal  | 8&lt;br /&gt;
&lt;br /&gt;
--Sulfur      | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
--Potash      | catalyst       | 50     | Y | normal  | 1&lt;br /&gt;
--Lime        | catalyst       | 20     | Y | normal  | 1&lt;br /&gt;
--Saltpeter   | catalyst       | 10     | Y | normal  | 1&lt;br /&gt;
&lt;br /&gt;
-- 317, 55, 71&lt;br /&gt;
--                 cj   ca  cl   dt   ts   el   rs   le   si   ir   co   su  po li sp&lt;br /&gt;
paint_colourR = { 129, 225, 129, 112, 48,  128, 145, 81,  16,  97,  64  };&lt;br /&gt;
paint_colourG = { 64,  113, 97,  64,  96,  240, 16,  81,  16,  48, 194  };&lt;br /&gt;
paint_colourB = { 145, 33,  33,  64,  48,  224, 24,  97,  32,  33, 194  };&lt;br /&gt;
catalyst1 = 12;&lt;br /&gt;
&lt;br /&gt;
loadfile(&amp;quot;luaScripts/screen_reader_common.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luaScripts/ui_utils.inc&amp;quot;)();&lt;br /&gt;
loadfile(&amp;quot;luascripts/common.inc&amp;quot;)();&lt;br /&gt;
&lt;br /&gt;
button_names = {&lt;br /&gt;
&amp;quot;CabbageJ&amp;quot;,&amp;quot;Carrot&amp;quot;,&amp;quot;Clay&amp;quot;,&amp;quot;DeadTongue&amp;quot;,&amp;quot;ToadSkin&amp;quot;,&amp;quot;EarthLight&amp;quot;,&amp;quot;RedSand&amp;quot;,&lt;br /&gt;
&amp;quot;Lead&amp;quot;,&amp;quot;SilverP&amp;quot;,&amp;quot;Iron&amp;quot;,&amp;quot;Copper&amp;quot;,&amp;quot;C:Sulfur&amp;quot;,&amp;quot;C:potash&amp;quot;,&amp;quot;C:Lime&amp;quot;,&amp;quot;C:Saltpeter&amp;quot;}; &lt;br /&gt;
&lt;br /&gt;
per_paint_delay_time = 1000;&lt;br /&gt;
per_read_delay_time = 600;&lt;br /&gt;
per_click_delay = 10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
&lt;br /&gt;
	local paint_sum = {0,0,0};&lt;br /&gt;
	local paint_count = 0;&lt;br /&gt;
	local bar_colour = {0,0,0};&lt;br /&gt;
	local expected_colour = {0,0,0};&lt;br /&gt;
	local diff_colour = {0,0,0};&lt;br /&gt;
	local new_px = 0xffffffFF;&lt;br /&gt;
	local px_R = nil;&lt;br /&gt;
	local px_G = nil;&lt;br /&gt;
	local px_B = nil;&lt;br /&gt;
	local px_A = nil;&lt;br /&gt;
	local m_x = 0;&lt;br /&gt;
	local m_y = 0;&lt;br /&gt;
	local update_now = 1;&lt;br /&gt;
	local y=0;&lt;br /&gt;
	local button_push = 0;&lt;br /&gt;
&lt;br /&gt;
	lsSetCaptureWindow();&lt;br /&gt;
&lt;br /&gt;
	askForWindow(&amp;quot;Open the paint window. Take any paint away so to start with 'Black'.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local colour_panel = findAllImages(&amp;quot;paint-black.png&amp;quot;);&lt;br /&gt;
	if (#colour_panel == 0) then&lt;br /&gt;
		m_x, m_y = srMousePos();&lt;br /&gt;
	else&lt;br /&gt;
		m_x = colour_panel[1][0];&lt;br /&gt;
		m_y = colour_panel[1][1];	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local paint_buttons = findAllImages(&amp;quot;paint-button.png&amp;quot;);&lt;br /&gt;
	if (#paint_buttons == 0) then&lt;br /&gt;
		error &amp;quot;No buttons found&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	while 1 do&lt;br /&gt;
lsSetCamera(0,0,lsScreenX*1.5,lsScreenY*1.5);&lt;br /&gt;
		-- Where to start putting buttons/text on the screen.&lt;br /&gt;
		y=0;&lt;br /&gt;
		&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 80, 0, 100, 0xFFFFFFff, &amp;quot;Reset&amp;quot;) then&lt;br /&gt;
			for i= 1, 10 do&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[7][0]+2,paint_buttons[7][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			clickAllText(&amp;quot;Take the Paint&amp;quot;);&lt;br /&gt;
			lsSleep(100);&lt;br /&gt;
			paint_sum = {0,0,0};&lt;br /&gt;
			paint_count = 0;&lt;br /&gt;
			bar_colour = {0,0,0};&lt;br /&gt;
			expected_colour = {0,0,0};&lt;br /&gt;
			diff_colour = {0,0,0};&lt;br /&gt;
			new_px = 0xffffffFF;&lt;br /&gt;
			px_R = nil;&lt;br /&gt;
			px_G = nil;&lt;br /&gt;
			px_B = nil;&lt;br /&gt;
			px_A = nil;&lt;br /&gt;
			m_x = 0;&lt;br /&gt;
			m_y = 0;&lt;br /&gt;
			update_now = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create each button and set the button push.&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			if lsButtonText(10, y, 0, 250, 0xFFFFFFff, button_names[i]) then&lt;br /&gt;
				image_name = button_names[i];&lt;br /&gt;
				update_now = 1;&lt;br /&gt;
				button_push = i;&lt;br /&gt;
			end&lt;br /&gt;
			y = y + 26;&lt;br /&gt;
		end&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		-- read the bar pixels&lt;br /&gt;
		new_px = srReadPixel(m_x, m_y);&lt;br /&gt;
		px_R = (math.floor(new_px/256/256/256) % 256);&lt;br /&gt;
		px_G = (math.floor(new_px/256/256) % 256);&lt;br /&gt;
		px_B = (math.floor(new_px/256) % 256);&lt;br /&gt;
		px_A = (new_px % 256);&lt;br /&gt;
&lt;br /&gt;
		if not(update_now==0) then&lt;br /&gt;
		--{&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{&lt;br /&gt;
				-- click the appropriate button to add paint.&lt;br /&gt;
				srClickMouseNoMove(paint_buttons[button_push][0]+2,paint_buttons[button_push][1]+2, right_click);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			&lt;br /&gt;
				if(button_push &amp;lt; catalyst1) then&lt;br /&gt;
					-- add the paint estimate &lt;br /&gt;
					paint_sum[1] = 	paint_sum[1] + paint_colourR[button_push];&lt;br /&gt;
					paint_sum[2] = 	paint_sum[2] + paint_colourG[button_push];&lt;br /&gt;
					paint_sum[3] = 	paint_sum[3] + paint_colourB[button_push];&lt;br /&gt;
					paint_count = paint_count + 1.0;&lt;br /&gt;
				end&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- count up all the pixels.&lt;br /&gt;
			lsSleep(per_paint_delay_time);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
&lt;br /&gt;
			bar_colour[1] = #findAllImages(&amp;quot;paint-redbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[2] = #findAllImages(&amp;quot;paint-greenbarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			bar_colour[3] = #findAllImages(&amp;quot;paint-bluebarC.png&amp;quot;);&lt;br /&gt;
			lsSleep(per_read_delay_time/3);&lt;br /&gt;
			update_now = 0;&lt;br /&gt;
&lt;br /&gt;
			-- tweak/hack because we miss the first pixel&lt;br /&gt;
			for i=1, 3 do&lt;br /&gt;
				if(bar_colour[i]&amp;gt;0)then				&lt;br /&gt;
					bar_colour[i]=bar_colour[i]+1;&lt;br /&gt;
					bar_colour[i]=bar_colour[i]*256.0/259;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&lt;br /&gt;
			-- New colour has been added, mix in the pot, and see if there's a difference from the expected value.&lt;br /&gt;
			if not (button_push==0) then&lt;br /&gt;
			--{				&lt;br /&gt;
				for i=1, 3 do&lt;br /&gt;
					expected_colour[i] = paint_sum[i] / paint_count;&lt;br /&gt;
					diff_colour[i] = math.floor(0.5+bar_colour[i]) - math.floor(0.5+expected_colour[i]);&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				button_push = 0;&lt;br /&gt;
			--}&lt;br /&gt;
			end&lt;br /&gt;
		--}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Display all the goodies&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Pixel   RGBA: &amp;quot; .. px_R .. &amp;quot;,&amp;quot; .. px_G .. &amp;quot;,&amp;quot; .. px_B .. &amp;quot;,&amp;quot; .. px_A);&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Bar read RGB: &amp;quot; .. math.floor(bar_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(bar_colour[3]+0.5));&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Expected RGB: &amp;quot; .. math.floor(expected_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(expected_colour[3]+0.5) );&lt;br /&gt;
		y = y + 26;&lt;br /&gt;
		lsPrintWrapped(0, y, 1, lsScreenX, 1, 1, 0xFFFFFFff,&lt;br /&gt;
			&amp;quot; Reactions RGB: &amp;quot; .. math.floor(diff_colour[1]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[2]+0.5) .. &amp;quot;,&amp;quot; .. math.floor(diff_colour[3]+0.5) );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(lsScreenX - 30, lsScreenY - 30, 0, 100, 0xFFFFFFff, &amp;quot;Exit&amp;quot;) then&lt;br /&gt;
			error &amp;quot;Canceled&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(per_read_delay_time);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225338</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225338"/>
		<updated>2013-01-01T00:06:06Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 4 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 4000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 1600 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 2000 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 0 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 13800 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 0 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
* Sirena: 1 Lead, 8 Red Sand, 1 Carrot, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
* Sirena: 1 Cabbage, 1 Clay, 1 Carrot, 1 Copper, 8 Red Sand&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
* Sirena: 2 Clay, 1 Lead, 2 Copper, 5 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 2 Clay, 1 Potash, 4 Carrot, 3 Red Sand, 1 Cabbage&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
* Sirena: 1 Copper, 1 Clay, 1 Red Sand, 7 Carrot, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 1 Lead, 1 Carrot, 8 Red Sand&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter&lt;br /&gt;
* Sirena: 1 Copper, 1 Cabbage, 1 Clay, 1 Lead, 16 Red Sand&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
* Sirena: 1 Sulfur, 3 Clay, 1 Iron, 1 Cabbage, 5 Copper&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225331</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225331"/>
		<updated>2012-12-31T21:51:54Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Paint Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 1 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 0 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 2000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 0 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 0 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 0 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 13800 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 0 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
Individual recipes ordered by &amp;quot;cost&amp;quot; from cheapest to most expensive.&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 2 Clay, 1 Potash, 4 Carrot, 3 Red Sand, 1 Cabbage&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Selune: 1 Lead, 1 Carrot, 8 Red Sand&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter &lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225330</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225330"/>
		<updated>2012-12-31T21:45:25Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Paint Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 1 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 0 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 2000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 0 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 0 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 0 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 13800 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 0 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune: 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
* Selune: 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune: 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
* Selune: 2 Clay, 1 Potash, 4 Carrot, 3 Red Sand, 1 Cabbage&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter &lt;br /&gt;
* Selune: 1 Lead, 1 Carrot, 8 Red Sand&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225329</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225329"/>
		<updated>2012-12-31T21:45:02Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Paint Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 1 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 0 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 2000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 0 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 0 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 0 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 13800 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 0 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
* Selune : 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur&lt;br /&gt;
* Selune : 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Copper, 7 Clay, 1 Red Sand &lt;br /&gt;
* Selune : 4 Red Sand, 1 Cabbage, 1 Saltpeter, 4 Copper, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Cabbage, 1 Clay, 1 Iron, 1 Red Sand, 1 Silver, 6 Carrot&lt;br /&gt;
* Selune : 2 Clay, 1 Potash, 4 Carrot, 3 Red Sand, 1 Cabbage&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 1 Iron, 5 Red Sand, 4 Carrots, 1 Sulfur, 1 Saltpeter &lt;br /&gt;
* Selune : 1 Lead, 1 Carrot, 8 Red Sand&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
* Solaris: 8 Copper, 1 Clay, 1 Silver &lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225323</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225323"/>
		<updated>2012-12-31T21:37:30Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Paint Recipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 1 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 0 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 2000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 0 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 0 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 0 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 13800 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 0 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Paint Recipes===&lt;br /&gt;
&lt;br /&gt;
'''Dark Golden Rod'''&lt;br /&gt;
&lt;br /&gt;
Solaris: 1 Cabbage, 10 Red Sand, 1 Sulfur, 1 Iron &lt;br /&gt;
Selune : 3 Carrot, 5 Red Sand, 1 Cabbage, 1 Saltpeter, 1 Lead&lt;br /&gt;
&lt;br /&gt;
'''Indigo'''&lt;br /&gt;
&lt;br /&gt;
Solaris: 8 Cabbage, 1 Carrots, 1 Copper, 1 Sulfur &lt;br /&gt;
Selune : 1 Cabbage, 1 Copper, 1 Clay, 7 Red Sand, 1 Saltpeter&lt;br /&gt;
&lt;br /&gt;
'''Forest Green'''&lt;br /&gt;
&lt;br /&gt;
'''Orange'''&lt;br /&gt;
&lt;br /&gt;
'''Tomato'''&lt;br /&gt;
&lt;br /&gt;
'''Spring Green'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225310</id>
		<title>Mega 4u</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Mega_4u&amp;diff=225310"/>
		<updated>2012-12-31T19:16:10Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Guild Hall at 1594, 2915.&lt;br /&gt;
Mega at 1826, 2715.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Materials ===&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Gems|state=expanded|&lt;br /&gt;
  {{ResResourceName|Eyelet Cut Amethyst | 8 | 48}}&lt;br /&gt;
  {{ResResourceName|Thistle Cut Amethyst | 4 | 28 }}&lt;br /&gt;
  {{ResResourceName|Corner Heart Cut Garnet | 1 | 24 }}&lt;br /&gt;
  {{ResResourceName|Bridge Cut Lapis | 1 | 12 }}&lt;br /&gt;
  {{ResResourceName|Unity Cut Lapis | 0 | 4 }}&lt;br /&gt;
  {{ResResourceName|Hexas Plate Cut Lapis | 24 | 24 }}&lt;br /&gt;
  {{ResResourceName|Choronzon Cut Turquoise | 0 | 24 }}&lt;br /&gt;
  {{ResResourceName|Full Aidenn Mask Cut Sunstone | 1 | 4 }}&lt;br /&gt;
  {{ResResourceName|Sprocket Cut Sunstone | 6 | 6 }}&lt;br /&gt;
  {{ResResourceName|Looking Glass Cut Jade | 12 | 12 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Boards | 1800 | 1800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Pliable Boards | 650 | 800 }}&lt;br /&gt;
  {{ResResourceName|Hard, Glossy, Rotproof Boards | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Pliable, Soft, Rotproof Boards | 2000 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Boards 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Rigid, Rotproof Boards | 1440| 1440 }}&lt;br /&gt;
  {{ResResourceName|White, Glossy, Fireproof Boards | 0 | 1600 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rotproof Boards | 6000 | 6000 }}&lt;br /&gt;
  {{ResResourceName|Hard, Rigid Boards | 0 | 14000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 1|state=expanded|&lt;br /&gt;
  {{ResResourceName|Dark Golden Rod Paint | 0 | 15600 }}&lt;br /&gt;
  {{ResResourceName|Indigo Paint | 0 | 6720 }}&lt;br /&gt;
  {{ResResourceName|Feldspar Paint | 1920| 1920 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 2|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 11000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 3|state=expanded|&lt;br /&gt;
  {{ResResourceName|Forest Green Paint | 0 | 5212 }}&lt;br /&gt;
  {{ResResourceName|Orange Paint | 0 | 16520 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Paints 4|state=expanded|&lt;br /&gt;
  {{ResResourceName|Saddle Brown Paint | 5808 | 5808 }}&lt;br /&gt;
  {{ResResourceName|Tomato Paint | 0 | 2340 }}&lt;br /&gt;
  {{ResResourceName|Spring Green Paint | 0 | 2800 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Bricks|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 25000 | 25000 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Basic Materials|state=expanded|&lt;br /&gt;
  {{ResResourceName|Bricks | 1000 | 1000 }}&lt;br /&gt;
  {{ResResourceName|Rope | 600 | 600 }}&lt;br /&gt;
  {{ResResourceName|Canvas | 150 | 150 }}&lt;br /&gt;
  {{ResResourceName|Concrete | 0 | 10784 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Cut Stone|state=expanded|&lt;br /&gt;
  {{ResResourceName|Cut Stone | 13800 | 24600 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ResTechnologyName|Metals|state=expanded|&lt;br /&gt;
  {{ResResourceName|Brass Plate | 4 | 4 }}&lt;br /&gt;
  {{ResResourceName|Gold Foil | 1200| 1200 }}&lt;br /&gt;
  {{ResResourceName|Nails | 2250 | 8412 }} &lt;br /&gt;
  {{ResResourceName|Gold Wire | 0 | 1200 }}&lt;br /&gt;
  {{ResResourceName|Iron Bars | 0 | 736 }} &lt;br /&gt;
  {{ResResourceName|Gold Bars | 0 | 64 }}&lt;br /&gt;
  {{ResResourceName|Silver Sheeting | 0 | 64 }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guilds]] {{DEFAULTSORT:Mega 4u}}&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources&amp;diff=225214</id>
		<title>Glenbard Resources</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources&amp;diff=225214"/>
		<updated>2012-12-30T20:53:03Z</updated>

		<summary type="html">&lt;p&gt;Selune: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Shared Buildings ==&lt;br /&gt;
&lt;br /&gt;
There are TWO major compound areas with guild resources...lots of useful buildings!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''-2350,4115''' Original Guild Compound Area - Lots of kilns, pottery wheels, brick racks, forges, casting boxes, glass benches, charcoal ovens, rock saws, mason's benches, reactory, gearbox assembly table, anvils, gem cutting table, tasting table, thistle gardens, kettles, [[Pigment Laboratory]], glory hole and more. &lt;br /&gt;
&lt;br /&gt;
'''-2275,4130''' [[Flax Gin]], [[Marble Tub]], [[Large Distaff]], [[Chemical Bath]], [[Wood Treatment Tank]] ([[Glenbard_Resources/Treatment_Recipes|Treatment Recipes]]), [[Fleet Furnace]], [[Papyrus Tank]], [[Acid Bath]], [[Paper Press]], [[Barrel Vise]], [[Crematory]], [[Brick Machine]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Feel free to use any building you are able to...if someone has left finished materials, please leave them in the building.&lt;br /&gt;
&lt;br /&gt;
'''EXCEPTION:''' There are nine [[Greenhouse]] near the camel pen for everyone's use.  To keep it stocked, please hit &amp;quot;harvest&amp;quot; every time you run by...it will only grow 100 at a time but will store unlimited amounts.  &lt;br /&gt;
&lt;br /&gt;
There should be straw in the racks, just take what you need and replenish from the greenhouses...that way there is always straw ready to go!&lt;br /&gt;
&lt;br /&gt;
Also ==&amp;gt; /chat any Kinsman to request any materials from the animal pens, we have plenty of oil, leather, etc.&lt;br /&gt;
&lt;br /&gt;
== Mines &amp;amp; Quarries ==&lt;br /&gt;
&lt;br /&gt;
Iron Mines -2437,4023 and -2440,4220&lt;br /&gt;
&lt;br /&gt;
Copper Mine -2362,4101&lt;br /&gt;
&lt;br /&gt;
Tin Mine -1980,3720&lt;br /&gt;
&lt;br /&gt;
Zinc Mine -2218,4044&lt;br /&gt;
&lt;br /&gt;
Sand Mine, Emeralds -2450,4210&lt;br /&gt;
&lt;br /&gt;
Sand Mine, Diamonds -2435,4055&lt;br /&gt;
&lt;br /&gt;
Sand Mine, Rubys -2435,3995&lt;br /&gt;
&lt;br /&gt;
[[Guides/Mining]]&lt;br /&gt;
&lt;br /&gt;
There is an Oyster Shell Marble quarry just beyond the Guild Hall at -2460, 4160 and a Serpentine Marble quarry a little farther at -2593,4234&lt;br /&gt;
&lt;br /&gt;
NEW! Limestone Auger ==&amp;gt; -2055,3950&lt;br /&gt;
&lt;br /&gt;
NEW! Deep Well ==&amp;gt; -2335,4175&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
Dendii went on a '''Thanksgiving Day 2012''' salvage raid of a huge guild that had gone dormant, scored 4 warehouses full of goodies. Among the items...5K camel meat, 7K honey, 14K oil, 4K wool, 5K mutton and much more. /chat Dendii is you need any large quantities for a special project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== It Takes A Village ==&lt;br /&gt;
&lt;br /&gt;
There is sooooo much to do in Egypt, no one Egyptian can do it all.  After achieving Citizenship, performing the dreaded &amp;quot;University Run&amp;quot; and starting to progress up the levels, what's next?&lt;br /&gt;
&lt;br /&gt;
There are some challenging and fun skills to hone that could benefit your guild mates...here are a few suggestions, but there are many more:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cooking''' is an art and a science. A great recipe can reduce the number of players needed for group activities like a dig, and greatly increase the recovery rate of your END, FOCUS, etc timers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Chemistry &amp;amp; Paints''' are needed for many exotic uses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Herbs, Mining, Fishing, Mushrooms''' If you like to go on &amp;quot;walkabouts&amp;quot;, these are great things to master...helping the guild with cooking supplies and metal ore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Alloys, Blacksmithing, Glass Making, Gearboxes''' Everyone has that one thing (or three!) that they just don't &amp;quot;get&amp;quot;...if you are a master at these things people will talk about you in hushed, reverent tones.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Beer, Wine, Pyrotechnics''' Who doesn't like to drink and watch fireworks???&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is much, much more...be sure to read the wiki on those long desert runs!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Guild Levels ==&lt;br /&gt;
&lt;br /&gt;
Initiate - Brand-new Immigrant&lt;br /&gt;
&lt;br /&gt;
Associate - Achieve Citizenship&lt;br /&gt;
&lt;br /&gt;
Member - Pull out Credit-Ra Card for Paid Membership &lt;br /&gt;
&lt;br /&gt;
Kinsman - Level 10 or Higher, Actively Recruits Arriving Immigrants&lt;br /&gt;
&lt;br /&gt;
Fellow - 100+ Days in Egypt&lt;br /&gt;
&lt;br /&gt;
Patriarch - Friend IRL &lt;br /&gt;
&lt;br /&gt;
Elder - Dendii&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''GLENBARD MISSION STATEMENT: A Tale In The Desert is structured into a series of &amp;quot;tales&amp;quot; which last over a real-time year or longer...periodically the goals of Pharaoh are met and a new telling begins and all players start with just the clothes on their back. Technologies are needed to be researched before the universities can offer the knowledge, civilization starts from scratch. The current &amp;quot;tale&amp;quot; is a bit past the halfway point...we are hoping to get a strong group of players together THIS telling so we can be an influential guild NEXT telling :)'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipies&amp;diff=225213</id>
		<title>Glenbard Resources/Treatment Recipies</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipies&amp;diff=225213"/>
		<updated>2012-12-30T20:51:12Z</updated>

		<summary type="html">&lt;p&gt;Selune: moved Glenbard Resources/Treatment Recipies to Glenbard Resources/Treatment Recipes: Typo!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Glenbard Resources/Treatment Recipes]]&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipes&amp;diff=225212</id>
		<title>Glenbard Resources/Treatment Recipes</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipes&amp;diff=225212"/>
		<updated>2012-12-30T20:51:12Z</updated>

		<summary type="html">&lt;p&gt;Selune: moved Glenbard Resources/Treatment Recipies to Glenbard Resources/Treatment Recipes: Typo!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wood and Metal Treatment recipes for the GlenBard tanks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wood Treatment ==&lt;br /&gt;
*'''Blonde Glossy''': 140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil&lt;br /&gt;
*'''White Glossy''':  140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil, 5 potash&lt;br /&gt;
*'''Hard, Rigid, Fireproof, Blonde''': 30 lime, 20 lead, 10 sulfur, 10 lead, 30 lime, 10 lead, 10 lime, 10 petrol, 20 sulfur&lt;br /&gt;
*'''Hard, Rotproof''': 10 sulfur, 30 lime, 32 petrol, 7 lead&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Metal Treatment - Do NOT Empty the bath. Please contact a Kinsman for Tong rental ==&lt;br /&gt;
*'''Stainless, Hard Titanium''': 20 cactus, 10 lime, 30 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Corrosion Resistant, Hard Titanium''': 20 cactus, 10 lime, 30 cactus, 5 gravel&lt;br /&gt;
*'''Stainless, Hard, Insulative, Nontoxic Steel''': 20 cactus, 10 lime, 60 cactus, 9 gravel,  17 potash&lt;br /&gt;
*'''Stainless, Hard Moonsteel''': 20 cactus, 10 lime, 10 cactus, 10 lime, 10 cactus, 10 lime, 27 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Stainless, Hard, Insulative Copper''': 60 cactus, 40 coal, 35 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Stainless, Hard, Insulative, Nontoxic Sunsteel''': 30 cactus, 10 lime, 60 cactus, 9 gravel, 17 potash&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipes&amp;diff=225211</id>
		<title>Glenbard Resources/Treatment Recipes</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Glenbard_Resources/Treatment_Recipes&amp;diff=225211"/>
		<updated>2012-12-30T20:49:37Z</updated>

		<summary type="html">&lt;p&gt;Selune: Created page with &amp;quot;Wood and Metal Treatment recipes for the GlenBard tanks.   == Wood Treatment == *'''Blonde Glossy''': 140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil *'''White Glossy''...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wood and Metal Treatment recipes for the GlenBard tanks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wood Treatment ==&lt;br /&gt;
*'''Blonde Glossy''': 140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil&lt;br /&gt;
*'''White Glossy''':  140 water, 30 saltpeter, 10 lime, 20 oil, 10 lime, 30 oil, 5 potash&lt;br /&gt;
*'''Hard, Rigid, Fireproof, Blonde''': 30 lime, 20 lead, 10 sulfur, 10 lead, 30 lime, 10 lead, 10 lime, 10 petrol, 20 sulfur&lt;br /&gt;
*'''Hard, Rotproof''': 10 sulfur, 30 lime, 32 petrol, 7 lead&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Metal Treatment - Do NOT Empty the bath. Please contact a Kinsman for Tong rental ==&lt;br /&gt;
*'''Stainless, Hard Titanium''': 20 cactus, 10 lime, 30 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Corrosion Resistant, Hard Titanium''': 20 cactus, 10 lime, 30 cactus, 5 gravel&lt;br /&gt;
*'''Stainless, Hard, Insulative, Nontoxic Steel''': 20 cactus, 10 lime, 60 cactus, 9 gravel,  17 potash&lt;br /&gt;
*'''Stainless, Hard Moonsteel''': 20 cactus, 10 lime, 10 cactus, 10 lime, 10 cactus, 10 lime, 27 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Stainless, Hard, Insulative Copper''': 60 cactus, 40 coal, 35 cactus, 9 gravel, 17 potash&lt;br /&gt;
*'''Stainless, Hard, Insulative, Nontoxic Sunsteel''': 30 cactus, 10 lime, 60 cactus, 9 gravel, 17 potash&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
	<entry>
		<id>http://www.atitd.org/wiki/t6w/index.php?title=Test_of_Seven_Phoenix&amp;diff=225156</id>
		<title>Test of Seven Phoenix</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t6w/index.php?title=Test_of_Seven_Phoenix&amp;diff=225156"/>
		<updated>2012-12-30T05:15:22Z</updated>

		<summary type="html">&lt;p&gt;Selune: /* Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{languages}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The Test of Seven Phoenix will challenge your skills as a contractor, not a laborer. When the Hour of the Phoenix arrives, you'll be given a number of glorious Phoenix statues that you must ensure get built at specific Phoenix parks throughout Egypt. Complete all seven within a (game) hour for maximum score. If you waypoint travel during an Hour, you will be disqualified from that hour. No Egyptian may build more than a single statue in a given hour, and no Egyptian who has traveled during the hour may build. (UArch test signup message) &lt;br /&gt;
&lt;br /&gt;
The Test of Seven Phoenix is about organizing and supplying a team to build for you within a short period of time. &lt;br /&gt;
&lt;br /&gt;
*When the Hour of the Phoenix arrives, check a School of Architecture to receive a list of seven Phoenix Stadiums around *Egypt, and the type of Phoenix statue that must be built at each. &lt;br /&gt;
*The list of parks will be the same for each architect during that hour (shown to everyone by clicking on the calendar), but the statue type will be random. &lt;br /&gt;
*The Hour of the Phoenix lasts for one hour of TeppyTime (3 Egypt-hours or just over 1 RL hour). &lt;br /&gt;
&lt;br /&gt;
No Egyptian may build more than a single statue in a given hour. If you want points for more than one statue, you'll have to get other people to build each additional statue and give them to you (similar to the Test of Towers). If you try to build a second phoenix with the same builder, you will get a message and the materials will be dropped on the ground. &lt;br /&gt;
&lt;br /&gt;
However, if you use waypoint, chariot or expedition travel at any time during an Hour of the Phoenix, you are disqualified. You will no longer be able to build a statue during that Hour (for yourself or anyone else), any statue you have already built will be worth zero points (this point needs confirmation), and you will receive zero points for statues built for you. Because of this, you will probably need to be at a School to receive your list before the Hour starts. &lt;br /&gt;
&lt;br /&gt;
NOTE: Spousewarp is allowed during the hour, having been dev called and checked. &lt;br /&gt;
&lt;br /&gt;
An architect can build a statue for him/herself, should they be lucky enough to be near the appropriate Phoenix park with the necessary supplies, but clearly this won't happen often and is not worth much alone. &lt;br /&gt;
&lt;br /&gt;
If ownership of a statue is passed to someone who has traveled, that person may transfer ownership to someone else without invalidating the points. In other words, only the original builder and the final recipient need not to have traveled. Note that this is only likely to be useful in the event of typing the wrong name (e.g. the delivery person instead of the intended recipient), as different architects all likely require different phoenix types in each stadium. &lt;br /&gt;
&lt;br /&gt;
Travelling to/from the Spirit Arena is allowed. &lt;br /&gt;
&lt;br /&gt;
At the end of a Hour of the Phoenix, all Phoenix built burn to nothing (Phoenix are fleeting). &lt;br /&gt;
&lt;br /&gt;
==Strategy==&lt;br /&gt;
This Test is best passed by a team. &lt;br /&gt;
&lt;br /&gt;
*Collect resources for at least 1 set of all 7 phoenix. &lt;br /&gt;
*Organize a group of people to take positions around Egypt before the hour begins. NOTE: Confirm beforehand that your Builders can choose the &amp;quot;Phoenix&amp;quot; project on a construction site.&lt;br /&gt;
*Station yourself at a SArch just before the hour begins. &lt;br /&gt;
*When the hour begins, check the list and locate the stadiums within 1 hour's run of your team. &lt;br /&gt;
*Designate some as builders and some as materials delivery once you know who is close enough to build. &lt;br /&gt;
*If your builders don't have enough natural carry to take a kit to a stadium, have someone run with them, drop a waypoint, then nav materials to them. &lt;br /&gt;
*Do not use any chariots or expedition/navigation time yourself or you will gain no points. &lt;br /&gt;
*Since the score you get is based on the number of Phoenix built in your name in the hour, it may be worth aborting an attempt if you cannot build several.&lt;br /&gt;
*[[Atlas/Phoenix|Phoenix Parks]]&lt;br /&gt;
&lt;br /&gt;
==Scoring==&lt;br /&gt;
At the end of the Hour of the Phoenix, you will receive n^2 points, where n is the number of statues built. This means 1 point for a single Phoenix, 4 for two, etc up to a max of 7 Phoenix. The three Architects with the highest number of points will pass the test each week.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Number of Phoenix&amp;lt;/b&amp;gt; || &amp;lt;b&amp;gt;Points scored&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|2 || 4 &lt;br /&gt;
|-&lt;br /&gt;
|3 || 9&lt;br /&gt;
|-&lt;br /&gt;
|4 || 16&lt;br /&gt;
|-&lt;br /&gt;
|5 || 25&lt;br /&gt;
|-&lt;br /&gt;
|6 || 36 &lt;br /&gt;
|-&lt;br /&gt;
|7 || 49  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Guilds==&lt;br /&gt;
[[Guilds/Bennu_Cooperative|Bennu Cooperative]] Open membership&lt;br /&gt;
&lt;br /&gt;
==Phoenix Costs (Confirmed for T5)==&lt;br /&gt;
===Phoenix Being Born===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Phoenix Being Born.png|300px|thumb|right|Phoenix Being Born]]&lt;br /&gt;
&lt;br /&gt;
851 weight and bulk (including 5 for small construction site) &lt;br /&gt;
&lt;br /&gt;
*100 [[Beeswax]] &lt;br /&gt;
*20 [[Pewter]]&lt;br /&gt;
*10 [[Small Topaz]] &lt;br /&gt;
*40 [[Silver Wire]]&lt;br /&gt;
*15 [[Steel Sheeting]] &lt;br /&gt;
*260 [[Treated Boards|Soft, Rotproof, Fireproof Boards]] &lt;br /&gt;
*100 [[Paint|Sienna Paint]] &lt;br /&gt;
*100 [[Paint|Tan Paint]] &lt;br /&gt;
*200 [[Raeli Tiles|Rosy Brown Raeli Tiles]] &lt;br /&gt;
*1 [[Spirits|Mineral Spirits of Fire]] &lt;br /&gt;
*11 [[Gunpowder ]]&lt;br /&gt;
*(1 [[Canvas]]) &lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
===Phoenix Growing Old===&lt;br /&gt;
[[File:Phénix en croissance.png|300px|thumb|right|Phoenix Growing Old]]&lt;br /&gt;
883 weight and bulk (including 5 for small construction site) &lt;br /&gt;
&lt;br /&gt;
*12 [[Linen]]&lt;br /&gt;
*22 [[Leather]]&lt;br /&gt;
*2 [[Glass Rods]]&lt;br /&gt;
*100 [[Steel Wire]]&lt;br /&gt;
*20 [[Copper Sheeting]]&lt;br /&gt;
*260 [[Treated Boards|Soft, Fireproof, White Boards]]&lt;br /&gt;
*125 [[Paint|Sandy Brown Paint]]&lt;br /&gt;
*125 [[Paint|Olive Drab Paint]]&lt;br /&gt;
*200 [[Raeli Tiles|Tan Raeli Tiles]]&lt;br /&gt;
*1 [[Spirits|Wood Spirits of Fire]]&lt;br /&gt;
*11 [[Low Explosive]] &lt;br /&gt;
*(1 [[Canvas]])&lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
===Phoenix in His Prime===&lt;br /&gt;
[[File:Phénix In His Prime.png|300px|thumb|right|Phoenix in His Prime]]&lt;br /&gt;
754 weight and 1437 bulk (including 5 for small construction site) &lt;br /&gt;
&lt;br /&gt;
*3 [[Gold Bar]] &lt;br /&gt;
*10 [[Small Ruby]]&lt;br /&gt;
*1 [[Sheet Glass]]&lt;br /&gt;
*50 [[Copper Wire]]&lt;br /&gt;
*10 [[Steel Sheeting]]&lt;br /&gt;
*260 [[Treated Boards|Hard, Rigid, Fireproof Boards]]&lt;br /&gt;
*97 [[Paint|Indian Red Paint]]&lt;br /&gt;
*200 [[Raeli Tiles|Yellowish Raeli Tiles]]&lt;br /&gt;
*800 [[Gold Foil]]&lt;br /&gt;
*1 [[Spirits|Grain Spirits of Fire]]&lt;br /&gt;
*11 [[Gunpowder]] &lt;br /&gt;
*(1 [[Canvas]]) &lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
===Phoenix on the Hunt===&lt;br /&gt;
[[File:PhoenixOnTheHunt.jpg|300px|thumb|right|Phoenix on the Hunt]]&lt;br /&gt;
1208 weight and 1007 bulk (including 5 for small construction site and 2/1 for the extra jug) &lt;br /&gt;
&lt;br /&gt;
*50 [[Perch fish]]&lt;br /&gt;
*200+1 [[Water in Jugs]] (Note: You need another water jug, can't donate your last jug) &lt;br /&gt;
*50 [[Concrete]] &lt;br /&gt;
*30 [[Magnesium Wire]]&lt;br /&gt;
*10 [[Steel Sheeting]]&lt;br /&gt;
*260 [[Treated Boards|Hard, Black, Fireproof Boards]]&lt;br /&gt;
*100 [[Paint|Dark Orange Paint]]&lt;br /&gt;
*100 [[Paint|Golden Rod Paint]]&lt;br /&gt;
*200 [[Raeli Tiles|Wheat Raeli Tiles]]&lt;br /&gt;
*1 [[Spirits|Fish Spirits of Fire]]&lt;br /&gt;
*11 [[Gunpowder]] &lt;br /&gt;
*(1 [[Canvas]]) &lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
===Phoenix Parting Ways===&lt;br /&gt;
824 weight and bulk (including 5 for small construction site) &lt;br /&gt;
&lt;br /&gt;
*23 [[Canvas]] (including 1 for small construction site) &lt;br /&gt;
*10 [[Small Diamond]] &lt;br /&gt;
*3 [[Ink]]&lt;br /&gt;
*100 [[Steel Wire]]&lt;br /&gt;
*20 [[Copper Sheeting]]&lt;br /&gt;
*260 [[Treated Boards|Hard, Volatile, Black Boards]]&lt;br /&gt;
*100 [[Paint|Olive Paint]]&lt;br /&gt;
*100 [[Paint|Dark Golden Rod Paint]]&lt;br /&gt;
*200 [[Raeli Tiles|Dark Green Raeli Tiles]]&lt;br /&gt;
*4 [[Spirits|Grass Spirits of Earth]]&lt;br /&gt;
*11 [[Gunpowder]]&lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
===Phoenix Taking Shelter===&lt;br /&gt;
[[File:PhoenixTakingShelter.jpg|200px|thumb|right|Phoenix Taking Shelter]]&lt;br /&gt;
1128 weight and bulk (including 5 for small construction site) &lt;br /&gt;
&lt;br /&gt;
*100 [[Charcoal]]&lt;br /&gt;
*300 [[Firebricks]]&lt;br /&gt;
*10 [[Cut Stone]]&lt;br /&gt;
*42 [[Thoth's Metal Wire]]&lt;br /&gt;
*10 [[Treated Metal Sheeting|Pewter Sheeting: Hard Corrosion Resistant]]&lt;br /&gt;
*260 [[Treated Boards|Pliable, Fireproof, Blonde Boards]]&lt;br /&gt;
*100 [[Paint|Dark Khaki Paint]]&lt;br /&gt;
*100 [[Paint|Dark Gray Paint]]&lt;br /&gt;
*200 [[Raeli Tiles|Slate Blue Raeli Tiles]] (Note, Slate Gray tiles were originally called for, which do not exist.  This was corrected)&lt;br /&gt;
*1 [[Spirits|Vegetable Spirits of Fire]]&lt;br /&gt;
*11 [[Gunpowder]] &lt;br /&gt;
*(1 [[Canvas]]) &lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
===Phoenix Twisting Fate===&lt;br /&gt;
[[File:PhoenixTwistingFate.png|300px|thumb|right|Phoenix Twisting Fate]]&lt;br /&gt;
843 weight and bulk (including 5 for small construction site) &lt;br /&gt;
&lt;br /&gt;
*9 [[Dried Papyrus]]&lt;br /&gt;
*50 [[Nails]]&lt;br /&gt;
*10 [[Papyrus Paper]]&lt;br /&gt;
*30 [[Metal Blue Wire]]&lt;br /&gt;
*7 [[Treated Metal Sheeting|Moon Steel Sheeting: Hard, Non-Toxic]]&lt;br /&gt;
*7 [[Steel Sheeting]]&lt;br /&gt;
*260 [[Treated Boards|Soft, Nontoxic, Fireproof Boards]]&lt;br /&gt;
*130 [[Paint|Pale Golden Rod Paint]]&lt;br /&gt;
*120 [[Paint|Fire Brick Paint]]&lt;br /&gt;
*200 [[Raeli Tiles|Ghost White Raeli Tiles]]&lt;br /&gt;
*4 [[Spirits|Worm Spirits of Fire]] &lt;br /&gt;
*11 [[Low Explosive]] &lt;br /&gt;
*(1 [[Canvas]]) &lt;br /&gt;
*(4 [[Rope]])&lt;br /&gt;
&lt;br /&gt;
==Demonstration Required==&lt;br /&gt;
To open the Test of Seven Phoenix you require:&lt;br /&gt;
*1 [[Beeswax]]&lt;br /&gt;
*1 [[Pewter]]&lt;br /&gt;
*1 [[Small Topaz]]&lt;br /&gt;
*1 [[Silver Wire]]&lt;br /&gt;
*1 [[Steel Sheeting]]&lt;br /&gt;
*1 [[Treated Boards|Soft, Rotproof, Fireproof Boards]]&lt;br /&gt;
*1 [[Paint|Sienna Paint]]&lt;br /&gt;
*1 [[Raeli Tiles|Rosy Brown Raeli Tiles]]&lt;br /&gt;
*1 [[Spirits|Mineral Spirits of Fire]]&lt;br /&gt;
*1 [[Gunpowder]]&lt;br /&gt;
*1 [[Linen]]&lt;br /&gt;
*1 [[Leather]]&lt;br /&gt;
*1 [[Glass Rods]]&lt;br /&gt;
*1 [[Steel Wire]]&lt;br /&gt;
*1 [[Copper Sheeting]]&lt;br /&gt;
*1 [[Low Explosive]]&lt;br /&gt;
*1 [[Gold Bar]]&lt;br /&gt;
*1 [[Small Ruby]]&lt;br /&gt;
*1 [[Sheet Glass]]&lt;br /&gt;
*1 [[Copper Wire]]&lt;br /&gt;
*1 [[Gold Foil]]&lt;br /&gt;
*1 [[Perch Meat]]&lt;br /&gt;
*1 [[Water in Jugs]]&lt;br /&gt;
*1 [[Concrete]]&lt;br /&gt;
*1 [[Magnesium Wire]]&lt;br /&gt;
*1 [[Canvas]]&lt;br /&gt;
*1 [[Small Diamond]]&lt;br /&gt;
*1 [[Ink]]&lt;br /&gt;
*1 [[Charcoal]]&lt;br /&gt;
*1 [[Firebricks]]&lt;br /&gt;
*1 [[Cut Stone]]&lt;br /&gt;
*1 [[Thoth's Metal Wire]]&lt;br /&gt;
*1 [[Treated Metal Sheeting|Pewter Sheeting: Hard Corrosion Resistant]]&lt;br /&gt;
*1 [[Dried Papyrus]]&lt;br /&gt;
*1 [[Nails]]&lt;br /&gt;
*1 [[Papyrus Paper]]&lt;br /&gt;
*1 [[Metal Blue Wire]]&lt;/div&gt;</summary>
		<author><name>Selune</name></author>
	</entry>
</feed>