<?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%3AObol%2Fflax_stable_mac</id>
	<title>User:Obol/flax stable mac - 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%3AObol%2Fflax_stable_mac"/>
	<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t7w/index.php?title=User:Obol/flax_stable_mac&amp;action=history"/>
	<updated>2026-06-19T06:28:22Z</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:Obol/flax_stable_mac&amp;diff=25693&amp;oldid=prev</id>
		<title>Obol: Created page with &quot;&lt;pre&gt; -- flax_stable.lua v1.2 -- by Jimbly, tweaked by Cegaiel and --   KasumiGhia, revised by Tallow. -- -- Plant flax and harvest either flax or seeds. -- -- Works Reliably: 2x...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.atitd.org/wiki/t7w/index.php?title=User:Obol/flax_stable_mac&amp;diff=25693&amp;oldid=prev"/>
		<updated>2015-10-23T22:32:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;pre&amp;gt; -- flax_stable.lua v1.2 -- by Jimbly, tweaked by Cegaiel and --   KasumiGhia, revised by Tallow. -- -- Plant flax and harvest either flax or seeds. -- -- Works Reliably: 2x...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
-- flax_stable.lua v1.2 -- by Jimbly, tweaked by Cegaiel and&lt;br /&gt;
--   KasumiGhia, revised by Tallow.&lt;br /&gt;
--&lt;br /&gt;
-- Plant flax and harvest either flax or seeds.&lt;br /&gt;
--&lt;br /&gt;
-- Works Reliably: 2x2, 3x3, 4x4, 5x5&lt;br /&gt;
-- May Work (depends on your computer): 6x6, 7x7&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dofile(&amp;quot;common.inc&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
askText = singleLine([[&lt;br /&gt;
  flax_stable v1.1 (by Jimbly, tweaked by Cegaiel and KasumiGhia,&lt;br /&gt;
  revised by Tallow) --&lt;br /&gt;
  Plant flax and harvest either flax or seeds. --&lt;br /&gt;
  Make sure the plant flax window is pinned and on the RIGHT side of&lt;br /&gt;
  the screen. Your Automato window should also be on the RIGHT side&lt;br /&gt;
  of the screen. You must be in F8F8 cam zoomed in.  You may need to&lt;br /&gt;
  F12 at low resolutions or hide your chat window (if it starts&lt;br /&gt;
  planting and fails to move downward, it probably clicked on your&lt;br /&gt;
  chat window). Will plant grid NE of current location.  'Plant all&lt;br /&gt;
  crops where you stand' must be ON.  'Right click pins/unpins a menu'&lt;br /&gt;
  must be ON. Enable Hotkeys on flax must be OFF.&lt;br /&gt;
]]);&lt;br /&gt;
&lt;br /&gt;
-- Global parameters set by prompt box.&lt;br /&gt;
num_loops = 5;&lt;br /&gt;
grid_w = 5;&lt;br /&gt;
grid_h = 5;&lt;br /&gt;
is_plant = true;&lt;br /&gt;
seeds_per_pass = 5;&lt;br /&gt;
&lt;br /&gt;
--imgFlax1 = &amp;quot;Flax:&amp;quot;;&lt;br /&gt;
--imgFlax1 = &amp;quot;flax_symphony.png&amp;quot;;&lt;br /&gt;
--imgFlax1 = &amp;quot;Symphony&amp;quot;;&lt;br /&gt;
imgFlax1 = &amp;quot;Jacob&amp;quot;;&lt;br /&gt;
flax_seeds = {&amp;quot;Symphony&amp;quot;, &amp;quot;Jacob&amp;quot;, &amp;quot;Constitution&amp;quot;,&lt;br /&gt;
			&amp;quot;Nile Green&amp;quot;, &amp;quot;Old Dog&amp;quot;, &amp;quot;Old Egypt&amp;quot;,&lt;br /&gt;
			&amp;quot;SunsetPond&amp;quot;};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
imgHarvest = &amp;quot;HarvestThisFlax.png&amp;quot;;&lt;br /&gt;
imgWeedAndWater = &amp;quot;WeedAndWater.png&amp;quot;;&lt;br /&gt;
imgWeed = &amp;quot;WeedThisFlaxBed.png&amp;quot;;&lt;br /&gt;
imgSeeds = &amp;quot;HarvestSeeds.png&amp;quot;;&lt;br /&gt;
imgUseable = &amp;quot;UseableBy.png&amp;quot;;&lt;br /&gt;
imgThisIs = &amp;quot;ThisIs.png&amp;quot;;&lt;br /&gt;
imgUtility = &amp;quot;Utility.png&amp;quot;;&lt;br /&gt;
imgRipOut = &amp;quot;RipOut.png&amp;quot;;&lt;br /&gt;
imgUnpin = &amp;quot;UnPin.png&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
-- Tweakable delay values&lt;br /&gt;
refresh_time = 300; -- Time to wait for windows to update&lt;br /&gt;
walk_time = 300;&lt;br /&gt;
&lt;br /&gt;
-- Don't touch. These are set according to Jimbly's black magic.&lt;br /&gt;
walk_px_y = 340;&lt;br /&gt;
walk_px_x = 380;&lt;br /&gt;
&lt;br /&gt;
xyCenter = {};&lt;br /&gt;
xyFlaxMenu = {};&lt;br /&gt;
&lt;br /&gt;
-- The flax bed window&lt;br /&gt;
window_w = 174;&lt;br /&gt;
window_h = 100;&lt;br /&gt;
&lt;br /&gt;
FLAX = 0;&lt;br /&gt;
ONIONS = 1;&lt;br /&gt;
plantType = FLAX;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- initGlobals()&lt;br /&gt;
--&lt;br /&gt;
-- Set up black magic values used for trying to walk a standard grid.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function initGlobals()&lt;br /&gt;
  -- Macro written with 1720 pixel wide window&lt;br /&gt;
&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  xyWindowSize = srGetWindowSize();&lt;br /&gt;
&lt;br /&gt;
  local pixel_scale = xyWindowSize[0] / 1720;&lt;br /&gt;
  lsPrintln(&amp;quot;pixel_scale &amp;quot; .. pixel_scale);&lt;br /&gt;
&lt;br /&gt;
  walk_px_y = math.floor(walk_px_y * pixel_scale);&lt;br /&gt;
  walk_px_x = math.floor(walk_px_x * pixel_scale);&lt;br /&gt;
&lt;br /&gt;
  local walk_x_drift = 14;&lt;br /&gt;
  local walk_y_drift = 18;&lt;br /&gt;
  if (lsScreenX &amp;lt; 1280) then &lt;br /&gt;
    -- Have to click way off center in order to not move at high resolutions&lt;br /&gt;
    walk_x_drift = math.floor(walk_x_drift * pixel_scale);&lt;br /&gt;
    walk_y_drift = math.floor(walk_y_drift * pixel_scale);&lt;br /&gt;
  else&lt;br /&gt;
    -- Very little drift at these resolutions, clicking dead center barely moves&lt;br /&gt;
    walk_x_drift = 1;&lt;br /&gt;
    walk_y_drift = 1;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  xyCenter[0] = xyWindowSize[0] / 2 - walk_x_drift;&lt;br /&gt;
  xyCenter[1] = xyWindowSize[1] / 2 + walk_y_drift;&lt;br /&gt;
  if plantType == FLAX then&lt;br /&gt;
    xyFlaxMenu[0] = xyCenter[0] - 43*pixel_scale;&lt;br /&gt;
    xyFlaxMenu[1] = xyCenter[1] + 0;&lt;br /&gt;
  else&lt;br /&gt;
    xyFlaxMenu[0] = xyCenter[0] - 20;&lt;br /&gt;
    xyFlaxMenu[1] = xyCenter[1] - 10;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- checkWindowSize()&lt;br /&gt;
--&lt;br /&gt;
-- Set width and height of flax window based on whether they are guilded.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
window_check_done_once = false;&lt;br /&gt;
function checkWindowSize(x, y)&lt;br /&gt;
  if not window_check_done_once then&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    window_check_done_once = true;&lt;br /&gt;
    local pos = srFindImageInRange(imgUseable, x-5, y-50, 150, 100)&lt;br /&gt;
    if pos then&lt;br /&gt;
      window_w = 166;&lt;br /&gt;
      window_h = 116;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- promptFlaxNumbers()&lt;br /&gt;
--&lt;br /&gt;
-- Gather user-settable parameters before beginning&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function promptFlaxNumbers()&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;
    -- Make sure we don't lock up with no easy way to escape!&lt;br /&gt;
    checkBreak();&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;
&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;, 110, y, z, 50, 30, scale, scale,&lt;br /&gt;
                                   0x000000ff, num_loops);&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;, 110, 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;
    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 not is_plant then&lt;br /&gt;
      lsPrint(5, y, z, scale, scale, 0xFFFFFFff, &amp;quot;Seeds per:&amp;quot;);&lt;br /&gt;
      is_done, seeds_per_pass = lsEditBox(&amp;quot;seedsper&amp;quot;, 110, y, z, 50, 30,&lt;br /&gt;
                                          scale, scale, 0x000000ff, 4);&lt;br /&gt;
      seeds_per_pass = tonumber(seeds_per_pass);&lt;br /&gt;
      if not seeds_per_pass 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;
        seeds_per_pass = 1;&lt;br /&gt;
      end&lt;br /&gt;
      y = y + 32;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    is_plant = lsCheckBox(10, y, z+10, 0xFFFFFFff, &amp;quot;Grow Flax&amp;quot;, is_plant);&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,&lt;br /&gt;
                     &amp;quot;This will plant and harvest a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; ..&lt;br /&gt;
                     grid_w .. &amp;quot; grid of Flax &amp;quot; .. num_loops ..&lt;br /&gt;
                     &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w * num_loops) ..&lt;br /&gt;
                     &amp;quot; seeds, doing &amp;quot; .. (grid_w*grid_w*num_loops) ..&lt;br /&gt;
                     &amp;quot; flax harvests.&amp;quot;);&lt;br /&gt;
    else&lt;br /&gt;
      local seedTotal = grid_w * grid_h * num_loops * seeds_per_pass&lt;br /&gt;
      lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff,&lt;br /&gt;
                     &amp;quot;This will plant a &amp;quot; .. grid_w .. &amp;quot;x&amp;quot; .. grid_w ..&lt;br /&gt;
                     &amp;quot; grid of Flax and harvest it &amp;quot; .. seeds_per_pass ..&lt;br /&gt;
                     &amp;quot; times, requiring &amp;quot; .. (grid_w * grid_w) ..&lt;br /&gt;
                     &amp;quot; seeds, and repeat this &amp;quot; .. num_loops ..&lt;br /&gt;
                     &amp;quot; times, yielding &amp;quot; .. seedTotal .. &amp;quot; seed harvests.&amp;quot;);&lt;br /&gt;
    end&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,&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(tick_delay);&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getPlantWindowPos()&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
lastPlantPos = null;&lt;br /&gt;
seedImage = imgFlax1;&lt;br /&gt;
&lt;br /&gt;
function getPlantWindowPos()&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local plantPos = 0&lt;br /&gt;
  &lt;br /&gt;
  for item_index=1, #flax_seeds do&lt;br /&gt;
	plantPos = findText(flax_seeds[item_index])&lt;br /&gt;
	if plantPos then&lt;br /&gt;
		break&lt;br /&gt;
	end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  --local plantPos = findText(seedImage);&lt;br /&gt;
  if plantPos then&lt;br /&gt;
    plantPos[0] = plantPos[0] + 10;&lt;br /&gt;
  else&lt;br /&gt;
    plantPos = lastPlantPos;&lt;br /&gt;
    if plantPos then&lt;br /&gt;
      safeClick(plantPos[0], plantPos[1]);&lt;br /&gt;
      lsSleep(refresh_time);&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if not plantPos then&lt;br /&gt;
    error 'Could not find plant window';&lt;br /&gt;
  end&lt;br /&gt;
  lastPlantPos = plantPos;&lt;br /&gt;
  return plantPos;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- getToggle()&lt;br /&gt;
--&lt;br /&gt;
-- Returns 0 or 2 alternately. Used to slightly shift position of windows&lt;br /&gt;
-- while collecting them.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
toggleBit = 0;&lt;br /&gt;
&lt;br /&gt;
function getToggle()&lt;br /&gt;
  if toggleBit == 0 then&lt;br /&gt;
    toggleBit = 2;&lt;br /&gt;
  else&lt;br /&gt;
    toggleBit = 0;&lt;br /&gt;
  end&lt;br /&gt;
  return toggleBit;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- doit()&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function doit()&lt;br /&gt;
  promptFlaxNumbers();&lt;br /&gt;
  askForWindow(askText);&lt;br /&gt;
  initGlobals();&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local startPos = findCoords();&lt;br /&gt;
  if not startPos then&lt;br /&gt;
    error(&amp;quot;ATITD clock not found.\Verify entire clock and borders are visible. Try moving clock slightly.&amp;quot;);&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  drawWater();&lt;br /&gt;
&lt;br /&gt;
  for loop_count=1, num_loops do&lt;br /&gt;
    error_status = &amp;quot;&amp;quot;;&lt;br /&gt;
    local finalPos = plantAndPin(loop_count);&lt;br /&gt;
    dragWindows(loop_count);&lt;br /&gt;
    harvestAll(loop_count);&lt;br /&gt;
    walkHome(loop_count, startPos);&lt;br /&gt;
    drawWater();&lt;br /&gt;
  end&lt;br /&gt;
  lsPlaySound(&amp;quot;Complete.wav&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- plantAndPin()&lt;br /&gt;
--&lt;br /&gt;
-- Walk around in a spiral, planting flax seeds and grabbing windows.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function plantAndPin(loop_count)&lt;br /&gt;
  local xyPlantFlax = getPlantWindowPos();&lt;br /&gt;
		&lt;br /&gt;
  -- for spiral&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;
  local success = true;&lt;br /&gt;
&lt;br /&gt;
  for y=1, grid_h do&lt;br /&gt;
    for x=1, grid_w do&lt;br /&gt;
      statusScreen(&amp;quot;(&amp;quot; .. loop_count .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;) Planting &amp;quot; ..&lt;br /&gt;
                   x .. &amp;quot;, &amp;quot; .. y);&lt;br /&gt;
      success = plantHere(xyPlantFlax, y);&lt;br /&gt;
      if not success then&lt;br /&gt;
        break;&lt;br /&gt;
      end&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;
	lsSleep(40);&lt;br /&gt;
        x_pos = x_pos + dx[dxi];&lt;br /&gt;
        y_pos = y_pos + dy[dxi];&lt;br /&gt;
	local spot = getWaitSpot(xyFlaxMenu[0], xyFlaxMenu[1]);&lt;br /&gt;
        safeClick(xyCenter[0] + walk_px_x*dx[dxi],&lt;br /&gt;
                  xyCenter[1] + walk_px_y*dy[dxi], 0);&lt;br /&gt;
	&lt;br /&gt;
        spot = getWaitSpot(xyFlaxMenu[0], xyFlaxMenu[1]);&lt;br /&gt;
	if not waitForChange(spot, 1500) then&lt;br /&gt;
	  error_status = &amp;quot;Did not move on click.&amp;quot;;&lt;br /&gt;
	  break;&lt;br /&gt;
	end&lt;br /&gt;
        lsSleep(walk_time);&lt;br /&gt;
        waitForStasis(spot, 1500);&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;
        end&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;
    if not success then&lt;br /&gt;
      break;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  local finalPos = {};&lt;br /&gt;
  finalPos[0] = x_pos;&lt;br /&gt;
  finalPos[1] = y_pos;&lt;br /&gt;
  return finalPos;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- plantHere(xyPlantFlax)&lt;br /&gt;
--&lt;br /&gt;
-- Plant a single flax bed, get the window, pin it, then stash it.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function plantHere(xyPlantFlax, y_pos)&lt;br /&gt;
  -- Plant&lt;br /&gt;
  lsPrintln('planting ' .. xyPlantFlax[0] .. ',' .. xyPlantFlax[1]);&lt;br /&gt;
  local bed = clickPlant(xyPlantFlax);&lt;br /&gt;
  if not bed then&lt;br /&gt;
    return false;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- Bring up menu&lt;br /&gt;
  lsPrintln('menu ' .. bed[0] .. ',' .. bed[1]);&lt;br /&gt;
  if not openAndPin(bed[0], bed[1], 3500) then&lt;br /&gt;
    error_status = &amp;quot;No window came up after planting.&amp;quot;;&lt;br /&gt;
    return false;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
--  if plantType == ONIONS then&lt;br /&gt;
--    lsPrintln(&amp;quot;Onions&amp;quot;);&lt;br /&gt;
--    lsSleep(200);&lt;br /&gt;
--    srReadScreen();&lt;br /&gt;
--    local waters = findAllImages(&amp;quot;WaterThese.png&amp;quot;);&lt;br /&gt;
--    for i = 1,#waters do&lt;br /&gt;
--      lsPrintln(&amp;quot;Water&amp;quot;);&lt;br /&gt;
--      safeClick(waters[i][0]+5, waters[i][1]+5);&lt;br /&gt;
--    end&lt;br /&gt;
--    sleepWithStatus(1000, &amp;quot;First Water&amp;quot;);&lt;br /&gt;
--  end&lt;br /&gt;
&lt;br /&gt;
  -- Check for window size&lt;br /&gt;
  checkWindowSize(bed[0], bed[1]);&lt;br /&gt;
&lt;br /&gt;
  -- Move window into corner&lt;br /&gt;
  stashWindow(bed[0] + 5, bed[1], BOTTOM_RIGHT);&lt;br /&gt;
&lt;br /&gt;
  return true;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function clickPlant(xyPlantFlax)&lt;br /&gt;
  local result = xyFlaxMenu;&lt;br /&gt;
  local spot = getWaitSpot(xyFlaxMenu[0], xyFlaxMenu[1]);&lt;br /&gt;
  safeClick(xyPlantFlax[0], xyPlantFlax[1], 0);&lt;br /&gt;
  lsSleep(click_delay);&lt;br /&gt;
&lt;br /&gt;
  local plantSuccess = waitForChange(spot, 1500);&lt;br /&gt;
  if not plantSuccess then&lt;br /&gt;
    error_status = &amp;quot;No flax bed was placed when planting.&amp;quot;;&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;
-- dragWindows(loop_count)&lt;br /&gt;
--&lt;br /&gt;
-- Move flax windows into a grid on the screen.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function dragWindows(loop_count)&lt;br /&gt;
  statusScreen(&amp;quot;(&amp;quot; .. loop_count .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;)  &amp;quot; ..&lt;br /&gt;
               &amp;quot;Dragging Windows into Grid  HAHA&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  arrangeStashed();&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- harvestAll(loop_count)&lt;br /&gt;
--&lt;br /&gt;
-- Harvest all the flax or seeds and clean up the windows afterwards.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function harvestAll(loop_count)&lt;br /&gt;
  local did_harvest = false;&lt;br /&gt;
  local harvestLeft = 0;&lt;br /&gt;
  local seedIndex = 1;&lt;br /&gt;
  local seedWave = 1;&lt;br /&gt;
  local lastTops = {};&lt;br /&gt;
  while not did_harvest do&lt;br /&gt;
    -- Monitor for Weed This/etc&lt;br /&gt;
    lsSleep(refresh_time);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    local tops = findAllImages(imgThisIs);&lt;br /&gt;
    for i=1,#tops do&lt;br /&gt;
      safeClick(tops[i][0], tops[i][1]);&lt;br /&gt;
      lsSleep(click_delay);&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if is_plant then&lt;br /&gt;
      harvestLeft = #tops;&lt;br /&gt;
    else&lt;br /&gt;
      harvestLeft = (#tops - seedIndex) + 1 +&lt;br /&gt;
                    (#tops * (seeds_per_pass - seedWave));&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    statusScreen(&amp;quot;(&amp;quot; .. loop_count .. &amp;quot;/&amp;quot; .. num_loops ..&lt;br /&gt;
                 &amp;quot;) Harvests Left: &amp;quot; .. harvestLeft);&lt;br /&gt;
&lt;br /&gt;
    lsSleep(refresh_time);&lt;br /&gt;
    srReadScreen();&lt;br /&gt;
    if is_plant then&lt;br /&gt;
      local weeds = findAllImages(imgWeed);&lt;br /&gt;
      for i=1,#weeds do&lt;br /&gt;
		&lt;br /&gt;
		--srSetMousePos(weeds[i][0], weeds[i][1]);&lt;br /&gt;
        &lt;br /&gt;
		safeClick(weeds[i][0], weeds[i][1]);&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      local waters = findAllImages(imgWeedAndWater);&lt;br /&gt;
      for i=1,#waters do&lt;br /&gt;
        safeClick(waters[i][0], waters[i][1]);&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      local harvests = findAllImages(imgHarvest);&lt;br /&gt;
      for i=1,#harvests do&lt;br /&gt;
		&lt;br /&gt;
		--srSetMousePos(harvests[i][0], harvests[i][1]);&lt;br /&gt;
        &lt;br /&gt;
		safeClick(harvests[i][0], harvests[i][1]);&lt;br /&gt;
        lsSleep(refresh_time);&lt;br /&gt;
        safeClick(harvests[i][0], harvests[i][1] - 15, 1);&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      local seeds = findAllImages(imgSeeds);&lt;br /&gt;
      for i=1,#seeds do&lt;br /&gt;
        local seedTop = srFindImageInRange(imgThisIs,&lt;br /&gt;
                                        seeds[i][0] - 10, seeds[i][1]-window_h,&lt;br /&gt;
                                        window_w, window_h, 5000);&lt;br /&gt;
        if seedTop then&lt;br /&gt;
          ripOut(seedTop);&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      srReadScreen();&lt;br /&gt;
      local tops = findAllImages(imgThisIs);&lt;br /&gt;
      if #tops &amp;gt; 0 then&lt;br /&gt;
        if seedIndex &amp;gt; #tops then&lt;br /&gt;
          seedIndex = 1;&lt;br /&gt;
          seedWave = seedWave + 1;&lt;br /&gt;
        end&lt;br /&gt;
        local seedPos = srFindImageInRange(imgSeeds,&lt;br /&gt;
					   tops[#tops - seedIndex + 1][0],&lt;br /&gt;
					   tops[#tops - seedIndex + 1][1],&lt;br /&gt;
					   160, 100);&lt;br /&gt;
        &lt;br /&gt;
		if seedPos and seedWave &amp;lt;= seeds_per_pass then&lt;br /&gt;
          safeClick(seedPos[0] + 5, seedPos[1]);&lt;br /&gt;
          lsSleep(harvest_seeds_time);&lt;br /&gt;
          seedIndex = seedIndex + 1;&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if seedWave &amp;gt; seeds_per_pass then&lt;br /&gt;
        local seeds = findAllImages(imgThisIs);&lt;br /&gt;
        for i=1,#seeds do&lt;br /&gt;
          ripOut(seeds[i]);&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
	&lt;br /&gt;
    if #tops &amp;lt;= 0 then&lt;br /&gt;
      did_harvest = true;&lt;br /&gt;
    end&lt;br /&gt;
    checkBreak();&lt;br /&gt;
  end&lt;br /&gt;
  -- Wait for last flax bed to disappear&lt;br /&gt;
  sleepWithStatus(4000, &amp;quot;(&amp;quot; .. loop_count .. &amp;quot;/&amp;quot; .. num_loops ..&lt;br /&gt;
		  &amp;quot;) ... Waiting for flax beds to disappear&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- walkHome(loop_count, finalPos)&lt;br /&gt;
--&lt;br /&gt;
-- Walk back to the origin (southwest corner) to start planting again.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function walkHome(loop_count, finalPos)&lt;br /&gt;
  closeAllWindows(0, 0, srGetWindowSize()[0] - lsGetWindowSize()[0] - 100,&lt;br /&gt;
		  srGetWindowSize()[1]);&lt;br /&gt;
  statusScreen(&amp;quot;(&amp;quot; .. loop_count .. &amp;quot;/&amp;quot; .. num_loops .. &amp;quot;) Walking...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  walkTo(finalPos);&lt;br /&gt;
&lt;br /&gt;
  -- Walk back&lt;br /&gt;
--  for x=1, finalPos[0] do&lt;br /&gt;
--    local spot = getWaitSpot(xyCenter[0] - walk_px_x, xyCenter[1]);&lt;br /&gt;
--    safeClick(xyCenter[0] - walk_px_x, xyCenter[1], 0);&lt;br /&gt;
--    lsSleep(walk_time);&lt;br /&gt;
--    waitForStasis(spot, 1000);&lt;br /&gt;
--  end&lt;br /&gt;
--  for x=1, -(finalPos[1]) do&lt;br /&gt;
--    local spot = getWaitSpot(xyCenter[0], xyCenter[1] + walk_px_y);&lt;br /&gt;
--    safeClick(xyCenter[0], xyCenter[1] + walk_px_y, 0);&lt;br /&gt;
--    lsSleep(walk_time);&lt;br /&gt;
--    waitForStasis(spot, 1000);&lt;br /&gt;
--  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- ripOut(pos)&lt;br /&gt;
--&lt;br /&gt;
-- Use the Utility menu to rip out a flax bed that has gone to seed.&lt;br /&gt;
-- pos should be the screen position of the 'This Is' text on the window.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function ripOut(pos)&lt;br /&gt;
  statusScreen(&amp;quot;Ripping Out&amp;quot;);&lt;br /&gt;
  lsSleep(refresh_time);&lt;br /&gt;
  srReadScreen();&lt;br /&gt;
  local util_menu = srFindImageInRange(imgUtility, pos[0] - 10, pos[1] - 50,&lt;br /&gt;
                                       180, 200, 5000);&lt;br /&gt;
  if util_menu then&lt;br /&gt;
    safeClick(util_menu[0] + 5, util_menu[1], 0);&lt;br /&gt;
    local rip_out = waitForImage(imgRipOut, 1000);&lt;br /&gt;
    if rip_out then&lt;br /&gt;
      safeClick(rip_out[0] + 5, rip_out[1], 0);&lt;br /&gt;
      lsSleep(refresh_time);&lt;br /&gt;
      safeClick(pos[0], pos[1], 1); -- unpin&lt;br /&gt;
      lsSleep(refresh_time);&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>Obol</name></author>
	</entry>
</feed>