Alot like the shm bot (hell I didn't really bother upgrading the echo yet) Gonna test it tonight see how it works out. Will edit out the shm echos later when I get home class soon=).
Code: Select all
|Masta Rik CleBot(Raid Buffbot)
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
|
| This is From Hubba and a few others I have made some changes.
| This is basicaly I rip of the shm macro to make a cle buffbot/healer
|
|
| Usage:
|
|
|
|
| Features: commands work in tell or group
|
| The following commands will target the sender and cast the spells
| requested on the sender: [RGC] [Vie] [Symbol] [Balikor] [Virtue] [Conviction] [Viction] [BoD] [Reverence] [Kazad] [hot] | [heal]
|
| The following commands will assist the sender and cast the spells
| requested on the corpse: [Rezz] [Click]
|
| The following commands: [buff] [buff me] will rebuff a person
|
| The following commands: [Buff them] will rebuff another group
|
| The following commands: [Follow me] [end follow] [stop] are for moving the Cleric
|
| [buff pet] works properly now, targets the senders pet and buffs
|
| [gate now] will memorize the gate spell and gate to bind, must be a tell
|
| Added a chat channel to echo all non command word tells to controller
| added a vtell to controller on incomming tells
|
| Use "help" for more help ( !help is incomplete! )
|_______________________________________________________________|
|
| -!- Basis of this script is Version: v0.5c by Hubba
| Awesome script, I hope you like what I have added
|
|_______________________________________________________________|
| -!- This Script Uses spell_routines.inc by Rusty
| -!- Exptrack snippet from exptracker.mac by Raebis, with tweaks from Phoenix (not tested)
| -!- Wait4Rez snippet from wait4rez.mac by fantum409
|
|_______________________________________________________________|
#chat group
#chat tell
#Event ToggleVariable "[MQ2] Toggle #1#"
#Event ToggleVariable "[MQ2] Toggle #1# #2#"
#Event OutDoor "#*#outdoors#*#"
#Event OutDoor "You can not summon a mount here."
#Event Zoning "You have entered#*#"
#Event Hungry "#*#are hungry#*#"
| #Event Enrageon "#*#ENRAGED#*#"
| #Event Enrageoff "#*#no longer enraged#*#"
#Event Thirsty "#*#are thirsty#*#"
#Event ImDead "You have been slain by#*#"
#Event Invited "#*#To join the group, click on the 'FOLLOW' option, or 'DISBAND' to
cancel#*#"
#include Spell_Routines.inc
Sub Main
| The spell will be memmed in the listed order.
| Gem1 = Divine Intervention, Reviviscence, Remove Greater Curse
| Gem2 = Panoply of Vie
| Gem3 = Conviction, Symbol of Kazaad, Armor of the Zealot
| Gem4 = Blessing of Devotion
| Gem5 = Complete healing
| Gem6 = Pious Light
| Gem7 = Pious Elixir
| Gem8 = Yaulp VI
| Gem9 = Divine Barrier
| ########### Make changes in spells as you need.
| ########### Obs! This is mainly for a 65+ Cleric
| ########### Default Channel, Controller
/declare CChannel outer "your channel here"
/declare ChatController outer "your controller here"
| ########### Your Spell List - update as needed
/declare SpellCheal outer "Complete Healing"
/declare SpellHoT outer "Pious Elixir"
/declare SpellQHeal outer "Pious Light"
/declare SpellYaulp outer "Yaulp VI"
/declare SpellVie outer "Panoply of Vie"
/declare SpellVirt outer "Virtue"
/declare SpellVict outer "Conviction"
/declare SpellSym outer "Symbol of Kazad"
/declare SpellZealot outer "Armor of the Zealot"
/declare SpellBod outer "Blessing of Devotion"
/declare SpellDI outer "Divine Intervention"
/declare SpellRezz outer "Reviviscence"
/declare SpellRGC outer "Remove Greater Curse"
/declare SpellDA outer "Divine Barrier"
/declare SpellGATE outer "Gate"
/declare SpellFOOD outer "Summon Food"
/declare SpellDRINK outer "Summon Drink"
|########### Mount Type
/declare Mount outer "Small Red Drum"
| ########### Other Pet Buff Spell List
/declare SpellPetBuffo[1] string outer
/varset SpellPetBuffo[1] "Virtue"
| ############ Heal Priority.
/declare CasterHeals int outer 40
/declare MeleeHeals int outer 60
/declare TankHeal int outer 80
/declare PlateHeal int outer 75
| ############ To Do List
/declare DoHeal outer TRUE
/declare Yaulp outer TRUE
/declare Verbose outer TRUE
| ########### ! No Changes From Here Is Needed !
/squelch /alias buffs /echo toggle buffs
/squelch /alias healmeleeat /echo toggle healmeleeat
/squelch /alias healcastersat /echo toggle healcastersat
/squelch /alias healtankat /echo toggle healtankat
/squelch /alias assist /echo toggle assist
/squelch /alias healat /echo toggle healat
/squelch /alias status /echo toggle show
/squelch /alias show /echo toggle show
/squelch /alias help /echo toggle help
/squelch /alias verbose /echo toggle verbose
/declare M_Assist string outer
/declare OutDoors outer TRUE
/declare Exper float outer
/declare AAExp float outer
/varset Exper ${Me.Exp}
/varset AAExp ${Me.AAExp}
/call MemSpells
| ###############
| ############### Main Loop Starts
| ###############
:Main_Loop
|- Check for Standing if less than sitat then sit
/if ( ${Me.State.Equal[Stand]} && ${Me.PctMana}<${SitAt}) /sit
|- Summon Mount if outdoors
| /if (!${Me.Mount.ID} && ${OutDoors}) /call cast ${Mount} item 4s
|- Check for low mana state
/call Check_Mana
|- Check for new events in chat etc etc...
/doevents
|- Do we move?
:Hold_Main
/if (${Me.Moving}) /goto :Hold_Main
|- Group Heals
/call Check_grpHPs
|- Check for Standing if less than sitat then sit
/if ( ${Me.State.Equal[Stand]} && ${Me.PctMana}<${SitAt}) /sit
|- Group Heals
/call Check_grpHPs
/goto :Main_Loop
/return
| ###############
| ############### Main Loop Ends
| ###############
| ############### Mem Spells in Spell List
Sub MemSpells
/echo Memming spells. Hang on.
/if ( !${Me.Gem[${SpellDI}]} ) {
/memspell 1 ${SpellDI}
/delay 25
}
/if ( !${Me.Gem[${SpellVie}]} ) {
/memspell 2 ${SpellVie}
/delay 20
}
/if ( !${Me.Gem[${SpellVict}]} ) {
/memspell 3 ${SpellVict}
/delay 20
}
/if ( !${Me.Gem[${SpellBod}]} ) {
/memspell 4 ${SpellBod}
/delay 20
}
/if ( !${Me.Gem[${SpellCheal}]} ) {
/memspell 5 ${SpellCheal}
/delay 20
}
/if ( !${Me.Gem[${SpellQheal}]} ) {
/memspell 6 ${SpellQheal}
/delay 20
}
/if ( !${Me.Gem[${SpellHoT}]} ) {
/memspell 7 ${SpellHoT}
/delay 20
}
/if ( !${Me.Gem[${SpellYaulp}]} ) {
/memspell 8 ${SpellYaulp}
/delay 30
}
/if ( !${Me.Gem[${SpellDA}]} ) {
/memspell 9 ${SpellDA}
/delay 30
}
|/if ( ${Window[SpellBookWnd].Open} ) /windowstate SpellBookWnd close
/echo Spells are memmed.
/return
|################### Check if any group member needs heal
Sub Check_grpHPs
/declare i int local 1
/for i 1 to ${Group}
/if (${Group[${i}].Class.Name.Equal[Cleric]} || ${Group[${i}].Class.Name.Equal[Druid]} || ${Group[${i}].Class.Name.Equal[Wizard]} || ${Group[${i}].Class.Name.Equal[Magician]} || ${Group[${i}].Class.Name.Equal[Necromancer]} || ${Group[${i}].Class.Name.Equal[Enchanter]}) {
/if (${Group[${i}].PctHPs}<=${CasterHeals}) {
/target pc ${Group[${i}]}
/if (${Me.CurrentMana}<${Spell[${SpellQHeal}].Mana}) {
/echo *** Shid ! I don't have mana to heal ${Group[${i}]}
} else /if (${Target.Distance}<=100) {
/if (${Verbose}) /gsay Quick heal <<< %T >>>
/call cast ${SpellQHeal} gem6 4s
}
}
}
/if (${Group[${i}].Class.Name.Equal[Monk]} || ${Group[${i}].Class.Name.Equal[Rogue]} || ${Group[${i}].Class.Name.Equal[Ranger]} || ${Group[${i}].Class.Name.Equal[Beastlord]}) {
/if (${Group[${i}].PctHPs}<=${MeleeHeals} && ${Group[${i}].Name.NotEqual[${M_Assist}]}) {
/target pc ${Group[${i}]}
/if (${Me.CurrentMana}<${Spell[${SpellQHeal}].Mana}) {
/echo *** Shid ! I don't have mana to heal ${Group[${i}]}
} else /if (${Target.Distance}<=100) {
/if (${Verbose}) /gsay Quick Heal <<< %T >>>
/call cast ${SpellQHeal} gem6 4s
}
}
}
/if (${Group[${i}].Class.Name.Equal[Warrior]} || ${Group[${i}].Class.Name.Equal[Shadow Knight]} || ${Group[${i}].Class.Name.Equal[Paladin]}) {
/if (${Group[${i}].PctHPs}<=${PlateHeal} && ${Group[${i}].Name.NotEqual[${M_Assist}]}) {
/target pc ${Group[${i}]} {
/if (${Me.CurrentMana}<${Spell[${SpellCHeal}].Mana}) {
/echo *** Shid ! I don't have mana to heal ${Group[${i}]}
} else /if (${Target.Distance}<=100) {
/if (${Verbose}) /gsay Cheal inc <<< %T >>>
/call cast ${SpellCHeal} gem5 4s
}
}
}
/if (${Group[${i}].Name.Equal[${M_Assist}]} && ${Group[${i}].PctHPs}<=${TankHeal}) {
/target pc ${Group[${i}]} {
/if (${Me.CurrentMana}<${Spell[${SpellCHeal}].Mana}) {
/echo *** Shid ! I don't have mana to heal ${Group[${i}]}
} else /if (${Target.Distance}<=100) {
/if (${Verbose}) /gsay Cheal inc <<< %T >>>
/call cast ${SpellCHeal} gem5 4s
}
}
}
}
/next i
/return
| ################### Check Mana level and report it
Sub Check_Mana
/if (${Math.Calc[${Me.MaxMana}*${MinMana}/100]} >= ${Me.CurrentMana} && !${LowMana}) {
/varset LowMana TRUE
/gsay I am LOM...
} else /if (${Math.Calc[${Me.MaxMana}*${BuffMana}/100]} <= ${Me.CurrentMana} && ${LowMana}) {
/gsay I am GTG...
/varset LowMana FALSE
}
/return
| ################## This will NOT check self HPs, Only check HoT or recast HoT
Sub CheckMyHPs
/if (${Me.CurrentMana}<${Spell[${SpellHoT}].Mana}) {
/echo *** Shit, I don't have mana to cast ${SpellHoT}
} else {
/target myself
/delay 3
/if (!${Me.Buff[${SpellHoT}].ID}) /call cast ${SpellHoT} gem7 3s
}
/return
| ################## Outdoors
Sub Event_OutDoor
/echo This is an indoor zone. Sorry.
/varset OutDoors FALSE
/return
| ################## Zoning
Sub Event_Zoning
/varset TargetArray[1] ${Target.CleanName}
/varset TargetArray[2] ${Target.Level}
/varset TargetArray[3] ${Target.Name}
/varset TargetArray[4] ${Target.ID}
/varset CombatOn TRUE
| ################## Group Invite
Sub Event_Invited
/invite
/return
| ################## I Died
Sub Event_ImDead
/echo Death
:Zone_Loop
/if ( ${Me.Bound.ID} != ${Zone.ID} ) /goto :Zone_Loop
/delay 5s
/mac waitrez 0
/delay 5
| #################
| ################# Tells n Hells
| #################
Sub Event_Chat(string ChatType,string ChatSender,string ChatText)
/if (!${ChatType.Equal[GROUP]} && !${ChatType.Equal[TELL]}) /return
| ################# Heal Requests
/if (${ChatText.Equal[heal]} || ${ChatText.Equal[heal me]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Quick Heal inc
/call cast ${SpellQHeal}
}
/return
}
/if (${ChatText.Equal[hot]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} HoT inc
/call cast ${SpellHoT}
}
/return
}
/if (${ChatText.Equal[Cheal]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Complete heal inc
/call cast ${SpellCheal}
}
/return
}
/if (${ChatText.Equal[rezz]} || ${ChatText.Equal[click]}) {
/assist ${ChatSender}
/delay 1s
/if (${Target.Type.Equal[corpse]} && ${Target.Distance}<=200) {
/tell ${Target} Inc rezz
/call cast ${SpellRezz} gem1 18s
}
/return
}
| ################# Buff Requests
/if (${ChatText.Equal[BoD]} || ${ChatText.Equal[Devotion]} || ${ChatText.Equal[Spell haste]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Spell haste inc
/call cast ${SpellBod} gem4 4s
}
/return
}
/if (${ChatText.Equal[Virtue]} || ${ChatText.Equal[Virt]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Virtue inc
/call cast ${SpellVirt} gem3 4s
}
/return
}
/if (${ChatText.Equal[viction]} || ${ChatText.Equal[vict]} || ${ChatText.Equal[conviction]} || ${ChatText.Equal[convict]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Conviction inc
/call cast ${SpellVict} gem3 5s
}
/return
}
/if (${ChatText.Equal[symbol]} || ${ChatText.Equal[balikor]} || ${ChatText.Equal[Bali]} || ${ChatText.Equal[kaz]} || ${ChatText.Equal[kazad]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Symbol inc
/call cast ${SpellSym} gem3 5s
}
/return
}
/if (${ChatText.Equal[RGC]} || ${ChatText.Equal[remove curse]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} RGC inc
/call cast ${SpellRGC} gem1 4s
}
/return
}
/if (${ChatText.Equal[Vie]} || ${ChatText.Equal[panoply]} || ${ChatText.Equal[bulwark]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} Vie inc
/call cast ${SpellVie} gem2 5s
}
/return
}
/if (${ChatText.Equal[DI]} || ${ChatText.Equal[Divine intervention]} || ${ChatText.Equal[intervention]}) {
/target pc ${ChatSender}
/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
/tell ${ChatSender} DI inc
/call cast ${SpellDI} gem1 5s
}
/return
}
| ################# Follow me
/if (${ChatText.Equal[Follow me]} || ${ChatText.Equal[Follow]}) {
/delay 5
/if (!${Spawn[${ChatSender}].ID}) {
/e ${ChatSender} is not in zone for me to follow!
/return
}
/varset follname ${ChatSender}
/varset following 1
/tell ${ChatSender} I am following you!!!
/if ( ${Me.Mount.ID} ) /dismount
:targetfoll
/target pc ${follname}
/delay 1s ${Target.Name.Equal[${follname}]}
/if (${Target.Name.Equal[${follname}]}) {
/goto :Loop
} else /goto :targetfoll
:Loop
/face fast
/if (${Target.Distance}>40) /keypress forward hold
/if (${Target.Distance}<39) /keypress back
/if (!${Target.ID}) /varset following 0
/doevents
/if ((${Target.Name.Equal[${follname}]})&&(${following}>0)) {
/goto :Loop
} else {
/keypress forward
/keypress back
}
}
| ################# Stop Following me
/if (${ChatText.Equal[End follow]} || ${ChatText.Equal[stop]}) {
/varset following 0
/keypress forward
/keypress back
/timed 50 /face pc ${follname}
/tell ${ChatSender} I Stopped following you!!!
/return
}
| ################# Other Pet Buffing
/if (${ChatText.Equal[buff pet]}) {
/echo Request for Pet Buffs
/target id ${Spawn[pc ${ChatSender}].Pet.ID}
/delay 3
/declare i int local 1
/for i 1 to ${SpellPetBuffo.Size}
/if (${Spell[${SpellPetBuffo[${i}]}].Mana} > ${Me.CurrentMana}) {
/tell ${ChatSender} ${ChatSender} Sorry I am getting LOM
:Hold_Pet_Rebuff
/Call LOM
/if (${Spell[${SpellPetBuffo[${i}]}].Mana} > ${Me.CurrentMana}) {
/goto :Hold_Pet_Rebuff
}
}
/delay 3
/echo *** Hang on ! Rebuffing ${SpellPetBuffo[${i}]}
/tell ${ChatSender} buffing ${SpellPetBuffo[${i}]} now...
/call cast ${SpellPetBuffo[${i}]} gem3 5s
/next i
/return
}
| ################### Go Home
/if (${ChatText.Equal[gate now]} && ${ChatType.Equal[TELL]}) {
/call cast ${SpellGATE} gem9
/return
}
/if (${ChatType.Equal[TELL]}) {
/1 [${ChatSender}]:${ChatText}
/vtell ${ChatController} 001
/return
}
/return
| ################### This will check whenever the player is changing any variable via /echo
Sub Event_ToggleVariable(string Line, string Command, string Command2)
/if (${Command.Equal[buffs]} && ${DoBuffs}==0) {
/varset DoBuffs TRUE
/echo Do Buffs: ${DoBuffs}
} else /if (${Command.Equal[buffs]}) {
/varset DoBuffs FALSE
/echo Do Buffs: ${DoBuffs}
}
/if (${Command.Equal[heal]} && ${DoHeal}==0) {
/varset DoHeal TRUE
/echo Do Heal: ${DoHeal}
} else /if (${Command.Equal[heal]}) {
/varset DoHeal FALSE
/echo Do Heal: ${DoHeal}
}
/if (${Command.Equal[verbose]} && ${Verbose}==0) {
/varset Verbose TRUE
/echo Verbose: ${Verbose}
} else /if (${Command.Equal[verbose]}) {
/varset Verbose FALSE
/echo Verbose: ${Verbose}
}
/if (${Command.Equal[buffpet]} && ${BuffPet}==0) {
/varset BuffPet TRUE
/echo Buff Pet: ${BuffPet}
} else /if (${Command.Equal[buffpet]}) {
/varset BuffPet FALSE
/echo Buff Pet: ${BuffPet}
}
/if (${Command.Equal[healtankat]}) {
/varset TankHeal ${Command2}
/echo Healing ${M_Assist} at ${TankHeal}%
}
/if (${Command.Equal[healmeleeat]}) {
/varset MeleeHeals ${Command2}
/echo Healing all Melee classes at ${MeleeHeals}%
}
/if (${Command.Equal[healcastersat]}) {
/varset CasterHeals ${Command2}
/echo Healing all Caster classes at ${CasterHeals}%
}
/if (${Command.Equal[Healplateat]}) {
/varset CasterHeals ${Command2}
/echo Healing all Caster classes at ${CasterHeals}%
}
/if (${Command.Equal[assist]}) {
/varset M_Assist ${Command2}
/sq /target pc ${M_Assist}
/if (!${Target.ID}) {
/echo ${M_Assist} is not here dude !
/return
}
/echo I will assist: ${M_Assist}
}
/if (${Command.Equal[healat]}) {
/varset HealGRPat ${Command2}
/echo Healing any group member below ${HealGRPat}% HPs
}
/if (${Command.Equal[Show]}) {
/echo ---------------------------
/echo Do Buffs:.............${DoBuffs}
/echo Do Heal:..............${DoHeal}
/echo Buff Pet:.............${BuffPet}
/echo ---------------------------
/echo Assist range: ${AssistAt}
/echo Assisting: ${M_Assist}
/echo Healing Casters: ${CasterHeals}% Melees: ${MeleeHeals}%
/echo ${M_Assist} get heals at ${TankHeal}
/echo Initiate Combat: ${CombatAt}%
/echo Verbose: ${Verbose}
/echo
/echo help - Will show help to set variables.
}
/if (${Command.Equal[help]}) {
/echo ___ Cle Do Stuff Script ___
/echo
/echo Commands to change values, ie: assistat 50 (Will start the combat routine when mob is in range 50)
/echo assisat <range> - Most spells don't go longer then 100
/echo combatat <% hps> - Initiate Combat when mob is at % HPs
/echo healtankat <% hps>
/echo healmeeleat <% hps>
/echo healcastersat <% hps>
/echo assist <PC Name>
}
/return
