From ccd58e414785f6ddf240b40f79d4c88cbc84e679 Mon Sep 17 00:00:00 2001 From: ian docherty Date: Mon, 14 May 2012 03:31:52 -0400 Subject: [PATCH 01/19] Fixed bug that prevented a supply chain from being created --- lib/Lacuna/RPC/Building/Trade.pm | 2 +- var/upgrades/3.0851.sql | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Lacuna/RPC/Building/Trade.pm b/lib/Lacuna/RPC/Building/Trade.pm index c162a8c4..6a8dbbf0 100644 --- a/lib/Lacuna/RPC/Building/Trade.pm +++ b/lib/Lacuna/RPC/Building/Trade.pm @@ -288,7 +288,7 @@ sub create_supply_chain { unless (first {$resource_type eq $_} (FOOD_TYPES, ORE_TYPES, qw(water waste energy))) { confess [1002, "That is not a valid resource_type."]; } - if ($self->id == $target_id) { + if ($body->id == $target_id) { confess [1002, "You can't set up a supply chain to yourself."]; } my $target = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($target_id); diff --git a/var/upgrades/3.0851.sql b/var/upgrades/3.0851.sql index 4155c359..e46a655b 100644 --- a/var/upgrades/3.0851.sql +++ b/var/upgrades/3.0851.sql @@ -16,3 +16,5 @@ create table supply_chain ( alter table waste_chain modify waste_hour bigint; +update waste_chain,body set waste_chain.star_id=body.star_id where waste_chain.planet_id=body.id; + -- 2.51.2 From c7c3c0284479fa17f766f2624e8afb18156e7e30 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Tue, 15 May 2012 22:31:04 -0600 Subject: [PATCH 02/19] Adding a tool. --- bin/puppet/add_spaceports.js | 120 +++++++++++++++++++++++++++++++++++ bin/puppet/colony_setup.js | 79 +++++++++++++++++++++++ bin/puppet/setup_colony.pl | 119 ++++++++++++++++++++++++++++++++++ 3 files changed, 318 insertions(+) create mode 100644 bin/puppet/add_spaceports.js create mode 100644 bin/puppet/colony_setup.js create mode 100755 bin/puppet/setup_colony.pl diff --git a/bin/puppet/add_spaceports.js b/bin/puppet/add_spaceports.js new file mode 100644 index 00000000..95eb62c3 --- /dev/null +++ b/bin/puppet/add_spaceports.js @@ -0,0 +1,120 @@ +[ + { "class" : "Lacuna::DB::Result::Building::Permanent::AlgaePond", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GeoThermalVent", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GreatBallOfJunk", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::NaturalSpring", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::Volcano", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, +] diff --git a/bin/puppet/colony_setup.js b/bin/puppet/colony_setup.js new file mode 100644 index 00000000..a58c2324 --- /dev/null +++ b/bin/puppet/colony_setup.js @@ -0,0 +1,79 @@ +[ + { "class" : "Lacuna::DB::Result::Building::Archaeology", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Capitol", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::CloakingLab", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Development", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::DistributionCenter", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::DistributionCenter", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Espionage", "level" : "15" }, + { "class" : "Lacuna::DB::Result::Building::Intelligence", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::MunitionsLab", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Observatory", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Oversight", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::AlgaePond", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::AmalgusMeadow", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::BeeldebanNest", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::DentonBrambles", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GeoThermalVent", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GratchsGauntlet", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GreatBallOfJunk", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::InterDimensionalRift", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::NaturalSpring", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::Volcano", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::PilotTraining", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::PoliticsTraining", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Propulsion", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Security", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Shipyard", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Shipyard", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Shipyard", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Trade", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Exchanger", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Exchanger", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Water::AtmosphericEvaporator", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Water::AtmosphericEvaporator", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Water::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Water::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Ore::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Ore::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Energy::Reserve", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Energy::Reserve", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Food::Reserve", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Food::Reserve", "level" : "30" } +] diff --git a/bin/puppet/setup_colony.pl b/bin/puppet/setup_colony.pl new file mode 100755 index 00000000..812038e2 --- /dev/null +++ b/bin/puppet/setup_colony.pl @@ -0,0 +1,119 @@ +use 5.010; +use strict; +use lib '/data/Lacuna-Server/lib'; +use Lacuna::DB; +use Lacuna; +use Lacuna::Util qw(randint format_date); +use Getopt::Long; +use JSON; +$|=1; +our $quiet; + my $body_id; + my $config; + my $empire_id; + my $sanitize; + + GetOptions( + 'quiet' => \$quiet, + 'body=s' => \$body_id, + 'config=s' => \$config, + 'empire_id=s' => \$empire_id, + 'sanitize' => \$sanitize, + ); + + + die "Usage: perl $0 --empire_id X --body X\n" unless ( defined $body_id ); + + out('Started'); + my $start = time; + + out('Loading DB'); + our $db = Lacuna->db; + + my $empires = $db->resultset('Lacuna::DB::Result::Empire'); + my $empire = $empires->find($empire_id); + print "Setting up for empire: $empire->name : $empire_id\n"; + + my $body = $db->resultset('Lacuna::DB::Result::Map::Body')->find($body_id); + print "Found body!\n"; + unless ($body) { + die "Cannot find body id $body_id\n"; + } + print "Really!\n"; + if ($sanitize) { + $body->sanitize; + } + print "Checking empire\n"; + unless (defined($body->empire)) { + $body->found_colony($empire); + } + print "Founded Colony\n"; + print $body->empire->name,"\n"; + my $beid = $body->empire->id; + if ($beid != $empire_id) { + my $name = $body->name; + die "$name belongs to $beid\n"; + } + + my $builds = get_builds($config); + + say "Adding to ".$body->name; + for my $build (@$builds) { + my ($x, $y) = $body->find_free_space; +# next if $y > -1; + my $bld = Lacuna->db->resultset('Lacuna::DB::Result::Building')->new({ + body_id => $body->id, + x => $x, + y => $y, + class => $build->{class}, + level => $build->{level} - 1, + }); + say sprintf("%2d:%2d L:%2d %s", $x, $y, $bld->level, $bld->name); + $body->build_building($bld); + $bld->finish_upgrade; + } + + my $finish = time; + out('Finished'); + out((($finish - $start)/60)." minutes have elapsed"); +exit; + + +############### +## SUBROUTINES +############### + +sub out { + my $message = shift; + unless ($quiet) { + say format_date(DateTime->now), " ", $message; + } +} + +sub get_builds { + my ( $data_file ) = @_; + + my $bld_data = get_json($data_file); + unless ($bld_data) { + die "Could not read $data_file\n"; + } + return $bld_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; +} -- 2.51.2 From 5482c8b0cb52b3b80e07acb9a3ef54309b01ec34 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Tue, 15 May 2012 23:04:24 -0600 Subject: [PATCH 03/19] tweak --- bin/puppet/add_spaceports.js | 111 +--------------- bin/puppet/building.lst | 236 +++++++++++++++++++++++++++++++++++ 2 files changed, 237 insertions(+), 110 deletions(-) create mode 100644 bin/puppet/building.lst diff --git a/bin/puppet/add_spaceports.js b/bin/puppet/add_spaceports.js index 95eb62c3..7c797496 100644 --- a/bin/puppet/add_spaceports.js +++ b/bin/puppet/add_spaceports.js @@ -1,120 +1,11 @@ [ - { "class" : "Lacuna::DB::Result::Building::Permanent::AlgaePond", "level" : "30" }, - { "class" : "Lacuna::DB::Result::Building::Permanent::GeoThermalVent", "level" : "30" }, - { "class" : "Lacuna::DB::Result::Building::Permanent::GreatBallOfJunk", "level" : "30" }, - { "class" : "Lacuna::DB::Result::Building::Permanent::NaturalSpring", "level" : "30" }, - { "class" : "Lacuna::DB::Result::Building::Permanent::Volcano", "level" : "30" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" }, - { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "10" } ] diff --git a/bin/puppet/building.lst b/bin/puppet/building.lst new file mode 100644 index 00000000..e1099699 --- /dev/null +++ b/bin/puppet/building.lst @@ -0,0 +1,236 @@ +[ + { "class" : "Lacuna::DB::Result::Building::Archaeology", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Capitol", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::CloakingLab", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Development", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::DistributionCenter", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::DistributionCenter", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Espionage", "level" : "15" }, + { "class" : "Lacuna::DB::Result::Building::Intelligence", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::MunitionsLab", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Observatory", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Oversight", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::AlgaePond", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::AmalgusMeadow", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::BeeldebanNest", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::DentonBrambles", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GeoThermalVent", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GratchsGauntlet", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::GreatBallOfJunk", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::InterDimensionalRift", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::NaturalSpring", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Permanent::Volcano", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::PilotTraining", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::PoliticsTraining", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Propulsion", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SAW", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Security", "level" : "10" }, + { "class" : "Lacuna::DB::Result::Building::Shipyard", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Shipyard", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Shipyard", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::SpacePort", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Stockpile", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Trade", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Exchanger", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Exchanger", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Waste::Sequestration", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Water::AtmosphericEvaporator", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Water::AtmosphericEvaporator", "level" : "25" }, + { "class" : "Lacuna::DB::Result::Building::Water::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Water::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Ore::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Ore::Storage", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Energy::Reserve", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Energy::Reserve", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Food::Reserve", "level" : "30" }, + { "class" : "Lacuna::DB::Result::Building::Food::Reserve", "level" : "30" } +] + +# Lacuna::DB::Result::Building::Archaeology +# Lacuna::DB::Result::Building::Capitol +# Lacuna::DB::Result::Building::CloakingLab +# Lacuna::DB::Result::Building::DeployedBleeder +# Lacuna::DB::Result::Building::Development +# Lacuna::DB::Result::Building::DistributionCenter +# Lacuna::DB::Result::Building::Embassy +# Lacuna::DB::Result::Building::Energy::Fission +# Lacuna::DB::Result::Building::Energy::Fusion +# Lacuna::DB::Result::Building::Energy::Geo +# Lacuna::DB::Result::Building::Energy::Hydrocarbon +# Lacuna::DB::Result::Building::Energy::Reserve +# Lacuna::DB::Result::Building::Energy::Singularity +# Lacuna::DB::Result::Building::Energy::Waste +# Lacuna::DB::Result::Building::EntertainmentDistrict +# Lacuna::DB::Result::Building::Espionage +# Lacuna::DB::Result::Building::Food +# Lacuna::DB::Result::Building::Food::Algae +# Lacuna::DB::Result::Building::Food::Apple +# Lacuna::DB::Result::Building::Food::Bean +# Lacuna::DB::Result::Building::Food::Beeldeban +# Lacuna::DB::Result::Building::Food::Bread +# Lacuna::DB::Result::Building::Food::Burger +# Lacuna::DB::Result::Building::Food::Cheese +# Lacuna::DB::Result::Building::Food::Chip +# Lacuna::DB::Result::Building::Food::Cider +# Lacuna::DB::Result::Building::Food::Corn +# Lacuna::DB::Result::Building::Food::CornMeal +# Lacuna::DB::Result::Building::Food::Dairy +# Lacuna::DB::Result::Building::Food::Lapis +# Lacuna::DB::Result::Building::Food::Malcud +# Lacuna::DB::Result::Building::Food::Pancake +# Lacuna::DB::Result::Building::Food::Pie +# Lacuna::DB::Result::Building::Food::Potato +# Lacuna::DB::Result::Building::Food::Reserve +# Lacuna::DB::Result::Building::Food::Root +# Lacuna::DB::Result::Building::Food::Shake +# Lacuna::DB::Result::Building::Food::Soup +# Lacuna::DB::Result::Building::Food::Syrup +# Lacuna::DB::Result::Building::Food::Wheat +# Lacuna::DB::Result::Building::GasGiantLab +# Lacuna::DB::Result::Building::GeneticsLab +# Lacuna::DB::Result::Building::Intelligence +# Lacuna::DB::Result::Building::IntelTraining +# Lacuna::DB::Result::Building::LCOTa +# Lacuna::DB::Result::Building::LCOTb +# Lacuna::DB::Result::Building::LCOTc +# Lacuna::DB::Result::Building::LCOTd +# Lacuna::DB::Result::Building::LCOTe +# Lacuna::DB::Result::Building::LCOTf +# Lacuna::DB::Result::Building::LCOTg +# Lacuna::DB::Result::Building::LCOTh +# Lacuna::DB::Result::Building::LCOTi +# Lacuna::DB::Result::Building::LuxuryHousing +# Lacuna::DB::Result::Building::MayhemTraining +# Lacuna::DB::Result::Building::MercenariesGuild +# Lacuna::DB::Result::Building::MissionCommand +# Lacuna::DB::Result::Building::Module::ArtMuseum +# Lacuna::DB::Result::Building::Module::CulinaryInstitute +# Lacuna::DB::Result::Building::Module::IBS +# Lacuna::DB::Result::Building::Module::OperaHouse +# Lacuna::DB::Result::Building::Module::Parliament +# Lacuna::DB::Result::Building::Module::PoliceStation +# Lacuna::DB::Result::Building::Module::StationCommand +# Lacuna::DB::Result::Building::Module::Warehouse +# Lacuna::DB::Result::Building::MunitionsLab +# Lacuna::DB::Result::Building::Network19 +# Lacuna::DB::Result::Building::Observatory +# Lacuna::DB::Result::Building::Ore::Mine +# Lacuna::DB::Result::Building::Ore::Ministry +# Lacuna::DB::Result::Building::Ore::Refinery +# Lacuna::DB::Result::Building::Ore::Storage +# Lacuna::DB::Result::Building::Oversight +# Lacuna::DB::Result::Building::Park +# Lacuna::DB::Result::Building::Permanent::AlgaePond +# Lacuna::DB::Result::Building::Permanent::AmalgusMeadow +# Lacuna::DB::Result::Building::Permanent::Beach1 +# Lacuna::DB::Result::Building::Permanent::Beach10 +# Lacuna::DB::Result::Building::Permanent::Beach11 +# Lacuna::DB::Result::Building::Permanent::Beach12 +# Lacuna::DB::Result::Building::Permanent::Beach13 +# Lacuna::DB::Result::Building::Permanent::Beach2 +# Lacuna::DB::Result::Building::Permanent::Beach3 +# Lacuna::DB::Result::Building::Permanent::Beach4 +# Lacuna::DB::Result::Building::Permanent::Beach5 +# Lacuna::DB::Result::Building::Permanent::Beach6 +# Lacuna::DB::Result::Building::Permanent::Beach7 +# Lacuna::DB::Result::Building::Permanent::Beach8 +# Lacuna::DB::Result::Building::Permanent::Beach9 +# Lacuna::DB::Result::Building::Permanent::BeeldebanNest +# Lacuna::DB::Result::Building::Permanent::BlackHoleGenerator +# Lacuna::DB::Result::Building::Permanent::CitadelOfKnope +# Lacuna::DB::Result::Building::Permanent::CrashedShipSite +# Lacuna::DB::Result::Building::Permanent::Crater +# Lacuna::DB::Result::Building::Permanent::DentonBrambles +# Lacuna::DB::Result::Building::Permanent::EssentiaVein +# Lacuna::DB::Result::Building::Permanent::GasGiantPlatform +# Lacuna::DB::Result::Building::Permanent::GeoThermalVent +# Lacuna::DB::Result::Building::Permanent::GratchsGauntlet +# Lacuna::DB::Result::Building::Permanent::GreatBallOfJunk +# Lacuna::DB::Result::Building::Permanent::Grove +# Lacuna::DB::Result::Building::Permanent::HallsOfVrbansk +# Lacuna::DB::Result::Building::Permanent::InterDimensionalRift +# Lacuna::DB::Result::Building::Permanent::JunkHengeSculpture +# Lacuna::DB::Result::Building::Permanent::KalavianRuins +# Lacuna::DB::Result::Building::Permanent::KasternsKeep +# Lacuna::DB::Result::Building::Permanent::Lagoon +# Lacuna::DB::Result::Building::Permanent::Lake +# Lacuna::DB::Result::Building::Permanent::LapisForest +# Lacuna::DB::Result::Building::Permanent::LibraryOfJith +# Lacuna::DB::Result::Building::Permanent::MalcudField +# Lacuna::DB::Result::Building::Permanent::MassadsHenge +# Lacuna::DB::Result::Building::Permanent::MetalJunkArches +# Lacuna::DB::Result::Building::Permanent::NaturalSpring +# Lacuna::DB::Result::Building::Permanent::OracleOfAnid +# Lacuna::DB::Result::Building::Permanent::PantheonOfHagness +# Lacuna::DB::Result::Building::Permanent::PyramidJunkSculpture +# Lacuna::DB::Result::Building::Permanent::Ravine +# Lacuna::DB::Result::Building::Permanent::RockyOutcrop +# Lacuna::DB::Result::Building::Permanent::Sand +# Lacuna::DB::Result::Building::Permanent::SpaceJunkPark +# Lacuna::DB::Result::Building::Permanent::TempleOfTheDrajilites +# Lacuna::DB::Result::Building::Permanent::TerraformingPlatform +# Lacuna::DB::Result::Building::Permanent::TheDillonForge +# Lacuna::DB::Result::Building::Permanent::Volcano +# Lacuna::DB::Result::Building::PilotTraining +# Lacuna::DB::Result::Building::PlanetaryCommand +# Lacuna::DB::Result::Building::PoliticsTraining +# Lacuna::DB::Result::Building::Propulsion +# Lacuna::DB::Result::Building::SAW +# Lacuna::DB::Result::Building::Security +# Lacuna::DB::Result::Building::Shipyard +# Lacuna::DB::Result::Building::SpacePort +# Lacuna::DB::Result::Building::SSLa +# Lacuna::DB::Result::Building::SSLb +# Lacuna::DB::Result::Building::SSLc +# Lacuna::DB::Result::Building::SSLd +# Lacuna::DB::Result::Building::Stockpile +# Lacuna::DB::Result::Building::SubspaceSupplyDepot +# Lacuna::DB::Result::Building::SupplyPod +# Lacuna::DB::Result::Building::TerraformingLab +# Lacuna::DB::Result::Building::TheftTraining +# Lacuna::DB::Result::Building::ThemePark +# Lacuna::DB::Result::Building::Trade +# Lacuna::DB::Result::Building::Transporter +# Lacuna::DB::Result::Building::University +# Lacuna::DB::Result::Building::Waste::Digester +# Lacuna::DB::Result::Building::Waste::Exchanger +# Lacuna::DB::Result::Building::Waste::Recycling +# Lacuna::DB::Result::Building::Waste::Sequestration +# Lacuna::DB::Result::Building::Waste::Treatment +# Lacuna::DB::Result::Building::Water::AtmosphericEvaporator +# Lacuna::DB::Result::Building::Water::Production +# Lacuna::DB::Result::Building::Water::Purification +# Lacuna::DB::Result::Building::Water::Reclamation +# Lacuna::DB::Result::Building::Water::Storage -- 2.51.2 From 5d373ed881c9862eee8974d989ca96737bb9ceb2 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Tue, 15 May 2012 23:06:59 -0600 Subject: [PATCH 04/19] Updated changes.txt --- var/www/public/changes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index f1575ba3..d807a055 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,4 +1,5 @@ 3.0851: + - Mod: Multiple plans buildable in Archaeology Ministry via API. - Mod: view_plans from Planetary and Station Commands consolidated. UI updated to reflect. - Mod: You don't have to build all Halls of Vrbansk to sacrifice (only one) - Add: API only, supply chain to any planet or SS. Note. No UI support yet. -- 2.51.2 From d869ed861f3d3931aa6c2d2629cfddcdf1795b7b Mon Sep 17 00:00:00 2001 From: fireartist Date: Wed, 16 May 2012 13:29:20 +0100 Subject: [PATCH 05/19] delete_supply_chain: don't bypass db remove_supply_chain was skipping removing ships from last chain. was skipping recalc_waste_production. fixed typo in method-name --- lib/Lacuna/DB/Result/Building/Trade.pm | 2 +- lib/Lacuna/RPC/Building/Trade.pm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Lacuna/DB/Result/Building/Trade.pm b/lib/Lacuna/DB/Result/Building/Trade.pm index 9d7a7599..47b82907 100644 --- a/lib/Lacuna/DB/Result/Building/Trade.pm +++ b/lib/Lacuna/DB/Result/Building/Trade.pm @@ -209,7 +209,7 @@ sub remove_waste_chain { sub remove_supply_chain { my ($self, $supply_chain) = @_; - if ($self->supply_chain->count == 1) { + if ($self->supply_chains->count == 1) { my $ships = $self->supply_ships; while (my $ship = $ships->next) { $self->sent_supply_ship_home($supply_chain->target, $ship); diff --git a/lib/Lacuna/RPC/Building/Trade.pm b/lib/Lacuna/RPC/Building/Trade.pm index de38cd32..efc59d8a 100644 --- a/lib/Lacuna/RPC/Building/Trade.pm +++ b/lib/Lacuna/RPC/Building/Trade.pm @@ -256,7 +256,7 @@ sub delete_supply_chain { my $chain = Lacuna->db->resultset('Lacuna::DB::Result::SupplyChain')->find($supply_chain_id); if ($chain) { - $chain->delete; + $chain->remove_supply_chain; } return $self->view_supply_chains($session_id, $building_id); } -- 2.51.2 From 650e68412ebc95c43564bd3e2745a721cea0b8ac Mon Sep 17 00:00:00 2001 From: fireartist Date: Wed, 16 May 2012 15:14:19 +0100 Subject: [PATCH 06/19] delete_supply_chain: fix error in last commit --- lib/Lacuna/RPC/Building/Trade.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Lacuna/RPC/Building/Trade.pm b/lib/Lacuna/RPC/Building/Trade.pm index 1a5258b8..8506561f 100644 --- a/lib/Lacuna/RPC/Building/Trade.pm +++ b/lib/Lacuna/RPC/Building/Trade.pm @@ -256,7 +256,7 @@ sub delete_supply_chain { my $chain = Lacuna->db->resultset('Lacuna::DB::Result::SupplyChain')->find($supply_chain_id); if ($chain) { - $chain->remove_supply_chain; + $building->remove_supply_chain($chain); } return $self->view_supply_chains($session_id, $building_id); } -- 2.51.2 From 350cfe15f58cb40cb673b93bb7bfa1e8636e8215 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Wed, 16 May 2012 16:25:55 -0600 Subject: [PATCH 07/19] Side effect could get a habitable planet > 70. Fixed now. --- lib/Lacuna/RPC/Building/BlackHoleGenerator.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm b/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm index eb09c27d..8ae8a299 100644 --- a/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm +++ b/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm @@ -1036,6 +1036,7 @@ sub bhg_size { else { $current_size += randint(1,5) - 3; $current_size = 30 if ($current_size < 30); + $current_size = 70 if ($current_size > 70); } if ($old_size != $current_size && $body->empire) { $body->empire->send_predefined_message( -- 2.51.2 From 75a48edbd71347c5de682240bb0cb60c11242197 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Wed, 16 May 2012 17:26:26 -0600 Subject: [PATCH 08/19] Stop rapid decent of happiness with a recalc once you cross into negative happiness from negative plots. --- lib/Lacuna/DB/Result/Map/Body/Planet.pm | 2 ++ var/www/public/changes.txt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Lacuna/DB/Result/Map/Body/Planet.pm b/lib/Lacuna/DB/Result/Map/Body/Planet.pm index b72155dc..aa990e28 100644 --- a/lib/Lacuna/DB/Result/Map/Body/Planet.pm +++ b/lib/Lacuna/DB/Result/Map/Body/Planet.pm @@ -1265,6 +1265,8 @@ sub tick_to { my $seconds = $now->epoch - $self->last_tick->epoch; my $tick_rate = $seconds / 3600; $self->last_tick($now); +# Check to see if downward spiral still happening in happiness from negative plots. + $self->needs_recalc(1) if ($self->happiness < 0 and $self->happiness_hour < -20_000); if ($self->needs_recalc) { $self->recalc_stats; } diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index d807a055..e0491493 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -2,7 +2,7 @@ - Mod: Multiple plans buildable in Archaeology Ministry via API. - Mod: view_plans from Planetary and Station Commands consolidated. UI updated to reflect. - Mod: You don't have to build all Halls of Vrbansk to sacrifice (only one) - - Add: API only, supply chain to any planet or SS. Note. No UI support yet. + - Add: Supply chain to any planet or SS. - Fix: Damaged Trade Ministry reduces the waste transferred in a waste chain. - Fix: Scows are no longer tagged with 'Trade' - Mod: Change in consumption rates for secondary food. -- 2.51.2 From f54249e2a7782044053b2ec77fbeb937ca1a1a00 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Wed, 16 May 2012 23:45:46 -0600 Subject: [PATCH 09/19] Bottom limit of neg happy per hour. --- lib/Lacuna/DB/Result/Map/Body/Planet.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Lacuna/DB/Result/Map/Body/Planet.pm b/lib/Lacuna/DB/Result/Map/Body/Planet.pm index aa990e28..e7ccc21d 100644 --- a/lib/Lacuna/DB/Result/Map/Body/Planet.pm +++ b/lib/Lacuna/DB/Result/Map/Body/Planet.pm @@ -1097,6 +1097,7 @@ sub recalc_stats { else { $stats{happiness_hour} -= $plot_tax; } + $stats{happiness_hour} = -100_000_000_000 if ($stats{happiness_hour} < -100_000_000_000); } $self->update(\%stats); -- 2.51.2 From 3389df41f786ba9c6415ff9dc3df5c8d800e111e Mon Sep 17 00:00:00 2001 From: fireartist Date: Thu, 17 May 2012 14:58:26 +0100 Subject: [PATCH 10/19] admin: new delete-building button bypasses demolish requirements/costs --- lib/Lacuna/Web/Admin.pm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/Lacuna/Web/Admin.pm b/lib/Lacuna/Web/Admin.pm index 82eab0aa..947f19f7 100644 --- a/lib/Lacuna/Web/Admin.pm +++ b/lib/Lacuna/Web/Admin.pm @@ -294,7 +294,10 @@ sub www_view_buildings { $out .= sprintf('',$building->level); $out .= sprintf('%s',$building->is_upgrading, $building->id); $out .= sprintf('', $building->efficiency); - $out .= sprintf(''); + $out .= sprintf(''); + $out .= sprintf('
'); + $out .= sprintf('', $building->id); + $out .= sprintf('
'); } $out .= ''; return $self->wrap($out); @@ -312,6 +315,18 @@ sub www_set_efficiency { return $self->www_view_buildings($request, $building->body_id); } +sub www_delete_building { + my ($self, $request) = @_; + my $building = Lacuna->db->resultset('Lacuna::DB::Result::Building')->find($request->param('building_id')); + my $body = $building->body; + $building->delete; + $body->needs_recalc(1); + $body->needs_surface_refresh(1); + $body->update; + $body->tick; + return $self->www_view_buildings($request, $building->body_id); +} + sub www_view_ships { my ($self, $request, $body_id) = @_; $body_id ||= $request->param('body_id'); -- 2.51.2 From f401b3728c3c640f7c11f13e43adbd45f9b659e2 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Thu, 17 May 2012 08:48:27 -0600 Subject: [PATCH 11/19] changes --- var/www/public/changes.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index e0491493..a2f6c868 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,5 +1,5 @@ 3.0851: - - Mod: Multiple plans buildable in Archaeology Ministry via API. + - Mod: Multiple plans buildable in Archaeology Ministry. - Mod: view_plans from Planetary and Station Commands consolidated. UI updated to reflect. - Mod: You don't have to build all Halls of Vrbansk to sacrifice (only one) - Add: Supply chain to any planet or SS. -- 2.51.2 From f98a9b520f716856b9bee088b981c48597944ec9 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Thu, 17 May 2012 09:14:14 -0600 Subject: [PATCH 12/19] Cleaned changes. --- var/www/public/changes.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index a2f6c868..4f347683 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,5 +1,5 @@ 3.0851: - - Mod: Multiple plans buildable in Archaeology Ministry. + - Mod: Multiple plans buildable with one call from Archaeology Ministry. - Mod: view_plans from Planetary and Station Commands consolidated. UI updated to reflect. - Mod: You don't have to build all Halls of Vrbansk to sacrifice (only one) - Add: Supply chain to any planet or SS. @@ -13,7 +13,7 @@ - Fix: Deployed Bleeders no longer count toward population totals. - Mod: Supply Pods no longer use a plot. - Mod: Being at negative plots makes your people unhappy. - - Mod: Stockpile rules change in testing. + - Mod: Stockpile rules change. University levels higher than 25 gives bonus. - Mod: Short Range Colony Ships faster, but limited in range. 3.0850: -- 2.51.2 From a5170b1a3532500f00417efbb4e16e160f11fbb5 Mon Sep 17 00:00:00 2001 From: fireartist Date: Thu, 17 May 2012 16:32:42 +0100 Subject: [PATCH 13/19] forge: provide subsidy_cost in api forge/view --- lib/Lacuna/DB/Result/Building/Permanent/TheDillonForge.pm | 2 ++ lib/Lacuna/RPC/Building/TheDillonForge.pm | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/Lacuna/DB/Result/Building/Permanent/TheDillonForge.pm b/lib/Lacuna/DB/Result/Building/Permanent/TheDillonForge.pm index 6fb8af5b..619ce72f 100644 --- a/lib/Lacuna/DB/Result/Building/Permanent/TheDillonForge.pm +++ b/lib/Lacuna/DB/Result/Building/Permanent/TheDillonForge.pm @@ -11,6 +11,8 @@ use Lacuna::Util qw(randint); use constant controller_class => 'Lacuna::RPC::Building::TheDillonForge'; +use constant subsidy_cost => 2; + around can_build => sub { my ($orig, $self, $body) = @_; confess [1013,"You can't build The Dillon Forge by any known process. How the hell did you manage to get a plan!?"]; diff --git a/lib/Lacuna/RPC/Building/TheDillonForge.pm b/lib/Lacuna/RPC/Building/TheDillonForge.pm index 028d54a0..a163598c 100644 --- a/lib/Lacuna/RPC/Building/TheDillonForge.pm +++ b/lib/Lacuna/RPC/Building/TheDillonForge.pm @@ -29,6 +29,7 @@ around 'view' => sub { else { $out->{tasks} = $self->_forge_tasks($building); } + $out->{subsidy_cost} = $building->subsidy_cost; return $out; }; @@ -135,12 +136,14 @@ sub subsidize { confess [1010, "Nothing is being done!"]; } - unless ($empire->essentia >= 2) { + my $subsidy_cost = $building->subsidy_cost; + + unless ($empire->essentia >= $subsidy_cost) { confess [1011, "Not enough essentia."]; } $building->finish_work->update; - $empire->spend_essentia(2, 'Dillon Forge subsidy after the fact'); + $empire->spend_essentia($subsidy_cost, 'Dillon Forge subsidy after the fact'); $empire->update; return $self->view($empire, $building); -- 2.51.2 From 5ff6681205fa0837e2e6055613f8f8ca89510670 Mon Sep 17 00:00:00 2001 From: fireartist Date: Thu, 17 May 2012 16:34:42 +0100 Subject: [PATCH 14/19] forge: update docs --- docs/TheDillonForge.pod | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/TheDillonForge.pod b/docs/TheDillonForge.pod index d7ff2e7b..3d47db58 100644 --- a/docs/TheDillonForge.pod +++ b/docs/TheDillonForge.pod @@ -15,6 +15,7 @@ This method is extended to include the list of tasks. "current_task" : "make_plan", "seconds_remaining" : 120, "can" : 0, + "subsidy_cost" : 2, "make_plan" : [ { -- 2.51.2 From e610579b7170b6d7bd981372fdabad3b031a681c Mon Sep 17 00:00:00 2001 From: fireartist Date: Thu, 17 May 2012 21:25:15 +0100 Subject: [PATCH 15/19] supply-chain: fix method-name typo --- lib/Lacuna/DB/Result/Building/Trade.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Lacuna/DB/Result/Building/Trade.pm b/lib/Lacuna/DB/Result/Building/Trade.pm index 47b82907..4c50708b 100644 --- a/lib/Lacuna/DB/Result/Building/Trade.pm +++ b/lib/Lacuna/DB/Result/Building/Trade.pm @@ -212,7 +212,7 @@ sub remove_supply_chain { if ($self->supply_chains->count == 1) { my $ships = $self->supply_ships; while (my $ship = $ships->next) { - $self->sent_supply_ship_home($supply_chain->target, $ship); + $self->send_supply_ship_home($supply_chain->target, $ship); } } $supply_chain->delete; -- 2.51.2 From a6079c4356e23d4a4bb0a7c84173c818de16a910 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sun, 20 May 2012 11:07:26 -0600 Subject: [PATCH 16/19] Had less than greater than switched. --- lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm b/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm index 6f2f3cb5..dcafff1d 100644 --- a/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm +++ b/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm @@ -24,7 +24,7 @@ before 'can_demolish' => sub { my $self = shift; my $body = $self->body; my $buildings = $body->buildings; - return if ($body->orbit > $body->empire->max_orbit || $body->orbit < $body->empire->min_orbit); + return if ($body->orbit < $body->empire->max_orbit || $body->orbit > $body->empire->min_orbit); my $tp_blds = $buildings->search({ class => 'Lacuna::DB::Result::Building::Permanent::TerraformingPlatform' }); -- 2.51.2 From a0dc3be12f5da5fd84c930e98601b59cbe532af8 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sun, 20 May 2012 11:37:41 -0600 Subject: [PATCH 17/19] and... --- lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm b/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm index dcafff1d..584c3267 100644 --- a/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm +++ b/lib/Lacuna/DB/Result/Building/Permanent/TerraformingPlatform.pm @@ -24,7 +24,7 @@ before 'can_demolish' => sub { my $self = shift; my $body = $self->body; my $buildings = $body->buildings; - return if ($body->orbit < $body->empire->max_orbit || $body->orbit > $body->empire->min_orbit); + return if ($body->orbit > $body->empire->min_orbit && $body->orbit < $body->empire->max_orbit); my $tp_blds = $buildings->search({ class => 'Lacuna::DB::Result::Building::Permanent::TerraformingPlatform' }); -- 2.51.2 From 3480f814555b7fd91f4627935ea515f8eb99224b Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sun, 20 May 2012 12:03:20 -0600 Subject: [PATCH 18/19] Initialize undefined array. --- lib/Lacuna/Role/Container.pm | 37 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/lib/Lacuna/Role/Container.pm b/lib/Lacuna/Role/Container.pm index ae51ba46..ad98e0c0 100644 --- a/lib/Lacuna/Role/Container.pm +++ b/lib/Lacuna/Role/Container.pm @@ -112,7 +112,7 @@ sub unload { sub format_description_of_payload { my ($self) = @_; - my $item_arr; + my $item_arr = []; my $scratch; my $payload = $self->payload; @@ -166,32 +166,35 @@ sub format_description_of_payload { undef $scratch; my $spies = Lacuna->db->resultset('Lacuna::DB::Result::Spies'); if (exists $payload->{spies}) { - foreach my $id (@{$payload->{spies}}) { - my $spy = $spies->find($id); - next unless defined $spy; - push @{$scratch}, 'Level '.$spy->level.' spy named '.$spy->name . ' (transport)'; - } + foreach my $id (@{$payload->{spies}}) { + my $spy = $spies->find($id); + next unless defined $spy; + push @{$scratch}, 'Level '.$spy->level.' spy named '.$spy->name . ' (transport)'; + } + push @{$item_arr}, @{consolidate_items($scratch)} if (defined($scratch)); } - push @{$item_arr}, @{consolidate_items($scratch)} if (defined($scratch)); # prisoners undef $scratch; if (exists $payload->{prisoners}) { - foreach my $id (@{$payload->{prisoners}}) { - my $spy = $spies->find($id); - next unless defined $spy; - push @{$scratch}, 'Level '.$spy->level.' spy named '.$spy->name . ' (prisoner) sentence expires '.$spy->format_available_on; - } + foreach my $id (@{$payload->{prisoners}}) { + my $spy = $spies->find($id); + next unless defined $spy; + push @{$scratch}, + 'Level '.$spy->level.' spy named '.$spy->name . + ' (prisoner) sentence expires '.$spy->format_available_on; + } + push @{$item_arr}, @{consolidate_items($scratch)} if (defined($scratch)); } - push @{$item_arr}, @{consolidate_items($scratch)} if (defined($scratch)); # fetch spies undef $scratch; if (exists $payload->{fetch_spies}) { - foreach my $id (@{$payload->{fetch_spies}}) { - my $spy = $spies->find($id); - push @{$scratch}, 'Level '.$spy->level.' spy named '.$spy->name . ' (fetch upon arrival)'; - } + foreach my $id (@{$payload->{fetch_spies}}) { + my $spy = $spies->find($id); + push @{$scratch}, 'Level '.$spy->level.' spy named '.$spy->name . ' (fetch upon arrival)'; + } + push @{$item_arr}, @{consolidate_items($scratch)} if (defined($scratch)); } return $item_arr; -- 2.51.2 From 5077e97a2233b869c6bb8ad69fd9e4144662f22c Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sun, 20 May 2012 13:30:43 -0600 Subject: [PATCH 19/19] Updated to show quantity of plans returned. --- docs/PlanetaryCommand.pod | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/PlanetaryCommand.pod b/docs/PlanetaryCommand.pod index 1ef53722..ffc2ccf8 100644 --- a/docs/PlanetaryCommand.pod +++ b/docs/PlanetaryCommand.pod @@ -62,6 +62,7 @@ Returns a list of all the plans you've collected through various means. "status" : { ... }, "plans" : [ { + "quantity" : 23, "name" : "Malcud Fungus Farm", "level" : 1, "extra_build_level" : 5 @@ -82,4 +83,4 @@ A session id. The unique id of the PCC. -=cut \ No newline at end of file +=cut -- 2.51.2