;Check to see if ISXWoW has loaded. #if !${InnerSpace:LoadExtension[isxwow](exists)} #error ISXWoW is required but could not be loaded #endif ;Define for waypoint precision #define WPPRECISION 3 #define Use_Pet #define FOOD_NAME "Clefthoof Ribs" /* Name of food to feed pet with */ #include ./WOWCUF/moveto.iss #include ./WOWCUF/spells.iss #include ./WOWCUF/uhs.iss ;;;;;;;;;;;;;;;;; ; Configuration ; ;;;;;;;;;;;;;;;;; #define MoveToTarget 0 function main() { turbo 1000 declare HomeDir filepath script ${Script.CurrentDirectory} declare CombatMaxDist float script 5 declare CombatMinDist float script 2 ;declare UseFaceFast bool script FALSE declare Counter int ui -load "WoWSkin/WoWSkin.xml" ui -load -skin WoWSkin "HunterAidUI.xml" echo "Pausing." Script[HunterAid]:Pause { #ifdef FOOD_NAME if !${Me.InCombat}&&${Me.Pet.PctHappiness}<70&&${Me.Pet.Health}!=0&&${Item[FOOD_NAME](exists)} { cast "feed pet" wait 20 ${WoWScript[SpellIsTargeting()]} waitframe Item[-exact,FOOD_NAME]:PickUp wait 1 wowscript SpellStopTargeting() wait 10 target Hawkbane Wait 10 cast "Feed Pet" Item[-exact,FOOD_NAME]:Use Wait 10 } #endif } while 1 { if ${Target(exists)} && !${Target.Dead} && ${Target.Attackable} && !${Me.Dead} && !${Me.Buff[Feign Death](exists)} switch ${Me.Class} { case Hunter call Attack_Hunter ${Target.GUID} break } waitframe } } function atexit() { ui -unload "WoWSkin/WoWSkin.xml" ui -unload "HunterAidUI.xml" } function sanity(string sanitySpell) { if ${Target(exists)} && !${Target.Dead} && ${Target.Distance}<41 && ${Target.Attackable} && !${Me.Dead} && !${Me.Buff[Feign Death](exists)} { if !${Me.Action[Auto Shot].AutoRepeat} && ${Target.Distance}>8 { Cast "Auto Shot" } Cast "${sanitySpell}" waitframe } while (${Me.Casting} || ${Me.GlobalCooldown}) && !${Target.Dead} && !${Me.Dead} && !${Me.Buff[Feign Death](exists)} { waitframe } } function Attack_Hunter(string AttackGUID) { declare SavX float local ${Me.X} declare SavY float local ${Me.Y} declare SavZ float local ${Me.Z} declare BailOut int local ${Math.Calc[${LavishScript.RunningTime}+(1000*${CombatBailout})]} declare HavePulled bool local FALSE declare StuckCheck bool local FALSE declare StuckCheckCount int local 0 declare StuckCheckTime int local declare Aggros guidlist local declare MovedBackMulti bool local FALSE { AttackGUID:Set[${Target.GUID}] ; Ensure we are still facing our target loc ;call SmartFace ${Target.X} ${Target.Y} ;waitframe ; Check we still have a valid target if !${Target(exists)} { echo "Target no longer valid." TargetGUID:Set[NOTARGET] Return } if !${WoWScript[HasPetUI()]} { call UpdateHudStatus "Summoning a new pet" call CastSpell "Call Pet" ${Me.GUID} wait ${Me.Casting} } if !${Me.Buff[Aspect of the Hawk](exists)} { call CastSpell "Aspect of the Hawk" ${Me.GUID} wait ${Me.Casting} } if !${Me.Buff[Trueshot Aura](exists)} { call CastSpell "Trueshot Aura" ${Me.GUID} wait ${Me.Casting} } if !${Target.Buff[Hunter's Mark](exists)} && ${Spell[Hunter's Mark](exists)} && ${Me.Action[Hunter's Mark].Usable} { call CastSpell "Hunter's Mark" } ; Once our target is in melee range turn on attack if !${Me.Attacking} && ${Target(exists)} && ${Target.Distance}<8 { WoWScript AttackTarget() } ;Pet if ${Target.Attackable} && ${Target.Distance}<55 { wowscript PetAttack() } ; Kill Command. if ${Spell[Kill Command](exists)} && ${Me.Action[Kill Command].Usable} { call sanity "Kill Command" } ; Rapid Fire if ${Spell[Rapid Fire](exists)} && ${Me.Action[Rapid Fire].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Rapid Fire" } ; Viper Sting call IsTargetCaster ${AttackGUID} if ${Return} && !${Target.CreatureType.Equal[Elemental]} && ${Spell[Viper Sting](exists)} && ${Me.Action[Viper Sting].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Viper Sting" } ; Aimed Shot if ${Spell[Aimed Shot](exists)} && ${Me.Action[Aimed Shot].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Aimed Shot" } ; Multishot. if ${Spell[Multi-Shot](exists)} && ${Me.Action[Multi-Shot].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Multi-Shot" } ; Arcane Shot. if ${Spell[Arcane Shot](exists)} && ${Me.Action[Arcane Shot].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Arcane Shot" } ; Steady Shot. if ${Spell[Steady Shot](exists)} && ${Me.Action[Steady Shot].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Steady Shot" } ; Enemy casting? Silence him! if ${Target.Casting.ID(exists)} && ${Spell[Silencing Shot](exists)} && ${Me.Action[Silencing Shot].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Silencing Shot" } ; Concussive Shot. if ${Spell[Concussive Shot](exists)} && ${Me.Action[Concussive Shot].Usable} && ${Target.Distance}>8 && ${Target.Distance}<43 { call sanity "Concussive Shot" } ; Scatter Shot. if ${Spell[Scatter Shot](exists)} && ${Me.Action[Scatter Shot].Usable} && ${Target.Distance}<21 { call sanity "Scatter Shot" } ; Wing Clip. if ${Spell[Wing Clip](exists)} && ${Me.Action[Wing Clip].Usable} && ${Target.Distance}<6 { call sanity "Wing Clip" wait ${Me.Casting} call sanity "Raptor Strike" } ; Mongoose Bite. if ${Spell[Mongoose Bite](exists)} && ${Me.Action[Mongoose Bite].Usable} && ${Target.Distance}<6 { call sanity "Mongoose Bite" } } } function IsTargetCaster( string AttackGUID ) { ;echo "Checking Target for Caster" ;echo "${Select[${Unit[${AttackGUID}].Class},Mage,Warlock,Paladin,Shaman,Druid,Priest]}" return ${Select[${Unit[${AttackGUID}].Class},Mage,Warlock,Paladin,Shaman,Druid,Priest]} }