Shaman Auto-Canni/Slow/Haste/DoT/Healer/etc.. UPDATE 8/14/04

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Shaman Auto-Canni/Slow/Haste/DoT/Healer/etc.. UPDATE 8/14/04

Post by loadingpleasewait » Wed Jun 30, 2004 7:02 pm

Auto-Shaman! Updated August 10, 2004:

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!  

**|
Last edited by loadingpleasewait on Sat Aug 14, 2004 2:34 pm, edited 15 times in total.
LOADING PLEASE WAIT...

User avatar
aChallenged1
a grimling bloodguard
a grimling bloodguard
Posts: 1804
Joined: Mon Jun 28, 2004 10:12 pm

Post by aChallenged1 » Wed Jun 30, 2004 8:14 pm

Just a suggestion, get the LoY spell Stoicism (180mana cost for 960hp heal (over time 160 per tick for 6 ticks) and add that into your script. This is the precursor to Torpor and Q which you're going to want anyways.

I don't know the coding yet, so if you have covered the following, forgive me...

Cannidance

Sit (if not on mount and no danger of sit agro)

Watch Mana %

IF last mana check is < current mana check cast canni

clear mana% buffer

repeat.


This should be able to be turned off, because at the higher levels it is not so important. Pre lvl 60 it does make a difference.

I'm an idea person... I come up with em and hope someone can make them a reality; until I can figure it out myself.

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Post by loadingpleasewait » Wed Jun 30, 2004 8:30 pm

My shaman is 42, and just started playing in Dulak. The stoicism quest is on my list of To Dos and shouldnt be hard to add..

Also, no.. this does not do a true canni dance. In my haste [wrote it last night while grouping and testing] I didnt even consider a true canni dance.. This also shouldnt be too hard to add.. and possibly toggle..
LOADING PLEASE WAIT...

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Post by loadingpleasewait » Wed Jun 30, 2004 8:51 pm

Ok, added the declare

Code: Select all

   /declare PreCanniMana outer ${Me.PctMana}
Changed the Canni call to

Code: Select all

/if (${cannitoggle}==1 && ${Me.PctMana}<90 && ${Me.PctHPs}>30 && ${needcanni}==1 && ${Me.PctMana}>${PreCanniMana}) /call canni
And changed the Canni sub to

Code: Select all

Sub Canni
/varset PreCanniMana ${Me.PctMana}
      /if (${Me.Sitting}) {
      /stand
      /varset sitstatus 1
   }
/delay 2
         /call Cast ${Cannispell} gem8 
   /if (${sitstatus}==1) {
      /sit
      /varset sitstatus 0
   }
   /delay 3s
   /if (${Me.PctHPs}<30) /varset needcanni 0
   /return
I think this will do what you suggest.. Unsure if it actually works as I cannot log into EQ atm..

Basically it adds a check to see if your mana percent has increased since you've casted canni..
LOADING PLEASE WAIT...

User avatar
aChallenged1
a grimling bloodguard
a grimling bloodguard
Posts: 1804
Joined: Mon Jun 28, 2004 10:12 pm

Post by aChallenged1 » Wed Jun 30, 2004 11:37 pm

I'll load up my shammy sometime soon, if I get the chance... trying to get the MQ2Twist working on my system for my bard... and see how it goes.

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Post by loadingpleasewait » Thu Jul 01, 2004 4:41 pm

Reverted the canni sub to the way it was, cause the new code was crap.. :)
LOADING PLEASE WAIT...

User avatar
OnyxSys
a ghoul
a ghoul
Posts: 133
Joined: Sun Dec 21, 2003 9:58 pm
Contact:

Post by OnyxSys » Thu Jul 08, 2004 1:16 am

i love my shaman to bad i cant code, but this has alot of potential, i love the way the RH.mac is set up and genbot i use alot, if this could use the functiality of RH but for shaman it would own! Props on this one :)

User avatar
aChallenged1
a grimling bloodguard
a grimling bloodguard
Posts: 1804
Joined: Mon Jun 28, 2004 10:12 pm

Post by aChallenged1 » Thu Jul 08, 2004 7:18 am

Ok, so the cannidance method above did not work. Let's try to simplify it.

You no longer have to /stand when you cast so (no actual code here, just logic)...

Code: Select all

:canniloop
  Cast canni
  Sit
  If life < 30% heal self(sub) else if mana >90% then return(exit sub)
    :manaloop
       If currentMana>last mana check then :canniloop else :manaloop
Now it isn't real code, but I think (not positive, just a strong belief) that the idea would work.
Can you do loops within a loop and call another sub from a sub? I'm sure you can, just not sure about the nexting of loops within a loop.
Anyway, it's just a consideration for a way of doing the Cannidance properly.

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Post by loadingpleasewait » Thu Jul 08, 2004 6:28 pm

UPDATE: July 8, 2004
Switched to using Spell_Routines.inc, Thanks Rusty! Added toggle mania = ) My shaman has just hit 49, so ya gotta live with his current spell selection, or udate the macro yerself.

HOWEVER I've added a haste group toggle, an always sit toggle, a disempower toggle, a buffgroup toggle, and a bigbuffgroup toggle. First of all, haste and dexterity of bigbuffgroup is buffed and rebuffed based on yer pet, so for it to work ya gotta have a pet. Haste only casts on melee or hybrid classes.

Buffgroup buffs using HoS, bigbuffgroup buffs with IoS/Talisman of Altuna/Stamina/Dexterity and its picky on who it casts on, if yer a caster, expect not to get as much luvin..

Oh, added Stoicism to canni, so HAVE THAT SPELL! :)
LOADING PLEASE WAIT...

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Post by loadingpleasewait » Sat Jul 10, 2004 11:59 pm

MAJOR UPDATE!
added auto DoT
added auto bearform
made everything easily customizable from type of buff to how many buffs to how many dots, to heal spell, to verbose group messages.. EVERYTHING!

Just look at the macro, theres lotsa shammy goodness in there..

enjoy!
LOADING PLEASE WAIT...

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

UPDATE July 13, 2004

Post by loadingpleasewait » Tue Jul 13, 2004 10:14 pm

UPDATE July 13, 2004
Added group healer routine
Added AutoDD routine
Stomped buncha bugs.. hehe, sorry :)
oh, and canni should now do real canni dance.
LOADING PLEASE WAIT...

User avatar
aChallenged1
a grimling bloodguard
a grimling bloodguard
Posts: 1804
Joined: Mon Jun 28, 2004 10:12 pm

Post by aChallenged1 » Tue Jul 13, 2004 11:14 pm

You're gonna make me start playing my shaman again! LOL

bobbib
orc pawn
orc pawn
Posts: 12
Joined: Sat Jul 17, 2004 5:14 pm

grouphaste spamming when useing swift like wind :S

Post by bobbib » Sun Jul 18, 2004 4:49 pm

okay tested this

bugs so far: with a 65 shammy

groupbuff spells like fo7, grouphaste, ect dosnt work to well with this
haste spell when set to swift like wind will keep casting on player or pet until out of mana.

and canni5 wich is a button not a spell dosnt work either :D

thats all

hugs

bobbib

loadingpleasewait
a snow griffon
a snow griffon
Posts: 332
Joined: Sat Sep 14, 2002 8:46 am

Re: grouphaste spamming when useing swift like wind :S

Post by loadingpleasewait » Mon Jul 19, 2004 4:10 pm

Hmm... well, my shaman is 51 right now, I took a break to gear him up a bit.. The haste issue, I didnt consider the group haste, so I bet its doing the regular cast cycle on every group member.. I'm fixing that right now..

OOps, I see the bug in the group spell code also.. I'll get a fix fer that up ASAP..

Finally, I'm not exactly sure how the whole canni5 thing works, what do you normally do when casting canni 5? I know its an alt adv ability, which isnt a problem I can work around that.. but whats the general routine for using canni 5? :)


Macro Updated: Should fix group buffs and group haste's. I need to know more about canni 5 in order to make that work..
LOADING PLEASE WAIT...

hytiek
Contributing Member
Contributing Member
Posts: 54
Joined: Mon Jun 14, 2004 5:45 pm

Post by hytiek » Mon Jul 19, 2004 5:10 pm

The way I cast canni V is via spellroutines.inc: /call Cast "47" activate