Page 3 of 6

Posted: Wed Feb 16, 2005 2:51 pm
by Arune
Gotcha.

Posted: Wed Mar 16, 2005 4:48 am
by Effico
Excellent Macro Ranma.

I`ve been using it in all grouping situations from easy OoW groups to groups in Riftseekers. It`s the best shaman macro on these boards.

Also been using it in DoN also and it`s excellent.

Well done sir.

Eff

Posted: Mon Mar 21, 2005 6:22 am
by SiliconeClone
I have noticed one or two bugs in the routine. The BOT seems to have a stacking problem with commands, if he recieves commands from more then one source close together for a heal and a slow... he sometimes mixes the two and tries to slow the person asking for a heal and heal the mob needing to be slowed.

Also sometimes he works a little to fast and though this ins't a major problem when in verbose he Might say something to the effect of. "Healing Target" instead of the name of the person even though he has healed them correctly.

And finally a question. Is there a way to make healing a higher priority on his list. When I have DoT's on he will ignore heal request til he has finished his DoT routine. I would like to know if there is a way to have him pause, parse the heal request then return to DoT's? I know the macro isn't really designed to be a main healer in a group, but I must say I do enjoy it alot. Even with the minor clitches he was slower and main healer in an Earth group yesterday as I sat and watched and made changes here and there to him.

Overall Great Macro Thanks Alot For It.

Posted: Mon Mar 21, 2005 7:33 am
by dedpoet
Also sometimes he works a little to fast and though this ins't a major problem when in verbose he Might say something to the effect of. "Healing Target" instead of the name of the person even though he has healed them correctly.
This can be almost entirely fixed by adding a "/target clear" and a "/delay 3" before each /target line.

Code: Select all

/squelch /target clear
/delay 3
/target PC ${Group[${g}]}
Note that this is now ${Group.Member[${g}]} if you're keeping up with the source.

The squelch is optional, I just don't like the window spam. Chances are you won't notice the 0.3 second pauses, but it's enough time to make sure the right player is targeted.
Is there a way to make healing a higher priority on his list.
Yep, you just need to add a few calls to Check_grpHPs here and there, so the bot checks more often. I added them in the buff routines after it checks each buff, as that is when I found I had the most problems - "why is he casting spirit of perseverance when there is an unslowed mob in camp at 80 percent?"

Something like this:

Code: Select all

Sub GrpBuffs
   /declare i int local 1
   /for i 1 to ${SpellGrpBuff.Size}
      /doevents
      /if (${Spell[${SpellGrpBuff[${i}]}].Mana} > ${Me.CurrentMana}) /return
      /if ( !${Me.Buff[${SpellGrpBuff[${i}]}].ID} ) {
         /target pc ${M_Assist}
         /delay 3
         /echo *** Hang on ! Rebuffing ${SpellGrpBuff[${i}]}
         /call cast ${SpellGrpBuff[${i}]} gem5 5s
         [color=#FF0000]/call Check_grpHPs[/color]
      }
   /next i
/return
That will make him check for heals while buffing. My own version also puts a "/call GetTarget" there to check for mobs, but be aware that makes him continuously switch targets very fast. Don't do that if you worry about that sort of thing. You can also add this around in other places, like the pet buff routine, the avatar routine, or anywhere else you find the bot doing something when you wish he was healing.

Posted: Mon Mar 21, 2005 8:23 am
by SiliconeClone
Wow thank you for a very fast response and for all the information :) . Lots of useful tips that should sort out most of the issues I was having.

EDIT: I have implemented many of the changes and now heals are indeed a higher priority. I have also been able to use the tips to implement a few other different checks here and there. Thanks alot for the help.

Posted: Mon Mar 28, 2005 5:59 am
by Kaluden
I love this script - an awesome job writing and keeping the tricks up to date...I do have a few questions though - I'll admit I don't have the most indepth skills with the coding, but I do make an effort.

1) Does anyone seem to have an issue where the avatar routine won't kick in for the group? I've yet to figure out why. I can call for it and/or have anyone in the group call for the buff, but it won't autocast on the group members, or even the main assist.

2) Self healing - my situation I team my shaman with a bard, so usually after malo'n and slowing, the shaman will have aggro until my bard can snag it back. Unfortunately the shaman won't seem to heal himself - sometimes when he gets very very low he'll HoT himself, but that's about the extent of it - he won't quick heal himself. Is there a way to have him tnargg as he gets low, or implement a trigger command such as "healself" so he will know to self heal? A trigger like that would be great.

I went with the above trick and implemented the /delay for the HOT and Heal calls, worked, great - thank you for that tip!

If these questions have already been asked and I missed the fixes, I apologize in advance - I searched through this and the original shambot threads to no avail.

Posted: Thu Mar 31, 2005 1:26 pm
by Kaluden
I figured out how to put in the self healing commands, though he still refuses to heal himself most of the time if he's low. The only thing I haven't been able to figure out is why the FA rotation won't go into play - he will avatar his own pet, and stop there. Mighty odd..

Posted: Fri Apr 01, 2005 8:03 am
by dedpoet
See my post above about Check_grpHPs. You probably just need to call the self heal check more often. By default this script only checks self hp's in the main loop, but you'll often find that it's busy doing something else (inside the combat loop or buff loop or whathaveyou) and just doesn't check. Add some calls to your self hp check in various places in the script. I check everyone's health after each buff and several other places in the combat loop. Sure, it's not exactly the most efficient thing, but IMO keeping the group alive is more important than making sure everyone gets spirit of might the exact second it wears off.

As for the avatar thing, first make sure that you have avatar memmed somewhere. Look how it is called:

Code: Select all

|- Buff Avatar
   /if (${Me.SpellReady[${SpellATK}]}) /call Cast_Avatar
That means that the spell has to be memmed and ready for it to even check your group. You could take the /if out of there, but I think it's there for good reason, personally.

Assuming you have that taken care of, I'd throw in a few echo commands to see where it's failing. It will be spammy, but that's how you figure it out:

Code: Select all

Sub Cast_Avatar
   [color=red]/echo I'm in the Avatar sub[/color]
   /declare i int local 0
   /for i 0 to ${Group}
   /if (${Group[${i}].ID}) {
      /if (${ATKBuffed${i}}==0) /if (${Group[${i}].Class.Name.Equal[Beastlord]} || ${Group[${i}].Class.Name.Equal[Shadow Knight]} || ${Group[${i}].Class.Name.Equal[Bard]} || ${Group[${i}].Class.Name.Equal[Ranger]} || ${Group[${i}].Class.Name.Equal[Rogue]} || ${Group[${i}].Class.Name.Equal[Paladin]} || ${Group[${i}].Class.Name.Equal[Monk]} || ${Group[${i}].Class.Name.Equal[Warrior]}) {
         [color=red]/echo Group member ${i} is on the avatar list[/color]
         /target pc ${Group[${i}]}
         /if (${Me.CurrentMana}>${Spell[${SpellATK}].Mana}) {
            /tell ${Group[${i}]} ${SpellATK} is incomming to you ${Group[${i}]} , Stay in Range !!!
            /call cast ${SpellATK} gem4 4s
            /if (${Macro.Return.Equal["CAST_OUTOFRANGE"]}) /varset ATKBuffed${i} 200
            /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset ATKBuffed${i} ${AvatarDelay}
            /return
         }
      }
   }
   /next i
   /return
Give that a shot. It should spam your MQ2 chat window as it enters the sub and checks the group members. Also, if you are using a recent zip, have you made all of the Group[-> Group.Member[ changes? Also note that any "for" loop that loops through the group list should also be /for i 0 to ${Group.Members} now. That could also be your problem.

Posted: Tue Apr 05, 2005 3:31 pm
by darrenism
Excellent macro.. it'd be nice if sow had an indoor outdoor check and would cast either bih'li or pack shrew

Great work!

Posted: Tue Apr 12, 2005 5:06 am
by DigitalMocking
I ran shambot tonight for a while, and it worked pretty well overall.

Only noticed two things, and haven't had time to look into them yet. The shaman will malo/slow, then start to cann if there's nothing else to cast, yet it basicly sits, canns, sits, canns etc.

Problem with that is it tends to pull agro until the MA is firmly locked on, kind of annoying.

The other issue was the bot didn't self buff. I've got to check the selfbuff routine tomorrow, but if anyone else has seen something, I'd love to hear it.

Posted: Tue Apr 12, 2005 12:37 pm
by gimp
to digitalmocking:

here's a self buff script, just edit the spell names and item names to suit you:

Code: Select all

| selfbuff.mac by gimp
|

#include spell_routines.inc

sub RefreshBuff(ToCast, duration)

	/if ( (!${Me.Buff[${ToCast}].ID}) || (${Me.Buff[${ToCast}].Duration} < ${duration}) ) {

		/if (!${Me.Book[${ToCast}]}) {
			/echo # You miss the spell ${ToCast}!
			/return
		}

		/call Cast "${ToCast}" gem1
	}
/return

Sub Main

	/echo Self-buff script started

	/target ${Me.Name}

	/declare oldSpell1 string local
	/declare oldEquipment string local

	/varset oldSpell1 ${Me.Gem[1]}

	|is buff gonna fade in <1 hour (600 ticks) -refresh
	/if (${String[${Me.Class}].Equal["Druid"]}) {

		/call RefreshBuff "Mask of the Wild" 400
		/call RefreshBuff "Nettlecoat" 400
		/if (!${Me.Buff["Blessing of Steeloak"].ID}) {
			/call RefreshBuff "Steeloak Skin" 400
		}

		|Add your clickies here
		/if (${Raid.Members} > 0) {
			/if (${Me.Height} > 3.00) {
				/call Cast "Bracelet of the Shadow Hive" item
			}
		} else {
			/call Cast "Velium Coldain Insignia Ring" item
			/call Cast "Bangle of Disease Warding" item
			/call Cast "Kerasha's Sylvan Leggings" item
			|/call Cast "Shrunken Goblin Skull Earring" item
			|/call Cast "Bracer of the Hidden" item
			|/call Cast "Wanderer's Sylvan Tunic" item
		}
	}
	
	/if (${String[${Me.Class}].Equal["Cleric"]}) {
		/call RefreshBuff "Ward of Gallantry" 300
		/call RefreshBuff "Symbol of Kazad" 300
		/call RefreshBuff "Panoply of Vie" 150
		/call RefreshBuff "Blessing of Reverence" 150
		
		/call Cast "Journeyman's Boots" item
		/call Cast "Bracer of the Hidden" item
	}

	/if (${String[${Me.Class}].Equal["Monk"]}) {
	
		/call Cast "Velium Coldain Insignia Ring" item
		/call Cast "Fabled Journeyman's Boots" item
		/call Cast "Shrunken Goblin Skull Earring" item
		|/call Cast "Mask of War" item
		|/call Cast "Eyepatch of Plunder" item
	}


	/if (${String["${Me.Gem[1]}"].NotEqual["${oldSpell1}"]}) {
		/delay 2s
		/echo # Restoring old spell gem
		/memspell 1 "${oldSpell1}"
	}

/return

Posted: Tue Apr 12, 2005 3:58 pm
by DigitalMocking
^^ Thanks for the code Gimp, I was just about to post something just like that, I added a self buff array of spells as well as adding some new flags for HaveMount, SelfBuff, DoShrink and a few other things.

Your code looks a bit cleaner than mine :D

Posted: Fri Apr 22, 2005 12:34 pm
by tehman
Hey was wondering, if its only me having problems with this mac , I keep getting an error when autohealing is enable, something about "no such group member ID" and "no such group member hppct". ty in advance for any input

Posted: Fri Apr 22, 2005 1:16 pm
by dedpoet
tehman, you are about to get flamed to hell and back. There are at least 10 posts here in the last week asking this exact same question. I'll answer it because not doing so just makes more posts with links to more posts with links to more posts with links to the answer, but do yourself a favor and search next time.

You need to replace all occurances of ${Group[ in your every macro that you have with ${Group.Member[

Now, go run and hide before it gets ugly.

Posted: Fri Apr 22, 2005 1:22 pm
by tehman
hehe ty man for not going on flame run, yeah should have read post, my bad, and ty for the quick repond man :D