• 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

FH - Revisted

Gnome

New member
Joined
Dec 26, 2005
RedCents
11¢
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:
You have some names in there that may be names of friends you PL etc. You might want to edit them out.
 
Nice job on this. Its been working pretty well for me for several days, with a few small tweaks. One big thing I noticed is that if the bard is in third person view while in Nedaria, he wont be able to use "U" to click on the door to zone into the instance. Since he doesnt zone in, he continues to warp to the instance-giver over and over indefinitely.

There may be a better solution, but the way I fixed this was to just cycle the camera views right before clicking in to reset the first person view. The default key for switching cameras is F9, so I just inserted
Rich (BB code):
/for i 1 to 6
     /keypress F9   	
/next i
right after the /face command in the event_dzquit sub.

I've had some problems with him clicking in if he's levitating (he's looking straight forward, but the door is below him since he's floating). So I also tossed in a /look -65 to fix that.
 
Looks pretty good...I'll have to try it out on my mini bard.

My only question right off the bat is about this line:
Rich (BB code):
/echo  dzuit ${Zone.ID}

What does it do? I don't see any events that it would fire, even if it did say "dzquit". ${Zone.ID} returns a number, whereas you've got your events set to fire on actual zone names. Maybe you want something like ${Zone}.

Also, while this isn't a biggie, you could do yourself a big favor and ditch the bandolier setups and just use MQ2Bardswap, which uses items defined in an INI to swap in your highest focus item at the beginning of each cast for a different skill. If you don't have access to the VIP section of the MQ2 boards (which you should anyways, because if nothing else, the MQ devs deserve a kickback for their work), then you can easily snag it, and a walkthrough on use, from my compile.
 
/echo dzuit ${Zone.ID}

It was just a trouble shooting tool I used when I was tweaking the mac. I'll take a look at the other suggestions when I get a little more time. Thanks for the input.

:( 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).
 
Last edited:
FH - Revisted

Users who are viewing this thread

Back
Top
Cart