• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver
IHCEnch.mac

Release IHCEnch.mac 1.2.1

No permission to download
Just got this:
View attachment 13672

View attachment 13673

So it looks like that variable doesn't exist in the array, even though you do a "check" for the defined variables:

I only turned charm on from the default setup.

JJB

- - - Updated - - -

The above undefined variable issue does not happen with Charm turned off.

- - - Updated - - -

FYI... my chars are 110 and the NPCs are 108-112

- - - Updated - - -

the above said... with charm off this thing is SUPER at mezzing... With Charm incorporated this will be killer.

Thank you! Including the screen shots makes this so much easier to fix! I think I need to check if the variable exists on a line by itself before any of the other checks. I'll try and have a fix out by tomorrow.
Besides the bug, thanks for the feedback, glad its working ok for ya!
 
Re: IHCEnch 1.2 - Enchanter bot - Updated 2/4/18

AnotherJohn good to hear! I'll see if I can reproduce the not meding issue, admittedly I have seen a few issues on my end when I have paused this macro...its real random but sometimes it just stops responding and that could be causing the issue, maybe the getting summoned kicks it back in. Appreciate the report!

As for mem blur, yup I'm sure this needs work. Right now it will do any debuffs you have enabled THEN mem blur at the end, probably too late as you pointed out. I suppose it would be better to do an aggro check after each debuff and call the blur if aggro is over a certain %.





levox This is spot on and is exactly what I was thinking, you doing this actually saves me a lot of time/work, I wanted to see if I could use both in the same search too but apparently not. I dont want to make any changes and release anything without testing it some but here is an idea I had:

Original code from mezradar
Rich (BB code):
:loopradar
/if (${NearestSpawn[${i},npc radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}) {
/if (${Defined[CCTarget${i}Info]}) {
/if (${Spawn[${CCTarget${i}Info.Arg[1,|]}].Type.Equal[Corpse]} || ${Spawn[${CCTarget${i}Info.Arg[1,|]}].PctHPs}<=0 || !${Spawn[${CCTarget${i}Info.Arg[1,|]}].ID}) /call RemoveCCTarget ${i}
}
/varset NMMob ${NearestSpawn[${i},npc radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}

Change to:
Rich (BB code):
:loopradar
/if (${NearestSpawn[${i},npc radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID} || ${NearestSpawn[${i},npcpet radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}) {
/if (${Defined[CCTarget${i}Info]}) {
/if (${Spawn[${CCTarget${i}Info.Arg[1,|]}].Type.Equal[Corpse]} || ${Spawn[${CCTarget${i}Info.Arg[1,|]}].PctHPs}<=0 || !${Spawn[${CCTarget${i}Info.Arg[1,|]}].ID}) /call RemoveCCTarget ${i}
}
/if (${NearestSpawn[${i},npc radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}) {
/varset NMMob ${NearestSpawn[${i},npc radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}
} else /if (${NearestSpawn[${i},npcpet radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}) {
/varset NMMob ${NearestSpawn[${i},npcpet radius ${MezWatchRadius} zradius 15 range ${MezMinLevel} ${MezMaxLevel} targetable playerstate 4].ID}
}

Just an idea. Thanks again for the feedback!

Took awhile for me to comment back but your fix did work and pets are now getting mezzed. Thank you!


Sent from my iPhone using Tapatalk
 
Hi ich385,

Just a quick up date on the med issue which may (or may not) help with your diagnosis. On 4 summons my enchanter started to med correctly 2 of those times. On those 2 occasions it did med correctly until I used my follow and stop routine. Also, by mistake I kicked the enchanter from the group and it began medding correctly even after rejoining the group, again until we moved. So not sure if it is my follow routine or because there is a pause in the routine. Also, the enchanter looks like he is trying to sit to mezz but gets about half way down and stands. This is in an indoor zone where a mount can't be used. Hope this info is helpful and keep up the great work. This program rocks with the mezzing and debuffing.

Thanks, AnotherJohn
 
just tried it out

works great

only having one problem constraining helix repeat casts in rotation even after it has landed
EDIT--- set docripple back to 0 and seems all good now
 
Last edited:
Hi ihc385,

A few weeks ago I tried to plug in levox's fix for mezzing pets. The macro seemed to work as before. It mezzed the main mobs but not the pets. I am not sure if this is because I plugged it in wrong or because it was TLP server or some other reason. Just thought you would like the feed back. I changed the coding back to the original and will test it out again after your next update. Thanks again for sharing the macro. It has made my enchanter much more useful. AnotherJohn
 
Hi ihc385,

A few weeks ago I tried to plug in levox's fix for mezzing pets. The macro seemed to work as before. It mezzed the main mobs but not the pets. I am not sure if this is because I plugged it in wrong or because it was TLP server or some other reason. Just thought you would like the feed back. I changed the coding back to the original and will test it out again after your next update. Thanks again for sharing the macro. It has made my enchanter much more useful. AnotherJohn

Yeah this code is part of my current build and I see the same issue, not sure if something changed but I ran into the same thing with my newbie group in temple of bertoxx, mob summons a pet and it doesnt even attempt to mez it. Fix is in the works but it may be a bit before I release a new one....this mac has become part of a larger project I'll be releasing soon. Appreciate the report!
 
I am not great at this but I just starting using this and I keep rememming Greater Fetter and Mana Repetition Aura. I know it has to be operator error but I do not know how to fix it. Please advise the noob.
 
I am not great at this but I just starting using this and I keep rememming Greater Fetter and Mana Repetition Aura. I know it has to be operator error but I do not know how to fix it. Please advise the noob.

you may already have 2 different aura's active?
 
Finally got around to testing out the enchanter macro. I tried to test out charm and found the following undefined variable:

Rich (BB code):
Enchant - [2018/04/01 23:43:24] WARNING: Undefined Variable CCTarget1Info used on line [email protected] /if (${Defined[CCTarget${nArray2}Info]} && ${Spawn[${CCTarget${nArray2}Info.Arg[1,|]}].ID}==${Me.Pet.ID}) /call RemoveCCTarget ${nArray2}Macro Paused.


Also, any update on implementing the /chaseme and /switchnow commands from KA.
 
Finally got around to testing out the enchanter macro. I tried to test out charm and found the following undefined variable:

Rich (BB code):
Enchant - [2018/04/01 23:43:24] WARNING: Undefined Variable CCTarget1Info used on line [email protected] /if (${Defined[CCTarget${nArray2}Info]} && ${Spawn[${CCTarget${nArray2}Info.Arg[1,|]}].ID}==${Me.Pet.ID}) /call RemoveCCTarget ${nArray2}Macro Paused.


Also, any update on implementing the /chaseme and /switchnow commands from KA.

Thanks for the report. I believe I have this one fixed already, I'll double check though. There's been a lot of work on this and the zerker mac but a lack of updates cause they have become part of a larger project I had hoped to release already but I wanted a lot of testing from lvl1 to max....15 lvls to go still on my end :/ I got /chaseme but not /switchnow cause my targeting will automatically follow the ma but I can see where the option to not follow the ma and wait for a call might be good too so I'll get something in for /switchnow and autofollow ma options
 
Found an issue, which I'm not sure why noone has reported because its pretty blatantly apparent, unless everyone just didn't have the level 78 version their spell book.

Perplexing Flash (level 78) is being memmed in slot 11 instead of Perplex (level 108). This is due to the way mq2 searches the spellbook from page 1 to 99 in that order as well as only searching partial names. So if there is another spell named "Perplex" earlier in your spell book i.e. the level 78 spell (Perplexing Flash), than it loads that instead of the level 108 Perplex spell. This is similar to the issue I had with Cloudburst Thunderblot for wizards --> see here



Rich (BB code):
|Block |-PBAE Mez Spell * Var Name: MezPBAESpell string outer
    /if (${Me.Level}>=108 && ${Me.Book[${Spell[Perplex].RankName}]}) {
        /varset MezPBAESpell ${Spell[Perplex].RankName}


So the ghetto solution seems to be to move the level 78 version to way back in the spell book, so that it sees the level 108 version first.

The permanent solution might be to add a check for spell ID's along with spell book for these type of partial named spell cases, i.e.

Rich (BB code):
 /if (${Me.Level}>=108 &&  (${Me.Book[${Spell[57224].ID}]} ||  ${Me.Book[${Spell[57225].ID}]} || ${Me.Book[${Spell[57226].ID}]})) {

I don't know if that is the correct syntax, as I don't know how to write macros, you will have to double check the highlighted in red.
 
Found an issue, which I'm not sure why noone has reported because its pretty blatantly apparent, unless everyone just didn't have the level 78 version their spell book.

Perplexing Flash (level 78) is being memmed in slot 11 instead of Perplex (level 108). This is due to the way mq2 searches the spellbook from page 1 to 99 in that order as well as only searching partial names. So if there is another spell named "Perplex" earlier in your spell book i.e. the level 78 spell (Perplexing Flash), than it loads that instead of the level 108 Perplex spell. This is similar to the issue I had with Cloudburst Thunderblot for wizards --> see here



Rich (BB code):
|Block |-PBAE Mez Spell * Var Name: MezPBAESpell string outer
    /if (${Me.Level}>=108 && ${Me.Book[${Spell[Perplex].RankName}]}) {
        /varset MezPBAESpell ${Spell[Perplex].RankName}


So the ghetto solution seems to be to move the level 78 version to way back in the spell book, so that it sees the level 108 version first.

The permanent solution might be to add a check for spell ID's along with spell book for these type of partial named spell cases, i.e.

Rich (BB code):
 /if (${Me.Level}>=108 &&  (${Me.Book[${Spell[57224].ID}]} ||  ${Me.Book[${Spell[57225].ID}]} || ${Me.Book[${Spell[57226].ID}]})) {

I don't know if that is the correct syntax, as I don't know how to write macros, you will have to double check the highlighted in red.

Thanks again for the report, I've ran into this a lot more than I thought I would actually. I'm doing 6 classes at the moment and adding every spell from 1-110 but I'm not catching the duplicates until I run into them testing so it woulda been a minute before I got this one since I dont have an ench above 105 yet and everything I wrote for 106+ was a guess basically. I'm gonna use the ID in these cases for sure, seems the simplest solution.
 
Love this macro thank you!

Only thing I am trying to figure out is how to buff haste on my melee? Haste is cast on my pet but not on tank and melee dps. Thanks again!
 
Love this macro thank you!

Only thing I am trying to figure out is how to buff haste on my melee? Haste is cast on my pet but not on tank and melee dps. Thanks again!

Auto buffing haste is kinda handled in a generic way...it pretty much will only cast group haste automatically, so if a melee looses or misses haste you need to cancel it off the enchanter and it should rebuff the group.
You should be able to get a single haste if you send the ench a tell asking for haste, speed or zing on the char that needs it.
 
Auto buffing haste is kinda handled in a generic way...it pretty much will only cast group haste automatically, so if a melee looses or misses haste you need to cancel it off the enchanter and it should rebuff the group.
You should be able to get a single haste if you send the ench a tell asking for haste, speed or zing on the char that needs it.

thank you, so what should i put in the tell to the enchanter? like /tell TOONNAME haste or /tell TOONNAME swift like the wind
 
thank you, so what should i put in the tell to the enchanter? like /tell TOONNAME haste or /tell TOONNAME swift like the wind

/tell TOONNAME haste
or
/tell TOONNAME speed
or
/tell TOONNAME zing

should all work.

I'm curious about this though...is it not buffing group haste at all? or is this more a problem with a single char missing/loosing the buff?
 
Will try these command asap, can be very useful instead of deleting buffs on enc to get rebuff :). Good work bud.
 
/tell TOONNAME haste
or
/tell TOONNAME speed
or
/tell TOONNAME zing

should all work.

I'm curious about this though...is it not buffing group haste at all? or is this more a problem with a single char missing/loosing the buff?

Telling the enchanter "haste" "zing" "speed" from my tank doesnt seem to do anything. Any idea?

- - - Updated - - -

Bigger issue, macro keeps crashing
while error.PNG
 
Telling the enchanter "haste" "zing" "speed" from my tank doesnt seem to do anything. Any idea?

- - - Updated - - -

Bigger issue, macro keeps crashing
View attachment 13943
vivviv thanks for the report, thats a tough one! Is this constant even after a reboot? I feel like this could be a plugin conflict, if you could pm me some info it would be appreciated so I can try and reproduce this.
could you give me a /plugin list, your level and server ( optional, dont think TLP should make a difference but I'll make a char there if I have to to recreate the problem )
 
@vivviv thanks for the report, thats a tough one! Is this constant even after a reboot? I feel like this could be a plugin conflict, if you could pm me some info it would be appreciated so I can try and reproduce this.
could you give me a /plugin list, your level and server ( optional, dont think TLP should make a difference but I'll make a char there if I have to to recreate the problem )



Probably mq2buncles conflict.
 
I cannot get the chat/group/tell system to work at all. The chat event is not even called when I TELL the enchanter. I put an "echo" in the routine /echo Here I am which should fire whenever the enchanter is telled, or group telled. Nothing.

Anyone know what's up with that?

JJB
 
Hi,

Not sure if you are still working on this macro (I know you mentioned you were working on a bigger project that this would be a part of) but thought I would give you a few observations from a 65-70 user, call it a wish list of things I noticed that would be nice to have. Even without any changes this Macro is amazing at locking down adds. Thank you again for releasing this to those of us that could never write something this amazing on our own and looking forward to any new projects you might be working on. That said here is what I noticed:

No setting for a mount - not a big deal to do manually but would be nicer automated.
Group Resist Magic - (Guard of Druzzil) It maybe that with other group makeups or higher levels this is not important but in my situation would be helpful to be an option.
Won't sit to Med in indoor zone - outdoors not a problem with the mount up but for some reason toon wont sit indoors, even manually
Tiny Companion - Would be nice to be able to set shrink pet

Just want to give you my observations and I hope they are helpful in whatever you are working on now. Thanks again for sharing and I will be on the lookout for anything new, AnotherJohn
 
Last edited:
The only thing I can think of to make this better, would be the ability to click mod rods.. Other than that, this is great! Oh, and maybe one similar for a Mage :-)
 
Hi,

Not sure if you are still working on this macro (I know you mentioned you were working on a bigger project that this would be a part of) but thought I would give you a few observations from a 65-70 user, call it a wish list of things I noticed that would be nice to have. Even without any changes this Macro is amazing at locking down adds. Thank you again for releasing this to those of us that could never write something this amazing on our own and looking forward to any new projects you might be working on. That said here is what I noticed:

No setting for a mount - not a big deal to do manually but would be nicer automated.
Group Resist Magic - (Guard of Druzzil) It maybe that with other group makeups or higher levels this is not important but in my situation would be helpful to be an option.
Won't sit to Med in indoor zone - outdoors not a problem with the mount up but for some reason toon wont sit indoors, even manually
Tiny Companion - Would be nice to be able to set shrink pet

Just want to give you my observations and I hope they are helpful in whatever you are working on now. Thanks again for sharing and I will be on the lookout for anything new, AnotherJohn

Always appreciate the feedback, the new version is still being worked on it just came to a crawl cause its planting season for me but I should be back on it to finish soon.
I've gotten a lot of requests for item use and specific buffs for certain level ranges, which is tough to code for so I think I am going to stop restricting mq2melee use so people can use holies/downs for specific things, trying to keep the code as short as possible so these stay fast
 
Hi ich385,

Glad to hear you are still working on your project. Hope planting season goes well for you. It's a bummer but a truth that RL comes first :). I am just giving you observations in hopes they are of value and of help to you. If they are tough to program (lord knows I wouldn't know as I have been unable to get conditions to work, which should be easy, sigh) then leave them out. The enchanter program has been such an improvement for my toon makes me wish I had a Berzerker. I was hoping that it would be just a simple line here or there to give an option but if it is not the program rocks just the way it is. I can't thank you enough for sharing this with the community. AnotherJohn
 
Simply EDIT line 23 to match your mount (case sensitive) and Viola! Mount! I have Glowing Black Drum, replace that with your mount. "" are required around names with spaces!

Rich (BB code):
|- 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
 
PS IHC, you are welcome to change that or add your own or keep it in there for your version, we are all about helping each other here.....
 
I got an undefined variable error PullMoveUse in line 227 of ihcenchmez.inc
/if (${PullMoveUse.Equal[nav]}) /nav stop

And the macro paused. I don't see any references to this variable anywhere else in the ihc* files.
 
I got an undefined variable error PullMoveUse in line 227 of ihcenchmez.inc
/if (${PullMoveUse.Equal[nav]}) /nav stop

And the macro paused. I don't see any references to this variable anywhere else in the ihc* files.

Nice catch and a bug for sure, comment it out or delete that line, as you said it's not referenced anywhere else I just missed deleting that line. I dont really maintain this version anymore, so I thank the people doing the mods to keep it alive :)
 
Just saw the new thread, will switch to the new version.

Thanks!
 
Hello,

I am using it on a low level chanter and had to change the mez spell mem section I will past it here so you can adjust if you want for the levels between 47 and 54, for the spell dazzle.

Sub SetEncSpells
|Block |-Mez Spell * Var Name: MezSpell string outer
/if (${Me.Level}>=108 && ${Me.Book[${Spell[Chaotic Delusion].RankName}]} && ${DoDPS}) {
/varset MezSpell ${Spell[Chaotic Delusion].RankName}
} else /if (${Me.Level}>=106 && ${Me.Book[${Spell[Delude].RankName}]} && !${DoDPS}) {
/varset MezSpell ${Spell[Delude].RankName}
} else /if (${Me.Level}>=103 && ${Me.Book[${Spell[Chaotic Bewildering].RankName}]} && ${DoDPS}) {
/varset MezSpell ${Spell[Chaotic Bewildering].RankName}
} else /if (${Me.Level}>=101 && ${Me.Book[${Spell[Bewilder].RankName}]} && !${DoDPS}) {
/varset MezSpell ${Spell[Bewilder].RankName}
} else /if (${Me.Level}>=98 && ${Me.Book[${Spell[Chaotic Confounding].RankName}]} && ${DoDPS}) {
/varset MezSpell ${Spell[Chaotic Confounding].RankName}
} else /if (${Me.Level}>=96 && ${Me.Book[${Spell[Confound].RankName}]} && !${DoDPS}) {
/varset MezSpell ${Spell[Confound].RankName}
} else /if (${Me.Level}>=93 && ${Me.Book[${Spell[Chaotic Confusion].RankName}]} && ${DoDPS}) {
/varset MezSpell ${Spell[Chaotic Confusion].RankName}
} else /if (${Me.Level}>=92 && ${Me.Book[${Spell[Mislead].RankName}]} && !${DoDPS}) {
/varset MezSpell ${Spell[Mislead].RankName}
} else /if (${Me.Level}>=88 && ${Me.Book[${Spell[Chaotic Baffling].RankName}]} && ${DoDPS}) {
/varset MezSpell ${Spell[Chaotic Baffling].RankName}
} else /if (${Me.Level}>=87 && ${Me.Book[${Spell[Baffle].RankName}]} && !${DoDPS}) {
/varset MezSpell ${Spell[Baffle].RankName}
} else /if (${Me.Level}>=83 && ${Me.Book[${Spell[Chaotic Befuddling].RankName}]} && ${DoDPS}) {
/varset MezSpell ${Spell[Chaotic Befuddling].RankName}
} else /if (${Me.Level}>=82 && ${Me.Book[${Spell[Befuddle].RankName}]}) {
/varset MezSpell ${Spell[Befuddle].RankName}
} else /if (${Me.Level}>=77 && ${Me.Book[${Spell[Mystify].RankName}]}) {
/varset MezSpell ${Spell[Mystify].RankName}
} else /if (${Me.Level}>=72 && ${Me.Book[${Spell[Bewilderment].RankName}]}) {
/varset MezSpell ${Spell[Bewilderment].RankName}
} else /if (${Me.Level}>=69 && ${Me.Book[${Spell[Euphoria].RankName}]}) {
/varset MezSpell ${Spell[Euphoria].RankName}
} else /if (${Me.Level}>=67 && ${Me.Book[${Spell[Felicity].RankName}]}) {
/varset MezSpell ${Spell[Felicity].RankName}
} else /if (${Me.Level}>=64 && ${Me.Book[${Spell[Bliss].RankName}]}) {
/varset MezSpell ${Spell[Bliss].RankName}
} else /if (${Me.Level}>=63 && ${Me.Book[${Spell[Sleep].RankName}]}) {
/varset MezSpell ${Spell[Sleep].RankName}
} else /if (${Me.Level}>=61 && ${Me.Book[${Spell[Apathy].RankName}]}) {
/varset MezSpell ${Spell[Apathy].RankName}
} else /if (${Me.Level}>=54 && ${Me.Book[${Spell[Glamour of Kintaz].RankName}]}) {
/varset MezSpell ${Spell[Glamour of Kintaz].RankName}
} else /if (${Me.Level}>=47 && ${Me.Book[${Spell[Dazzle].RankName}]}) {
/varset MezSpell ${Spell[Dazzle].RankName}
} else /if (${Me.Level}>=13 && ${Me.Book[${Spell[Enthrall].RankName}]}) {
/varset MezSpell ${Spell[Enthrall].RankName}
} else /if (${Me.Level}>=2 && ${Me.Book[${Spell[Mesmerize].RankName}]}) {
/varset MezSpell ${Spell[Mesmerize].RankName}
}
|EndBlock
 
Hello,

I am trying to use this on a lvl 90 but with Slow enabled all he does in combat is chain cast Curtailing Helix.
 
Been using this since low levels and its been super amazing!

Been having a small issue with him mezzing now that we are level 96, but I'm hoping when he gets his 97 Mezz he'll start mezzing again. I don't mind having to manually do it atm though. He just debuffs then spam nukes while the adds run wild currently.
 
Been using this since low levels and its been super amazing!

Been having a small issue with him mezzing now that we are level 96, but I'm hoping when he gets his 97 Mezz he'll start mezzing again. I don't mind having to manually do it atm though. He just debuffs then spam nukes while the adds run wild currently.
This is no longer maintained. You may want to look at rgmercs which is the replacement for the ihc macs.
 
Release IHCEnch.mac

Users who are viewing this thread

Back
Top
Cart