|
|
Line 1: |
Line 1: |
− | This trigger and alias set will track damage dealt and received for all on a member list. For each line of combat the hit is stored by damage verb if the person attacking was on the list, and a running damage total is kept. Damage values were taken from [[ Damage |Damage]], missing values were extrapolated. Valid damage ranges from weak to ***ANNIH. Report options include a display of {damage done/ average hit/ damage taken} or a breakdown of all hits by verb. You may display these for yourself, everyone or a partial selection. Efforts have been made to make sure that all damage is counted, currently I am under the impression that melee damage as well as spell damage that includes your name and throwing damage is accounted for. The damage done by shield charges is not.
| + | Tested for zmud 7.21 |
| | | |
− | If you have made any helpful upgrades to this code I'd appreciate it if you'd share and post it in the discussion area, though I'm presenting this as is and don't intend to consistently maintain it :)
| + | This trigger and alias set will track damage dealt and received for all on a member list. For each line of combat the hit is stored by damage verb if the person attacking was on the list, and a running damage total is kept. Damage values were taken from [[ Damage |Damage]]. Report options include a display of {damage done/ average hit/ damage taken} or a breakdown of all hits by verb. You may display these for yourself, everyone or a partial selection. Latest triggers should catch anything with a name and a damage verb. |
| | | |
| == Code == | | == Code == |
− | ''Copy this section and paste it into a *.txt file. Then, in zMUD, go to "Settings -> File -> Import Text" and select the file you saved to:'' | + | ''For quick input copy this section and paste it into a *.txt file. Then, in zMUD, go to "Settings -> File -> Import |
− | #CLASS {Damagecounter} | + | |
− | #ALIAS dcadd {#additem DClist %1;#var %1 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;#echo %1 added to the damage counting list.} | + | #CLASS {dcounter} |
| + | #ALIAS dcadd {#additem DCtrack %1;#additem DCnames %1;#echo %1 added to the damage counting list.} |
| #ALIAS dcrep {#YESNO "What report would you like to show?" {Short report (total damage done and taken) :dcrep1} {Breakdown of damage verbs:dcrep2}} | | #ALIAS dcrep {#YESNO "What report would you like to show?" {Short report (total damage done and taken) :dcrep1} {Breakdown of damage verbs:dcrep2}} |
− | #ALIAS dcclear {#FO @DClist {#UNVAR %i};#VAR DClist "";#VAR DCterm 0;dcadd your;#ECHO Damagecounter reset. Please re-add groupies.} | + | #ALIAS dcclear {#FO @DCtrack {#UNVAR %i};#VAR DCtrack "you";#VAR DCnames "";dcadd your;#ECHO Damagecounter reset. Please re-add groupies.} |
− | #ALIAS dcrep2 {#if (!@DCreport) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DCreportfor "your"} {Everyone:#VAR DCreportfor @DClist} {Partial:#VAR DCreportfor %pick( p:Who would you like to display reports for?:, @DClist)};#FO @DCreportfor {@DCreport Breakdown for %if( %i="your", Myself, %upper( %left( %i, 1))%right( %i, 1)):%if( %item( @{%i}, 1), %char( 32)Tickling~(~|c~|%item( @{%i}, 1)~|n~|~))%if( %item( @{%i}, 2), %char( 32)Mauling~(~|c~|%item( @{%i}, 2)~|n~|~))%if( %item( @{%i}, 3), %char( 32)Decimating~(~|c~|%item( @{%i}, 3)~|n~|~))%if( %item( @{%i}, 4), %char( 32)Devasting~(~|c~|%item( @{%i}, 4)~|n~|~))%if( %item( @{%i}, 5), %char( 32)Pulverizing~(~|c~|%item( @{%i}, 5)~|n~|~))%if( %item( @{%i}, 6), %char( 32)Maiming~(~|c~|%item( @{%i}, 6)~|n~|~))%if( %item( @{%i}, 7), %char( 32)Eviscerating~(~|c~|%item( @{%i}, 7)~|n~|~))%if( %item( @{%i}, 8), %char( 32)Mutilating~(~|c~|%item( @{%i}, 8)~|n~|~))%if( %item( @{%i}, 9), %char( 32)Disemboweling~(~|c~|%item( @{%i}, 9)~|n~|~))%if( %item( @{%i}, 10), %char( 32)Dismembering~(~|c~|%item( @{%i}, 10)~|n~|~))%if( %item( @{%i}, 11), %char( 32)Massacring~(~|c~|%item( @{%i}, 11)~|n~|~))%if( %item( @{%i}, 12), %char( 32)Mangling~(~|c~|%item( @{%i}, 12)~|n~|~))%if( %item( @{%i}, 13), %char( 32)Demolishing~(~|c~|%item( @{%i}, 13)~|n~|~))%if( %item( @{%i}, 14), %char( 32)Obliterating~(~|c~|%item( @{%i}, 14)~|n~|~))%if( %item( @{%i}, 15), %char( 32)Annihilating~(~|c~|%item( @{%i}, 15)~|n~|~))%if( %item( @{%i}, 16), %char( 32)Terminal~(~|c~|%item( @{%i}, 16)~|n~|~))}} | + | #ALIAS dcrep2 {#if (!@DCreport) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DC.reportfor "your"} {Everyone:#VAR DC.reportfor @DCnames} {Partial:#VAR DC.reportfor %pick( p:Who would you like to display reports for?:, @DCnames)};#LOOPDB @you {#var your.%key %eval( %db( @your, %key) + %val)};#var you "";#FO @DC.reportfor {#var %i.out "";#FO @dverbshort {#if (%db( @{%i}, %I)) {#var %i.out %concat( %db( @{%i}, out), " ", %I, ~(, ~|c~|, %db( @{%i}, %I), ~|n~|, ~))}};@DC.repto Breakdown for %if( %i="your", Myself, %upper( %left( %i, 1))%right( %i, 1)):%db( @{%i}, out)}} |
− | #ALIAS dctermcheck {#FO @DClist {#VAR DCtemp1 0;#VAR DCtemp2 %i;#LOOP 2,15 {#VAR DCtemp1 %eval( @DCtemp1+%item( @{@DCtemp2}, %I))};#VAR DCtemp1 %eval( %item( @{@DCtemp2}, 17)/@DCtemp1);#VAR DCtemp1 %eval( @DCtemp1 * %item( @{@DCtemp2}, 16));#VAR DCtemp1 %eval( @DCtemp1 + %item( @{@DCtemp2}, 17));#VAR @DCtemp2 %replaceitem( @DCtemp1, 19, @{@DCtemp2})};#ECHO Terminal hits have been processed.}
| + | #ALIAS dcrep1 {#if (!@DC.repto) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DC.reportfor "your"} {Everyone:#VAR DC.reportfor @DCnames} {Partial:#VAR DC.reportfor %pick( p:Who would you like to display reports for?:, @DCnames)};#LOOPDB @you {#var your.%key %eval( %db( @your, %key) + %val)};#var you "";#var DC.total 0;#var DC.taken 0;#var DC.totalcount 0;#var DC.takencount 0;#FO @DCnames {#if ( %db( @{%i}, terminal)) {#var %i.total %eval( %db( @{%i}, dealt) + %db( @{%i}, dealt)/(%db( @{%i}, attacks) - %db( @{%i}, terminal))* %db( @{%i}, terminal))} {#var %i.total %db( @{%i}, dealt)};#if (@DC.total < %db( @{%i}, total)) {#var DC.total %db( @{%i}, total)};#if (@DC.taken < %db( @{%i}, taken)) {#var DC.taken %db( @{%i}, taken)};#var DC.totalcount %eval( @DC.totalcount + %db( @{%i}, total));#var DC.takencount %eval( @DC.takencount + %db( @{%i}, taken))};#FO @DC.reportfor {#if ( %db( @{%i}, terminal)) {#var %i.verb %item( @dverbs, %eval( @verbBinary(1,139,%eval(%db(@{%i},dealt)/(%db(@{%i},attacks)- %db( @{%i}, terminal)))) -1))} {#var %i.verb %item( @dverbs, %eval( @verbBinary(1,139,%eval(%db(@{%i},dealt)/%db(@{%i},attacks))) -1))};@DC.repto %if( %i="your", I, %upper( %left( %i, 1))%right( %i, 1)): Dealt->%if( %db( @{%i}, total) = @DC.total, ~|bc~|, ~|c~|)%db( @{%i}, total)|n|~(%eval( %db( @{%i}, total)*100/@DC.totalcount)%~) Averaged~[|bk|%replace( %db( @{%i}, verb), "=", "-")|n|~] Took->%if( %db( @{%i}, taken) = @DC.taken, ~|br~|, ~|r~|)%db( @{%i}, taken)|n|~(%eval( %db( @{%i}, taken)*100/@DC.takencount)%~)}} |
− | #ALIAS dcrep1 {#if (!@DCreport) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DCreportfor "your"} {Everyone:#VAR DCreportfor @DClist} {Partial:#VAR DCreportfor %pick( p:Who would you like to display reports for?:, @DClist)};dctermcheck;dcavecheck;#VAR DCtemp1 0;#VAR DCtemp2 0;#VAR DCtemp3 0;#VAR DCtemp4 0;#FO @DClist {#IF {%eval( %item( @{%i}, 19) > @DCtemp1)} {#VAR DCtemp1 %item( @{%i}, 19)};#IF {%eval( %item( @{%i}, 18) > @DCtemp2)} {#VAR DCtemp2 %item( @{%i}, 18)};#ADD DCtemp3 %item( @{%i}, 19);#ADD DCtemp4 %item( @{%i}, 18)};#FO @DCreportfor {@DCreport ~|w~|Stats for %if( %i="your", Myself, %upper( %left( %i, 1))%right( %i, 1)): Dealt->%if( %item( @{%i}, 19) = @DCtemp1, ~|BC~|, ~|C~|)%item( @{%i}, 19)~|w~|~(%eval( %item( @{%i}, 19)*100/@DCtemp3)%~) Average~[~|bk~|%item( @damageverbs, %item( @{%i}, 20))~|w~|~] Taken->%if( %item( @{%i}, 18) = @DCtemp2, ~|BR~|, ~|R~|)%item( @{%i}, 18)~|w~|~(%eval( %item( @{%i}, 18)*100/@DCtemp4)%~)}}
| + | #ALIAS dcs {dcclear;#if (!@DCreport) {@DCreport = gt} {};#t+ "%w is leading (%d) player[ s]with";groupstat} |
− | #ALIAS dcavecheck {#FO @DClist {#var DCtemp1 %i;#var DCtemp2 0;#LOOP 1,15 {#VAR DCtemp2 %eval( @DCtemp2+%item( @{@DCtemp1}, %I))};#var DCtemp2 %eval( %item( @{%i}, 17)/@DCtemp2);#var DCtemp3 %item( @damagevalues, 75);#var DCtemp4 75;#WHILE (@DCtemp2 < @DCtemp3) {#add DCtemp4 -1;#var DCtemp3 %item( @damagevalues, @DCtemp4)};#VAR %i %replaceitem( @DCtemp4, 20, @{%i})}}
| + | #ALIAS dcrepto {#prompt DC.repto "Enter the channel to output to, eg gt, say ect."} |
− | #ALIAS dcstart {dcclear;#if (!@DCreport) {@DCreport = gt} {};#if {%1} {@DCtemp1 = %1} {@DCtemp1 = 2;#prompt DCtemp1 "How many people are in the group?"};#if (@DCtemp < 10) {#loop @DCtemp1 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}} {#loop 1,9 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}};#loop 10,@DCtemp {#temp {^%i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}};group}
| + | #VAR dverbshort {nil|pathetic|weak|punishing|surprising|amazing|astonishing|mauling|decimating|devastating|pulverizing|maiming|eviscerating|mutilating|disemboweling|dismembering|massacring|mangling|demolishing|obliterating|annihilating|eradicating|vaporizing|destructive|extreme|porcine|divine|daunting|terminal} |
− | #ALIAS dcrepto {#prompt DCreport "Enter the channel to output to, eg gt, say ect."}
| + | #VAR dvalues {0|2|4|8|10|14|18|22|26|30|34|38|42|46|49|55|60|65|70|75|80|85|90|95|100|110|120|130|140|150|160|170|180|190|200|225|250|275|300|325|350|375|400|425|450|475|500|540|574|606|675|730|769|810|884|915|1000|1100|1200|1300|1400|1500|1600|1700|1800|1900|2000|2200|2400|2600|2800|3000|3200|3400|3600|3800|4100|4500|5007|5901|5902|6200|6500|7000|7500|7800|8200|8500|9000|9500|10000|11000|12000|13000|14000|15000|16500|18000|19000|20000|21000|22000|23000|24000|25000|26000|27000|28000|29000|30000|31000|32000|33000|34000|35000|36000|37000|38000|39000|40000|41000|42000|43000|44500|47000|48000|50000|51000|53000|55000|57000|59000|61000|65000|70000|75000|80000|100000|0} |
− | #VAR damageverbs {weak|punishing|surprising|amazing|astonishing|mauling|MAULING|MAULING*|MAULING**|MAULING***|decimating|DECIMATING|DECIMATING*|DECIMATING**|DECIMATING***|devastating|DEVASTATING|DEVASTATING*|DEVASTATING**|DEVASTATING***|pulverizing|PULVERIZING|PULVERIZING*|PULVERIZING**|PULVERIZING***|maiming|MAIMING|MAIMING*|MAIMING**|MAIMING***|eviscerating|EVISCERATING|EVISCERATING*|EVISCERATING**|EVISCERATING***|mutilating|MUTILATING|MUTILATING*|MUTILATING**|MUTILATING***|disemboweling|DISEMBOWELING|DISEMBOWELING*|DISEMBOWELING**|DISEMBOWELING***|dismembering|DISMEMBERING|DISMEMBERING*|DISMEMBERING**|DISMEMBERING***|massacring|MASSACRING|MASSACRING*|MASSACRING**|MASSACRING***|mangling|MANGLING|MANGLING*|MANGLING**|MANGLING***|demolishing|DEMOLISHING|DEMOLISHING*|DEMOLISHING**|DEMOLISHING***|obliterating|OBLITERATING|OBLITERATING*|OBLITERATING**|OBLITERATING***|annihilating|ANNIHILATING|ANNIHILATING*|ANNIHILATING**|ANNIHILATING***|terminal}
| + | #VAR dverbs {nil|pathetic|weak|punishing|surprising|amazing|astonishing|mauling|MAULING|MAULING*|MAULING**|MAULING***|decimating|DECIMATING|DECIMATING*|DECIMATING**|DECIMATING***|devastating|DEVASTATING|DEVASTATING*|DEVASTATING**|DEVASTATING***|pulverizing|PULVERIZING|PULVERIZING*|PULVERIZING**|PULVERIZING***|maiming|MAIMING|MAIMING*|MAIMING**|MAIMING***|eviscerating|EVISCERATING|EVISCERATING*|EVISCERATING**|EVISCERATING***|mutilating|MUTILATING|MUTILATING*|MUTILATING**|MUTILATING***|disemboweling|DISEMBOWELING|DISEMBOWELING*|DISEMBOWELING**|DISEMBOWELING***|dismembering|DISMEMBERING|DISMEMBERING*|DISMEMBERING**|DISMEMBERING***|massacring|MASSACRING|MASSACRING*|MASSACRING**|MASSACRING***|mangling|MANGLING|MANGLING*|MANGLING**|MANGLING***|demolishing|DEMOLISHING|DEMOLISHING*|DEMOLISHING**|DEMOLISHING***|obliterating|OBLITERATING|OBLITERATING*|OBLITERATING**|OBLITERATING***|annihilating|ANNIHILATING|ANNIHILATING*|ANNIHILATING**|ANNIHILATING***|ANNIHILATING***<|ANNIHILATING***<<|ANNIHILATING***<<<|ANNIHILATING***<<<<|eradicating|ERADICATING|ERADICATING*|ERADICATING**|ERADICATING***|ERADICATING***<|ERADICATING***<<|ERADICATING***<<<|ERADICATING***<<<<|vaporizing|VAPORIZING|VAPORIZING*|VAPORIZING**|VAPORIZING***|VAPORIZING***<|VAPORIZING***<<|VAPORIZING***<<<|VAPORIZING***<<<<|destructive|DESTRUCTIVE|DESTRUCTIVE*|DESTRUCTIVE**|DESTRUCTIVE***|DESTRUCTIVE****|DESTRUCTIVE****<|DESTRUCTIVE****<<|DESTRUCTIVE****<<<|DESTRUCTIVE****<<<<|DESTRUCTIVE***<<<<=|DESTRUCTIVE**<<<<==|DESTRUCTIVE*<<<<===|DESTRUCTIVE<<<<====|extreme|EXTREME|EXTREME*|EXTREME**|EXTREME***|EXTREME****|EXTREME****<|EXTREME****<<|EXTREME****<<<|EXTREME****<<<<|EXTREME***<<<<=|EXTREME**<<<<==|EXTREME*<<<<===|EXTREME<<<<====|porcine|PORCINE|PORCINE*|PORCINE**|PORCINE***|PORCINE***<|PORCINE***<<|PORCINE***<<<|PORCINE***<<<<|divine|daunting|terminal} |
− | #VAR damagevalues {4|8|10|12|16|19|24|28|32|36|40|43|49|54|58|62|67|73|78|81|88|95|97|101|120|130|140|143|152|161|174|185|195|202|239|266|292|316|330|353|378|410|437|469|492|539|580|616|652|714|774|824|872|900|1000|1075|1150|1250|1350|1445|1516|1609|1750|1850|1945|2090|2340|2500|2700|2900|3000|3250|3500|3750|4000|0}
| + | #VAR verbBinary {%if( %1 = %2, %1, %if( %eval( %item( @dvalues, %eval( (%1+%2)/2.0)) > %3), @verbBinary(%1, %eval( (%1+%2)/2.0),%3), @verbBinary( %eval( (%1+%2)/2.0),%2,%3)))} |
− | #VAR damageverbshort {mauling|decimating|devastating|pulverizing|maiming|eviscerating|mutilating|disemboweling|dismembering|massacring|mangling|demolishing|obliterating|annihilating|terminal}
| |
− | #TRIGGER {^(%w)[^>;]{strike|strikes|hits|blast|blasts} (%w)[^>;]with([* ])(%w)[* ]%w[!.]} {#IF {%ismember( %lower( %1), @DClist)} {#VAR %lower( %1) %replaceitem( %eval( %item( @damagevalues, %ismember( %concat( %4, %3), @damageverbs))+%item( @{%lower( %1)}, 17)), 17, @{%lower( %1)});#VAR %lower( %1) %replaceitem( %eval( %item( @{%lower( %1)}, %eval( %ismember( %lower( %4), @damageverbshort)+1))+1) , %eval( %ismember( %lower( %4), @damageverbshort)+1) , @{%lower( %1)})};#IF {%ismember( %lower( %2), @DClist)} {#VAR %lower( %2) %replaceitem( %eval( %item( @damagevalues, %ismember( %concat( %4, %3), @damageverbs))+%item( @{%lower( %2)}, 18)), 18, @{%lower( %2)})};#IF {%lower( %2) = "you"} {#VAR %lower( your) %replaceitem( %eval( %item( @damagevalues, %ismember( %concat( %4, %3), @damageverbs))+%item( @{%lower( your)}, 18)), 18, @{%lower( your)})}}
| |
| #TRIGGER {^Welcome back to the AVATAR System, {lord|lady|hero} (%w).} {#var dcCurChar %lower( %1)} | | #TRIGGER {^Welcome back to the AVATAR System, {lord|lady|hero} (%w).} {#var dcCurChar %lower( %1)} |
| #TRIGGER {^Welcome back to the AVATAR System (%w),} {#var dcCurChar %lower( %1)} | | #TRIGGER {^Welcome back to the AVATAR System (%w),} {#var dcCurChar %lower( %1)} |
| + | #TRIGGER {^({@DCtrack})[^>;] %w[^>;]with[*>= ]({@dverbshort})([*<= ])%w[!.]} {#var %1.%2 %eval( @%1.%2 + 1);#var %1.dealt %eval( @%1.dealt + %item( @dvalues, %ismember( %concat( %2, %3), @dverbs)));#var %1.attacks %eval( @%1.attacks + 1)} "" {notrig} |
| + | #TRIGGER {^%w[^>;] ({@DCtrack})[^>;]with[*>= ]({@dverbshort})([*<= ])%w[!.]} {#var %1.taken %eval( @%1.taken + %item( @dvalues, %ismember( %concat( %2, %3), @dverbs)))} |
| + | #TRIGGER {%w is leading (%d) player[ s]with} {#if (%1 < 10) {#loop %1 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}} {#loop 1,9 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}};#loop 10,%1 {#temp {^%i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}};#t- "%w is leading (%d) player[ s]with";group} "" {disable} |
| #MENU {DC Add} {dcadd %lower( %selword)} "" | | #MENU {DC Add} {dcadd %lower( %selword)} "" |
| #MENU {DC Clear} {dcclear} "" | | #MENU {DC Clear} {dcclear} "" |
− | #MENU {DC List} {#ec -;#ec --- CHARACTERS ON THE DC LIST ---;#fo @DClist {#ec %i}} "" | + | #MENU {DC List} {#ec -;#ec --- CHARACTERS ON THE DC LIST ---;#fo @DCnames {#ec %i}} "" |
| #CLASS 0 | | #CLASS 0 |
− |
| |
− | '''NOTE:''' There is a way for this to count your spell damage as well, but for now it's on the [[Talk:Zmud Damage Counter|discussion page]] of this article.
| |
| | | |
| == Usage == | | == Usage == |
− | Type dcstart [numberofgroupmembers] to initialize, for example if there are 3 people in the group type dcstart 3. This will create 3 temporary triggers that trigger on the group command, send the group command to the mud, and add the people in the group except yourself because you are always tracked. This command also clears all previous data. Please also note that if you specify more groupies then your current group size you will have to go in and manually delete some of the temporary triggers. (Will be of format ^ #|??? ???? (&%wDCtemp1) )
| |
− |
| |
− | If you need to add one member, or would rather add members by hand, you can either right click on their name and select DC Add, or you can type dcadd [name]. If You type dcadd [name] make sure to type the name in lowercase.
| |
− |
| |
− | Two other commands have also been added to the right click menu. DC Clear, which will clear out the tracking variables and DC List which will tell you who you are tracking.
| |
− |
| |
− | Whenever you want to display a report type dcrep and you will be presented with a few options that are self explanatory.
| |
− |
| |
− | I've also included a dcrepto alias, this will set where you report the information to. Please try to keep this off of channels and confined to gt, say or perhaps buddy, as I'm sure it would bother someone.
| |
− |
| |
− | == Summary ==
| |
− |
| |
− | dcstart # - add your groupies to the tracking, # should be your group size<sup>[1]</sup>
| |
− |
| |
− | dcrep - report information (ties to dcrep1 and dcrep2)
| |
− |
| |
− | dcclear - clear out all information (dcstart will do this also)
| |
| | | |
− | dcadd - add a member (dcstart will do this, as will the right click menu)
| + | dcs- Reset all variables and add everyone in your group (including yourself) |
| | | |
− | dcrepto - select a channel to output to (please be considerate)
| + | dcrep- Brings up a menu with report options |
| | | |
− | right click - add, show or clear groupies
| + | dcrepto- Select your output channel (gt, say ect.) |
− | | |
− | <sup>[1]</sup> If # is larger then group size you will need to manually delete the left over triggers of format ^ #|??? ???? (&%wDCtemp1)
| |
| | | |
| == How It Works == | | == How It Works == |
− | This code's a bit convoluted so my apologies ahead of time.
| |
| | | |
− | #TRIGGER {^(%w)[^>;]{strike|strikes|hits|blast|blasts} (%w)[^>;]with([* ])(%w)[* ]%w[!.]} {#IF {%ismember( %lower( %1), @DClist)} {#VAR %lower( %1) %replaceitem( %eval( %item( @damagevalues, %ismember( %concat( %4, %3), @damageverbs))+%item( @{%lower( %1)}, 17)), 17, @{%lower( %1)});#VAR %lower( %1) %replaceitem( %eval( %item( @{%lower( %1)}, %eval( %ismember( %lower( %4), @damageverbshort)+1))+1) , %eval( %ismember( %lower( %4), @damageverbshort)+1) , @{%lower( %1)})};#IF {%ismember( %lower( %2), @DClist)} {#VAR %lower( %2) %replaceitem( %eval( %item( @damagevalues, %ismember( %concat( %4, %3), @damageverbs))+%item( @{%lower( %2)}, 18)), 18, @{%lower( %2)})};#IF {%lower( %2) = "you"} {#VAR %lower( your) %replaceitem( %eval( %item( @damagevalues, %ismember( %concat( %4, %3), @damageverbs))+%item( @{%lower( your)}, 18)), 18, @{%lower( your)})}}
| + | Coming soon |
− | This is where all of the damage tracking takes place. The trigger line should trigger for all damage done by someone to someone, including melee, magic and throwing. There are 3 if statements including within. The first of which checks to see if someone on the tracking list dealt the damage. If they did it updates the array adding the hit and the damage.
| |
− | The Second if statement checks to see if someone on the list was dealt damage. If they were it will add how much damage they took. Since damage dealt by you is shown as 'your' while damage dealt to you is shown to 'you' there is a third if statement that does the same as the second but just catches damage done to you.
| |
− | | |
− | #VAR damageverbs {weak|punishing|surprising|amazing|astonishing|mauling|MAULING|MAULING*|MAULING**|MAULING***|decimating|DECIMATING|DECIMATING*|DECIMATING**|DECIMATING***|devastating|DEVASTATING|DEVASTATING*|DEVASTATING**|DEVASTATING***|pulverizing|PULVERIZING|PULVERIZING*|PULVERIZING**|PULVERIZING***|maiming|MAIMING|MAIMING*|MAIMING**|MAIMING***|eviscerating|EVISCERATING|EVISCERATING*|EVISCERATING**|EVISCERATING***|mutilating|MUTILATING|MUTILATING*|MUTILATING**|MUTILATING***|disemboweling|DISEMBOWELING|DISEMBOWELING*|DISEMBOWELING**|DISEMBOWELING***|dismembering|DISMEMBERING|DISMEMBERING*|DISMEMBERING**|DISMEMBERING***|massacring|MASSACRING|MASSACRING*|MASSACRING**|MASSACRING***|mangling|MANGLING|MANGLING*|MANGLING**|MANGLING***|demolishing|DEMOLISHING|DEMOLISHING*|DEMOLISHING**|DEMOLISHING***|obliterating|OBLITERATING|OBLITERATING*|OBLITERATING**|OBLITERATING***|annihilating|ANNIHILATING|ANNIHILATING*|ANNIHILATING**|ANNIHILATING***|terminal}
| |
− | #VAR damagevalues {4|8|10|12|16|19|24|28|32|36|40|43|49|54|58|62|67|73|78|81|88|95|97|101|120|130|140|143|152|161|174|185|195|202|239|266|292|316|330|353|378|410|437|469|492|539|580|616|652|714|774|824|872|900|1000|1075|1150|1250|1350|1445|1516|1609|1750|1850|1945|2090|2340|2500|2700|2900|3000|3250|3500|3750|4000|0}
| |
− | #VAR damageverbshort {mauling|decimating|devastating|pulverizing|maiming|eviscerating|mutilating|disemboweling|dismembering|massacring|mangling|demolishing|obliterating|annihilating|terminal}
| |
− | These three variables are used to track the damage. A lookup is used on the first one given your damage to find an index to the second giving us the numerical value. The third variable is used to track damage on a per hit basis so you can see a breakdown, this is mapped to a fourth variable that is created per group member where their information is stored.
| |
− | | |
− | #ALIAS dcadd {#additem DClist %1;#var %1 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0;#echo %1 added to the damage counting list.}
| |
− | This alias creates a string list for a given name and adds them to the list of all people you are tracking.
| |
− | | |
− | #ALIAS dcclear {#FO @DClist {#UNVAR %i};#VAR DClist "";#VAR DCterm 0;dcadd your;#ECHO Damagecounter reset. Please re-add groupies.}
| |
− | This alias will clear the list of group members and delete the variables storing their info.
| |
− | | |
− | #ALIAS dcrep {#YESNO "What report would you like to show?" {Short report (total damage done and taken) :dcrep1} {Breakdown of damage verbs:dcrep2}}
| |
− | #ALIAS dcrep1 {#if (!@DCreport) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DCreportfor "your"} {Everyone:#VAR DCreportfor @DClist} {Partial:#VAR DCreportfor %pick( p:Who would you like to display reports for?:, @DClist)};dctermcheck;dcavecheck;#VAR DCtemp1 0;#VAR DCtemp2 0;#VAR DCtemp3 0;#VAR DCtemp4 0;#FO @DClist {#IF {%eval( %item( @{%i}, 19) > @DCtemp1)} {#VAR DCtemp1 %item( @{%i}, 19)};#IF {%eval( %item( @{%i}, 18) > @DCtemp2)} {#VAR DCtemp2 %item( @{%i}, 18)};#ADD DCtemp3 %item( @{%i}, 19);#ADD DCtemp4 %item( @{%i}, 18)};#FO @DCreportfor {@DCreport ~|w~|Stats for %if( %i="your", Myself, %upper( %left( %i, 1))%right( %i, 1)): Dealt->%if( %item( @{%i}, 19) = @DCtemp1, ~|BC~|, ~|C~|)%item( @{%i}, 19)~|w~|~(%eval( %item( @{%i}, 19)*100/@DCtemp3)%~) Average~[~|bk~|%item( @damageverbs, %item( @{%i}, 20))~|w~|~] Taken->%if( %item( @{%i}, 18) = @DCtemp2, ~|BR~|, ~|R~|)%item( @{%i}, 18)~|w~|~(%eval( %item( @{%i}, 18)*100/@DCtemp4)%~)}}
| |
− | #ALIAS dcrep2 {#if (!@DCreport) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DCreportfor "your"} {Everyone:#VAR DCreportfor @DClist} {Partial:#VAR DCreportfor %pick( p:Who would you like to display reports for?:, @DClist)};#FO @DCreportfor {@DCreport Breakdown for %if( %i="your", Myself, %upper( %left( %i, 1))%right( %i, 1)):%if( %item( @{%i}, 1), %char( 32)Tickling~(~|c~|%item( @{%i}, 1)~|n~|~))%if( %item( @{%i}, 2), %char( 32)Mauling~(~|c~|%item( @{%i}, 2)~|n~|~))%if( %item( @{%i}, 3), %char( 32)Decimating~(~|c~|%item( @{%i}, 3)~|n~|~))%if( %item( @{%i}, 4), %char( 32)Devasting~(~|c~|%item( @{%i}, 4)~|n~|~))%if( %item( @{%i}, 5), %char( 32)Pulverizing~(~|c~|%item( @{%i}, 5)~|n~|~))%if( %item( @{%i}, 6), %char( 32)Maiming~(~|c~|%item( @{%i}, 6)~|n~|~))%if( %item( @{%i}, 7), %char( 32)Eviscerating~(~|c~|%item( @{%i}, 7)~|n~|~))%if( %item( @{%i}, 8), %char( 32)Mutilating~(~|c~|%item( @{%i}, 8)~|n~|~))%if( %item( @{%i}, 9), %char( 32)Disemboweling~(~|c~|%item( @{%i}, 9)~|n~|~))%if( %item( @{%i}, 10), %char( 32)Dismembering~(~|c~|%item( @{%i}, 10)~|n~|~))%if( %item( @{%i}, 11), %char( 32)Massacring~(~|c~|%item( @{%i}, 11)~|n~|~))%if( %item( @{%i}, 12), %char( 32)Mangling~(~|c~|%item( @{%i}, 12)~|n~|~))%if( %item( @{%i}, 13), %char( 32)Demolishing~(~|c~|%item( @{%i}, 13)~|n~|~))%if( %item( @{%i}, 14), %char( 32)Obliterating~(~|c~|%item( @{%i}, 14)~|n~|~))%if( %item( @{%i}, 15), %char( 32)Annihilating~(~|c~|%item( @{%i}, 15)~|n~|~))%if( %item( @{%i}, 16), %char( 32)Terminal~(~|c~|%item( @{%i}, 16)~|n~|~))}}
| |
− | These three aliases will display all the information that has been tracked. The first alias will ask you if you would like to just show the total and average damage (dcrep1) or a breakdown of all the hits (dcrep2). Both dcrep1 and 2 check to make sure you have a location you're outputting to.
| |
− | dcrep1 uses 4 temporary variables to calculated who dealt the most damage, who took the most damage and what percentage of the total your damage dealt and received was. Next it goes through each groupie you selected to have a report printed for and prints the information.
| |
− | dcrep2 is a large block of if functions, basically for each group member it checks to see if they had any hits of each verb, if they did it will display the verb and how many hits it was.
| |
− | | |
− | #ALIAS dctermcheck {#FO @DClist {#VAR DCtemp1 0;#VAR DCtemp2 %i;#LOOP 2,15 {#VAR DCtemp1 %eval( @DCtemp1+%item( @{@DCtemp2}, %I))};#VAR DCtemp1 %eval( %item( @{@DCtemp2}, 17)/@DCtemp1);#VAR DCtemp1 %eval( @DCtemp1 * %item( @{@DCtemp2}, 16));#VAR DCtemp1 %eval( @DCtemp1 + %item( @{@DCtemp2}, 17));#VAR @DCtemp2 %replaceitem( @DCtemp1, 19, @{@DCtemp2})};#ECHO Terminal hits have been processed.}
| |
− | #ALIAS dcavecheck {#FO @DClist {#var DCtemp1 %i;#var DCtemp2 0;#LOOP 1,15 {#VAR DCtemp2 %eval( @DCtemp2+%item( @{@DCtemp1}, %I))};#var DCtemp2 %eval( %item( @{%i}, 17)/@DCtemp2);#var DCtemp3 %item( @damagevalues, 75);#var DCtemp4 75;#WHILE (@DCtemp2 < @DCtemp3) {#add DCtemp4 -1;#var DCtemp3 %item( @damagevalues, @DCtemp4)};#VAR %i %replaceitem( @DCtemp4, 20, @{%i})}}
| |
− | dctermcheck and dcavecheck are both internal aliases. As their names would suggest dctermcheck handles terminal hits, taking your total damage and dividing it by the number of non terminal hits you have done in a run. It then multiplies this number by the number of terminal hits you have had and comes out with a figure for total damage done.
| |
− | dcavecheck handles finding what your average damage has been. It will take your total damage and divide by the number of hits (should be combined with the previous I suppose) and then loops through each verb value till it finds one that your average damage is higher then. It then takes this index number and stores it in a characters tracking variable to later be displayed as a verb.
| |
− | | |
− | #ALIAS dcstart {dcclear;#if (!@DCreport) {@DCreport = gt} {};#if {%1} {@DCtemp1 = %1} {@DCtemp1 = 2;#prompt DCtemp1 "How many people are in the group?"};#if (@DCtemp < 10) {#loop @DCtemp1 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}} {#loop 1,9 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}};#loop 10,@DCtemp {#temp {^%i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}};group}
| |
− | Is the quick start groupie adding alias. It checks to make sure that where your reports go to is defined, then if you've included a group size it will go through and create a temporary trigger for each group slot. Then it calls the group function so the triggers go off and each each person in the group. The temporary triggers are defined not to add whatever character you are on because the triggers are set up to track you automatically. It also checks if you wanted to add more then 9 people, because in that case the trigger for 10-99 is slightly different.
| |
− | | |
− | #TRIGGER {^Welcome back to the AVATAR System, {lord|lady|hero} (%w).} {#var dcCurChar %lower( %1)}
| |
− | #TRIGGER {^Welcome back to the AVATAR System (%w),} {#var dcCurChar %lower( %1)}
| |
− | #MENU {DC Add} {dcadd %lower( %selword)} ""
| |
− | #MENU {DC Clear} {dcclear} ""
| |
− | #MENU {DC List} {#ec -;#ec --- CHARACTERS ON THE DC LIST ---;#fo @DClist {#ec %i}} ""
| |
− | These last odds and ends store your current character, because damage tracking for yourself is done automatically (and not by your name), and adds 3 menu options for easy access to a few of the aliases.
| |
| | | |
| [[Category: Zmud Scripting]] | | [[Category: Zmud Scripting]] |
Tested for zmud 7.21
This trigger and alias set will track damage dealt and received for all on a member list. For each line of combat the hit is stored by damage verb if the person attacking was on the list, and a running damage total is kept. Damage values were taken from Damage. Report options include a display of {damage done/ average hit/ damage taken} or a breakdown of all hits by verb. You may display these for yourself, everyone or a partial selection. Latest triggers should catch anything with a name and a damage verb.
Code
For quick input copy this section and paste it into a *.txt file. Then, in zMUD, go to "Settings -> File -> Import
#CLASS {dcounter}
#ALIAS dcadd {#additem DCtrack %1;#additem DCnames %1;#echo %1 added to the damage counting list.}
#ALIAS dcrep {#YESNO "What report would you like to show?" {Short report (total damage done and taken) :dcrep1} {Breakdown of damage verbs:dcrep2}}
#ALIAS dcclear {#FO @DCtrack {#UNVAR %i};#VAR DCtrack "you";#VAR DCnames "";dcadd your;#ECHO Damagecounter reset. Please re-add groupies.}
#ALIAS dcrep2 {#if (!@DCreport) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DC.reportfor "your"} {Everyone:#VAR DC.reportfor @DCnames} {Partial:#VAR DC.reportfor %pick( p:Who would you like to display reports for?:, @DCnames)};#LOOPDB @you {#var your.%key %eval( %db( @your, %key) + %val)};#var you "";#FO @DC.reportfor {#var %i.out "";#FO @dverbshort {#if (%db( @{%i}, %I)) {#var %i.out %concat( %db( @{%i}, out), " ", %I, ~(, ~|c~|, %db( @{%i}, %I), ~|n~|, ~))}};@DC.repto Breakdown for %if( %i="your", Myself, %upper( %left( %i, 1))%right( %i, 1)):%db( @{%i}, out)}}
#ALIAS dcrep1 {#if (!@DC.repto) {dcrepto};#YESNO "Who would you like to report for?" {Yourself:#VAR DC.reportfor "your"} {Everyone:#VAR DC.reportfor @DCnames} {Partial:#VAR DC.reportfor %pick( p:Who would you like to display reports for?:, @DCnames)};#LOOPDB @you {#var your.%key %eval( %db( @your, %key) + %val)};#var you "";#var DC.total 0;#var DC.taken 0;#var DC.totalcount 0;#var DC.takencount 0;#FO @DCnames {#if ( %db( @{%i}, terminal)) {#var %i.total %eval( %db( @{%i}, dealt) + %db( @{%i}, dealt)/(%db( @{%i}, attacks) - %db( @{%i}, terminal))* %db( @{%i}, terminal))} {#var %i.total %db( @{%i}, dealt)};#if (@DC.total < %db( @{%i}, total)) {#var DC.total %db( @{%i}, total)};#if (@DC.taken < %db( @{%i}, taken)) {#var DC.taken %db( @{%i}, taken)};#var DC.totalcount %eval( @DC.totalcount + %db( @{%i}, total));#var DC.takencount %eval( @DC.takencount + %db( @{%i}, taken))};#FO @DC.reportfor {#if ( %db( @{%i}, terminal)) {#var %i.verb %item( @dverbs, %eval( @verbBinary(1,139,%eval(%db(@{%i},dealt)/(%db(@{%i},attacks)- %db( @{%i}, terminal)))) -1))} {#var %i.verb %item( @dverbs, %eval( @verbBinary(1,139,%eval(%db(@{%i},dealt)/%db(@{%i},attacks))) -1))};@DC.repto %if( %i="your", I, %upper( %left( %i, 1))%right( %i, 1)): Dealt->%if( %db( @{%i}, total) = @DC.total, ~|bc~|, ~|c~|)%db( @{%i}, total)|n|~(%eval( %db( @{%i}, total)*100/@DC.totalcount)%~) Averaged~[|bk|%replace( %db( @{%i}, verb), "=", "-")|n|~] Took->%if( %db( @{%i}, taken) = @DC.taken, ~|br~|, ~|r~|)%db( @{%i}, taken)|n|~(%eval( %db( @{%i}, taken)*100/@DC.takencount)%~)}}
#ALIAS dcs {dcclear;#if (!@DCreport) {@DCreport = gt} {};#t+ "%w is leading (%d) player[ s]with";groupstat}
#ALIAS dcrepto {#prompt DC.repto "Enter the channel to output to, eg gt, say ect."}
#VAR dverbshort {nil|pathetic|weak|punishing|surprising|amazing|astonishing|mauling|decimating|devastating|pulverizing|maiming|eviscerating|mutilating|disemboweling|dismembering|massacring|mangling|demolishing|obliterating|annihilating|eradicating|vaporizing|destructive|extreme|porcine|divine|daunting|terminal}
#VAR dvalues {0|2|4|8|10|14|18|22|26|30|34|38|42|46|49|55|60|65|70|75|80|85|90|95|100|110|120|130|140|150|160|170|180|190|200|225|250|275|300|325|350|375|400|425|450|475|500|540|574|606|675|730|769|810|884|915|1000|1100|1200|1300|1400|1500|1600|1700|1800|1900|2000|2200|2400|2600|2800|3000|3200|3400|3600|3800|4100|4500|5007|5901|5902|6200|6500|7000|7500|7800|8200|8500|9000|9500|10000|11000|12000|13000|14000|15000|16500|18000|19000|20000|21000|22000|23000|24000|25000|26000|27000|28000|29000|30000|31000|32000|33000|34000|35000|36000|37000|38000|39000|40000|41000|42000|43000|44500|47000|48000|50000|51000|53000|55000|57000|59000|61000|65000|70000|75000|80000|100000|0}
#VAR dverbs {nil|pathetic|weak|punishing|surprising|amazing|astonishing|mauling|MAULING|MAULING*|MAULING**|MAULING***|decimating|DECIMATING|DECIMATING*|DECIMATING**|DECIMATING***|devastating|DEVASTATING|DEVASTATING*|DEVASTATING**|DEVASTATING***|pulverizing|PULVERIZING|PULVERIZING*|PULVERIZING**|PULVERIZING***|maiming|MAIMING|MAIMING*|MAIMING**|MAIMING***|eviscerating|EVISCERATING|EVISCERATING*|EVISCERATING**|EVISCERATING***|mutilating|MUTILATING|MUTILATING*|MUTILATING**|MUTILATING***|disemboweling|DISEMBOWELING|DISEMBOWELING*|DISEMBOWELING**|DISEMBOWELING***|dismembering|DISMEMBERING|DISMEMBERING*|DISMEMBERING**|DISMEMBERING***|massacring|MASSACRING|MASSACRING*|MASSACRING**|MASSACRING***|mangling|MANGLING|MANGLING*|MANGLING**|MANGLING***|demolishing|DEMOLISHING|DEMOLISHING*|DEMOLISHING**|DEMOLISHING***|obliterating|OBLITERATING|OBLITERATING*|OBLITERATING**|OBLITERATING***|annihilating|ANNIHILATING|ANNIHILATING*|ANNIHILATING**|ANNIHILATING***|ANNIHILATING***<|ANNIHILATING***<<|ANNIHILATING***<<<|ANNIHILATING***<<<<|eradicating|ERADICATING|ERADICATING*|ERADICATING**|ERADICATING***|ERADICATING***<|ERADICATING***<<|ERADICATING***<<<|ERADICATING***<<<<|vaporizing|VAPORIZING|VAPORIZING*|VAPORIZING**|VAPORIZING***|VAPORIZING***<|VAPORIZING***<<|VAPORIZING***<<<|VAPORIZING***<<<<|destructive|DESTRUCTIVE|DESTRUCTIVE*|DESTRUCTIVE**|DESTRUCTIVE***|DESTRUCTIVE****|DESTRUCTIVE****<|DESTRUCTIVE****<<|DESTRUCTIVE****<<<|DESTRUCTIVE****<<<<|DESTRUCTIVE***<<<<=|DESTRUCTIVE**<<<<==|DESTRUCTIVE*<<<<===|DESTRUCTIVE<<<<====|extreme|EXTREME|EXTREME*|EXTREME**|EXTREME***|EXTREME****|EXTREME****<|EXTREME****<<|EXTREME****<<<|EXTREME****<<<<|EXTREME***<<<<=|EXTREME**<<<<==|EXTREME*<<<<===|EXTREME<<<<====|porcine|PORCINE|PORCINE*|PORCINE**|PORCINE***|PORCINE***<|PORCINE***<<|PORCINE***<<<|PORCINE***<<<<|divine|daunting|terminal}
#VAR verbBinary {%if( %1 = %2, %1, %if( %eval( %item( @dvalues, %eval( (%1+%2)/2.0)) > %3), @verbBinary(%1, %eval( (%1+%2)/2.0),%3), @verbBinary( %eval( (%1+%2)/2.0),%2,%3)))}
#TRIGGER {^Welcome back to the AVATAR System, {lord|lady|hero} (%w).} {#var dcCurChar %lower( %1)}
#TRIGGER {^Welcome back to the AVATAR System (%w),} {#var dcCurChar %lower( %1)}
#TRIGGER {^({@DCtrack})[^>;] %w[^>;]with[*>= ]({@dverbshort})([*<= ])%w[!.]} {#var %1.%2 %eval( @%1.%2 + 1);#var %1.dealt %eval( @%1.dealt + %item( @dvalues, %ismember( %concat( %2, %3), @dverbs)));#var %1.attacks %eval( @%1.attacks + 1)} "" {notrig}
#TRIGGER {^%w[^>;] ({@DCtrack})[^>;]with[*>= ]({@dverbshort})([*<= ])%w[!.]} {#var %1.taken %eval( @%1.taken + %item( @dvalues, %ismember( %concat( %2, %3), @dverbs)))}
#TRIGGER {%w is leading (%d) player[ s]with} {#if (%1 < 10) {#loop %1 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}} {#loop 1,9 {#temp {^ %i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}};#loop 10,%1 {#temp {^%i|??? ???? (&%wDCtemp1)} {#if (%lower( @DCtemp1) != @dcCurChar) {dcadd %lower( @DCtemp1)}}}};#t- "%w is leading (%d) player[ s]with";group} "" {disable}
#MENU {DC Add} {dcadd %lower( %selword)} ""
#MENU {DC Clear} {dcclear} ""
#MENU {DC List} {#ec -;#ec --- CHARACTERS ON THE DC LIST ---;#fo @DCnames {#ec %i}} ""
#CLASS 0
Usage
dcs- Reset all variables and add everyone in your group (including yourself)
dcrep- Brings up a menu with report options
dcrepto- Select your output channel (gt, say ect.)
How It Works
Coming soon