Loosely based on my Ranger Auto-Archery macro.
This macro can auto canni, slow, malo, weaken, DoT, DD, Haste your group and keep them hasted, Buff your group and keep them buffed, make a pet and automatically send it in to attack, Heal your group and keep them healed, and autoassist your tank and begin doing what you've told it to.
Usage:
/mac shammy <malo|slow|canni|pet|autoassist|verbose|sit|disempower|haste|grouphaste|buffgroup|bigbuffgroup|bear|dot|DD|healer>
Use any or all of the toggles in any order.
There are two ways in which the autoshaman can begin attacking a mob, you can attack it and that will start the debuffing/DoTing/DDing of said mob OR you can start the macro with the autoassist toggle and the person you want to assist.
The macro will always debuff first and attempt to slow untill it lands or the mob dies, then it will DoT, and if the mob still lives after that, it will then DD.
Enjoy!
Code: Select all
|**
shammy.mac Auto-Shaman
Shammy.mac v3.0
Created by loadingpleasewait
-----------------------------------------------
ChangeLog can be found at the end of the macro.
-----------------------------------------------
REQUIREMENT Spell_Routines.inc for reliable spell casting which can be found here:
http://macroquest2.com/phpBB2/viewtopic.php?t=7568
Usage:
/mac shammy <malo|slow|canni|pet|autoassist|verbose|sit|disempower|hastegroup|buffgroup|bigbuffgroup|bear|dot|DD|healer>
Use all, or none, in any order seperated by spaces to do specified action
Enjoy.
**|
#include Spell_Routines.inc
#turbo 40
#Event exp "#*#experience!#*#"
Sub Main
/assist on
/echo "Auto-Shaman Macro has begun."
|------------------------------------------------------------------------------
| ****EDIT FROM HERE FOR YOUR SPECIFIC PREFERANCES****
| Please State your Level Specific Slow/Malo/Canni/Disempower/Pet/BearForm spells here..
/declare Slowspell outer "Turgur's Insects"
/declare Malospell outer "Malaisement"
/declare Disempowerspell outer "incapacitate"
/declare Cannispell outer "Cannibalize II"
/declare petspell outer "Frenzied Spirit"
/declare bearspell outer "Form of the Bear"
| Healing Section, heal spells, heal percentages, etc..
| HoT percent is the percent to cast your HoT, it also decides when to turn canni off
| Healpercent is the percent to cast your heal spell, if your HP get lower even with your HoT on.
/declare HoTspell outer "Stoicism"
/declare HoTpercent outer 45
/declare Healspell outer "Superior Healing"
/declare Healpercent outer 30
/declare healgrouppct outer 30
| Declare Group Tells when Verbosity is turned on
/declare MaloVerbosity outer ${Malospell} landed on %t
/declare SlowVerbosity outer %t Slowed
/declare SlowResistVerbosity outer %t resisted slow
/declare SlowImmuneVerbosity outer %t cant be slowed
/declare PowerVerbosity outer %t weakened
/declare HealGroupVerbosity outer ${Healspell} on %t
| Please Declare your Haste Spell here..
/declare hastespell outer "alacrity"
/declare grouphastespell outer "ENTER GROUP HASTE SPELL HERE"
| Please List the spells which you would like to use with BigBuffGroup
/declare BigBuffArray[3] string outer
/varset BigBuffArray[1] "Infusion of Spirit"
/varset BigBuffArray[2] "Stamina"
/varset BigBuffArray[3] "Talisman of Altuna"
| Please List the spells which you would like to use with BigBuffGroup
| that get checked by pet, NOTE: you must have a pet in order for these to work
/declare BigPetBuffArray[1] string outer
/varset BigPetBuffArray[1] "dexterity"
| Please List the spells which you would like to use with the regular BuffGroup
/declare SmallBuffArray[2] string outer
/varset SmallBuffArray[1] "Harnessing of Spirit"
/varset SmallBuffArray[2] "Stamina"
| Please List the DoTs you would like to use if toggled on
/declare DotArray[2] string outer
/varset DotArray[1] "Envenomed Bolt"
/varset DotArray[2] "Venom of the Snake"
/declare timestotry outer 2
| Please List the Direct Damage spells you would like to use if toggled on
/declare DDArray[1] string outer
/varset DDArray[1] "Blizzard Blast"
| End Level specific spell declares..
| pct to slow is the percent of the target's hps you want to begin casting slow
| assistdistance is how close the mob has to be to you before you begin casting, and send pet in
/declare assistdistance outer 100
/declare pcttoslow outer 92
/declare sendpethp outer 94
| Array for spells to be used for training
/declare TrainSpellsArray[5] string outer
/varset TrainSpellsArray[1] "Minor Healing"
/varset TrainSpellsArray[2] "Burst of Flame"
/varset TrainSpellsArray[3] "Summon Drink"
/varset TrainSpellsArray[4] "True North"
/varset TrainSpellsArray[5] "Inner Fire"
| **** END EDIT HERE ****
|----------------------------------------------------------------------
| The rest of these declares should be left alone.
/declare g int outer
/declare petsent outer 0
/declare healertoggle outer 0
/declare dottoggle outer 0
/declare Dotted outer 1
/declare tried outer 0
/declare ddtoggle outer 0
/declare SpellName outer 0
/declare wait4cast outer 0
/declare LoM outer 0
/declare lowonmana outer 0
/declare bearform outer 0
/declare battle outer 0
/declare siting outer 0
/declare haste outer 0
/declare grouphaste outer 0
/declare buffgroup outer 0
/declare bigbuffgroup outer 0
/declare autoassist outer 0
/declare tankname outer 0
/declare verbose outer 0
/declare sitstatus outer 0
/declare pettoggle outer 0
/declare cannitoggle outer 0
/declare needcanni outer 0
/declare malotoggle outer 0
/declare needmalo outer 0
/declare powertoggle outer 0
/declare needpower outer 0
/declare slowtoggle outer 0
/declare needslow outer 0
/declare immunetoslow outer 0
/declare startexp outer 0
/declare startaaxp outer 0
/declare currentxp outer 0
/declare xpgain outer 0
/declare currentaa outer 0
/declare aagain outer 0
/declare prevmana outer ${Me.PctMana}
/declare targetarray[4] string outer
/declare SpellTraintoggle outer 0
/declare maxiskill outer ${Math.Calc[${Me.Level}*5+5].Int}
/if (${Me.Level}>49) /varset maxiskill 235
/varset startexp ${Me.PctExp}
/varset startaaxp ${Me.PctAAExp}
/if (!${Defined[Param0]}) {
/echo You must define what you want the macro to do.
/echo Parameters: malo slow disempower canni pet dot DD autoassist trainspells
/echo haste grouphaste bigbuffgroup buffgroup verbose sit LoM bear healer
/endmacro
}
| This is where it figures out what you want it to do via parameters
/for g 0 to 15
/if (${Defined[Param${g}]}) {
/if (${Param${g}.Equal[slow]}) {
/echo "Auto-Slow enabled"
/varset slowtoggle 1
/varset needslow 1
/varset immunetoslow 0
}
/if (${Param${g}.Equal[malo]}) {
/echo "Auto-Malo enabled"
/varset malotoggle 1
/varset needmalo 1
}
/if (${Param${g}.Equal[Canni]}) {
/echo "Auto-Canni enabled"
/varset cannitoggle 1
/varset needcanni 1
}
/if (${Param${g}.Equal[verbose]}) {
/echo "Group Anounce enabled"
/varset verbose 1
}
/if (${Param${g}.Equal[pet]}) {
/echo "Pet-Attack enabled"
/varset pettoggle 1
/varset petsent 0
}
/if (${Param${g}.Equal[autoassist]}) {
/echo "Auto-Assist enabled"
/varset autoassist 1
/if (!${Target.ID} || ${Target.Type.NotEqual[PC]}) {
/echo You need to target your assist, and make sure its a player character!
/endmacro
} else {
/varset tankname ${Target.CleanName}
/echo Assist set to ${tankname}
/assist off
}
}
/if (${Param${g}.Equal[sit]}) {
/echo "Sitstatus=1"
/varset sitstatus 1
/varset siting 1
}
/if (${Param${g}.Equal[disempower]}) {
/echo "Auto-Disempower enabled"
/varset powertoggle 1
/varset needpower 1
}
/if (${Param${g}.Equal[haste]}) {
/echo "Auto-Single Target Haste enabled"
/varset haste 1
}
/if (${Param${g}.Equal[grouphaste]}) {
/echo "Auto-Group Haste enabled"
/varset grouphaste 1
}
/if (${Param${g}.Equal[buffgroup]}) {
/echo "Auto-BuffGroup enabled"
/varset buffgroup 1
}
/if (${Param${g}.Equal[bigbuffgroup]}) {
/echo "Auto-BigBuffGroup enabled"
/varset bigbuffgroup 1
}
/if (${Param${g}.Equal[LoM]}) {
/echo "LoM Announce enabled"
/varset LoM 1
}
/if (${Param${g}.Equal[Bear]}) {
/echo "Bear Illusion enabled"
/varset bearform 1
}
/if (${Param${g}.Equal[dot]}) {
/echo "auto-dot enabled"
/varset dottoggle 1
/varset Dotted 0
}
/if (${Param${g}.Equal[dd]}) {
/echo "auto-dd enabled"
/varset ddtoggle 1
}
/if (${Param${g}.Equal[healer]}) {
/echo "auto-healer enabled"
/varset healertoggle 1
}
/if (${Param${g}.Equal[trainspells]}) {
/echo "auto-spell trainer enabled"
/varset SpellTraintoggle 1
}
}
/next g
/if (${bigbuffgroup}==1 && ${buffgroup}==1) {
/echo You can't have Bigbuffgroup AND buffgroup both toggled ON
/echo Ending Macro
/endmacro
}
/keypress esc
| This is the main loop, where it buffs, and looks for the activation for battle
:mainloop
/doevents
/call LoM
/call canni
/call battle
/if (${bearform}==1) /call bear
/call battle
/if (${pettoggle}==1) /call pet
/call battle
/if (${siting}==1 && !${Me.State.Equal[SIT]}) /sit
/call battle
/if (${haste}==1) {
/varset SpellName ${hastespell}
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/if (${pettoggle}==1) {
/if (${Me.Pet.ID} && !${Me.PetBuff[${hastespell}]}) /call haste
} else {
/if (!${Me.Buff[${hastespell}].ID} || ${Me.Buff[${hastespell}].Duration}<${wait4cast}) /call haste
}
}
/if (${grouphaste}==1) {
/varset SpellName ${grouphastespell}
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/if (!${Me.Buff[${SpellName}].ID} || ${Me.Buff[${SpellName}].Duration}<${wait4cast}) /call haste
}
/call battle
/if (${bigbuffgroup}==1) /call BigBuffs
/call battle
/if (${buffgroup}==1) /call RegularBuffs
/call battle
/if (${healertoggle}==1) /call Healer
/call battle
/if (${Me.PctHPs}>60) /varset needcanni 1
/call battle
/if (${SpellTraintoggle}==1) /call spelltrain
/goto :mainloop
/return
| This sub is where it does what its supposed to do during battle.. It will NOT buff during battle.
Sub battle
/if (${autoassist}==1) {
/assist ${tankname}
/if (${Target.Type.NotEqual[PC]} && ${Target.Distance}<${assistdistance} && !${Target.Type.Equal[Corpse]} && !${Target.Type.Equal[PET]} && ${Target.Name.NotEqual[${Me.Pet}]}) /goto :dobattle
/delay 5
}
/if (${Me.Combat} && ${Target.ID} && ${Target.CleanName.NotEqual[${Me.Name}]}) /goto :dobattle
/return
:dobattle
/varset battle 1
/attack off
/varset targetarray[1] ${Target.CleanName}
/varset targetarray[2] ${Target.Level}
/varset targetarray[3] ${Target.Name}
/varset targetarray[4] ${Target.ID}
/echo Fighting a ${targetarray[2]} ${targetarray[1]}
:battleloop
/call LoM
/if (${pettoggle}==1 && ${petsent}==0 && ${Target.PctHPs}<${sendpethp}) {
/pet attack
/varset petsent 1
}
/if (${healertoggle}==1) /call Healer
/if (${siting}==1 && !${Me.State.Equal[SIT]}) /sit
/if (${Me.Combat}) /attack off
/if (${malotoggle}==1 || ${slowtoggle}==1 || ${powertoggle}==1) /call DeBuffs
/if (${dottoggle}==1) /call DoTs
/if (${ddtoggle}==1) /call DD
/call canni
/if (!${Target.Name.Equal[${targetarray[3]}]} || !${Target.ID}) /goto :endbattle
/doevents
/goto :battleloop
:endbattle
/echo a ${targetarray[2]} ${targetarray[1]} is dead
/if (${malotoggle}==1) /varset needmalo 1
/if (${powertoggle}==1) /varset needpower 1
/if (${dottoggle}==1) /varset Dotted 0
/if (${pettoggle}==1) /varset petsent 0
/if (${slowtoggle}==1) {
/varset needslow 1
/varset immunetoslow 0
}
/keypress Num_5
/if (${sitstatus}==1) {
/sit
/varset sitstatus 0
}
/varset battle 0
/return
| This is the sub where it debuffs the mob, if needed..
Sub DeBuffs
/if (${malotoggle}==1 && ${needmalo}==1) {
/if (${Target.ID}!=${targetarray[4]}) /return
/call sitstatus
/call Cast ${Malospell} gem2 10s
/varset needmalo 0
/doevents
/if (${String[${Macro.Return}].Equal[CAST_RESISTED]}) /varset needmalo 1
/if (${sitstatus}==1) /call standstatus
/if (${verbose}==1 && ${Target.ID}==${targetarray[4]} && ${needmalo}==0 && ${Me.Gem[Malaisement]}) {
/gsay ${MaloVerbosity}
}
/varset needmalo 0
}
/if (${healertoggle}==1) /call Healer
:slow
/if (${slowtoggle}==1 && ${Target.PctHPs}<${pcttoslow} && ${needslow}==1) {
/if (${Target.ID}!=${targetarray[4]}) /return
/call sitstatus
/call Cast ${Slowspell} gem4 10s
/varset needslow 0
/doevents
/if (${String[${Macro.Return}].Equal[CAST_RESISTED]}) {
/varset needslow 1
/delay 1s
/if (${verbose}==1) /gsay ${SlowResistVerbosity}
}
/if (${String[${Macro.Return}].Equal[CAST_IMMUNE]}) {
/varset needslow 0
/varset immunetoslow 1
/if (${verbose}==1) /gsay ${SlowImmuneVerbosity}
}
/if (${sitstatus}==1) /call standstatus
/if (${needslow}==1) {
/goto :slow
/if (${healertoggle}==1) /call Healer
}
/if (${verbose}==1 && ${Target.ID}==${targetarray[4]} && ${immunetoslow}==0) {
/delay 1s
/gsay ${SlowVerbosity}
}
/if (${healertoggle}==1) /call Healer
}
:power
/if (${powertoggle}==1 && ${needpower}==1 && ${Target.PctHPs}<85) {
/if (${Target.ID}!=${targetarray[4]}) /return
/call sitstatus
/call Cast ${Disempowerspell} gem5 10s
/varset needpower 0
/doevents
/if (${String[${Macro.Return}].Equal[CAST_RESISTED]}) /varset needpower 1
/if (${sitstatus}==1) /call standstatus
/if (${needpower}==1) {
/goto :power
/if (${healertoggle}==1) /call Healer
}
/if (${verbose}==1 && ${Target.ID}==${targetarray[4]}) {
/delay 1s
/gsay ${PowerVerbosity}
}
/if (${healertoggle}==1) /call Healer
}
/return
| DoT Routines
Sub DoTs
/if (${malotoggle}==1 || ${slowtoggle}==1 || ${powertoggle}==1) {
/if (${needmalo}==1 || ${needslow}==1 || ${needpower}==1) /return
}
/if (${Dotted}==0) {
/for g 1 to ${DotArray.Size}
/varset SpellName ${DotArray[${g}]}
/call DotTarget
/varset tried 0
/next g
/varset Dotted 1
}
/return
Sub DotTarget
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
:retrycast
/if (${timestotry}>${tried}) {
/call checkmana
/call sitstatus
/call cast ${SpellName} gem5 ${wait4cast}s
/doevents
/if (${String[${Macro.Return}].Equal[CAST_RESISTED]}) {
/varadd tried 1
/if (${healertoggle}==1) /call Healer
/goto :retrycast
}
/if (${sitstatus}==1) /call standstatus
}
/return
| Direct Damage Routine
Sub DD
/if (${malotoggle}==1 || ${slowtoggle}==1 || ${powertoggle}==1 || ${dottoggle}==1) {
/if (${needmalo}==1 || ${needslow}==1 || ${needpower}==1 || ${Dotted}==0) /return
}
/for g 1 to ${DDArray.Size}
/varset SpellName ${DDArray[${g}]}
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/call checkmana
/call sitstatus
/call cast ${SpellName} gem5 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/if (${healertoggle}==1) /call Healer
/next g
/return
| Canni Routine
Sub Canni
/if (${Me.PctHPs}<${HoTpercent} && !${Me.Buff[${HoTspell}].ID}) {
/varset needcanni 0
/varset wait4cast ${Math.Calc[${Spell[${HoTspell}].MyCastTime}+${Spell[${HoTspell}].RecastTime}+5].Int}
/call sitstatus
/target ${Me}
/call Cast ${HoTspell} gem7 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/keypress esc
/if (${battle}==1) /target ${targetarray[3]}
}
/if (${Me.PctHPs}<${Healpercent} && ${Me.Buff[${HoTspell}].ID}) {
/varset wait4cast ${Math.Calc[${Spell[${Healspell}].MyCastTime}+${Spell[${Healspell}].RecastTime}+5].Int}
/call sitstatus
/target ${Me}
/call Cast ${Healspell} gem3 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/keypress esc
/if (${battle}==1) /target ${targetarray[3]}
}
/if (${cannitoggle}==1 && ${Me.PctMana}<95 && ${needcanni}==1) {
/delay 3s
/call sitstatus
/call Cast ${Cannispell} gem8 5s
/if (${sitstatus}==1) /call standstatus
/delay 3s
/varset prevmana ${Me.PctMana}
}
/if (${Me.PctHPs}>60) /varset needcanni 1
/return
| Makes sure you have a pet
Sub Pet
/if (!${Me.Pet.ID}) {
/varset SpellName ${petspell}
/call checkmana
/call sitstatus
/varset wait4cast ${Math.Calc[${Spell[${petspell}].MyCastTime}+${Spell[${petspell}].RecastTime}+5].Int}
/call cast ${petspell} gem5 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
}
/return
| Puts you into bear illusion
Sub bear
/if (!${Me.Buff[${bearspell}].ID}) {
/varset SpellName ${bearspell}
/call checkmana
/call sitstatus
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/call cast ${SpellName} gem5 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
}
/return
| Exp Progress Display Routine
Sub Event_exp
/varset currentxp ${Me.PctExp}
/varset xpgain ${Math.Calc[${currentxp}-${startexp}]}
/varset currentaa ${Me.PctAAExp}
/varset aagain ${Math.Calc[${currentaa}-${startaaxp}]}
/popup "Gain: ${xpgain}% xp - ${aagain}% aa ## Cur: ${Me.PctExp}% xp - ${Me.PctAAExp}% aa"
/echo "Gain: ${xpgain}% xp - ${aagain}% aa ## Cur: ${Me.PctExp}% xp - ${Me.PctAAExp}% aa"
/varset startexp ${Me.PctExp}
/varset startaaxp ${Me.PctAAExp}
/return
| Auto sit/stand routines (Regardless of Sit toggle)
sub sitstatus
/delay 3
/if (${Me.State.Equal[SIT]}) {
/stand
/varset sitstatus 1
}
/return
sub standstatus
/delay 3
/sit
/varset sitstatus 0
/return
| LoM announcement
sub LoM
/if (${LoM}==1 && ${lowonmana}==0 && ${Me.PctMana}<20) {
/gsay LoM, Canni'n like a MFer!!
/varset lowonmana 1
} else {
/if (${Me.PctMana}>60) /varset lowonmana 0
}
/return
| Group Heal Routine
Sub Healer
/varset SpellName ${Healspell}
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/for g 1 to ${Group}
/if (${Group[${g}].ID} && ${Group[${g}].PctHPs}<${healgrouppct}) {
/call checkmana
/if (${Me.PctHPs}<${HoTpercent}) /call Canni
/call sitstatus
/target PC ${Group[${g}]}
/if (${verbose}==1) /gsay ${HealGroupVerbosity}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/keypress esc
/if (${battle}==1) /target ${targetarray[3]}
}
/next g
/return
| Haste Routine
Sub haste
/call checkmana
/if (${Spell[${SpellName}].TargetType.Equal[Group v1]} || ${Spell[${SpellName}].TargetType.Equal[Group v2]} || ${grouphaste}==1) {
/target ${Me}
/call sitstatus
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/keypress esc
} else {
/if (${pettoggle}==1) {
/call sitstatus
/target ${Me.Pet}
/call cast ${SpellName} gem2 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/for g 1 to ${Group}
/if (${Group[${g}].ID} && !${Group[${g}].Class.Name.Equal[Shaman]} && !${Group[${g}].Class.Name.Equal[Cleric]} && !${Group[${g}].Class.Name.Equal[Druid]} && !${Group[${g}].Class.Name.Equal[Necromancer]} && !${Group[${g}].Class.Name.Equal[Enchanter]} && !${Group[${g}].Class.Name.Equal[Magician]} && !${Group[${g}].Class.Name.Equal[Wizard]}) {
/call sitstatus
/target PC ${Group[${g}]}
/call cast ${SpellName} gem2 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
}
/next g
/for g 1 to ${Group}
/if (${Group[${g}].Pet.ID}) {
/call checkmana
/call sitstatus
/target Pet ${Group[${g}].Pet}
/call cast ${SpellName} gem2 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/if (${healertoggle}==1) /call Healer
}
/next g
} else {
/call sitstatus
/target ${Me}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/for g 1 to ${Group}
/if (${Group[${g}].ID} && !${Group[${g}].Class.Name.Equal[Shaman]} && !${Group[${g}].Class.Name.Equal[Cleric]} && !${Group[${g}].Class.Name.Equal[Druid]} && !${Group[${g}].Class.Name.Equal[Necromancer]} && !${Group[${g}].Class.Name.Equal[Enchanter]} && !${Group[${g}].Class.Name.Equal[Magician]} && !${Group[${g}].Class.Name.Equal[Wizard]}) {
/call checkmana
/call sitstatus
/target PC ${Group[${g}]}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/if (${healertoggle}==1) /call Healer
}
/next g
/keypress esc
}
}
/return
| Bigbuff Main Sub..
Sub BigBuffs
/for g 1 to ${BigBuffArray.Size}
/varset SpellName ${BigBuffArray[${g}]}
/call Buffs
/next g
/if (${pettoggle}==1 && ${Me.Pet.ID}) {
/for g 1 to ${BigPetBuffArray.Size}
/varset SpellName ${BigPetBuffArray[${g}]}
/call PetBuffs
/next g
} else {
/for g 1 to ${BigPetBuffArray.Size}
/varset SpellName ${BigPetBuffArray[${g}]}
/call Buffs
/next g
}
/return
| RegularBuff Main Sub..
Sub RegularBuffs
/for g 1 to ${SmallBuffArray.Size}
/varset SpellName ${SmallBuffArray[${g}]}
/call Buffs
/next g
/return
| Buff Casting Routine..
Sub Buffs
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/if (!${Me.Buff[${SpellName}].ID} || ${Me.Buff[${SpellName}].Duration}<${wait4cast}) {
/call checkmana
/if (${Spell[${SpellName}].TargetType.Equal[Group v1]} || ${Spell[${SpellName}].TargetType.Equal[Group v2]}) {
/target ${Me}
/call sitstatus
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/keypress esc
} else {
/call sitstatus
/target ${Me}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/for g 1 to ${Group}
/if (${Group[${g}].ID} && !${Group[${g}].Class.Name.Equal[Shaman]} && !${Group[${g}].Class.Name.Equal[Druid]} && !${Group[${g}].Class.Name.Equal[Enchanter]} && !${Group[${g}].Class.Name.Equal[Magician]} && !${Group[${g}].Class.Name.Equal[Wizard]}) {
/call checkmana
/call sitstatus
/target PC ${Group[${g}]}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/if (${healertoggle}==1) /call Healer
}
/next g
/keypress esc
}
}
/return
| Buffs that use your pet to watch their status casting routine..
Sub PetBuffs
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/if (!${Me.PetBuff[${SpellName}]}) {
/call checkmana
/call sitstatus
/target ${Me.Pet}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/for g 1 to ${Group}
/if (${Group[${g}].ID} && !${Group[${g}].Class.Name.Equal[Shaman]} && !${Group[${g}].Class.Name.Equal[Cleric]} && !${Group[${g}].Class.Name.Equal[Druid]} && !${Group[${g}].Class.Name.Equal[Necromancer]} && !${Group[${g}].Class.Name.Equal[Enchanter]} && !${Group[${g}].Class.Name.Equal[Magician]} && !${Group[${g}].Class.Name.Equal[Wizard]}) {
/call checkmana
/call sitstatus
/target PC ${Group[${g}]}
/call Cast ${SpellName} Gem6 ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/if (${healertoggle}==1) /call Healer
}
/next g
/keypress esc
}
/return
| Sub to check and see if you have enuf mana to cast the buff..
Sub CheckMana
:checkmana
/if (${Me.CurrentMana}<${Spell[${SpellName}].Mana}) {
/call canni
/goto :checkmana
}
/return
|spell training sub
Sub spelltrain
/if (${pettoggle}==1 && ${Me.Pet.ID}) {
/for g 1 to ${TrainSpellsArray.Size}
/varset SpellName ${TrainSpellsArray[${g}]}
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/autoinv
/if (${Me.Skill[${Spell[${SpellName}].Skill}]}<${maxiskill}) {
/call checkmana
/call sitstatus
/target ${Me.Pet}
/call Cast ${SpellName} Gem${g} ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/call canni
}
/if (${Spawn[gm].ID}) /call GMhere
/target pc notid ${Me.ID}
/delay 5
/if (${Target.Distance}<100) /call PCnear
/target myself
/next g
} else {
/for g 1 to ${TrainSpellsArray.Size}
/varset SpellName ${TrainSpellsArray[${g}]}
/varset wait4cast ${Math.Calc[${Spell[${SpellName}].MyCastTime}+${Spell[${SpellName}].RecastTime}+5].Int}
/autoinv
/if (${Me.Skill[${Spell[${SpellName}].Skill}]}<${maxiskill}) {
/call sitstatus
/target ${Me}
/call Cast ${SpellName} Gem${g} ${wait4cast}s
/if (${sitstatus}==1) /call standstatus
/call canni
}
/if (${Spawn[gm].ID}) /call GMhere
/target pc notid ${Me.ID}
/delay 5
/if (${Target.Distance}<100) /call PCnear
/target myself
/next g
}
/return
Sub PCnear
/if (${Target.Name.Equal[${Me.Name}]}) /return
/sit
/afk
/echo PC Nearby, sitting and acting natural
:stillnear
/delay 10
/doevents
/target pc notid ${Me.ID}
/delay 5
/if (${Target.Distance}<100) /goto :stillnear
/target myself
/stand
/afk
/return
Sub GMhere
/sit
/afk
/echo GM in zone, Sitting & acting Natural
:stillhere
/delay 10
/doevents
/target pc notid ${Me.ID}
/delay 5
/if (${Target.Distance}<100) /goto :stillhere
/target myself
/stand
/afk
/return
|**
UPDATE August 14, 2004
Put /call Buffs back into the regular buff sub, Thanks rencro. Regular buffs should work again..
UPDATE August 10, 2004
Put in a "Fix" I think for the GroupHaste not recasting itself. It should work, but it is untested (been slacking on my shaman, havnt leveled him since my last post).
ADDED toggle TrainSpells - its a built in spell trainer. I put this in for myself when I realized I was so lacking on my spell skills. The trainer uses the spells which you would define at the top based on the spells type. I have the lowest level spell of each type already entered at the top. If you have a pet it will cast on the pet, if you dont, it will cast on you. The spell trainer has a built in Player Character Near and GM check (not 100% gm proof, as gm invis is undetectable) If there is a GM in the zone, or a PC within 100feet (whatever EQ uses) then it will have you sit and go afk.
Enjoy
UPDATE July 20, 2004
Work In Progress, hastegroup toggle removed, replaced by Haste (for single target haste) or GroupHaste (for a grouphaste spell) Also, pettoggle shouldnt be REQUIRED for buffs and haste anymore.. if ya have a pet, it will check the buff against the pet, if not then it will check the buff against you... UNTESTED CHANGES!!! Please reply on bugs, thanks! :)
UPDATE July 19, 2004 #2
Fixxed targetting issues within the buff routines. adjusted it so pet doesnt charge out as soon as a mob is pulled, added a new variable "sendpethp" where you can set what the targets hp needs to be before yer pet charges out. heh, found that instant pet charging causes buku agro, learned that the hard way. um, squashed a few more bugs..
UPDATE July 19, 2004
Attempt to fix group buff issues, also attempt to fix group haste issue.
UPDATE July 13, 2004
Added group healer routine
Added AutoDD routine
Stomped buncha bugs.. hehe, sorry :)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MAJOR UPDATE: July 10, 2004
ALL SPELLS ARE CUSTOMIZABLE!!
Added auto bear form
Added AutoDot, you may specify any number of dots, just state them in the listed arrays
Added LOM announce..
Completely rewrote the buff routine
You can now specify any number of buffs for bigbuffgroup and buffgroup
The macro should be able to tell group buffs from single target buffs automatically
Just look through the macro, lots has changed
You may now specify your verbosity /gsay statements at the top of the macro
I have tested everything, and it all seems to work..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
UPDATE: July 8, 2004
Switched to using Spell_Routines.inc, Thanks Rusty! Added toggle mania
Enjoy!
**|