• 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

Afk Bard Macros by Siddin (1 Viewer)

Siddin

Rikk-tikk-tikki-tikki-tchk!
Joined
Feb 6, 2005
RedCents
504¢
Halls of Honor A
twists 1 for healsong
2 3 4 5 and 7 are dots
and 8 is selos. change this line /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=2) {
from 2 to something higher if selos doesn't refresh.

Rich (BB code):
  #event EXP "#*#experience!!"
  |#event NeedTarget "You must select a target for this spell!"
  |#event NeedTarget2 "Your target is out of range, get closer!"
  #event seetarget "You cannot see your target."
  #event targetid "Your Tuyen's Chant of Poison has worn off."
  #event targetid "Your Tuyen's Chant of Disease has worn off."
  #event targetid "Your Tuyen's Chant of Flame has worn off."
  #event targetid "Your Tuyen's Chant of Frost has worn off."
  #event logoff "LOADING, PLEASE WAIT..."
  #event join "#*#invite me#*#"
  #event quit "#*#leave hoh quit#*#"
  #event speedsong "#*#speedsong#*#"
   
  Sub main
  /warp loc 1368.69 1354.42 -113.21
  /circle on 110 1382.46 1215.35
  /declare myzone int outer ${Zone.ID}
  /declare pause int outer 1
  /declare avoid1 int outer 0
  /declare avoid2 int outer 0
  /declare killtarget int outer 0
  /declare movedone int outer 0
  /declare healsong int outer 1
  /declare SeloSong int outer 8 
  /declare DirgeSong int outer 7
  /declare BellowSong int outer 6
  /declare Bellowtimer int outer 300
  /declare targetammount int outer
  /declare PrevSong int outer 0
  /declare maintimer int outer 0
  /echo Selo's: ${Me.Gem[${SeloSong}].Name}
  :needtarget
  /call event_needtarget
  /call selosong
  :MainLoop 
  /if (${Target.ID}==${Me.ID}) /squelch /target clear
  /if (${Zone.ID}!=${myzone}) {
  /circle off
  /nomodkey /keypress forward
  /nomodkey /keypress left
  /nomodkey /keypress right
  /camp desktop
  /mqlog camping out
  /endmac
  }
  /doevents
  /if (!${Target.ID}) {
  /keypress forward hold
  /delay 3s
  /goto :needtarget
  }
  /nomodkey /keypress forward hold
  /call healsong
  /call selosong
  /call Bellow
  /call GMCheck
  |/call dirgesong
   
  /delay 1S
  /nomodkey /keypress forward hold
  /doevents
  /goto :MainLoop 
  /return 
   
  Sub GMCheck
   
  /if (${Spawn[gm].ID}) {
  /Log GM entered the zone!
  /log For safty reasons ending the macro
  /mqlog GM entered the zone!
  /mqlog For safty reasons ending the macro
  /keypress forward hold
  /q
  }
   
  /return
   
  Sub Event_join
  /declare currentmob local ${Target.ID}
  /target ladyhavvk
  /invite
  /target id ${currentmob}
  /return
   
  Sub Event_NeedTarget 
  /if (!${Target.ID}) /squelch /target npc radius 275
  /keypress forward hold
  /if (${Target.ID}) /squelch /twist 2 3 4 5 7
  /return
   
  Sub Event_NeedTarget2
  /squelch /target npc radius 275
  /keypress forward hold
  /return
   
  Sub Event_seetarget
  /varcalc targetammount ${targetammount}+1
  /if (${targetammount}>=10) {
  /squelch /target npc radius 275
  /squelch /twist reset
  /varset targetammount 0
  /return
  }
  /return
   
  Sub Event_targetid
  /varset targetammount 0
  /return
   
  sub selosong
  /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=2) { 
  /echo Selos about to die 
  /squelch /twist 8
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /squelch /twist 2 3 4 5 7
  /varset healsong 0
  /call healsong
  /varset PrevSong 0 
  /doevents 
  /return 
  } 
   
  /return
   
  sub dirgesong
  /if (!${Target.ID}) /return
  /if (${Me.CurrentMana}>=880) {
  /echo dirge
  /squelch /twist ${DirgeSong}
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /squelch /twist 2 3 4 5 7
  /varset healsong 0
  /call healsong
   
  /doevents
  /return
  }
  /return
   
   
  Sub healsong
  /if (${healsong}==0) /if (${Me.PctHPs}<=95) {
  /squelch /twist 1 2 3 4 5
  /varset healsong 1
  /return
  }
  /if (${healsong}==1) /if (${Me.PctHPs}>=96) {
  /squelch /twist 2 3 4 5 7
  /varset healsong 0
  /return
  }
  /return
   
  Sub Event_quit
  /circle off
  /warp succor
  /camp desktop
  /endmac
  /return
   
  Sub Event_logoff
  /delay 60s
  /keypress forward
  /keypress left
  /keypress right
  /camp desktop
  /endmac
  /return
   
  Sub Event_EXP 
  /target npc
  /if (!${Target.LineOfSight}) /squelch /target clear
  |/squelch /target npc radius 275
  /if (${Target.ID}) {
  /squelch /twist 2 3 4 5 7
  /return
  } else {
  /squelch /twist 8
  /goto :looting
  }
  :looting
  /look
  /target npc
  /if (!${Target.LineOfSight}) /squelch /target clear
  /if (${Target.ID}) {
  /circle on 110 1382.46 1215.35
  /squelch /twist 2 3 4 5 7
  /return
  }
  /target npc corpse radius 200
  /if (!${Target.ID}) {
  /circle on 110 1382.46 1215.35
  /return
  }
  /if (${Target.ID}) {
  /circle off
  /call LootMob
  /goto :looting
  }
  /return
  Sub LootMob 
  /declare LootChance int inner 0
  /declare LootSlot int inner 0 
  /declare LootCheck int inner 0 
  /declare LootTotal int inner 0 
   
  /face fast nolook 
   
  /squelch /stick 5
  :Distance
  /if (${Target.Distance}<=10) { 
  /squelch /stick off
  /loot
  } else {
  /goto :Distance 
  }
  /squelch /stick off
  /loot
  /delay 1s 
  /if (!${Corpse.Items}) { 
  /shift /notify InventoryWindow IW_Money1 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money2 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money3 leftmouseup
  /destroy
  /notify LootWnd DoneButton leftmouseup
  /look
  /return 
  } 
   
  /varset LootTotal ${Corpse.Items} 
  /for LootSlot 1 to ${LootTotal} 
  /itemnotify loot${LootSlot} rightmouseup 
  	/delay 5
  /next LootSlot 
  /shift /notify InventoryWindow IW_Money1 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money2 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money3 leftmouseup
  /destroy
  /notify LootWnd DoneButton leftmouseup
  /look
  /cleanup
  /return 
   
  Sub Bellow 
  /if (${Me.AltAbilityReady[Boastful Bellow]} && ${Target.Type.Equal[NPC]}) { 
  /aa act Boastful Bellow 
  /delay 5
  } 
  /return 
   
  Sub Event_speedsong
  /squelch /twist 8
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /squelch /twist 2 3 4 5 7
  /varset healsong 0
  /call healsong
  /return

Chantkite.mac
Here's the most configurable one of them all, but i'd suggest making a hotkey for it first...
Usage: /mac chantkite (radius) (heal%) (healsong) (selos) (#of dots) (dot1-9)
ie. /mac chantkite 55 60 1 8 5 2 3 4 5 7
radius of 55, heals at 60%, plays song 1 to heal, plays song 8 for selos, 5 dots, #'s 2 3 4 5 7


Rich (BB code):
  |Usage: /mac chantkite (radius) (heal%) (healsong) (selos) (#of dots) (dot1-9)
  |ie. /mac chantkite 55 60 1 8 5 2 3 4 5 7
  |radius of 55, heals at 60%, plays song 1 to heal, plays song 8 for selos, 5 dots, #'s 2 3 4 5 7
  |
   
  #event NeedTarget "You must first select a target for this spell!" 
  #event NeedTarget2 "Your target is out of range, get closer!"
  #event seetarget "You cannot see your target."
  #event exp "#*#experience!!"
   
  Sub Main(int rad,int hp,int hps,int selos,int dots,int dots1,int dots2,int dots3,int dots4,int dots5,int dots6,int dots7,int dots8,int dots9)
  /delay 2
  /declare radius int outer ${rad}
  /declare health int outer ${hp}
  /declare hpsong int outer ${hps}
  /declare dotnumber int outer ${dots}
  /declare dot1 int outer ${dots1}
  /declare dot2 int outer ${dots2}
  /declare dot3 int outer ${dots3}
  /declare dot4 int outer ${dots4}
  /declare dot5 int outer ${dots5}
  /declare dot6 int outer ${dots6}
  /declare dot7 int outer ${dots7}
  /declare dot8 int outer ${dots8}
  /declare dot9 int outer ${dots9}
  /declare healsong int outer 0
  /declare SeloSong int outer ${selos} 
  /declare targetammount int outer
  /declare PrevSong int outer 
  /varset PrevSong 0 
  /echo Selo's: ${Me.Gem[${SeloSong}].Name}
  /circle on ${radius}
  /call normaltwist
  :MainLoop 
  /doevents
  /call gmcheck
  /nomodkey /keypress forward hold
  /call selosong
  /call healsong
  /delay 1S
  /nomodkey /keypress forward hold
  /goto :MainLoop 
   
  /return 
   
  Sub Event_exp
  /tar npc radius 150
  /call normaltwist
  /return
   
  Sub Event_NeedTarget 
  /if (!${Target.ID}) /target npc radius 150
  /return
   
  Sub Event_NeedTarget2
  /target npc
  /return
   
  Sub Event_seetarget
  /varcalc targetammount ${targetammount}+1
  /if (${targetammount}>=10) {
  /target npc
  /varset targetammount 0
  /return
  }
  /return
   
  Sub Event_targetid
  /varset targetammount 0
  /return
   
  sub selosong
  /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=6) { 
  /echo Selos about to die 
  /stopsong
  /twist ${SeloSong}
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /delay 1S
  /nomodkey /keypress forward hold
  /call normaltwist
  /varset PrevSong 0 
  /doevents 
  /return 
  } 
   
  /return
   
  Sub healsong
  /if (${healsong}==0) /if (${Me.PctHPs}<=${health}) {
  /call healtwist
  /varset healsong 1
  /return
  }
  /if (${healsong}==1) /if (${Me.PctHPs}>=96) {
  /call normaltwist
  /varset healsong 0
  /return
  }
  /return
   
  sub normaltwist
  /if (${dotnumber}==1) /twist ${dot1}
  /if (${dotnumber}==2) /twist ${dot1} ${dot2}
  /if (${dotnumber}==3) /twist ${dot1} ${dot2} ${dot3}
  /if (${dotnumber}==4) /twist ${dot1} ${dot2} ${dot3} ${dot4}
  /if (${dotnumber}==5) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5}
  /if (${dotnumber}==6) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6}
  /if (${dotnumber}==7) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6} ${dot7}
  /if (${dotnumber}==8) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6} ${dot7} ${dot8}
  /if (${dotnumber}==9) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6} ${dot7} ${dot8} ${dot9}
  /return
   
  sub healtwist
  /if (${dotnumber}==1) /twist ${dot1} ${hpsong}
  /if (${dotnumber}==2) /twist ${dot1} ${dot2} ${hpsong}
  /if (${dotnumber}==3) /twist ${dot1} ${dot2} ${dot3} ${hpsong}
  /if (${dotnumber}>=4) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${hpsong}
  /return
   
  sub gmcheck
  /if (${Spawn[gm].ID}) {
  /MQLog GM entered the zone!
  /mqlog For safty reasons ending the macro
  /echo GM entered the zone!
  /echo For safty reasons ending the macro
  /endmac
  /keypress instant_camp
  }
  /return

This one twists a different song after the mob hits whatever % hp you declare as a snarepct. you'll definitely want to go through and edit the /twist commands though as they're set up for mine at the moment. i'll go through later and change em prolly, but i might forget. *shrug*

Rich (BB code):
  #event NeedTarget "You must first select a target for this spell!" 
  #event NeedTarget2 "Your target is out of range, get closer!"
  #event seetarget "You cannot see your target."
  #event targetid "Your Tuyen's Chant of Poison has worn off."
  #event targetid "Your Tuyen's Chant of Disease has worn off."
  #event targetid "Your Tuyen's Chant of Flame has worn off."
  #event targetid "Your Tuyen's Chant of Frost has worn off."
  #event exp "You gain experience!!"
  #event camp_check "#*#Camp Check#*#"
  #event replay "You target resisted the Largo#*#"
  Sub Main(String Selos, String Dirge, String Bellows)
  /declare slowsong int outer 0
  /declare healsong int outer 0
  /declare SeloSong int outer 8 
  /declare DirgeSong int outer 7
  /declare BellowSong int outer 6
  /declare Bellowtimer int outer 300
  /declare targetammount int outer
  /declare PrevSong int outer 
  /varset PrevSong 0 
  /echo Selo's: ${Me.Gem[${SeloSong}].Name}
  :MainLoop 
  /doevents
  /nomodkey /keypress forward hold
  /if (${Target.PctHPs}<=15) /if (${slowsong}==0) {
  /twist 7 2 3 4
  /varset slowsong 1
  }
  /call selosong
  |/call dirgesong
  |/call bellowsong
  /call healsong
  		 /delay 1S
  /nomodkey /keypress forward hold
  /varcalc Bellowtimer ${Bellowtimer}+1
  /goto :MainLoop 
  /return 
  Sub Event_replay
  /squelch /twist 7 2 3 4
  /return
  Sub Event_NeedTarget 
  /if (!${Target.ID}) /squelch /target npc radius 100
  /return
  Sub Event_EXP 
  /varset healsong 0
  /varset slowsong 0
  /declare nexttarget int local
  /if (!${Target.ID}) /squelch /target npc radius 100
  /twist 2 3 4 5
  /if (${Target.ID}) /return
  :lootcorpse
  /squelch /target npc radius 75
  /if (${Target.ID}) {
  /twist 2 3 4 5
  /circle on -1639.59 2471.09
  /keypress forward hold
  /return
  }
  /if (!${Target.ID}) /squelch /target corpse radius 200
  /if (!${Target.ID}) /return
  /twist 8
  /circle off
  /call lootcorpse
  /goto :lootcorpse
  /return
  Sub Event_NeedTarget2
  /squelch /target npc radius 100
  /return
  Sub Event_seetarget
  /varcalc targetammount ${targetammount}+1
  /if (${targetammount}>=10) {
  /squelch /target npc radius 100
  /varset targetammount 0
  /return
  }
  /return
  Sub Event_targetid
  /varset targetammount 0
  /return
  sub selosong
  	 /if (${SeloSong}) /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=6) { 
  		 /echo Selos about to die 
  /twist 8
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  /if (${slowsong}==1) /twist 7 2 3 4
  /if (${slowsong}==0) /twist 2 3 4 5
  /nomodkey /keypress forward hold
  /varcalc Bellowtimer ${Bellowtimer}+8
  		 /varset PrevSong 0 
  		 /doevents 
  		 /return 
  	 } 
  /return
  sub dirgesong
  /if (${Me.CurrentMana}>=880) {
  /echo dirge
  /twist 7
  /varset slowsong 0
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  /twist 2 3 4 5
  /varcalc Bellowtimer ${Bellowtimer}+8
  /doevents
  /return
  }
  /return
  sub bellowsong
  /if (${Bellowtimer}>=300) {
  /echo bellows
  /stopsong
  /cast 6
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  		 /delay 1S
  /nomodkey /keypress forward hold
  /varset Bellowtimer 0
  /doevents
  /return
  }
  /return
  Sub healsong
  /if (${healsong}==0) /if (${Me.PctHPs}<=95) /if (${slowsong}==0) {
  /twist 1 2 3 4 5
  /varset healsong 1
  /return
  }
  /if (${healsong}==0) /if (${Me.PctHPs}<=95) /if (${slowsong}==1) {
  /twist 7 2 3 1
  /varset healsong 1
  /return
  }
  /if (${healsong}==1) /if (${Me.PctHPs}>=96) /if (${slowsong}==0) {
  /twist 2 3 4 5
  /varset healsong 0
  /return
  }
  /if (${healsong}==1) /if (${Me.PctHPs}>=96) /if (${slowsong}==1) {
  /twist 7 2 3 4
  /varset healsong 0
  /return
  }
  /return
  Sub LootMob 
  /declare LootChance int inner 0
  /declare LootSlot	int inner 0 
  /declare LootCheck int inner 0 
  /declare LootTotal int inner 0 
   
  /face fast 
   
  /keypress forward 
  /keypress back 
   
  /stick 5
  |/delay 5s
  :Distance
  /if (${Target.Distance}<=10) { 
  /stick off
  /loot
  } else {
  /goto :Distance 
  }
  /stick off
  /loot
  /delay 1s 
  /if (!${Corpse.Items}) { 
  	 /echo NO LOOT! Cheap Bastard! 
  /shift /notify InventoryWindow IW_Money1 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money2 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money3 leftmouseup
  /destroy
  /notify LootWnd DoneButton leftmouseup 
  /cleanup
  	 /return 
  } 
  /varset LootTotal ${Corpse.Items} 
  /for LootSlot 1 to ${LootTotal} 
  	 /itemnotify loot${LootSlot} leftmouseup 
  	 /delay 5
  	 /echo Keeping a ${Cursor.Name}... WOOT! 
  		 /autoinventory 
  		 /delay 5 
  		/next LootSlot 
  /shift /notify InventoryWindow IW_Money1 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money2 leftmouseup
  /destroy
  /shift /notify InventoryWindow IW_Money3 leftmouseup
  /destroy
  /notify LootWnd DoneButton leftmouseup 
  /cleanup
  /return 
  Sub event_camp_check
  /ooc BC
  /return

And last but not least on this post, the bard chant+looting macro, again modify any/all /twist commands

Rich (BB code):
  
| Written by Siddin​
|You will need to get mq2twist and mq2moveutils |from the macroquest2 forums. #event EXP "You gain experience!!" #event EXP "You gain party experience!!" #event NeedTarget "You must select a target for this spell!" #event NeedTarget2 "Your target is out of range, get closer!" #event seetarget "You cannot see your target." #event targetid "#*#has worn off." #event logoff "LOADING, PLEASE WAIT..." Sub main /declare pause int outer 1 /declare healsong int outer 1 /declare SeloSong int outer 8 /declare DirgeSong int outer 7 /declare targetammount int outer 0 /echo Selo's: ${Me.Gem[${SeloSong}].Name} :needtarget /call event_needtarget /call selosong :MainLoop /doevents /if (!${Target.ID}) { /keypress forward hold /delay 3s /goto :needtarget } /nomodkey /keypress forward hold /call healsong /call selosong /call GMCheck /call dirgesong /delay 1S /nomodkey /keypress forward hold /goto :MainLoop :loot /call event_exp /goto :pause /return Sub GMCheck /if (${Spawn[gm].ID}) { /Log GM entered the zone! /log For safty reasons ending the macro /echo GM entered the zone! /echo For safty reasons ending the macro /circle off /keypress forward /twist 6 /delay 3s /twist 1 /q } /return Sub Event_NeedTarget /squelch /if (!${Target.ID}) /squelch /target npc radius 140 /keypress forward hold /if (${Target.ID}) /twist 2 3 4 5 /return Sub Event_NeedTarget2 /squelch /target npc radius 140 /keypress forward hold /return Sub Event_seetarget /varcalc targetammount ${targetammount}+1 /if (${targetammount}>=10) { /squelch /target npc radius 140 /twist reset /varset targetammount 0 /return } /return Sub Event_targetid /varset targetammount 0 /return sub selosong /if (${SeloSong}) /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=4) { /echo Selos about to die /twist 8 /delay 1S /nomodkey /keypress forward hold /delay 1S /nomodkey /keypress forward hold /delay 1S /nomodkey /keypress forward hold /delay 1S /nomodkey /keypress forward hold /twist 2 3 4 5 /varset healsong 0 /call healsong /doevents /return } /return sub dirgesong /if (!${Target.ID}) /return /if (${Me.CurrentMana}>=880) { /echo dirge /twist ${DirgeSong} /delay 1S /nomodkey /keypress forward hold /delay 1S /nomodkey /keypress forward hold /delay 1S /nomodkey /keypress forward hold /delay 1S /nomodkey /keypress forward hold /twist 2 3 4 5 /varset healsong 0 /call healsong /doevents /return } /return Sub healsong /if (${healsong}==0) /if (${Me.PctHPs}<=95) { /twist 1 2 3 4 5 /varset healsong 1 /return } /if (${healsong}==1) /if (${Me.PctHPs}>=96) { /twist 2 3 4 5 /varset healsong 0 /return } /return Sub Event_quit /circle off /keypress forward /keypress left /keypress right /twist off :doeventloop /doevents /goto :doeventloop /return Sub Event_logoff /delay 60s /keypress forward /keypress left /keypress right /camp desktop /endmac /return Sub Event_EXP /twist 8 /squelch /target npc radius 160 /if (${Target.ID}) { /twist 2 3 4 5 /return } else { /twist 8 /goto :looting } :looting /target npc radius 75 /if (${Target.ID}) { /twist 2 3 4 5 /goto :endxp } /target npc corpse radius 200 /if (!${Target.ID}) /goto :endxp /if (${Target.ID}) { /circle off /call LootMob /goto :looting } :endxp /circle on (xcoords) (ycoords) /return Sub LootMob /declare LootChance int inner 0 /declare LootSlot int inner 0 /declare LootCheck int inner 0 /declare LootTotal int inner 0 /face fast /keypress forward /keypress back /stick 5 :Distance /if (${Target.Distance}<=10) { /stick off /loot } else { /goto :Distance } /stick off /loot /delay 1s /if (!${Corpse.Items}) { /echo NO LOOT! Cheap Bastard! /shift /notify InventoryWindow IW_Money1 leftmouseup /destroy /shift /notify InventoryWindow IW_Money2 leftmouseup /destroy /shift /notify InventoryWindow IW_Money3 leftmouseup /destroy /notify LootWnd DoneButton leftmouseup /cleanup /return } /varset LootTotal ${Corpse.Items} /for LootSlot 1 to ${LootTotal} /itemnotify loot${LootSlot} leftmouseup /delay 5 /autoinventory /delay 5 /next LootSlot /shift /notify InventoryWindow IW_Money1 leftmouseup /destroy /shift /notify InventoryWindow IW_Money2 leftmouseup /destroy /shift /notify InventoryWindow IW_Money3 leftmouseup /destroy /notify LootWnd DoneButton leftmouseup /cleanup /return

Swarmkite.mac
Rich (BB code):
  #event DropCharm "#*#charm spell#*#"
  #event EXP "You have gained group experience!!"
  #event EXP "You gain experience!!"
  
  Sub Main
  /declare KiteMob int outer 0
  /declare Charmed int outer 0
  /declare MyTargetID int outer 0
  /declare MyPetID int outer 0
  /declare InvisPct int outer 35
  /declare InvisSong int outer 9
  /declare RunSong int outer 8
  /declare CharmSong int outer 7
  /declare SwamCount int outer 8
  /declare StopSwarm int outer 2
  /declare ReCharm int outer 0
  /declare EXP int outer 0
  /declare HealSong int outer 1
  /declare HealPct int outer 75
  /declare DotOne int outer 2
  /declare DotTwo int outer 3
  /declare DotThree int outer 4
  /declare DotFour int outer 5
  
  
  :MainLoop
  /doevents
  /if (${SpawnCount[radius 150]}<=${StopSwarm}) /call WaitForMobs
  /nomodkey /keypress forward hold
  /if (!${Me.Pet.ID}) /call Charming
  /goto :MainLoop
  /return
  
  Sub Event_EXP
  /varset MyTargetID 0
  /varset MyPetID 0
  /varset ReCharm 0
  /varset EXP 1
  /varset KiteMob 0
  /varset Charmed 0
  /return
  
  Sub Event_DropCharm
  /if (${Target.PctHPs}>${InvisPct}) /varset ReCharm 1
  /return
  
  Sub WaitingForCharmDrop
  :CharmDrop
  /if (!${Me.Pet.ID} && ${Target.PctHPs}>=${InvisPct}) /return
  /if (${ReCharm}==1 && ${Target.PctHPs}>=${InvisPct}) /return
  /doevents
  /if (${Target.PctHPs}<=${InvisPct}) {
  /squelch /twist ${InvisSong}
  /nomodkey /keypress forward hold
  /delay 5s
  /twist ${DotOne} ${DotTwo} ${DotThree} ${DotFour}
  /varset KiteMob 1
  /return
  }
  /goto :CharmDrop
  /return
  
  Sub Charmed
  /if (${Target.ID}==${Me.Pet.ID}) {
  /target id ${MyTargetID} notid ${Me.ID}
  /pet attack
  /delay 2
  /target id ${MyPetID} notid ${Me.ID}
  }
  /doevents
  /return
  
  Sub KiteMob
  /target ID ${MyPetID}
  /twist ${DotOne} ${DotTwo} ${DotThree} ${DotFour}
  :Doevent
  /doevents
  /if (${KiteMob}==1)/goto :Doevent
  /return
  
  Sub WaitForMobs
  :WaitForMobs
  /nomodkey /keypress forward hold
  /doevents
  /if (${SpawnCount[radius 150]}>=${SwamCount}) /return
  /goto :WaitForMobs
  /return
  
  Sub Charming
  /target npc radius 150 notid ${Me.ID}
  /varset MyPetID ${Target.ID}
  /target npc next radius 150 notid ${Me.ID}
  /varset MyTargetID ${Target.ID}
  /target id ${MyPetID} notid ${Me.ID}
  /squelch /twist off
  /echo Charming a ${Target.CleanName}
  /squelch /twist ${CharmSong}
  /delay 4s
  /varset ReCharm 0
  /call RunSong
  /if (!${Me.Pet.ID}) /return
  /call Charmed
  /call WaitingForCharmDrop
  /if (${KiteMob}==1) /call KitingMob
  /return
  
  Sub RunSong
  /if (${Me.PctHPs}<=${HealPct}) {
  /squelch /twist ${RunSong} ${HealSong}
  } else {
  /squelch /twist ${RunSong}
  /nomodkey /keypress forward hold
  /delay 4s
  }
  /return
  
  Sub KitingMob
  :kiting
  /doevents
  /if (${KiteMob}==1) /goto :kiting
  /return
 
Last edited:
There are quite a few checks to prevent kill stealing, but every now and then you'll get people that root and don't deal 1% damage to the mob before you get there. If you can steal aggro from them within 6 seconds, you'll ks em.

Farm_Giant.mac
Rich (BB code):
|Made for bards!!!!! will need a lot of customization for any other caster, fighter types not so much.
 
#turbo
#include move.inc
#include sell.inc
#include packs.inc
|If you don't have the noencumber offset for docrack, i suggest uncommenting this line and commenting out the sellitems event
|#Event POK "#*#encumbered#*#"
#event SellItems "#*#The item has dropped to the ground#*#"
 
Sub Main
|------------------------------------------------------------
|How many times should aquire target fail before delaying?
|------------------------------------------------------------
/declare RV_FailMax int outer 1
|------------------------------------------------------------
|How far would you like to target a mob?
|------------------------------------------------------------
/declare RV_MaxRadius int outer 1500
|------------------------------------------------------------
|How far is the combat range?
|------------------------------------------------------------
/declare RV_Range int outer 150
|------------------------------------------------------------
|What is the minimum Z Value of mobs I should target?
|------------------------------------------------------------
/declare RV_MinZRange int outer -1000
|------------------------------------------------------------
|What is the maximum Z Value of mobs I should target?
|------------------------------------------------------------
/declare RV_MaxZRange int outer 1000
|------------------------------------------------------------
|Should I loot all items?
|------------------------------------------------------------
/declare RV_LootAllItems int outer 0
|------------------------------------------------------------
/declare RV_FailCounter int outer 0
/declare RV_MyTargetID int outer 0
/declare RV_MyTargetName string outer
/declare RV_MyTargetDead int outer 0
/declare RV_InvalidTargetID int outer 0
/declare RV_HasTarget int outer 0
/declare RV_RandomWait int outer 0
/declare RV_CheckLook int outer 0
/declare RV_Fighting int outer 0
/declare RV_TargetDead int outer 0
/declare RV_MyXLOC int outer 0
/declare RV_MyYLOC int outer 0
/declare SeloSong int outer 8
 
|------------------------------------------------------------
|Load in Loot Table.
|------------------------------------------------------------
/call ReadINI Loot.ini "${Zone.Name}" Loot 
/if (!${Defined[RV_LootArray]}) { 
/echo No Loot Array Created... 
} 
 
 
|------------------------------------------------------------
|Mob Array Information.
|------------------------------------------------------------
/call ReadINI Mob.ini "${Zone.Name}" Mob 
/if (!${Defined[RV_MobArray]}) { 
/echo Mob Array Creation Error, ending macro... 
/endmacro 
}
 
|------------------------------------------------------------
|Main program
|------------------------------------------------------------
/echo Starting
/fastdrop on 
/lootn never 
:Start
 
 
/call GMCheck
	/call Gettarget
	/call killmob
/doevents
/goto :Start
/return
 
 
 
 
 
 
 
Sub KillMob
/if (${Target.PctHPs}<95) /squelch /target clear
/if (${Int[${Target.PctHPs}]}<100) /squelch /target clear
/if (!${Target.ID}) /return
/look
/echo Killing a ${Target.CleanName}.
/stick 125 behind moveback
:distancecheck
/if (${Target.Distance}>=200) /goto :distancecheck
/if (${Target.PctHPs}<95) /squelch /target clear
/if (${Int[${Target.PctHPs}]}<100) /squelch /target clear
/if (!${Target.ID}) /return
/if (${Me.PctHPs}<=95) {
/twist 2 3 4 5 1
} else {
/twist 2 3 4 5
}
/delay 6s
/if (${Me.TargetOfTarget.Name.NotEqual[${Me}]}) /squelch /target clear
:KillStart
/call selosong
/if (${Target.State.Equal[DEAD]}) /keypress esc 
/if (${Target.ID}) /goto :KillStart
/twist 8 1
/twist reset
/delay 5
/target id ${RV_MyTargetID} corpse
/call Lootmob
/return 
 
 
 
 
 
|--------------------------------------------------------------------------------
|SUB: Looting based on FishingLoot.ini.
|--------------------------------------------------------------------------------
Sub LootMob 
/declare LootChance int inner 0
/declare LootSlot int inner 0 
/declare LootCheck int inner 0 
/declare LootTotal int inner 0 
 
/face fast 
 
/keypress forward 
/keypress back 
 
 
/stick 12 moveback
:Distance
/if (${Target.Distance}<=10) { 
/stick off
/loot
} else {
/goto :Distance 
}
/loot
/delay 1.5s 
/if (!${Corpse.Items}) { 
/echo NO LOOT! Cheap Bastard! 
|/shift /notify InventoryWindow IW_Money1 leftmouseup
|/destroy
/delay 1
/shift /notify InventoryWindow IW_Money2 leftmouseup
/destroy
/delay 1
/shift /notify InventoryWindow IW_Money3 leftmouseup
/destroy
/delay 1
/notify LootWnd DoneButton leftmouseup 
/cleanup
/return 
} 
 
/varset LootTotal ${Corpse.Items} 
/for LootSlot 1 to ${LootTotal} 
/itemnotify loot${LootSlot} leftmouseup 
/delay 5
 
/for LootCheck 1 to ${RV_LootArray.Size} 
/if (${Cursor.Name.Find[${RV_LootArray[${LootCheck}]}]}) { 
/echo Keeping a ${Cursor.Name}... WOOT! 
		/autoinv 
		/delay 1s
		/if (${Cursor.ID}) {
		/autoinv
		/delay 1s
		}
		/if (${Cursor.ID}) {
		/autoinv
		/delay 1s
		}
		/if (${Cursor.ID}) {
		/autoinv
		/delay 1s
		}
/varcalc RV_LootStats[${LootCheck}] ${RV_LootStats[${LootCheck}]}+1 
 
 
 
/delay 5
 
	}
/next LootCheck 
} 
/if (${Cursor.ID}) { 
/echo Destroying a ${Cursor.Name}... 
	 /destroy
/delay 5 
} 
/next LootSlot 
|/shift /notify InventoryWindow IW_Money1 leftmouseup
|/destroy
/delay 1
/shift /notify InventoryWindow IW_Money2 leftmouseup
/destroy
/delay 1
/shift /notify InventoryWindow IW_Money3 leftmouseup
/destroy
/delay 1
/notify LootWnd DoneButton leftmouseup 
/delay 2 
/cleanup
/return 
 
|-------------------------------------------------------------------------------
|SUB: Read loot table from the INI file.
|-------------------------------------------------------------------------------
Sub ReadINI(FileName,SectionName,ArrayType) 
 
/echo Attempting to Read Section "${SectionName}" Zone Information from ${FileName}... 
/delay 1s 
 
/if (${Ini[${FileName},${SectionName},-1,NO].Equal[NO]}) { 
/echo "${SectionName}" is not a Valid Section for FILE:${FileName}, ending macro... 
/delay 1s 
/return 
} 
/declare nValues int local 1 
/declare nArray int local 0 
/declare KeySet string local ${Ini[${FileName},${SectionName}]} 
 
:CounterLoop 
/if (${String[${Ini[${FileName},${SectionName},${ArrayType}${nValues}]}].Equal[null]}) { 
/varcalc nValues ${nValues}-1 
/goto :MakeArray 
} 
/varcalc nValues ${nValues}+1 
/goto :CounterLoop 
 
:MakeArray 
/if (!${nValues}) /return 
/if (${FileName.Equal["Mob.ini"]}&&${nValues}>0) { 
/echo Declaring Mob Array... 
/declare RV_MobArray[${nValues}] string outer 
/declare RV_MobStats[${nValues}] string outer 
} 
/if (${FileName.Equal["Loot.ini"]}&&${nValues}>0) { 
/echo Declaring Loot Array... 
/declare RV_LootArray[${nValues}] string outer 
/declare RV_LootStats[${nValues}] string outer 
} 
/for nArray 1 to ${nValues} 
/if (${FileName.Equal["Mob.ini"]}) { 
/varset RV_MobArray[${nArray}] ${Ini[${FileName},${SectionName},${ArrayType}${nArray}]} 
/varset RV_MobStats[${nArray}] 0 
} 
/if (${FileName.Equal["Loot.ini"]}) { 
/varset RV_LootArray[${nArray}] ${Ini[${FileName},${SectionName},${ArrayType}${nArray}]} 
/varset RV_LootStats[${nArray}] 0 
} 
/next nArray 
 
/echo "${SectionName}" Zone Information Read Successfully from ${FileName}... 
/delay 1s 
 
/return 
 
 
 
 
|-------------------------------------------------------------------------------
|SUB: Check for GM's in zone.
|-------------------------------------------------------------------------------
Sub GMCheck
 
/if (${Spawn[gm].ID}) {
/echo GM entered the zone!
/echo For safty reasons ending the macro
/call movetoloc 394 2473
/q
}
 
/return
 
|-------------------------------------------------------------------------------
|SUB: Aquire Target
|-------------------------------------------------------------------------------
Sub GetTarget
 
/declare RV_CurrentRadius int local
/declare RV_TargetSub int local
/varset RV_InvalidTargetID 1
:Acquire
/doevents
/for RV_CurrentRadius 100 to ${RV_MaxRadius} step 100
/for RV_TargetSub 1 to ${RV_MobArray.Size}
/squelch /target radius ${RV_CurrentRadius} nopcnear 150 notid ${RV_InvalidTargetID} npc "${RV_MobArray[${RV_TargetSub}]}"
/varset RV_MyTargetID ${Target.ID}
/varset RV_MyTargetDead 0
/if (${Target.ID}) {
/if (${Int[${Target.PctHPs}]}<100) {
/varset RV_InvalidTargetID ${Target.ID}
/call ResetSub
		/squelch /target clear
/goto :Acquire
}
/varset RV_HasTarget 1
/varset RV_MyTargetName ${Target.CleanName}
/echo Acquired ${Target.CleanName} at range ${Int[${Target.Distance}]}
/return
}
/next RV_TargetSub
/delay 2
/next RV_CurrentRadius
 
/if (!${Target.ID}) {
/delay 2s
/varcalc RV_FailCounter ${RV_FailCounter}+1
|/echo Failed to Acquire Target in Range ${RV_MaxRadius} ${RV_FailCounter} Time(s)
/if (${RV_FailCounter}>=${RV_FailMax}) {
/echo Waiting for Respawns...
/look
/twist 1 8
/varset RV_FailCounter 0
}
/goto :Acquire
}
/return
 
Sub Resetsub
/varset RV_HasTarget 0 
/varset RV_TargetDead 0 
/varset RV_Fighting 0 
/return
 
Sub Event_POK
 
 
/twist 1
/delay 4s
/gate
/delay 90s
/call movetoloc -223.63 -67
/call movetoloc -239.39 146.97
/call movetoloc -187.44 156.83
/call movetoloc -188.19 223.64
/call movetospawnname ironstove 10
/click right target
/delay 1s
/call openpacks
/delay 1s
/call sell "Lambent Stone"
/call sell "Fine Steel"
/call sell "jasper"
/delay 1s
/cleanup
/delay 1s
/call movetoloc -118.82 215.76
/call movetoloc 249.92 223.19
|/call movetoloc 332.64 413.01
/keypress right
/keypress left
/keypress forward hold
:PullMoveLoopd
/if (${Me.State.Equal[SIT]}) /stand 
/face fast loc 438.60,444.00
/if (${Math.Distance[438.60,444.00]}>2) /nomodkey /keypress forward hold 
/if (${Math.Distance[438.60,444.00]}<=2) {
/nomodkey /keypress forward hold
/goto :PullMoveLoope1
}
/goto :PullMoveLoopd
:PullMoveLoope1
 
/face fast loc 441.47,490.89
/look
/doortarget
/keypress use
/delay 5
/keypress forward hold
/delay 5
/keypress use
/delay 5
/call movetoloc 441.47 490.89
/target Banker Ceridan
/click right target
/delay 1s
/shift /notify InventoryWindow IW_Money0 leftmouseup
/delay 5
/notify BigBankWND BIGB_Money0 leftmouseup
/delay 5
/shift /notify InventoryWindow IW_Money1 leftmouseup
/delay 5
/notify BigBankWND BIGB_Money1 leftmouseup
/cleanup
/delay 1s
/call movetoloc 438.71 451.62
/face fast loc 439.77,410.76
/look
/delay 5
/keypress use
/delay 5
/keypress forward hold
/delay 5
/keypress use
/keypress forward hold
/call movetoloc 439.77 410.76
/call movetoloc 193.29 218.92
/call movetoloc -232.53 217.27
/call movetoloc -482.08 449.80
/call movetoloc -495.65 706.91
/call movetoloc -531.72 720.84
/call movetoloc -927.40 717.67
/call movetoloc -899.70 501.57
/call movetoloc -844.72 445.98
/call movetoloc -900.08 444.27
/delay 1s
/doortarget POKOGPORT500
/warp target
/twist 6
/delay 5s
/keypress use
/delay 1 
/keypress forward
/keypress use
/delay 1 
/keypress forward
/keypress use
/delay 1 
/keypress forward
/keypress use
/delay 1 
/keypress forward
/keypress use
/delay 30s
/look
/warp loc 324 3422 4
/face fast loc 356.08,3417.19
/keypress left
/keypress right
/keypress forward hold
/delay 30s
/keypress forward hold
/delay 5s
/look
/warp loc -348 158 8
/call movetoloc 44 1128
/twist 8
/delay 10s
/return
 
sub selosong
/if (${SeloSong}) /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=6) { 
/echo Selos about to die 
/twist 8
/delay 4s 
/twist 2 3 4 5
/return 
} 
 
/return
 
Sub Event_SellItems
/twist 6
/call movetoloc 628.45 247.45
/call movetoloc 1037.45 -32.46
/target Viira Bali
/warp target
/call openpacks
/delay 5
/click right target
/call sell "Lambent Stone"
/call sell "Fine Steel"
/call sell "jasper"
/cleanup
/warp loc 628.45 247.45 10.58
/return
Move.inc
Rich (BB code):
| 
| move.inc 
| 
|Advanced moving and object-avoidance routines 
| 
|Originally by beatnik007 (Who credits Mckorr) 
| 
|Revised and converted to MQ2Data by Terramantian 
| 
|Signifagant and on-going Improvments by EQBot_Man 8.9.04 
| Added /call MoveToSpawnName 
| This will take a partial name and a distance and reliably target and move 
| to the nearest spawn of that name 
| Added code to get you to stop a lot closer than 10 units. You should stop almost 
| right at the location you want when using MoveToLoc 
| Sometimes you would get stuck at a door and if you were macroing unattended 
| you would continue to strafe for hours making it obvious you were 
| macroing. Added code that if the strafe function is called more 
| than 10 times in 60 sec to /quit you out 
| Have added lots of little checks including NULL targets and corpse checks and a lot 
| of little things that I can't remember now but I needed to add due to rare 
| circumstances of the subroutines failing to do what they were desigend to do. 
| 
| Subroutines: 
| Sub MoveToLoc 
| Moves you to a specified xy loc 
| Sub MoveToSpawn 
| Moved you to a specified ID number(pretty pointless) 
| Sub MoveToSpawnName 
| Moves you to the nearest spawn given a partial or full name 
| 
|===================================================| 
 
 
| Sub MoveToLoc | 
|---------------------------------------------------| 
|This simply moves the player to within 1 unit of | 
|the requested location, while avoiding obstacles | 
| | 
|This is beatnik007's original sub, with a few minor| 
|changes and rewritten in MQ2Data format | 
| | 
|SYNTAX: /call MoveToLoc Y X | 
 
 
Sub MoveToLoc(MoveToY, MoveToX) 
/echo Moving to Location: ${MoveToY}, ${MoveToX}. 
/echo Distance: ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
/declare FailureTimer timer local 0 
/declare StrafeFailure int local 
/declare running int local 
/declare MaxSpeed int local 
/declare StopDistance int local 
/declare distanceNow float local 
/declare distanceBefore float local 
/declare distanceModifier int local 
/varset running 0 
/declare distanceTimer timer 15 
/varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
/varset distanceModifier 1 
/varset MaxSpeed 0 
:moveToLocation 
 
/if (${Me.Speed}>=${MaxSpeed}) /varset MaxSpeed ${Me.Speed} 
/if (${MaxSpeed}<=166) { 
/varset StopDistance 3 
} else { 
/varset StopDistance 10 
} 
 
/face fast nolook loc ${MoveToY},${MoveToX} 
 
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<${StopDistance}) { 
/keypress forward 
/return 
} 
 
/if (${distanceTimer}==0) { 
/if (${Me.Sneaking}) { 
/varset distanceModifier 2 
} else { 
/varset distanceModifier 1 
} 
 
/varset distanceNow ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
/if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) { 
/if (${FailureTimer}==0) { 
/varset StrafeFailure 0 
/varset FailureTimer 600 
} 
/if (${FailureTimer}>0) { 
/varset StrafeFailure ${Math.Calc[${StrafeFailure} + 1]} 
} 
/if (${StrafeFailure}>=10 && ${FailureTimer}>0) { 
/keypress forward 
/keypress back hold 
/delay 5 
/keypress back 
/afk Be back later, leave a message 
/echo Your movement failed more than 10 times in 30 seconds and most likely looked macroed. Ending macro. . . 
/endmacro 
/quit 
} 
/call strafePastObstacle ${StrafeFailure} 
} 
 
/varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
/varset distanceTimer 15 
} 
 
/if (${running}==0) { 
/keypress forward 
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}>${StopDistance}) { 
/varset running 1 
/keypress forward hold 
} 
} else { 
/if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<${StopDistance}) { 
/varset running 0 
/keypress forward 
} 
} 
/goto :moveToLocation 
/return 
 
 
| Sub MoveToSpawn | 
|---------------------------------------------------| 
|This moves the player to within a provided distance| 
|of the provided spawn, while avoiding obstacles | 
| | 
|I "wrote" this, but as you can see, it's the same | 
|as MoveToLoc with a few variable replacements. | 
| | 
|The second parameter, Distance, allows for the | 
|player to stop short of the target by a certain | 
|amount, to provide for different aggro radii, etc. | 
| | 
|SYNTAX: /call MoveToSpawn ID Distance | 
 
Sub MoveToSpawn(MoveToID, StopDistance) 
 
 
/if (!(${Defined[MoveToID]})||(${Spawn[MoveToID].ID})) { 
/echo Spawn ID not found or no ID provided. Aborting... 
/return 
} 
/if (!(${Defined[StopDistance]})) { 
/echo Stopping point not defined, using default distance of 70 
/declare StopDistance int local 
/varset StopDistance 70 
} 
/echo Moving to Spawn: ${MoveToID} (${Spawn[${MoveToID}].CleanName}). 
/echo Current Location: ${Spawn[${MoveToID}].Y}, ${Spawn[${MoveToID}].X} 
/echo Current Distance: ${Spawn[${MoveToID}].Distance} 
/declare FailureTimer timer local 0 
/declare StrafeFailure int local 
/declare running int local 
/declare distanceNow float local 
/declare distanceBefore float local 
/declare distanceModifier int local 
/varset running 0 
/declare distanceTimer timer 15 
/varset distanceBefore ${Spawn[${MoveToID}].Distance} 
/varset distanceModifier 1 
 
:moveToSpawn 
 
/squelch /face fast nolook id ${MoveToID} 
 
/if (${Spawn[${MoveToID}].Distance}<${StopDistance}) { 
/keypress forward 
/return 
} 
 
/if (${distanceTimer}==0) { 
/if (${Me.Sneaking}) { 
/varset distanceModifier 2 
} else { 
/varset distanceModifier 1 
} 
 
/varset distanceNow ${Spawn[${MoveToID}].Distance} 
/if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) { 
/if (${FailureTimer}==0) { 
/varset StrafeFailure 0 
/varset FailureTimer 600 
} 
/if (${FailureTimer}>0) { 
/varset StrafeFailure ${Math.Calc[${StrafeFailure} + 1]} 
} 
/if (${StrafeFailure}>=10 && ${FailureTimer}>0) { 
/keypress forward 
/keypress back hold 
/delay 5 
/keypress back 
/sit 
/afk Be back later, leave a message 
/echo Your movement failed more than 10 times in 30 seconds and most likely looked macroed. Ending macro. . . 
/endmacro 
/quit 
} 
/call strafePastObstacle ${StrafeFailure} 
} 
/varset distanceBefore ${Spawn[${MoveToID}].Distance} 
/varset distanceTimer 15 
} 
 
/if (${running}==0) { 
/keypress forward 
/if (${Spawn[${MoveToID}].Distance}>=${StopDistance}) { 
/varset running 1 
/keypress forward hold 
} 
} else { 
/if (${Spawn[${MoveToID}].Distance}<${StopDistance}) { 
/varset running 0 
/keypress forward 
} 
} 
/goto :moveToSpawn 
/return 
 
 
| Sub MoveToSpawnName | 
|---------------------------------------------------| 
|This moves the player to within a provided distance| 
|of the provided spawn, while avoiding obstacles | 
| | 
|I "wrote" this, but as you can see, it's the same | 
|as MoveToLoc with a few variable replacements. | 
| | 
|The second parameter, Distance, allows for the | 
|player to stop short of the target by a certain | 
|amount, to provide for different aggro radii, or to| 
|attack. | 
| | 
|SYNTAX: /call MoveToSpawnName Name Distance | 
| Does take partial names: | 
| /call MoveToSpawnName skel 9 | 
| to move you to the nearest skeleton | 
| | 
| I use this for farming bone chips and silks | 
 
Sub MoveToSpawnName(Name, StopDistance) 
/keypress esc 
/target ${Name} npc 
/delay 2 
/if (${String[${Target}].Find["NULL"]}) /return 
/if (${String[${Target}].Find["corpse"]}) /return 
/if (!${Target.ID}) { 
/echo Name not found or no name provided. Aborting... 
/return 
} 
/if (!(${Defined[StopDistance]})) { 
/echo Stopping point not defined, using default distance of 70 
/declare StopDistance int local 
/varset StopDistance 70 
} 
/echo Moving to Spawn: ${Target.CleanName}. 
/declare FailureTimer timer local 0 
/declare StrafeFailure int local 
/declare running int local 
/declare distanceNow float local 
/declare distanceBefore float local 
/declare distanceModifier int local 
/varset running 0 
/declare distanceTimer timer 15 
/varset distanceBefore ${Target.Distance} 
/varset distanceModifier 1 
 
:moveToSpawn 
/if (${String[${Target}].Find["NULL"]}) /return 
/face fast predict 
 
/if (${Target.Distance}<${StopDistance}) { 
/keypress forward 
/return 
} 
 
/if (${distanceTimer}==0) { 
/if (${Me.Sneaking}) { 
/varset distanceModifier 2 
} else { 
/varset distanceModifier 1 
} 
 
/varset distanceNow ${Target.Distance} 
/if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) { 
/if (${FailureTimer}==0) { 
/varset StrafeFailure 0 
/varset FailureTimer 600 
} 
/if (${FailureTimer}>0) { 
/varset StrafeFailure ${Math.Calc[${StrafeFailure} + 1]} 
} 
/if (${StrafeFailure}>=10 && ${FailureTimer}>0) { 
/keypress forward 
/keypress back hold 
/delay 5 
/keypress back 
/sit 
/afk Be back later, leave a message 
/echo Your movement failed more than 10 times in 30 seconds and most likely looked macroed. Ending macro. . . 
/endmacro 
/quit 
} 
/call strafePastObstacle ${StrafeFailure} 
} 
/varset distanceBefore ${Target.Distance} 
/varset distanceTimer 15 
} 
 
/if (${running}==0) { 
/keypress forward 
/if (${Target.Distance}>=${StopDistance}) { 
/varset running 1 
/keypress forward hold 
} 
} else { 
/if (${Target.Distance}<${StopDistance}) { 
/varset running 0 
/keypress forward 
} 
} 
/goto :moveToSpawn 
/return 
 
| Only to be used by the previous functions - It's obvious what it does. | 
 
sub strafePastObstacle(Number) 
/keypress forward 
/keypress back hold 
/delay ${Math.Calc[${Number}*3/2+4]} 
/keypress back 
/if (!${Me.State.Equal["STAND"]}) /stand 
/if (${Math.Rand[99]}>50) { 
/keypress strafe_right hold 
} else { 
/keypress strafe_left hold 
} 
/delay ${Math.Calc[${Number}*4+5]} 
/keypress strafe_right 
/keypress strafe_left 
/keypress forward hold 
/return 
 
Sub Turn(THeadingY,THeadingX) 
/declare PHeading outer 0 
/declare THeading outer 0 
/declare Bearing outer 0 
/declare IsTurning outer 0 
/declare TurnKey outer NULL 
 
:TurnLoop 
/delay 0 
/if (${Me.Sitting}) /sit off 
/varset PHeading ${Me.Heading.Degrees} 
/if (${Defined[THeadingX]}) { 
/varset THeading ${Heading[${THeadingY},${THeadingX}].Degrees} 
} else { 
/varset THeading ${Target.HeadingTo.Degrees} 
} 
 
/varset Bearing ${Math.Calc[(${PHeading}-${THeading}+540)%360-180]} 
 
/if (${Bearing}>=-7 && ${Bearing}<=7) { 
/if (${String[${TurnKey}].NotEqual[NULL]}) /keypress ${TurnKey} 
/face heading ${Heading[${THeading}].Degrees} nolook 
/return 
} else /if (${Bearing}>=-180 && ${Bearing}>=7) { 
/if (${String[${TurnKey}].NotEqual
}) /varset TurnKey LEFT } else /if (${Bearing}<=180 && ${Bearing}<=7) { /if (${String[${TurnKey}].NotEqual
}) /varset TurnKey RIGHT } /if (!${IsTurning}) { /keypress ${TurnKey} hold /varset IsTurning 1 } /goto :TurnLoop /return​


Sell.inc
Rich (BB code):
| 
| sell.inc
| Selling Include File needed for macros
| Version 1.3
| Date: August 7, 2004
|
| Please be sure to get the lastest updates at http://www.soc-music.com/mq2/
|
| These file MUST be in the common directory in your macros directory.
|
| Disclaimer:
| Code was used from other programers also from the MQ Forums.
| 
 
 
Sub Sell(string ItemToSell)
/declare OldMoney int Inner 
/declare NewMoney int Inner
 
/autoinv 
 
/if (${ItemToSell.Equal[NULL]}) {
/return
}
 
:Finding 
/if (${FindItemCount[${ItemToSell}]}==0) /goto :Done 
/nomodkey /itemnotify ${FindItem[${ItemToSell}].InvSlot} leftmouseup 
 
:WaitFind 
/if (${Bool[${SelectedItem}]}==FALSE) /goto :WaitFind 
 
:Selling
/delay 5 
/varset OldMoney ${Me.Cash} 
/nomodkey /shift /notify MerchantWnd MW_Sell_Button leftmouseup 
 
:WaitSell 
/varset NewMoney $(Me.Cash} 
/if (${NewMoney}==${OldMoney}) /goto :WaitSell 
/goto :Finding 
 
:Done 
/echo No more ${ItemToSell} to sell!!! 
/return

packs.inc
Rich (BB code):
| 
| packs.inc
| Open and Close Packs Include File needed for macros
| Version 1.4
| Date: August 7, 2004
|
| Please be sure to get the lastest updates at http://www.soc-music.com/mq2/
|
| These file MUST be in the common directory in your macros directory.
|
| Disclaimer:
| Code was used from other programers also from the MQ Forums.
| 
 
Sub OpenPacks 
/declare bag int local 0 
/declare check int local 0 
/newif (!${Window[InventoryWindow].Open}) /nomodkey /keypress inventory 
/delay 1s 
/for bag 1 to 8 step 1 
/newif (${Window[Pack${bag}].Open}==FALSE) /nomodkey /itemnotify pack${bag} rightmouseup 
/next bag 
/delay 1s
/for check 1 to 9 step 1
/if (${Window[TradeskillWnd].Open}) {
/nomodkey /notify TradeskillWnd ExperimentButton leftmousehold
/nomodkey /notify TradeskillWnd ExperimentButton leftmouseup
}
/next check
/delay 1s
/return 
 
Sub ClosePacks 
/declare bag int local 0 
/newif (!${Window[InventoryWindow].Open}) /nomodkey /keypress inventory 
/delay 1s
/for bag 1 to 8 step 1 
/newif (${Window[Pack${bag}].Open}==TRUE) /nomodkey /itemnotify pack${bag} rightmouseup 
/next bag 
/delay 1s
/newif (${Window[InventoryWindow].Open}) /nomodkey /keypress inventory 
/delay 1s 
/return
example Loot.ini
Rich (BB code):
[The Rathe Mountains]
Loot1=Lambent Stone
Loot2=Fine Steel
Loot3=Jasper
example Mob.ini
Rich (BB code):
[The Rathe Mountains]
Mob1=Hill Giant
Mob2=Bloodbeard
 
Sid,
I'm having some trouble with the snare macro. It barely begins the normal twist when it runs selo's accelerando. It runs Selo's, start the normal twist and again doesn't finish the first song and it goes to runsong.

I tried adjusting the time to <=2 and <=0 (started at <=6) and I keep getting the same effect. I've looked it over the best I can, but I still have a lot to learn about macros. Any thoughts?
 
Awsome awsome awsome! Lots of these... maybe all will come in handy soon for me
Great work, and atleast their together now rather than spread over 12 threads. :)
 
on the chantkite macro I am getting a 'Invalid gem specified (NULL) - ignoring' message when i run it. Was I supposed to change any of the code before running it? I am typing /mac chantkite 70 60 1 8 3 3 4 5, where 1 is chorus of replenish in slot 1, 8 is selos accel in slot 8, followed by 3 dots. Any help?
 
i'll look into it whenever i can actually get on my computer. it looks fine by code, but sometimes you actually have to run it to test it. no garuntees when except that it will be done by sat morning, possibly and hopefully sooner.
 
ok, updated chantkite.mac should be working now
 
i got a
(Event_EXP): /goto ;looting error end mac

i think
/goto ;looting
should be
/goto :lotting ? is that the error?
 
spony311 said:
i got a
(Event_EXP): /goto ;looting error end mac

i think
/goto ;looting
should be
/goto :lotting ? is that the error?
yes
Rich (BB code):
/goto ;looting
should be
Rich (BB code):
/goto :looting
 
also at line 199 (Event_EXP): /if (${Target.ID} {
@29 (main): :Mainloop

does it need a ) or ( in it? looks like its missing one

yea then after that in yellow had a
Usage: /if (<conditions>) <comand>

at 199
change this /if (${Target.ID} {
to /if (${Target.ID}) {
worked great
 
Siddin is back which means more banned bards ! It's fabled time lets see how many accounts Siddin can get banned this time :P
 
Tone said:
Siddin is back which means more banned bards ! It's fabled time lets see how many accounts Siddin can get banned this time :P
rofl, actually i'm not doing anything with fableds unless i can break the ranger's range attack code :) btw, got those structs tone?
 
spony311 said:
also at line 199 (Event_EXP): /if (${Target.ID} {
@29 (main): :Mainloop

does it need a ) or ( in it? looks like its missing one

yea then after that in yellow had a
Usage: /if (<conditions>) <comand>

at 199
change this /if (${Target.ID} {
to /if (${Target.ID}) {
worked great
btw, those macros I haven't even looked at for over a year. but thanks for the fixes
 
lol now everytime i load it instant freeze to server select bummer but still got my tune
 
This Is Workin Excellent

I just tried it this weekend and I must say
WOW 23 hours of playing and not one glitch

well done
 
Last edited:
I have a question ..
If one were to want to use this indoors and you cant run selos
then what?
for me it says ignores /bad spell gem.
indoor zones i can run with docrack so selos is not needed
for instants for example..
those are indoor zones..

puzzled..
 
kinda newb...but am thnking bout starting a Bard..what lvl needed to use this Macro plz anyone

thnx
Thang
 
with the very first macro -

Halls of Honor A
twists 1 for healsong
2 3 4 5 and 7 are dots
and 8 is selos. change this line /if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=2) {
from 2 to something higher if selos doesn't refresh.

I followed the instructions for what song slots to mem....started the macro...warped and circled like I was suppose to....however i just kept selo'n in a circle? it never targeted any of the mobs..so I went ahead and targeted one...but still nothing...

I was able to get it going cheaply by using the good old target.mac after using the above mac to get me there and start the circle....any ideas?
 
I didnt change a thing i just ran it as i copied and pasted it from page one. It works great for me refreshes selos at about 30 sec to go and twist my 4 dots just like its supposed to. max time running in one session was 22 and half hours. Would have gone longer but a gm came into zone to change someone name and it camped me.

here is the one I am using:

Chantkite.mac
Here's the most configurable one of them all, but i'd suggest making a hotkey for it first...
Usage: /mac chantkite (radius) (heal%) (healsong) (selos) (#of dots) (dot1-9)
ie. /mac chantkite 55 60 1 8 5 2 3 4 5 7
radius of 55, heals at 60%, plays song 1 to heal, plays song 8 for selos, 5 dots, #'s 2 3 4 5 7

|Usage: /mac chantkite (radius) (heal%) (healsong) (selos) (#of dots) (dot1-9)
|ie. /mac chantkite 55 60 1 8 5 2 3 4 5 7
|radius of 55, heals at 60%, plays song 1 to heal, plays song 8 for selos, 5 dots, #'s 2 3 4 5 7
|

#event NeedTarget "You must first select a target for this spell!"
#event NeedTarget2 "Your target is out of range, get closer!"
#event seetarget "You cannot see your target."
#event exp "#*#experience!!"

Sub Main(int rad,int hp,int hps,int selos,int dots,int dots1,int dots2,int dots3,int dots4,int dots5,int dots6,int dots7,int dots8,int dots9)
/delay 2
/declare radius int outer ${rad}
/declare health int outer ${hp}
/declare hpsong int outer ${hps}
/declare dotnumber int outer ${dots}
/declare dot1 int outer ${dots1}
/declare dot2 int outer ${dots2}
/declare dot3 int outer ${dots3}
/declare dot4 int outer ${dots4}
/declare dot5 int outer ${dots5}
/declare dot6 int outer ${dots6}
/declare dot7 int outer ${dots7}
/declare dot8 int outer ${dots8}
/declare dot9 int outer ${dots9}
/declare healsong int outer 0
/declare SeloSong int outer ${selos}
/declare targetammount int outer
/declare PrevSong int outer
/varset PrevSong 0
/echo Selo's: ${Me.Gem[${SeloSong}].Name}
/circle on ${radius}
/call normaltwist
:MainLoop
/doevents
/call gmcheck
/nomodkey /keypress forward hold
/call selosong
/call healsong
/delay 1S
/nomodkey /keypress forward hold
/goto :MainLoop

/return

Sub Event_exp
/tar npc radius 150
/call normaltwist
/return

Sub Event_NeedTarget
/if (!${Target.ID}) /target npc radius 150
/return

Sub Event_NeedTarget2
/target npc
/return

Sub Event_seetarget
/varcalc targetammount ${targetammount}+1
/if (${targetammount}>=10) {
/target npc
/varset targetammount 0
/return
}
/return

Sub Event_targetid
/varset targetammount 0
/return

sub selosong
/if (${Me.Buff[${Me.Gem[${SeloSong}].Name}].Duration}<=6) {
/echo Selos about to die
/stopsong
/twist ${SeloSong}
/delay 1S
/nomodkey /keypress forward hold
/delay 1S
/nomodkey /keypress forward hold
/delay 1S
/nomodkey /keypress forward hold
/delay 1S
/nomodkey /keypress forward hold
/call normaltwist
/varset PrevSong 0
/doevents
/return
}

/return

Sub healsong
/if (${healsong}==0) /if (${Me.PctHPs}<=${health}) {
/call healtwist
/varset healsong 1
/return
}
/if (${healsong}==1) /if (${Me.PctHPs}>=96) {
/call normaltwist
/varset healsong 0
/return
}
/return

sub normaltwist
/if (${dotnumber}==1) /twist ${dot1}
/if (${dotnumber}==2) /twist ${dot1} ${dot2}
/if (${dotnumber}==3) /twist ${dot1} ${dot2} ${dot3}
/if (${dotnumber}==4) /twist ${dot1} ${dot2} ${dot3} ${dot4}
/if (${dotnumber}==5) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5}
/if (${dotnumber}==6) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6}
/if (${dotnumber}==7) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6} ${dot7}
/if (${dotnumber}==8) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6} ${dot7} ${dot8}
/if (${dotnumber}==9) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${dot5} ${dot6} ${dot7} ${dot8} ${dot9}
/return

sub healtwist
/if (${dotnumber}==1) /twist ${dot1} ${hpsong}
/if (${dotnumber}==2) /twist ${dot1} ${dot2} ${hpsong}
/if (${dotnumber}==3) /twist ${dot1} ${dot2} ${dot3} ${hpsong}
/if (${dotnumber}>=4) /twist ${dot1} ${dot2} ${dot3} ${dot4} ${hpsong}
/return

sub gmcheck
/if (${Spawn[gm].ID}) {
/MQLog GM entered the zone!
/mqlog For safty reasons ending the macro
/echo GM entered the zone!
/echo For safty reasons ending the macro
/endmac
/keypress instant_camp
}
/return
 
Last edited:
I have a question ..
If one were to want to use this indoors and you cant run selos
then what?
for me it says ignores /bad spell gem.
indoor zones i can run with docrack so selos is not needed
for instants for example..
those are indoor zones..

puzzled..
 
Ok I am a noob I copied and pasted and made a .dll file of the first hall of honor a and loaded in in eq..... but how do i start it?

And I tried the chantkite one and i just run out straight and says /call selo's or /call normaltwist anyone help?
 
It's not a DLL its a .Mac :-p just open notepad paste and save :). once you get the mac created put it in your macros folder and ingame in the MQ2 window type "/mac hohonora" ; or what ever you named the file.

/cheers
 
Thank you for the help i made them both mac's now and better but neither one is working still. The halls or honor one when i start it in halls of honor says docommand couldn't parse warp and then says docommand couldn't parse circle and keeps saying selos is about to die over and over and just runs straight. Then the chantkite one says docommand couldn't parse /twist.... and just runs in a straight line and says @76 @38 ... somehting /call selosong. Please help me if you can. thx.
 
Did you set up your MQ2Utils, MQ2Twist and MQ2Rwarp? Load those first then run your mac should work. From what you said it sounds like they are not loaded up.
 
Ok I loaded mq2moveutils and mq2twist but i don't have mq2rwarp but it still says with those 2 loaded docommand couldn't parse /warp and also docommand couldn't parse /twist. Shouldn't the twist part be working fine? Do I need to set up or mess with the utils or twist (change then and recompile them)?
 
This is off topic but Devlin wanna explain ur sig..... like how u made yourself a spirit?
 
oh lol just figured since ur name was devlin and it looked like a human....never been to demi thos so=(
 
siddin said:
example Loot.ini
Rich (BB code):
[The Rathe Mountains]
Loot1=Lambent Stone
Loot2=Fine Steel
Loot3=Jasper
example Mob.ini
Rich (BB code):
[The Rathe Mountains]
Mob1=Hill Giant
Mob2=Bloodbeard
i'm not familiar with the .ini stuff...im shooting for looting an item while running, i.e. mobs still on me, still in /circle but to stop doting, target a specific corpse "Zed Sticklebush" and loot a specific item "Burnoose of the Halfbreed" all while still /circling is something like this possible?
 
Afk Bard Macros by Siddin

Users who are viewing this thread

Back
Top
Cart