The Wiki for Tale 6 is in read-only mode and is available for archival and reference purposes only. Please visit the current Tale 11 Wiki in the meantime.

If you have any issues with this Wiki, please post in #wiki-editing on Discord or contact Brad in-game.

User:Teti

From ATITD6
Revision as of 00:22, 11 February 2012 by Teti (talk | contribs) (→‎Macros)
Jump to navigationJump to search

User:Teti/Hookah

User:Teti/AlexasGarlicSpot

User:Teti/Wine

User:Teti/Beer

Macros

File:VineyardMacro.zip

Barley with fert

-- Edit these first 2 to adjust how much is planted in a pass -- May need to adjust walk_time in Barley_common.inc if you move too slowly to keep up -- grids tested: 2x2, 3x3, 5x5, 6x6 (probably need 3+ dex and 600ms walk time) grid_w = 5; grid_h = 5; watered = {};

loadfile("luaScripts/Flax_common.inc")(); loadfile("luaScripts/screen_reader_common.inc")(); loadfile("luaScripts/ui_utils.inc")();

function promptBarleyNumbers(is_plant) scale = 1.0;

local z = 0; local is_done = nil; local value = nil; -- Edit box and text display while not is_done do -- Put these everywhere to make sure we don't lock up with no easy way to escape! checkBreak("disallow pause");

lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, "Choose passes and grid size");

-- lsEditBox needs a key to uniquely name this edit box -- let's just use the prompt! -- lsEditBox returns two different things (a state and a value) local y = 40; lsPrint(5, y, z, scale, scale, 0xFFFFFFff, "Passes:"); is_done, num_loops = lsEditBox("passes", 100, y, z, 50, 30, scale, scale, 0x000000ff, 5); if not tonumber(num_loops) then is_done = nil; lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER"); num_loops = 1; end y = y + 32;

lsPrint(5, y, z, scale, scale, 0xFFFFFFff, "Grid size:"); is_done, grid_w = lsEditBox("grid", 100, y, z, 50, 30, scale, scale, 0x000000ff, grid_w); if not tonumber(grid_w) then is_done = nil; lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER"); grid_w = 1; grid_h = 1; end grid_w = tonumber(grid_w); grid_h = grid_w; y = y + 32;

if lsButtonText(170, y-32, z, 100, 0xFFFFFFff, "OK") then is_done = 1; end

if is_plant then lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, "This will plant and harvest a " .. grid_w .. "x" .. grid_w .. " grid of Barley " .. num_loops .. " times, requiring " .. (grid_w * grid_w) .. " raw barley and ".. (grid_w * grid_w * num_loops * 4) .. "water in jugs, doing " .. (grid_w*grid_w*num_loops) .. " harvests."); else lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff, "This will plant a " .. grid_w .. "x" .. grid_w .. " grid of Flax " .. num_loops .. " times, requiring " .. (grid_w * grid_w) .. " seeds, yielding " .. (grid_w * grid_w * num_loops) .. " seeds."); end

if is_done and (not num_loops or not grid_w) then error 'Canceled'; end

if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, "End script") then error "Clicked End Script button"; end


lsDoFrame(); lsSleep(10); -- Sleep just so we don't eat up all the CPU for no reason end end


function doit()

 promptBarleyNumbers(1);
 askForWindow("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.");
 lsSleep(1000);
 delay_time = 2000;
 local x = 1;
 local y = 1;
 initGlobals();
 -- Find the plant barley button
 srReadScreen();
 local imgBarley = "barley.png";
 local xyPlantBarley = srFindImage(imgBarley);
 if not xyPlantBarley then
   error 'Could not find plant window';
 end
 xyPlantBarley[0] = xyPlantBarley[0] + 5;
 


 for loop_count=1, num_loops do
 local start_time = lsGetTimer();
   harvested = 0;

-- Init watered array to 0 for y=grid_h, 1, -1 do

     for x=grid_w, 1, -1 do 
       watered[x+((y-1)*grid_w)] = 1;
      end
   end	

-- Local variables

 local xyCenter = getCenterPos();
 local xyBarleyMenu = {};
 xyBarleyMenu[0] = xyCenter[0] - 43;
 xyBarleyMenu[1] = xyCenter[1] + 0;
 local dxi=1;
 local dt_max=grid_w;
 local dt=grid_w;
 local dx={1, 0, -1, 0};
 local dy={0, -1, 0, 1};
 local num_at_this_length = 3;
 local x_pos = 0;
 local y_pos = 0;
   for y=1, grid_h do
     for x=1, grid_w do
       lsPrintln('doing ' .. x .. ',' .. y .. ' of ' .. grid_w .. ',' .. grid_h);
       statusScreen("Planting " .. x .. ", " .. y);
       

-- Plant

       lsPrintln('planting ' .. xyPlantBarley[0] .. ',' .. xyPlantBarley[1]);
       setWaitSpot(xyBarleyMenu[0], xyBarleyMenu[1]);
       srClickMouseNoMove(xyPlantBarley[0], xyPlantBarley[1], 0);
       srSetMousePos(xyBarleyMenu[0], xyBarleyMenu[1]);
       waitForChange();
       
       -- Bring up menu
       lsPrintln('menu ' .. xyBarleyMenu[0] .. ',' .. xyBarleyMenu[1]);
       setWaitSpot(xyBarleyMenu[0]+5, xyBarleyMenu[1]);
       srClickMouse(xyBarleyMenu[0], xyBarleyMenu[1], 0);
       waitForChange();
       -- Check for window size
       window_w = 214;
       window_h = 218;
       -- Pin
       lsPrintln('pin ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1]);
       srClickMouseNoMove(xyBarleyMenu[0]+5, xyBarleyMenu[1]+0, 1);
       -- Move window
       local pp = pinnedPos(x, y);
       lsPrintln('move ' .. (xyBarleyMenu[0]+5) .. ',' .. xyBarleyMenu[1] .. ' to ' .. pp[0] .. ',' .. pp[1]);
       drag(xyBarleyMenu[0] + 5, xyBarleyMenu[1], pp[0], pp[1], 0);

-- Add 2 water now srReadScreen(); local barleyAddButton = srFindImageInRange("BarleyAdd.png", pp[0], pp[1], 200, 100); local barleyWater = srFindImageInRange("barleyWater.png", pp[0], pp[1] - 50, 220, 150);

       srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);

srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]); srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]+20); srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]+20);

       watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 2;
       -- move to next position
       if not ((x == grid_w) and (y == grid_h)) then
         lsPrintln('walking dx=' .. dx[dxi] .. ' dy=' .. dy[dxi]);
         x_pos = x_pos + dx[dxi];
         y_pos = y_pos + dy[dxi];
         srClickMouseNoMove(xyCenter[0] + walk_px_x*dx[dxi], xyCenter[1] + walk_px_y*dy[dxi], 0);
         lsSleep(walk_time);
         dt = dt - 1;
         if dt == 1 then
           dxi = dxi + 1;
           num_at_this_length = num_at_this_length - 1;
           if num_at_this_length == 0 then
             dt_max = dt_max - 1;
             num_at_this_length = 2;
           end
           if dxi == 5 then
             dxi = 1;
           end
           dt = dt_max;
         else
           lsPrintln('skipping walking, on last leg');
         end
       end
       checkBreak();
     end

end

   statusScreen("Refocusing windows...");
   -- Bring windows to front
   for y=grid_h, 1, -1 do
     for x=grid_w, 1, -1 do 
       local rp = refreshPosUp(x, y);
       srClickMouseNoMove(rp[0], rp[1], 0);
       lsSleep(refocus_click_time);
     end
   end
   lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again
 
     -- Barley has been planted, pinned and refocused	

     while 1 do
       for y=1, grid_h do
         for x=1, grid_w do 
           local pp = pinnedPos(x, y);
           local rp = refreshPosDown(x, y);
           srClickMouse(rp[0],rp[1]);
           lsSleep(200);
           srReadScreen();
           local leftBar = srFindImageInRange("barleyBarLeft.png", pp[0], pp[1] - 50, 120, 100);
           if leftBar then
             leftBar[0] = leftBar[0] + 4;
           end
           local rightBar = srFindImageInRange("barleyBarRight.png", pp[0], pp[1] - 50, 220, 200);
           if rightBar then
             rightBar[0] = rightBar[0] + 1;

end

           if not rightBar then
             error 'Could not find rightbar';
           end
           local barleyWater = srFindImageInRange("barleyWater.png", pp[0], pp[1] - 50, 220, 150);
           if not barleyWater then error 'Could not find water button'; end
           local barleyAddButton = srFindImageInRange("BarleyAdd.png", pp[0], pp[1], 200, 100);
           if not barleyAddButton then error 'Could not find add button'; end
           while 1 do
             if leftBar then
               waterBlue = 0;
               if rightBar then
                 if barleyWater then
                   srReadScreen();
                   for i=leftBar[0],rightBar[0] do
                     pxval = srReadPixelFromBuffer(i, barleyWater[1]);
                     b = (math.floor(pxval/256) % 256);
                     if b > 220 then
                       waterBlue = waterBlue + 1;
                     end
                   end
                 waterBlue = (waterBlue/(rightBar[0]-leftBar[0])*100);
                 end
               end
             end
           checkBreak();
           if watered[x+((y-1)*grid_w)] < 6 then

statusScreen("Watering " .. x .. "," .. y .. "step " .. watered[x+((y-1)*grid_w)] .. ".");

             if waterBlue < 80 then

if watered[x+((y-1)*grid_w)] == 0 then end

               srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]);
               srClickMouseNoMove(barleyAddButton[0]+8, barleyWater[1]+20);
               watered[x+((y-1)*grid_w)] = watered[x+((y-1)*grid_w)] + 1;
               lsSleep(100);
               break;
             end
           else

statusScreen("Harvesting " .. x .. "," .. y .. ".");

             if waterBlue < 90 then

srClickMouseNoMove(pp[0]+90, pp[1]+90);

               lsSleep(100);
               srClickMouseNoMove(pp[0]+180, pp[1]-25);

if watered[x+((y-1)*grid_w)] == 6 then harvested = 1; end

               break;
             end
           end
         end
       end
     end

if harvested == 0 then

       statusScreen("Refocusing windows...");
       -- Bring windows to front
       for y=grid_h, 1, -1 do
         for x=grid_w, 1, -1 do 
           local rp = refreshPosUp(x, y);
           srClickMouseNoMove(rp[0], rp[1], 0);
           lsSleep(refocus_click_time);
         end
       end

lsSleep(refocus_time); -- Wait for last window to bring to the foreground before clicking again else for x=1, x_pos do srClickMouseNoMove(xyCenter[0] + walk_px_x*-1, xyCenter[1], 0); lsSleep(walk_time); end for x=1, -y_pos do srClickMouseNoMove(xyCenter[0], xyCenter[1] + walk_px_y, 0); lsSleep(walk_time); end break; end end local end_time = lsGetTimer(); statusScreen("Time taken: " .. (end_time-start_time)/1000);

 end
end