Page 1 of 1

enchanter macro

Posted: Thu May 29, 2008 12:30 pm
by nikko
helo peeps....i used to use this macro with great success...can someone please update or rewrite this macro so it works with new spells..................
| autoenc.mac
| By Rusty~
| Last update 10/27/2004
|
| /macro autoenc [ma name][sa name][radius #][minhp #]
|
| Description:
| Will assist the person set as main assist. If the main assist dies, it will assist the person
| set as secondary assist if there is one. Once a target is aquired, and is varified as being aggro
| it will then wait till the mob is engaged by the tank. Then it will wait till mob is under the spcified hp,
| or the specified time has expired since the tank has engaged, and it will tash, slow, and nuke, if enabled.
| Will mez any adds within the set radius, and debuff them if it's enabled.
| This will also keep self buffs up, and buff people on request (with the spells specified in ini).
|
|
| After running the macro for the first time, you should open the ini file generated (Auto_Yourname.ini)
| Most of the options are self explanatory
| Here's an example how the ini based buffs work:
|
| BuffList1=c6
| BuffName1=clairvoyance
| BuffType1=gem4
|
| BuffList is a list of words (or phrases) that will trigger the buff, separated by commas
| BuffName is the name of the spell or item
| BuffType is either item, gem1-9, or alt, for items, spells, or aa abilities respectively
|
| BuffName can also be a "shortcut" name. Shortcut names will cast different buffs depending on certain
| circumstances. For example, putting "c6" as the BuffName, will cast Voice of Clairvoyance if it's up,
| or else it will cast Clairvoyance. Following is a list of shortcut buffs and what they do:
|
| c6 - Will cast Voice of Clairvoyance if you have no C6 on and are in a group, else will cast Clairvoyance
| c5 - Voice of Quellious
| c4 - Will use C4 pants if you have them, else will cast Tranquility
| c3 - Will use C3 wand if you have it, else will cast Koadic's Endless Intellect
| c2 - Clairty II
| c1 - Will cast Rod of Infinite thought if you have, else will cast Clarity
| haste - If you have group haste memmed (spell name specified in ini), it will cast group haste
| else it will cast single haste. If you are under 60% mana and have elemental legs
| it will cast them instead of single or group haste spells
| shissar - Will cast epic 1.0
|
|
|
| For each self buff and clicky buff, there's a place to put all the buffs that don't stack with it:
|
| Clicky1=Velium Coldain Insignia Ring
| ClickyNoStack1=Call of Earth,Call of the Rathe,Guard of the Earth,Illusion Fire Elemental
|
| *note* To mem spells after death, save a spellset, and put the name of it in your ini under SpellSet
|
|
|----------------------------------------------------------------------------------------------------------+
| slash commands: |
|----------------------------------------------------------------------------------------------------------+
| /setma name - sets main assist |
| /setsa name - sets secondary assist |
| /buff # - mode 1 buffs all the time, self buff and tells |
| - mode 2 does self buffs and tells when you have no target |
| - mode 3 does self buffs only, all the time |
| - mode 4 does self buffs only, only when you have no target |
| /debuff on|off - turns auto debuffing on or off |
| /mez on|off - turns auto mezzing on or off |
| /mount on|off - turns auto mounting on or off |
| /nukedelay # - sets the minimum amount of deciseconds between nukes |
| /engagedelay # - amount of deciseconds before you start nuking mob |
| /anchor # - sets the leash length when using an anchor |
| /minhp # - sets the minimum hp % that you'll begin nuking at |
| /cleanup on|off - turns on auto looting of any droppable loot |
| /checknamed on|off - turns alerts on for named in your current zone |
| /runehp # - sets the health % at which you'll cast your rune item or spell|
| /nukemode 0, 1, 2 - mode 0 turns nukes off completely |
| - mode 1 uses robe if enabled, and slows nukes if low mana |
| - mode 2 chain nukes, with only delay being the set /nukedelay |
| /manarobe mode #|min #|max # - mode 1 uses manrobe all the time |
| - mode 2 uses your set % to start robing |
| /radius # - sets the distance at which you'll engage the main assist's |
| target |
|----------------------------------------------------------------------------------------------------------+

#include spell_routines.inc
#include gen_routines.inc
#include move.inc

#turbo 40

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

#event AutoStun "[MQ2] AutoStun #1#"
#event Gate "|${Target.DisplayName}| begins to cast the gate spell#*#"
#event Mez "[MQ2] mez"
#event RageOff "#*#is no longer enraged#*#"
#event RageOn "#*#has become ENRAGED#*#"
#event Ranger "[MQ2] Ranger"


Sub Main
/call GeneralDeclares

/call DeclareIniVar mainAssist string Settings
/call DeclareIniVar secondAssist string Settings
/call DeclareIniVar minRadius int Settings 150 /radius
/call DeclareIniVar engageDelay int Settings 55 /engagedelay
/call DeclareIniVar minHP int Settings 95 /minhp
/call DeclareIniVar autoBuff int Settings 1 /buff
/call DeclareIniVar useMount int Settings 0 /mount
/call DeclareIniVar useMez int Settings 1 /mez
/call DeclareIniVar useDebuff int Settings 1 /debuff
/call DeclareIniVar nukeMode int Settings 1 /nuke
/call DeclareIniVar useCharm int Settings 0 /charm
/call DeclareIniVar useTashFocus int Settings 0 /tash
/call DeclareIniVar useDPS int Settings 0 /dps
/call DeclareIniVar hasteGroup int Settings 0 /haste
/call DeclareIniVar privateChannel string Settings
/call DeclareIniVar channelAnnounce int Settings 1
/call DeclareIniVar noInterrupt int Settings 0
/call DeclareIniVar useManaStone int Settings 0 /manastone
/call DeclareIniVar checkNamed int Settings 0 /checknamed
/call DeclareIniVar noInvis int Settings 1
/call DeclareIniVar useManaRobe int Settings 1
/call DeclareIniVar manaRobeMode int Settings 1
/call DeclareIniVar manaRobeMinMana int Settings 70
/call DeclareIniVar manaRobeMaxMana int Settings 90
/call DeclareIniVar nukeMana int Settings 50 /nukemana
/call DeclareIniVar nukeDelay int Settings 0 /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 spellSet string Settings "default raid"
/call DeclareIniVar mezDuration string Settings 500
/call DeclareIniVar tashDuration string Settings 14m
/call DeclareIniVar slowDuration string Settings 2100
/call DeclareIniVar autoAnnounce string Settings 1
/call DeclareIniVar announceTells string Settings 0 /announcetells
/call DeclareIniVar rodBitch string Settings
/call DeclareIniVar noKnockBack string Settings 0 /usezoom
/call DeclareIniVar usePet int Settings 1 /companion

/call DeclareIniVar nuke1 string Spells "Psychosis"
/call DeclareIniVar nuke2 string Spells "Insanity"
/call DeclareIniVar mezSpell string Spells "Bliss"
/call DeclareIniVar tashSpell string Spells "Howl of Tashan"
/call DeclareIniVar slowSpell string Spells "Serpent of Vindication"
/call DeclareIniVar slowType string Spells "item"
/call DeclareIniVar charmSpell string Spells "Command of Druzzil"
/call DeclareIniVar aeMezSpell string Spells "Bliss of the Nihil"
/call DeclareIniVar shielding string spells "Mystic Shield"
/call DeclareIniVar singleHasteSpell string Spells "Speed of Salik"
/call DeclareIniVar groupHasteSpell string Spells "Hastening of Salik"
/call DeclareIniVar selfRune string Spells "Ethereal Rune"
/call DeclareIniVar petSpell string Spells "Salik's Animation"
/call DeclareIniVar selfBuff1 string Spells " "
/call DeclareIniVar selfBuffNoStack1 string Spells " "
/call DeclareIniVar selfBuff2 string Spells " "
/call DeclareIniVar selfBuffNoStack2 string Spells " "
/call DeclareIniVar selfBuff3 string Spells " "
/call DeclareIniVar selfBuffNoStack3 string Spells " "
/call DeclareIniVar selfBuff4 string Spells " "
/call DeclareIniVar selfBuffNoStack4 string Spells " "
/call DeclareIniVar selfBuff5 string Spells " "
/call DeclareIniVar selfBuffNoStack5 string Spells " "
/call DeclareIniVar buffList1 string Spells "c6,crack,clarity,c5,c"
/call DeclareIniVar buffName1 string Spells "c6"
/call DeclareIniVar buffType1 string Spells "gem4"
/call DeclareIniVar buffList2 string Spells "haste,sov,salik,speed,pants"
/call DeclareIniVar buffName2 string Spells "haste"
/call DeclareIniVar buffType2 string Spells "gem4"
/call DeclareIniVar buffList3 string Spells "mr,grm,god"
/call DeclareIniVar buffName3 string Spells "guard of druzzil"
/call DeclareIniVar buffType3 string Spells "gem4"
/call DeclareIniVar buffList4 string Spells "shissar,snake"
/call DeclareIniVar buffName4 string Spells "staff of the serpent"
/call DeclareIniVar buffType4 string Spells "item"
/call DeclareIniVar buffList5 string Spells "c3"
/call DeclareIniVar buffName5 string Spells "koadic's endless intellect"
/call DeclareIniVar buffType5 string Spells "gem4"

/call DeclareIniVar hpRobe string Items "${InvSlot[chest].Item.Name}"
/call DeclareIniVar clicky1 string Items "Girdle of Efficiency"
/call DeclareIniVar clickyNoStack1 string Items " "
/call DeclareIniVar clicky2 string Items "Veil of the Inferno"
/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 useFood int Items 1
/call DeclareIniVar statFood string Items "Bristlebanes Party Platter"
/call DeclareIniVar food1 string Items "Halas 10lb Meat Pie"
/call DeclareIniVar food2 string Items "Misty Thicket Picnic"
/call DeclareIniVar food3 string Items "Holy Cake"
/call DeclareIniVar food4 string Items " "
/call DeclareIniVar food5 string Items " "
/call DeclareIniVar meleeWep string Items "Staff of the Silent Star"
/call DeclareIniVar invisItem string Items "Opaline Charm"
/call DeclareIniVar dispellItem string Items "Wand of the Vortex"
/call DeclareIniVar tashFocusItem string Items "Sharp Ended Broken Lever"
/call DeclareIniVar normalMainhand string Items "${InvSlot[mainhand].Item.Name}"


/squelch /custombind add ma
/squelch /custombind add sa
/squelch /alias /anchor /echo SetAnchor
/squelch /alias /manarobe /echo Mana Robe
/squelch /alias /setma /custombind set ma /assist
/squelch /alias /setsa /custombind set sa /assist

/declare i int local
/declare j int local
/declare oldTarget int local
/declare tempTimer timer local 0
/varset castSub CheckForAdds
:check_params
/if ( ${Defined[Param${i}]} ) {
/if ( ${Param${i}.Equal[ma]} ) {
/varcalc i ${i}+1
/call SetIniVar mainAssist Settings "${Param${i}}"
} else /if ( ${Param${i}.Equal[sa]} ) {
/varcalc i ${i}+1
/call SetIniVar secondAssist Settings "${Param${i}}"
} else /if ( ${Param${i}.Equal[radius]} ) {
/varcalc i ${i}+1
/call SetIniVar minRadius Settings "${Param${i}}"
} else /if ( ${Param${i}.Equal[minhp]} ) {
/varcalc i ${i}+1
/call SetIniVar minHP Settings "${Param${i}}"
} else /if ( ${Param${i}.Equal[buff]} ) {
/call SetIniVar autoBuff Settings 1
} else /if ( ${Param${i}.Equal[nobuff]} ) {
/call SetIniVar autoBuff Settings 0
} else /if ( ${Param${i}.Equal[nuke]} ) {
/call SetIniVar nukeMode Settings 1
} else /if ( ${Param${i}.Equal[nonuke]} ) {
/call SetIniVar nukeMode Settings 0
} else /if ( ${Param${i}.Equal[mez]} ) {
/call SetIniVar useMez Settings 1
} else /if ( ${Param${i}.Equal[nomez]} ) {
/call SetIniVar useMez Settings 0
} else /if ( ${Param${i}.Equal[debuff]} ) {
/call SetIniVar useDebuff Settings 1
} else /if ( ${Param${i}.Equal[nodebuff]} ) {
/call SetIniVar useDebuff Settings 0
}
/varcalc i ${i}+1
/goto :check_params
}
/if ( !${Me.Gem[${mezSpell}]} ) {
/if ( ${Me.Gem[bliss]} ) {
/call SetIniVar mezSpell Spells Bliss
} else /if ( ${Me.Gem[sleep]} ) {
/call SetIniVar mezSpell Spells Sleep
} else /if ( ${Me.Gem[apathy]} ) {
/call SetIniVar mezSpell Spells Apathy
} else /if ( ${Me.Gem[glamour of kintaz]} ) {
/call SetIniVar mezSpell Spells "Glamour of Kintaz"
} else /if ( ${Me.Gem[felicity]} ) {
/call SetIniVar mezSpell Spells Felicity
} else /if ( ${Me.Gem[euphoria]} ) {
/call SetIniVar mezSpell Spells Euphoria
}
}

/if ( !${InvSlot[chest].Item.Name.Equal[mana robe]} ) /call SetIniVar hpRobe Items "${InvSlot[chest].Item.Name}"

/call SwapStatFood 1

/squelch /alert clear 6

/if ( ${autoAnnounce} ) /announce on

/echo AutoEnc Mode Activated
/if ( ${nukeMode} || ${useDebuff} || ${useMez} ) {
/echo Main Assist: ${mainAssist}
/if ( ${Bool[${secondAssist}]} ) /echo Secondary Assist: ${secondAssist} (if ${mainAssist} dies)
}
/if ( ${nukeMode} ) /echo Nuke Mode: ${nukeMode}
/if ( ${useDebuff} ) /echo Auto Debuffs Enabled
/if ( ${useMez} ) {
/echo Auto Mez adds within a radius of ${minRadius}
/if ( !${Me.Gem[${mezSpell}]} ) /memspell 7 "${mezSpell}"
}
/if ( ${autoBuff} ) /echo AutoBuff Mode: ${autoBuff}
/if ( ${useMount} ) /echo Mount is enabled.
/if ( ${manaRobeMode} ) /echo ManaRobe Mode: ${manaRobeMode}
:wait_for_target
/if ( ${nukeMode} || ${useDebuff} || ${useMez} ) /echo Waiting for target...
/varset newAdds 0
/varset validTarget 0
:wait_for_target2
/if ( ${Spawn[pc ${secondAssist}].ID} && ( !${Spawn[pc ${mainAssist}].ID} || ${Spawn[corpse ${mainAssist} radius ${minRadius}].ID} ) ) {
/varset mainTank ${secondAssist}
} else {
/varset mainTank ${mainAssist}
}
/if ( !${Corpse.Open} && ${Spawn[${mainAssist}].NearestSpawn[npc radius ${Math.Calc[${minRadius}*2]}].ID} && ( ${nukeMode} || ${useDebuff} || ${useMez} ) ) {
/if ( ${Me.Casting.ID} ) /call WaitCast
/assist ${mainTank}
/call ManaRobe
/varset oldTarget ${Target.ID}
/varset tempTimer 5
/call CheckRune 100
:wait_for_assist1
/call CheckTarget
/if ( ${tempTimer} && !${validTarget} ) /goto :wait_for_assist1
}
/call CheckTarget
/if ( !${validTarget} || ( !${nukeMode} && !${useDebuff} && !${useMez} ) ) {
/doevents
/call CheckBuffs
/call CheckPet
/call CheckRune ${runeHP}
/if ( ${useAnchor} ) /call CheckLoc
/call ManaRobe
/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}
/if ( ${Defined[mezTimer${mobID}]} ) /deletevar mezTimer${mobID}
/declare mezTimer${mobID} int outer -1
/varset newAdds 0
/varset nukeWaitTimer 0
/varset fightStartTime 0
/varset totalNonMeleeDmg 0
/varset totalMeleeDmg 0
/if ( ${Defined[waitTimer${mobID}]} ) /deletevar waitTimer${mobID}
/declare waitTimer${mobID} int outer -1
:check_add_loop
/if ( ( ${Target.PctHPs}>${minHP} && ${waitTimer${mobID}} ) || !${assistWaitTimer} ) {
/if ( ${Spawn[pc ${secondAssist}].ID} && ( !${Spawn[pc ${mainAssist}].ID} || ${Spawn[corpse ${mainAssist} radius ${minRadius}].ID} ) ) {
/varset mainTank ${secondAssist}
} else {
/varset mainTank ${mainAssist}
}
/if ( ${Me.Casting.ID} ) /call WaitCast
/assist ${mainTank}
/if ( ${useManaRobe} && ( ${refreshTime} || ${nukeWaiTimer} || !${nukeMode} ) ) /call ManaRobe
/varset tempTimer 8
:wait_for_assist
/call CheckForAdds
/doevents Timer
/if ( ${tempTimer} && ${Target.ID}==${mobID} ) /goto :wait_for_assist
/if ( ${Target.ID} && ${Target.ID}!=${mobID} ) {
/if ( ${Defined[mezTimer${mobID}]} ) /deletevar mezTimer${mobID}
/call DeleteFromList mobList ${mob}
/goto :wait_for_target
}
/varset assistWaitTimer 5s
}
/varset addIndex 1
:check_add_loop2
/call CheckForAdds
/if ( ${addIndex}>1 ) /goto :check_add_loop2
/if ( ${newAdds} ) /call MezAdds
/call CheckPet
/if ( !${Spawn[${mobID}].Type.Equal[NPC]} && !${Spawn[${mobID}].Type.Equal[pet]} ) /goto :mob_dead
/if ( !${nukeMode} && !${useDebuff} && !${useMez} ) /goto :wait_for_target
/target id ${mobID}
/if ( ( ${Target.PctHPs}<${mobHPStart} ) && ${Spawn[pc ${mainTank}].NearestSpawn[radius ${Math.Calc[${Spawn[${mobID}].MaxRangeTo}+10]} id ${mobID}].ID} && ${waitTimer${mobID}}<0 && ${Spawn[${mobID}].Distance3D}<=${minRadius} ) {
/deletevar waitTimer${mobID}
/declare waitTimer${mobID} timer outer ${engageDelay}
}
/doevents
/target id ${mobID}

/if ( ${Target.PctHPs}>${minHP} && ${waitTimer${mobID}} ) /goto :check_add_loop
/if ( ${newAdds} ) /call MezAdds
/if ( !${engaged} ) {
/varset engaged 1
/echo Engaging >> ${Target.DisplayName} <<
}
/if ( ${Me.Pet.ID} && !${petAttacking} && !${Me.PetBuff[word of worell]} ) {
/pet attack
/varset petAttacking true
}
/call UpdateMobList
/doevents Timer
/if ( ${useDebuff} && !${newAdds} ) /call DebuffMobs
/if ( ${Spawn[${mobID}].Type.Equal[NPC]} || ( !${Spawn[${mobID}].Master.Type.Equal[PC]} && ${Spawn[${mobID}].Type.Equal[pet]} ) ) {
/target id ${mobID}
} else {
/goto :mob_dead
}
/if ( !${newAdds} && ( ${slowTimer${mobID}}>1 || ${slowTimer${mobID}}<0 || !${useDebuff} ) ) {
/call CheckRune 100
/call CheckBuffs
/target id ${mobID}
/if ( ${Target.Type.Equal[npc]} && ( ${Target.Class.CanCast} || ${Zone.ID}>=300 ) ) {
/if ( ${Me.Gem[Scryer's Trespass]} && !${spellRecastTimer${Me.Gem[Scryer's Trespass]}} ) /call Cast "Scryer's Trespass" spell 0 CheckForAdds
/if ( ${Me.Gem[Theft of Thought]} && !${spellRecastTimer${Me.Gem[Theft of Thought]}} ) /call Cast "Theft of Thought" spell 0 CheckForAdds
}
/target id ${mobID}
/if ( ${refreshTime}<20 && ( ${Target.PctHPs}<${mobHPStart} || ${minHP}==100 ) && !${newAdds} && ${Target.LineOfSight} && !${Me.TargetOfTarget.Name.Equal[${Me.Name}]} && !${nukeWaitTimer} && ${nukeMode} && ( ${Me.PctMana}>=${nukeMana} || ${nukeMode}==2 ) && ( ${Target.Type.Equal[NPC]} || ${Target.Type.Equal[pet]} ) ) {
/if ( !${fightStartTime} ) /varset fightStartTime ${MacroQuest.Running}
/call Cast "${nuke1}" gem1 0 CheckForAdds
/if ( ${Macro.Return.Equal[CAST_NOTREADY]} ) {
/if ( ${Me.Gem[${nuke2}]} ) {
/call Cast "${nuke2}" gem2 0 CheckForAdds
} else {
/call ManaRobe
}
}
/if ( ${Macro.Return.Equal[CAST_SUCCESS]} || ${Macro.Return.Equal[CAST_RESISTED]} ) {
/if ( ${nukeMode}==1 ) {
/varcalc nukeWaitMod 5*(90 - ${Me.PctMana})
} else {
/varset nukeWaitMod 0
}
/if ( ${nukeDelay}>${nukeWaitMod} ) {
/varset nukeWaitTimer ${nukeDelay}
} else {
/varset nukeWaitTimer ${nukeWaitMod}
}
}
} else {
/call ManaRobe
}
}
/goto :check_add_loop
:mob_dead
/call UpdateMobList
/echo Target Dead!
/doevents
/if ( ${useDPS} ) {
/call DisplayDPS
}
/goto :wait_for_target
Sub CheckForAdds
/if ( ${Me.Casting.ID} ) {
/doevents gate
/doevents rageon
/doevents rageoff
/doevents uquakey
/doevents setvar
/if ( ${castEndTime}>5 ) /doevents chat
/if ( !${castReturn.Equal[CAST_CANCELLED]} && ${castEndTime} && ${castEndTime}<=5 && ( !${startCastingLoc.Arg[1].Equal[${Me.X}]} || !${startCastingLoc.Arg[2].Equal[${Me.Y}]} ) ) {
/keypress forward
/keypress left
/squelch /zoom ${startCastingLoc}
}
/if ( ${useMez} && ${newAdds} && !${Me.Casting.Name.Equal[${mezSpell}]} && !${Spawn[${petID}].Type.Equal[NPC]} ) /call Interrupt
}
/if ( ${Target.ID}==${mobID} && ${Me.TargetOfTarget.Type.Equal[pc]} && ${Me.TargetOfTarget.Class.Name.Equal[cleric]} && ${Me.TargetOfTarget.PctHPs}<=50 && ${Me.AltAbilityReady[soothing words]} ) {
/if ( ${Me.TargetOfTarget.ID}==${Group[1].ID} || ${Me.TargetOfTarget.ID}==${Group[2].ID} || ${Me.TargetOfTarget.ID}==${Group[3].ID} || ${Me.TargetOfTarget.ID}==${Group[4].ID} || ${Me.TargetOfTarget.ID}==${Group[5].ID} ) {
/if ( ${Me.Casting.ID} && !${Me.Casting.Name.Equal[${mezSpell}]} && !${Spawn[${petID}].Type.Equal[NPC]} ) /call Interrupt
/call Cast "soothing words" alt
}
}

/if ( ${useCharm} ) /call CheckPet2
:check_add_loop
/if ( !${Spawn[${mobID}].Type.Equal[NPC]} && !${Spawn[${mobID}].Master.Type.Equal[NPC]} && !${petOff} ) {
/varset addIndex 1
/varset newAdds 0
/return
}
/if ( ${petCheck} ) {
/varset addID ${NearestSpawn[${addIndex},npc radius ${minRadius}].ID}
} else {
/varset addID ${NearestSpawn[${addIndex},pet radius ${minRadius}].ID}
}
/if ( ${addID} ) {
/if ( ( ${mezTimer${addID}}<=${Math.Calc[${mezDuration}-50]} || !${mezTimer${addID}} ) && ${Spawn[${addID}].Distance3D}<=${minRadius} && ${addID}!=${petID} && ${Spawn[${addID}].LineOfSight} && ${aggroAnim.Find[|${Spawn[${addID}].Animation}|]} && ${mezTimer${addID}}!=-1 && ( ( !${Spawn[${addID}].Master.Type.Equal[PC]} && ${Spawn[${addID}].Type.Equal[pet]} ) || ( ${Spawn[${addID}].Type.Equal[NPC]} && ${addID}!=${Spawn[${mobID}].Master.ID} ) ) ) {
/call AddToList addList ${addID}
/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 {
/varcalc petCheck !${petCheck}
/varset addIndex 1
}
/return

Sub CheckPet2
/if ( ${Zone.ID}!=${currentZone} ) /call Event_Zone
/if ( ${petOff} && ${Me.Pet.ID} ) {
/varset petOff 0
/if ( !${addList.Find[[]} ) /varset newAdds 0
}
/if ( ${Spawn[${petID}].Type.Equal[NPC]} && !${petOff} && ${useCharm} && ${petID} ) {
/echo Pet Off!
/varset petAttacking false
/varset newAdds 1
/varset petOff 1
/if ( ${useCharm}>1 && ${Me.Casting.ID} && ${useMez} && ${newAdds} && !${Me.Casting.Name.Equal[${mezSpell}]} && !${Me.Casting.Name.Equal[word of morell]} && !${Me.Casting.Name.Equal[howl of tashan]} && !${Me.Casting.Name.Equal[${charmSpell}]} ) /call Interrupt
/if ( ${useCharm}==1 ) {
/beep
/timed 7 /g PET OFF!! snare/malo pls!
/target id ${petID}
}
}
/return

Sub CheckPet
/if ( !${FindItem[${normalOffhand}].ID} && ${InvSlot[offhand].Item.ID} ) /varset normalOffhand ${InvSlot[offhand].Item.Name}
/if ( ${FindItem[Wand of Destructive Protection].ID} ) {
/declare AETime float local
/varcalc AETime (${MacroQuest.Running}-${uquaAETime})%90000
/if ( ${AETime}>84000 ) {
/if ( !${Me.Inventory[offhand].Name.Equal[Wand of Destructive Protection]} ) /call EquipItem "Wand of Destructive Protection|offhand"
} else {
/if ( ${AETime}>3000 && !${Me.Inventory[offhand].Name.Equal[${normalOffhand}]} ) /call EquipItem "${normalOffhand}|offhand"
}
}
/doevents rageon
/doevents rageoff
/declare i int local
/declare tempID int local
/call CheckPet2
/if ( ${petOff} ) {
/if ( ${useCharm}>1 ) {
/call Charm ${petID}
}
}
/for i 1 to ${Group}
/varset tempID ${Group.Member[${i}].Pet.ID}
/if ( ${tempID} ) {
/if ( !( ${slowTimer${tempID}}<0 ) ) {
/if ( ${Defined[mezTimer${tempID}]} ) /deletevar mezTimer${tempID}
/if ( ${Defined[slowTimer${tempID}]} ) /deletevar slowTimer${tempID}
/if ( ${Defined[tashTimer${tempID}]} ) /deletevar tashTimer${tempID}
/declare mezTimer${tempID} int outer -1
/declare tashTimer${tempID} int outer -1
/declare slowTimer${tempID} int outer -1
}
}
/next i
/return

Sub MezAdds
/if ( !${useMez} ) /goto :end_mez_adds
/declare tempID string local
/declare AEmezzed int local 0
:mez_adds_loop
/if ( ${addList.Find[[]} ) {
/if ( ${addList.Find[[]}>1 ) /varset addList ${addList.Right[-${Math.Calc[${addList.Find[[]}-1]}]}
/if ( !${Spawn[${mobID}].Type.Equal[NPC]} && !${Spawn[${mobID}].Master.Type.Equal[NPC]} ) /return
/varset tempID ${addList.Arg[1,[].Left[-1]}
/if ( !${Spawn[${tempID}].Type.Equal[NPC]} && !${Spawn[${tempID}].Master.Type.Equal[NPC]} ) {
/if ( ${Defined[mezTimer${tempID}]} ) /deletevar mezTimer${tempID}
/if ( ${Defined[slowTimer${tempID}]} ) /deletevar slowTimer${tempID}
/if ( ${Defined[tashTimer${tempID}]} ) /deletevar tashTimer${tempID}
} else {
/target id ${tempID}
/if ( !${AEmezzed} && ${Spawn[${tempID}].NearestSpawn[2,npc radius 30].ID} && ${Spawn[${tempID}].Distance3D}>30 && ${addList.Count[[]}>=2 ) {
/call Cast "${aeMezSpell}"
/varset AEmezzed 1
}
/target id ${tempID}
/call Mez
}
/call DeleteFromList addList ${tempID}
/goto :mez_adds_loop
}
:end_mez_adds
/varset newAdds 0
/return

Sub DebuffMobs
/declare i int local
/declare tempID 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 tempID ${mobList.Arg[${i},[].Left[-1]}
/if ( !${Defined[slowTimer${tempID}]} ) {
/if ( !${Spawn[${tempID}].Type.Equal[npc]} ) {
/declare slowTimer${tempID} int outer 0
} else /if ( ( ( !${waitTimer${tempID}} || ${mezTimer${tempID}}>0 ) && ( ${slowTimer${mobID}} || ${waitTimer${mobID}} ) ) || ${tempID}==${mobID} ) {
/call UpdateMobList
/doevents Timer
/target id ${tempID}
/if ( !${tashTimer${tempID}} ) /call Tash
/if ( ${newAdds} ) /return
/call Slow
/if ( ${addList.Find[[]} ) /varset newAdds 1
/if ( ${newAdds} ) /return
/if ( ${Macro.Return.Equal[CAST_CANCELLED]} ) /return
/if ( ${newAdds} ) /return
}
}
/if ( !${Spawn[${mobID}].Type.Equal[NPC]} && !${Spawn[${mobID}].Master.Type.Equal[NPC]} ) /return
/next i
}
/return

Sub Charm(int tempID)
/declare oldTargetID int local ${Target.ID}
/target id ${tempID}
/if ( ${Me.Gem[Word of Morell]} ) {
/if ( ${Target.Distance3D}>30 ) {
/face fast nolook
/keypress forward hold
/delay 1s ${Target.Distance3D}<=30
/keypress forward
/delay 5 !${Me.Moving}
}
/if ( ${Target.Distance3D}<=30 ) /call Cast "Word of Morell" gem4 6s CheckForAdds
}
/target id ${tempID}
/if ( ${tashTimer${tempID}}<5500 ) /call Tash
/target id ${tempID}
/call Cast "${charmSpell}" gem6 2s CheckForAdds
/if ( ${Me.Pet.ID} ) {
/if ( ${Spawn[${oldTargetID}].ID} ) {
/target id ${oldTargetID}
} else {
/squelch /target clear
}
}
/return

Sub Tash
/declare tempID int local ${Target.ID}
/if ( ${useTashFocus} ) /call SwapItem "${tashFocusItem}" ${FindItem[${tashFocusItem}].WornSlot[1]}
/call Cast "${tashSpell}" gem3 6s
/if ( !${Defined[tashTimer${tempID}]} ) /declare tashTimer${tempID} timer outer
/if ( ${Macro.Return.Equal[CAST_SUCCESS]} ) {
/varset tashTimer${tempID} ${tashDuration}
} else {
/varset tashTimer${tempID} 1
}
/call SwapItem "${normalMainhand}" mainhand
/return ${Macro.Return}

Sub Slow
/declare tempID int local ${Target.ID}
/doevents Hit
/call Cast "${slowSpell}" ${slowType} 6s CheckForAdds
/if ( !${Defined[slowTimer${tempID}]} ) /declare slowTimer${tempID} timer outer
/if ( ${Macro.Return.Equal[CAST_IMMUNE]} ) {
/deletevar slowTimer${tempID}
/declare slowTimer${tempID} int outer -1
} else /if ( ${Macro.Return.Equal[CAST_SUCCESS]} ) {
/varset slowTimer${tempID} ${slowDuration}
} else /if ( ${newAdds} || ${Macro.Return.Equal[CAST_OUTOFMANA]} || ${Macro.Return.Equal[CAST_OUTOFRANGE]} || ${Macro.Return.Equal[CAST_CANNOTSEE]} ) {
/varset slowTimer${tempID} 50
} else {
/varset slowTimer${tempID} 1
}
/return ${Macro.Return}

Sub Mez
/declare tempID int local ${Target.ID}
/declare resistCount int local 0
/if ( ${mezTimer${tempID}}>${Math.Calc[${mezDuration}-50]} ) /return
:mez_loop
/tar id ${tempID}
/if ( ${Target.PctHPs}<99 && ${mezTimer${tempID}} ) {
/deletevar mezTimer${tempID}
/declare mezTimer${tempID} int outer -1
/return ${Macro.Return}
}
/if ( !${Spawn[${tempID}].Type.Equal[NPC]} && !${Spawn[${tempID}].Master.Type.Equal[NPC]} ) {
/call UpdateMobList
/return
}
/if ( !${Defined[mezTimer${tempID}]} ) /declare mezTimer${tempID} timer outer
/doevents Hit
/call Cast "${mezSpell}" gem7 3s CheckForAdds
/if ( ${Macro.Return.Equal[CAST_IMMUNE]} || ${Macro.Return.Equal[CAST_CANCELLED]} ) {
/deletevar mezTimer${tempID}
/declare mezTimer${tempID} int outer -1
} else /if ( ${Macro.Return.Equal[CAST_SUCCESS]} ) {
/varset mezTimer${tempID} ${mezDuration}
} else /if ( ${Macro.Return.Equal[CAST_OUTOFMANA]} || ${Macro.Return.Equal[CAST_OUTOFRANGE]} || ${Macro.Return.Equal[CAST_CANNOTSEE]} ) {
/varset mezTimer${tempID} 50
} else {
/if ( ${Macro.Return.Equal[CAST_INTERRUPTED]} ) {
/if ( ${Me.SpellReady[word of morrel]} ) {
/call Cast "Word of Morell" gem4 4s
}
}
/if ( ${Macro.Return.Equal[CAST_RESISTED]} ) {
/varcalc resistCount ${resistCount}+1
/if ( ${resistCount}==2 && !${tashTimer${addID}} ) /call Tash
}
/if ( !${Spawn[${mobID}].Type.Equal[NPC]} && !${Spawn[${mobID}].Master.Type.Equal[NPC]} && ${useMez} ) /return
/goto :mez_loop
}
/return ${Macro.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[tashTimer]} ) {
/varset tempID ${timerName.Right[-9]}
/if ( ${Spawn[${tempID}].Type.Equal[NPC]} || ${Spawn[${tempID}].Master.Type.Equal[NPC]} ) {
/target id ${tempID}
/call Tash
} else {
/deletevar ${timerName}
}
} else /if ( ${timerName.Left[9].Equal[slowTimer]} ) {
/varset tempID ${timerName.Right[-9]}
/if ( ${Spawn[${tempID}].Type.Equal[NPC]} || ${Spawn[${tempID}].Master.Type.Equal[NPC]} ) {
/target id ${tempID}
/call Slow
} else {
/deletevar ${timerName}
}
} else /if ( ${timerName.Left[8].Equal[mezTimer]} ) {
/varset tempID ${timerName.Right[-8]}
/if ( ${Spawn[${tempID}].Type.Equal[NPC]} || ${Spawn[${tempID}].Master.Type.Equal[NPC]} ) {
/target id ${tempID}
/call Mez
} else {
/deletevar ${timerName}
}
} else {
/return ${Macro.Return}
}
/if ( ${Target.ID}==${tempID} ) {
/if ( ${Spawn[${oldTargetID}].ID} ) {
/target id ${oldTargetID}
} else {
/squelch /target clear
}
}
/return ${Macro.Return}

Sub ClickOffIllusion
/declare i int local
/for i 1 to 20
/if ( ${Me.Buff[${i}].Name.Find[illusion:]} ) /notify BuffWindow buff${Math.Calc[${i}-1].Int} leftmouseup
/next i
/return

Sub IllusionRanger
/declare oldChest string local
/declare oldArms string local
/declare oldLegs string local
/declare oldPrimary string local
/declare oldSecondary string local
/call ClickOffIllusion
/call EquipItem "enchanted elven chain tunic"
/varset oldChest ${Macro.Return}
/call EquipItem "enchanted elven chainmail leggings"
/varset oldLegs ${Macro.Return}
/call EquipItem "ruined heretic longsword"
/varset oldPrimary ${Macro.Return}
/call EquipItem "preserved chokidai vocal cords"
/varset oldSecondary ${Macro.Return}
/target id ${Me.ID}
/call Cast "illusion: werewolf" gem4 10s
/call EquipItem ${oldChest}
/call EquipItem ${oldLegs}
/call EquipItem ${oldPrimary}
/call EquipItem ${oldSecondary}
/call ClickOffIllusion
/call Cast "illusion: wood elf" gem4 10s
/return

Sub CheckBuffs
/if ( ${Zone.ID}!=${currentZone} ) /call Event_Zone

/varset deathFlag ${Math.Calc[!(${InvSlot[chest].Item.ID}>0)]}
/if ( ${deathFlag} ) /goto :dead
/declare i int local
/declare oldTarget int local ${Target.ID}
/declare oldItemName string local
/declare foodName string local
/declare oldSlotID int local
/declare spellName string local
/declare buffText string local
/declare targetName string local
/declare spellName2 string local
/declare spellType string local
/declare spellRange int local 118
/declare tempID int local
/declare focusList string local Wunshi's Focusing,Focus of Alladnu,Focus of Soul,Talisman of Kragg,Focus of the Seventh,Talisman of Wunshi
/declare shaman bool local false
/declare targetType string local

/doevents Indoors
/if ( !${Me.Pet.ID} && ${usePet} && !${petOff} && ${Me.CurrentMana}>=900 ) /call SumPet
/if ( ${Me.Pet.ID} && ${petID}!=${Me.Pet.ID} ) {
/varset petID ${Me.Pet.ID}
/if ( ${Defined[mezTimer${petID}]} ) /deletvar mezTimer${petID}
/if ( ${Defined[slowTimer${petID}]} ) /deletvar slowTimer${petID}
/declare mezTimer${petID} int outer -1
/declare slowTimer${petID} int outer -1
}
/if ( !${Me.Casting.ID} ) {
/if ( ${Me.Combat} ) {
/call SwapItem "${meleeWep}" mainhand
} else {
/call SwapItem "${normalMainhand}" mainhand
}
}
/if ( ${Cursor.Name.Equal[Rod of Mystical Transvergance]} ) /autoinventory
/if ( !${FindItem[Rod of Mystical Transvergance].ID} && ${Spawn[pc ${rodBitch} radius 200].ID} && !${askedForRodTimer} ) {
;tell ${rodBitch} rod pls!
/varset askedForRodTimer 5m
}
/if ( ${FindItem[Rod of Mystical Transvergance].ID} && !${modRodTimer} && ${Me.PctHPs}>50 && ${Me.PctMana}<=95 ) {
/call Cast "Rod of Mystical Transvergance" item
/varset modRodTimer 3100
}
/if ( ${checkNamed} ) /call CheckNamed

/if ( ${Me.Hunger}<5000 && ${useFood} ) {
/call GetFoodName
/varset foodName ${Macro.Return}
/if ( ${Bool[${foodName}]} ) {
/varset oldSlotID ${FindItem[${foodName}].InvSlot.ID}
/call SwapItem "${foodName}" "pack8"
/nomodkey /itemnotify pack8 rightmouseup
/call SwapItem "${foodName}" "${oldSlotID}"
}
}
/if ( !${autoBuff} ) /goto :skip_buffs
/if ( ( ${autoBuff}==2 || ${autoBuff}==4 ) && ${Target.ID} ) /return

/call CheckIniBuffs

/if ( ${Me.Pet.ID} ) {
/if ( !${Me.PetBuff[${charmSpell}]} && !${Me.PetBuff[speed of vallon]} && !${Me.PetBuff[speed of salik]} && !${Me.PetBuff[hastening of salik]} && ${Me.Pet.Distance3D}<=120 ) /call AddToQueue "haste,${Me.Pet.Name}"
/if ( !${Me.PetBuff[Night`s Dark Terror]} && ${Me.Pet.Distance3D}<=120 && ${Me.SpellReady[Night`s Dark Terror]} ) /call AddToQueue "Night`s Dark Terror,${Me.Pet.Name}"
}
/if ( ${Me.Buff["Clairvoyance"].Duration}<=5 && ${Me.Buff["Voice of Clairvoyance"].Duration}<=5 ) {
/if ( !${Me.Buff["Voice of Quellious"].ID} && !${Me.Buff["Tranquility"].ID} ) {
/if ( ${Me.PctMana}<50 && ${FindItem[Silken Augmenter's Pantaloons].ID} && !${Me.Buff["Clairvoyance"].ID} && !${Me.Buff["Voice of Clairvoyance"].ID} ) {
/call AddToQueue "c4,${Me.Name}"
} else {
/call AddToQueue "c6,${Me.Name}"
}
} else /if ( ${Me.PctMana}>=90 && ( ${Me.Book[clairvoyance]} || ${Me.Book[voice of clairvoyance]} ) ) {
/call AddToQueue "c6,${Me.Name}"
}
}
/if ( ${hasteGroup} ) {
/for i 1 to ${Group}
/varset tempID ${Group.Member[${i}].ID}
/if ( ${tempID} ) {
/if ( !${Defined[hasteTimer${tempID}]} ) /declare hasteTimer${tempID} timer outer
/if ( ${Spawn[${tempID}].Type.Equal[pc]} ) {
/if ( !${hasteTimer${tempID}} ) {
/if ( ${Group.Member[${i}].Class.PureCaster} ) {
/deletevar hasteTimer${tempID}
/declare hasteTimer${tempID} int outer -1
} else {
/call AddToQueue "sos,${Group.Member[${i}].Name}"
/varset hasteTimer${tempID} 62m
}
}
} else /if ( ${Spawn[${tempID}].Type.Equal[corpse]} ) {
/varset hasteTimer${tempID} 0
}
} else /if ( ${Defined[hasteTimer${tempID}]} ) {
/deletevar hasteTimer${tempID}
}
/next i
}
/if ( ${Spawn[pc class shaman].ID} ) {
/if ( ${Raid.Members} ) {
/if ( ${Spawn[pc guild "${Me.Guild}" shm].ID} ) /varset shaman true
} else {
/for i 1 to ${Group}
/if ( ${Group.Member[${i}].Class.Name.Equal[shaman]} ) /varset shaman true
/next i
}
}
/if ( ${shaman} ) {
/if ( ${Me.Buff["${shielding}"].ID} ) /call ClickOffBuff "${shielding}"
} else {
/for i 1 to ${focusList.Length}
/if ( ${Me.Buff[${focusList.Arg[${i},,]}].ID} ) /goto :skip_buffs
/next i
/if ( !${Me.Buff[${shielding}].ID} ) /call AddToQueue "${shielding}"
}
:skip_buffs
/if ( !${Me.Mount.ID} && ${useMount} ) /call Cast "${InvSlot[ammo].Item.Name}" item 2s CheckForAdds
/if ( ${buffQueue.Find[[]} ) {
/if ( ${buffQueue.Find[[]}>1 ) /varset buffQueue ${buffQueue.Right[-${Math.Calc[${buffQueue.Find[[]}-1]}]}
/for i 1 to ${buffQueue.Count[[]}
/varset buffText [${buffQueue.Arg[${i},[]}
/varset spellName ${buffText.Arg[1,,].Right[-1]}
/if ( ${spellName.Right[1].Equal["]"]} ) /varset spellName ${spellName.Left[-1]}
/varset targetName ${buffText.Arg[2,,].Left[-1]}
/call GetBuffName "${spellName}"
/varset spellName ${Macro.Return.Arg[1,,]}
/varset spellType ${Macro.Return.Arg[2,,]}
/if ( ${spellType.Equal[item]} ) {
/varset spellName2 ${FindItem[${spellName}].Spell.Name}
} else {
/varset spellName2 ${spellName}
}
/if ( ${Spell[${spellName2}].TargetType.Equal[Group v2]} ) {
/varcalc spellRange 1.18*${Spell[${spellName2}].AERange}
} else {
/varcalc spellRange 1.18*${Spell[${spellName2}].Range}
}
/varset targetType pc
/if ( !${Spawn[pc ${targetName}].ID} ) /varset targetType pet
/if ( ${Bool[${spellName}]} ) {
/if ( ${Me.CurrentMana}>=${Math.Calc[${Spell[${spellName}].Mana}+${Me.ManaRegen}]} || ${spellType.Equal[item]} || ${spellType.Equal[alt]} ) {
/if ( !${Bool[${targetName}]} ) {
/call Cast "${spellName}" ${spellType} 4s CheckForAdds
} else /if ( ${Spawn[${targetType} ${targetName}].ID} && ( ${Spawn[pc ${targetName}].Distance3D}<=${spellRange} || !${spellRange} ) ) {
/target ${targetType} ${targetName}
/call Cast "${spellName}" ${spellType} 4s CheckForAdds
/if ( ${Spawn[${oldTarget}].ID} ) {
/if ( ${Target.Name.Equal[${targetName}]} ) /target id ${oldTarget}
} else {
/squelch /target clear
}
}
/if ( ${Macro.Return.Equal[CAST_SUCCESS]} || ${Macro.Return.Equal[CAST_UNKNOWNSPELL]} || ${Macro.Return.Equal[CAST_NOTARGET]} || ( ${Macro.Return.Equal[CAST_CANCELLED]} && ( !${newAdds} || !${useMez} ) ) ) {
/call DeleteFromQueue "${buffText}"
/varcalc i ${i}-1
}
}
} else {
/call DeleteFromQueue "${buffText}"
/varcalc i ${i}-1
}
/next i
}
/return
:dead
/declare i int local
/varset mobList
/varset addList
/varset buffQueue
/varset mobID 0
/varset petID 0
/varset useAnchor 0
/squelch alert clear 6
/call ClearMobList
:wait_for_loot
/varset deathFlag ${Math.Calc[!(${InvSlot[chest].Item.ID}>0)]}
/if ( ${Spawn[corpse radius 100 ${Me.Name}].ID} && ${deathFlag} ) {
/target mycorpse
/call LootCorpse
/delay 5
/goto :wait_for_loot
}
/if ( ${deathFlag} ) {
/memspellset ${spellSet}
/echo You're dead! Consenting and waiting for rez...
/consent guild
/delay 25
/consent raid
/delay 25
/consent group
:wait_for_rez
/doevents
/delay 1s
/if ( !${Window[ConfirmationDialogBox].Open} ) /goto :wait_for_rez
/delay 18s !${Window[SpellBookWnd].Open}
/echo Yay a rez!
/target id ${Me.ID}
/call cast "Clairvoyance" gem4 5s RezBuff
/call TakeRez
/delay 5s ${Spawn[corpse radius 100 ${Me.Name}].ID}
/goto :wait_for_loot
}
/return

Sub RezBuff
/if ( ${Me.Casting.ID} && ${castEndTime}<=5 ) {
/varset castReturn CAST_CANCELLED
/call TakeRez
}
/return

Sub TakeRez
:wait_for_rez2
/if ( ${Window[ConfirmationDialogBox].Open} ) {
/delay 1
/notify ConfirmationDialogBox Yes_Button leftmouseup
/goto :wait_for_rez2
}
/return

Sub GetBuffName(string spellName)
/declare i int local
/declare buffText string local
/declare spellType string local
/if ( !${Me.Gem[4].SpellType.Equal[detrimental]} ) {
/varset spellType gem4
} else {
/varset spellType gem9
}
/if ( ${spellName.Equal[gom]} ) /varset spellName Gift of Magic
/if ( ${spellName.Equal[c1]} ) {
/if ( ${FindItem[rod of infinite thought].ID} ) {
/varset spellName rod of infinite thought
/varset spellType item
} else {
/varset spellName clarity
}
}
/if ( ${spellName.Equal[c2]} ) /varset spellName Clarity II
/if ( ${spellName.Equal[c3]} ) {
/if ( ${FindItem[Wand of Tranquility].ID} ) {
/varset spellName Wand of Tranquility
/varset spellType item
} else {
/varset spellName Koadic's Endless Intellect
}
}
/if ( ${spellName.Equal[c4]} ) {
/if ( ${FindItem[Silken Augmenter's Pantaloons].ID} ) {
/varset spellName Silken Augmenter's Pantaloons
/varset spellType item
} else {
/varset spellName Tranquility
}
}
/if ( ${spellName.Equal[mgb]} ) {
/varset spellName Mass Group Buff
/varset spellType alt
}
/if ( ${spellName.Equal[c5]} ) /varset spellName Voice of Quellious
/if ( ${spellName.Equal[c6]} ) {
/if ( ${Group} && ${Me.Book[Voice of Clairvoyance]} && ${Me.Buff[Clairvoyance].Duration}<=5 && ${Me.Buff[Voice of Clairvoyance].Duration}<=5 ) {
/varset spellName Voice of Clairvoyance
} else {
/varset spellName Clairvoyance
}
}
/if ( ${spellName.Equal[haste]} ) {
/if ( ${Me.PctMana}>60 || !${FindItem[Romar's Pantaloons of Visions].ID} ) {
/varset spellType gem9
/if ( ${Me.Gem[${groupHasteSpell}]} ) {
/varset spellName ${groupHasteSpell}
} else {
/varset spellName ${singleHasteSpell}
}
} else {
/varset spellName Romar's Pantaloons of Visions
/varset spellType item
}
}
/if ( ${spellName.Equal[sov]} || ${spellName.Equal[speed of vallon]} || ${spellName.Equal[vallon]} ) {
/varset spellName Romar's Pantaloons of Visions
/varset spellType item
}
/if ( ${spellName.Equal[shissar]} || ${spellName.Equal[snake]} ) {
/varset spellName Staff of the Serpent
/varset spellType item
}
/if ( ${spellName.Equal[see invis]} ) {
/varset spellName bracer of the hidden
/varset spellType item
}
/if ( ${spellName.Equal[mr]} || ${spellName.Equal[grm]} || ${spellName.Equal[gmr]} || ${spellName.Equal[god]} || ${spellName.Equal[magic resist]} ) /varset spellName Guard of Druzzil
/if ( ${spellName.Equal[lev]} ) /varset spellName Levitation
/if ( ${spellName.Equal[sos]} ) /varset spellName Speed of Salik
/if ( ${spellName.Equal[imp invis]} ) /varset spellName Improved Invisibility
/if ( ${spellName.Equal[invis]} ) /varset spellName Cloud of Indifference
/if ( ${spellName.Equal[ivu]} ) /varset spellName Invisibility versus Undead
/if ( ${spellName.Equal[rune]} ) /varset spellName Rune of Zebuxoruk
/if ( ${spellName.Left[3].Equal[pac]} ) /varset spellName Pacification
/if ( ${Me.Book[illusion: ${spellName}]} ) /varset spellName illusion: ${spellName}
/if ( ${spellName.Equal[tash]} ) {
/varset spellName ${tashSpell}
/varset spellType gem3
}
/if ( ${spellName.Equal[slow]} ) {
/varset spellName ${slowSpell}
/varset spellType ${slowType}
}
/if ( ${spellName.Equal[mez]} ) {
/varset spellName ${mezSpell}
/varset spellType gem7
}
/if ( ${spellName.Left[6].Equal[dispel]} ) {
/if ( ${Me.Gem[recant magic]} ) {
/varset spellName Recant Magic
} else {
/varset spellName ${dispellItem}
/varset spellType item
}
}
/for i 1 to 5
/if ( ${spellName.Equal[${buffName${i}}]} ) /varset spellType ${buffType${i}}
/next i
/if ( ( ${spellType.Find[gem]} || ${spellType.Equal[spell]} ) && !${Int[${Me.Book[${spellName}]}]} ) {
/if ( ${FindItem[${spellName}].ID} ) {
/varset spellType item
} else /if ( ${Me.AltAbility[${spellName}]} || ${spellName.Equal[${Int[${spellName}]}]} ) {
/varset spellType alt
} else {
/return
}
}
/return ${spellName},${spellType}

Sub CheckRune(int tempHP)
/if ( !${Me.Buff["${selfRune}"].ID} && !${Me.Buff["Eldritch Rune"].ID} && ${autoBuff} && ( ${Me.PctHPs}<=${tempHP} || ${Me.PctMana}==100 ) ) {
/call AddToQueue "${selfRune}"
}
/return

Sub SumPet
/declare i int local
/if ( ${Me.AltAbilityReady[persistent minion]} ) /alt activate 176
/delay 10s !${Me.Casting.ID}
/delay 5s ${Me.Pet.ID}
/if ( !${Me.Pet.ID} ) {
/call cast "${petSpell}" gem4 5s
}
/return

| ======================== EVENTS ========================

Sub Event_Chat2(string chatType,string chatSender,string chatText)
/if ( ${chatText.Equal[camp]} && ${chatType.Equal[tell]} ) {
/if ( ${Me.Mount.ID} ) /dismount
/camp desktop
}
/if ( ${ignoreList.Find[|${chatSender}|]} || ${chatText.Left[4].Equal[cast]} || !${autoBuff} || ${Spawn[${chatSender}].Type.Equal[NPC]} ) /return
/if ( !${Defined[buffQueue]} ) /declare buffQueue string outer
/if ( !${Defined[chatTimer]} ) /declare chatTimer float outer
/declare chatTime float local ${MacroQuest.Running}
/declare oldTarget int local ${Target.ID}
/declare n int local
/declare spellName string local
/declare i int local
/declare j int local
/declare please bool local
/declare inGroup bool local false
/declare tempStr string local /\.,?!()
/declare tempChar string local
/declare tempStr2 string local

/for i 1 to ${tempStr.Length}
/varset tempChar ${tempStr.Mid[${i},1]}
:remove_char
/if ( ${chatText.Find[${tempChar}]} ) {
/varset chatText ${chatText.Left[${Math.Calc[${chatText.Find[${tempChar}]}-1]}]} ${chatText.Right[-${chatText.Find[${tempChar}]}]}
/goto :remove_char
}
/next i

/varset n ${chatText.Count[ ]}

:count_spaces
/if ( ${chatText.Arg[${Math.Calc[${n}+1]}].Length} ) {
/varcalc n ${n}+1
/goto :count_spaces
}

/if ( ${chatText.Find[please]} || ${chatText.Find[pls]} || ${chatText.Find[plz]} ) /varset please true
/if ( ${chatText.Arg[${n}].Find[please]} || ${chatText.Arg[${n}].Find[pls]} || ${chatText.Arg[${n}].Find[plz]} || ${chatText.Arg[${n}].Equal[me]} ) /varcalc n ${n}-1
/if ( ${Spawn[pc ${chatText.Arg[${n}]}].Name.Left[3].Equal[${chatText.Arg[${n}].Left[3]}]} ) {
/if ( !${Spawn[pc ${chatText.Arg[${n}]}].Name.Equal[${Me.Name}]} ) /varset chatSender ${Spawn[pc ${chatText.Arg[${n}]}]}
/varcalc n ${n}-1
}

/if ( ${n}==1 && ${chatText.Arg[1].Equal[invite]} && ${GroupLeader.ID}==${Me.ID} ) {
/tar pc ${chatSender}
/if ( ${Me.Casting.ID} ) /call WaitCast
/invite
}

/for j 1 to 5
/if ( ${Group.Member[${j}].Name.Equal[${chatSender}]} ) /varset inGroup true
/next j

/if ( !${Spawn[${chatSender}].ID} ) /return

/for i 1 to ${n}
/if ( ( ${chatText.Equal[plead]} && !${Spawn[pc ${chatSender}].Class.PureCaster} ) || ${chatText.Arg[${i}].Left[5].Equal[haste]} || ${chatText.Arg[${i}].Left[3].Equal[sov]} || ${chatText.Arg[${i}].Left[5].Equal[speed]} || ${chatText.Arg[${i}].Left[2].Equal[vq]} || ${chatText.Arg[${i}].Left[4].Equal[pant]} || ( ${chatText.Arg[${i}].Left[6].Equal[vallon]} && !${chatText.Find[zek]} ) ) {
/if ( ${Me.Gem[speed of salik]} && ${Me.PctMana}>50 ) {
/call AddToQueue "sos,${chatSender}"
} else {
/call AddToQueue "sov,${chatSender}"
}
}
/if ( ${chatText.Arg[${i}].Left[3].Equal[VoQ]} || ${chatText.Arg[${i}].Left[2].Equal[c5]} ) {
/call AddToQueue "c6,${chatSender}"
}
/if ( ( ( ${chatText.Equal[plead]} && ${Spawn[pc ${chatSender}].Class.CanCast} ) || ${chatText.Arg[${i}].Left[2].Equal[c6]} || ${chatText.Arg[${i}].Equal[c]} || ${chatText.Arg[${i}].Left[7].Equal[clarity]} || ${chatText.Arg[${i}].Left[8].Equal[clairity]} || ${chatText.Arg[${i}].Left[5].Equal[crack]} ) && !${chatText.Find} && !${chatSender.Equal[runningbear]} && !${chatText.Find[AE c]} && !${chatText.Find[inc c]} ) {
/if ( ${chatSender.Equal[vitesse]} ) {
/chat tell Vitesse die pls!
} else {
/call AddToQueue "c6,${chatSender}"
}
}
/if ( ( ( ${chatText.Arg[${i}].Left[3].Equal[god]} || ${chatText.Arg[${i}].Left[4].Equal[druz]} || ${chatText.Arg[${i}].Left[2].Equal[mr]} ) && ( ${please} || ${chatText.Find[can i get]} ) ) || ${chatText.Arg[${i}].Left[3].Equal[gmr]} || ${chatText.Arg[${i}].Left[3].Equal[grm]} || ( ${chatText.Arg[${i}].Left[5].Equal[magic]} && ${chatText.Arg[${Math.Calc[${i}+1]}].Find[resist]} ) ) {
/call AddToQueue "mr,${chatSender}"
}
/if ( ${chatText.Arg[${i}].Equal[gom]} ) {
/call AddToQueue "gom,${chatSender}"
}
/if ( ${chatText.Arg[${i}].Equal[insight]} ) {
/call AddToQueue "insight,${chatSender}"
}
/if ( ${chatText.Arg[${i}].Left[2].Equal[c1]} ) {
/call AddToQueue "c1,${chatSender}"
}
/if ( ${chatText.Arg[${i}].Left[2].Equal[c2]} ) {
/call AddToQueue "c2,${chatSender}"
}
/if ( ${chatText.Arg[${i}].Left[2].Equal[c3]} ) {
/call AddToQueue "c3,${chatSender}"
}
/if ( ${chatText.Arg[${i}].Equal[shissar]} ) {
/call AddToQueue "shissar,${chatSender}"
}
/if ( ( ${Me.Book[illusion: ${chatText.Arg[${i}]}]} || ${Me.Book[illusion: ${chatText.Arg[${i}]} ${chatText.Arg[${Math.Calc[${i}+1]}]}]} ) && ( ${please} || ${n}==1 || ${chatText.Arg[${Math.Calc[${i}+1]}].Left[2].Equal[me]} || ${chatText.Arg[${Math.Calc[${i}+2]}].Left[2].Equal[me]} ) ) {
/if ( ${inGroup} ) {
/if ( ${Me.Book[illusion: ${chatText.Arg[${i}]}]} ) {
/call AddToQueue "${chatText.Arg[${i}]},${chatSender}"
} else {
/call AddToQueue "${chatText.Arg[${i}]} ${chatText.Arg[${Math.Calc[${i}+1]}]},${chatSender}"
}
}
}
/next i

/varcalc chatTimer (${MacroQuest.Running}-${chatTime})/1000
/echo ${chatTimer} secs to parse chat
/return

Sub Event_AutoStun(string line,string toggle)
/if ( !${Defined[useStun]} ) /declare useStun int outer 0
/if ( ${toggle.Equal[on]} ) {
/varset useStun 1
} else {
/varset useStun 0
}
:stun_loop
/if ( ${useStun} ) {
/if ( ${refreshTime} ) /call ManaRobe
/call Cast "Color Cloud"
/call Cast "Color Slant"
/if ( ${Macro.Return.Equal[CAST_INTERRUPTED]} ) /call Cast "Color Flux"
/if ( ${Macro.Return.Equal[CAST_NOTREADY]} ) /call Cast "Color Shift"
/if ( ${Macro.Return.Equal[CAST_NOTREADY]} ) /call Cast "Color Skew"
/call CheckRune 90
/doevents AutoStun
/doevents chat
/doevents setvars
/goto :stun_loop
}
/return

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

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

Sub Event_Mez
/if ( ${Defined[mezTimer${Target.ID}]} ) /deletevar mezTimer${Target.ID}
/call Mez
/return

Sub Event_Gate(string line,string mobName)
/if ( !${Me.Casting.Name.Equal[${mezSpell}]} ) /call Interrupt
/call Cast "${mezSpell}" gem7 3s CheckForAdds
/return

Sub Event_Ranger
/call IllusionRanger
/return

Posted: Thu May 29, 2008 1:04 pm
by EQ007
Donate and become a VIP. Then goto this thread Nils Autoenc rewrite

Posted: Thu May 29, 2008 1:38 pm
by Olain
EQ007 wrote:Donate and become a VIP. Then goto this thread Nils Autoenc rewrite
What he said!

Posted: Thu May 29, 2008 7:07 pm
by TypePun
Agreed! Nils macro works great!

Posted: Thu May 29, 2008 11:24 pm
by nikko
i cant get nils macro loaded...says cant load line quickbeg.ini....any ideas?

Posted: Fri May 30, 2008 12:14 am
by dont_know_at_all
post in that thread...