Edit::Fixed a bug in the DMG totaller
Due the the limited number of parameters that you can have... (the limit is 9) this macro is kinda gimped... but... the syntax is pretty easy
Edit:: Nothing changed to macro... just got rid of that goofy smily face.
Edit:: 8/7/03
Per... someone's request I added support for Anglist's Assonnanncens.... or something like that... read the big long intro for instructions, **WARNING:: As I don't have a 60+ bard I can't test it, try it with a relativly safe mob first, if it seems OK, go ahead.
Probably fixed some annoying things and some stuff in exp too. INI support is on the way.
Edit:: Fixed all those goof-ups that I had in the Anglist's... hehe... it works the way it should now, thanks for the help those that deserve it! Classes start tomorrow, so I probably won't have a lot of time for EQ or MQ in the next... 3 months. But i'll try to get some work done. =)
Edit:: Lotta requests for circles in the anglist's assonnance loop... done and done... I've got a completely different version of this that uses the spell duration, it's a lot more general... should prove spiffy.
/mac Bard [selo <selo gem>] [amp <amp gem>] [loc <xloc> <yloc>] <song gem1> [<song gem2>...]
Everything in brakets is optional... order is unimportant only use the "selo" tag if you want the 2.5 minute selo.... ATM I have it broken into "Bard.mac" and "Exp.mac" The latter handles the dmg done via dots and experience, play time... an example of a call to this is
Code: Select all
/mac bard 2 3 4 5 selo 1 loc 40 -20
Hmm... what else is there... make sure you have exp.mac in the same dir... or that part will bitch. Can't think of anything, if you find bugs... etc, PM me... I've promised this to a few people, well... sorry about the friggin' long week (for some of you that's more like 4 weeks)
Code: Select all
| - Bard.mac -
| Produced and distirbuted by Steve (Aka The Colonel)
| Usage /macro Bard <args>
| The args that are special are...
| selo - This will take the next arg as the Selo`s Accelerating Chorus(2.5minute) Gem number
|
| amp - This will take the next arg as the Amplification gem number.
|
| angl - This will change how the macro runs. Next arg is taken as Angstlich's Assonance gem
| This will not run in circles or sing selos or amp. Rather it will play the
| Angstlich's Assonance song, then 16 songs, then Angstlich's Assonance again.
| In the event that Angstlich's Assonance is resisted it will only play 4 songs, then
| try to play Angstlich's Assonance again.
|
| loc - This will take the next two args as the xloc and yloc (respectively) that it
| will circle around. Default radius is 90, /varset v8 <newrad> is what you need to
| do to change that. ***YOU MUST HIT AUTO-RUN to start the circling process
|** *************************************** INI SUPPORT IS HOSED ATM********************** **|
| ini - This will take the next arg as the file name of the INI file to load.
| *****NOTE***** YOU **MUST** set up the INIDIR in the Bardini.mac before using
| this function or it *WILL* not work. (My dir, as you'll notice is F:\....
| I'm assuming most people don't use F: for MQ... but... meh)
|** *************************************** INI SUPPORT IS HOSED ATM********************** **|
| numbers without any of the above tags before them will be read as gem numbers for songs,
| they will be added to the lineup in the order they appear
| Now that that's out of the way, some examples....
| /mac bard 1 2 3 4 selo 5 loc 1234 567
| That will start off with Selo`s Accelerating Chorus, then twist in the other 4 songs,
| starting with 1... Every 2.5 minutes or so... (normally slightly less) it will refresh
| Selo`s Accelerating Chorus and then continue. The entire time it's doing this it will
| make a circle, roughly 90 tics in radius, around (1234, 567)
|
| /mac bard angl 5 1 2 3 4
| This will start with Angstlich's Assonance on the current target. Then twist 1 2 3 4
| 4 times, totaling 16 songs sung between Angstlich's Assonance's.
| If Angstlich's Assonance is resisted there will be 4 songs sung before
| Angstlich's Assonance is attempted again.
|
| /mac bard loc 1296 1239
| Not sure why, but if you need to run in a circle... this is it... maybe you want to add
| a timer that triggers a /shout I AM A HAMPSTER ... maybe not.
|
| /mac ini pongobs
| If you've taken the time to /call INIDUMP pongobs while running in circles, and you wanna
| get back in that same circle, this will do just that.... It *should* do anything you
| were doing before, starting fresh... as though you'd just called /mac bard selos..... ....
|
| That's about all I can think of... if you're still lost... I'm not sure I can help you.
| But if you wanna bug me for an addition, revision, I've added a few things per
| request, haven't used Angstlich's Assonance's addition myself, not of that level... so I'm
| not sure how well it'll work. Give it a go. I've been thinking about some charm stuff...
| but nothing it implemented ATM.
|#include bardini.mac
#include exp.mac
|If you don't want to use bardini.mac or exp.mac look through this for other comments that
| will tell you what else you must comment or delete before running, or it won't.
#event SongFail "You miss a note, bringing your song to a close!"
#event SongFail "You haven't recovered yet..."
#event Fast "Your feet move faster"
#event Slow "You slow down"
#event NotReady "You must first select a target for this spell!"
#event NotReady "out of range"
#event NotReady "You cannot see"
#event Resist "Your target resisted the"
#event Death "Returning to home point, please wait..."
#event ERROR "You do not seem to have that spell memorized."
#define prevsong v0
#define cursong v1
#define nextsong v2
#define nsongs v3
#define temp v4
#define xloc v6
#define yloc v7
#define radius v8
#define anglcount v9
#define songs( a(0,
#define parameters( a(1,
#define WAITTIME 35 |Cast time of one song.
#define AMPL 8 |This is the hole that it gets in the queue
#define SELOS 9 | ^^ditto^^
#define ANGL 10
Sub Main
/if $p0=="" /return
/if $p0==NULL /return
|This is the only call that requires exp.mac,
| if you don't like that output... comment "/call EXPSETUP" out!
/call EXPSETUP
/varset v0 0
/varset v1 0
/varset v2 0
/varset v3 0
/varset v4 0
/varset v5 0
/varset v6 0
/varset v7 0
/varset v8 0
/varset v9 0
/zap novars
/varset nsongs 0
/varset v60 0
/varset cursong 0
/varset parameters(0) $p0
/varset songs(SELOS) 0
/varset songs(AMPL) 0
/if $p1!="" /varset parameters(1) $p1
/if $p2!="" /varset parameters(2) $p2
/if $p3!="" /varset parameters(3) $p3
/if $p4!="" /varset parameters(4) $p4
/if $p5!="" /varset parameters(5) $p5
/if $p6!="" /varset parameters(6) $p6
/if $p7!="" /varset parameters(7) $p7
/if $p8!="" /varset parameters(8) $p8
/if $p9!="" /varset parameters(9) $p9
:setupLoop
|If you use the ini argument you must have the bardini.mac in the marco dir.
|Update the INIDIR constant in bardini.mac BEFORE RUNNING THIS!!!
/if $a(1,$v60)=="ini" {
/varadd v60 1
| /call LoadINI $parameters($v60)
/ECHO INI Support is hosed ATM, try back in a week
/varadd v60 1
/goto :setuploop
}
/if $a(1,$v60)=="amp" {
/varadd v60 1
/varset songs(AMPL) $parameters($v60)
/varadd v60 1
/echo Found $char(gem,$songs(AMPL)) at Gem $songs(AMPL)
/goto :setuploop
}
/if $a(1,$v60)=="angl" {
/varadd v60 1
/varset songs(ANGL) $parameters($v60)
/varadd v60 1
/echo Found $char(gem,$songs(ANGL)) at Gem $songs(ANGL)
/goto :setuploop
}
/if $a(1,$v60)=="selo" {
/varadd v60 1
/varset songs(SELOS) $parameters($v60)
/varadd v60 1
/echo Found $char(gem,$songs(SELOS)) at Gem $songs(SELOS)
/goto :setuploop
}
/if $a(1,$v60)=="loc" {
/varadd v60 1
/varset xloc $parameters($v60)
/varadd v60 1
/varset yloc $parameters($v60)
/varset radius 60
/echo Makin' circles around $xloc $yloc... Radius var is v8 defaulted to $radius
/echo To change /varset v8 <Desired RAD>
/varadd v60 1
/goto :setuploop
}
/if $parameters($v60)!="" /if $parameters($v60)!=NULL {
/varset songs($int($nsongs)) $int($parameters($v60))
/varadd nsongs 1
/echo Song $int($nsongs): $char(gem,$songs($int($nsongs-1)))
/varadd v60 1
/goto :setuploop
}
/if n $songs(ANGL)>0 {
/varset cursong ANGL
/varset anglcount 16
/call AnglistLoop
}
/if n $songs(SELOS)>0 {
/varset cursong SELOS
}
/if n $songs(AMPL)>0 {
/varset nextsong AMPL
}
/varset t0 1
:Loop
/delay 0
| THIS CIRC ADDS AN ELEMENT OF RANDOMNESS....
|IF YOU NEED PRECISION UNCOMMENT THE NEXT LINE AND COMMENT THIS ONE
| /if n $radius!=0 /call circ $calc($xloc+$rand(10)) $calc($yloc+$rand(10)) $calc($radius+$rand(10))
/if n $radius!=0 /call circ $xloc $yloc $radius
/doevents
|Fixes a buncha issues... missed events, macro pauses... Lots!
/if n $t0==0 /varset t0 1
/doevents
/goto :Loop
/return
Sub Sing
/varset t0 WAITTIME
/if n $cursong==SELOS {
/varset t1 1300
/varset t2 1500
}
/if n $cursong==ANGL {
/varset anglcount 16
} else {
/varsub anglcount 1
}
/if n $cursong==AMPL /varset t3 300
/stopsong
/cast $p0
/doevents
/varset prevsong $cursong
/varset cursong $nextsong
/varadd nextsong 1
/varset nextsong $calc($nextsong%$nsongs)
/doevents
/return
Sub AnglistLoop
:ANGLOOP
/delay 0
/doevents
/if n $t0==0 /varset t0 1
/echo $anglcount
/if n $radius!=0 /call circ $xloc $yloc $radius
/doevents
/if n $anglcount==0 {
/varset nextsong ANGL
}
/goto :ANGLOOP
/return
sub circ
/if n $distance($p0,$p1)<$calc($calc(2*$p2)/3){
| This heading seems to be rather unpredictable, small changes in position result in huge direction changes
|/face heading $calc($heading($p0,$p1)+180)
} else {
/face heading $calc($heading($p0,$p1)+$calc(90*$calc($p2/$distance($p0,$p1))))
}
/return
Sub Event_SongFail
/varset t0 1 |Must be set to one so the timer events catches it as it hit 0
/if n $cursong!=AMPL /if n $cursong!=SELOS /if n $cursong!=ANGL {
/varset nextsong $cursong
/varset cursong $prevsong
| /echo FAIL
}
|Doesn't goof up the special songs.
/doevents
/return
Sub Event_Slow
/varset cursong SELOS
/varset t0 1
/doevents
/return
Sub Event_NotReady
/varset t0 5 |Puts a 0.5s delay in if there's any reason you can't cast.
/varadd targcount 1
/if n $targcount>=2 {
/varset targcount 0
| /tar npc ocean
|Uncomment this line if you want to grab a new target when you're current
|one has been out of range for a while or you haven't had a target for a while
}
/doevents
/return
Sub Event_Resist
/if "$p0"~~"Angstlich's Assonance" /varset anglcount 4
/return
Sub Event_timer
/if n $p0==0 {
| /echo $cursong
/call Sing $int($songs($int($cursong)))
} else /if n $p0==1 {
/varset nextsong SELOS
} else /if n $p0==2 {
/varset nextsong $cursong
/varset cursong SELOS
/varset t0 1
} else /if n $p0==3 /varset nextsong AMPL
/doevents
/return
Sub Event_ERROR
/echo $prevsong prevsong
/echo $cursong cursong
/echo $nextsong nextsong
/echo $nsongs nsongs
/echo $temp temp
/echo $xloc xloc
/echo $yloc yloc
/echo $radius radius
/echo $anglcount anglcount
/varset l0 0
:errorloop
/echo $songs($l0) a(0,$l0)
/varadd l0 1
/if n $l0<10 /goto :errorloop
/return
Sub Event_Death
/delay 20
/sit
/camp
| /gu Night All.
/unload
/return
Code: Select all
#turbo 100
#event Exp "You gain party experience!!"
#event Exp "You gained raid experience!"
#event Exp "You gain experience!!"
#event DMG " has taken "
#define dmgtotal v93
#define mobtime v94
#define mobdmg v95
#define aaexp v96
#define exper v97
#define exptot v98
#define aatot v99
Sub EXPSETUP
/varset dmgtotal 0
/varset mobtime 0
/varset mobdmg 0
/varset exptot 0
/varset aatot 0
/varset mobtime 0
/varset exper $char(exp)
/varset aaexp $char(aa,exp)
/return
Sub Event_Exp
/varset aaexp $calc($char(aa,exp)-$aaexp)
/varset exper $calc($char(exp)-$exper)
/varadd dmgtotal $mobdmg
/varadd exptot $exper
/varadd aatot $aaexp
/call Time $running "Total time running:"
/if n $mobdmg>0 /echo Dmg done on this mob: $int($mobdmg)
/varcalc mobtime $running-$mobtime
/call Time $mobtime "Time spent on this mob:"
/if n $calc($exper+$aaexp)>0 /echo Exp gained on this mob: $if(n,$exper>0,"$exper% regular exp",) $if(n,$aaexp>0,"$aaexp% AA exp",)
/if n $exptot>0 /echo Total regular gained: $exptot
/if n $aatot>0 /echo Total AA gained: $aatot
/if n $dmgtotal>0 /echo Total Dmg done: $int($dmgtotal)
/varset exper $char(exp)
/varset aaexp $char(aa,exp)
/varset mobdmg 0
|UNCOMMENT THE NEXT TWO LINES ONLY IF YOU KNOW WHAT THEY DO!
| IF YOU GET KILLED, DON'T BITCH AT ME
| /press down
| /mqp
/varset mobtime $running
|UNCOMMENT THIS IF YOU WANT TO GET A NEW TARGET AFTER YOU KILL ONE...
|IF YOU WANT A PARTICULAR TYPE OF TARGET... /tar npc race elf...
|OR WHATEVER FIGURE IT OUT YOURSELF
|/tar npc
/doevents
/return
Sub Event_DMG
|ATM it only does dmg from dots. I'll do Melee dmg if you ask REALLY nice.
| /echo $mid($calc($instr(taken,"$p0")+5),3,"$p0")
/varadd mobdmg $mid($calc($instr(taken,"$p0")+5),3,"$p0")
/return
Sub Time
/varcalc l0 $p0\86400
/varcalc l1 $p0%86400\3600
/varcalc l2 $p0%3600\60
/varcalc l3 $p0%60
/echo $p1 $if(n,$l0!=0,"$int($l0) days",) $if(n,$l1!=0,"$int($l1) hours",) $if(n,$l2!=0,"$int($l2) minutes",) $if(n,$l3!=0,"$int($l3) seconds",)
/return

