--- deliantra/server/lib/cf.pm 2007/01/01 13:31:47 1.112 +++ deliantra/server/lib/cf.pm 2007/01/01 16:00:10 1.114 @@ -291,7 +291,17 @@ my $self = bless { }, $class; - if ($path =~ s{^\?random/}{}) { + # {... are special paths that are not touched + # ?xxx/... are special absolute paths + # ?random/... random maps + # /! non-realised random map exit + # /... normal maps + # ~/... per-player maps without a specific player (DO NOT USE) + # ~user/... per-player map of a specific user + + if ($path =~ /^{/) { + # fine as it is + } elsif ($path =~ s{^\?random/}{}) { Coro::AIO::aio_load "$cf::RANDOM_MAPS/$path.meta", my $data; $self->{random} = cf::from_json $data; } else { @@ -806,7 +816,7 @@ unless (aio_stat "$filename.pst") { (aio_load "$filename.pst", $av) >= 0 or return; - $av = eval { (Storable::thaw <$av>)->{objs} }; + $av = eval { (Storable::thaw $av)->{objs} }; } return ($data, $av); @@ -1240,12 +1250,11 @@ my ($self) = @_; # TODO: safety, remove and allow resettable per-player maps - return 1e100 if $self->{path}{user_rel}; - return 1e100 if $self->{deny_reset}; + return 1e99 if $self->{path}{user_rel}; + return 1e99 if $self->{deny_reset}; my $time = $self->fixed_resettime ? $self->{instantiate_time} : $self->last_access; - my $to = $self->reset_timeout || $DEFAULT_RESET; - $to = $MAX_RESET if $to > $MAX_RESET; + my $to = List::Util::min $MAX_RESET, $self->reset_timeout || $DEFAULT_RESET; $time + $to } @@ -1264,6 +1273,19 @@ aioreq_pri 3; IO::AIO::aio_unlink "$save.pst"; } +sub rename { + my ($self, $new_path) = @_; + + $self->unlink_save; + + delete $cf::MAP{$self->path}; + $self->{path} = new cf::path $new_path; + $self->path ($self->{path}->as_string); + $cf::MAP{$self->path} = $self; + + $self->save; +} + sub reset { my ($self) = @_; @@ -1280,6 +1302,17 @@ $self->destroy; } +my $nuke_counter = "aaaa"; + +sub nuke { + my ($self) = @_; + + $self->{deny_save} = 1; + $self->reset_timeout (1); + $self->rename ("{nuke}/" . ($nuke_counter++)); + $self->reset; # polite request, might not happen +} + sub customise_for { my ($map, $ob) = @_;