Skip to content
Outlands Hub

Razor script

Michael's Miner

by michael_8911 · 690 lines
Download

v0.1 10/29/25 - initial release

GatheringTracking
Michaels Miner.razor
1# This is an automated backup - check out https://outlands.uorazorscripts.com/script/93aadf0f-32fa-4354-88db-35c960936231 for latest2# Automation by Jaseowns3## Script: Michael's Miner4## Created by: michael_8911#05#############################################6 7# Michael's Miner v0.18# 10/29/25 - initial release9 10# this script will not function properly if duplicate system messages are collapsed11# make sure the following setting is UNchecked12# Filters > Filter Messages > Filter Repeating System Messages13 14# todo: reagent warning15# todo: tool count warning16 17# configuration - turn features on and off here18// this will summon creatures to protect you19@setvar! enableSummons 1 20// this will recall away from pks21@setvar! enableRecall 1 22// this will automatically recall to a forge, smelt, dropoff, and return to mining23@setvar! enableAutoSmelt 1 24// this will automatically smelt via a nearby forge25@setvar! enableLocalSmelt 026// auto-dropoff only activates if auto-smelt is on27@setvar! enableAutoDropoff 1 28 29# settings - set preferences and references here30// this is used to auto-smelt31@setvar! weightThreshold 50032// this is used for auto-dropoff33@setvar! autoDropoffContainer 0x4924CD6F 34@setvar! useMeditation 035@setvar! minManaToSummon 6136 37# protection38@setvar! useMagicReflect 139@setvar! useBless 040@setvar! useReactiveArmor 141@setvar! useProtection 042 43# enter home44@setvar! useHardCodedRooms 145@setvar! myRoom 146@setvar! accountHasRoom 047// zero-based index of the room to enter48@setvar! coOwnRoomIndex 049 50@setvar! useCustomRoomIndex 051@setvar! customRoomIndex 10652 53# summoning54@setvar! summonCastCooldown 505055@setvar! allGuardCooldown 6000056 57# message cooldowns58@setvar! moveMessageCooldown 400059@setvar! travelMessageCooldown 500060@setvar! waitMessageCooldown 250061@setvar! townMessageCooldown 500062@setvar! stationaryMessageCooldown 250063@setvar! harvestMessageCooldown 250064@setvar! smeltHereMessageCooldown 250065 66# state67if not varexist waitForMana68    @setvar! waitForMana 069endif70 71if not varexist targetMana72    @setvar! targetmana 073endif74 75if not varexist forgeFailed76    @setvar! forgeFailed 077endif78 79if not varexist noNodeNearby80    @setvar! noNodeNearby 081endif82 83if not varexist isHarvesting84    @setvar! isHarvesting 085endif86 87if not varexist currentDelay88    @setvar! currentDelay 089elseif currentDelay < 090    @setvar! currentDelay 091elseif currentDelay > 6000092    @setvar! currentDelay 093endif94 95# technical96@setvar! printDiagnostics 197 98@setvar! processLoopTick 5099@setvar! delayTick 50100 101@setvar! postMarkDelay 2500102@setvar! postRecallDelay 2500103@setvar! postHouseEntryDelay 2500104@setvar! postCastDelay 500105@setvar! postHarvestDelay 100106 107@setvar! noNodeNearbyDelay 750108@setvar! travelDelay 1000109@setvar! townDelay 1000110@setvar! waitDelay 500111@setvar! successfulHarvestAttemptDelay 100112@setvar! stationaryDelay 150113 114 115@setvar! minWait 100116 117# object ids118 119@setvar! pickaxe 3718120@setvar! ore 6585121@setvar! ingot 7154122 123# materials setup124@setvar! iron 0125@setvar! dullCopper 2419126@setvar! shadow 2406127@setvar! copper 2413 128@setvar! bronze 2418129@setvar! gold 2213130@setvar! rose 2425131@setvar! agapite 2425132@setvar! verite 2207133@setvar! valorite 2219134@setvar! avarite  1763135 136if not listexists materialHueList137    createlist materialHueList138 139    pushlist materialHueList iron140    pushlist materialHueList dullCopper141    pushlist materialHueList shadow142    pushlist materialHueList copper143    pushlist materialHueList bronze144    pushlist materialHueList gold145    pushlist materialHueList rose146    pushlist materialHueList agapite147    pushlist materialHueList verite148    pushlist materialHueList valorite149    pushlist materialHueList avarite150endif151 152# timer setup153if not timerexists 'delayTimer'154    createtimer 'delayTimer'155endif156 157if not timerexists 'allGuardTimer'158    createtimer 'allGuardTimer'159endif160 161if not timerexists 'moveMessageTimer'162    createtimer 'moveMessageTimer'163    settimer 'moveMessageTimer' 'moveMessageCooldown'164endif165 166if not timerexists 'harvestMessageTimer'167    createtimer 'harvestMessageTimer'168    settimer 'harvestMessageTimer' 'harvestMessageCooldown'169endif170 171if not timerexists 'smeltHereMessageTimer'172    createtimer 'smeltHereMessageTimer'173    settimer 'smeltHereMessageTimer' 'smeltHereMessageCooldown'174endif175 176if not timerexists 'stationaryMessageTimer'177    createtimer 'stationaryMessageTimer'178    settimer 'stationaryMessageTimer' 'stationaryMessageCooldown'179endif180 181if not timerexists 'travelMessageTimer'182    createtimer 'travelMessageTimer'183    settimer 'travelMessageTimer' 'travelMessageCooldown'184endif185 186if not timerexists 'waitMessageTimer'187    createtimer 'waitMessageTimer'188    settimer 'waitMessageTimer' 'waitMessageCooldown'189endif190 191if not timerexists 'townMessageTimer'192    createtimer 'townMessageTimer'193    settimer 'townMessageTimer' 'townMessageCooldown'194endif195 196# auto smelt setup197if enableAutoSmelt = 1 and not varexist returnRune198    overhead 'Choose a return rune for auto smelting' 7199    setvar! returnRune200    201    if returnRune = 0202        overhead 'Need a valid return rune - aborting' 32203        stop204    endif205endif206 207### SCRIPT EXECUTION ###208while casting 209    overhead 'Casting' 7210    wait minWait211endwhile212 213# mana recovery - used to achieve target mana while maintaining PK awareness214if waitForMana = 1215    if useMeditation = 1 and not findbuff 'meditating'216        skill 'meditation'217    endif218    219    while mana < targetMana220        if enableRecall = 1 and mana >= 11221            if insysmsg 'Now tracking' or insysmsg 'Distance'222                say '[recall Home'223                wait 50224                say 'Peace!'225                stop226            endif227        endif228    229        wait minWait230    endwhile231    232    @setvar! waitForMana 0233endif234 235 236# delay timer - used to schedule execution ticks while maintaining PK awareness237if timer delayTimer < currentDelay238    if printDiagnostics = 1239        overhead "Delaying: {{currentDelay}}"240    endif241 242    while timer delayTimer < currentDelay243        if enableRecall = 1244            if insysmsg 'Now tracking' or insysmsg 'Distance'245                if mana < 11                    246                    overhead 'You let your mana get too low!' 32247                    @setvar! waitForMana 1248                    @setvar! targetMana 11249                    loop250                endif251    252                say '[recall Home'253                wait 50254                say 'Peace!'255                stop256            endif257        endif258        259        wait delayTick260    endwhile261endif262 263# recall to safety264if enableRecall = 1265    if insysmsg 'Now tracking' or insysmsg 'Distance'266        if mana < 11                    267            overhead 'You let your mana get too low!' 32           268            @setvar! waitForMana 1269            @setvar! targetMana 11270            loop271        endif272    273        say '[recall Home'274        stop275    endif276endif277 278clearsysmsg279 280# auto-smelt281if diffweight <= weightThreshold and enableAutoSmelt = 1282    # wait for mana to cast mark + recall283    if mana < 31284        overhead 'Regening mana for autosmelt' 7285        @setvar! waitForMana 1286        @setvar! targetMana 31287        loop288    endif289    290    overhead 'Autosmelting' 7291    292    cast 'mark'293    wft 5000294    target returnRune295    wait postMarkDelay296 297    say '[recall forge'298    wait postRecallDelay299    300    foreach mat in materialHueList301        if findtype ore backpack mat as orePile302            dclick orePile303            wait 250304        endif305    endfor306    307    if enableAutoDropoff = 1308        # we don't use our mana loop here since we are assuming the forge is in a safe location309        if mana < 11310            overhead 'Waiting for mana...' 7311            if useMeditation = 1312                skill 'meditation'313            endif314        315            while mana < 11316                wait minWait317            endwhile318        endif319    320        say '[recall home'321        wait postRecallDelay322    323        say 'room'324        waitforgump 2393832411325        # enter inn room326        if useHardCodedRooms = 1327            if name = 'ChopChopperChop'328                gumpresponse 4329            elseif name = 'ChopChopOnTheWay'330                gumpresponse 6331                waitforgump 2393832411332                gumpresponse 100333            elseif name = "ChoppityChopChop"334                gumpresponse 5335                waitforgump 2393832411336                gumpresponse 100337            endif338        else339            if myRoom = 1340                gumpresponse 4341            else342                if accountOwnsRoom = 1343                    gumpresponse 6344                else345                    gumpresponse 5346                endif347                waitforgump 2393832411348                349                if useCustomRoomIndex = 1350                    gumpresponse customRoomIndex351                else352                    if coOwnRoomIndex = 0353                        gumpresponse 100354                    elseif coOwnRoomIndex = 1355                        gumpresponse 101356                    elseif coOwnRoomIndex = 2357                        gumpresponse 102358                    elseif coOwnRoomIndex = 3359                        gumpresponse 103360                    elseif coOwnRoomIndex = 4361                        gumpresponse 104362                    elseif coOwnRoomIndex = 5363                        gumpresponse 105364                    else365                        overhead 'Room index out of range'366                        stop367                    endif368                endif369            endif370        endif371        372        wait postHouseEntryDelay373        374        foreach mat in materialHueList375            while findtype ingot backpack mat as ingotPile376                lift ingotPile 10000377                drop autoDropoffContainer -1 -1 -1378                wait 500379            endwhile380        endfor381    endif382    383    # no mana loop here since we are safely in our room384    if mana < 72385        overhead 'Waiting for mana' 7386        if useMeditation = 1387            skill 'meditation'388        endif389    390        while mana < 72391            wait 500392        endwhile393    endif394    395    cast 'recall'396    wft 5000397    target returnRune398    wait postRecallDelay399    loop400endif401 402# pause for world save403if insysmsg 'world is saving'404    for 120405        overhead 'Waiting for Save' 7406        wait 250407        if insysmsg 'save complete'408            overhead 'Save Finished' 7409            clearsysmsg410            loop411        endif412    endfor413endif414 415# turn on tracking416if not findbuff 'tracking'417    overhead 'Starting Tracking' 7418    useskill 'tracking'419    while not gumpexists 4267467659420        wait 100421    endwhile422    423    # set to track all hostiles424    while not insysmsg "You will now hunt all hostile players."425        gumpresponse 8 4267467659426        waitforgump 4267467659 5000427    endwhile428    429    gumpresponse 6 4267467659430    wait 1000431    gumpclose 4267467659432    clearsysmsg     433endif434 435 436# summon protection437if enableSummons = 1438    if followers < 1 439        if mana < minManaToSummon440            @setvar! waitForMana 1441            @setvar! targetMana minManaToSummon442            loop443        else444            cast 'Earth Elemental'445            wait summonCastTime446            say 'All Guard Me' 7447            settimer 'allGuardTimer' 0448        endif449    endif450endif451 452if enableSummons = 1 and timer 'allGuardTimer' >= allGuardCooldown453    settimer 'allGuardTimer' 0454    say 'All Guard Me' 7455endif456 457 458# cast protective spells459if useBless = 1 460    if not findbuff 'strength' or not findbuff 'agility' or not findbuff 'cunning'461        if mana < 20462            @setvar! waitForMana 1463            @setvar! targetMana 20464            loop465        endif466        467        cast 'Bless'468        wft 5000469        target self470        wait postCastDelay471    endif472endif473 474# todo: will not adhere475if useMagicReflect = 1 and not findbuff 'Magic Reflection'476    if mana < 25477        @setvar! waitForMana 1478        @setvar! targetMana 25479        loop480    endif481    482    cast 'Magic Reflection'483    wait 1500484    wait postCastDelay485endif486 487if useReactiveArmor = 1 and not findbuff 'Reactive Armor'488    if mana < 15489        @setvar! waitForMana 1490        @setvar! targetMana 15491        loop492    endif493    494    cast 'Reactive Armor'495    wait 500496    wait postCastDelay497endif498 499if useProtection = 1 and not findbuff 'Protection'500    if mana < 17501        @setvar! waitForMana 1502        @setvar! targetMana 17503        loop504    endif505    506    cast 'Protection'507    wait 750508    wait postCastDelay509endif510 511# equip tool512if rhandempty == 1513    if findtype pickaxe backpack as pick514        dclick pick515        wait 150516    else517        overhead 'No Pick!' 32518        wait 1000519        loop520    endif521endif522 523 524# look for a forge525if enableLocalSmelt = 1526    if findtype 'forge' ground -1 -1 12 as forge527        if timer 'smeltHereMessageTimer' >= 'smeltHereMessageCooldown'528            overhead "Smelt Here" 53 forge529            settimer 'smeltHereMessageTimer' 0530        endif531    endif532    533    if findtype 'forge' ground -1 -1 2534        while findtype ore as orePile535            dclick orePile536        endwhile537    endif538endif539 540 541# mine ore542hotkey 'Use item in hand'543wait postHarvestDelay544 545#process result546for 10547    if printDiagnostics = 1548        overhead "Process Loop: {{index}}"549    endif550    551    # recall to safety552    if enableRecall = 1553        if insysmsg 'Now tracking' or insysmsg 'Distance'554            if mana < 11                    555                overhead 'You let your mana get too low!'                556                if useMeditation = 1557                    skill 'meditation'558                endif559                while mana < 11560                    wait 100561                endwhile562            endif563        564            say '[recall Home'565            wait 50566            say 'Peace!'567            stop568        endif569    endif570 571    # pause for world save572    if insysmsg 'world is saving'573        for 120574            overhead 'Waiting for Save' 88575            wait 100576            if insysmsg 'save complete'577                overhead 'Save Finished' 88578                clearsysmsg579                loop580            endif581        endfor582    endif583    584    # keep pet guarding585    if enableSummons = 1 and timer 'allGuardTimer' >= allGuardCooldown586        settimer 'allGuardTimer' 0587        say 'All Guard Me' 1588    endif589 590    # process harvest result591    # no nearby node592    if insysmsg 'You do not see any harvestable'593        if printDiagnostics = 1594            overhead 'No Node'595        endif596    597        if timer 'moveMessageTimer' >= 'moveMessageCooldown'598            overhead 'Move To Next Spot' 32599            overhead 'Move To Next Spot' 32600            settimer 'moveMessageTimer' 0601        endif602        603        @setvar! noNodeNearby 1604        @setvar! isHarvesting 0605        606        settimer delayTimer 0607        @setvar! currentDelay noNodeNearbyDelay608        loop609    # recently traveled610    elseif insysmsg 'stationary penalty'611        if printDiagnostics = 1612            overhead 'Stationary Penalty'613        endif614    615        if timer 'stationaryMessageTimer' >= 'stationaryMessageCooldown'616            overhead 'Move 5 Tiles' 32617            settimer 'stationMessageTimer' 0618        endif619        620        @setvar! isHarvesting 0621        settimer delayTimer 0622        @setvar! currentDelay stationaryDelay623        loop624        elseif insysmsg 'travel' or insysmsg 'teleport'625        if timer 'travelMessageTimer' >= 'travelMessageCooldown'626            overhead 'Wait For Travel/Teleport' 7627            settimer 'travelMessageTimer' 0628        endif629        630        @setvar! isHarvesting 0631        settimer delayTimer 0632        @setvar! currentDelay travelDelay633        loop634    # unspecified delay635    elseif insysmsg 'You must wait'636        if printDiagnostics = 1637            overhead 'Must Wait'638        endif639    640        if timer 'waitMessageTimer' >= waitMessageCooldown641            overhead 'Waiting' 7642            settimer 'waitMessageTimer' 0643        endif644        645        @setvar! isHarvesting 0646        settimer delayTimer 0647        @setvar! currentDelay waitDelay648        loop649    # in town650    elseif insysmsg 'harvesting is not allowed'651        if printDiagnostics = 1652            overhead 'In Town'653        endif654        655        if timer 'townMessageTimer' >= 'townMessageCooldown'656            overhead 'Move Out of Town' 32657            settimer 'townMessageTimer' 0658        endif659    660        @setvar! isHarvesting 0661        settimer delayTimer 0662        @setvar! currentDelay townDelay663        loop664    # successful harvest attempt665    elseif insysmsg 'you loosen some' or insysmsg 'you dig some' or insysmsg 'you hack' or insysmsg  'you chop'666        if printDiagnostics = 1667            overhead 'Harvest Attempt Made'668        endif669    670        if noNodeNearby = 1 and isHarvesting = 0671            overhead 'Good spot!' 52672        elseif timer 'harvestMessageTimer' >= 'harvestMessageCooldown'673            overhead 'Harvesting' 74674            settimer 'harvestMessageTimer' 0675        endif676    677        @setvar! noNodeNearby 0678        @setvar! isHarvesting 1679        680        settimer delayTimer 0681        @setvar! currentDelay successfulHarvestAttemptDelay682        loop683    endif684    685    wait processLoopTick686endfor687if printDiagnostics = 1688    sysmsg 'Did not find matching system message before timeout'689endif690loop