• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->
  • EverQuest (live servers) were patched today so brainiac is spending his evening updating MacroQuest. Please show him your appreciation.
Brell's Bounty Harvester

Utility Brell's Bounty Harvester 2.0

Download now:  Join us with Level 2 access or earn your way in with  RedCents.
Other Authors
ArmySoldier
Software Requirements
BrellsShrooms.ini
CommonSubs.inc
Server Type
🏢 Live Test
This macro runs around Brell's Rest and picks up a ground spawn named Brell's Bounty.
It picks up 23 of them in just a few minutes,
the only downside is they have a 60 minute respawn.
The macro will end if you leave the zone, for whatever reason (death, gate, etc ....)


Required files:
BrellsShrooms.mac
BrellsShrooms.ini
common/CommonSubs.inc(place CommonSubs.inc inside a folder called common in the macros folder)

The macro starts and ends in the area to the right of the zonein.
I suggest checking the zone for PCs in the central area of the zone.
Invis up (permanent type, unless you are brave)and start macro.
(has only been tested with a sneak/hide rogue)

It calls a GM/PC check before every movement, but I'm ot sure it would be wise to make this full AFK.

It's not pretty, but is does work, hehe. Tweaks and improvements are always welcome.


BrellsShrooms.mac

Rich (BB code):
| BrellsShrooms.mac by Randyleo

| CommonSubs, ReadINIA, and movement routines by ArmySoldier
| Movement array and Pickup routine by Randyleo

| This macro runs around Brell's Rest and picks up a ground spawn named Brell's Bounty.
| It picks up 23 of them in just a few minutes,
| the only downside is they have a 60 minute respawn.


| Required files:
| BrellsShrooms.mac
| BrellsShrooms.ini
| common/CommonSubs.inc(place CommonSubs.inc inside a folder called common in the macros folder)

| The macro starts and ends in the area to the right of the zonein.
| I suggest checking the zone for PCs in the central area of the zone.
| Invis up (permanent type, unless you are brave)and start macro.
| (has only been tested with a sneak/hide rogue)

| It calls a GM/PC check before every movement.


#include common/CommonSubs.inc

Sub Main

    /declare Filename string outer BrellsShrooms.ini

| -------------------------------------------------------------------------------------
| Check if required plugins are loaded        Stolen from KissAssist
| -------------------------------------------------------------------------------------
    /echo Checking Plugins...
    /call CheckPlugin MQ2Moveutils
    /call CheckPlugin MQ2Posse

  
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Call Read INI for locations array        Stolen from ArmySoldiers Tradeskill macs
|
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    /call ReadINIA ${Filename} "Brell's Rest"
        /if (!${Defined[LocArray]}) {
            /echo No Loc Array Created...
        /endmacro
    }
| ----------------------------------------------------------
| Main section
| ----------------------------------------------------------


    /if (${Zone.ID}!=480) {
        /echo You must be in Brell's Rest before starting this macro.
        /end
    }
    /call CheckGM
        /delay 5s
    /call Movement 1 1
    /call Pickup
    /call CheckGM
    /call Movement 1 2
    /call Pickup
    /call CheckGM
    /call Movement 2 3
    /call Pickup
    /call CheckGM
    /call Movement 3 5
    /call Pickup
    /call CheckGM
    /call Movement 5 6
    /call Pickup
    /call CheckGM
    /call Movement 6 7
    /call Pickup
    /call CheckGM
    /call Movement 7 8
    /call Pickup
    /call CheckGM
    /call Movement 8 10
    /call Pickup
    /call CheckGM
    /call Movement 10 12
    /call Pickup
    /call CheckGM
    /call Movement 12 14
    /call Pickup
    /call CheckGM
    /call Movement 14 15
    /call Pickup
    /call CheckGM
    /call Movement 15 19
    /call Pickup
    /call CheckGM
    /call Movement 19 20
    /call Pickup
    /call CheckGM
    /call Movement 20 21
    /call Pickup
    /call CheckGM
    /call Movement 21 23
    /call Pickup
    /call CheckGM
    /call Movement 23 26
    /call Pickup
    /call CheckGM
    /call Movement 26 27
    /call Pickup
    /call CheckGM
    /call Movement 27 28
    /call Pickup
    /call CheckGM
    /call Movement 28 29
    /call Pickup
    /call CheckGM
    /call Movement 29 30
    /call Pickup
    /call CheckGM
    /call Movement 30 31
    /call Pickup
    /call CheckGM
    /call Movement 31 33
    /call Pickup
    /call CheckGM
    /call Movement 33 34
    /call Pickup
    /call CheckGM
    /call Movement 34 35
    /call Pickup
    /call CheckGM
    /call Movement 35 36
    /call Pickup
    /call CheckGM
    /call Movement 36 38
    /face loc -539.10,-57.03
        /delay 5s

/return

| ---------------------------------------------
| Pickup Sub            by Randyleo
| ---------------------------------------------

Sub Pickup
        /autoinventory
    /squelch /itemtarget "Brell's Bounty"
            /delay 3
        /squelch /click left item
            /delay 2
        /autoinventory
            /delay 2
        /autoinventory

    /delay 2

/return

| ----------------------------------------------------------------------------
| SUB: CheckGM
| ----------------------------------------------------------------------------

Sub CheckGM
    /declare GMPCEchoed    bool local 0
  
    :ReCheck
    /doevents
    /if (!${AFKToolsOn}) {
        /squelch /posse load
        /if (${Bool[${Spawn[gm].ID}]}) {
            /if (!${GMPCEchoed}) {
                /echo A GM or Guide has been detected in the zone, pausing macro until zone is clear.
                /varset GMPCEchoed 1
            }
            /delay 600s
            /goto :ReCheck
        }
      
        /if (${Posse.Strangers}>=1) {
            /if (!${GMPCEchoed}) {
                /echo Another player is nearby, pausing macro until they leave.
                /varset GMPCEchoed 1
            }
            /delay 60s
            /goto :ReCheck
        }
    }
    /varset GMPCEchoed 0
/return

| ----------------------------------------------------------------------------
| SUB: Check Plugin        Stolen from KissAssist
| ----------------------------------------------------------------------------

Sub CheckPlugin(string pluginname)

    /if (!${Bool[${Plugin[${pluginname}]}]}) {
        /squelch /plugin ${pluginname}
        /echo ${pluginname} not detected! This macro requires it! Loading ...
    }
/return


BrellsShrooms.ini
Rich (BB code):
[Brell's Rest]
Value=38
Loc1=-545.09,-64.51
Loc2=-492.14,55.72
Loc3=-483.35,66.70
Loc4=-501.16,26.51
Loc5=-441.78,-38.43
Loc6=-268.00,49.38
Loc7=-205.20,46.06
Loc8=-256.07,-103.44
Loc9=-226.68,-174.40
Loc10=-56.26,-279.38
Loc11=-60.40,-97.07
Loc12=-61.56,36.20
Loc13=-83.15,259.12
Loc14=-140.03,516.45
Loc15=-20.97,523.75
Loc16=-184.78,493.25
Loc17=-513.47,597.37
Loc18=-588.03,489.22
Loc19=-760.72,548.50
Loc20=-677.70,421.13
Loc21=-641.18,449.48
Loc22=-485.17,569.39
Loc23=-387.96,530.92
Loc24=-365.30,567.69
Loc25=-134.59,446.95
Loc26=-126.84,282.41
Loc27=-252.74,216.20
Loc28=-311.07,297.83
Loc29=-471.48,143.15
Loc30=-497.41,157.68
Loc31=-603.31,270.83
Loc32=-587.00,214.11
Loc33=-639.44,79.86
Loc34=-620.41,59.47
Loc35=-619.60,27.19
Loc36=-631.00,-52.02
Loc37=-608.60,-75.14
Loc38=-597.62,-73.32


CommonSubs.inc

Rich (BB code):
|
| CommonSubs.inc
|
| 1 APR 2006: fixed Clear cursor
|             fixed the EVENT Container in use
|             fixed The NEW UI - Favorite recipe selection
|
| 26 MAR 2006: Moved Salvage and Readini Sub to here
|              Changed some redundant coding
|              Changed clear cursor to A_Druid_00 clear cursor code
|              Added /nomodkey to all /notify statements
|
#event CombineError "#*#There was no place to put that#*#"
#event CombineError "#*#You cannot combine these items in this container type!#*#"
#event CombineError "#*#did not accept these items#*#"
#event CombineError "#*#You are missing#*#"
#event Advance "#*#You can no longer advance #*#"
#event ContUsed "#*#Someone else is using that. Try again later.#*#"
#event End "#*#can not afford#*#"
#Event Skillup "#*#become better at#*#"
#Event Salvage "You failed the combine, but you managed to recover #*#"


|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Type input string "Recipe" into search box in new tradeskill interface,
| click search and select the first recipe returned in the search results.
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub ChooseRecipe
         /delay 1s
         /nomodkey /notify TradeskillWnd COMBW_SearchTextEdit leftmouseup
         /delay 5
         /echo Searching for Recipe
         /call Type "${ItemTo}"

|--- First Check to see if Recipe is in favorites

       /nomodkey /notify TradeskillWnd COMBW_RecipeList listselect ${Window[TradeskillWnd].Child[COMBW_RecipeList].List[${ItemTo}]}
       /delay 2

           /varset Checkrecipe ${Window[TradeskillWnd].Child[COMBW_RecipeList].List[${ItemTo}]}

|--- Its not in Favorites.. so lets type it in and do a search
      /if (!${Checkrecipe}) {

           /delay 8s
           /nomodkey /notify TradeskillWnd COMBW_SearchButton leftmouseup
           /delay 10
       /nomodkey /notify TradeskillWnd COMBW_RecipeList listselect ${Window[TradeskillWnd].Child[COMBW_RecipeList].List[${ItemTo}]}
       /delay 2
           /varset Checkrecipe ${Window[TradeskillWnd].Child[COMBW_RecipeList].List[${ItemTo}]}

|--- Search could not find it either so lets do a old school combine
           /if (!${Checkrecipe}) {
                /nomodkey /notify TradeskillWnd COMBW_ExperimentButton leftmouseup
               /varset NewUI 2
               /call OLDUICOMBINE
               /nomodkey /notify ${PackCode} Container_DoneButton Leftmouseup
               /return
               } else {
                     /call DoCombine
                     }
        } else {
              /call DoCombine
              }
    /nomodkey /notify TradeskillWnd COMBW_CloseButton Leftmouseup
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Type out the input string. 
|
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sub Type(InStr)
   /echo trying to enter Recipe Desired
   /declare char string local
   /declare loopctr int local
   /for loopctr 1 to ${InStr.Length}
      /varset char ${InStr.Mid[${loopctr},1]}
      /if (!${char.Length}) {
         /nomodkey /keypress space chat
      } else {
         /nomodkey /keypress ${char} chat
      }
   /next loopctr
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub DoCombine
|
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub DoCombine
        /call ClearCursor
    :Loop
    /nomodkey /notify TradeskillWnd CombineButton leftmouseup
        /delay 2s ${Cursor.ID}
        /call ClearCursor

          /doevents
        /delay 2
      /if (${EndingVar}==1) /goto :Loop
      /varset EndingVar 1

    /return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Clear Cursor
|
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub ClearCursor
/declare x int local
:auto_inv
/if (${Cursor.ID}) {
  /if (${Cursor.Container}) {
    /for x 1 to 10
    /if (!${InvSlot[pack${x}].Item.Container}) /nomodkey /itemnotify pack${x} leftmouseup
    /next x
  } else {
    /timed 5 /autoinventory
  }
  /goto :auto_inv
}
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub OLD UI COMBINE
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub OLDUICOMBINE
   /echo recipe not found yet .. Going old school

   /call OpenPacks
   /call cleanPack "${Container}"

    :Begin
       /doevents
       /if (${EndingVar}==1) {
       /call ClearCursor
       /for i 1 to 10
       /call AddComp "${Component[${i}]}" ${i}
       /next i
       /delay ${Math.Calc[${DelayMult}*1]}s
       /call OldDoCombine
       /doevents
       /goto :Begin
}
/return


|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Movement Sub
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sub Movement(Start,Finish,Door)
  /declare Location int inner

    /if (${Zone.ID}!=480) {
        /echo You are no longer in Brell's Rest, ending macro.
        /end
    }
    /call CheckGM
  
  /for Location ${Start} to ${Finish}
     :MoveLoop
     /face nolook loc ${LocArray[${Location}]}
     /if (${Math.Distance[${LocArray[${Location}]}]}>4) {
        /nomodkey /keypress forward hold
        /face nolook loc ${LocArray[${Location}]}

        /if (${Location}==${Door}) {
        /nomodkey /keypress USE
        /nomodkey /keypress USE
         }
     }
     /if (${Math.Distance[${LocArray[${Location}]}]}<=4) {
        /nomodkey /keypress forward
        /goto :next
     }
     /goto :MoveLoop
     :next
  /next Location
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Add Components
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub AddComp(CompName, PackSlot)
   /if (${CompName.Equal[NOTFOUND]}) /return

   /if (!${FindItem[=${CompName}].ID}) {
      /echo Could not find ${CompName} in inventory
      /beep
      /varset EndingVar 2
      /return
    }

   :Loop
      /nomodkey /ctrl /itemnotify ${FindItem[=${CompName}].InvSlot} leftmouseup

      /if (!${Cursor.ID}) {
         /delay ${Math.Calc[${DelayMult}*1]}s
         /goto :Loop
      }

   /if (${PackCode.Equal[Enviro]}) {
      /nomodkey /itemnotify ${InvSlot[enviro${PackSlot}]} leftmouseup
   } else {
      /nomodkey /itemnotify in ${PackCode} ${PackSlot} leftmouseup
   }
   /doevents  
   /return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Do the Combine
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sub OldDoCombine
/combine ${PackCode}
/doevents
/delay ${Math.Calc[${DelayMult}*1]}s
/delay 5s ${Cursor.ID}
/Call ClearCursor
/doevents
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Read INI file for Loc array
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sub ReadINIA(FileName,SectionName)
    /echo Attempting to Read Section "${SectionName}" Zone Information from ${FileName}...
    /if (${Ini[${FileName},${SectionName}].Count[|]}==0) {
        /echo "${SectionName}" is not a Valid Section for FILE:${FileName}, ending macro...
        /return
    }
   }
   /declare nValues     int local
   /declare nArray      int local  0

|~~~~~~~~~~~~~~~~~~~~~~ Locs ~~~~~~~~~~~~~~~~~
   /Varset nValues ${Ini[${FileName},${SectionName},Value]}
|   /echo ${nValues} Locs
   :MakeArraylo
   /if (!${nValues}) /return
   /if (${nValues}) {
|      /echo Declaring Loc Array...
      /declare LocArray[${nValues}]  string outer
   }
   /for nArray 1 to ${nValues}
      /varset LocArray[${nArray}] ${Ini[${FileName},${SectionName},Loc${nArray}]}
|      /echo  loc ${nArray} defined ${LocArray[${nArray}]}

   /next nArray



   /echo "${SectionName}" Zone Information Read Successfully from ${FileName}...

/return


|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Event Container being used
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Event_ContUsed
/echo Container in use. Waiting 1 Minute, or until no PCs are nearby and trying again.
/delay 1m ${SpawnCount[pc radius 50]}<=1
/doevents
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Event Combine error
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Event_CombineError
    /varset EndingVar 2
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Event End
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Event_End
    /call Ending
/return

Sub Ending
    /echo macro ending
    /end
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub READ Ini File
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub ReadIni(RecipeName)

    /echo Running ${RecipeName} recipe

   /if (${Ini[${Filename},${RecipeName}].Count[|]}==0) {
        /echo Recipe ${RecipeName} not found
        /endmacro
    }

   /varset Container ${Ini[${Filename},${RecipeName},Cont,Enviro]}

   /if (${Container.Equal[Enviro]}) {
        /varset PackCode Enviro
   } else {
        /varset PackCode ${FindItem[=${Container}].InvSlot}
     
      /if (${PackCode.Equal[NULL]}) {
         /echo Could not find container ${Container}
         /varset EndingVar 2
         /return
      }
      | pack1 = 22, ... , pack10 = 31
      /varset PackCode pack${Math.Calc[${PackCode}-22].Int}
   }

    /for i 1 to 10
        /varset Component[${i}] ${Ini[${Filename},${RecipeName},Comp${Math.Calc[${i}-1].Int},NOTFOUND]}

    /next i
    /return


|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Event Salvage
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub Event_Salvage

        /if (${NewUI}==2) /call cleanPack "${Container}"

/return
Author
Randyleo
First release
Last update
Rating
0.00 star(s) 0 ratings

Share this resource

Back
Top