From b9295c129fd3e5dfb5876d731adf6754827affa4 Mon Sep 17 00:00:00 2001 From: ian docherty Date: Wed, 6 Jun 2012 15:19:03 -0400 Subject: [PATCH 1/6] SQL to delete abandoned permanent buildings --- var/upgrades/3.0854.sql | 2 ++ var/www/public/changes.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/var/upgrades/3.0854.sql b/var/upgrades/3.0854.sql index da71e190..36918486 100644 --- a/var/upgrades/3.0854.sql +++ b/var/upgrades/3.0854.sql @@ -29,3 +29,5 @@ create table fleet ( constraint wc_f_foreign_star_id foreign key (foreign_star_id) references star (id) ); +delete building from body,building where building.body_id=body.id and building.class not like "%Perm%" and body.empire_id is null; + diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 1d9f3ce6..3cc0a2dd 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,5 +1,6 @@ 3.0854: - Add: Backend support only for fleet actions. No changes to gameplay at this time. + - Fix: None-permanent buildings on abandoned planets have been cleared. 3.0853: - Mod: Excavator destruction will trigger a replacement excavator to be sent if available. -- 2.51.2 From 657b5fb14f2737963e10ff9a23b294fa8722a1ba Mon Sep 17 00:00:00 2001 From: lemming552 Date: Fri, 8 Jun 2012 17:29:44 -0600 Subject: [PATCH 2/6] More antifarming. --- lib/Lacuna/DB/Result/Building/Archaeology.pm | 92 +++++++++++--------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/lib/Lacuna/DB/Result/Building/Archaeology.pm b/lib/Lacuna/DB/Result/Building/Archaeology.pm index bdfb984b..80e2e5c5 100644 --- a/lib/Lacuna/DB/Result/Building/Archaeology.pm +++ b/lib/Lacuna/DB/Result/Building/Archaeology.pm @@ -346,51 +346,59 @@ sub found_plan { } sub found_artifact { - my ($self, $body, $level) = @_; + my ($self, $body, $amlevel) = @_; - my $plan_types = plans_of_type(); - my $artifacts; - foreach my $building (@{$body->building_cache}) { - unless ( grep { $building->class eq $_ } @{$plan_types->{disallow}}) { - push @{$artifacts}, $building; + my $plan_types = plans_of_type(); + my $artifacts; + foreach my $building (@{$body->building_cache}) { + unless ( grep { $building->class eq $_ } @{$plan_types->{disallow}}) { + push @{$artifacts}, $building; + } + } + return (0,0,"Nothing") unless (defined($artifacts)); + my $select = random_element($artifacts); + my $class; my $plan_level; my $plus = 0; my $name; my $bld_destroy; + if ($amlevel > $select->level and randint(1, int(3 * $amlevel/2)) >= $select->level) { + $class = $select->class; + $plan_level = 1; + $plus = int( ($select->level - 1) * 3/5); #Max doable would be 1+17 + $name = $select->name; + $bld_destroy = 100; + } + elsif (randint(1,2) == 1) { + $class = $select->class; + if ($select->level == 1 and (randint(0,99) < 50) ) { + $plan_level = 0; + $bld_destroy = 100; + $name = "Nothing"; + } + else { + $plan_level = 1; + $bld_destroy = 10; + $name = $select->name; + } + $plus = 0; + } + else { + $class = $select->class; + $plan_level = randint(1,$amlevel); # Slight chance of getting a level 30 plan. + $plan_level = $select->level if ($plan_level > $select->level); + $plus = 0; + $name = $select->name; + $bld_destroy = 35; + } + $plan_level = 30 if ($plan_level > 30); + $plus = 30 if ($plus > 30); + $self->body->add_plan($class, $plan_level, $plus) if ($plan_level >= 1); + if ($select->level == 1 or randint(0,99) < $bld_destroy) { + $select->delete; + } + else { + $select->level($select->level - 1); + $select->update; } - } - return (0,0,"Nothing") unless (defined($artifacts)); - my $select = random_element($artifacts); - my $class; my $lvl; my $plus; my $name; my $bld_destroy; - if ($level > $select->level and randint(1, int(3 * $level/2)) >= $select->level) { - $class = $select->class; - $lvl = 1; - $plus = int( ($select->level - 1) * 2/3); #Max doable would be 1+18 - $name = $select->name; - $bld_destroy = 100; - } - elsif (randint(1,2) == 1) { - $class = $select->class; - $lvl = 1; - $plus = 0; - $name = $select->name; - $bld_destroy = 10; - } - else { - $class = $select->class; - $lvl = randint(1,$select->level); # Slight chance of getting a level 30 plan. - $plus = 0; - $name = $select->name; - $bld_destroy = 25; - } - $lvl = 30 if ($lvl > 30); - $plus = 30 if ($plus > 30); - $self->body->add_plan($class, $lvl, $plus); - if ($select->level == 1 or randint(0,99) < $bld_destroy) { - $select->delete; - } - else { - $select->level($select->level - 1); - $select->update; - } - return ($lvl, $plus, $name); + return ($plan_level, $plus, $name); } sub found_glyph { -- 2.51.2 From 8068439bfdecd1072693af53fe549ab34327f51d Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sat, 9 Jun 2012 09:57:49 -0600 Subject: [PATCH 3/6] Efficiency zero SAWs do not need to be added to defense. --- lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm b/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm index 7d0fb05a..d26909f3 100644 --- a/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm +++ b/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm @@ -27,8 +27,6 @@ after handle_arrival_procedures => sub { $body_attacked->set_last_attacked_by($ship_body->id); # get SAWs -# $self->saw_combat($body_attacked) if $is_planet; - $self->system_saw_combat; # get allies @@ -349,33 +347,35 @@ sub system_saw_combat { sub saw_stats { my ($self, $body) = @_; - my @saws = $body->get_buildings_of_class('Lacuna::DB::Result::Building::SAW'); + my $saws = $body->get_buildings_of_class('Lacuna::DB::Result::Building::SAW'); my $planet_combat = 0; my $cnt = 0; - foreach my $saw (@saws) { + my @defending_saws; + while (my $saw = $saws->next) { $cnt++; next if $saw->level < 1; next if $saw->efficiency < 1; $planet_combat += int( (5 * ($saw->level + 1) * ($saw->level+1) * $saw->efficiency)/2 + 0.5); - push @saws, $saw; + push @defending_saws, $saw; last if $cnt >= 10; } - return \@saws, $planet_combat; + return \@defending_saws, $planet_combat; } sub saw_combat { - my ($self, $saw, $saw_combat) = @_; + my ($self, $saw, $total_combat) = @_; + return if ($saw->combat == 0); # printf "ship:%6d:%5d saw:%6d:%2d:%3d total:%8d ", -# $self->id, $self->combat, $saw->id, $saw->level, $saw->efficiency, $saw_combat; - if ($self->combat >= $saw_combat) { +# $self->id, $self->combat, $saw->id, $saw->level, $saw->efficiency, $total_combat; + if ($self->combat >= $total_combat) { $saw->spend_efficiency(100); $self->saw_disabled($saw); # print "100\n"; } else { - my $perc_1 = int( ($self->combat * 100)/$saw_combat + 0.5); + my $perc_1 = int( ($self->combat * 100)/$total_combat + 0.5); my $perc_2 = int( $self->combat * 100/ (5 * ($saw->level + 1) * ($saw->level+1) * $saw->efficiency)); $perc_2 = 100 if $perc_2 > 99; @@ -391,7 +391,7 @@ sub saw_combat { $saw->start_work({}, 60 * 15); } $saw->update; - $self->damage_in_combat($saw, $saw_combat); + $self->damage_in_combat($saw, $total_combat); } 1; -- 2.51.2 From 6f7f0426d2d96b6e7149a653be62d2242df5794f Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sat, 9 Jun 2012 10:30:50 -0600 Subject: [PATCH 4/6] bad method call fix. --- lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm b/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm index d26909f3..55f7c492 100644 --- a/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm +++ b/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm @@ -347,12 +347,12 @@ sub system_saw_combat { sub saw_stats { my ($self, $body) = @_; - my $saws = $body->get_buildings_of_class('Lacuna::DB::Result::Building::SAW'); + my @planet_saws = $body->get_buildings_of_class('Lacuna::DB::Result::Building::SAW'); my $planet_combat = 0; my $cnt = 0; my @defending_saws; - while (my $saw = $saws->next) { + for my $saw (@planet_saws) { $cnt++; next if $saw->level < 1; next if $saw->efficiency < 1; -- 2.51.2 From 7caf162265e15daf4aa98be21ad2b9bd0f3e89d7 Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sat, 9 Jun 2012 10:39:32 -0600 Subject: [PATCH 5/6] Sigh. --- lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm b/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm index 55f7c492..c6aa1ef3 100644 --- a/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm +++ b/lib/Lacuna/Role/Ship/Arrive/TriggerDefense.pm @@ -366,7 +366,7 @@ sub saw_stats { sub saw_combat { my ($self, $saw, $total_combat) = @_; - return if ($saw->combat == 0); + return if ($saw->efficiency == 0); # printf "ship:%6d:%5d saw:%6d:%2d:%3d total:%8d ", # $self->id, $self->combat, $saw->id, $saw->level, $saw->efficiency, $total_combat; if ($self->combat >= $total_combat) { -- 2.51.2 From 889639de94989c7241d4394b7702d16aa493ebaa Mon Sep 17 00:00:00 2001 From: lemming552 Date: Sat, 9 Jun 2012 19:54:24 -0600 Subject: [PATCH 6/6] Updated changes.txt --- var/www/public/changes.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 3cc0a2dd..fe8880e7 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -1,6 +1,8 @@ 3.0854: - Add: Backend support only for fleet actions. No changes to gameplay at this time. - Fix: None-permanent buildings on abandoned planets have been cleared. + - Fix: Spies no longer stealing level 1 buildings. + - Fix: 0% Efficiency Saws will no longer shoot down zero combat ships. 3.0853: - Mod: Excavator destruction will trigger a replacement excavator to be sent if available. -- 2.51.2