• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01Jul07]

Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

I love the healer macro, any way to put in to rez members when they are dead and no mobs around?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

cleric isn't buffingby default is there asetting to turn on or a /tell that I need to send to turn on buffs?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

I am having same problem with sham mac shammy tries to cast hot then interrupts , also it will keep mob targeted when casting panther and avatar line of spells so only shaman gettng the buff, am I doing something wrong there, thank you for your time put in to these macros.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

Hmmm,
to the clr macro, its designed to not buff if mobs are very close or mobs in the area are pulled=running at high speed, in those occasions the macro assumes a fight in camp or a mob beig pulled to camp and wont buff(to be rdy to heal anytime).

to the shm mac, I built in a interrupt check to stop the HoT if tank is above a certain health. Unless you set this to 100 in case you want to get HoT on tank all the time it will be interrupted if tank is healthy.
On Panther and Champion.... hmm it works just fine for me.
I have checks built in wich delay after a targetchange to go sure even slow comps have the right target before casting stuff, so it should hit right.

Thats all I can say to your problems atm sorry,

Crystane...
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

I looked it over and i think what is happening is i have sit = true at 98% mana. I havent tried it yet but i might have to take sit out, or change the sit routine to look for me casting and delay 4.5 seconds so the spell goes off. i am still looking it over ill post fixes if i get it to work
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

Hmmm,

I will look some closer into it myself now, since I usually build checks for casting into a macro before I let it sit. I will also go thru it if it needs to get a delay to get a cast of once its started to cast.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

Shmbot HoT on Tank subroutine repaired,

hehe well I did a /varset stophealpoint .....

to determin at what point to interupt the HoT cast on tank.
It was supposed and is now your set Hotat%+10.

By error my /varset turned out to a value of 1 allways, makeing my interupt check work like hmm tank is on more health then 1percent.... interrupting.

Leading to successfully interrupting every HoT cast so far.

Well sorry and fixed Zip is avail.

Enjoy, Crystane......
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

Can someone explain what this line is used for? I m curious because I do not want the cleric to send a personal tell the tank name asking this question. "Do you know the Commandlist for Clr AA's" . Am I misinterpreting what this line is doing? If not then can I just delete this line ?

note:copied from healer macro.

HTML:
/tell ${tankname} Do you know the Commandlist for Clr AA's?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

Thanks crystane i appreciate it alot. Red cent for joo
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-03-06]

Heya, sadly I found some other bugs

new fix incom.

The /tell line does just this it tells Tankname......
You can delete any /tell line in any macro, they do only notify of something.

However if you have another macro running looking for a tell like this it might be of use. Else go delete it.

Enjoy Crystane....

PS: There is still some junk in those macros I didnt care to delete yet or clean up. I found one time, in a Macro I modded, that someone was looking for 2 special player names just to make sure that they would never be buffed by toons running the macro hehe. go figure.

New Shmbot.zip incom.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Crystane... I just tried the AFNuke... and let me say THANKS!!! I had been looking for a decent one for awhile. It makes life so much easier while boxing now. Incomming redcent. One thing i did find... which might be on my end.... is that about every three mobs it wants to just quit. It doesn't give an error just doesn't nuke like it should. And i use to love GOM... ya not so much now... pulls way to much agro. But a beast isn't made to tank so hard to keep agro. I will either take out the GOM nuke or get another set of weapons and a set of hate augs. Thanks again =)
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Heya there,

about afnuke... I built aggro control into it.
This means after a set amount of actions (Nukes, clickies, snares) it is supposed to use a Deaggrospell ( e.g. our new Conscussion ).
It is now set that if concussion fails or gets resisted to wait for it to pop back up and recast before proceeding to nuke. (This is to prevent aggro)

Look for the Variable Nukenum in the ini file and customize it.
The variable straight effects how many mentioned actions will be done before
your toon tries to deaggro, the pause sometimes is intentional.
And if I recall right the set amont on my release was 3.

Hope this clears it up, I admit I have to rewrite and extent the help event in the macro to be used in game and to see easy what commands are avail.
But I refused to do that work of style ( am afraid since there are so many commands avail ;) )

Crystane....
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Heya again,

here it comes my, if I dont discover any mistakes soon, atm last release of
Pallytank. I really have to work on the Healer next.

Now what I did, I worked over the Fightincamp feature.
I am proud to say the use of the stunfree positioning, running backwards
works good enough now for me, so I made it my default setup now.
I also tried to decrease the turn arounds and showing your back to a named mob(since I figured takeing alot more dmg while doing that).

I also think I improved the engage phase, makeing the tank wait for the mob to reach him near the anchor or if he isnt top of aggro list, to run to the mob.

I also implemented alot more checks for aggrochange(requires HOTT),
Taunt should be used immediatly now, once tank looses aggro.

thus less running chaseing the mob and more dps/aggro.

I still have a to do list for the pallytank macro but that has to wait atm.

So far enjoy Crystane....
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Hey, is the shammy bot workin as intended? I have following problems

1. When grp buffs are enabled it keeps casting spirit of might on my other character (i 2box) even if i delete every spirit of might entry in the mac and ini file it keeps doin it, and nothing else. I assume Group Buff List is where you put what you want to keep up of group buffs.

2.Since i 2box mostly I would like it to cast ferine avatar on me 2nd char and leopard, avatar I had working but not leopard.

3.Sometimes (mainly in the end of a fight) it goes into some interrupt loop, it keeps casting HoT on itself and interrupting- then summoning horse and start over, same deal w/o horse.

4. Sometimes it slows a mob 3-4 times in a 40sec fight- it seems random?

Would love to get this working as it otherwise seems great, but been toying with this for 2 days and cant get it working :(
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Yeah same probs here, the spirt of might problem is coz its casting it on the MA and not it self (coz its not a grp buff) the mac thinks its not cast it on the ma so keeps spaming it till u pause the mac and cast it on the shammy to.

NFC about the hot thing i get that to, it still works just cant use it when other saround coz of that
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Heya,

I am working on a new shmbot atm which does Tanksinglebuffs, which derive from the Singlebuff list.
Once I get that running it should solve the Might problem naturally, also allrdy done in new version (not released yet): I seperated Grpbuffs and ShortAtkbuffs like Panther or Leopard. (Champion has to be set inside Grpbuffs btw) This lead to Grpbuffs only cast when not in Combat and Shortatkbuffs especially in combat.

Atm I have one BIG PROBLEM, where I need help.

My help file says it should be possible to do a check if certain spells stack with each other (Note!!! Each other not with the current buffs on Shm).

Usage I read is ${Spell[A].StacksWith} and should give a boolean value back, but it says No such Spell Member "StacksWith", although my Help file
especially lists "StacksWith" in the Memberlist for "Spell" TLO, its listed even right below "Stacks" Member.

So to finish my new shmbot I need a way to check if certain spells would stack with each other to prevent singlebuffs being cast useless just in front of Grpbuffs.

Any help would greatly speed up a new release.

thx Crystane....

PS: I fixed the multiple slows in new version as well allrdy, and am working on a subroutine to slow multiple mobs if being pulled so.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

I am going to cause more situations for my shm now to use HoT to see if I can reproduce the problems you folks have.
I need as much info as possible when Sm causes problem, like how many in Grp, on whom the Hot is cast on and what class that one is and at which health Hot should be cast and if the one recieveing the HoT is being healed else meanwhile the HoT is cast on. Since all those factors are drawn into the checks the HoT subroutine does when it should cast HoT and how it determines the interrupts, which are built in intentionally.

Keep reporting problems and wishes and sugestions AND

enjoy Crystane.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Thanks for the fast reply Crystane.

I'm not myself into coding stuff so I can't really help you on that part. I just put stuff into /declare and ini file then hoping it does what I need hehe.

My shammy is 71 but lacks various spells (such as champion). I have been 2 boxing him with a SK (I have tried inviting my trader to get LAA's but no change in my problems). Shammy has Breath of Trushar as HoT (if that matters?) it seems to me when the interrupt loop starts is when he casts hot on himself and then start to canni, only while casting the hot he swaps target to the sk and back and interrupting.

I tried for experimentation to use the one Ripski posted in post #63 in this thread. It dident have that problem but had other issues, not sure if that helps.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Just noticed now, when I end the macro it says.

/varset failed, variable 'MobSlowed' not found - related to the slow repeat maybe?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

First time user with this macro here and having problems. I target my MA and I get the following:

Loading from the ini File
Assist set to "my other char"
Memming spells. Hang on. - He starts buffing but when he gets to Swift like the wind he just casts it over and over again.

I must be doing something wrong. Any suggestions???
Rich (BB code):
| Once the macro is running any echo command change will automatically be written
| to the Ini file and saved.
| Requires Spell_Routines.inc
| [07-01-06]	Crystane: Fixes in Logic and Features. Credits to the original Authors.
| 		Repaired: Way tooooooo many typo's like missing ( or } or my special Friend "." in Events.
|		Added: 	Most of all a keepup for Grpbuffs. Want to rebuff the Grp? Simple click off the Grpbuff on the Shm.
|		Added:  Meleecombat
|		New Anchorsub features Moveing to Anchor or if far out to follow a Grpmember to camp (if enabled)
|		Look for variables Anchor and GrpMbrAnchor
| [07-05-06]	More bugfixes, more complete ini and featuring 2 diffrent Dot's now.
| [11-07-06]	New Expansion implemented, Panther implemented, improved HoT, melee and some other minor stuff.
| [11-15-06]	Fixed HotonTank sub. If Shm is set to Heal there wont be any Dot's or Nukes anymore below "IfHealerMana" variable customized by you.
|		Also Cripple will now only be cast on "Named" mobs or Mobs lvl 77 and higher.

#Event OutDoor "#*#outdoors#*#" 
#Event OutDoor "You can not summon a mount here." 
#Event Zoning "You have entered#*#" 
#Event Enrageon "#*#become ENRAGED#*#" 
#Event Enrageoff "#*#no longer enraged#*#"
#Event ImDead "You have been slain by#*#"
#Event Paused "[MQ2] pause#*#"
#Event AstChange "[MQ2] astchange#*#"
#Event Rootchg "[MQ2] root#*#"
#Event Dotchg "[MQ2] dot#*#"
#Event Nukechg "[MQ2] nuke#*#"
#Event Malochg "[MQ2] malo#*#"
#Event Slowchg "[MQ2] slow#*#"
#Event Cripplechg "[MQ2] cripple#*#"
#Event Healchg "[MQ2] healchg#*#"
#Event Verbchg "[MQ2] verbchg#*#"
#Event Atkchg "[MQ2] atk#*#"
#Event SOWchg "[MQ2] sow#*#"
#Event Mountchg "[MQ2] mount#*#"
#Event Sitatchg "[MQ2] sitat#*#"
#Event Petchg "[MQ2] pet#*#"
#Event AutoSit "[MQ2] autosit#*#"
#Event DoBuffsChg "[MQ2] dobuffs#*#"
#Event PetChg "[MQ2] chgpet#*#"
#Event AddMaster "[MQ2] addmaster#*#"
#Event Shrink "[MQ2] shrink#*#"
#Event HoTchg "[MQ2] hotchg#*#"
#Event Help "[MQ2] help"
#Event DoMeleeChg "[MQ2] domelee"
#Event Anchorchg "[MQ2] Anchor"

#Event RaidBuff "[MQ2] raidbuffchg#*#"
#Event WornOff	"Your #1# spell has worn off of #2#."
#Event MissSpellComp "You are missing #1#."
#Event Toofaraway		"Your target is too far away, get closer!"
#Event CantSeeTarget		"You cannot see your target."
#Event AttackingSelf		"Try attacking someone other than yourself#*#"
#Event EXP                      "You gain experience#*#"
#Event EXP                      "You gain party experience#*#"

#chat tell
#chat group
 
#include Spell_Routines.inc
#include shmbot.inc

Sub Main 

| The spell will be memmed in the listed order. 
| Gem1 = Canni 
| Gem2 = Slow 
| Gem3 = Malo 
| Gem4 = Avatar 
| Gem5 = Pet and buffs 
| Gem6 = Heal, Nuke 
| Gem7 = HoT 
| Gem8 = DoT 
| Gem9 = root, cripple, gate 

| ########### Make changes in spells as you need. 
| ########### Obs! This is mainly for a 65+ shaman with Cannibalization ability 
| ########### Set Cannibalization to False if you don't have the ability 
| ########### 
  
| ########### Your Spell List - update as needed  

   /declare SpellSlow		outer "Balance of Discord" 
   /declare SpellDoT1           outer "Breath of Ternsmochin" 
   /declare SpellDoT2           outer "Blood of Yoppa" 
   /declare SpellPet           outer "Kyrah's Faithful" 
   /declare SpellDeBuff        outer "Malosini" 
   /declare SpellCanni         outer "Pained Memory" 
   /declare SpellCripple	outer "Crippling Spasm"

   /declare SpellHoT           outer "Halcyon Breeze" 
   /declare SpellHeal          outer "Yoppa's Mending" 
   /declare SpellRoot          outer "Petrifying Earth" 
   /declare SpellNuke          outer "Sting of the Queen" 

   /declare SpellATK           outer "Champion" 
   /declare SpellShortATK	outer "Talisman of the Panther"
   /declare SpellHASTE         outer "Talisman of Celerity" 
   /declare SpellFOCUS         outer "Dire Focusing" 
   /declare SpellCHA           outer "Charisma" 
   /declare SpellDEX           outer "Mortal Deftness" 
   /declare SpellSTR           outer "Talisman of Might" 
   /declare SpellAGI           outer "Preternatural Foresight" 
   /declare SpellSoS	       outer "Preternatural Foresight"
   /declare SpellSTA           outer "Talisman of Fortitude" 
   /declare SpellREGEN         outer "Spirit of the Stoic One" 
   /declare SpellPE            outer "Primal Essence" 
   /declare SpellPR            outer "Talisman of the Tribunal" 

   /declare SpellSOW           outer "Spirit of Bih`Li" 
   /declare SpellLEV           outer "Levitation" 
   /declare SpellINV           outer "Spirit Veil" 
   /declare SpellSHRINK        outer "Tiny Terror" 
   /declare SpellGROW          outer "Grow" 
   /declare SpellSEE           outer "Acumen of Dar Khura" 

   /declare SpellGATE          outer "Gate" 
   /declare SpellFOOD          outer "Summon Food" 
   /declare SpellDRINK         outer "Summon Drink" 

| ########### Mount Type 

|   /declare Mount              outer "White Rope Bridle" 


| ########### My Pet Buff Spell List 

   /declare SpellPetBuff[4] string outer 
   /varset SpellPetBuff[1] "Swift like the Wind" 
   /varset SpellPetBuff[2] "Preternatural Foresight" 
   /varset SpellPetBuff[3] "Ferine Avatar" 
   /varset SpellPetBuff[4] "Dire Focusing" 

| ########### Other Pet Buff Spell List 

   /declare SpellPetBuffo[4] string outer 
   /varset SpellPetBuffo[1] "Spirit of the Stoic One" 
   /varset SpellPetBuffo[2] "Spirit of Might" 
   /varset SpellPetBuffo[3] "Primal Essence" 
   /varset SpellPetBuffo[4] "Spirit of Fortitude" 

| ############ Group Buff List. 

   /declare SpellGrpBuff[9] string outer 
   /varset SpellGrpBuff[1] "Talisman of Perseverance"
   /varset SpellGrpBuff[2] "Talisman of Sense"
   /varset SpellGrpBuff[3] "Talisman of Celerity"
   /varset SpellGrpBuff[4] "Talisman of Wunshi"
   /varset SpellGrpBuff[5] "Talisman of Fortitude"
   /varset SpellGrpBuff[6] "Talisman of Might"
   /varset SpellGrpBuff[7] "Spirit of Bih`Li"
   /varset SpellGrpBuff[8] NULL
   /varset SpellGrpBuff[9] "Champion"

| ############ Short Combat Group Buff List. 
   /declare CombatGrpBuff[2] string outer
   /varset CombatGrpBuff[1] "Talisman of the Panther"
   /varset CombatGrpBuff[2] "Champion"

| ############ Single Buff List.    

   /declare SpellSingleBuff[6] string outer 
   /varset SpellSingleBuff[1] "Spirit of the Stoic One" 
   /varset SpellSingleBuff[2] "Dire Focusing" 
   /varset SpellSingleBuff[3] "Spirit of Fortitude" 
   /varset SpellSingleBuff[4] "Preternatural Foresight" 
   /varset SpellSingleBuff[5] "Swift like the Wind" 
   /varset SpellSingleBuff[6] "Spirit of Might"  

| ############ Combat Variables 

   /declare DoMelee	  outer FALSE

   /declare AssistAt      int   outer 100 
   /declare CombatAt      int   outer 97 
   /declare CrippleAt     int   outer 85

   /declare CastDoTat     int   outer 90
   /declare DotMana       int   outer 60 

   /declare Rootat        int   outer 40 
   /declare RootMana      int   outer 40 

   /declare NukeAt        int   outer 75 
   /declare NukeMana      int   outer 60

   /declare SitAtManaBelow         int   outer 98
   /declare BuffMana      int   outer 40 
   /declare MinMana       int   outer 15 
    
   /declare following     int   outer 0 
   /declare follname      string outer NULL 

| ############ Heal Priority. 

	/declare CasterHeals		int outer 65
	/declare MeleeHeals		int outer 50
	/declare TankHeal		int outer 55
	/declare HoTAt			int outer 80
	/declare defaultstophealpoint 	int outer 85
	/declare stophealpoint 		int outer 
	/declare CanniHealat		int outer 68
	/declare IfHealerMana		int outer 75
|Below "IfHealerMana" Shm wont Dot or Nuke.

| ############ To Do List 

   /declare DoMalo			outer TRUE    
   /declare DoSlow			outer TRUE 
   /declare DoCripple			outer TRUE
   /declare FastCripple			outer FALSE
   /declare FastSlow			outer FALSE 
   /declare DoRoot			outer TRUE 

   /declare SummonPet			outer TRUE
   /declare BuffPet			outer TRUE
  
   /declare DoDoT			outer TRUE 
   /declare DoBuffs			outer TRUE 
   /declare DoNuke			outer TRUE
   /declare DoHeal			outer TRUE 
   /declare HoTTank			outer TRUE
   /declare Cannibalization		outer FALSE 
   /declare Verbose			outer FALSE
   /declare RaidBuff			outer FALSE
	/declare AutoSit		outer TRUE 
	/declare distancetosit		int outer 80 
	/declare DoATK			outer TRUE
	/declare DoHaste		outer FALSE
	/declare UseMount		outer TRUE
	/declare DoGrpPanther		outer TRUE   

   | This is a delay for how long Avatar will hold. (8min) 
   /declare AvatarDelay			outer 5350

   /declare HoTDelay			outer 1000

| ############# Melee and Anchor
| Anchor defines if your toon moves back to an Anchor.
| GrpMbrAnchor defines if your toon is allowed to follow a Grpmember to camp in case of MovetoAnchor.

	/declare Anchor			outer TRUE
	/declare Leashdistance		int outer 28
	/declare GrpMbrAnchor		outer TRUE

| ########### ! No Changes From Here Is Needed ! 
	/declare RV_MyXLOC            int outer  0
	/declare RV_MyYLOC            int outer  0
	/declare AnchorX        int outer ${Me.X.Int}
	/declare AnchorY        int outer ${Me.Y.Int}
	/declare AnchorZ	int outer ${Me.Z.Int}
	/varcalc AnchorZ	${AnchorZ}+10
	/declare MobonEnrage	outer FALSE
	/declare stickmode	outer FALSE
	/declare amlostmode	outer FALSE
	/declare GrpLosState 	outer FALSE
	/declare gmember	int outer    
	/declare LosGrpMbr	int outer
	/declare CombatStickMode outer FALSE
	/declare ToofarawayCount	int outer 0
	/declare CantSeeTargetCount	int outer 0
	/declare AttackingSelfCount	int outer 0

| ########### ! No Changes From Here Is Needed ! 

/squelch /alias /pause /echo pause
/squelch /alias /autoassist /echo astchange
/squelch /alias /root /echo root
/squelch /alias /dot /echo dot
/squelch /alias /nuke /echo nuke
/squelch /alias /malo /echo malo
/squelch /alias /slow /echo slow
/squelch /alias /cripple /echo cripple
/squelch /alias /heal /echo healchg
/squelch /alias /verbose /echo verbchg
/squelch /alias /sow /echo sow
/squelch /alias /mount /echo mount
/squelch /alias /sitat /echo sitat
/squelch /alias /autosit /echo autosit
/squelch /alias /dobuff /echo dobuffs
/squelch /alias /chgpet /echo chgpet
/squelch /alias /addmaster /echo addmaster
/squelch /alias /shrink /echo shrink
/squelch /alias /hot /echo hotchg
/squelch /alias /raidbuff /echo raidbuffchg
/squelch /alias /melee /echo domelee  

   /declare TargetArray[4] string outer 
   /declare MobMaloed      outer FALSE 
   /declare MobSlowed      outer FALSE 
   /declare MobSlowImmune	outer FALSE
   /declare MobCrippled    outer FALSE
   /declare PetOn          outer FALSE 
   /declare MobRooted      outer FALSE 
   /declare MobDoTed1       outer FALSE 
   /declare MobDoTed2       outer FALSE 
   /declare CombatOn       outer FALSE
   /declare Engaged        outer FALSE  
   /declare LowMana        outer FALSE

   /declare M_Assist       string outer 
   /declare OutDoors       outer TRUE    
   /declare HoTTavail		outer FALSE
	/declare IsPaused		outer FALSE

   /declare Exper float outer 
   /declare AAExp float outer 
        
   /varset Exper ${Me.Exp} 
   /varset AAExp ${Me.AAExp} 

	/declare ij int local
	/for ij 1 to ${SpellSingleBuff.Size}
	/declare TankBuffDuration${ij}	timer outer 0
	/next ij
	/for ij 1 to 6
	/declare ATKBuffed${ij}		timer outer 0 
	/next ij
	/declare HoTOn	timer outer 0
   
| ############### Target a player as Main Assist 
    
/if (!${Ini[ShamBot.ini,General,Made].Equal[TRUE]}) {
	/call CreateIni
} else {
	/call LoadIni
}
	

/if (${Target.ID} && ${Target.Type.Equal[PC]} && ${Group.Member[${Target.CleanName}]}) {
		/varset M_Assist ${Target.CleanName} 
		/echo Assist set to ${M_Assist}
} else {
	/if (${Ini[ShamBot.ini,General,M_Assist].Length}) {
		/if (${SpawnCount[${Ini[ShamBot.ini,General,M_Assist]}]}>0) {  
			/varset M_Assist ${Ini[ShamBot.ini,General,M_Assist]}
			/echo Assist set to ${M_Assist} 
		} else { 
			/if (!${Target.ID} || ${Target.Type.NotEqual[PC]}) { 
				/echo You Do not have a main assist, make sure its a player character! 
				/endmacro 
			}
			/varset M_Assist ${Target.CleanName} 
			/echo Assist set to ${M_Assist}
		}
	} 
}
/call HoTTcheck
/assist off 
/delay 1
/cleanup
/call MemSpells 
    
/echo --------------****Crystane's ShamBot Enjoy****----------------
/echo Assisting ${M_Assist} @ ${CombatAt}% mob HP.
/echo Do Malo - ${DoMalo}
/echo Do Slow - ${DoSlow}
/echo Fast Slow - ${FastSlow}
/echo Doing Cripple - ${DoCripple}
/echo Fast Cripple - ${FastCripple}
/echo Cast Root - ${DoRoot}
/echo Cast Nuke - ${DoNuke}
/echo Cast DoT - ${DoDoT}
/echo Use Pet - ${SummonPet}
/echo Buff Pet - ${BuffPet}
/echo Buff Group - ${DoBuffs}
/echo Heal Group - ${DoHeal}
/echo Avatar Chain - ${DoATK}
/echo Use Mount - ${UseMount}
/echo Meleecombat - ${DoMelee}
/echo MoveToAnchor - ${Anchor}
/echo Cast Panther on Grp - ${DoGrpPanther}
/echo Verbose - ${Verbose}
/echo /echo help - to get a commandlist.
/echo ----------------------------------------------------    

| ###############    
| ############### Main Loop Starts 
| ###############  

:Main_Loop 
/doevents
/if (${IsPaused}) /goto :Main_Loop
   
|- Summon Mount if outdoors 
/if (!${Me.Mount.ID} && ${OutDoors} && ${UseMount}) /call cast ${Mount} item 4s 

/if ((${AutoSit})&&(${Bool[${Me.Sitting}]})&&(!${Window[SpellBookWnd].Open})) {
	/if (${Me.PctMana}>${SitAtManaBelow}) /stand
	/if (${NearestSpawn[NPC zradius 15].Distance}<=${distancetosit}) /stand
}
/if ((${AutoSit})&&(${Me.PctMana}<=${SitAtManaBelow})&&(!${Me.Casting.ID})) {
	/if ((${Bool[${Me.Standing}]}) && !${Me.Mount.ID} &&(${SpawnCount[NPC radius ${distancetosit} zradius 15]}<1)) /sit
}

/doevents
|- 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 
    
   |- Holding when invis.
   :Hold_Inv
   /if (${Me.Invis}) /goto :Hold_Inv

   |- Holding when Casting manual
   :HoldForManCast
   /if (${Me.Casting.ID}) /goto :HoldForManCast
   
   |- Pet 
   /if (${SummonPet} && !${Me.Pet.ID}) /call PET 
    
|   /if (${NearestSpawn[NPC].Distance}>=${distancetosit} && ${Me.PctMana}<${SitAtManaBelow}) /if (${Me.State.Equal[Stand]} && !${Me.Mount.ID} && !${Me.Casting.ID}) /sit

   |- Check for mobs and do combat stuff 
   /if (${TargetArray[1].Equal[NULL]} || ${NearestSpawn[NPC].Distance}<=100 ) {
	/if ((${Target.Name.NotEqual[${M_Assist}]} && ${Target.ID}!=${TargetArray[4]}) || !${Target.ID}) {
		/if (${CombatStickMode}) /squelch /stick off
		/target ${M_Assist}
	}
	/delay 3
	/call GetTarget 
   }
   /if (${CombatOn} && ${Target.ID}) /call Combat

   /if ((${Target.Type.Equal[PC]} || !${Target.ID}) && ${SpawnCount[npc radius 40 zradius 15]}<1) {
	/call CheckAnchor
	/if (${Me.Combat}) {
		/echo No Target, resetting. Combat off.
		/keypress Ctrl+c
		/notify ActionsWindow ACP_MeleeAttackButton Leftmouseup
	}
   }

   |- Group Heals 
   /if (${DoHeal}) /call Check_grpHPs 

   |- Canni 
   /if (${Cannibalization}) /call LOM 
   /doevents

   |- Group Buffs if more than BuffMana mana 
   /if (${Me.PctMana}>=${BuffMana} && ${DoBuffs}) {
	/call TankBuffs
	/call GrpBuffs 
   }

   /doevents
   |- Buff Avatar 
   /if (${Me.SpellReady[${SpellATK}]} && ${DoATK} && !${DoGrpPanther} && ${CombatOn}) {
	/call Cast_Avatar 
	/doevents MissSpellComp
   }
   /goto :Main_Loop 
/return 

| ###############    
| ############### Main Loop Ends 
| ############### 

  
| ############### Mem Spells in Spell List 

Sub MemSpells 

   /echo Memming spells. Hang on. 
   /if ( !${Me.Gem[${SpellCanni}]} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 1 ${SpellCanni}
      /delay 5s ${Me.Gem[${SpellCanni}]}
   } 
   /if ( !${Me.Gem[${SpellSlow}]} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 2 ${SpellSlow}
      /delay 5s ${Me.Gem[${SpellSlow}]}
   } 
   /if ( !${Me.Gem[${SpellDeBuff}]} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 3 ${SpellDeBuff}
      /delay 5s ${Me.Gem[${SpellDeBuff}]}
   } 
   /if ( !${Me.Gem[${SpellATK}]} ) { 
      /if (${SpellATK.Find[Champion]}) {
 	/if (${Bool[${Me.Standing}]}) /sit
     /memspell 4 ${SpellHoT}
      /delay 5s ${Me.Gem[${SpellHoT}]}
      /varset DoATK FALSE
      } else {
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 4 ${SpellATK}
      /delay 5s ${Me.Gem[${SpellATK}]}
      }
   } 
   /if ( !${Me.Gem[${SpellPet}]} && !${Me.Pet.ID} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 5 ${SpellPet}
      /delay 5s ${Me.Gem[${SpellPet}]}
   }
   /if ( !${Me.Gem[${SpellHeal}]} && ${DoHeal}) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 6 ${SpellHeal}
      /delay 5s ${Me.Gem[${SpellHeal}]}
   }
   /if ( !${Me.Gem[${SpellNuke}]} && !${DoHeal} && ${DoNuke} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 6 ${SpellNuke}
      /delay 5s ${Me.Gem[${SpellNuke}]}
   }
   /if ( !${Me.Gem[${SpellShortATK}]} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 7 ${SpellShortATK}
      /delay 5s ${Me.Gem[${SpellShortATK}]}
   } 
   /if ( !${Me.Gem[${SpellDoT1}]} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 8 ${SpellDoT1}
      /delay 5s ${Me.Gem[${SpellDoT1}]}
   } 
   /if ( !${Me.Gem[${SpellRoot}]} ) { 
	/if (${Bool[${Me.Standing}]}) /sit
      /memspell 9 ${SpellRoot}
      /delay 5s ${Me.Gem[${SpellRoot}]}
   } 

   |/if ( ${Window[SpellBookWnd].Open} ) /windowstate SpellBookWnd close 
   /echo Spells are memmed. 
/if (${Window[SpellBookWnd].Open}) /cleanup
      /if (${Bool[${Me.Sitting}]}) /stand
/return 

| ################### Check target and do stuff like slow, dot, pet attack etc. 

Sub HoTTcheck
/if (${CombatStickMode}) /squelch /stick off
/target myself
/delay 1s
/if (${Group}>1&&${Me.TargetOfTarget.ID}) /varset HoTTavail TRUE
/return

Sub Combat 
/if (${Target.Type.NotEqual[NPC]}) /return
/doevents Enrageon
   /if (${CombatOn} && !${PetOn} && ${Target.ID}==${TargetArray[4]} && !${MobonEnrage}) { 
      /pet attack 
      /varset PetOn TRUE 
      /varset Engaged TRUE  
   } 
   /if (${CombatOn} && !${MobMaloed} && ${DoMalo} && ${Target.ID}==${TargetArray[4]}) /call DeBuff 
   /if (${CombatOn} && !${MobSlowed} && ${DoSlow} && ${Target.ID}==${TargetArray[4]}) /call Slow 
   /if (${CombatOn} && !${MobCrippled} && ${DoCripple} && ${Target.ID}==${TargetArray[4]} && (${NearestSpawn[Named ${Target.Name}].ID} || ${Target.Level}>76)) /call Cripple

   |- Check for new events in chat etc etc... 
   /doevents 

   /if (${CombatOn} && ${DoDoT} && !${MobDoTed1} && (${MobSlowed} || !${DoSlow}) && ((!${DoHeal} && ${Me.PctMana}>=${DotMana}) || ((${DoHeal} && ${Me.PctMana}>${IfHealerMana}))) && ${Target.PctHPs}<=${CastDoTat}) { 
      /call cast ${SpellDoT1} gem8 1s CheckTankHP
      /if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset MobDoTed1 TRUE
	/delay 4s !${Me.Casting.ID}
   } 
   /if (${CombatOn} && ${DoDoT} && !${MobDoTed2} && (${MobSlowed} || !${DoSlow}) && ((!${DoHeal} && ${Me.PctMana}>=${DotMana}) || ((${DoHeal} && ${Me.PctMana}>${IfHealerMana}))) && ${Target.PctHPs}<=${CastDoTat}) { 
      /if (${Me.Gem[${SpellDoT2}]}) /call cast ${SpellDoT2} gem${Me.Gem[${SpellDoT2}]} 1s CheckTankHP
      /if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset MobDoTed2 TRUE
	/delay 4s !${Me.Casting.ID}
   } 
   /if (${CombatOn} && ${DoNuke} && ((!${DoHeal} && ${Me.PctMana}>=${NukeMana}) || ((${DoHeal} && ${Me.PctMana}>${IfHealerMana}))) && (${MobSlowed} || !${DoSlow}) && ${Target.PctHPs}<=${NukeAt}) { 
      /call cast ${SpellNuke} gem6 6s CheckTankHP
	/delay 4s !${Me.Casting.ID}
   } 


   /if (${CombatOn} && ((!${DoHeal} && ${Me.PctMana}>50) || (${DoHeal} && ${Me.PctMana}>${IfHealerMana}))) { 
      /call ATKbuffs
   } 


   /if (${CombatOn} && ${DoRoot} && ${Me.PctMana}>=${RootMana} && ${Target.PctHPs}<=${RootAt}) { 
      /call cast ${SpellRoot} gem9 6s
      /varset MobRooted TRUE 
   } 


/if (${DoMelee}) {
	/if (${Me.Mount.ID}) /dismount
	/if ((${Target.ID}) && (${Target.Type.Equal[NPC]})) {
		/doevents
		/if (${Target.Type.Equal[Corpse]}) /squelch /target clear
		/if (${Target.ID} && ${Target.Type.Equal[NPC]} && ${Target.Distance}>${Math.Calc[${Target.MaxRangeTo}-5]}) {
			/if (!${CombatStickMode}) {
				/squelch /stick ${Math.Calc[${Target.MaxRangeTo}-9]} behind
				/varset CombatStickMode TRUE
			}
		}
		/if (${Target.ID} && ${Target.Type.Equal[NPC]} && !${Me.Combat} && !${MobonEnrage}) {
			/keypress Ctrl+c
			/notify ActionsWindow ACP_MeleeAttackButton Leftmouseup
		}
	}   
	/if (${CombatStickMode} && ${Target.Distance}<=${Target.MaxRangeTo} && ${Target.PctHPs}>15) {
		/timed 50 /squelch /stick off
		/timed 50 /varset CombatStickMode FALSE
		/keypress forward
		/keypress back
	}
	/doevents Enrageoff
	/if (!${Target.ID} || ${Target.Type.Equal[PC]} || ${Target.Type.Equal[Corpse]} || ${MobonEnrage}) {
	        /squelch /stick off
		/varset CombatStickMode FALSE
		/if (${Me.Combat}) {
			/echo No Target, resetting. Combat off.
			/keypress Ctrl+c
			/notify ActionsWindow ACP_MeleeAttackButton Leftmouseup
		}
	}
}
/return

Sub EndCombat 
	/squelch /stick off
	/if (${Target.ID}) /squelch /target clear 
	/varset CombatStickMode FALSE   

   /if (!${Target.Name.Equal[${TargetArray[3]}]} || !${Target.ID}) { 
	/varset MobonEnrage FALSE
      /varset MobRooted FALSE 
      /varset MobMaloed FALSE 
      /varset MobSlowed FALSE 
      /varset MobSlowImmune FALSE
      /varset MobCrippled FALSE
      /varset PetOn FALSE 
      /varset MobDoTed1 FALSE 
	/varset MobDoTed2 FALSE 
      /varset CombatOn FALSE 
      /varset Engaged FALSE    
      /varset TargetArray[1] NULL 
      /varset TargetArray[2] NULL 
      /varset TargetArray[3] NULL 
      /varset TargetArray[4] NULL 

  } 
/return 
  
Sub ATKbuffs
	/declare TempMobHealth int local 0
   /declare i int local 1 
   /for i 1 to ${CombatGrpBuff.Size} 
      /doevents 
      /if (${Spell[${CombatGrpBuff[${i}]}].Mana}>${Me.CurrentMana}) /goto :skipcombatbuff
      /if (${Me.Book[${CombatGrpBuff[${i}]}]}==0) /goto :skipcombatbuff
	/if (!${Me.Buff[${CombatGrpBuff[${i}]}].ID} && ${Spell[${CombatGrpBuff[${i}]}].Stacks}) { 
		/if (!${Me.Gem[${CombatGrpBuff[${i}]}]}) {
			/if (${Me.Gem[Champion]} && !${Me.Buff[Champion].ID}) /goto :skipcombatbuff
			/memspell 5 ${CombatGrpBuff[${i}]}
			/delay 4s ${Me.SpellReady[${CombatGrpBuff[${i}]}]}
		}
		/if (${Me.SpellReady[${CombatGrpBuff[${i}]}]} || ${Me.SpellReady[Champion]}) {
			/echo *** Hang on ! Rebuffing ${CombatGrpBuff[${i}]} 
			/if (${CombatStickMode}) /squelch /stick off
			/if (${Target.Type.Equal[NPC]}) {
				/varset TempMobHealth ${Target.PctHPs}
				/keypress TAB
			}
			/delay 3 
			/target myself
			/delay 2s ${Target.Name.Equal[${Me.CleanName}]}
			/if (${Me.SpellReady[Champion]}) {
				/call cast "Champion" 8s CheckTankHP
				/delay 6s !${Me.Casting.ID}
			} else {
				/if (${TempMobHealth}>13) {
					/call cast ${CombatGrpBuff[${i}]} 5s CheckTankHP
					/delay 4s !${Me.Casting.ID}
				}
			}
			/keypress TAB
			/if (${i}==${CombatGrpBuff.Size} && (${Me.Buff[Champion].ID} || ${Me.Book[Champion]}==0)) {
				/if (${DoGrpPanther}) {
					/memspell 5 ${SpellShortATK}
					/delay 25
				} else {
					/memspell 5 ${SpellDoT2}
					/delay 25
				}
			}
		}
	}
   :skipcombatbuff
   /next i 
/return

Sub CheckTankHP
/if (!${Window[CastingWindow].Open}) /return
/if (${Group.Member[${Group.Member[${M_Assist}]}].PctHPs}<${TankHeal}) /call Interrupt
/return

Sub CheckAnchor   
/if (${Math.Distance[${AnchorY},${AnchorX}]}>${Leashdistance} && ${Anchor} && ${DoMelee}) {
	/squelch /stick off
	/call MoveToAnchor   
}
/return

Sub MoveToAnchor
	/squelch /target clear
	/squelch /stick off
	/varset CombatStickMode FALSE
	/if (${SpawnCount[npc radius 40 zradius 15]}>0) {
		/echo Skipping movetoAnchor and engageing next mob
		/assist ${M_Assist}
		/return
	}
	/declare iCount int local
	/varset iCount 0
	/varset stickmode FALSE
	/varset GrpLosState FALSE	
	/echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}.
	/varset RV_MyXLOC ${Int[${Me.X}]}
	/varset RV_MyYLOC ${Int[${Me.Y}]}
	/declare RV_DistanceTimer timer 25
  :AnchorMoveLoop
      /if (${iCount}>2) {
          /face nolook loc ${AnchorY},${AnchorX}
          /delay 1s 
	  /face fast nolook loc ${AnchorY},${AnchorX}
      	  /keypress back
	/return
	}

      /doevents
      /face nolook loc ${AnchorY},${AnchorX}
      /delay 1s
      /face fast nolook loc ${AnchorY},${AnchorX}
        /if (${Me.Running}) {
		/keypress Ctrl+m
		/notify ActionsWindow AMP_WalkButton Leftmouseup
	}
	/if (${Math.Distance[${AnchorY},${AnchorX}]}>${Leashdistance} && ${LineOfSight[${AnchorY},${AnchorX},${AnchorZ}:${Me.Y.Int},${Me.X.Int},${Math.Calc[${Me.Z.Int}+10]}]}) {
	/if (!${Me.Moving}) /keypress forward hold
	/face fast nolook loc ${AnchorY},${AnchorX}
	/echo Dist > ${Leashdistance} and LoS to Anchor.
	/goto :AnchorMoveCont
	}
	/if (${GrpMbrAnchor} && ${Math.Distance[${AnchorY},${AnchorX}]}>75 && !${LineOfSight[${AnchorY},${AnchorX},${AnchorZ}:${Me.Y.Int},${Me.X.Int},${Math.Calc[${Me.Z.Int}+10]}]}) {
		/call CheckGrpLoSight
		/if (${GrpLosState}) {
			/echo Dist(${Math.Distance[${AnchorY},${AnchorX}]}) > 75 and only LoS to a Grpmember.
			/target ID ${LosGrpMbr}
			/delay 3
			/target ID ${LosGrpMbr}
			/delay 3
			/delay 3s ${Target.ID}==${LosGrpMbr}
			/if (${PullerID}==${Target.ID}) /tell ${Puller} I am lost, I will follow you to camp.
			/face nolook
			/delay 1s
			/if (!${stickmode}) {
				/stick
				/varset stickmode TRUE
			}
			:ContFollow
			/if (${Math.Distance[${AnchorY},${AnchorX}]}<=50 || !${Target.ID} || ${SpawnCount[npc radius 50 zradius 20]}>0) {
				/if (${PullerID}==${Target.ID}) /tell ${Puller} Stopping to chase ya, thx.
				/squelch /target clear
				/keypress back
				/face nolook loc ${AnchorY},${AnchorX}
				/varset GrpLosState FALSE
				/if (${Math.Distance[${AnchorY},${AnchorX}]}>${Leashdistance} && ${Math.Distance[${AnchorY},${AnchorX}]}<55 && ${SpawnCount[npc radius 50 zradius 20]}<1) {
					/face fast nolook loc ${AnchorY},${AnchorX}
					/keypress forward hold
					/delay 2s (${Math.Distance[${AnchorY},${AnchorX}]}<${Leashdistance} || ${Math.Distance[${AnchorY},${AnchorX}]}>50)
					/keypress forward
					/keypress back
				}
				/goto :AnchorMoveCont
			}
			/goto :ContFollow
		} else {
			/if (${SpawnCount[npc radius 50 zradius 20]}>0) /goto :AnchorMoveCont
			/echo Dist > ${Leashdistance} and Nothing in Sight, trying to run and avoid obstacles.
			/face fast nolook loc ${AnchorY},${AnchorX}
			/if (!${Me.Moving}) /keypress forward hold
			/goto :AnchorMoveCont
		}
	}
	/if (${Math.Distance[${AnchorY},${AnchorX}]}<=${Leashdistance}) {
		/echo I am here, no sweat.
		/call AnchorVarReset
		/keypress back
		/return
	}
     :AnchorMoveCont
        /if (${GameState.Equal[CHARSELECT]}) /end
	/delay 1s ${Math.Distance[${AnchorY},${AnchorX}]}<${Leashdistance}
	/if (${Me.Moving}) /keypress back
      /if (!${RV_DistanceTimer} && !${stickmode} && ${Math.Distance[${AnchorY},${AnchorX}]}>${Leashdistance}) {
        /if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) {
		/call HitObstacle
        	/varset RV_MyXLOC ${Int[${Me.X}]}
        	/varset RV_MyYLOC ${Int[${Me.Y}]}
        	/varset RV_DistanceTimer 15
        } 
       }   
	/call AnchorVarReset
      /varcalc iCount ${iCount}+1
      /goto :AnchorMoveLoop
  /return

Sub AnchorVarReset
	/if (!${Me.Running}) {
		/keypress Ctrl+m
		/notify ActionsWindow AMP_RunButton Leftmouseup
	}
	/if (${stickmode}) {
		/varset stickmode FALSE
		/stick off
	}
	/if (${GrpLosState}) {
		/varset GrpLosState FALSE
	}
/return

Sub CheckGrpLoSight
/for gmember 1 to ${Group}
/if (${LineOfSight[${Group.Member[${gmember}].Y},${Group.Member[${gmember}].X}:${Me.Y},${Me.X}]} && !${GrpLosState}) {
	/varset GrpLosState TRUE
	/varset LosGrpMbr ${Group.Member[${gmember}].ID}
}
/next gmember
/return


sub HitObstacle 
     /keypress forward 
     /keypress back hold 
     /delay 5 
     /keypress back 
     /if (${Math.Rand[2]}) { 
        /keypress strafe_right hold 
        /delay 3 
        /keypress strafe_right 
     } else { 
        /keypress strafe_left hold 
        /delay 3 
        /keypress strafe_left 
     } 
     /keypress forward hold 
/return

| ############### Debuff 

Sub DeBuff 
:DeBuff_Loop 
   /if (${Target.PctHPs}<=${CombatAt} && ${Target.ID}==${TargetArray[4]}) { 
      /if (${Me.CurrentMana}<${Spell[${SpellDeBuff}].Mana}) { 
|         /echo *** Shid ! I don't have mana to Malo %T 
      } else { 
         /call cast ${SpellDeBuff} gem3 6s 
         /if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :DeBuff_Loop 
         /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset MobMaloed TRUE 
      } 
   } 
/return 
  
| ############### Slowing 

Sub Slow 
   /if (${Target.PctHPs}<=${CombatAt} && ${Target.ID}==${TargetArray[4]} && !${MobSlowImmune}) { 
      /if (${Me.CurrentMana}<${Spell[${SpellSlow}].Mana}) { 
|         /echo Shid ! I don't have mana to Malo %T 
      } else { 
      :Slow_Loop 
         /call cast ${SpellSlow} gem2 6s 
         /if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Slow_Loop 
         /if (${Macro.Return.Equal["CAST_IMMUNE"]}) { 
            /if (${Verbose}) /gsay *** %T is IMMUNE to my slow ! 
            /varset MobSlowed TRUE 
	    /varset MobSlowImmune TRUE
         } 
         /if (${Macro.Return.Equal["CAST_RESISTED"]}) { 
            /if (!${FastSlow}) { 
               /if (${Verbose}) /gsay *** %T RESISTED slow ! Trying again asap 
                /if (${DoHeal}) /call Check_grpHPs 
                /goto :Slow_Loop 
            } 
	    /varset MobSlowed TRUE 
         } 
         /if (${Macro.Return.Equal["CAST_SUCCESS"]}) { 
            /if (${Verbose}) /gsay *** %T is SLOWED 
		/gsay *** %T is SLOWED
            /varset MobSlowed TRUE 
	    /timed 900 /varset MobSlowed FALSE
            } 

      } 
   } 
/return 

Sub Cripple 
/if ((!${MobSlowed} && ${DoSlow}) && ${CombatOn}) /return
/if (!${Me.Gem[${SpellCripple}]} && ${Me.Book[${SpellCripple}]}) {
	/memspell 7 ${SpellCripple}
	/delay 5s ${Me.Gem[${SpellCripple}]}
}
   /if (${Target.PctHPs}<=${CrippleAt} && ${Target.ID}==${TargetArray[4]}) { 
      /if (${Me.CurrentMana}<${Spell[${SpellCripple}].Mana}) { 
         /echo Shid ! I don't have mana to Cripple %T 
      } else { 
      :Slow_Loop 
         /call cast ${SpellCripple} gem7 6s 
         /if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Slow_Loop 
         /if (${Macro.Return.Equal["CAST_IMMUNE"]}) { 
            /if (${Verbose}) /gsay *** %T is IMMUNE to my Cripple ! 
          
            /varset MobCrippled TRUE 
         } 
         /if (${Macro.Return.Equal["CAST_RESISTED"]}) { 
            /if (!${FastCripple}) { 
               /if (${Verbose}) /gsay *** %T RESISTED slow ! Trying again asap 
                /if (${DoHeal}) /call Check_grpHPs 
                /goto :Slow_Loop 
             } 
            /varset MobCrippled TRUE 
          } 
         /if (${Macro.Return.Equal["CAST_SUCCESS"]}) { 
            /if (${Verbose}) /gsay *** %T is Crippled 
            /varset MobCrippled TRUE 
          } 

      } 
   } 
/if ((${MobCrippled} || !${Me.Book[${SpellCripple}]}) && !${Me.Gem[${SpellShortATK}]} && ${Me.Book[${SpellShortATK}]}) {
	/memspell 7 ${SpellShortATK}
	/delay 5s ${Me.Gem[${SpellShortATK}]}
}
/return 

Sub GetTarget 
/if ((${Spawn[${M_Assist}].NearestSpawn[npc radius 40 zradius 15].ID}&&!${HoTTavail})||(${Spawn[${M_Assist}].NearestSpawn[npc radius 40 zradius 15].ID}) && (${Me.TargetOfTarget.ID}) && ((${Me.TargetOfTarget.Type.Equal[PC]} && ${Target.Type.Equal[NPC]}) || (${Me.TargetOfTarget.Type.Equal[NPC]} && ${Target.Type.Equal[PC]}))) {
   /assist ${M_Assist} 
   /delay 3 
   /assist ${M_Assist} 
   /delay 3 
	/if (${Target.PctHPs}<=${CombatAt}) {
		/varset CombatOn TRUE 
	}
}

/if (${Target.Type.Equal[NPC]}) /if (${Target.Distance}<=${AssistAt} && ${Target.ID}!=${TargetArray[4]}) { 
      /varset TargetArray[1] ${Target.CleanName} 
      /varset TargetArray[2] ${Target.Level} 
      /varset TargetArray[3] ${Target.Name} 
      /varset TargetArray[4] ${Target.ID} 
        
	/varset PetOn FALSE 
	/varset MobRooted FALSE 
	/varset MobMaloed FALSE 
	/varset MobSlowed FALSE 
	/varset MobCrippled FALSE
	/varset MobDoTed1 FALSE 
	/varset MobDoTed2 FALSE 

} 
/return 

| ################### Buff the group with buffs from the SpellGrpBuff array 


Sub GrpBuffs 
/if (((!${MobSlowed} && ${DoSlow}) || ${DoHeal}) && ${CombatOn}) /return
   /declare i int local 1 
   /for i 1 to ${SpellGrpBuff.Size} 
      /doevents 
      /if (${Spell[${SpellGrpBuff[${i}]}].Mana}>${Me.CurrentMana}) /goto :skipbuff
      /if (${Me.Book[${SpellGrpBuff[${i}]}]}==0) /goto :skipbuff
	/if (!${OutDoors} && ${Spell[${SpellGrpBuff[${i}]}].Name.Find[Spirit of Bih`Li]}) /goto :skipbuff
	/if (!${Me.Buff[${SpellGrpBuff[${i}]}].ID} && ${Spell[${SpellGrpBuff[${i}]}].Stacks}) { 
		/if (!${Me.Gem[${SpellGrpBuff[${i}]}]}) {
			/memspell 5 ${SpellGrpBuff[${i}]}
			/delay 12s ${Me.SpellReady[${SpellGrpBuff[${i}]}]}
		}
		/if (${Me.SpellReady[${SpellGrpBuff[${i}]}]}) {
			/echo *** Hang on ! Rebuffing ${SpellGrpBuff[${i}]} 
			/if (${CombatStickMode}) /squelch /stick off
			/keypress TAB
			/delay 3 
			/target myself
			/delay 2s ${Target.Name.Equal[${Me.CleanName}]}
			/call cast ${SpellGrpBuff[${i}]} 8s
			/keypress TAB
			/if (${i}==${SpellGrpBuff.Size}) {
				/memspell 5 ${SpellDoT2}
				/delay 5s ${Me.Gem[${SpellDoT2}]}
			}
		}
	}
   :skipbuff
   /next i 
/return 

Sub TankBuffs 
/if (((!${MobSlowed} && ${DoSlow}) || ${DoHeal}) && ${CombatOn}) /return
   /declare i int local 1 
   /for i 1 to ${SpellSingleBuff.Size} 
      /doevents 
      /if (${Spell[${SpellSingleBuff[${i}]}].Mana}>${Me.CurrentMana}) /goto :skipbuff
      /if (${Me.Book[${SpellSingleBuff[${i}]}]}==0) /goto :skipbuff
	/if (!${OutDoors} && ${Spell[${SpellSingleBuff[${i}]}].Name.Find[Spirit of Bih`Li]}) /goto :skipbuff
	/if (!${Me.Buff[${SpellSingleBuff[${i}]}].ID} && ${Spell[${SpellSingleBuff[${i}]}].Stacks} && ${TankBuffDuration[${i}]}<1) { 
		/if (!${Me.Gem[${SpellSingleBuff[${i}]}]}) {
			/memspell 5 ${SpellSingleBuff[${i}]}
			/delay 12s ${Me.SpellReady[${SpellSingleBuff[${i}]}]}
		}
		/if (${Me.SpellReady[${SpellSingleBuff[${i}]}]}) {
			/echo *** Hang on ! Rebuffing ${SpellSingleBuff[${i}]} 
			/if (${CombatStickMode}) /squelch /stick off
			/keypress TAB
			/delay 3 
			/target ${M_Assist}
			/delay 2s ${Target.Name.Equal[${M_Assist}]}
			/call cast ${SpellSingleBuff[${i}]} 8s
			/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset TankBuffDuration${i} ${Spell[${SpellSingleBuff[${i}]}].Duration}
			/keypress TAB
		}
	}
   :skipbuff
   /next i 
/return 


|################### Check if any group member needs heal 
Sub Check_grpHPs 
/if ((!${MobSlowed} && ${DoSlow}) && ${CombatOn}) /return
   /declare i int local 1 
    
   /for i 1 to ${Group} 

   /if (${Group.Member[${i}].Class.Name.Equal[Cleric]} || ${Group.Member[${i}].Class.Name.Equal[Druid]} || ${Group.Member[${i}].Class.Name.Equal[Wizard]} || ${Group.Member[${i}].Class.Name.Equal[Magician]} || ${Group.Member[${i}].Class.Name.Equal[Necromancer]} || ${Group.Member[${i}].Class.Name.Equal[Enchanter]}) /if (${Group.Member[${i}].PctHPs}<=${CasterHeals}) { 
	/if (${CombatStickMode}) /squelch /stick off
      /target pc ${Group.Member[${i}]} 
      /delay 5
      /if (${Me.CurrentMana}<${Spell[${SpellHeal}].Mana}) { 
         /echo *** Shid ! I don't have mana to heal ${Group.Member[${i}]} 
      } else /if (${Target.Distance}<=100) { 
         /if (${Verbose}) /gsay *** ${SpellHeal} on %T 
	 /varcalc stophealpoint ${CasterHeals}+10
         /call cast ${SpellHeal} gem6 4s InteruptHeal
      } 
   } 
    
   /if (${Group.Member[${i}].Class.Name.Equal[Warrior]} || ${Group.Member[${i}].Class.Name.Equal[Monk]} || ${Group.Member[${i}].Class.Name.Equal[Rouge]} || ${Group.Member[${i}].Class.Name.Equal[Ranger]} || ${Group.Member[${i}].Class.Name.Equal[Beast]} || ${Group.Member[${i}].Class.Name.Equal[Shadow Knight]} || ${Group.Member[${i}].Class.Name.Equal[Paladin]}) /if (${Group.Member[${i}].PctHPs}<=${MeleeHeals} && ${Group.Member[${i}].Name.NotEqual[${M_Assist}]}) { 
	/if (${CombatStickMode}) /squelch /stick off
      /target pc ${Group.Member[${i}]}
	/delay 8
      /target pc ${Group.Member[${i}]}
      /if (${Me.CurrentMana}<${Spell[${SpellHeal}].Mana}) { 
         /echo *** Shid ! I don't have mana to heal ${Group.Member[${i}]} 
      } else /if (${Target.Distance}<=100) { 
         /if (${Verbose}) /gsay *** ${SpellHeal} on %T 
	 /varcalc stophealpoint ${MeleeHeals}+10
         /call cast ${SpellHeal} gem6 4s InteruptHeal
      } 
   } 

   /if (${Group.Member[${i}].Name.Equal[${M_Assist}]} && ${Group.Member[${i}].PctHPs}<=${TankHeal}) { 
	/if (${CombatStickMode}) /squelch /stick off
      /target pc ${M_Assist} 
	/delay 8
      /target pc ${M_Assist} 
      /if (${Me.CurrentMana}<${Spell[${SpellHeal}].Mana}) { 
         /echo *** Shid ! I don't have mana to heal ${Group.Member[${i}]} 
      } else /if (${Target.Distance}<=100) { 
         /if (${Verbose}) /gsay *** ${SpellHeal} on %T 
	 /varcalc stophealpoint ${TankHeal}+10
         /call cast ${SpellHeal} gem6 4s InteruptHeal
      } 
   }
   
   /if (${Group.Member[${Group.Member[${M_Assist}]}].PctHPs}<=${HoTAt} && ${HoTOn}<=6 && ${HoTTank}) {
	/if (${CombatStickMode}) /squelch /stick off
   	/target pc ${Group.Member[${i}]}
	/delay 8
   	/target pc ${Group.Member[${i}]}
   	/if (${Me.CurrentMana}>${Spell[${SpellHoT}].Mana}) {
		/varcalc stophealpoint ${HoTAt}+10
   		/call cast ${SpellHoT} gem4 4s InteruptHeal
   		/if (${Macro.Return.Equal["CAST_OUTOFRANGE"]}) /varset HoTOn 60
   		/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset HoTOn ${HoTDelay}
   		/return
   	}
   }

   /next i 
/return 

Sub InteruptHeal
/if (!${Window[CastingWindow].Open}) /return
/if (${Target.Type.Equal[NPC]} || (${Target.PctHPs}>${stophealpoint} && ${Target.Type.Equal[PC]}) || (${Target.PctHPs}>${defaultstophealpoint} && ${Me.Casting.ID}!=${Spell[${SpellHoT}].ID})) /echo I would interrupt.
/if (${Group.Member[${Group.Member[${Target.Name}]}].PctHPs}>${stophealpoint}) {
	/echo Interrupting
	/call Interrupt
}
/return

| ################### Check Mana level and report it 

Sub Check_Mana 
   /if (${Math.Calc[${Me.MaxMana}*${MinMana}/100]} >= ${Me.CurrentMana} && !${LowMana}) { 
      /varset LowMana TRUE 
      /if (${Verbose}) /gsay I am LOM... 
   } else /if (${Math.Calc[${Me.MaxMana}*${BuffMana}/100]} <= ${Me.CurrentMana} && ${LowMana}) { 
      /varset LowMana FALSE  
   } 
/return 

| ################## Canni 5 

Sub Cannibalization 
/call CheckMyHPs 
/if (${Me.CurrentHPs} < 2424) { 
	/call CheckMyHPs 
} else {
	/if (${NearestSpawn[NPC].Distance}>=75) {
		/if (${Me.Buff[${SpellHoT}].ID} || (${Me.CurrentHPs}>3000 && ${Me.SpellReady[${SpellHeal}]}) ) { 
			/if (${Verbose}) /gsay *** Doing Cannibalization ! 
			/aa act Cannibalization 
			/delay 3s
   		}
	}
        /call CheckMyHPs
}
/return 

| ################## This will NOT check self HPs, Only check HoT or recast HoT 

Sub CheckMyHPs 
	/if (!${Me.Gem[${SpellHoT}]} && !${Me.Gem[${SpellHeal}]}) {
		/if (!${Me.Book[${SpellHoT}]} && !${Me.Book[${SpellHeal}]}) /echo Warning, no Healspell avail.
		/if (!${Me.Book[${SpellHoT}]}) {
			/memspell 6 ${SpellHeal} 
      			/delay 25
		} else {
			/memspell 4 ${SpellHoT} 
      			/delay 25
		}
	}
	/if (!${Me.Gem[${SpellHoT}]} && ${Me.PctHPs}<${CanniHealat}) {
	/if (${CombatStickMode}) /squelch /stick off
		/target ${Me.CleanName}
		/delay 3
		/target myself
		/delay 3
		/delay 3s ${Target.CleanName.Equal[${Me.CleanName}]}
		:Healagain
		/varcalc stophealpoint ${CanniHealat}+10
		/if (${Target.CleanName.Equal[${Me.CleanName}]}) /call cast ${SpellHeal} gem6 3s InteruptHeal
		/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Healagain
		/return
	}
   /if (${Me.CurrentMana}<${Spell[${SpellHoT}].Mana}) { 
      /echo *** Shit, I don't have mana to cast ${SpellHoT} 
   } else { 
	/if (${CombatStickMode}) /squelch /stick off
	/target ${Me.CleanName}
	/delay 3
	/target myself
	/delay 3
	/delay 3s ${Target.CleanName.Equal[${Me.CleanName}]}
	/if (!${Me.Buff[${SpellHoT}].ID} && ${Target.CleanName.Equal[${Me.CleanName}]}) {
		/varcalc stophealpoint ${CanniHealat}+10
		/call cast ${SpellHoT} gem4 3s InteruptHeal
	}
   } 
/return 

| ################## This will Check to see if I am Low on Mana 

Sub LOM 
   /if (${Me.CurrentHPs} < ${Math.Calc[${Me.MaxHPs}/2]}) /call CheckMyHPs 
	/if (${Me.PctHPs}<${CanniHealat}) /call CheckMyHPs
   /if (${Me.CurrentMana} < ${Math.Calc[${Me.MaxMana}-5]} && ${Me.SpellReady[${SpellCanni}]} && ${Me.CurrentHPs}>1500) /call cast ${SpellCanni} gem1 6s 
	/if (${Me.PctHPs}<${CanniHealat}) /call CheckMyHPs
   /if (${Me.AltAbility[Cannibalization]}>0 && ${Me.AltAbilityReady[Cannibalization]} && ${Me.CurrentMana} < ${Math.Calc[${Me.MaxMana}-1200]} && ${Me.MaxHPs} > 2424) /call Cannibalization 
/return    

| ################## Summon pet and buff with spells from SpellPetBuff array 

Sub Pet 
   /if (!${Me.Pet.ID} && ${SummonPet} && ${Spell[${SpellPet}].Mana}<=${Me.CurrentMana}) { 
      /call cast ${SpellPet} gem5 25s 
      /declare i int local 
   	/if (${BuffPet} && ${Me.Pet.ID}) {
      	/for i 1 to ${SpellPetBuff.Size} 
   	  	/if (!${Me.PetBuff[${SpellPetBuff[${i}]}]} && ${Spell[${SpellPetBuff[${i}]}].Mana}<=${Me.CurrentMana}) { 
    	  		/target id ${Me.Pet.ID}
      			/delay 1s 
      			/call cast ${SpellPetBuff[${i}]} gem5 9s
      		}
	/next i
   	}
   }
/pet taunt
/return 


| ################### Casting Avatar on all melee classes in group 

Sub Cast_Avatar 
   /declare i int local 
   /for i 1 to ${Group} 
   /if (${Group.Member[${i}].ID}) { 
      /if (${ATKBuffed${i}}==0) /if (${Group.Member[${i}].Class.Name.Equal[Beastlord]} || ${Group.Member[${i}].Class.Name.Equal[Shadow Knight]} || ${Group.Member[${i}].Class.Name.Equal[Bard]} || ${Group.Member[${i}].Class.Name.Equal[Ranger]} || ${Group.Member[${i}].Class.Name.Equal[Rogue]} || ${Group.Member[${i}].Class.Name.Equal[Paladin]} || ${Group.Member[${i}].Class.Name.Equal[Monk]} || ${Group.Member[${i}].Class.Name.Equal[Warrior]}) { 
	 /if (${CombatStickMode}) /squelch /stick off
         /target pc ${Group.Member[${i}]} 
         /delay 5
         /target pc ${Group.Member[${i}]} 
	 /if (${Me.CurrentMana}>${Spell[${SpellATK}].Mana} && ${Target.Type.Equal[PC]}) { 
            /call cast ${SpellATK} gem4 0s 
            /if (${Macro.Return.Equal["CAST_OUTOFRANGE"]}) /varset ATKBuffed${i} 200 
            /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset ATKBuffed${i} ${AvatarDelay} 
            /return 
         } 
      } 
   } 
   /next i 
   /return 

| ##################  ENRAGE ON 

Sub Event_Enrageon 
/echo Mob is ENRAG....
/varset MobonEnrage TRUE
/if (${Me.Combat}) {
	/echo No Target, resetting. Combat off.
	/keypress Ctrl+c
	/notify ActionsWindow ACP_MeleeAttackButton Leftmouseup
}
/if (${PetOn}) { 
/pet back off 
} 
/return 

| ##################  ENRAGE OFF 

Sub Event_Enrageoff 
/echo Mob is out of Enrag... 
/varset MobonEnrage FALSE
/if (${PetOn}) { 
/pet attack  
} 
/return 

| ################## Outdoors 

Sub Event_OutDoor 
   /echo This is an indoor zone. Sorry. 
   /varset OutDoors FALSE 
/return 

| ##################  Zoning 

Sub Event_Zoning 
   /echo I zoned, time to shrink 
   /if (${Verbose}) /gsay Shrinks incomming Now 
   /delay 10 
   /call cast ${SpellSHRINK} gem5 5s 
   /call cast ${SpellSHRINK} gem5 5s 

   /varset TargetArray[1] ${Target.CleanName} 
   /varset TargetArray[2] ${Target.Level} 
   /varset TargetArray[3] ${Target.Name} 
   /varset TargetArray[4] ${Target.ID} 
   /varset CombatOn TRUE 
        
   /varset MobRooted FALSE 
   /varset MobMaloed FALSE 
   /varset MobSlowed FALSE 
   /varset MobCrippled FALSE
   /varset PetOn FALSE 
   /varset MobDoTed1 FALSE 
   /varset MobDoTed2 FALSE 

/return 

| ################## I Died 

Sub Event_ImDead 
   /echo Bummer ! 
   :Zone_Loop 
   /if ( !${Me.Gem[${SpellCanni}]} ) { 
	/memspell 1 ${SpellCanni} 
	/delay 25 
	/goto :Zone_Loop
   }
   /if (${Window[SpellBookWnd].Open}) /cleanup
   /delay 5s 
   /consent group 
   /delay 5 
   /call Wait4Rez 
   /delay 20 
   /if (${Me.State.Equal[Stand]}) /sit 
   /call MemSpells 

| We do some short meditate before we start again. 

   :Meditate 
      /delay 1s 
      /if (${Me.CurrentMana} < 300) /goto :Meditate 
   /return 

| ################## This part is taken from wait4res. 

Sub Wait4Rez 
   :waitforrez 
      /if (!${Window[ConfirmationDialogBox].Open}) { 
         /delay 5s ${Window[ConfirmationDialogBox].Open} 
         /goto :waitforrez 
      } 
      /if (${Window[ConfirmationDialogBox].Open}) /notify ConfirmationDialogBox Yes_Button  leftmouseup 
      :zonein 
         /delay 5 
         /squelch /target mycorpse 
         /delay 5 
         /if (${Target.CleanName.NotEqual[${Me}'s corpse]}) /goto :zonein 
         /if (${Target.CleanName.Equal[${Me}'s corpse]}) { 
            /delay 3s 
            /call Loot_Corpse 
         } else /goto :zonein 
   /return 

| #################  Looting Corpse 

Sub Loot_Corpse 
   /declare LootTotal int local 0 
   /declare LootSlot int local 
   /squelch /target mycorpse 
   /if (${Target.Type.NotEqual[CORPSE]} || !${Target.ID}) { 
      /echo ** Can't target my corpse. 
      /return 
   }    
|   /corpse 
   /delay 1s 
   /loot 
   /delay 1s 
   /if (${Me.State.NotEqual[BIND]}) { 
      /echo ** Massive lag right now... Aborting looting. 
      /return 
   } 
   :LootLag 
      /if (${LootTotal}!=${Corpse.Items}) { 
         /varset LootTotal ${Corpse.Items} 
         /delay 5 
         /goto :LootLag 
      } 
   /for LootSlot 1 to ${LootTotal} 
   :LootItem 
      /itemnotify loot${LootSlot} rightmouseup 
      /delay 3 
      /if (${Corpse.Item[${LootSlot}].ID}) { 
         /delay 2 
         /goto :LootItem 
      } 
   /next LootSlot 
   /delay 5 
   /echo ** Done looting my corpse. 
   /notify LootWnd DoneButton leftmouseup 
   /return 

| ################# 
| ################# Tells n Hells 
| ################# 

Sub Event_Chat(string ChatType,string ChatSender,string ChatText) 

   /declare i 	int 	local
   /if (!${ChatType.Equal[GROUP]} || !${ChatType.Equal[TELL]}) /return 
   /if (!${Group.Member[${Sender}]}) /return  
   |- Authenticate if valid controller
	/declare authorized bool local FALSE
	/for i 1 to 20
		/if (${Ini[ShamBot.ini,Masters,Controller${i}].Equal[${Sender}]}) /varset authorized TRUE
	/next i
	/if (${authorized} && ${ChatText.Left[1].Equal[/]}) {
      /echo ** User ${Sender} Authenticated!
      /echo Action --> "${ChatText}"
      /if (${Me.AFK}) /delay 2s
|      	/tell ${Sender} Command received, performing: ${ChatText}
|    		/docommand ${ChatText}
|  	}

  	/if (${RaidBuff}) {
  		/declare focus					string local
		/declare stamina				string local
		/declare sense					string local
		/declare all3					string local
		| Lets Check a few things before we buff
		/if (!${Spawn[${Sender}].ID}) {
			/echo ${Sender} is out of zone Ignoring!
			/return
		}
	
		/if (${Spawn[${Sender}].GM}) {
			/echo ${Sender} is a GM! Fuck Him!
			/return
		}
	
		/if (${Spawn[${Sender}].Guild.NotEqual[${Me.Guild}]} {
			/echo Unauthorized Reqest...Ignoring!
			/return
		}
	
		/if (!${Spawn[${Sender}].LineOfSight}) {
			/echo ${Sender} is not in Line of sight...Ignoring
			/return
		}
		| Ok they're cool...let's find out what they want! And add it to a Queue
		/varset RequestedBuff ${ChatText}
		| Pick out what they want and how many things they want
		| Do they want focus?
		/if (${RequestedBuff.Find[focus]} || ${RequestedBuff.Find[wunsh]} || ${RequestedBuff.Find[wunshi]}) {
			/varset focus TRUE
		} else /varset focus FALSE
		| Do they want stamina?
		/if (${RequestedBuff.Find[sta]} || ${RequestedBuff.Find[forti]} || ${RequestedBuff.Find[fort]}) {
			/varset stamina TRUE
		} else /varset stamina FALSE
		| Do they want sense?
		/if (${RequestedBuff.Find[sense]} || ${RequestedBuff.Find[sta]}) {
		/varset sense TRUE
		} else /varset sense FALSE
		| Are they being gay and just asking for all shaman buffs?
		/if (${RequestedBuff.Find["shaman buffs"]} || ${RequestedBuffs.Find[buffs]}) {
			/varset all3 TRUE
		}
		| Lets Give it to them
		/if (${all3}) {
			/varset focus 		TRUE
			/varset stamina 	TRUE
			/varset sense 		TRUE
		}
		/if (${focus}) {
			/varset focus FALSE
			/call cast ${SpellFOCUS} gem5 6s
		}
		/if (${stamina}) {
			/varset stamina FALSE
			/call cast ${SpellSTA} gem5 6s
		}
		/if (${sense}) {
			/varset sense FALSE
			/call cast ${SpellSoS} gem5 6s
		}
	/return
}        
| ################# Heal Requests 
  
     /if (${ChatText.Equal[heal]} || ${ChatText.Equal[heal me]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellHeal} is incomming !! 
             /call cast ${SpellHeal} 
             } 
      /return 
      } 

      /if (${ChatText.Equal[hot]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellHoT} is incomming !! 
             /call cast ${SpellHoT} 
             } 
      /return 
      } 

| ################# Mob Requests      

      /if (${ChatText.Equal[slow]} || ${ChatText.Equal[add]} && ${authorized}) { 
         /assist ${ChatSender} 
         /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<=100) { 
            /call cast ${SpellDebuff} gem3 6s 
            /call cast ${SpellSlow} gem2 6s 
            /tell ${ChatSender} %T is ${SpellDeBuff} and slowed with ${SpellSlow} 
            } 
      /return 
      } 

      /if (${ChatText.Equal[root]} && ${authorized}) { 
         /assist ${ChatSender} 
         /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<=100) { 
            /call cast ${SpellRoot} gem9 5s 
            /tell ${ChatSender} %T is Rooted with ${SpellRoot} 
            } 
      /return 
      } 


      /if (${ChatText.Equal[nuke]} && ${authorized}) { 
         /assist ${ChatSender} 
         /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<=100) { 
            /call cast ${SpellNuke} gem9  
            } 
      /return 
      } 
        
      /if (${ChatText.Equal[dot]} && ${authorized}) { 
         /assist ${ChatSender} 
         /if (${Target.Type.Equal[NPC]} && ${Target.Distance}<=100) { 
            /call cast ${SpellDoT1} gem8 5s 
            } 
      /return 
      } 

      /if (${Engaged}) /return    

| ################# Buff Requests 

      /if (${ChatText.Equal[avatar]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellATK} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellATK} gem4 4s 
        }    
         /return 
      }  
    
      /if (${ChatText.Equal[PR]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellPR} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellPR} gem4 4s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[haste]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellHASTE} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellHASTE} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[focus]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellFOCUS} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellFOCUS} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[cha]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellCHA} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellCHA} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[lev]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellLEV} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellLEV} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[sow]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellSOW} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellSOW} gem5 5s 
        }    
         /return 
      }  
      /if (${ChatText.Equal[grow]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellGROW} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellGROW} gem5 5s 
        }    
         /return 
      } 
  
      /if (${ChatText.Equal[shrink]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellSHRINK} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellSHRINK} gem5 5s 
        }    
         /return 
      }  


      /if (${ChatText.Equal[see]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellSEE} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellSEE} gem5 5s 
        }    
         /return 
      } 


      /if (${ChatText.Equal[str]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellSTR} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellSTR} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[dex]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellDEX} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellDEX} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[sta]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellSTA} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellSTA} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[agi]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellAGI} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellAGI} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[regen]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellREGEN} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellREGEN} gem5 5s 
        }    
         /return 
      }  

      /if (${ChatText.Equal[pe]}) { 
	/if (${CombatStickMode}) /squelch /stick off
         /target pc ${ChatSender} 
         /if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) { 
             /tell ${ChatSender} ${SpellPE} is incomming to you ${ChatSender}!!! 
             /call cast ${SpellPE} gem5 5s 
        }    
         /return 
      } 

| ################# Follow me 

 /if (${ChatText.Equal[Follow me]} || ${ChatText.Equal[Follow]} && ${authorized}) { 
    /delay 5 
    /if (!${Spawn[${ChatSender}].ID}) { 
       /e ${ChatSender}  is not in zone for me to follow! 
       /return 
    } 
    /varset follname ${ChatSender}  
    /varset following 1 
    /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} 
    /return  
 } 

| ################# Single Rebuff 

/if (${ChatText.Equal[buff me]}) { 
   /echo Request for Single Buff 
   /declare i int local 1 
   /for i 1 to ${SpellSingleBuff.Size} 
   /if (${Spell[${SpellSingleBuff[${i}]}].Mana} > ${Me.CurrentMana}) { 
      /tell ${ChatSender} ${ChatSender} Sorry I am getting LOM        
      /echo DAMN.. LOM... Cannibalizing to rebuff 
       :Hold_Single_Rebuff 
          /Call LOM 
          /if (${Spell[${SpellSingleBuff[${i}]}].Mana} > ${Me.CurrentMana}) { 
             /goto :Hold_Single_Rebuff              
           } 
    } 
	/if (${CombatStickMode}) /squelch /stick off
   /target pc ${ChatSender} 
   /delay 3 
   /echo *** Hang on ! Buffing ${SpellSingleBuff[${i}]} 
   /tell ${ChatSender} Buffing ${SpellSingleBuff[${i}]} now... 
   /call cast ${SpellSingleBuff[${i}]} gem5 5s      
   /next i 
   /return 
} 

| ################# Single Rebuff other 

 /if (${ChatText.Equal[buff]}) { 
    /echo Request for Single Buff other 
	/if (${CombatStickMode}) /squelch /stick off
    /assist ${ChatSender} 
    /declare i int local 1 
    /for i 1 to ${SpellSingleBuff.Size} 
    /if (${Spell[${SpellSingleBuff[${i}]}].Mana} > ${Me.CurrentMana}) { 
       /tell ${ChatSender} ${ChatSender} Sorry I am getting LOM        
       /echo DAMN.. LOM... Cannibalizing to rebuff 
       :Hold_Single_Rebuff 
          /Call LOM 
          /if (${Spell[${SpellSingleBuff[${i}]}].Mana} > ${Me.CurrentMana}) { 
             /goto :Hold_Single_Rebuff              
           } 
    } 
    /delay 3 
    /echo *** Hang on ! Rebuffing ${SpellSingleBuff[${i}]} 
    /tell ${ChatSender} Buffing ${SpellSingleBuff[${i}]} now... 
    /call cast ${SpellSingleBuff[${i}]} gem5 7s      
    /next i 
    /return 
 } 

| ################# Group Rebuff other group 

 /if (${ChatText.Equal[buff them]}) { 
	/if (${CombatStickMode}) /squelch /stick off
    /assist ${ChatSender} 
    /declare i int local 1 
    /for i 1 to ${SpellGrpBuff.Size}        
    /if (${Spell[${SpellGrpBuff[${i}]}].Mana} > ${Me.CurrentMana}) { 
       /tell ${ChatSender} ${ChatSender}, Sorry I am getting LOM                  
       /echo DAMN.. LOM... Cannibalizing to rebuff 
       :Hold_Group_Rebuff 
          /Call LOM 
          /if (${Spell[${SpellGrpBuff[${i}]}].Mana} > ${Me.CurrentMana}) { 
          /goto :Hold_Group_Rebuff              
          } 
    } 
    /delay 3 
    /echo *** Hang on ! Rebuffing ${SpellGrpBuff[${i}]} 
    /tell ${ChatSender} Buffing ${SpellGrpBuff[${i}]} now... 
    /call cast ${SpellGrpBuff[${i}]} gem5 7s      
    /next i 
    /return 
 } 


| ################# Other Pet Buffing 

 /if (${ChatText.Equal[buff pet]}) { 
    /echo Request for Pet Buffs 
	/if (${CombatStickMode}) /squelch /stick off
    /target id ${Spawn[pc ${ChatSender}].Pet.ID} 
    /delay 3 
    /tell ${ChatSender} Targetting your pet, %T for buffs... 
    /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 
       /echo DAMN.. LOM... Cannibalizing to rebuff 
       :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}]} gem5 5s      
    /next i 
    /return 
 } 

| ################### Go Home 

| /if (${ChatText.Equal[gate now]} && ${ChatType.Equal[TELL]}) { 
|    /call cast ${SpellGATE} gem9  
|    /return 
|    } 

 /if (${ChatType.Equal[TELL]}) { 
    /tell ${M_Assist} [${ChatSender}]:${ChatText} 
|    /vtell ${ChatController} 001 
    /return 
    } 


/return 

| ################## Echo Changes

Sub Event_MissSpellComp(string, MissComp)
/if (${MissComp.Arg[1].Equal[Emerald]}) {
	/varset DoATK FALSE
	/echo Disableing ${SpellATK}, missing components. (${MissComp})
}
/return

Sub Event_Paused
	/if (${IsPaused}) {
		/varset IsPaused FALSE
		/echo ShamBot is now RESUMING!
	} else {
		/varset IsPaused TRUE
		/echo ShamBot is now PAUSED!
	}
/return

Sub Event_AstChange(string Line) 
	/if (${Line.Arg[3].Length}) /varset M_Assist ${Line.Arg[3]} 
	/if (${Line.Arg[4]} > 0) /varset CombatAt ${Line.Arg[4]}  
	/echo ** Assisting: ${M_Assist} @${CombatAt}% target health 
	/ini "ShamBot.ini" "General" "M_Assist" "${M_Assist}"
	/ini "ShamBot.ini" "Combat" "CombatAt" "${CombatAt}"
/return

Sub Event_Rootchg(string Line)
	/if (${Line.Arg[3].Equal[off]}) {
		/varset DoRoot FALSE
		/echo No longer Rooting!
		/return
	} else {
		/varset DoRoot TRUE
		/if (${Line.Arg[3].Length}) {
			/varset Rootat ${Line.Arg[3]}
		}		
		/if (${Line.Arg[4].Length}) {
			/varset RootMana ${Line.Arg[4]}
		}
		/echo Now Rooting @ ${Rootat}% NPC Health!
		/echo Minimum Mana to root is ${RootMana}%.
	}
	/ini "ShamBot.ini" "Combat" "Rootat" ${Rootat}
	/ini "ShamBot.ini" "Combat" "RootMana" ${RootMana}
	/ini "ShamBot.ini" "ToDo" "DoRoot" ${DoRoot}
/return
	
Sub Event_Dotchg(string Line)
	/if (${Line.Arg[3].Equal[off]}) {
		/varset DoDoT FALSE
		/echo No longer DoT'ing!
		/return
	} else {
		/varset DoDoT TRUE
		/if (${Line.Arg[3].Length}) {
			/varset CastDoTat ${Line.Arg[3]}
		}		
		/if (${Line.Arg[4].Length}) {
			/varset DotMana ${Line.Arg[4]}
		}
		/echo Now DoT'ing @ ${CastDoTat}% NPC Health!
		/echo Minimum Mana to cast DoT is ${DotMana}%.
	}
	/ini "ShamBot.ini" "Combat" "CastDotat" ${CastDoTat}
	/ini "ShamBot.ini" "Combat" "DotMana" ${DotMana}
	/ini "ShamBot.ini" "ToDo" "DoDoT" ${DoDoT}
/return

Sub Event_Nukechg(string Line)
	/if (${Line.Arg[3].Equal[off]}) {
		/varset DoNuke FALSE
		/echo No longer Nukeing!
		/return
	} else {
		/varset DoNuke TRUE
		/if (${Line.Arg[3].Length}) {
			/varset NukeAt ${Line.Arg[3]}
		}		
		/if (${Line.Arg[4].Length}) {
			/varset NukeMana ${Line.Arg[4]}
		}
		/echo Now Nukeing @ ${Rootat}% NPC Health!
		/echo Minimum Mana to Nuke is ${NukeMana}%.
	}
	/ini "ShamBot.ini" "Combat" "Rootat" ${NukeAt}
	/ini "ShamBot.ini" "Combat" "RootMana" ${NukeMana}
	/ini "ShamBot.ini" "ToDo" "DoRoot" ${DoNuke}
/return
	

Sub Event_Malochg
	/if (${DoMalo}) {
		/varset DoMalo FALSE
		/echo No longer casting Malo!
	} else {
		/varset DoMalo TRUE
		/echo Now casting Malo!
	}
	/ini "Shambot.ini" "ToDo" "DoMalo" ${DoMalo}
/return

Sub Event_Slowchg(string Line)
	/if (${DoSlow}) {
		/varset DoSlow FALSE
		/echo Switched Slow off!
	} else {
		/varset DoSlow TRUE
		/echo Switched Slow on!
	}
	/if (${Line.Arg[3].Equal[fast]} && !${FastSlow}) {
			/varset FastSlow TRUE
			/echo Fast Slow is now ON! (Only attempting to slow ONCE!)
		} else {
			/varset FastSlow FALSE
			/echo Fast Slow is now OFF!
	}
	/ini "ShamBot.ini" "ToDo" "DoSlow" ${DoSlow}
	/ini "ShamBot.ini" "ToDo" "FastSlow" ${FastSlow}
/return

Sub Event_Cripplechg(string Line)
	/if (${DoCripple}) {
		/varset DoCripple FALSE
		/echo No longer casting Cripple!
	} else {
		/varset DoCripple TRUE
		/echo Now casting Cripple!
		/if (${Line.Arg[3].Equal[fast]} && !${FastCripple}) {
			/varset FastSlow TRUE
			/echo Fast Cripple is now ON! (Only attempting to Cripple ONCE!)
		} else {
			/varset FastCripple FALSE
			/echo Fast Cripple is now OFF!
		}
	}
	/ini "ShamBot.ini" "ToDo" "DoCripple" ${DoCripple}
	/ini "ShamBot.ini" "ToDo" "FastCripple" ${FastCripple}
/return

Sub Event_Healchg(string Line)
	/if (${Line.Arg[3].Equal[off]}) {
		/varset DoHeal FALSE
		/echo Healing is now OFF!
	} else {
		/varset DoHeal TRUE
		/echo Now HEALING!
		/if (${Line.Arg[3].Equal[caster]}) {
			/varset CasterHeals ${Line.Arg[4]}
			/echo Now Healing Casters at ${CasterHeals}% HP!
		}
		/if (${Line.Arg[3].Equal[melee]}) {
			/varset MeleeHeals ${Line.Arg[4]}
			/echo Now Healing Melee at ${MeleeHeals}% HP!
		}
		/if (${Line.Arg[3].Equal[tank]}) {
			/varset TankHeal ${Line.Arg[4]}
			/echo Now Healing the Tank at ${TankHeal}% HP!
		}
	}
	/ini "ShamBot.ini" "ToDo" "DoHeal" ${DoHeal}
	/ini "ShamBot.ini" "HealsPri" "CasterHeals" ${CasterHeals}
	/ini "ShamBot.ini" "HealsPri" "MeleeHeals" ${MeleeHeals}
	/ini "ShamBot.ini" "HealsPri" "TankHeal" ${TankHeal}
/return

Sub Event_Verbchg
	/if (${Verbose}) {
		/varset Verbose FALSE
		/echo Verbose is now OFF!
	} else {
		/varset Verbose TRUE
		/echo Verbose is now ON!
	}
	/ini "ShamBot.ini" "ToDo" "Verbose" ${Verbose}
/return

Sub Event_Atkchg
	/if (${DoATK}) {
		/varset DoATK FALSE
		/echo No longer casting FA on melee in group!
	} else {
		/varset DoATK TRUE
		/echo Now casting FA on melee in group!
	}
	/ini "ShamBot.ini" "ToDo" "DoATK" ${DoATK}
/return

Sub Event_SOWchg
	/if (${DoSOW}) {
		/varset DoSOW FALSE
		/echo No longer casting SOW!
	} else {
		/varset DoSOW TRUE
		/echo Now casting SOW!
	}
	/ini "ShamBot.ini" "ToDo" "DoATK" ${DoATK}
/return

Sub Event_Mountchg
	/if (${UseMount}) {
		/varset UseMount FALSE
		/echo No longer using a mount!
	} else {
		/varset UseMount TRUE
		/echo Now using a mount!
	}
	/ini "ShamBot.ini" "General" "UseMount" ${UseMount}
/return

Sub Event_DoMeleeChg
	/if (${DoMelee}) {
		/varset DoMelee FALSE
		/echo No longer doing meleecombat!
	} else {
		/varset DoMelee TRUE
		/varset UseMount FALSE
		/echo Doing Meleecombat also now, but disableing the use of a Mount!
	}
	/ini "ShamBot.ini" "General" "DoMelee" ${DoMelee}
	/ini "ShamBot.ini" "General" "UseMount" ${UseMount}
/return

Sub Event_sitatchg(string Line)
	/if (${Line.Arg[3].Length}) {
		/varset SitAtManaBelow ${Line.Arg[3]}
	}
	/ini "ShamBot.ini" "Combat" "SitAtManaBelow" ${SitAtManaBelow}
/return

Sub Event_AutoSit
	/if ${AutoSit} {
		/varset AutoSit FALSE
		/echo No longer Sitting!
	} else {
		/varset AutoSit TRUE
		/echo Now AUTOSITTING!
	}
	/ini "ShamBot.ini" "Combat" "AutoSit" ${AutoSit}
/return
	
Sub Event_DoBuffsChg
	/if (${DoBuffs}) {
		/varset DoBuffs FALSE
		/echo No longer Buffing the group!
	} else {
		/varset DoBuffs TRUE
		/echo Now Buffing the group!
	}
	/ini "ShamBot.ini" "ToDo" "DoBuffs" ${DoBuffs}
/return

Sub Event_Anchorchg
	/if (${Anchor}) {
		/varset Anchor FALSE
		/echo No longer moveing to Anchor!
	} else {
		/varset Anchor TRUE
		/echo Moveing to Anchor when suitable!
	}
	/ini "ShamBot.ini" "General" "Anchor" ${Anchor}
/return

Sub Event_PetChg(string Line)
	/if (${Line.Arg[3].Equal[off]}) {
		/varset SummonPet FALSE
		/echo No lonnger using a PET!
	} else {
		/if (${Line.Arg[3].Equal[buff]}) {
			/varset SummonPet TRUE
			/varset BuffPet TRUE
			/echo Now using a PET and BUFFING it!
		}
		/if (${Line.Arg[3].Equal[nobuff]}) {
			/varset SummonPet TRUE
			/varset BuffPet FALSE
			/echo Now using a PET but NOT BUFFING it!
		}
		/varset SummonPet TRUE
	}
	/ini "ShamBot.ini" "ToDo" "SummonPet" ${SummonPet}
	/ini "ShamBot.ini" "ToDo" "BuffPet" ${BuffPet}
/return

Sub Event_AddMaster(string Line)
  /declare index int local
  /if (${Line.Arg[3].Length}) {
    /for index 1 to 20
      /if (${Ini[ShamBot.ini,Masters,Controller${index}].Equal[Nobody]}) {
        /ini "ShamBot.ini" "Masters" "Controller${index}" "${Line.Arg[3]}"
        /echo ** ${Line.Arg[3]} added as a controller...
        /goto :FallOut
      }
    /next index
    /echo ** Master controller slots all filled! Get rid of some!
  } else {
    /echo ** Huh?
  }
  :FallOut
/return  

Sub Event_Shrink
	/if (${CombatStickMode}) /squelch /stick off
	/target pc ${M_Assist}
	/if (${Target.Type.Equal[PC]} && ${Target.Distance}<=100) {
		/call cast ${SpellSHRINK} gem5 5s
		/call cast ${SpellSHRINK} gem5 5s
	}
/return

Sub Event_HoTchg(string Line)
	/if (${Line.Arg[3].Equal[off]}) {
		/varset HoTTank FALSE
		/echo No longer using HOT to help heal Tank!
	} else {
		/varset HoTTank TRUE
		/if (${Line.Arg[3].Length}) {
			/varset HoTAt ${Line.Arg[3]}
			/echo HOT is now ON!
			/echo Now Casting HOT at ${HoTAt}% Tank HP!
			/return
		}
		/echo Now Casting HOT on the Tank at ${HoTAt}% HP!
	}
	/ini "ShamBot.ini" "HealsPri" "HoTAt" ${HoTAt}
	/ini "ShamBot.ini" "ToDo" "HoTTank" ${HoTTank}
/return
		
Sub Event_RaidBuff
	/if (${RaidBuff} {
		/varset RaidBuff FALSE
		/echo Raid Buffing Mode is now OFF!
	} else {
		/varset RaidBuff TRUE
		/echo Raid Buffing Mode is now ON!
	}
/return

Sub Event_WornOff(line, TempSpellname)
/if (${TempSpellname.Equal[${SpellDoT1}]}) /varset MobDoTed1 FALSE
/if (${TempSpellname.Equal[${SpellDoT2}]}) /varset MobDoTed2 FALSE
/if (${TempSpellname.Equal[${SpellSlow}]}) /varset MobSlowed FALSE
/if (${TempSpellname.Equal[${SpellCripple}]}) /varset MobCrippled FALSE
/return

Sub Event_Toofaraway
/varcalc ToofarawayCount ${ToofarawayCount}+1
/if (${ToofarawayCount}>4) {
	/varset ToofarawayCount 0
	/varset CombatStickMode TRUE
	/if (${Target.ID} && ${Target.Type.Equal[NPC]}) /squelch /stick 5 !front
	/delay 2s ${Target.Distance}<8
}
/return

Sub Event_CantSeeTarget
/varcalc CantSeeTargetCount ${CantSeeTargetCount}+1
/if (${CantSeeTargetCount}>3) {
	/varset CantSeeTargetCount 0
	/if (${Target.ID} && ${Target.Type.Equal[NPC]}) /face nolook
}
/return

Sub Event_AttackingSelf
/varcalc AttackingSelfCount ${AttackingSelfCount}+1
/if (${AttackingSelfCount}>4) {
	/varset AttackingSelfCount 0
	/squelch /target clear
	/call GetTarget 
}
/return

Sub Event_EXP
/call EndCombat
/call CheckAnchor
/return

Sub Event_Help
/echo Accepted Commands: pause, astchange, root, dot, nuke, malo, slow, cripple, healchg [off/CasterHeals #/MeleeHeals #/TankHeal], verbchg, atk, sow, mount, sitat ##, pet, autosit, dobuffs, chgpet, addmaster, shrink, hotchg, domelee, Anchor, raidbuffchg, help.
/return
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

I think it's the same problem as with the Mitght casting.. Turn buffs off for now, I think Crystane is working on it.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Is there anyway to keep pet hasted with a single buff?

I found this piece of code but not sure how to implement it...

Rich (BB code):
/if (${Me.Pet.ID} && !${Me.PetBuff["Burnout IV"]} && ${Me.Pet.Distance}<100) { 
          /target ${Me.Pet} 
          /call Cast "Burnout IV" gem8 
        }
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

Mijeno said:
Is there anyway to keep pet hasted with a single buff?

I found this piece of code but not sure how to implement it...

Rich (BB code):
/if (${Me.Pet.ID} && !${Me.PetBuff["Burnout IV"]} && ${Me.Pet.Distance}<100) { 
          /target ${Me.Pet} 
          /call Cast "Burnout IV" gem8 
        }


Within Crystane's Macro or within some other macro or stand alone?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [11-15-06]

In crystanes excellent shammy macro :)
 
Fix for the Buffsection

Heya all,

I finally found some time to play EQ again, and voila
I found the crappy code in the buffsection of the Shmbot macro, which caused single buffs to be cast over and over again.

All Tankbuffs will now be cast once every new start of the macro and again when the timer has run out.

The problem was the shm was casting the single buffs when 3 things where in the right place. First when the shm himself had no buff on himself which would block the buff in question, even though the buff should go to the tank anyway. Second when the buff in question was not present on the Shm's buffwindow and Third when the Bufftimer for the buff had run out.

What can I say, My shm is set to use Grpbuffs anyway, so he would hit the Tank in any way and rebuff him when needed. Also the grpbuffs on my Shm himself prevented countless recasts of singlebuffs on the tank.
And last I had a mistake in the code for setting the timers right.

The fix was pretty easy, the timers now work as intended and regardless of what buffs the shm himself has.

Keep one thing in mind, the tankbuffs will all be cast now every time the macro is started since that resets the timers.

Long story short, Happy new year, it works now and Enjoy... Crystane.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

Quick question ... in the healer.mac you use AA's and clickies as far as I can tell and since I am poor don't have clickies yet. Do the mac's ignore this section if you do not have the AA or the clickie..... have been running an older version of your mac and has keep me alive often ... another question do you have the ability to use instamem plugin to do spell mem's would make it extrememly fast on spell changes as long as you leave DA/DB alone all the time so it stays up......


OK just tried running macro and it says it loaded all the spells but gems did not change I had to modify for ones I have but running straight download besides that.. default or custom UI

It does know if a spell is missing (if all spell gems are empty is says its loading all of them .. if you load a couple it does not try to load them again )

All the commands seem to work from tank..... just spell memming that seems to be problem

With all the spell gems loaded with the right spell (manually) it only casts CH
 
Last edited:
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

Heya all,

I updated Shmbot again,
a pet will now propperly buffed and rebuffed, if ya use the feature. Also your toon will keep himself now supplied with food and drink all time. (If ya have the spells for it of course.)

Enjoy Crystane.

Rawwar, I will have to look into that to try and reproduce your problems, I also didnt deal much with the clickies yet.
The AAs will be ignored and other spells be cast when ya dont have the AAs.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

Crystane

I have a question for you. Is it possible that the patch that came down two days ago could cause problems for your afnuke macro. The reason I ask , is because I have been using Afnuke and it was working great until the patch. After the patch, when I run the macro, and I type /Afhelp I get a "could not parse error", in addition the macro is not recongnizing commands to set MA , SA , nukepause and others. However, the macro will still cast nukes. Since the patch , the in game help and command functionaility seem to be disabled. Anybody else getting this?

Here are the errors that I am receiving.

After the macro is started:
I type: /afhelp to bring up in game commands

Results:
Line1: DoCommand - Couldn't parse afhelp
Line2: Afnuke.mac @177(main):/delay 0
Line3: Afnuke2.inc @277(buffcheck):next m
Line4: Afnuke.mac @200(main):/call buffcheck

Done
 
Last edited by a moderator:
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

Wondering if you could help me with the shmbot
i load it up and then go in anc change my INI. when i load it up agian i get
Unparsable in Calculation: 'F'
shmbot2.inc@54 (MemSpells): /if ( !${Me.Gem[${SpellNuke}]} && !${DoHeal} && ${DoNuke} ) {
shmbot.mac@372 (Main): /call MemSpells
The current macro has ended.
Failed to parse /if condition '( !9 && !TRUE && False )', non-numeric encountered

any idea what that is?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

Post your .ini. Also, use code tags.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

problem is that variable set to "False"

The error code indicates the string in question starts with an "F".

Case is variables TRUE and FALSE are case sensitive.

if ya set them to False the macro thinks its a string (non-numeric)

if ya set it to FALSE the macro thinks of its an boolean value

That should fix it.
Enjoy Crystane...
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-08-07]

temp,

yes the last patch was a very bad one. But I think the problem is Macroquest. Its not reading out certain code properly anymore, which is used in macros.

I found all sort of problems these days, when running my macroes. And its not the code in the macroes. For some reason macroquest itself does wrong interpretation of variables or skips em completely in /if cases.

I could fix some of the problems I found via finding other ways and other TLO's to check values which Macroquest still does read out propperly. But couldnt find all yet. Its too much bad code in the current Macroquest itself.

Like usually all declared variables without a value used to be read out as NULL for macroquest and where eighter interpreted as 0 or FALSE depending on the type of variable defined.
Now if a macro never reached a point where it would give the variable a value, but reached a point where the present value of the variable is requested, the macro breaks nowadays because it gets no readout value for the variable. Now I have to rework all macroes and give those variables a first initial value to make em work again.

And last I found code which I couldnt get to work.
My Favorite was an
Rich (BB code):
/if (!${variablereadout}) /docommand
where the variablereadout was eighter TRUE or FALSE,
I wrote a manual check into my macro with
Rich (BB code):
/echo ${variablereadout}
to see what the variable would be each time passing before the /if case.
And here it comes----> eighter way wheter the variable was TRUE or FALSE the /docommand was being executed.

That was a point where I thought about stopping to repair my macroes, because its impossible with such randomly filled in bad code.

However I will look into the problem with the chatevents not working propperly in Afnuke anymore. Nevertheless
I had to fix other stuff in Afnuke to make it work for certain Rk. II and above spells. So am releasing a working version. Least its working for me again now.
Keep posting errors you folks discover, if ya post the error code propperly with the line numbers and so on I can very easy track em down and fix.

Enjoy Crystane....
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

Is there a way to have the afnuke macro not search for the concussion spells? I am working on leveling a wizzy and do not yet have any concussion spells. I don't need them at this time since im using my main to plvl and he wont have any problem holding the aggro. I have tried to put a | in front of any lines I see that say concussion but that isnt working. Thanks for any help.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

I have been using AFnuke for a while on one PC np. I just tried to use this on my other pc and for some reason it turns attack on. Anyone ever have this happen. I look at both ini's and they are the same as far as I can tell. So while attack is on mana does not regen as fast and I run oom way too soon.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

Jinx said:
I have been using AFnuke for a while on one PC np. I just tried to use this on my other pc and for some reason it turns attack on. Anyone ever have this happen. I look at both ini's and they are the same as far as I can tell. So while attack is on mana does not regen as fast and I run oom way too soon.

Try typing this in game.

/assist off

Anthrax
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

That worked thx. I know I did that in the past I guess I just need to do it each time I run it or at the least each time attack turns on. Thx for the help that was really annoying.
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

Well I still have the slow and interrupt issues on my shaman :( any chance you could look at that again crystane?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

Shmbot constantly reslows same mob, constantly spams MT with HoT and ducks it. Whats up?
 
Re: Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01-29-07]

Happen to be an older version of this with not such high lev spell set required for meming,,, for healer.mac i dont have all the sacred spells ect on my cleric,, like a lev 70 spell set would be great!
 
Crystane's working macro's reworked. (Pally,Clr,Wiz,Shm) [01Jul07]

Users who are viewing this thread

Back
Top
Cart