This is a macro that I had given to me by a friend, it was originally written for a monk, bitchboy dps or something, then edited by my friend for just a warrior bot. Edited by me for a bard.
In hotkey place a hotkey with your twist rotation. Make sure you have MT targeted when you start the macro.
Buffcheck is commented out due to my Bard not of level to use his buffing gear yet. Change it for your own gear and turn it back on. If you can add more to the code please do so and repost it here and we can keep this updated on page 1.
N
In hotkey place a hotkey with your twist rotation. Make sure you have MT targeted when you start the macro.
Buffcheck is commented out due to my Bard not of level to use his buffing gear yet. Change it for your own gear and turn it back on. If you can add more to the code please do so and repost it here and we can keep this updated on page 1.
Rich (BB code):
| Bard Autogrouper
| Re-Edited by: Nijhal
| Make a twist hotkey in hotkey bank 1 "/keypress 1"
| Have Main Assist targeted when starting macro.
|----------------------------------------------------------------------
#Chat group
#include GMCheck.inc
#Event Unduck "#*#You must be standing to attack!#*#"
Sub Main
|------------------------------------------------------------
| How far is the combat range?
|------------------------------------------------------------
/declare RV_Range int outer 10
|------------------------------------------------------------
| What % HP do you wish to assist at?
|------------------------------------------------------------
/declare RV_Assistat int outer 96
|------------------------------------------------------------
| Don't worry about the rest.
|------------------------------------------------------------
/popup Bard Bot V1.0 Running!
/echo --------------------------------------
/echo -----{Bard Bot!~}-----
/echo V1.0
/echo --------------------------------------
/echo
/declare RV_Looper int outer 0
/declare RV_MyTargetID int outer 0
/declare RV_MyTargetName string outer
/declare RV_MyTargetDead 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 AnchorX int outer ${Me.X}
/declare AnchorY int outer ${Me.Y}
/declare AnchorZ int outer ${Me.Z}
/declare RV_resetheading int outer ${Me.Heading.DegreesCCW.Int}
/declare NotBitchBoy string outer ${Target.CleanName}
/declare NotBitchBoysID int outer ${Target.ID}
/declare RV_FastRange int outer
/declare RV_RangeMax int outer
/declare RV_RangeMin int outer
/declare RV_Subreset int outer 0
/declare RV_Rangedw int outer
/declare Exper float outer
/declare AAExp float outer
/declare Mobs_Killed int outer 0
/varset Exper ${Me.PctExp}
/varset AAExp ${Me.PctAAExp}
/varcalc RV_FastRange ${RV_Range}+3
/varcalc RV_RangeMax ${RV_Range}+1
/varcalc RV_RangeMin ${RV_Range}-1
/varcalc RV_Rangedw ${RV_Rangedw} - 10
/if (${Target.Type.NotEqual["PC"]}) /call WhatTheFuckBitch
/keypress 1
:Start
/doevents
| /call BuffCheck
/doevents
/call GMCheck
/doevents
/call GetTarget
/doevents
/call CombatSub
/doevents
/call MoveToMob
/call ResetSub
/goto :Start
/return
|--------------------------------------------------------------------------------
|SUB: Aquire Target
|--------------------------------------------------------------------------------
Sub GetTarget
:NotYetBitchBoy
/assist ${NotBitchBoy}
/delay 4
/if (!${Target.ID}) /goto :NotYetBitchBoy
/if ((${Target.ID}!=${NotBitchBoysID}) && (${Target.PctHPs}<${RV_Assistat}) && (${Target.Distance}<150)) /return
/goto :NotYetBitchBoy
/delay 3s
/return
|--------------------------------------------------------------------------------
|SUB: GM Check
|--------------------------------------------------------------------------------
Sub GMCheck
/doevents
/if (${Spawn[gm].ID}) {
/beep
/beep
/beep
/echo GM has entered the zone!
/echo FUCK HIM but ending the macro...
/keypress forward
/keypress back
/quit
/endmacro
}
/return
|--------------------------------------------------------------------------------
|SUB: Where's the group?.
|--------------------------------------------------------------------------------
Sub CheckAnchor
/if (${Math.Distance[${AnchorY},${AnchorX}]}>8) /call MoveToAnchor
/return
|--------------------------------------------------------------------------------
|SUB: Move back to group.
|--------------------------------------------------------------------------------
Sub MoveToAnchor
/stick off
/declare iCount int local
/varset iCount 0
| /echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}.
/varset RV_MyXLOC ${Int[${Me.X}]}
/varset RV_MyYLOC ${Int[${Me.Y}]}
/declare RV_DistanceTimer timer 15
:AnchorMoveLoop
/delay 1
/doevents
/face fast nolook loc ${AnchorY},${AnchorX}
/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) {
/keypress forward hold
} else {
/keypress forward
/face fast away nolook loc ${AnchorY},${AnchorX}
/return
}
/if (${iCount}>2) {
/face fast nolook loc ${AnchorY},${AnchorX}
/varset iCount 0
}
/if (!${RV_DistanceTimer}) {
/if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) /call HitObstacle
/varset RV_MyXLOC ${Int[${Me.X}]}
/varset RV_MyYLOC ${Int[${Me.Y}]}
/varset RV_DistanceTimer 15
}
}
/varcalc iCount ${iCount}+1
/goto :AnchorMoveLoop
/return
|--------------------------------------------------------------------------------
|SUB: Obstacle Avoidance
|--------------------------------------------------------------------------------
Sub HitObstacle
/gsay F%@#, I'm Stuck.
/gsay Turd Furgason, Please help me.
/echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}
/warp loc ${AnchorY}, ${AnchorX}, ${AnchorZ}
/return
|--------------------------------------------------------------------------------
|SUB: Reset
|--------------------------------------------------------------------------------
Sub ResetSub
/call CheckAnchor
/varset RV_TargetDead 0
/varset RV_Fighting 0
/doevents
/attack off
/keypress ESC
/face fast heading ${RV_resetheading}
/return
|--------------------------------------------------------------------------------
|SUB: Moving
|--------------------------------------------------------------------------------
Sub MoveToMob
/varset RV_MyXLOC ${Int[${Me.X}]}
/varset RV_MyYLOC ${Int[${Me.Y}]}
/declare RV_DistanceTimer timer 15
/doevents
:MovementLoop
/doevents
/if ((${Target.Type.Equal["Corpse"]})&&(${Int[${Target.Distance}]}>20)) {
/keypress forward hold
/delay 1
/goto :Movementloop
}
/if ((${Target.Type.Equal["Corpse"]})&&(${Int[${Target.Distance}]}<20)) /return
/if (${Target.ID}) {
/face fast nolook
}
/if (${Int[${Target.Distance}]}>${RV_FastRange}) {
/keypress forward hold
}
/if (${Int[${Target.Distance}]}<${RV_FastRange}&&${Int[${Target.Distance}]}>${RV_RangeMax}) {
/keypress forward
}
/if (${Int[${Target.Distance}]}<${RV_RangeMin}) {
/keypress back
/delay 3
}
/if (!${RV_DistanceTimer}) {
/doevents
/if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) /call HitObstacle
/varset RV_MyXLOC ${Int[${Me.X}]}
/varset RV_MyYLOC ${Int[${Me.Y}]}
/varset RV_DistanceTimer 15
/goto :Movementloop
}
/if (${Int[${Target.Distance}]}>${RV_FastRange}) /goto :MovementLoop
/return
|--------------------------------------------------------------------------------
|SUB: Combat (This is where you macro should be while beating the mob up)
|--------------------------------------------------------------------------------
Sub CombatSub
/varset RV_Fighting 1
/varset RV_TargetDead 0
/if ((${Target.ID})&&(${Target.Type.Equal["NPC"]})) /attack on
:CombatLoop
/stick 10 behind
/doevents
/attack on
/call MoveToMob
/call SpecialIT
}
:nocombat
/if ((!${Target.ID}) || (${Target.Type.Equal["Corpse"]})) {
/varcalc Mobs_Killed (${Mobs_Killed}+1)
/attack off
/keypress forward
/keypress back
/keypress esc
/varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]}
/varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]}
/echo EXP: ${Exper}:${Me.PctExp}% - AAXP: ${AAExp}:${Me.PctAAExp}% - ${Math.Calc[${Macro.RunTime}/60]} minutes
/popup EXP: ${Exper}:${Me.PctExp}% - AAXP: ${AAExp}:${Me.PctAAExp}% - ${Math.Calc[${Macro.RunTime}/60]} minutes
/echo Total Mobs killed so far: ${Mobs_Killed}
/varset Exper ${Me.PctExp}
/varset AAExp ${Me.PctAAExp}
/varset RV_TargetDead 1
/varset RV_Fighting 0
}
/if (!${RV_TargetDead}) {
/goto :CombatLoop
}
/return
|--------------------------------------------------------------------------------
|SUB: Special Combat
|--------------------------------------------------------------------------------
Sub SpecialIT
/return
|--------------------------------------------------------------------------------
|
|--------------------------------------------------------------------------------
Sub WhatTheFuckBitch
/echo Uhm target the person you want to assist before starting this macro.
/popup Uhm target the person you want to assist before starting this macro.
/endmacro
/return
Sub Event_Unduck
/call CheckAnchor
/return
|--------------------------------------------------------------------------------
|SUB: Buff Check - Bard Specific, but can be edited for other classes
|--------------------------------------------------------------------------------
Sub BuffCheck
/if (${Me.PctHPs}<60) /keypress 2
/if (${Me.Buff["Miraculous Visions"].Duration} !> ${MF_BuffTicks}) {
/casting "Stanos' Wicked Gauntlets" hands
/echo Casting Haste
/popup Casting Haste
/delay 4s
}
/if (${Me.Buff["Shield of the Arcane"].Duration} !> ${MF_BuffTicks}) {
/casting "Stanos' Wicked Breastplate" chest
/echo Casting hp buffs
/popup Cating HP Buffs
/delay 13s
}
/if (${Me.Buff["Elixir of Health X"].Duration} !> ${MF_BuffTicks}) {
/casting "Distillate of Health X" item
/echo Casting Haste
/popup Casting Haste
/delay 4s
}
/if (${Me.Buff["Shield of the Eighth"].Duration} !> ${MF_BuffTicks}) {
/casting "Velium Coldain Insignia Ring" fingers
/echo Casting Haste
/popup Casting Haste
/delay 4s
}
/return
N

