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.

123456

From ATITD6
Revision as of 01:24, 26 June 2015 by Lazybum (talk | contribs) (Created page with "dofile("screen_reader_common.inc"); dofile("ui_utils.inc"); local plant_papy = 0; local distance_scale = 0.11; -- only scans pixels within a distance of this percentage from the...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

dofile("screen_reader_common.inc"); dofile("ui_utils.inc");

local plant_papy = 0; local distance_scale = 0.11; -- only scans pixels within a distance of this percentage from the center of the screen

function getCenterPos() local ret = {}; ret[0] = xyWindowSize[0] / 2; ret[1] = xyWindowSize[1] / 2; return ret; end

function isWithinRange(x, y) local radius = xyWindowSize[0] * 0.15; local dx, dy, d; dx = x - getCenterPos()[0]; dy = y - getCenterPos()[1]; if (dx*dx + dy*dy <= radius*radius) then return 1; end

return nil; end


function clickAll(image_name, up, right_click) -- Find buttons and click them! srReadScreen(); xyWindowSize = srGetWindowSize(); local buttons = findAllImages(image_name);

if #buttons == 0 then -- statusScreen("Could not find specified buttons..."); -- lsSleep(1500); else --statusScreen("Clicking " .. #buttons .. "button(s)..."); if up then for i=#buttons, 1, -1 do if (buttons[i][0] > 200) then srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3, right_click); lsSleep(per_click_delay); end end else for i=1, #buttons do srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3, right_click); lsSleep(per_click_delay); end end --statusScreen("Done clicking (" .. #buttons .. " clicks)."); --lsSleep(100); end end

function clickMouseSplatter(x, y, right) srClickMouse(x + math.random(-2, 2), y + math.random(-2, 2), right); end

function doit() askForWindow("Use F6 camera. Optionally pin a Papyrus planting window on the *left* side of your screen (will plant a seed every 2 seconds or so). Run around with arrows keys after macro begins, stop moving if it fails to pick something. Interface Options | Right-Click opens a Menu as Pinned must be ON. Video | Time-of-Day Lighting must be at LOWEST (off).");

srReadScreen(); local papy_pos = srFindImage("Papyrus.png"); local papyTimer = lsGetTimer();

while true do local frame_start = lsGetTimer(); statusScreen("Watching for papyrus"); possible_papy = lsAnalyzePapyrus(7, 40, 1, xyWindowSize[0] * distance_scale); local clicked = nil; if possible_papy then for i = 1, #possible_papy do -- bias because it seems to drag to the upper left, take this off -- if I fix the downsampling possible_papy[i][0] = possible_papy[i][0] + 5; --possible_papy[i][1] = possible_papy[i][1] + 5; if isWithinRange(possible_papy[i][0], possible_papy[i][1]) then

-- srClickMouse(possible_papy[i][0], possible_papy[i][1], 1); -- srSetMousePos(possible_papy[i][0], possible_papy[i][1]);

-- code to try to make sure the pixel is the right color -- off by a few pixels in translation, maybe? needs to be pixel accurate! local good; local r, g, b, a; if nil then pxval = srReadPixel(possible_papy[i][0], possible_papy[i][1]); a = pxval % 256; pxval = (pxval - a) / 256; b = pxval % 256; pxval = (pxval - b) / 256; g = pxval % 256; pxval = (pxval - g) / 256; r = pxval % 256; if (r > 130 and g > 130 and b < 20 and math.abs(r - g) < 20) then good = 1; end else r = 0; g = 0; b = 0; good = 1; end

if good then lsPrint(10, 80 + i*20, 0, 0.7, 0.7, 0xFFFFFFff, possible_papy[i][0] .. ", " .. possible_papy[i][1] .. " : " .. r .. "," .. g .. "," .. b); clickMouseSplatter(possible_papy[i][0], possible_papy[i][1], 1); clicked = 1; else lsPrint(10, 80 + i*20, 0, 0.7, 0.7, 0xFF7F7Fff, possible_papy[i][0] .. ", " .. possible_papy[i][1] .. " : " .. r .. "," .. g .. "," .. b); end else lsPrint(10, 80 + i*20, 0, 0.7, 0.7, 0x7F7F7Fff, possible_papy[i][0] .. ", " .. possible_papy[i][1] ); end end end

if papy_pos then if plant_papy then if lsButtonText(5, lsScreenY - 60, z, 150, 0xFFFFFFff, "Plant: ON") then plant_papy = nil; end else if lsButtonText(5, lsScreenY - 60, z, 150, 0xFFFFFFff, "Plant: OFF") then plant_papy = 1; papyTimer = lsGetTimer(); end end end

if papy_pos and plant_papy then if lsGetTimer() - papyTimer > 2100 then srClickMouseNoMove(papy_pos[0] + 4, papy_pos[1] + 4); papyTimer = lsGetTimer(); end end

lsSleep(100); if clicked then clickAll("UnPin.png", 1, 1); --clickAll("This.png", 1, 1); lsSleep(100); -- We clicked something, ignore this frame papyTimer = papyTimer + lsGetTimer() - frame_start; end end

end