|** ------------------------------------------------------
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