I didn't find any updates to FH for bards so I thought I would post my version of it with some tweaks. Please keep in mind you will need to adjust kite circle or selos depending on your set up. It should work with current MQ. Enjoy my first mod
Rich (BB code):
|AFKHALLS.mac
|Original Code by Pugs - thanks to Cade,Jumjum5,Infernal,Soultaker,Siddin,Red,
|and the rest of the brilliant minds here at red Guides
|Changed by SS44 to include, /fade, /potionbelt, /loot.
|Mod:040106:Gnome - meshed some features from VXED mac. Greatly reduced the warpage
| to only 4 warps ever six hours if you are well stocked on potions and dont need to fade
| added some aa usage. This is using a bard with max run speed (without song). You may have to adjust
| circle, use speed hack, selo or snare depending on lag issues.|You WILL run accross the ocassional mob
| that will path poorly and smack you down, but they should be few.
|
|Start the macro and press your "/echo You have entered Nedaria's Landing" hotkey in Nedaria's.
|or bind yourself at the magus in Guild lobby, type /mac afkhalls and let'er rip.
|
|Toon0 is your bard
|Toon1 is whatever other toon you want to take in.
|
|Spells are in this order:
|1 Regen
|2 DoT
|3 DoT
|4 DoT
|5 DoT
|
|Save this spellset as Halls
|
|You need to make 2 bandoliers|
|One with your highest drum mod and call it : Kite
|one with your highest regen mod and call it : Regen
|
|Other plugins you will need for this are : Mq2Csum, Mq2Rwarp ( or whatever warp you use), MQ2EQBC, and
|MQ2DoCrack with nostun, nomeleepush and noencumb.
|
|You can use MQ2mastermind and change all the /bc Toon1 to /tell Toon1 if you wish.
#turbo 30
#Event Invite "#1# tells you, 'AAMonster'#*#"
#Event MobDied "#*#You gain#*#"
#Event MobDied "#*#You have slain#*#"
#Event GMInZone "#*#tells you,#*# GM #*#"
#Event GMInZone "#*#tells you,#*# Guide #*#"
#Event GMInZone "#*#tells you,#*# gamemaster #*#"
#Event GMInZone "#*#tells you,#*# Game Master #*#"
#Event GMInZone "#*#tells you,#*# Customer Service #*#"
#Event GMInZone "#*#tells you,#*# CSR #*#"
#Event lobby "You have entered Guild Lobby."
#event PoK "You have entered The Plane of Knowledge."
#event dzquit "#*#You have entered Nedaria's Landing#*#"
#event dzquit "#*#Nedaria's Landing#*#"
|-- Destroys Copper if you have more than the given amount! 0=disable
#define DESTROY_COPPER_IF_ABOVE 1
Sub Main
/echo Starting Bard FHmacro
/declare ExpTemp int 0
/declare ExpTracker int outer
/declare ExpCheck int outer 20
/declare WantToLoot int outer 1
/declare i int outer 0
/declare LootTotal int outer
/declare LootSlot int outer
/declare Exper float outer
/declare AAExp float outer
/declare LDRExp float outer
/declare Bellows int outer
/declare regensong int outer 0
/declare EvacHps int outer 70
/declare CapTimer timer outer 0
/varset Exper ${Me.PctExp}
/varset AAExp ${Me.PctAAExp}
/varset LDRExp ${Me.PctGroupLeaderExp}
/if (${Me.PctExp} < ${ExpCheck}) /varset ExpTracker 0
/if (${Me.PctExp} > ${ExpCheck}) /varset ExpTracker 1
/if (${Me.AltAbility[Boastful Bellow]}) /varset Bellows 199
/if (${Me.AltAbility[Exultant Bellowing]}) /varset Bellows 241
/if (${Me.AltAbility[Fortified Bellowing]}) /varset Bellows 357
/if (${Zone.ID}==344) /call event_lobby
:MainLoop
/doevents
/call GMcheck
/doevents
/call capTimer
/doevent
/goto :MainLoop
/return
Sub indz
/if (${Zone.ID}==182) /call Event_dzquit
/if (${Zone.ID}==202) /call Event_Bind
/delay 1s
/band activate kite
/delay 1s
/twist off
/face heading 270
/delay 4s
/warp loc -573.50 162.80 2.15
/circle on 23 -600 160
/keypress forward hold
/twist 1 2 3 4 5
/target clear
/target clear
| /bc Toon1 //Warp loc -573.50 164.80 2.15
| /return
:loopstart
/if (${Zone.ID}==182) /call event_dzquit
/if (${Zone.ID}==202) /call Event_Bind
/delay 1s
/call GMcheck
/if (${Target.Level}>67) /tar npc next
/if (${Target.Distance}>220) /keypress esc
/if (${Target.ID}==FALSE) /tar NPC radius 220 rat
/if (${Me.PctHPs}<=27) /call succor
/if (${Me.PctHPs}<=45) /potionbelt activate 1
/if (${Me.PctHPs}<=35) /potionbelt activate 2
/doevents
/delay 10
/goto :loopstart
/return
Sub Event_Invite(Junk,string Nameb)
/invite ${Nameb}
/taskadd ${Nameb}
/delay 1s
/return
Sub succor
/target clear
/fade
/circle off
/band activate regen
/twist 1
/sit
/delay 1s
:regenloop
/delay 60s
/if (${Me.PctHPs}<90) /goto :regenloop
/if (${Me.PctHPs}>=90) /call StartKite
/return
Sub GMcheck
/if (${Spawn[gm].ID}) {
/echo Gm detected
/beep
/beep
/beep
/circle off
/keypress forward
/endmac
}
/return
Sub Event_GMInZone
/echo Gm detected
/beep
/beep
/beep
/circle off
/keypress forward
/endmac
/return
Sub event_dzquit
/doevents
/echo dzuit ${Zone.ID}
/if (${Zone.ID}==998) /call Indz
/twist off
/call gmcheck
| /dzremove Toon1
| /dzremove Toon0
/delay 2s
/target Eldros Danmor
/warp target
/delay 2s
/say interested in visiting
/delay 3s
/target Nideno Eliagy
/warp target
/delay 2s
/say Forgotten halls
/delay 2s
/warp loc 1544 -665 96
/face loc 1540, -675
/look 0
/doortarget
/delay 5s
/keypress u
/delay 10s
/keypress u
/delay 1s
/target clear
/call destroycopper
/delay 30s
/call indz
/return
Sub Event_Bind
/echo sorry i don't know how or why but you died.
/circle off
/twist off
/delay 45s
/sit on
/camp desktop
/endmacro
/return
Sub CheckAnchor
/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) /call MoveToAnchor
/return
Sub MoveToAnchor
/call StartKite
/return
sub event_lobby
/twist off
| /bc Toon1 //warp succor
/delay 1s
/echo Waiting in the lobby for 30 seconds...
/memspellset Halls
/delay 30s
/tar magus
/say nedaria
/return
Sub Regen
/band activate regen
/twist 1
/delay 2s
/sit
:HealLoop
/doevents
/if (${Me.PctHPs}<=23) /call succor
/delay 6s
/if (${Me.PctHPs} > 95) {
/if (${Me.Sitting}) /stand
/return
}
/goto :HealLoop
Sub StartKite
|---------------------------------------------------------
|Remove any aa abilities that you are not interested in using
|during the kite
|---------------------------------------------------------
/if (${Zone.ID}==182) /call event_dzquit
/if (${Zone.ID}==202) /call Event_Bind
/doevents
/if (${Me.PctHPs}<=90) /call Regen
/delay 1s
/band activate kite
/circle on 23 -600 160
/keypress forward hold
/target clear
/delay 1s
/call GMcheck
/if (${Target.Level}>67) /tar npc next
/if (${Target.Distance}>220) /keypress esc
| /if (${Target.ID}==FALSE) /tar NPC radius 220 rat
/if (${Target.ID}==NULL) /tar NPC radius 220 rat
/twist 1 2 3 4 5
:loopstart
/if (${Zone.ID}==182) /call event_dzquit
/if (${Zone.ID}==202) /call Event_Bind
/doevents
/if (${Me.PctHPs}<=27) /call succor
/if (${Me.PctHPs}<=45) /potionbelt activate 1
/if (${Me.PctHPs}<=30) /potionbelt activate 2
/call Devoted
/call bellow
/call capTimer
/delay 3s
/if (${Target.PctHPs}>=25) {
/if (${Target.PctHPs}<=85) /call Song
}
/doevents
/delay 1
/goto :loopstart
/return
|---------------------------------------------------------
|aa abilities
|---------------------------------------------------------
Sub Devoted
/if (${Me.AltAbilityReady[Lesson of the Devoted]}) {
/twist 1
/delay 5s
/twist end
/delay 1s
/alt act 481
/delay 7s
/twist 1 2 3 4 5
}
/return
sub bellow
/delay 1s
/if (${Me.AltAbilityReady[${Bellows}]} && ${Target.ID}) /alt act ${Bellows}
/delay 1s
/return
sub capTimer
/if (${Me.AltAbilityReady[553]} && ${Target.PctHPs}>50 && ${Target.PctHPs}<98 && ${CapTimer}<=0) {
/alt act 553
/varset CapTimer 15m
}
/return
Sub Song
/if (${Me.AltAbilityReady[Song of Stone]}) {
/twist end
/delay 1s
/aa act Song of Stone
/delay 7s
/twist 1 2 3 4 5
}
/return
|---------------------------------------------------------
|Handle the loot
|---------------------------------------------------------
Sub DestroyCopper
/squelch /windowstate InventoryWindow open
/shift /notify InventoryWindow IW_Money3 leftmouseup
/delay 1s ${Cursor.ID}>0
/destroy
/cleanup
/return
Sub Event_MobDied
/doevents
/twist off
/circle off
/call GMcheck
/keypress forward
/delay 1s
/squelch /declare LootSlot int inner 0
/declare LootCheck int inner 0
| /declare LootTotal int inner 0
/target npc corpse radius 200
:MovementLoop
/face fast nolook
/if (${Int[${Target.Distance}]}>13) /keypress forward hold
/if (${Int[${Target.Distance}]}<13&&${Int[${Target.Distance}]}>11) /keypress forward
/if (${Int[${Target.Distance}]}<9) /keypress back
/if (${Int[${Target.Distance}]}>13) /goto :MovementLoop
/keypress forward
/keypress back
/delay 5
/loot
/delay 5
/if (!${Corpse.Items}) {
/echo NO LOOT!
/notify LootWnd DoneButton leftmouseup
/call DestroyCopper
/delay 1s
/call checkanchor
/face heading 270
/circle on 23 -600 160
/keypress forward hold
/delay 3
/return
}
/varset LootTotal ${Corpse.Items}
/for LootSlot 1 to ${LootTotal}
/itemnotify loot${LootSlot} leftmouseup
/delay 5
/if (${LootAllItems}) {
/echo Keeping a ${Cursor.Name}... WOOT!
/autoinventory
/autoinventory
/delay 5
} else {
/for LootCheck 1 to ${ItemsToLoot.Size}
/if (${Cursor.Name.Find[${ItemsToLoot[${LootCheck}]}]}) {
/echo Keeping a ${Cursor.Name}... WOOT!
/autoinventory
/autoinventory
/delay 5
}
/next LootCheck
}
/if (${Cursor.ID}) {
/echo Destroying a ${Cursor.Name}...
/destroy
/destroy
/delay 5
}
/next LootSlot
/delay 5
/notify LootWnd DoneButton leftmouseup
/delay 2
/call checkanchor
/face heading 270
/circle on 23 -600 160
/keypress forward hold
/delay 3
/return
Last edited:


I probably wont mess with this on my server as my friend just got his account suspended. One of his merchant twinks was accidentally mentioned in this macro, which was probably why he got suspended as he says he doesn't use MQ. I used his merchant as it was always on and could assist in trouble shooting the macro (I'm sure there are better ways, but I'm not a programmer).