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.
User:Bardoth/updates info
From ATITD6
Jump to navigationJump to searchfunction findCoords()
lsPrintln("findCoords");
local result = nil;
local anchor = findText("0,");
if(not anchor) then
anchor = findText("1, ");
end
if(not anchor) then
anchor = findText("2, ");
end
if(not anchor) then
anchor = findText("3, ");
end
if(not anchor) then
anchor = findText("4, ");
end
if(not anchor) then
anchor = findText("5, ");
end
if(not anchor) then
anchor = findText("6, ");
end
if(not anchor) then
anchor = findText("7, ");
end
if(not anchor) then
anchor = findText("8, ");
end
if(not anchor) then
anchor = findText("9, ");
end
if anchor then
lsPrintln("anchor");
local window = getWindowBorders(anchor[0], anchor[1]);
local lines = findAllText(nil, window, NOPIN);
for i=1,#lines do
lsPrintln("LINE " .. i .. " : " .. table.concat(lines[i], ","));
end
local str = lines[#lines][2];
lsPrintln("lines: " .. str);
local a, b, x, y = string.find(str, ": ([0-9-]+)\, ([0-9-]+)");
result = makePoint(tonumber(x), tonumber(y));
if not result[0] or not result[1] then
result = nil;
lsPrintln("Failed to find coords");
end
end
return result;
end
function walkTo(dest)
local coords = findCoords();
while coords[0] ~= dest[0] or coords[1] ~= dest[1] do
while coords[0] < dest[0] do
stepTo(makePoint(1, 0));
coords = findCoords();
checkBreak();
end
while coords[0] > dest[0] do
stepTo(makePoint(-1, 0));
coords = findCoords();
checkBreak();
end
while coords[1] < dest[1] do
stepTo(makePoint(0, -1));
coords = findCoords();
checkBreak();
end
while coords[1] > dest[1] do
stepTo(makePoint(0, 1));
coords = findCoords();
checkBreak();
end
end
return coords;
end
local gpsInit = false;
local gpsCenter;
local gpsStep;
function initStep()
if not gpsInit then
srReadScreen();
gpsInit = true;
-- Macro written with 1720 pixel wide window
xyWindowSize = srGetWindowSize();
local pixel_scale = xyWindowSize[0] / 1720;
lsPrintln("pixel_scale " .. pixel_scale);
gpsStep = makePoint(340*pixel_scale, 380*pixel_scale);
local walk_x_drift = 14;
local walk_y_drift = 18;
if (lsScreenX < 1280) then
-- Have to click way off center in order to not move at high resolutions
walk_x_drift = math.floor(walk_x_drift * pixel_scale);
walk_y_drift = math.floor(walk_y_drift * pixel_scale);
else
-- Very little drift at these resolutions, clicking dead center
-- barely moves
walk_x_drift = 1;
walk_y_drift = 1;
end
gpsCenter = makePoint(xyWindowSize[0] / 2 - walk_x_drift,
xyWindowSize[1] / 2 + walk_y_drift);
end
end
function stepTo(dir)
initStep();
safeClick(gpsCenter[0] + dir[0] * gpsStep[0],
gpsCenter[1] + dir[1] * gpsStep[1]);
sleepWithStatus(500, "Walking...");
end
local ffc_coordsPos = nil;
local ffc_dash = -1;
local ffc_comma = -2;
function fastFindCoords()
local pos;
if(not ffc_coordsPos) then
pos = srFindImage("Year.png",5000);
if(not pos) then
pos = findText("Year");
if(not pos) then
pos = findText("2, ");
if(not pos) then
pos = findText("3, ");
if(not pos) then
lsPrintln("fastFindCoords() : Can't find the clock");
return nil;
end
end
end
end
local window = getWindowBorders(pos[0], pos[1]);
window.top = window.top + 13;
window.y = window.y + 13;
window.height = window.height - 13;
window.bottom = window.y + window.height;
pos = srFindImageInRange("colon.png", window.x, window.y, window.width, window.height,5000);
if(not pos) then
lsPrintln("fastFindCoords() : Can't find the colon on the second line of the clock");
return nil;
end
window.width = window.width + window.x - pos[0] - 5;
window.left = pos[0] + 5;
window.x = pos[0] + 5;
window.right = window.x + window.width;
window.top = pos[1];
window.y = window.top;
window.height = window.bottom - window.top;
ffc_coordsPos = window;
end
if(not ffc_coordsPos) then
lsPrintln("fastFindCoords() : Can't find the coordinates");
return nil;
end
local digits = ffc_readDigits(ffc_coordsPos);
if(digits) then
return ffc_parseDigits(digits);
end
return nil;
end
function ffc_parseDigits(digits)
local x;
local pos;
x, pos = ffc_parseOneCoord(digits);
local y;
y, pos = ffc_parseOneCoord(digits,pos);
if((not x) or (not y)) then
if(not x) then
lsPrintln("fastFindCoords() : x is nil");
end
if(not y) then
lsPrintln("fastFindCoords() : y is nil");
end
return nil;
end
return makePoint(x,y);
end
function ffc_parseOneCoord(digits,pos)
if(pos == nil) then
pos = 1;
end
if(pos > #digits) then
lsPrintln("ffc_parseOneCoord(): pos > #digits(" .. #digits .. ")");
return nil, nil;
end
local negative = false;
local val = 0;
local i;
for i=pos,#digits do
if(digits[i][2] == ffc_comma) then
if(negative) then
val = val * -1;
end
return val, i+1;
end
if(digits[i][2] == ffc_dash) then
negative = true;
else
val = val * 10 + digits[i][2];
end
end
if(negative) then
val = val * -1;
end
return val, #digits+1;
end
function ffc_readDigits(box)
local digits = {};
local i;
for i=0,9 do
local x = ffc_coordsPos.x;
local pos = true;
while((x < ffc_coordsPos.x + ffc_coordsPos.width - 6) and pos) do
pos = srFindImageInRange(i .. ".png",x,ffc_coordsPos.y,ffc_coordsPos.width,ffc_coordsPos.height,5000);
if(pos) then
digits[#digits+1] = {pos[0],i};
x = pos[0] + 7;
end
end
end
if(#digits < 2) then
lsPrintln("ffc_readDigits() : Unable to read any digits");
return nil;
end
local x = ffc_coordsPos.x;
local pos = true;
while(pos) do
pos = srFindImageInRange("dash.png",x,ffc_coordsPos.y,ffc_coordsPos.width,ffc_coordsPos.height,5000);
if(pos) then
digits[#digits+1] = {pos[0],ffc_dash};
x = x + 5;
end
end
pos = srFindImageInRange("comma.png",ffc_coordsPos.x,ffc_coordsPos.y,ffc_coordsPos.width,ffc_coordsPos.height,5000);
if(pos) then
digits[#digits+1] = {pos[0],ffc_comma};
end
table.sort(digits, ffc_compareDigits);
return digits;
end
function ffc_compareDigits(left,right)
if(left[1] < right[1]) then
return true;
end
return false;
end