Mercurial > hg > batmud > ggrtf
view gm-hitstats.tf @ 1655:356c3c26aee6
Get rid of ISO-8859-1 in copyrights.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 28 Sep 2021 02:24:25 +0300 |
parents | 87f45da5abd1 |
children |
line wrap: on
line source
;; ;; GgrTF::HitStats - Weapon hit statistics ;; (C) Copyright 2008-2015 Matti Hamalainen (Ggr) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License ;; version 2 as published by the Free Software Foundation. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; file "COPYING.txt" for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; if not, write to the Free Software ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ;; MA 02110-1301 USA. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; NOTICE! This file requires GgrTF (version 0.6.15 or later) to be loaded. ;; /loaded GgrTF::HitStats /test prdefmodule("HitStats") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Hit stats ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /set hst_types=bash pierce slash shield whip tiger monk unarmed claw bite ;@command /mhits <off|gag|short> ;@desc Change hit message mangling: ;@desc $off$ = no mangling, pass hit message through unaltered; ;@desc $short$ = use short messages, collecting ALL your hit messages into ;@desc one line like "You jab, dodge, parry, CRUELLY TATTER."; ;@desc $gag$ = gag messages completely. /prdefsetting -n"mhits" -d"Mangle YOUR hit messages" -s"off gag short" ;@command /weapon1 <type> ;@desc Set the weapon types you are using. Currently only two concurrent ;@desc types are supported. Notice, that if you are using several weapons ;@desc of SAME type/class, you only need to set one (separate weapons of ;@desc same type are counted as one.) Use "/weapon1" without arguments to ;@desc see supported types. Use /weapon[2-4] to set the other weapon types, if any. /eval /prdefsetting -n"weapon1" -d"Wielded weapon #1 type for hitstats" -s"none %{hst_types}" /eval /prdefsetting -n"weapon2" -d"Wielded weapon #2 type for hitstats" -s"none %{hst_types}" /eval /prdefsetting -n"weapon3" -d"Wielded weapon #3 type for hitstats" -s"none %{hst_types}" /eval /prdefsetting -n"weapon4" -d"Wielded weapon #4 type for hitstats" -s"none %{hst_types}" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Gag something according to stats ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /def -i prset =\ /eval /if (%{1}=~"") /set %{1}=%{2}%%;/endif /def -i ghitstats_gag =\ /if (set_mhits=~"gag") \ /substitute -ag%;\ /elseif (set_mhits=~"short") \ /substitute -ag%;\ /set hst_short=%{hst_short} %{1},%;\ /endif /def -i ghitstats_mangle =\ /if (set_mhits=~"short" & hst_short!~"")\ /let _htmp=$[substr(hst_short,1,-1)]%;\ /echo -p @{BCwhite}You %{_htmp}.@{n}%;\ /set hst_short=%;\ /endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Initialization ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /def -i ghitstats_init_do =\ /while ({#})\ /set lst_%{1}_hits=%;\ /shift%;\ /done /def -i ghitstats_init =\ /prset set_mhits off%;\ /prset set_weapon1 none%;\ /prset set_weapon2 none%;\ /prset set_weapon3 none%;\ /prset set_weapon4 none%;\ /set lst_special=%;\ /set hst_crithit=0%;\ /set lst_special=%;\ /test prlist_insert("event_battle_round", "ghitstats_mangle")%;\ /ghitstats_init_do %{hst_types} /ghitstats_init ;; Reset the statistics /def -i ghitstats_reset_special =\ /while ({#})\ /set hst_%{1}=0%;\ /shift%;\ /done /def -i ghitstats_reset_do =\ /let _hname=%{1}%;/shift%;\ /while ({#})\ /set hst_%{_hname}_%{1}=0%;\ /set hst_c%{_hname}_%{1}=0%;\ /shift%;\ /done /def -i ghitstats_reset =\ /while ({#})\ /set hst_%{1}_total=0%;\ /set hst_%{1}_crits=0%;\ /eval /ghitstats_reset_do %{1} %%{lst_%{1}_hits}%;\ /shift%;\ /done ;@command /hstreset ;@desc Reset and clear current hit-statistics. /def -i hstreset =\ /msq @{BCgreen}Resetting hit statistics!@{n}%;\ /set hst_special=0%;\ /ghitstats_reset %{hst_types}%;\ /ghitstats_reset_special %{lst_special} ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /def -i prgetshort =\ /let _tpos=$[strchr({1}," ")]%;\ /if (_tpos >= 0)\ /return strcat(substr({1},0,3),"_",substr({1},_tpos+1))%;\ /else \ /return {1}%;\ /endif ;; Define a special message (for misses, parries, etc.) /def -i prdefhitspec =\ /if (!getopts("s:n:t:r", "")) /gerror Invalid prdefhitspec definition!%;/break%;/endif%;\ /if (opt_s=~""|opt_n=~""|opt_t=~"") /gerror Required arguments not specified!%;/break%;/endif%;\ /if (opt_r) /let _ttype=regexp%;/else /let _ttype=simple%;/endif%;\ /test prlist_insert("lst_special", opt_n)%;\ /def -i -p99999 -F -m%{_ttype} -t"%{opt_t}" ghitstats_%{opt_n} =\ /ghitstats_gag %{opt_s}%%;\ /set hst_special=$$[hst_special+1]%%;\ /set hst_%{opt_n}=$$[hst_%{opt_n}+1] ;; Detect critical hits /def -i -mregexp -t"^You score a \*?CRITICAL\*? hit!$" ghitstats_crit =\ /set hst_crithit=1 ;; Define a hit message /def -i prdefhit =\ /let _hname=%{1}_%{2}%;\ /let _yname=$[prgetshort({3})]%;\ /test prlist_insert("lst_%{1}_hits", {2})%;\ /set hst_name_%{_hname}=%{3}%;\ /def -i -p99999 -F -mregexp -t"^(You|(Cackling|Smiling|Grinning) (demonically|devilishly|diabolically) you) %{3} (.*)$$" ghitstats_%{_hname} =\ /if (regmatch("^(your|on) ", {P4})) /break%%;/endif%%;\ /ghitstats_gag %{_yname}%%;\ /set hst_%{1}_total=$$[hst_%{1}_total+1]%%;\ /if (hst_crithit==1) \ /set hst_%{1}_crits=$$[hst_%{1}_crits+1]%%;\ /set hst_c%{_hname}=$$[hst_c%{_hname}+1]%%;\ /else \ /set hst_%{_hname}=$$[hst_%{_hname}+1]%%;\ /endif%%;\ /set hst_crithit=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Hit message definitions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Specials /prdefhitspec -n"misses" -t"^You miss(\.$| )" -r -s"miss" /prdefhitspec -n"dodges" -t"^You (successfully dodge |dodge\.$)" -r -s"dodge" /prdefhitspec -n"parries" -t"^(You parry\.|You successfully parry )" -r -s"parry" /prdefhitspec -n"ripostes" -t"...AND riposte." -s"riposte" /prdefhitspec -n"tumbles" -t"^You tumble .+?'s dodge\.$" -r -s"tumble" /prdefhitspec -n"stuns" -t"^You STUN |WHO avoids being stunned with" -r -s"STUN" /prdefhitspec -n"stunmanos" -t"^LAA LAALIS PASKI ASTUSTA TULLUT ROU" -r -s"stunmano" ;; Bash hit messages /set hst_name_bash=Bash/Bludgeons /test prdefhit("bash", 1, "lightly jostle") /test prdefhit("bash", 2, "jostle") /test prdefhit("bash", 3, "butt") /test prdefhit("bash", 4, "bump") /test prdefhit("bash", 5, "thump") /test prdefhit("bash", 6, "stroke") /test prdefhit("bash", 7, "thrust") /test prdefhit("bash", 8, "jab") /test prdefhit("bash", 9, "bash") /test prdefhit("bash", 10, "strike") /test prdefhit("bash", 11, "sock") /test prdefhit("bash", 12, "cuff") /test prdefhit("bash", 13, "knock") /test prdefhit("bash", 14, "flail") /test prdefhit("bash", 15, "whack") /test prdefhit("bash", 16, "beat") /test prdefhit("bash", 17, "smash") /test prdefhit("bash", 18, "cruelly beat") /test prdefhit("bash", 19, "badly smash") /test prdefhit("bash", 20, "horribly thrust") /test prdefhit("bash", 21, "savagely sock") /test prdefhit("bash", 22, "savagely strike") /test prdefhit("bash", 23, "REALLY WHACK") /test prdefhit("bash", 24, "BRUTALLY BEAT") /test prdefhit("bash", 25, "CRUELLY CUFF") /test prdefhit("bash", 26, "BARBARICALLY BASH") ;; Pierce hit messages /set hst_name_pierce=Pierce/Poles+Sblades /test prdefhit("pierce", 1, "barely scratch") /test prdefhit("pierce", 2, "scratch") /test prdefhit("pierce", 3, "slightly pierce") /test prdefhit("pierce", 4, "pierce") /test prdefhit("pierce", 5, "puncture") /test prdefhit("pierce", 6, "sink") /test prdefhit("pierce", 7, "bore") /test prdefhit("pierce", 8, "crater") /test prdefhit("pierce", 9, "cavitate") /test prdefhit("pierce", 10, "shaft") /test prdefhit("pierce", 11, "gorge") /test prdefhit("pierce", 12, "really poke") /test prdefhit("pierce", 13, "riddle") /test prdefhit("pierce", 14, "dig into") /test prdefhit("pierce", 15, "dig through") /test prdefhit("pierce", 16, "chasm") /test prdefhit("pierce", 17, "drill") /test prdefhit("pierce", 18, "powerfully perforate") /test prdefhit("pierce", 19, "powerfully pierce") /test prdefhit("pierce", 20, "cruelly crater") /test prdefhit("pierce", 21, "savagely shaft") /test prdefhit("pierce", 22, "uncontrollably dig through") /test prdefhit("pierce", 23, "REALLY DRILL") /test prdefhit("pierce", 24, "CRUELLY RIDDLE ") /test prdefhit("pierce", 25, "BRUTALLY BORE") /test prdefhit("pierce", 26, "BARBARICALLY PIERCE") ;; Shield hit messages /set hst_name_shield=Shield Bash /test prdefhit("shield", 1, "lightly shove") /test prdefhit("shield", 2, "lightly batter") /test prdefhit("shield", 3, "lightly push") /test prdefhit("shield", 4, "lightly bash") /test prdefhit("shield", 5, "lightly slam") /test prdefhit("shield", 6, "lightly crush") /test prdefhit("shield", 7, "heavily shove") /test prdefhit("shield", 8, "batter") /test prdefhit("shield", 9, "heavily push") /test prdefhit("shield", 10, "heavily bash") /test prdefhit("shield", 11, "slam") /test prdefhit("shield", 12, "crush") /test prdefhit("shield", 13, "really shove") /test prdefhit("shield", 14, "really batter") /test prdefhit("shield", 15, "really push") /test prdefhit("shield", 16, "really bash") /test prdefhit("shield", 17, "really slam") /test prdefhit("shield", 18, "really crush") /test prdefhit("shield", 19, "cruelly shove") /test prdefhit("shield", 20, "cruelly batter") /test prdefhit("shield", 21, "cruelly push") /test prdefhit("shield", 22, "cruelly bash") /test prdefhit("shield", 23, "REALLY SLAM") /test prdefhit("shield", 24, "REALLY CRUSH") /test prdefhit("shield", 25, "BRUTALLY CRUSH") /test prdefhit("shield", 26, "BARBARICALLY SLAM") ;; Slash hit messages /set hst_name_slash=Slash/Lblades+Axes /test prdefhit("slash", 1, "barely graze") /test prdefhit("slash", 2, "solidly slash") /test prdefhit("slash", 3, "gash") /test prdefhit("slash", 4, "lightly cut") /test prdefhit("slash", 5, "cut") /test prdefhit("slash", 6, "tear") /test prdefhit("slash", 7, "incise") /test prdefhit("slash", 8, "shred") /test prdefhit("slash", 9, "horribly shred") /test prdefhit("slash", 10, "slash") /test prdefhit("slash", 11, "incisively cut") /test prdefhit("slash", 12, "incisively tear") /test prdefhit("slash", 13, "slit") /test prdefhit("slash", 14, "cruelly tatter") /test prdefhit("slash", 15, "savagely shave") /test prdefhit("slash", 16, "rive") /test prdefhit("slash", 17, "cruelly slash") /test prdefhit("slash", 18, "uncontrollably slash") /test prdefhit("slash", 19, "quickly cut") /test prdefhit("slash", 20, "savagely rip") /test prdefhit("slash", 21, "BRUTALLY TEAR") /test prdefhit("slash", 22, "SAVAGELY SHRED") /test prdefhit("slash", 23, "CRUELLY REND") /test prdefhit("slash", 24, "BARBARICALLY REND") /test prdefhit("slash", 25, "DISMEMBER") /test prdefhit("slash", 26, "CRUELLY DISMEMBER") ;; Tiger martial arts hit messages /set hst_name_tiger=Tiger martial arts /test prdefhit("tiger", 1, "tickle") /test prdefhit("tiger", 2, "step on") /test prdefhit("tiger", 3, "grasp") /test prdefhit("tiger", 4, "toe-kick") /test prdefhit("tiger", 5, "knee") /test prdefhit("tiger", 6, "elbow") /test prdefhit("tiger", 7, "elbow-smash") /test prdefhit("tiger", 8, "stomp-kick") /test prdefhit("tiger", 9, "foot-step") /test prdefhit("tiger", 10, "twist and throw") /test prdefhit("tiger", 11, "finger-jab") /test prdefhit("tiger", 12, "joint-twist") /test prdefhit("tiger", 13, "back kick") /test prdefhit("tiger", 14, "spinning back kick") /test prdefhit("tiger", 15, "phoenix-eye punch") /test prdefhit("tiger", 16, "spinning backfist") /test prdefhit("tiger", 17, "jump up and side-kick") /test prdefhit("tiger", 18, "dragon-claw") /test prdefhit("tiger", 19, "feint high and then cruelly groin-rip") /test prdefhit("tiger", 20, "snake-strike, blocking the chi of") /test prdefhit("tiger", 21, "pummel, with dozens of chain punches,") /test prdefhit("tiger", 22, "leap, spin, and swallow-tail KICK") /test prdefhit("tiger", 23, "DEVASTATE, with a thrusting blow,") /test prdefhit("tiger", 24, "BRUTALLY THROAT RIP") /test prdefhit("tiger", 25, "SAVAGELY BELLY SMASH") /test prdefhit("tiger", 26, "CRUELLY TIGER STRIKE") ;; Monk martial arts hit messages /set hst_name_monk=Monk martial arts /test prdefhit("monk", 1, "slap") /test prdefhit("monk", 2, "push") /test prdefhit("monk", 3, "shove") /test prdefhit("monk", 4, "grab") /test prdefhit("monk", 5, "punch") /test prdefhit("monk", 6, "foot-sweep") /test prdefhit("monk", 7, "evade, and then reverse") /test prdefhit("monk", 8, "grab and shoulder-toss") /test prdefhit("monk", 9, "snap-kick") /test prdefhit("monk", 10, "joint-lock") /test prdefhit("monk", 11, "unbalance, then expertly throw") /test prdefhit("monk", 12, "stop-kick") /test prdefhit("monk", 13, "reverse spin-kick") /test prdefhit("monk", 14, "pull, then cruelly throat chop") /test prdefhit("monk", 15, "trip and head-stomp") /test prdefhit("monk", 16, "savagely hammerfist") /test prdefhit("monk", 17, "craftily feint and then grab and flip") /test prdefhit("monk", 18, "fluidly evade, duck under and spine-chop") /test prdefhit("monk", 19, "nerve-grab, causing unendurable pain to") /test prdefhit("monk", 20, "perform a lightning fast punch and throw combo on") /test prdefhit("monk", 21, "grab, headbutt, then NECK-SNAP") /test prdefhit("monk", 22, "masterfully evade then JUMP-KICK") /test prdefhit("monk", 23, "DEVASTATINGLY HEAD-THROW") /test prdefhit("monk", 24, "HORRIBLY DOUBLE-KICK") /test prdefhit("monk", 25, "MASTERFULLY POWER-THROW") /test prdefhit("monk", 26, "DEVASTATINGLY SNAP-KICK") ;; Unarmed hit messages /set hst_name_unarmed=Unarmed /test prdefhit("unarmed", 1, "pat") /test prdefhit("unarmed", 2, "spank") /test prdefhit("unarmed", 3, "smack") /test prdefhit("unarmed", 4, "bitchslap") /test prdefhit("unarmed", 5, "lightly strike") /test prdefhit("unarmed", 6, "boot") /test prdefhit("unarmed", 7, "kick") /test prdefhit("unarmed", 8, "suckerpunch") /test prdefhit("unarmed", 9, "ankle-stomp") /test prdefhit("unarmed", 10, "stomp") /test prdefhit("unarmed", 11, "knee-kick") /test prdefhit("unarmed", 12, "badly kick") /test prdefhit("unarmed", 13, "jump-kick") /test prdefhit("unarmed", 14, "uppercut") /test prdefhit("unarmed", 15, "kidneypunch") /test prdefhit("unarmed", 16, "spin-kick") /test prdefhit("unarmed", 17, "headbutt") /test prdefhit("unarmed", 18, "cruelly headbutt") /test prdefhit("unarmed", 19, "dragon-punch") /test prdefhit("unarmed", 20, "savagely triple-kick") /test prdefhit("unarmed", 21, "roundhouse") /test prdefhit("unarmed", 22, "bodyslam") /test prdefhit("unarmed", 23, "run into") /test prdefhit("unarmed", 24, "REALLY SMASH") /test prdefhit("unarmed", 25, "BRUTALLY BOOT") /test prdefhit("unarmed", 26, "BARBARICALLY BEAT") ;; Whip hit messages /set hst_name_whip=Whip /test prdefhit("whip", 1, "lash") /test prdefhit("whip", 2, "lightly lash") /test prdefhit("whip", 3, "lightly flog") /test prdefhit("whip", 4, "slightly slash") /test prdefhit("whip", 5, "flog") /test prdefhit("whip", 6, "slice") /test prdefhit("whip", 7, "sharply slice") /test prdefhit("whip", 8, "lightly flick") /test prdefhit("whip", 9, "flick") /test prdefhit("whip", 10, "whip") /test prdefhit("whip", 11, "wantonly whip") /test prdefhit("whip", 12, "welt") /test prdefhit("whip", 13, "lightly blister") /test prdefhit("whip", 14, "blister") /test prdefhit("whip", 15, "badly flog") /test prdefhit("whip", 16, "slightly gash") /test prdefhit("whip", 17, "savagely cut") /test prdefhit("whip", 18, "sharply cut") /test prdefhit("whip", 19, "thrash") /test prdefhit("whip", 20, "cruelly thrash") /test prdefhit("whip", 21, "slightly slit") /test prdefhit("whip", 22, "strap") /test prdefhit("whip", 23, "lather") /test prdefhit("whip", 24, "SADISTICALLY SLASH") /test prdefhit("whip", 25, "MADLY THRASH") /test prdefhit("whip", 26, "WILDLY WHIP") ;; Claw hit messages /set hst_name_claw=Claw /test prdefhit("claw", 1, "lightly claw") /test prdefhit("claw", 2, "claw") /test prdefhit("claw", 3, "barely scrape") /test prdefhit("claw", 4, "scrape") /test prdefhit("claw", 5, "prick") /test prdefhit("claw", 6, "stick") /test prdefhit("claw", 7, "lacerate") /test prdefhit("claw", 8, "perforate") /test prdefhit("claw", 9, "badly perforate") /test prdefhit("claw", 10, "wound") /test prdefhit("claw", 11, "badly wound") /test prdefhit("claw", 12, "savagely claw") /test prdefhit("claw", 13, "cruelly perforate") /test prdefhit("claw", 14, "plunge") /test prdefhit("claw", 15, "lightly eviscerate") /test prdefhit("claw", 16, "ram") /test prdefhit("claw", 17, "clash") /test prdefhit("claw", 18, "savagely strike") /test prdefhit("claw", 19, "eviscerate") /test prdefhit("claw", 20, "cruelly rip") /test prdefhit("claw", 21, "nastily plunge") /test prdefhit("claw", 22, "cruelly ram") /test prdefhit("claw", 23, "WHACK") /test prdefhit("claw", 24, "RELENTLESSLY RAM") /test prdefhit("claw", 25, "CRUELLY CLAW") /test prdefhit("claw", 26, "BARBARICALLY LACERATE") ;; Bite hit messages /set hst_name_bite=Bite /test prdefhit("bite", 1, "sample") /test prdefhit("bite", 2, "morsel") /test prdefhit("bite", 3, "nibble") /test prdefhit("bite", 4, "taste") /test prdefhit("bite", 5, "bite") /test prdefhit("bite", 6, "nip") /test prdefhit("bite", 7, "really taste") /test prdefhit("bite", 8, "snap") /test prdefhit("bite", 9, "munch") /test prdefhit("bite", 10, "chomp") /test prdefhit("bite", 11, "gnaw") /test prdefhit("bite", 12, "split") /test prdefhit("bite", 13, "masticate") /test prdefhit("bite", 14, "badly chomp") /test prdefhit("bite", 15, "chew") /test prdefhit("bite", 16, "rip") /test prdefhit("bite", 17, "cruelly gnaw") /test prdefhit("bite", 18, "cruelly chomp") /test prdefhit("bite", 19, "savagely snap") /test prdefhit("bite", 20, "brutally bite") /test prdefhit("bite", 21, "meanly munch") /test prdefhit("bite", 22, "really chew") /test prdefhit("bite", 23, "horribly munch") /test prdefhit("bite", 24, "SAVAGELY CHEW") /test prdefhit("bite", 25, "UNCONTROLLABLY GNAW") /test prdefhit("bite", 26, "BARBARICALLY BITE") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Output helper functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; /def -i gline_add =\ /eval /set hst_str_%{hst_line}=%%{hst_str_%{hst_line}}%{1}%;\ /set hst_line=$[hst_line+1] /def -i gline_clear =\ /let _line=0%;\ /while (_line <= {1})\ /eval /unset hst_str_%{_line}%;\ /let _line=$[_line+1]%;\ /done /def -i gline_print =\ /let _line=1%;\ /while (_line <= {1})\ /let _line_s=$[prgetval(strcat("hst_str_",_line))]%;\ /if (_line_s!~"") /msw %{_line_s}|%;/endif%;\ /let _line=$[_line+1]%;\ /done /def -i ghitstats_print =\ /let _nlines=%{3}%;\ /let _hst_name=$[prgetval(strcat("hst_name_",{1},"_",{2}))]%;\ /let _hst_hits=$[prgetval(strcat("hst_",{1},"_",{2}))]%;\ /let _hst_crits=$[prgetval(strcat("hst_c",{1},"_",{2}))]%;\ /if (_hst_hits > 0 | _hst_crits > 0)\ /if (hst_noprint==1)\ /set hst_total=$[hst_total + _hst_hits]%;\ /set hst_crits=$[hst_crits + _hst_crits]%;\ /set hst_count=$[hst_count + 1]%;\ /set hst_line=$[hst_line+1]%;\ /else \ /if (hst_total > 0)\ /let _htmp=$[trunc((100 * _hst_hits) / hst_total)]%;\ /else \ /let _htmp=0%;\ /endif%;\ /if (hst_crits > 0)\ /let _ctmp=$[trunc((100 * _hst_crits) / hst_crits)]%;\ /else \ /let _ctmp=0%;\ /endif%;\ /test gline_add("|$[pad(substr(_hst_name,0,20),-20)]: @{Cgreen}$[pad(_hst_hits, 6)]@{n} (@{BCgreen}$[pad(_htmp,3)]\\%@{n}):@{Cred}$[pad(_hst_crits, 6)]@{n} (@{BCred}$[pad(_ctmp,3)]\\%@{n})")%;\ /endif%;\ /else \ /if (hst_noprint==0 & hst_line >= _nlines)\ /test gline_add("| ")%;\ /endif%;\ /endif /def -i ghitstats_dolist =\ /let _thn=%{1}%;/shift%;\ /let _thc=%{1}%;/shift%;\ /while ({#}) /test ghitstats_print(_thn,{1},_thc)%;/shift%;/done /def -i ghitstats_list =\ /set hst_column=$[hst_column+1]%;\ /set hst_line=0%;\ /test gline_add("-----------------------------------------------")%;\ /let _hst_name=$[prgetval(strcat("hst_name_",{1}))]%;\ /test gline_add("+-| @{BCgreen}$[pad(_hst_name,-20)]@{n} |----------------------")%;\ /eval /ghitstats_dolist %{1} %%{hst_nlines%{hst_column}} %%{lst_%{2}_hits} ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Main stats output macro ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;@command /hstats ;@desc Print out hit statistics in a pretty table (see the warning above ;@desc about the terminal width, though.) /def -i hstats =\ /set hst_count=0%;\ /set hst_total=0%;\ /set hst_crits=0%;\ /msw ,----------------------.%;\ /msw | @{BCgreen}GgrTF@{n} @{Cyellow}Hit Statistics@{n} |%;\ \ /set hst_column=0%;\ /set hst_noprint=1%;\ /if (set_weapon1!~"none") /ghitstats_list %{set_weapon1} %{set_weapon1}%;/endif%;\ /set hst_nlines1=%{hst_line}%;\ /if (set_weapon2!~"none") /ghitstats_list %{set_weapon2} %{set_weapon2}%;/endif%;\ /set hst_nlines2=%{hst_line}%;\ /if (hst_nlines1 >= hst_nlines2)\ /set hst_nlines=%{hst_nlines1}%;\ /set hst_list=%{set_weapon1}%;\ /else \ /set hst_nlines=%{hst_nlines2}%;\ /set hst_list=%{set_weapon2}%;\ /endif%;\ /gline_clear %{hst_nlines}%;\ /set hst_column=0%;\ /set hst_noprint=0%;\ /if (set_weapon1!~"none") /ghitstats_list %{set_weapon1} %{hst_list}%;/endif%;\ /if (set_weapon2!~"none") /set hst_str_0=%{hst_str_0}-%;/ghitstats_list %{set_weapon2} %{hst_list}%;/endif%;\ /if (hst_str_0!~"") /msw +%{hst_str_0}.%;/endif%;\ /gline_print $[hst_nlines]%;\ /if (hst_str_0!~"") /msw +%{hst_str_0}+%;/endif%;\ /gline_clear %{hst_nlines}%;\ \ \ /set hst_column=0%;\ /set hst_noprint=1%;\ /if (set_weapon3!~"none") /ghitstats_list %{set_weapon3} %{set_weapon3}%;/endif%;\ /set hst_nlines1=%{hst_line}%;\ /if (set_weapon4!~"none") /ghitstats_list %{set_weapon4} %{set_weapon4}%;/endif%;\ /set hst_nlines2=%{hst_line}%;\ /if (hst_nlines3 >= hst_nlines4)\ /set hst_nlines=%{hst_nlines1}%;\ /set hst_list=%{set_weapon1}%;\ /else \ /set hst_nlines=%{hst_nlines2}%;\ /set hst_list=%{set_weapon2}%;\ /endif%;\ /gline_clear %{hst_nlines}%;\ /set hst_column=0%;\ /set hst_noprint=0%;\ /if (set_weapon3!~"none") /ghitstats_list %{set_weapon3} %{hst_list}%;/endif%;\ /if (set_weapon4!~"none") /set hst_str_0=%{hst_str_0}-%;/ghitstats_list %{set_weapon4} %{hst_list}%;/endif%;\ /if (hst_str_0!~"") /msw +%{hst_str_0}.%;/endif%;\ /gline_print $[hst_nlines]%;\ /if (hst_str_0!~"") /msw +%{hst_str_0}+%;/endif%;\ /gline_clear %{hst_nlines}%;\ \ /msw +-| @{BCred}Totals@{n} |-------------------------------------------+%;\ /let _qtmp=$[hst_total + hst_misses]%;\ /if (_qtmp != 0) \ /let _qtmp1=$[trunc((100 * hst_total) / _qtmp)]%;\ /let _qtmp2=$[trunc((100 * hst_misses) / _qtmp)]%;\ /let _qtmp3=$[trunc((100 * hst_crits) / _qtmp)]%;\ /else \ /let _qtmp1=0%;\ /let _qtmp2=0%;\ /let _qtmp3=0%;\ /endif%;\ /msw | Hits..: @{Cgreen}$[pad(hst_total,-10)]@{n} (@{BCgreen}$[pad(_qtmp1,3)]\%@{n}) | Crits: @{Cred}$[pad(hst_crits,-10)]@{n} (@{BCred}$[pad(_qtmp3,3)]\%@{n}) |%;\ /msw | Misses: @{Cyellow}$[pad(hst_misses,-10)]@{n} (@{BCyellow}$[pad(_qtmp2,3)]\%@{n}) | Total hit types: @{BCwhite}$[pad(hst_count,-7)]@{n} |%;\ /msw +------------------------------------------------------+%;\ /msw | Dodges.....: @{BCmagenta}$[pad(hst_dodges,-12)]@{n} | Parries...: @{BCyellow}$[pad(hst_parries,-12)]@{n} |%;\ /msw | Tumbles....: @{BCgreen}$[pad(hst_tumbles, -12)]@{n} | Stuns.....: @{BCred}$[pad(hst_stuns,-12)]@{n} |%;\ /msw | Ripostes...: @{BCgreen}$[pad(hst_ripostes,-12)]@{n} | Stun mano.: @{BCred}$[pad(hst_stunmanos,-12)]@{n} |%;\ /msw `------------------------------------------------------'