--- deliantra/server/lib/cf.pm 2007/01/01 15:32:40 1.113 +++ 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 { @@ -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 } @@ -1271,7 +1280,7 @@ delete $cf::MAP{$self->path}; $self->{path} = new cf::path $new_path; - $self->path ($self->{path}->path); + $self->path ($self->{path}->as_string); $cf::MAP{$self->path} = $self; $self->save; @@ -1293,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) = @_;