• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Question - Brell's Boomerang

milfman

Member
Joined
Dec 17, 2006
RedCents
135¢
I am trying to get some gold tokens in this event, and apparently I am sucking so bad, all I get is 14 silver tokens in the end. I am 3 boxing this, well mostly just bringing in the other two mandatory characters, and focusing on the character I want the gold tokens on, but damn, I suck.

Does anyone have any tips for a fellow player?
 
I have a Brell's Boomerang macro that will run 3 toons through it until you stop it. It requires MQ2EQBC server/client are you familiar with setting it up?
 
It requires MQ2EQBC server/client are you familiar with us9ng/setting it up?
 
I will post it. I have to write up instructions because it is one of my most advanced macros.
 
This macro was written over and combining a couple of other boomerang macros that were out there with extensive rewrites. None of them ran the mission from start to to stop or ran multiple groups. I made this macro to farm silver tokens back during Underfoot. I ran 9 toons in 3 groups on the same 3 accounts. It would login in one group then go through the mission log them out and login the next group to maximize the time from the 35 min lockout. So basically it ran 3 separate groups an hour and I was getting thousands of Silvers Tokens a day.

I only let a few trusted friends have this macro back then because I didn't want to ruin the silver Token economy on my and other servers.

The macro uses no active hacks. It does not guarantee 1st, 2nd or 3rd place to anyone but it almost always places the 3 toons in those spots. You just keep letting it run and eventually everyone will get enough gold to get their weapon.

Requires MQ2EQBC server and plugin. I am not really up to explaining how to set up and use it for those that never have. Basics are
1. From your MacroQuest2 or Release folder open/start MQ2EQBCS.exe
2. When your have EQ open with MQ2 running type /plugin mq2eqbc
3. If you don't see the mq2eqbc window then type in /bccmd toggle window
4. Also a useful command /bccmd toggle autoconnect

It also uses MQ2Advpath
The advpath file is attached below but you need to create and place in the correct folder.
1. In your macroquest2 root or release folder create a new folder called MQ2AdvPath
2. Save or copy the brellsrest.ini into that folder so the location would be something like C:/Release/MQ2AdvPath/brellsrest.ini
3. When your have EQ open with MQ2 running type /plugin MQ2advpath

Macro instructions
1. Save the boomerang mac to your macro folder.
2. Open the macro in your fav editor and edit the following variables.
Rich (BB code):
    /declare NumberOfGroups            int     outer     1
    | - Group 1
    /declare Group1Member1              string     outer    Toon1Name
    /declare Group1Member2              string     outer    Toon2Name
    /declare Group1Member3              string     outer    Toon3Name

3. Save the mac
4. Have your 3 toons standing around and near the Boomerang entrance in Brells rest.
5. From the character you named on the macro as Toon1 type in /mac boomerang Toon1Name

Rich (BB code):
|** ------------------------------------------------------

BOOMERANG.mac edited, revised and endless by Maskoi 8/03/2010

Main sub by jlm462, 12/2009
Task Get/Run/ETC by meta53 12/22/ 09
with contributions from Ralindal and dascott

    Required Plugins:    MQ2MoveUtils, MQ2AdvPath, MQ2EQBC
                        Spell_Routines.inc
    
    Usage: From the requesting toon... 
           /mac boomerang TASKLEADER
------------------------------------------------------------- **|

    #turbo 40

    #Event Ended                     "#*#The results of the contest are as follows#*#"
    #Event DoShroud                 "<#1#> Get your shroud!#*#"
    #Event TaskTimeWait             "#*#You may not request this shared task because you must wait#*#"
    #Event Assigned                 "#*#You have been assigned#*#"
    #Event TaskTimeLeft             "You may not request this shared task because you must wait #1#d:#2#h:#3#m#*#"
    #Event WaitToCamp                "<#1#> Prepare to camp out."
    #Event Zoned                    "You have entered#*#"
    #Event CampOut                    "#*#Time to camp out.#*#"
    #Event Winners                    "#*# #1# : #2# with #3# points"
    #Event Score-5                    "YOU were injured by falling"
    #Event Score-1                    "A boomerang hits you in the face!"
    #Event DiedFalling                "#*#200000#*#"
    
Sub Main

    /declare NumberOfGroups            int     outer     1
    | - Group 1
    /declare Group1Member1              string     outer    Toon1
    /declare Group1Member2              string     outer    Toon2
    /declare Group1Member3              string     outer    Toon3
    | - Group 2
    /declare Group2Member1              string     outer    Toon4
    /declare Group2Member2              string     outer    Toon5
    /declare Group2Member3              string     outer    Toon6
    | - Group 3
    /declare Group3Member1              string     outer    Toon7
    /declare Group3Member2              string     outer    Toon8
    /declare Group3Member3              string     outer    Toon9
    
    /declare MainRequester              string     outer     
    /declare MobTemplate                int     outer     
    /declare DoorX                      int     outer     -236
    /declare DoorY                      int     outer     -561
    /declare TimeWait                   string     outer     0m
    /declare WaitForTask                string     outer     5m
    /declare ShroudCalled               bool     outer     FALSE
    /declare GotTask                    bool     outer     FALSE
    /declare DoorRadius                 int     outer     80
    /declare GroupMember0               string     outer
    /declare GroupMember1               string     outer
    /declare GroupMember2               string     outer
    /declare TimeWaiting                int     outer     0
    /declare CharSelectTimer            timer     outer     0m
    /declare ZoneTimer                  timer     outer     7m
    /declare MatchTimer                 timer     outer     0
    /declare MatchOver                  bool     outer    FALSE    
    /declare WaitingToCamp              bool     outer    FALSE
    /declare TimeToCamp                 bool     outer    FALSE
    /declare CurrentZone                int        outer     ${Zone.ID} 
    /declare CharSwitched               bool     outer    FALSE
    /declare strafedir                  string     outer
    /declare X2                         int     outer
    /declare Y2                         int     outer
    /declare SpawnID                    int     outer     0
    /declare BarrelID                   int     outer     0
    /declare BarrelDistance             int     outer     0
    /declare BarrelLocY                 int     outer     0
    /declare BarrelLocX                 int     outer     0
    /declare BarrelCount                int     outer     0
    /declare BarrelCountID              int     outer     0
    /declare BarrelMobID                int     outer     0
    /declare ScoreEcho                  string     outer    
    /declare ScoreNumber                int     outer    0
    /declare ClickCounter             int     outer     0
    
    /if (${Defined[Param0]})         /varset MainRequester ${Param0}
    /if (${Defined[Param1]})         /varset MobTemplate ${Param1}

    /call Plugins_Check
    
    /echo Starting Maskoi's Boomerang Macro
    
    :mainloop
        /doevents
        /call Guild_Lobby_Check
        
        | - Sub routine calls for Brell's Rest Zone.ID 480
        /if (${Zone.ID}==480) {
            /doevents
            /call Start_Task
            /call Task_Over
            /call Camp_Out
        }
        
        | - Sub routine calls for Brell's Arena Zone.ID 492
        /if (${Zone.ID}==492) {
            /doevents
            /call Close_Windows
            /call Trigger_Event
            /call Assign_Team_Color
            /call Start_Match
        }
    /goto :mainloop
    
/return

Sub Guild_Lobby_Check
    /if (${Zone.ShortName.Equal[GuildLobby]}) {
        /echo I am in guildlobby! Shutting my crap down!
        /call Camp_Group_End_Macro
    }
/return

Sub Start_Task
    /declare DoorWait string local
    /if (${MatchOver} || ${Zone.ID}==492) /return
    /varset ZoneTimer 7m
    /varset ScoreNumber             0
    /if (${Group}==0) /call Invite_Group
    | - Are you a requester? If so you should probably go get the mission
    /if (${Me.CleanName.Equal[${MainRequester}]} && !${GotTask}) {
        /varset MobTemplate 1
        /bct  ${Group.Member[1]} //mac boomerang ${MainRequester} 2
        /bct  ${Group.Member[2]} //mac boomerang ${MainRequester} 3
        /delay 1s
        /call Get_Event
        /delay 5s
        /doevents
        /echo Delaying 5s.
        /delay 5s
        /if (!${GotTask}) {
            /echo Have a timer still...
            /bc We still have some time left before I can get Task, waiting ${WaitForTask}m!
            /delay ${WaitForTask}m
            /return
        }

        /bc Get your shroud!
        /if (!${ShroudCalled}) /call Select_Shroud
        /echo Running ${Me.CleanName} to the event.
        /call Move_To_Event
        
    } else {
        
        /if ((${Math.Distance[${DoorX},${DoorY}]}>=${DoorRadius})) {
            | - close to gilbot, move to event
            /call Move_To_Event
        }
        
        /if (!${ShroudCalled}) /call Select_Shroud
        /varset DoorWait ${Math.Rand[20]}s
        
        | - OK! Mission Gotten! Now Let us Zone in and start up.
        /delay ${DoorWait}
        /call Move_To_Arena_Door
    }        
/return

Sub Select_Shroud
            :shroudWait
            /doevents
            
            /if (!${ShroudCalled}) {
                /delay 5s
                /goto :shroudWait
            }
            
            | - Time to select the template.
            /call Template_Select
            /echo Shroud Template Selected
/return

Sub Get_Event
    /squelch /target npc Gilbot the Magnificent
    /delay 1s
    /if (${Target.Distance}>20) {
        | - not close to gilbot, sigh
        /call Move_To_Gilbot
        /squelch /target npc Gilbot the Magnificent
    }
    /echo Requesting task from Gilbot the Magnificent
    /delay 3s
    /say specific
    /delay 2s
/return

Sub Move_To_Gilbot
    /echo Moving to Gilbot the Magnificent.
    
    /play arena_to_gilbot smart

    :MTGmovement
        /if (${AdvPath.State} == 2) {
            /delay 1s
            /goto :MTGmovement
        }
    /delay 2s
/return

Sub Move_To_Event
    /echo Moving To Brell's Arena entrance.

    /play arena_to_gilbot reverse smart
    
    :MTEmovement
        /if (${AdvPath.State} == 2) {
            /delay 1s
            /goto :MTEmovement
        }
    /delay 1s
/return

Sub Template_Select
    /bc Selecting ${MobTemplate}
    /delay 10
    | - Select Mob Template
    /if (${MobTemplate}==1) {
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 1
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 1
        /varset GroupMember0 ${Me.CleanName}
        /bc Banged on Option 1!

    } else /if (${MobTemplate}==2) {
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 2
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 2
        /varset GroupMember1 ${Me.CleanName}    
        /bc Banged on Option 2!
    } else /if (${MobTemplate}==3) {
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 3
        /delay 1s
        /varset GroupMember2 ${Me.CleanName}
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 3
        /bc Banged on Option 3!
    }
    /notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup 
    /delay 5s 
/return

Sub Move_To_Arena_Door
    /varset ClickCounter 0
    /echo Moving to arena door and zoning in.
    /moveto loc -242.12 -566.69
    :MoveToArenaDoor
        /if (${ClickCounter}<=5) /moveto loc -242.11 -576.13
        /if (${ClickCounter}>=6) /moveto loc -242.11 -556.13
        /call Open_Door
        /delay 1s
        /varcalc ClickCounter ${ClickCounter}+1
        /if (${Zone.ID}==480) /goto :MoveToArenaDoor
/return

Sub Open_Door
        /squelch /doortarget
        /delay 3
        /squelch /face door nolook
        /delay 3
        /keypress FIRST_PERSON_CAMERA hold
        /delay 2
        /keypress FIRST_PERSON_CAMERA
        /delay 4
        /keypress up hold
        /delay 2
        /keypress up
        /delay 2
        /keypress use hold
        /delay 2
        /keypress use
        /squelch /target clear
/return

Sub Trigger_Event
    /if (${MobTemplate}==1 && ${Spawn[Gilbot the Wary].ID}) {
        /call Count_Group
        /echo Triggering the Event
        
        :startevent
            /squelch /target npc Gilbot the Wary
            /delay 2s ${Target.ID}==${Spawn[Gilbot the Wary].ID}
            /if (${Spawn[Gilbot the Wary].ID}) {
                /moveto id ${Target.ID} loose
                /delay 1s 
                /say start
                /delay 1s
            }
        /if (${Spawn[Gilbot the Wary].ID}) /goto :startevent    
    }
/return

Sub Start_Match
        /if (${MatchOver}) /return
        /echo Match Starting
        /varset MatchTimer 8m
        /call Alert_Timer
        
    :boomerangloop
        /doevents
        /if (!${GotTask}) /return

        /call Stand_Up
        /call Assign_Targets
        /call Event_DiedFalling
        /varset BarrelMobID ${Target.ID}

        /if (!${Target.ID}) {    
            /call Alert_Timer
        } else {
        
            /call Move
            
|            /if ((${MobTemplate}==1 && ${MatchTimer}<=4800) || (${MobTemplate}==2 && ${MatchTimer}<=4200) || (${MobTemplate}==3 && ${MatchTimer}<=3900)) {
                | - Target mob throw Red Boomerang
                /if (${Target.Level}==89 && ${FindItemCount[=Red Boomerang]}>0) {
                    /if (${FindItem[Red Boomerang].Timer}) /call Move
                    /call Stand_Up
                    /face fast nolook
                    /cast item "Red Boomerang"
                    /cast item "Red Boomerang"
                    /varcalc ScoreNumber ${ScoreNumber}+1
                }
                
                | - Target mob throw Yellow Boomerang
                /if ((${Target.Level}==86 || ${Target.Level}==85) && ${FindItemCount[=Yellow Boomerang]}>0) {
                    /if (${FindItem[Yellow Boomerang].Timer}) /call Move
                    /call Stand_Up
                    /face fast nolook
                    /cast item "Yellow Boomerang"
                    /cast item "Yellow Boomerang"
                    /varcalc ScoreNumber ${ScoreNumber}+1
                }
                
                | - Target mob throw Blue Boomerang
                /if (${Target.Level}==84 && ${FindItemCount[=Blue Boomerang]}>0) {
                    /if (${FindItem[Blue Boomerang].Timer}) /call Move
                    /call Stand_Up
                    /face fast nolook
                    /cast item "Blue Boomerang"
                    /cast item "Blue Boomerang"
                    /varcalc ScoreNumber ${ScoreNumber}+1
                }
|            }
            /squelch /alert add 1 id ${Target.ID}
            /squelch /target clear
        }
    /if (${Zone.ID}==492) /goto :boomerangloop

/return

Sub Assign_Team_Color
        /if (${MatchOver}) /return
        /if (!${Defined[TeamColor]}) /declare TeamColor string outer NULL
        /if (${FindItemCount[=Red Boomerang]}>0 && ${FindItemCount[=Yellow Boomerang]}>0) {
            /varset TeamColor BLUE
            /echo I am team color blue.
        } else /if (${FindItemCount[=Blue Boomerang]}>0 && ${FindItemCount[=Yellow Boomerang]}>0) {
            /varset TeamColor RED
            /echo I am team color red.
        } else {
            /echo I am team color yellow.
            /varset TeamColor YELLOW
        }
/return

Sub Assign_Targets
    /varset SpawnID 0

    | - Set the BLUE Team
    /if (${TeamColor.Equal[BLUE]})     /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 86 89].ID}

    | - Set the BLUE Team updated so yellow team will pick up blue and red instead of just red, due to split level range
    /if (${TeamColor.Equal[YELLOW]}) {
        /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 89 89].ID}
        /if (!${SpawnID}) {
            /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 84 84].ID}
        }
    }
    
    | - Set the RED Team
    /if (${TeamColor.Equal[RED]}) /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 84 86].ID}

    /if (${SpawnID} && ${Spawn[id ${SpawnID}].State.NotEqual[FEIGN]}) {
        /target id ${SpawnID}
        /delay 1s ${Target.ID}==${SpawnID}
    }
/return

Sub Move
    :moveloop
    
    /call Event_DiedFalling
    /call Stand_Up

    /if (${Target.Distance}>50) {
    
        /call Barrel_Check
            
        | - Set current position first before heading towards our target (in case we get stuck)
        /varset X2 ${Int[${Me.X}]}
        /varset Y2 ${Int[${Me.Y}]}

        /call Stand_Up
        /squelch /face fast nolook
        /keypress forward hold
|        /call Barrel_Check Move
        /delay 5 ${Target.Distance}<=50
        /keypress forward
        /call Stand_Up
        /squelch /face fast nolook
        
        | - Check to see if we got stuck trying that
        /if ((${Int[${Me.X}]}==${X2}) && (${Int[${Me.Y}]}==${Y2})) {
        
            | - We're stuck, back off a second, move left or right (randomly) for .5 seconds
            /keypress back hold
            /delay 5
            /keypress back
            /if (${Math.Rand[2]}) {
                /varset strafedir STRAFE_LEFT
            } else {
                /varset strafedir STRAFE_RIGHT
            }
            /keypress ${strafedir} hold
            /delay 5
            /keypress ${strafedir}
        }
        /if (${Zone.ID}==492) /goto :moveloop
    }
/return

Sub Barrel_Check(string sub)
    /declare circleDirection string local
    
    | - Get the details of the nearest powder keg
    /varset BarrelID ${Me.NearestSpawn[1, race "Powder Keg"].ID}
    /if (${BarrelID}) {
        /varset BarrelDistance ${Spawn[${BarrelID}].Distance}
        /varset BarrelLocY ${Spawn[${BarrelID}].Y}
        /varset BarrelLocX ${Spawn[${BarrelID}].X}
    }
    
    | - If the barrel is too close, lets back off and circle around it before moving towards our target
    /if (${BarrelID} && ${BarrelDistance}<70) {
        /if (${BarrelMobID}==${Target.ID}) /varcalc BarrelCount ${BarrelCount}+1
        /if (${sub.Equal[Move]}) /keypress forward
        /face fast nolook loc ${BarrelLocY},${BarrelLocX}
        /keypress back hold
        /delay 10
        /keypress back
        /if (${Target.Distance}<=50) /return
        /squelch /circle radius 85
        /if (${Math.Rand[2]}) {
            /varset circleDirection cw
        } else {
            /varset circleDirection ccw
        }
        /squelch /circle loc ${BarrelLocY} ${BarrelLocX} ${circleDirection}
        /delay 2s ${Target.Distance}<=50
        /squelch /circle off
    }
    /if (${BarrelCount}>=3) {
        /varset BarrelCount 0
        /squelch /alert add 1 id ${Target.ID}
        /squelch /target clear
    }
/return

Sub Alert_Timer
    /squelch /alert clear 1
    /squelch /alert add 1 BRADiscusController
/return 

Sub Cast_Buff
    /if (${FindItemCount[Brell's Personal Blessing]}>0 && !${FindItem[Brell's Personal Blessing].Timer}) /Cast item "Brell's Personal Blessing"
    /delay 8
/return

Sub Click_Off_Buff
    /if (${Me.Buff[Brell's Personal Blessing].ID}) /nomodkey /notify BuffWindow buff${Math.Calc[${Me.Buff[Brell's Personal Blessing].ID}-1].Int} leftmouseup
    /delay 8
/return

| *********************************************************************** Start of Events Section

Sub Event_DiedFalling        
    | - Check Respawn Window to see if dead from explosions or falling damage 
    /if (${Window[RespawnWnd].Open}) /nomodkey /notify RespawnWnd RW_SelectButton leftmouseup
/return

| - Sets varaible ShroudCalled to TRUE when Shroud Window opens
Sub Event_Zoned
    /Echo I just zoned into ${Zone.Name}.
    /varset CurrentZone ${Zone.ID}
    /varset ZoneTimer 7m
/return

| - Sets varaible GotTask to TRUE when task is assigned
Sub Event_Assigned
    /echo Got our event.
    /varset GotTask TRUE
/return

| - Sets varaible ShroudCalled to TRUE when Shroud Window opens
Sub Event_DoShroud
    /varset ShroudCalled TRUE
/return

| - Exits task leader to Brells Rest, removes members form task, sets log out variables
Sub Event_Ended
    /echo Match is Over..
    /delay 5s
    /varset MatchOver TRUE
    
    /if (${MobTemplate}==1 && ${GotTask}) {
        | - Move to Arena exit and click on door
        :ClickExit
        /call Stand_Up
        /moveto loc -303.11 2.87
        /delay 1s
        /call Open_Door
        /delay 1s
        /if (${Zone.ID}==492) /goto :ClickExit
    }
/return

| - Sets varaible WaitingToCamp to TRUE when task leader anounces time to camp
Sub Event_WaitToCamp
    /varset GotTask FALSE
    /varset WaitingToCamp TRUE
    /echo Waiting to camp message recieved.
/return

| - Sets variable GotTask to FALSE if task 35 min lock out timer is active
Sub Event_TaskTimeWait
    /echo event_timewait, GotTask is now FALSE
    /varset GotTask FALSE
/return

| - * Not in use * Alternate camp out event to be implemented
Sub Event_CampOut
    :campagain
    /camp
    /delay 45s ${MacroQuest.GameState.Equal[CHARSELECT]}
    /if (${MacroQuest.GameState.Equal[INGAME]}) /goto :campagain
/return

| - * Not in use *  Reports amount of time left on lock out timer
Sub Event_TaskTimeLeft(string line, int tday, int thour, int  tminute)
    /echo Time left ${tday}d:${thour}h:${tminute}m
    /varcalc WaitForTask ${tminute}+1
/return

Sub Event_Winners(line, place, name, score)
    /if (${name.Equal[${Me}]}) {
        /mqlog Place: ${place} Name: ${name} Score: ${score}
        /varset ScoreEcho Place: ${place} Name: ${name} Score: ${score}
    }

/return

Sub Event_Score-5
    /varcalc ScoreNumber ${ScoreNumber}-5
/return

Sub Event_Score-1
    /varcalc ScoreNumber ${ScoreNumber}-1
/return
| *********************************************************************** End of Events Section

| - Closes Main, Instruction and Mob Select Task windows
Sub Close_Windows
    /if (${Window[TaskTemplateSelectWnd].Open}) {
        /notify TaskTemplateSelectWnd 0 leftmouseup
        /keypress esc
    }
    
    /delay 1s
    /if (${Window[TaskWnd].Open}) {
        /notify TaskWnd 0 leftmouseup
        /keypress esc
    }
    
    /delay 1s
    /if (${Window[LargeDialogWindow].Open}) /notify LargeDialogWindow LDW_YesButton leftmouseup
/return

Sub Scatter
    /if (${MobTemplate}==1) {
        /squelch /moveto loc 145.97 413.34 
        /delay 5
        /squelch /moveto loc 182.76 412.38
        /delay 5
        /face loc 145,413,-20
    }
    
    /if (${MobTemplate}==2) {
        /squelch /moveto loc -212.37 -567.44 
    }
    
    /if (${MobTemplate}==3) {
        /squelch /moveto loc -200.70 -548.34
    }
    
/return 

Sub Reclaim_Tokens

    | If inventory window not open not Hit "i" to open it
    /if (!${Window[InventoryWindow].Open}) /keypress i
    
    /if (${Window[InventoryWindow].Open}) {
        | - Select Alternate currency tab
        /notify InventoryWindow IW_Subwindows tabselect 5
        /delay 4
        | - Select silver tokens and hit reclaim button
        /notify InventoryWindow IW_AltCurr_PointList listselect 7
        /delay 4
        /notify InventoryWindow IW_AltCurr_ReclaimButton leftmouseup
        /delay 4
        | - Select gold tokens and hit reclaim button
        /notify InventoryWindow IW_AltCurr_PointList listselect 8
        /delay 4
        /notify InventoryWindow IW_AltCurr_ReclaimButton leftmouseup
        /delay 4
    }
    
    | - Close inventory windows
    /if (${Window[InventoryWindow].Open}) {
        /notify InventoryWindow 0 leftmouseup
        /keypress esc
    }
/return

Sub Task_Over

    /if (${Me.CleanName.Equal[${GroupMember0}]} && ${GotTask} && ${MatchOver} && !${WaitingToCamp}) {
        /bcaa //taskquit
        /bc Prepare to camp out.
        /delay 1s
        /doevents
        /return
    }
    
    /if (!${GotTask} && ${WaitingToCamp} && ${MatchOver} && !${TimeToCamp}) {
        /call Count_Group
        /call Scatter
        /delay 10s
        /call Reclaim_Tokens
        /delay 10s
        /varset TimeToCamp TRUE
    }
/return

Sub Camp_Out
    /if (!${TimeToCamp}) /return
        /declare DelayTimer     string local
        /declare MessageTimer   string local
        /call Count_Group
        /echo Camping group out to wait for timer.
        /varcalc CharSelectTimer 18000/${NumberOfGroups}

        /if (${Me.CleanName.Equal[${GroupMember0}]}) {            
            /call Assign_Group_Members
            | - Camp out group
            /bct ${GroupMember1} //camp
            /delay 10s
            /bct ${GroupMember2} //camp
            /delay 10s
            /camp 
        }
        
        /delay 90s ${MacroQuest.GameState.Equal[CHARSELECT]}
        
        /if (${MacroQuest.GameState.Equal[CHARSELECT]}) {
        
            /varset WaitingToCamp FALSE
            /Varset ShroudCalled  FALSE
            /varset TimeToCamp FALSE
            /varset MatchOver FALSE
            /varcalc MessageTimer ${CharSelectTimer}/600
            /echo Previous Score ${ScoreEcho}
            /echo Login set at ${Float[${MessageTimer}].Centi} minutes and counting down.
            
            :waitloop
                /if (${CharSelectTimer}<=19800) {
                    /call HowMuchTime 
                    /if (${CharSelectTimer}>5000) /varset DelayTimer 5m
                    /if (${CharSelectTimer}<5000) /varset DelayTimer 1m
                }
                /if (${NumberOfGroups}>=2 && !${CharSwitched})  /call Assign_Next_Crew
                /delay ${DelayTimer}
                
                /if ((${CharSelectTimer}==0 && ${MobTemplate}==1) || (${CharSelectTimer}<=750 && ${MobTemplate}==2) || (${CharSelectTimer}<=1400 && ${MobTemplate}==3))  {
                    /if (${Me.Name.Equal[${GroupMember0}]}) /echo Logging back into the world to invite ${GroupMember1} and ${GroupMember2} to group.
                    /delay 2s
                    /notify CharacterListWnd CLW_Play_Button leftmouseup
                    /delay 3m ${Zone.ID}==480
                    /if (${Window[HtmlWnd].Open}) /squelch /windowstate HtmlWnd close
                    /varset ZoneTimer 7m
                    /call Invite_Group
                    /varset CharSwitched FALSE
                    /return
                }
            /goto :waitloop
        }
/return

Sub HowMuchTime
    /varcalc TimeWaiting ${CharSelectTimer}/600
    /echo ${TimeWaiting} minutes left on timer.
/return

Sub Invite_Group
    /call Assign_Group_Members
    
    :ReInviteGroup
        /doevents
        
        /if (${Me.Name.Equal[${GroupMember0}]}) {
            /if (${Group}==0 && ${Spawn[${GroupMember1}].ID}) {
                /invite ${GroupMember1} 
                /delay 3s
                /bct ${GroupMember1} //invite
                /delay 3s
            }
            
            /if (${Group}==1 && ${Spawn[${GroupMember2}].ID}) {
                /invite ${GroupMember2}
                /delay 3s
                /bct ${GroupMember2} //invite
                /delay 3s
            }
            
            /if (${Group}==2) /return
        }
        
    /if (${Group}<2) /goto :ReInviteGroup
/return

Sub Assign_Group_Members

    /declare gl string local ${Select[${Me},${Group1Member1},${Group2Member1},${Group3Member1}]}
    
        /if (${Me.CleanName.Equal[${Group${gl}Member1}]}) {
        /varset GroupMember0     ${Group${gl}Member1}
        /varset GroupMember1     ${Group${gl}Member2}
        /varset GroupMember2     ${Group${gl}Member3}
        /varset MainRequester     ${Group${gl}Member1}
        /varset MobTemplate        1
    |- For single groups with no predefined toons
    } else /if (${gl}==0 && ${Me.Name.Equal[${Group.Leader}]}) {
        /varset GroupMember0     ${Group.Member[0].CleanName}
        /varset GroupMember1    ${Group.Member[1].CleanName}
        /varset GroupMember2     ${Group.Member[2].CleanName}
        /varset MainRequester     ${Me.CleanName}
        /varset MobTemplate        1
    }
/return

Sub Stand_Up
    /if (${Me.State.Equal[FEIGN]} || ${Me.State.NotEqual[Stand]}) {
        /stand
        /delay 3s ${Me.State.Equal[STAND]}
    }
/return

Sub Plugins_Check
    /if (!${Bool[${Plugin[mq2advpath]}]}) { 
        /echo MQ2AdvPath not detected!  This macro requires it! 
        /plugin mq2advpath
    }
    
    /if (!${Bool[${Plugin[mq2moveutils]}]}) { 
        /echo MQ2MoveUtils not detected!  This macro requires it! 
        /plugin mq2moveutils
    }
    
    /if (${Bool[${Plugin[mq2melee]}]}) { 
        /echo MQ2Melee detected! Turning plugin off! 
        /melee off
    } 
/return

Sub Count_Group
    /echo Waiting for entire group to zone in before continuing.
    :groupwait
    /delay 1s
    /if (${SpawnCount[pc group]}<${Group.GroupSize}) /goto :groupwait
/return 

Sub Assign_Next_Crew

    /declare gl    int    local    0
    /declare gn    int    local    0
    /if (${Select[${GroupMember0},${Group1Member1},${Group2Member1},${Group3Member1}]}>0)    /varset gl ${Select[${GroupMember0},${Group1Member1},${Group2Member1},${Group3Member1}]}
    /if (${Select[${GroupMember1},${Group1Member2},${Group2Member2},${Group3Member2}]}>0)    /varset gl ${Select[${GroupMember1},${Group1Member2},${Group2Member2},${Group3Member2}]}
    /if (${Select[${GroupMember2},${Group1Member3},${Group2Member3},${Group3Member3}]}>0)    /varset gl ${Select[${GroupMember2},${Group1Member3},${Group2Member3},${Group3Member3}]}
    /if (${gl}==1) /varset gn 2
    /if ((${gl}==2 && ${NumberOfGroups}==2) || (${gl}==3 && ${NumberOfGroups}==3)) /varset gn 1
    /if (${gl}==2 && ${NumberOfGroups}==3) /varset gn 3
    
    /echo Attemping to select next Boomerang character.    
    
    /if (${GroupMember0.Equal[${Group${gl}Member1}]}) {
        /echo Next Boomerang character is ${Group${gn}Member1}
        /varset GroupMember0     ${Group${gn}Member1}
        /varset GroupMember1     ${Group${gn}Member2}
        /varset GroupMember2     ${Group${gn}Member3}
        /varset MainRequester     ${Group${gn}Member1}
        /call Select_Character     ${Group${gn}Member1}
        /varset CharSwitched TRUE
        /return
    }
    
    /if (${GroupMember1.Equal[${Group${gl}Member2}]}) {
        /echo Next Boomerang character is ${Group${gn}Member2}
        /call Select_Character ${Group${gn}Member2}
        /varset CharSwitched TRUE
        /return
    }
    
    /if (${GroupMember2.Equal[${Group${gl}Member3}]}) {
        /echo Next Boomerang character is ${Group${gn}Member3}
        /call Select_Character ${Group${gn}Member3}
        /varset CharSwitched TRUE
        /return
    }
    
/return

Sub Select_Character(string name)
   /declare ToonToLogin int local
   /echo Selecting ${name}
   /varset ToonToLogin ${Window[CharacterListWnd].Child[CLW_LeftScreen].Child[CLW_CharactersScreen].Child[CLW_Character_List].List[${name},3]}
   /delay 1s
   /notify CharacterListWnd CLW_Character_List listselect ${ToonToLogin}
/return

Sub Time_In_Brells_Rest
    /if (${ZoneTimer}==0) {
        /echo Over 5 minutes spent in Brells Rest something is wrong.
        /echo Camping out and ending macro.
        /mqlog ${Me.Name} - Group: ${Group} GotTask: ${GotTask} ShroudCalled: ${ShroudCalled} MatchOver :${MatchOver} WaitingToCamp: ${WaitingToCamp} TimeToCamp: ${TimeToCamp} 
        /call Camp_Group_End_Macro
    }
/return

Sub Camp_Group_End_Macro
    /if (${Bool[${Plugin[mq2melee]}]}) /bcaa //melee off
    /delay 6
    /bcaa //camp
    /delay 6
    /bcaa //end
/return
 
Maskoi, it does work. I just got done testing it. Logged on 3 toons, ran it. Got 1-3 on my toons. Now waiting to be able to do it again lol. Thanks for the macro much appreciated.
 
Maskoi is there a way to modify your macro a bit? I only have 1 group of 3 that I run. What I want to do is just loop that group of 3 overnight basically. So I will run the group there, start the macro. It will do the event and then repeat it every 30 mins. I would also like to keep group members 2 and 3 at the arena door instead of at the task givers.

Any help is greatly appreciated, the macro is already awesome. I just don't have the knowledge to make the modifications myself yet.
 
Maskoi is there a way to modify your macro a bit? I only have 1 group of 3 that I run. What I want to do is just loop that group of 3 overnight basically. So I will run the group there, start the macro. It will do the event and then repeat it every 30 mins. I would also like to keep group members 2 and 3 at the arena door instead of at the task givers.

Any help is greatly appreciated, the macro is already awesome. I just don't have the knowledge to make the modifications myself yet.

Nothing to modify it is setup to run 1 , 2 or 3 groups just set the variable below to 1 in the beginning of the macro

Rich (BB code):
 /declare NumberOfGroups            int     outer     1

And your character names have to be the variables below see exmaqple.

Rich (BB code):
    | - Group 1
    /declare Group1Member1              string     outer    bob
    /declare Group1Member2              string     outer    mary
    /declare Group1Member3              string     outer    sam
 
Tried this again with a few new toons I was leveling up and the pathing between Gilbot and the arena is jacked up. Leader runs in circles and locks up. I have not loaded mq2navigation. Any ideas what might be different from 6 months ago?
 
mq2nav has nothing to do with this macro. Who knows whats wrong I will check the path this weekend.
 
No I was unpacking my kitchen. I will be testing tonight.
 
I am gonna say its mq2advpath and not the recorded path. Toss this one into your mq2 folder and replace the old one see if it works.
 

Attachments

I am gonna say its mq2advpath and not the recorded path. Toss this one into your mq2 folder and replace the old one see if it works.

No change with new MQ2AdvPAth. I tried deleting the old twice and then replacing with the new. Mac still runs circles or an occasional figure 8 near Gilbot, &/or just down a little ways in lave fingers, &/or past the creek when attempting to make the right turn towards the entrance. Last weekend I tried a fresh install without copying any of my configuration files over so there were no KissAssist, loot, melee files or anything in the folder I ran EQBCS or MQ2 from. I first load EQBCS, then MQ2, then EQpatchme all as admin.
 
find /play arena_to_gilbot smart

and try /play arena_to_gilbot smart nodoor

/play arena_to_gilbot reverse smart
to /play arena_to_gilbot reverse smart nodoor
 
find /play arena_to_gilbot smart

and try /play arena_to_gilbot smart nodoor

/play arena_to_gilbot reverse smart
to /play arena_to_gilbot reverse smart smart


Thanks, I will try that tonight. I had given up on it. Circles looked to obvious to other people in the zone.
 
I need to get this done on about 15 toons, but now it DCs my eqbc between logings, hmmm working that out next...


This macro was written over and combining a couple of other boomerang macros that were out there with extensive rewrites. None of them ran the mission from start to to stop or ran multiple groups. I made this macro to farm silver tokens back during Underfoot. I ran 9 toons in 3 groups on the same 3 accounts. It would login in one group then go through the mission log them out and login the next group to maximize the time from the 35 min lockout. So basically it ran 3 separate groups an hour and I was getting thousands of Silvers Tokens a day.

I only let a few trusted friends have this macro back then because I didn't want to ruin the silver Token economy on my and other servers.

The macro uses no active hacks. It does not guarantee 1st, 2nd or 3rd place to anyone but it almost always places the 3 toons in those spots. You just keep letting it run and eventually everyone will get enough gold to get their weapon.

Requires MQ2EQBC server and plugin. I am not really up to explaining how to set up and use it for those that never have. Basics are
1. From your MacroQuest2 or Release folder open/start MQ2EQBCS.exe
2. When your have EQ open with MQ2 running type /plugin mq2eqbc
3. If you don't see the mq2eqbc window then type in /bccmd toggle window
4. Also a useful command /bccmd toggle autoconnect

It also uses MQ2Advpath
The advpath file is attached below but you need to create and place in the correct folder.
1. In your macroquest2 root or release folder create a new folder called MQ2AdvPath
2. Save or copy the brellsrest.ini into that folder so the location would be something like C:/Release/MQ2AdvPath/brellsrest.ini
3. When your have EQ open with MQ2 running type /plugin MQ2advpath

Macro instructions
1. Save the boomerang mac to your macro folder.
2. Open the macro in your fav editor and edit the following variables.
Rich (BB code):
    /declare NumberOfGroups            int     outer     1
    | - Group 1
    /declare Group1Member1              string     outer    Toon1Name
    /declare Group1Member2              string     outer    Toon2Name
    /declare Group1Member3              string     outer    Toon3Name

3. Save the mac
4. Have your 3 toons standing around and near the Boomerang entrance in Brells rest.
5. From the character you named on the macro as Toon1 type in /mac boomerang Toon1Name

Rich (BB code):
|** ------------------------------------------------------

BOOMERANG.mac edited, revised and endless by Maskoi 8/03/2010

Main sub by jlm462, 12/2009
Task Get/Run/ETC by meta53 12/22/ 09
with contributions from Ralindal and dascott

    Required Plugins:    MQ2MoveUtils, MQ2AdvPath, MQ2EQBC
                        Spell_Routines.inc
    
    Usage: From the requesting toon... 
           /mac boomerang TASKLEADER
------------------------------------------------------------- **|

    #turbo 40

    #Event Ended                     "#*#The results of the contest are as follows#*#"
    #Event DoShroud                 "<#1#> Get your shroud!#*#"
    #Event TaskTimeWait             "#*#You may not request this shared task because you must wait#*#"
    #Event Assigned                 "#*#You have been assigned#*#"
    #Event TaskTimeLeft             "You may not request this shared task because you must wait #1#d:#2#h:#3#m#*#"
    #Event WaitToCamp                "<#1#> Prepare to camp out."
    #Event Zoned                    "You have entered#*#"
    #Event CampOut                    "#*#Time to camp out.#*#"
    #Event Winners                    "#*# #1# : #2# with #3# points"
    #Event Score-5                    "YOU were injured by falling"
    #Event Score-1                    "A boomerang hits you in the face!"
    #Event DiedFalling                "#*#200000#*#"
    
Sub Main

    /declare NumberOfGroups            int     outer     1
    | - Group 1
    /declare Group1Member1              string     outer    Toon1
    /declare Group1Member2              string     outer    Toon2
    /declare Group1Member3              string     outer    Toon3
    | - Group 2
    /declare Group2Member1              string     outer    Toon4
    /declare Group2Member2              string     outer    Toon5
    /declare Group2Member3              string     outer    Toon6
    | - Group 3
    /declare Group3Member1              string     outer    Toon7
    /declare Group3Member2              string     outer    Toon8
    /declare Group3Member3              string     outer    Toon9
    
    /declare MainRequester              string     outer     
    /declare MobTemplate                int     outer     
    /declare DoorX                      int     outer     -236
    /declare DoorY                      int     outer     -561
    /declare TimeWait                   string     outer     0m
    /declare WaitForTask                string     outer     5m
    /declare ShroudCalled               bool     outer     FALSE
    /declare GotTask                    bool     outer     FALSE
    /declare DoorRadius                 int     outer     80
    /declare GroupMember0               string     outer
    /declare GroupMember1               string     outer
    /declare GroupMember2               string     outer
    /declare TimeWaiting                int     outer     0
    /declare CharSelectTimer            timer     outer     0m
    /declare ZoneTimer                  timer     outer     7m
    /declare MatchTimer                 timer     outer     0
    /declare MatchOver                  bool     outer    FALSE    
    /declare WaitingToCamp              bool     outer    FALSE
    /declare TimeToCamp                 bool     outer    FALSE
    /declare CurrentZone                int        outer     ${Zone.ID} 
    /declare CharSwitched               bool     outer    FALSE
    /declare strafedir                  string     outer
    /declare X2                         int     outer
    /declare Y2                         int     outer
    /declare SpawnID                    int     outer     0
    /declare BarrelID                   int     outer     0
    /declare BarrelDistance             int     outer     0
    /declare BarrelLocY                 int     outer     0
    /declare BarrelLocX                 int     outer     0
    /declare BarrelCount                int     outer     0
    /declare BarrelCountID              int     outer     0
    /declare BarrelMobID                int     outer     0
    /declare ScoreEcho                  string     outer    
    /declare ScoreNumber                int     outer    0
    /declare ClickCounter             int     outer     0
    
    /if (${Defined[Param0]})         /varset MainRequester ${Param0}
    /if (${Defined[Param1]})         /varset MobTemplate ${Param1}

    /call Plugins_Check
    
    /echo Starting Maskoi's Boomerang Macro
    
    :mainloop
        /doevents
        /call Guild_Lobby_Check
        
        | - Sub routine calls for Brell's Rest Zone.ID 480
        /if (${Zone.ID}==480) {
            /doevents
            /call Start_Task
            /call Task_Over
            /call Camp_Out
        }
        
        | - Sub routine calls for Brell's Arena Zone.ID 492
        /if (${Zone.ID}==492) {
            /doevents
            /call Close_Windows
            /call Trigger_Event
            /call Assign_Team_Color
            /call Start_Match
        }
    /goto :mainloop
    
/return

Sub Guild_Lobby_Check
    /if (${Zone.ShortName.Equal[GuildLobby]}) {
        /echo I am in guildlobby! Shutting my crap down!
        /call Camp_Group_End_Macro
    }
/return

Sub Start_Task
    /declare DoorWait string local
    /if (${MatchOver} || ${Zone.ID}==492) /return
    /varset ZoneTimer 7m
    /varset ScoreNumber             0
    /if (${Group}==0) /call Invite_Group
    | - Are you a requester? If so you should probably go get the mission
    /if (${Me.CleanName.Equal[${MainRequester}]} && !${GotTask}) {
        /varset MobTemplate 1
        /bct  ${Group.Member[1]} //mac boomerang ${MainRequester} 2
        /bct  ${Group.Member[2]} //mac boomerang ${MainRequester} 3
        /delay 1s
        /call Get_Event
        /delay 5s
        /doevents
        /echo Delaying 5s.
        /delay 5s
        /if (!${GotTask}) {
            /echo Have a timer still...
            /bc We still have some time left before I can get Task, waiting ${WaitForTask}m!
            /delay ${WaitForTask}m
            /return
        }

        /bc Get your shroud!
        /if (!${ShroudCalled}) /call Select_Shroud
        /echo Running ${Me.CleanName} to the event.
        /call Move_To_Event
        
    } else {
        
        /if ((${Math.Distance[${DoorX},${DoorY}]}>=${DoorRadius})) {
            | - close to gilbot, move to event
            /call Move_To_Event
        }
        
        /if (!${ShroudCalled}) /call Select_Shroud
        /varset DoorWait ${Math.Rand[20]}s
        
        | - OK! Mission Gotten! Now Let us Zone in and start up.
        /delay ${DoorWait}
        /call Move_To_Arena_Door
    }        
/return

Sub Select_Shroud
            :shroudWait
            /doevents
            
            /if (!${ShroudCalled}) {
                /delay 5s
                /goto :shroudWait
            }
            
            | - Time to select the template.
            /call Template_Select
            /echo Shroud Template Selected
/return

Sub Get_Event
    /squelch /target npc Gilbot the Magnificent
    /delay 1s
    /if (${Target.Distance}>20) {
        | - not close to gilbot, sigh
        /call Move_To_Gilbot
        /squelch /target npc Gilbot the Magnificent
    }
    /echo Requesting task from Gilbot the Magnificent
    /delay 3s
    /say specific
    /delay 2s
/return

Sub Move_To_Gilbot
    /echo Moving to Gilbot the Magnificent.
    
    /play arena_to_gilbot smart

    :MTGmovement
        /if (${AdvPath.State} == 2) {
            /delay 1s
            /goto :MTGmovement
        }
    /delay 2s
/return

Sub Move_To_Event
    /echo Moving To Brell's Arena entrance.

    /play arena_to_gilbot reverse smart
    
    :MTEmovement
        /if (${AdvPath.State} == 2) {
            /delay 1s
            /goto :MTEmovement
        }
    /delay 1s
/return

Sub Template_Select
    /bc Selecting ${MobTemplate}
    /delay 10
    | - Select Mob Template
    /if (${MobTemplate}==1) {
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 1
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 1
        /varset GroupMember0 ${Me.CleanName}
        /bc Banged on Option 1!

    } else /if (${MobTemplate}==2) {
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 2
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 2
        /varset GroupMember1 ${Me.CleanName}    
        /bc Banged on Option 2!
    } else /if (${MobTemplate}==3) {
        /delay 1s
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 3
        /delay 1s
        /varset GroupMember2 ${Me.CleanName}
        /notify TaskTemplateSelectWnd TaskTemplateSelectListRequired listselect 3
        /bc Banged on Option 3!
    }
    /notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup 
    /delay 5s 
/return

Sub Move_To_Arena_Door
    /varset ClickCounter 0
    /echo Moving to arena door and zoning in.
    /moveto loc -242.12 -566.69
    :MoveToArenaDoor
        /if (${ClickCounter}<=5) /moveto loc -242.11 -576.13
        /if (${ClickCounter}>=6) /moveto loc -242.11 -556.13
        /call Open_Door
        /delay 1s
        /varcalc ClickCounter ${ClickCounter}+1
        /if (${Zone.ID}==480) /goto :MoveToArenaDoor
/return

Sub Open_Door
        /squelch /doortarget
        /delay 3
        /squelch /face door nolook
        /delay 3
        /keypress FIRST_PERSON_CAMERA hold
        /delay 2
        /keypress FIRST_PERSON_CAMERA
        /delay 4
        /keypress up hold
        /delay 2
        /keypress up
        /delay 2
        /keypress use hold
        /delay 2
        /keypress use
        /squelch /target clear
/return

Sub Trigger_Event
    /if (${MobTemplate}==1 && ${Spawn[Gilbot the Wary].ID}) {
        /call Count_Group
        /echo Triggering the Event
        
        :startevent
            /squelch /target npc Gilbot the Wary
            /delay 2s ${Target.ID}==${Spawn[Gilbot the Wary].ID}
            /if (${Spawn[Gilbot the Wary].ID}) {
                /moveto id ${Target.ID} loose
                /delay 1s 
                /say start
                /delay 1s
            }
        /if (${Spawn[Gilbot the Wary].ID}) /goto :startevent    
    }
/return

Sub Start_Match
        /if (${MatchOver}) /return
        /echo Match Starting
        /varset MatchTimer 8m
        /call Alert_Timer
        
    :boomerangloop
        /doevents
        /if (!${GotTask}) /return

        /call Stand_Up
        /call Assign_Targets
        /call Event_DiedFalling
        /varset BarrelMobID ${Target.ID}

        /if (!${Target.ID}) {    
            /call Alert_Timer
        } else {
        
            /call Move
            
|            /if ((${MobTemplate}==1 && ${MatchTimer}<=4800) || (${MobTemplate}==2 && ${MatchTimer}<=4200) || (${MobTemplate}==3 && ${MatchTimer}<=3900)) {
                | - Target mob throw Red Boomerang
                /if (${Target.Level}==89 && ${FindItemCount[=Red Boomerang]}>0) {
                    /if (${FindItem[Red Boomerang].Timer}) /call Move
                    /call Stand_Up
                    /face fast nolook
                    /cast item "Red Boomerang"
                    /cast item "Red Boomerang"
                    /varcalc ScoreNumber ${ScoreNumber}+1
                }
                
                | - Target mob throw Yellow Boomerang
                /if ((${Target.Level}==86 || ${Target.Level}==85) && ${FindItemCount[=Yellow Boomerang]}>0) {
                    /if (${FindItem[Yellow Boomerang].Timer}) /call Move
                    /call Stand_Up
                    /face fast nolook
                    /cast item "Yellow Boomerang"
                    /cast item "Yellow Boomerang"
                    /varcalc ScoreNumber ${ScoreNumber}+1
                }
                
                | - Target mob throw Blue Boomerang
                /if (${Target.Level}==84 && ${FindItemCount[=Blue Boomerang]}>0) {
                    /if (${FindItem[Blue Boomerang].Timer}) /call Move
                    /call Stand_Up
                    /face fast nolook
                    /cast item "Blue Boomerang"
                    /cast item "Blue Boomerang"
                    /varcalc ScoreNumber ${ScoreNumber}+1
                }
|            }
            /squelch /alert add 1 id ${Target.ID}
            /squelch /target clear
        }
    /if (${Zone.ID}==492) /goto :boomerangloop

/return

Sub Assign_Team_Color
        /if (${MatchOver}) /return
        /if (!${Defined[TeamColor]}) /declare TeamColor string outer NULL
        /if (${FindItemCount[=Red Boomerang]}>0 && ${FindItemCount[=Yellow Boomerang]}>0) {
            /varset TeamColor BLUE
            /echo I am team color blue.
        } else /if (${FindItemCount[=Blue Boomerang]}>0 && ${FindItemCount[=Yellow Boomerang]}>0) {
            /varset TeamColor RED
            /echo I am team color red.
        } else {
            /echo I am team color yellow.
            /varset TeamColor YELLOW
        }
/return

Sub Assign_Targets
    /varset SpawnID 0

    | - Set the BLUE Team
    /if (${TeamColor.Equal[BLUE]})     /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 86 89].ID}

    | - Set the BLUE Team updated so yellow team will pick up blue and red instead of just red, due to split level range
    /if (${TeamColor.Equal[YELLOW]}) {
        /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 89 89].ID}
        /if (!${SpawnID}) {
            /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 84 84].ID}
        }
    }
    
    | - Set the RED Team
    /if (${TeamColor.Equal[RED]}) /varset SpawnID ${Me.NearestSpawn[1, npc noalert 1 range 84 86].ID}

    /if (${SpawnID} && ${Spawn[id ${SpawnID}].State.NotEqual[FEIGN]}) {
        /target id ${SpawnID}
        /delay 1s ${Target.ID}==${SpawnID}
    }
/return

Sub Move
    :moveloop
    
    /call Event_DiedFalling
    /call Stand_Up

    /if (${Target.Distance}>50) {
    
        /call Barrel_Check
            
        | - Set current position first before heading towards our target (in case we get stuck)
        /varset X2 ${Int[${Me.X}]}
        /varset Y2 ${Int[${Me.Y}]}

        /call Stand_Up
        /squelch /face fast nolook
        /keypress forward hold
|        /call Barrel_Check Move
        /delay 5 ${Target.Distance}<=50
        /keypress forward
        /call Stand_Up
        /squelch /face fast nolook
        
        | - Check to see if we got stuck trying that
        /if ((${Int[${Me.X}]}==${X2}) && (${Int[${Me.Y}]}==${Y2})) {
        
            | - We're stuck, back off a second, move left or right (randomly) for .5 seconds
            /keypress back hold
            /delay 5
            /keypress back
            /if (${Math.Rand[2]}) {
                /varset strafedir STRAFE_LEFT
            } else {
                /varset strafedir STRAFE_RIGHT
            }
            /keypress ${strafedir} hold
            /delay 5
            /keypress ${strafedir}
        }
        /if (${Zone.ID}==492) /goto :moveloop
    }
/return

Sub Barrel_Check(string sub)
    /declare circleDirection string local
    
    | - Get the details of the nearest powder keg
    /varset BarrelID ${Me.NearestSpawn[1, race "Powder Keg"].ID}
    /if (${BarrelID}) {
        /varset BarrelDistance ${Spawn[${BarrelID}].Distance}
        /varset BarrelLocY ${Spawn[${BarrelID}].Y}
        /varset BarrelLocX ${Spawn[${BarrelID}].X}
    }
    
    | - If the barrel is too close, lets back off and circle around it before moving towards our target
    /if (${BarrelID} && ${BarrelDistance}<70) {
        /if (${BarrelMobID}==${Target.ID}) /varcalc BarrelCount ${BarrelCount}+1
        /if (${sub.Equal[Move]}) /keypress forward
        /face fast nolook loc ${BarrelLocY},${BarrelLocX}
        /keypress back hold
        /delay 10
        /keypress back
        /if (${Target.Distance}<=50) /return
        /squelch /circle radius 85
        /if (${Math.Rand[2]}) {
            /varset circleDirection cw
        } else {
            /varset circleDirection ccw
        }
        /squelch /circle loc ${BarrelLocY} ${BarrelLocX} ${circleDirection}
        /delay 2s ${Target.Distance}<=50
        /squelch /circle off
    }
    /if (${BarrelCount}>=3) {
        /varset BarrelCount 0
        /squelch /alert add 1 id ${Target.ID}
        /squelch /target clear
    }
/return

Sub Alert_Timer
    /squelch /alert clear 1
    /squelch /alert add 1 BRADiscusController
/return 

Sub Cast_Buff
    /if (${FindItemCount[Brell's Personal Blessing]}>0 && !${FindItem[Brell's Personal Blessing].Timer}) /Cast item "Brell's Personal Blessing"
    /delay 8
/return

Sub Click_Off_Buff
    /if (${Me.Buff[Brell's Personal Blessing].ID}) /nomodkey /notify BuffWindow buff${Math.Calc[${Me.Buff[Brell's Personal Blessing].ID}-1].Int} leftmouseup
    /delay 8
/return

| *********************************************************************** Start of Events Section

Sub Event_DiedFalling        
    | - Check Respawn Window to see if dead from explosions or falling damage 
    /if (${Window[RespawnWnd].Open}) /nomodkey /notify RespawnWnd RW_SelectButton leftmouseup
/return

| - Sets varaible ShroudCalled to TRUE when Shroud Window opens
Sub Event_Zoned
    /Echo I just zoned into ${Zone.Name}.
    /varset CurrentZone ${Zone.ID}
    /varset ZoneTimer 7m
/return

| - Sets varaible GotTask to TRUE when task is assigned
Sub Event_Assigned
    /echo Got our event.
    /varset GotTask TRUE
/return

| - Sets varaible ShroudCalled to TRUE when Shroud Window opens
Sub Event_DoShroud
    /varset ShroudCalled TRUE
/return

| - Exits task leader to Brells Rest, removes members form task, sets log out variables
Sub Event_Ended
    /echo Match is Over..
    /delay 5s
    /varset MatchOver TRUE
    
    /if (${MobTemplate}==1 && ${GotTask}) {
        | - Move to Arena exit and click on door
        :ClickExit
        /call Stand_Up
        /moveto loc -303.11 2.87
        /delay 1s
        /call Open_Door
        /delay 1s
        /if (${Zone.ID}==492) /goto :ClickExit
    }
/return

| - Sets varaible WaitingToCamp to TRUE when task leader anounces time to camp
Sub Event_WaitToCamp
    /varset GotTask FALSE
    /varset WaitingToCamp TRUE
    /echo Waiting to camp message recieved.
/return

| - Sets variable GotTask to FALSE if task 35 min lock out timer is active
Sub Event_TaskTimeWait
    /echo event_timewait, GotTask is now FALSE
    /varset GotTask FALSE
/return

| - * Not in use * Alternate camp out event to be implemented
Sub Event_CampOut
    :campagain
    /camp
    /delay 45s ${MacroQuest.GameState.Equal[CHARSELECT]}
    /if (${MacroQuest.GameState.Equal[INGAME]}) /goto :campagain
/return

| - * Not in use *  Reports amount of time left on lock out timer
Sub Event_TaskTimeLeft(string line, int tday, int thour, int  tminute)
    /echo Time left ${tday}d:${thour}h:${tminute}m
    /varcalc WaitForTask ${tminute}+1
/return

Sub Event_Winners(line, place, name, score)
    /if (${name.Equal[${Me}]}) {
        /mqlog Place: ${place} Name: ${name} Score: ${score}
        /varset ScoreEcho Place: ${place} Name: ${name} Score: ${score}
    }

/return

Sub Event_Score-5
    /varcalc ScoreNumber ${ScoreNumber}-5
/return

Sub Event_Score-1
    /varcalc ScoreNumber ${ScoreNumber}-1
/return
| *********************************************************************** End of Events Section

| - Closes Main, Instruction and Mob Select Task windows
Sub Close_Windows
    /if (${Window[TaskTemplateSelectWnd].Open}) {
        /notify TaskTemplateSelectWnd 0 leftmouseup
        /keypress esc
    }
    
    /delay 1s
    /if (${Window[TaskWnd].Open}) {
        /notify TaskWnd 0 leftmouseup
        /keypress esc
    }
    
    /delay 1s
    /if (${Window[LargeDialogWindow].Open}) /notify LargeDialogWindow LDW_YesButton leftmouseup
/return

Sub Scatter
    /if (${MobTemplate}==1) {
        /squelch /moveto loc 145.97 413.34 
        /delay 5
        /squelch /moveto loc 182.76 412.38
        /delay 5
        /face loc 145,413,-20
    }
    
    /if (${MobTemplate}==2) {
        /squelch /moveto loc -212.37 -567.44 
    }
    
    /if (${MobTemplate}==3) {
        /squelch /moveto loc -200.70 -548.34
    }
    
/return 

Sub Reclaim_Tokens

    | If inventory window not open not Hit "i" to open it
    /if (!${Window[InventoryWindow].Open}) /keypress i
    
    /if (${Window[InventoryWindow].Open}) {
        | - Select Alternate currency tab
        /notify InventoryWindow IW_Subwindows tabselect 5
        /delay 4
        | - Select silver tokens and hit reclaim button
        /notify InventoryWindow IW_AltCurr_PointList listselect 7
        /delay 4
        /notify InventoryWindow IW_AltCurr_ReclaimButton leftmouseup
        /delay 4
        | - Select gold tokens and hit reclaim button
        /notify InventoryWindow IW_AltCurr_PointList listselect 8
        /delay 4
        /notify InventoryWindow IW_AltCurr_ReclaimButton leftmouseup
        /delay 4
    }
    
    | - Close inventory windows
    /if (${Window[InventoryWindow].Open}) {
        /notify InventoryWindow 0 leftmouseup
        /keypress esc
    }
/return

Sub Task_Over

    /if (${Me.CleanName.Equal[${GroupMember0}]} && ${GotTask} && ${MatchOver} && !${WaitingToCamp}) {
        /bcaa //taskquit
        /bc Prepare to camp out.
        /delay 1s
        /doevents
        /return
    }
    
    /if (!${GotTask} && ${WaitingToCamp} && ${MatchOver} && !${TimeToCamp}) {
        /call Count_Group
        /call Scatter
        /delay 10s
        /call Reclaim_Tokens
        /delay 10s
        /varset TimeToCamp TRUE
    }
/return

Sub Camp_Out
    /if (!${TimeToCamp}) /return
        /declare DelayTimer     string local
        /declare MessageTimer   string local
        /call Count_Group
        /echo Camping group out to wait for timer.
        /varcalc CharSelectTimer 18000/${NumberOfGroups}

        /if (${Me.CleanName.Equal[${GroupMember0}]}) {            
            /call Assign_Group_Members
            | - Camp out group
            /bct ${GroupMember1} //camp
            /delay 10s
            /bct ${GroupMember2} //camp
            /delay 10s
            /camp 
        }
        
        /delay 90s ${MacroQuest.GameState.Equal[CHARSELECT]}
        
        /if (${MacroQuest.GameState.Equal[CHARSELECT]}) {
        
            /varset WaitingToCamp FALSE
            /Varset ShroudCalled  FALSE
            /varset TimeToCamp FALSE
            /varset MatchOver FALSE
            /varcalc MessageTimer ${CharSelectTimer}/600
            /echo Previous Score ${ScoreEcho}
            /echo Login set at ${Float[${MessageTimer}].Centi} minutes and counting down.
            
            :waitloop
                /if (${CharSelectTimer}<=19800) {
                    /call HowMuchTime 
                    /if (${CharSelectTimer}>5000) /varset DelayTimer 5m
                    /if (${CharSelectTimer}<5000) /varset DelayTimer 1m
                }
                /if (${NumberOfGroups}>=2 && !${CharSwitched})  /call Assign_Next_Crew
                /delay ${DelayTimer}
                
                /if ((${CharSelectTimer}==0 && ${MobTemplate}==1) || (${CharSelectTimer}<=750 && ${MobTemplate}==2) || (${CharSelectTimer}<=1400 && ${MobTemplate}==3))  {
                    /if (${Me.Name.Equal[${GroupMember0}]}) /echo Logging back into the world to invite ${GroupMember1} and ${GroupMember2} to group.
                    /delay 2s
                    /notify CharacterListWnd CLW_Play_Button leftmouseup
                    /delay 3m ${Zone.ID}==480
                    /if (${Window[HtmlWnd].Open}) /squelch /windowstate HtmlWnd close
                    /varset ZoneTimer 7m
                    /call Invite_Group
                    /varset CharSwitched FALSE
                    /return
                }
            /goto :waitloop
        }
/return

Sub HowMuchTime
    /varcalc TimeWaiting ${CharSelectTimer}/600
    /echo ${TimeWaiting} minutes left on timer.
/return

Sub Invite_Group
    /call Assign_Group_Members
    
    :ReInviteGroup
        /doevents
        
        /if (${Me.Name.Equal[${GroupMember0}]}) {
            /if (${Group}==0 && ${Spawn[${GroupMember1}].ID}) {
                /invite ${GroupMember1} 
                /delay 3s
                /bct ${GroupMember1} //invite
                /delay 3s
            }
            
            /if (${Group}==1 && ${Spawn[${GroupMember2}].ID}) {
                /invite ${GroupMember2}
                /delay 3s
                /bct ${GroupMember2} //invite
                /delay 3s
            }
            
            /if (${Group}==2) /return
        }
        
    /if (${Group}<2) /goto :ReInviteGroup
/return

Sub Assign_Group_Members

    /declare gl string local ${Select[${Me},${Group1Member1},${Group2Member1},${Group3Member1}]}
    
        /if (${Me.CleanName.Equal[${Group${gl}Member1}]}) {
        /varset GroupMember0     ${Group${gl}Member1}
        /varset GroupMember1     ${Group${gl}Member2}
        /varset GroupMember2     ${Group${gl}Member3}
        /varset MainRequester     ${Group${gl}Member1}
        /varset MobTemplate        1
    |- For single groups with no predefined toons
    } else /if (${gl}==0 && ${Me.Name.Equal[${Group.Leader}]}) {
        /varset GroupMember0     ${Group.Member[0].CleanName}
        /varset GroupMember1    ${Group.Member[1].CleanName}
        /varset GroupMember2     ${Group.Member[2].CleanName}
        /varset MainRequester     ${Me.CleanName}
        /varset MobTemplate        1
    }
/return

Sub Stand_Up
    /if (${Me.State.Equal[FEIGN]} || ${Me.State.NotEqual[Stand]}) {
        /stand
        /delay 3s ${Me.State.Equal[STAND]}
    }
/return

Sub Plugins_Check
    /if (!${Bool[${Plugin[mq2advpath]}]}) { 
        /echo MQ2AdvPath not detected!  This macro requires it! 
        /plugin mq2advpath
    }
    
    /if (!${Bool[${Plugin[mq2moveutils]}]}) { 
        /echo MQ2MoveUtils not detected!  This macro requires it! 
        /plugin mq2moveutils
    }
    
    /if (${Bool[${Plugin[mq2melee]}]}) { 
        /echo MQ2Melee detected! Turning plugin off! 
        /melee off
    } 
/return

Sub Count_Group
    /echo Waiting for entire group to zone in before continuing.
    :groupwait
    /delay 1s
    /if (${SpawnCount[pc group]}<${Group.GroupSize}) /goto :groupwait
/return 

Sub Assign_Next_Crew

    /declare gl    int    local    0
    /declare gn    int    local    0
    /if (${Select[${GroupMember0},${Group1Member1},${Group2Member1},${Group3Member1}]}>0)    /varset gl ${Select[${GroupMember0},${Group1Member1},${Group2Member1},${Group3Member1}]}
    /if (${Select[${GroupMember1},${Group1Member2},${Group2Member2},${Group3Member2}]}>0)    /varset gl ${Select[${GroupMember1},${Group1Member2},${Group2Member2},${Group3Member2}]}
    /if (${Select[${GroupMember2},${Group1Member3},${Group2Member3},${Group3Member3}]}>0)    /varset gl ${Select[${GroupMember2},${Group1Member3},${Group2Member3},${Group3Member3}]}
    /if (${gl}==1) /varset gn 2
    /if ((${gl}==2 && ${NumberOfGroups}==2) || (${gl}==3 && ${NumberOfGroups}==3)) /varset gn 1
    /if (${gl}==2 && ${NumberOfGroups}==3) /varset gn 3
    
    /echo Attemping to select next Boomerang character.    
    
    /if (${GroupMember0.Equal[${Group${gl}Member1}]}) {
        /echo Next Boomerang character is ${Group${gn}Member1}
        /varset GroupMember0     ${Group${gn}Member1}
        /varset GroupMember1     ${Group${gn}Member2}
        /varset GroupMember2     ${Group${gn}Member3}
        /varset MainRequester     ${Group${gn}Member1}
        /call Select_Character     ${Group${gn}Member1}
        /varset CharSwitched TRUE
        /return
    }
    
    /if (${GroupMember1.Equal[${Group${gl}Member2}]}) {
        /echo Next Boomerang character is ${Group${gn}Member2}
        /call Select_Character ${Group${gn}Member2}
        /varset CharSwitched TRUE
        /return
    }
    
    /if (${GroupMember2.Equal[${Group${gl}Member3}]}) {
        /echo Next Boomerang character is ${Group${gn}Member3}
        /call Select_Character ${Group${gn}Member3}
        /varset CharSwitched TRUE
        /return
    }
    
/return

Sub Select_Character(string name)
   /declare ToonToLogin int local
   /echo Selecting ${name}
   /varset ToonToLogin ${Window[CharacterListWnd].Child[CLW_LeftScreen].Child[CLW_CharactersScreen].Child[CLW_Character_List].List[${name},3]}
   /delay 1s
   /notify CharacterListWnd CLW_Character_List listselect ${ToonToLogin}
/return

Sub Time_In_Brells_Rest
    /if (${ZoneTimer}==0) {
        /echo Over 5 minutes spent in Brells Rest something is wrong.
        /echo Camping out and ending macro.
        /mqlog ${Me.Name} - Group: ${Group} GotTask: ${GotTask} ShroudCalled: ${ShroudCalled} MatchOver :${MatchOver} WaitingToCamp: ${WaitingToCamp} TimeToCamp: ${TimeToCamp} 
        /call Camp_Group_End_Macro
    }
/return

Sub Camp_Group_End_Macro
    /if (${Bool[${Plugin[mq2melee]}]}) /bcaa //melee off
    /delay 6
    /bcaa //camp
    /delay 6
    /bcaa //end
/return

- - - Updated - - -

- - - Updated - - -

SO touchy, got it to work, looks like whomever your main is he gets last place everytime so plan accordingly....
 
Last edited:
wierg. ran flawlessly on 1st set of toons, swapped out 3 completely new toons, changed the names in the ini and it does everything right until it zones into event, my #1 guy stands at the yellow ramp and does nothing.... if I move him manually he runs to the event guy and starts it and runs the event, then moves in a circle at the ramp again and never leaves the event.... if I move him to the door he leaves and it logs them all out...

- - - Updated - - -

it appears I am too far away from the quest guy when I zone in, my dude just says "start" over and over and will not start until I move him closer hmmm may need to add a moveto to get to npc but still will need to deal with leaving
 
Last edited:
sounds like mq2melee is hiding/sneaking you and screwing shit up try

/melee plugin=0
 
always with the answer you are..... thank you so much!

- - - Updated - - -

ok now the last part when my main guy zones in he immediately turns to the right and moves to the 1st ramp then sits and says "start" over and over...... if I move him closer to start guy it all starts and runs fine but still wont leave at end, just circles the ramp again

- - - Updated - - -

gonna try a new group, this group has the augs I wanted .....
 
I was hoping to farm some silver and gold tokens and found this macro in a search. I tried to run this today and the macro would not run to the instance. I am assuming it is because I am missing the brellsrest.ini file mentioned here because I got the error in the attached picture:

It also uses MQ2Advpath
The advpath file is attached below but you need to create and place in the correct folder.
1. In your macroquest2 root or release folder create a new folder called MQ2AdvPath
2. Save or copy the brellsrest.ini into that folder so the location would be something like C:/Release/MQ2AdvPath/brellsrest.ini

I did not see the brellsrest.ini attached anywhere in this thread. I don't suppose anyone has it somewhere? If not, are there any other macros that are up to date to run the Boomerang quest? Or could someone describe how I could make the ini?

Thanks!
 

Attachments

  • Capture.PNG
    Capture.PNG
    5.5 KB · Views: 11
So, I discovered in another post that the brellsrest.ini file would just be a recorded path using MQ2AdvPath. So, I recorded a path from Gilbot to the arena door and named it just as it is in the macro: arena_to_gilbot. When I tried to play the path I just recorded, it did not work (using /play arena_to_gilbot smart). So, I logged out all my boxes to desktop and logged them all back in. I ran /play arena_to_gilbot smart and my toon ran to the arena door just as I recorded it. I then ran him back using /play arena_to_gilbot reverse smart to test that command just as it was in the macro. This also worked nicely. Just to be thourough, I ran another /play arena_to_gilbot smart and nothing happpened. It says:

[MQ2AdvPath] Playing Path: arena_to_gilbot
[MQ2AdvPath] Stopped

and nothing happens. I have logged out and back in multiple times and the first time I run /play arena_to_gilbot it works just fine, but only once...I know this is now probably not associated with this macro...should I post this somewhere else to get help?

Thanks!
 
I also just tried to run this after freshly logging in my 3 characters to try to capitalize on the first run of /play arena_to_gilbot working...but sadly, none of them played it properly.
 
I checked some old mq2 backups but I was not able to find any of my old path files for this macro. Sorry.
 
I checked some old mq2 backups but I was not able to find any of my old path files for this macro. Sorry.

Thanks for looking for your old files Maskoi!

Okay, so I have been working on this all night and have some comments and hopefully can get some feedback as to why it is not working:

I think I resolved my original problem with respect to MQ2AdvPath: I originally recorded the path starting at Gilbot and then going to the arena door. I realized after posting that the /play command said arena_to_gilbot. So, I rerecorded the MQ2AdvPath.

I moved all 9 characters to the Arena Door and ran the macro. This allowed me to run the macro and my first set of 3 characters were able to group up, get the task, select shrouds, travel to the instance, enter, complete the challenge, then log out, select the next set of 3, they would log in, group up, then do nothing...

Nothing I have tried has enabled the second set of 3 characters to continue after grouping. They all stand around at the arena door and I get spammed with:

[MQ2]Requesting the task from Gilboth the Magnificient
[MQ2]Delaying 5s.
[MQ2]Have a timer still...
[MQ2]Moving to Gilbot the Magnificent.
[MQ2AdvPath] Playing path:arena_to_gilbot
[MQ2AdvPath] Stopped

and repeat.

Help!
 
Ok, the next try I performed: I placed Leader 1, leader 2, and leader 3 at Gilbot. Group member 2 and 3 for all groups were at the Arena door. Started the mac and round 1 went perfectly. Round 2 started up as it should: leader invited all, everyone chose a shroud, leader moved to Arena door and all entered. The leader started the event and proceeded to attack as normal. Group2 members 1 and 2 stood there the whole time and did nothing. The event ran it's course and the group leader2 kicked everyone. Group2 leader received rewards, but group members 2 and 3 got nothing. Everyone exited the instance and then the macro stalled with all toons saying [MQ2] I just zoned into Brell's Rest....no logging and no selecting of group 3.

Progress, but not success....
 
Question - Brell's Boomerang

Users who are viewing this thread

Back
Top
Cart