Cleric.mac
Code: Select all
| cleric.mac
| cleric petbot
|
| Modded By Crazybear
| Courtesy of Dirtface
| Special thanks: Wes (for the idea of the FOR loop)
| Fippy (for figuring out "What went wrong.)
| Valerian (for completely writing the Autoheal script
| and the auto loot script.
| Seriously, Val figured this whole thing out.)
| Sparr (For helping me with the Set camp feature)
| Usage: /macro cleric.mac <character in control>
#define GroupMember v93
#define GroupMax v90
#define ChatCommand p2
#define XLOC v52
#define YLOC v53
#define $GroupClass $spawn($group($GroupMember),class)
#include SpellSub.mac
#include routines.mac
#chat tell
#Event Invited "To join the group, click on the 'FOLLOW' option, or 'DISBAND' to cancel"
#Event ClarityGone "Your mind returns to normal."
#Event InvisGone "You feel yourself starting to appear"
#Event RootGone "Your Immobilize spell has worn off."
#Event FollowOff "You are no longer auto-following "
Sub Main
/varset v69 $p0
:chkevent
/doevents
| *** AutoHeal ***
/varcalc GroupMax $group(count)-1
/for GroupMember 0 to $GroupMax
/if n $spawn($group($GroupMember),hp,pct)<1 /goto :nextmember
/if "$GroupClass"=="Warrior" /goto :Tankheal
/if "$GroupClass"=="Paladin" /goto :Tankheal
/if "$GroupClass"=="Shadow Knight" /goto :Tankheal
/if "$GroupClass"=="Monk" /goto :Meleheal
/if "$GroupClass"=="Ranger" /goto :Meleheal
/if "$GroupClass"=="Rogue" /goto :Meleheal
/goto :CasterHeal
:Tankheal
/if n $spawn($group($GroupMember),hp,pct)<41 {
/if n $group($GroupMember)==$char(id) /press F1
/if n $group($GroupMember)!=$char(id) /target id $group($GroupMember)
/if n $target(distance)>100 {
/tell $p0 %T is too far away.
/delay 30
/press esc
/goto :nextmember
}
/stand
/g Complete Heal >> %T
/call SpellSub 6 100
/sit
/press esc
}
/goto :nextmember
:Meleheal
/if n $spawn($group($GroupMember),hp,pct)<61 {
/if n $group($GroupMember)==$char(id) /press F1
/if n $group($GroupMember)!=$char(id) /target id $group($GroupMember)
/if n $target(distance)>100 {
/tell $p0 %T is too far away.
/delay 30
/press esc
/goto :nextmember
}
/stand
/g SupHeal >> %T
/call SpellSub 7 50
/sit
/press esc
}
/goto :nextmember
:Casterheal
/if n $spawn($group($GroupMember),hp,pct)<71 {
/if n $group($GroupMember)==$char(id) /press F1
/if n $group($GroupMember)!=$char(id) /target id $group($GroupMember)
/if n $target(distance)>100 {
/tell $p0 %T is too far away.
/delay 30
/press esc
/goto :nextmember
}
/stand
/g SupHeal >> %T
/call SpellSub 7 50
/sit
/press esc
}
/goto :nextmember
:nextmember
}
/next GroupMember
/goto :chkevent
/return
Sub Event_Chat
:Commands
| *** Complete Heal ***
/if "$ChatCommand"=="ch" {
/target $p1
/stand
/g COMPLETE HEAL on %T in 10seconds
/call SpellSub 1 105
/sit
/press esc
| *** HEAL OVER TIME ***
} else /if "$ChatCommand"=="ce" {
/target $p1
/stand
/g Cel Heal >> %T
/call SpellSub 1 50
/sit
/press esc
| *** Cure Poison ***
} else /if "$ChatCommand"=="poison" {
/target $p1
/stand
/g Cure Poison >> %T
/call SpellSub 6 50
/sit
/press esc
| *** GATE ***
} else /if "$ChatCommand"=="gate" {
/stand
/g Gating
/call SpellSub 8 55
| *** HP BUFF ***
} else /if "$ChatCommand"=="HP" {
/target $p1
/stand
/g HP Buff on %T
/call SpellSub 5 65
/sit
/press esc
| *** Superior Heal ***
} else /if "$ChatCommand"=="Heal" {
/target $p1
/stand
/g SHeal >> %T
/call SpellSub 7 50
/sit
/press esc
| *** Pet Superior Heal ***
} else /if "$ChatCommand"=="pet" {
/press esc
/press f2
/press f2
/stand
/g CH on %T
/call SpellSub 1 105
/sit
/press esc
| *** Symbol ***
} else /if "$ChatCommand"=="Symbol" {
/target $p1
/stand
/g Symbol on %T
/call SpellSub 3 55
/sit
/press esc
| *** AC BUFF ***
} else /if "$ChatCommand"=="AC" {
/target $p1
/stand
/g AC BUFF on %T
/call SpellSub 4 85
/sit
/press esc
| *** Root ***
} else /if "$ChatCommand"=="root" {
/target $p1
/assist
/stand
/delay 7
/g Rooting %T
/call SpellSub 2 40
/sit
/press esc
| *** Nuke ***
} else /if "$ChatCommand"=="nuke" {
/target $p1
/assist
/stand
/delay 7
/g Nuke >> %T
/call SpellSub 1 40
/sit
/press esc
| *** Report Mana ***
} else /if "$ChatCommand"=="mana" {
/stand
/dismount
/press F1
/g Mana is at $char(mana,pct)
/press esc
/sendkey down shift
/press 2
/press shift
/press 0
/press esc
| *** AUTOFOLLOW ***
} else /if "$ChatCommand"=="follow" {
/target $p1
/face
/sit off
/follow
/r Lead on %T
/varset v10 0
| *** Define Camp Spot ***
} else /if "$ChatCommand"=="setcamp" {
/press F1
/delay 5
/varset XLOC $char(x)
/varset YLOC $char(y)
/g Ok. Here I sit.
| *** AUTORETURN (to camp)***
} else /if "$ChatCommand"=="return" {
:return
/stand
/face loc $YLOC,$XLOC
/call GotoLoc $YLOC,$XLOC
/sit
| *** AUTOSTOP ***
} else /if "$ChatCommand"=="stop" {
/press down
/varset v10 1
/r Stopping here.
| *** SIT/STAND ***
} else /if "$ChatCommand"=="sit" {
/sit
| *** MOUNT HORSE ***
} else /if "$ChatCommand"=="mount" {
/sendkey down shift
/press 2
/press shift
/press 0
| *** DISMOUNT HORSE ***
} else /if "$ChatCommand"=="dismount" {
/dismount
| *** LFG ON ***
} else /if "$ChatCommand"=="LFG" {
/delay 10
/press f1
/delay 10
/disband
/delay 10
/lfg on
/r LFG now.
| *** CAMP ***
} else /if "$ChatCommand"=="camp" {
/sit off
/sit
/camp
/delay 10
/unload
| *** COMMAND HELP ***
} else /if "$ChatCommand"=="command help" {
/reply [CE] - Celestial Heal, [CH] - Complete Heal, [AC] - HP Buff, [HP] - HP Buff, [Heal] - Superior Heal, [Root] - Root Mob, [Nuke] - DD Mob, [Gate] - Gate out, [Mana] - Report Mana, [Follow] - Follow, [Stop] - Stop Follow, [Loot] - Autoloot, [Setcamp] = Set camp spot, [Return] - Return to camp, [Sit] - Sit/Stand, [MOUNT/DISMOUNT] - (dis)mount Horse, [LFG] - LFG ON, [Camp] - Camp
}
/return
Sub Event_Invited
/delay 20
/invite
/return
Sub Event_ClarityGone
/g I'm outa crack and I'm gettin feindish...
/return
Sub Event_InvisGone
/g Invis is wearing off.
/return
Sub Event_RootGone
/g Root Wore off.
/press f2
/assist
/delay 11
/stand
/g Rooting %T
/call SpellSub 3 40
/sit
/press esc
/return
Sub Event_FollowOff
/if n $v10==1 {
/r Parked.
} else {
/g Lost ya.
/sendkey down up
:KeepRunning
/face
/if n $target(distance)<50 {
/sendkey up up
/follow
/varset v10 0
/g Back on Auto-Follow. go ahead.
} else {
/goto :KeepRunning
}
}
/return
Code: Select all
| - routines.mac -
| Generic routines that may be used a lot.
| ----------------------------
| Original Version by: Plazmic
| Improved by: L124RD
Sub BuyItems
/sendkey down shift
/for l1 1 to $p0
/click left merchant buy
/varset l2 $char(cash)
:BuyItems_Wait
/delay 0
/if n $l2==$char(cash) /goto :BuyItems_Wait
/next l1
/sendkey up shift
/return
| ----------------------------
Sub SellItem
/sendkey down shift
:SellItem
/finditem $p0
/if $find()==FALSE /goto :DoneSellItem
/click left merchant sell
/delay $rand(3)
/goto :SellItem
:DoneSellItem
/sendkey up shift
/return
| ----------------------------
Sub BackPedal
/if $p0==$v79 /return
/varset v79 $p0
/if $p0==1 /sendkey down up
/if $p0==0 /sendkey up up
/return
| ----------------------------
Sub AutoRun
/if $p0==$v80 /return
/varset v80 $p0
/if $p0==1 /sendkey down up
/if $p0==0 /sendkey up up
/return
| ----------------------------
Sub GotoLoc
/varset v91 $rand(5)
:GotoLocLoop
/face loc $p0
/if "$p1"=="u" /Press u
/call AutoRun 1
/if n $distance($p0)>$v91 /goto :GotoLocLoop
/call AutoRun 0
/return
| ----------------------------
Sub GotoTarg
/varset v91 $rand(5)
/target $p0
:GotoTargLoop
/face
/if "$p1"=="u" /Press u
/call AutoRun 1
/if n $target(distance)>$v91 /goto :GotoTargLoop
/call AutoRun 0
/return
| ----------------------------
Sub BuyItems
/press down shift
/for p1 1 to $p0
/varcalc p2 $char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper)
/click left merchant buy
:BuyItemsLoop
/delay 0
/if n $calc($char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper))==$p2 /goto :BuyItemsLoop
/next p1
/press up shift
/return
| ----------------------------
Sub SellItem
/sendkey down shift
:SellItem
/finditem $p0
/if $find()==FALSE /goto :DoneSellItem
/varcalc p2 $char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper)
/click left merchant sell
:SellItemLoop
/delay 0
/if n $calc($char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper))==$p2 /goto :SellItemLoop
/goto :SellItem
:DoneSellItem
/sendkey up shift
/return
| ----------------------------
Sub FindCombiner
/for p1 7 downto 0
/if "$pack($p1,combine)"=="$p0" /return $p1
/next p1
/echo You do not appear to have a valid $p0 container.
/return 99
| End of routines.mac
Code: Select all
| - SpellSub.mac -
| Spell Casting Sub routine - Usage "/call SpellSub <gem> <delay *actual cast time plus recast*>"
| Will return $v99 = 999 if you go oom.
|
| Modified by GD to work with the 7-4-2002 Release
|
| modified by sempi to include sitting/standing and be more cleric oriented
| 1. Complete Heal
| 2. Divine Light
| 3. Celestial Healing
| 4. Remedy
| 5. Symbol of Marzin (?)
| 6. Heroic Bond
| 7. Mark of Karn
| 8. Mark of Retribution
|
| Modified by S_B_R to handle more events and relay more information to the person
| issuing the command. Also removed the auto-sit function to help control aggro. 09-07-02
#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 CastTimer "You haven't recovered yet..."
#Event CastResist "Your target resisted "
Sub SpellSub
/varset v98 $p0
/varset v99 $p1
:ReCast
/sit off
/varset v1 2
/cast $v98
/delay 10
/doevents
/if n $v1==0 /goto :ReCast
/if n $v1>1 /goto :Failure
/return
:Failure
/if n $v1==2 {
/reply Spell failed for unknown reason...
/delay 5
} else /if n $v1==3 {
/reply You're too far away. Come back.
/delay 5
} else /if n $v1==4 {
/reply OOM
/delay 100
/sit on
} else /if n $v1==5 {
/reply Waiting for repop...
} else /if n $v1==6 {
/reply %T RESISTED.
}
/return
Sub Event_CastStart
/varset v1 1
/delay $v99
/return
Sub Event_CastFizzle
/varset v1 0
/return
Sub Event_CastInterrupt
/varset v1 0
/return
Sub Event_CastTooFar
/varset v1 3
/return
Sub Event_CastNoMana
/varset v1 4
/return
Sub Event_CastTimer
/varset v1 5
/return
Sub Event_CastResist
/varset v1 6
/return
