<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.atitd.org/wiki/t7w/index.php?action=history&amp;feed=atom&amp;title=User%3AMurtha</id>
	<title>User:Murtha - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.atitd.org/wiki/t7w/index.php?action=history&amp;feed=atom&amp;title=User%3AMurtha"/>
	<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t7w/index.php?title=User:Murtha&amp;action=history"/>
	<updated>2026-05-21T05:11:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>http://www.atitd.org/wiki/t7w/index.php?title=User:Murtha&amp;diff=66354&amp;oldid=prev</id>
		<title>Murtha: Created page with &quot;-- -- To run: --  Copy a recipe from the output of the Thistle Mode --  Update expected_gardens equal to the number you have opened and pinned --    Gardens must all have their b...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t7w/index.php?title=User:Murtha&amp;diff=66354&amp;oldid=prev"/>
		<updated>2016-01-21T20:04:54Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- -- To run: --  Copy a recipe from the output of the Thistle Mode --  Update expected_gardens equal to the number you have opened and pinned --    Gardens must all have their b...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- To run:&lt;br /&gt;
--  Copy a recipe from the output of the Thistle Mode&lt;br /&gt;
--  Update expected_gardens equal to the number you have opened and pinned&lt;br /&gt;
--    Gardens must all have their buttons visible, can overlap as long as the&lt;br /&gt;
--    row with &amp;quot;asc&amp;quot; is visible regardlesss of which window was clicked last&lt;br /&gt;
--  Update &amp;quot;last sun&amp;quot; to be what it is now (0 if night,&lt;br /&gt;
--    99 if daylight and open lid, 33 if daylight and closed lid)&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dofile(&amp;quot;screen_reader_common.inc&amp;quot;);&lt;br /&gt;
dofile(&amp;quot;ui_utils.inc&amp;quot;);&lt;br /&gt;
dofile(&amp;quot;common.inc&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
per_click_delay = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local expected_gardens = 2;&lt;br /&gt;
&lt;br /&gt;
local last_sun = 99;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
instructions = &lt;br /&gt;
{&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,0,1,99,&lt;br /&gt;
0,0,0,2,99,&lt;br /&gt;
0,0,2,0,99,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,3,0,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,1,0,33,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,1,4,33,&lt;br /&gt;
0,0,0,1,99,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,2,1,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,1,0,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,0,3,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,3,1,33,&lt;br /&gt;
0,0,1,0,33,&lt;br /&gt;
0,0,1,2,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,1,0,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,0,1,33,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,1,0,99,&lt;br /&gt;
0,0,0,0,99,&lt;br /&gt;
0,0,0,2,99,&lt;br /&gt;
0,0,1,0,33,&lt;br /&gt;
0,0,1,0,33,&lt;br /&gt;
0,0,0,0,33,&lt;br /&gt;
0,0,0,1,99,&lt;br /&gt;
0,0,0,0,99,};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function clickAll(image_name, up)&lt;br /&gt;
	if nil then&lt;br /&gt;
		lsPrintln(&amp;quot;Would click '&amp;quot;.. image_name .. &amp;quot;'&amp;quot;);&lt;br /&gt;
		return; -- not clicking buttons for debugging&lt;br /&gt;
	end&lt;br /&gt;
	-- Find buttons and click them!&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	xyWindowSize = srGetWindowSize();&lt;br /&gt;
	local buttons = findAllImages(image_name);&lt;br /&gt;
	&lt;br /&gt;
	if #buttons == 0 then&lt;br /&gt;
		statusScreen(&amp;quot;Could not find specified buttons...&amp;quot;);&lt;br /&gt;
		lsSleep(1500);&lt;br /&gt;
	else&lt;br /&gt;
		statusScreen(&amp;quot;Clicking &amp;quot; .. #buttons .. &amp;quot;button(s)...&amp;quot;);&lt;br /&gt;
		if up then&lt;br /&gt;
			for i=#buttons, 1, -1  do&lt;br /&gt;
				srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			for i=1, #buttons  do&lt;br /&gt;
				srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3);&lt;br /&gt;
				lsSleep(per_click_delay);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		statusScreen(&amp;quot;Done clicking (&amp;quot; .. #buttons .. &amp;quot; clicks).&amp;quot;);&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
button_names = {&amp;quot;ThistleNit.png&amp;quot;, &amp;quot;ThistlePot.png&amp;quot;, &amp;quot;ThistleH2O.png&amp;quot;, &amp;quot;ThistleOxy.png&amp;quot;, &amp;quot;ThistleSun.png&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
local z = 2;&lt;br /&gt;
&lt;br /&gt;
-- Initialize last_mon&lt;br /&gt;
local mon_w = 10;&lt;br /&gt;
local mon_h = 152;&lt;br /&gt;
local last_mon = {};&lt;br /&gt;
for x=1, mon_w do&lt;br /&gt;
	last_mon[x] = {};&lt;br /&gt;
	for y=1, mon_h do&lt;br /&gt;
		last_mon[x][y] = 0;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function waitForMonChange(message)&lt;br /&gt;
	if not first_nit then&lt;br /&gt;
		first_nit = srFindImage(&amp;quot;ThistleNit.png&amp;quot;);&lt;br /&gt;
	end&lt;br /&gt;
	if not first_nit then&lt;br /&gt;
		error &amp;quot;Could not find first Nit&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	mon_x = first_nit[0] - 25;&lt;br /&gt;
	mon_y = first_nit[1] + 13;&lt;br /&gt;
		&lt;br /&gt;
	local different = nil;&lt;br /&gt;
	local skip_next = nil;&lt;br /&gt;
	while not different do&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		for x=1, mon_w do&lt;br /&gt;
			for y=1, mon_h do&lt;br /&gt;
				newvalue = srReadPixelFromBuffer(mon_x + x, mon_y + y);&lt;br /&gt;
				if not (newvalue == last_mon[x][y]) then&lt;br /&gt;
					different = 1;&lt;br /&gt;
				end&lt;br /&gt;
				last_mon[x][y] = newvalue;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if different then&lt;br /&gt;
			-- Make sure the screen was done refreshing and update again&lt;br /&gt;
			lsSleep(60);&lt;br /&gt;
			srReadScreen();&lt;br /&gt;
			for x=1, mon_w do&lt;br /&gt;
				for y=1, mon_h do&lt;br /&gt;
					last_mon[x][y] = srReadPixelFromBuffer(mon_x + x, mon_y + y);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if (different and skip_next) then&lt;br /&gt;
			skip_next = nil;&lt;br /&gt;
			different = nil;&lt;br /&gt;
		end &lt;br /&gt;
		&lt;br /&gt;
		lsPrintWrapped(10, 5, 0, lsScreenX - 20, 1, 1, 0xFFFFFFff, message);&lt;br /&gt;
		lsPrintWrapped(10, 60, 0, lsScreenX - 20, 1, 1, 0xFFFFFFff, &amp;quot;Waiting for change...&amp;quot;);&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;
		if lsButtonText(40, lsScreenY - 60, z, 200, 0xFFFFFFff, &amp;quot;Force tick&amp;quot;) then&lt;br /&gt;
			different = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(40, lsScreenY - 90, z, 200, 0xFFFFFFff, &amp;quot;Skip tick&amp;quot;) then&lt;br /&gt;
			skip_next = 1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if lsButtonText(40, lsScreenY - 120, z, 200, 0xFFFFFFff, &amp;quot;Finish up&amp;quot;) then&lt;br /&gt;
			finish_up = 1;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- display mon pixels&lt;br /&gt;
		for x=1, mon_w do&lt;br /&gt;
			for y=1, mon_h do&lt;br /&gt;
				local size = 2;&lt;br /&gt;
				lsDisplaySystemSprite(1, 10+x*size, 90+y*size, 0, size, size, last_mon[x][y]);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		lsDoFrame();&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function test()&lt;br /&gt;
&lt;br /&gt;
	local loop=0;&lt;br /&gt;
	while 1 do&lt;br /&gt;
		waitForMonChange(&amp;quot;tick &amp;quot; .. loop);&lt;br /&gt;
		&lt;br /&gt;
		statusScreen('Changed!');&lt;br /&gt;
		lsSleep(1000);&lt;br /&gt;
		loop = loop + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	error 'done';&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function refillWater()&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindWater = srFindImage(&amp;quot;iconWaterJugSmall.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	if FindWater then&lt;br /&gt;
	statusScreen(&amp;quot;Refilling water...&amp;quot;);&lt;br /&gt;
	srClickMouseNoMove(FindWater[0]+3,FindWater[1]-5, right_click);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		FindMaxButton = srFindImage(&amp;quot;Maxbutton.png&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		if FindMaxButton then&lt;br /&gt;
		srClickMouseNoMove(FindMaxButton[0]+3,FindMaxButton[1]+3, right_click);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function refillWaterBarrel()&lt;br /&gt;
	lsSleep(100);&lt;br /&gt;
	srReadScreen();&lt;br /&gt;
	FindWater = findText(&amp;quot;Draw Water&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	if FindWater then&lt;br /&gt;
	statusScreen(&amp;quot;Refilling water...&amp;quot;);&lt;br /&gt;
	srClickMouseNoMove(FindWater[0]+30,FindWater[1]+5, right_click);&lt;br /&gt;
	lsSleep(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		FindMaxButton = srFindImage(&amp;quot;Maxbutton.png&amp;quot;, 5000);&lt;br /&gt;
&lt;br /&gt;
		if FindMaxButton then&lt;br /&gt;
		srClickMouseNoMove(FindMaxButton[0]+3,FindMaxButton[1]+3, right_click);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
	num_loops = promptNumber(&amp;quot;How many passes ?&amp;quot;, 1);&lt;br /&gt;
	askForWindow(&amp;quot;Pin any number of thistle gardens, edit thistle_custom with recipe. Macro will always look for water icon to refill jugs. You can optionally pin the Water Barrel menu to refill jugs.&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	if not ( #instructions == 41*5) then&lt;br /&gt;
		error 'Invalid instruction length';&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	refillWater();&lt;br /&gt;
	refillWaterBarrel();&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	-- test();&lt;br /&gt;
	&lt;br /&gt;
	for loops=1, num_loops do&lt;br /&gt;
		&lt;br /&gt;
		clickAll(&amp;quot;ThistleAsc.png&amp;quot;, nil);&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		&lt;br /&gt;
		srReadScreen();&lt;br /&gt;
		local buttons = findAllImages(&amp;quot;ThistleNit.png&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		-- Sanity check&lt;br /&gt;
		if not (#buttons == expected_gardens) then&lt;br /&gt;
			error &amp;quot;Did not find expected number of thistle gardens&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		local buttons2 = findAllImages(&amp;quot;ThistlePlantACrop.png&amp;quot;);&lt;br /&gt;
		if not (#buttons2 == #buttons) then&lt;br /&gt;
			error (&amp;quot;Some PlantACrop obscured, found &amp;quot; .. #buttons2 .. &amp;quot;, expected &amp;quot; .. #buttons);&lt;br /&gt;
		end&lt;br /&gt;
		for i=1, #button_names do&lt;br /&gt;
			local buttons2 = findAllImages(button_names[i]);&lt;br /&gt;
			if not (#buttons2 == #buttons) then&lt;br /&gt;
				error (&amp;quot;Some &amp;quot; .. button_names[i] .. &amp;quot; obscured, found &amp;quot; .. #buttons2 .. &amp;quot;, expected &amp;quot; .. #buttons);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		clickAll(&amp;quot;ThistlePlantACrop.png&amp;quot;, 1);&lt;br /&gt;
		statusScreen(&amp;quot;(&amp;quot; .. loops .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;) Doing initial 2s wait...&amp;quot;);&lt;br /&gt;
		lsSleep(2000);&lt;br /&gt;
		waitForMonChange(&amp;quot;Getting initial image...&amp;quot;);&lt;br /&gt;
		for i=0, 39 do&lt;br /&gt;
			for j=0, 3 do&lt;br /&gt;
				for k=1, instructions[i*5 + j + 1] do&lt;br /&gt;
					clickAll(button_names[j+1], 1);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not (instructions[i*5 + 5] == last_sun) then&lt;br /&gt;
				last_sun = instructions[i*5 + 5];&lt;br /&gt;
				clickAll(button_names[5], 1);&lt;br /&gt;
			end&lt;br /&gt;
			waitForMonChange(&amp;quot;(&amp;quot; .. loops .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;) Tick &amp;quot; .. i .. &amp;quot; done.&amp;quot;);&lt;br /&gt;
			if finish_up then&lt;br /&gt;
				num_loops = loops;&lt;br /&gt;
			end			&lt;br /&gt;
			lsSleep(1000); -- Wait a moment after image changes before doing the next tick&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		lsSleep(100);&lt;br /&gt;
		clickAll(&amp;quot;ThistleAsc.png&amp;quot;, nil);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		clickAll(&amp;quot;Harvest.png&amp;quot;, nil);&lt;br /&gt;
		lsSleep(500);&lt;br /&gt;
		&lt;br /&gt;
		refillWater();&lt;br /&gt;
		refillWaterBarrel();&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
		if finish_up then&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Murtha</name></author>
	</entry>
</feed>