diff --git a/lib/Lacuna/DB/Result/Building/Module/ArtMuseum.pm b/lib/Lacuna/DB/Result/Building/Module/ArtMuseum.pm index 02f5ee42..9f24f461 100644 --- a/lib/Lacuna/DB/Result/Building/Module/ArtMuseum.pm +++ b/lib/Lacuna/DB/Result/Building/Module/ArtMuseum.pm @@ -4,6 +4,7 @@ use Moose; use utf8; no warnings qw(uninitialized); extends 'Lacuna::DB::Result::Building::Module'; +with 'Lacuna::Role::Influencer'; use constant controller_class => 'Lacuna::RPC::Building::ArtMuseum'; use constant image => 'artmuseum'; diff --git a/lib/Lacuna/DB/Result/Building/Module/CulinaryInstitute.pm b/lib/Lacuna/DB/Result/Building/Module/CulinaryInstitute.pm index e83e7fab..b37bb142 100644 --- a/lib/Lacuna/DB/Result/Building/Module/CulinaryInstitute.pm +++ b/lib/Lacuna/DB/Result/Building/Module/CulinaryInstitute.pm @@ -4,6 +4,7 @@ use Moose; use utf8; no warnings qw(uninitialized); extends 'Lacuna::DB::Result::Building::Module'; +with 'Lacuna::Role::Influencer'; use constant controller_class => 'Lacuna::RPC::Building::CulinaryInstitute'; use constant image => 'culinaryinstitute'; diff --git a/lib/Lacuna/DB/Result/Building/Module/IBS.pm b/lib/Lacuna/DB/Result/Building/Module/IBS.pm index dfe500c2..7cc71ae5 100644 --- a/lib/Lacuna/DB/Result/Building/Module/IBS.pm +++ b/lib/Lacuna/DB/Result/Building/Module/IBS.pm @@ -11,5 +11,25 @@ use constant name => 'Interstellar Broadcast System'; use constant max_instances_per_planet => 1; use constant energy_consumption => 600; +before demolish => sub { + my $self = shift; + my $laws = $self->body->laws->search({type => 'Jurisdiction'}); + while (my $law = $laws->next) { + $law->delete; + } +}; + +before downgrade => sub { + my $self = shift; + my $station = $self->body; + my $laws = $station->laws->search({type => 'Jurisdiction'}); + while (my $law = $laws->next) { + unless ($station->in_range_of_influence($law->star)) { + $law->delete; + } + } +}; + + no Moose; __PACKAGE__->meta->make_immutable(inline_constructor => 0); diff --git a/lib/Lacuna/DB/Result/Building/Module/OperaHouse.pm b/lib/Lacuna/DB/Result/Building/Module/OperaHouse.pm index 78779486..57ac7c55 100644 --- a/lib/Lacuna/DB/Result/Building/Module/OperaHouse.pm +++ b/lib/Lacuna/DB/Result/Building/Module/OperaHouse.pm @@ -4,6 +4,7 @@ use Moose; use utf8; no warnings qw(uninitialized); extends 'Lacuna::DB::Result::Building::Module'; +with 'Lacuna::Role::Influencer'; use constant controller_class => 'Lacuna::RPC::Building::OperaHouse'; use constant image => 'operahouse'; diff --git a/lib/Lacuna/Role/Influencer.pm b/lib/Lacuna/Role/Influencer.pm new file mode 100644 index 00000000..0e51bf19 --- /dev/null +++ b/lib/Lacuna/Role/Influencer.pm @@ -0,0 +1,29 @@ +package Lacuna::Role::Influencer; + +use Moose::Role; + +before demolish => sub { + my $self = shift; + my $station = $self->body; + my $influence_remaining = $station->influence_remaining - $self->level; + my $laws = $station->laws->search({type => 'Jurisdiction'},{order_by => { -desc => 'date_enacted'}}); + while (my $law = $laws->next) { + last if $influence_remaining >= 0; + $law->delete; + $influence_remaining++; + } +}; + +before downgrade => sub { + my $self = shift; + my $station = $self->body; + my $influence_remaining = $station->influence_remaining - 1; + my $laws = $station->laws->search({type => 'Jurisdiction'},{order_by => { -desc => 'date_enacted'}}); + while (my $law = $laws->next) { + last if $influence_remaining >= 0; + $law->delete; + $influence_remaining++; + } +}; + +1; diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index 4a9c4782..c50e7ca8 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -2,6 +2,7 @@ - Add: Added the Opera House, Art Museum, and Culinary Institute space station modules. - Rule: SAWs now cost less in upkeep. - Rule: Station modules cannot be upgraded past the station command level. + - Rule: If the IBS, Opera House, Art Museum, or Culinary institute are downgraded or demolished then the jurisdictional influence they exert is also repealed. - API: Added "station" element to the status of bodies and probed stars. - API: Added "alliance" and "influence" elements to the status of bodies that are space stations. - API: Added proposing enacting writs at Parliament level 4.