--- deliantra/server/lib/cf.pm 2006/03/24 18:20:41 1.10 +++ deliantra/server/lib/cf.pm 2006/03/26 15:52:03 1.11 @@ -279,15 +279,26 @@ my $path = $event->{message}; my $ob = $event->{who}; - open my $fh, "<:raw", "$path.cfperl" - or return; # no perl data + if (open my $fh, "<:raw", "$path.cfperl") { - my $data = Storable::thaw do { local $/; <$fh> }; + #d##TODO#remove - $data->{version} <= 1 - or return; # too new + my $data = Storable::thaw do { local $/; <$fh> }; - %$ob = %{$data->{ob}}; + $data->{version} <= 1 + or return; # too new + + %$ob = %{$data->{ob}}; + return; + } + + for my $o ($ob, $ob->inv) { + if (my $value = $o->get_ob_key_value ("_perl_data")) { + $o->set_ob_key_value ("_perl_data"); + + %$o = %{ Storable::thaw pack "H*", $value }; + } + } }; *on_player_save = sub { @@ -295,23 +306,10 @@ my $path = $event->{message}; my $ob = $event->{who}; - if (keys %$ob) { - open my $fh, ">:raw", "$path.cfperl" - or die "$path.cfperl: $!"; - - stat $path; - - print $fh Storable::nfreeze { - size => (stat _)[7], - time => (stat _)[9], - version => 1, - ob => $ob, - }; - - chmod SAVE_MODE, "$path.cfperl"; # very racy, but cf-compatible *g* - } else { - unlink "$path.cfperl"; - } + $_->set_ob_key_value (_perl_data => unpack "H*", Storable::nfreeze $_) + for grep %$_, $ob, $ob->inv; + + unlink "$path.cfperl";#d##TODO#remove }; register "", __PACKAGE__;