|Tone's Bardbot.mac
#Event EXP "You gain#*#"
#Event Slain "You have been slain by#*#"
#Event DPS "<#*#> DPS"
#Event Pull "<#*#> Tag#*#"
#Event Attack "<#*#> Attack"
#Include Wait4rez.inc
#Include Spell_Routines.inc
#Include botevents.inc
#Chat tell
#Chat group
#Chat channel
Sub Main
/call BotDeclares
|===========================================================
|Songs~n~Stuff Edit this stuff
|===========================================================
/declare Master string outer ${Target.CleanName}
/declare MA string outer ${Target.CleanName}
/declare MAID int outer ${Target.ID}
/declare MyChannel string outer somechannel
/declare MyChannelPass string outer somepassword
/declare Tells int outer 1
| 1 echos tells to channel; 0 is no echoing
/declare Spam int outer 1
| 1 echos events to private channel; 0 no echoing
/declare Bellow string outer Fortified Bellowing
/declare HealSong string outer Chorus of Life
/declare HealSongGem int outer 6
/declare HasteSong string outer Warsong of Zek
/declare HasteSongGem int outer 4
/declare NukeSong string outer Eriki's Psalm of Power
/declare NukeSongGem int outer 3
/declare ResistSong string outer Psalm of Veeshan
/declare ResistSongGem int outer 5
/declare SnareSong string outer Largo`s Absonant Binding
/declare SnareSongGem int outer 9
/declare SnarePct int outer 39
/declare Anchor int outer 0
|===========================================================
| Assist %
|===========================================================
/declare RV_Assistat int outer 96
|===========================================================
| End of Editing
|===========================================================
/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 RV_resetheading int outer ${Me.Heading.DegreesCCW.Int}
/declare SitBooBooID int outer
/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
|========================================================
/join ${MyChannel}:${MyChannelPass}
:Start
/call GetTarget
/call CheckBuffs
|/call MemSpells I took this out because I just have the set saved.
/doevents
/goto :Start
/return
Sub MemSpells
/echo Meming Spells...
/memspell ${HealSongGem} "${HealSong}
/delay 5s
/memspell ${HasteSongGem} "${HasteSong}"
/delay 5s
/memspell ${NukeSongGem} "${NukeSong}"
/delay 5s
/memspell ${ResistSongGem} "${ResistSong}"
/delay 5s
/memspell ${SnareSongGem} "${SnareSong}"
/echo ~~Done Meming Spells~~
/return
Sub GetTarget
:NotYet
/doevents
/assist ${MA}
/delay 4
/if (!${Target.ID}) /goto :NotYet
/if ((${Target.ID}!=${MAID}) && (${Target.PctHPs}<${RV_Assistat}) && (${Target.Distance}<100) && ${Target.Type.Equal[NPC]}) /call Combat
/goto :NotYet
/delay 3s
/return
Sub Combat
/varset RV_Fighting 1
/varset RV_TargetDead 0
/if ((${Target.ID}) && (${Target.Type.Equal["NPC"]})) /attack on
/twist ${HasteSongGem} ${HealSongGem} ${NukeSongGem} ${ResistSongGem}
:CombatLoop
/doevents
/attack on
/stick behind 50%
/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 SpecialIT
/doevents
/if (${Target.Type.Equal[NPC]} && ${Target.PctHPs}<=${SnarePct}) /call Snare
/if (${Me.PctHPs} < 10) {
/attack off
/disc Deftdance
/alt act 212
/delay 30s
/Echo ${Target} Beat me to within moments of my life!
}
/return
Sub Snare
/twist ${SnareSongGem} ${HealSongGem} ${NukeSongGem} ${HasteSongGem}
:Snare
/doevents
/if (!${Target.ID}) {
/return
} Else {
/goto :Snare
}
/return
Sub ResetSub
/varset RV_TargetDead 0
/varset RV_Fighting 0
/doevents
/attack off
/keypress ESC
/call CheckAnchor
/return
Sub Event_EXP
/doevents
/call CheckBuffs
/twist ${HealSongGem}
/call ResetSub
/return
Sub CheckAnchor
/if (${Math.Distance[${AnchorY},${AnchorX}]}>10 && ${Anchor}==1) /call MoveToAnchor
/return
Sub MoveToAnchor
/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 HitObstacle
/keypress forward
/keypress back hold
/delay 5
/keypress back
/if (${Math.Rand[2]}) {
/keypress strafe_right hold
/delay 3
/keypress strafe_right
} else {
/keypress strafe_left hold
/delay 3
/keypress strafe_left
}
/keypress forward hold
/return
Sub Event_Slain
/call Wait4Rez
/return
Sub Event_Gate(string Line,string Gater)
/bc << ${Gater} Trying to Gate >>
/sqluech /twist ${MezSongGem} ${SnareSongGem} ${HasteSongGem} ${NukeSongGem}
/alt act ${Bellow}
/return
Sub Event_DPS
/call cast "Prismatic Dragon Blade" item
/bc Nuke away clicking 1.5
/return
Sub Event_Chat(string ChatType,string Sender,string ChatText)
/if (!${ChatType.Equal[GROUP]} && !${ChatType.Equal[${MyChannel}]}&& !${ChatType.Equal[TELL]}) {
/return
}
/mqlog ${ChatType}: ${Sender} tells you: ${ChatText}
/if (${ChatType.Equal[TELL]} && ${Tells}==1) {
/bc ${Sender} told me: ${ChatText}
}
/return
Sub Event_Pull
/twist off
/return
Sub Event_Attack
/attack off
/keypress esc
/stand
/attack off
/call CheckAnchor
/return
Sub CheckBuffs
|Here are the clickies !
/if (${Me.Buff[Vengeful Guard].Duration}<=3) /call cast "Cloak of Retribution" item 1s
/if (${Me.Buff[Symphony of Battle].Duration}<=3) /call cast "Songblade of the Eternal" item 3s
/return