X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic.git;a=blobdiff_plain;f=misc%2Ftools%2Fweapon-profiler-analyzer.pl;h=942cf0cf4903aa963bfb7fbc94eb98093418bebe;hp=dcab0a22cd0bf6eca57fcfd153a7e15192844cca;hb=bfc69978b4305249257df73577c0e78c846be407;hpb=e5832bf2ecac60a672a29c85cd8dec341a215e1c diff --git a/misc/tools/weapon-profiler-analyzer.pl b/misc/tools/weapon-profiler-analyzer.pl index dcab0a22..942cf0cf 100755 --- a/misc/tools/weapon-profiler-analyzer.pl +++ b/misc/tools/weapon-profiler-analyzer.pl @@ -128,7 +128,7 @@ sub Evaluate($) my %allweps; while(my ($k, $v) = each %$matrix) { - for(my ($k2, $v2) = each %$v) + while(my ($k2, $v2) = each %$v) { next if $k eq $k2; next if !$v2; @@ -191,10 +191,11 @@ sub out_text($@) } elsif($event eq 'startmatrix') { - my ($addr, $map, @columns) = @data; + my ($addr, $type, $map, @columns) = @data; $addr ||= 'any'; $map ||= 'any'; - print "For server @{[$addr || 'any']} map @{[$map || 'any']}:\n"; + $type ||= 'any'; + print "For server $addr type $type map $map:\n"; } elsif($event eq 'startrow') { @@ -233,6 +234,20 @@ sub out_text($@) } } +sub html($) +{ + my ($s) = @_; + $s =~ s/[^-_A-Za-z0-9 ]/&#@{[ord $&]};/g; + return $s; +} + +sub nospace($) +{ + my ($s) = @_; + $s =~ s/ //g; + return $s; +} + sub out_html($@) { my ($event, @data) = @_; @@ -242,18 +257,19 @@ sub out_html($@) } elsif($event eq 'startmatrix') { - my ($addr, $map, @columns) = @data; + my ($addr, $type, $map, @columns) = @data; $addr ||= 'any'; + $type ||= 'any'; $map ||= 'any'; - print "

For server @{[$addr || 'any']} map @{[$map || 'any']}:

\n"; + print "

For server $addr type $type map $map

\n"; print "\n"; - printf '', $stats->weaponid_to_model($_), $stats->weaponid_to_name($_) for @columns; + printf '', $stats->weaponid_to_model($_), html $stats->weaponid_to_name($_), html nospace $stats->weaponid_to_name($_) for @columns; print "\n"; } elsif($event eq 'startrow') { my ($row, $val) = @data; - printf '', $stats->weaponid_to_model($row), $stats->weaponid_to_name($row), defined $val ? sprintf("%8.5f", $val) : "N/A"; + printf '', $stats->weaponid_to_model($row), html $stats->weaponid_to_name($row), html nospace $stats->weaponid_to_name($row), defined $val ? sprintf("%8.5f", $val) : "N/A"; } elsif($event eq 'cell') { @@ -292,18 +308,51 @@ sub out_html($@) } } -my $out = $ENV{html} ? \&out_html : \&out_text; +my $out_html_cache_fh; +sub out_html_cache($@) +{ + my ($event, @data) = @_; + if($event eq 'startmatrix') + { + # open out file + my ($addr, $type, $map, @columns) = @data; + if(!defined $addr) + { + $type ||= ':any'; + $map ||= ':any'; + mkdir "$type"; + open $out_html_cache_fh, ">", "$type/$map" + or warn "open $type/$map: $!"; + select $out_html_cache_fh; + } + } + out_html($event, @data) + if defined $out_html_cache_fh; + if($event eq 'endmatrix') + { + # close out file + select STDOUT; + close $out_html_cache_fh + if defined $out_html_cache_fh; + undef $out_html_cache_fh; + } +} + +my $out = + $ENV{html_cache} ? \&out_html_cache : + $ENV{html} ? \&out_html : + \&out_text; LoadData(); $out->(start => ()); $stats->allstats(sub { - my ($addr, $map, $data) = @_; + my ($addr, $type, $map, $data) = @_; my $values = Evaluate $data; my $valid = defined [values %$values]->[0]; my @weapons_sorted = sort { $valid ? $values->{$b} <=> $values->{$a} : $a <=> $b } keys %$values; my $min = undef; - $out->(startmatrix => ($addr, $map, @weapons_sorted)); + $out->(startmatrix => ($addr, $type, $map, @weapons_sorted)); for my $row(@weapons_sorted) { $out->(startrow => $row, ($valid ? $values->{$row} : undef));
WeaponRating%s%s
%s%s
%s%s