Compatibility unverified
This community Razor script has not been tested in game by the Hub. Read its setup and client requirements before use.
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