--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/03 22:32:52 1.53 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/11 19:53:23 1.58 @@ -86,16 +86,21 @@ } sub _stat_numdiff { - my ($self, $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 ($self, $old, $new) = @_; + my ($self, $name, $old, $new) = @_; - my $diff = $old ^ $new; + my $diff = $old ^ $new + or return; my @diff = map { @@ -158,11 +163,7 @@ } if ( - my @diffs = map { - $stats->{$_->[0]} != $prev->{$_->[0]} - ? $_->[2] . $_->[1]->($self, $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); @@ -421,9 +422,9 @@ } sub face_update { - my ($self, $facenum, $face) = @_; + my ($self, $facenum, $face, $changed) = @_; - $self->{tilecache}->put ($face->{id} => $face->{image}); #TODO: try to avoid duplicate writes + $self->{tilecache}->put ($face->{id} => $face->{image}) if $changed; $self->set_texture ($face->{id} => delete $face->{image}); } @@ -652,7 +653,10 @@ my ($self) = @_; $CFClient::UI::ROOT->on_refresh ("update_containers_$self" => sub { - for my $tag (keys %{ delete $self->{update_container} }) { + my $todo = delete $self->{update_container} + or return; + + for my $tag (keys %$todo) { if ($tag == 0) { update_floorbox; $::INVR->set_items ($self->{container}{0}) @@ -706,12 +710,6 @@ } else { $self->{update_container}{$item->{container}}++; $self->update_containers; -# if ($item->{container} == 0) { -# update_floorbox; -# update_container (0); -# } elsif ($item->{container} == $self->{player}{tag}) { -# $::INV->set_items ($self->{container}{$item->{container}}) -# } } } @@ -923,6 +921,7 @@ #Carp::cluck "debug\n";#d# #todo# enable: destroy gets called twice because scalar keys {} is 1 + $self->{conn}->send ("ext npc_dialog_end $self->{token}") if $self->{token}; delete $self->{conn}{npc_dialog}; $self->{conn}->disconnect_ext ($self->{token});