rendered paste bodyobjectdef oClass inherits oBase
{
;******************************************************************************** /
;** Variables * /
;******************************************************************************** /
;--- Rest
variable int RestMana = 35
variable int StandMana = 85
variable int RestHP = 70
variable int StandHP = 80
;--- Range and checks
variable int AttackRange = 35
variable int FollowRange = 35
variable int MaxHeightDif = 5
variable int Friends = 1
;--- Pull ----------------------------------------------------------------------- /
variable bool UsePullDot1 = TRUE
variable string PullDot1 = "Moonfire"
variable bool UsePullDot2 = TRUE
variable string PullDot2 = "Insect Swarm"
;--- Rest ----------------------------------------------------------------------- /
variable int RestMyHealthTouch = 70
;--- Buff ----------------------------------------------------------------------- /
variable bool BuffMark = TRUE
variable bool BuffThorns = TRUE
;--- CombatBuff ----------------------------------------------------------------- /
variable bool CombatBuffRacial = TRUE
variable bool CombatBuffTrinket = TRUE
variable bool CombatBuffSwiftness = TRUE
variable bool CombatBuffBarkskin = TRUE
variable bool CombatBuffStone = TRUE
variable int CombatBuffMyHealthStone = 25
variable bool CombatBuffInnervate = TRUE
;--- Prebuff -------------------------------------------------------------------- /
variable bool PrebuffTable = TRUE
variable int PrebuffTableStacks = 10
variable bool PrebuffSoulwell = TRUE
variable bool PrebuffMark = TRUE
variable bool PrebuffThorns = TRUE
;--- Guard ---------------------------------------------------------------------- /
variable bool GuardBloom = TRUE
variable int GuardTargetHealthBloom = 70
variable int GuardMyManaBloom = 50
;--- Healer --------------------------------------------------------------------- /
variable bool HealerRejuvenation = TRUE
variable int HealerTargetHealthRejuvenation = 80
variable int HealerMyManaRejuvenation = 20
variable bool HealerRegrowth = TRUE
variable int HealerTargetHealthRegrowth = 40
variable int HealerMyManaRegrowth = 20
variable bool HealerBloom = TRUE
variable int HealerTargetHealthBloom = 60
variable int HealerMyManaBloom = 20
variable bool HealerTouch = TRUE
variable int HealerTargetHealthTouch = 20
variable int HealerMyManaTouch = 10
;--- Trinkets
variable string TrinketName1 = "Battlemaster's Perseverance"
variable int TrinketMyHealth1 = 30 /* 100 for always use */
variable int TrinketMyMana1 = 100 /* 100 for always use */
variable int TrinketPvP1 = FALSE /* Only PvP Trinket */
variable string TrinketName2 = "Insignia of the Horde"
variable int TrinketMyHealth2 = 100 /* 100 for always use*/
variable int TrinketMyMana2 = 100 /* 100 for always use*/
variable int TrinketPvP2 = TRUE /* Only PvP Trinket */
;******************************************************************************** /
;** Pull & Attack Functions * /
;******************************************************************************** /
;** - Pull Setup - ************************************************************** /
;** - Attack Setup - ************************************************************ /
;******************************************************************************** /
;** - Pull Setup - ************************************************************** /
variable int PullBailOut = ${LavishScript.RunningTime}
variable int RandomPull = 99
method PullPulse()
{
This:BGChk
if ${Me.Casting}
{
return
}
if ${Toon.TargetIsNew}
{
This.PullBailOut:Set[${This.InMilliseconds[${Config:GetSlider["sldPullBailOutTimer"]}]
}
if !${Toon.ValidTarget[${Target.GUID}]} && ${This.FriendsChk}
{
This:Output["DRUID Routine: Need a target"]
Toon:NeedTarget[1]
return
}
if !${Target.LineOfSight}
{
This:Output["DRUID Routine: Target is out of sight, skipping! ${Target.LineOfSight}."]
;WoWScript ClearTarget()
Toon:Stop
if ${This.FriendsChk}
{
Toon:NextBestTarget
}
return
}
if (!${Toon.TargetIsBestTarget} || ${Target.Dead} || !${Target.LineOfSight}) || (${Target.Distance} > ${This.FollowRange})
{
This:Output["DRUID Routine: Target is no longer best target."]
;WoWScript ClearTarget()
if ${This.FriendsChk}
{
Toon:BestTarget
}
return
}
if (${Target.Distance} > ${This.AttackRange}) && (${Target.Distance} < ${This.FollowRange}) && (${Math.Abs[${Target.Z} - ${Me.Z}]} < ${This.MaxHeightDif})
{
This:Output["Target is too far away but within follow range, moving closer."]
Toon:ToRanged
return
}
elseif !${Target.LineOfSight}
{
This:Output["DRUID Routine: Target is out of sight, skipping! ${Target.LineOfSight}."]
;WoWScript ClearTarget()
Toon:Stop
if ${This.FriendsChk}
{
Toon:NextBestTarget
}
return
}
elseif ${Movement.Speed} && ${Target.Distance} < ${This.AttackRange} - 2
{
Toon:Stop
}
if ${This.NeedFaceForSpell}
{
This:FaceForSpellPulse
return
}
if ${This.UsePullDot1} && !${This.NeedHealer}
{
if ${Toon.canCast[${This.PullDot1}]} && ${Toon.canBuff[${Target.GUID}, ${This.PullDot1}]} && !${Movement.Speed}
{
Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}]
Toon:CastSpellGUID[${Target.GUID}, ${This.PullDot1}]
return
}
}
if ${This.UsePullDot2} && !${This.NeedHealer}
{
if ${Toon.canCast[${This.PullDot2}]} && ${Toon.canBuff[${Target.GUID}, ${This.PullDot2}]} && !${Movement.Speed}
{
Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}]
Toon:CastSpellGUID[${Target.GUID}, ${This.PullDot2}]
return
}
}
}
;** - Attack Setup - ************************************************************ /
method AttackPulse()
{
;if ${Me.Casting}
;{
; return
;}
;important
This:BGChk
if ${This.NeedCombatHealing}
{
This:CombatHealingPulse
return
}
if ${This.NeedHealer} && ${This.FriendsChk}
{
This:HealerPulse
return
}
if !${Toon.ValidTarget[${Target.GUID}]} || ${Target.Dead} || !${Me.Target(exists)} || ${Target.Distance} > ${This.AttackRange}
{
Toon:Stop
Toon:NeedTarget[1]
return
}
if !${Toon.TargetIsBestTarget} && ${Object[${Toon.BestTarget}](exists)} && ${Toon.BestTarget.NotEqual[NULL]}
{
This:Output["Target is no longer best target. Getting new target."]
Toon:BestTarget
return
}
if ${Target.Distance} > ${This.FollowRange}
{
This:Output["Target is to far away! ${Target.Distance}"]
;WoWScript ClearTarget()
Toon:Stop
Toon:NextBestTarget
return
}
if (${Target.Distance} > ${This.AttackRange}) && (${Target.Distance} < ${This.FollowRange}) && (${Math.Abs[${Target.Z} - ${Me.Z}]} < ${This.MaxHeightDif})
{
This:Output["Target is too far away but within follow range, moving closer."]
Toon:ToRanged
return
}
elseif ${Movement.Speed} && ${Target.Distance} < ${This.AttackRange} - 2
{
Toon:Stop
}
if ${This.NeedFaceForSpell}
{
This:FaceForSpellPulse
return
}
if ${This.NeedNoMoreSpell}
{
This:NoMoreSpellPulse
return
}
if ${This.NeedClassAttack} && ${Target.Type.Equal["player"]} && ${Target.FactionGroup.NotEqual[${Me.FactionGroup}]}
{
This:ClassAttackPulse
return
}
if ${This.NeedCombatSpell} && !${This.NeedHealer} && !${This.FriendsChk}
{
This:CombatSpellPulse
return
}
return
}
;******************************************************************************** /
;** Need & Pulse Functions * /
;******************************************************************************** /
;** - Rest - ******************************************************************** /
member NeedRest()
{
if ${Me.InCombat}
{
return FALSE
}
if ${Me.Buff[Resurrection Sickness](exists)}
{
return TRUE
}
if ${Me.PctHPs} < ${This.RestHP} && ${Item["Conjured Manna Biscuit"](exists)}
{
return TRUE
}
if ${Me.PctMana} < ${This.RestMana} && ${Item["Conjured Manna Biscuit"](exists)}
{
return TRUE
}
if ${Me.PctMana} < ${This.StandMana} && ${Me.Sitting}
{
return TRUE
}
return FALSE
}
method RestPulse()
{
if ${Me.Casting}
{
return
}
if ${Movement.Speed} || ${Movement.Forward} || ${Movement.Backward}
{
Toon:Stop
}
if ${Me.PctHPs} < ${This.RestHP} && !${Me.Sitting} && !${Me.Casting}
{
if ${Toon.canCast[Healing Touch]} && ${Me.PctHPs} < ${This.RestMyHealthTouch}
{
Toon:CastSpellGUID[${Me.GUID}, Healing Touch]
return
}
}
if ${Item["Conjured Manna Biscuit"](exists)} && ${Me.PctHPs} < ${This.RestHP} && !${Me.Buff[Food](exists)}
{
Item["Conjured Manna Biscuit"]:Use
return
}
if ${Item["Conjured Manna Biscuit"](exists)} && ${Me.PctMana} < ${This.RestMana} && !${Me.Buff[Drink](exists)}
{
Item["Conjured Manna Biscuit"]:Use
return
}
if ${Me.Buff[Resurrection Sickness](exists)}
{
Toon:Sitdown
return
}
if ${Me.PctHPs} >= ${This.StandHP} && ${Me.Sitting} && ${Me.PctMana} >= ${This.StandMana}
{
Toon:Standup
return
}
}
;** - Buff Setup - ************************************************************** /
member NeedBuff()
{
if ${This.BuffMark} && ${Toon.canBuff[${Me.GUID}, Mark of the Wild]} && !${Me.Buff[Gift of the Wild](exists)}
{
return TRUE
}
if ${This.BuffThorns} && ${Toon.canBuff[${Me.GUID}, Thorns]}
{
return TRUE
}
return FALSE
}
method BuffPulse()
{
if ${This.BuffMark} && ${Toon.canBuff[${Me.GUID}, Mark of the Wild]} && !${Me.Buff[Gift of the Wild](exists)}
{
Toon:CastSpellGUID[${Me.GUID}, Mark of the Wild]
return
}
if ${This.BuffThorns} && ${Toon.canBuff[${Me.GUID}, Thorns]}
{
Toon:CastSpellGUID[${Me.GUID}, Thorns]
return
}
}
method BGChk()
{
if ${WoWScript[GetBattlefieldWinner()](exists)} || ${BG.ShouldLeaveBG}
{
This:Output["Battle Ground Has a Winner, leaving."]
move -stop
BG:LeaveBG
}
return
}
;** - CombatBuff Setup - ******************************************************** /
member NeedCombatBuff()
{
if ${This.CombatBuffRacial} && ${This.NeedRacial}
{
return TRUE
}
if ${This.CombatBuffTrinket} && ${This.NeedTrinket}
{
return TRUE
}
if ${This.CombatBuffSwiftness} && ${Toon.canCast[Nature's Swiftness]} && ${Me.PctHPs} < 40
{
return TRUE
}
if ${This.CombatBuffBarkskin} && ${Toon.canCast[Barkskin]} && ${Me.PctHPs} < 50 && ${This.PvPAggroWithin[8,TRUE]} > 0
{
return TRUE
}
if ${This.CombatBuffStone} && ${Item[Master Healthstone](exists)} && ${Me.PctHPs} < ${This.CombatBuffMyHealthStone}
{
return TRUE
}
if ${This.CombatBuffInnervate} && ${Toon.canCast[Innervate]} && ${Me.PctMana} < 40
{
return TRUE
}
return FALSE
}
method CombatBuffPulse()
{
if ${This.CombatBuffRacial} && ${This.NeedRacial}
{
This:RacialPulse
return
}
if ${This.CombatBuffTrinket} && ${This.NeedTrinket}
{
This:TrinketPulse
return
}
if ${This.CombatBuffSwiftness} && ${Toon.canCast[Nature's Swiftness]} && ${Me.PctHPs} < 40
{
This:Output["DRUID Routine: Using Nature's Swiftness!"]
Toon:CastSpell[Nature's Swiftness]
return
}
if ${This.CombatBuffBarkskin} && ${Toon.canCast[Barkskin]} && ${Me.PctHPs} < 50 && ${This.PvPAggroWithin[5,TRUE]} > 0
{
Toon:CastSpellGUID[${Me.GUID}, Barkskin]
return
}
if ${This.CombatBuffStone} && ${Item[Master Healthstone](exists)} && ${Me.PctHPs} < ${This.CombatBuffMyHealthStone}
{
This:Output["DRUID Routine: Using Master Healthstone!"]
Item[Master Healthstone]:Use
return
}
if ${This.CombatBuffInnervate} && ${Toon.canCast[Innervate]} && ${Me.PctMana} < 40
{
Toon:CastSpellGUID[${Me.GUID}, Innervate]
return
}
return
}
;** - Combat Healing - ********************************************************** /
member NeedCombatHealing()
{
if ${Me.Buff[Nature's Swiftness](exists)} && ${Toon.canCast[Healing Touch]} && ${Me.PctHPs} < 70
{
return TRUE
}
if ${Me.PctHPs} < 50 && ${Toon.canBuff[${Me.GUID}, Swiftmend]} && ( ${Me.Buff[Rejuvenation](exists)} || ${Me.Buff[Regrowth](exists)} )
{
return TRUE
}
if ${Me.PctHPs} < 80 && ${Toon.canBuff[${Me.GUID}, Rejuvenation]} && !${Me.Buff[Rejuvenation](exists)}
{
return TRUE
}
if ${Me.PctHPs} < 90 && (${Toon.canBuff[${Me.GUID}, Lifebloom]} || !${Me.Buff[Lifebloom](exists)})
{
return TRUE
}
if ${Me.PctHPs} < 80 && (${Toon.canBuff[${Me.GUID}, Lifebloom]} || ${Me.Buff[Lifebloom].Application} < 2)
{
return TRUE
}
if ${Me.PctHPs} < 70 && (${Toon.canBuff[${Me.GUID}, Lifebloom]} || ${Me.Buff[Lifebloom].Application} < 3)
{
return TRUE
}
if ${Me.PctHPs} < 60 && ${Toon.canBuff[${Me.GUID}, Regrowth]}
{
return TRUE
}
if ${Me.PctHPs} < 20 && ${Toon.canCast[Healing Touch]}
{
return TRUE
}
return FALSE
}
method CombatHealingPulse()
{
if ${Movement.Speed} || ${Movement.Forward} || ${Movement.Backward}
{
Toon:Stop
}
if ${Me.Buff[Nature's Swiftness](exists)} && ${Toon.canCast[Healing Touch]} && ${Me.PctHPs} < 50
{
This:Output["DRUID Routine: Casting Healing Touch with Nature's Swiftness."]
Toon:CastSpellGUID[${Me.GUID}, Healing Touch]
return
}
if ${Me.PctHPs} < 50 && ${Toon.canBuff[${Me.GUID}, Swiftmend]} && ( ${Me.Buff[Rejuvenation](exists)} || ${Me.Buff[Regrowth](exists)} )
{
Toon:CastSpellGUID[${Me.GUID}, Swiftmend]
return
}
if ${Me.PctHPs} < 80 && ${Toon.canBuff[${Me.GUID}, Rejuvenation]} && !${Me.Buff[Rejuvenation](exists)}
{
Toon:CastSpellGUID[${Me.GUID}, Rejuvenation]
return
}
if ${Me.PctHPs} < 90 && ( ${Toon.canBuff[${Me.GUID}, Lifebloom]} || !${Me.Buff[Lifebloom](exists)} )
{
Toon:CastSpellGUID[${Me.GUID}, Lifebloom]
return
}
if ${Me.PctHPs} < 80 && ( ${Toon.canBuff[${Me.GUID}, Lifebloom]} || ${Me.Buff[Lifebloom].Application} < 2 )
{
Toon:CastSpellGUID[${Me.GUID}, Lifebloom]
return
}
if ${Me.PctHPs} < 70 && ( ${Toon.canBuff[${Me.GUID}, Lifebloom]} || ${Me.Buff[Lifebloom].Application} < 3 )
{
Toon:CastSpellGUID[${Me.GUID}, Lifebloom]
return
}
if ${Me.PctHPs} < 60 && ${Toon.canBuff[${Me.GUID}, Regrowth]}
{
Toon:CastSpellGUID[${Me.GUID}, Regrowth]
return
}
if ${Me.PctHPs} < 20 && ${Toon.canCast[Healing Touch]}
{
Toon:CastSpellGUID[${Me.GUID}, Healing Touch]
return
}
return
}
;** - Combat Spell - ************************************************************ /
member NeedCombatSpell()
{
if ${Target.IsTotem} || ${Me.PctMana} < 20 || ${Me.Casting}
{
return FALSE
}
if ${Toon.canBuff[${Target.GUID}, Moonfire]} && ${Toon.canCast[Moonfire]}
{
return TRUE
}
if ${Toon.canCast[Wrath]}
{
return TRUE
}
return FALSE
}
method CombatSpellPulse()
{
if ${Toon.canBuff[${Target.GUID}, Moonfire]} && ${Toon.canCast[Moonfire]}
{
Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}]
Toon:CastSpellGUID[${Target.GUID}, Moonfire]
return
}
if ${Toon.canCast[Wrath]}
{
Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}]
Toon:CastSpellGUID[${Target.GUID}, Wrath]
return
}
return
}
;** - Racial - ****************************************************************** /
member NeedRacial()
{
if ${Toon.canCast[War Stomp]} && ${This.PvPAggroWithin[5,TRUE]} > 0 && ${Me.PctHPs} < 50
{
return TRUE
}
return FALSE
}
method RacialPulse()
{
if ${Toon.canCast[War Stomp]} && ${This.PvPAggroWithin[5,TRUE]} > 0 && ${Me.PctHPs} < 50
{
This:Output["DRUID Routine: Using War Stomp!"]
Toon:CastSpell[War Stomp]
}
return
}
;** - Prebuff All - ************************************************************* /
variable bool HookBGPrebuff = TRUE
member NeedBGPrebuff()
{
if ${This.PrebuffTable} && ${This.NeedBGObjects["Refreshment Table","Conjured Manna Biscuit", ${This.PrebuffTableStacks}]}
{
return TRUE
}
if ${This.PrebuffSoulwell} && ${This.NeedBGObjects["Soulwell","Master Healthstone", 1]}
{
return TRUE
}
if ${This.PrebuffMark} && ${This.NeedSpellOn[friendly, Mark of the Wild, Gift of the Wild]} && !${Movement.Speed}
{
return TRUE
}
if ${This.PrebuffThorns} && ${This.NeedSpellOn[friendly, Thorns]} && !${Movement.Speed}
{
return TRUE
}
return FALSE
}
method BGPrebuffPulse()
{
if ${This.PrebuffTable} && ${This.NeedBGObjects["Refreshment Table","Conjured Manna Biscuit", ${This.PrebuffTableStacks}]}
{
This:BGObjectsPulse["Refreshment Table","Conjured Manna Biscuit", ${This.PrebuffTableStacks}]
return
}
if ${This.PrebuffSoulwell} && ${This.NeedBGObjects["Soulwell","Master Healthstone", 1]}
{
This:BGObjectsPulse["Soulwell","Master Healthstone", 1]
return
}
if ${This.PrebuffMark} && ${This.NeedSpellOn[friendly, Mark of the Wild, Gift of the Wild]} && !${Movement.Speed}
{
This:SpellOnPulse[friendly, Mark of the Wild, Gift of the Wild]
return
}
if ${This.PrebuffThorns} && ${This.NeedSpellOn[friendly, Thorns]} && !${Movement.Speed}
{
This:SpellOnPulse[friendly, Thorns]
return
}
return
}
;** - Guarding All - ************************************************************ /
variable bool HookBGGuard = TRUE
member NeedBGGuard()
{
if ${This.GuardBloom} && ${This.NeedSpellOn[friendly, Lifebloom, none, ${This.GuardTargetHealthBloom}]} && ${Me.PctMana} > ${This.GuardMyManaBloom}
{
return TRUE
}
return FALSE
}
method BGGuardPulse()
{
if ${This.GuardBloom} && ${This.NeedSpellOn[friendly, Lifebloom, none, ${This.GuardTargetHealthBloom}]} && ${Me.PctMana} > ${This.GuardMyManaBloom}
{
This:SpellOnPulse[friendly, Lifebloom, none, ${This.GuardTargetHealthBloom}]
return
}
return
}
;** - Healer - ****************************************************************** /
member NeedHealer()
{
if ${This.HealerRejuvenation} && ${This.NeedSpellOn[friendly, Rejuvenation, none, ${This.HealerTargetHealthRejuvenation}, 0, 35]} && ${Me.PctMana} > ${This.HealerMyManaRejuvenation}
{
return TRUE
}
if ${This.HealerRegrowth} && ${This.NeedSpellOn[friendly, Regrowth, none, ${This.HealerTargetHealthRegrowth}]} && ${Me.PctMana} > ${This.HealerMyManaRegrowth}
{
return TRUE
}
if ${This.HealerBloom} && ${This.NeedSpellOn[friendly, Lifebloom, none, ${This.HealerTargetHealthBloom}, 0, 35, 3]} && ${Me.PctMana} > ${This.HealerMyManaBloom}
{
return TRUE
}
if ${This.HealerTouch} && ${This.NeedSpellOn[friendly, Healing Touch, none, ${This.HealerTargetHealthTouch}]} && ${Me.PctMana} > ${This.HealerMyManaTouch}
{
return TRUE
}
return FALSE
}
method HealerPulse()
{
if ${This.HealerRejuvenation} && ${This.NeedSpellOn[friendly, Rejuvenation, none, ${This.HealerTargetHealthRejuvenation}, 0, 35]} && ${Me.PctMana} > ${This.HealerMyManaRejuvenation}
{
This:SpellOnPulse[friendly, Rejuvenation, none, ${This.HealerTargetHealthRejuvenation}, 0, 35]
return
}
if ${This.HealerRegrowth} && ${This.NeedSpellOn[friendly, Regrowth, none, ${This.HealerTargetHealthRegrowth}]} && ${Me.PctMana} > ${This.HealerMyManaRegrowth}
{
This:SpellOnPulse[friendly, Regrowth, none, ${This.HealerTargetHealthRegrowth}]
return
}
if ${This.HealerBloom} && ${This.NeedSpellOn[friendly, Lifebloom, none, ${This.HealerTargetHealthBloom}, 0, 35, 3]} && ${Me.PctMana} > ${This.HealerMyManaBloom}
{
This:SpellOnPulse[friendly, Lifebloom, none, ${This.HealerTargetHealthBloom}, 0, 35, 3]
return
}
if ${This.HealerTouch} && ${This.NeedSpellOn[friendly, Healing Touch, none, ${This.HealerTargetHealthTouch}]} && ${Me.PctMana} > ${This.HealerMyManaTouch}
{
This:SpellOnPulse[friendly, Healing Touch, none, ${This.HealerTargetHealthTouch}]
return
}
return
}
;** - Dead Setup - ************************************************************** /
member NeedDead()
{
return FALSE
}
method DeadPulse()
{
return
}
;** - Trinket - ***************************************************************** /
member NeedTrinket()
{
if ${Item[${TrinketName1}](exists)} && ${Me.Action[${TrinketName1}].Usable} && ${Me.PctHPs} < ${This.TrinketMyHealth1} && ${Me.PctMana} < ${This.TrinketMyMana1} && ( !${This.TrinketPvP1} || ${This.TrinketPvPDebuff} )
{
return TRUE
}
if ${Item[${TrinketName2}](exists)} && ${Me.Action[${TrinketName2}].Usable} && ${Me.PctHPs} < ${This.TrinketMyHealth2} && ${Me.PctMana} < ${This.TrinketMyMana2} && ( !${This.TrinketPvP2} || ${This.TrinketPvPDebuff} )
{
return TRUE
}
return FALSE
}
method TrinketPulse()
{
if ${Item[${TrinketName1}](exists)} && ${Me.Action[${TrinketName1}].Usable} && ${Me.PctHPs} < ${This.TrinketMyHealth1} && ${Me.PctMana} < ${This.TrinketMyMana1} && ( !${This.TrinketPvP1} || ${This.TrinketPvPDebuff} )
{
This:Output["DRUID Routine: Using Trinket ${TrinketName1}"]
Item[${TrinketName1}]:Use
return
}
if ${Item[${TrinketName2}](exists)} && ${Me.Action[${TrinketName2}].Usable} && ${Me.PctHPs} < ${This.TrinketMyHealth2} && ${Me.PctMana} < ${This.TrinketMyMana2} && ( !${This.TrinketPvP2} || ${This.TrinketPvPDebuff} )
{
This:Output["DRUID Routine: Using Trinket ${TrinketName2}"]
Item[${TrinketName2}]:Use
return
}
return
}
;** - SpellOn - ***************************************************************** /
variable objectref kPlayer
member NeedSpellOn(string unityp="all", string name1="none", string name2="none", int value1=0, int value2=0, int kMinRange=0, int kMaxRange=25)
{
variable int i = 1
variable guidlist kPlayerList
kPlayerList:Search[-players, -${unityp}, -noself, -alive, -lineofsight, -range ${kMinRange}-${kMaxRange}]
i:Set[1]
if ${kPlayerList.Count}
{
do
{
kPlayer:Set[${kPlayerList.Object[${i}].GUID}]
if !${kPlayer.Buff[${name1}](exists)}&& ${Toon.canCast[${name1}]} && (!${kPlayer.Buff[${name2}](exists)} || ${name2.Equal["none"]}) && (${kPlayer.PctHPs} < ${value1} || !${value1}) && (${kPlayer.PctHPs} > ${value2} || !${value2})
{
return TRUE
}
}
while ${i:Inc} <= ${kPlayerList.Count}
}
kPlayerList:Clear
return FALSE
}
method SpellOnPulse(string unityp, string name1="none", string name2="none", int value1=0, int value2=0, int kRange=25, int kApply=0)
{
variable int i = 1
variable guidlist kPlayerList
variable objectref kPlayer
kPlayerList:Search[-players, -${unityp}, -noself, -alive, -lineofsight, -range ${kMinRange}-${kMaxRange}]
i:Set[1]
if ${kPlayerList.Count}
{
do
{
kPlayer:Set[${kPlayerList.Object[${i}].GUID}]
if (!${kPlayer.Buff[${name1}](exists)} || ${kPlayer.Buff[${name1}](exists)} && ${kPlayer.Buff[${name1}].Application} < ${kApply}) && ${Toon.canCast[${name1}]} && (!${kPlayer.Buff[${name2}](exists)} || ${name2.Equal["none"]}) && (${kPlayer.PctHPs} < ${value1} || !${value1}) && (${kPlayer.PctHPs} > ${value2} || !${value2})
{
Toon:CastSpellGUID[${kPlayer}, ${name1}]
if ${WoWScript[SpellIsTargeting()]}
{
WoWScript SpellStopTargeting()
}
return
}
}
while ${i:Inc} <= ${kPlayerList.Count}
}
kPlayerList:Clear
return
}
;** - NeedClassAttack - ********************************************************* /
member NeedClassAttack()
{
;--- All Class -----------------------------------------------------------
;--- Druid ---------------------------------------------------------------
if ${Target.Class.Equal["Druid"]}
{
}
;--- Hunter --------------------------------------------------------------
if ${Target.Class.Equal["Hunter"]}
{
}
;--- Mage ----------------------------------------------------------------
if ${Target.Class.Equal["Mage"]}
{
}
;--- Paladin -------------------------------------------------------------
if ${Target.Class.Equal["Paladin"]}
{
}
;--- Priest --------------------------------------------------------------
if ${Target.Class.Equal["Priest"]}
{
}
;--- Rogue ---------------------------------------------------------------
if ${Target.Class.Equal["Rogue"]}
{
if !${Target.Buff[Faerie Fire](exists)} && ${Toon.canBuff[${Target.GUID}, Faerie Fire]}
{
return TRUE
}
if !${Target.Buff[Entangling Roots](exists)} && ${Toon.canCast[Entangling Roots]} && !${Movement.Speed} && !${Me.Casting} && ${Target.Target.GUID.NotEqual[${Me.GUID}]}
{
return TRUE
}
}
;--- Shaman --------------------------------------------------------------
if ${Target.Class.Equal["Shaman"]}
{
}
;--- Warlock -------------------------------------------------------------
if ${Target.Class.Equal["Warlock"]}
{
}
;--- Warrior -------------------------------------------------------------
if ${Target.Class.Equal["Warrior"]}
{
if !${Target.Buff[Entangling Roots](exists)} && ${Toon.canCast[Entangling Roots]} && !${Movement.Speed} && !${Me.Casting} && ${Target.Target.GUID.NotEqual[${Me.GUID}]}
{
return TRUE
}
}
return FALSE
}
method ClassAttackPulse()
{
;--- All Class -----------------------------------------------------------
;--- Druid ---------------------------------------------------------------
if ${Target.Class.Equal["Druid"]}
{
return
}
;--- Hunter --------------------------------------------------------------
if ${Target.Class.Equal["Hunter"]}
{
return
}
;--- Mage ----------------------------------------------------------------
if ${Target.Class.Equal["Mage"]}
{
return
}
;--- Paladin -------------------------------------------------------------
if ${Target.Class.Equal["Paladin"]}
{
return
}
;--- Priest --------------------------------------------------------------
if ${Target.Class.Equal["Priest"]}
{
return
}
;--- Rogue ---------------------------------------------------------------
if ${Target.Class.Equal["Rogue"]}
{
if !${Target.Buff[Faerie Fire](exists)} && ${Toon.canBuff[${Target.GUID}, Faerie Fire]}
{
Toon:CastSpellGUID[${Target.GUID}, Faerie Fire]
return
}
if !${Target.Buff[Entangling Roots](exists)} && ${Toon.canCast[Entangling Roots]} && !${Movement.Speed} && !${Me.Casting} && ${Target.Target.GUID.NotEqual[${Me.GUID}]}
{
Toon:CastSpellGUID[${Target.GUID}, Entangling Roots]
return
}
}
;--- Shaman --------------------------------------------------------------
if ${Target.Class.Equal["Shaman"]}
{
return
}
;--- Warlock -------------------------------------------------------------
if ${Target.Class.Equal["Warlock"]}
{
return
}
;--- Warrior -------------------------------------------------------------
if ${Target.Class.Equal["Warrior"]}
{
if !${Target.Buff[Entangling Roots](exists)} && ${Toon.canCast[Entangling Roots]} && !${Movement.Speed} && !${Me.Casting} && ${Target.Target.GUID.NotEqual[${Me.GUID}]}
{
Toon:CastSpellGUID[${Target.GUID}, Entangling Roots]
return
}
}
return
}
;** - BGObjects Get - *********************************************************** /
member NeedBGObjects(string objectName, string objectItem, int objectValue)
{
variable int i = 1
variable guidlist UsableObjs
variable objectref UseableObject
UsableObjs:Search[-gameobjects, -usable, -range 0-40]
i:Set[1]
if ${UsableObjs.Count}
{
do
{
UseableObject:Set[${UsableObjs.Object[${i}].GUID}]
if ${UseableObject.Name.Equal[${objectName}]} && ${Consumable.ItemX[${objectItem}]} < ${objectValue}
{
return TRUE
}
}
while ${i:Inc} <= ${objectref.Count}
}
UsableObjs:Clear
return FALSE
}
method BGObjectsPulse(string objectName, string objectItem, int objectValue)
{
variable int i = 1
variable guidlist UsableObjs
variable objectref UseableObject
UsableObjs:Search[-gameobjects, -usable, -range 0-40]
i:Set[1]
if ${UsableObjs.Count}
{
do
{
UseableObject:Set[${UsableObjs.Object[${i}].GUID}]
if ${UseableObject.Name.Equal[${objectName}]} && ${Consumable.ItemX[${objectItem}]} < ${objectValue}
{
if ${UseableObject.Distance} > 4 && !${Navigator.MovingToPoint[${UseableObject.X},${UseableObject.Y},${UseableObject.Z}]}
{
This:Output["DRUID Routine: Moving towards ${UseableObject.Name} at distance ${UseableObject.Distance}!"]
Navigator:MoveToLoc[${UseableObject.X},${UseableObject.Y},${UseableObject.Z}]
}
if ${UseableObject.Distance} < 4
{
Toon:Stop
This:Output["DRUID Routine: Inventory ${Consumable.ItemX[${objectItem}]} ${objectItem} of Stacks!"]
This:Output["DRUID Routine: Using ${UseableObject.Name} at distance ${UseableObject.Distance}!"]
UseableObject:Use
Bot.RandomPause:Set[16]
}
return
}
}
while ${i:Inc} <= ${objectref.Count}
}
UsableObjs:Clear
return
}
;** - FaceForSpell - ************************************************************ /
member NeedFaceForSpell()
{
variable string currentSpell
currentSpell:Set[${WoWScript[UnitCastingInfo("player")]}]
if ${currentSpell.Equal[Wrath]}
{
return TRUE
}
return FALSE
}
method FaceForSpellPulse()
{
if ${Movement.Speed}
{
return
}
Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}]
return
}
;** - NoMoreSpell - ************************************************************* /
member NeedNoMoreSpell()
{
variable string currentSpell
currentSpell:Set[${WoWScript[UnitCastingInfo("player")]}]
if ${Object[${Target.GUID}].Buff[${currentSpell}](exists)}
{
return TRUE
}
if ${currentSpell.Equal[Wrath]} && ( ${This.NeedCombatHealing} || ${This.NeedHealer} )
{
return TRUE
}
return FALSE
}
method NoMoreSpellPulse()
{
WoWScript SpellStopCasting()
return
}
;Friends check
variable objectref kFriendsList
member FriendsChk()
{
variable guidlist kFriendsList
kFriendsList:Search[-players, -friendly, -noself, -alive, -range 0-40]
if ${kFriendsList.Count} <= ${This.Friends}
{
This:Output["No friends to heal, moving on. ${kFriendsList.Count}"]
return FALSE
}
return TRUE
}
;******************************************************************************** /
;** Functions, no code * /
;******************************************************************************** /
;** - Assist Mode - ************************************************************* /
;** - Flee Setup - ************************************************************** /
;** - Idle Setup - ************************************************************** /
;** - Event Hooking - *********************************************************** /
;** - CombatEvent - ************************************************************* /
;******************************************************************************** /
;** - Assist Mode - ************************************************************* /
member IsAssistMode()
{
; returns a check that determines if the bot is in party mode
if ${UIElement[chkAssistMode@Overview@Pages@openbot].Checked}
return TRUE
return FALSE
}
;** - Flee Setup - ************************************************************** /
variable bool HookFlee = FALSE
method FleePulse()
{
}
;** - Idle Setup - ************************************************************** /
variable bool NeedCombatIdle = FALSE
method CombatIdle()
{
return
}
;** - Event Hooking - *********************************************************** /
variable bool needUIHook = TRUE
method UIErrorMessage(string Id, string Msg)
{
}
;** - CombatEvent - ************************************************************* /
variable bool needCombatHook = TRUE
method CombatEvent(string unitID, string unitAction, string isCrit, string amtDamage, string damageType)
{
}
;******************************************************************************** /
;** Special Functions * /
;******************************************************************************** /
;** - Inventory Counter Items - ************************************************* /
;** - CustOutput - ************************************************************** /
;** - PvPAggroWithin - ********************************************************** /
;** - myWait - ****************************************************************** /
;** - debuffAll - *************************************************************** /
;** - canBuff - ***************************************************************** /
;******************************************************************************** /
;** - PvP Trinket Debuffed - **************************************************** /
member TrinketPvPDebuff()
{
if ${Me.Buff[Fear](exists)}
{
return TRUE
}
if ${Me.Buff[Psychic Scream](exists)}
{
return TRUE
}
if ${Me.Buff[Howl of Terror](exists)}
{
return TRUE
}
if ${Me.Buff[Intimidating Shout](exists)}
{
return TRUE
}
if ${Me.Buff[Polymorph](exists)}
{
return TRUE
}
if ${Me.Buff[Freezing Trap Effect](exists)}
{
return TRUE
}
if ${Me.Buff[Wyvern Sting](exists)}
{
return TRUE
}
if ${Me.Buff[Charge Stun](exists)}
{
return TRUE
}
if ${Me.Buff[Hammer Stun](exists)}
{
return TRUE
}
if ${Me.Buff[Intercept Stun](exists)}
{
return TRUE
}
if ${Me.Buff[Mace Stun Effect](exists)}
{
return TRUE
}
if ${Me.Buff[Shield Charge Stun](exists)}
{
return TRUE
}
if ${Me.Buff[Stun](exists)}
{
return TRUE
}
if ${Me.Buff[Blast Wave](exists)}
{
return TRUE
}
if ${Me.Buff[Dragon's Breath](exists)}
{
return TRUE
}
if ${Me.Buff[Repentance](exists)}
{
return TRUE
}
if ${Me.Buff[Hammer of Justice](exists)}
{
return TRUE
}
if ${Me.Buff[Bash](exists)}
{
return TRUE
}
if ${Me.Buff[Scatter Shot](exists)}
{
return TRUE
}
if ${Me.Buff[Blackout](exists)}
{
return TRUE
}
if ${Me.Buff[Cheap Shot](exists)}
{
return TRUE
}
if ${Me.Buff[Concussion Blow](exists)}
{
return TRUE
}
if ${Me.Buff[Intimidation](exists)}
{
return TRUE
}
if ${Me.Buff[Improved Concussive Shot](exists)}
{
return TRUE
}
if ${Me.Buff[Kidney Shot](exists)}
{
return TRUE
}
if ${Me.Buff[Blind](exists)}
{
return TRUE
}
if ${Me.Buff[Cyclone](exists)}
{
return TRUE
}
if ${Me.Buff[Gouge](exists)}
{
return TRUE
}
return FALSE
}
;** - DispelBuff - ************************************************************** /
/*
TODO: Add all Debuffs & Buffs
*/
member DispelBuff(string theGUID)
{
return FALSE
}
;** - CustOutput - ************************************************************** /
method CustOutput(string Txt)
{
UIElement[ClassGUI].FindChild[Pages].FindChild[Output].FindChild[Console]:Echo["${Txt}"]
return
}
;** - PvPAggroWithin - ********************************************************** /
member PvPAggroWithin(int Range, bool TargetingMe = FALSE)
{
variable guidlist Aggros
if ${TargetingMe}
{
Aggros:Search[-players,-pvp,-targetingme,-alive,-notflying,-lineofsight,-notmounted,-attackable,-range 0-${Range}]
}
else
{
Aggros:Search[-players,-pvp,-alive,-notflying,-lineofsight,-notmounted,-attackable,-range 0-${Range}]
}
return ${Aggros.Count}
}
;** - myWait - ****************************************************************** /
variable int myTimer = 0
member myWait()
{
if ${This.myTimer} < ${LavishScript.RunningTime}
{
This.myTimer:Set[${This.InSeconds[3]}]
return TRUE
}
return FALSE
}
;******************************************************************************** /
;** Gui Functions * /
;******************************************************************************** /
;** - Initialize - ************************************************************** /
;** - Shutdown - **************************************************************** /
;** - GUI Setup - *************************************************************** /
;** - SaveGUI - ***************************************************************** /
;******************************************************************************** /
;** - Initialize - ************************************************************** /
method Initialize()
{
This:Output["Darkfriend's DRUID Routine STARTED - Modified by Moi!"]
}
;** - Init Druid GUI - ********************************************************* /
method InitDruidGUI()
{
}
;** - Class GUI Change - ******************************************************** /
method ClassGUIChange(string Action)
{
}
;** - Shutdown - **************************************************************** /
method Shutdown()
{
}
;** - GUI Setup - *************************************************************** /
method SetGUI()
{
}
;** - SaveGUI - ***************************************************************** /
method SaveGUI()
{
}
}