--- deliantra/server/lib/cf.pm 2006/03/07 13:44:43 1.7 +++ deliantra/server/lib/cf.pm 2006/03/16 21:08:16 1.8 @@ -214,6 +214,9 @@ } }; +############################################################################# +# load/save/clean perl data associated with a map + *on_mapclean = sub { my $map = shift->{map}; @@ -253,9 +256,56 @@ open my $fh, ">:raw", "$path.cfperl" or die "$path.cfperl: $!"; + stat $path; + + print $fh Storable::nfreeze { + size => (stat _)[7], + time => (stat _)[9], + version => 1, + obs => $obs, + }; + + chmod SAVE_MODE, "$path.cfperl"; # very racy, but cf-compatible *g* + } else { + unlink "$path.cfperl"; + } +}; + +############################################################################# +# load/save perl data associated with player->ob objects + +*on_player_load = sub { + my ($event) = @_; + my $path = $event->{message}; + my $ob = $event->{who}; + + open my $fh, "<:raw", "$path.cfperl" + or return; # no perl data + + my $data = Storable::thaw do { local $/; <$fh> }; + + $data->{version} <= 1 + or return; # too new + + %$ob = %{$data->{ob}}; +}; + +*on_player_save = sub { + my ($event) = @_; + 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, - obs => $obs, + ob => $ob, }; chmod SAVE_MODE, "$path.cfperl"; # very racy, but cf-compatible *g*