--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/03 22:04:25 1.52 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/03 22:58:37 1.54 @@ -86,25 +86,29 @@ } sub _stat_numdiff { - my ($old, $new) = @_; + my ($self, $name, $old, $new) = @_; my $diff = $new - $old; - $diff > 0 ? "+$diff" : $diff + + $diff = 0.01 * int $diff * 100; + + 0.1 >= abs $diff ? () + : $diff < 0 ? "$name$diff" : "$name+$diff" } sub _stat_skillmaskdiff { - my ($old, $new) = @_; - - my @diff; + my ($self, $name, $old, $new) = @_; - my $changed = $old ^ $new; + my $diff = $old ^ $new + or return; - my @diff = map { - $changed & (1<<$_) - ? (($new & (1<<$_) ? "+" : "-") . "skill$_") - : () - } - 0 .. 31; # TODO + my @diff = map + { + $diff & $_ + ? (($new & $_ ? "+" : "-") . $self->{spell_paths}{$_}) + : () + } + sort { $a <=> $b } keys %{$self->{spell_paths}}; join "", @diff } @@ -159,11 +163,7 @@ } if ( - my @diffs = map { - $stats->{$_->[0]} != $prev->{$_->[0]} - ? $_->[2] . $_->[1]->($prev->{$_->[0]}, $stats->{$_->[0]}) : (); - } - @statchange + my @diffs = map $_->[1]->($self, $_->[2], $prev->{$_->[0]}, $stats->{$_->[0]}), @statchange ) { my $msg = "stat change: " . (join " ", @diffs); $self->{statusbox}->add ($msg, group => $msg, fg => [0.8, 1, 0.2, 1], timeout => 10);