Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.

/declare Porter string outer Porter
/declare Translocator string outer YYYY
/declare EQBCOn bool outer 0
/declare UseTransloc bool outer 0
| /declare Porter string outer Toon
/declare Translocator string outer Toon
/declare SelfPorter bool outer 0
/declare EQBCOn bool outer 1
/declare UseTransloc bool outer 1
No worries. Thanks for trying though.
/if (${Me.Level}>=80 && (${Me.Class.Name.Equal[Wizard]} || ${Me.Class.Name.Equal[Druid]}) && !${UseTransloc}) {
/if (${Me.Gem[Brell's Rest Gate]} || ${Me.Gem[Brell's Rest Portal]}) {
/varset BrellsSpell "Brell's Rest Gate"
/varset Porter ${Me}
/varset SelfPorter 1
} else /if (${Me.Gem[Ring of Brell's Rest]} || ${Me.Gem[Circle of Brell's Rest]} && ${SelfPorter}) {
/varset BrellsSpell "Ring of Brell's Rest"
/varset Porter ${Me}
/varset SelfPorter 0
}
}
|AutobonesV3.mac
|TurnIn, ClearCursor, SafeTarget, Events, CleanInventory and BuyChips routines by EqMule
|Merc support written by Redbot
|CheckPlugin written by Maskoi
|Movement routines written by Randyleo
#turbo 120
#Event TSCursor "#*#because only tradeskill items may go in a tradeskill bag.#*#"
#Event NullSlot "#*#Invalid item slot 'null#*#"
Sub Main
| *** Change XXXX and YYYY to Porter/Translocator's name ***
/declare Porter string outer yyyy
/declare Translocator string outer xxxx
/declare SelfPorter bool outer 0
/declare EQBCOn bool outer 0
/declare UseTransloc bool outer 1
/declare BrellsSpell string outer
/declare GunlokTurnY float outer 1316
/declare GunlokTurnX float outer 136
/declare BrellsTurnY float outer -626
/declare BrellsTurnX float outer 81
| *** If you want to end the macro when character reaches a target level, set the following
| variable or use /mac macro_name #, where # is the target level.
/declare HighLevel int outer 110
/declare ItemToHandIn string outer Bone Chips
/declare TurnInTarget string outer Gunlok
/declare NullExit int outer 0
| -------------------------------------------------------------------------------------
| Check if required plugins are loaded Stolen from KissAssist
| -------------------------------------------------------------------------------------
/echo Checking Plugins...
/call CheckPlugin MQ2Cast
/call CheckPlugin MQ2Moveutils
/call CheckPlugin MQ2EQBC
/call CheckPlugin MQ2Autoaccept
/call CheckPlugin MQ2Posse
/squelch /autoaccept add ${Porter}
/squelch /autoaccept add ${Translocator}
/if (${Defined[Param0]}) {
/if (${Int[${Param0}]}>0) {
/varset HighLevel ${Param0}
} else {
/echo Bad 1st argument, ignoring.
/varset Param0 NULL
}
}
/if (${Me.Level}>=80 && (${Me.Class.Name.Equal[Wizard]} || ${Me.Class.Name.Equal[Druid]}) && !${UseTransloc}) {
/if (${Me.Gem[Brell's Rest Gate]} || ${Me.Gem[Brell's Rest Portal]}) {
/varset BrellsSpell "Brell's Rest Gate"
/varset Porter ${Me}
/varset SelfPorter 0
} else /if (${Me.Gem[Ring of Brell's Rest]} || ${Me.Gem[Circle of Brell's Rest]} && ${SelfPorter}) {
/varset BrellsSpell "Ring of Brell's Rest"
/varset Porter ${Me}
/varset SelfPorter 1
}
}
:mainloop
/call LevelCheck
/if (${Zone.ID}==67) {
/call MoveToGunlok
/call PreTurnIn
/delay 5
:KaladimLoop
/call LevelCheck
/call SafeTarget ${TurnInTarget}
/call ClearCursor
/call TurnIn
/call ClearCursor
/if (${FindItemCount[${ItemToHandIn}]}>0) {
/goto :KaladimLoop
} else {
/call ClearCursor
/call CleanInventory
/call PortToBrellsRest
/call Marie
/call Bind
/goto :mainloop
}
} else /if (${Zone.ID}==480) {
/call ClearCursor
/call CleanInventory
/call Marie
/call Bind
/goto :mainloop
} else {
/echo Get your ass to Mar--err Marie, Quaid!
/echo (Macro needs to start in Brell's Rest or N. Kaladim.)
/goto :mainloop
}
/return
| ----------------------------------------------------------------------------
| SUB: Check Plugin Stolen from KissAssist
| ----------------------------------------------------------------------------
Sub CheckPlugin(string pluginname)
/if (!${Bool[${Plugin[${pluginname}]}]}) {
/squelch /plugin ${pluginname}
/echo ${pluginname} not detected! This macro requires it! Loading ...
}
/if (${String[${pluginname}].Equal[MQ2EQBC]}) /varset EQBCOn 1
/return
| ----------------------------------------------------------------------------
| SUB: CheckGM
| ----------------------------------------------------------------------------
Sub CheckGM
/declare GMPCEchoed bool local 0
:ReCheck
/doevents
/if (!${AFKToolsOn}) {
/squelch /posse load
/if (${Bool[${Spawn[gm].ID}]}) {
/if (!${GMPCEchoed}) {
/echo A GM or Guide has been detected in the zone, pausing macro until zone is clear.
/varset GMPCEchoed 1
}
/delay 600s
/goto :ReCheck
}
/if (${Posse.Strangers}>=1) {
/if (!${GMPCEchoed}) {
/echo Another player is nearby, pausing macro until they leave.
/varset GMPCEchoed 1
}
/delay 60s
/goto :ReCheck
}
}
/varset GMPCEchoed 0
/return
| ----------------------------------------------------------------------------
| SUB: MoveToGunlok
| ----------------------------------------------------------------------------
Sub MoveToGunlok
/declare LocOffsetX local float 0
/declare LocOffsetY local float 0
/declare TurnX local float
/declare TurnY local float
/varset LocOffsetX ${Math.Calc[${Math.Calc[${Math.Rand[300]}/100].Centi}+${GunlokTurnX}]}
/varset LocOffsetY ${Math.Calc[${Math.Calc[${Math.Rand[300]}/100].Centi}+${GunlokTurnY}]}
/squelch /target clear
/moveto mdist 10
/squelch /target "Gunlok Jure"
/delay 2s
:recheck
/if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX}
/delay 5s
/if (${Me.Moving}) {
/delay 5
/goto :recheck
} else {
/delay 1
}
/if (${Target.Distance}>15) /moveto id
/delay 0 ${MoveTo.Stopped}
/face fast
/return
| --------------------------------------------------------------
| Sub: PreTurnIn
| --------------------------------------------------------------
Sub PreTurnIn
| /if (${Mercenary.State.Equal[SUSPENDED]}) {
| /echo Unsuspending mercenary.
| /if (!${Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled}) {
| /echo Waiting for button to enable...
| /delay 60s
| }
| /notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
| }
/if (${Target.Type.Equal[npc]}) {
/if (${Me.Grouped}) {
/echo Disbanding group for mad XPs.
/disband
}
}
/call ClearCursor
/delay 5
/return
| ---------------------------------------------------------------
| Sub: ClearCursor
| ---------------------------------------------------------------
Sub ClearCursor
:redestroy
/if (${Cursor.ID} && ${Cursor.NoDrop}==FALSE) {
/destroy
/delay 0 ${Bool[${Cursor.ID}]}==FALSE
/goto :redestroy
}
/return
| --------------------------------------------------------------
| Sub: SafeTarget
| --------------------------------------------------------------
Sub SafeTarget(string targ)
/declare targid int local 0
:retarget
/if (${Target.ID} && ${Target.ID}==${Spawn[${targ}].ID}) /return
/if (${Spawn[${targ}].ID}) {
/varset targid ${Spawn[${targ}].ID}
/if (${Spawn[${targ}].Distance}<100) {
/echo Targeting ${Spawn[${targ}]}
/target id ${targid}
/delay 30 ${Target.ID}==${targid}
}
}
/if (!${Target.ID}) {
/echo [SafeTarget] couldnt find a target, retrying
/delay 1s
/goto :retarget
}
/return
| ---------------------------------------------------------------
| Sub: TurnIn
| ---------------------------------------------------------------
Sub TurnIn
/declare bonetimer timer local 0
/declare i int local
/doevents
/call CheckGM
/call LevelCheck
/for i 0 to 3
:GetBoneChips
/if (${FindItemCount[${ItemToHandIn}]}>0) {
/itemnotify "${ItemToHandIn}" leftmouseup
/delay 1 ${Cursor.ID}==13073
:retrygive
/if (${Cursor.ID}==13073) {
/click left target
/delay 1 ${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.NotEqual[${ItemToHandIn}]}==FALSE
/if (${Cursor.ID} && ${Cursor.ID}==13073) {
/goto :retrygive
}
} else {
/goto :GetBoneChips
}
}
/next i
/if (${Window[GiveWnd].Open}) {
/notify GiveWnd GVW_Give_Button leftmouseup
/delay 200 !${Window[GiveWnd].Open}
}
/return
| ----------------------------------------------------------------------------
| SUB: CleanInventory
| ----------------------------------------------------------------------------
Sub CleanInventory
| /if (${Mercenary.State.Equal[ACTIVE]}) {
| /echo suspending mercenary
| /notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
| }
/declare StuffToDestroy string local Rusty Broad Sword|Torch|Rusty Short Sword|Rusty Mace|Rusty Two Handed Sword|Rusty Axe|Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Lantern|Small Tattered Skullcap|Small Patchwork Pants
/declare i int local
/for i 1 to 12
/echo ${StuffToDestroy.Arg[${i},|]} ${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}
/if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
:MoreToDestroy
/doevents
/itemnotify "${StuffToDestroy.Arg[${i},|]}" leftmouseup
/delay 10 ${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}
/if (${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}) {
/destroy
/delay 10 ${Bool[${Cursor.ID}]}==FALSE
}
/if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
/goto :MoreToDestroy
}
}
/next i
/squelch /target clear
/return
| ----------------------------------------------------------------------------
| SUB: PortToBrellsRest
| ----------------------------------------------------------------------------
Sub PortToBrellsRest
:PortLoop
/if (${SelfPorter}) {
/casting ${BrellsSpell} -maxtries|10
/delay 20s
} else {
/squelch /target clear
/squelch /target ${Porter}
/if (${Target.Type.Equal[PC]}) {
/if (${UseTransloc}) {
/squelch /bct ${Porter} //delay 15s
/squelch /bct ${Porter} //casting "Translocate: Brell's Rest" -targetid|${Me.ID} -maxtries|10
/echo Bumming a transloc back to Brell's Rest from ${Porter} the Amazing.
/delay 20s
} else {
/bct ${Porter} //invite ${Me.Name}
/delay 3s
/notify ConfirmationDialogBox CD_Yes_Button leftmouseup
/delay 3s
/echo Porting to Brell's Rest...
/bct ${Porter} //casting ${BrellsSpell} -maxtries|5
/delay 20s
}
} else {
/echo My ride to Brell's Rest is missing, waiting...
/delay 60s
/goto :PortLoop
}
}
/if (${Zone.ShortName.NotEqual[brellsrest]}) {
/echo Recasting teleport...
/goto :PortLoop
}
/return
| ----------------------------------------------------------------------------
| SUB: Marie
| ----------------------------------------------------------------------------
Sub Marie
/delay 5
/call MoveToMarie
/face fast
/call NPC "Marie Fay"
/call BuyChips
/delay 3s
/return
| ----------------------------------------------------------------------------
| SUB: Bind
| ----------------------------------------------------------------------------
Sub Bind
/squelch /target clear
/if (${Merchant.Open}) {
/notify MerchantWnd MW_Done_Button leftmouseup
/delay 1s !${Merchant.Open}
/delay 5s
}
:PortAgain
/if (${UseTransloc} || ${SelfPorter}) {
/if (${Me.AltAbilityReady[Gate]} && ${Me.Level}>=55) {
/casting Gate -maxtries|5
/echo Gating (AA) back to turn-in...
/delay 15s
} else /if (${Me.Gem[Gate]}) {
/casting ${Me.Gem[Gate]} -maxtries|10
/echo Gating (spell) back to turn-in...
/delay 15s
} else /if (${FindItem[Philter of Major Translocation].InvSlot}) {
/casting "Philter of Major Translocation"
/echo Gating (potion) back to turn-in... I have ${FindItemCount[${Philter of Major Translocation}]} pots left.
/delay 15s
} else /if (${Defined[Translocator]}) {
/squelch /target clear
/squelch /target ${Translocator}
/delay 5
/if (${Target.Name.Equal[${Translocator}]}) {
/squelch /bct ${Translocator} //delay 15s
/squelch /bct ${Translocator} //casting Translocate -targetid|${Me.ID} -maxtries|10
/echo Bumming a ride from ${Translocator} the Magnificent.
/delay 20s
} else {
/echo My translocator is missing, waiting...
/delay 5s
/goto :PortAgain
}
} else {
/echo I have no methods of returning to bind! Ending macro.
/endmacro
}
} else {
/bct ${Porter} //casting "Teleport Bind" -maxtries|5
/delay 15s
}
/if (${Zone.ShortName.Equal[brellsrest]}) {
/echo Trying again.
/goto :PortAgain
}
/return
| ----------------------------------------------------------------------------
| SUB: NPC(NPCName)
| ----------------------------------------------------------------------------
Sub NPC(NPCName)
/target npc ${NPCName}
/delay 1s
/if (!${Select[${Target.Type},npc,pet]} || !${Target.ID} || ${Target.Type.Equal[pet]} && !${Target.CleanName.Find[familiar]}) {
/echo Please target a vendor or guildbanker
}
/echo Doing business with ${NPCName}
/target id ${Spawn[${NPCName}].ID}
/delay 3s ${Target.ID}==${Spawn[${NPCName}].ID}
/if (${Target.Distance}>15) {
/moveto id ${Spawn[${NPCName}].ID}
/delay 250 ${MoveTo.Stopped}
}
/face nolook
/delay 1s
/nomodkey /click right target
/echo Waiting 5s for merchant/guildbank window to populate
/delay 5s
/return
| ----------------------------------------------------------------------------
| SUB: BuyChips Written by EqMule
| ----------------------------------------------------------------------------
Sub BuyChips
| This is to adjust number of free lots to be left open while buying Bone Chips.
| I suggest leaving a couple of slots open in case of severe lag.
/declare FreeSlots int local 0
/notify MerchantWnd ItemList listselect ${Window[MerchantWnd].Child[ItemList].List[=Bone Chips,2]}
/delay 2s
:goagain
/if (${Me.FreeInventory}>${FreeSlots}) {
/Shiftkey /notify merchantwnd MW_Buy_Button leftmouseup
:waitforit
/if (${Window[MerchantWnd].Child[MW_Buy_Button].Enabled}==FALSE) {
/echo button is false
/delay 2
/goto :waitforit
}
/goto :goagain
}
/delay 2s
/return
| ----------------------------------------------------------------------------
| SUB: MoveToMarie
| ----------------------------------------------------------------------------
Sub MoveToMarie
/declare LocOffsetX local float 0
/declare LocOffsetY local float 0
/declare TurnX local float
/declare TurnY local float
| /varset LocOffsetX ${Math.Calc[${Math.Calc[${Math.Rand[30]}/100].Centi}+${BrellsTurnX}]}
| /varset LocOffsetY ${Math.Calc[${Math.Calc[${Math.Rand[30]}/100].Centi}+${BrellsTurnY}]}
/varset LocOffsetX ${BrellsTurnX}]}
/varset LocOffsetY ${BrellsTurnY}]}
/squelch /target clear
/moveto mdist 10
/squelch /target "Marie Fay"
/delay 2s
:recheck
/if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX}
/delay 5
/if (${Me.Moving}) {
/delay 5
/goto :recheck
} else {
/delay 1
}
/if (${Target.Distance}>15) /moveto id
/delay 0 ${MoveTo.Stopped}
/face fast
/return
| ----------------------------------------------------------------------------
| SUB: MoveToPorter
| ----------------------------------------------------------------------------
Sub MoveToPorter
/if (!${UseTransloc}) {
/echo Moving to ${Porter}
/squelch /target clear
/if (${Merchant.Open}) {
/notify MerchantWnd MW_Done_Button leftmouseup
/delay 1s !${Merchant.Open}
}
/moveto mdist 10
/moveto loc ${BrellsTurnY} ${BrellsTurnX}
:StillMoving2
/delay 1
/if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving2
/delay 0 !${Me.Moving}
/squelch /target ${Porter}
/if (${Target.Distance}>15) /moveto id
/delay 10 ${MoveTo.Stopped}
}
/return
| ----------------------------------------------------------------------------
| SUB: LevelCheck
| ----------------------------------------------------------------------------
Sub LevelCheck
/if (${Me.Level}>=${HighLevel}) {
/echo Reached target level, ending macro.
/endmacro
}
/return
| --------------------------------------------------------------------------
| Sub: Event_TSCursor
| --------------------------------------------------------------------------
Sub Event_TSCursor
/declare ItemToDestroy string local Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Tattered Skullcap|Small Patchwork Pants|Rusty Axe|Rusty Broad Sword|Rusty Mace|Rusty Short Sword|Rusty Two Handed Sword|Small Lantern|Torch
/declare i int local
/for i 1 to 12
:retryclearTSCursor
/if (${Cursor.Name.Equal[${ItemToDestroy.Arg[${i},|]}]}) {
/echo ${ItemToDestroy.Arg[${i},|]} on cursor. Destroying!
/destroy
|might need this:/delay 1
/goto :retryclearTSCursor
}
/next i
/doevents
/return
| ----------------------------------------------------------------------------
| Sub: Event_NullSlot
| ----------------------------------------------------------------------------
Sub Event_NullSlot
/varset NullExit 1
/echo Opening all bags to correct null slot
/keypress OPEN_INV_BAGS
/timed 100 /keypress CLOSE_INV_BAGS
/return
It should automatically set a self porter's name. Macro looks for a Brell's Rest teleport spell, and if you have one it will set the character's name to be the porter. The macro can't however parse another character's spells if someone else is teleporting them, you set the variable.Many thanks! And if I'm just using one wizard, do I change the porter to the characters name or both? My wiz is bound in Kaladim and can port to brell's easy enough. Just need to know which one to change. Been using his teleport to bind aa to get them back to Kaladim after filling up in Brells.
Replace the following in the first sub:Rich (BB code):/if (${Me.Level}>=80 && (${Me.Class.Name.Equal[Wizard]} || ${Me.Class.Name.Equal[Druid]}) && !${UseTransloc}) { /if (${Me.Gem[Brell's Rest Gate]} || ${Me.Gem[Brell's Rest Portal]}) { /varset BrellsSpell "Brell's Rest Gate" /varset Porter ${Me} /varset SelfPorter 1 } else /if (${Me.Gem[Ring of Brell's Rest]} || ${Me.Gem[Circle of Brell's Rest]} && ${SelfPorter}) { /varset BrellsSpell "Ring of Brell's Rest" /varset Porter ${Me} /varset SelfPorter 0 } }
EDIT: Here's the full code. I've made some minor revisions that streamline the code but make no real improvements. Also, I mentioned creating a macro that would allow a party as well as the porter to all run the macro, but I'm officially abandoning that concept in favor of simply using a translocator at either end. It's two more bots you need to run but 1) accounts are cheap and 2) it's easily 100 times simpler.
Rich (BB code):|AutobonesV3.mac |TurnIn, ClearCursor, SafeTarget, Events, CleanInventory and BuyChips routines by EqMule |Merc support written by Redbot |CheckPlugin written by Maskoi |Movement routines written by Randyleo #turbo 120 #Event TSCursor "#*#because only tradeskill items may go in a tradeskill bag.#*#" #Event NullSlot "#*#Invalid item slot 'null#*#" Sub Main | *** Change XXXX and YYYY to Porter/Translocator's name *** /declare Porter string outer yyyy /declare Translocator string outer xxxx /declare SelfPorter bool outer 0 /declare EQBCOn bool outer 0 /declare UseTransloc bool outer 1 /declare GunlokTurnY float outer 1316 /declare GunlokTurnX float outer 136 /declare BrellsTurnY float outer -626 /declare BrellsTurnX float outer 81 | *** If you want to end the macro when character reaches a target level, set the following | variable or use /mac macro_name #, where # is the target level. /declare HighLevel int outer 110 /declare ItemToHandIn string outer Bone Chips /declare TurnInTarget string outer Gunlok /declare NullExit int outer 0 | ------------------------------------------------------------------------------------- | Check if required plugins are loaded Stolen from KissAssist | ------------------------------------------------------------------------------------- /echo Checking Plugins... /call CheckPlugin MQ2Cast /call CheckPlugin MQ2Moveutils /call CheckPlugin MQ2EQBC /call CheckPlugin MQ2Autoaccept /call CheckPlugin MQ2Posse /squelch /autoaccept add ${Porter} /squelch /autoaccept add ${Translocator} /if (${Defined[Param0]}) { /if (${Int[${Param0}]}>0) { /varset HighLevel ${Param0} } else { /echo Bad 1st argument, ignoring. /varset Param0 NULL } } /if (${Me.Level}>=80 && (${Me.Class.Name.Equal[Wizard]} || ${Me.Class.Name.Equal[Druid]}) && !${UseTransloc}) { /if (${Me.Gem[Brell's Rest Gate]} || ${Me.Gem[Brell's Rest Portal]}) { /varset BrellsSpell "Brell's Rest Gate" /varset Porter ${Me} /varset SelfPorter 0 } else /if (${Me.Gem[Ring of Brell's Rest]} || ${Me.Gem[Circle of Brell's Rest]} && ${SelfPorter}) { /varset BrellsSpell "Ring of Brell's Rest" /varset Porter ${Me} /varset SelfPorter 1 } } :mainloop /call LevelCheck /if (${Zone.ID}==67) { /call MoveToGunlok /call PreTurnIn /delay 5 :KaladimLoop /call LevelCheck /call SafeTarget ${TurnInTarget} /call ClearCursor /call TurnIn /call ClearCursor /if (${FindItemCount[${ItemToHandIn}]}>0) { /goto :KaladimLoop } else { /call ClearCursor /call CleanInventory /call PortToBrellsRest /call Marie /call Bind /goto :mainloop } } else /if (${Zone.ID}==480) { /call ClearCursor /call CleanInventory /call Marie /call Bind /goto :mainloop } else { /echo Get your ass to Mar--err Marie, Quaid! /echo (Macro needs to start in Brell's Rest or N. Kaladim.) /goto :mainloop } /return | ---------------------------------------------------------------------------- | SUB: Check Plugin Stolen from KissAssist | ---------------------------------------------------------------------------- Sub CheckPlugin(string pluginname) /if (!${Bool[${Plugin[${pluginname}]}]}) { /squelch /plugin ${pluginname} /echo ${pluginname} not detected! This macro requires it! Loading ... } /if (${String[${pluginname}].Equal[MQ2EQBC]}) /varset EQBCOn 1 /return | ---------------------------------------------------------------------------- | SUB: CheckGM | ---------------------------------------------------------------------------- Sub CheckGM /declare GMPCEchoed bool local 0 :ReCheck /doevents /if (!${AFKToolsOn}) { /squelch /posse load /if (${Bool[${Spawn[gm].ID}]}) { /if (!${GMPCEchoed}) { /echo A GM or Guide has been detected in the zone, pausing macro until zone is clear. /varset GMPCEchoed 1 } /delay 600s /goto :ReCheck } /if (${Posse.Strangers}>=1) { /if (!${GMPCEchoed}) { /echo Another player is nearby, pausing macro until they leave. /varset GMPCEchoed 1 } /delay 60s /goto :ReCheck } } /varset GMPCEchoed 0 /return | ---------------------------------------------------------------------------- | SUB: MoveToGunlok | ---------------------------------------------------------------------------- Sub MoveToGunlok /declare LocOffsetX local float 0 /declare LocOffsetY local float 0 /declare TurnX local float /declare TurnY local float /varset LocOffsetX ${Math.Calc[${Math.Calc[${Math.Rand[300]}/100].Centi}+${GunlokTurnX}]} /varset LocOffsetY ${Math.Calc[${Math.Calc[${Math.Rand[300]}/100].Centi}+${GunlokTurnY}]} /squelch /target clear /moveto mdist 10 /squelch /target "Gunlok Jure" /delay 2s :recheck /if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX} /delay 5 /if (${Me.Moving}) { /delay 5 /goto :recheck } else { /delay 1 } /if (${Target.Distance}>15) /moveto id /delay 0 ${MoveTo.Stopped} /face fast /return | -------------------------------------------------------------- | Sub: PreTurnIn | -------------------------------------------------------------- Sub PreTurnIn | /if (${Mercenary.State.Equal[SUSPENDED]}) { | /echo Unsuspending mercenary. | /if (!${Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled}) { | /echo Waiting for button to enable... | /delay 60s | } | /notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp | } /if (${Target.Type.Equal[npc]}) { /if (${Me.Grouped}) { /echo Disbanding group for mad XPs. /disband } } /call ClearCursor /delay 5 /return | --------------------------------------------------------------- | Sub: ClearCursor | --------------------------------------------------------------- Sub ClearCursor :redestroy /if (${Cursor.ID} && ${Cursor.NoDrop}==FALSE) { /destroy /delay 0 ${Bool[${Cursor.ID}]}==FALSE /goto :redestroy } /return | -------------------------------------------------------------- | Sub: SafeTarget | -------------------------------------------------------------- Sub SafeTarget(string targ) /declare targid int local 0 :retarget /if (${Target.ID} && ${Target.ID}==${Spawn[${targ}].ID}) /return /if (${Spawn[${targ}].ID}) { /varset targid ${Spawn[${targ}].ID} /if (${Spawn[${targ}].Distance}<100) { /echo Targeting ${Spawn[${targ}]} /target id ${targid} /delay 30 ${Target.ID}==${targid} } } /if (!${Target.ID}) { /echo [SafeTarget] couldnt find a target, retrying /delay 1s /goto :retarget } /return | --------------------------------------------------------------- | Sub: TurnIn | --------------------------------------------------------------- Sub TurnIn /declare bonetimer timer local 0 /declare i int local /doevents /call CheckGM /call LevelCheck /for i 0 to 3 :GetBoneChips /if (${FindItemCount[${ItemToHandIn}]}>0) { /itemnotify "${ItemToHandIn}" leftmouseup /delay 1 ${Cursor.ID}==13073 :retrygive /if (${Cursor.ID}==13073) { /click left target /delay 1 ${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.NotEqual[${ItemToHandIn}]}==FALSE /if (${Cursor.ID} && ${Cursor.ID}==13073) { /goto :retrygive } } else { /goto :GetBoneChips } } /next i /if (${Window[GiveWnd].Open}) { /notify GiveWnd GVW_Give_Button leftmouseup /delay 200 !${Window[GiveWnd].Open} } /return | ---------------------------------------------------------------------------- | SUB: CleanInventory | ---------------------------------------------------------------------------- Sub CleanInventory | /if (${Mercenary.State.Equal[ACTIVE]}) { | /echo suspending mercenary | /notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp | } /declare StuffToDestroy string local Rusty Broad Sword|Torch|Rusty Short Sword|Rusty Mace|Rusty Two Handed Sword|Rusty Axe|Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Lantern|Small Tattered Skullcap|Small Patchwork Pants /declare i int local /for i 1 to 12 /echo ${StuffToDestroy.Arg[${i},|]} ${FindItemCount[${StuffToDestroy.Arg[${i},|]}]} /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) { :MoreToDestroy /doevents /itemnotify "${StuffToDestroy.Arg[${i},|]}" leftmouseup /delay 10 ${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]} /if (${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}) { /destroy /delay 10 ${Bool[${Cursor.ID}]}==FALSE } /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) { /goto :MoreToDestroy } } /next i /squelch /target clear /return | ---------------------------------------------------------------------------- | SUB: PortToBrellsRest | ---------------------------------------------------------------------------- Sub PortToBrellsRest :PortLoop /if (${SelfPorter}) { /casting ${BrellsSpell} -maxtries|10 /delay 20s } else { /squelch /target clear /squelch /target ${Porter} /if (${Target.Type.Equal[PC]}) { /if (${UseTransloc}) { /squelch /bct ${Porter} //delay 15s /squelch /bct ${Porter} //casting "Translocate: Brell's Rest" -targetid|${Me.ID} -maxtries|10 /echo Bumming a transloc back to Brell's Rest from ${Porter} the Amazing. /delay 20s } else { /bct ${Porter} //invite ${Me.Name} /delay 3s /notify ConfirmationDialogBox CD_Yes_Button leftmouseup /delay 3s /echo Porting to Brell's Rest... /bct ${Porter} //casting ${BrellsSpell} -maxtries|5 /delay 20s } } else { /echo My ride to Brell's Rest is missing, waiting... /delay 60s /goto :PortLoop } } /if (${Zone.ShortName.NotEqual[brellsrest]}) { /echo Recasting teleport... /goto :PortLoop } /return | ---------------------------------------------------------------------------- | SUB: Marie | ---------------------------------------------------------------------------- Sub Marie /delay 5 /call MoveToMarie /face fast /call NPC "Marie Fay" /call BuyChips /delay 3s /return | ---------------------------------------------------------------------------- | SUB: Bind | ---------------------------------------------------------------------------- Sub Bind /squelch /target clear /if (${Merchant.Open}) { /notify MerchantWnd MW_Done_Button leftmouseup /delay 1s !${Merchant.Open} /delay 5s } :PortAgain /if (${UseTransloc} || ${SelfPorter}) { /if (${Me.AltAbilityReady[Gate]} && ${Me.Level}>=55) { /casting Gate -maxtries|5 /echo Gating (AA) back to turn-in... /delay 15s } else /if (${Me.Gem[Gate]}) { /casting ${Me.Gem[Gate]} -maxtries|10 /echo Gating (spell) back to turn-in... /delay 15s } else /if (${FindItem[Philter of Major Translocation].InvSlot}) { /casting "Philter of Major Translocation" /echo Gating (potion) back to turn-in... I have ${FindItemCount[${Philter of Major Translocation}]} pots left. /delay 15s } else /if (${Defined[Translocator]}) { /squelch /target clear /squelch /target ${Translocator} /delay 5 /if (${Target.Name.Equal[${Translocator}]}) { /squelch /bct ${Translocator} //delay 15s /squelch /bct ${Translocator} //casting Translocate -targetid|${Me.ID} -maxtries|10 /echo Bumming a ride from ${Translocator} the Magnificent. /delay 20s } else { /echo My translocator is missing, waiting... /delay 5s /goto :PortAgain } } else { /echo I have no methods of returning to bind! Ending macro. /endmacro } } else { /bct ${Porter} //casting "Teleport Bind" -maxtries|5 /delay 15s } /if (${Zone.ShortName.Equal[brellsrest]}) { /echo Trying again. /goto :PortAgain } /return | ---------------------------------------------------------------------------- | SUB: NPC(NPCName) | ---------------------------------------------------------------------------- Sub NPC(NPCName) /target npc ${NPCName} /delay 1s /if (!${Select[${Target.Type},npc,pet]} || !${Target.ID} || ${Target.Type.Equal[pet]} && !${Target.CleanName.Find[familiar]}) { /echo Please target a vendor or guildbanker } /echo Doing business with ${NPCName} /target id ${Spawn[${NPCName}].ID} /delay 3s ${Target.ID}==${Spawn[${NPCName}].ID} /if (${Target.Distance}>15) { /moveto id ${Spawn[${NPCName}].ID} /delay 250 ${MoveTo.Stopped} } /face nolook /delay 1s /nomodkey /click right target /echo Waiting 5s for merchant/guildbank window to populate /delay 5s /return | ---------------------------------------------------------------------------- | SUB: BuyChips Written by EqMule | ---------------------------------------------------------------------------- Sub BuyChips | This is to adjust number of free lots to be left open while buying Bone Chips. | I suggest leaving a couple of slots open in case of severe lag. /declare FreeSlots int local 0 /notify MerchantWnd ItemList listselect ${Window[MerchantWnd].Child[ItemList].List[=Bone Chips,2]} /delay 2s :goagain /if (${Me.FreeInventory}>${FreeSlots}) { /Shiftkey /notify merchantwnd MW_Buy_Button leftmouseup :waitforit /if (${Window[MerchantWnd].Child[MW_Buy_Button].Enabled}==FALSE) { /echo button is false /delay 2 /goto :waitforit } /goto :goagain } /delay 2s /return | ---------------------------------------------------------------------------- | SUB: MoveToMarie | ---------------------------------------------------------------------------- Sub MoveToMarie /declare LocOffsetX local float 0 /declare LocOffsetY local float 0 /declare TurnX local float /declare TurnY local float | /varset LocOffsetX ${Math.Calc[${Math.Calc[${Math.Rand[30]}/100].Centi}+${BrellsTurnX}]} | /varset LocOffsetY ${Math.Calc[${Math.Calc[${Math.Rand[30]}/100].Centi}+${BrellsTurnY}]} /varset LocOffsetX ${BrellsTurnX}]} /varset LocOffsetY ${BrellsTurnY}]} /squelch /target clear /moveto mdist 10 /squelch /target "Marie Fay" /delay 2s :recheck /if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX} /delay 5 /if (${Me.Moving}) { /delay 5 /goto :recheck } else { /delay 1 } /if (${Target.Distance}>15) /moveto id /delay 0 ${MoveTo.Stopped} /face fast /return | ---------------------------------------------------------------------------- | SUB: MoveToPorter | ---------------------------------------------------------------------------- Sub MoveToPorter /if (!${UseTransloc}) { /echo Moving to ${Porter} /squelch /target clear /if (${Merchant.Open}) { /notify MerchantWnd MW_Done_Button leftmouseup /delay 1s !${Merchant.Open} } /moveto mdist 10 /moveto loc ${BrellsTurnY} ${BrellsTurnX} :StillMoving2 /delay 1 /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving2 /delay 0 !${Me.Moving} /squelch /target ${Porter} /if (${Target.Distance}>15) /moveto id /delay 10 ${MoveTo.Stopped} } /return | ---------------------------------------------------------------------------- | SUB: LevelCheck | ---------------------------------------------------------------------------- Sub LevelCheck /if (${Me.Level}>=${HighLevel}) { /echo Reached target level, ending macro. /endmacro } /return | -------------------------------------------------------------------------- | Sub: Event_TSCursor | -------------------------------------------------------------------------- Sub Event_TSCursor /declare ItemToDestroy string local Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Tattered Skullcap|Small Patchwork Pants|Rusty Axe|Rusty Broad Sword|Rusty Mace|Rusty Short Sword|Rusty Two Handed Sword|Small Lantern|Torch /declare i int local /for i 1 to 12 :retryclearTSCursor /if (${Cursor.Name.Equal[${ItemToDestroy.Arg[${i},|]}]}) { /echo ${ItemToDestroy.Arg[${i},|]} on cursor. Destroying! /destroy |might need this:/delay 1 /goto :retryclearTSCursor } /next i /doevents /return | ---------------------------------------------------------------------------- | Sub: Event_NullSlot | ---------------------------------------------------------------------------- Sub Event_NullSlot /varset NullExit 1 /echo Opening all bags to correct null slot /keypress OPEN_INV_BAGS /timed 100 /keypress CLOSE_INV_BAGS /return
When I use this one, I'm always running into the wall instead of running to Marie. If I start the mac at Marie it's fine until she ports back.
:recheck
/if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX}
/delay 5
:recheck
/if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX}
/delay 5s
The previous version did that for me too. This has the same :move to Marie sub, so this should work. In the Sub MoveToMarie section find:
Rich (BB code)::recheck /if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX} /delay 5
Change /delay 5 to /delay 5s
Rich (BB code)::recheck /if (${Target.Distance}>15) /moveto loc ${LocOffsetY} ${LocOffsetX} /delay 5s
I tried your code in 169 with a solo Wizard, it looks like it is missing abecause it poops out without one added.Rich (BB code):/declare BrellsSpell string outer "Group_Teleport_Spell_Name"
Problem with this idea is if you are not Iksar you need to do something special before you work the quest because you will be KOS. Either you need to do some faction work or use invis/SOS tricks. otherwise id say it would be a grand idea.I was wonder if anyone has ever tried to make a macro for the Field of Bone , Bonechip task
Trooper Mozo can be found at -2555, +3565, guarding the zone-in to East Cabilis.
I was wondering if there was a way to recall the bag clearing sub on the fly while the mac is running.
Sometimes the toons jump the gun and port back without fully clearing bags.
AutobonesV3a.mac
AutobonesV3b.mac
Can say thanks to frenzic for getting it nerfed..
https://forums.daybreakgames.com/eq/index.php?threads/yo-gm-or-dev.226407/page-8
Hmm, did I miss something with bonechips?
My freshly created druid seemed to turn in BCs just fine in Kaladim this night/morning(regular live server).
Or is the nerf only on TLP?
(the xp did go down 2x but that was just the bonus weekend ending)
.

[09/09/2015 02:46:38] myserv mychar 83 52.42 starting to give bones
[09/09/2015 03:07:03] myserv mychar 83 55.45 all done with giving bones
[09/09/2015 03:07:35] buying bones
[09/09/2015 03:10:14] done buying bones
[09/09/2015 03:10:33] myserv mychar 83 55.45 starting to give bones
[09/09/2015 03:30:40] myserv mychar 83 58.18 all done with giving bones
[09/09/2015 07:52:42] starting xel
[09/09/2015 07:52:59] buying bones
[09/09/2015 07:55:36] done buying bones
[09/09/2015 07:55:55] myserv mychar 83 58.18 starting to give bones
[09/09/2015 08:15:35] myserv mychar 83 58.48 all done with giving bones
[09/09/2015 08:16:08] buying bones
[09/09/2015 08:18:48] done buying bones
[09/09/2015 08:19:07] myserv mychar 83 58.48 starting to give bones
[09/09/2015 08:38:20] myserv mychar 83 58.48 all done with giving bones
[09/09/2015 08:38:52] buying bones
[09/09/2015 08:41:18] done buying bones
[09/09/2015 08:41:37] myserv mychar 83 58.48 starting to give bones
[09/09/2015 09:01:09] myserv mychar 83 58.79 all done with giving bones
[09/09/2015 09:01:41] buying bones
[09/09/2015 09:04:19] done buying bones
[09/09/2015 09:04:38] myserv mychar 83 58.79 starting to give bones
[09/09/2015 09:24:14] myserv mychar 83 59.09 all done with giving bones

