Code: Select all
#turbo
| Macstab.mac by Stabulous
|#include HideSneak.mac
#event Success "You have stolen #1#"
#event Backstab "You backstab #1# for #2# points of damage."
#event MyDamage "You pierce #1# for #2# points of damage."
#event NonMelDamage "Stabulous hit #1# for #2# points of non-melee damage."
Sub Main
/declare timeStart int outer
/declare timeEnd int outer
/declare timeElapsed int outer
/declare bsDmg int outer
/declare myDmg int outer
/declare nonDmg int outer
/declare fltExp float outer
/varset fltExp ${Me.PctExp}
/echo Attacking ${Target.Name}, a ${Target.Level} ${Target.Class}
/call MoveTo
/call DoRazorarc
/varset timeStart ${Time.SecondsSinceMidnight}
/if (${Me.AbilityReady[Backstab]}) /doability Backstab
/doability "Thief's Eyes"
/attack on
:Loop
/doevents
| /if (${Me.PctHPs}<30) /vtest 007
/face fast
/call DoBS
/if (${Me.AbilityReady[Intimidation]}) /doability Intimidation
/if (${Me.AbilityReady[Disarm]}) /doability Disarm
| /if (${Me.AbilityReady[Pick Pockets]}) /call PickPockets
/if (${Me.PctHPs}<75) /call SaveMyself
/delay 2
/call StayClose
/if (${Target.ID}) /goto :Loop
| /call AcquireNewTarget
/attack off
/varset timeEnd ${Time.SecondsSinceMidnight}
/varset timeElapsed ${Math.Calc[${timeEnd} - ${timeStart}]}
| /call LootHide
| /disc Thief's Eyes
/declare TotalDamage int inner
/varset TotalDamage ${Math.Calc[${bsDmg} + ${nonDmg} + ${myDmg}]}
/echo Duration: ${timeElapsed} seconds.
/echo Standard Damage: ${myDmg}
/echo Backstab Damage: ${bsDmg}
/echo Non-melee Damage: ${nonDmg}
/echo Total Damage: ${TotalDamage}
/echo Damage Per Second: ${Math.Calc[${TotalDamage} / ${timeElapsed}]}
/echo Exp: ${Me.PctExp}% of level. (+${Math.Calc[${Me.PctExp}-${fltExp}]}%)
/call HideSneak
/return
Sub AcquireNewTarget
:FindTarget
/squelch /target npc radius 30 next
/if (${Target.ID}) {
/if (${Target.DistanceZ}<15) {
/attack on
/goto :Loop
} else {
/goto :FindTarget
}
} else {
/goto :FindTarget
}
/return
Sub SaveMyself
/attack off
/aa act Assassin's Feign
/target clear
/keypress down hold
/delay 1
/aa act Escape
/delay 2
/keypress down
/endmac
/return
Sub Event_Success(string Param1)
/timed 10 /autoinv
/echo Stole ${Param1}
/return
Sub PickPockets
/attack off
/delay 2
/doability "Pick Pockets"
/delay 2
/attack on
/return
Sub FindNextTarget
:FindTarget
/squelch /target npc radius 30 next
/if (${Target.ID}) {
/if (${Target.DistanceZ}<15) {
/attack on
/goto :Loop
} else {
/goto :FindTarget
}
} else {
/goto :FindTarget
}
/return
Sub DoBS
/if (${Me.AbilityReady[Backstab]}) {
|/call MoveTo
/doability Backstab
}
/return
Sub DoRazorarc
/if (${Me.CombatAbilityReady[Razorarc]}) {
/doability Razorarc
/delay 5
}
/return
Sub Event_MyDamage(string Line, string Mob, int Damage)
|/echo Hit for ${myDamage}s
/varset myDmg ${Math.Calc[${myDmg}+${Damage}]}
/return
Sub Event_Backstab(string Line, string Mob, int Damage)
|/vplay 008
/echo ${Damage}
|/if (${Damage}>1000) /vgroup 001
|/if (${Damage}>17000) /g BS'd for ${Damage}!
/varset bsDmg ${Math.Calc[${bsDmg}+${Damage}]}
/return
Sub Event_NonMelDamage(string Line, string Mob, int Damage)
|/echo Hit for ${myDamage}s
/varset nonDmg ${Math.Calc[${nonDmg}+${Damage}]}
/return
Sub StayClose
/declare intRange int inner
/varcalc intRange ${Math.Calc[${Target.MaxRangeTo}-(${Target.MaxRangeTo}/4)]}
:MoveToLoop
/if (${Target.Distance}>${intRange}) /keypress up hold
/face fast
/delay 1
/if (${Target.Distance}>${intRange}) /goto :MoveToLoop
/keypress up
/return
Sub MoveTo
:MoveToLoop
/if (${Target.Distance}>3) /keypress up hold
/face fast
/delay 1
/if (${Target.Distance}>3) /goto :MoveToLoop
/keypress up
/face nolook fast Heading ${Target.Heading.DegreesCCW}
/keypress down hold
:BackLoop
/delay 1
/if (${Target.Distance}<5) /goto :BackLoop
/keypress down
/delay 1
/return
Sub HideSneak
/call DoSneak
/call DoHide
/popup Ready!
/return
Sub DoHide
:TryHide
/if (${Me.AbilityReady[Hide]}) /doability Hide
/delay 5
/if (!${Me.Invis}) {
/popup Wait ...
/doability Hide
/goto :TryHide
}
/return
Sub DoSneak
:TrySneak
/if (${Me.AbilityReady[Sneak]}) /doability Sneak
/delay 5
/if (!${Me.Sneaking}) {
/popup Wait ...
/goto :TrySneak
}
/return
