--- deliantra/server/ext/map-random.ext 2007/01/27 12:45:04 1.12 +++ deliantra/server/ext/map-random.ext 2008/04/11 21:09:53 1.20 @@ -1,4 +1,4 @@ -#! perl # MANDATORY +#! perl # mandatory cf::map->register (qr{^\?random/([0-9a-f]{32})}); @@ -7,8 +7,8 @@ $self->{random_id} = $1; - if (0 < Coro::AIO::aio_load "$cf::RANDOM_MAPS/$self->{random_id}.meta", my $data) { - $self->{random} = cf::from_json $data; + if (0 < Coro::AIO::aio_load "$cf::RANDOMDIR/$self->{random_id}.meta", my $data) { + $self->{random} = cf::decode_json $data; $self->{random}{custom} ||= "$self->{random}{origin_map}+$self->{random}{origin_x}+$self->{random}{origin_y}"; } else { warn "unable to read meta file for $self->{random_id}\n"; @@ -36,7 +36,7 @@ sub save_path { my ($self) = @_; - sprintf "%s/%s.map", $cf::RANDOM_MAPS, $self->{random_id} + sprintf "%s/%s.map", $cf::RANDOMDIR, $self->{random_id} } sub uniq_path { @@ -49,51 +49,39 @@ return unless $self->{random}; $self->generate_random_map ($self->{random}); + $self->activate; 1 } sub clean_random_maps { - my $files = Coro::AIO::aio_readdir $cf::RANDOM_MAPS + my $files = Coro::AIO::aio_readdir $cf::RANDOMDIR or return; my $META_TIMEOUT = $cf::CFG{map_random_meta_timeout} || 86400 * 7; - my $MAP_TIMEOUT = $cf::CFG{map_random_map_timeout} || 3600 * 6; for my $file (@$files) { - next if $file =~ /\.pst$/; + next unless $file =~ /\.meta$/; - Coro::AIO::aio_stat "$cf::RANDOM_MAPS/$file" + Coro::AIO::aio_stat "$cf::RANDOMDIR/$file" and next; my $age = $cf::NOW - (stat _)[8]; - if ($file =~ /\.meta$/) { - if ($age > $META_TIMEOUT) { - warn "resetting random meta data for $file"; - IO::AIO::aio_unlink "$cf::RANDOM_MAPS/$file"; - } - } else { - if ($age > $MAP_TIMEOUT) { - warn "resetting random map $file"; - IO::AIO::aioreq_pri 4; IO::AIO::aio_unlink "$cf::RANDOM_MAPS/$file"; - IO::AIO::aioreq_pri 4; IO::AIO::aio_unlink "$cf::RANDOM_MAPS/$file.pst"; - } + if ($age > $META_TIMEOUT) { + warn "resetting random meta data for $file"; + IO::AIO::aio_unlink "$cf::RANDOMDIR/$file"; } } } # clean up old temp maps regularly -Event->timer ( - reentrant => 0, - data => cf::WF_AUTOCANCEL, - interval => 3600, - after => 60, - cb => Coro::unblock_sub { clean_random_maps }, -); +our $CLEAN_RANDOM_MAPS = cf::periodic 3600, Coro::unblock_sub { + clean_random_maps; +}; -# map generator stresstest, never enable under normal circumstances -if (1) { +# map generator stresstest, NEVER enable under normal circumstances +if (0) { cf::async { my $seed = 0; while () { @@ -101,10 +89,10 @@ $map->generate_random_map ({ region => "scorn", random_seed => $seed++, - xsize => 12, - ysize => 12, + xsize => (int rand 90) + 3, + ysize => (int rand 90) + 3, }); - warn sprintf "%d: %d %d\n", $seed, $map->width, $map->height;#d# +# warn sprintf "%d: %d %d\n", $seed, $map->width, $map->height;#d# $map->destroy; } };