]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - misc/tools/WeaponEncounterProfile.pm
handle gametype and map name
[xonotic/xonotic.git] / misc / tools / WeaponEncounterProfile.pm
index 4218be62325c11a21c888b41504d95e0b1b33f39..55547bbf70be61f164b1fcec8f6413ce2138ef16 100644 (file)
@@ -17,6 +17,7 @@ sub load($)
        my ($self) = @_;
        $self->{stats} = {};
        $self->{mapstats} = {};
+       $self->{typestats} = {};
        $self->{addrstats} = {};
        $self->{allstats} = {};
        open my $fh, "<", $self->{fn}
@@ -53,7 +54,12 @@ sub load($)
                        if $targweapon ne int $targweapon;
                $attackerweapon = int $self->weaponid_from_name($attackerweapon)
                        if $attackerweapon ne int $attackerweapon;
-               $self->{stats}->{$addr}{$map}{$attackerweapon}{$targweapon} += $value;
+               $map =~ /(.*?)_(.*)/
+                       or do { warn "invalid map name: $map"; next; };
+               (my $type, $map) = ($1, $2);
+               $self->{stats}->{$addr}{$type}{$map}{$attackerweapon}{$targweapon} += $value;
+               $self->{typestats}->{$type}{$attackerweapon}{$targweapon} += $value;
+               $self->{typemapstats}->{$type}{$map}{$attackerweapon}{$targweapon} += $value;
                $self->{mapstats}->{$map}{$attackerweapon}{$targweapon} += $value;
                $self->{addrstats}->{$addr}{$attackerweapon}{$targweapon} += $value;
                $self->{allstats}->{$attackerweapon}{$targweapon} += $value;
@@ -82,14 +88,19 @@ sub save($)
 
 sub event($$$$$$)
 {
-       my ($self, $addr, $map, $attackerweapon, $targweapon, $type) = @_;
+       my ($self, $addr, $map, $attackerweapon, $targweapon, $value) = @_;
        return if $map eq '';
-       if($type > 0)
+       if($value > 0)
        {
-               $self->{stats}->{$addr}{$map}{$attackerweapon}{$targweapon} += $type;
-               $self->{mapstats}->{$map}{$attackerweapon}{$targweapon} += $type;
-               $self->{addrstats}->{$addr}{$attackerweapon}{$targweapon} += $type;
-               $self->{allstats}->{$attackerweapon}{$targweapon} += $type;
+               $map =~ /(.*?)_(.*)/
+                       or do { warn "invalid map name: $map"; return; };
+               (my $type, $map) = ($1, $2);
+               $self->{stats}->{$addr}{$type}{$map}{$attackerweapon}{$targweapon} += $value;
+               $self->{typemapstats}->{$type}{$map}{$attackerweapon}{$targweapon} += $value;
+               $self->{typestats}->{$type}{$attackerweapon}{$targweapon} += $value;
+               $self->{mapstats}->{$map}{$attackerweapon}{$targweapon} += $value;
+               $self->{addrstats}->{$addr}{$attackerweapon}{$targweapon} += $value;
+               $self->{allstats}->{$attackerweapon}{$targweapon} += $value;
        }
 }
 
@@ -101,19 +112,35 @@ sub allstats($$)
        # send per-host stats
        while(my ($k, $v) = each %{$self->{addrstats}})
        {
-               $callback->($k, undef, $v);
+               $callback->($k, undef, undef, $v);
+       }
+       # send per-type stats
+       while(my ($k, $v) = each %{$self->{typestats}})
+       {
+               $callback->(undef, $k, undef, $v);
+       }
+       # send per-type-map stats
+       while(my ($k1, $v1) = each %{$self->{typemapstats}})
+       {
+               while(my ($k2, $v2) = each %$v1)
+               {
+                       $callback->(undef, $k1, $k2, $v2);
+               }
        }
        # send per-map stats
        while(my ($k, $v) = each %{$self->{mapstats}})
        {
-               $callback->(undef, $k, $v);
+               $callback->(undef, undef, $k, $v);
        }
        # send single stats
        while(my ($k1, $v1) = each %{$self->{stats}})
        {
                while(my ($k2, $v2) = each %$v1)
                {
-                       $callback->($k1, $k2, $v2);
+                       while(my ($k3, $v3) = each %$v2)
+                       {
+                               $callback->($k1, $k2, $k3, $v3);
+                       }
                }
        }
 }