--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/03 22:04:25 1.52 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/11 13:27:31 1.56 @@ -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); @@ -653,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}) @@ -707,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}}) -# } } } @@ -924,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});