ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.56 by root, Wed Aug 30 08:28:33 2006 UTC vs.
Revision 1.60 by root, Thu Aug 31 06:23:19 2006 UTC

476 } 476 }
477 } 477 }
478} 478}
479 479
480sub object_freezer_save { 480sub object_freezer_save {
481 my ($filename, $objs) = @_; 481 my ($filename, $rdata, $objs) = @_;
482 482
483 if (@$objs) { 483 if (length $$rdata) {
484 warn sprintf "saving %s (%d,%d)\n",
485 $filename, length $$rdata, scalar @$objs;
486
484 open my $fh, ">:raw", "$filename.pst~"; 487 if (open my $fh, ">:raw", "$filename~") {
488 chmod SAVE_MODE, $fh;
489 syswrite $fh, $$rdata;
490 close $fh;
491
492 if (@$objs && open my $fh, ">:raw", "$filename.pst~") {
493 chmod SAVE_MODE, $fh;
485 syswrite $fh, Storable::nfreeze { version => 1, objs => $objs }; 494 syswrite $fh, Storable::nfreeze { version => 1, objs => $objs };
486 close $fh; 495 close $fh;
487 chmod SAVE_MODE, "$filename.pst~";
488 rename "$filename.pst~", "$filename.pst"; 496 rename "$filename.pst~", "$filename.pst";
497 } else {
498 unlink "$filename.pst";
499 }
500
501 rename "$filename~", $filename;
502 } else {
503 warn "FATAL: $filename~: $!\n";
504 }
489 } else { 505 } else {
506 unlink $filename;
490 unlink "$filename.pst"; 507 unlink "$filename.pst";
491 } 508 }
492
493 chmod SAVE_MODE, "$filename~";
494 rename "$filename~", $filename;
495} 509}
496 510
497sub object_thawer_load { 511sub object_thawer_load {
498 my ($filename) = @_; 512 my ($filename) = @_;
499 513
764 defined $path or return; 778 defined $path or return;
765 779
766 unlink "$path.pst"; 780 unlink "$path.pst";
767}; 781};
768 782
769# old style persistent data, TODO: remove #d#
770*cf::mapsupport::on_swapin = sub {
771 my ($map) = @_;
772
773 my $path = $map->tmpname;
774 $path = $map->path unless defined $path;
775
776 warn "$path.cfperl\n";#d#
777
778 open my $fh, "<:raw", "$path.cfperl"
779 or return; # no perl data
780
781 my $data = Storable::thaw do { local $/; <$fh> };
782
783 $data->{version} <= 1
784 or return; # too new
785
786 $map->_set_obs ($data->{obs});
787 $map->invoke (EVENT_MAP_UPGRADE);
788};
789
790attach_to_maps prio => -10000, package => cf::mapsupport::; 783attach_to_maps prio => -10000, package => cf::mapsupport::;
791 784
792############################################################################# 785#############################################################################
793# load/save perl data associated with player->ob objects 786# load/save perl data associated with player->ob objects
794 787
795sub all_objects(@) { 788sub all_objects(@) {
796 @_, map all_objects ($_->inv), @_ 789 @_, map all_objects ($_->inv), @_
797} 790}
798 791
792# TODO: compatibility cruft, remove when no longer needed
799attach_to_players 793attach_to_players
800 on_load => sub { 794 on_load => sub {
801 my ($pl, $path) = @_; 795 my ($pl, $path) = @_;
802 796
803 for my $o (all_objects $pl->ob) { 797 for my $o (all_objects $pl->ob) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines