Something went wrong. Try again.
Perl game server for TLE Community
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112use 5.010;use strict;use lib '/home/lacuna/server/lib';use Lacuna::DB;use Lacuna;use Lacuna::Util qw(randint format_date);use Getopt::Long;use List::Util qw(shuffle);$|=1;our $quiet;our $mission;our $zone;our $number = 3;GetOptions( 'quiet' => \$quiet, 'mission=s' => \$mission, 'zone=s' => \$zone, 'number=i' => \$number,);
out('Started');my $start = time;
out('Finding Mission Files');my @mission_files = get_mission_files();
out('Loading DB...');our $db = Lacuna->db;our $dtf = $db->storage->datetime_parser;our $missions = $db->resultset('Lacuna::DB::Result::Mission');
out('Deleting missions nobody has completed...');my $old = $missions->search({date_posted => { '<' => $dtf->format_datetime(DateTime->now->subtract( hours => 72 ))}});while (my $mission = $old->next) { $mission->incomplete;}
if ($mission ne '' && $zone ne '') { out('Adding specific mission...'); my $mission = Lacuna::DB::Result::Mission->initialize($zone, $mission); say $mission->params->get('name').' added to '.$zone.'!';}else { out('Adding missions...'); out(scalar @mission_files. " mission files"); my @zones; if ($zone ne '') { @zones = ($zone); } else { @zones = $db->resultset('Lacuna::DB::Result::Map::Body')->search( { empire_id => { '>' => 0 }}, { distinct => 1 })->get_column('zone')->all; } foreach my $zone (@zones) { out($zone); my $current_missions = $db->resultset('Lacuna::DB::Result::Mission')->search( { zone => "$zone" }); my @current; while (my $mission = $current_missions->next) { push @current, $mission->mission_file_name; } out(scalar @current. " current missions"); my @avail; for my $mission (@mission_files) { push @avail, $mission unless ( grep { $mission eq $_ } @current); } out(scalar @avail. " to pick from");
foreach (1..$number) { last unless scalar @avail > 0; my $mission_file = splice(@avail, rand(@avail), 1); my $mission = Lacuna::DB::Result::Mission->initialize($zone, $mission_file); say $mission->params->get('name'); } }}
my $finish = time;out('Finished');out((($finish - $start)/60)." minutes have elapsed");
################# SUBROUTINES###############
sub get_mission_files { opendir my $dir, '/home/lacuna/server/missions/missions/'; my @files = readdir $dir; closedir $dir; my @missions; foreach my $file (@files) { next unless $file =~ m/\.mission$/; push @missions, $file; } return @missions;}
sub out { my $message = shift; unless ($quiet) { say format_date(DateTime->now), " ", $message; }}