rendered paste bodyobjectdef oClass inherits oBase{ /**************************************/ /************ VARIABLES ***************/ variable bool UsePull = TRUE variable string PullSpell = "None" variable int RestHP = 50 variable int RestMP = 50 variable int StandHP = 80 variable int StandMP = 80 variable string EarthTotem = "" variable string FireTotem = "" variable string AirTotem = "" variable string WaterTotem = "" variable bool UseEarthElementa = FALSE variable bool UseFireElemental = FALSE variable bool UseEarthShock = FALSE variable bool UseFlameShock = FALSE variable bool UseFrostShock = FALSE variable bool RandomShock = FALSE variable bool SaveShocks = FALSE variable int ConserveMana = 40 variable bool UseLBolt = FALSE variable bool UseChainLight = FALSE variable string MainHand = "None" variable string OffHand = "None" variable string Shield = "None" variable bool ShieldOnPull = FALSE variable bool DW = FALSE variable int HealWave = 20 variable int LHealWave = 50 variable int GOTN = 60 variable bool Output = TRUE variable int MaxCastRange = 20 variable int MaxShockRange = 20 variable bool HasEarthTotem = FALSE variable bool HasFireTotem = FALSE variable bool HasWaterTotem = FALSE variable bool HasAirTotem = FALSE variable bool UseReincarnation = FALSE variable bool UseHPot = FALSE variable bool UseMPot = FALSE variable bool UseBandages = FALSE variable int HPot = 25 variable int MPot = 25 variable int Bandage = 25 variable int restWaitTimer = 0 variable int buffWaitTimer = 0 variable int healWaitTimer = 0 variable int curePoisonTimer = 0 variable int cureDiseaseTimer = 0 variable int jumpTimer = 0 variable int PotTimer = 0 variable int DangerMedium = 15 variable int DangerHigh = 30 variable int DangerVeryHigh = 45 variable int DangerLevel = 0 variable int Dangerlvl = 0 variable int BuffNum = 0 variable bool debuffStatus = FALSE variable string RealmChar = "${ISXWoW.RealmName}_${Me.Name}_${Me.Class}" variable bool MeleeOnly = FALSE variable bool RunnerDealtWith = FALSE variable bool Revived = FALSE variable int ReincarnateCount = 0 variable int BackupAttempts = 0 variable string MobDataStorage = "./routines/MobData.xml" variable set MobDataImmunities variable set MobDataRunners variable collection:index:string RandomCast variable collection:int RandomCastCount /**************************************/ /***********Init & Shutdown************/ method Initialize() { LavishSettings:AddSet[MobData] LavishSettings[MobData]:Import[${MobDataStorage}] This:LoadConfig This:InitShamanGUI if ${Me.Action[Gift of the Naaru].Usable} { UIElement -toggle GOTN@Heals@Pages@ClassGUI UIElement -toggle lblGOTN@Heals@Pages@ClassGUI } This:SetDistances This:CreateUIErrorStrings This:SetTotems This:InitRandoms This:InitTriggers This.MobDataImmunities:Clear This.MobDataRunners:Clear This:LoadList[MobDataImmunities] This:LoadList[MobDataRunners] Bot:AddPulse["Class","Pulse",10,TRUE,TRUE] UIElement[ClassGUI].FindChild[Console]:Echo["^_^=================================^_^"] UIElement[ClassGUI].FindChild[Console]:Echo[" Swolbyn's Shaman Routine v0.6"] UIElement[ClassGUI].FindChild[Console]:Echo["^_^=================================^_^"] } method Shutdown() { This:SaveConfig This:RemoveTriggers This:ExportList[MobDataImmunities] This:ExportList[MobDataRunners] LavishSettings[MobData]:Export[${MobDataStorage}] } method Pulse() { ExecuteQueued } method SetDistances() { if ${This.GetSpellRange[30, "elemental"]} { This.MaxCastRange:Set[${This.GetSpellRange[30, "elemental"]}] This:CustOutput["Setting New MaxRange to ${This.MaxCastRange}"] This.MaxShockRange:Set[${This.GetSpellRange[20, "elemental"]}] This:CustOutput["Setting New MaxShockRange to ${This.MaxShockRange}"] } } member GetSpellRange(int base, string spellTree) { if ${spellTree.Equal[elemental]} return ${Math.Calc[${base}*(1+(0.1*${Me.Talent[Storm Reach]}))-1].Round} return ${base} } /**************************************/ /**********UI Error Strings************/ variable collection:string UIErrorMsgStrings method CreateUIErrorStrings() { This.UIErrorMsgStrings:Set["You are facing the wrong way!","backward"] This.UIErrorMsgStrings:Set["Target too close","backward"] This.UIErrorMsgStrings:Set["You are too far away!","forward"] This.UIErrorMsgStrings:Set["Out of range.","forward"] } variable bool needUIHook = TRUE method UIErrorMessage(string Id, string Msg) { if ${This.UIErrorMsgStrings.Element[${Msg}](exists)} && !${Bot.PauseFlag} && ${This.crazyWaitTimer} < ${LavishScript.RunningTime} { if ${Msg.Equal["Target too close"]} || (${Target.Distance} < 5 && ${Me.InCombat}) || ${This.UIErrorMsgStrings.Element[${Msg}].Equal["forward"]} && !${Me.Casting} { This:Debug[${Msg}] This:CustOutput["Moving ${This.UIErrorMsgStrings.Element[${Msg}]} - UI Error: ${Msg}"] Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] This.attackWaitTimer:Set[${This.InMilliseconds[25]}] This.pullWaitTimer:Set[${This.InMilliseconds[25]}] move ${This.UIErrorMsgStrings.Element[${Msg}]} 1000 wowpress JUMP return } } } /**************************************/ /*********External Mob Data************/ method LoadList(string loadingList) { variable iterator i if !${LavishSettings[MobData].FindSet[${loadingList}](exists)} LavishSettings[MobData]:AddSet[${loadingList}] LavishSettings[MobData].FindSet[${loadingList}]:GetSettingIterator[i] i:First while ${i.IsValid} { ${loadingList}:Add[${i.Key}] i:Next } } method ExportList(string loadingList) { variable iterator i LavishSettings[MobData].FindSet[${loadingList}]:Clear ${loadingList}:GetIterator[i] i:First while ${i.IsValid} { LavishSettings[MobData].FindSet[${loadingList}]:AddSetting[${i.Key},${i.Key}] i:Next } } /**************************************/ /**************Triggers****************/ method InitTriggers() { AddTrigger DetectRunner "[Event:@eventid@:CHAT_MSG_MONSTER_EMOTE](\"%%s attempts to run away in fear!\",\"@Mob@\",@*@" AddTrigger DetectImmune "[Event:@eventid@:CHAT_MSG_SPELL_SELF_DAMAGE](\"Your @FailedSpell@ failed. @Mob*@ is immune.@*@" } method RemoveTriggers() { RemoveTrigger DetectRunner RemoveTrigger DetectImmune } function DetectRunner(string Line, int eventid, string Mob) { if !${This.MobDataRunners.Contains[${Mob}]} { This:CustOutput["Added ${Mob} to the runner list"] This.MobDataRunners:Add[${Mob}] } } function DetectImmune(string Line, int eventid, string FailedSpell, string Mob) { variable string MobId MobId:Set[${Mob}#${FailedSpell}] if !${This.MobDataImmunities.Contains[${MobId}]} { This:CustOutput["Added ${MobId} to the mob immune list"] This.MobDataImmunities:Add[${MobId}] } } /**************************************/ /***********Character States***********/ member isRunner() { if ${This.MobDataRunners.Contains[${Target.Name}]} return TRUE return FALSE } member isImmune(string SpellName) { if ${This.MobDataImmunities.Contains[${Target.Name}#${SpellName}]} return TRUE return FALSE } member isPoisoned() { BuffNum:Set[1] while ${BuffNum} < 16 { BuffNum:Inc if ${Me.Buff[${BuffNum}].DispelType.Equal[Poison]} { return TRUE } } return FALSE } member isDiseased() { BuffNum:Set[1] while ${BuffNum} < 16 { BuffNum:Inc if ${Me.Buff[${BuffNum}].DispelType.Equal[Disease]} { return TRUE } } return FALSE } /**************************************/ /************Reincarnation*************/ member NeedDead() { if !${This.Revived} && ${This.ReincarnateCount} < 10 && (${Me.Dead} || ${Me.Ghost}) && ${This.UseReincarnation} { return TRUE } else { return FALSE } } method DeadPulse() { This:Output["Bad Shaman! you died?!"] Bot.RandomPause:Set[25] This.ReincarnateCount:Inc if ${This.CanUseAnkh} { if ${WoWScript[StaticPopup1:IsVisible()]} { This:CustOutput["Reincarnation REPOPPING!"] This.Revived:Set[TRUE] This.ReincarnateCount:Set[0] WoWScript UseSoulstone() WoWScript RepopMe() } } return } member CanUseAnkh() { if ${Navigator.PointIsSafe[${Me.X},${Me.Y},${Me.Z}]} { if ${Item[-inventory,"Ankh"](exists)} && ${Spell[Reincarnation](exists)} && !${Spell[Reincarnation].Cooldown} { This:CustOutput["We can use Reincarnation here."] return TRUE } else { This:CustOutput["Can't self res!"] } } else { This:CustOutput["Not a safe spot to use Reincarnation"] } return FALSE } /**************************************/ /****************Rest******************/ member NeedRest() { if ${Me.InCombat} || ${Targeting.realAgg} return FALSE if ${This.LootFirst} return FALSE if ${Me.Buff[Resurrection Sickness](exists)} return TRUE if ${Me.PctHPs} < ${This.RestHP} return TRUE if ${Me.PctMana} < ${This.RestMP} return TRUE if ${Me.PctHPs} < ${This.StandHP} && ${Me.Sitting} return TRUE if ${Me.PctMana} < ${This.StandMP} && ${Me.Sitting} return TRUE return FALSE } method RestPulse() { if ${Me.InCombat} || ${Targeting.realAgg} return if ${Me.Casting} return if ${Movement.Speed} || ${Movement.Forward} || ${Movement.Backward} { Toon:Stop return } if ${Me.Buff[Resurrection Sickness](exists)} { Toon:Sitdown return } if !${Me.Dead} && !${Me.Ghost} This:Revived:Set[FALSE] if ${This.ShouldCallTotems} { Toon:CastSpell["Totemic Call"] This:CustOutput["Calling my totems back"] return } if ((${Me.PctMana} >= ${This.StandMP}) && (${Me.PctHPs} >= ${This.StandHP})) && ${Me.Sitting} { Toon:Standup This:Output["Standing."] return } This:debuffAll if !${Consumable.HasFood} && ${Me.PctHPs} < ${RestHP} && !${Me.Buff[Drink](exists)} && !${Me.Casting} && ${This.buffWaitTimer} < ${LavishScript.RunningTime} { if ${Toon.canCast[Lesser Healing Wave]} { Toon:CastSpell[Lesser Healing Wave] This:CustOutput["Casting Lesser Healing Wave - Rest"] This.buffWaitTimer:Set[${This.InSeconds[20]}] return } elseif ${Toon.canCast[Healing Wave]} { Toon:CastSpell[Healing Wave] This:CustOutput["Casting Healing Wave - Rest"] This.buffWaitTimer:Set[${This.InSeconds[20]}] return } } if ${Me.PctHPs} < ${This.Bandage} && ${Toon.canBandage} && !${Me.Sitting} && ${This.UseBandages} { Toon:Bandage This:CustOutput["Bandaging...."] return } if ${Me.PctHPs} < ${This.RestHP} && ${Consumable.HasFood} && !${Me.Buff[Food](exists)} && !${Me.Swimming} && !${Me.InCombat} && !${Me.Casting} && !${This.isPoisoned} && !${This.isDiseased} && !${Me.Sitting} { Consumable:useFood This:CustOutput["Eating..."] return } if ${Me.PctMana} < ${This.RestMP} && ${Consumable.HasDrink} && !${Me.Buff[Drink](exists)} && !${Me.Swimming} && !${Me.InCombat} && !${Me.Casting} && !${This.isPoisoned} && !${This.isDiseased} && !${Me.Sitting} { Consumable:useDrink This:CustOutput["Drinking..."] return } if ${Me.PctMana} < ${This.RestMP} && ${Toon.canCast[Mana Spring Totem]} && !${This.OwnedTotemsCheck[Mana Spring Totem]} && ${This.HasWaterTotem} && !${Consumable.HasDrink} && !${Me.Buff[Drink](exists)} && !${Me.Swimming} && !${Me.InCombat} && !${Me.Casting} { Toon:CastSpell[Mana Spring Totem] This:CustOutput["Casting Mana Spring Totem"] } if ${Me.PctMana} >= ${This.StandMP} && ${Me.PctHPs} >= ${This.StandHP} && !${Me.Casting} && !${Me.Buff[Resurrection Sickness](exists)} { Toon:Standup This:CustOutput["Done Resting!"] return } } /**************************************/ /****************Buff******************/ member NeedBuff() { if ${Me.InCombat} || ${Targeting.realAgg} return FALSE if ${Me.Swimming} && !${Object[-dead,-range 0-5](exists)} return TRUE if ${Mount.IsMounted} return FALSE if ${Me.Swimming} && ${Toon.canCast[Water Walking]} && ${Item[-inventory,"Fish Oil"](exists)} && !${Me.Buff[Water Walking](exists)} { This:CustOutput["Swimming, need water walking"] return TRUE } if ${Me.Swimming} && !${Me.Race.Find[Undead]} && ${Toon.canCast[Water Breathing]} && ${Item[-inventory,"Shiny Fish Scales"](exists)} && !${Me.Buff[Water Breathing](exists)} { This:CustOutput["Swimming, need water breathing"] return TRUE } if ${Toon.canUseScroll} { This:CustOutput["Need a scroll buff"] return TRUE } if !${Me.Equip[mainhand].Enchantment[${This.MainHand}](exists)} && ${Toon.canCast["${This.MainHand} Weapon"]} && ${This.buffWaitTimer} < ${LavishScript.RunningTime} && !${This.MainHand.Equal[None]} { This:CustOutput["Need Mainhand Buff - ${This.MainHand}"] return TRUE } if !${Me.Equip[offhand].Enchantment[${This.OffHand}](exists)} && ${Toon.canCast["${This.OffHand} Weapon"]} && ${This.DW} && !${This.OffHand.Equal[None]} { This:CustOutput["Need Offhand Buff - ${This.OffHand}"] return TRUE } if !${Me.Buff[${Shield}](exists)} && ${This.canBuff[${This.Shield}]} return TRUE return FALSE } method BuffPulse() { if ${Me.Swimming} { if ${This.jumpTimer} < ${LavishScript.RunningTime} { wowpress JUMP This.jumpTimer:Set[${This.InSeconds[5]}] } if ${Target(exists)} { Toon:ToMelee } return } if ${Me.InCombat} || ${Targeting.realAgg} return if ${Me.Casting} return if ${Me.Sitting} Toon:Standup if ${Movement.Speed} || ${Movement.Forward} || ${Movement.Backward} { Move -stop return } if ${Me.Swimming} && ${Toon.canCast[Water Walking]} && ${Item[-inventory,"Fish Oil"](exists)} && !${Me.Buff[Water Walking](exists)} { Toon:CastSpell[Water Walking] This:CustOutput["Casting Water Walking"] return } if ${Me.Swimming} && !${Me.Race.Find[Undead]} && ${Toon.canCast[Water Breathing]} && ${Item[-inventory,"Shiny Fish Scales"](exists)} && !${Me.Buff[Water Breathing](exists)} { Toon:CastSpell[Water Breathing] This:CustOutput["Casting Water Breathing"] return } if ${Toon.canUseScroll} { Toon:UseScroll This:CustOutput["Using a scroll"] return } if !${Me.Equip[mainhand].Enchantment[${This.MainHand}](exists)} && ${Toon.canCast[${This.MainHand} Weapon]} && ${This.buffWaitTimer} < ${LavishScript.RunningTime} && !${This.MainHand.Equal[None]} { Toon:CastSpell[${This.MainHand} Weapon] This:CustOutput["Casting ${This.MainHand} Weapon"] This.buffWaitTimer:Set[${This.InSeconds[20]}] return } if !${Me.Equip[offhand].Enchantment[${This.OffHand}](exists)} && ${Toon.canCast[${This.OffHand} Weapon]} && ${This.DW} && !${This.OffHand.Equal[None]} { Toon:CastSpell[${This.OffHand} Weapon] This:CustOutput["Casting ${This.OffHand} Weapon"] return } if !${Me.Buff[${Shield}](exists)} && ${This.canBuff[${This.Shield}]} { Toon:CastSpell[${This.Shield}] return } } /**************************************/ /**************Pull Buff***************/ member NeedPullBuff() { if !${Me.Buff[${This.Shield}](exists)} && ${This.canBuff[${This.Shield}]} && !${This.isImmune[${This.Shield}]} return TRUE return FALSE } method PullBuffPulse() { if ${Me.Sitting} Toon:Standup if ${Movement.Speed} || ${Movement.Forward} || ${Movement.Backward} { Toon:Stop return } if !${Me.Buff[${This.Shield}](exists)} && ${This.canBuff[${This.Shield}]} && !${This.isImmune[${This.Shield}]} { Toon:CastSpell[${Shield}] This:CustOutput["Casting ${This.Shield}"] return } return } /**************************************/ /*************Combat Buff**************/ member NeedCombatBuff() { if ${Me.Sitting} Toon:Standup if ${Me.PctHPs} < ${This.GOTN} && ${Toon.canCast[Gift of the Naaru]} return TRUE if ${This.canBuff[${This.Shield}]} && ${Target.PctHPs} > 30 && !${This.isImmune[${This.Shield}]} return TRUE if ${Toon.canCast[Shamanistic Rage]} && ${Me.PctMana} < 30 && ${Target.PctHPs} > 85 return TRUE if ${Toon.canCast[Elemental Mastery]} && ${Me.PctMana} < 30 return TRUE if ${Toon.canCast[Mana Spring Totem]} && ${Me.PctMana} < 30 && ${This.HasWaterTotem} return TRUE if ${Toon.canCast[Heroism]} && ${Me.PctHPs} < 30 && ${Target.PctHPs} > 70 return TRUE if ${Toon.canCast[Bloodlust]} && ${Me.PctHPs} < 30 && ${Target.PctHPs} > 70 return TRUE return FALSE } method CombatBuffPulse() { if ${Me.Sitting} Toon:Standup if ${Toon.canCast["Nature's Swiftness"]} { Toon:CastSpell["Nature's Swiftness"] return } if ${Me.PctHPs} < ${This.GOTN} && ${Toon.canCast[Gift of the Naaru]} && !${Me.Casting} { Toon:CastSpell[Gift of the Naaru] This:CustOutput["Casting Gift of the Naaru"] return } if ${This.canBuff[${This.Shield}, ${Me.GUID}]} && !${Me.Buff[${This.Shield}](exists)} && !${Me.Casting} && !${This.isImmune[${This.Shield}]} { Toon:CastSpell[${Shield}] This:CustOutput["Casting ${Shield}"] return } if ${Toon.canCast[Elemental Mastery]} && ${Me.PctMana} < 30 { Toon:CastSpell[Elemental Mastery] This:CustOutput["Casting Elemental Mastery!!!"] return } if ${Toon.canCast[Mana Spring Totem]} && ${Me.PctMana} < 30 && !${This.OwnedTotemsCheck[Mana Spring Totem]} && ${This.HasWaterTotem} { Toon:CastSpell[Mana Spring Totem] This:CustOutput["Casting Mana Spring Totem!!!"] return } if ${Toon.canCast[Heroism]} && ${Me.PctHPs} < 30 && ${Target.PctHPs} > 70 { Toon:CastSpell[Heroism] This:CustOutput["Casting Heroism!!!"] return } if ${Toon.canCast[Bloodlust]} && ${Me.PctHPs} < 30 && ${Target.PctHPs} > 70 { Toon:CastSpell[Bloodlust] This:CustOutput["Casting Bloodlust!!!"] return } } /**************************************/ /****************Pull******************/ method PullPulse() { if ${Me.Sitting} Toon:Standup if !${Toon.ValidTarget[${Target.GUID}]} || ${Target.Dead} || !${Target(exists)} { Toon:NeedTarget[1] return } Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] if ${Me.Casting} || ${Me.GlobalCooldown} return if !${Me.Attacking} && ${Target.Distance} <= ${Toon.MaxMelee} { WoWScript AttackTarget() This:CustOutput["Turning on autoattack"] return } if ${Target.PctHPs} == 100 { ; Creature is 100% life, assuming new target resetting runner logic This.RunnerDealtWith:Set[FALSE] This.BackupAttempts:Set[0] } if ${Me.PctHPs} < ${This.HealWave} && ${Toon.canCast[Healing Wave]} && !${Me.Casting} && ${This.healWaitTimer} < ${LavishScript.RunningTime} { Toon:CastSpell[Healing Wave] This:CustOutput["Casting Healing Wave"] This.healWaitTimer:Set[${This.InSeconds[4]}] return } if ${Me.PctHPs} < ${This.LHealWave} && ${Toon.canCast[Lesser Healing Wave]} && !${Me.Casting} && ${This.healWaitTimer} < ${LavishScript.RunningTime} { Toon:CastSpell[Lesser Healing Wave] This:CustOutput["Casting Lesser Healing Wave"] This.healWaitTimer:Set[${This.InSeconds[4]}] return } if ${Target.Distance} < ${Toon.MinRanged} || ${This.isImmune[${This.PullSpell}]} && !${Me.Casting} { WoWScript AttackTarget() This:CustOutput["Turning on autoattack"] Toon:ToMelee return } if !${This.UsePull} { if !${Toon.withinMelee} { Toon:ToMelee This:CustOutput["Melee Pulling ${Target.Name}"] return } } if ${This.UsePull} { if ${Toon.withinRanged} { if ${Movement.Speed} || ${Movement.Forward} || ${Movement.Backward} { Toon:Stop return } if ${Target.Distance} >= ${Toon.MinRanged} && ${Me.PctMana} > ${This.ConserveMana} { if ${Toon.canCast[${This.PullSpell}]} { Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] Toon:CastSpell[${This.PullSpell}] This:CustOutput["Pulling With: ${This.PullSpell}"] return } } } elseif !${Me.Casting} { if ${Target.Distance} > ${Toon.MaxRanged} { This:CustOutput["Target too far away. Moving closer."] Toon:ToRanged } elseif ${Target.Distance} < ${Toon.MinRanged} { WoWScript AttackTarget() This:CustOutput["Turning on autoattack"] This:AttackPulse } } } Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] return } /**************************************/ /***************Attack*****************/ method AttackPulse() { if ${Me.Sitting} Toon:Standup if !${Toon.ValidTarget[${Target.GUID}]} || ${Target.Dead} || !${Target(exists)} { Toon:NeedTarget[1] return } if !${Toon.TargetIsBestTarget} || ${Target.IsTotem} Toon:BestTarget Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] if !${Me.Attacking} && ${Target.Distance} <= ${Toon.MaxMelee} { WoWScript AttackTarget() This:CustOutput["Turning on autoattack"] } if ${Target.Distance} >= ${Toon.MinRanged} && ${Me.PctMana} > ${This.ConserveMana} { This:PullPulse } This:SetDanger if ${This.HaveAdds} && ${Toon.canCast[War Stomp]} && !${Me.Casting} { Toon:CastSpell[War Stomp] } Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] This:debuffAll if ${Target.Distance} < ${Toon.MinMelee} && ${This.BackupAttempts} < 6 && !${Me.Casting} { This:Output["Backing up... wtf"] This.BackupAttempts:Inc Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] Navigator:MoveBackward[200] return } if ${Target.Distance} > ${Toon.MaxMelee} && !${Me.Casting} { This:Output["Chasing down ${Target.Name}"] Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] wowpress -hold moveforward return } else { Toon:Stop } if ${Target.Dead} return if !${This.RunnerDealtWith} && ${Target.PctHPs} < 40 && ${This.isRunner} { Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] if ${Toon.canCast[Frost Shock]} && !${This.isImmune[Frost Shock]} { Toon:CastSpell[Frost Shock] This:CustOutput["Casting Frost Shock on a runner"] This.RunnerDealtWith:Set[TRUE] return } if ${Toon.canCast[Earthbind Totem]} && !${This.OwnedTotemsCheck[Earthbind Totem]} && ${This.HasEarthTotem} { Toon:CastSpell[Earthbind Totem] This:CustOutput["Casting Earthbind Totem to catch a runner"] This.RunnerDealtWith:Set[TRUE] return } } if ${Me.PctHPs} < ${This.HealWave} && ${Toon.canCast[Healing Wave]} && !${Me.Casting} && ${This.healWaitTimer} < ${LavishScript.RunningTime} { Toon:CastSpell[Healing Wave] This:CustOutput["Casting Healing Wave"] This.healWaitTimer:Set[${This.InSeconds[4]}] return } if ${Me.PctHPs} < ${This.LHealWave} && ${Toon.canCast[Lesser Healing Wave]} && !${Me.Casting} && ${This.healWaitTimer} < ${LavishScript.RunningTime} { Toon:CastSpell[Lesser Healing Wave] This:CustOutput["Casting Lesser Healing Wave"] This.healWaitTimer:Set[${This.InSeconds[4]}] return } if ${Me.PctHPs} < ${This.HPot} && ${This.UseHPot} && ${Consumable.HasHPot} && ${This.PotTimer} < ${LavishScript.RunningTime} { Consumable:useHPot This:CustOutput["Quaffing a health pot"] This.PotTimer:Set[${This.InSeconds[120]}] return } if ${Me.PctMana} < ${This.MPot} && ${This.UseMPot} && ${Consumable.HasMPot} && ${This.PotTimer} < ${LavishScript.RunningTime} { Consumable:useMPot This:CustOutput["Quaffing a mana pot"] This.PotTimer:Set[${This.InSeconds[120]}] return } if ${Target.Dead} return if ${Dangerlvl} >= 1 { if ${Target.PctHPs} > 50 || ${This.HaveAdds} { Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] if ${This.HaveAdds} && ${Toon.canCast[Stoneclaw Totem]} && !${This.OwnedTotemsCheck[Stoneclaw Totem]} && ${This.HasEarthTotem} { Toon:CastSpell[Stoneclaw Totem] This:CustOutput["Casting Stoneclaw Totem because of Add!"] return } if ${This.canCastTotem[Earth]} && ${This.HasEarthTotem} { Toon:CastSpell[${This.EarthTotem}] This:CustOutput["Casting ${This.EarthTotem}"] return } if ${This.canCastTotem[Air]} && ${This.HasAirTotem} { Toon:CastSpell[${This.AirTotem}] This:CustOutput["Casting ${This.AirTotem}"] return } if ${This.canCastTotem[Fire]} && ${This.HasFireTotem} { Toon:CastSpell[${This.FireTotem}] This:CustOutput["Casting ${This.FireTotem}"] return } if ${This.canCastTotem[Water]} && ${This.HasWaterTotem} { Toon:CastSpell[${This.WaterTotem}] This:CustOutput["Casting ${This.WaterTotem}"] return } if ${This.AirTotem.Equal["Random"]} && ${Me.PctMana} > 10 && ${This.HasAirTotem} { Toon:CastRandom[AirTotems] This:CustOutput["Casting a random Air Totem"] This.AirTotemTimer:Set[${This.InSeconds[80]}] return } if ${This.EarthTotem.Equal["Random"]} && ${Me.PctMana} > 10 && ${This.HasEarthTotem} { Toon:CastRandom[EarthTotems] This:CustOutput["Casting a random Earth Totem"] This.EarthTotemTimer:Set[${This.InSeconds[80]}] return } if ${This.WaterTotem.Equal["Random"]} && ${Me.PctMana} > 10 && ${This.HasWaterTotem} { Toon:CastRandom[WaterTotems] This:CustOutput["Casting a random Water Totem"] This.WaterTotemTimer:Set[${This.InSeconds[80]}] return } if ${This.FireTotem.Equal["Random"]} && ${Me.PctMana} > 10 && ${This.HasFireTotem} { Toon:CastRandom[FireTotems] This:CustOutput["Casting a random Fire Totem"] This.FireTotemTimer:Set[${This.InSeconds[80]}] return } } } if ${Target.Dead} return if ${This.HaveAdds} && ${Toon.canCast[Shamanistic Rage]} { Toon:CastSpell[Shamanistic Rage] This:CustOutput["Casting Shamanistic Rage!!!"] return } Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] if ${This.HaveAdds} && ${Toon.canCast[Chain Lightning]} && ${Me.PctMana} > ${This.ConserveMana} && !${This.MeleeOnly} && ${This.UseChainLight} { Toon:CastSpell[Chain Lightning] This:CustOutput["Casting Chain Lightning due to an add!"] return } if ${Toon.canCast[Earth Shock]} && !${This.isImmune[Earth Shock]} && ${Target.Casting(exists)} { This:StopCast This:CustOutput["Silencing ${Target} - Attack"] Toon:CastSpell[Earth Shock] } if ${Toon.canCast[Stormstrike]} && !${Target.Buff[Stormstrike](exists)} && ${Target.Distance} < ${This.MaxShockRange} { Toon:CastSpell[Stormstrike] This:CustOutput["Casting Stormstrike"] return } if ${Target.Dead} { WoWScript ClearTarget() return } Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] if !${This.SaveShocks} || (${This.SaveShocks} && ${Me.Buff[Focused](exists)}) { if ${Toon.canCast[Earth Shock]} && !${This.isImmune[Earth Shock]} && ${Target.Buff[Stormstrike](exists)} && ${Target.Distance} < ${This.MaxShockRange} { Toon:CastSpell[Earth Shock] This:CustOutput["Casting Earth Shock on Stormstruck ${Target}!"] return } if ${This.RandomShock} && !${Target.Buff[Stormstrike](exists)} && ${Target.Distance} < ${This.MaxShockRange} { if (${Me.PctMana} > ${This.ConserveMana}) || ${This.SaveShocks} { This:CastRandom[Shocks,"Target"] return } } if ${This.canBuff[Flame Shock, ${Target.GUID}]} && !${This.isImmune[Flame Shock]} && ${This.UseFlameShock} && !${This.RandomShock} && !${Target.Buff[Stormstrike](exists)} && ((${Me.PctMana} > ${This.ConserveMana}) || ${This.SaveShocks}) && ${Target.Distance} < ${This.MaxShockRange} { Toon:CastSpell[Flame Shock] This:CustOutput["Casting Flame Shock"] return } if ${Toon.canCast[Earth Shock]} && !${This.isImmune[Earth Shock]} && ${This.UseEarthShock} && !${This.RandomShock} && ((${Me.PctMana} > ${This.ConserveMana}) || ${This.SaveShocks}) && ${Target.Distance} < ${This.MaxShockRange} { Toon:CastSpell[Earth Shock] This:CustOutput["Casting Earth Shock"] return } if ${Toon.canCast[Frost Shock]} && !${This.isImmune[Frost Shock]} && ${This.UseFrostShock} && !${This.RandomShock} && !${Target.Buff[Stormstrike](exists)} && ((${Me.PctMana} > ${This.ConserveMana}) || ${This.SaveShocks}) && ${Target.Distance} < ${This.MaxShockRange} { Toon:CastSpell[Frost Shock] This:CustOutput["Casting Frost Shock"] return } if ${Toon.canCast[Lightning Bolt]} && !${This.isImmune[Lightning Bolt]} && ${This.UseLBolt} && ${Me.PctMana} > ${This.ConserveMana} && !${This.MeleeOnly} { Toon:CastSpell[Lightning Bolt] This:CustOutput["Casting Lightning Bolt"] return } } } /**************************************/ /***************Totems*****************/ method SetTotems() { if ${Item[-items,-inventory,"Earth Totem"](exists)} { This.HasEarthTotem:Set[TRUE] This:CustOutput["We have an Earth Totem in our bags, we can use them now!"] } else { This.HasEarthTotem:Set[FALSE] This:CustOutput["No Earth Totem found! Not using them."] } if ${Item[-items,-inventory,"Fire Totem"](exists)} { This.HasFireTotem:Set[TRUE] This:CustOutput["We have an Fire Totem in our bags, we can use them now!"] } else { This.HasFireTotem:Set[FALSE] This:CustOutput["No Fire Totem found! Not using them."] } if ${Item[-items,-inventory,"Water Totem"](exists)} { This.HasWaterTotem:Set[TRUE] This:CustOutput["We have an Water Totem in our bags, we can use them now!"] } else { This.HasWaterTotem:Set[FALSE] This:CustOutput["No Water Totem found! Not using them."] } if ${Item[-items,-inventory,"Air Totem"](exists)} { This.HasAirTotem:Set[TRUE] This:CustOutput["We have an Air Totem in our bags, we can use them now!"] } else { This.HasAirTotem:Set[FALSE] This:CustOutput["No Air Totem found! Not using them."] } return } member canCastTotem(string totemType) { if ${Toon.canCast[${This.${totemType}Totem}]} && !${This.OwnedTotemsCheck[${This.${totemType}Totem}]} && !${This.${totemType}Totem.Equal["Random"]} && !${This.${totemType}Totem.Equal["None"]} return TRUE return FALSE } member OwnedTotemsCheck(string totem) { if ${Unit[-units, -owner, -range 0-20, ${totem}](exists)} { return TRUE TotemList:Clear } return FALSE } member ShouldCallTotems() { if ${This.OwnedTotemsCheck[totem]} && !${This.OwnedTotemsCheck[Mana Spring Totem]} && !${This.OwnedTotemsCheck[Poison Cleansing Totem]} && !${Me.Target(exists)} && ${Toon.canCast[Totemic Call]} return TRUE return FALSE } /**************************************/ /*************Aggro & Adds*************/ method SetDanger() { variable guidlist Aggros Aggros:Search[-units,-nearest,-aggro,-alive,-targetingme,-range 0-40] This.DangerLevel:Set[${DangerLevel} * 0.5] This.DangerLevel:Set[${DangerLevel} + ${Aggros.Count}*6.5] This.DangerLevel:Set[${DangerLevel} + ((100 - ${Me.PctMana})*0.10)] if ${Target.Level} > ${Me.Level} { This.DangerLevel:Set[${DangerLevel} + ((${Target.Level} - ${Me.Level})*2)] } elseif ${Me.Level} > ${Target.Level} { This.DangerLevel:Set[${DangerLevel} + ((${Target.Level} - ${Me.Level})*1)] } if ${Target.Classification.Equal[Elite]} || ${Target.Classification.Equal[RareElite]} This.DangerLevel:Set[${DangerLevel} + 20] if ${Target.PctHPs} < 25 This.DangerLevel:Set[${DangerLevel} - 10] if ${DangerLevel} < 0 This.DangerLevel:Set[0] UIElement[DangerLevel@Titlebar@ClassGUI]:SetValue[${DangerLevel}] if ${DangerLevel} >= ${DangerVeryHigh} { This:CustOutput["Danger - Very High ${DangerLevel}"] This.Dangerlvl:Set[3] return } elseif ${DangerLevel} > ${DangerHigh} { This:CustOutput["Danger - High ${DangerLevel}"] This.Dangerlvl:Set[2] return } elseif ${DangerLevel} > ${DangerMedium} { ;This:CustOutput["Danger - Medium ${DangerLevel}"] This.Dangerlvl:Set[1] return } else { ;This:CustOutput["Danger - Low ${DangerLevel}"] This.Dangerlvl:Set[0] return } } member HaveAdds() { variable guidlist AggroList AggroList:Clear AggroList:Search[-units,-nearest,-nopets,-aggro,-alive,-range 0-30] if ${AggroList.Count} >= 2 { return TRUE } else { return FALSE } } /**************************************/ /***********Spells & Casting***********/ method InitRandoms() { This:SetRandoms["Earth Shock","Shocks"] This:SetRandoms["Flame Shock","Shocks"] This:SetRandoms["Frost Shock","Shocks"] This:SetRandoms["Lightning Bolt","Attacks"] This:SetRandoms["Chain Lightning","Attacks"] This:SetRandoms["Lightning Shield","Shields"] This:SetRandoms["Water Shield","Shields"] This:SetRandoms["Earth Shield","Shields"] This:SetRandoms["Earthbind Totem","EarthTotems"] This:SetRandoms["Stoneskin Totem","EarthTotems"] This:SetRandoms["Stoneclaw Totem","EarthTotems"] This:SetRandoms["Strength of Earth Totem","EarthTotems"] This:SetRandoms["Tremor Totem","EarthTotems"] This:SetRandoms["Searing Totem","FireTotems"] This:SetRandoms["Fire Nova Totem","FireTotems"] This:SetRandoms["Magma Totem","FireTotems"] This:SetRandoms["Totem of Wrath","FireTotems"] This:SetRandoms["Windwall Totem","AirTotems"] This:SetRandoms["Grounding Totem","AirTotems"] This:SetRandoms["Grace of Air Totem","AirTotems"] This:SetRandoms["Wrath of Air Totem","AirTotems"] This:SetRandoms["Healing Stream Totem","WaterTotems"] This:SetRandoms["Mana Spring Totem","WaterTotems"] } method SetRandoms(string SpellName, string RandomSet) { if ${Spell[${SpellName}](exists)} { This:AddRandom[${RandomSet},${SpellName}] } else { This:CustOutput["Couldn't add ${SpellName} into ${RandomSet} because we don't have the spell!"] } } method AddRandom(string spellGroup, string spellName) { if !${This.RandomCast.Element[${spellGroup}](exists)} && ${Bot.Started} { This.RandomCast:Set[${spellGroup}] This.RandomCastCount:Set[${spellGroup},0] } This.RandomCast.Element[${spellGroup}]:Insert[${spellName}] This.RandomCastCount.Element[${spellGroup}]:Inc } member CastRandom(string spellGroup, string checkBuff=NULL) { variable int attempts = 0 variable int spellNum = 1 spellNum:Inc[${Math.Rand[${This.RandomCastCount.Element[${spellGroup}]}]}] do { if ${spellNum} > ${This.RandomCastCount.Element[${spellGroup}]} { spellNum:Inc } if ${Toon.canCast[${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}]} && !${This.isImmune[${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}]} { if ${checkBuff.Equal[Target]} || ${checkBuff.Equal[Me]} { if !${${checkBuff}.Buff[${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}](exists)} { Toon:CastSpell[${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}] This:Output["Casting Random Buff#${spellNum}:${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}"] return TRUE } } else { Toon:CastSpell[${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}] This:Output["Casting Random#${spellNum}:${This.RandomCast.Element[${spellGroup}].Get[${spellNum}]}"] return TRUE } } spellNum:Inc } while ${attempts:Inc} <= ${This.RandomCastCount.Element[${spellGroup}]} return FALSE } method CastRandom(string spellGroup, string checkBuff=NULL) { if !${This.CastRandom[${spellGroup},${checkBuff}]} { This:Debug[RandomCast ${spellGroup} failed] } } member canBuff(string buffName, string theGUID=NULL, string spellName=NULL) { if ${spellName.Equal[NULL]} spellName:Set[${buffName}] if ${theGUID.Equal[NULL]} theGUID:Set[${Me.GUID}] if !${Object[${theGUID}].Buff[${buffName}](exists)} && ${Toon.canCast[${spellName}]} return TRUE return FALSE } member ShouldConserveMana() { if ${Me.PctMana} > ${This.ConserveMana} return TRUE return FALSE } method debuffAll() { if ${Me.PctMana} < 15 || ${Me.Casting} return BuffNum:Set[1] while ${BuffNum} < 16 { BuffNum:Inc if ${Target.Buff.DispelType.Equal[Magic]} && !${Target.Buff.Harmful} { if ${Toon.canCast[Purge]} && !${Me.Casting} { This:CustOutput["Purging a buff on ${Target}"] Toon:CastSpell[Purge] return } } if ${Me.Buff[${BuffNum}].Harmful} { if ${Me.Buff[${BuffNum}].DispelType.Equal[Disease]} { if ${Toon.canCast[Cure Disease]} && ${This.cureDiseaseTimer} < ${LavishScript.RunningTime} { This:CustOutput["Curing a disease"] Toon:CastSpell[Cure Disease] This.cureDiseaseTimer:Set[${This.InSeconds[20]}] return } elseif ${Toon.canCast[Disease Cleansing Totem]} && !${This.OwnedTotemsCheck[Disease Cleansing Totem]} && ${This.HasWaterTotem} { Toon:CastSpell[Disease Cleansing Totem] This:CustOutput["Casting Disease Cleansing Totem"] } } if ${Me.Buff[${BuffNum}].DispelType.Equal[Poison]} { if ${Toon.canCast[Cure Poison]} && ${This.curePoisonTimer} < ${LavishScript.RunningTime} { This:CustOutput["Curing a poison"] Toon:CastSpell[Cure Poison] This.curePoisonTimer:Set[${This.InSeconds[20]}] return } elseif ${Toon.canCast[Poison Cleansing Totem]} && !${This.OwnedTotemsCheck[Poison Cleansing Totem]} && ${This.HasWaterTotem} { Toon:CastSpell[Poison Cleansing Totem] This:CustOutput["Casting Poison Cleansing Totem"] } } } } return } member LootFirst() { if ${Me.Sitting} || ${Me.Casting} return FALSE if ${Unit[-dead,-lootable,-range 0-10](exists)} return TRUE if ${Toon.HasSkill[Skinning]} { if ${Unit[-dead,-skinnable,-range 0-10](exists)} && ${Item[-inventory,"Skinning Knife"](exists)} return TRUE } if ${LavishScript.RunningTime} <= ${State.LOOTState_Loot_Wait_Until} return TRUE return FALSE } /**************************************/ /*************Other Misc***************/ method CustOutput(string myMessage) { if ${This.Output} UIElement[ClassGUI].FindChild[Console]:Echo["${Time.Time24}: ${myMessage}"] return } /**************************************/ /***********GUI Load & Save************/ method SaveConfig() { Config:SetSetting["${RealmChar}","UsePull",${This.UsePull}] Config:SetSetting["${RealmChar}","PullSpell",${This.PullSpell}] Config:SetSetting["${RealmChar}","RestMP",${This.RestMP}] Config:SetSetting["${RealmChar}","RestHP",${This.RestHP}] Config:SetSetting["${RealmChar}","StandMP",${This.StandMP}] Config:SetSetting["${RealmChar}","StandHP",${This.StandHP}] Config:SetSetting["${RealmChar}","EarthTotem",${This.EarthTotem}] Config:SetSetting["${RealmChar}","AirTotem",${This.AirTotem}] Config:SetSetting["${RealmChar}","FireTotem",${This.FireTotem}] Config:SetSetting["${RealmChar}","WaterTotem",${This.WaterTotem}] Config:SetSetting["${RealmChar}","UseEarthElemental",${This.UseEarthElemental}] Config:SetSetting["${RealmChar}","UseFireElemental",${This.UseFireElemental}] Config:SetSetting["${RealmChar}","UseEarthShock",${This.UseEarthShock}] Config:SetSetting["${RealmChar}","UseFlameShock",${This.UseFlameShock}] Config:SetSetting["${RealmChar}","UseFrostShock",${This.UseFrostShock}] Config:SetSetting["${RealmChar}","RandomShock",${This.RandomShock}] Config:SetSetting["${RealmChar}","SaveShocks",${This.SaveShocks}] Config:SetSetting["${RealmChar}","ConserveMana",${This.ConserveMana}] Config:SetSetting["${RealmChar}","UseLBolt",${This.UseLBolt}] Config:SetSetting["${RealmChar}","UseChainLight",${This.UseChainLight}] Config:SetSetting["${RealmChar}","MainHand",${This.MainHand}] Config:SetSetting["${RealmChar}","OffHand",${This.OffHand}] Config:SetSetting["${RealmChar}","DW",${This.DW}] Config:SetSetting["${RealmChar}","ShieldOnPull",${This.ShieldOnPull}] Config:SetSetting["${RealmChar}","HealWave",${This.HealWave}] Config:SetSetting["${RealmChar}","LHealWave",${This.LHealWave}] Config:SetSetting["${RealmChar}","GOTN",${This.GOTN}] Config:SetSetting["${RealmChar}","Output",${This.Output}] Config:SetSetting["${RealmChar}","UseReincarnation",${This.UseReincarnation}] Config:SetSetting["${RealmChar}","UseMPot",${This.UseMPot}] Config:SetSetting["${RealmChar}","UseHPot",${This.UseHPot}] Config:SetSetting["${RealmChar}","UseBandages",${This.UseBandages}] Config:SetSetting["${RealmChar}","MPot",${This.MPot}] Config:SetSetting["${RealmChar}","HPot",${This.HPot}] Config:SetSetting["${RealmChar}","Bandage",${This.Bandage}] Config:SetSetting["${RealmChar}","Shield",${This.Shield}] Config:SetSetting["${RealmChar}","MeleeOnly",${This.MeleeOnly}] } method LoadConfig() { This.UsePull:Set[${Config.GetSetting["${RealmChar}","UsePull"]}] This.PullSpell:Set[${Config.GetSetting["${RealmChar}","PullSpell"]}] This.RestMP:Set[${Config.GetSetting["${RealmChar}","RestMP"]}] This.RestHP:Set[${Config.GetSetting["${RealmChar}","RestHP"]}] This.StandMP:Set[${Config.GetSetting["${RealmChar}","StandMP"]}] This.StandHP:Set[${Config.GetSetting["${RealmChar}","StandHP"]}] This.EarthTotem:Set[${Config.GetSetting["${RealmChar}","EarthTotem"]}] This.AirTotem:Set[${Config.GetSetting["${RealmChar}","AirTotem"]}] This.WaterTotem:Set[${Config.GetSetting["${RealmChar}","WaterTotem"]}] This.FireTotem:Set[${Config.GetSetting["${RealmChar}","FireTotem"]}] This.UseEarthElemental:Set[${Config.GetSetting["${RealmChar}","UseEarthElemental"]}] This.UseFireElemental:Set[${Config.GetSetting["${RealmChar}","UseFireElemental"]}] This.UseEarthShock:Set[${Config.GetSetting["${RealmChar}","UseEarthShock"]}] This.UseFlameShock:Set[${Config.GetSetting["${RealmChar}","UseFlameShock"]}] This.UseFrostShock:Set[${Config.GetSetting["${RealmChar}","UseFrostShock"]}] This.RandomShock:Set[${Config.GetSetting["${RealmChar}","RandomShock"]}] This.SaveShocks:Set[${Config.GetSetting["${RealmChar}","SaveShocks"]}] This.ConserveMana:Set[${Config.GetSetting["${RealmChar}","ConserveMana"]}] This.UseLBolt:Set[${Config.GetSetting["${RealmChar}","UseLBolt"]}] This.UseChainLight:Set[${Config.GetSetting["${RealmChar}","UseChainLight"]}] This.MainHand:Set[${Config.GetSetting["${RealmChar}","MainHand"]}] This.OffHand:Set[${Config.GetSetting["${RealmChar}","OffHand"]}] This.DW:Set[${Config.GetSetting["${RealmChar}","DW"]}] This.ShieldOnPull:Set[${Config.GetSetting["${RealmChar}","ShieldOnPull"]}] This.HealWave:Set[${Config.GetSetting["${RealmChar}","HealWave"]}] This.LHealWave:Set[${Config.GetSetting["${RealmChar}","LHealWave"]}] This.GOTN:Set[${Config.GetSetting["${RealmChar}","GOTN"]}] This.Output:Set[${Config.GetSetting["${RealmChar}","Output"]}] This.UseReincarnation:Set[${Config.GetSetting["${RealmChar}","UseReincarnation"]}] This.UseMPot:Set[${Config.GetSetting["${RealmChar}","UseMPot"]}] This.UseHPot:Set[${Config.GetSetting["${RealmChar}","UseHPot"]}] This.UseBandages:Set[${Config.GetSetting["${RealmChar}","UseBandages"]}] This.MPot:Set[${Config.GetSetting["${RealmChar}","MPot"]}] This.HPot:Set[${Config.GetSetting["${RealmChar}","HPot"]}] This.Bandage:Set[${Config.GetSetting["${RealmChar}","Bandage"]}] This.Shield:Set[${Config.GetSetting["${RealmChar}","Shield"]}] This.MeleeOnly:Set[${Config.GetSetting["${RealmChar}","MeleeOnly"]}] } method InitShamanGUI() { if ${This.UsePull} UIElement[UsePull@Main@Pages@ClassGUI]:SetChecked if ${This.UseReincarnation} UIElement[UseReincarnation@Main@Pages@ClassGUI]:SetChecked if ${This.UseMPot} UIElement[UseMPot@Main@Pages@ClassGUI]:SetChecked if ${This.UseHPot} UIElement[UseHPot@Main@Pages@ClassGUI]:SetChecked if ${This.UseBandages} UIElement[UseBandages@Main@Pages@ClassGUI]:SetChecked if ${This.MeleeOnly} UIElement[MeleeOnly@Main@Pages@ClassGUI]:SetChecked if ${This.UseEarthElemental} UIElement[EarthElemental@Totems@Pages@ClassGUI]:SetChecked if ${This.UseFireElemental} UIElement[FireElemental@Totems@Pages@ClassGUI]:SetChecked if ${This.UseEarthShock} UIElement[EarthShock@Spells@Pages@ClassGUI]:SetChecked if ${This.UseFlameShock} UIElement[FlameShock@Spells@Pages@ClassGUI]:SetChecked if ${This.UseFrostShock} UIElement[FrostShock@Spells@Pages@ClassGUI]:SetChecked if ${This.RandomShock} UIElement[RandomShock@Spells@Pages@ClassGUI]:SetChecked if ${This.SaveShocks} UIElement[SaveShocks@Spells@Pages@ClassGUI]:SetChecked if ${This.UseLBolt} UIElement[LightBolt@Spells@Pages@ClassGUI]:SetChecked if ${This.UseChainLight} UIElement[UseChainLight@Spells@Pages@ClassGUI]:SetChecked if ${This.DW} UIElement[DW@Buffs@Pages@ClassGUI]:SetChecked if ${This.ShieldOnPull} UIElement[ShieldOnPull@Buffs@Pages@ClassGUI]:SetChecked if ${This.Output} UIElement[EnableOutput@Other@Pages@ClassGUI]:SetChecked variable int i = 1 for (i:Set[1] ; ${i} <= ${UIElement[PullSpell@Main@Pages@ClassGUI].Items} ; i:Inc) { if ${This.PullSpell.Equal["${UIElement[PullSpell@Main@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[PullSpell@Main@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[EarthTotem@Totems@Pages@ClassGUI].Items} ; i:Inc) { if ${This.EarthTotem.Equal["${UIElement[EarthTotem@Totems@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[EarthTotem@Totems@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[WaterTotem@Totems@Pages@ClassGUI].Items} ; i:Inc) { if ${This.WaterTotem.Equal["${UIElement[WaterTotem@Totems@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[WaterTotem@Totems@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[FireTotem@Totems@Pages@ClassGUI].Items} ; i:Inc) { if ${This.FireTotem.Equal["${UIElement[FireTotem@Totems@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[FireTotem@Totems@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[AirTotem@Totems@Pages@ClassGUI].Items} ; i:Inc) { if ${This.AirTotem.Equal["${UIElement[AirTotem@Totems@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[AirTotem@Totems@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[MainHand@Buffs@Pages@ClassGUI].Items} ; i:Inc) { if ${This.MainHand.Equal["${UIElement[MainHand@Buffs@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[MainHand@Buffs@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[OffHand@Buffs@Pages@ClassGUI].Items} ; i:Inc) { if ${This.OffHand.Equal["${UIElement[OffHand@Buffs@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[OffHand@Buffs@Pages@ClassGUI]:SelectItem[${i}] } for (i:Set[1] ; ${i} <= ${UIElement[Shield@Buffs@Pages@ClassGUI].Items} ; i:Inc) { if ${This.Shield.Equal["${UIElement[Shield@Buffs@Pages@ClassGUI].Item[${i}].Text}"]} UIElement[Shield@Buffs@Pages@ClassGUI]:SelectItem[${i}] } if ${This.RestMP} != ${UIElement[RestMP@Main@Pages@ClassGUI].Value} UIElement[RestMP@Main@Pages@ClassGUI]:SetValue[${This.RestMP}] if ${This.RestHP} != ${UIElement[RestHP@Main@Pages@ClassGUI].Value} UIElement[RestHP@Main@Pages@ClassGUI]:SetValue[${This.RestHP}] if ${This.StandMP} != ${UIElement[StandMP@Main@Pages@ClassGUI].Value} UIElement[StandMP@Main@Pages@ClassGUI]:SetValue[${This.StandMP}] if ${This.StandHP} != ${UIElement[StandHP@Main@Pages@ClassGUI].Value} UIElement[StandHP@Main@Pages@ClassGUI]:SetValue[${This.StandHP}] if ${This.ConserveMana} != ${UIElement[ConserveMana@Main@Pages@ClassGUI].Value} UIElement[ConserveMana@Main@Pages@ClassGUI]:SetValue[${This.ConserveMana}] if ${This.MPot} != ${UIElement[MPot@Main@Pages@ClassGUI].Value} UIElement[MPot@Main@Pages@ClassGUI]:SetValue[${This.MPot}] if ${This.HPot} != ${UIElement[HPot@Main@Pages@ClassGUI].Value} UIElement[HPot@Main@Pages@ClassGUI]:SetValue[${This.HPot}] if ${This.Bandage} != ${UIElement[Bandage@Main@Pages@ClassGUI].Value} UIElement[Bandage@Main@Pages@ClassGUI]:SetValue[${This.Bandage}] if ${This.HealWave} != ${UIElement[HealWave@Heals@Pages@ClassGUI].Value} UIElement[HealWave@Heals@Pages@ClassGUI]:SetValue[${This.HealWave}] if ${This.LHealWave} != ${UIElement[LHealWave@Heals@Pages@ClassGUI].Value} UIElement[LHealWave@Heals@Pages@ClassGUI]:SetValue[${This.LHealWave}] if ${This.GOTN} != ${UIElement[GOTN@Heals@Pages@ClassGUI].Value} UIElement[GOTN@Heals@Pages@ClassGUI]:SetValue[${This.GOTN}] } method ClassGUIChange(string Action) { switch ${Action} { case PullSpell if ${UIElement[PullSpell@Main@Pages@ClassGUI].SelectedItem.Value(exists)} This.PullSpell:Set[${UIElement[PullSpell@Main@Pages@ClassGUI].SelectedItem}] break case EarthTotem if ${UIElement[EarthTotem@Totems@Pages@ClassGUI].SelectedItem.Value(exists)} This.EarthTotem:Set[${UIElement[EarthTotem@Totems@Pages@ClassGUI].SelectedItem}] break case FireTotem if ${UIElement[FireTotem@Totems@Pages@ClassGUI].SelectedItem.Value(exists)} This.FireTotem:Set[${UIElement[FireTotem@Totems@Pages@ClassGUI].SelectedItem}] break case AirTotem if ${UIElement[AirTotem@Totems@Pages@ClassGUI].SelectedItem.Value(exists)} This.AirTotem:Set[${UIElement[AirTotem@Totems@Pages@ClassGUI].SelectedItem}] break case WaterTotem if ${UIElement[WaterTotem@Totems@Pages@ClassGUI].SelectedItem.Value(exists)} This.WaterTotem:Set[${UIElement[WaterTotem@Totems@Pages@ClassGUI].SelectedItem}] break case MainHand if ${UIElement[MainHand@Buffs@Pages@ClassGUI].SelectedItem.Value(exists)} This.MainHand:Set[${UIElement[MainHand@Buffs@Pages@ClassGUI].SelectedItem}] break case OffHand if ${UIElement[OffHand@Buffs@Pages@ClassGUI].SelectedItem.Value(exists)} This.OffHand:Set[${UIElement[OffHand@Buffs@Pages@ClassGUI].SelectedItem}] break case Shield if ${UIElement[Shield@Buffs@Pages@ClassGUI].SelectedItem.Value(exists)} This.Shield:Set[${UIElement[Shield@Buffs@Pages@ClassGUI].SelectedItem}] break /* checkboxes */ case UsePull if ${UIElement[UsePull@Main@Pages@ClassGUI].Checked} This.UsePull:Set[TRUE] if !${UIElement[UsePull@Main@Pages@ClassGUI].Checked} This.UsePull:Set[FALSE] break case UseReincarnation if ${UIElement[UseReincarnation@Main@Pages@ClassGUI].Checked} This.UseReincarnation:Set[TRUE] if !${UIElement[UseReincarnation@Main@Pages@ClassGUI].Checked} This.UseReincarnation:Set[FALSE] break case UseHPot if ${UIElement[UseHPot@Main@Pages@ClassGUI].Checked} This.UseHPot:Set[TRUE] if !${UIElement[UseHPot@Main@Pages@ClassGUI].Checked} This.UseHPot:Set[FALSE] break case UseMPot if ${UIElement[UseMPot@Main@Pages@ClassGUI].Checked} This.UseMPot:Set[TRUE] if !${UIElement[UseMPot@Main@Pages@ClassGUI].Checked} This.UseMPot:Set[FALSE] break case UseBandages if ${UIElement[UseBandages@Main@Pages@ClassGUI].Checked} This.UseBandages:Set[TRUE] if !${UIElement[UseBandages@Main@Pages@ClassGUI].Checked} This.UseBandages:Set[FALSE] break case MeleeOnly if ${UIElement[MeleeOnly@Main@Pages@ClassGUI].Checked} This.MeleeOnly:Set[TRUE] if !${UIElement[MeleeOnly@Main@Pages@ClassGUI].Checked} This.MeleeOnly:Set[FALSE] break case EarthElemental if ${UIElement[EarthElemental@Totems@Pages@ClassGUI].Checked} This.UseEarthElemental:Set[TRUE] if !${UIElement[EarthElemental@Totems@Pages@ClassGUI].Checked} This.UseEarthElemental:Set[FALSE] break case FireElemental if ${UIElement[FireElemental@Totems@Pages@ClassGUI].Checked} This.UseFireElemental:Set[TRUE] if !${UIElement[FireElemental@Totems@Pages@ClassGUI].Checked} This.UseFireElemental:Set[FALSE] break case FlameShock if ${UIElement[FlameShock@Spells@Pages@ClassGUI].Checked} This.UseFlameShock:Set[TRUE] if !${UIElement[FlameShock@Spells@Pages@ClassGUI].Checked} This.UseFlameShock:Set[FALSE] break case EarthShock if ${UIElement[EarthShock@Spells@Pages@ClassGUI].Checked} This.UseEarthShock:Set[TRUE] if !${UIElement[EarthShock@Spells@Pages@ClassGUI].Checked} This.UseEarthShock:Set[FALSE] break case FrostShock if ${UIElement[FrostShock@Spells@Pages@ClassGUI].Checked} This.UseFrostShock:Set[TRUE] if !${UIElement[FrostShock@Spells@Pages@ClassGUI].Checked} This.UseFrostShock:Set[FALSE] break case RandomShock if ${UIElement[RandomShock@Spells@Pages@ClassGUI].Checked} This.RandomShock:Set[TRUE] if !${UIElement[RandomShock@Spells@Pages@ClassGUI].Checked} This.RandomShock:Set[FALSE] break case SaveShocks if ${UIElement[SaveShocks@Spells@Pages@ClassGUI].Checked} This.SaveShocks:Set[TRUE] if !${UIElement[SaveShocks@Spells@Pages@ClassGUI].Checked} This.SaveShocks:Set[FALSE] break case UseLBolt if ${UIElement[LightBolt@Spells@Pages@ClassGUI].Checked} This.UseLBolt:Set[TRUE] if !${UIElement[LightBolt@Spells@Pages@ClassGUI].Checked} This.UseLBolt:Set[FALSE] break case UseChainLight if ${UIElement[UseChainLight@Spells@Pages@ClassGUI].Checked} This.UseChainLight:Set[TRUE] if !${UIElement[UseChainLight@Spells@Pages@ClassGUI].Checked} This.UseChainLight:Set[FALSE] break case DW if ${UIElement[DW@Buffs@Pages@ClassGUI].Checked} This.DW:Set[TRUE] if !${UIElement[DW@Buffs@Pages@ClassGUI].Checked} This.DW:Set[FALSE] break case ShieldOnPull if ${UIElement[ShieldOnPull@Buffs@Pages@ClassGUI].Checked} This.ShieldOnPull:Set[TRUE] if !${UIElement[ShieldOnPull@Buffs@Pages@ClassGUI].Checked} This.ShieldOnPull:Set[FALSE] break case EnableOutput if ${UIElement[EnableOutput@Other@Pages@ClassGUI].Checked} This.Output:Set[TRUE] if !${UIElement[EnableOutput@Other@Pages@ClassGUI].Checked} This.Output:Set[FALSE] break /* sliders */ case RestMP if ${UIElement[RestMP@Main@Pages@ClassGUI].Value(exists)} This.RestMP:Set[${UIElement[RestMP@Main@Pages@ClassGUI].Value}] break case RestHP if ${UIElement[RestHP@Main@Pages@ClassGUI].Value(exists)} This.RestHP:Set[${UIElement[RestHP@Main@Pages@ClassGUI].Value}] break case StandHP if ${UIElement[StandHP@Main@Pages@ClassGUI].Value(exists)} This.StandHP:Set[${UIElement[StandHP@Main@Pages@ClassGUI].Value}] break case StandMP if ${UIElement[StandMP@Main@Pages@ClassGUI].Value(exists)} This.StandMP:Set[${UIElement[StandMP@Main@Pages@ClassGUI].Value}] break case ConserveMana if ${UIElement[ConserveMana@Main@Pages@ClassGUI].Value(exists)} This.ConserveMana:Set[${UIElement[ConserveMana@Main@Pages@ClassGUI].Value}] break case MPot if ${UIElement[MPot@Main@Pages@ClassGUI].Value(exists)} This.MPot:Set[${UIElement[MPot@Main@Pages@ClassGUI].Value}] break case HPot if ${UIElement[HPot@Main@Pages@ClassGUI].Value(exists)} This.HPot:Set[${UIElement[HPot@Main@Pages@ClassGUI].Value}] break case Bandage if ${UIElement[Bandage@Main@Pages@ClassGUI].Value(exists)} This.Bandage:Set[${UIElement[Bandage@Main@Pages@ClassGUI].Value}] break case HealWave if ${UIElement[HealWave@Heals@Pages@ClassGUI].Value(exists)} This.HealWave:Set[${UIElement[HealWave@Heals@Pages@ClassGUI].Value}] break case LHealWave if ${UIElement[LHealWave@Heals@Pages@ClassGUI].Value(exists)} This.LHealWave:Set[${UIElement[LHealWave@Heals@Pages@ClassGUI].Value}] break case GOTN if ${UIElement[GOTN@Heals@Pages@ClassGUI].Value(exists)} This.GOTN:Set[${UIElement[GOTN@Heals@Pages@ClassGUI].Value}] break } }}