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:OneBanana/Scripts"

From ATITD6
Jump to navigationJump to search
(Created page with "loadfile("luaScripts/screen_reader_common.inc")(); loadfile("luaScripts/ui_utils.inc")(); window_w = 285; window_h = 420; temp_width = 75; tol = 6500; -- It will make the first...")
 
(Blanked the page)
Line 1: Line 1:
loadfile("luaScripts/screen_reader_common.inc")();
 
loadfile("luaScripts/ui_utils.inc")();
 
  
window_w = 285;
 
window_h = 420;
 
temp_width = 75;
 
tol = 6500;
 
 
-- It will make the first in the list if available, otherwise the next, etc
 
-- This will let you make, e.g. Rods on your Soda Glass and Sheet Glass on your normal, by putting
 
--  sheet glass before rods (on soda it'll fail to find sheet)
 
item_priority = {"GlassMakeTorch.png", "GlassMakeJar.png", "GlassMakeRod.png", "GlassMakePipe.png", "GlassMakeSheet.png", "GlassMakeBlade.png", "GlassMakeWine.png", "GlassMakeFineRod.png", "GlassMakeFinePipe.png"};
 
 
-- max temperature in which we will contine heating it, wait until it gets below this before adding
 
max_add_temp = 2300;
 
-- minimum temperature in which we will start a new project, otherwise will reheat
 
min_new_temp = 1750;
 
 
tick_time = 3000;
 
 
function ocrNumber(x, y)
 
-- find first number
 
local digit=nil;
 
local offset=0;
 
while (not digit) and (offset < 10) do
 
for i=0, 9 do
 
local pos = srFindImageInRange(i .. ".png", x, y, 6, 9, tol);
 
if pos then
 
digit=i;
 
break;
 
end
 
end
 
if not digit then
 
x = x+1;
 
offset = offset + 1;
 
end
 
end
 
if (offset > 0) then
 
lsPrintln("Perf warning: OCR non-0 offset of " .. offset);
 
end
 
local ret = digit;
 
while 1 do
 
digit = nil;
 
x = x + 7;
 
for i=0, 9 do
 
local pos = srFindImageInRange(i .. ".png", x, y, 6, 9, tol);
 
if pos then
 
digit=i;
 
break;
 
end
 
end
 
if digit then
 
ret = ret * 10 + digit;
 
else
 
break;
 
end
 
end
 
return ret;
 
end
 
 
function addCC(window_pos, state)
 
if state.just_added then
 
return;
 
end
 
-- lsPrintln(window_pos[0] .. " " .. window_pos[1] .. " " .. window_w .. " " .. window_h);
 
local pos = srFindImageInRange("GlassAdd2Charcoal.png", window_pos[0], window_pos[1], window_w, window_h, tol);
 
 
state.just_added = 1;
 
srClickMouseNoMove(pos[0]+5, pos[1]+2);
 
state.status = state.status .. " Added 2 CC";
 
end
 
 
function glassTick(window_pos, state)
 
state.status = "";
 
local pos;
 
local out_of_glass = nil;
 
if state.want_spike then
 
state.timer = state.timer - (tick_time / 1000);
 
end
 
 
pos = srFindImageInRange("GlassTimeToStop.png", window_pos[0], window_pos[1], window_w, window_h, tol);
 
if pos then
 
out_of_glass = 1;
 
end
 
pos = srFindImageInRange("GlassTemperature.png", window_pos[0], window_pos[1], window_w, window_h, tol);
 
if not pos then
 
state.status = state.status .. " No temperature found, ignoring";
 
return state.status;
 
end
 
local temp = ocrNumber(pos[0] + temp_width, pos[1]);
 
 
 
state.status = (state.status .. "  Temp:" .. temp);
 
 
nothing_cooking = srFindImageInRange("GlassNothingCooking.png", window_pos[0]-5, window_pos[1], window_w, window_h, tol);
 
 
if (stop_cooking or out_of_glass) and nothing_cooking then
 
return nil;
 
end
 
 
-- Monitor temperature
 
local last_frame_just_added = state.just_added;
 
if state.last_temp then
 
local fell = temp < state.last_temp;
 
local rose = temp > state.last_temp;
 
if fell then
 
state.status = state.status .. " (fell)";
 
state.spiking = nil;
 
end
 
if rose then
 
state.status = state.status .. " (rose)";
 
end
 
--  if just fell, and under max threshold, add 1 CC
 
if fell and (temp < max_add_temp) then
 
state.status = state.status .. " Fell,Adding";
 
addCC(window_pos, state);
 
end
 
 
--  if just fell, and is under 1600+threshold, add one
 
--    item, add another and wait for spike or fall
 
if fell and (temp < min_new_temp) then
 
-- addCC(window_pos, state); -- done above
 
state.timer = 72;
 
state.want_spike = 1;
 
state.status = state.status .. " WaitingToSpike";
 
end
 
 
--if it's time to add for spike, add
 
if state.want_spike and state.timer <= 0 then
 
state.want_spike = nil;
 
state.spiking = 1;
 
state.timer = 0;
 
addCC(window_pos, state);
 
end
 
end
 
 
if state.want_spike then
 
state.status = state.status .. " (wait to spike: " .. state.timer .. ")";
 
end
 
 
if state.spiking then
 
state.status = state.status .. " (spiking)";
 
end
 
 
state.last_temp = temp;
 
if last_frame_just_added then
 
state.just_added = nil;
 
end
 
 
-- Monitor what we're making
 
 
if nothing_cooking then
 
state.status = state.status .. " NothingCooking";
 
if not stop_cooking then
 
if temp > 1600 and temp < 2400 then
 
local made_one=nil;
 
for item_index=1, #item_priority do
 
pos = srFindImageInRange(item_priority[item_index], window_pos[0], window_pos[1], window_w, window_h, tol);
 
if pos then
 
state.status = state.status .. " Making:" .. item_priority[item_index];
 
srClickMouseNoMove(pos[0]+5, pos[1]+2);
 
made_one = 1;
 
break;
 
end
 
end
 
if not made_one then
 
state.status = state.status .. " NothingToMake";
 
-- refresh window
 
srClickMouseNoMove(window_pos[0], window_pos[1]);
 
end
 
else
 
state.status = state.status .. " (temp out of range)";
 
end
 
end
 
else
 
-- Something cooking, leave it be
 
state.status = state.status .. " InUse";
 
end
 
 
state.last_nothing_cooking = nothing_cooking;
 
lsPrintln(state.status);
 
return state.status; -- keep going and return status
 
end
 
 
function allowReorder(x, y)
 
local z = 0
 
local scale=0.7;
 
local dy = 26;
 
lsPrint(x, y, z, scale, scale, 0xFFFFFFff, "Click an item to raise priority");
 
y=y+20;
 
x=x+5;
 
local item_index;
 
for item_index=1, #item_priority do
 
if lsButtonText(x, y, z, 100, 0xFFFFFFff, string.sub(string.sub(item_priority[item_index], 10), 1, -5)) then
 
if item_index > 1 then
 
local temp = item_priority[item_index-1];
 
item_priority[item_index-1] = item_priority[item_index];
 
item_priority[item_index] = temp;
 
end
 
end
 
-- debug code for checking image matching
 
if false then
 
local list = findAllImages(item_priority[item_index], tol);
 
lsPrint(x+110, y, z, scale, scale, 0xFFFFFFff, #list);
 
end
 
y=y+dy;
 
end
 
end
 
 
function testReorder()
 
while 1 do
 
lsSleep(100);
 
allowReorder(10, 10);
 
checkBreak();
 
lsDoFrame();
 
end
 
end
 
 
function doit()
 
 
-- testReorder();
 
 
askForWindow("Pin your benches, put the cursor over the ATITD window, press Shift.  Then add charcoal until the benches are hot enough, melt your materials, an as it cools back down into useable temperature ranges, the macro will take over.  Please pause the macro when you need to use your mouse.");
 
 
srReadScreen();
 
 
local glass_windows = findAllImages("ThisIs.png");
 
 
if #glass_windows == 0 then
 
error 'Could not find any \'Glazier\'s Bench\' windows.';
 
end
 
 
local glass_state = {};
 
for window_index=1, #glass_windows do
 
glass_state[window_index] = {};
 
end
 
 
local last_ret = {};
 
 
while 1 do
 
 
-- Tick
 
 
srReadScreen();
 
 
local glass_windows2 = findAllImages("ThisIs.png");
 
local should_continue=nil;
 
if #glass_windows == #glass_windows2 then
 
for window_index=1, #glass_windows do
 
local r = glassTick(glass_windows[window_index], glass_state[window_index]);
 
last_ret[window_index] = r;
 
if r then
 
should_continue = 1;
 
end
 
end
 
end
 
 
-- Display status and sleep
 
 
local start_time = lsGetTimer();
 
while tick_time - (lsGetTimer() - start_time) > 0 do
 
time_left = tick_time - (lsGetTimer() - start_time);
 
 
lsPrint(10, 6, 0, 0.7, 0.7, 0xB0B0B0ff, "Hold Ctrl+Shift to end this script.");
 
lsPrint(10, 18, 0, 0.7, 0.7, 0xB0B0B0ff, "Hold Alt+Shift to pause this script.");
 
lsPrint(10, 30, 0, 0.7, 0.7, 0xFFFFFFff, "Waiting " .. time_left .. "ms...");
 
 
if not (#glass_windows == #glass_windows2) then
 
lsPrintWrapped(10, 45, 5, lsScreenX-15, 1, 1, 0xFF7070ff, "Expected " .. #glass_windows .. " windows, found " .. #glass_windows2 .. ", not ticking.");
 
elseif not should_continue then
 
lsPrint(10, 45, 5, 1.5, 1.5, 0x70FF70ff, "All benches done.");
 
end
 
 
for window_index=1, #glass_windows do
 
if last_ret[window_index] then
 
should_continue = 1;
 
lsPrint(10, 80 + 15*window_index, 0, 0.7, 0.7, 0xFFFFFFff, "#" .. window_index .. " - " .. last_ret[window_index]);
 
else
 
lsPrint(10, 80 + 15*window_index, 0, 0.7, 0.7, 0xFFFFFFff, "#" .. window_index .. " - COOL DOWN");
 
end
 
end
 
if lsButtonText(lsScreenX - 110, lsScreenY - 60, z, 100, 0xFFFFFFff, "Finish up") then
 
stop_cooking = 1;
 
end
 
if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, "End script") then
 
error "Clicked End Script button";
 
end
 
 
allowReorder(10, 100+15*#glass_windows);
 
 
checkBreak();
 
lsDoFrame();
 
lsSleep(25);
 
end
 
 
checkBreak();
 
-- error 'done';
 
end
 
end
 

Revision as of 07:28, 5 January 2015