BardSkill.mac - trains instruments and various other skills

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

User avatar
blueninja
a grimling bloodguard
a grimling bloodguard
Posts: 541
Joined: Thu Aug 28, 2003 7:03 am
Location: Göteborg, Sweden

BardSkill.mac - trains instruments and various other skills

Post by blueninja » Tue Jan 18, 2005 8:55 am

Trains instrument skills, sense traps, disarm traps, forage, hide, sneak and tracking.

Change the songs and instruments to match your setup.

Remember that for most of these skills (actually all but the instrument skills I think) you need to train one point at the guild master to be able to raise them further.

Requires Rusty~'s spell_routines.inc for instrument swapping.

EDIT: Figured out the cap for sense traps, it's level*3.

Code: Select all

| BardSkill.mac - blueninja
|
| Trains bard instrument skills and various other skills
|
| To use edit the instruments and songs below to match your setup
| Memorize the songs you want to train, to skip one of the instrument skills
| start the macro without that song memorized.
|
| By default it uses Denon`s disruptive discord to train brass instruments, this is an AoE song
| that will agro npc's close to you. Run it in a non-agro zone like pok or the nexus.
|


#include spell_routines.inc
#event Skillup "You have become better at #1#! (#2#)"
Sub Event_Skillup(string Line,string SkillN, string SkillL)
	/echo Skill ${SkillN}: ${SkillL}
/return

Sub Main

|------------ Edit stuff here to configure the macro -----------------------

| Define what skills to be trained 1=train, 0=don't train
	/declare TrainInstrument bool local 1
	/declare TrainForage bool local 1
	/declare TrainSneak bool local 1
	/declare TrainHide bool local 1
	/declare TrainSense bool local 1
	/declare TrainDisarmtraps bool local 1
	/declare TrainTrack bool local 1

	/declare SkillName[5] string outer
	/declare SongName[5] string local
	/declare Instrument[5] string local

| Define the songs and instruments to use for the various skills	
	/varset SkillName[1] Percussion instruments
	/varset SongName[1] Selo`s accelerando
	/varset Instrument[1] Thunderous drum of Karana

	/varset SkillName[2] Wind instruments
	/varset SongName[2] Shauri`s Sonorous Clouding
	/varset Instrument[2] Flute of eternal night

	/varset SkillName[3] Brass instruments
	/varset SongName[3] Denon`s disruptive Discord
	/varset Instrument[3] Combine horn

	/varset SkillName[4] Stringed instruments
	/varset SongName[4] Hymn of restoration
	/varset Instrument[4] Combine mandolin

	/varset SkillName[5] Sing
	/varset SongName[5] Jonthan's Whistling Warsong
	/varset Instrument[5] None

|------------ Below this line nothing should need to be edited 	-----------

	/if (${Me.Level}<12 && ${Me.Race.ID}!=4) /varset TrainForage 0
	/if (${Me.Level}<17) /varset TrainSneak 0
	/if (${Me.Level}<25 && ${Me.Race.ID}!=4) /varset TrainHide 0
	/if (${Me.Level}<20) /varset TrainSense 0
	/if (${Me.Level}<20) /varset TrainDisarmtraps 0
	/if (${Me.Level}<35) /varset TrainTrack 0

	/declare MaxSkill int local ${Math.Calc[${Me.Level}*5+5]}
	/if (${MaxSkill}>235) /varset MaxSkill 235

	/echo Max instrument skill: ${MaxSkill}
	
	/declare MaxForage int local ${Math.Calc[${Me.Level}*5+5]}
	/if (${MaxForage}>55) /varset MaxForage 55

	/declare MaxSneak int local ${Math.Calc[${Me.Level}*5+5]}
	/if (${MaxSneak}>75) /varset MaxSneak 75

	/declare MaxHide int local ${Math.Calc[${Me.Level}*5+5]}
	/if (${MaxHide}>40) /varset MaxHide 40

	/declare MaxSense int local ${Math.Calc[${Me.Level}*3]}
	/if (${MaxSense}>120) /varset MaxSense 120

	/declare MaxDisarmtraps int local ${Math.Calc[${Me.Level}*5+5]}
	/if (${MaxDisarmtraps}>120) /varset MaxDisarmtraps 120

	/declare MaxTrack int local ${Math.Calc[${Me.Level}*5+5]}
	/if (${MaxTrack}>100) /varset MaxTrack 100


	/declare SneakTimer timer outer
	/declare HideTimer timer outer

	/declare CurSkill int outer 1
	
	:loop
		/if ((${CurSkill}>5 || !${TrainInstrument}) && !(${TrainForage} || ${TrainSneak} || ${TrainHide} || ${TrainSense} || ${TrainDisarmtraps} || ${TrainTrack})) {
			/echo Training done!
			/endmacro
		}

		/if (!${Me.Standing}) /stand
		/doevents
		/if (${CurSkill}<6 && ${Me.Skill[${SkillName[${CurSkill}]}]}>=${MaxSkill}) {
			/varcalc CurSkill ${CurSkill}+1
			/if (${CurSkill}>5) {
				/echo Instrument skills done!
				/stopsong
				/goto :loop
			}
			/if (!${Me.Gem[${SongName[${CurSkill}]}]}) {
				/echo ${SongName[${CurSkill}]} not memmed! Skipping ${SkillName[${CurSkill}]}!
				/varcalc CurSkill ${CurSkill}+1
				/goto :loop
			}
			/echo Training ${SkillName[${CurSkill}]}: ${Me.Skill[${SkillName[${CurSkill}]}]}
			/goto :loop
		}
		/if (${CurSkill}<6 && (!${InvSlot[offhand].Item.ID} || ${InvSlot[offhand].Item.Name.NotEqual[${Instrument[${CurSkill}]}]}) && ${Instrument[${CurSkill}].NotEqual[None]}) /call EquipItem "${Instrument[${CurSkill}]}|offhand"
		/if (${CurSkill}<6 && (!${Me.Casting.ID} || ${Me.Casting.Name.NotEqual[${SongName[${CurSkill}]}]})) {
			/if (${Me.Casting.ID}) /stopsong
			/echo Singing: ${SongName[${CurSkill}]} (${SkillName[${CurSkill}]}: ${Me.Skill[${SkillName[${CurSkill}]}]} / ${MaxSkill})
			/cast "${SongName[${CurSkill}]}"
			/delay 5
		}
		/if (${TrainSense} && ${Me.Skill[sense traps]}>=${MaxSense}) {
			/echo Sense traps done!
			/varset TrainSense 0
		}
		/if (${TrainDisarmtraps} && ${Me.Skill[disarm traps]}>=${MaxDisarmtraps}) {
			/echo Disarm traps done!
			/varset TrainDisarmtraps 0
		}
		/if (${TrainTrack} && ${Me.Skill[tracking]}>=${MaxTrack}) {
			/echo Track done!
			/varset TrainTrack 0
		}
		/if (${TrainHide} && ${Me.Skill[hide]}>=${MaxHide}) {
			/echo Hide done!
			/varset TrainHide 0
		}
		/if (${TrainSneak} && ${Me.Skill[sneak]}>=${MaxSneak}) {
			/echo Sneak done!
			/varset TrainSneak 0
		}
		/if (${TrainForage} && ${Me.Skill[forage]}>=${MaxForage}) {
			/echo Forage done!
			/varset TrainForage 0
		}
		
		/if (${TrainForage} && ${Me.AbilityReady[forage]} && ${Me.Standing}) /doability forage
		/delay 2
		/if (${Cursor.ID}) /autoinv
		/if (${TrainSneak} && ${Me.AbilityReady[sneak]} && !${SneakTimer} && ${Me.Standing} && ${Me.Skill[sneak]}<${MaxSneak}) {
			/doability sneak
			/delay 5
			/varset SneakTimer 120
			/doability sneak
		}
		/delay 2

		/if (${TrainHide} && ${Me.AbilityReady[hide]} && !${HideTimer} && ${Me.Standing}) {
			/doability hide
			/delay 5
			/varset HideTimer 120
			/doability Hide
		}
		/delay 2
		/if (${TrainSense} && ${TrainSense} && ${Me.AbilityReady[sense traps]} && ${Me.Standing}) /doability "sense traps"
		/delay 2
		/if (${TrainDisarmtraps} && ${Me.AbilityReady[disarm traps]} && ${Me.Standing}) /doability "disarm traps"

		/delay 2
		/if (${TrainTrack} && ${Me.AbilityReady[tracking]} && ${Me.Standing}) /doability "tracking"
		
	/goto :loop
	
/return

bigugly
decaying skeleton
decaying skeleton
Posts: 7
Joined: Sun Mar 06, 2005 10:03 pm

bardskill

Post by bigugly » Mon Apr 03, 2006 3:28 am

Got your very nice macro, but it will not equip the instruments and you can not cast DDD in pok or nexus. Any ideas? tell me what i need to fix plz. Thx for the macro. :D

Lord_Vyper
a hill giant
a hill giant
Posts: 169
Joined: Sat Sep 25, 2004 1:57 am

Post by Lord_Vyper » Mon Apr 03, 2006 4:56 am

McVaxius's Berserker Cresendo is the first brass non damage song bards get IIRC... most just use that.

User avatar
blueninja
a grimling bloodguard
a grimling bloodguard
Posts: 541
Joined: Thu Aug 28, 2003 7:03 am
Location: Göteborg, Sweden

Post by blueninja » Mon Apr 03, 2006 7:50 am

It should equip the instruments. Perhaps you don't have the right ones. You might need to change which instrument to use in the macro. Also change the name of the brass song to the one Vyper suggested if your level is high enough to use it. If not, go somewhere else to train brass.

The section where you change these things is in the beginning of the macro and looks like this:

Code: Select all


| Define the songs and instruments to use for the various skills   
   /varset SkillName[1] Percussion instruments
   /varset SongName[1] Selo`s accelerando
   /varset Instrument[1] [color=red]Thunderous drum of Karana[/color]

   /varset SkillName[2] Wind instruments
   /varset SongName[2] Shauri`s Sonorous Clouding
   /varset Instrument[2] Flute of eternal night

   /varset SkillName[3] Brass instruments
   /varset SongName[3] [color=red]Denon`s disruptive Discord[/color]
   /varset Instrument[3] Combine horn

   /varset SkillName[4] Stringed instruments
   /varset SongName[4] Hymn of restoration
   /varset Instrument[4] Combine mandolin

   /varset SkillName[5] Sing
   /varset SongName[5] Jonthan's Whistling Warsong
   /varset Instrument[5] None 

Praetorian
a lesser mummy
a lesser mummy
Posts: 35
Joined: Thu Dec 09, 2004 12:44 pm

Post by Praetorian » Mon Apr 03, 2006 1:16 pm

Not sure how to make it happen but, this macro gives the string errors like quite a few other macros out there. It also seems to not do the sneak, hide and forage portions at all.

Any idea how to adjust this macro to rid it of the String Top-Level object errors?

User avatar
fearless
Not a Psychic
Posts: 2684
Joined: Wed Mar 10, 2004 3:52 pm

Post by fearless » Mon Apr 03, 2006 1:20 pm

The string errors are more likely your copy of spell_routines . . . as there are no ${String[ references in the macro itself.

Regarding the skill ups (sneak / hide / forage), are those abilities mapped to your abilities buttons?
Reading . . . it's not just for me.

[url=http://www.catb.org/~esr/faqs/smart-questions.html]How To Ask Questions The Smart Way[/url]
[quote="Ccomp5950"]Fearless showed me the light, you too shall learn.[/quote]

Praetorian
a lesser mummy
a lesser mummy
Posts: 35
Joined: Thu Dec 09, 2004 12:44 pm

Post by Praetorian » Mon Apr 03, 2006 1:41 pm

fearless wrote:The string errors are more likely your copy of spell_routines . . . as there are no ${String[ references in the macro itself.

Regarding the skill ups (sneak / hide / forage), are those abilities mapped to your abilities buttons?
Thanks I will see if I can fix it there in spell_routines.inc.

I have all the skills in my hotbar 1. Looking at this macro, I am not sure where/what I need ot have/do to have the skills in the right spot. I had the macro running earlier with No hotbar buttons at all.. and tracking and sense traps was firing off. I added the skills ot the hotbar and still only those coule work. The spells/songs are casting fine, its teh forage, hide. sneak etc that isnt working.

Praetorian
a lesser mummy
a lesser mummy
Posts: 35
Joined: Thu Dec 09, 2004 12:44 pm

Post by Praetorian » Mon Apr 03, 2006 2:00 pm

Not sure if this will completely fix the string problem, but the only use of string as described search for misuse of it.. was the following two lines in spell_routines.inc:

Code: Select all

/declare ItemName string local ${String[${WhatWhere}].Arg[1,|]}
/declare SlotName string local ${String[${WhatWhere}].Arg[2,|]}
I Changed it to:

Code: Select all

/declare ItemName string local ${WhatWhere}.Arg[1,|]
/declare SlotName string local ${WhatWhere}.Arg[2,|]
***EDIT*** yes this worked to get rid of the top-level object messages

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Mon Apr 03, 2006 2:13 pm

That's still wrong.

Code: Select all

${WhatWhere}.Arg[1,|] 
needs to be:

Code: Select all

${WhatWhere.Arg[1,|]}
Things like these are the reason the String TLO was removed in the first place. People were using ${String[Foo].Arg[Blah]} where ${Foo.Arg[blah]} would have worked just fine. String was meant to be used to convert data that was not a string in the first place, and was completely unnecessary in quite probably 95% of every case I've seen it used in. Like that one in spell_routines. :D
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Praetorian
a lesser mummy
a lesser mummy
Posts: 35
Joined: Thu Dec 09, 2004 12:44 pm

Post by Praetorian » Mon Apr 03, 2006 3:04 pm

A_Druid_00 wrote:That's still wrong.

Code: Select all

${WhatWhere}.Arg[1,|] 
needs to be:

Code: Select all

${WhatWhere.Arg[1,|]}
Things like these are the reason the String TLO was removed in the first place. People were using ${String[Foo].Arg[Blah]} where ${Foo.Arg[blah]} would have worked just fine. String was meant to be used to convert data that was not a string in the first place, and was completely unnecessary in quite probably 95% of every case I've seen it used in. Like that one in spell_routines. :D
Thank you for this explanation. I understand now.

bigugly
decaying skeleton
decaying skeleton
Posts: 7
Joined: Sun Mar 06, 2005 10:03 pm

Post by bigugly » Mon Apr 03, 2006 5:26 pm

Thanks for the information!!!! Will change and see if it works. I have my sneak, hide, forage, sence on my ability's bottons and they work great, Thaz again for the help and this great macro!!! :lol:

bigugly
decaying skeleton
decaying skeleton
Posts: 7
Joined: Sun Mar 06, 2005 10:03 pm

Post by bigugly » Tue Apr 04, 2006 12:56 am

Made the changes to the string lines as posted above and BAM!!!! Worked like u know it should WOOT WOOT!!!! Best skill macro I have found!!!!!! If you have amy more like this just tell me where to donate!!! TYVM for this macro again. :lol: :lol: :lol:

User avatar
blueninja
a grimling bloodguard
a grimling bloodguard
Posts: 541
Joined: Thu Aug 28, 2003 7:03 am
Location: Göteborg, Sweden

Post by blueninja » Tue Apr 04, 2006 4:35 pm

bigugly wrote:If you have amy more like this just tell me where to donate!!! TYVM for this macro again. :lol: :lol: :lol:
Glad you liked it.. As for any more like this, I think I started making a spell trainer for classes with spells instead of songs but I don't think I finished it, maybe I should .. It was pretty good I think :) ..

matter68
a lesser mummy
a lesser mummy
Posts: 45
Joined: Tue Apr 04, 2006 6:37 pm

got it working.. mostly

Post by matter68 » Thu Jun 22, 2006 12:10 pm

I have the macro working to the point where the different skills such as forage and sneak are being raised. My problem comes with the song/instrument part. When started, it raised the skill to 105, then continued to play that song even though it was no longer advancing. It doesnt seem to want to move to the next song. I tried using bits from the YAST trainer pasted into parts of the bardskill macro. Messed it up so bad I promtly switch back (I always keep backups in case I tinker :D ). This is the macro as i am trying to use it:

| BardSkill.mac - blueninja
|
| Trains bard instrument skills and various other skills
|
| To use edit the instruments and songs below to match your setup
| Memorize the songs you want to train, to skip one of the instrument skills
| start the macro without that song memorized.
|
| By default it uses Denon`s disruptive discord to train brass instruments, this is an AoE song
| that will agro npc's close to you. Run it in a non-agro zone like pok or the nexus.
|


#include spell_routines.inc
#event Skillup "You have become better at #1#! (#2#)"
Sub Event_Skillup(string Line,string SkillN, string SkillL)
/echo Skill ${SkillN}: ${SkillL}
/return

Sub Main

|------------ Edit stuff here to configure the macro -----------------------

| Define what skills to be trained 1=train, 0=don't train
/declare TrainInstrument bool local 1
/declare TrainForage bool local 1
/declare TrainSneak bool local 1
/declare TrainHide bool local 1
/declare TrainSense bool local 1
/declare TrainDisarmtraps bool local 1
/declare TrainTrack bool local 1

/declare SkillName[5] string outer
/declare SongName[5] string local
/declare Instrument[5] string local

| Define the songs and instruments to use for the various skills
/varset SkillName[1] string instruments
/varset SongName[1] hymn of restoration
/varset Instrument[1] combine mandolin

/varset SkillName[2] Wind instruments
/varset SongName[2] Tarew's aquatic ayre
/varset Instrument[2] Combine wooden flute

/varset SkillName[3] Brass instruments
/varset SongName[3] Denon`s disruptive Discord
/varset Instrument[3] Combine horn

/varset SkillName[4] percussion instrument
/varset SongName[4] chant of battle
/varset Instrument[4] Combine drum

/varset SkillName[5] Sing
/varset SongName[5] Jonthan's Whistling Warsong
/varset Instrument[5] None

|------------ Below this line nothing should need to be edited -----------

/if (${Me.Level}<12 && ${Me.Race.ID}!=4) /varset TrainForage 0
/if (${Me.Level}<17) /varset TrainSneak 0
/if (${Me.Level}<25 && ${Me.Race.ID}!=4) /varset TrainHide 0
/if (${Me.Level}<20) /varset TrainSense 0
/if (${Me.Level}<20) /varset TrainDisarmtraps 0
/if (${Me.Level}<35) /varset TrainTrack 0

/declare MaxSkill int local ${Math.Calc[${Me.Level}*5+5]}
/if (${MaxSkill}>235) /varset MaxSkill 235

/echo Max instrument skill: ${MaxSkill}

/declare MaxForage int local ${Math.Calc[${Me.Level}*5+5]}
/if (${MaxForage}>55) /varset MaxForage 55

/declare MaxSneak int local ${Math.Calc[${Me.Level}*5+5]}
/if (${MaxSneak}>75) /varset MaxSneak 75

/declare MaxHide int local ${Math.Calc[${Me.Level}*5+5]}
/if (${MaxHide}>40) /varset MaxHide 40

/declare MaxSense int local ${Math.Calc[${Me.Level}*3]}
/if (${MaxSense}>120) /varset MaxSense 120

/declare MaxDisarmtraps int local ${Math.Calc[${Me.Level}*5+5]}
/if (${MaxDisarmtraps}>120) /varset MaxDisarmtraps 120

/declare MaxTrack int local ${Math.Calc[${Me.Level}*5+5]}
/if (${MaxTrack}>100) /varset MaxTrack 100


/declare SneakTimer timer outer
/declare HideTimer timer outer

/declare CurSkill int outer 1

:loop
/if ((${CurSkill}>5 || !${TrainInstrument}) && !(${TrainForage} || ${TrainSneak} || ${TrainHide} || ${TrainSense} ||

${TrainDisarmtraps} || ${TrainTrack})) {
/echo Training done!
/endmacro
}

/if (!${Me.Standing}) /stand
/doevents
/if (${CurSkill}<6 && ${Me.Skill[${SkillName[${CurSkill}]}]}>=${MaxSkill}) {
/varcalc CurSkill ${CurSkill}+1
/if (${CurSkill}>5) {
/echo Instrument skills done!
/stopsong
/goto :loop
}
/if (!${Me.Gem[${SongName[${CurSkill}]}]}) {
/echo ${SongName[${CurSkill}]} not memmed! Skipping ${SkillName[${CurSkill}]}!
/varcalc CurSkill ${CurSkill}+1
/goto :loop
}
/echo Training ${SkillName[${CurSkill}]}: ${Me.Skill[${SkillName[${CurSkill}]}]}
/goto :loop
}
/if (${CurSkill}<6 && (!${InvSlot[offhand].Item.ID} ||

${InvSlot[offhand].Item.Name.NotEqual[${Instrument[${CurSkill}]}]}) && ${Instrument[${CurSkill}].NotEqual[None]}) /call

EquipItem "${Instrument[${CurSkill}]}|offhand"
/if (${CurSkill}<6 && (!${Me.Casting.ID} || ${Me.Casting.Name.NotEqual[${SongName[${CurSkill}]}]})) {
/if (${Me.Casting.ID}) /stopsong
/echo Singing: ${SongName[${CurSkill}]} (${SkillName[${CurSkill}]}: ${Me.Skill[${SkillName[${CurSkill}]}]} /

${MaxSkill})
/cast "${SongName[${CurSkill}]}"
/delay 5
}
/if (${TrainSense} && ${Me.Skill[sense traps]}>=${MaxSense}) {
/echo Sense traps done!
/varset TrainSense 0
}
/if (${TrainDisarmtraps} && ${Me.Skill[disarm traps]}>=${MaxDisarmtraps}) {
/echo Disarm traps done!
/varset TrainDisarmtraps 0
}
/if (${TrainTrack} && ${Me.Skill[tracking]}>=${MaxTrack}) {
/echo Track done!
/varset TrainTrack 0
}
/if (${TrainHide} && ${Me.Skill[hide]}>=${MaxHide}) {
/echo Hide done!
/varset TrainHide 0
}
/if (${TrainSneak} && ${Me.Skill[sneak]}>=${MaxSneak}) {
/echo Sneak done!
/varset TrainSneak 0
}
/if (${TrainForage} && ${Me.Skill[forage]}>=${MaxForage}) {
/echo Forage done!
/varset TrainForage 0
}

/if (${TrainForage} && ${Me.AbilityReady[forage]} && ${Me.Standing}) /doability forage
/delay 2
/if (${Cursor.ID}) /autoinv
/if (${TrainSneak} && ${Me.AbilityReady[sneak]} && !${SneakTimer} && ${Me.Standing} && ${Me.Skill[sneak]}

<${MaxSneak}) {
/doability sneak
/delay 5
/varset SneakTimer 120
/doability sneak
}
/delay 2

/if (${TrainHide} && ${Me.AbilityReady[hide]} && !${HideTimer} && ${Me.Standing}) {
/doability hide
/delay 5
/varset HideTimer 120
/doability Hide
}
/delay 2
/if (${TrainSense} && ${TrainSense} && ${Me.AbilityReady[sense traps]} && ${Me.Standing}) /doability "sense traps"
/delay 2
/if (${TrainDisarmtraps} && ${Me.AbilityReady[disarm traps]} && ${Me.Standing}) /doability "disarm traps"

/delay 2
/if (${TrainTrack} && ${Me.AbilityReady[tracking]} && ${Me.Standing}) /doability "tracking"

/goto :loop

/

User avatar
blueninja
a grimling bloodguard
a grimling bloodguard
Posts: 541
Joined: Thu Aug 28, 2003 7:03 am
Location: Göteborg, Sweden

Post by blueninja » Sun Jun 25, 2006 3:30 pm

When it starts up it echoes the calculated skill max:

Code: Select all

/echo Max instrument skill: ${MaxSkill} 
What does that say?

And what level is your bard?