diff options
Diffstat (limited to 'lib/MasterServer/Util')
| -rwxr-xr-x | lib/MasterServer/Util/KFStatsWatcher.pm | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/MasterServer/Util/KFStatsWatcher.pm b/lib/MasterServer/Util/KFStatsWatcher.pm new file mode 100755 index 0000000..916446e --- /dev/null +++ b/lib/MasterServer/Util/KFStatsWatcher.pm @@ -0,0 +1,59 @@ + +package MasterServer::Util::KFStatsWatcher; + +use strict; +use warnings; +use AnyEvent::IO; +use Exporter 'import'; + +our @EXPORT = qw| read_kfstats |; + +################################################################################ +## Read Killing Floor Statistics from the file. +################################################################################ +sub read_kfstats { + my ($self) = shift; + + # open file and read content + return aio_load($self->{kfstats_file}, + sub { + my $f = shift; + + # process player data as blocks + my $block = ""; + + # read player stats + for my $l (split /^/, $f) { + + # add data to block + $block .= $l; + + # if block contains last item GamesLost, process block + if ($l =~ m/^(GamesLost=)/i){ + + # treat as array + my @s = split "\n", $block; + + # process items + my %h; + for my $m (@s) { + if ($m =~ m/(KFPlayerStats\])$/i) { $h{UTkey} = substr $m, 1, index($m, " ")-1; } + if ($m =~ m/=/) {$h{substr $m, 0, index($m, "=")} = substr $m, index($m, "=")+1; } + } + + # store in db + $self->write_kfstats(\%h); + + # clear block for next player + $block = ""; + } + } + + #notify + $self->log("kfstat", "Updated Killing Floor player stats."); + } + ); +} + + +1; |
