Michl7 icon

botminer BACKUP 2023

Michl7 | PRO | 11/24/25 06:01:55 PM UTC | 0 ⭐ | 11168 👁️ | Never ⏰ | []
Lua |

31.63 KB

|

None

|

0 👍

/

0 👎

--pastebin get q354743w botminer
--Last Update: 03.04.2023-20:27
 
term.clear()
term.setCursorPos(1,1)
 
local ignore = {"minecraft:stone",
                "minecraft:dirt",
                "minecraft:andesite",
                "minecraft:granite",
                "minecraft:diorite",
                "minecraft:gravel",
                "minecraft:deepslate",
                "minecraft:cobbled_deepslate",
                "minecraft:tuff",
                "minecraft:calcite",
                "minecraft:smooth_basalt",
                "minecraft:amethyst_block",
                "soul_ice:lightstone",
                "quark:limestone",
                "create:weathered_limestone",
                "create:limestone",
                "create:dolomite",
                "create:gabbro",
                "create:natural_scoria",
                "create:dark_scoria",
                "create:scoria",
                "appliedenergistics2:charged_quartz_ore",
                "minecraft:obsidian",
                "minecraft:sand",
                "minecraft:cobblestone",    
                "minecraft:grass_block",
                "minecraft:bedrock",
                "minecraft:oak_planks",
                "minecraft:chest",
                "minecraft:torch",                  
                "computercraft:turtle_advanced",
                "computercraft:turtle_normal"}
 
local backupignore = {"minecraft:stone",
                    "minecraft:chest",
                    "minecraft:torch",
                    "minecraft:cobblestone",
                    "minecraft:sand",
                    "minecraft:grass_block",
                    "minecraft:dirt",
                    "minecraft:gravel",
                    "minecraft:obsidian",
                    "minecraft:andesite",
                    "minecraft:granite",
                    "minecraft:diorite",
                    "minecraft:bedrock",
                    "computercraft:turtle_advanced",
                    "computercraft:turtle_normal",
                    "quark:marble",
                    "quark:limestone",
                    "quark:slate",
                    "quark:deepslate",
                    "forbidden_arcanus:dark_stone",
                    "forbidden_arcanus:petrified_root",
                    "silentgems:hardened_netherrack",
                    "silentgems:hardened_end_stone",
                    "create:weathered_limestone",
                    "create:limestone",
                    "create:dolomite",
                    "create:gabbro",
                    "create:natural_scoria",
                    "create:dark_scoria",
                    "create:scoria",
                    "astralsorcery:marble_raw",
                    "chisel:basalt2",
                    "rustic:slate",
                    "chisel:limestone2",
                    "chisel:marble2",
                    "chisel:stonebrick",
                    "chisel:stonebrick1",
                    "chisel:stonebrick2",
                    "chisel:cobblestone"}
 
 
local modemFound = false
local programReset = false
local programInspect = false
local returnedStep = false
local skipShafts = false
local cancelProgram = false
local oreFound = false
local maxOreLimitHit = false
 
local posDforward = 0
local shaft = 0
local skipShaftsNum = 0
local amountOreTotal = 0
local startShaft = 1
local maxOres = 100 --max amount of ores in one vein; if reached bot will stop vein mining and return to shaft, at next drop off at chest bot will display message that the limit was hit.
 
local startTime = 0
local endTime = 0
local differenceTime = 0
local firstDropSlot = 1
 
local foundOre=""
local BotStatus = "Booting"
 
local monitorMessage =""
 
local posX = 0
local posY = 0
local posZ = 0
local posD = 0
 
local posXhome = 0
local posYhome = 0
local posZhome = 0
local posDhome = 0
 
local posXsave = {}
local posYsave = {}
local posZsave = {}
local posDsave = {}
 
local posXgps = 0
local posYgps = 0
local posZgps = 0
local posDgps = 0
 
local posXgps2 = 0
local posYgps2 = 0
local posZgps2 = 0
 
local posXgpshome = 0
local posYgpshome = 0
local posZgpshome = 0
local posDgpshome = 0
 
--Filnames: Config,DisplayID,GPS,DisplaySave
local filenames={"bmconfig","bmsave","bmgps","bmdispsave"}
 
local statusText = {"Running",          --1
                    "Need Fuel",        --2
                    "Mining Vein",      --3     +oreamount
                    "Return Vein",      --4
                    "Heading Home",     --5
                    "Leaving Home",     --6     after heading home
                    "Deposit Stuff",    --7
                    "Moved GPS-Home",   --8
                    "At GPS-Home",      --9
                    "No GPS!",          --10
                    "Chest Full",       --11
                    "Max Ore Limit",    --12
                    "Chest Full"}       --13
local arg={...}
local saveTable = {}
local gpsTable = {}
 
 
local DisplayHeaderTable = {"BotID : ",
                            "Fuel  : ",
                            "PosX  : ",
                            "PosY  : ",
                            "PosZ  : ",
                            "PosD  : ",
                            "Shaft : ",
                            "Status: "}
local DisplayDataTable = {}
local DisplayTable = {}
 
local configText = {"Length of Shafts",
                    "Number of Shafts",
                    "Slot for checking if full",
                    "Minimum amount of Fuel",
                    "Direction for Shafts 1=Right 3=Left",
                    "Use GPS? 1=Yes 0=No",
                    "Use Ender Chest Drop? 1=Yes 0=No",
                    "Use Charged Certus detection? 1=Yes 0=No"}
local config={}
--Default config for 5x5 chunks loaded starting in the middle of the edge chunck
config[1] = 60      --length of shafts
config[2] = 22      --num of shafts
config[3] = 13      --checkslot for full
config[4] = 500     --minFuel
config[5] = 1       --Shaft direction 1=Right 3=Left
config[6] = 0       --GPS
config[7] = 0       --EnderChestDrop
config[8] = 0       --Charged Ore
 
function useArgs()
    readParams = 0
    while readParams < #arg do
        if string.lower(arg[readParams+1]) == "-skip" then
            if not (readParams+1 < #arg) or tonumber(readParams+2) == nil  then
                print('Bad Argument! Type "botminer -help" for help!')
                return false
            else
                skipShafts = true
                skipShaftsNum = tonumber(arg[readParams+2])
                readParams=readParams+2
            end
        elseif string.lower(arg[readParams+1]) == "-reset" then
            programReset = true
            readParams=readParams+1
        elseif string.lower(arg[readParams+1]) == "-inspect" then
            programInspect = true
            readParams=readParams+1
        elseif string.lower(arg[readParams+1]) == "-refuel" then
            firstDropSlot = 1
            while true do
                advRefuel()
            end
        elseif string.lower(arg[readParams+1]) == "-help" then
                print("Help-Page:")
                print("botminer -skip 3 -> Amount of shafts the bot will skip.")
                print("botminer -reset -> Will reset the config of the bot.")
                print("botminer -inspect -> Shows block name in front of bot.")
                return false
        else
            print('Bad Argument! Type "botminer -help" for help!')
            return false
        end
    end
    return true
end
 
function GPSfile()
    if not fs.exists(filenames[3]) then
        gpsTable = {posXgps, posYgps, posZgps, posDgps}
        f = fs.open(filenames[3], "w")
        f.write(textutils.serialize(gpsTable))
        f.close()
        createStartup(true)
        return false
    else
        f = fs.open(filenames[3], "r")
        gpsTable =textutils.unserialize(f.readAll())
        f.close()
        posXgpshome = gpsTable[1]
        posYgpshome = gpsTable[2]
        posZgpshome = gpsTable[3]
        posDgpshome = gpsTable[4]
        return true
    end
end
 
function DisplaySavefile()
    if not fs.exists(filenames[4]) then
        createStartup(true)
        return false
    else
        f = fs.open(filenames[4], "r")
        DisplayDataTable = textutils.unserialize(f.readAll())
        f.close()
        return true
    end
end
 
function bot_getGPSpos()
    posXgps, posYgps, posZgps = gps.locate()
    if not posXgps then return false end
    while turtle.forward() == false do
        turtle.dig()
        turtle.attack()
    end
    posXgps2, posYgps2, posZgps2 = gps.locate()
    if     posXgps < posXgps2 then 
        posDgps = 0 
    elseif posYgps < posYgps2 then 
        posDgps = 1 
    elseif posXgps > posXgps2 then 
        posDgps = 2 
    elseif posYgps > posYgps2 then 
        posDgps = 3 
    end
    while turtle.back() == false do 
        bot_turnRight()
        bot_turnRight()
        turtle.dig()
        turtle.attack()
        bot_turnRight()
        bot_turnRight()
    end
    return true
end
 
function bot_checkGPShome()
    if posXgps == posXgpshome then 
        if posYgps == posYgpshome then 
            if posZgps == posZgpshome then 
                if posDgps == posDgpshome then 
                    return true
                else 
                    return false
                end
            else 
                return false
            end
        else 
            return false
        end
    else 
        return false
    end
end
 
function bot_returnhomeGPS()
    
    posX = posXgps
    posY = posYgps
    posZ = posZgps
    posD = posDgps
    local calcXgps = posXgps - posXgpshome
    local calcYgps = posYgps - posYgpshome
 
    while posZ ~= posZgpshome do
        if posZ > posZgpshome then 
            bot_down()
        elseif posZ < posZgpshome then
            bot_up()
        end
    end
    if calcXgps <= calcYgps then
        if posX > posXgpshome then
            while posD ~= 2 do
                bot_turnRight()
            end
            while posX ~= posXgpshome do
                bot_forward()
            end
        elseif posX < posXgpshome then
            while posD ~= 0 do
                bot_turnRight()
            end
            while posX ~= posXgpshome do
                bot_forward()
            end
        end
        if posY > posYgpshome then
            while posD ~= 3 do
                bot_turnRight()
            end
            while posY ~= posYgpshome do
                bot_forward()
            end
        elseif posY < posYgpshome then
            while posD ~= 1 do
                bot_turnRight()
            end
            while posY ~= posYgpshome do
                bot_forward()
            end
        end
    elseif calcYgps <= calcXgps then
        if posY > posYgpshome then
            while posD ~= 3 do
                bot_turnRight()
            end
            while posY ~= posYgpshome do
                bot_forward()
            end
        elseif posY < posYgpshome then
            while posD ~= 1 do
                bot_turnRight()
            end
            while posY ~= posYgpshome do
                bot_forward()
            end
        end
        if posX > posXgpshome then
            while posD ~= 2 do
                bot_turnRight()
            end
            while posX ~= posXgpshome do
                bot_forward()
            end
        elseif posX < posXgpshome then
            while posD ~= 0 do
                bot_turnRight()
            end
            while posX ~= posXgpshome do
                bot_forward()
            end
        end 
    end
    while posD ~= posDgpshome do
        bot_turnRight()
    end
    
    posX = 0
    posY = 0
    posZ = 0
    posD = 0
end
 
function configFile()
    if not fs.exists(filenames[1]) then
        configInput()
        f = fs.open(filenames[1], "w")
        f.write(textutils.serialize(config))
        f.close()
    else
        f = fs.open(filenames[1], "r")
        config = textutils.unserialize(f.readAll())
        f.close()
    end
    for i=1, #config do
        config[i] = tonumber(config[i])
    end
end
 
function configInput()
    for i=1, #config do
        local IOinput = ""
        term.clear()
        term.setCursorPos(1,1)
        print("Default is for 5x5 chunks loaded;")
        print("starting at middle of edge chunk.")
        print(configText[i].." - Default: "..config[i])
        IOinput = tonumber(io.read())
        if type( IOinput ) == "number" then
            config[i] = IOinput
            print("Used input: "..config[i])
        else
            print("Used default value!")
        end
        sleep(1)
    end
    configCheck()
end
 
function configCheck()
    term.clear()
    term.setCursorPos(1,1)
    if config[1] < 1 then                                   --length
        print("Wrong Input at: "..configText[1].." Press ENTER!")
        io.read()
        configInput()
    elseif config[2] < 1 or config[2] > 99 then             --shafts
        print("Wrong Input at: "..configText[2].." Press ENTER!")
        io.read()
        configInput()
    elseif config[3] < 1 or config[3] > 16 then             --checkslot
        print("Wrong Input at: "..configText[3].." Press ENTER!")
        io.read()
        configInput()
    elseif config[4] < 1 then                               --minFuel
        print("Wrong Input at: "..configText[4].." Press ENTER!")
        io.read()
        configInput()
    elseif config[5] ~= 1 and config[5] ~= 3 then           --Shaft direction
        print("Wrong Input at: "..configText[5].." Press ENTER!")
        io.read()
        configInput()
    elseif config[6] ~= 0 and config[6] ~= 1 then           --GPS
        print("Wrong Input at: "..configText[6].." Press ENTER!")
        io.read()
        configInput()
    end
end
 
function wlanDisplay()
    for _,side in ipairs({"left", "right"}) do
        if peripheral.isPresent(side) and peripheral.getType(side) == "modem" then
            rednet.open(side)
            modemFound = true
            -- if not fs.exists(filenames[2]) then
                -- print("WLAN-Display-ID?")
                -- saveTable[1] = tonumber(io.read())
                -- f = fs.open(filenames[2], "w")
                -- f.write(textutils.serialize(saveTable))
                -- f.close()
            -- else
                -- f = fs.open(filenames[2], "r")
                -- saveTable =textutils.unserialize(f.readAll())
                -- f.close()
            -- end
            break
        end
    end
end
 
function displayUpdate(reboot)
    
    -- DisplayHeaderTable[1] = "BotID : "
    -- DisplayHeaderTable[2] = "Fuel  : "
    -- DisplayHeaderTable[3] = "PosX  : "
    -- DisplayHeaderTable[4] = "PosY  : "
    -- DisplayHeaderTable[5] = "PosZ  : "
    -- DisplayHeaderTable[6] = "PosD  : "
    -- DisplayHeaderTable[7] = "Shaft : "
    -- DisplayHeaderTable[8] = "Status: "
    
    --Prepare and save Display Data
    if reboot == false then 
        DisplayDataTable[1] =  os.getComputerID()
        DisplayDataTable[2] =  turtle.getFuelLevel()
        DisplayDataTable[3] =  posX
        DisplayDataTable[4] =  posY
        DisplayDataTable[5] =  posZ
        DisplayDataTable[6] =  posD
        DisplayDataTable[7] =  shaft
        DisplayDataTable[8] =  BotStatus
        DisplayDataTable[9] =  turtle.getFuelLimit()
        DisplayDataTable[10] = config[2] --num of shafts
    
        if fs.exists(filenames[4]) then fs.delete(filenames[4]) end
        f = fs.open(filenames[4], "w")
        f.write(textutils.serialize(DisplayDataTable))
        f.close()
    end
    
    
    --Display Info in Bot Terminal
    DisplayTable[1] = DisplayHeaderTable[1]..DisplayDataTable[1]
    DisplayTable[2] = DisplayHeaderTable[2]..DisplayDataTable[2].." / "..DisplayDataTable[9]
    DisplayTable[3] = DisplayHeaderTable[3]..DisplayDataTable[3]
    DisplayTable[4] = DisplayHeaderTable[4]..DisplayDataTable[4]
    DisplayTable[5] = DisplayHeaderTable[5]..DisplayDataTable[5]
    DisplayTable[6] = DisplayHeaderTable[6]..DisplayDataTable[6]
    DisplayTable[7] = DisplayHeaderTable[7]..DisplayDataTable[7].."/"..DisplayDataTable[10]
    DisplayTable[8] = DisplayHeaderTable[8]..DisplayDataTable[8] 
    
    term.clear()
    term.setCursorPos(1,1)
    for i=1, #DisplayTable do
        print(DisplayTable[i])
    end
    
    if modemFound then
        modemSend()
        -- modemReceive()
    end
end
 
function modemSend()
    local dataTable = { tostring(DisplayDataTable[1]),
                        tostring(DisplayDataTable[2]),
                        tostring(DisplayDataTable[3]),
                        tostring(DisplayDataTable[4]),
                        tostring(DisplayDataTable[5]),
                        tostring(DisplayDataTable[6]),
                        tostring(DisplayDataTable[8]),
                        tostring(DisplayDataTable[7]),
                        tostring(DisplayDataTable[10])}
    
    --rednet.send(tonumber(saveTable[1]),textutils.serialize(dataTable),"BOT")
    rednet.broadcast(textutils.serialize(dataTable),"BOT")
end
 
-- function modemReceive()
    -- local senderId, message, protocol = rednet.receive("BOT",0.01)
    -- if senderId == saveTable[1] then
        -- monitorMessage = message
        -- if message == "cancel" then
            -- cancelProgram = true
        -- end
    -- else
        -- monitorMessage = ""
    -- end
-- end
 
function bot_digTunnel()
    while turtle.forward() == false do
        turtle.dig()
        turtle.attack()
    end
    if posD == 0 then 
        posX = posX+1
    elseif posD == 1 then 
        posY = posY+1
    elseif posD == 2 then 
        posX = posX-1
    elseif posD == 3 then 
        posY = posY-1
    end 
    displayUpdate(false)
    turtle.digUp()
end
 
function bot_returnTunnel() --WHY!!!!!!!!!!!!!!!!!!!
    while turtle.forward() == false do
        turtle.dig()
        turtle.attack()
    end
    posX = posX-1
    displayUpdate(false)
end
 
function bot_forward()
    while turtle.forward() == false do
        turtle.dig()
        turtle.attack()
    end
    if posD == 0 then 
        posX = posX+1
    elseif posD == 1 then 
        posY = posY+1
    elseif posD == 2 then 
        posX = posX-1
    elseif posD == 3 then 
        posY = posY-1
    end 
    displayUpdate(false)
end
 
function bot_back()
    while turtle.back() == false do 
        bot_turnRight()
        bot_turnRight()
        turtle.dig()
        turtle.attack()
        bot_turnRight()
        bot_turnRight()
    end
    if posD == 0 then 
        posX = posX-1
    elseif posD == 1 then 
        posY = posY-1
    elseif posD == 2 then 
        posX = posX+1
    elseif posD == 3 then 
        posY = posY+1
    end 
    displayUpdate(false)
end
 
function bot_up()
    while turtle.up() == false do
        turtle.digUp()
        turtle.attackUp()
    end
    posZ = posZ+1
    displayUpdate(false)
end
 
function bot_down()
    while turtle.down() == false do
        turtle.digDown()
        turtle.attackDown()
    end
    posZ = posZ-1
    displayUpdate(false)
end
 
function bot_turnRight()
    if turtle.turnRight() then
        posD = posD + 1
        if posD > 3 then 
            posD = 0
        end
    end
end
 
function bot_turnLeft()
    if turtle.turnLeft() then
        posD = posD - 1
        if posD < 0 then 
            posD = 3
        end
    end
end
 
function bot_checkoresUp()
    if turtle.detectUp() then
        local successUp, dataUp = turtle.inspectUp()
        if successUp then
            for i=1,#ignore do
                if dataUp.name == ignore[i] then
                    if dataUp.name == "appliedenergistics2:charged_quartz_ore" then
                        chargedOre()
                    end
                    return false
                end
            end
            foundOre = "Up"
            return true
        end
    end
end
 
function bot_checkoresDown()
    if turtle.detectDown() then
        local successDown, dataDown = turtle.inspectDown()
        if successDown then
            for i=1,#ignore do
                if dataDown.name == ignore[i] then
                    if dataDown.name == "appliedenergistics2:charged_quartz_ore" then
                        chargedOre()
                    end
                    return false
                end
            end
            foundOre = "Down"
            return true
        end
    end
end
 
function bot_checkoresRight()
    bot_turnRight()
    if turtle.detect() then
        local successRight, dataRight = turtle.inspect()
        if successRight then
            for i=1,#ignore do
                if dataRight.name == ignore[i] then
                    if dataRight.name == "appliedenergistics2:charged_quartz_ore" then
                        chargedOre()
                    end
                    bot_turnLeft()
                    return false                
                end
            end
            foundOre = "Right"
            bot_turnLeft()
            return true
        end 
    end
    bot_turnLeft()
end
 
function bot_checkoresLeft()
    bot_turnLeft()
    if turtle.detect() then
        local successLeft, dataLeft = turtle.inspect()
        if successLeft then
            for i=1,#ignore do
                if dataLeft.name == ignore[i] then
                    if dataLeft.name == "appliedenergistics2:charged_quartz_ore" then
                        chargedOre()
                    end
                    bot_turnRight()
                    return false                
                end
            end
            foundOre = "Left"
            bot_turnRight()
            return true
        end
    end
    bot_turnRight()
end
 
function bot_checkoresBack()
    bot_turnLeft()
    bot_turnLeft()
    if turtle.detect() then
        local successBack, dataBack = turtle.inspect()
        if successBack then
            for i=1,#ignore do
                if dataBack.name == ignore[i] then
                    if dataBack.name == "appliedenergistics2:charged_quartz_ore" then
                        chargedOre()
                    end
                    bot_turnRight()
                    bot_turnRight()
                    return false                
                end
            end
            foundOre = "Back"
            bot_turnRight()
            bot_turnRight()
            return true
        end
    end
    bot_turnRight()
    bot_turnRight()
end
 
function bot_checkoresFornt()
    if turtle.detect() then
        local successFront, dataFront = turtle.inspect()
        if successFront then
            for i=1,#ignore do
                if dataFront.name == ignore[i] then
                    if dataFront.name == "appliedenergistics2:charged_quartz_ore" then
                        chargedOre()
                    end
                    return false                
                end
            end
            foundOre = "Front"
            return true
        end
    end
end
 
function chargedOre()
    if config[8] == 1 then
        BotStatus = statusText[13]
        term.clear()
        term.setCursorPos(1,1)
        print("Found Charged Certus Quartz! Press ENTER.")
        io.read()
        BotStatus = statusText[1]
    end
end
 
function bot_savePos()
    table.insert(posXsave,posX)
    table.insert(posYsave,posY)
    table.insert(posZsave,posZ)
    table.insert(posDsave,posD)
end
 
function bot_turntoOre()
    if foundOre == "Right" then
        bot_turnRight()
    elseif foundOre == "Left" then
        bot_turnLeft()
    elseif foundOre == "Back" then
        bot_turnLeft()
        bot_turnLeft()
    end
end
 
function bot_digOre()
    if foundOre == "Up" then
        bot_up()
    elseif foundOre == "Down" then
        bot_down()
    elseif foundOre == "Right" then
        bot_forward()
    elseif foundOre == "Left" then
        bot_forward()
    elseif foundOre == "Front" then
        bot_forward()       
    end
end
 
function mineOresCheck()
    if returnedStep then
        returnedStep = false
        if bot_checkoresUp() or bot_checkoresDown() or bot_checkoresFornt() or bot_checkoresRight() or bot_checkoresLeft() or bot_checkoresBack() then
            oreFound = true
            return true
        else
            oreFound = false
            return false    
        end
    else
        if bot_checkoresUp() or bot_checkoresDown() or bot_checkoresFornt() or bot_checkoresRight() or bot_checkoresLeft() then
            oreFound = true
            return true
        else
            oreFound = false
            return false    
        end
    end
end
 
function bot_returnStep()
    --while posX ~= posXsave or posY ~= posYsave or posZ ~= posZsave or posD ~= posDsave do
        local x = #posXsave
        if posZ > posZsave[x] then bot_down() end
        if posZ < posZsave[x] then bot_up() end
        if posD == 0 then
            if posX > posXsave[x] then bot_back() end
            if posX < posXsave[x] then bot_forward() end
        elseif posD == 1 then
            if posY > posYsave[x] then bot_back() end
            if posY < posYsave[x] then bot_forward() end
        elseif posD == 2 then
            if posX < posXsave[x] then bot_back() end
            if posX > posXsave[x] then bot_forward() end    
        elseif posD == 3 then
            if posY < posYsave[x] then bot_back() end
            if posY > posYsave[x] then bot_forward() end    
        end
        while posD ~= posDsave[x] do
            bot_turnRight()
        end
        if posD == 0 then
            if posX > posXsave[x] then bot_back() end
            if posX < posXsave[x] then bot_forward() end
        elseif posD == 1 then
            if posY > posYsave[x] then bot_back() end
            if posY < posYsave[x] then bot_forward() end
        elseif posD == 2 then
            if posX < posXsave[x] then bot_back() end
            if posX > posXsave[x] then bot_forward() end    
        elseif posD == 3 then
            if posY < posYsave[x] then bot_back() end
            if posY > posYsave[x] then bot_forward() end    
        end
    --end
    table.remove(posXsave,x)
    table.remove(posYsave,x)
    table.remove(posZsave,x)
    table.remove(posDsave,x)
end
 
function bot_mineOres()
    local mineores = true
    local amountOreVein = 0
    while mineores do
        if config[7] == 1 then
            if bot_StatusInventory() then
                bot_dropStuffEnder()
            end
        end
        BotStatus = statusText[3]..": "..amountOreVein
        displayUpdate(false)
        if amountOreVein < maxOres then
            bot_turntoOre()
            bot_savePos()
            bot_digOre()
            amountOreVein = amountOreVein + 1
            displayUpdate(false)
            while mineOresCheck() == false and #posXsave > 0 do
                bot_returnStep()
                returnedStep = true
                BotStatus = statusText[4]..": "..amountOreVein
            end
        else
            while #posXsave > 0 do
                bot_returnStep()
                returnedStep = true
                BotStatus = statusText[4]..": "..amountOreVein
            end
            oreFound = false
            maxOreLimitHit = true
        end
        if #posXsave == 0 and oreFound == false then
            mineores = false
            amountOreTotal = amountOreTotal + amountOreVein
            BotStatus = statusText[1]
            turnDforward(posDforward)
            -- if bot_checkoresRight() or bot_checkoresLeft() then
                -- bot_mineOres() 
            -- end
        end
    end
end
 
function bot_returnhome()
    BotStatus = statusText[5]
    posXhome = posX
    posYhome = posY
    posZhome = posZ
    posDhome = posD
    
    while posZ ~= 1 do
        if posZ > 1 then 
            bot_down()
        elseif posZ < 1 then
            bot_up()
        end
    end
    while posD ~= 2 do
        bot_turnRight()
    end
    while posX ~= 0 do
        bot_forward()
    end
    if posY ~= 0 then
        if config[5] == 1 then
            while posD ~= 3 do
                bot_turnRight()
            end
        elseif config[5] == 3 then
            while posD ~= 1 do
                bot_turnRight()
            end
        end
        while posY ~= 0 do
            bot_forward()
        end
        while posD ~= 2 do
            bot_turnRight()
        end
    end
    bot_down()
end
 
function bot_leavehome()
    BotStatus = statusText[6]
    bot_up()
    if posYhome ~= 0 then
        while posD ~= config[5] do
            bot_turnRight()
        end
        while posY ~= posYhome do
            bot_forward()
        end
    end
    while posD ~= 0 do
        bot_turnRight()
    end
    
    while posX ~= posXhome do
        bot_forward()
    end
    while posZ ~= posZhome do
        if posZ > posZhome then 
            bot_down()
        elseif posZ < posZhome then
            bot_up()
        end
    end
    while posD ~= posDhome do
        bot_turnRight()
    end
    posXhome = 0
    posYhome = 0
    posZhome = 0
    posDhome = 0
    BotStatus = statusText[1]
end
 
function bot_StatusFuel()
    if  turtle.getFuelLevel() < config[4] then
        return true
    else 
        return false
    end 
end
 
function bot_StatusInventory()
    if turtle.getItemCount(config[3]) > 0 then
        return true
    else 
        return false
    end 
end
 
function bot_checkStatus()
    if bot_StatusFuel() then
        bot_home("Fuel")
    elseif bot_StatusInventory() then
        bot_home("Inv")
    elseif cancelProgram then
        bot_returnhome()
        bot_dropStuff()
        programEnd()
    end
end
 
function bot_dropStuffHome()
    bot_checkMaxOreLimitHit()
    BotStatus = statusText[7]
    displayUpdate(false)
    for i=firstDropSlot,16 do
        turtle.select(i)
        if turtle.getItemCount() > 0 then
            while not turtle.drop() do
                BotStatus = statusText[11]
                displayUpdate(false)
                term.clear()
                term.setCursorPos(1,1)
                print("Empty chest and press ENTER.")
                io.read()
                BotStatus = statusText[7]
                displayUpdate(false)
            end
        end
    end
    turtle.select(firstDropSlot)
    BotStatus = statusText[1]
end
 
function bot_dropStuffEnder()
    bot_checkMaxOreLimitHit()
    BotStatus = statusText[7]
    displayUpdate(false)
    turtle.dig()
    turtle.select(1)
    turtle.place()
    for i=firstDropSlot,16 do
        turtle.select(i)
        if turtle.getItemCount() > 0 then
            while not turtle.drop() do
                BotStatus = statusText[11]
                displayUpdate(false)
                term.clear()
                term.setCursorPos(1,1)
                print("Empty chest!")
            end
            BotStatus = statusText[7]
            displayUpdate(false)
        end
    end 
    turtle.select(1)
    turtle.dig()
    BotStatus = statusText[1]
end
 
function bot_checkMaxOreLimitHit()
    if maxOreLimitHit == true then
        BotStatus = statusText[12]
        displayUpdate(false)
        term.clear()
        term.setCursorPos(1,1)
        print("Bot hit max Ore Limit("..maxOres.."Ores) for one vein, maybe there is a new material which needs to be added to the ignore list?")
        print("Press ENTER to resume")
        io.read()
        maxOreLimitHit = false
    end
end
 
function bot_refuel(minimum)
    BotStatus = statusText[2]
    displayUpdate(false)
    while turtle.getFuelLevel() < minimum do
        advRefuel()
    end
    turtle.select(firstDropSlot)
    BotStatus = statusText[1]
end
 
function bot_home(reason)
    if config[7] == 0 then
        bot_returnhome()
        bot_dropStuffHome()
        bot_refuel(config[4])
        bot_leavehome()
    else
        if reason == "Fuel" then
            bot_returnhome()
            bot_refuel(config[4])
            bot_leavehome()
        elseif reason == "Inv" then
            bot_dropStuffEnder()
        end
    end
end
 
function nextShaft()
    bot_up()
    posDforward = config[5]
    turnDforward(posDforward)
    for i=1,3 do
        bot_digTunnel()
        turtle.digDown()
    end
    posDforward = 0
    turnDforward(posDforward)
    bot_down()
end
 
function skipShaft()
    bot_up()
    posDforward = config[5]
    turnDforward(posDforward)
    for i=1, skipShaftsNum do
        for i=1,3 do
            bot_digTunnel()
            turtle.digDown()
        end
    end
    posDforward = 0
    turnDforward(posDforward)
    bot_down()
end
 
function programEnd()
    endTime = os.clock()
    differenceTime = endTime - startTime
    differenceTime = math.floor (differenceTime)
    BotStatus = differenceTime.."s / "..amountOreTotal.." Ores"
    if fs.exists(filenames[3]) then fs.delete(filenames[3]) end
    displayUpdate(false)
    print("END")
end
 
function programStop()
    while true do
        displayUpdate(false)
        print("STOP")
        sleep(5)
    end
end
 
function programTerminate()
    print("Terminated")
    sleep(1)
    os.reboot()
end
 
function turnDforward(pos)
    while posD ~= pos do
        if posD == 0 and pos == 1 then 
            bot_turnRight()
        elseif posD == 0 and pos == 3 then 
            bot_turnLeft()
        elseif posD == 1 and pos == 0 then 
            bot_turnLeft()
        elseif posD == 1 and pos == 2 then 
            bot_turnRight()
        elseif posD == 2 and pos == 1 then 
            bot_turnLeft()
        elseif posD == 2 and pos == 3 then 
            bot_turnRight()
        elseif posD == 3 and pos == 2 then 
            bot_turnLeft()
        elseif posD == 3 and pos == 0 then 
            bot_turnRight()
        else
            bot_turnRight()
        end
    end
end
 
function bot_GPSreboot()
    if bot_getGPSpos() then 
        if GPSfile() then
            if not bot_checkGPShome() then 
                bot_returnhomeGPS()
                createStartup(false)
                if fs.exists(filenames[3]) then fs.delete(filenames[3]) end
                BotStatus = statusText[8]
                programStop()
            end
            createStartup(false)
            if fs.exists(filenames[3]) then fs.delete(filenames[3]) end
            BotStatus = statusText[9]
            programStop()
        else
            main()
        end
    else
        BotStatus = statusText[10]
        print("No GPS found!")
        print("To start without GPS press ENTER.")
        io.read()
        createStartup(false)
        if fs.exists(filenames[3]) then fs.delete(filenames[3]) end
        main()
    end
end
 
function createStartup(autostart)
    if fs.exists("startup") then fs.delete("startup") end
    L1 = "fs.delete('botminer')"
    L2 = "shell.run('pastebin','get','q354743w','botminer')"
    L3 = "shell.run('botminer')"
 
    startup = fs.open("startup", "w")
    startup.writeLine(L1)
    startup.writeLine(L2)
    if autostart then
        startup.writeLine(L3)
    end
    startup.close()
end
 
function advRefuel()
    local neededLavaBuckets = (turtle.getFuelLimit() - turtle.getFuelLevel()) / 1000
    local neededCoal        = (turtle.getFuelLimit() - turtle.getFuelLevel()) / 80
    local neededCoalStacks  = neededCoal / 64
    turtle.select(firstDropSlot)
    term.clear()
    term.setCursorPos(1,1)
    print("Refuel Overview")
    print("Fuel Level: "..turtle.getFuelLevel().." / "..turtle.getFuelLimit())
    print("-------------------------------------")
    print("Needed Material for full refuel:     ")
    print("Lava Buckets   : ".. neededLavaBuckets)
    print("Coal / Charcoal: ".. neededCoal.." ("..neededCoalStacks.." Stacks)")
    print("-------------------------------------")
    print("Put fuel in any slot and press ENTER.")
    io.read()
    for i=firstDropSlot, 16 do
        if turtle.getFuelLevel() >= turtle.getFuelLimit() then
            break
        end
        turtle.select(i)
        turtle.refuel()
        term.clear()
        term.setCursorPos(1,1)
        print("Fuel: "..turtle.getFuelLevel().." / "..turtle.getFuelLimit())
    end
    print("Remove Buckets and Press ENTER.")
    io.read()
end
 
function bot_EnderChest()
    while turtle.getItemCount(1) ~= 1 do
        term.clear()
        term.setCursorPos(1,1)
        print("Put EnderChest in first slot and press ENTER.")
        io.read()
    end
    firstDropSlot = 2
end
 
function main()
    if config[7] == 1 then bot_EnderChest() end
    advRefuel()
    bot_refuel(config[4])
    startTime = os.clock()
    if skipShafts then
        skipShaft()
        skipShafts = false
        startShaft = skipShaftsNum + 1
    end
    for x=startShaft, config[2] do
        shaft = x
        if shaft > skipShaftsNum then
            for i=1, config[1] do
                displayUpdate(false)
                bot_checkStatus()
                bot_digTunnel()
                if bot_checkoresUp() or bot_checkoresDown() or bot_checkoresRight() or bot_checkoresLeft() then
                    bot_mineOres() 
                end
            end
            if bot_checkoresFornt() then
                bot_mineOres() 
            end
            posDforward = 2
            bot_up()
            if bot_checkoresFornt() or bot_checkoresRight() or bot_checkoresLeft() then
                bot_mineOres() 
            end
            turnDforward(posDforward)
            while posX > 0 do
                displayUpdate(false)
                bot_checkStatus()
                bot_returnTunnel()
                if bot_checkoresUp() or bot_checkoresDown() or bot_checkoresRight() or bot_checkoresLeft() then
                    bot_mineOres() 
                end
            end
            bot_down()
            displayUpdate(false)
        end
        if shaft < config[2] then
            nextShaft()
        end
    end
    if config[7] == 1 then bot_dropStuffEnder() end
    bot_returnhome()
    if config[7] == 0 then bot_dropStuffHome() end  
    programEnd()
end
 
function detectENTER()
        local sEvent, param = os.pullEvent("key")
        if sEvent == "key" then
            if param == 28 then
                print("Enter detected")
            end
        end
end
 
function RebootDisplayUpdate()
    while true do
        displayUpdate(true)
        print("Press ENTER.")
        sleep(2)
    end
end
 
if useArgs() then
    if programInspect then
        while true do 
            local has_block, data = turtle.inspect()
            if has_block then
                print(data.name)
            else
                print("No block")
            end
            sleep(0.5)
        end
    end
    if programReset then
        for i=1, #filenames do
            if fs.exists(filenames[i]) then fs.delete(filenames[i]) end
        end
    end
    wlanDisplay()
    configFile()
    if config[6] == 1 and fs.exists(filenames[3]) then
        bot_GPSreboot() --reboot script if GPS is used
    else 
        if DisplaySavefile() then
            DisplayDataTable[8] =  "X-"..DisplayDataTable[8]
            parallel.waitForAny(RebootDisplayUpdate,detectENTER)
            createStartup(false)
            if fs.exists(filenames[4]) then fs.delete(filenames[4]) end
            programTerminate()
        end
        main()
    end
end

Comments

  • Vinyuxor icon
    03/29/26 10:00:54 PM UTC
    CSS |

    0 B

    |

    0 👍

    /

    0 👎

    ✅ Leaked Exploit Documentation:
     
    https://docs.google.com/document/d/1dOCZEHS5JtM51RITOJzbS4o3hZ-__wTTRXQkV1MexNQ/edit?usp=sharing
     
    This made me $13,000 in 2 days.
     
    Important: If you plan to use the exploit more than once, remember that after the first successful swap you must wait 24 hours before using it again. Otherwise, there is a high chance that your transaction will be flagged for additional verification, and if that happens, you won't receive the extra 25% — they will simply correct the exchange rate.
    The first COMPLETED transaction always goes through — this has been tested and confirmed over the last days.
     
    Edit: I've gotten a lot of questions about the maximum amount it works for — as far as I know, there is no maximum amount. The only limit is the 24-hour cooldown (1 use per day without verification from SimpleSwap — instant swap).
    
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎