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.
Difference between revisions of "User:Cegaiel/VeggieTales/Onion"
From ATITD6
Jump to navigationJump to search(18 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | <B>Credits:</b> | ||
+ | Note this script is KasumiGhia's Tale 5 [http://www.atitd.org/wiki/tale5/User:KasumiGhia/lua onions2.lua] update, but with some tweaks/updates.. | ||
+ | |||
+ | |||
+ | |||
+ | <b>Updates/Tweaks by [[User:Cegaiel | Cegaiel]]:</b> | ||
+ | *Will now refresh the plant window, after harvesting. | ||
+ | **This is in case you used all your seeds during planting which makes the plant window to be blank (as there are no more seeds in inventory after you planted your last seed). | ||
+ | **By refreshing the plant window after harvesting, it will not cause an error (Plant window not found) on 2nd and subsequent passes. | ||
+ | *screen_refresh_time changed from 100 to 300, to help prevent pin up problems on slower computers. This doesn't need to be so fast as the game doesn't really keep up anyways on 5x5 or small grids. | ||
+ | *Added instructions in the script that 'Right click Pins/Unpins a Menu' must be ON and 'Right click opens a Menu as pinned' must be OFF. | ||
+ | |||
+ | |||
+ | <b>Updates/Tweaks by [[User:Taral | Taral]]:</b> | ||
+ | *Found/corrected minor bug where the 'fill jugs' routine was off by 1. | ||
+ | **If you claim to have enough jugs it is not suppose to ask to refill jugs, at beginning. However this was off by one (ie if you said you have 60 jugs AND if your grid required 60 jugs, you would be required to enter 61 jugs to not force you to refill jugs at beginning). | ||
+ | *Also condensed my 3 lines of updated code, into 1 line of code (refresh plant window routine). | ||
+ | |||
+ | |||
+ | |||
Copy/Paste/Overwrite the below into the <b>onions.lua</b> file (using Notepad) in the Veggie Tales /LUASCRIPTS folder. | Copy/Paste/Overwrite the below into the <b>onions.lua</b> file (using Notepad) in the Veggie Tales /LUASCRIPTS folder. | ||
+ | <b>Onions.lua:</b> | ||
<pre> | <pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
imgOnionBed = "ThisIsAnOnionBed.png"; | imgOnionBed = "ThisIsAnOnionBed.png"; | ||
imgOnionSeeds = "OnionSeeds.png"; | imgOnionSeeds = "OnionSeeds.png"; | ||
Line 34: | Line 50: | ||
search_size = 15; | search_size = 15; | ||
− | search_dx = {0, -search_size, search_size, -search_size, search_size, -search_size, search_size, 0, 0}; | + | search_size2 = 10; |
− | search_dy = {0, -search_size, search_size, search_size, -search_size, 0, 0, -search_size, search_size}; | + | search_dx = {0, -search_size, search_size, -search_size, search_size, -search_size, search_size, 0, 0, -search_size2, search_size2, -search_size2, search_size2, -search_size2, search_size2, 0, 0}; |
+ | search_dy = {0, -search_size, search_size, search_size, -search_size, 0, 0, -search_size, search_size, -search_size2, search_size2, search_size2, -search_size2, 0, 0, -search_size2, search_size2}; | ||
+ | |||
function fillWater(required) | function fillWater(required) | ||
+ | if water_needed then | ||
if (aqueduct_mode) then | if (aqueduct_mode) then | ||
aque = srFindImage("Aqueduct.png", 5000); | aque = srFindImage("Aqueduct.png", 5000); | ||
Line 54: | Line 73: | ||
end | end | ||
else | else | ||
− | srClickMouseNoMove(xyFillWater[0], xyFillWater[1]); | + | srReadScreen(); |
− | + | xyFillWater = srFindImage(imgWaterJugs); | |
− | + | if not xyFillWater then | |
− | + | error 'Moved too far for fill jugs with water icon.'; | |
+ | else | ||
+ | -- Use it | ||
+ | srClickMouseNoMove(xyFillWater[0], xyFillWater[1]); | ||
+ | lsSleep(screen_refresh_time); | ||
+ | srClickMouseNoMove(xyCenter[0] + 10, xyCenter[1] + 20); | ||
+ | lsSleep(fill_water_time); | ||
+ | end; | ||
end | end | ||
− | + | end; | |
+ | num_waters = 0; | ||
end | end | ||
function doit() | function doit() | ||
num_jugs = promptNumber("How many jugs?", 15); | num_jugs = promptNumber("How many jugs?", 15); | ||
+ | grid_w = promptNumber("How many plants across?", grid_w); | ||
+ | grid_h = promptNumber("How many rows of plants?", grid_h); | ||
num_loops = promptNumber("How many " .. grid_w .. "x" .. grid_h .. " passes?", 5); | num_loops = promptNumber("How many " .. grid_w .. "x" .. grid_h .. " passes?", 5); | ||
− | askForWindow("Make sure the plant Onions window is pinned and you are in F8F8 cam zoomed in. Will plant SE of this location. | + | askForWindow("Make sure the plant Onions window is pinned and you are in F8F8 cam zoomed in. Will plant SE of this location.\n \n'Plant all crops where you stand' must be ON. 'Right click pins/unpins a menu' must be ON. 'Right click opens Menu as Pinned' must be OFF."); |
initGlobals(); | initGlobals(); | ||
num_waters = 0; | num_waters = 0; | ||
+ | water_needed = 1; | ||
+ | if num_jugs >= (grid_w*grid_h*4*num_loops) then | ||
+ | water_needed = false; | ||
+ | end; | ||
srReadScreen(); | srReadScreen(); | ||
xyCenter = getCenterPos(); | xyCenter = getCenterPos(); | ||
− | |||
− | |||
− | |||
− | |||
-- Find plant onions window | -- Find plant onions window | ||
local xyPlantOnions = srFindImage(imgOnionSeeds); | local xyPlantOnions = srFindImage(imgOnionSeeds); | ||
if not xyPlantOnions then | if not xyPlantOnions then | ||
error 'Could not find plant window'; | error 'Could not find plant window'; | ||
− | |||
end | end | ||
− | |||
− | |||
− | |||
xyPlantOnions[0] = xyPlantOnions[0] + 5; | xyPlantOnions[0] = xyPlantOnions[0] + 5; | ||
− | |||
− | |||
− | |||
-- Find aqudeuct or fill water button, use it | -- Find aqudeuct or fill water button, use it | ||
aque = srFindImage("Aqueduct.png", 5000); | aque = srFindImage("Aqueduct.png", 5000); | ||
if not aque then | if not aque then | ||
+ | if water_needed then | ||
aqueduct_mode = nil; | aqueduct_mode = nil; | ||
xyFillWater = srFindImage(imgWaterJugs); | xyFillWater = srFindImage(imgWaterJugs); | ||
Line 103: | Line 126: | ||
fillWater(nil); | fillWater(nil); | ||
end; | end; | ||
+ | end; | ||
else | else | ||
aqueduct_mode = 1; | aqueduct_mode = 1; | ||
Line 108: | Line 132: | ||
end | end | ||
− | |||
− | |||
for loop_count=1, num_loops do | for loop_count=1, num_loops do | ||
Line 120: | Line 142: | ||
-- Plant | -- Plant | ||
− | |||
srClickMouseNoMove(xyPlantOnions[0], xyPlantOnions[1], 0); | srClickMouseNoMove(xyPlantOnions[0], xyPlantOnions[1], 0); | ||
-- lsSleep(delay_time); | -- lsSleep(delay_time); | ||
Line 136: | Line 157: | ||
end | end | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
lsPrintln("Moving cntr:" .. xyCenter[0] .. " " .. xyCenter[1] .. " d=" .. walk_dx .. " " .. walk_dy); | lsPrintln("Moving cntr:" .. xyCenter[0] .. " " .. xyCenter[1] .. " d=" .. walk_dx .. " " .. walk_dy); | ||
srClickMouseNoMove(xyCenter[0] + walk_dx, xyCenter[1] + walk_dy); | srClickMouseNoMove(xyCenter[0] + walk_dx, xyCenter[1] + walk_dy); | ||
Line 174: | Line 190: | ||
-- Pin | -- Pin | ||
srClickMouseNoMove(click_x+5, click_y, 1); | srClickMouseNoMove(click_x+5, click_y, 1); | ||
+ | lsSleep(screen_refresh_time); | ||
-- Move window | -- Move window | ||
local pp = pinnedPos(x, y); | local pp = pinnedPos(x, y); | ||
− | drag(click_x, click_y, | + | drag(click_x, click_y, pp[0], pp[1], 0); |
− | |||
-- lsSleep(delay_time); | -- lsSleep(delay_time); | ||
Line 197: | Line 213: | ||
end | end | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
lsSleep(1000); -- Wait for last window to bring to the foreground before clicking again | lsSleep(1000); -- Wait for last window to bring to the foreground before clicking again | ||
Line 230: | Line 241: | ||
lsSleep(water_time); | lsSleep(water_time); | ||
num_waters = num_waters + 1; | num_waters = num_waters + 1; | ||
− | if num_waters >= num_jugs | + | if num_waters >= num_jugs then |
fillWater(1); | fillWater(1); | ||
end | end | ||
Line 286: | Line 297: | ||
end | end | ||
end | end | ||
+ | |||
+ | --Click the plant window, to refresh seeds, in case you used your last seed. Prevents fails (can't find onion seed) on 2nd or higher passes. | ||
+ | srClickMouseNoMove(xyPlantOnions[0], xyPlantOnions[1]+15, 0); | ||
+ | lsSleep(2000); -- wait for harvested plants to disappear | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
-- Move back a bit | -- Move back a bit | ||
− | if grid_h | + | if grid_h == 1 then |
− | srClickMouseNoMove(xyCenter[0] - walk_px_x* | + | srClickMouseNoMove(xyCenter[0] - math.floor(walk_px_x*(grid_w - 1.5)), xyCenter[1]); |
+ | elseif grid_w == 1 then | ||
+ | srClickMouseNoMove(xyCenter[0], xyCenter[1] - math.floor(walk_px_y*(grid_h - 1.5))); | ||
else | else | ||
− | srClickMouseNoMove(xyCenter[0] | + | if grid_h % 2 == 1 then |
+ | -- odd number of rows, ends up near bottom right, so move left and up | ||
+ | srClickMouseNoMove(xyCenter[0] - math.floor(walk_px_x*(grid_w - 1.5)), xyCenter[1] - math.floor(walk_px_y*(grid_h - 1.5))); | ||
+ | else | ||
+ | -- even number of rows, ends up near bottom left, so move mostly up | ||
+ | srClickMouseNoMove(xyCenter[0] - math.floor(walk_px_x*1) , xyCenter[1] - math.floor(walk_px_y*(grid_h - 1.5))); | ||
+ | end | ||
end | end | ||
− | lsSleep( | + | lsSleep(2000); -- wait to move back |
+ | |||
end | end | ||
Latest revision as of 05:52, 17 December 2011
Credits: Note this script is KasumiGhia's Tale 5 onions2.lua update, but with some tweaks/updates..
Updates/Tweaks by Cegaiel:
- Will now refresh the plant window, after harvesting.
- This is in case you used all your seeds during planting which makes the plant window to be blank (as there are no more seeds in inventory after you planted your last seed).
- By refreshing the plant window after harvesting, it will not cause an error (Plant window not found) on 2nd and subsequent passes.
- screen_refresh_time changed from 100 to 300, to help prevent pin up problems on slower computers. This doesn't need to be so fast as the game doesn't really keep up anyways on 5x5 or small grids.
- Added instructions in the script that 'Right click Pins/Unpins a Menu' must be ON and 'Right click opens a Menu as pinned' must be OFF.
Updates/Tweaks by Taral:
- Found/corrected minor bug where the 'fill jugs' routine was off by 1.
- If you claim to have enough jugs it is not suppose to ask to refill jugs, at beginning. However this was off by one (ie if you said you have 60 jugs AND if your grid required 60 jugs, you would be required to enter 61 jugs to not force you to refill jugs at beginning).
- Also condensed my 3 lines of updated code, into 1 line of code (refresh plant window routine).
Copy/Paste/Overwrite the below into the onions.lua file (using Notepad) in the Veggie Tales /LUASCRIPTS folder.
Onions.lua:
imgOnionBed = "ThisIsAnOnionBed.png"; imgOnionSeeds = "OnionSeeds.png"; imgWaterThese = "WaterThese.png"; imgHarvestThese = "HarvestThese.png"; imgWaterJugs = "IconWaterJugs.png"; loadfile("luaScripts/flax_common.inc")(); loadfile("luaScripts/screen_reader_common.inc")(); loadfile("luaScripts/ui_utils.inc")(); walk_px_x = 112; walk_px_y = 112; walk_time = 250; screen_refresh_time = 300; water_time = 1200; harvest_time = 1100; fill_water_time = 4000; pass_growth_time = 24000; -- the onion window window_w = 191; window_h = 84; refresh_down_y_offs = 0; search_size = 15; search_size2 = 10; search_dx = {0, -search_size, search_size, -search_size, search_size, -search_size, search_size, 0, 0, -search_size2, search_size2, -search_size2, search_size2, -search_size2, search_size2, 0, 0}; search_dy = {0, -search_size, search_size, search_size, -search_size, 0, 0, -search_size, search_size, -search_size2, search_size2, search_size2, -search_size2, 0, 0, -search_size2, search_size2}; function fillWater(required) if water_needed then if (aqueduct_mode) then aque = srFindImage("Aqueduct.png", 5000); if not aque then error 'Could not find aqueduct window.'; end srClickMouseNoMove(aque[0], aque[1]); lsSleep(150); srReadScreen(); fill = srFindImage("FillWithWater.png", 5000); if ((not fill) and required) then error 'Could not find Fill With Wather'; end if fill then srClickMouseNoMove(fill[0]+5, fill[1]); end else srReadScreen(); xyFillWater = srFindImage(imgWaterJugs); if not xyFillWater then error 'Moved too far for fill jugs with water icon.'; else -- Use it srClickMouseNoMove(xyFillWater[0], xyFillWater[1]); lsSleep(screen_refresh_time); srClickMouseNoMove(xyCenter[0] + 10, xyCenter[1] + 20); lsSleep(fill_water_time); end; end end; num_waters = 0; end function doit() num_jugs = promptNumber("How many jugs?", 15); grid_w = promptNumber("How many plants across?", grid_w); grid_h = promptNumber("How many rows of plants?", grid_h); num_loops = promptNumber("How many " .. grid_w .. "x" .. grid_h .. " passes?", 5); askForWindow("Make sure the plant Onions window is pinned and you are in F8F8 cam zoomed in. Will plant SE of this location.\n \n'Plant all crops where you stand' must be ON. 'Right click pins/unpins a menu' must be ON. 'Right click opens Menu as Pinned' must be OFF."); initGlobals(); num_waters = 0; water_needed = 1; if num_jugs >= (grid_w*grid_h*4*num_loops) then water_needed = false; end; srReadScreen(); xyCenter = getCenterPos(); -- Find plant onions window local xyPlantOnions = srFindImage(imgOnionSeeds); if not xyPlantOnions then error 'Could not find plant window'; end xyPlantOnions[0] = xyPlantOnions[0] + 5; -- Find aqudeuct or fill water button, use it aque = srFindImage("Aqueduct.png", 5000); if not aque then if water_needed then aqueduct_mode = nil; xyFillWater = srFindImage(imgWaterJugs); if not xyFillWater then error 'Could not find Aqueduct window OR fill jugs with water icon, you may need to empty 1 jug.'; else -- Use it fillWater(nil); end; end; else aqueduct_mode = 1; fillWater(nil); end for loop_count=1, num_loops do -- Plant and pin for y=1, grid_h do for x=1, grid_w do lsPrintln('doing ' .. x .. ',' .. y); statusScreen("(" .. loop_count .. "/" .. num_loops .. ") Planting " .. x .. ", " .. y); -- Plant srClickMouseNoMove(xyPlantOnions[0], xyPlantOnions[1], 0); -- lsSleep(delay_time); -- Move to new location if x == grid_w then walk_dy = walk_px_y; walk_dx = 0; else walk_dy = 0; if y % 2 == 1 then walk_dx = walk_px_x; else walk_dx = -walk_px_x; end end lsPrintln("Moving cntr:" .. xyCenter[0] .. " " .. xyCenter[1] .. " d=" .. walk_dx .. " " .. walk_dy); srClickMouseNoMove(xyCenter[0] + walk_dx, xyCenter[1] + walk_dy); lsSleep(walk_time); -- Search for menu xyImagePos = nil; search_idx = 1; while not xyImagePos and search_idx <= #search_dx do click_x = xyCenter[0] - walk_dx + math.floor(search_dx[search_idx] * pixel_scale); click_y = xyCenter[1] - walk_dy + math.floor(search_dy[search_idx] * pixel_scale); lsPrintln(' clicking ' .. click_x .. ',' .. click_y); srClickMouse(click_x, click_y, 1); -- Right click! lsSleep(screen_refresh_time); checkBreak(); srReadScreen(); xyImagePos = srFindImageInRange(imgOnionBed, click_x - walk_px_x*2, click_y - 42 - walk_px_y*2, window_w+walk_px_x*4, window_h+walk_px_y*4); if xyImagePos then -- found it click_x = xyImagePos[0] - 6; click_y = xyImagePos[1] + 25; else -- No menu came up, try elsewhere? search_idx = search_idx+1; end end if not xyImagePos then error ' Failed to bring up onion bed window'; end -- Pin srClickMouseNoMove(click_x+5, click_y, 1); lsSleep(screen_refresh_time); -- Move window local pp = pinnedPos(x, y); drag(click_x, click_y, pp[0], pp[1], 0); -- lsSleep(delay_time); checkBreak(); end end srSetMousePos(200, 200); statusScreen("(" .. loop_count .. "/" .. num_loops .. ") 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(1000); -- Wait for last window to bring to the foreground before clicking again -- Water everything and then harvestable do_harvest = nil; water_pass_count=0; passes_before_harvest = 4; while 1 do water_pass_count = water_pass_count+1; start_time = lsGetTimer(); for y=1, grid_h do for x=1, grid_w do if do_harvest then statusScreen("(" .. loop_count .. "/" .. num_loops .. ") Harvesting " .. x .. ", " .. y); else statusScreen("(" .. loop_count .. "/" .. num_loops .. ") Watering " .. x .. ", " .. y .. " water pass " .. water_pass_count); end local pp = pinnedPos(x, y); local rp = refreshPosDown(x, y); while 1 do srClickMouseNoMove(rp[0], rp[1], 0); lsSleep(screen_refresh_time); srReadScreen(); if not do_harvest then local water = srFindImageInRange(imgWaterThese, pp[0], pp[1] - 25, window_w, window_h); if water then srClickMouseNoMove(water[0] + 5, water[1], 0); lsSleep(water_time); num_waters = num_waters + 1; if num_waters >= num_jugs then fillWater(1); end break; end end local harvest = srFindImageInRange(imgHarvestThese, pp[0], pp[1] - 25, window_w, window_h); if harvest then if do_harvest then -- do the harvest srClickMouseNoMove(harvest[0] + 5, harvest[1], 0); -- dismiss window srClickMouseNoMove(rp[0], rp[1], 1); lsSleep(harvest_time); end -- lsPrintln('Ready for harvest, come back later!'); break; end lsSleep(10); checkBreak(); -- try again anyway! error ' Expected Onion window to have either harvest or water!'; end end end if do_harvest then break; end -- 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(1000); -- Wait for last window to bring to the foreground before clicking again if water_pass_count == passes_before_harvest then do_harvest = 1; else -- Otherwise, wait until 24 seconds has elapsed, and water again local time_left = pass_growth_time - (lsGetTimer() - start_time); statusScreen("Waiting " .. time_left .. "ms before starting next pass..."); if (time_left > fill_water_time) and (num_waters > 0) then fillWater(1); end while pass_growth_time - (lsGetTimer() - start_time) > 0 do time_left = pass_growth_time - (lsGetTimer() - start_time); statusScreen("(" .. loop_count .. "/" .. num_loops .. ") Waiting " .. time_left .. "ms before starting next water pass..."); lsSleep(100); checkBreak(); end end end --Click the plant window, to refresh seeds, in case you used your last seed. Prevents fails (can't find onion seed) on 2nd or higher passes. srClickMouseNoMove(xyPlantOnions[0], xyPlantOnions[1]+15, 0); lsSleep(2000); -- wait for harvested plants to disappear -- Move back a bit if grid_h == 1 then srClickMouseNoMove(xyCenter[0] - math.floor(walk_px_x*(grid_w - 1.5)), xyCenter[1]); elseif grid_w == 1 then srClickMouseNoMove(xyCenter[0], xyCenter[1] - math.floor(walk_px_y*(grid_h - 1.5))); else if grid_h % 2 == 1 then -- odd number of rows, ends up near bottom right, so move left and up srClickMouseNoMove(xyCenter[0] - math.floor(walk_px_x*(grid_w - 1.5)), xyCenter[1] - math.floor(walk_px_y*(grid_h - 1.5))); else -- even number of rows, ends up near bottom left, so move mostly up srClickMouseNoMove(xyCenter[0] - math.floor(walk_px_x*1) , xyCenter[1] - math.floor(walk_px_y*(grid_h - 1.5))); end end lsSleep(2000); -- wait to move back end lsPlaySound("Complete.wav"); end