Something went wrong. Try again.
Perl game server for TLE Community
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268package Lacuna::RPC::Stats;
use Moose;use utf8;no warnings qw(uninitialized);extends 'Lacuna::RPC';use Lacuna::Constants qw(SHIP_TYPES);use Switch::Right;
sub credits { return [ { 'Game Design' => ['JT Smith','Jamie Vrbsky'] }, { 'Web Client' => ['John Rozeske','Graham Knop','Matthew Musgrove','vaelxon (Spy Training GUI)','Natalie Rose (1vasari)'] }, { 'iPhone Client' => ['Kevin Runde','RedOrion'] }, { 'Game Server' => ['JT Smith','Graham Knop','Matthew Musgrove','Iain C Docherty (icydee)', 'Mark Lemming (Norway)', '(fireartist)', '(Winton-Akagane)', '(Ysthane)', 'Darin McBride (The Tower)', 'RedOrion','Natalie Rose (1vasari)'] }, { 'Art and Icons' => ['Ryan Knope','JT Smith','Joseph Wain / glyphish.com','Keegan Runde'] }, { 'Geology Consultant' => ['Geofuels, LLC / geofuelsllc.com'] }, { 'Play Testers' => ['John Oettinger','Jamie Vrbsky','Mike Kastern','Chris Burr','Eric Patterson','Frank Dillon','Kristi McCombs','Ryan McCombs','Mike Helfman','Tavis Parker','Sarah Bownds','Rob Dicke','Gemma Blair','Bev Smith','Mike Vrbsky'] }, { 'Game Support' => ['Natalie Rose (1vasari)'] }, { 'Lost City of Tyleon' => ['Steven Binns','Owen Ferguson','Garloo','Mark Lemming (Norway)','Saint','Shadow','JT Smith','Noel Sorensen','James T'] }, { 'AI Design' => ['JT Smith','Iain C Docherty (icydee)', 'Mark Lemming (Norway)'] }, { 'TLE Community Reboot' => ['Natalie Rose (1vasari)'] }, ];}
sub alliance_rank { my ($self, $session_id, $by, $page_number) = @_; my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; unless (smartmatch($by, any => [qw(influence population average_empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)])) { $by = 'influence desc,population desc'; } my $ranks = Lacuna->db->resultset('Lacuna::DB::Result::Log::Alliance'); unless ($page_number) { if ($empire->alliance_id) { my $me = $ranks->find($empire->alliance_id); if (defined $me) { $page_number = int($me->$by / 25); if ( $me->$by % 25 ) { $page_number++; } } else { $page_number = 1; } } else { $page_number = 1; } } $ranks = $ranks->search(undef,{rows => 25, page => $page_number, order_by => $by}); my @alliances; while (my $rank = $ranks->next) { push @alliances, { alliance_id => $rank->alliance_id, alliance_name => $rank->alliance_name, member_count => $rank->member_count, space_station_count => $rank->space_station_count, influence => $rank->influence, colony_count => $rank->colony_count, population => $rank->population, average_empire_size => $rank->average_empire_size, building_count => $rank->building_count, average_building_level => $rank->average_building_level, offense_success_rate => $rank->offense_success_rate, defense_success_rate => $rank->defense_success_rate, dirtiest => $rank->dirtiest, }; } return { status => $self->format_status($session), alliances => \@alliances, total_alliances => $ranks->pager->total_entries, page_number => $page_number, };}
sub find_alliance_rank { my ($self, $session_id, $by, $alliance_name) = @_; unless (length($alliance_name) >= 3) { confess [1009, 'Alliance name too short. Your search must be at least 3 characters.']; } unless (smartmatch($by, any => [qw(average_empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)])) { $by = 'average_empire_size_rank'; } my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; my $ranks = Lacuna->db->resultset('Lacuna::DB::Result::Log::Alliance')->search(undef,{order_by => $by, rows=>25}); my $ranked = $ranks->search({alliance_name => { like => $alliance_name.'%'}}); my @alliances; while (my $rank = $ranked->next) { my $page_number = int($rank->$by / 25); if ( $rank->$by % 25 ) { $page_number++; } push @alliances, { alliance_id => $rank->alliance_id, alliance_name => $rank->alliance_name, page_number => $page_number, }; } return { status => $self->format_status($session), alliances => \@alliances, };}
sub empire_rank { my ($self, $session_id, $by, $page_number) = @_; my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; unless (smartmatch($by, any => [qw(empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)])) { $by = 'empire_size_rank'; } my $ranks = Lacuna->db->resultset('Lacuna::DB::Result::Log::Empire'); unless ($page_number) { my $me = $ranks->find($empire->id); if (defined $me) { $page_number = int($me->$by / 25); if ( $me->$by % 25 ) { $page_number++; } } else { $page_number = 1; } } $ranks = $ranks->search(undef,{rows => 25, page => $page_number, order_by => $by}); my @empires; while (my $rank = $ranks->next) { push @empires, { empire_id => $rank->empire_id, empire_name => $rank->empire_name, alliance_name => $rank->alliance_name, alliance_id => $rank->alliance_id, colony_count => $rank->colony_count, population => $rank->population, empire_size => $rank->empire_size, building_count => $rank->building_count, average_building_level => $rank->average_building_level, offense_success_rate => $rank->offense_success_rate, defense_success_rate => $rank->defense_success_rate, dirtiest => $rank->dirtiest, }; } return { status => $self->format_status($session), empires => \@empires, total_empires => $ranks->pager->total_entries, page_number => $page_number, };}
sub find_empire_rank { my ($self, $session_id, $by, $empire_name) = @_; unless (length($empire_name) >= 3) { confess [1009, 'Empire name too short. Your search must be at least 3 characters.']; } unless (smartmatch($by, any => [qw(empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)])) { $by = 'empire_size_rank'; } my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; my $ranks = Lacuna->db->resultset('Lacuna::DB::Result::Log::Empire')->search(undef,{order_by => $by, rows=>25}); my $ranked = $ranks->search({empire_name => { like => $empire_name.'%'}}); my @empires; while (my $rank = $ranked->next) { my $page_number = int($rank->$by / 25); if ( $rank->$by % 25 ) { $page_number++; } push @empires, { empire_id => $rank->empire_id, empire_name => $rank->empire_name, page_number => $page_number, }; } return { status => $self->format_status($session), empires => \@empires, };}
sub colony_rank { my ($self, $session_id, $by) = @_; my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; unless (smartmatch($by, any => [qw(population_rank)])) { $by = 'population_rank'; } my $ranks = Lacuna->db->resultset('Lacuna::DB::Result::Log::Colony')->search(undef,{order_by =>$by, rows=>25}); my @colonies; while (my $rank = $ranks->next) { push @colonies, { empire_id => $rank->empire_id, empire_name => $rank->empire_name, planet_id => $rank->planet_id, planet_name => $rank->planet_name, population => $rank->population, building_count => $rank->building_count, average_building_level => $rank->average_building_level, highest_building_level => $rank->highest_building_level, } } return { status => $self->format_status($session), colonies => \@colonies, };}
sub spy_rank { my ($self, $session_id, $by) = @_; my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; unless (smartmatch($by, any => [qw(level_rank success_rate_rank dirtiest_rank)])) { $by = 'level_rank'; } my $ranks = Lacuna->db->resultset('Lacuna::DB::Result::Log::Spies')->search(undef,{order_by => $by, rows=>25}); my @spies; while (my $rank = $ranks->next) { push @spies, { empire_id => $rank->empire_id, empire_name => $rank->empire_name, spy_id => $rank->spy_id, spy_name => $rank->spy_name, age => $rank->age, level => $rank->level, level_delta => $rank->level_delta, success_rate => $rank->success_rate, success_rate_delta => $rank->success_rate_delta, dirtiest => $rank->dirtiest, dirtiest_delta => $rank->dirtiest_delta, } } return { status => $self->format_status($session), spies => \@spies, };} sub weekly_medal_winners { my ($self, $session_id) = @_; my $session = $self->get_session({session_id => $session_id }); my $empire = $session->current_empire; my $winner_rs = Lacuna->db->resultset('Lacuna::DB::Result::Log::WeeklyMedalWinner')->search; my @winners; while (my $winner = $winner_rs->next) { push @winners, { empire_id => $winner->empire_id, empire_name => $winner->empire_name, medal_name => $winner->medal_name, medal_image => $winner->medal_image, times_earned => $winner->times_earned, } } return { status => $self->format_status($session), winners => \@winners, };}
__PACKAGE__->register_rpc_method_names(qw(weekly_medal_winners spy_rank colony_rank find_empire_rank empire_rank credits alliance_rank find_alliance_rank));
no Moose;__PACKAGE__->meta->make_immutable;