The Wiki for Tale 7 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:OneBanana/Test Page 1

From ATITD7
Jump to navigationJump to search
-- BaBam V1.0 Written by OneBanana
-- 
-- Grab a sledgehammer and load yourself up with medium stones
-- Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L) and pin open the Drop menu
-- Default to MAX for how many should be turned OFF.
-- Right click opens a menu as pinned should be turned OFF
-- The script will set your starting position, do not move from that point untill the it has stopped.
-- Before you begin collecting the stone fragments drop your sledgehammer otherwise you will not be able to 'hotclick' to collect them.
-- This also marks the spot to return to after you have collected the stone fragments if you wish to continue smashing.
-- Personally i find it best to leave the gravel on the ground and collect it all at once after all of the smashing is done.
-- It also saves you from becoming 'pinned' if you are overloaded with it and stone fragemnts while collecting.
-- 


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

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

per_click_delay = 200;
waitDelay = 100;

up = nil;
right_click = nil;

button_names = {
"Smash Medium Stone",
"Smash Cracked Stone",
"Smash Broken Stone",
"Smash Split Stone",
"Drop Medium Stone",
"Drop Cracked Stone",
"Drop Broken Stone",
"Drop Split Stone",
};



function promptDelays()
	y = y + 40;
        lsPrint(5, y, 0, 0.8, 0.8, 0xffffffff, "Passes:");
        is_done, num_loops = lsEditBox("num_loops", 170, y, 0, 50, 30, 1.0, 1.0, 0x000000ff, 10);
        num_loops = tonumber(num_loops);
        if not num_loops then
        is_done = false;
        lsPrint(10, y+22, 10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER");
        num_loops = 10;	
	end
end

function waitForChange()
	local c=0;
	while srReadPixel(setWaitSpot_x, setWaitSpot_y) == setWaitSpot_px do
		lsSleep(1);
		c = c+1;
		if (lsShiftHeld() and lsControlHeld()) then
			error 'broke out of loop from Shift+Ctrl';
		end
	end
end

function clickAll(image_name, up)
	-- Find buttons and click them!
	srReadScreen();
	local buttons = findAllImages(image_name);
	
	if #buttons == 0 then
		return nil;
	else
		if up then
			for i=#buttons, 1, -1  do
				srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3);
				lsSleep(per_click_delay);
			end
		else
			for i=1, #buttons  do
				srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3);
				lsSleep(per_click_delay);
			end
		end
		lsSleep(50);
		return 1;
	end
end

function clickAllRight(image_name)
	-- Find windows and click them!
	srReadScreen();
	xyWindowSize = srGetWindowSize();
	local buttons = findAllImages(image_name);
	if #buttons == 0 then
		statusScreen("Could not find any pinned up windows...");
		lsSleep(1500);
	else
		statusScreen("Clicking " .. #buttons .. "windows(s)...");
		if up then
			for i=#buttons, 1, -1  do
				srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3, true);
				lsSleep(per_click_delay);
			end
		else
			for i=1, #buttons  do
				srClickMouseNoMove(buttons[i][0]+5, buttons[i][1]+3, true);
				lsSleep(per_click_delay);
			end
		end
		statusScreen("Done clicking (" .. #buttons .. " windows).");
		lsSleep(100);
	end
end


function refocus()
	statusScreen("Refocusing...");
	for i=2, #window_locs do
		setWaitSpot(window_locs[i][0], window_locs[i][1]);
		srClickMouseNoMove(window_locs[i][0] + 321, window_locs[i][1] + 74);
		waitForChange();
	end
end


function Unpin()
	askForWindow("Put ATITD window in focus first and Press Shift key to unpin/close all pinned windows.");
	srReadScreen();
	window_locs = findAllImages("DropUnpin.png");
	clickAllRight("DropUnpin.png", 1);
	lsSleep(200);
end


function SmashMediumStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Medium Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropMediumStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);


		srClickMouseNoMove(xyWindowSize[0]/2 + -10, xyWindowSize[1]/2 + -65);
		lsSleep(1000);

		end

		srReadScreen();
		buttons = findOneImage("DropSmashThis.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(500);
		count = count + 1;
		end
	end
end



function SmashCrackedStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Cracked Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropCrackedStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);


		srClickMouseNoMove(xyWindowSize[0]/2 + 30, xyWindowSize[1]/2 + -145);
		lsSleep(1000);

		
		end
		srReadScreen();
		buttons = findOneImage("DropSmashThis.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(500);
		count = count + 1;
		end
	end
end


function SmashBrokenStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Broken Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropBrokenStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);

		srClickMouse(xyWindowSize[0]/2 + -10, xyWindowSize[1]/2 + -65);

		end
		srReadScreen();
		buttons = findOneImage("DropSmashThis.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(500);
		count = count + 1;
		end
	end
end


function SmashSplitStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Split Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropSplitStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);

		srClickMouse(xyWindowSize[0]/2 + -10, xyWindowSize[1]/2 + -65);

		end
		srReadScreen();
		buttons = findOneImage("DropSmashThis.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(500);
		count = count + 1;
		end
	end
end


function DropMediumStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Medium Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropMediumStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		count = count + 1;
		end
	end
end


function DropCrackedStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Cracked Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropCrackedStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		count = count + 1;
		end
	end
end


function DropBrokenStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Broken Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropBrokenStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		count = count + 1;
		end
	end
end


function DropSplitStone()
	num_loops = promptNumber("How many passes ?", 1);
	askForWindow("Use F8F8 camera view, zoomed in 100% with the screen locked (Alt+L). Pin open the Drop menu & ensure your have Split Stones and a Sledgehammer in your inventory. Default to MAX for how many should be turned OFF. Dont move from your starting position untill the script has stopped, drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	for i=1, num_loops do
		srReadScreen();
		srClickMouse(xyWindowSize[0]/2 + 10, xyWindowSize[1]/2 + 65);
		buttons = findOneImage("DropSplitStone.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		count = count + 1;
		end
	end
end


function DropSledgehammer()
	local num_rounds;
	askForWindow("Drop your sledgehammer to mark the spot to return to after you have collected the stone fragments. To save time, leave the gravel on the ground and collect it all at once after all of the smashing is done, this also saves you from becoming 'pinned' if you are overloaded with both it and stone fragemnts while collecting. Click in ATITD and press shift to begin.");
	local count = 0;
	while true do
		statusScreen("Hammer Dropped");
		srReadScreen();
		buttons = findOneImage("DropSledgehammer.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
		end
		srReadScreen();
		buttons = findOneImage("DropOk.png");
		if #buttons > 0 then
			srClickMouseNoMove(buttons[1][0]+2, buttons[1][1] + 2, right_click);
			lsSleep(per_click_delay);
			return;
		end
	end
end 


function doit()
	while 1 do
		-- Ask for which button
		local image_name = nil;
		local is_done = nil;	
		while not is_done do
			local y = 40;
			local x = nil;
			local bsize = nil;
			for i=1, #button_names do
				if button_names[i] == "Smash Medium Stone" then
					x = 30;
					y = 10;
					-- bsize = 130;
				elseif button_names[i] == "Smash Cracked Stone" then
					x = 30;
					y = 40;
					-- bsize = 130;
				elseif button_names[i] == "Smash Broken Stone" then
					x = 30;
					y = 70;
				elseif button_names[i] == "Smash Split Stone" then
					x = 30;
					y = 100;
				elseif button_names[i] == "Drop Medium Stone" then
					x = 30;
					y = 130;
					bsize = 130;
				elseif button_names[i] == "Drop Cracked Stone" then
					x = 30;
					y = 160;
					bsize = 130;
				elseif button_names[i] == "Drop Broken Stone" then
					x = 30;
					y = 190;
				elseif button_names[i] == "Drop Split Stone" then
					x = 30;
					y = 220;
					end


				if lsButtonText(10, y, 0, 280, 0xFDD017ff, button_names[i]) then
					image_name = button_names[i];
					is_done = 1;
				end

			end

			if lsButtonText(lsScreenX - 290, lsScreenY - 90, z, 280, 0xFFA500ff, "Drop Sledgehammer") then
					DropSledgehammer();
					is_done = 1;
			end

			
			if lsButtonText(lsScreenX - 290, lsScreenY - 60, z, 280, 0xFFA500ff, "Unpin Windows") then
					Unpin();
					is_done = 1;
			end


			if lsButtonText(lsScreenX - 290, lsScreenY - 30, z, 280, 0xFF0000ff, "End script") then
				error "Clicked End Script button";
			end

			lsDoFrame();
			lsSleep(10);
		end	
		
		if image_name == "Smash Medium Stone" then
			SmashMediumStone();
		elseif image_name == "Smash Cracked Stone" then
			SmashCrackedStone();
		elseif image_name == "Smash Broken Stone" then
			SmashBrokenStone();
		elseif image_name == "Smash Split Stone" then
			SmashSplitStone();
		elseif image_name == "Drop Medium Stone" then
			DropMediumStone();
		elseif image_name == "Drop Cracked Stone" then
			DropCrackedStone();
		elseif image_name == "Drop Broken Stone" then
			DropBrokenStone();
		elseif image_name == "Drop Split Stone" then
			DropSplitStone();
		elseif image_name == "Drop Sledgehammer" then
			DropSledgehammer();
		elseif image_name == "Un-Pin Windows" then
			Unpin();


		end
	end
end