| 
				     | 
				
| Line 1: | 
Line 1: | 
| − | 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
  |   |