druid.mac Basic druid script

Macro depository for macros written before the user variable changes that broke all of them.

Moderator: MacroQuest Developers

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

druid.mac Basic druid script

Post by grimjack » Thu Jun 05, 2003 10:58 am

Edit: Added say, group, and tell commands. 9 word maximum.
Edit: Added afk message ability.
Edit: Added sn command to cast spell by name.
Edit: Added duck command for interupting spells.
Edit: Added stop command. Stop will cancel movement and spells being cast. Also added autoheal on and off command.
Edit: Added a ton of melee commands and fixed tell.
/tell botname autoheal on turns group watching and auto heal on
/tell botname autoheal off turns group watching and auto heal off
/tell botname autoheal reports autoheal setting
Edit: Fixed melee commands that did not get pasted.
Edit: Fixed say group and tell bug. Max is now 9 words.
Edit: Update to sn command. Will now use the SpellSub sub as intended.
Edit: Added Kagonis' Array counter sub.

Code: Select all

|druid.mac
|Generic bot for druids.
|Make sure you edit this macro.  I have marked where you should edit.
|/tell botname cmds
|This command will send a tell to the master with a list of commands.
|Version 2.06
|Grimjack

#turbo 75
#Event Enraged "has become ENRAGED" 
#Event Offrage "is no longer enraged"
#event Collapse "Your gate is too unstable, and collapses."
#event FollowOff "You are no longer auto-following"
#event RootOff "Your Immobilize spell has worn off."
#event NoLOS "You cannot see your target." 
#Event CastStart "You begin casting"
#Event CastFizzle "Your spell fizzles!"
#Event CastInterrupt "Your spell is interrupted."
#Event CastNoMana "Insufficient Mana to cast this spell"
#Event CastTooFar "Your target is out of range, get closer!"
#Event Recovered "You haven't recovered yet..."
#Event CastResist "Your target resisted "
#Event Distracted "You are too distracted to cast a spell now!"
#Event NoTarget "You must first select a target for this spell!"
#Event Sitting "You must be standing to cast a spell."
#Event NoMem "You do not seem to have that spell memorized."
#Event Stunned "You can't cast spells while stunned!"
#define MasterName v50
#define CmdArrayNum v51
#define CmdArraySize v52
#define GroupMember v53
#define GroupMax v54
#define ChatInput1 v55
#define ChatInput2 v56
#define ChatInput3 v57
#define SitAfterCast v58
#define MyXLoc v59
#define MyYLoc v60
#define IsHealer v61
#define countdown v62
#define CmdList v63
#define RangeMin v70
#define RangeMax v71
#define FastRange v72
#define Combatstatus v73
#define Fail v94
#define DoAgain v95
#define StartCast v96
#define SpellSlot v97
#define SpellName v98
#define CastTime v99
#define CTimer t39
#chat tell

Sub Main
   /if n $strlen("$p0")<=0 {
     /echo Usage: /macro druid <Master Name>
     /endmacro
   }
   /varset MasterName $p0
   /varset IsHealer 0
   /varset RangeMin 10
   /varset RangeMax 12
   /varset FastRange 15
   /varset Combatstatus 0
   /varset a(1,0) afk
   /varset a(1,1) accept
   /varset a(1,2) reject
   /varset a(1,3) invite
   /varset a(1,4) mana
   /varset a(1,5) follow
   /varset a(1,6) stop
   /varset a(1,7) evac
   /varset a(1,8) moveto
   /varset a(1,9) sit
   /varset a(1,10) stand
   /varset a(1,11) sn
   /varset a(1,12) camp
   /varset a(1,13) duck
   /varset a(1,14) run
   /varset a(1,15) say
   /varset a(1,16) tell
   /varset a(1,17) group
   /varset a(1,18) cmds
   /varset a(1,19) autoheal
   /varset a(1,20) target
   /varset a(1,21) notarget
   /varset a(1,22) assist
   /varset a(1,23) saytarget
   /varset a(1,24) attack
   /varset a(1,25) noattack
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||
   /varset a(1,26) hp
   /varset a(1,27) heal
   /varset a(1,28) ch
   /varset a(1,29) snare
   /varset a(1,30) nuke
   /varset a(1,31) ds
   /varset a(1,32) regen
   /varset a(1,33) root
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||
   /call CountArraySize 1
   /varset CmdArraySize $int($return)
   /varset CmdList "$a(1,0), $a(1,1), $a(1,2), $a(1,3), $a(1,4), $a(1,5) $a(1,6), $a(1,7), $a(1,8), $a(1,9), $a(1,10), $a(1,11), $a(1,12), $a(1,13), $a(1,14), $a(1,15), $a(1,16), $a(1,17), $a(1,18), $a(1,19), $a(1,20) $a(1,21), $a(1,22), $a(1,23), $a(1,24), $a(1,25), $a(1,26), $a(1,27), $a(1,28), $a(1,29), $a(1,30), $a(1,31), $a(1,32), $a(1,33), "$a(1,34), $a(1,35), $a(1,36), $a(1,37), $a(1,38), $a(1,39), $a(1,40)"
   /varset CmdArrayNum 0
   :MainLoop
   /call CheckGrpHealth
   /call Combatcheck
   /if $Combatstatus=="1" /call RangeSub 
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||
   /doevents
   /varset CmdArrayNum 0
   /goto :MainLoop
/return

sub CountArraySize
   /varset l0 0
   :CountArrayLoop
    /if n $strlen("$a($p0,$l0)")<=0 {
       /goto :CountArrayEnd
   }
   /varadd l0 1
   /goto :CountArrayLoop
   :CountArrayEnd
/return $l0 

Sub CheckGrpHealth
   /varset GroupMember 0
   /varcalc GroupMax $group(count)-1
   /if n "$IsHealer"==0 /return
   :GroupLoop
   /doevents
   /if n $spawn($group($GroupMember),hp,pct)<41 {
      /if n $spawn($group($GroupMember),hp,pct)>=1 {
         /if "$spawn($group($GroupMember),class)"=="Warrior" /call Tankheal
         /if "$spawn($group($GroupMember),class)"=="Paladin" /call Tankheal
         /if "$spawn($group($GroupMember),class)"=="Shadow Knight" /call Tankheal
         /if "$spawn($group($GroupMember),class)"=="Monk" /call Tankheal
         /if "$spawn($group($GroupMember),class)"=="Ranger" /call Tankheal
       
      }
   }
   /if n $spawn($group($GroupMember),hp,pct)>=1 {
      /if n $spawn($group($GroupMember),hp,pct)<41 {
         /call CasterHeal
      }
   }
   /if n $GroupMember>=$GroupMax /return
   /varadd GroupMember 1
   /doevents
   /goto :GroupLoop
/return

Sub Combatcheck
   /if $EnrageVar=="1" {
      /if $target()=="TRUE" {
         /return
      } else {
         /varset EnrageVar 0
         /varset Combatstatus 0
      }
   }
   /if $target()=="FALSE" {
      /varset Combatstatus 0
      /if $combat=="TRUE" {
         /attack off
      }
      /return
   }
   /if $target()=="TRUE" {
      /if $combat=="TRUE" {
         /varset Combatstatus 1
         /return
      }
   }
/varset Combatstatus 0
/return



Sub Rangesub
   /face fast nopredict
   /if n $target(distance)>=$FastRange /call Fastmove
   /if n $target(distance)>$RangeMax {
      /press up
   }
   /if n $target(distance)<$RangeMin {
      /press down
   }
/return

Sub Fastmove
   :fastmoveloop
   /doevents
   /if $target()=="FALSE" {
      /varset Combatstatus 0
      /sendkey up up
      /if $combat=="TRUE" {
         /attack off
         /return
      }
   }
   /face fast nopredict
   /if n $target(distance)>$FastRange {
      /sendkey down up
   }
   /if n $target(distance)<=$FastRange {
         /if $Combatstatus=="1" {
            /if $EnrageVar=="0" {
            }
         }
      /sendkey up up
      /return
   }
   /goto :fastmoveloop
/return

Sub Event_Chat 
   /varset CmdArrayNum 0 
   /if "$MasterName"=="$p1" { 
      :ArrayTime 
      /if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" { 
         /call Do-$a(1,$CmdArrayNum) $p2 
         /return 
      } 
      /varadd CmdArrayNum 1 
      /if n $CmdArrayNum>=$CmdArraySize /return 
      /goto :ArrayTime 
   } else { 
       /tell $MasterName $p1 told me: $p2 
   } 
/return 

Sub Do-target
   /if n $strlen("$p1")<=0 {
      /return
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /tell $MasterName my target is %t
/return

Sub Do-saytarget
   /tell $MasterName my target is %t
/return

Sub Do-assist
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /assist "$p1"
   } else /if n $strlen("$p3")<=0 {
      /assist "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /assist "$p1 $p2 $p3"
   } else /assist "$p1 $p2 $p3 $p4"
   /tell $MasterName my target is %t
/return

Sub Do-attack
   /sit off
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 5
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /tell $MasterName Attacking %t
   /attack on
/return

Sub Do-noattack
   /attack off
/return

Sub Do-sit
   /sit off
   /sit
/return

Sub Do-stand
   /sit off
/return

Sub Do-notarget
   /press esc
   /press esc
   /press esc
/return

Sub Do-sn
   /assist $MasterName
   /if n $strlen("$p1")<=0 {
      /return
   } else /if n $strlen("$p2")<=0 {
      /tell "$MasterName" Casting $p1 on %T
      /call SpellSub $p1
   } else /if n $strlen("$p3")<=0 {
      /tell "$MasterName" Casting $p1 $p2 on %T
      /call SpellSub "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /tell "$MasterName" Casting $p1 $p2 $p3 on %T
      /call SpellSub "$p1 $p2 $p3"
   } else {
      /tell "$MasterName" Casting $p1 $p2 $p3 $p4 on %T
      /call SpellSub "$p1 $p2 $p3 $p4"
   /stand
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return 

Sub Do-afk
   /varset CmdArrayNum 0
   /if n $strlen("$p1")<=0 {
      /afk
   } else /if n $strlen("$p2")<=0 {
      /afk $p1
   } else /if n $strlen("$p3")<=0 {
      /afk $p1 $p2
   } else /if n $strlen("$p4")<=0 {
      /afk $p1 $p2 $p3
   } else /if n $strlen("$p5")<=0 {
      /afk $p1 $p2 $p3 $p4
   } else /if n $strlen("$p6")<=0 {
      /afk $p1 $p2 $p3 $p4 $p5
   } else /if n $strlen("$p7")<=0 {
      /afk $p1 $p2 $p3 $p4 $p5 $p6
   } else /if n $strlen("$p8")<=0 {
      /afk $p1 $p2 $p3 $p4 $p5 $p6 $p7
   } else /if n $strlen("$p9")<=0 {
      /afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
   } else {
      /afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
   }
   /afk
/return

Sub Do-say
   /varset CmdArrayNum 0
   /if n $strlen("$p1")<=0 {
      /return
   } else /if n $strlen("$p2")<=0 {
      /say $p1
   } else /if n $strlen("$p3")<=0 {
      /say $p1 $p2
   } else /if n $strlen("$p4")<=0 {
      /say $p1 $p2 $p3
   } else /if n $strlen("$p5")<=0 {
      /say $p1 $p2 $p3 $p4
   } else /if n $strlen("$p6")<=0 {
      /say $p1 $p2 $p3 $p4 $p5
   } else /if n $strlen("$p7")<=0 {
      /say $p1 $p2 $p3 $p4 $p5 $p6
   } else /if n $strlen("$p8")<=0 {
      /say $p1 $p2 $p3 $p4 $p5 $p6 $p7
   } else /if n $strlen("$p9")<=0 {
      /say $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
   } else /if n $strlen("$p10")<=0 {
   } else {
      /say $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
   }
/return

Sub Do-group
   /varset CmdArrayNum 0
   /if n $strlen("$p1")<=0 {
      /return
   } else /if n $strlen("$p2")<=0 {
      /g $p1
   } else /if n $strlen("$p3")<=0 {
      /g $p1 $p2
   } else /if n $strlen("$p4")<=0 {
      /g $p1 $p2 $p3
   } else /if n $strlen("$p5")<=0 {
      /g $p1 $p2 $p3 $p4
   } else /if n $strlen("$p6")<=0 {
      /g $p1 $p2 $p3 $p4 $p5
   } else /if n $strlen("$p7")<=0 {
      /g $p1 $p2 $p3 $p4 $p5 $p6
   } else /if n $strlen("$p8")<=0 {
      /g $p1 $p2 $p3 $p4 $p5 $p6 $p7
   } else /if n $strlen("$p9")<=0 {
      /g $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
   } else /if n $strlen("$p10")<=0 {
   } else {
      /g "$p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
   }
/return

Sub Do-tell
   /varset CmdArrayNum 0
   /if n $strlen("$p1")<=0 {
      /return
   } else /if n $strlen("$p2")<=0 {
      /return
   } else /if n $strlen("$p3")<=0 {
      /tell $p1 $p2
   } else /if n $strlen("$p4")<=0 {
      /t $p1 $p2 $p3
   } else /if n $strlen("$p5")<=0 {
      /t $p1 $p2 $p3 $p4
   } else /if n $strlen("$p6")<=0 {
      /t $p1 $p2 $p3 $p4 $p5
   } else /if n $strlen("$p7")<=0 {
      /t $p1 $p2 $p3 $p4 $p5 $p6
   } else /if n $strlen("$p8")<=0 {
      /t $p1 $p2 $p3 $p4 $p5 $p6 $p7
   } else /if n $strlen("$p9")<=0 {
      /t $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
   } else {
      /t $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
   }
/return


Sub Do-accept
   /press esc
   /press esc
   /invite
/return

Sub Do-reject
   /press esc
   /press esc
   /disband
/return

Sub Do-invite
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /tell $MasterName Inviting %t
   /invite
/return

Sub Do-mana
   /dismount
   /press F1
   /tell $MasterName $char(mana,pct)m
   /press esc
/return

Sub Do-follow
   /target $MasterName
   /face
   /follow
   /tell $MasterName Autofollow on %t.
/return

Sub Do-stop
   /tell $MasterName Stoping.
   /sendkey up up
   /varset Fail 1
   /press d
   /press d
   /press esc
   /press esc
   /press esc
   /press right
/return

Sub Do-evac
   /tell $MasterName Moving to you and casting Evac!
   /call Do-moveto evac $MasterName
   /delay 2s
   |Uncoment for AA exodus or putin spell
   |/alt act 43
    /call SpellSub "Name of evac Spell"
/return 

Sub Do-sit
   /stand
   /sit on
/return

Sub Do-stand
   /stand
/return

Sub Do-camp
   /tell $MasterName Camping out.
   /stand
   /sit 
   /camp
/return  

Sub Do-duck
   /press d
   /varset Fail 1
   /varset CTimer 0
   /press d
/return  

Sub Do-autoheal
   /if n $strlen("$p1")<=0 {
      /tell $MasterName Autoheal=$IsHealer
      /return
   }
   /if $p1=="off" /varset IsHealer 0
   /if $p1=="on" /varset IsHealer 1
   /tell $MasterName Autoheal=$IsHealer
/return

Sub Do-cmds
   /tell "$MasterName" Commands: "$CmdList"
/return  

Sub Do-moveto
   /sit off
   /varset countdown 0
   /varset MyXLoc $char(x)
   /varset MyYLoc $char(y)
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /if $p1=="me" /target $MasterName
   /tell $MasterName Moving to %t.
   :gotopointloop
   /doevents
   /if $target()==FALSE {
      /sendkey up up
      /return
   }
   /face fast nopredict
   /if n $target(distance)>15 /sendkey down up
   /if n $target(distance)<=15 {
      /sendkey up up
      /return
   }
   /face fast nopredict
   /if n $countdown>=3 {
      /call Detectobst
      /varset countdown 0
   }
   /varadd countdown 1
   /doevents
   /goto :gotopointloop
   }
   /sendkey up up
   /face
/return

Sub Detectobst
   /if n $MyXLoc==$char(x) /if $MyYLoc==$char(y) /call Hitobst 5
   /varset MyXLoc $char(x)
   /varset MyYLoc $char(y)
/return


sub Hitobst
   /sendkey up up
   /sendkey down down 
   /if n $rand(99)>50 {
      /delay 2s
      /sendkey up down
      /sendkey down Right
      /delay $p0 
      /sendkey up Right
      /sendkey down up
      /delay 2s
      /sendkey up up
   } else {
      /delay 2s
      /sendkey up down
      /sendkey down left
      /delay $p0 
      /sendkey up left
      /sendkey down up
      /delay 2s
      /sendkey up up       
   }
   /sendkey up down
   /sendkey up Right
   /sendkey up Left
   /sendkey down up
/return

Sub SpellSub
   /sendkey up up
   /if n Combatstatus==1 /delay 3s
   /varset Fail 0
   /varset SpellName "$p0"
   /varset SpellSlot "$char(gem,"$SpellName")"
   /varset CastTime "$spell("$SpellName",casttime)"
   :BeginCast
   /varset DoAgain 0
   /varset StartCast 0
   /call WaitForStart
   :TimerLoop
   /doevents
   /if n $DoAgain==1 /goto :BeginCast
   /if n $Fail==1 /return
   /doevents
   /if n $DoAgain==1 /goto :BeginCast
   /if n $Fail==1 /return
   /if n $CTimer>0 /goto :TimerLoop
   /delay 2
   /doevents
   /if n $DoAgain==1 /goto :BeginCast
/return

Sub WaitForStart
   /cast $SpellSlot
   :StartLoop
   /doevents
   /if n $Fail==1 /return
   /if n $DoAgain==1 /return
   /if n $StartCast==0 {
      /goto :StartLoop
   }
   /varset CTimer "$CastTime"s
/return

Sub Event_Enraged
   /if $target()=="TRUE" {
      /if n $Combatstatus==1 {
         /varset EnrageVar 1
         /attack off
      }
      /varset EnrageVar 1
   }
/return 

Sub Event_Offrage
   /if $target()=="TRUE" {
      /if n $Combatstatus==1 {
         /varset EnrageVar 0
         /attack
      
      }
      /varset EnrageVar 0
   }
/return

Sub Event_CastStart
   /varset StartCast 1
/return

Sub Event_CastFizzle
   /delay 2
   /varset DoAgain 1
/return

Sub Event_CastInterrupt
   /delay 2
   /varset DoAgain 1
/return

Sub Event_FollowOff
   /press esc
   /press esc
   /delay 5
   /tell $MasterName Auto Follow Off.
/return

Sub Event_Sitting
   /stand
   /delay 2
   /varset DoAgain 1
/return

Sub Event_CastTooFar
   /varset Fail 1
   /tell $MasterName Too far away.
   /varset CTimer 0
/return

Sub Event_Distracted
   /tell $MasterName I can't cast. I'm too distracted.
   /varset Fail 1
   /varset CTimer 0
/return

Sub Event_NoTarget
   /varset Fail 1
   /tell $MasterName I have no target to cast on.
   /varset CTimer 0
/return

Sub Event_NoMem
   /tell $MasterName That spell is not memed.
   /varset Fail 1
   /varset CTimer 0
/return

Sub Event_RootOff
   /tell $MasterName Root has worn off.
/return

Sub Event_CastNoMana
   /tell $MasterName OOM. Medding 16 seconds and trying again.
   /sit off
   /sit on
   /delay 16s
   /sit off
   /varset DoAgain 1
/return

Sub Event_Stunned
   /tell $MasterName Stunned waiting 3 seconds to try again.
   /delay 3s
   /varset DoAgain 1
/return

Sub Event_Recovered
   /delay 2s
   /varset DoAgain 1
/return

Sub Event_CastResist
   /tell $MasterName Resisted. Trying again.
   /varset DoAgain 1
/return

Sub Event_Collapse
   /varset DoAgain 1
/return

Sub Event_NoLOS
   /tell $MasterName I can't see my target.
   /varset Fail 1
   /varset CTimer 0
/return


Sub Tankheal
         /if n $group($GroupMember)==$char(id) /press F1
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember)
         /stand
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||| Edit Edit heal message
||| Edit Spell to auto cast on Melee
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
         /g COMPLETE HEAL on %T in 10seconds
         /call SpellSub "Complete Heal"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
         /if "$SitAfterCast"=="1" /sit on
         /press esc
/return

Sub Casterheal
         /if n $group($GroupMember)==$char(id) /press F1
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember)
         /stand
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||| Edit Edit heal message
||| Edit Spell to auto cast on Non Melee
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
         /g Healing %T
         /call SpellSub "Supernal Remedy"
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
         /if "$SitAfterCast"=="1" /sit on
         /press esc
/return


|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||


Sub Do-hp
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting HP buff on %T
   /call SpellSub "Name of HP buff spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return


Sub Do-heal
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting heal on %T
   /call SpellSub "Name of heal spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return


Sub Do-ch
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Druid Complete Heal on %T
   /call SpellSub "Name of Druid complete heal"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return


Sub Do-snare
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting snare on %T
   /call SpellSub "Name of snare spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return


Sub Do-nuke
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting Nuke on %T
   /call SpellSub "Name of Nuke spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return

Sub Do-ds
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting HP damage shield on %T
   /call SpellSub "Name of damage shield spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return


Sub Do-regen
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting regen on %T
   /call SpellSub "Name of regen spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return

Sub Do-root
   /if n $strlen("$p1")<=0 {
      /assist $MasterName
      /delay 3
   } else /if n $strlen("$p2")<=0 {
      /target "$p1"
   } else /if n $strlen("$p3")<=0 {
      /target "$p1 $p2"
   } else /if n $strlen("$p4)<=0 {
      /target "$p1 $p2 $p3"
   } else /target "$p1 $p2 $p3 $p4"
   /stand
||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||||||||||||
   /tell "$MasterName" Casting root on %T
   /call SpellSub "Name of root spell"
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
   /if "$SitAfterCast"=="1" /sit on
   /press esc
/return
Last edited by grimjack on Thu Jun 12, 2003 4:46 am, edited 26 times in total.

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Post by grimjack » Thu Jun 05, 2003 11:59 am

This still has some targeting problems I am working on. The cleric one does too. I want it to assist if a name is not given but currently it does not.

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Fixed

Post by grimjack » Thu Jun 05, 2003 12:51 pm

Fixed errors with targeting. Edited my first post. Should be working as planned.

Sman
orc pawn
orc pawn
Posts: 13
Joined: Tue Jun 03, 2003 11:47 pm

Post by Sman » Thu Jun 05, 2003 12:55 pm

could you give us an idea of what you changed? I'd like to change that in the cleric.mac also.
eq n00b!

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Just updated the cleric mac.

Post by grimjack » Thu Jun 05, 2003 1:13 pm

I just updated the cleric macro I posted.
Mostly fixes for buggs and targeting.

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Update

Post by grimjack » Thu Jun 05, 2003 1:15 pm

Added break command to stop following. Also added to the cleric macro.

Amadeus
The Maestro
The Maestro
Posts: 2036
Joined: Sat Jun 29, 2002 3:51 pm

Post by Amadeus » Thu Jun 05, 2003 1:20 pm

Grim....would this be a valid addition? I copied the routines from another macro, I don't remember which, but it was old and I'm not sure if it'll still work. Again, I'm not much of an expert when it comes to this scripting language.

Code: Select all

#define MyXLOC v40 
#define MyYLOC v41 
#define HasTarget v47 
#define ObstCount v49 

Code: Select all

   /varset a(1,18) evac
   /varset CmdArraySize 19 

Code: Select all

Sub Do-evac
   /sit off
   /target "$MasterName"
   /call MoveToTarget
   || /alt act # for exodus (I can't remember the # offhand)
/return 

sub MoveToTarget 
   /delay 2s 
   /varset MyXLOC $char(x) 
   /varset MyYLOC $char(y) 
   /if n $target(distance)<=13 { 
      /face fast nopredict 
      /return 
   } 
   /sendkey down up 
   :Movementloop 
   /varadd ObstCount 1 
   /if $target()=="FALSE" { 
      /varset HasTarget 0 
      /return 
   } 
   /face fast nopredict 
   /if n $target(distance)<=13 { 
      /face fast 
      /sendkey up up 
      /return 
   } 
   /if $ObstCount>=3 { 
      /call CheckObst 
      /goto :Movementloop 
   } 
   /if n $target(distance)>13 /goto :MovementLoop 
/return 

sub CheckObst 
   /if n $MyXLOC==$char(x) /if n $MyYLOC==$char(y) /call HitObst 5 
   /varset MyXLOC $char(x) 
   /varset MyYLOC $char(y) 
   /varset ObstCount 0 
/return 

sub HitObst 
   /sendkey up up 
   /sendkey down down  
   /if n $rand(99)>50 { 

      /delay 3s 
      /sendkey up down 
      /sendkey down Right 
      /delay $p0  
      /sendkey up Right 
      /sendkey down up 
      /delay 3s 
      /sendkey up up 
   } else { 
      /delay 3s 
      /sendkey up down 
      /sendkey down left 
      /delay $p0  
      /sendkey up left 
      /sendkey down up 
      /delay 3s 
      /sendkey up up        
   } 
   /sendkey up down 
   /sendkey up Right 
   /sendkey up Left 
   /sendkey down up 
/return 

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Post by grimjack » Thu Jun 05, 2003 2:07 pm

Amadeus wrote:Grim....would this be a valid addition? I copied the routines from another macro, I don't remember which, but it was old and I'm not sure if it'll still work. Again, I'm not much of an expert when it comes to this scripting language.
I could definatly add this. I could add a command that uses a name or /assist to target a mob and then move to it. Also the aa code I am not sure on I don't have a druid. I'll see what I can put togather for it later. Currently working on puting a basic sham version of this out.

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

moveto

Post by grimjack » Thu Jun 05, 2003 2:32 pm

Added moveto command. Will move to mob/char specified or assist off of master and move to that.

Thanks
GrimJack

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

evac

Post by grimjack » Thu Jun 05, 2003 2:40 pm

Added Evac Section.

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Update

Post by grimjack » Thu Jun 05, 2003 4:47 pm

Minor Logic Update.

Amadeus
The Maestro
The Maestro
Posts: 2036
Joined: Sat Jun 29, 2002 3:51 pm

Post by Amadeus » Thu Jun 05, 2003 5:51 pm

Well..I tried it as posted just now, and the script started...but, when I tried /tell player accept .....the player accepted the group invite and promptly crashed to desktop...hard and fast.

I guess I could try putting the $ signs in there and see if that helps.....

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Update your ini

Post by grimjack » Thu Jun 05, 2003 8:26 pm

Update the group offset with what is in CVS or if it is not there then do a search on $group.

User avatar
Kint
a hill giant
a hill giant
Posts: 208
Joined: Thu Mar 13, 2003 3:36 am

Post by Kint » Fri Jun 06, 2003 5:34 am

this macro is awsome. keep up the good work

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Help

Post by grimjack » Fri Jun 06, 2003 8:28 am

Added help command. Will send a tell to the master with a list of commands. I am at work and can't test it from here atm.