diff --git a/bin/add_missions.pl b/bin/add_missions.pl index 917e76df..99243a73 100644 --- a/bin/add_missions.pl +++ b/bin/add_missions.pl @@ -22,7 +22,6 @@ my @mission_files = get_mission_files(); out('Loading DB...'); our $db = Lacuna->db; our $missions = $db->resultset('Lacuna::DB::Result::Mission'); -our $news = $db->resultset('Lacuna::DB::Result::News'); out('Deleting missions nobody has completed...'); $missions->search({ @@ -36,17 +35,8 @@ my @zones = $db->resultset('Lacuna::DB::Result::Map::Body')->search( foreach my $zone (@zones) { out($zone); foreach (1..3) { - my $mission = $missions->new({ - zone => $zone, - mission_file_name => $mission_files[rand @mission_files], - }); - $mission->max_university_level($mission->params->get('max_university_level')); - $mission->insert; + my $mission = $missions->initialize($zone, $mission_files[rand @mission_files]); say $mission->params->get('name'); - $news->new({ - zone => $zone, - headline => $mission->params->get('network_19_headline'), - })->insert; } } diff --git a/lib/Lacuna/DB/Result/Mission.pm b/lib/Lacuna/DB/Result/Mission.pm index 5a1f5ae3..0a1bd97b 100644 --- a/lib/Lacuna/DB/Result/Mission.pm +++ b/lib/Lacuna/DB/Result/Mission.pm @@ -56,16 +56,7 @@ sub add_next_part { $name .= '.part'.$1; } if (-f '/data/Lacuna-Mission/missions/'.$name) { - my $mission = Lacuna->db->resultset('Lacuna::DB::Result::Mission')->new({ - zone => $self->zone, - mission_file_name => $name, - }); - $mission->max_university_level($mission->params->get('max_university_level')); - $mission->insert; - Lacuna->db->resultset('Lacuna::DB::Result::News')->new({ - zone => $mission->zone, - headline => $mission->params->get('network_19_headline'), - })->insert; + $self->initialize($self->zone, $name); } } @@ -316,5 +307,20 @@ sub feed_filename { return 'missioncommand/'.create_uuid_as_string(UUID_MD5, $zone.Lacuna->config->get('feeds/bucket')).'.rss'; } +sub initialize { + my ($class, $zone, $filename) = @_; + my $mission = Lacuna->db->resultset('Lacuna::DB::Result::Mission')->new({ + zone => $zone, + mission_file_name => $filename, + }); + $mission->max_university_level($mission->params->get('max_university_level')); + $mission->insert; + Lacuna->db->resultset('Lacuna::DB::Result::News')->new({ + zone => $mission->zone, + headline => $mission->params->get('network_19_headline'), + })->insert; + return $mission; +} + no Moose; __PACKAGE__->meta->make_immutable(inline_constructor => 0); diff --git a/lib/Lacuna/DB/Result/Ships.pm b/lib/Lacuna/DB/Result/Ships.pm index cd2a3a60..7e2abdc0 100644 --- a/lib/Lacuna/DB/Result/Ships.pm +++ b/lib/Lacuna/DB/Result/Ships.pm @@ -201,6 +201,11 @@ sub arrive { confess 'override me'; } +sub note_arrival { + my $self = shift; + Lacuna->config->set($self->type.'_arrive_'.$self->foreign_body_id.$self->foreign_star_id, $self->body->empire_id,1, 60*60*24); +} + sub capture_with_spies { my ($self) = @_; return 0 if $self->direction eq 'in'; diff --git a/lib/Lacuna/DB/Result/Ships/CargoShip.pm b/lib/Lacuna/DB/Result/Ships/CargoShip.pm index ab1afa28..01dd690c 100644 --- a/lib/Lacuna/DB/Result/Ships/CargoShip.pm +++ b/lib/Lacuna/DB/Result/Ships/CargoShip.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->capture_with_spies) { $self->handle_cargo_exchange; } diff --git a/lib/Lacuna/DB/Result/Ships/ColonyShip.pm b/lib/Lacuna/DB/Result/Ships/ColonyShip.pm index 523334c1..4bd71dd3 100644 --- a/lib/Lacuna/DB/Result/Ships/ColonyShip.pm +++ b/lib/Lacuna/DB/Result/Ships/ColonyShip.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; my $empire = $self->body->empire; if ($self->direction eq 'out') { my $planet = $self->foreign_body; diff --git a/lib/Lacuna/DB/Result/Ships/Detonator.pm b/lib/Lacuna/DB/Result/Ships/Detonator.pm index 3324db75..9fe41bbf 100644 --- a/lib/Lacuna/DB/Result/Ships/Detonator.pm +++ b/lib/Lacuna/DB/Result/Ships/Detonator.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; my $probes = Lacuna->db->resultset('Lacuna::DB::Result::Probes')->search({star_id => $self->foreign_star_id }); my $count; while (my $probe = $probes->next) { diff --git a/lib/Lacuna/DB/Result/Ships/Dory.pm b/lib/Lacuna/DB/Result/Ships/Dory.pm index d7957524..d845e1c6 100644 --- a/lib/Lacuna/DB/Result/Ships/Dory.pm +++ b/lib/Lacuna/DB/Result/Ships/Dory.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->capture_with_spies) { $self->handle_cargo_exchange; } diff --git a/lib/Lacuna/DB/Result/Ships/Drone.pm b/lib/Lacuna/DB/Result/Ships/Drone.pm index 57a0cf80..bc4243b6 100644 --- a/lib/Lacuna/DB/Result/Ships/Drone.pm +++ b/lib/Lacuna/DB/Result/Ships/Drone.pm @@ -21,5 +21,6 @@ around 'build_tags' => sub { return ($orig->($class), qw(War)); }; + no Moose; __PACKAGE__->meta->make_immutable(inline_constructor => 0); diff --git a/lib/Lacuna/DB/Result/Ships/Excavator.pm b/lib/Lacuna/DB/Result/Ships/Excavator.pm index 097a616b..127a23b0 100644 --- a/lib/Lacuna/DB/Result/Ships/Excavator.pm +++ b/lib/Lacuna/DB/Result/Ships/Excavator.pm @@ -25,6 +25,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; my $find = randint(1,100); my $remote_body = $self->foreign_body; my $body = $self->body; diff --git a/lib/Lacuna/DB/Result/Ships/Freighter.pm b/lib/Lacuna/DB/Result/Ships/Freighter.pm index e60168e0..98c75be5 100644 --- a/lib/Lacuna/DB/Result/Ships/Freighter.pm +++ b/lib/Lacuna/DB/Result/Ships/Freighter.pm @@ -26,6 +26,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->capture_with_spies) { $self->handle_cargo_exchange; } diff --git a/lib/Lacuna/DB/Result/Ships/GasGiantSettlementPlatformShip.pm b/lib/Lacuna/DB/Result/Ships/GasGiantSettlementPlatformShip.pm index cce4c0c4..4b7e5681 100644 --- a/lib/Lacuna/DB/Result/Ships/GasGiantSettlementPlatformShip.pm +++ b/lib/Lacuna/DB/Result/Ships/GasGiantSettlementPlatformShip.pm @@ -26,6 +26,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; if ($self->direction eq 'out') { my $lab = $self->body->get_building_of_class('Lacuna::DB::Result::Building::GasGiantLab'); $self->foreign_body->add_plan('Lacuna::DB::Result::Building::Permanent::GasGiantPlatform', 1, (defined $lab) ? $lab->level : 0); diff --git a/lib/Lacuna/DB/Result/Ships/MiningPlatformShip.pm b/lib/Lacuna/DB/Result/Ships/MiningPlatformShip.pm index 9a3ba204..83881014 100644 --- a/lib/Lacuna/DB/Result/Ships/MiningPlatformShip.pm +++ b/lib/Lacuna/DB/Result/Ships/MiningPlatformShip.pm @@ -27,6 +27,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; if ($self->direction eq 'out') { my $body = $self->body; my $ministry = $body->mining_ministry; diff --git a/lib/Lacuna/DB/Result/Ships/ObservatorySeeker.pm b/lib/Lacuna/DB/Result/Ships/ObservatorySeeker.pm index 1af00d6b..f65aae60 100644 --- a/lib/Lacuna/DB/Result/Ships/ObservatorySeeker.pm +++ b/lib/Lacuna/DB/Result/Ships/ObservatorySeeker.pm @@ -22,6 +22,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->trigger_defense) { $self->damage_building($self->foreign_body->get_building_of_class('Lacuna::DB::Result::Building::Observatory')); } diff --git a/lib/Lacuna/DB/Result/Ships/Probe.pm b/lib/Lacuna/DB/Result/Ships/Probe.pm index b6106d8d..43d0be70 100644 --- a/lib/Lacuna/DB/Result/Ships/Probe.pm +++ b/lib/Lacuna/DB/Result/Ships/Probe.pm @@ -23,6 +23,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; my $empire = $self->body->empire; $empire->add_probe($self->foreign_star_id, $self->body_id); $self->delete; diff --git a/lib/Lacuna/DB/Result/Ships/Scanner.pm b/lib/Lacuna/DB/Result/Ships/Scanner.pm index 0d6b5630..9a5f4a75 100644 --- a/lib/Lacuna/DB/Result/Ships/Scanner.pm +++ b/lib/Lacuna/DB/Result/Ships/Scanner.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->trigger_defense) { my $body_attacked = $self->foreign_body; my @map; diff --git a/lib/Lacuna/DB/Result/Ships/Scow.pm b/lib/Lacuna/DB/Result/Ships/Scow.pm index ae69c4a8..6b145514 100644 --- a/lib/Lacuna/DB/Result/Ships/Scow.pm +++ b/lib/Lacuna/DB/Result/Ships/Scow.pm @@ -23,6 +23,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; if ($self->foreign_star_id) { $self->delete; } diff --git a/lib/Lacuna/DB/Result/Ships/SecurityMinistrySeeker.pm b/lib/Lacuna/DB/Result/Ships/SecurityMinistrySeeker.pm index cf80a6d0..808d15e1 100644 --- a/lib/Lacuna/DB/Result/Ships/SecurityMinistrySeeker.pm +++ b/lib/Lacuna/DB/Result/Ships/SecurityMinistrySeeker.pm @@ -23,6 +23,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->trigger_defense) { $self->damage_building($self->foreign_body->get_building_of_class('Lacuna::DB::Result::Building::Security')); } diff --git a/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm b/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm index 36108580..b78713dc 100644 --- a/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm +++ b/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; my $empire = $self->body->empire; if ($self->direction eq 'out') { my $planet = $self->foreign_body; diff --git a/lib/Lacuna/DB/Result/Ships/SmugglerShip.pm b/lib/Lacuna/DB/Result/Ships/SmugglerShip.pm index 4530eb55..dc186503 100644 --- a/lib/Lacuna/DB/Result/Ships/SmugglerShip.pm +++ b/lib/Lacuna/DB/Result/Ships/SmugglerShip.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->capture_with_spies) { $self->handle_cargo_exchange; } diff --git a/lib/Lacuna/DB/Result/Ships/Snark.pm b/lib/Lacuna/DB/Result/Ships/Snark.pm index 356a0317..f9032e9c 100644 --- a/lib/Lacuna/DB/Result/Ships/Snark.pm +++ b/lib/Lacuna/DB/Result/Ships/Snark.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->trigger_defense) { $self->damage_building; } diff --git a/lib/Lacuna/DB/Result/Ships/SpacePortSeeker.pm b/lib/Lacuna/DB/Result/Ships/SpacePortSeeker.pm index 4d1a1545..d9ec5d77 100644 --- a/lib/Lacuna/DB/Result/Ships/SpacePortSeeker.pm +++ b/lib/Lacuna/DB/Result/Ships/SpacePortSeeker.pm @@ -23,6 +23,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->trigger_defense) { $self->damage_building($self->foreign_body->get_building_of_class('Lacuna::DB::Result::Building::SpacePort')); } diff --git a/lib/Lacuna/DB/Result/Ships/SpaceStation.pm b/lib/Lacuna/DB/Result/Ships/SpaceStation.pm index a2678c20..8fb3e279 100644 --- a/lib/Lacuna/DB/Result/Ships/SpaceStation.pm +++ b/lib/Lacuna/DB/Result/Ships/SpaceStation.pm @@ -25,6 +25,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; $self->delete; } diff --git a/lib/Lacuna/DB/Result/Ships/SpyPod.pm b/lib/Lacuna/DB/Result/Ships/SpyPod.pm index bacda1fa..fde6df9d 100644 --- a/lib/Lacuna/DB/Result/Ships/SpyPod.pm +++ b/lib/Lacuna/DB/Result/Ships/SpyPod.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->capture_with_spies) { $self->delete; } diff --git a/lib/Lacuna/DB/Result/Ships/SpyShuttle.pm b/lib/Lacuna/DB/Result/Ships/SpyShuttle.pm index 8e348780..665e73a0 100644 --- a/lib/Lacuna/DB/Result/Ships/SpyShuttle.pm +++ b/lib/Lacuna/DB/Result/Ships/SpyShuttle.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; unless ($self->capture_with_spies) { $self->delete; } diff --git a/lib/Lacuna/DB/Result/Ships/TerraformingPlatformShip.pm b/lib/Lacuna/DB/Result/Ships/TerraformingPlatformShip.pm index 85cac2f7..62349d16 100644 --- a/lib/Lacuna/DB/Result/Ships/TerraformingPlatformShip.pm +++ b/lib/Lacuna/DB/Result/Ships/TerraformingPlatformShip.pm @@ -24,6 +24,7 @@ around 'build_tags' => sub { sub arrive { my ($self) = @_; + $self->note_arrival; if ($self->direction eq 'out') { my $lab = $self->body->get_building_of_class('Lacuna::DB::Result::Building::TerraformingLab'); $self->foreign_body->add_plan('Lacuna::DB::Result::Building::Permanent::TerraformingPlatform', 1, (defined $lab) ? $lab->level : 0); diff --git a/lib/Lacuna/Tutorial.pm b/lib/Lacuna/Tutorial.pm index 6171a64b..a28db5c3 100644 --- a/lib/Lacuna/Tutorial.pm +++ b/lib/Lacuna/Tutorial.pm @@ -346,12 +346,7 @@ sub university { $home->add_plan('Lacuna::DB::Result::Building::MissionCommand', 1); our $missions = Lacuna->db->resultset('Lacuna::DB::Result::Mission'); foreach my $filename (qw(soylent-trade-opportunity.mission need-a-probe.mission dung-beeldeban.mission)) { - my $mission = $missions->new({ - zone => $home->zone, - mission_file_name => $filename, - }); - $mission->max_university_level($mission->params->get('max_university_level')); - $mission->insert; + $missions->initialize($home->zone, $filename); } $self->start('mission_command'); return undef; diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 017bc228..f89fd274 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,6 +1,7 @@ 2.3700 - Fixed pagination in mission curator panel. - Added exposed API for Halls of Vrbansk. + - Added fleet movement missions. 2.3600 - Added alliance stash methods to the embassy.