|- IHCEnch.mac - By IHC385
|- Automatic Enchanter bot -
|- Version 1.2
|- Updated: 2/3/2018
|- Credit: Noobhax0r, Maskoi, Ctaylor, Treehuggindruid, Devstator. A lot of ideas were borrowed and modified from their macros
#turbo 80
#include ihcsubs.inc
#include ihcenchmez.inc
#include ihcenchutil.inc
#warning
#Chat group
#Chat tell
#Chat raid
#Event MezBroke "#1# has been awakened by #2#."
#Event OutDoor "#*#outdoors#*#"
#bind SetVarInt /setvarint
#bind CmdList /ihchelp
Sub Main
/doevents flush
/declare MacroName string outer IHCEnch
/declare IniFileName string outer ${MacroName}_${Me.CleanName}.ini
/declare WizMount string outer "Glowing Black Drum"
|-Debug Switches
/declare DEBUGALL int outer 0
/declare DEBUGAANDisc int outer 0
/declare DEBUGCombatdps int outer 0
/declare DEBUGDebuff int outer 0
/declare DEBUGBurn int outer 0
/declare DEBUGBuff int outer 0
/declare DebugMez int outer 0
/declare DEBUGLogging int outer 0
/if (${DEBUGLogging}) {
/mlog on
/delay 5
/log on
}
/call EnchSetup
/call VarSetup
/call AliasSetup
/call SetEncSpells
|-Set Main Tank
/if (${Target.ID}) {
/if (${Target.Type.Equal[Pet]}) {
/varset TnKCond .Pet.
/varset PetTank 1
/varset assistname ${Target.Master.Name}
} else {
/varset PetTank 0
/varset assistname ${Target.Name}
}
/varset assistid ${Target.ID}
/varset MainAssistType ${Target.Type}
} else /if (${Group}) {
/if (${Group.MainAssist.ID}) {
/echo No Target Selected - Switching Group Main Assist
/target id ${Group.MainAssist.ID}
/delay 1s ${Target.ID}
/if (${Target.Type.Equal[Pet]}) {
/varset TnKCond .Pet.
/varset PetTank 1
/varset assistname ${Target.Master.Name}
} else {
/varset PetTank 0
/varset assistname ${Target.Name}
}
} else {
/echo No Target Selected - Switching to First Group Member
/squelch /keypress f2
/delay 1s ${Target.ID}
/if (${Target.Type.Equal[Pet]}) {
/varset TnKCond .Pet.
/varset PetTank 1
/varset assistname ${Target.Master.Name}
} else {
/varset PetTank 0
/varset assistname ${Target.Name}
}
}
/varset assistid ${Target.ID}
/varset MainAssistType ${Target.Type}
} else {
/beep
/echo This Macro Requires a Group or Player Target at Start up
/echo Ending Macro
/endmac
}
/call LoadSpellBar
/call CreateProcBuffTimers
/call CheckOptions
/rez spawn off
/echo ****************************
/echo Welcome to ${MacroName}
/echo Version 1.2
/echo ****************************
/echo \aw use \ag /ihchelp \aw for a list of commands
/if (${assistid}==${Me.ID}) {
/echo \aw I am Main Assist
} else {
/echo \aw Assisting \ay >> \ag ${assistname} \ay << \aw at \ag ${AutoAssistAt}%
}
/if (${DEBUGALL}) /echo DEBUGALL is :ON
/if (${DEBUGAANDisc}) /echo DEBUGAANDisc is :ON
/if (${DEBUGCombatdps}) /echo DEBUGCombatdps is :ON
/if (${DEBUGDebuff}) /echo DEBUGDebuff is :ON
/if (${DEBUGBurn}) /echo DEBUGBurn is :ON
/if (${DEBUGBuff}) /echo DEBUGBuff is :ON
/if (${DebugMez}) /echo DebugMez is :ON
/if (${DEBUGLogging}) /echo DEBUG Logging is :ON
:mainloop
/if (${changetoini}==1) /call INIChanges
/if (${Me.Zoning}) /call Zoning
/if (${Me.Hovering}) /call DeathSub
/call IDUpdateCheck
/if (((${MezOn} && (${Me.XTarget}>=${MezStartCount} || ${MezMobCount})) || ${MezWait} || ${SpawnCount[npc radius ${MezRadius} zradius 15 targetable playerstate 4]}>=${MezStartCount}) && (${Me.SpellReady[${MezSpell}]} || (${MezAETimer}==0 && ${Me.SpellReady[${MezAESpell}]}))) /call DoMezStuff
/if (${UseCharmPet} && !${BackOffFlag} && (${Me.XTarget}>=${CharmMinMobs} || ${SpawnCount[npc radius ${MezRadius} zradius 15 targetable playerstate 4]}>=${CharmMinMobs})) /call CharmCheck
/if ((${Me.XTarget[1].ID} || (${MezMobCount} && ${Me.GroupAssistTarget.ID})) && (!${MezWait})&& !${BackOffFlag} && (${Target.ID}!=${Me.GroupAssistTarget.ID})) /call FindTarget
/if ((${Me.PctAggro}>80 || ${Me.XTarget[2].PctAggro}>80 || ${Me.XTarget[3].PctAggro}>80)) /call ManageAggro
/if (${Me.XTarget[1].ID} && (${DoTash} || ${DoSlow} || ${StripBuffs} || ${DoCripple} || ${DoBlurr}) && !${BackOffFlag} && ${Target.ID}==${autotargetid} && ${Target.Distance}<${AssistRange} && (!${MezWait}) !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs}<=${AutoDebuffAt}) /call DebuffMobs
/if (${Me.XTarget[1].ID} && ${Target.ID}==${autotargetid} && ${Target.Distance}<${AssistRange} && !${BackOffFlag}) /call AANDisc
/if (${Me.XTarget[1].ID} && ${Target.ID}==${autotargetid} && ${Target.PctHPs}<=${AutoAssistAt} && ${Target.Distance}<${AssistRange} && ${DoDPS} && (!${MezWait}) && (${DPSRecastTimer}==0) && !${BackOffFlag}) /call Combatdps
/if (${Me.PctMana}<=70) /call CheckMana
/if (${Spawn[=${FollowToonName}].ID} && !${MoveTo.Moving}) /call FollowToon
/call RazMount
/if ((${Me.PctMana}>=30) && (!${Me.Casting.ID}) && (!${Me.XTarget[1].ID}) && (!${Me.Invis}) && !${MoveTo.Moving} && !${Me.Moving} && (!${MezMobCount}) && (!${SpawnCount[npc radius ${MezRadius} targetable los playerstate 4]})) /call BuffCheck
/if (!${Me.XTarget[1].ID}) /call AutoCampCheck
/if (${DoMed}) /call AutoMed
/doevents
/varset acverbose 0
/goto :mainloop
/return
| Sub exit
:OnExit
/if (${DEBUGLogging}) {
/mlog off
/delay 5
/log off
}
/end
/return
|----------------------------------------------------------------------------
|- SUB: DebuffMobs
|----------------------------------------------------------------------------
Sub DebuffMobs
/if (${Me.GroupAssistTarget.ID} && ${Me.GroupAssistTarget.ID}!=${Target.ID}) {
/call FindTarget
}
/if (${StripBuffs} && (!${Me.Casting.ID}) && ${Target.Beneficial.ID} && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/if (${Me.AltAbilityReady[${StripBuffSpell}]}) {
/if (${DEBUGDebuff} || ${DEBUGALL}) /echo Casting ${StripBuffSpell} on ${Target.CleanName} :ID [ ${Target.ID} ] SUB:DebuffMobs
/alt act ${Me.AltAbility[${StripBuffSpell}].ID}
/delay 10 ${Window[CastingWindow].Open}
/delay 10 !${Me.Casting.ID}
} else /if (${Me.SpellReady[${StripBuffSpell}]}) {
/if (${DEBUGDebuff} || ${DEBUGALL}) /echo Casting ${StripBuffSpell} on ${Target.CleanName} :ID [ ${Target.ID} ] SUB:DebuffMobs
/call CastSpell "${StripBuffSpell}" ${autotargetid} dbf
}
}
/if (${DoTash} && ${Me.SpellReady[${TashSpell}]} && (!${Target.Tashed.ID}) && ${Cast.Status.Equal} && ${Me.CurrentMana}>${Spell[${TashSpell}].Mana} && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/if (${DEBUGDebuff} || ${DEBUGALL}) /echo Casting ${TashSpell} on ${Target.CleanName} :ID [ ${Target.ID} ] SUB:DebuffMobs
/call CastSpell "${TashSpell}" ${Target.ID} Debuff
/delay 16
}
/if (${DoSlow} && (!${Target.Slowed.ID}) && (!${Me.Casting.ID}) && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/if (${Me.AltAbilityReady[${SlowSpell}]} && !${DoCripple}) {
/if (${DEBUGDebuff} || ${DEBUGALL}) /echo Casting ${SlowSpell} on ${Target.CleanName} :ID [ ${Target.ID} ] SUB:DebuffMobs
/alt act ${Me.AltAbility[${SlowSpell}].ID}
/delay 10 ${Window[CastingWindow].Open}
/delay 10 !${Me.Casting.ID}
} else /if (${Me.SpellReady[${SlowSpell}]}) {
/call CastSpell "${SlowSpell}" ${autotargetid} dbf
}
}
/if (${DoCripple} && ${Me.SpellReady[${CrippleSpell1}]} && (!${Target.Crippled.ID}) && (!${Me.Casting.ID}) && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${CrippleSpell1}" ${autotargetid} dbf
}
/if (${DoBlurr} && ${Me.SpellReady[${BlurSpell}]} && (!${Me.Casting.ID}) && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${BlurSpell}" ${autotargetid} dbf
}
/return
|----------------------------------------------------------------------------
|- SUB: AANDisc
|----------------------------------------------------------------------------
Sub AANDisc
|-Defensive AA's for Name Mobs or Low HP on MA
/if (${Me.AltAbilityReady[Glyphy Spray]} && ((${Target.Named} && ${Target.Level}>${Me.Level}) || (${Group.Member[${assistname}]${TnKCond}PctHPs}<45 && ${Group.Member[${assistname}]${TnKCond}PctHPs}>5))) {
/if (${DEBUGAANDisc} || ${DEBUGALL}) /echo AA - Casting Glyphy Spray SUB:AANDisc
/alt act ${Me.AltAbility[Glyphy Spray].ID}
/delay 10
}
/if (${Me.AltAbilityReady[Reactive Rune]} && ((${Target.Named} && ${Target.Level}>${Me.Level}) || (${Group.Member[${assistname}]${TnKCond}PctHPs}<45 && ${Group.Member[${assistname}]${TnKCond}PctHPs}>5))) {
/if (${DEBUGAANDisc} || ${DEBUGALL}) /echo AA - Casting Reactive Rune SUB:AANDisc
/alt act ${Me.AltAbility[Reactive Rune].ID}
/delay 10
}
|-Constant Use AA's
/if (${Me.AltAbilityReady[Focus of Arcanum]}) {
/if (${DEBUGAANDisc} || ${DEBUGALL}) /echo AA - Casting Focus of Arcanum SUB:AANDisc
/alt act ${Me.AltAbility[Focus of Arcanum].ID}
/delay 10
} else /if (${Me.AltAbilityReady[Chromatic Haze]} && (${Me.XTarget}>1 || ${Target.Named} || ${BurnAlways})) {
/if (${DEBUGAANDisc} || ${DEBUGALL}) /echo AA - Casting Chromatic Haze SUB:AANDisc
/alt act ${Me.AltAbility[Chromatic Haze].ID}
/delay 10
}
/return
|----------------------------------------------------------------------------
|- SUB: Combatdps
|----------------------------------------------------------------------------
Sub Combatdps
/if ((${UsePet} || ${UseCharmPet}) && ${Me.Pet.ID} && !${Me.Pet.Combat} && ${PetAssistTimer}==0 && !${Me.Pet.Target.ID}) {
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo Sending in Pet SUB:Combatdps
/squelch /pet attack
/varset PetAssistTimer 5s
/delay 5
}
/if (${Me.AltAbilityReady[Crippling Aurora]} && ${Me.XTarget}>2 && !${Me.Moving} && !${Me.Casting.ID} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call AANow ${Me.AltAbility[Crippling Aurora].ID} ${Target.ID}
/delay 2s
}
/if (${UseDicho} && ${Me.SpellReady[${DichoSpell}]} && (${Target.Named} || (${Me.PctMana}>30 && ${Me.XTarget}>1)) && !${Me.Moving} && !${Me.Casting.ID} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${DichoSpell}" ${Target.ID} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${DichoSpell} < RESULT: ${Cast.Result} SUB:Combatdps
/if (${CastResult.Equal[CAST_SUCCESS]}) /delay 16
}
/if (${Target.Named} && (${Me.AltAbilityReady[Calculated Insanity]} || ${Me.AltAbilityReady[Improved Twincast]}) && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo CALL - SUB BurnRoutine SUB:Combatdps
/call BurnRoutine
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo RETURN - SUB BurnRoutine SUB:Combatdps
}
/if (!${Me.Moving} && !${Me.Casting.ID} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight} && ${Target.ID}) {
/if (!${UseDoTs}) {
/if (${Target.Level}>=${Me.Level}) {
/varset FastNukePct 30
} else /if (${Target.Level}<${Me.Level} && ${Target.Level}>${Math.Calc[${Me.Level}-2].Int}) {
/varset FastNukePct 60
} else {
/varset FastNukePct 99
}
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo FastNukePct Set to ${FastNukePct}
}
/if (!${UseDoTs} && (${Target.PctHPs}<=${FastNukePct} || ${Target.Named}) && ${Me.Gem[${NukeSpell3}]} && ${Cast.Status.Equal} && (${Me.SpellReady[${NukeSpell3}]}) && ${Me.CurrentMana}>${Spell[${NukeSpell3}].Mana}) {
/call CastSpell "${NukeSpell3}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell3} < RESULT: ${Cast.Result} SUB:Combatdps
} else /if (!${UseDoTs} && (${Target.PctHPs}<=${FastNukePct} || ${Target.Named}) && ${Me.Gem[${NukeSpell4}]} && ${Cast.Status.Equal} && (${Me.SpellReady[${NukeSpell4}]}) && ${Me.CurrentMana}>${Spell[${NukeSpell4}].Mana}) {
/call CastSpell "${NukeSpell4}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell4} < RESULT: ${Cast.Result} SUB:Combatdps
} else /if (${Me.Gem[${DoTSpell1}]} && ${Cast.Status.Equal} && !${Me.Buff[Improved Twincast].ID} && (${Target.Named} || ${UseDoTs}) && (${Me.SpellReady[${DoTSpell1}]}) && ${Me.CurrentMana}>${Spell[${DoTSpell1}].Mana} && (!${Target.Buff[${DoTSpell1}].ID}) && ${Target.PctHPs}>40) {
/call CastSpell "${DoTSpell1}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${DoTSpell1} < RESULT: ${Cast.Result} SUB:Combatdps
} else /if (${Me.Gem[${DoTSpell2}]} && ${Cast.Status.Equal} && !${Me.Buff[Improved Twincast].ID} && (${Target.Named} || ${UseDoTs}) && (${Me.SpellReady[${DoTSpell2}]}) && ${Me.CurrentMana}>${Spell[${DoTSpell2}].Mana} && (!${Target.Buff[${DoTSpell2}].ID}) && ${Target.PctHPs}>40) {
/call CastSpell "${DoTSpell2}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${DoTSpell2} < RESULT: ${Cast.Result} SUB:Combatdps
} else /if (${Me.Gem[${DoTSpell3}]} && ${Cast.Status.Equal} && ${Target.Named} && (${Me.SpellReady[${DoTSpell3}]}) && ${Me.CurrentMana}>${Spell[${DoTSpell3}].Mana} && (!${Target.Buff[${DoTSpell3}].ID}) && ${Target.PctHPs}>40) {
/call CastSpell "${DoTSpell3}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${DoTSpell3} < RESULT: ${Cast.Result} SUB:Combatdps
} else /if (${Cast.Status.Equal} && (${Me.SpellReady[${NukeSpell1}]}) && ${Me.CurrentMana}>${Spell[${NukeSpell1}].Mana}) {
/call CastSpell "${NukeSpell1}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell1} < RESULT: ${Cast.Result} SUB:Combatdps
} else /if (${Cast.Status.Equal} && (${Me.SpellReady[${NukeSpell2}]}) && ${Me.CurrentMana}>${Spell[${NukeSpell2}].Mana}) {
/call CastSpell "${NukeSpell2}" ${autotargetid} dps
/if (${DEBUGCombatdps} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell2} < RESULT: ${Cast.Result} SUB:Combatdps
}
/if (${CastResult.Equal[CAST_SUCCESS]} || ${CastResult.Equal[CAST_RESIST]}) /varset DPSRecastTimer 16
}
/return
|----------------------------------------------------------------------------
|- SUB: BurnRoutine
|----------------------------------------------------------------------------
Sub BurnRoutine
/if (${Me.AltAbilityReady[Illusions of Grandeur]}) {
/if (${DEBUGAANDisc} || ${DEBUGALL}) /echo AA - Casting Illusions of Grandeur SUB:AANDisc
/alt act ${Me.AltAbility[Illusions of Grandeur].ID}
/delay 10
}
/if (${Me.AltAbilityReady[Fundament: Third Spire of Enchantment]}) {
/if (${DEBUGAANDisc} || ${DEBUGALL}) /echo AA - Casting Fundament: Third Spire of Enchantment SUB:AANDisc
/alt act ${Me.AltAbility[Fundament: Third Spire of Enchantment].ID}
/delay 10
}
/if (${Me.AltAbilityReady[Improved Twincast]}) {
/if (${DEBUGBurn} || ${DEBUGALL}) /echo AA - Casting Improved Twincast SUB:BurnRoutine
/alt act ${Me.AltAbility[Improved Twincast].ID}
/delay 10
}
/if (${Me.AltAbilityReady[Forceful Rejuvenation]} && ${Me.Buff[Improved Twincast].ID}) {
/if (${Me.SpellReady[${NukeSpell1}]} && ${Cast.Status.Equal} && ${Me.CurrentMana}>${Spell[${NukeSpell1}].Mana} && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${NukeSpell1}" ${Target.ID} brn
/delay 16
/if (${DEBUGBurn} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell1} < RESULT: ${Cast.Result} SUB:BurnRoutine
}
/if (${Me.AltAbilityReady[Calculated Insanity]} && (!${Me.Casting.ID}) && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/if (${DEBUGBurn} || ${DEBUGALL}) /echo AA - Casting Calculated Insanity SUB:BurnRoutine
/alt act ${Me.AltAbility[Calculated Insanity].ID}
/delay 10 ${Window[CastingWindow].Open}
/delay 20 !${Window[CastingWindow].Open}
}
/if (${Me.SpellReady[${NukeSpell2}]} && ${Cast.Status.Equal} && ${Me.CurrentMana}>${Spell[${NukeSpell2}].Mana} && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${NukeSpell2}" ${Target.ID} brn
/delay 16
/if (${DEBUGBurn} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell2} < RESULT: ${Cast.Result} SUB:BurnRoutine
}
/if (${DEBUGBurn} || ${DEBUGALL}) /echo AA - Casting Forceful Rejuvenation SUB:BurnRoutine
/alt act ${Me.AltAbility[Forceful Rejuvenation].ID}
/delay 10 !${Me.Casting.ID}
/if (${Me.SpellReady[${NukeSpell1}]} && ${Cast.Status.Equal} && ${Me.CurrentMana}>${Spell[${NukeSpell1}].Mana} && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${NukeSpell1}" ${Target.ID} brn
/delay 16
/if (${DEBUGBurn} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell1} < RESULT: ${Cast.Result} SUB:BurnRoutine
}
/if (${Me.AltAbilityReady[Banestrike]} && (!${Me.Casting.ID}) && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/if (${DEBUGBurn} || ${DEBUGALL}) /echo AA - Casting Banestrike SUB:BurnRoutine
/alt act ${Me.AltAbility[Banestrike].ID}
/delay 10 ${Window[CastingWindow].Open}
/delay 20 !${Window[CastingWindow].Open}
}
/if (${Me.SpellReady[${NukeSpell2}]} && ${Cast.Status.Equal} && ${Me.CurrentMana}>${Spell[${NukeSpell2}].Mana} && !${Me.Moving} && !${Target.Type.Equal[Corpse]} && ${Target.LineOfSight}) {
/call CastSpell "${NukeSpell2}" ${Target.ID} brn
/delay 16
/if (${DEBUGBurn} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${NukeSpell2} < RESULT: ${Cast.Result} SUB:BurnRoutine
}
} else /if (${Me.AltAbilityReady[Calculated Insanity]}) {
/if (${DEBUGBurn} || ${DEBUGALL}) /echo AA - Casting Calculated Insanity SUB:BurnRoutine
/alt act ${Me.AltAbility[Calculated Insanity].ID}
/delay 10
}
/return
|----------------------------------------------------------------------------
|- SUB: BuffCheck
|----------------------------------------------------------------------------
Sub BuffCheck
/if (!${Me.Buff[${SelfHPBuff}].ID} && ${Cast.Status.Equal} && (${Spell[${SelfHPBuff}].Stacks}) && ${Me.Book[${SelfHPBuff}]} && ${Me.CurrentMana}>${Spell[${SelfHPBuff}].Mana}) {
/call SpellQueue "${SelfHPBuff}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${SelfHPBuff} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (!${Me.Buff[${GroupMana}].ID} && ${Cast.Status.Equal} && (${Spell[${GroupMana}].Stacks}) && ${Me.Book[${GroupMana}]} && ${Me.CurrentMana}>${Spell[${GroupMana}].Mana}) {
/call SpellQueue "${GroupMana}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${GroupMana} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (!${Me.Buff[${GroupHaste}].ID} && ${Cast.Status.Equal} && (${Spell[${GroupHaste}].Stacks}) && ${Me.Book[${GroupHaste}]} && ${Me.CurrentMana}>${Spell[${GroupHaste}].Mana}) {
/call SpellQueue "${GroupHaste}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${GroupHaste} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (!${Me.Buff[${MezBuff}].ID} && ${Cast.Status.Equal} && (${Spell[${MezBuff}].Stacks}) && ${Me.Book[${MezBuff}]} && ${Me.CurrentMana}>${Spell[${MezBuff}].Mana}) {
/call SpellQueue "${MezBuff}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${MezBuff} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (!${Me.Buff[Eldritch Rune].ID} && !${Me.Buff[${SelfRune1}].ID} && ${Cast.Status.Equal} && (${Spell[${SelfRune1}].Stacks}) && ${Me.Book[${SelfRune1}]} && ${Me.CurrentMana}>${Spell[${SelfRune1}].Mana}) {
/call SpellQueue "${SelfRune1}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${SelfRune1} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (!${Me.Buff[${SelfRune2}].ID} && ${Cast.Status.Equal} && (${Spell[${SelfRune2}].Stacks}) && ${Me.Book[${SelfRune2}]} && ${Me.CurrentMana}>${Spell[${SelfRune2}].Mana}) {
/call SpellQueue "${SelfRune2}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${SelfRune2} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (!${Me.Buff[Veil of Mindshadow].ID} && ${Cast.Status.Equal} && (${Spell[Veil of Mindshadow].Stacks}) && ${Me.AltAbilityReady[Veil of Mindshadow]}) {
/if (${DEBUGBuff} || ${DEBUGALL}) /echo AA - Casting Veil of Mindshadow SUB:BuffCheck
/alt act 791
/delay 5
/varset spellrememtimer 5s
} else /if (${Bool[${AuraBuff1}]} && ${Cast.Status.Equal} && (${AuraRecastDelay}==0) && !${Me.Aura[1].Name.Find[${AuraBuff1Name}]} && !${Me.Aura[2].Name.Find[${AuraBuff1Name}]} && ${Me.Book[${AuraBuff1}]} && ${Me.CurrentMana}>${Spell[${AuraBuff1}].Mana}) {
/varset AuraRecastDelay 10s
/call SpellQueue "${AuraBuff1}" ${Me.ID}
/varset spellrememtimer 5s
/delay 5
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${AuraBuff1} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (${Bool[${AuraBuff2}]} && ${Cast.Status.Equal} && (${AuraRecastDelay}==0) && !${Me.Aura[1].Name.Find[${AuraBuff2Name}]} && !${Me.Aura[2].Name.Find[${AuraBuff2Name}]} && ${Me.Book[${AuraBuff2}]} && ${Me.CurrentMana}>${Spell[${AuraBuff2}].Mana}) {
/varset AuraRecastDelay 10s
/call SpellQueue "${AuraBuff2}" ${Me.ID}
/varset spellrememtimer 5s
/delay 5
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${AuraBuff2} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (${UsePet} && !${UseCharmPet} && !${Me.Pet.ID} && ${Cast.Status.Equal} && ${Me.Book[${PetSpell}]} && ${Me.CurrentMana}>${Spell[${PetSpell}].Mana}) {
/call SpellQueue "${PetSpell}" ${Me.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${PetSpell} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (${UsePet} && !${UseCharmPet} && ${Me.Pet.ID} && ${Cast.Status.Equal} && ${Me.Book[${PetBuffSpell}]} && ${Me.CurrentMana}>${Spell[${PetBuffSpell}].Mana} && !${Me.Pet.Buff[${PetBuffSpell}]}) {
/call SpellQueue "${PetBuffSpell}" ${Me.Pet.ID}
/varset spellrememtimer 5s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${PetBuffSpell} < RESULT: ${Cast.Result} SUB:BuffCheck
} else /if (${Me.PctMana}>90 && !${FindItem[Azure Mind Crystal].ID} && !${Cursor.Name.Equal[Azure Mind Crystal]} && ${Me.AltAbilityReady[Azure Mind Crystal]}) {
/alt act ${Me.AltAbility[Azure Mind Crystal].ID}
/delay 20s !${Me.Casting.ID}
/delay 2s ${Cursor.Name.Equal[Azure Mind Crystal]}
/autoinventory
/delay 2s
/varset spellrememtimer 5s
} else /if (!${Me.Gem[${spellmisc}].Name.Equal[${miscspellremem}]} && ${spellrememtimer}==0) {
/call LoadSpellGem "${miscspellremem}" ${spellmisc}
}
/if (${ProcBuffCount}>=1 && ${Me.SpellReady[${ProcBuff}]} && ${Cast.Status.Equal} && ${Me.Book[${ProcBuff}]} && ${Me.CurrentMana}>${Spell[${ProcBuff}].Mana} && (${ProcBuffRecastTimer}==0)) {
/declare l int local
/for l 1 to ${ProcBuffCount}
/if ((${ProcBuffTimer${l}}==0) && ${Me.SpellReady[${ProcBuff}]} && (${ProcBuffRecastTimer}==0)) {
/target id ${ProcBuffID${l}}
/delay 10
/delay 5
/if (${Target.ID}==${ProcBuffID${l}} && ${Target.Buff[${ProcBuff}].ID}) {
/varset ProcBuffTimer${l} ${Target.BuffDuration[${ProcBuff}].TotalSeconds}s
} else /if (${Target.ID}==${ProcBuffID${l}} && !${Target.Buff[${ProcBuff}].ID} && (${Spell[${ProcBuff}].Stacks})) {
/call SpellQueue "${ProcBuff}" ${ProcBuffID${l}}
/varset ProcBuffRecastTimer 60s
/varset ProcBuffTimer${l} 1080s
/if (${DEBUGBuff} || ${DEBUGALL}) /echo SPELL - Cast Attempt > ${ProcBuff} < ON: ${Target.CleanName} RESULT: ${Cast.Result} SUB:BuffCheck
} else {
/varset ProcBuffTimer${l} 190s
}
}
/next l
}
/return
|----------------------------------------------------------------------------
|- SUB: ManageAggro
|----------------------------------------------------------------------------
Sub ManageAggro
/if (!${Me.Buff[Eldritch Rune].ID} && !${Me.Buff[${SelfRune1}].ID} && ${Cast.Status.Equal} && (${Spell[Eldritch Rune].Stacks}) && ${Me.AltAbilityReady[Eldritch Rune]}) {
/alt act 173
/delay 5
}
/if (${Me.TargetOfTarget.ID}==${Me.ID} && ${Target.ID} && ${Target.ID}!=${Me.ID} && ${Target.ID}==${Me.GroupAssistTarget.ID}) {
/if (${Me.PctHPs}<=30 && ${Me.AltAbilityReady[Self Stasis]}) {
/call AANow ${Me.AltAbility[Self Stasis].ID} ${Target.ID}
} else /if (${Me.PctHPs}<=30 && ${Me.AltAbilityReady[Dimensional Instability]}) {
/call AANow ${Me.AltAbility[Dimensional Instability].ID} ${Target.ID}
} else /if (${Me.PctHPs}<=40 && ${Me.AltAbilityReady[Beguiler's Directed Banishment]}) {
/call AANow ${Me.AltAbility[Beguiler's Directed Banishment].ID} ${Target.ID}
} else /if (${Me.PctHPs}<=50 && ${Me.AltAbilityReady[Beguiler's Banishment]} && ${SpawnCount[npc radius 20]} > 2) {
/call AANow ${Me.AltAbility[Beguiler's Banishment].ID} ${Target.ID}
} else /if (${Me.PctHPs}<=60 && ${Me.AltAbilityReady[Doppelganger]}) {
/call AANow ${Me.AltAbility[Doppelganger].ID} ${Target.ID}
} else /if (${Me.PctHPs}<=60 && ${Me.AltAbilityReady[Phantasmal Opponent]}) {
/call AANow ${Me.AltAbility[Phantasmal Opponent].ID} ${Target.ID}
} else /if (${Me.PctHPs}<=80 && ${Me.AltAbilityReady[Dimensional Shield]}) {
/call AANow ${Me.AltAbility[Dimensional Shield].ID} ${Target.ID}
}
}
/if (${Target.ID}==${Me.GroupAssistTarget.ID} && (${Me.PctAggro}>=90 || ${Me.TargetOfTarget.ID}==${Me.ID})) {
/if (${Me.AltAbilityReady[Arcane Whisper]}) {
/call AANow ${Me.AltAbility[Arcane Whisper].ID} ${Target.ID}
} else /if (${Me.AltAbilityReady[Silent Casting]}) {
/call AANow ${Me.AltAbility[Silent Casting].ID} ${Target.ID}
}
}
/return
|----------------------------------------------------------------------------
|- SUB: CheckMana
|----------------------------------------------------------------------------
Sub CheckMana
/if (${Me.PctMana}<=55 && ${Me.AltAbilityReady[Gather Mana]}) {
/call AANow ${Me.AltAbility[Gather Mana].ID} ${Me.ID}
} else /if (${Me.PctMana}<=70 && ${FindItem[Azure Mind Crystal].ID}) {
/call ItemNow "Azure Mind Crystal"
}
/return
|----------------------------------------------------------------------------
|- SUB: ProcBuffTimers - Create Night's Endless Terror Timers
|----------------------------------------------------------------------------
Sub CreateProcBuffTimers
/declare Gsize int local 0
/declare i int local
/declare ii int local
/varcalc Gsize ${Group.GroupSize}-1
/for i 1 to ${Gsize}
/if (${Select[${Group.Member[${i}].Class.ShortName},BRD,BST,BER,MNK,PAL,RNG,ROG,SHD,WAR]}) {
/varcalc ProcBuffCount ${ProcBuffCount}+1
/declare ProcBuffTimer${ProcBuffCount} timer outer 0
/declare ProcBuffID${ProcBuffCount} int outer ${Group.Member[${i}].ID}
}
/next i
/for ii 0 to ${Gsize}
/if (${Group.Member[${ii}].Pet.ID}) {
/varcalc ProcBuffCount ${ProcBuffCount}+1
/declare ProcBuffTimer${ProcBuffCount} timer outer 0
/declare ProcBuffID${ProcBuffCount} int outer ${Group.Member[${ii}].Pet.ID}
}
/next ii
/return
|----------------------------------------------------------------------------
|- SUB: Handle Buff Requests
|----------------------------------------------------------------------------
Sub Event_Chat(string ChatType,string ChatSender,string ChatText)
/if (${Spawn[pc ${ChatSender}].ID} && ${ChatType.Equal[tell]}) /mqlog ${ChatSender} -- ${ChatText}
/if (${Spawn[${ChatSender.Right[-2].Left[-1]}].ID}) {
/if (${Select[${ChatText},voice,crack,clarity,kei]} && (${Spawn[${ChatSender.Right[-2].Left[-1]}].Distance}<100)) /call SpellQueue ${SingleMana} ${Spawn[${ChatSender.Right[-2].Left[-1]}].ID}
/if (${Select[${ChatText},haste,speed,zing]} && (${Spawn[${ChatSender.Right[-2].Left[-1]}].Distance}<100)) /call SpellQueue ${SingleHaste} ${Spawn[${ChatSender.Right[-2].Left[-1]}].ID}
}
/return
|----------------------------------------------------------------------------
|- SUB: CharmCheck
|----------------------------------------------------------------------------
Sub CharmCheck
/declare nArray int local
/declare nArray2 int local
/if (${CharmDelay}) /return
/if (${CharmedID} && !${Spawn[ID ${CharmedID}].ID}) /varset CharmedID 0
/if (${OldCharmedID} && !${Spawn[ID ${OldCharmedID}].ID}) /varset OldCharmedID 0
/if (${UseCharmPet} && !${Me.Pet.ID} && ${CharmSpell1.NotEqual[NULL]} && ${Me.SpellReady[${CharmSpell1}]}) {
/if (${CharmedID} && ${Spawn[${CharmedID}].ID} && ${Spawn[${CharmedID}].Type.Equal[NPC]} && ${Spawn[${CharmedID}].Distance}<${Math.Calc[${Spell[${CharmSpell1}].Range}-25]}) {
/squelch /target ID ${CharmedID}
/delay 1s ${Target.ID}==${CharmedID}
} else /if (${OldCharmedID} && ${Spawn[${OldCharmedID}].ID} && ${Spawn[${OldCharmedID}].Type.Equal[NPC]} && ${Spawn[${OldCharmedID}].Distance}<${Math.Calc[${Spell[${CharmSpell1}].Range}-25]}) {
/squelch /target ID ${OldCharmedID}
/delay 1s ${Target.ID}==${OldCharmedID}
} else {
/if (!${MezOn}) /call MezRadar
/if (${MezCheckElements}==0) /return
/if (${MezCheckElements}>=${CharmMinMobs}) {
/for nArray 1 to ${MezCheckElements}
/if (${Defined[CCTarget${nArray}Info]} && ${Spawn[${CCTarget${nArray}Info.Arg[1,|]}].ID} && ${Spawn[${CCTarget${nArray}Info.Arg[1,|]}].ID}!=${Me.GroupAssistTarget.ID} && ${Spawn[${CCTarget${nArray}Info.Arg[1,|]}].Distance}<=${AssistRange} && ${CCTarget${nArray}Info.Arg[2,|]}>=${CharmMinLvl} && ${CCTarget${nArray}Info.Arg[2,|]}<=${CharmMaxLvl}) {
/squelch /target ID ${CCTarget${nArray}Info.Arg[1,|]}
/varset CharmedID ${CCTarget${nArray}Info.Arg[1,|]}
} else {
/next nArray
}
/delay 1s ${Target.ID}==${CharmedID}
}
}
/if (${Target.ID}==${CharmedID} && ${Target.Type.Equal[NPC]}) {
/if (${CharmPreStun} && ${SingleStunSpell1.NotEqual[NULL]} && ${Me.SpellReady[${SingleStunSpell1}]}) {
/call CastSpell "${SingleStunSpell1}" ${Target.ID} Charm
}
/if (${CharmPreTash} && ${TashSpell.NotEqual[NULL]} && ${Me.SpellReady[${TashSpell}]}) {
/call CastSpell "${TashSpell}" ${Target.ID} Charm
}
/call CastSpell "${CharmSpell1}" ${Target.ID} Charm
/if (${CastResult.Equal[CAST_SUCCESS]}) {
/echo Successfully Charmed ${Me.Pet.CleanName} | ${Me.Pet.ID}
} else {
/echo Failed to Charm ${Spawn[${CharmedID}].CleanName} | ${CharmedID}
/varset OldCharmedID ${CharmedID}
/varset CharmedID 0
}
}
} else /if (${MezCheckElements}>0) {
/for nArray2 1 to ${MezCheckElements}
/if (${Defined[CCTarget${nArray2}Info]} && (${CCTarget${nArray2}Info.Arg[3,|].Find[corpse]} || !${Spawn[${CCTarget${nArray2}Info.Arg[1,|]}].ID} || ${Spawn[${CCTarget${nArray2}Info.Arg[1,|]}].Type.Equal[Corpse]})) /call RemoveCCTarget ${nArray2}
/if (${Defined[CCTarget${nArray2}Info]} && ${Spawn[${CCTarget${nArray2}Info.Arg[1,|]}].ID}==${Me.Pet.ID}) /call RemoveCCTarget ${nArray2}
/next nArray2
}
/return
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|======--------- + SUB: RazMount
|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Sub RazMount
/if (!${Me.Invis} && !${Me.Casting.ID} && !${Me.Mount.ID} && !${Me.FeetWet} && ${Zone.Outdoor}) /useitem ${WizMount}
:wait4
/delay 5
/if (${Me.Casting.ID} || ${Me.Moving}) /goto :wait4
/return