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.271 by root, Fri Jun 1 06:04:08 2007 UTC vs.
Revision 1.275 by root, Thu Jun 7 19:12:22 2007 UTC

187@safe::cf::global::ISA = @cf::global::ISA = 'cf::attachable'; 187@safe::cf::global::ISA = @cf::global::ISA = 'cf::attachable';
188@safe::cf::object::ISA = @cf::object::ISA = 'cf::attachable'; 188@safe::cf::object::ISA = @cf::object::ISA = 'cf::attachable';
189@safe::cf::player::ISA = @cf::player::ISA = 'cf::attachable'; 189@safe::cf::player::ISA = @cf::player::ISA = 'cf::attachable';
190@safe::cf::client::ISA = @cf::client::ISA = 'cf::attachable'; 190@safe::cf::client::ISA = @cf::client::ISA = 'cf::attachable';
191@safe::cf::map::ISA = @cf::map::ISA = 'cf::attachable'; 191@safe::cf::map::ISA = @cf::map::ISA = 'cf::attachable';
192@safe::cf::arch::ISA = @cf::arch::ISA = 'cf::object';
192@safe::cf::object::player::ISA = @cf::object::player::ISA = 'cf::object'; 193@safe::cf::object::player::ISA = @cf::object::player::ISA = 'cf::object'; # not really true (yet)
193 194
194# we bless all objects into (empty) derived classes to force a method lookup 195# we bless all objects into (empty) derived classes to force a method lookup
195# within the Safe compartment. 196# within the Safe compartment.
196for my $pkg (qw( 197for my $pkg (qw(
197 cf::global cf::attachable 198 cf::global cf::attachable
422 or return; 423 or return;
423 424
424 aio_rename "$runtime~", $runtime 425 aio_rename "$runtime~", $runtime
425 and return; 426 and return;
426 427
427 warn "runtime file written.\n";#d# 428 warn "runtime file written.\n";
428 429
429 1 430 1
430} 431}
431 432
432=item cf::datalog type => key => value, ... 433=item cf::datalog type => key => value, ...
872 or return; 873 or return;
873 $av = eval { (Storable::thaw $av)->{objs} }; 874 $av = eval { (Storable::thaw $av)->{objs} };
874 } 875 }
875 876
876 warn sprintf "loading %s (%d)\n", 877 warn sprintf "loading %s (%d)\n",
877 $filename, length $data, scalar @{$av || []};#d# 878 $filename, length $data, scalar @{$av || []};
878 return ($data, $av); 879 return ($data, $av);
879} 880}
880 881
881############################################################################# 882#############################################################################
882# command handling &c 883# command handling &c
1304 my ($self, $merge) = @_; 1305 my ($self, $merge) = @_;
1305 1306
1306 # we have to keep some variables in memory intact 1307 # we have to keep some variables in memory intact
1307 local $self->{path}; 1308 local $self->{path};
1308 local $self->{load_path}; 1309 local $self->{load_path};
1309 local $self->{deny_save};
1310 local $self->{deny_reset};
1311 1310
1312 $self->SUPER::thawer_merge ($merge); 1311 $self->SUPER::thawer_merge ($merge);
1313} 1312}
1314 1313
1315sub normalise { 1314sub normalise {
1415 1414
1416 $_->change_map_light ($change) 1415 $_->change_map_light ($change)
1417 for grep $_->outdoor, values %cf::MAP; 1416 for grep $_->outdoor, values %cf::MAP;
1418} 1417}
1419 1418
1419sub decay_objects {
1420 my ($self) = @_;
1421
1422 return if $self->{deny_reset};
1423
1424 $self->do_decay_objects;
1425}
1426
1420sub unlink_save { 1427sub unlink_save {
1421 my ($self) = @_; 1428 my ($self) = @_;
1422 1429
1423 utf8::encode (my $save = $self->save_path); 1430 utf8::encode (my $save = $self->save_path);
1424 IO::AIO::aioreq_pri 4; Coro::AIO::aio_unlink $save; 1431 IO::AIO::aioreq_pri 4; Coro::AIO::aio_unlink $save;
1480 $self->load_header_orig 1487 $self->load_header_orig
1481 or return; 1488 or return;
1482 $self->prepare_orig; 1489 $self->prepare_orig;
1483 } 1490 }
1484 1491
1492 $self->{deny_reset} = 1
1493 if $self->no_reset;
1494
1485 $self->default_region (cf::region::find_by_path $self->{path}) 1495 $self->default_region (cf::region::find_by_path $self->{path})
1486 unless $self->default_region; 1496 unless $self->default_region;
1487 1497
1488 1 1498 1
1489} 1499}
1504 $map->{last_save} = $cf::RUNTIME; 1514 $map->{last_save} = $cf::RUNTIME;
1505 1515
1506 $map->load_header 1516 $map->load_header
1507 or return; 1517 or return;
1508 1518
1509 if ($map->should_reset && 0) {#d#TODO# disabled, crashy (locking issue?) 1519 if ($map->should_reset) {#d#TODO# disabled, crashy (locking issue?)
1510 # doing this can freeze the server in a sync job, obviously 1520 # doing this can freeze the server in a sync job, obviously
1511 #$cf::WAIT_FOR_TICK->wait; 1521 #$cf::WAIT_FOR_TICK->wait;
1512 $map->reset; 1522 $map->reset;
1513 undef $guard; 1523 undef $guard;
1514 return find $path; 1524 return find $path;
1581 my ($self, $ob) = @_; 1591 my ($self, $ob) = @_;
1582 1592
1583 return find "~" . $ob->name . "/" . $self->{path} 1593 return find "~" . $ob->name . "/" . $self->{path}
1584 if $self->per_player; 1594 if $self->per_player;
1585 1595
1596# return find "?party/" . $ob->name . "/" . $self->{path}
1597# if $self->per_party;
1598
1586 $self 1599 $self
1587} 1600}
1588 1601
1589# find and load all maps in the 3x3 area around a map 1602# find and load all maps in the 3x3 area around a map
1590sub load_diag { 1603sub load_diag {
1700 1713
1701sub reset_at { 1714sub reset_at {
1702 my ($self) = @_; 1715 my ($self) = @_;
1703 1716
1704 # TODO: safety, remove and allow resettable per-player maps 1717 # TODO: safety, remove and allow resettable per-player maps
1705 return 1e99 if $self->isa ("ext::map_per_player");#d#
1706 return 1e99 if $self->{deny_reset}; 1718 return 1e99 if $self->{deny_reset};
1707 1719
1708 my $time = $self->fixed_resettime ? $self->{instantiate_time} : $self->last_access; 1720 my $time = $self->fixed_resettime ? $self->{instantiate_time} : $self->last_access;
1709 my $to = List::Util::min $MAX_RESET, $self->reset_timeout || $DEFAULT_RESET; 1721 my $to = List::Util::min $MAX_RESET, $self->reset_timeout || $DEFAULT_RESET;
1710 1722
1721 my ($self) = @_; 1733 my ($self) = @_;
1722 1734
1723 my $lock = cf::lock_acquire "map_data:$self->{path}"; 1735 my $lock = cf::lock_acquire "map_data:$self->{path}";
1724 1736
1725 return if $self->players; 1737 return if $self->players;
1726 return if $self->isa ("ext::map_per_player");#d#
1727 1738
1728 warn "resetting map ", $self->path;#d# 1739 warn "resetting map ", $self->path;
1729 1740
1730 $self->in_memory (cf::MAP_SWAPPED); 1741 $self->in_memory (cf::MAP_SWAPPED);
1731 1742
1732 # need to save uniques path 1743 # need to save uniques path
1733 unless ($self->{deny_save}) { 1744 unless ($self->{deny_save}) {
2559sub reload_resources { 2570sub reload_resources {
2560 warn "reloading resource files...\n"; 2571 warn "reloading resource files...\n";
2561 2572
2562 reload_regions; 2573 reload_regions;
2563 reload_facedata; 2574 reload_facedata;
2575 #reload_archetypes;#d#
2564 reload_archetypes; 2576 reload_archetypes;
2565 reload_treasures; 2577 reload_treasures;
2566 2578
2567 warn "finished reloading resource files\n"; 2579 warn "finished reloading resource files\n";
2568} 2580}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines