From c51b4867fdf658573ec41b4b93707abbfa0d51a2 Mon Sep 17 00:00:00 2001 From: ian docherty Date: Mon, 3 Oct 2011 11:11:08 -0400 Subject: [PATCH] Bug fix #22 Surface refresh flag --- .gitignore | 2 +- bin/summarize_server.pl | 48 +++++++++++++++---------- docs/Shipyard.pod | 2 ++ lib/Lacuna/DB/Result/Log/Colony.pm | 2 ++ lib/Lacuna/DB/Result/Log/Empire.pm | 2 ++ lib/Lacuna/DB/Result/Map/Body.pm | 1 + lib/Lacuna/DB/Result/Map/Body/Planet.pm | 6 ++++ t/bugs/0022_SurfaceRefresh.t | 30 ++++++++++++++++ var/upgrades/3.0814.sql | 10 ++++++ var/www/public/changes.txt | 5 +++ 10 files changed, 88 insertions(+), 20 deletions(-) create mode 100644 t/bugs/0022_SurfaceRefresh.t create mode 100644 var/upgrades/3.0814.sql diff --git a/.gitignore b/.gitignore index 172a4c00..f33af4bb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ etc/lacuna.conf etc/log4perl.conf etc/nginx.conf var/www/public/index.html - +var/www/public/api diff --git a/bin/summarize_server.pl b/bin/summarize_server.pl index ae234b3b..582df269 100644 --- a/bin/summarize_server.pl +++ b/bin/summarize_server.pl @@ -247,16 +247,18 @@ sub summarize_alliances { my $empires = $empire_logs->search({alliance_id => $alliance->id}); while ( my $empire = $empires->next) { $alliance_data{member_count}++; - $alliance_data{colony_count} += $empire->colony_count; - $alliance_data{population} += $empire->population; - $alliance_data{building_count} += $empire->building_count; - $alliance_data{average_building_level} += $empire->average_building_level; - $alliance_data{defense_success_rate} += $empire->defense_success_rate; - $alliance_data{offense_success_rate} += $empire->offense_success_rate; - $alliance_data{dirtiest} += $empire->dirtiest; - $alliance_data{spy_count} += $empire->spy_count; - $alliance_data{average_empire_size} += $empire->empire_size; - $alliance_data{average_university_level} += $empire->university_level; + $alliance_data{colony_count} += $empire->colony_count; + $alliance_data{space_station_count} += $empire->space_station_count; + $alliance_data{influence} += $empire->influence; + $alliance_data{population} += $empire->population; + $alliance_data{building_count} += $empire->building_count; + $alliance_data{average_building_level} += $empire->average_building_level; + $alliance_data{defense_success_rate} += $empire->defense_success_rate; + $alliance_data{offense_success_rate} += $empire->offense_success_rate; + $alliance_data{dirtiest} += $empire->dirtiest; + $alliance_data{spy_count} += $empire->spy_count; + $alliance_data{average_empire_size} += $empire->empire_size; + $alliance_data{average_university_level} += $empire->university_level; } if ($alliance_data{member_count}) { $alliance_data{average_empire_size} /= $alliance_data{member_count}; @@ -300,17 +302,19 @@ sub summarize_empires { my $colonies = $colony_logs->search({empire_id => $empire->id}); while ( my $colony = $colonies->next) { $empire_data{colony_count}++; - $empire_data{population} += $colony->population; - $empire_data{population_delta} += $colony->population_delta; - $empire_data{building_count} += $colony->building_count; + $empire_data{influence} += $colony->influence; + $empire_data{space_station_count}++ if $colony->is_space_station; + $empire_data{population} += $colony->population; + $empire_data{population_delta} += $colony->population_delta; + $empire_data{building_count} += $colony->building_count; $empire_data{average_building_level} += $colony->average_building_level; $empire_data{highest_building_level} = $colony->highest_building_level if ($colony->highest_building_level > $empire_data{highest_building_level}); - $empire_data{food_hour} += $colony->food_hour; - $empire_data{ore_hour} += $colony->ore_hour; - $empire_data{energy_hour} += $colony->energy_hour; - $empire_data{water_hour} += $colony->water_hour; - $empire_data{waste_hour} += $colony->waste_hour; - $empire_data{happiness_hour} += $colony->happiness_hour; + $empire_data{food_hour} += $colony->food_hour; + $empire_data{ore_hour} += $colony->ore_hour; + $empire_data{energy_hour} += $colony->energy_hour; + $empire_data{water_hour} += $colony->water_hour; + $empire_data{waste_hour} += $colony->waste_hour; + $empire_data{happiness_hour} += $colony->happiness_hour; $empire_data{defense_success_rate} += $colony->defense_success_rate; $empire_data{defense_success_rate_delta}+= $colony->defense_success_rate_delta; $empire_data{offense_success_rate} += $colony->offense_success_rate; @@ -362,6 +366,12 @@ sub summarize_colonies { empire_id => $planet->empire_id, empire_name => $planet->empire->name, ); + if ($planet->class =~ /Station$/) { + $colony_data{is_space_station} = 1; + $colony_data{influence} = $planet->influence_spent; + } + + my $spies = $spy_logs->search({planet_id => $planet->id}); while (my $spy = $spies->next) { $colony_data{spy_count}++; diff --git a/docs/Shipyard.pod b/docs/Shipyard.pod index d15ad93f..acc368aa 100644 --- a/docs/Shipyard.pod +++ b/docs/Shipyard.pod @@ -23,7 +23,9 @@ Retrieves what is already being built at this shipyard. "cost_to_subsidize" : 30, "ships_building" : [ { + "id" : "1234", "type" : "spy_pod", + "type_human" : "Spy Pod", "date_completed" : "01 31 2010 13:09:05 +0600" } ... diff --git a/lib/Lacuna/DB/Result/Log/Colony.pm b/lib/Lacuna/DB/Result/Log/Colony.pm index 00fa5faa..4decde9d 100644 --- a/lib/Lacuna/DB/Result/Log/Colony.pm +++ b/lib/Lacuna/DB/Result/Log/Colony.pm @@ -30,6 +30,8 @@ __PACKAGE__->add_columns( defense_success_rate_delta => { data_type => 'float', size => [6,6], default_value => 0 }, dirtiest => { data_type => 'int', size => 11, default_value => 0 }, dirtiest_delta => { data_type => 'int', size => 11, default_value => 0 }, + is_space_station => { data_type => 'int', size => 11, default_value => 0 }, + influence => { data_type => 'int', size => 11, default_value => 0 }, ); after 'sqlt_deploy_hook' => sub { diff --git a/lib/Lacuna/DB/Result/Log/Empire.pm b/lib/Lacuna/DB/Result/Log/Empire.pm index 584ba772..23b532e3 100644 --- a/lib/Lacuna/DB/Result/Log/Empire.pm +++ b/lib/Lacuna/DB/Result/Log/Empire.pm @@ -38,6 +38,8 @@ __PACKAGE__->add_columns( dirtiest_delta => { data_type => 'int', size => 11, default_value => 0 }, alliance_id => { data_type => 'int', is_nullable => 1 }, alliance_name => { data_type => 'varchar', size => 30, is_nullable => 1 }, + space_station_count => { data_type => 'int', size => 11, default_value => 0 }, + influence => { data_type => 'int', size => 11, default_value => 0 }, ); after 'sqlt_deploy_hook' => sub { diff --git a/lib/Lacuna/DB/Result/Map/Body.pm b/lib/Lacuna/DB/Result/Map/Body.pm index 6af5da93..d2d8c7f8 100644 --- a/lib/Lacuna/DB/Result/Map/Body.pm +++ b/lib/Lacuna/DB/Result/Map/Body.pm @@ -121,6 +121,7 @@ __PACKAGE__->add_columns( needs_surface_refresh => { data_type => 'tinyint', default_value => 0 }, restrict_coverage => { data_type => 'tinyint', default_value => 0 }, plots_available => { data_type => 'tinyint', default_value => 0 }, + surface_version => { data_type => 'tinyint', default_value => 0 }, ); after 'sqlt_deploy_hook' => sub { diff --git a/lib/Lacuna/DB/Result/Map/Body/Planet.pm b/lib/Lacuna/DB/Result/Map/Body/Planet.pm index c74d3d15..aa623d16 100644 --- a/lib/Lacuna/DB/Result/Map/Body/Planet.pm +++ b/lib/Lacuna/DB/Result/Map/Body/Planet.pm @@ -215,6 +215,12 @@ around get_status => sub { } } $out->{needs_surface_refresh} = $self->needs_surface_refresh; + if ($self->needs_surface_refresh) { + $self->surface_version($self->surface_version+1); + $self->update; + } + $out->{surface_version} = $self->surface_version; + $out->{empire}{alignment} = 'self'; $out->{plots_available} = $self->plots_available; $out->{building_count} = $self->building_count; diff --git a/t/bugs/0022_SurfaceRefresh.t b/t/bugs/0022_SurfaceRefresh.t new file mode 100644 index 00000000..2f7c8c6e --- /dev/null +++ b/t/bugs/0022_SurfaceRefresh.t @@ -0,0 +1,30 @@ +use lib '..','../../lib'; +use Test::More tests => 2; +use Test::Deep; +use 5.010; + +use strict; +use warnings; + +use TestHelper; +TestHelper->clear_all_test_empires; + +# BUG Plans are not displayed in alpha order in the Planetary Command Centre + +my $tester = TestHelper->new({ big_producer => 1 })->generate_test_empire->build_infrastructure; +my $tester_session_id = $tester->session->id; +my $empire = $tester->empire; +my $home = $empire->home_planet; + +my ($pcc) = $home->buildings->search({class => 'Lacuna::DB::Result::Building::PlanetaryCommand'}); + +$tester->post('planetarycommand', 'view_plans', [$tester_session_id, $pcc->id]); + +# do something to cause a surface refresh + +$tester->post('planetarycommand', 'view_plans', [$tester_session_id, $pcc->id]); + + +END { +# TestHelper->clear_all_test_empires; +} diff --git a/var/upgrades/3.0814.sql b/var/upgrades/3.0814.sql new file mode 100644 index 00000000..16289add --- /dev/null +++ b/var/upgrades/3.0814.sql @@ -0,0 +1,10 @@ +alter table colony_log add column is_space_station int(11) not null default '0'; +alter table colony_log add column influence int(11) not null default '0'; + + + +alter table empire_log add column space_station_count int(11) not null default '0'; +alter table empire_log add column influence int(11) not null default '0'; + +alter table body add column surface_version int(11) not null default '0'; + diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 4bb91460..b4938613 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,3 +1,8 @@ +3.0814 + - Fix: Alliance Stats now shows number of space stations and influence + - Fix: Updated documentation for Shipyard + - Fix: API - Added surface version number for bodies to better indicate that a refresh is needed + 3.0813 - Add: When one 20 Stars tournament ends, the next one should begin automatically. - Fix: Fix an issue with skip attack messages and excavators. -- 2.51.2