• 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

AFNuke help

ugghh

New member
Joined
Nov 12, 2014
RedCents
82¢
I am looking for some help in understanding the functionality of AFNuke so that I can be sure I am using it to its full potential, and I am hesitant to muck around too much until I understand a few basics

First question, which seems logical - after the initial run of AFNuke it creates an ini. file called nuke_yourname.ini, am I correct that after the first load AFNuke uses whatever is in this file to populate/overwrite the various variable / settings that are listed in the main afnuke.mac macro. For example in the main AFNUKE there is a line that reads

Rich (BB code):
/call DeclareIniVar harvestgem string Settings gem7

however in my nuke_ugghh.ini file I have this line
Rich (BB code):
Harvestgem=gem12


The way I read this is that if I did not have a setting in my nuke_yourname.ini file it would look to gem7 for the Harvest spell, but since I have a line instead it will look in gem12 - is that right?
*************************
2nd question - again please forgive my confusion. Can someone provide me some guidance on the link between the spell gem setting and the spell names in the ini file? Is the gem the important part as that is what it is actually casting and the spell name is just what shows on screen?

For example near the top of nuke_yourname.ini I see the following lines

Rich (BB code):
Myconcgem=gem10
Mainnukegem=gem1
Mainnukegem2=gem2
Endnukegem=gem5
Gomnukegem=gem1
InstantNukeGem=gem3
AeNukeGem=gem4
RainNukeGem=gem10
StunNukeGem=gem10
FociNukeGem=gem6
Harvestgem=gem12

A bit further down the nuke_yourname.ini I see spell section that looks like this

Rich (BB code):
[Spells]
HarvestSpell=Bucolic Harvest
ConcSpell=Concussive Salvo
FociNuke=Hoarfrost Vortex
Mainnuke=Wildether Barrage
Mainnuke2=Gosik's Fire
Mainnuke3=Ethereal Incandescence
Endnuke=Ethereal Weave
Gomnuke=Ethereal Weave
Instantnuke=Flashsear
Etherealweave=Ethereal Weave
Fireethereal=Ethereal Incandescence
Iceethereal=Ethereal Hoarfrost
Magicethereal=Ethereal Salvo
Clawnuke=Claw of the Flamewing
FireAeNuke=Beam of solteris
FireRainNuke=Magmatic Eruption
StunNuke=Telanama
TwinCast=TwinCast
Freezenuke=Skullfreeze

So near the top I see Mainnukegem=gem1, Mainnukegem2=gem2 but I don't see a Mainnukegem3. Then down below in the INI file I see 3 nukes listed as follows:
Mainnuke=Wildether Barrage, Mainnuke2=Gosik's Fire, Mainnuke3=Ethereal Incandescence.

I really trying to make sure of what and where I need to be updating lines if want to swap in a more powerful or different spell.
********
Finally 3rd question - bit of variation on question 1 = if for some reason I fail to define a variable in the INI file such as
StunNuke=
Rich (BB code):
/call DeclareIniVar StunNuke string Spells "Telajara"

will AFNuke then pick up whatever is defined as the default for that line in the actual AFNuke.mac file? In this case Telajara?

Thanks as always to all those showing us noobies a better way.
 
Thanks William. That puts me on some track- as I look closer it appears that it does not use the gems, so I am going to comment out or remove those lines.

I might also take a look at your modified one.
 
I tried running afnuke today with a mage pettanking and was having issues recognizing the MA. Has anyone gotten afnuke to run with a mage running kiss?
 
I believe i have a mage bot laying around if someone wants to tidy it up as i do not play anything but sk and wiz anymore
 
ok because I pl'ed my mage to 105 over this exp week , and id like to add mage to box team

- - - Updated - - -

Rich (BB code):
| magebot.mac 
| Last update 8/18/2009
|  slash commands:
|  /setma name                             - sets main assist   
|  /setsa name                             - sets secondary assist                                
|  /debuff on|off                          - turns auto debuffing on or off                         
|  /anchor #                               - sets the leash length when using an anchor            
|  /minhp #                                - sets the minimum hp % that you'll begin nuking at  
|  /radius #                               - sets the distance at which you'll engage
|  /nuketype fire|magic|bolt [spellname]   - sets your current nuke to the specified type
|  /ds on|off                              - turns group ds on or off 
|  /pettype ear|air|fir|wat 
|  /nukebranch Fire|Magic|Bane|Rain|Beam|Standard  
 
#include spell_routines.inc
#include Wait4Rez.inc
#include events.inc
#include general2.inc
#include aapurchase.inc
#include Ninjadvloot.inc
#include ItemBuff.inc

#turbo 40 

#chat group 
#chat tell 
#chat chat 
#chat say 

#event Irc 		"#1# tells the raid, '#2#'" 
#event ChatTell 	"#1# told you, '#2#'" 
#event IRC            	"<#1#> #2#"
#event DoTell 		"#1# tells you, '#2#'"
#event DoTell 		"#1# told you, '#2#'" 
#event Gate 		"#1# gates#*#" 
#event PetWeps 		"#1# #*#'#*#pet weps#*#'" 
#event RageOff 		"#*#is no longer enraged#*#" 
#event RageOn 		"#*#has become ENRAGED#*#" 
#event Talk 		"<#1#> #2#"
#event Invite 		"#1# invites you to join a group."
#event GiftofMana       "You have been granted a gift of amazing exquisite radiant mana!"
#event FlameOfPower 	"#*#small flames dance#*#"
#event Burninate 	"#*#Max Burn#*#"
#event nukebranch       "[MQ2] nukebranch #1#"
#event CoH 		"#1# tells #2#, 'coh'"
#event CoH 		"#1# tells #2#, 'coh #3#'"
#event UnstableCharge 	"#*##1# is afflicted by an unstable charge.#*#"

Sub Main 
  /echo Startin Up
  /declare INIFile string outer Auto_${Me.CleanName}

  /call SetupAdvLootVars
  /call GeneralDeclares
  /call GeneralDeclares2
  /call IniDeclares
  /call IntializeItemBuff
  /call AAInit

  /declare i int local 
  /declare j int local 
  /declare oldTarget int local 
  /declare tempTimer timer local 0

  /varset castSub CheckForAdds 

  /if (${UseIRC} && !${Irc} && !${irctimer}) /call Irc

  /echo NameList: ${NameList}

  :wait_for_target 
   /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   /if (!${EQBC.Connected}) /bccmd reconnect
   /if (${DoLeash} && !${DoLeashToon}) /call Leash
   /if (${DoLeashToon}) /call DoLeashPerson
   /if (!${CheckExpTimer}) /call AutoAdjustExp
   /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
   /varset MacroState WaitForTarget1
   /doevents
   /if (!${petSpamTimer}) { 
     /pet ghold on
     /varset petSpamTimer 50 
   } 
   /if (${DoLeash} && !${DoLeashToon}) /call Leash
   /if (${DoLeashToon}) /call DoLeashPerson
   /if ( ${nukeMode} || ${useDebuff} ) /echo Waiting for target... 
   /call CheckRods
   /if (${DoLoot} && !${Me.Moving} && !${SpawnCount[npc radius 30]} ) /call LootMobs
   /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
   /varset validTarget 0 
   /if ( ${NukeLine}==7 ) /call Offtank
   :wait_for_target2 
    /varset MacroState WaitForTarget2
    /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
    /doevents
    /if (${following}) /goto :wait_for_target2
    /if (${DoLoot} && !${Me.Moving} && !${SpawnCount[npc radius 75]} ) /call LootMobs
    /call CheckPetBuffs
    /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
    /call CheckRods
    /if ( ${QueueCount} && !${Me.Moving} ) /call DoBuffEvents
    /if (!${bufftimer} && ${usebuffs} && !${Me.Moving}) /call CheckIniBuffs
    /if (${Spawn[pc ${secondAssist}].ID} && (!${Spawn[pc ${MainAssist}].ID} || ${Spawn[corpse ${MainAssist}].ID})) { 
      /varset mainTank ${secondAssist} 
    } else { 
      /varset mainTank ${MainAssist} 
    }
    /if (${DoLeash} && !${DoLeashToon}) /call Leash
    /if (${DoLeashToon}) /call DoLeashPerson
    /if ( !${Corpse.Open} && ${Spawn[${MainAssist}].NearestSpawn[npc radius ${Math.Calc[${minRadius}*2]}].ID} && ( ${nukeMode} || ${useDebuff} ) ) { 
      /if (${Me.Casting.ID}) /call WaitCast 
      /assist ${mainTank} 
      /varset oldTarget ${Target.ID} 
      /varset tempTimer 5 
      :wait_for_assist1 
       /varset MacroState WaitForAssist1
       /if (${DoLeash} && !${DoLeashToon}) /call Leash
       /if (${DoLeashToon}) /call DoLeashPerson
       /doevents
       /if (${following}) /goto :wait_for_assist1
       /call CheckRods
       /doevents
       /if (${DoLeash} && !${DoLeashToon}) /call Leash
       /if (${DoLeashToon}) /call DoLeashPerson
       /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
       /if (${following}) /goto :wait_for_target2
       /call CheckTarget 
       /if ( ${tempTimer} && !${validTarget} ) /goto :wait_for_assist1 
     } 
     /call CheckTarget 
     /if ( !${validTarget} || ( !${nukeMode} && !${useDebuff} ) ) { 
       /call CheckPet 
       /doevents 
       /if ( !${CheckExpTimer} ) /call AutoAdjustExp
       /goto :wait_for_target2 
     } 
     /echo Target Aquired >> ${Target.DisplayName} << 
     /varset petAttacking false 
     /varset engaged 0 
     /varset nukeWaitTimer 0 
     /varset mobID ${Target.ID} 
     /varset mobHPStart ${Target.PctHPs} 
     /call UpdateMobList 
     /call AddToList mobList ${mobID} 
     /varset nukeWaitTimer 0 
     /if ( ${Defined[waitTimer${mobID}]} ) /deletevar waitTimer${mobID} 
     /declare waitTimer${mobID} int outer -1 
     /varset newAdds 0 
   }
   
  :nuke_loop 
   /if (${DoLeash} && !${DoLeashToon}) /call Leash
   /if (${DoLeashToon}) /call DoLeashPerson
   /varset MacroState NukeLoop
   /varset addIndex 1 
   /doevents
   /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   :check_add_loop 
    /doevents
    /call CheckForAdds 
    /if ( ${addIndex}>1 ) /goto :check_add_loop 
    /call CheckPet 
    /if ( !${Spawn[${mobID}].Type.Equal[NPC]} && ( !${Spawn[${mobID}].Type.Equal[pet]} || ${Spawn[${mobID}].Master.Type.Equal[pc]} ) ) { 
      /echo Target Dead! 
      /varset mobID 0
      /goto :wait_for_target 
    }
    /target id ${mobID}
    /if ( ( ${Target.PctHPs}>${minHP} && ${waitTimer${mobID}} ) || !${assistWaitTimer} ) { 
      /if ( ${Spawn[pc ${secondAssist}].ID} && ( !${Spawn[pc ${MainAssist}].ID} || ${Spawn[corpse ${MainAssist}].ID} ) ) { 
         /varset mainTank ${secondAssist} 
      } else { 
         /varset mainTank ${MainAssist} 
      } 
    /assist ${mainTank} 
    /varset tempTimer 8 
   :wait_for_assist
    /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
    /doevents
    /call CheckPet 
    /if ( ${tempTimer} && ${Target.ID}==${mobID} ) /goto :wait_for_assist 
    /if ( ${Target.ID} && ${Target.ID}!=${mobID} ) /goto :wait_for_target 
    /varset assistWaitTimer 5s 
    /goto :nuke_loop 
  } 
  /if ( !${engaged} ) { 
    /varset engaged 1 
    /echo Engaging >> ${Target.DisplayName} << 
  } 
  /if ( ${Me.Pet.ID} && !${petAttacking} && ${Target.PctHPs}<=${SendPetPerc} ) { 
    /pet attack 
    /varset petAttacking true 
    |/if (${Me.Pet.Following.ID} && (${Math.Calc[${Target.Heading.DegreesCCW}-${Me.Pet.Heading.DegreesCCW}]}>90 || ${Math.Calc[${Target.Heading.DegreesCCW}-${Me.Pet.Heading.DegreesCCW}]}<-90 )) /multiline ; /face fast heading ${Math.Calc[${Target.Heading.DegreesCCW}-180]} ; /alt act 3816
  }
  /call CheckPetBuffs
  /call CheckRods
  /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
  /if ( ${useDebuff} && ${Target.LineOfSight} && ${Target.PctHPs}<=99 && ( ${Target.Type.Equal[NPC]} || ${Target.Type.Equal[pet]} ) ) /call DebuffMobs
  /varset MacroState Blast
  /if ( ${NukeLine}==7 ) /call Offtank
  /if (${nukeMode} && ${Target.LineOfSight} && ${Target.PctHPs}<=${minHP} && !${Me.TargetOfTarget.Name.Equal[${Me.Name}]} && (${Me.PctMana}>=${nukeMana} || ${nukeMode}==2) && (${Target.Type.Equal[NPC]} || ${Target.Type.Equal[pet]} && ${Target.Master.Type.Equal[NPC]})) {
    /echo HERE
    /if (!${Me.Pet.Target.ID} && ${Me.Pet.ID}) /pet attack
    /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
    /if (${NameList.Find[${Target.CleanName}]} && ${Target.PctHPs}<${WhenToBurn}) /call NamedBurn
    /echo ${Target.CleanName} is NOT a named! ${NameList.Find[${Target.CleanName}]}
    /if (${NukeLine}==1) /call FireBranch
    /if (${NukeLine}==2) /call MagicBranch
    /if (${NukeLine}==3) /call BaneBranch
    /if (${NukeLine}==4) /call RainBranch
    /if (${NukeLine}==5) /call BeamBranch
    /if (${NukeLine}==6) /call MageDPS  
    /if (${NukeLine}==7) /call Offtank
  }
  /doevents
  /delay 1
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
  /if (${Me.PctMana}<85 && !${Me.Sitting} && !${Me.Moving} && !${Me.Casting.ID} && !${Me.Combat}) /sit
  /goto :nuke_loop 
/return

Sub DebuffMobs 
  /declare i int local 
  /declare tempID string local 
  /if ( ${mobList.Find[[]} ) { 
    /for i 1 to ${mobList.Count[[]}
      /if (!${Me.SpellReady[${malosiniaSpell}]}) /return
      /if ( ${mobList.Find[[]}>1 ) /varset mobList ${mobList.Right[-${Math.Calc[${mobList.Find[[]}-1]}]} 
        /varset tempID ${mobList.Arg[${i},[].Left[-1]} 
        /if ( !${Defined[maloTimer${tempID}]} ) { 
        /if ( !${Spawn[${tempID}].Type.Equal[npc]} ) { 
          /declare maloTimer${tempID} int outer -1 
        } else /if ((!${waitTimer${tempID}} && ( ${maloTimer${mobID}} || ${waitTimer${mobID}} ) ) || ${tempID}==${mobID}) { 
          /call UpdateMobList 
          /target id ${tempID} 
          /call Malo 
        } 
      } 
    /next i 
  }
/return 

Sub Malo 
   /declare tempID int local ${Target.ID} 
   /if ( !${Defined[maloResists${tempID}]} ) /declare maloResists${tempID} int outer 0 
   /if ( ${maloResists${tempID}}==${resistsTillMala} ) /call Cast "${malaSpell}" ${malaType} 5s CheckPet 
   /if ( ${maloResists${tempID}}==${resistsTillQuit} ) { 
      /deletevar maloTimer${tempID} 
      /declare maloTimer${tempID} int outer -1 
      /return 
   } 
   /call Cast "${malosiniaSpell}" ${malosiniaType} 0 CheckPet 
   /if ( !${Defined[maloTimer${tempID}]} ) /declare maloTimer${tempID} timer outer 
   /if ( ${Macro.Return.Equal[CAST_SUCCESS]} ) { 
      /varset maloTimer${tempID} 25m | ${maloDuration} 
      /varset maloResists${tempID} 0 
   } else /if ( ${Macro.Return.Equal[CAST_OUTOFMANA]} || ${Macro.Return.Equal[CAST_OUTOFRANGE]} || ${Macro.Return.Equal[CAST_CANNOTSEE]} ) { 
      /varset maloTimer${tempID} 50      
   } else { 
      /if ( ${Macro.Return.Equal[CAST_RESISTED]} ) /varcalc maloResists${tempID} ${maloResists${tempID}}+1 
      /varset maloTimer${tempID} 1 
   } 
/return ${Macro.Return} 



Sub CheckPet 
/doevents
 /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   /if ( ${Zone.ID}!=${currentZone} ) { 
      /varset currentZone ${Zone.ID} 
      /varset mobList 
      /varset addList 
      /varset buffQueue 
      /varset mobID 0 
      /varset petID 0 
|      /squelch alert clear 6 
      /call ClearMobList  
   } 
   /call CheckForAdds 
   /declare i int local 
   /declare tempID int local 
   /if ( ${petOff} && ${Me.Pet.ID} ) { 
      /varset petOff 0 
   } 
   /if ( ${Spawn[${petID}].Type.Equal[NPC]} && !${petOff} ) { 
      /echo Pet Off!
      /echo Pet Off!
      /varset petAttacking false 
      /varset petOff 1 
   }
   /if ( ${petOff} && ${Me.Casting.ID} && !( ${Me.Casting.Name.Equal[malosinia]} && ${Target.ID}==${petID} ) && !${Me.Casting.Name.Equal[Elemental Silence]} && !${Me.Casting.Name.Equal[call of the arch mage]} ) /call Interrupt 
   /doevents gate 
   /doevents rageon 
   /doevents rageoff 
   /doevents setvar 
   /if ( ${castWaitTime}>5 ) /doevents chat 
/return 

Sub CheckRods
  /varset MacroState CheckRods

  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez

  /if ( ${useMount} && !${Me.Mount.ID} ) /call CastItemClicky "${mountItem}"  
  /if ( ${Me.AltAbility[Elemental Form: Water]} && !${Me.State.Equal[MOUNT]} && !${Me.Buff[Elemental Form: Water].ID}) /call Cast "Elemental Form: Water" alt 

  /if (!${FindItem[${ParadoxRodName}].ID} && ${Me.PctMana}>=10) {
    /target id ${Me.ID}
    /delay 1s ${Target.ID}==${Me.ID}
    /echo Casting a new Nuke Rod ${ParadoxRodName} - ${Bool[${FindItem[${ParadoxRodName}]}]}
    /call Cast "${ParadoxSpell}" ${ParadoxSpellType}
  }
  /if (!${FindItem[${OrbName}].ID} && ${Me.PctMana}>=10) {
    /target id ${Me.ID}
    /delay 1s ${Target.ID}==${Me.ID}
    /echo Casting a new Nuke Orb ${OrbName} - ${Bool[${FindItem[${OrbName}]}]}
    /call Cast "${OrbSpell}" ${OrbSpellType}
  }
  /if (${Cursor.ID}) {
    /autoinventory
    /delay 2s !${Cursor.ID}
  }

  /if (!${FindItem[${ModRodName}].ID}) {
    /echo I need a mod rod. FindItem[${ModRodName}]: ${FindItem[${ModRodName}].ID}
    /target id ${Me.ID}
    /delay 10s ${Target.ID}==${Me.ID}
    /alt activate 598
    /delay 2s ${Me.Casting.ID}
    /delay 10s !${Me.Casting.ID}
    /delay 20s ${Cursor.Name.Equal[${ModRodName}]}
    /if (${Cursor.Name.Equal[${ModRodName}]}) /autoinventory
  }
  /if (${Cursor.ID}) {
    /autoinventory
    /delay 20s !${Cursor.ID}
  }

  /if (!${FindItem[${SelfRodName}].ID} && !${Cursor.Name.Equal[${SelfRodName}]}) {
    /call Cast "${SelfRodSpell}" gem6
    /delay 2s ${Cursor.Name.Equal[${SelfRodName}]}
  }
  /if (${Cursor.ID}) {
    /autoinventory 
    /delay 2s !${Cursor.ID}
  }
  /if (${Me.PctMana}<20 && ${Me.AltAbilityReady[Mana Reserve]}) /alt act 2065
  /if (${FindItem[${ModRodName}].ID} && !${FindItem[${ModRodName}].Timer} && ${Me.PctHPs}>50 && ${Me.PctMana}<=90) { 
    /echo Need mana BISHES!!! clicking ${ModRodName}
    /call CastItemClicky "${ModRodName}"
  }
  /if (${FindItem[${SelfRodName}].ID} && !${FindItem[${SelfRodName}].Timer} && ${Me.PctHPs}>50 && ${Me.PctMana}<=80) { 
    /call CastItemClicky "${SelfRodName}"
  }
  /if (${Me.SpellReady[${ThaumatizeSpell}]} && ${Me.PctMana}<=80) /call Cast "${ThaumatizeSpell}" gem8
  /if (${Me.SpellReady[${GatherSpell}]} && ${Me.PctMana}<=70) /call Cast "${GatherSpell}" gem12
/return

Sub CheckPetBuffs 
/if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
    /if ( ${Me.Pet.Body.ID}==31 ) /pet get lost
   /if (${Me.Pet.ID} && !${Me.PetBuff[${auraName} Effect]} && ${auraName.Equal[Rathe's Strength]}) /call cast "${auraBuff}" ${auraBuffGem} 
   /if ( !${petID} && ${Me.Pet.ID} ) /varset petID ${Me.Pet.ID}
   /if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400 ) /call SumPet 
   
      /if ( ${Me.Pet.ID} ) { 
	      /if ( !${Me.Aura[1].Equal[${auraName}]} ) /call cast "${auraName}" ${auraBuffGem}
              /delay 5s !${Me.Casting.ID}
            /if ( !${Me.PetBuff[${petHaste}]} && !${Me.PetBuff[call of the arch mage]} && ${Me.Pet.Distance3D}<=100 ) /call Cast "${petHaste}" ${petHasteType} 2s 
			 /delay 5s !${Me.Casting.ID}
   /if ( !${Target.ID} && !${Me.Buff[${SiphonBuffName}].ID} && !${Me.PetBuff[call of the arch mage]} && !${Me.Buff[Mental Vivisection Recourse].ID} && !${Me.Buff[Mental Vivisection Recourse Rk. II].ID} && !${Me.Buff[Mental Vivisection Recourse Rk. III].ID} && !${Me.Buff[Mind Decomposition Recourse].ID} && !${Me.Buff[Mind Decomposition Recourse Rk. II].ID} && !${Me.Buff[Mind Decomposition Recourse Rk. III].ID} && ${Me.Pet.ID} && ${Me.Pet.Distance3D}<=100 && ${Me.Book[${siphonSpell}]} ) /call cast "${siphonSpell}" gem8 0 CheckPet 

      /if ( !${Me.PetBuff[${PetProc}]} && !${Me.PetBuff[call of the arch mage]} ) /call cast "${PetProc}" gem8 2s
	       /delay 5s !${Me.Casting.ID}
      /if ( !${Me.PetBuff[Grounded Stance]} && !${Me.PetBuff[${PetRune}]} && ${PetTank} && ${Me.SpellReady[${PetRune}]}) /call cast "${PetRune}" gem6 2s
	       /delay 5s !${Me.Casting.ID}
      /if ( !${Me.PetBuff[Elemental Conjunction]} && !${Me.PetBuff[Primal Fusion]} && !${FindItem[${EpicClick}].Timer} && ${FindItem[${EpicClick}].ID}) /call CastItemClicky "${EpicClick}"
	           /delay 5s !${Me.Casting.ID}
      /if ( !${Me.PetBuff[${PetBlock}]} && ${PetTank} ) /call cast "${PetBlock}" gem9 2s
	           /delay 5s !${Me.Casting.ID}
  } 
      /if ( ${Target.Name.Equal[${Me.Pet.Name}]} ) { 
      /if ( ${Spawn[${oldTarget}].ID} && ${Spawn[${oldTarget}].Dead} ) { 
         /target id ${oldTarget} 
      } else { 
         /keypress clear_target 
      } 
   } 
/return 

Sub CheckForAdds 
:check_add_loop 
/doevents
   /if ( !${Spawn[${mobID}].Type.Equal[npc]} && !${Spawn[${mobID}].Type.Equal[pet]} ) { 
      /varset addIndex 1 
      /return 
   } 
   /varset addID ${NearestSpawn[${addIndex},npc radius ${minRadius}].ID} 
   /if ( ${addID} ) { 
      /if ( ${Spawn[${addID}].Distance3D}<=${minRadius} && ${addID}!=${petID} && ${Spawn[${addID}].LineOfSight} && ${aggroAnim.Find[|${Spawn[${addID}].Animation}|]} && ${mezTimer${addID}}!=-1 && ${Spawn[${addID}].Type.Equal[NPC]} ) { 
         /call AddToList mobList ${addID} 
         /if ( ${Macro.Return.Equal[1]} ) { 
            /if ( !${Defined[waitTimer${addID}]} ) /declare waitTimer${addID} timer outer ${engageDelay} 
            /echo Add detected! >> ${Spawn[${addID}].DisplayName} << 
         } 
         /varset newAdds 1 
      } 
      /varcalc addIndex ${addIndex}+1 
   } else { 
      /varset addIndex 1 
   } 
/return 

Sub SumPet 
  /declare i int local 
  /varset petAttacking false 
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   
  /if ( ${Me.AltAbilityReady[suspended minion]} ) /call Cast "suspended minion" alt 2s 
  /delay 1s ${Me.Pet.ID} 
  /echo #######
  |/if (${Me.Pet.ID}) /return
  /echo !!!!
  /if (!${Me.Pet.ID}) { 
    /if (${PetType.Equal[air]} || ${PetType.Equal[wind]}) /call cast "${windPet}" gem6 5s 
    /if (${PetType.Equal[ear]} || ${PetType.Equal[earth]}) /call cast "${earthPet}" gem6 5s
    /if (${PetType.Equal[wat]} || ${PetType.Equal[water]}) /call Cast "${waterPet}" gem6 5s
    /if (${PetType.Equal[fir]} || ${PetType.Equal[fire]}) /call Cast "${firePet}" gem6 5s
  } 
  /delay 10s !${Me.Casting.ID}
  /if ( ${Me.State.Equal[COMBAT]} && ${Me.Pet.ID} ) {
    /pet attack
    /varset petAttacking true
    /return
  }
  /echo FFFFFFF
  /if (${Me.Pet.ID}) {
    /tar id ${Me.Pet.ID}
    /delay 5
    /echo WEAPS!!
    |/call SumWeps
    /call Cast "${petShrinkSpell}" ${petShrinkType} 3s 
    /call Cast "${petShrinkSpell}" ${petShrinkType} 3s 
    /pet ghold on
  }
/return 

Sub CastItemClicky(string sItemClicky)
  /declare OldItem string local
  /echo Need to cast ${sItemClicky} and its Worn ${FindItem[${sItemClicky}].EffectType.Equal[Click Worn]}
  /if (${FindItem[${sItemClicky}].EffectType.Equal[Click Worn]} && ${FindItem[${sItemClicky}].InvSlot}) {
    /varset OldItem ${Me.Inventory[${FindItem[${sItemClicky}].WornSlot[1].ID}].Name}
    /exchange "${sItemClicky}" ${FindItem[${sItemClicky}].WornSlot[1].ID}
    /nomodkey /itemnotify ${FindItem["${sItemClicky}"].InvSlot} rightmouseup
    /delay ${FindItem[${sItemClicky}].CastTime}s
    /timed 10 /exchange "${OldItem}" ${FindItem[${OldItem}].WornSlot[1].ID}
    /delay 5s ${Me.Inventory[${FindItem[${OldItem}].WornSlot[1].ID}].Name.Equal[${OldItem}]}
  } else {
    /nomodkey /itemnotify ${FindItem[${sItemClicky}].InvSlot} rightmouseup
    /delay ${FindItem[${sItemClicky}].CastTime}s
  }
/return

Sub SumWeps
  /varset MacroState SumWeps
  /return
  /echo Entering SumWeps
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
  /if (${Target.ID}!=${Me.Pet.ID}) /target id ${Me.Pet.ID}
  /if (${Target.Type.NotEqual[pet]} || !${UseSummonWeps}) /return

  /if (${UseSummonWeps} && !${FindItem[Pouch of Quellious].InvSlot} && ( ${PetType.Find[wat]} || ${PetType.Find[water]} || ${PetType.Find[ear]} || ${PetType.Find[earth]} ) ) {
    /target ${Me}
    /delay 3 ${Me.ID}==${Target.ID}
    /call Cast "${summonedWepSpell}" ${summonedWepType} 4s
    /delay 4s ${Cursor.ID}
    /autoinventory
    /delay 1s
    /exchange "Folded Pack of Manaforged Armaments" pack9
    /delay 1s
    /if (${Cursor.ID}) /autoinventory
    /if (!${FindItem[Folded Pack of Manaforged Armaments].InvSlot}) {
      /delay 1s
      /return
    }
    /nomodkey /itemnotify ${FindItem[Folded Pack of Manaforged Armaments].InvSlot} rightmouseup
    /delay 1s
    /delay 10s !${Me.Casting.ID}
    /delay 10s ${Cursor.ID}
    /autoinventory
    /delay 4s ${FindItem[Pouch of Quellious].InvSlot}
    
    /if ( ${PetType.Find[wat]} || ${PetType.Find[water]} ) {
      /nomodkey /itemnotify ${FindItem[Pouch of Quellious].InvSlot} rightmouseup
      /delay 1s
      /nomodkey /itemnotify ${FindItem[Summoned: Manaforged Iceblade].InvSlot} leftmouseup
      /echo Giving Manaforged Iceblade to pet
      /delay 3s
      /call GiveToPet
      /delay 2s
      /nomodkey /itemnotify ${FindItem[Summoned: Manaforged Mindblade].InvSlot} leftmouseup
      /delay 1s
      /call GiveToPet
      /delay 2s
      /nomodkey /itemnotify ${FindItem[Pouch of Quellious].InvSlot} leftmouseup
      /delay 1s
      /if ( ${Cursor.Name.Equal[Pouch of Quellious]} ) /destroy
  } else {
    /if ${UseSummonWeps} && ( ${PetType.Find[ear]} || ${PetType.Find[earth]} ) ) {
      /declare i int local
      /nomodkey /itemnotify ${FindItem[Pouch of Quellious].InvSlot} rightmouseup
      /echo opening bag!!
      /for i 1 to 2
        /delay 1s
        /nomodkey /itemnotify ${FindItem[Summoned: Manaforged Ragesword].InvSlot} leftmouseup
        /delay 1s
        /call GiveToPet
        /delay 2s
      /next i
      /nomodkey /itemnotify ${FindItem[Pouch of Quellious].InvSlot} leftmouseup
      /delay 1s
      /if ( ${Cursor.Name.Equal[Pouch of Quellious]} ) /destroy
    }
  }
/return     

Sub GiveToPet
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
  /declare i int local
  /varset i 1
  
  /echo Giving weapon to pet
  
  /if (${Target.ID}!=${Me.Pet.ID}) {
    /echo Targeting pet!
    /target id ${Me.Pet.ID}
    /delay 1s ${Target.ID}==${Me.Pet.ID}
  }
  :give_item
   /delay 5 ${Cursor.ID}
   /if (${Cursor.ID} && !${Window[GiveWnd].Child[GVW_MyItemSlot3].Tooltip.Length}>0 && ${Me.Pet.ID}) {
     /if ( ${Cursor.Name.Find[summoned:]} ) {
       /echo HERE!!!
       /nomodkey /click left target
       /delay 1s ${InvSlot[trade${i}].Item.ID}
     } else {
       /autoinventory
     }
     /goto :give_item
   }
  
  /for i 0 to 3
    /if (${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.Length}>0 && !${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.Find[Summoned:]}) {
      /echo yyyyy
      /notify GiveWnd GVW_Cancel_Button leftmouseup
    }
  /next i

  /if ( ${Window[GiveWnd].Open} ) {
    /echo zzzzzz
    /notify GiveWnd GVW_Give_Button leftmouseup
    /delay 5s !${Window[GiveWnd].Open}
  }
  /if ( ${Window[InventoryWindow].Open} ) /keypress inventory
/return 

Sub Event_RageOn(string line) 
   /declare tempID int local ${Target.ID} 
   /if ( ${Spawn[${mobID}].ID} ) /varset tempID ${mobID} 
   /if ( ${line.Find[${Spawn[${tempID}].DisplayName}]} && ${Me.Pet.ID} ) { 
      /echo calling off pet... 
      /pet back off 
   } 
/return 

Sub Event_RageOff(string line) 
   /declare tempID int local ${Target.ID} 
   /if ( ${Spawn[${mobID}].ID} ) /varset tempID ${mobID} 
   /if ( ${line.Find[${Spawn[${tempID}].DisplayName}]} && ${Me.Pet.ID} ) { 
      /target id ${tempID} 
      /pet attack 
   } 
/return 

Sub Event_Gate(string line) 
   /if ( ${line.Find[${Spawn[${mobID}].DisplayName}]} && ${Me.Pet.ID} ) { 
      /varset mobID 0 
   } 
/return 


Sub Event_Coth(string line,string sender,string name) 
   /if ( !${Defined[name]} ) /declare name string local 
   /declare i int local 
   /declare inGroup bool local false 
   /if ( !${Spawn[pc ${name}].ID} ) { 
      /if ( ${Spawn[pc ${sender}].ID} ) { 
         /varset name ${sender} 
      } else { 
         /return 
      } 
   } 
   /for i 1 to 5 
      /if ( ${Group[${i}].Name.Find[${name}]} ) /varset inGroup true 
   /next i 
   /if ( ${inGroup} ) { 
      /call AddToQueue "coth,${name}" 
   } else /if ( ${Group.Leader.ID}==${Me.ID} ) { 
      /target pc ${name} 
      /keypress invite_follow 
      /delay 5s ${Group[1].Name.Equal[${name}]} || ${Group[2].Name.Equal[${name}]} || ${Group[3].Name.Equal[${name}]} || ${Group[4].Name.Equal[${name}]} || ${Group[5].Name.Equal[${name}]} 
      /for i 1 to 5 
         /if ( ${Group[${i}].Name.Equal[${name}]} ) /varset inGroup true 
      /next i 
      /if ( ${inGroup} ) /call AddToQueue "coth,${name}" 
   } 
/return 

Sub Event_Timer(string timerName,int timerValue) 
   /if ( !${Defined[${timerName}]} ) /return 
   /declare tempID int local 0 
   /declare oldTargetID int local ${Target.ID} 
   /if ( ${timerName.Left[9].Equal[maloTimer]} ) { 
      /varset tempID ${timerName.Right[-9]} 
      /if ( ${Spawn[${tempID}].Type.Equal[NPC]} ) { 
         /target id ${tempID} 
         /call Malo 
      } else { 
         /deletevar ${timerName} 
      } 
   } else { 
      /return ${Macro.Return} 
   } 
   /if ( ${Target.ID}==${tempID} ) { 
      /if ( ${Spawn[${oldTargetID}].ID} ) { 
         /target id ${oldTargetID} 
      } else { 
         /keypress clear_target 
      } 
   } 
/return ${Macro.Return} 

Sub Event_PetWeps(string line,string sender) 
/if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   /declare tempID int local ${Spawn[pc ${sender}].Pet.ID} 
   /if ( !${tempID} || ${Spawn[${tempID}].Distance3D}>250 || !${Spawn[${tempID}].LineOfSight} ) /return 
   /target id ${tempID} 
   /if ( ${Stick.Status.Length} ) { 
      /stick 10 
      /delay 5s ${Target.Distance3D}<=10 
   } else { 
      /declare tempTimer timer local 5s 
   :move_to_pet 
      /face fast nolook 
      /keypress forward hold 
      /if ( ${tempTimer} && ${Target.Distance3D}<=20 ) /goto :move_to_pet 
      /keypress forward 
   } 
   /call SumWeps 
   /if ( ${Spawn[pc ${followName} radius 150].ID} && ${Stick.Status.Equal[off]} ) { 
      /target pc ${followName} 
      /stick hold 10 
   } 
/return

Sub Event_PetType(string line,string pet)
/echo set: PetType ${pet}
/return

|**Sub Event_SetVar(string line,string varName,string value)
   /if ( ${value.Equal[on]} ) /varset value 1
   /if ( ${value.Equal[off]} ) /varset value 0
   /if ( ${value.Equal[fir]} && ${PetType.Equal[fir]} || ${value.Equal[fire]} && ${PetType.Equal[fire]} ) /return
   /if ( ${value.Equal[wat]} && ${PetType.Equal[wat]} ||  ${value.Equal[water]} && ${PetType.Equal[water]}  ) /return
   /if ( ${value.Equal[air]} && ${PetType.Equal[air]} || ${value.Equal[wind]} && ${PetType.Equal[wind]}) /return
   /if ( ${value.Equal[ear]} && ${PetType.Equal[ear]} || ${value.Equal[earth]} && ${PetType.Equal[earth]}) /return
   /if ( ${Defined[${varName}]} && ${value.Equal[ear]} || ${value.Equal[air]} || ${value.Equal[wat]} || ${value.Equal[fir]} ||  ${value.Equal[earth]} || ${value.Equal[wind]} || ${value.Equal[water]} || ${value.Equal[fire]} ) {

       /varset ${varName} ${value}
       /popup ${varName} is set to ${value} now.
	   /ini "${iniName}" Settings ${varName} "${value}"
      /return
}  else /if ( ${Defined[${varName}]} && !${varName.Equal[PetType]} ) {
      /varset ${varName} ${value}
     /popup ${varName} is set to ${value} now.
      /ini "${iniName}" Settings "${varName.Left[1].Upper}${varName.Right[-1]}" "${value}"
	  /echo part2,  /ini "${iniName}" Settings "${varName.Left[1].Upper}${varName.Right[-1]}" "${value}"
   }
/return**|

Sub Event_Invite(string line,string sender)
/if (${announce}) /echo i've been invited by ${sender}
/declare Master string local
/varset Master ${Ini[${iniName},Settings,MasterList,NOTFOUND]}
/if (${Master.Find[${sender}]}) /squelch /invite
/return


Sub Event_UnstableCharge(string line, string sender)
/rs ${sender} needs Cure!
/return

Sub Event_Burninate
  /call NamedBurn
/return

Sub NamedBurn
  /varset OldState ${MacroState}
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
  /varset MacroState NamedBurn
  /echo Named is here, Burn Baby Burn! Raging Pet away!
  /if ( ${Target.LineOfSight} && ${Target.Type.Equal[NPC]} ) {
    /declare MyTarget int local
    /varset MyTarget ${Target.ID}
    /pet attack
    /delay 1s
    /varset MacroState NamedBurnLoop
    :namedburnloop
     /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /return
     /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
     /if (!${Me.Pet.Target.ID} && ${Me.Pet.ID}) /pet attack
     /if (${Me.AltAbilityReady[Frenzied Burnout]}) {
       /echo Casting Frenzied Burnout
       /alt activate 60
       /delay 2.5s !${Me.Casting.ID}
     }
     /if (${Me.AltAbilityReady[621]}) {
       /echo Activating Fire Core
       /alt activate 621
       /delay 1s !${Me.AltAbilityReady[621]}
     }
     /if (${Me.AltAbilityReady[1370]}) {
       /echo Activating First Spire
       /alt activate 1370
       /delay 1s !${Me.AltAbilityReady[1370]}
     }
     /if (${Me.AltAbilityReady[774]}) {
       /echo Activating ${Me.AltAbility[774].Name}
       /alt activate 774
       /delay 1s !${Me.AltAbilityReady[774]}
     }
     /if (${Me.AltAbilityReady[323]}) {
       /echo Activating ${Me.AltAbility[323].Name}
       /alt activate 323
       /delay 1s !${Me.AltAbilityReady[323]}
     }
     /if (${Me.AltAbilityReady[Glyph of the Cataclysm]})  /alt activate ${Me.AltAbility[Glyph of the Cataclysm].ID}
     /if (${Me.AltAbilityReady[500]}) {
       /echo Activating Silent Casting
       /alt activate 500
       /delay 3s !${Me.Casting.ID}
     }
     /if (${Me.SpellReady[${TwincastSpell}]}) {
       /casting "${TwincastSpell}" gem0 2s CheckEvents
     } else /if (${Me.AltAbilityReady[515]} && ${Me.Buff[${TwincastSpell}].ID} && !${Me.SpellReady[${TwincastSpell}]}) {
       /echo Activating Improved Twincast
       /alt activate 515
       /delay 1s !${Me.AltAbilityReady[515]}
     }
     /if ( ${Me.CurrentMana}>=${Spell[${manyNuke}].Mana} && ${Me.SpellReady[${manyNuke}]}) /call CastNuke "${manyNuke}" "gem1" ${Target.ID} CheckEvents
     /if (!${Me.SpellReady[${ServantNuke}]} && ${Me.SpellReady[${BurnNuke1}]} && !${Me.SpellReady[${BurnNuke2}]} && !${Me.SpellReady[${BurnNuke3}]}) /call CheckRods
     /if (${Me.SpellReady[${BurnNuke1}]} && ${Me.CurrentMana}>=${Spell[${BurnNuke1}].Mana}) /call CastNuke "${BurnNuke1}" "gem1" ${Target.ID} CheckEvents
     /if (${Me.SpellReady[${BurnNuke2}]} && ${Me.CurrentMana}>=${Spell[${BurnNuke2}].Mana}) /call CastNuke "${BurnNuke2}" "gem4" ${Target.ID} CheckEvents
     /if (${Me.SpellReady[${BurnNuke3}]} && ${Me.CurrentMana}>=${Spell[${BurnNuke3}].Mana}) /call CastNuke "${BurnNuke3}" "gem5" ${Target.ID} CheckEvents
     /if (${Target.ID}==${MyTarget} ) /goto :namedburnloop
  }
  /echo Named is toast, returning to ${OldState}
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
/return

Sub Event_FlameOfPower
  /if (${Me.GoM}) /call Event_GiftofMana
  /if (!${Me.Song[Flames of Power].ID}) /return
  /varset OldState ${MacroState}
  /varset MacroState FlameOfPower
  :stillhavepower
   /if ( !${Target.Type.Equal[NPC]} ) /return
   /if (${Me.Song[Flames of Power].ID} && ${Me.CurrentMana}>=${Spell[${nuke1}].Mana}) {
     /call CastNuke "${nuke1}" "gem1" ${Target.ID} CheckEvents
   }
   /if  (!${Target.ID}) /return
   /if (${Me.Song[Flames of Power].ID}) /goto :stillhavepower
   /echo Flame of Power Done returning to ${OldState}
   /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
/return

Sub Event_GiftOfMana
  /if (!${Me.GoM}) /return
  /if (${Target.ID} == ${Me.Pet.ID}) /target id ${mobID}
  /varset OldState ${MacroState}
  /varset MacroState GoMSub
  /echo GoM, Attempting to Send the Raging Pet or casting ${GoMNuke}!
  :StayInGoM
   /if (${Me.GoM} && !${ServantTimer} && ${Me.CurrentMana}>=${Spell[${ServantNuke}].Mana} ${UsePet}) {
     /call Cast "${ServantNuke}" gem5 2s CheckEvents
     /delay 5s !${Me.Casting.ID}
     /if (!${Me.SpellReady[${ServantNuke}]}) { 
       /varset ServantTimer 12s
       /varset ServantTimer2 12s
     }
   }
   /if (${Me.GoM} && ${Me.AltAbilityReady[Forceful Rejuvenation]} && ${ServantTimer}>=110 ) {
     /casting "Forceful Rejuvenation" alt 2s
     /varset ServantTimer 0s
   }
   /if (${Me.GoM} && ${ServantTimer}>=40 && ${Me.CurrentMana}>=${Spell[${GoMNuke}].Mana} && ${Me.SpellReady[${GoMNuke}]}) /call Cast "${GoMNuke}" gem2 2s CheckEvents
   /if (!${Target.Type.Equal[NPC]}) /return
   /if (${Me.CurrentMana}<${Spell[${ServantNuke}].Mana}) /call Cast "${GoMNuke}" gem2 2s CheckEvents
  /if (${Me.GoM} ) /goto :StayInGoM
  /echo GoM done returning to ${OldState}
  /if (${Me.State.Equal[Hover]} || ${Me.Dead}) /call Wait4Rez
/return

Sub event_nukebranch(Line, Command)
  /if (!${Command.Equal[fire]} && !${Command.Equal[bane]} && !${Command.Equal[magic]} && !${Command.Equal[rain]} && !${Command.Equal[beam]} && !${Command.Equal[standard]} && !${Command.Equal[offtank]}) {
    /echo Invalid selection. Valid options are Fire, Magic, Bane, Rain, Beam, or Standard (original style!) or offtank
    /return
  }
  /ini "${iniName}" Settings NukeBranch "${Command}"
  /varset NukeBranch ${Command}
  /call SpellBranch
  /echo Spellset changed to ${Command}
  /popup NukeBranch changed to ${Command}
/return

Sub SpellBranch
	/if (${NukeBranch.Equal[fire]}) {
		/echo nukes set to fire
        /varset NukeLine 1
		/call InitializeNukes
	}
	/if (${NukeBranch.Equal[magic]}) {
		/echo nukes set to magic
	    /varset NukeLine 2
		/call InitializeNukes
	}
	/if (${NukeBranch.Equal[bane]}) {
		/echo nukes set to bane
        /varset NukeLine 3
		/call InitializeNukes
	}
		/if (${NukeBranch.Equal[rain]}) {
		/echo nukes set to rain
        /varset NukeLine 4
		/call InitializeNukes
	}
		/if (${NukeBranch.Equal[beam]}) {
		/echo nukes set to beam
        /varset NukeLine 5
		/call InitializeNukes
	}
	/if (${NukeBranch.Equal[standard]}) {
		/echo nukes set to standard
        /varset NukeLine 6
		/call InitializeNukes
	}
	 /if (${NukeBranch.Equal[offtank]}) {
	 /echo Offtank Mode
	  /varset NukeLine 7
	 }
/return

Sub InitializeNukes
  /varset MacroState InitializeNukes
  /if (${NukeLine}==1 || ${NukeLine}==6) {
    /varset MacroState InitializeFireOrStandard
    /if (!${Me.Gem[${nuke1}]}) {
      /memspell 1 "${nuke1}"
      /delay 10s ${Me.Gem[${nuke1}]}
    }
    /if (!${Me.Gem[${nuke2}]}) {
      /memspell 4 "${nuke2}"
      /delay 10s ${Me.Gem[${nuke2}]}
    }	
    /if (!${Me.Gem[${nuke3}]}) {
      /memspell 5 "${nuke3}"
      /delay 10s ${Me.Gem[${nuke3}]}
    }
    /if (!${Me.Gem[${boltNuke}]}) {
      /memspell 2 "${boltNuke}"
      /delay 10s ${Me.Gem[${boltNuke}]}
    }
    /if ( !${Me.Gem[${ServantNuke}]} ) {
      /memspell 3 "${ServantNuke}"
      /delay 10s ${Me.Gem[${ServantNuke}]}
    }
    /if ( !${Me.Gem[${manyNuke}]} ) {
      /memspell 6 "${manyNuke}"
      /delay 10s ${Me.Gem[${manyNuke}]}
    }
    /return 
  }

  /if ( ${NukeLine}==2 ) {
    /varset MacroState InitializeMagic
    /if ( !${Me.Gem[${magicNuke}]} ) {
      /memspell 1 "${magicNuke}"
      /delay 10s ${Me.Gem[${magicNuke}]}
    }
    /if ( !${Me.Gem[${magicNuke2}]} ) {
      /memspell 4 "${magicNuke2}"
      /delay 10s ${Me.Gem[${magicNuke2}]}
    }	
    /if ( !${Me.Gem[${malosiniaSpell}]} ) {
      /memspell 5 "${malosiniaSpell}"
      /delay 10s ${Me.Gem[${malosiniaSpell}]}
    }
    /if ( !${Me.Gem[${ServantNuke}]} ) {
      /memspell 3 "${ServantNuke}"
      /delay 10s ${Me.Gem[${ServantNuke}]}
    }
    /return
  }
  /if ( ${NukeLine}==3 ) {
    /varset MacroState InitializeBane
    /if ( !${Me.Gem[${annihilateNuke}]} ) {
      /memspell 1 "${annihilateNuke}"
      /delay 10s ${Me.Gem[${annihilateNuke}]}
    }
    /if  !${Me.Gem[${annihilateNuke2}]} ) {
      /memspell 4 "${annihilateNuke2}"
      /delay 10s ${Me.Gem[${annihilateNuke2}]}
    }	
    /if ( !${Me.Gem[${malosiniaSpell}]} ) {
      /memspell 5 "${malosiniaSpell}"
      /delay 10s ${Me.Gem[${malosiniaSpell}]}
    }
    /if ( !${Me.Gem[${ServantNuke}]} ) {
      /memspell 3 "${ServantNuke}"
      /delay 10s ${Me.Gem[${ServantNuke}]}
    }
    /return
  }
  /if ( ${NukeLine}==4 ) {
    /varset MacroState InitializeRain
    /if ( !${Me.Gem[${rainNuke1}]} ) {
      /memspell 1 "${rainNuke1}"
      /delay 10s ${Me.Gem[${rainNuke1}]}
    }
    /if ( !${Me.Gem[${rainNuke2}]} ) {
      /memspell 4 "${rainNuke2}"
      /delay 10s ${Me.Gem[${rainNuke2}]}
    }	
    /if ( !${Me.Gem[${malosiniaSpell}]} ) {
      /memspell 5 "${malosiniaSpell}"
      /delay 10s ${Me.Gem[${malosiniaSpell}]}
    }
    /if ( !${Me.Gem[${ServantNuke}]} ) {
      /memspell 3 "${ServantNuke}"
      /delay 10s ${Me.Gem[${ServantNuke}]}
    }
    /return
  }
  /if ( ${NukeLine}==5 ) {
    /varset MacroState InitializeBeam
    /if ( !${Me.Gem[${BeamNuke}]} ) {
      /memspell 1 "${BeamNuke}"
      /delay 10s ${Me.Gem[${BeamNuke}]}
    }
    /if ( !${Me.Gem[${malosiniaSpell}]} ) {
      /memspell 5 "${malosiniaSpell}"
      /delay 10s ${Me.Gem[${malosiniaSpell}]}
    }
    /if ( !${Me.Gem[${ServantNuke}]} ) {
      /memspell 3 "${ServantNuke}"
      /delay 10s ${Me.Gem[${ServantNuke}]}
    }
    /return
  }
/return

Sub Irc
/Call DeclareIniVar IRCServer string Settings ""
/Call DeclareIniVar IRCChannel string Settings ""
   /if (!${Irc}) {
    /i quit
    /iconnect ${IRCServer} ${IRCCchannel} ${Me}
   /timed 30 /i join #${IRCChannel}
   /varset irctimer 30s
 }
   /return

Sub CheckEvents
  /if (${Target.Type.Equal[Corpse]}) /squelch /target clear
  /doevents
  /doevents IRC
  /doevents Chat
  /doevents tell
  /doevents CoH
  /if (${Me.Casting.ID} && !${Target.ID}) /call Interrupt
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
/return

Sub MageDPS
  /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
  /if ( ${Me.Song[Gift of Amazing Exquisite Radiant Mana].ID} ) /call Event_GiftOfMana
  /call CheckRods
  /varset MacroState MageDPS
  /call CheckEvents
  /varset MacroState MageTwinCastCheck
  /if ( ${Me.SpellReady[${TwincastSpell}]} && ${Me.PctMana}>=30 ) {
    /casting "${TwincastSpell}" gem10 2s CheckEvents
    /varset MacroState MageTwinCastCheckExit
  } else {
    /varset MacroState PetRejuv
    /if ( ${Me.Pet.PctHPs}<=95 && ${PetTank} && !${Me.PetBuff[${PetRenewalSpell}]} ) {
      /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s CheckEvents
      /varset MacroState PetRejuvExit
    } else {
      /varset MacroState CheckHealPet
      /if ( ${Me.Pet.PctHPs}<=60 && ${PetTank} ) {
        /call Cast "${PetHealSpell}" ${PetHealType} 2s CheckEvents
        /varset MacroState CheckHealPetExit
      } else {
        /varset MacroState IceSliver
        /if ( !${Me.SpellReady[${nuke2}]} && ${FindItem[${ParadoxRodName}].ID} && !${Bool[${FindItem[${ParadoxRodName}].Timer}]} ) {
          /echo Casting: ${ParadoxRodName} on >> ${Target.CleanName} <<
          /call PotionCast "${ParadoxRodName}" ${ParadoxPotionSlot}
          /varset MacroState IceSliverExit
        } else {
          /varset MacroState Annihilate
          /if ( !${Me.SpellReady[${nuke1}]} && !${Me.SpellReady[${nuke2}]} && ${Me.CurrentMana}>=${Spell[${nuke3}].Mana} && ${Me.SpellReady[${nuke3}]} ) /call CastNuke "${nuke3}" "gem5" ${Target.ID} CheckEvents
          /if ( ${Me.Gem[${annihilateNuke}]} && ${Me.CurrentMana}>=${Spell[${annihilateNuke}].Mana} && ${Me.SpellReady[${annihilateNuke}]} && ( ${Target.Body.ID}==24 || ${Target.Body.ID}==5 )) /call CastNuke "${annihilateNuke}" "gem5" ${Target.ID} CheckEvents
          /if ( ${Me.Gem[${annihilateNuke2}]} && !${Me.SpellReady[${annihilateNuke}]} && ${Me.SpellReady[${annihilateNuke2}]} && ( ${Target.Body.ID}==24 || ${Target.Body.ID}==5 )) /call Cast "${annihilateNuke2}" gem1 2s CheckEvents
          /if ( ${Me.CurrentMana}>=${Spell[${nuke1}].Mana} && ${Me.SpellReady[${nuke1}]}) /call Cast "${nuke1}" gem1 2s CheckEvents
          /varset MacroState AnnihilateExit
          /call CheckEvents
          /if ( !${Me.SpellReady[${nuke1}]} && ${Me.Gem[${nuke2}]} && ${Me.CurrentMana}>=${Spell[${nuke2}].Mana} && ${Me.SpellReady[${nuke2}]} && ( ${Target.Body.ID}!=24 || ${Target.Body.ID}!=5 )) /call CastNuke "${nuke2}" "gem5" ${Target.ID} CheckEvents
          /call CheckEvents
          /if ( ${Macro.Return.Equal[CAST_SUCCESS]} || ${Macro.Return.Equal[CAST_RESISTED]} ) { 
            /if ( ${nukeMode}==1 ) { 
              /varcalc nukeWaitMod 2*(90 - ${Me.PctMana}) 
            } else { 
              /varset nukeWaitMod 0                
            } 
            /if ( ${nukeDelay}>${nukeWaitMod} ) { 
              /varset nukeWaitTimer ${nukeDelay} 
            } else { 
              /varset nukeWaitTimer ${nukeWaitMod} 
            } 
          } 
        }
      } 
    }
  }
  /if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400 ) /call SumPet 
/return

Sub MagicBranch
  /varset MacroState Magic
  /declare MyTarget int local
  /varset MyTarget ${Target.ID}
  :KeepMagic
   /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
   /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   /call CheckRods
   /if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400 ) /call SumPet 
   /if (${Me.GoM}) /call Event_GiftOfMana
   /if (${Me.SpellReady[${TwincastSpell}]} && ${Me.PctMana}>=30) /casting "${TwincastSpell}" gem10 2s
   /if ( ${Me.Pet.PctHPs}<=95 && !${Me.PetBuff[${PetRenewalSpell}]} ) /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s CheckEvents
   /if ( ${dorain} && ${Target.ID}==${MyTarget} && ${Me.CurrentMana}>=${Spell[${rainNuke1}].Mana} && ${Me.SpellReady[${rainNuke1}]}) {
     /delay 2s ${Me.SpellReady[${rainNuke1}]}
     /call CastNuke "${rainNuke1}" "gem7" ${Target.ID} CheckEvents 
   }
   /if ( ${Me.Gem[${magicNuke}]} && ${Me.CurrentMana}>=${Spell[${magicNuke}].Mana} && ${Me.SpellReady[${magicNuke}]} ) /call CastNuke "${magicNuke}" "gem1" ${Target.ID} CheckEvents
   /delay 5s !${Me.Casting.ID}
   /if ( ${Me.Gem[${magicNuke2}]} && ${Me.CurrentMana}>=${Spell[${magicNuke2}].Mana} && ${Me.SpellReady[${magicNuke2}]} && !${Me.SpellReady[${magicNuke}]} ) /call CastNuke "${magicNuke2}" "gem2" ${Target.ID} CheckEvents
   /if ( ${Target.ID}==${MyTarget} ) /goto :KeepMagic
/return

Sub ForceOfElements
  /if (${Me.AltAbilityReady[Force of Elements]}) {
    /echo Casting Force of Elements on >> ${Target.CleanName} <<
    /call cast "Force of Elements" alt
  }
/return
   
Sub ParadoxRod
  /echo Casting ${ParadoxRodName} on >> ${Target.CleanName} <<
  /call PotionCast "${ParadoxRodName}" ${ParadoxPotionSlot}
  /doevents
  /delay 2s !${Me.Casting.ID}
/return
   
Sub FireBranch
  /declare MyTarget int local
  /varset MyTarget ${Target.ID}

  :KeepFireBranch
   /if (${NameList.Find[${Target.CleanName}]} && ${Target.PctHPs}<${WhenToBurn}) /call NamedBurn
   /if (${Me.State.Equal[Hover]} || ${Me.Dead} ) /call Wait4Rez
   /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
   /if (!${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400) /call SumPet 
   /if (${Me.GoM}) /call Event_GiftOfMana
   /if (${Me.Pet.Following.ID} && (${Math.Calc[${Target.Heading.DegreesCCW}-${Me.Pet.Heading.DegreesCCW}]}>90 || ${Math.Calc[${Target.Heading.DegreesCCW}-${Me.Pet.Heading.DegreesCCW}]}<-90 )) /multiline ; /face fast heading ${Math.Calc[${Target.Heading.DegreesCCW}-180]} ; /alt act 3816
   /varset MacroState FireBranch

   /if (!${FindItem[${ModRodName}].ID}) /call CheckRods
   /if ( !${Target.ID} ) /return
   /delay 2s !${Me.Casting.ID}

   /if ( !${ServantTimer2} && ${Me.CurrentMana}>=${Spell[${ServantNuke}].Mana} && ${Target.ID}==${MyTarget} ${UsePet}) {
     /echo tossing a servant, goodbye mobos.
     /delay 5s ${Me.SpellReady[${ServantNuke}]}
     /call Cast "${ServantNuke}" gem3 0s CheckEvents
     /delay 5s !${Me.Casting.ID}
     /if ( !${Me.SpellReady[${ServantNuke}]} ) {
       /varset ServantTimer 12s
       /varset ServantTimer2 12s
     }
   }

   /if (${Me.Pet.PctHPs}<=95 && !${Me.PetBuff[${PetRenewalSpell}]} && !${Me.Buff[Twincast Rk. III].ID}) /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s CheckEvents
   /if (${Me.GoM}) /call Event_GiftOfMana
   /doevents

   /if ( ${Spawn[${Target.ID}].NearestSpawn[6,pet radius 30].ID} && ${Me.CurrentMana}>=${Spell[${manyNuke}].Mana}) { 
     /if ( ${Me.CurrentMana}>=${Spell[${manyNuke}].Mana} && ${Me.SpellReady[${manyNuke}]} && ${Target.ID}==${MyTarget}) {
       /doevents
       /call CastNuke "${manyNuke}" "gem1" ${Target.ID} CheckEvents
     }
     /delay 5s !${Me.Casting.ID}
   } else {
     /if ( ${Me.CurrentMana}>=${Spell[${nuke1}].Mana} && ${Me.SpellReady[${nuke1}]} && ${Target.ID}==${MyTarget}) {
       /echo Casting ${nuke1} on >> ${Target.CleanName} <<
       /doevents
       /call CastNuke "${nuke1}" "gem1" ${Target.ID} CheckEvents
       /echo nuke1 ( ${nuke1} ) done
       /delay 5s !${Me.Casting.ID}
     }
   }
   /if (${Me.GoM}) /call Event_GiftOfMana

   /if (!${Target.ID}) /return

   /if ( ${Me.Gem[${nuke2}]} && ${Me.CurrentMana}>=${Spell[${nuke2}].Mana} && ${Me.SpellReady[${nuke2}]} && ${Target.ID}==${MyTarget} ) {
     /echo Casting ${nuke2} on >> ${Target.CleanName} <<
     /doevents
     /call CastNuke "${nuke2}" "gem2" ${Target.ID} CheckEvents
     /delay 5s !${Me.Casting.ID}
     /echo nuke2 ( ${nuke2} ) done
   }

   /if (!${Target.ID}) /return
   /if (${Me.GoM}) /call Event_GiftOfMana

   /if ( ${Me.CurrentMana}>=${Spell[${nuke3}].Mana} && ${Target.ID}==${MyTarget} && ${Me.SpellReady[${nuke3}]} ) {
     /echo Casting ${nuke3} on >> ${Target.CleanName} <<
     /doevents
     /call CastNuke "${nuke3}" "gem4" ${Target.ID} CheckEvents
     /delay 5s !${Me.Casting.ID}
     |/if (${Me.Pet.Following.ID} && (${Math.Calc[${Target.Heading.DegreesCCW}-${Me.Pet.Heading.DegreesCCW}]}>90 || ${Math.Calc[${Target.Heading.DegreesCCW}-${Me.Pet.Heading.DegreesCCW}]}<-90 )) /multiline ; /face fast heading ${Math.Calc[${Target.Heading.DegreesCCW}-180]} ; /alt act 3816
   }
   /if (!${Target.ID}) /return
   /if (${Me.GoM}) /call Event_GiftOfMana
   /doevents
   /if (${Me.Dead}) /call Wait4Rez
  /if (${Target.ID}==${MyTarget}) /goto :KeepFireBranch	   
/return

Sub BaneBranch
    /declare MyTarget int local
  /varset MyTarget ${Target.ID}
  /if ( ${Me.Song[Gift of Amazing Exquisite Radiant Mana].ID} ) /call Event_GiftOfMana
  :KeepBane
  /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
    /call CheckRods
  /varset MacroState BaneBranch
     /if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400 ) /call SumPet 
	 /if ( ( !${Target.Body.ID}==24 || !${Target.Body.ID}==5 ) ) /nukebranch fire
  /if ( ${Me.SpellReady[${TwincastSpell}]} && ${Me.PctMana}>=30 ) /casting "${TwincastSpell}" gem10 2s
  /if ( ${Me.Pet.PctHPs}<=95 && !${Me.PetBuff[${PetRenewalSpell}]} ) /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s CheckEvents
  /if ( ${Me.Gem[${annihilateNuke}]} && ${Me.CurrentMana}>=${Spell[${annihilateNuke}].Mana} && ${Me.SpellReady[${annihilateNuke}]} ) /call CastNuke "${annihilateNuke}" "gem1" ${Target.ID} CheckEvents
   /if ( ${Me.Gem[${annihilateNuke2}]} && ${Me.CurrentMana}>=${Spell[${annihilateNuke2}].Mana} && ${Me.SpellReady[${annihilateNuke2}]} ) /call CastNuke "${annihilateNuke2}" "gem4" ${Target.ID} CheckEvents
/if ( ${Target.ID}==${MyTarget} ) /goto :KeepBane
/return

Sub RainBranch
  /declare MyTarget int local
  /varset MyTarget ${Target.ID}
  :KeepRain
   /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
   /call CheckRods
   /if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400 ) /call SumPet 
   /if ( ${Me.GoM} ) /call Event_GiftOfMana
   /varset MacroState RainBranch
   /if ( ${Me.Pet.PctHPs}<=95 && !${Me.PetBuff[${PetRenewalSpell}]} ) /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s CheckEvents
   /if ( ${Me.Gem[${rainNuke1}]} && ${Me.CurrentMana}>=${Spell[${rainNuke1}].Mana} && ${Me.SpellReady[${rainNuke1}]} ) /call CastNuke "${rainNuke1}" "gem1" ${Target.ID} CheckEvents
   /if ( ${Me.Gem[${rainNuke2}]} && ${Me.CurrentMana}>=${Spell[${rainNuke2}].Mana} && ${Me.SpellReady[${rainNuke2}]} ) /call CastNuke "${rainNuke2}" "gem1" ${Target.ID} CheckEvents
    /if ( ${Target.ID}==${MyTarget} ) /goto :KeepRain
/return

Sub BeamBranch
  /declare MyTarget int local
  /varset MyTarget ${Target.ID}
  :KeepBeam
   /if (${Me.AltAbilityReady[Banestrike]}) /alt activate 15073
|  /call CheckBuffs
   /face fast
   /if (!${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400) /call SumPet  
   /if (${Me.GoM}) /call Event_GiftOfMana
   /varset MacroState BeamBranch
   /if ( ${Me.Pet.PctHPs}<=95 && !${Me.PetBuff[${PetRenewalSpell}]} ) /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s CheckEvents
   /if  ( ${Me.Gem[${BeamNuke}]} && ${Me.CurrentMana}>=${Spell[${BeamNuke}].Mana} && ${Me.SpellReady[${BeamNuke}]} ) /call CastNuke "${BeamNuke}" "gem1" ${Target.ID} CheckEvents
     /if ( ${Target.ID}==${MyTarget} &&  ${Target.ID}<>${Me.Pet.ID} ) /goto :KeepBeam
/return

Sub Offtank
:Offtank
/varset MacroState Offtank1
/if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=400 ) /call SumPet
/delay 5s !${Me.Casting.ID}
/delay 2s ${Me.SpellReady[${PetRenewalSpell}]}
/if ( !${Me.PetBuff[${PetRenewalSpell}]} ) /call Cast "${PetRenewalSpell}" ${PetRenewalType} 2s
/delay 5s !${Me.Casting.ID}
/delay 2s ${Me.SpellReady[${PetHealSpell}]}
/if ( ${Me.Pet.PctHPs} <= 99 ) /call Cast "${PetHealSpell}" gem5 2s
/delay 5s !${Me.Casting.ID}
/delay 2s ${Me.SpellReady[${PetRune}]}
/if ( !${Me.PetBuff[${PetRune}]} ${Me.Pet.PctHPs} >= 50) /call Cast "${PetRune}" gem6 2s
/delay 5s !${Me.Casting.ID}
/delay 2s ${Me.SpellReady[${PetBlock}]}
/if ( !${Me.PetBuff[${PetBlock}]} && ${Me.Pet.PctHPs} >= 80) /call Cast "${PetBlock}" gem9 2s
/delay 5s !${Me.Casting.ID}
      /if ( !${Me.PetBuff[Elemental Conjunction]} && !${Me.PetBuff[Primal Fusion]} && !${FindItem[${EpicClick}].Timer} && ${FindItem[${EpicClick}].ID}) /call CastItemClicky "${EpicClick}"
	           /delay 5s !${Me.Casting.ID}
/varset MacroState Offtank2
/if ( (${Me.Pet.ID} && ${Me.Pet.Following.ID}) || !${Me.Pet.ID} ) /goto :Offtank
/return

Sub PotionCast(string ItemName, int Slot)
/varset MacroState PotionCast
/if ( !${Defined[CastSlot]} ) /declare CastSlot int local ${Slot}
/varcalc Slot (${Slot}-1)
 /if ( ${Window[PotionBeltWnd].Child[PW_PotionSlot${Slot}_Button].Tooltip.Equal[${ItemName}]} && !${Bool[${FindItem[${ItemName}].Timer}]} && ${Bool[${FindItem[${ItemName}]}]}) /potionbelt Activate ${CastSlot}
/return

Sub IniDeclares   
/Call DeclareIniVar UseIRC string Settings 0
/if (${UseIRC}) /call Irc
   /Call DeclareIniVar UseIRC string Settings 0
   
   /Call DeclareIniVar mychannel string Settings "" /mychannel
   /Call DeclareIniVar MasterList string Settings ""
   /Call DeclareIniVar announce int Settings 0 /useannounce
   /call DeclareIniVar WhenToBurn int Settings 80 /burn
   /call DeclareIniVar dorain int Settings 0 /dorain
   /call DeclareIniVar DoLeash int Settings 0
   /call DeclareIniVar useEpic int Settings 1
   /call DeclareIniVar MainAssist string Settings /setma
   /call DeclareIniVar secondAssist string Settings /setsa
   /call DeclareIniVar minRadius int Settings 150 /radius 
   /call DeclareIniVar engageDelay int Settings 55 /engagedelay 
   /call DeclareIniVar minHP int Settings 95 /minhp 
   /call DeclareIniVar autosit int Settings 1
   /call DeclareIniVar autoBuff int Settings 1 /buff 
   /call DeclareIniVar useMount int Settings 1 /mount 
   /call DeclareIniVar useDebuff int Settings 1 /debuff 
   /call DeclareIniVar nukeMode int Settings 1 /nuke 
   /call DeclareIniVar useCharm int Settings 0 /charm 
   /call DeclareIniVar useDPS int Settings 0 /dps 
   /call DeclareIniVar usePet int Settings 1 /companion 
   /call DeclareIniVar privateChannel string Settings "/echo" 
   /call DeclareIniVar channelAnnounce int Settings 1 
   /call DeclareIniVar autoAnnounce string Settings 1  
   /call DeclareIniVar noInterrupt int Settings 0 
   /call DeclareIniVar useManaStone int Settings 0 
   /call DeclareIniVar checkNamed int Settings 0 /checknamed 
   /call DeclareIniVar noInvis int Settings 1 
   /call DeclareIniVar useManaRobe int Settings 0 
   /call DeclareIniVar manaRobeMode int Settings 0 
   /call DeclareIniVar manaRobeMinMana int Settings 10 
   /call DeclareIniVar manaRobeMaxMana int Settings 94 
   /call DeclareIniVar nukeMana int Settings 25 /nukemana 
   /call DeclareIniVar nukeDelay int Settings 10 /nukedelay 
   /call DeclareIniVar nukeMode int Settings 1 /nukemode 
   /call DeclareIniVar ignoreList string Settings 
   /call DeclareIniVar runeHP int Settings 70 
   /call DeclareIniVar cleanUp int Settings 0 /cleanup 
   /call DeclareIniVar useGroupDS int Settings 0 /ds    
   /call DeclareIniVar clarityBitch string Settings 
   /call DeclareIniVar spellSet string Settings "default" 
   /call DeclareIniVar maloDuration string Settings 19m 
   /call DeclareIniVar resistsTillMala int Settings 3 
   /call DeclareIniVar resistsTillQuit int Settings 4 
   /call DeclareIniVar NukeBranch string Settings "fire"
   /call DeclareIniVar UseSummonWeps string Settings "1"   
   /call DeclareIniVar usegroupchat string Settings "1"
   /call DeclareIniVar DoLoot int Settings "1" /doloot
   /call DeclareIniVar MezSpellList string Settings "Befuddle rk. ii"

   /call DeclareIniVar nuke1 string Spells "Fickle Blaze Rk. II" /nuke1
   /call DeclareIniVar nuke2 string Spells "Torrid Sands Rk. II" /nuke2
   /call DeclareIniVar nuke3 string Spells "Jolt of Many Rk. III" /nuke3
   /call DeclareIniVar BurnNuke1 string Spells "Spear of Blistersteel" /burnnuke1
   /call DeclareIniVar BurnNuke2 string Spells "Spear of Molten Steel" /burnnuke2
   /call DeclareIniVar BurnNuke3 string Spells "Bolt of Molten Magma" /burnnuke3
   /call DeclareIniVar magicNuke string Spells "Shock of Cineral Steel Rk. II" 
   /call DeclareIniVar magicNuke2 string Spells "Shock of Discordant Steel Rk. III"
   /call DeclareIniVar fireNuke string Spells "Fickle Blaze Rk. II" 
   /call DeclareIniVar boltNuke string Spells "Bolt of Molten Scoria Rk. II"
   /call DeclareIniVar manyNuke string Spells "Jolt of Many Rk. III"
   /call DeclareIniVar rainNuke1 string Spells "Deluge of Thunderbolts Rk. II"
   /call DeclareIniVar rainNuke2 string Spells "Shock of Discordant Steel Rk. II"
   /call DeclareIniVar FireRainNuke string Spells "Rain of molten Scoria Rk. II"
   /call DeclareIniVar BeamNuke string Spells "Beam of Molten Scoria Rk. II" 
   /call DeclareIniVar annihilateNuke string Spells "Annihilate the Anomalous"
   /call DeclareIniVar annihilateNuke2 string Spells "Annihilate the Aberrant"
   /call DeclareIniVar ServantNuke string Spells "Rumbling Servant Rk. II"
   /call DeclareIniVar shielding string spells "Prime Shielding Rk. II"
   /call DeclareInivar GoMNuke string Spells "Bolt of Molten Scoria Rk. II"

   /call DeclareIniVar windPet string Spells "Aspect of Air" 
   /call DeclareIniVar earthPet string Spells "Aspect of Earth" 
   /call DeclareIniVar firePet string Spells "Aspect of Fire" 
   /call DeclareIniVar waterPet string Spells "Aspect of Water" 

   /call DeclareIniVar malosiniaSpell string Spells "Malosenea Rk. II" 
   /call DeclareIniVar malosiniaType string Spells "gem6" 
   /call DeclareIniVar malaSpell string Spells "Malosinia" 
   /call DeclareIniVar malaType string Spells "item" 
   /call DeclareIniVar summonedWepSpell string Spells "Summon Prime Armaments" 
   /call DeclareIniVar summonedWepType string Spells "gem8" 
   /call DeclareIniVar summonedBeltSpell string Spells "Summon Plate of the Prime" 
   /call DeclareIniVar summonedBeltType string Spells "gem8" 
   /call DeclareIniVar summonedMaskSpell string Spells "Muzzle of Mardu" 
   /call DeclareIniVar summonedMaskType string Spells "gem8" 
   /call DeclareIniVar groupDSSpell string Spells "" 
   /call DeclareIniVar UseBurstDS int settings 0
   /call DeclareIniVar singleDSSpell string Spells "" 
   /call DeclareIniVar siphonSpell string Spells "Elemental Symbiosis Rk. II" 
   /call DeclareIniVar runeSpell string Spells " " 
   /call DeclareIniVar runeType string Spells " " 
   /call DeclareIniVar pethpSpell string Spells " " 
   /call DeclareIniVar pethpBuff string Spells "item" 
   /call DeclareIniVar pethpType string Spells "" 
   /call DeclareIniVar petHaste string Spells "Burnout VIII" 
   /call DeclareIniVar petHasteType string Spells "gem8"
   /call DeclareIniVar petShrinkSpell string Spells "Tiny Companion" 
   /call DeclareIniVar petShrinkType string Spells "item" 
   /call DeclareIniVar PetProc string Spells "Iceflame Efflux Rk. II"
   /call DeclareIniVar PetProcType string Spells "gem8"
   /call DeclareIniVar SendPetPerc int Settings 99
   /call DeclareIniVar EpicClick string spells "Focus of Primal Elements"
   /call DeclareIniVar EpicPetBuff string Spells "Primal Fusion"
   /call DeclareIniVar rodSpell string Spells "Wand of Ethereal Transvergence"
   /call DeclareIniVar rodType string Spells "gem6"
   /call DeclareIniVar ModRodPotSlot string Spells "2"
   /call DeclareIniVar PetTank int Settings 1 /pettank
   /call DeclareIniVar PetType string Settings "air" /pettype
   /call DeclareIniVar PetRune string spells "Grounded Stance Rk. II"
   /call DeclareIniVar PetBlock string spells "Aegis of Kildrukaun"
   /call DeclareIniVar PetHealSpell string Spells "Renewal of Cadwin Rk. II"
   /call DeclareIniVar PetHealType string Spells "gem9"
   /call DeclareIniVar TwincastSpell string Spells "Twincast Rk. II"
   /call DeclareIniVar TwincastType string Spells "gem10"
   /call DeclareIniVar PetRenewalSpell string Spells "Promised Renewal Rk. III"
   /call DeclareIniVar PetRenewalType string Spells "gem7"
   /call DeclareIniVar ParadoxSpell string Spells "Summon Frigid Paradox"
   /call DeclareIniVar ParadoxSpellType string Spells "gem6"
   /call DeclareIniVar ParadoxRodName string Spells "Summoned: Elemental Ice Sliver"
   /call DeclareIniVar OrbSpell string Spells "Summon Blazing Orb"
   /call DeclareIniVar OrbSpellType string Spells "gem6"
   /call DeclareIniVar OrbName string Spells "Blazing Orb"
   /call DeclareIniVar ParadoxPotionSlot string Spells "1"
   /call DeclareInivar GatherSpell string Spells "Gather Magnitude"
   /call DeclareInivar ThaumatizeSpell string Spells "Thaumatize Pet"

   /call DeclareIniVar BuffGem string Buffs "gem6"  
   /call DeclareIniVar selfBuff1 string Buffs "Empyrean Guardian Rk. II" 
   /call DeclareIniVar selfBuffNoStack1 string Buffs "Protection of the Nine,Blessing of the Nine,Steeloak Skin,Blessing of Steeloak" 
   /call DeclareIniVar selfBuff2 string Buffs " " 
   /call DeclareIniVar selfBuffNoStack2 string Buffs " " 
   /call DeclareIniVar selfBuff3 string Buffs " " 
   /call DeclareIniVar selfBuffNoStack3 string Buffs " " 
   /call DeclareIniVar selfBuff4 string Buffs " " 
   /call DeclareIniVar selfBuffNoStack4 string Buffs " " 
   /call DeclareIniVar selfBuff5 string Buffs " " 
   /call DeclareIniVar selfBuffNoStack5 string Buffs " " 
   /call DeclareIniVar usebuffs int Settings 0 /dobuffs

   /call DeclareIniVar mountItem string Items "Bridle of the Bloodied Sokokar"
   /call DeclareIniVar hpRobe string Items "${InvSlot[chest].Item.Name}" 
   /call DeclareIniVar clicky1 string Items " " 
   /call DeclareIniVar clickyNoStack1 string Items " " 
   /call DeclareIniVar clicky2 string Items " " 
   /call DeclareIniVar clickyNoStack2 string Items " " 
   /call DeclareIniVar clicky3 string Items " " 
   /call DeclareIniVar clickyNoStack3 string Items " " 
   /call DeclareIniVar clicky4 string Items " " 
   /call DeclareIniVar clickyNoStack4 string Items " " 
   /call DeclareIniVar clicky5 string Items " " 
   /call DeclareIniVar clickyNoStack5 string Items " " 

   /call DeclareIniVar invisItem string Items " " 
   /call DeclareIniVar dispellItem string Items " " 
   /call DeclareIniVar normalMainhand string Items "${InvSlot[mainhand].Item.Name}" 
   /call DeclareIniVar normalOffhand string Items "${InvSlot[offhand].Item.Name}" 
   /call DeclareIniVar hpMask string Items "${InvSlot[face].Item.Name}" 
   /call DeclareIniVar ModRodName string Items "Rod of Ethereal Transvergence"
   /call DeclareIniVar SelfRodSpell string Items "Wand of Phantasmal Modulation"
   /call DeclareIniVar SelfRodName string Items "Wand of Phantasmal Modulation"
   /call DeclareIniVar MalosiniaList string Debuff "Malosenea Rk. III|"
   
   /call DeclareIniVar auraName string Aura "Rathe's Strength effect"
   /call DeclareIniVar auraBuff string Aura "Rathe's Strength"
   /call DeclareIniVar auraBuffGem string Aura "gem8"
   /call DeclareIniVar DoBcBuffTotal int BCBuffs 0
   /call DeclareIniVar DoBuffTotal int Buff 0
   /call DeclareIniVar usebuffs int Buff 1
   
   /call BuffQueue
   /call BCBuffs
   |**
   /squelch /custombind add ma 
   /squelch /custombind add sa 
   /squelch /alias /anchor /echo SetAnchor 
   /squelch /alias /manarobe /echo Mana Robe 
   /squelch /alias /nuketype /echo NukeType 
   /squelch /alias /pettype /echo set: PetType 
   /squelch /alias /setma /custombind set ma /assist 
   /squelch /alias /setsa /custombind set sa /assist 
   /squelch /alias /changebranch /echo changebranch
   /squelch /alias /nukebranch /echo nukebranch
   **|
      /declare SiphonBuffName string outer
   /declare OldState string outer
   /declare NukeLine int outer
   /declare following int outer 0
   /declare follname string outer NULL
   /declare ManyTimer timer outer 0s
   /declare FireRainTimer timer outer 0s
   /declare ServantTimer timer outer 0s
   /declare ServantTimer2 timer outer 0s
   /call SpellBranch
   /if (${UseIRC} && !${Irc} && !${irctimer}) /call Irc
   /if (${siphonSpell.Find[Rk. II]} && !${siphonSpell.Find[Rk. III]}) {
     /varset SiphonBuffName ${siphonSpell.Left[-7]} Recourse II
   } else /if (${siphonSpell.Find[Rk. III]}) {
     /varset SiphonBuffName ${siphonSpell.Left[-8]} Recourse III
   } else /if (!${siphonSpell.Find[Rk. II]} && !${siphonSpell.Find[Rk. III]}) {
     /varset SiphonBuffName "${siphonSpell} Recourse"
   }
   /if ( ${autoAnnounce} ) /announce on 
   /echo Auto Mage Mode Activated 
   /if ( ${nukeMode} || ${useDebuff} ) { 
      /echo Main Assist: ${MainAssist} 
      /if ( ${Bool[${secondAssist}]} ) /echo Secondary Assist: ${secondAssist} (if ${MainAssist} dies) 
   } 
   /if ( ${nukeMode} || ${useDebuff} ) /echo Will ${If[${useDebuff},malosenea ,]}${If[${nukeMode} && ${useDebuff},then ,]}${If[${nukeMode},start nuking ,]}at ${minHP}% 
   /if ( ${autoBuff} ) /echo Auto Buff is enabled. 
   /if ( ${useMount} ) /echo Mount is enabled. 
/return

Sub ClearMobList 
   /declare i int local 
   /declare mobListID string local 
   /if ( ${mobList.Find[[]} ) { 
      /if ( ${mobList.Find[[]}>1 ) /varset mobList ${mobList.Right[-${Math.Calc[${mobList.Find[[]}-1]}]} 
      /for i 1 to ${mobList.Count[[]} 
         /varset mobListID ${mobList.Arg[${i},[].Left[-1]} 
         /if ( ${Defined[mezTimer${mobListID}]} ) /deletevar mezTimer${mobListID} 
         /if ( ${Defined[slowTimer${mobListID}]} ) /deletevar slowTimer${mobListID} 
         /if ( ${Defined[tashTimer${mobListID}]} ) /deletevar tashTimer${mobListID} 
         /if ( ${Defined[maloTimer${mobListID}]} ) /deletevar maloTimer${mobListID} 
         /if ( ${Defined[waitTimer${mobListID}]} ) /deletevar waitTimer${mobListID} 
         /if ( ${Defined[maloTimer${mobListID}]} ) /deletevar maloTimer${mobListID} 
         /if ( ${Defined[maloResists${mobListID}]} ) /deletevar maloResists${mobListID} 
         /call DeleteFromList mobList ${mobListID} 
         /call DeleteFromList addList ${mobListID} 
      /next i 
   } 
/return

Sub GeneralDeclares 
   /declare bufftimer timer outer 0s
   /declare BcClients string outer
   /declare BcClients2 int outer
   /declare aggroTimer timer outer 
   /declare followName string outer null 
   /declare totalKills int outer 0 
   /declare iniName string outer Auto_${Me.Name}.ini 
   /declare buffQueue string outer 
   /declare normalOffhand string outer ${InvSlot[offhand].Item.Name} 
   /declare uquaAETime float outer 
   /declare totalMeleeDmg int outer 
   /declare totalNonMeleeDmg int outer 
   /declare fightStartTime float outer 
   /declare fightTotalTime float outer 
   /declare deathFlag bool outer ${Math.Calc[!(${InvSlot[chest].Item.ID}>0)]} 
   /declare mobID int outer 0 
   /declare addID int outer 0 
   /declare petAttacking bool outer false 
   /declare i int local 
   /declare j int local 
   /declare addIndex int outer 
   /declare tempStr string local 
   /declare mobList string outer 
   /declare addList string outer 
   /declare newAdds int outer 0 
   /declare assistWaitTimer timer outer 0 
   /declare aggroAnim string outer |5|8|12|17|18|42|44|80|106|144| 
   /declare petCheck bool outer false 
   /declare petID int outer 0 
   /declare tempTimer timer local 0 
   /declare petOff int outer 0 
   /declare useAnchor int outer 
   /declare anchorX float outer 
   /declare anchorY float outer 
   /declare anchorHeading float outer 
   /declare leashLength int outer 
   /declare oldTarget int local 
   /declare modRodTimer timer outer 
   /declare nukeWaitTimer timer outer 0 
   /declare nukeWaitMod int outer 0 
   /declare mainTank string outer 
   /declare castSub string outer 
   /declare validTarget int outer 
   /declare engaged int outer 
   /declare mobHPStart int outer 
   /declare askedForRodTimer timer outer 0 
   /declare petSpamTimer timer outer 
   /declare petMaloTimer timer outer 0 
   /declare maloed bool outer 
   /declare snared bool outer 
   /declare rockNuke string outer 
   /declare fireNuke string outer 
   /declare magicNuke string outer 
   /declare boltNuke string outer 
   /declare coldNuke string outer 
   /declare c6Timer timer outer 
   /declare petMaloTimer2 timer outer 0 
   /declare petOff2 int outer 0 
   /declare irctimer timer outer 0s
   /if (${UseIRC}) /call Irc 
/return 

Sub Event_Chat(string ChatType,string Sender,string ChatText)
   /if ((!${ChatType.Equal[${mychannel}]})&&(!${ChatType.Equal[TELL]})&&(!${ChatType.Equal[group]})) /return
   /if (${usegroupchat}==0) /if (${ChatType.Equal[group]}) /return
   /call Event_IRC ${ChatType} ${Sender.Right[-2].Left[-1]} "${ChatText}"
/return

Sub AddToQueue(int Buffee,int BuffNumber)
  /declare a           int local
  /declare Compare     int local

  /if (${QueueCount}<25 && !${Spawn[${Buffee}].Type.Equal[corpse]} && ${Spawn[${Buffee}].ID}) {
    /varset Compare 0
    /echo ${Buffee}==${DoBuffQueue[${a},1]} || (${Select[${Spell[${DoBuffID[${DoBuffQueue[${a},2]}]}].TargetType},"Group v2","AE PC v2","Group v1","AE PC v1"]} && (${Group.Member[${Spawn[${Buffee}].CleanName}]} || ${Group.Member[${Spawn[${Buffee}].Master.CleanName}]}) && ${Group.Member[${Spawn[${DoBuffQueue[${a},1]}].CleanName}]})) && ${BuffNumber}==${DoBuffQueue[${a},2]}
    /for a 1 to 25
      /if ((${Buffee}==${DoBuffQueue[${a},1]} || (${Select[${Spell[${DoBuffID[${DoBuffQueue[${a},2]}]}].TargetType},"Group v2","AE PC v2","Group v1","AE PC v1"]} && (${Group.Member[${Spawn[${Buffee}].CleanName}]} || ${Group.Member[${Spawn[${Buffee}].Master.CleanName}]}) && ${Group.Member[${Spawn[${DoBuffQueue[${a},1]}].CleanName}]})) && ${BuffNumber}==${DoBuffQueue[${a},2]}) /varset Compare 1
    /next a
    
    /if (!${Compare}) {
      /for a 1 to 25
        /if (!${DoBuffQueue[${a},1]}) {
          /varset DoBuffQueue[${a},1] ${Buffee}
          /varset DoBuffQueue[${a},2] ${BuffNumber}
          /echo ${BuffNumber}
          /varcalc QueueCount ${QueueCount}+1
          /return
        }
      /next a
    }
  }
/return
   
    Sub RemoveFromQueue(int Buffee,int BuffNumber)
    /doevents IRC
    /doevents Chat
    /declare a int local
    /for a 1 to 25
       /if (((${Spawn[${DoBuffQueue[${a},1]}].State.Equal["DEAD"]} || !${Spawn[${DoBuffQueue[${a},1]}].ID}) || ((${DoBuffQueue[${a},1]}==${Buffee} || (!${Buffee} && (${Group.Member[${Spawn[${DoBuffQueue[${a},1]}].CleanName}]} || ${Group.Member[${Spawn[${DoBuffQueue[${a},1]}].Master.CleanName}]}))) && (${DoBuffID[${DoBuffQueue[${a},2]}]}==${BuffNumber} || ${DoBuffQueue[${a},2]}==${BuffNumber}))) && ${DoBuffQueue[${a},1]}) {
          /varset DoBuffQueue[${a},1] 0
          /varset DoBuffQueue[${a},2] 0
          /varcalc QueueCount ${QueueCount}-1
       }
    /next a
    /return

Sub DoBuffEvents
  /varset MacroState DoBuffEvents

  /declare a       int local
  /declare TempVar int local ${Math.Calc[${DoBuffTotal}+1]}
  /declare TempGuy int local 0
  /for a 1 to 25
    /if (${DoBuffQueue[${a},2]}<${TempVar} && ${Spawn[${DoBuffQueue[${a},1]}].ID} && ${Spawn[${DoBuffQueue[${a},1]}].Type.NotEqual[corpse]} && (${Spawn[${DoBuffQueue[${a},1]}].Distance}<${Spell[${DoBuffID[${DoBuffQueue[${a},2]}]}].MyRange} || ${Spawn[${DoBuffQueue[${a},1]}].Distance}<${Spell[${DoBuffID[${DoBuffQueue[${a},2]}]}].AERange})) {
      /varset TempGuy ${DoBuffQueue[${a},1]}
      /varset TempVar ${DoBuffQueue[${a},2]}
    }
  /next a
   
  /if (${Spawn[${TempGuy}].Distance}>=100) /return

  /squelch /target id ${TempGuy}
  /delay 1s ${Target.ID}==${TempGuy}
  /if (${Target.ID}==${TempGuy}) {
    /call Cast "${DoBuff${TempVar}}" ${DoBuffGem${TempVar}} 3s
    /if (${castReturn.Equal[CAST_SUCCESS]} || ${spellNotHold}) /call RemoveFromQueue ${TempGuy} ${TempVar}
  }
/return

Sub CheckDoBuffs(Sender,ChatText)
    /declare a        int local
    /declare i        int local
    /for i 1 to ${DoBuffTotal}
       /for a 1 to ${DoBuffAliases${i}.Count[|]}
          /if (${ChatText.Find["${DoBuffAliases${i}.Arg[${a},|]}"]}) {
             /if (${ChatText.Find[" pet "]} || ${ChatText.Find[${Spawn[pc ${Sender}]}].Pet.CleanName} || ${Spawn[pet ${Sender}].ID}) {
                /call AddToQueue ${Spawn[pc ${Sender}]}].Pet.ID} ${i}
             } else {
                /call AddToQueue ${Spawn[pc ${Sender}].ID} ${i}
             }
          }
       /next a
    /next i
    /return
   
Sub BuffQueue
  /declare i int local

  /if (!${Defined[DoBuffID]})       /declare DoBuffID[${DoBuffTotal}] int   outer
  /if (!${Defined[DoBuffQueue]})    /declare DoBuffQueue[25,2]        int   outer
  /if (!${Defined[QueueCount]})     /declare QueueCount               int   outer
  /if (!${Defined[DoBuffLowest]})   /declare DoBuffLowest             int   outer 100
  /if (!${Defined[DoBuffTimer]})    /declare DoBuffTimer              timer outer
  
  /if (${DoBuffTotal}) {    
    /for i 1 to ${DoBuffTotal}
      /call DeclareIniVar DoBuff${i} string Buff NULL
      /call DeclareIniVar DoBuffGem${i} string Buff null
      /call DeclareIniVar DoBuffAliases${i} string Buff NULL
      /call DeclareIniVar DoBuffMana${i} int Buff NULL
      /if (${Me.AltAbility[${DoBuff${i}}]}) /varset DoBuffID[${i}] ${Me.AltAbility[${DoBuff${i}}].Spell.ID}
      /if (${FindItem[${DoBuff${i}}].ID}) /varset DoBuffID[${i}] ${FindItem[${DoBuff${i}}].Spell.ID}
      /if (${Me.Book[${DoBuff${i}}]}) /varset DoBuffID[${i}] ${Me.Book[${Me.Book[${DoBuff${i}}]}].ID}
      /if (${Ini[Cleric_${Me.CleanName}.ini,Buff,DoBuffIcon${i},NOTFOUND].NotEqual[NOTFOUND]}) /varset DoBuffID[${i}] ${Spell[${Ini[Cleric_${Me.CleanName}.ini,Buff,DoBuffIcon${i},NOTFOUND]}].ID}
      /if (${DoBuffLowest}>${DoBuffMana${i}}) /varset DoBuffLowest ${DoBuffMana${i}}
    /next i
  }
/return
   
    Sub BCBuffs
    /declare i int local
    /if (${DoBcBuffTotal}) {
       /for i 1 to ${DoBcBuffTotal}
          /call DeclareIniVar DoBCBuff${i} string BCBuffs NULL
          /call DeclareIniVar DoBCBuffMana${i} int BCBuffs NULL
          /call DeclareIniVar DoBCBuffMobRange${i} int BCBUffs NULL
          /call DeclareIniVar DoBCBuffIgnoreClass${i} string BCBuffs "Use the Class's full Name and seperate with commas"
       /next i
    }
    /return

Sub DeclareIniVar(string name,string varType,string section,string value,string alias,string aliastwo)
  /if ( !${Defined[${name}]} ) /declare ${name} ${varType} outer
  /varset ${name} ${Ini[${INIFile}.ini,"${section}",${name.Left[1].Upper}${name.Right[-1]},"${value}"]}
  /ini "${INIFile}.ini" "${section}" "${name.Left[1].Upper}${name.Right[-1]}" "${${name}}"
  |**/if (${Defined[alias]} && ${aliastwo.Equal[NULL]}) {
    /echo /alias ${alias} /echo set: ${name}
    /squelch /alias ${alias} /echo set: ${name}
  } else /if (${Defined[alias]} && ${aliastwo.NotEqual[NULL]}) {
    /echo /alias ${alias} /echo set: ${name} ${aliastwo}
    /squelch /alias ${alias} /echo set: ${name} ${aliastwo}
  }**|
  /if (${name.Equal[SelfRodName]}) /return
  /if (${Me.Book[${Me.Book[${${name}} Rk. III]}].ID}) /varset ${name} ${Me.Book[${Me.Book[${${name}} Rk. III]}].Name} 
  /if (${Me.Book[${Me.Book[${${name}} Rk. II]}].ID}) /varset ${name} ${Me.Book[${Me.Book[${${name}} Rk. II]}].Name}
  /if (${Me.CombatAbility[${${name}} Rk III]}) /varset ${name} ${${name}} Rk. III
  /if (${Me.CombatAbility[${${name}} Rk. II]}) /varset ${name} ${${name}} Rk. III
/return

Sub SetIniVar(string name,string section,string value) 
   /varset ${name} ${value} 
   /ini "${iniName}" "${section}" "${name.Left[1].Upper}${name.Right[-1]}" "${${name}}" 
/return 

Sub CheckTarget 
  /declare tempID int local ${Target.ID} 
  /declare i int local
  /delay 1
  
  /if (${ExcludeList.Find[${Target.DisplayName}]}) {
    /goto :notgood
  }
  
  /if (${Target.ID} && ${Me.LAInspectBuffs}) {
    /for i 1 to ${Target.BuffCount}
      /if (${MezSpellList.Find[${Target.Buff[${i}]}]}) {
        /goto :notgood
      }
    /next i
  }
  /if ( ( ${Spawn[${tempID}].Type.Equal[npc]}  || ( ${Spawn[${tempID}].Type.Equal[pet]} && !${Spawn[${tempID}].Master.Type.Equal[pc]}  ) ) && ( ( ${Spawn[pc ${mainTank}].NearestSpawn[radius ${Math.Calc[${minRadius}*2]} id ${tempID}].ID} && ${Spawn[pc ${mainTank}].Distance3D}<=${minRadius} ) || !${Spawn[pc ${mainTank}].ID} || ${Spawn[pc ${mainTank}].Distance3D}>200 ) && ${tempID}!=${petID} && ( ${aggroAnim.Find[|${Spawn[${tempID}].Animation}|]} || ${Spawn[${tempID}].PctHPs}<100 || ${Me.TargetOfTarget.Type.Equal[pc]} || ${Me.TargetOfTarget.Master.Type.Equal[pc]} ) ) {
   /varset validTarget 1 
  } else { 
    :notgood
    /varset validTarget 0 
  } 
/return 

Sub CheckiniBuffs
/varset MacroState CheckIniBuffs
/if (${Zone.ID}!=${currentZone}) /call Event_Zone
   /varset BcClients ${NetBots.Client}
   /varset BcClients2 ${Math.Calc[${BcClients.Count[ ]}+1]}
   /declare stacks bool true
   /declare buffs string local
   /declare ignorelist string local
   /declare c int local
  /declare i int local
  /declare X int local
  /declare j int local
  /declare b int local
  /varset  b 1
  /declare spellName string local
  /declare buffName string local
  /for i 1 to 8
    /if ( ${FindItem[=${clicky${i}}].ID} ) {
      /varset spellName ${FindItem[=${clicky${i}}].Spell.Name}
      /if ( !${Me.Buff[${spellName}].ID} || ${Me.Buff[${spellName}].Duration}<=4 ) {
        /varset j 1
     
:check_nostack
/if (!${Spell[${spellName}].Stacks[2]}) /goto :skip_clicky

        /varset buffName ${clickyNoStack${i}.Arg[${j},,]}
        /if ( ${Bool[${buffName}]} ) {
          /if ( ${Me.Buff[${buffName}].ID} ) /goto :skip_clicky
          /varcalc j ${j}+1
          /goto :check_nostack
        }

/call Cast "${clicky${i}}" item 0 ${If[${Bool[${castSub}]},${castSub},]}
:skip_clicky
      }
    }
/varcalc b ${b}+1
  /next i
 
  /for i 1 to 5
    /if ( ${Me.Book[${selfBuff${i}}]} ) {
      /varset spellName ${selfBuff${i}}
      /if ( !${Me.Buff[${spellName}].ID} || ${Me.Buff[${spellName}].Duration}<=4 && ${Spell[${spellName}].Mana} < ${Me.CurrentMana} ) {
        /varset j 1
        :check_nostack2
         /if (!${Spell[${spellName}].Stacks[2]}) /goto :skip_self_buff
         /varset buffName ${selfBuffNoStack${i}.Arg[${j},,]}
         /if ( ${Bool[${buffName}]} ) {
           /if ( ${Me.Buff[${buffName}].ID} ) /goto :skip_self_buff
           /varcalc j ${j}+1
           /goto :check_nostack2
         }
         /target myself
         /echo Casting ${selfBuff${i}}.
         /call Cast "${selfBuff${i}}" ${BuffGem} 0 ${If[${Bool[${castSub}]},${castSub},]} 
        :skip_self_buff
      }
    }
  /next i

  :end
  
  /call CheckItems
  
|Start Of the BC buffing Routine
/varset MacroState BCBuffs
  /varset BcClients ${NetBots.Client} 
  /varset BcClients2 ${Math.Calc[${BcClients.Count[ ]}+1]}
  /varset buffs ${NetBots[${BcClients.Arg[${X}]}].Buff} 
    /if (${UseReverseBcOrder}) /goto :Reverse
    /if (${UseMidBcOrder}) /goto :Reverse2
    /if (${UseMidReverseOrder}) /goto :Reverse3
          /for X 1 to ${BcClients2}
             /for b 1 to ${DoBcBuffTotal}  
             	 /varset ignorelist ${Ini[${iniName},"BCBuffs","DoBCBuffIgnoreClass${b}"]}
       /if (!${NetBots[${BcClients.Arg[${X}]}].Buff.Find[${Spell[${DoBCBuff${b}}].ID}]} && ${NetBots[${BcClients.Arg[${X}]}].InZone} && ${Spawn[${BcClients.Arg[${X}]}].ID} && ${Spawn[${BcClients.Arg[${X}]}].Distance}<=100 && ${Me.PctMana}> ${DoBCBuffMana${b}} && !${SpawnCount[npc radius ${DoBCBuffMobRange${b}} Range 30 1000]} && !${ignorelist.Find[${NetBots[${BcClients.Arg[${X}]}].Class}]} && ${Me.CurrentMana}>${Spell[${DoBCBuff${b}}].Mana} && ${NetBots[${BcClients.Arg[${X}]}].Stacks[${Spell[${DoBCBuff${b}}].ID}]}) {     
              /echo buffing ${NetBots[${BcClients.Arg[${X}]}].Name} with ${DoBCBuff${b}}
          /call CastSpell "${DoBCBuff${b}}" ${BuffGem} ${NetBots[${BcClients.Arg[${X}]}].ID} 
    }
  /next b
    /next X
      /goto :end2
      :Reverse
       /for X ${BcClients2} downto 1      	
             /for b 1 to ${DoBcBuffTotal}  
             	 /varset ignorelist ${Ini[${iniName},"BCBuffs","DoBCBuffIgnoreClass${b}"]}
       /if (!${NetBots[${BcClients.Arg[${X}]}].Buff.Find[${Spell[${DoBCBuff${b}}].ID}]} && ${NetBots[${BcClients.Arg[${X}]}].InZone} && ${Spawn[${BcClients.Arg[${X}]}].ID} && ${Spawn[${BcClients.Arg[${X}]}].Distance}<=100 && ${Me.PctMana}> ${DoBCBuffMana${b}} && !${SpawnCount[npc radius ${DoBCBuffMobRange${b}} Range 30 1000]} && !${ignorelist.Find[${NetBots[${BcClients.Arg[${X}]}].Class}]} && ${Me.CurrentMana}>${Spell[${DoBCBuff${b}}].Mana} && ${NetBots[${BcClients.Arg[${X}]}].Stacks[${Spell[${DoBCBuff${b}}].ID}]}) {     
              /echo buffing ${NetBots[${BcClients.Arg[${X}]}].Name} with ${DoBCBuff${b}}
          /call CastSpell "${DoBCBuff${b}}" ${BuffGem} ${NetBots[${BcClients.Arg[${X}]}].ID} CheckAll         
    }
  /next b
    /next X
    /goto :end2
    :reverse2
     /for X  ${Math.Calc[${BcClients2} /2]} to ${BcClients2}      	
             /for b 1 to ${DoBcBuffTotal}  
             	 /varset ignorelist ${Ini[${iniName},"BCBuffs","DoBCBuffIgnoreClass${b}"]}
       /if (!${NetBots[${BcClients.Arg[${X}]}].Buff.Find[${Spell[${DoBCBuff${b}}].ID}]} && ${NetBots[${BcClients.Arg[${X}]}].InZone} && ${Spawn[${BcClients.Arg[${X}]}].ID} && ${Spawn[${BcClients.Arg[${X}]}].Distance}<=100 && ${Me.PctMana}> ${DoBCBuffMana${b}} && !${SpawnCount[npc radius ${DoBCBuffMobRange${b}} Range 30 1000]} && !${ignorelist.Find[${NetBots[${BcClients.Arg[${X}]}].Class}]} && ${Me.CurrentMana}>${Spell[${DoBCBuff${b}}].Mana} && ${NetBots[${BcClients.Arg[${X}]}].Stacks[${Spell[${DoBCBuff${b}}].ID}]}) {     
              /echo buffing ${NetBots[${BcClients.Arg[${X}]}].Name} with ${DoBCBuff${b}}
          /call CastSpell "${DoBCBuff${b}}" ${BuffGem} ${NetBots[${BcClients.Arg[${X}]}].ID} CheckAll         
    }
  /next b
    /next X
    /goto :end2
    :reverse3
     /for X ${BcClients2} downto ${Math.Calc[${BcClients2} /2]}     	
             /for b 1 to ${DoBcBuffTotal}  
             	 /varset ignorelist ${Ini[${iniName},"BCBuffs","DoBCBuffIgnoreClass${b}"]}
       /if (!${NetBots[${BcClients.Arg[${X}]}].Buff.Find[${Spell[${DoBCBuff${b}}].ID}]} && ${NetBots[${BcClients.Arg[${X}]}].InZone} && ${Spawn[${BcClients.Arg[${X}]}].ID} && ${Spawn[${BcClients.Arg[${X}]}].Distance}<=100 && ${Me.PctMana}> ${DoBCBuffMana${b}} && !${SpawnCount[npc radius ${DoBCBuffMobRange${b}} Range 30 1000]} && !${ignorelist.Find[${NetBots[${BcClients.Arg[${X}]}].Class}]} && ${Me.CurrentMana}>${Spell[${DoBCBuff${b}}].Mana} && ${NetBots[${BcClients.Arg[${X}]}].Stacks[${Spell[${DoBCBuff${b}}].ID}]}) {     
              /echo buffing ${NetBots[${BcClients.Arg[${X}]}].Name} with ${DoBCBuff${b}}
          /call CastSpell "${DoBCBuff${b}}" ${BuffGem} ${NetBots[${BcClients.Arg[${X}]}].ID} CheckAll         
    }
  /next b
    /next X
      |end bc buffing
:end2
  /varset bufftimer 10s
  /return
  
  Sub UpdateMobList 
   /declare i int local 
   /declare mobListID string local 
   /if ( ${mobList.Find[[]} ) { 
      /if ( ${mobList.Find[[]}>1 ) /varset mobList ${mobList.Right[-${Math.Calc[${mobList.Find[[]}-1]}]} 
      /for i 1 to ${mobList.Count[[]} 
         /varset mobListID ${mobList.Arg[${i},[].Left[-1]} 
         /if ( ( !${Spawn[${mobListID}].Type.Equal[NPC]} && !${Spawn[${mobListID}].Master.Type.Equal[NPC]} ) || ${Spawn[${mobListID}].Type.Equal[corpse]} ) { 
            /if ( ${Defined[mezTimer${mobListID}]} ) /deletevar mezTimer${mobListID} 
            /if ( ${Defined[slowTimer${mobListID}]} ) /deletevar slowTimer${mobListID} 
            /if ( ${Defined[tashTimer${mobListID}]} ) /deletevar tashTimer${mobListID} 
            /if ( ${Defined[waitTimer${mobListID}]} ) /deletevar waitTimer${mobListID} 
            /if ( ${Defined[maloTimer${mobListID}]} ) /deletevar maloTimer${mobListID} 
            /if ( ${Defined[maloResists${mobListID}]} ) /deletevar maloResists${mobListID} 
            /call DeleteFromList mobList ${mobListID} 
            /call DeleteFromList addList ${mobListID} 
         } 
      /next i 
   } 
/return 

Sub ClearMobList 
   /declare i int local 
   /declare mobListID string local 
   /if ( ${mobList.Find[[]} ) { 
      /if ( ${mobList.Find[[]}>1 ) /varset mobList ${mobList.Right[-${Math.Calc[${mobList.Find[[]}-1]}]} 
      /for i 1 to ${mobList.Count[[]} 
         /varset mobListID ${mobList.Arg[${i},[].Left[-1]} 
         /if ( ${Defined[mezTimer${mobListID}]} ) /deletevar mezTimer${mobListID} 
         /if ( ${Defined[slowTimer${mobListID}]} ) /deletevar slowTimer${mobListID} 
         /if ( ${Defined[tashTimer${mobListID}]} ) /deletevar tashTimer${mobListID} 
         /if ( ${Defined[maloTimer${mobListID}]} ) /deletevar maloTimer${mobListID} 
         /if ( ${Defined[waitTimer${mobListID}]} ) /deletevar waitTimer${mobListID} 
         /if ( ${Defined[maloTimer${mobListID}]} ) /deletevar maloTimer${mobListID} 
         /if ( ${Defined[maloResists${mobListID}]} ) /deletevar maloResists${mobListID} 
         /call DeleteFromList mobList ${mobListID} 
         /call DeleteFromList addList ${mobListID} 
      /next i 
   } 
/return 

  Sub AddToList(string listName,string tempID) 
   /varset tempID [${tempID}] 
   /if ( !${${listName}.Find[${tempID}]} ) { 
      /varset ${listName} ${${listName}}${tempID} 
      /return 1 
   } 
/return 0 

Sub Event_CoH(string line,string sender,string channel,string cohperson2)
  /varset sender ${sender.Right[-2].Left[-1]}
  /declare i int local
  /delay 10s ${Me.AltAbilityReady[Call of the Hero]}
  /if (${channel.Equal[the group]} || ${channel.Equal[you]} || ${channel.Equal[the raid]}) {
    /if ( ${cohperson2.Equal[group]} ) {
      /echo coh group Incoming!
      /for i 1 to ${Group}
        /if ( ${Group.Member[${i}].ID} && ${Group.Member[${i}].Distance}>=100 ) {
          /echo CoH'ing ${Group.Member[${i}]}
          /call CastSpell "Call of the Hero" alt ${Group.Member[${i}].ID}	 
        }
        /delay 20s ${Me.AltAbilityReady[Call of the Hero]}
      /next i
    }
    /if ( ${Spawn[${cohperson2}].ID} && !${cohperson2.Equal[group]} ) {
      /echo CoH'ing ${cohperson2}
      /if (${Group.Member[${Spawn[${cohperson2}]}].ID}) /call CastSpell "Call of the Hero" alt ${Spawn[pc ${cohperson2}].ID}
    }
    /if ( !${Spawn[${cohperson2}].ID}  ) {
      /echo CoH'ing ${sender}
      /if (${Group.Member[${Spawn[${sender}]}].ID}) /call CastSpell "Call of the Hero" alt ${Spawn[pc ${sender}].ID} 
    }
  }
/return

Sub DeleteFromList(string listName,string tempID) 
   /varset tempID [${tempID}] 
   /declare a int local 
   /declare b int local 
   /declare strLeft string local 
   /declare strRight string local 
   /varcalc a ${${listName}.Find[${tempID}]}-1 
   /varcalc b ${${listName}.Length}-${tempID.Length}-${a} 
   /if ( ${a}>0 ) /varset strLeft ${${listName}.Left[${a}]} 
   /if ( ${b}>0 ) /varset strRight ${${listName}.Right[${b}]} 
   /varset ${listName} ${strLeft}${strRight} 
/return 

Sub CastSpell(string sSpell,string sType,int iTarget,string sCheckUp)
  /varset MacroState CastSpell
  :ReTarget
   /if ( ${iTarget} && ${Target.ID}!=${iTarget} && ${Spawn[id ${iTarget}].ID} && ${Spawn[id ${iTarget}].Type.NotEqual[Corpse]}) {
     /squelch /target id ${iTarget}
     /delay 2s ${Target.ID}==${iTarget}
     /if ( ${Target.ID}!=${iTarget} ) {
       /if (${Me.Type.Equal[Corpse]} || (!${InvSlot[chest].Item.ID} && !${Me.Platinum})) /call Wait4Rez
       /goto :ReTarget
     }
   } 
   /if ( ${Target.Type.Equal[Corpse]} || !${Spawn[id ${iTarget}].ID} ) {
   }
   /if ( !${Me.Gem[${sSpell}]} && ${sType.Find[gem]}) {
     /if (${sType.Length}==4) /memspell ${sType.Right[1]} "${sSpell}"
     /if (${sType.Length}==5) /memspell ${sType.Right[2]} "${sSpell}"
     /delay 3s ${Me.SpellReady[${sSpell}]}
   }
   :WaitToCast
    /doevents
    /if ( ${sType.Find[gem]} ) { 
      /delay 2s ${Me.SpellReady[${sSpell}]}
    } else {
      /delay 4s ${Me.AltAbilityReady[${sSpell}]}
    }
    /if ( !${Me.SpellReady["${sSpell}"]} && ${sType.Find[gem]}) /return
    /if ( ${sCheckUp.NotEqual[NULL]} ) {
      /call Cast "${sSpell}" ${sType} 0 ${sCheckUp}
    } else {
      /call Cast "${sSpell}" ${sType} 0
    }
/return ${Macro.Return}

Sub CastNuke(string sSpell,string sType,int iTarget,string sCheckUp)
  /if (${Spell[${sSpell}].Mana}>${Me.CurrentMana} && ${sType.Find[gem]}) /return CAST_OUTOFMANA

  /if (${Announce}) /bc Casting ${sSpell} on ${Spawn[id ${iTarget}].CleanName}
  :ReTarget
   /if (${Me.Dead}) /return
    /if ( ${Target.ID}!=${iTarget} && ${Spawn[id ${iTarget}].ID} ) {
      /squelch /target id ${iTarget}
      /delay 2s ${Target.ID}==${iTarget}
      /if ( ${Target.ID}!=${iTarget} ) /goto :ReTarget
    }
    /if ( ${Target.Type.Equal[Corpse]} ) /return
  /if (${Target.Dead} || ${Spawn[id ${iTarget}].Dead}) /return DEAD
  /if (!${Me.Gem[${sSpell}]} && ${sType.Find[gem]} && ${Me.Book[${sSpell}]}) {
    /echo Have to mem ${sSpell}
    /if (${sType.Length}==4) /memspell ${sType.Right[1]} "${sSpell}"
    /if (${sType.Length}==5) /memspell ${sType.Right[2]} "${sSpell}"
    /delay 6s ${Me.Gem[${sType.Right[1]}].Name.Equal[${sSpell}]}
  } else /if (!${Me.Book[${sSpell}]} && ${sType.Find[gem]} || !${Me.AltAbility["${sSpell}"]} && ${sType.Find[alt]}) {
    /echo POOOO ${sSpell} -- ${sType}
    /return
  }
  :WaitToCast
    /if (${Me.Dead}) /return
    /if (!${Me.SpellReady["${sSpell}"]} && ${sType.Find[gem]} && ${Me.Gem[${sSpell}]} || !${Me.AltAbilityReady["${sSpell}"]} && ${sType.Find[alt]} && ${Me.AltAbility["${sSpell}"]}) {
      /if (${Me.AltAbilityReady[Force of Elements]}) {
          /echo Casting Force of Elements on >> ${Target.CleanName} <<
          /call cast "Force of Elements" alt
      } else /if (!${Bool[${FindItem[${ParadoxRodName}].Timer}]}) {
        /call CastItemClicky "${ParadoxRodName}"
      } else /if (!${Bool[${FindItem[${OrbName}].Timer}]}) {
        /call CastItemClicky "${OrbName}"
      }
      /goto :WaitToCast
    }
  /if (${sType.Equal[item]}) {
    /if (${FindItem[${sSpell}].InvSlot}) /call CastItemClicky "${sSpell}"
  } else /if ( ${sCheckUp.NotEqual[NULL]} ) {
    /call Cast "${sSpell}" ${sType} 0 ${sCheckUp}
  } else {
    /call Cast "${sSpell}" ${sType} 0
  }
  /if (${castReturn.Equal[CAST_SUCCESS]} && ${Target.ID}==${iTarget} && ${Target.PctHPs}>0) {
    /if (${Me.AltAbilityReady[Force of Elements]}) {
      /echo Casting Force of Elements on >> ${Target.CleanName} <<
      /call cast "Force of Elements" alt
    } else /if (!${Bool[${FindItem[${ParadoxRodName}].Timer}]} && ${FindItem[${ParadoxRodName}].ID}) {
      /call CastItemClicky "${ParadoxRodName}"
    } else /if (!${Bool[${FindItem[${OrbName}].Timer}]} && ${FindItem[${OrbName}].ID}) {
      /call CastItemClicky "${OrbName}"
    }
  }
/return ${castReturn}


i am not owner of macro nore do i take credit for it i just kept it updated for my own needs i got this macro back in 2010 and have had it laying around since it currently is working but needs major rehaul but its corrently working on my 105 mage barely lol
 
AFNuke help

Users who are viewing this thread

Back
Top
Cart