Something went wrong. Try again.
Perl game server for TLE Community
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137package Lacuna::RPC::Building::Security;
use Moose;use utf8;no warnings qw(uninitialized);extends 'Lacuna::RPC::Building';
sub app_url { return '/security';}
sub model_class { return 'Lacuna::DB::Result::Building::Security';}
sub view_foreign_spies { my ($self, $session_id, $building_id, $page_number) = @_; my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); my $empire = $session->current_empire; my $building = $session->current_building; $page_number ||= 1; my @out; my $spies = $building->foreign_spies->search(undef, { rows => 25, page => $page_number, order_by => 'available_on', } ); while (my $spy = $spies->next) { my $available_on = $spy->format_available_on; push @out, { name => $spy->name, level => $spy->level, next_mission => $available_on, task => $spy->task, }; } return { status => $self->format_status($session, $building->body), spies => \@out, spy_count => $spies->pager->total_entries, };}
sub execute_prisoner { my ($self, $session_id, $building_id, $prisoner_id) = @_; my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); my $empire = $session->current_empire; my $building = $session->current_building; my $prisoner = $building->prisoners->find($prisoner_id); unless (defined $prisoner) { confess [1002,'Could not find that prisoner.']; } unless (!$prisoner->is_available && $prisoner->task eq 'Captured' && $prisoner->on_body_id == $building->body_id) { confess [1010,'That person is not a prisoner.']; } my $body = $building->body; $body->spend_happiness($prisoner->level * 10_000)->update; $body->add_news(60, '%s was executed on %s today. Citizens were outraged at the lack of compassion.', $prisoner->name, $body->name); $prisoner->empire->send_predefined_message( from => $empire, tags => ['Spies','Alert'], filename => 'spy_executed.txt', params => [$prisoner->name, $prisoner->from_body->id, $prisoner->from_body->name, $body->x, $body->y, $body->name, $empire->id, $empire->name], ); $prisoner->delete; return { status => $self->format_status($session, $body), }}
sub release_prisoner { my ($self, $session_id, $building_id, $prisoner_id) = @_; my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); my $empire = $session->current_empire; my $building = $session->current_building; my $prisoner = $building->prisoners->find($prisoner_id); unless (defined $prisoner) { confess [1002,'Could not find that prisoner.']; } unless (!$prisoner->is_available && $prisoner->task eq 'Captured' && $prisoner->on_body_id == $building->body_id) { confess [1010,'That person is not a prisoner.']; } my $body = $building->body; $prisoner->task('Idle'); $prisoner->available_on(DateTime->now); $prisoner->update; $prisoner->empire->send_predefined_message( tags => ['Spies','Alert'], filename => 'spy_released.txt', params => [$empire->id, $empire->name, $body->x, $body->y, $body->name, $prisoner->name, $prisoner->from_body->id, $prisoner->from_body->name], ); return { status => $self->format_status($session, $body), }}
sub view_prisoners { my ($self, $session_id, $building_id, $page_number) = @_; my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); my $empire = $session->current_empire; my $building = $session->current_building; $page_number ||= 1; my @out; my $spies = $building->prisoners->search(undef, { rows => 25, page => $page_number, order_by => 'available_on', } ); while (my $spy = $spies->next) { my $available_on = $spy->format_available_on; push @out, { id => $spy->id, name => $spy->name, level => $spy->level, task => $spy->task, sentence_expires => $available_on, }; } return { status => $self->format_status($session, $building->body), prisoners => \@out, captured_count => $spies->pager->total_entries, };}
__PACKAGE__->register_rpc_method_names(qw(view_prisoners view_foreign_spies execute_prisoner release_prisoner));
no Moose;__PACKAGE__->meta->make_immutable;