diff --git a/lib/Lacuna/DB/Result/Ships.pm b/lib/Lacuna/DB/Result/Ships.pm index 19d59282..e64ca093 100644 --- a/lib/Lacuna/DB/Result/Ships.pm +++ b/lib/Lacuna/DB/Result/Ships.pm @@ -18,6 +18,8 @@ has 'hostile_action' => ( sub _build_hostile_action { 0 } +sub sitter_can_send { 1 } + __PACKAGE__->load_components('DynamicSubclass'); __PACKAGE__->table('ships'); __PACKAGE__->add_columns( diff --git a/lib/Lacuna/DB/Result/Ships/ColonyShip.pm b/lib/Lacuna/DB/Result/Ships/ColonyShip.pm index 33ce6c0f..2730d7d4 100644 --- a/lib/Lacuna/DB/Result/Ships/ColonyShip.pm +++ b/lib/Lacuna/DB/Result/Ships/ColonyShip.pm @@ -19,6 +19,8 @@ use constant base_hold_size => 0; use constant pilotable => 1; use constant build_tags => ['Colonization']; +sub sitter_can_send() { 0 } + with "Lacuna::Role::Ship::Send::Planet"; with "Lacuna::Role::Ship::Send::Uninhabited"; with "Lacuna::Role::Ship::Send::StarterZone"; diff --git a/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm b/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm index f4c10afe..78069d74 100644 --- a/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm +++ b/lib/Lacuna/DB/Result/Ships/ShortRangeColonyShip.pm @@ -19,6 +19,8 @@ use constant base_hold_size => 0; use constant pilotable => 1; use constant build_tags => ['Colonization']; +sub sitter_can_send() { 0 } + with "Lacuna::Role::Ship::Send::Range"; with "Lacuna::Role::Ship::Send::Planet"; with "Lacuna::Role::Ship::Send::Uninhabited"; diff --git a/lib/Lacuna/RPC/Building/Embassy.pm b/lib/Lacuna/RPC/Building/Embassy.pm index b81f3ebc..d35abee9 100644 --- a/lib/Lacuna/RPC/Building/Embassy.pm +++ b/lib/Lacuna/RPC/Building/Embassy.pm @@ -98,6 +98,10 @@ sub expel_member { sub accept_invite { my ($self, $session_id, $building_id, $invite_id, $message) = @_; my $empire = $self->get_empire_by_session($session_id); + if ($empire->current_session->is_sitter) { + confess [1015, 'Sitters cannot join alliances.']; + } + $empire->current_session->check_captcha; my $building = $self->get_building($empire, $building_id); unless ($invite_id) { confess [1002, 'You must specify an invite id.']; diff --git a/lib/Lacuna/RPC/Building/SpacePort.pm b/lib/Lacuna/RPC/Building/SpacePort.pm index 9dd2679e..bc2240cf 100644 --- a/lib/Lacuna/RPC/Building/SpacePort.pm +++ b/lib/Lacuna/RPC/Building/SpacePort.pm @@ -88,6 +88,7 @@ sub get_fleet_for { hold_size => $ship_group->hold_size, quantity => $ship_group->get_column('quantity'), estimated_travel_time => $travel_time, + image => $ship_group->image, }; push @$summary, $summation; } @@ -132,7 +133,10 @@ sub get_ships_for { body_id=>$body->id }); while (my $ship = $available_rs->next) { $ship->body($body); - eval{ $ship->can_send_to_target($target) }; + eval{ + $ship->can_send_to_target($target); + confess [1009, "Sitters cannot send this type of ship."] if $empire->current_session->is_sitter and not $ship->sitter_can_send; + }; my $reason = $@; if ($reason) { push @unavailable, { ship => $ship->get_status, reason => $reason }; @@ -226,6 +230,7 @@ sub send_ship { if ($ship->hostile_action) { $empire->current_session->check_captcha; } + confess [1009, "Sitters cannot send this type of ship."] if $empire->current_session->is_sitter and not $ship->sitter_can_send; $ship->send(target => $target); $body->add_to_neutral_entry($ship->combat); return { @@ -340,6 +345,7 @@ sub send_ship_types { {order_by => 'speed', rows => $quantity } ); my $ship = $ships[0]; #Need to grab slowest ship + confess [1009, "Sitters cannot send this type of ship."] if $empire->current_session->is_sitter and not $ship->sitter_can_send; # We only need to check one of the ships $ship->can_send_to_target($target); @@ -523,6 +529,7 @@ sub send_fleet { $empire->current_session->check_captcha; $captcha_check = 0; } + confess [1009, "Sitters cannot send this type of ship."] if $empire->current_session->is_sitter and not $ship->sitter_can_send; $body->add_to_neutral_entry($ship->combat); $ship->fleet_speed($speed); $ship->send(target => $target);