--- deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/03 22:58:37 1.54 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2006/07/11 15:30:23 1.57 @@ -424,7 +424,8 @@ sub face_update { my ($self, $facenum, $face) = @_; - $self->{tilecache}->put ($face->{id} => $face->{image}); #TODO: try to avoid duplicate writes + $self->{tilecache}->put ($face->{id} => $face->{image}) + if $self->{tilecache}->get ($face->{id}) ne $face->{image}; $self->set_texture ($face->{id} => delete $face->{image}); } @@ -653,7 +654,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 +711,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 +922,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});