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:Kavad/Macros/Mining
From ATITD7
< User:Kavad | Macros
Jump to navigationJump to search-- mining_ore.lua v1.5 -- by Cegaiel modified by Kavad -- Credits to Tallow for his Simon macro, which was used as a template to build on. -- -- Brute force method, you manually click/set every stones' location and it will work every possible 3 node/stone combinations. -- dofile("common.inc"); askText = singleLine([[ Ore Mining v1.4 (by Cegaiel) -- Brute Force method. Will try every possible 3 node/stone combination. Make sure chat is MINIMIZED! Press Shift over ATITD window. ]]); miningTime = 0; autoWorkMine = true; timesworked = 0; dropdown_values = {"Shift Key", "Ctrl Key", "Alt Key", "Mouse Wheel Click"}; dropdown_cur_value = 1; dropdown_ore_values = {"Aluminum (9)", "Antimony (14)", "Copper (8)", "Gold (12)", "Iron (7)", "Lead (9)", "Lithium (10)", "Magnesium (9)", "Platinum (12)", "Silver (10)", "Strontium (10)", "Tin (9)", "Tungsten (12)", "Zinc (10)"}; dropdown_ore_cur_value = 1; function doit() askForWindow(askText); promptDelays(); getMineLoc(); getPoints(); clickSequence(); end function getMineLoc() mineList = {}; local was_shifted = lsShiftHeld(); if (dropdown_cur_value == 1) then was_shifted = lsShiftHeld(); key = "tap Shift"; elseif (dropdown_cur_value == 2) then was_shifted = lsControlHeld(); key = "tap Ctrl"; elseif (dropdown_cur_value == 3) then was_shifted = lsAltHeld(); key = "tap Alt"; elseif (dropdown_cur_value == 4) then was_shifted = lsMouseIsDown(2); --Button 3, which is middle mouse or mouse wheel key = "click MWheel "; end local is_done = false; mx = 0; my = 0; z = 0; while not is_done do mx, my = srMousePos(); local is_shifted = lsShiftHeld(); if (dropdown_cur_value == 1) then is_shifted = lsShiftHeld(); elseif (dropdown_cur_value == 2) then is_shifted = lsControlHeld(); elseif (dropdown_cur_value == 3) then is_shifted = lsAltHeld(); elseif (dropdown_cur_value == 4) then is_shifted = lsMouseIsDown(2); --Button 3, which is middle mouse or mouse wheel end if is_shifted and not was_shifted then mineList[#mineList + 1] = {mx, my}; end was_shifted = is_shifted; checkBreak(); lsPrint(10, 10, z, 1.0, 1.0, 0xFFFFFFff, "Set Mine Location"); local y = 60; lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Lock ATITD screen (Alt+L) ."); y = y + 20; lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Suggest F5 view, zoomed about 75% out."); y = y + 60; lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Hover and " .. key .. " over the MINE."); y = y + 70; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "TIP (Optional):"); y = y + 20; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "For Maximum Performance (least lag) Uncheck:"); y = y + 16; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "Options, Interface, Other: 'Use Flyaway Messages'"); local start = math.max(1, #mineList - 20); local index = 0; for i=start,#mineList do mineX = mineList[i][1]; mineY = mineList[i][2]; end if #mineList >= 1 then is_done = 1; end if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, "End script") then error "Clicked End Script button"; end lsDoFrame(); lsSleep(50); end end function fetchTotalCombos() TotalCombos = 0; for i=1,#clickList do for j=i+1,#clickList do for k=j+1,#clickList do TotalCombos = TotalCombos + 1; end end end end function getPoints() clickList = {}; if (dropdown_ore_cur_value == 1) then ore = "Aluminum"; stonecount = 9; elseif (dropdown_ore_cur_value == 2) then ore = "Antimony"; stonecount = 14; elseif (dropdown_ore_cur_value == 3) then ore = "Copper"; stonecount = 8; elseif (dropdown_ore_cur_value == 4) then ore = "Gold"; stonecount = 12; elseif (dropdown_ore_cur_value == 5) then ore = "Iron"; stonecount = 7; elseif (dropdown_ore_cur_value == 6) then ore = "Lead"; stonecount = 9; elseif (dropdown_ore_cur_value == 7) then ore = "Lithium"; stonecount = 10; elseif (dropdown_ore_cur_value == 8) then ore = "Magnesium"; stonecount = 9; elseif (dropdown_ore_cur_value == 9) then ore = "Platinum"; stonecount = 12; elseif (dropdown_ore_cur_value == 10) then ore = "Silver"; stonecount = 10; elseif (dropdown_ore_cur_value == 11) then ore = "Strontium"; stonecount = 10; elseif (dropdown_ore_cur_value == 12) then ore = "Tin"; stonecount = 9; elseif (dropdown_ore_cur_value == 13) then ore = "Tungsten"; stonecount = 12; elseif (dropdown_ore_cur_value == 14) then ore = "Zinc"; stonecount = 10; end local nodeleft = stonecount; local was_shifted = lsShiftHeld(); if (dropdown_cur_value == 1) then was_shifted = lsShiftHeld(); elseif (dropdown_cur_value == 2) then was_shifted = lsControlHeld(); elseif (dropdown_cur_value == 3) then was_shifted = lsAltHeld(); elseif (dropdown_cur_value == 4) then was_shifted = lsMouseIsDown(2); --Button 3, which is middle mouse or mouse wheel end local is_done = false; local nx = 0; local ny = 0; local z = 0; while not is_done do nx, ny = srMousePos(); local is_shifted = lsShiftHeld(); if (dropdown_cur_value == 1) then is_shifted = lsShiftHeld(); elseif (dropdown_cur_value == 2) then is_shifted = lsControlHeld(); elseif (dropdown_cur_value == 3) then is_shifted = lsAltHeld(); elseif (dropdown_cur_value == 4) then is_shifted = lsMouseIsDown(2); end if is_shifted and not was_shifted then clickList[#clickList + 1] = {nx, ny}; nodeleft = nodeleft - 1; end was_shifted = is_shifted; checkBreak(); lsPrint(10, 10, z, 1.0, 1.0, 0xFFFFFFff, "Set Node Locations (" .. #clickList .. "/" .. stonecount .. ")"); local y = 60; lsSetCamera(0,0,lsScreenX*1.4,lsScreenY*1.4); autoWorkMine = lsCheckBox(15, y, z, 0xffffffff, " Auto 'Work Mine'", autoWorkMine); lsSetCamera(0,0,lsScreenX*1.0,lsScreenY*1.0); y = y + 10 lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Hover and " .. key .. " over each node."); y = y + 15; lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Make sure chat is MINIMIZED!"); y = y + 30; lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Mine Type: " .. ore); y = y + 20; miningTimeGUI = "N/A"; if miningTime ~= 0 then --miningTimeGUI = math.floor(miningTime/100)/10 .. " secs"; miningTimeGUI = (miningTime/100)/10 .. " secs"; end lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Mine Worked: " .. timesworked .. " times (Last: " .. miningTimeGUI .. ")"); y = y + 30; lsPrint(5, y, z, 0.7, 0.7, 0xf0f0f0ff, "Select " .. nodeleft .. " more nodes to automatically start!"); y = y + 30; local start = math.max(1, #clickList - 20); local index = 0; for i=start,#clickList do local xOff = (index % 3) * 100; local yOff = (index - index%3)/2 * 15; lsPrint(20 + xOff, y + yOff, z, 0.5, 0.5, 0xffffffff, i .. ": (" .. clickList[i][1] .. ", " .. clickList[i][2] .. ")"); index = index + 1; end if #clickList >= stonecount then is_done = 1; end if #clickList == 0 then if lsButtonText(10, lsScreenY - 30, z, 110, 0xffff80ff, "Work Mine") then workMine(); end end if #clickList > 0 then if lsButtonText(10, lsScreenY - 30, z, 100, 0xff8080ff, "Reset") then reset(); end end if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff, "End script") then error "Clicked End Script button"; end lsDoFrame(); lsSleep(50); end end function fetchTotalCombos() TotalCombos = 0; for i=1,#clickList do for j=i+1,#clickList do for k=j+1,#clickList do TotalCombos = TotalCombos + 1; end end end end function clickSequence() fetchTotalCombos(); sleepWithStatus(150, "Starting... Don\'t move mouse!"); local worked = 1; local startMiningTime = lsGetTimer(); for i=1,#clickList do for j=i+1,#clickList do for k=j+1,#clickList do checkCloseWindows(); -- 1st Node checkBreak(); checkAbort(); local startSetTime = lsGetTimer(); srSetMousePos(clickList[i][1], clickList[i][2]); lsSleep(clickDelay); findClosePopUp() srKeyEvent('A'); -- 2nd Node checkBreak(); checkAbort(); srSetMousePos(clickList[j][1], clickList[j][2]); lsSleep(clickDelay); findClosePopUp() srKeyEvent('A'); -- 3rd Node checkBreak(); checkAbort(); srSetMousePos(clickList[k][1], clickList[k][2]); lsSleep(clickDelay); findClosePopUp() srKeyEvent('S'); lsSleep(popDelay); findClosePopUp(); worked = worked + 1 local elapsedTime = lsGetTimer() - startMiningTime; local setTime = lsGetTimer() - startSetTime; local y = 10; lsPrint(10, y, 0, 0.7, 0.7, 0xB0B0B0ff, "Hold Ctrl+Shift to end this script."); y = y +50 lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "[" .. worked .. "/" .. TotalCombos .. "] Nodes Worked: " .. i .. ", " .. j .. ", " .. k); y = y + 32; --lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Last Work Time: " .. math.floor(setTime/100)/10 .. " secs"); lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Last Work Time: " .. (setTime/100)/10 .. " secs"); y = y + 32; --lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Time Elapsed: " .. math.floor(elapsedTime/100)/10 .. " secs"); lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Current Time Elapsed: " .. (elapsedTime/100)/10 .. " secs"); y = y + 16; lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Last Time Elapsed: " .. miningTimeGUI); y = y + 32; lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Node Delay: " .. clickDelay .. " ms"); y = y + 16; lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Popup Delay: " .. popDelay .. " ms"); y = y + 32; lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Hold Shift to Abort and Return to Menu."); y = y + 32; lsPrint(5, y, 0, 0.7, 0.7, 0xffffffff, "Don't touch mouse until finished!"); lsDoFrame(); end end end miningTime = lsGetTimer() - startMiningTime; timesworked = timesworked + 1; if autoWorkMine then workMine(); end reset(); end function workMine() srSetMousePos(mineX, mineY); lsSleep(clickDelay); --Send 'W' key over Mine to Work it (Get new nodes) srKeyEvent('W'); sleepWithStatus(1000, "Working mine (Fetching new nodes)"); findClosePopUp(); end function checkCloseWindows() -- Rare situations a click can cause a window to appear for a node, blocking the view to other nodes. -- This is a safeguard to keep random windows that could appear, from remaining on screen and blocking the view of other nodes from being selected. srReadScreen(); local closeWindows = findAllImages("thisis.png"); if #closeWindows > 0 then for i=#closeWindows, 1, -1 do -- 2 right clicks in a row to close window (1st click pins it, 2nd unpins it srClickMouseNoMove(closeWindows[i][0]+5, closeWindows[i][1]+10, true); lsSleep(100); srClickMouseNoMove(closeWindows[i][0]+5, closeWindows[i][1]+10, true); end lsSleep(clickDelay); end end function reset() getPoints(); clickSequence(); end function checkAbort() if lsShiftHeld() then sleepWithStatus(750, "Aborting ..."); reset(); end end function findClosePopUp() lsSleep(popDelay); while 1 do checkBreak(); srReadScreen(); OK = srFindImage("OK.png"); if OK then srClickMouseNoMove(OK[0]+2,OK[1]+2, true); lsSleep(clickDelay); else break; end end end function promptDelays() local is_done = false; local count = 1; while not is_done do checkBreak(); local y = 10; lsPrint(5, y, 0, 0.8, 0.8, 0xffffffff, "Key or Mouse to Select Nodes:"); y = y + 35; lsSetCamera(0,0,lsScreenX*1.3,lsScreenY*1.3); dropdown_cur_value = lsDropdown("ArrangerDropDown", 5, y, 0, 200, dropdown_cur_value, dropdown_values); lsSetCamera(0,0,lsScreenX*1.0,lsScreenY*1.0); y = y + 20; lsPrint(5, y, 0, 0.8, 0.8, 0xffffffff, "How many Nodes?"); y = y + 50; lsSetCamera(0,0,lsScreenX*1.3,lsScreenY*1.3); dropdown_ore_cur_value = lsDropdown("ArrangerDropDown2", 5, y, 0, 200, dropdown_ore_cur_value, dropdown_ore_values); lsSetCamera(0,0,lsScreenX*1.0,lsScreenY*1.0); y = y + 10; lsPrint(5, y, 0, 0.8, 0.8, 0xffffffff, "Node Delay (ms):"); is_done, clickDelay = lsEditBox("delay", 170, y, 0, 50, 30, 1.0, 1.0, 0x000000ff, 100); clickDelay = tonumber(clickDelay); if not clickDelay then is_done = false; lsPrint(10, y+22, 10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER"); clickDelay = 100; end y = y + 40; lsPrint(5, y, 0, 0.8, 0.8, 0xffffffff, "Popup Delay (ms):"); is_done, popDelay = lsEditBox("delay2", 170, y, 0, 50, 30, 1.0, 1.0, 0x000000ff, 250); popDelay = tonumber(popDelay); if not popDelay then is_done = false; lsPrint(10, y+22, 10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER"); popDelay = 250; end y = y + 40; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "Node Delay: Pause between selecting each node."); y = y + 16; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "Raise value to run slower (try increments of 25)"); y = y + 22; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "Popup Delay: Finalize, pause and wait for Popup."); y = y + 16; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "Raise increments of 100 if you are laggy."); y = y + 16; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "ie Clicking next nodes before previous ones break."); y = y + 16; lsPrint(5, y, 0, 0.6, 0.6, 0xffffffff, "Popup Delay 1000 or 1500 might work better."); if lsButtonText(10, lsScreenY - 30, 0, 100, 0xFFFFFFff, "Next") then is_done = 1; end if lsButtonText(lsScreenX - 110, lsScreenY - 30, 0, 100, 0xFFFFFFff, "End script") then error(quitMessage); end lsDoFrame(); lsSleep(50); end return count; end