; Immolator's OpenBot Frost Mage Routine ; 5/5/07 10:20 PM ; ; History: ; Legend: E = Enhancement, F = Fix, C ; v0.1.0 ; E: First version, put up a skeleton for all the necessary functions ; E: Faces mob while casting ; E: Eats, drinks and buffs ; E: Combat added, pulls and fights ; E: Uses Ice Barrier ; E: Uses Evocation ; E: Uses Water Elemental ; v0.1.1 ; F: Stopped routine trying to cast while drinking ; E: Rewrote rest routine (faster and smarter) ; E: Tidied combat routine ; E: Added CheckSpell function to help with routine intelligence ; ; Todo: ; Better combat sequence ; Bandages ; Potions ; Scrolls ; Polymorph ; Better Water Elemental ; Better Evocation objectdef oClass inherits oBase { ; Customize these variables to suit your needs: ; The distance at which the PullSpell is used variable int PullRange = 34 ; The spell used to pull mobs variable string PullSpell = "Frostbolt" ; The armour spell used (Ice Armour, Frost Armour, Mage Armour) variable string ArmourBuff = "Ice Armor" ; Whether to use Dampen Magic or not variable bool UseDampen = TRUE ; Whether to use Polymorph or not variable bool UsePoly = TRUE ; Stop resting when above this amount of mana variable int FullMana = 95 ; Stop resting when above this amount of health variable int FullHealth = 95 method Initialize() { } method CastingPulse() { if ${Target.GUID.NotEqual[${Me.GUID}]} && ${Target(exists)} { Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] } } method RestPulse() { Move -stop if (${Me.PctMana} > ${This.FullMana}) && (${Me.PctHPs} > ${This.FullHealth}) { Toon:Standup } if ${Me.Buff[Drink](exists)} || ${Me.Buff[Eat](exists)} { return } if (!${Consumable.HasDrink} && ${Inventory.GetBagsInfo[RETRIEVE_FREESLOTS,"normal"]} > 0) || (!${Consumable.HasFood} && ${Inventory.GetBagsInfo[RETRIEVE_FREESLOTS,"normal"]} > 0) { if (!${Consumable.HasDrink} && ${Inventory.GetBagsInfo[RETRIEVE_FREESLOTS,"normal"]} > 0) && ${CheckSpell(Conjure Water)} { ${Toon.CastSpellGUID[${Me.GUID},Conjure Water]} } if (!${Consumable.HasFood} && ${Inventory.GetBagsInfo[RETRIEVE_FREESLOTS,"normal"]} > 0) && ${CheckSpell(Conjure Food)} { ${Toon.CastSpellGUID[${Me.GUID},Conjure Food]} } return } if ${Toon.NeedBuff[${Me.GUID},${This.ArmourBuff}]} || ${Toon.NeedBuff[${Me.GUID},Arcane Intellect]} || (${This.UseDampen} && ${Toon.NeedBuff[${Me.GUID},Dampen Magic]}) if ${Toon.NeedBuff[${Me.GUID},${This.ArmourBuff}]} && CheckSpell(${This.ArmourBuff}) { ${Toon.EnsureBuff[${Me.GUID},${This.ArmourBuff}]} } if ${Toon.NeedBUff[${Me.GUID},Arcane Intellect]} && CheckSpell(Arcane Intellect) { ${Toon.EnsureBuff[${Me.GUID},Arcane Intellect]} } if ${This.UseDampen} && ${Toon.NeedBuff[${Me.GUID},Dampen Magic]} && CheckSpell(Dampen Magic) { ${Toon.EnsureBuff[${Me.GUID},Dampen Magic]} } return if ${Consumable.HasDrink} && !${Me.Buff[Drink](exists)} && (${Me.PctMana} < ${This.FullMana}) { Consumable:useDrink return } if ${Consumable.HasFood} && !${Me.Buff[Food](exists)} && (${Me.PctHPs} < ${This.FullHealth}) { Consumable:useFood return } } member NeedRest() { if (${Me.PctMana} < ${This.FullMana}) || (${Me.PctHPs} < ${This.FullHealth}) { return TRUE } if ${Toon.NeedBuff[${Me.GUID},${This.ArmourBuff}]} { return TRUE } if ${Toon.NeedBuff[${Me.GUID},Arcane Intellect]} { return TRUE } if ${This.UseDampen} && ${Toon.NeedBuff[${Me.GUID},Dampen Magic]} { return TRUE } return FALSE } method PullPulse() { Move -stop if CheckSpell(Ice Barrier) { ${Toon.CastSpellGUID[${Target.GUID},Ice Barrier]} } if CheckSpell(Water Elemental) { ${Toon.CastSpellGUID[${Target.GUID},Summon Water Elemental]} } if ${Toon.CastSpellGUID[${Targeting.TargetCollection.Get[1]},${PullSpell}]} { return } } method AttackPulse() { if !${Target(exists)} || ${Target.GUID.Equal[${Me.GUID}]} || ${Target.Dead} { Toon:NeedTarget[1] } if (${Math.Distance[${Me.X},${Me.Y},${Me.Z},${Target.X},${Target.Y},${Target.Z}]} < 10) && (${Me.PctMana} < 5) && CheckSpell(Frost Nova) && CheckSpell(Evocation) { if ${Toon.CastSpellGUID[${Target.GUID},"Frost Nova"]} { Move Backward if ${Toon.CastSpellGUID[${Target.GUID},Evocation]} { return } } } if (${Math.Distance[${Me.X},${Me.Y},${Me.Z},${Target.X},${Target.Y},${Target.Z}]} < 10) && ${Toon.CastSpellGUID[${Target.GUID},"Frost Nova"]} { return } if (${Target.Distance} > 34) { Navigator:FaceXYZ[${Target.X},${Target.Y},${Target.Z}] Move Forward return } if (${Target.Buff[Frost Nova](exists)} || ${Target.Buff[Frostbite](exists)}) && (${Math.Distance[${Me.X},${Me.Y},${Me.Z},${Target.X},${Target.Y},${Target.Z}]} < 10) { Move Backward return } if !${Me.Buff[Ice Barrier](exists)} && ${Toon.CastSpellGUID[${Target.GUID},Ice Barrier]} { return } if ((${Me.PctMana }< 5) || (${Target.PctHPs} < 10)) && ${Toon.CastSpellGUID[${Target.GUID},Shoot]} { return } if (${Target.Distance} < 8) && ${Toon.CastSpellGUID[${Target.GUID},Cone of Cold]} { return } if (${Target.Distance} < 20) && ${Toon.CastSpellGUID[${Target.GUID},Fire Blast]} { return } if ${Toon.CastSpellGUID[${Target.GUID},Frostbolt]} { return } } member CheckSpell(string spellname) { if ${Spell[${spellname}](exists)} && !${Spell[${spellname}].Cooldown} && (${Me.CurrentMana} >= ${Spell[${SpellName}].Mana}) { return TRUE } return FALSE } }