From 0fe1763b912adcbbadaf0471cad3d1fc1449f0bb Mon Sep 17 00:00:00 2001 From: Mark Lemming Date: Sun, 29 Dec 2013 15:40:18 -0700 Subject: [PATCH] Make sure captured spies don't get visas. --- bin/util/add_plans.pl | 77 +++++++++++++++++++++++++++++++---- lib/Lacuna/DB/Result/Spies.pm | 8 +++- 2 files changed, 75 insertions(+), 10 deletions(-) diff --git a/bin/util/add_plans.pl b/bin/util/add_plans.pl index b135c66b..c83e2614 100644 --- a/bin/util/add_plans.pl +++ b/bin/util/add_plans.pl @@ -5,19 +5,30 @@ use Lacuna::DB; use Lacuna; use Lacuna::Util qw(randint format_date); use Getopt::Long; +use JSON; $|=1; our $quiet; our $body_id; our $class; -our $count; +our $count = 1; +our $level = 1; +our $extra = 0; +our $file; +our $verbose; + GetOptions( - 'quiet' => \$quiet, - 'body=i' => \$body_id, - 'class=s' => \$class, - 'count=i' => \$count, + 'quiet' => \$quiet, + 'body=i' => \$body_id, + 'class=s' => \$class, + 'level=i' => \$level, + 'extra=i' => \$extra, + 'count=i' => \$count, + 'file=s' => \$file, + 'verbose' => \$verbose, ); -die "Usage: perl $0 body_id class count\n" unless ( defined $body_id && defined $class && defined $count ); +die "Usage: perl $0 body_id class count\n" unless (( defined $body_id && defined $class && defined $count ) or + ( defined $body_id && defined $file)); out('Started'); my $start = time; @@ -29,9 +40,31 @@ my $body = $db->resultset('Lacuna::DB::Result::Map::Body')->find($body_id); unless ($body) { die "Cannot find body id $body_id\n"; } -say "Adding $count level 1 $class plans to ".$body->name; -for my $cnt ( 1 .. $count ) { - $body->add_plan($class, 1, 0); + +my $plans = []; +if ($file) { + $plans = get_plans($file); +} +else { + die "Cannot have extra level if base level is greater than 1!" if ($extra > 0 and $level > 1); + $plans->[0]->{level} = $level; + $plans->[0]->{extra} = $extra; + $plans->[0]->{class} = $class; + $plans->[0]->{quantity} = $count; +} + +my $json = JSON->new->utf8(1); +print $json->pretty->canonical->encode($plans) if ($verbose); + +for my $plan (@$plans) { +print $json->pretty->canonical->encode($plan) if ($verbose); + say sprintf("Adding %d level %d+%d %s to %s:%d", + $plan->{quantity}, $plan->{level}, $plan->{extra}, $plan->{class}, $body->name, $body->id); + if ($plan->{extra} > 0 and $plan->{level} > 1) { + say "Cannot have extra level if base level is greater than 1!"; + next; + } + $body->add_plan($plan->{class}, $plan->{level}, $plan->{extra}, $plan->{quantity}); } my $finish = time; @@ -50,4 +83,30 @@ sub out { } } +sub get_plans { + my ( $data_file ) = @_; + + my $plan_data = get_json($data_file); + unless ($plan_data) { + die "Could not read $data_file\n"; + } + return $plan_data; +} +sub get_json { + my ($file) = @_; + + if (-e $file) { + my $json = JSON->new->utf8(1); + my $fh; my $lines; + open($fh, "$file") || die "Could not open $file\n"; + $lines = join("", <$fh>); + my $data = $json->decode($lines); + close($fh); + return $data; + } + else { + warn "$file not found!\n"; + } + return 0; +} diff --git a/lib/Lacuna/DB/Result/Spies.pm b/lib/Lacuna/DB/Result/Spies.pm index cd8609b3..d3f84369 100644 --- a/lib/Lacuna/DB/Result/Spies.pm +++ b/lib/Lacuna/DB/Result/Spies.pm @@ -471,6 +471,8 @@ sub is_available { } } } + elsif ($task eq 'Prisoner Transport') { + } $self->task('Idle'); $self->update; return 1; @@ -2181,7 +2183,11 @@ sub abduct_operative { direction => 'in', payload => { spies => [ $self->id ], prisoners => [$defender->id] } ); - $defender->send($self->from_body_id, DateTime->now->add(days => 7), 'Prisoner Transport'); + $defender->available_on(DateTime->now->add(days => 7)); + $defender->on_body_id($self->from_body_id); + $defender->task("Prisoner Transport"); + $defender->started_assignment(DateTime->now); + $self->send($self->from_body_id, $ship->date_available); $defender->empire->send_predefined_message( tags => ['Spies','Alert'], -- 2.51.2