From 75e987a8875ce20cbe33ea88c0f436ee44df3b58 Mon Sep 17 00:00:00 2001 From: Darin McBride Date: Sun, 8 Nov 2015 19:02:19 -0700 Subject: [PATCH] Massive cleanup. Replace the get_body/get_building APIs in Lacuna::RPC with a single get_session. Expand Lacuna::Session to track current body/building/empire. The primary purpose of this is to allow all these to be grabbed in a single call (which is not part of this commit), reducing the DB hits. And, more specifically, to do this for the sitter changes coming up. This part is delivered separately so that it can be exercised now while the sitter changes continue to be worked on. I'm also reducing some red tape here for the most trivial of module actions (repair, demolish, downgrade). This won't eliminate much excess voting email, but it's a start. Upgrade and build are the two biggest ones, but they involve figuring out the appropriate time to attach to the build actions before removing them, and they impact more than just the immediate code in Building.pm. --- lib/Lacuna/RPC.pm | 135 ++++++++++-------- lib/Lacuna/RPC/Alliance.pm | 6 +- lib/Lacuna/RPC/Body.pm | 55 ++++--- lib/Lacuna/RPC/Building.pm | 74 +++------- lib/Lacuna/RPC/Building/Archaeology.pm | 58 ++++---- lib/Lacuna/RPC/Building/BlackHoleGenerator.pm | 28 ++-- lib/Lacuna/RPC/Building/Capitol.pm | 12 +- lib/Lacuna/RPC/Building/DeployedBleeder.pm | 6 +- lib/Lacuna/RPC/Building/Development.pm | 22 +-- lib/Lacuna/RPC/Building/DistributionCenter.pm | 21 +-- lib/Lacuna/RPC/Building/Embassy.pm | 106 ++++++++------ lib/Lacuna/RPC/Building/EnergyReserve.pm | 5 +- lib/Lacuna/RPC/Building/Entertainment.pm | 55 +++---- lib/Lacuna/RPC/Building/EssentiaVein.pm | 12 +- lib/Lacuna/RPC/Building/FoodReserve.pm | 16 ++- lib/Lacuna/RPC/Building/GeneticsLab.pm | 17 ++- lib/Lacuna/RPC/Building/IntelTraining.pm | 7 +- lib/Lacuna/RPC/Building/Intelligence.pm | 51 ++++--- lib/Lacuna/RPC/Building/LibraryOfJith.pm | 5 +- lib/Lacuna/RPC/Building/MayhemTraining.pm | 7 +- lib/Lacuna/RPC/Building/MercenariesGuild.pm | 40 +++--- lib/Lacuna/RPC/Building/MiningMinistry.pm | 34 +++-- lib/Lacuna/RPC/Building/MissionCommand.pm | 15 +- lib/Lacuna/RPC/Building/Network19.pm | 17 ++- lib/Lacuna/RPC/Building/Observatory.pm | 15 +- lib/Lacuna/RPC/Building/OracleOfAnid.pm | 12 +- lib/Lacuna/RPC/Building/OreStorage.pm | 14 +- lib/Lacuna/RPC/Building/Park.pm | 21 +-- lib/Lacuna/RPC/Building/Parliament.pm | 134 ++++++++++------- lib/Lacuna/RPC/Building/PlanetaryCommand.pm | 19 +-- lib/Lacuna/RPC/Building/PoliceStation.pm | 35 +++-- lib/Lacuna/RPC/Building/PoliticsTraining.pm | 7 +- lib/Lacuna/RPC/Building/SSLa.pm | 21 +-- lib/Lacuna/RPC/Building/Security.pm | 20 +-- lib/Lacuna/RPC/Building/Shipyard.pm | 43 +++--- lib/Lacuna/RPC/Building/SpacePort.pm | 110 ++++++++------ lib/Lacuna/RPC/Building/StationCommand.pm | 12 +- .../RPC/Building/SubspaceSupplyDepot.pm | 25 ++-- .../RPC/Building/TempleOfTheDrajilites.pm | 10 +- lib/Lacuna/RPC/Building/TheDillonForge.pm | 28 ++-- lib/Lacuna/RPC/Building/TheftTraining.pm | 7 +- lib/Lacuna/RPC/Building/ThemePark.pm | 14 +- lib/Lacuna/RPC/Building/Trade.pm | 104 +++++++------- lib/Lacuna/RPC/Building/Transporter.pm | 30 ++-- lib/Lacuna/RPC/Building/WasteExchanger.pm | 21 +-- lib/Lacuna/RPC/Building/WasteRecycling.pm | 23 +-- lib/Lacuna/RPC/Building/WaterStorage.pm | 6 +- lib/Lacuna/RPC/Captcha.pm | 4 +- lib/Lacuna/RPC/Chat.pm | 3 +- lib/Lacuna/RPC/Empire.pm | 52 ++++--- lib/Lacuna/RPC/Firebase.pm | 3 +- lib/Lacuna/RPC/Inbox.pm | 30 ++-- lib/Lacuna/RPC/Map.pm | 27 ++-- lib/Lacuna/RPC/Stats.pm | 21 ++- lib/Lacuna/Role/IncomingSupplyChains.pm | 5 +- lib/Lacuna/Role/TraderRpc.pm | 45 +++--- lib/Lacuna/Session.pm | 38 ++++- var/www/public/changes.txt | 1 + 58 files changed, 1025 insertions(+), 739 deletions(-) diff --git a/lib/Lacuna/RPC.pm b/lib/Lacuna/RPC.pm index d8eaa092..de907af7 100644 --- a/lib/Lacuna/RPC.pm +++ b/lib/Lacuna/RPC.pm @@ -10,70 +10,91 @@ use Log::Any qw($log); has plack_request => ( is => 'rw' ); sub get_session { - my ($self, $session_id) = @_; - if (ref $session_id eq 'Lacuna::Session') { - return $session_id; - } - else { - my $session = Lacuna::Session->new(id=>$session_id); - if ($session->empire_id) { - $session->extend; - return $session; + my ($self, $opts) = @_; + my $session = ref $opts ? $opts->{session_id} : $opts; + + if (ref $session ne 'Lacuna::Session') { + if (ref $session eq 'Lacuna::DB::Result::Empire') { + $session = $session->start_session; } else { - confess [1006, 'Session expired.', $session_id]; + my $session_id = $session; + $session = Lacuna::Session->new(id=>$session); + if ($session && $session->empire_id) { + $session->extend; + } + else { + confess [1006, 'Session expired.', $session_id]; + } } } -} + $opts = { session_id => $session->id } unless ref $opts; -sub get_empire_by_session { - my ($self, $session_id) = @_; - if (ref $session_id eq 'Lacuna::DB::Result::Empire') { - return $session_id; + if ($opts->{building_id}) { + my $building = $self->get_building($session->empire, + $opts->{building_id}, + %$opts); + $session->current_building($building); + $session->current_body($building->body); + $session->current_empire($session->current_body->empire); } - else { - my $session = $self->get_session($session_id); - my $empire = $session->empire; - if (defined $empire) { - my $throttle = Lacuna->config->get('rpc_throttle') || 30; - if (my $delay = Lacuna->cache->get('rpc_block', $session_id)) { - confess [1010, 'Too fast response, ' . $empire->name . '!']; - } - if ($empire->rpc_rate > $throttle) { - Lacuna->cache->increment('rpc_limit_'.format_date(undef,'%d'), $empire->id, 1, 60 * 60 * 30); - confess [1010, 'Slow down '.$empire->name.'! No more than '.$throttle.' requests per minute.']; - } - my $max = Lacuna->config->get('rpc_limit') || 2500; - if ($empire->rpc_count > $max) { - confess [1010, $empire->name.' has already made the maximum number of requests ('.$max.') you can make for one day.']; - } - my $ipr = real_ip_address($self->plack_request); - if (!$session->ip_address) { - $log->debug("Missing IP address, adding $ipr"); - $session->ip_address($ipr); - $session->update; - } - my $ipm = $session->ip_address eq $ipr; - my $i = 1; - my @caller = caller($i); - while (@caller) - { - last if $caller[0] =~ /Lacuna::RPC/; - @caller = caller(++$i); - } - $log->info(sprintf "ACTUAL:ipr=%s,ipe=%s,ipm=%s,ses=%s,sat:%d,rpc=%s", $ipr, $session->ip_address, $ipm, $session_id, $session->is_sitter ? 1 : 0, $caller[3]); - #Lacuna->db->resultset('Lacuna::DB::Result::Log::RPC')->new({ - # empire_id => $empire->id, - # empire_name => $empire->name, - # module => ref $self, - # api_key => $empire->current_session->api_key, - #})->insert; - return $empire; + elsif ($opts->{body_id}) { + my $body = $self->get_body($session->empire, + $opts->{body_id}); + $session->clear_building; + $session->current_body($body); + $session->current_empire($session->current_body->empire); + } + + $session->current_empire($session->empire) + unless $session->current_empire; + + my $empire = $session->current_empire; + if (defined $empire) { + my $throttle = Lacuna->config->get('rpc_throttle') || 30; + if (my $delay = Lacuna->cache->get('rpc_block', $opts->{session_id})) { + confess [1010, 'Too fast response, ' . $empire->name . '!']; } - else { - confess [1002, 'Empire does not exist.']; + if ($empire->rpc_rate > $throttle) { + Lacuna->cache->increment('rpc_limit_'.format_date(undef,'%d'), $empire->id, 1, 60 * 60 * 30); + confess [1010, 'Slow down '.$empire->name.'! No more than '.$throttle.' requests per minute.']; } + my $max = Lacuna->config->get('rpc_limit') || 2500; + if ($empire->rpc_count > $max) { + confess [1010, $empire->name.' has already made the maximum number of requests ('.$max.') you can make for one day.']; + } + my $ipr = real_ip_address($self->plack_request); + if (!$session->ip_address && $ipr) { + $log->debug("Missing IP address, adding $ipr"); + $session->ip_address($ipr); + $session->update; + } + my $ipm = $session->ip_address eq $ipr; + my $i = 1; + my @caller = caller($i); + while (@caller) + { + last if $caller[0] =~ /Lacuna::RPC/; + @caller = caller(++$i); + } + $log->info(sprintf "ACTUAL:ipr=%s,ipe=%s,ipm=%s,ses=%s,sat:%d,rpc=%s", $ipr, $session->ip_address, $ipm, $opts->{session_id}, $session->is_sitter ? 1 : 0, $caller[3]); + #Lacuna->db->resultset('Lacuna::DB::Result::Log::RPC')->new({ + # empire_id => $empire->id, + # empire_name => $empire->name, + # module => ref $self, + # api_key => $empire->current_session->api_key, + #})->insert; + } + else { + confess [1002, 'Empire does not exist.']; } + + if ($session->current_body) { + $session->current_body->tick; + # do we need to discard the changes? + } + + return $session; } sub get_body { # makes for uniform error handling, and prevents staleness @@ -95,7 +116,6 @@ sub get_body { # makes for uniform error handling, and prevents staleness if ($body->empire_id ne $empire->id) { if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { if ($body->empire->alliance_id eq $empire->alliance_id) { - $body->tick; return $body; } } @@ -104,7 +124,6 @@ sub get_body { # makes for uniform error handling, and prevents staleness if ($body->id eq $empire->home_planet_id) { $empire->home_planet($body); } - $body->tick; return $body; } @@ -130,14 +149,12 @@ sub get_building { # makes for uniform error handling, and prevents staleness if ($body->empire_id ne $empire->id) { if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { if ($body->empire->alliance_id eq $empire->alliance_id) { - $building->discard_changes; # in case it changed due to the tick $building->body($body); return $building; } } confess [1010, "Can't manipulate a building that you don't own.", $building_id]; } - $building->discard_changes; # in case it changed due to the tick $building->body($body); return $building; } diff --git a/lib/Lacuna/RPC/Alliance.pm b/lib/Lacuna/RPC/Alliance.pm index 0304f1c9..f6239066 100644 --- a/lib/Lacuna/RPC/Alliance.pm +++ b/lib/Lacuna/RPC/Alliance.pm @@ -15,7 +15,8 @@ sub find { unless (length($name) >= 3) { confess [1009, 'Alliance name too short. Your search must be at least 3 characters.']; } - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $alliances = Lacuna->db->resultset('Lacuna::DB::Result::Alliance')->search({name => {'like' => $name.'%'}}, {rows=>100}); my @list_of_alliances; my $limit = 100; @@ -34,7 +35,8 @@ sub find { sub view_profile { my ($self, $session_id, $alliance_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $alliance = Lacuna->db->resultset('Lacuna::DB::Result::Alliance')->find($alliance_id); unless (defined $alliance) { confess [1002, 'The alliance you wish to view does not exist.', $alliance_id]; diff --git a/lib/Lacuna/RPC/Body.pm b/lib/Lacuna/RPC/Body.pm index 66579e21..6bf2ea1c 100644 --- a/lib/Lacuna/RPC/Body.pm +++ b/lib/Lacuna/RPC/Body.pm @@ -15,15 +15,17 @@ use feature 'switch'; sub get_status { my ($self, $session_id, $body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; return $self->format_status($empire, $body); } sub get_body_status { my ($self, $args) = @_; - my $empire = $self->get_empire_by_session($args->{session_id}); + my $session = $self->get_session({session_id => $args->{session_id}}); + my $empire = $session->current_empire; my $body = Lacuna->db->resultset('Map::Body')->find($args->{body_id}); confess [1000, 'Cannot find that body.'] unless $body; @@ -35,8 +37,9 @@ sub get_body_status { sub abandon { my ($self, $session_id, $body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { my $proposition = Lacuna->db->resultset('Lacuna::DB::Result::Propositions')->new({ type => 'AbandonStation', @@ -64,8 +67,10 @@ sub rename { ->no_padding ->not_ok(Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->search({name=>$name, 'id'=>{'!='=>$body_id}})->count); # name available - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; + if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { unless ($body->parliament->effective_level >= 3) { confess [1013, 'You need to have a level 3 Parliament to rename a station.']; @@ -96,8 +101,9 @@ sub rename { sub get_buildings { my ($self, $session_id, $body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; if ($body->needs_surface_refresh) { $body->needs_surface_refresh(0); $body->update; @@ -135,8 +141,9 @@ sub get_buildings { sub repair_list { my ($self, $session_id, $body_id, $building_ids) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; if (scalar @$building_ids > 121) { confess [1002, 'Invalid number of buildings in argument.']; @@ -147,10 +154,11 @@ sub repair_list { $body->update; } my @buildings = @{$body->building_cache}; + my %all_ids = map { $_->id => $_ } @buildings; my %out; for my $bld_id (@{$building_ids}) { - my ( $building ) = grep { $_->id == $bld_id } @buildings; + my $building = $all_ids{$bld_id}; next unless $building; next unless $building->efficiency < 100; my $return; @@ -192,8 +200,9 @@ sub rearrange_buildings { all { ref $_ eq 'HASH' && exists $_->{id} && exists $_->{x} && exists $_->{y} } @$arrangement; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; my %cur_lay; my %new_lay; my %cur_ids; my %new_ids; my @miss_in_new; my @miss_in_cur; @@ -427,8 +436,9 @@ sub check_positions { sub get_buildable { my ($self, $session_id, $body_id, $x, $y, $tag) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; my $building_rs = Lacuna->db->resultset('Lacuna::DB::Result::Building'); @@ -518,8 +528,9 @@ sub get_buildable { sub get_buildable_locations { my ($self, $opts) = @_; - my $empire = $self->get_empire_by_session($opts->{session_id}); - my $body = $self->get_body($empire, $opts->{body_id}); + my $session = $self->get_session($opts); + my $empire = $session->current_empire; + my $body = $session->current_body; my %args; $args{size} = $opts->{size} if $opts->{size} and $opts->{size} ~~ [1,4,9]; @@ -532,7 +543,8 @@ sub get_buildable_locations { sub view_laws { my ($self, $session_id, $body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $body = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body') ->find($body_id); if ($body and $body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { @@ -561,8 +573,9 @@ sub view_laws { sub set_colony_notes { my ($self, $session_id, $body_id, $opts) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; my $notes = $opts->{notes}; #Lacuna::Verify->new(content=>\$notes, throws=>[1000,'Content may not have any of the following characters: @&<>;{}()',$notes]) diff --git a/lib/Lacuna/RPC/Building.pm b/lib/Lacuna/RPC/Building.pm index 77419450..604a3868 100644 --- a/lib/Lacuna/RPC/Building.pm +++ b/lib/Lacuna/RPC/Building.pm @@ -20,8 +20,9 @@ sub to_app_with_url { sub upgrade { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id}); + my $empire = $session->current_empire; + my $building = $session->current_building; # check the upgrade lock if ($building->is_upgrade_locked) { @@ -83,8 +84,9 @@ sub upgrade { sub view { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1}); + my $empire = $session->current_empire; + my $building = $session->current_building; my $cost = $building->cost_to_upgrade; my $can_upgrade = eval{$building->can_upgrade($cost)}; my $upgrade_reason = $@; @@ -142,8 +144,9 @@ sub view { sub build { my ($self, $session_id, $body_id, $unclean_x, $unclean_y) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id }); + my $empire = $session->current_empire; + my $body = $session->current_body; my $x = int( $unclean_x ); my $y = int( $unclean_y ); @@ -235,26 +238,15 @@ sub build { sub demolish { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1}); + my $empire = $session->current_empire; + my $building = $session->current_building; my $body = $building->body; $building->can_demolish; if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { unless ($body->parliament && $body->parliament->effective_level >= 2) { confess [1013, 'You need to have a level 2 Parliament to demolish a module.']; } - my $name = $building->name.' ('.$building->x.','.$building->y.')'; - my $proposition = Lacuna->db->resultset('Lacuna::DB::Result::Propositions')->new({ - type => 'DemolishModule', - name => 'Demolish '.$name, - description => 'Demolish '.$name.' on {Planet '.$body->id.' '.$body->name.'}.', - scratch => { building_id => $building->id }, - proposed_by_id => $empire->id, - }); - $proposition->station($body); - $proposition->proposed_by($empire); - $proposition->insert; - confess [1017, 'The demolish order has been delayed pending a parliamentary vote.']; } $building->demolish; $body->tick; @@ -265,26 +257,16 @@ sub demolish { sub downgrade { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; + $building->can_downgrade; if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { unless ($body->parliament && $body->parliament->effective_level >= 2) { confess [1013, 'You need to have a level 2 Parliament to downgrade a module.']; } - my $name = $building->name.' ('.$building->x.','.$building->y.')'; - my $proposition = Lacuna->db->resultset('Lacuna::DB::Result::Propositions')->new({ - type => 'DowngradeModule', - name => 'Downgrade '.$name, - description => 'Downgrade '.$name.' on {Planet '.$body->id.' '.$body->name.'} from level '.$building->level.' to '.($building->level - 1).'.', - scratch => { building_id => $building->id }, - proposed_by_id => $empire->id, - }); - $proposition->station($body); - $proposition->proposed_by($empire); - $proposition->insert; - confess [1017, 'The downgrade order has been delayed pending a parliamentary vote.']; } $building->downgrade; $body->tick; @@ -293,8 +275,9 @@ sub downgrade { sub get_stats_for_level { my ($self, $session_id, $building_id, $level) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id}); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($level < 0 || $level > 100) { confess [1009, 'Level must be an integer between 1 and 100.']; } @@ -330,25 +313,12 @@ sub get_stats_for_level { sub repair { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1}); + my $empire = $session->current_empire; + my $building = $session->current_building; my $costs = $building->get_repair_costs; $building->can_repair($costs); my $body = $building->body; - if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { - my $name = $building->name.' ('.$building->x.','.$building->y.')'; - my $proposition = Lacuna->db->resultset('Lacuna::DB::Result::Propositions')->new({ - type => 'RepairModule', - name => 'Repair '.$name, - description => 'Repair '.$name.' on {Planet '.$body->id.' '.$body->name.'}.', - scratch => { building_id => $building->id }, - proposed_by_id => $empire->id, - }); - $proposition->station($body); - $proposition->proposed_by($empire); - $proposition->insert; - confess [1017, 'The repair order has been delayed pending a parliamentary vote.']; - } $building->repair($costs); return $self->view($empire, $building); } diff --git a/lib/Lacuna/RPC/Building/Archaeology.pm b/lib/Lacuna/RPC/Building/Archaeology.pm index 649d96b4..4aa940b2 100644 --- a/lib/Lacuna/RPC/Building/Archaeology.pm +++ b/lib/Lacuna/RPC/Building/Archaeology.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); if ($building->is_working) { $out->{building}{work}{searching} = $building->work->{ore_type}; } @@ -27,8 +28,9 @@ around 'view' => sub { sub get_glyphs { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $glyphs = $building->body->glyph; while (my $glyph = $glyphs->next) { @@ -48,8 +50,9 @@ sub get_glyphs { sub get_glyph_summary { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $glyphs = $building->body->glyph; while (my $glyph = $glyphs->next) { @@ -69,8 +72,9 @@ sub get_glyph_summary { sub get_ores_available_for_processing { my ($self, $session_id, $building_id, $ore) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; return { ore => $building->get_ores_available_for_processing, status => $self->format_status($empire, $building->body), @@ -79,10 +83,11 @@ sub get_ores_available_for_processing { sub search_for_glyph { my ($self, $session_id, $building_id, $ore) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->search_for_glyph($ore); - return $self->view($empire, $building); + return $self->view($session, $building); } sub assemble_glyphs { @@ -95,8 +100,9 @@ sub assemble_glyphs { confess [1001, "Quantity must be a positive integer"]; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $plan = $building->make_plan($glyphs, $quantity); return { item_name => $plan->class->name, @@ -109,8 +115,9 @@ sub assemble_glyphs { sub subsidize_search { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "No one is searching."]; @@ -127,13 +134,14 @@ sub subsidize_search { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } sub view_excavators { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @sites; my $level = $building->effective_level; my $chances = $building->can_you_dig_it($building->body, $level, 1); @@ -181,8 +189,9 @@ sub view_excavators { sub abandon_excavator { my ($self, $session_id, $building_id, $site_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $site = Lacuna->db->resultset('Lacuna::DB::Result::Excavators')->find($site_id); unless (defined $site) { confess [1002, "Excavator Site :".$site_id.": not found."]; @@ -198,9 +207,10 @@ sub abandon_excavator { sub mass_abandon_excavator { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - $building->excavators->delete; + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; + $building->excavators->delete; return { status => $self->format_status($empire, $building->body), }; diff --git a/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm b/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm index bdee9fc8..5d18ddaf 100644 --- a/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm +++ b/lib/Lacuna/RPC/Building/BlackHoleGenerator.pm @@ -17,9 +17,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $body = $building->body; my $throw = 0; my $reason = ''; @@ -265,8 +266,9 @@ sub find_target { sub get_actions_for { my ($self, $session_id, $building_id, $target_params) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; my ($target, $target_type) = $self->find_target($empire, $target_params); my @tasks = bhg_tasks($building); @@ -677,8 +679,9 @@ sub generate_singularity { params => shift, }; } - my $empire = $self->get_empire_by_session($args->{session_id}); - my $building = $self->get_building($empire, $args->{building_id}); + my $session = $self->get_session({session_id => $args->{session_id}, building_id => $args->{building_id} }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $task_name = $args->{task_name}; my $subsidize = $args->{subsidize}; @@ -2361,9 +2364,10 @@ sub bhg_tasks { sub subsidize_cooldown { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; + unless ($building->is_working) { confess [1010, "BHG is not in cooldown mode."]; } @@ -2378,8 +2382,8 @@ sub subsidize_cooldown { reason => 'BHG cooldown subsidy after the fact', }); $empire->update; - - return $self->view($empire, $building); + + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw(generate_singularity get_actions_for subsidize_cooldown)); diff --git a/lib/Lacuna/RPC/Building/Capitol.pm b/lib/Lacuna/RPC/Building/Capitol.pm index 3843d0a6..7eefe14c 100644 --- a/lib/Lacuna/RPC/Building/Capitol.pm +++ b/lib/Lacuna/RPC/Building/Capitol.pm @@ -15,17 +15,19 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{rename_empire_cost} = $building->rename_empire_cost; return $out; }; sub rename_empire { my ($self, $session_id, $building_id, $name) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->essentia < $building->rename_empire_cost) { confess [1011, "You don't have enough essentia. You need ".$building->rename_empire_cost."."]; diff --git a/lib/Lacuna/RPC/Building/DeployedBleeder.pm b/lib/Lacuna/RPC/Building/DeployedBleeder.pm index 96d8772b..b1c7cecc 100644 --- a/lib/Lacuna/RPC/Building/DeployedBleeder.pm +++ b/lib/Lacuna/RPC/Building/DeployedBleeder.pm @@ -15,9 +15,9 @@ sub model_class { around demolish => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - $empire->current_session->check_captcha; - return $orig->($self, $empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + $session->check_captcha; + return $orig->($self, $session, $building_id); }; no Moose; diff --git a/lib/Lacuna/RPC/Building/Development.pm b/lib/Lacuna/RPC/Building/Development.pm index 595d6415..abee41b0 100644 --- a/lib/Lacuna/RPC/Building/Development.pm +++ b/lib/Lacuna/RPC/Building/Development.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{build_queue} = $building->format_build_queue; $out->{subsidy_cost} = $building->calculate_subsidy; return $out; @@ -27,8 +28,9 @@ around 'view' => sub { sub subsidize_build_queue { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->effective_level > 0 and $building->effective_efficiency == 100) { confess [1003, "You must have a functional development ministry!"]; } @@ -54,8 +56,9 @@ sub subsidize_one_build { if (ref($args) ne "HASH") { confess [1000, "You have not supplied a hash reference"]; } - my $empire = $self->get_empire_by_session($args->{session_id}); - my $building = $self->get_building($empire, $args->{building_id}); + my $session = $self->get_session({session_id => $args->{session_id}, building_id => $args->{building_id} }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->effective_level > 0 and $building->effective_efficiency == 100) { confess [1003, "You must have a functional development ministry!"]; } @@ -93,8 +96,9 @@ sub cancel_build { if (ref($args) ne "HASH") { confess [1000, "You have not supplied a hash reference"]; } - my $empire = $self->get_empire_by_session($args->{session_id}); - my $building = $self->get_building($empire, $args->{building_id}); + my $session = $self->get_session({session_id => $args->{session_id}, building_id => $args->{building_id} }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $scheduled_building = Lacuna->db->resultset('Building')->find({id => $args->{scheduled_id}}); if ($scheduled_building->body_id != $building->body_id) { confess [1003, "That building is not on the same planet as your development ministry."]; diff --git a/lib/Lacuna/RPC/Building/DistributionCenter.pm b/lib/Lacuna/RPC/Building/DistributionCenter.pm index f1e6806c..b8c99488 100644 --- a/lib/Lacuna/RPC/Building/DistributionCenter.pm +++ b/lib/Lacuna/RPC/Building/DistributionCenter.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); if ($building->is_working) { $out->{reserve} = { resources => $building->work->{reserved}, @@ -36,18 +37,20 @@ around 'view' => sub { sub reserve { my ($self, $session_id, $building_id, $resources) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->reserve($resources); - return $self->view($empire, $building); + return $self->view($session, $building); } sub release_reserve { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->release_reserve; - return $self->view($empire, $building); + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw(reserve release_reserve get_stored_resources)); diff --git a/lib/Lacuna/RPC/Building/Embassy.pm b/lib/Lacuna/RPC/Building/Embassy.pm index 0a0a0894..8d5919e5 100644 --- a/lib/Lacuna/RPC/Building/Embassy.pm +++ b/lib/Lacuna/RPC/Building/Embassy.pm @@ -13,9 +13,10 @@ sub app_url { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $alliance = eval{$building->alliance}; if (defined $alliance) { $out->{alliance_status} = $alliance->get_status; @@ -29,12 +30,13 @@ sub model_class { sub assign_alliance_leader { my ($self, $session_id, $building_id, $empire_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($empire_id) { confess [1002, 'You must specify which empire you want to take over leadership.']; } - my $new_leader = Lacuna->db->resultset('Lacuna::DB::Result::Empire')->find($empire_id); + my $new_leader = Lacuna->db->resultset('Empire')->find($empire_id); unless (defined $new_leader) { confess [1002, 'The empire you specified to take over as leader does not exist.']; } @@ -47,8 +49,9 @@ sub assign_alliance_leader { sub create_alliance { my ($self, $session_id, $building_id, $name) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $alliance = $building->create_alliance($name); return { status => $self->format_status($empire, $building->body), @@ -58,8 +61,9 @@ sub create_alliance { sub get_alliance_status { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; return { status => $self->format_status($empire, $building->body), alliance => $building->get_alliance_status, @@ -68,8 +72,9 @@ sub get_alliance_status { sub dissolve_alliance { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->dissolve_alliance; $empire->discard_changes; return { @@ -79,8 +84,9 @@ sub dissolve_alliance { sub leave_alliance { my ($self, $session_id, $building_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->leave_alliance($message); return { status => $self->format_status($empire, $building->body), @@ -89,21 +95,23 @@ sub leave_alliance { sub expel_member { my ($self, $session_id, $building_id, $member_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - my $member = Lacuna->db->resultset('Lacuna::DB::Result::Empire')->find($member_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 $member = Lacuna->db->resultset('Empire')->find($member_id); $building->expel_member($member, $message); return $self->get_alliance_status($empire, $building); } sub accept_invite { my ($self, $session_id, $building_id, $invite_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; 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.']; } @@ -122,8 +130,9 @@ sub accept_invite { sub reject_invite { my ($self, $session_id, $building_id, $invite_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($invite_id) { confess [1002, 'You must specify an invite id.']; } @@ -139,8 +148,9 @@ sub reject_invite { sub withdraw_invite { my ($self, $session_id, $building_id, $invite_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($invite_id) { confess [1002, 'You must specify an invite id.']; } @@ -156,8 +166,9 @@ sub withdraw_invite { sub send_invite { my ($self, $session_id, $building_id, $empire_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($empire_id) { confess [1002, 'You must specify which empire you want to invite.']; } @@ -173,8 +184,9 @@ sub send_invite { sub get_pending_invites { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; return { invites => $building->get_pending_invites, status => $self->format_status($empire, $building->body), @@ -183,8 +195,9 @@ sub get_pending_invites { sub get_my_invites { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; return { invites => $building->get_my_invites, status => $self->format_status($empire, $building->body), @@ -194,8 +207,9 @@ sub get_my_invites { sub update_alliance { my ($self, $session_id, $building_id, $params) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $alliance = $building->update_alliance($params); return { alliance => $alliance->get_status, @@ -205,8 +219,9 @@ sub update_alliance { sub view_stash { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; my %stored; foreach my $resource ('water','energy',FOOD_TYPES,ORE_TYPES) { @@ -223,24 +238,27 @@ sub view_stash { sub donate_to_stash { my ($self, $session_id, $building_id, $donation) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->alliance->donate($building->body, $donation); - return $self->view_stash($empire, $building); + return $self->view_stash($session, $building); } sub exchange_with_stash { my ($self, $session_id, $building_id, $donation, $request) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->exchange_with_stash($donation, $request); - return $self->view_stash($empire, $building); + return $self->view_stash($session, $building); } sub view_propositions { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $propositions = $building->propositions->search({ status => 'Pending'}); while (my $proposition = $propositions->next) { @@ -255,9 +273,9 @@ sub view_propositions { sub cast_vote { my ($self, $session_id, $building_id, $proposition_id, $vote) = @_; - my $empire = $self->get_empire_by_session($session_id); - - my $building = $self->get_building($empire, $building_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 $cache = Lacuna->cache; my $lock = 'vote_lock_'.$empire->id; if ($cache->get($lock, $proposition_id)) { diff --git a/lib/Lacuna/RPC/Building/EnergyReserve.pm b/lib/Lacuna/RPC/Building/EnergyReserve.pm index bf3935fa..93c1e528 100644 --- a/lib/Lacuna/RPC/Building/EnergyReserve.pm +++ b/lib/Lacuna/RPC/Building/EnergyReserve.pm @@ -18,8 +18,9 @@ sub dump { if ($amount <= 0) { confess [1009, 'You must specify an amount greater than 0.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; $body->spend_type('energy', $amount); $body->add_type('waste', $amount); diff --git a/lib/Lacuna/RPC/Building/Entertainment.pm b/lib/Lacuna/RPC/Building/Entertainment.pm index 7736fda0..a2d3cf4a 100644 --- a/lib/Lacuna/RPC/Building/Entertainment.pm +++ b/lib/Lacuna/RPC/Building/Entertainment.pm @@ -17,22 +17,25 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{ducks_quacked} = Lacuna->cache->get('ducks','quacked'); return $out; }; sub get_lottery_voting_options { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - $empire->current_session->check_captcha; + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; + if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot enter the lottery.']; } + $empire->current_session->check_captcha; my $cache = Lacuna->cache; - my $building = $self->get_building($empire, $building_id); my @list; my $config = Lacuna->config; my $server_url = $config->get('server_url'); @@ -49,26 +52,30 @@ sub get_lottery_voting_options { }; } +# no point in reinitialising this each time quack is called. +my @quacks = ( + 'quack', + 'QUACK', + 'Quack', + 'Quack! Quack!', + 'Quack! Quack! Quack!', + 'Quack!!!', + 'Quaaaaaack!', + 'Q-U-A-C-K', + ".(,)=\n~{#}~\n_|V|_", + '|\__( o)>', + '[kwak]', + 'noun: the harsh, throaty cry of a duck or any similar sound.', + " ,~~.\n ( 6 )-_,\n (\___ )=='-'\n \ . ) )\n \ `-' / \n~'`~'`~'`~'`~", + " ,,,,,\n (o o)\n /. .\ \n (_____)\n : :\n ##O##\n ,,,: :,,,\n _)\ : : /(____\n{ \ / ___}\n \/) ((/\n (_______)\n : :\n : :\n / \ / \\n \"\"\" \"\"\"", + "What's up, doc?", +); + sub duck_quack { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - my @quacks = ( - 'quack', - 'QUACK', - 'Quack', - 'Quack! Quack!', - 'Quack! Quack! Quack!', - 'Quack!!!', - 'Quaaaaaack!', - 'Q-U-A-C-K', - ".(,)=\n~{#}~\n_|V|_", - '|\__( o)>', - '[kwak]', - 'noun: the harsh, throaty cry of a duck or any similar sound.', - " ,~~.\n ( 6 )-_,\n (\___ )=='-'\n \ . ) )\n \ `-' / \n~'`~'`~'`~'`~", - " ,,,,,\n (o o)\n /. .\ \n (_____)\n : :\n ##O##\n ,,,: :,,,\n _)\ : : /(____\n{ \ / ___}\n \/) ((/\n (_______)\n : :\n : :\n / \ / \\n \"\"\" \"\"\"", - ); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; Lacuna->cache->increment('ducks', 'quacked', 1, 60 * 60 * 24); return $quacks[ rand @quacks ]; } diff --git a/lib/Lacuna/RPC/Building/EssentiaVein.pm b/lib/Lacuna/RPC/Building/EssentiaVein.pm index f060a9c0..5ea8a7e8 100644 --- a/lib/Lacuna/RPC/Building/EssentiaVein.pm +++ b/lib/Lacuna/RPC/Building/EssentiaVein.pm @@ -15,9 +15,10 @@ sub model_class { around view => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $body = $building->body; $out->{building}{drain_capable} = $body->happiness >= 0 ? @@ -28,8 +29,9 @@ around view => sub { sub drain { my ($self, $session_id, $building_id, $times) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; confess [1010, "Cannot drain essentia from unhappy mines."] diff --git a/lib/Lacuna/RPC/Building/FoodReserve.pm b/lib/Lacuna/RPC/Building/FoodReserve.pm index 9d151fc9..6bfb6b78 100644 --- a/lib/Lacuna/RPC/Building/FoodReserve.pm +++ b/lib/Lacuna/RPC/Building/FoodReserve.pm @@ -16,9 +16,11 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); + my %foods; my $body = $building->body; foreach my $food (FOOD_TYPES) { @@ -33,15 +35,15 @@ sub dump { if ($amount <= 0) { confess [1009, 'You must specify an amount greater than 0.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - my $body = $building->body; + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $body = $session->current_body; $body->spend_type($type, $amount); $body->add_type('waste', $amount); $body->update; return { status => $self->format_status($empire, $body), - }; + }; } __PACKAGE__->register_rpc_method_names(qw(dump)); diff --git a/lib/Lacuna/RPC/Building/GeneticsLab.pm b/lib/Lacuna/RPC/Building/GeneticsLab.pm index 076af641..e5888b75 100644 --- a/lib/Lacuna/RPC/Building/GeneticsLab.pm +++ b/lib/Lacuna/RPC/Building/GeneticsLab.pm @@ -16,8 +16,9 @@ sub model_class { sub prepare_experiment { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; return { status => $self->format_status($empire, $building->body), survival_odds => $building->survival_odds, @@ -30,8 +31,9 @@ sub prepare_experiment { sub run_experiment { my ($self, $session_id, $building_id, $spy_id, $affinity) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($spy_id) { confess [1002, 'You have to specify a spy id.']; } @@ -51,8 +53,9 @@ sub run_experiment { sub rename_species { my ($self, $session_id, $building_id, $me) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $me->{name} =~ s{^\s+(.*)\s+$}{$1}xms; # remove extra white space Lacuna::Verify->new(content=>\$me->{name}, throws=>[1000,'Species name not available.', 'name']) ->length_lt(31) @@ -61,7 +64,7 @@ sub rename_species { ->no_restricted_chars ->no_profanity; - # and the description + # and the description Lacuna::Verify->new(content=>\$me->{description}, throws=>[1005,'Description invalid.', 'description']) ->length_lt(1025) ->no_restricted_chars diff --git a/lib/Lacuna/RPC/Building/IntelTraining.pm b/lib/Lacuna/RPC/Building/IntelTraining.pm index 302d131d..50cfb19f 100644 --- a/lib/Lacuna/RPC/Building/IntelTraining.pm +++ b/lib/Lacuna/RPC/Building/IntelTraining.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $boost = (time < $empire->spy_training_boost->epoch) ? 1.5 : 1; my $points_per = $building->effective_level * $boost; $out->{spies} = { diff --git a/lib/Lacuna/RPC/Building/Intelligence.pm b/lib/Lacuna/RPC/Building/Intelligence.pm index 90906c36..1711cf68 100644 --- a/lib/Lacuna/RPC/Building/Intelligence.pm +++ b/lib/Lacuna/RPC/Building/Intelligence.pm @@ -16,8 +16,9 @@ sub model_class { sub view_spies { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; $page_number ||= 1; my @spies; my $body = $building->body; @@ -55,8 +56,9 @@ sub view_spies { sub view_all_spies { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @spies; my $body = $building->body; my %planets = ( $body->id => $body ); @@ -85,8 +87,9 @@ sub view_all_spies { # This call is too intensive for server at this time. Disabled # sub view_empire_spies { # my ($self, $session_id, $building_id) = @_; -# my $empire = $self->get_empire_by_session($session_id); -# my $building = $self->get_building($empire, $building_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 @spies; # my $body = $building->body; # my %planets = ( $body->id => $body ); @@ -114,8 +117,9 @@ sub view_all_spies { sub subsidize_training { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->efficiency == 100) { confess [1010, "You can not subsidize spies when the Intelligence Ministry is in need of repair."]; } @@ -142,14 +146,15 @@ sub subsidize_training { } $building->finish_work->update; - return $self->view($empire, $building); + return $self->view($session, $building); } sub assign_spy { my ($self, $session_id, $building_id, $spy_id, $assignment) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->efficiency == 100) { confess [1010, "You can not communicate with your spy when the Intelligence Ministry is in need of repair."]; } @@ -168,8 +173,9 @@ sub assign_spy { sub burn_spy { my ($self, $session_id, $building_id, $spy_id, $assignment) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $spy = $building->get_spy($spy_id); unless (defined $spy) { confess [1002, "Spy not found."]; @@ -191,8 +197,9 @@ sub burn_spy { sub train_spy { my ($self, $session_id, $building_id, $quantity) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->efficiency == 100) { confess [1010, "You can not train spies when the Intelligence Ministry is in need of repair."]; } @@ -243,9 +250,10 @@ sub train_spy { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{spies} = { maximum => $building->max_spies, current => $building->spy_count, @@ -263,9 +271,10 @@ sub name_spy { ->length_lt(31) ->length_gt(2) ->no_restricted_chars; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - my $spy = $building->get_spy($spy_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 $spy = $building->get_spy($spy_id); $spy->name($name); $spy->update; return { diff --git a/lib/Lacuna/RPC/Building/LibraryOfJith.pm b/lib/Lacuna/RPC/Building/LibraryOfJith.pm index ed64513b..887974f7 100644 --- a/lib/Lacuna/RPC/Building/LibraryOfJith.pm +++ b/lib/Lacuna/RPC/Building/LibraryOfJith.pm @@ -15,8 +15,9 @@ sub model_class { sub research_species { my ($self, $session_id, $building_id, $view_empire_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $view_empire = Lacuna->db->resultset('Lacuna::DB::Result::Empire')->find($view_empire_id); unless (defined $view_empire) { diff --git a/lib/Lacuna/RPC/Building/MayhemTraining.pm b/lib/Lacuna/RPC/Building/MayhemTraining.pm index f4867baa..d9b77b29 100644 --- a/lib/Lacuna/RPC/Building/MayhemTraining.pm +++ b/lib/Lacuna/RPC/Building/MayhemTraining.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $boost = (time < $empire->spy_training_boost->epoch) ? 1.5 : 1; my $points_per = $building->effective_level * $boost; $out->{spies} = { diff --git a/lib/Lacuna/RPC/Building/MercenariesGuild.pm b/lib/Lacuna/RPC/Building/MercenariesGuild.pm index 60013e45..e8681d60 100644 --- a/lib/Lacuna/RPC/Building/MercenariesGuild.pm +++ b/lib/Lacuna/RPC/Building/MercenariesGuild.pm @@ -16,8 +16,9 @@ sub model_class { sub get_trade_ships { my ($self, $session_id, $building_id, $target_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $target = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($target_id) if $target_id; my @ships; my $ships = $building->trade_ships; @@ -40,8 +41,9 @@ sub withdraw_from_market { confess [1013, 'A buyer has placed an offer on this trade. Please wait a few moments and try again.']; } $cache->set('trade_lock',$trade_id,1,5); - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $trade = $building->market->find($trade_id); unless (defined $trade) { confess [1002, 'Could not find that trade. Perhaps it has already been accepted.']; @@ -66,8 +68,9 @@ sub accept_from_market { $cache->delete('trade_lock',$trade_id); }; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a mercenaries guild that has not yet been built.'] unless $building->effective_level > 0; confess [1013, 'You cannot use a mercenaries guild that is not fully operational.'] unless $building->effective_efficiency == 100; @@ -135,8 +138,9 @@ sub accept_from_market { sub add_to_market { my ($self, $session_id, $building_id, $spy_id, $ask, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a mercenaries guild that has not yet been built.'] unless $building->effective_level > 0; my $cost = sprintf "%.1f", 3 - $building->effective_level * 0.1; unless ($empire->essentia >= $cost) { @@ -156,8 +160,9 @@ sub add_to_market { sub view_my_market { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 $my_trades = $building->my_market->search(undef, { rows => 25, page => $page_number }); my @trades; @@ -179,8 +184,9 @@ sub view_my_market { sub view_market { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 $all_trades = $building->available_market->search( undef, @@ -216,8 +222,9 @@ sub view_market { sub get_spies { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $spies = Lacuna->db->resultset('Lacuna::DB::Result::Spies')->search( { empire_id => $empire->id, on_body_id => $building->body_id, task => { in => ['Counter Espionage','Idle'] } }, { @@ -246,12 +253,13 @@ sub report_abuse { unless ($trade_id) { confess [1002, 'You have not specified a trade to withdraw.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); my $cache = Lacuna->cache; if ($cache->get('trade_lock', $trade_id)) { confess [1013, 'A buyer has placed an offer on this trade. Please wait a few moments and try again.']; } + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $times_reporting = $cache->increment('empire_reporting_trade_abuse'.DateTime->now->day, $empire->id, 1, 60 * 60 * 24); if ($times_reporting > 10) { confess [1010, 'You have reported enough abuse for one day.']; diff --git a/lib/Lacuna/RPC/Building/MiningMinistry.pm b/lib/Lacuna/RPC/Building/MiningMinistry.pm index 99aa5776..29d73d41 100644 --- a/lib/Lacuna/RPC/Building/MiningMinistry.pm +++ b/lib/Lacuna/RPC/Building/MiningMinistry.pm @@ -16,8 +16,9 @@ sub model_class { sub view_ships { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ships = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->search({ body_id => $building->body_id, task => { in => ['Mining', 'Docked']}, @@ -42,8 +43,9 @@ sub view_ships { sub view_platforms { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $platforms = $building->platforms; my @fleet; while (my $platform = $platforms->next) { @@ -82,8 +84,9 @@ sub view_platforms { sub abandon_platform { my ($self, $session_id, $building_id, $platform_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $platform = Lacuna->db->resultset('Lacuna::DB::Result::MiningPlatforms')->find($platform_id); unless (defined $platform) { confess [1002, "Platform not found."]; @@ -99,18 +102,20 @@ sub abandon_platform { sub mass_abandon_platform { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - $building->platforms->delete; - return { + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; + $building->platforms->delete; + return { status => $self->format_status($empire, $building->body), }; } sub add_cargo_ship_to_fleet { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ship = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->find($ship_id); unless (defined $ship) { confess [1002, "Ship not found."]; @@ -135,8 +140,9 @@ sub add_cargo_ship_to_fleet { sub remove_cargo_ship_from_fleet { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ship = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->find($ship_id); unless (defined $ship) { confess [1002, "Ship not found."]; diff --git a/lib/Lacuna/RPC/Building/MissionCommand.pm b/lib/Lacuna/RPC/Building/MissionCommand.pm index c9d8556b..9b968087 100644 --- a/lib/Lacuna/RPC/Building/MissionCommand.pm +++ b/lib/Lacuna/RPC/Building/MissionCommand.pm @@ -15,8 +15,9 @@ sub model_class { sub get_missions { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @missions; my $missions = $building->missions; my $count; @@ -51,8 +52,9 @@ sub get_missions { sub complete_mission { my ($self, $session_id, $building_id, $mission_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1002, 'Please specify a mission id.'] unless $mission_id; my $mission = $building->missions->find($mission_id); confess [1002, 'No such mission.'] unless $mission; @@ -70,8 +72,9 @@ sub complete_mission { sub skip_mission { my ($self, $session_id, $building_id, $mission_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1002, 'Please specify a mission id.'] unless $mission_id; my $mission = $building->missions->find($mission_id); confess [1002, 'No such mission.'] unless $mission; diff --git a/lib/Lacuna/RPC/Building/Network19.pm b/lib/Lacuna/RPC/Building/Network19.pm index 0c01139a..6e856d42 100644 --- a/lib/Lacuna/RPC/Building/Network19.pm +++ b/lib/Lacuna/RPC/Building/Network19.pm @@ -16,8 +16,9 @@ sub model_class { sub view_news { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; my @all = ($body->zone, $body->adjacent_zones); my @zones; @@ -54,8 +55,9 @@ sub view_news { sub restrict_coverage { my ($self, $session_id, $building_id, $onoff) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($onoff ne '0' && $onoff ne '1') { confess [1009, 'The valid values for onoff are 1 or 0.']; } @@ -79,9 +81,10 @@ sub restrict_coverage { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{restrict_coverage} = $building->body->restrict_coverage; return $out; }; diff --git a/lib/Lacuna/RPC/Building/Observatory.pm b/lib/Lacuna/RPC/Building/Observatory.pm index 8a4bc757..59e51c23 100644 --- a/lib/Lacuna/RPC/Building/Observatory.pm +++ b/lib/Lacuna/RPC/Building/Observatory.pm @@ -15,8 +15,9 @@ sub model_class { sub abandon_probe { my ($self, $session_id, $building_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $star = Lacuna->db->resultset('Lacuna::DB::Result::Map::Star')->find($star_id); unless (defined $star) { confess [ 1002, 'Star does not exist.', $star_id]; @@ -35,8 +36,9 @@ sub abandon_probe { sub abandon_all_probes { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->probes->delete; $empire->clear_probed_stars; return {status => $self->format_status($empire, $building->body)}; @@ -44,8 +46,9 @@ sub abandon_all_probes { sub get_probed_stars { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @stars; $page_number ||= 1; my $probes = $building->probes->search(undef,{ rows => 30, page => $page_number }); diff --git a/lib/Lacuna/RPC/Building/OracleOfAnid.pm b/lib/Lacuna/RPC/Building/OracleOfAnid.pm index e6db6b74..17cf3d35 100644 --- a/lib/Lacuna/RPC/Building/OracleOfAnid.pm +++ b/lib/Lacuna/RPC/Building/OracleOfAnid.pm @@ -15,8 +15,9 @@ sub model_class { sub get_star { my ($self, $session_id, $building_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $star = Lacuna->db->resultset('Lacuna::DB::Result::Map::Star')->find($star_id); unless (defined $star) { confess [1002, "Couldn't find a star."]; @@ -37,8 +38,9 @@ sub get_probed_stars { confess [1002, "Page size cannot exceed 200."]; } - my $empire = $self->get_empire_by_session($args->{session_id}); - my $building = $self->get_building($empire, $args->{building_id}); + my $session = $self->get_session({session_id => $args->{session_id}, building_id => $args->{building_id} }); + my $empire = $session->current_empire; + my $building = $session->current_building; my @stars; my $probes = $building->probes->search(undef,{ rows => $page_size, page => $page_number }); @@ -55,7 +57,7 @@ sub get_probed_stars { __PACKAGE__->register_rpc_method_names(qw( get_star - get_probed_stars + get_probed_stars )); diff --git a/lib/Lacuna/RPC/Building/OreStorage.pm b/lib/Lacuna/RPC/Building/OreStorage.pm index 284d17f4..a7d34695 100644 --- a/lib/Lacuna/RPC/Building/OreStorage.pm +++ b/lib/Lacuna/RPC/Building/OreStorage.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my %ores; my $body = $building->body; foreach my $ore (ORE_TYPES) { @@ -33,15 +34,16 @@ sub dump { if ($amount <= 0) { confess [1009, 'You must specify an amount greater than 0.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; $body->spend_type($type, $amount); $body->add_type('waste', $amount); $body->update; return { status => $self->format_status($empire, $body), - }; + }; } __PACKAGE__->register_rpc_method_names(qw(dump)); diff --git a/lib/Lacuna/RPC/Building/Park.pm b/lib/Lacuna/RPC/Building/Park.pm index 366077c7..67653df3 100644 --- a/lib/Lacuna/RPC/Building/Park.pm +++ b/lib/Lacuna/RPC/Building/Park.pm @@ -15,9 +15,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); if ($building->is_working) { $out->{party} = { seconds_remaining => $building->work_seconds_remaining, @@ -32,16 +33,18 @@ around 'view' => sub { sub throw_a_party { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->throw_a_party; - return $self->view($empire, $building); + return $self->view($session, $building); } sub subsidize_party { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "There is no party."]; @@ -58,7 +61,7 @@ sub subsidize_party { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw(throw_a_party subsidize_party)); diff --git a/lib/Lacuna/RPC/Building/Parliament.pm b/lib/Lacuna/RPC/Building/Parliament.pm index fccd5d9f..17f1b728 100644 --- a/lib/Lacuna/RPC/Building/Parliament.pm +++ b/lib/Lacuna/RPC/Building/Parliament.pm @@ -15,8 +15,9 @@ sub model_class { sub max_members { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $leader_emp = $building->body->alliance->leader; my $leader_planets = $leader_emp->planets; my @planet_ids; @@ -36,8 +37,9 @@ sub max_members { sub get_stars_in_jurisdiction { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $stars = $building->body->stars->search({},{order_by => "name"}); while (my $star = $stars->next) { @@ -51,8 +53,9 @@ sub get_stars_in_jurisdiction { sub get_bodies_for_star_in_jurisdiction { my ($self, $session_id, $building_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($star_id) { confess [1002, 'You have to specify a star id.']; } @@ -73,8 +76,9 @@ sub get_bodies_for_star_in_jurisdiction { sub get_mining_platforms_for_asteroid_in_jurisdiction { my ($self, $session_id, $building_id, $asteroid_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my @star_ids = $building->body->stars->get_column('id')->all; unless ($asteroid_id) { @@ -105,7 +109,9 @@ sub get_mining_platforms_for_asteroid_in_jurisdiction { sub view_laws { my ($self, $session_id, $body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; + my $body = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body') ->find($body_id); if ($body->isa('Lacuna::DB::Result::Map::Body::Planet::Station')) { @@ -133,12 +139,13 @@ sub view_laws { sub propose_fire_bfg { my ($self, $session_id, $building_id, $body_id, $reason) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } $empire->current_session->check_captcha; - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 25) { confess [1013, 'Parliament must be level 25 to propose using the BFG.',25]; } @@ -178,11 +185,12 @@ sub propose_fire_bfg { sub propose_writ { my ($self, $session_id, $building_id, $title, $writ) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 4) { confess [1013, 'Parliament must be level 4 to propose a writ.',4]; } @@ -213,11 +221,12 @@ sub propose_writ { sub propose_transfer_station_ownership { my ($self, $session_id, $building_id, $to_empire_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 6) { confess [1013, 'Parliament must be level 6 to transfer station ownership.',6]; } @@ -255,11 +264,12 @@ sub propose_transfer_station_ownership { sub propose_repeal_law { my ($self, $session_id, $building_id, $law_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 5) { confess [1013, 'Parliament must be level 5 to repeal a law.',5]; } @@ -291,11 +301,12 @@ sub propose_repeal_law { sub propose_rename_star { my ($self, $session_id, $building_id, $star_id, $star_name) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 8) { confess [1013, 'Parliament must be level 8 to rename a star.',8]; } @@ -337,11 +348,12 @@ sub propose_rename_star { sub propose_broadcast_on_network19 { my ($self, $session_id, $building_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 9) { confess [1013, 'Parliament must be level 9 to propose a broadcast.',9]; } @@ -371,11 +383,12 @@ sub propose_broadcast_on_network19 { sub propose_rename_asteroid { my ($self, $session_id, $building_id, $asteroid_id, $name) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 12) { confess [1013, 'Parliament must be level 12 to rename an asteroid.',12]; } @@ -417,11 +430,12 @@ sub propose_rename_asteroid { sub propose_rename_uninhabited { my ($self, $session_id, $building_id, $planet_id, $name) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 17) { confess [1013, 'Parliament must be level 17 to rename an uninhabited planet.',17]; } @@ -466,11 +480,12 @@ sub propose_rename_uninhabited { sub propose_members_only_mining_rights { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 13) { confess [1013, 'Parliament must be level 13 to propose members only mining rights.',13]; } @@ -494,11 +509,12 @@ sub propose_members_only_mining_rights { sub propose_members_only_excavation { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 20) { confess [1013, 'Parliament must be level 20 to propose members only excavation rights.',20]; } @@ -522,11 +538,12 @@ sub propose_members_only_excavation { sub propose_members_only_colonization { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 18) { confess [1013, 'Parliament must be level 18 to propose members only colonization.',18]; } @@ -551,11 +568,12 @@ sub propose_members_only_colonization { sub propose_members_only_stations { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 18) { confess [1013, 'Parliament must be level 18 to propose members only stations.',18]; } @@ -579,11 +597,12 @@ sub propose_members_only_stations { sub propose_neutralize_bhg { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 23) { confess [1013, 'Parliament must be level 23 to propose to neutralize black hole generators.',23]; } @@ -607,11 +626,12 @@ sub propose_neutralize_bhg { sub allow_bhg_by_alliance { my ($self, $session_id, $building_id, $alliance_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 28) { confess [1013, 'Parliament must be level 28 to propose to neutralize black hole generators.',28]; } @@ -640,11 +660,12 @@ sub allow_bhg_by_alliance { sub propose_evict_mining_platform { my ($self, $session_id, $building_id, $platform_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 14) { confess [1013, 'Parliament must be level 14 to evict a mining platform.',14]; } @@ -679,11 +700,12 @@ sub propose_evict_mining_platform { sub propose_evict_excavator { my ($self, $session_id, $building_id, $excav_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 21) { confess [1013, 'Parliament must be level 21 to evict an excavator.',21]; } @@ -718,11 +740,12 @@ sub propose_evict_excavator { sub propose_elect_new_leader { my ($self, $session_id, $building_id, $to_empire_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 11) { confess [1013, 'Parliament must be level 11 to elect a new alliance leader.',11]; } @@ -757,11 +780,12 @@ sub propose_elect_new_leader { sub propose_induct_member { my ($self, $session_id, $building_id, $empire_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 10) { confess [1013, 'Parliament must be level 10 to induct a new alliance member.',10]; } @@ -803,11 +827,12 @@ sub propose_induct_member { sub propose_expel_member { my ($self, $session_id, $building_id, $empire_id, $message) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 10) { confess [1013, 'Parliament must be level 10 to expel an alliance member.',10]; } @@ -845,11 +870,12 @@ sub propose_expel_member { sub propose_taxation { my ($self, $session_id, $building_id, $taxes) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 15) { confess [1013, 'Parliament must be level 15 to propose taxation.',15]; } @@ -878,11 +904,12 @@ sub propose_taxation { sub propose_foreign_aid { my ($self, $session_id, $building_id, $planet_id, $resources) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot create propositions.']; } - my $building = $self->get_building($empire, $building_id); unless ($building->effective_level >= 16) { confess [1013, 'Parliament must be level 16 to send out foreign aid packages.',16]; } @@ -941,8 +968,9 @@ sub propose_foreign_aid { sub view_taxes_collected { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $taxes = Lacuna->db->resultset('Lacuna::DB::Result::Taxes')->search({station_id => $building->body_id}); while (my $tax = $taxes->next) { diff --git a/lib/Lacuna/RPC/Building/PlanetaryCommand.pm b/lib/Lacuna/RPC/Building/PlanetaryCommand.pm index 3df436de..c71c3fc3 100644 --- a/lib/Lacuna/RPC/Building/PlanetaryCommand.pm +++ b/lib/Lacuna/RPC/Building/PlanetaryCommand.pm @@ -17,9 +17,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{planet} = $building->body->get_status($empire); $out->{ore} = $building->body->get_ore_status; $out->{food} = $building->body->get_food_status; @@ -34,8 +35,9 @@ around 'view' => sub { sub view_plans { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $sorted_plans = $building->body->sorted_plans; @@ -60,8 +62,9 @@ sub view_plans { sub subsidise_pod_cooldown { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "PCC is not in cooldown mode."]; @@ -78,7 +81,7 @@ sub subsidise_pod_cooldown { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw( diff --git a/lib/Lacuna/RPC/Building/PoliceStation.pm b/lib/Lacuna/RPC/Building/PoliceStation.pm index 500f63b5..9d406e1f 100644 --- a/lib/Lacuna/RPC/Building/PoliceStation.pm +++ b/lib/Lacuna/RPC/Building/PoliceStation.pm @@ -15,8 +15,9 @@ sub model_class { sub view_foreign_spies { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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, @@ -44,8 +45,9 @@ sub view_foreign_spies { sub execute_prisoner { my ($self, $session_id, $building_id, $prisoner_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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.']; @@ -69,8 +71,9 @@ sub execute_prisoner { sub release_prisoner { my ($self, $session_id, $building_id, $prisoner_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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.']; @@ -94,8 +97,9 @@ sub release_prisoner { sub view_prisoners { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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, @@ -124,8 +128,9 @@ sub view_prisoners { sub view_ships_travelling { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 $body = $building->body; my @travelling; @@ -143,8 +148,9 @@ sub view_ships_travelling { sub view_foreign_ships { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 @fleet; my $now = time; @@ -192,8 +198,9 @@ sub view_foreign_ships { sub view_ships_orbiting { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 @fleet; my $now = time; diff --git a/lib/Lacuna/RPC/Building/PoliticsTraining.pm b/lib/Lacuna/RPC/Building/PoliticsTraining.pm index 432c8524..d259f7fc 100644 --- a/lib/Lacuna/RPC/Building/PoliticsTraining.pm +++ b/lib/Lacuna/RPC/Building/PoliticsTraining.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $boost = (time < $empire->spy_training_boost->epoch) ? 1.5 : 1; my $points_per = $building->effective_level * $boost; $out->{spies} = { diff --git a/lib/Lacuna/RPC/Building/SSLa.pm b/lib/Lacuna/RPC/Building/SSLa.pm index 3744fe2b..9aab30ce 100644 --- a/lib/Lacuna/RPC/Building/SSLa.pm +++ b/lib/Lacuna/RPC/Building/SSLa.pm @@ -15,9 +15,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{make_plan} = { types => $building->makeable_plans_formatted, level_costs => $building->level_costs_formatted, @@ -32,17 +33,19 @@ around 'view' => sub { sub make_plan { my ($self, $session_id, $building_id, $type, $level) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->can_make_plan($type, $level); $building->make_plan($type, $level); - return $self->view($empire, $building); + return $self->view($session, $building); } sub subsidize_plan { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "There is no plan being built."]; @@ -59,7 +62,7 @@ sub subsidize_plan { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } diff --git a/lib/Lacuna/RPC/Building/Security.pm b/lib/Lacuna/RPC/Building/Security.pm index d9e1f742..2a8912a4 100644 --- a/lib/Lacuna/RPC/Building/Security.pm +++ b/lib/Lacuna/RPC/Building/Security.pm @@ -15,8 +15,9 @@ sub model_class { sub view_foreign_spies { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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, @@ -44,8 +45,9 @@ sub view_foreign_spies { sub execute_prisoner { my ($self, $session_id, $building_id, $prisoner_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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.']; @@ -70,8 +72,9 @@ sub execute_prisoner { sub release_prisoner { my ($self, $session_id, $building_id, $prisoner_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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.']; @@ -95,8 +98,9 @@ sub release_prisoner { sub view_prisoners { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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, diff --git a/lib/Lacuna/RPC/Building/Shipyard.pm b/lib/Lacuna/RPC/Building/Shipyard.pm index 4ac2f016..3651cc51 100644 --- a/lib/Lacuna/RPC/Building/Shipyard.pm +++ b/lib/Lacuna/RPC/Building/Shipyard.pm @@ -18,8 +18,9 @@ sub model_class { sub view_build_queue { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; $page_number ||= 1; my @building; @@ -54,15 +55,16 @@ sub view_build_queue { sub subsidize_build_queue { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; my $ships = $building->building_ships; my $cost = $ships->count; unless ($empire->essentia >= $cost) { - confess [1011, "Not enough essentia."]; + confess [1011, "Not enough essentia."]; } $empire->spend_essentia({ @@ -76,14 +78,15 @@ sub subsidize_build_queue { } $building->finish_work->update; - return $self->view($empire, $building); + return $self->view($session, $building); } sub delete_build { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if (!ref $ship_id) { @@ -123,8 +126,9 @@ sub subsidize_ship { if (ref($args) ne "HASH") { confess [1000, "You have not supplied a hash reference"]; } - my $empire = $self->get_empire_by_session($args->{session_id}); - my $building = $self->get_building($empire, $args->{building_id}); + my $session = $self->get_session({session_id => $args->{session_id}, building_id => $args->{building_id} }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->effective_level > 0 and $building->efficiency == 100) { confess [1003, "You must have a functional Space Port!"]; } @@ -150,7 +154,7 @@ sub subsidize_ship { $scheduled_ship->reschedule_queue; $scheduled_ship->finish_construction; - return $self->view_build_queue($empire, $building); + return $self->view_build_queue($session, $building); } @@ -165,8 +169,9 @@ sub build_ship { confess [1001, "Quantity must be a positive integer"]; } my $costs; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body_id = $building->body_id; for (1..$quantity) { @@ -180,7 +185,7 @@ sub build_ship { $ship->body_id($body_id); $ship->update; } - return $self->view_build_queue($empire, $building); + return $self->view_build_queue($session, $building); } # All buildings must be on the same body @@ -199,7 +204,8 @@ sub build_ship { sub build_ships { my ($self, $session_id, $opts) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, building_id => $opts->{building_id} }); + my $empire = $session->current_empire; my $quantity = $opts->{quantity} // 1; if ($quantity > 600) { # of course, this would only be reached if the planet had 20 shipyards at level 30 @@ -324,15 +330,16 @@ sub build_ships { # $body->update; #} - #return $self->view_build_queue($empire, $building_view); + #return $self->view_build_queue($session, $building_view); Lacuna::RPC::Body->new->get_buildings($empire, $body); } sub get_buildable { my ($self, $session_id, $building_id, $tag) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 %buildable; foreach my $type (SHIP_TYPES) { my $ship = Lacuna->db->resultset('Ships')->new({type=>$type}); diff --git a/lib/Lacuna/RPC/Building/SpacePort.pm b/lib/Lacuna/RPC/Building/SpacePort.pm index b50c661b..4fddfe20 100644 --- a/lib/Lacuna/RPC/Building/SpacePort.pm +++ b/lib/Lacuna/RPC/Building/SpacePort.pm @@ -51,8 +51,9 @@ sub find_target { sub get_fleet_for { my ($self, $session_id, $body_id, $target_params) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id }); + my $empire = $session->current_empire; + my $body = $session->current_body; my $target = $self->find_target($target_params); my $max_berth = Lacuna->db->resultset('Lacuna::DB::Result::Building')->search( { @@ -101,8 +102,9 @@ sub get_fleet_for { sub get_ships_for { my ($self, $session_id, $body_id, $target_params) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id }); + my $empire = $session->current_empire; + my $body = $session->current_body; my $target = $self->find_target($target_params); my $ships = Lacuna->db->resultset('Lacuna::DB::Result::Ships'); @@ -215,7 +217,8 @@ sub get_ships_for { sub send_ship { my ($self, $session_id, $ship_id, $target_params) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $target = $self->find_target($target_params); my $ship = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->find($ship_id); unless (defined $ship) { @@ -283,8 +286,9 @@ sub find_arrival { sub send_ship_types { my ($self, $session_id, $body_id, $target_params, $type_params, $arrival_params) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $body = $self->get_body($empire, $body_id); + my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); + my $empire = $session->current_empire; + my $body = $session->current_body; my $target = $self->find_target($target_params); my $arrival; if ($arrival_params->{earliest}) { @@ -465,7 +469,8 @@ sub send_ship_types { sub send_fleet { my ($self, $session_id, $ship_ids, $target_params, $set_speed) = @_; $set_speed //= 0; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $target = $self->find_target($target_params); my $max_ships = Lacuna->config->get('ships_per_fleet') || 600; if (@$ship_ids > $max_ships) { @@ -545,8 +550,9 @@ sub send_fleet { sub recall_ship { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ship = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->find($ship_id); unless (defined $ship) { confess [1002, 'Could not locate that ship.']; @@ -574,8 +580,9 @@ sub recall_ship { sub recall_all { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; my @ships = $body->ships_orbiting->search(undef)->all; my @ret; @@ -608,13 +615,14 @@ sub recall_all { sub prepare_send_spies { my ($self, $session_id, $on_body_id, $to_body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, body_id => $on_body_id}); + my $empire = $session->current_empire; + my $on_body = $session->current_body; if ($on_body_id == $to_body_id) { confess [1013, "Cannot send spies to one self."]; } - my $on_body = $self->get_body($empire, $on_body_id); my $to_body = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($to_body_id); - + unless ($to_body->empire_id) { confess [1009, "Cannot send spies to an uninhabited body."]; } @@ -683,11 +691,12 @@ sub prepare_send_spies { sub send_spies { my ($self, $session_id, $on_body_id, $to_body_id, $ship_id, $spy_ids) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, body_id => $on_body_id}); + my $empire = $session->current_empire; if ($on_body_id == $to_body_id) { confess [1013, "Cannot send spies to one self."]; } - my $on_body = $self->get_body($empire, $on_body_id); + my $on_body = $session->current_body(); my $to_body = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($to_body_id); # make sure it's a valid target @@ -767,11 +776,12 @@ sub send_spies { sub prepare_fetch_spies { my ($self, $session_id, $on_body_id, $to_body_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, body_id => $to_body_id}); + my $empire = $session->current_empire; if ($on_body_id == $to_body_id) { confess [1013, "Cannot fetch spies to one self."]; } - my $to_body = $self->get_body($empire, $to_body_id); + my $to_body = $session->current_body; my $on_body = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($on_body_id); unless ($on_body->empire_id) { confess [1013, "Cannot fetch spies from an uninhabited planet."]; @@ -795,7 +805,7 @@ sub prepare_fetch_spies { my $dt_parser = Lacuna->db->storage->datetime_parser; my $now = $dt_parser->format_datetime( DateTime->now ); - + my $spies = Lacuna->db->resultset('Lacuna::DB::Result::Spies')->search( { on_body_id => $on_body->id, @@ -829,11 +839,12 @@ sub prepare_fetch_spies { sub fetch_spies { my ($self, $session_id, $on_body_id, $to_body_id, $ship_id, $spy_ids) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id, body_id => $to_body_id}); + my $empire = $session->current_empire; if ($on_body_id == $to_body_id) { confess [1013, "Cannot fetch spies to one self."]; } - my $to_body = $self->get_body($empire, $to_body_id); + my $to_body = $session->current_body; my $on_body = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($on_body_id); my $max_berth = $to_body->max_berth; @@ -899,8 +910,9 @@ sub fetch_spies { sub view_ships_travelling { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 $body = $building->body; my @travelling; @@ -1020,8 +1032,9 @@ sub view_all_ships { $attrs->{rows} = $paging->{items_per_page} if ( defined $paging->{items_per_page} ); $attrs->{page} = $paging->{page_number} if ( defined $paging->{page_number} ); - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; my @fleet; my $ships = $building->ships->search( $filter, $attrs ); @@ -1039,8 +1052,9 @@ sub view_all_ships { sub view_foreign_ships { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 @fleet; my $now = time; @@ -1092,8 +1106,9 @@ sub view_foreign_ships { sub view_ships_orbiting { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 @fleet; my $now = time; @@ -1141,8 +1156,9 @@ sub view_ships_orbiting { sub _view_ships { my ($self, $session_id, $building_id, $page_number, $method) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @fleet; my $now = time; my $ships = $building->$method->search({}, {rows=>25, page=>$page_number, join => 'body' }); @@ -1179,7 +1195,6 @@ sub _view_ships { $ship_info{image} = $ship->image; } } -warn Dumper(\%ship_info); use Data::Dumper; push @fleet, \%ship_info; } } @@ -1197,8 +1212,9 @@ sub name_ship { ->no_profanity ->length_lt(31) ->no_restricted_chars; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ship = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->find($ship_id); unless (defined $ship) { confess [1002, "Ship not found."]; @@ -1210,13 +1226,14 @@ sub name_ship { $ship->update; return { status => $self->format_status($empire, $building->body), - }; + }; } sub scuttle_ship { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ship = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->find($ship_id); unless (defined $ship) { confess [1002, "Ship not found."]; @@ -1235,8 +1252,9 @@ sub scuttle_ship { sub mass_scuttle_ship { my ($self, $session_id, $building_id, $ship_ids) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; if (scalar @{$ship_ids} > 6000) { confess [ 1099, "More ships than can be docked on one planet!" ]; @@ -1257,8 +1275,9 @@ sub mass_scuttle_ship { sub view_battle_logs { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 @logs; my $battle_logs = $building->battle_logs->search({}, { rows=>25, page=>$page_number, order_by => => { -desc => 'date_stamp' } }); @@ -1293,9 +1312,10 @@ sub view_battle_logs { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); return $out unless $building->effective_level > 0; my $docked = $building->ships->search({ task => 'Docked' }); my %ships; diff --git a/lib/Lacuna/RPC/Building/StationCommand.pm b/lib/Lacuna/RPC/Building/StationCommand.pm index fe68b022..39cbde19 100644 --- a/lib/Lacuna/RPC/Building/StationCommand.pm +++ b/lib/Lacuna/RPC/Building/StationCommand.pm @@ -17,9 +17,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); $out->{planet} = $building->body->get_status($empire); $out->{ore} = $building->body->get_ore_status; $out->{food} = $building->body->get_food_status; @@ -30,8 +31,9 @@ around 'view' => sub { sub view_plans { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $sorted_plans = $building->body->sorted_plans; foreach my $plan (@$sorted_plans) { diff --git a/lib/Lacuna/RPC/Building/SubspaceSupplyDepot.pm b/lib/Lacuna/RPC/Building/SubspaceSupplyDepot.pm index 7e3e4e67..983f0512 100644 --- a/lib/Lacuna/RPC/Building/SubspaceSupplyDepot.pm +++ b/lib/Lacuna/RPC/Building/SubspaceSupplyDepot.pm @@ -15,8 +15,9 @@ sub model_class { sub transmit_food { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->transmit_food; return { status => $self->format_status($empire, $building->body), @@ -32,8 +33,9 @@ sub transmit_food { sub transmit_energy { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->transmit_energy; return { status => $self->format_status($empire, $building->body), @@ -49,8 +51,9 @@ sub transmit_energy { sub transmit_ore { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->transmit_ore; return { status => $self->format_status($empire, $building->body), @@ -66,8 +69,9 @@ sub transmit_ore { sub transmit_water { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->transmit_water; return { status => $self->format_status($empire, $building->body), @@ -83,8 +87,9 @@ sub transmit_water { sub complete_build_queue { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->complete_build_queue; return { status => $self->format_status($empire, $building->body), diff --git a/lib/Lacuna/RPC/Building/TempleOfTheDrajilites.pm b/lib/Lacuna/RPC/Building/TempleOfTheDrajilites.pm index 775679ff..9230f370 100644 --- a/lib/Lacuna/RPC/Building/TempleOfTheDrajilites.pm +++ b/lib/Lacuna/RPC/Building/TempleOfTheDrajilites.pm @@ -16,8 +16,9 @@ sub model_class { sub view_planet { my ($self, $session_id, $building_id, $planet_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $planet = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($planet_id); unless (defined $planet) { @@ -50,8 +51,9 @@ sub view_planet { sub list_planets { my ($self, $session_id, $building_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $star; if ($star_id) { $star = Lacuna->db->resultset('Lacuna::DB::Result::Map::Star')->find($star_id); diff --git a/lib/Lacuna/RPC/Building/TheDillonForge.pm b/lib/Lacuna/RPC/Building/TheDillonForge.pm index 7f0df7e4..41e420d5 100644 --- a/lib/Lacuna/RPC/Building/TheDillonForge.pm +++ b/lib/Lacuna/RPC/Building/TheDillonForge.pm @@ -17,8 +17,9 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $out = $orig->($self, $empire, $building); if ($building->is_working) { my $work = $building->work; @@ -121,29 +122,32 @@ PLAN: sub split_plan { my ($self, $session_id, $building_id, $plan_class, $level, $extra_build_level, $quantity) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $quantity = $quantity || 1; $building->split_plan($plan_class, $level, $extra_build_level, $quantity); - return $self->view($empire, $building); + return $self->view($session, $building); } sub make_plan { my ($self, $session_id, $building_id, $plan_class, $level) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->make_plan($plan_class, $level); - return $self->view($empire, $building); + return $self->view($session, $building); } - + sub subsidize { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "Nothing is being done!"]; @@ -162,7 +166,7 @@ sub subsidize { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw(split_plan make_plan subsidize)); diff --git a/lib/Lacuna/RPC/Building/TheftTraining.pm b/lib/Lacuna/RPC/Building/TheftTraining.pm index a4e03de0..546dd35f 100644 --- a/lib/Lacuna/RPC/Building/TheftTraining.pm +++ b/lib/Lacuna/RPC/Building/TheftTraining.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); my $boost = (time < $empire->spy_training_boost->epoch) ? 1.5 : 1; my $points_per = $building->effective_level * $boost; $out->{spies} = { diff --git a/lib/Lacuna/RPC/Building/ThemePark.pm b/lib/Lacuna/RPC/Building/ThemePark.pm index e5e76fc8..64f609ec 100644 --- a/lib/Lacuna/RPC/Building/ThemePark.pm +++ b/lib/Lacuna/RPC/Building/ThemePark.pm @@ -16,9 +16,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); if ($building->is_working) { $out->{themepark} = { food_type_count => $building->work->{food_type_count}, @@ -31,10 +32,11 @@ around 'view' => sub { sub operate { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->operate; - return $self->view($empire, $building); + return $self->view($session, $building); } diff --git a/lib/Lacuna/RPC/Building/Trade.pm b/lib/Lacuna/RPC/Building/Trade.pm index 2be0d34c..23d731ce 100644 --- a/lib/Lacuna/RPC/Building/Trade.pm +++ b/lib/Lacuna/RPC/Building/Trade.pm @@ -21,8 +21,9 @@ sub model_class { sub get_trade_ships { my ($self, $session_id, $building_id, $target_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $target = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body')->find($target_id) if $target_id; my @ships; my $ships = $building->trade_ships; @@ -38,8 +39,9 @@ sub get_trade_ships { sub add_supply_ship_to_fleet { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless (defined $building) { confess [1002, "Building not found."]; } @@ -72,8 +74,9 @@ sub add_supply_ship_to_fleet { sub add_waste_ship_to_fleet { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless (defined $building) { confess [1002, "Building not found."]; } @@ -106,8 +109,9 @@ sub add_waste_ship_to_fleet { sub remove_supply_ship_from_fleet { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless (defined $building) { confess [1002, "Building not found."]; } @@ -138,8 +142,9 @@ sub remove_supply_ship_from_fleet { sub remove_waste_ship_from_fleet { my ($self, $session_id, $building_id, $ship_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless (defined $building) { confess [1002, "Building not found."]; } @@ -171,8 +176,9 @@ sub remove_waste_ship_from_fleet { sub get_supply_ships { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @ships; my $ships = $building->all_supply_ships; @@ -187,8 +193,9 @@ sub get_supply_ships { sub get_waste_ships { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $body = $building->body; # get the local star my $target = Lacuna->db->resultset('Lacuna::DB::Result::Map::Star')->find($body->star_id); @@ -205,8 +212,9 @@ sub get_waste_ships { sub view_supply_chains { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building) { confess [1002, "Cannot find that building."]; } @@ -227,11 +235,9 @@ sub view_supply_chains { sub view_waste_chains { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - unless ($building) { - confess [1002, "Cannot find that building."]; - } + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; my @waste_chains; my $chains = $building->waste_chains; while (my $waste_push = $chains->next) { @@ -246,11 +252,9 @@ sub view_waste_chains { sub delete_supply_chain { my ($self, $session_id, $building_id, $supply_chain_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - unless ($building) { - confess [1002, "Cannot find that building."]; - } + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $chain = Lacuna->db->resultset('Lacuna::DB::Result::SupplyChain')->find($supply_chain_id); if ($chain) { @@ -262,15 +266,9 @@ sub delete_supply_chain { sub create_supply_chain { my ($self, $session_id, $building_id, $target_id, $resource_type, $resource_hour) = @_; - my $empire = $self->get_empire_by_session($session_id); - unless (defined $building_id) { - confess [1002, "You must specify a building."]; - } - - my $building = $self->get_building($empire, $building_id); - unless ($building) { - confess [1002, "Cannot find that building."]; - } + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $body = $building->body; my $max_chains = $building->effective_level * 3; if ($body->out_supply_chains->count >= $max_chains) { @@ -323,11 +321,9 @@ sub create_supply_chain { sub update_supply_chain { my ($self, $session_id, $building_id, $supply_chain_id, $resource_type, $resource_hour) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - unless ($building) { - confess [1002, "Cannot find that building."]; - } + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $body = $building->body; unless ($supply_chain_id) { confess [1002, "You must specify a supply chain id."]; @@ -355,11 +351,9 @@ sub update_supply_chain { sub update_waste_chain { my ($self, $session_id, $building_id, $waste_chain_id, $waste_hour) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - unless ($building) { - confess [1002, "Cannot find that building."]; - } + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $body = $building->body; unless ($waste_chain_id) { confess [1002, "You must specify a waste chain id."]; @@ -385,8 +379,9 @@ sub update_waste_chain { sub push_items { my ($self, $session_id, $building_id, $target_id, $items, $options) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a trade ministry that has not yet been built.'] unless $building->effective_level > 0; my $cache = Lacuna->cache; if (! $cache->add('trade_add_lock', $building_id, 1, 5)) { @@ -443,8 +438,9 @@ sub withdraw_from_market { if (! $cache->add('trade_lock', $trade_id, 1, 5)) { confess [1013, 'A buyer has placed an offer on this trade. Please wait a few moments and try again.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $trade = $building->market->find($trade_id); unless (defined $trade) { confess [1002, 'Could not find that trade. Perhaps it has already been accepted.']; @@ -469,8 +465,9 @@ sub accept_from_market { $cache->delete('trade_lock',$trade_id); }; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a trade ministry that has not yet been built.'] unless $building->effective_level > 0; $empire->current_session->check_captcha; @@ -521,8 +518,9 @@ sub accept_from_market { sub add_to_market { my ($self, $session_id, $building_id, $offer, $ask, $options) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a trade ministry that has not yet been built.'] unless $building->effective_level > 0; my $cache = Lacuna->cache; if (! $cache->add('trade_add_lock', $building_id, 1, 5)) { diff --git a/lib/Lacuna/RPC/Building/Transporter.pm b/lib/Lacuna/RPC/Building/Transporter.pm index c0a35e23..c833f2aa 100644 --- a/lib/Lacuna/RPC/Building/Transporter.pm +++ b/lib/Lacuna/RPC/Building/Transporter.pm @@ -18,8 +18,9 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; my $out = $orig->($self, $empire, $building); $out->{transport}{max} = $building->determine_available_cargo_space; return $out; @@ -27,8 +28,9 @@ around 'view' => sub { sub push_items { my ($self, $session_id, $building_id, $target_id, $items) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a transporter that has not yet been built.'] unless $building->effective_level > 0; my $cache = Lacuna->cache; if (! $cache->add('trade_add_lock', $building_id, 1, 5)) { @@ -67,8 +69,9 @@ sub push_items { sub add_to_market { my ($self, $session_id, $building_id, $offer, $ask) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a transporter that has not yet been built.'] unless $building->effective_level > 0; my $cache = Lacuna->cache; if (! $cache->add('trade_add_lock', $building_id, 1, 5)) { @@ -101,8 +104,9 @@ sub withdraw_from_market { if (! $cache->add('trade_lock', $trade_id, 1, 5)) { confess [1013, 'A buyer has placed an offer on this trade. Please wait a few moments and try again.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $trade = $building->market->find($trade_id); unless (defined $trade) { confess [1002, 'Could not find that trade. Perhaps it has already been accepted.']; @@ -126,8 +130,9 @@ sub accept_from_market { $cache->delete('trade_lock',$trade_id); }; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a transporter that has not yet been built.'] unless $building->effective_level > 0; $empire->current_session->check_captcha; @@ -179,8 +184,9 @@ sub accept_from_market { sub trade_one_for_one { my ($self, $session_id, $building_id, $have, $want, $quantity) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; confess [1013, 'You cannot use a transporter that has not yet been built.'] unless $building->effective_level > 0; $building->trade_one_for_one($have, $want, $quantity); return { diff --git a/lib/Lacuna/RPC/Building/WasteExchanger.pm b/lib/Lacuna/RPC/Building/WasteExchanger.pm index e3980f64..20c34583 100644 --- a/lib/Lacuna/RPC/Building/WasteExchanger.pm +++ b/lib/Lacuna/RPC/Building/WasteExchanger.pm @@ -15,9 +15,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); if ($building->is_working) { $out->{recycle} = { seconds_remaining => $building->work_seconds_remaining, @@ -37,16 +38,18 @@ around 'view' => sub { sub recycle { my ($self, $session_id, $building_id, $water, $ore, $energy, $use_essentia) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->recycle($water, $ore, $energy, $use_essentia); - return $self->view($empire, $building); + return $self->view($session, $building); } sub subsidize_recycling { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "The Waste Exchanger isn't recycling anything."]; @@ -63,7 +66,7 @@ sub subsidize_recycling { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw(recycle subsidize_recycling)); diff --git a/lib/Lacuna/RPC/Building/WasteRecycling.pm b/lib/Lacuna/RPC/Building/WasteRecycling.pm index 95ec3618..3d78f36d 100644 --- a/lib/Lacuna/RPC/Building/WasteRecycling.pm +++ b/lib/Lacuna/RPC/Building/WasteRecycling.pm @@ -15,9 +15,10 @@ sub model_class { around 'view' => sub { my ($orig, $self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id, skip_offline => 1); - my $out = $orig->($self, $empire, $building); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id, skip_offline => 1 }); + my $empire = $session->current_empire; + my $building = $session->current_building; + my $out = $orig->($self, $session, $building); if ($building->is_working) { $out->{recycle} = { seconds_remaining => $building->work_seconds_remaining, @@ -37,23 +38,25 @@ around 'view' => sub { sub recycle { my ($self, $session_id, $building_id, $water, $ore, $energy, $use_essentia) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; $building->recycle($water, $ore, $energy, $use_essentia); - return $self->view($empire, $building); + return $self->view($session, $building); } sub subsidize_recycling { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building->is_working) { confess [1010, "The Recycling Center isn't recycling anything."]; } unless ($empire->essentia >= 2) { - confess [1011, "Not enough essentia."]; + confess [1011, "Not enough essentia."]; } $building->finish_work->update; @@ -63,7 +66,7 @@ sub subsidize_recycling { }); $empire->update; - return $self->view($empire, $building); + return $self->view($session, $building); } __PACKAGE__->register_rpc_method_names(qw(recycle subsidize_recycling)); diff --git a/lib/Lacuna/RPC/Building/WaterStorage.pm b/lib/Lacuna/RPC/Building/WaterStorage.pm index 838b7f3e..18f53a0c 100644 --- a/lib/Lacuna/RPC/Building/WaterStorage.pm +++ b/lib/Lacuna/RPC/Building/WaterStorage.pm @@ -18,9 +18,9 @@ sub dump { if ($amount <= 0) { confess [1009, 'You must specify an amount greater than 0.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); - my $body = $building->body; + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $body = $session->current_body; $body->spend_type('water', $amount); $body->add_type('waste', $amount); $body->update; diff --git a/lib/Lacuna/RPC/Captcha.pm b/lib/Lacuna/RPC/Captcha.pm index 2f8eb57b..73477428 100644 --- a/lib/Lacuna/RPC/Captcha.pm +++ b/lib/Lacuna/RPC/Captcha.pm @@ -21,8 +21,8 @@ sub fetch { sub solve { my ($self, $session_id, $guid, $solution) = @_; - my $session = $self->get_session($session_id); - my $empire = $self->get_empire_by_session($session); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $cache = Lacuna->cache; if (defined $guid && defined $solution) { # offered a solution my $captcha = Lacuna->cache->get_and_deserialize('captcha', $session_id); diff --git a/lib/Lacuna/RPC/Chat.pm b/lib/Lacuna/RPC/Chat.pm index fd932df5..0da41d2a 100644 --- a/lib/Lacuna/RPC/Chat.pm +++ b/lib/Lacuna/RPC/Chat.pm @@ -12,7 +12,8 @@ use Ouch; sub init_chat { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $config = Lacuna->config; my $firebase_config = $config->get('firebase'); diff --git a/lib/Lacuna/RPC/Empire.pm b/lib/Lacuna/RPC/Empire.pm index 834cd9d4..9cddbc64 100644 --- a/lib/Lacuna/RPC/Empire.pm +++ b/lib/Lacuna/RPC/Empire.pm @@ -18,7 +18,8 @@ sub find { unless (length($name) >= 3) { confess [1009, 'Empire name too short. Your search must be at least 3 characters.']; } - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $empires = Lacuna->db->resultset('Empire')->search({name => {'like' => $name.'%'}}, {rows=>100}); my @list_of_empires; my $limit = 100; @@ -221,7 +222,8 @@ sub change_password { ->length_gt(5) ->eq($password2); - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; if ($empire->has_current_session && $empire->current_session->is_sitter) { confess [1015, 'Sitters cannot modify the main account password.']; } @@ -405,12 +407,15 @@ sub found { sub get_status { my ($self, $session_id) = @_; - return $self->format_status($self->get_empire_by_session($session_id)); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; + return $self->format_status($empire); } sub view_profile { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; if ($empire->has_current_session && $empire->current_session->is_sitter) { confess [1015, 'Sitters cannot modify preferences.']; } @@ -460,7 +465,8 @@ sub view_profile { sub edit_profile { my ($self, $session_id, $profile) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; # preferences if ($empire->has_current_session && $empire->current_session->is_sitter) { @@ -667,7 +673,8 @@ sub set_status_message { ->not_empty ->no_restricted_chars ->no_profanity; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; $empire->status_message($message); $empire->update; return $self->format_status($empire); @@ -675,7 +682,8 @@ sub set_status_message { sub view_public_profile { my ($self, $session_id, $empire_id) = @_; - my $viewer_empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $viewer_empire = $session->current_empire; my $viewed_empire = Lacuna->db->resultset('Empire')->find($empire_id); unless (defined $viewed_empire) { confess [1002, 'The empire you wish to view does not exist.', $empire_id]; @@ -776,7 +784,8 @@ sub boost_spy_training { sub boost { my ($self, $session_id, $type, $weeks) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; $weeks //= 1; confess [1001, "Weeks must be a positive integer"] @@ -803,7 +812,8 @@ sub boost { sub view_boosts { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; return { status => $self->format_status($empire), boosts => { @@ -821,7 +831,8 @@ sub view_boosts { sub enable_self_destruct { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot enable or disable self destruct.']; } @@ -831,7 +842,8 @@ sub enable_self_destruct { sub disable_self_destruct { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; if ($empire->current_session->is_sitter) { confess [1015, 'Sitters cannot enable or disable self destruct.']; } @@ -841,14 +853,16 @@ sub disable_self_destruct { sub redeem_essentia_code { my ($self, $session_id, $code) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $amount = $empire->redeem_essentia_code($code); return { amount => $amount, status => $self->format_status($empire) }; } sub get_invite_friend_url { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; return { referral_url => $empire->get_invite_friend_url, status => $self->format_status($empire), @@ -857,7 +871,8 @@ sub get_invite_friend_url { sub invite_friend { my ($self, $session_id, $addresses, $custom_message) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; unless ($empire->email) { confess [1010, 'You cannot invite friends because you have not set up your email address in your profile.']; } @@ -932,7 +947,8 @@ sub vet_species { sub redefine_species_limits { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; my $out = $empire->determine_species_limits($empire); $out->{status} = $self->format_status($empire); return $out; @@ -940,7 +956,8 @@ sub redefine_species_limits { sub redefine_species { my ($self, $session_id, $me) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; unless ($empire->essentia >= 100) { confess [1011, 'You need at least 100 essentia to redefine your species.']; @@ -1000,7 +1017,8 @@ sub update_species { sub view_species_stats { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id}); + my $empire = $session->current_empire; return { species => $empire->get_species_stats, status => $self->format_status($empire), diff --git a/lib/Lacuna/RPC/Firebase.pm b/lib/Lacuna/RPC/Firebase.pm index 90d35dbd..d2a19ccc 100644 --- a/lib/Lacuna/RPC/Firebase.pm +++ b/lib/Lacuna/RPC/Firebase.pm @@ -9,7 +9,8 @@ use WWW::Firebase::TokenGenerator; sub get_token { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $firebase_secret = Lacuna->config->get('firebase/secret'); unless ($firebase_secret) { return { token => '', status => $self->format_status($empire)}; diff --git a/lib/Lacuna/RPC/Inbox.pm b/lib/Lacuna/RPC/Inbox.pm index bb37fd71..b9a38ffd 100644 --- a/lib/Lacuna/RPC/Inbox.pm +++ b/lib/Lacuna/RPC/Inbox.pm @@ -12,11 +12,12 @@ use List::Util qw(none); sub read_message { my ($self, $session_id, $message_id) = @_; + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $message = Lacuna->db->resultset('Lacuna::DB::Result::Message')->find($message_id); unless (defined $message) { confess [1002, 'Message does not exist.', $message_id]; } - my $empire = $self->get_empire_by_session($session_id); unless ($empire->id ~~ [$message->from_id, $message->to_id]) { confess [1010, "You can't read a message that isn't yours.", $message_id]; } @@ -48,7 +49,8 @@ sub read_message { sub archive_messages { my ($self, $session_id, $message_ids) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $messages = Lacuna->db->resultset('Lacuna::DB::Result::Message') ->search( { @@ -74,7 +76,8 @@ sub archive_messages { sub trash_messages { my ($self, $session_id, $message_ids) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $messages = Lacuna->db->resultset('Lacuna::DB::Result::Message') ->search( { @@ -100,7 +103,8 @@ sub trash_messages { sub trash_messages_where { my ($self, $session_id, $opts) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; if (!$opts->{spec}) { $opts = { spec => [ @_[2..$#_] ] }; @@ -206,7 +210,8 @@ sub send_message { Lacuna::Verify->new(content=>\$subject, throws=>[1005,'Message subject must be less than 100 characters.',$subject])->length_lt(100); Lacuna::Verify->new(content=>\$body, throws=>[1005,'Message body cannot be empty.',$body])->not_empty; Lacuna::Verify->new(content=>\$body, throws=>[1005,'Message body cannot contain HTML tags or entities.',$body])->no_tags; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; if ($options->{in_reply_to}) { my $reply_to = Lacuna->db->resultset('Lacuna::DB::Result::Message')->find($options->{in_reply_to}); unless ($empire->id ~~ [$reply_to->to_id, $reply_to->from_id]) { @@ -287,7 +292,8 @@ sub send_message { sub view_inbox { my $self = shift; my $session_id = shift; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $where = { has_archived => 0, has_trashed => 0, @@ -299,7 +305,8 @@ sub view_inbox { sub view_archived { my $self = shift; my $session_id = shift; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $where = { has_archived => 1, has_trashed => 0, @@ -311,7 +318,8 @@ sub view_archived { sub view_trashed { my $self = shift; my $session_id = shift; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $where = { has_archived => 0, has_trashed => 1, @@ -323,7 +331,8 @@ sub view_trashed { sub view_sent { my $self = shift; my $session_id = shift; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $where = { from_id => $empire->id, to_id => {'!=' => $empire->id}, @@ -334,7 +343,8 @@ sub view_sent { sub view_unread { my $self = shift; my $session_id = shift; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $where = { has_archived => 0, has_read => 0, diff --git a/lib/Lacuna/RPC/Map.pm b/lib/Lacuna/RPC/Map.pm index 9c48caae..ad3eb93b 100644 --- a/lib/Lacuna/RPC/Map.pm +++ b/lib/Lacuna/RPC/Map.pm @@ -10,7 +10,8 @@ use List::Util qw(max min); sub check_star_for_incoming_probe { my ($self, $session_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $date = 0; my @bodies = $empire->planets->get_column('id')->all; my $incoming = Lacuna->db->resultset('Ships')->search({foreign_star_id=>$star_id, task=>'Travelling', type=>'probe', body_id => {in => \@bodies }})->first; @@ -52,7 +53,8 @@ sub get_star_map { if ((abs($args->{top} - $args->{bottom}) * abs($args->{right} - $args->{left})) > 3001) { confess [1003, 'Requested area larger than 3001.']; } - my $empire = $self->get_empire_by_session($args->{session_id}); + my $session = $self->get_session({session_id => $args->{session_id}}); + my $empire = $session->current_empire; my $alliance_id = $empire->alliance_id || 0; my $out = Lacuna->db->resultset('Map::StarLite')->get_star_map( $alliance_id, $empire->id, $args->{left}, $args->{right}, $args->{bottom}, $args->{top} ); @@ -69,7 +71,8 @@ sub get_stars { if ((abs($endx - $startx) * abs($endy - $starty)) > 900) { confess [1003, 'Requested area too large.']; } - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $stars = Lacuna->db->resultset('Map::Star')->search({y=> {between => [$starty, $endy]}, x=>{between => [$startx, $endx]}}); my @out; while (my $star = $stars->next) { @@ -80,7 +83,8 @@ sub get_stars { sub get_star { my ($self, $session_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $star = Lacuna->db->resultset('Map::Star')->find($star_id); unless (defined $star) { confess [1002, "Couldn't find a star."]; @@ -90,7 +94,8 @@ sub get_star { sub get_star_by_name { my ($self, $session_id, $star_name) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $star = Lacuna->db->resultset('Map::Star')->search({name => $star_name})->first; unless (defined $star) { confess [1002, "Couldn't find a star."]; @@ -100,7 +105,8 @@ sub get_star_by_name { sub get_star_by_xy { my ($self, $session_id, $x, $y) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $star = Lacuna->db->resultset('Map::Star')->search({x=>$x, y=>$y})->first; unless (defined $star) { confess [1002, "Couldn't find a star."]; @@ -113,7 +119,8 @@ sub search_stars { if (length($name) < 3) { confess [1009, "Your search term must be at least 3 characters."]; } - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my @out; my $stars = Lacuna->db->resultset('Map::Star')->search({name => { like => $name.'%' }},{rows => 25}); while (my $star = $stars->next) { @@ -125,7 +132,8 @@ sub search_stars { sub probe_summary_fissures { my ($self, $args) = @_; - my $empire = $self->get_empire_by_session($args->{session_id}); + my $session = $self->get_session({session_id => $args->{session_id} }); + my $empire = $session->current_empire; my $zone = $args->{zone}; my $fissure_rs = Lacuna->db->resultset('Building')->search({ 'me.class' => 'Lacuna::DB::Result::Building::Permanent::Fissure', @@ -159,7 +167,8 @@ sub probe_summary_fissures { sub view_laws { my ($self, $session_id, $star_id) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; my $star = Lacuna->db->resultset('Map::Star')->find($star_id); if ($star and $star->station_id) { my $station = Lacuna->db->resultset('Lacuna::DB::Result::Map::Body') diff --git a/lib/Lacuna/RPC/Stats.pm b/lib/Lacuna/RPC/Stats.pm index e5a73374..c6831632 100644 --- a/lib/Lacuna/RPC/Stats.pm +++ b/lib/Lacuna/RPC/Stats.pm @@ -23,7 +23,8 @@ sub credits { sub alliance_rank { my ($self, $session_id, $by, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; unless ($by ~~ [qw(influence population average_empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)]) { $by = 'influence desc,population desc'; } @@ -80,7 +81,8 @@ sub find_alliance_rank { unless ($by ~~ [qw(average_empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)]) { $by = 'average_empire_size_rank'; } - my $empire = $self->get_empire_by_session($session_id); + 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; @@ -103,7 +105,8 @@ sub find_alliance_rank { sub empire_rank { my ($self, $session_id, $by, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; unless ($by ~~ [qw(empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)]) { $by = 'empire_size_rank'; } @@ -154,7 +157,8 @@ sub find_empire_rank { unless ($by ~~ [qw(empire_size_rank offense_success_rate_rank defense_success_rate_rank dirtiest_rank)]) { $by = 'empire_size_rank'; } - my $empire = $self->get_empire_by_session($session_id); + 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; @@ -177,7 +181,8 @@ sub find_empire_rank { sub colony_rank { my ($self, $session_id, $by) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; unless ($by ~~ [qw(population_rank)]) { $by = 'population_rank'; } @@ -203,7 +208,8 @@ sub colony_rank { sub spy_rank { my ($self, $session_id, $by) = @_; - my $empire = $self->get_empire_by_session($session_id); + my $session = $self->get_session({session_id => $session_id }); + my $empire = $session->current_empire; unless ($by ~~ [qw(level_rank success_rate_rank dirtiest_rank)]) { $by = 'level_rank'; } @@ -232,7 +238,8 @@ sub spy_rank { sub weekly_medal_winners { my ($self, $session_id) = @_; - my $empire = $self->get_empire_by_session($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) { diff --git a/lib/Lacuna/Role/IncomingSupplyChains.pm b/lib/Lacuna/Role/IncomingSupplyChains.pm index c32fe55a..0169bfe5 100644 --- a/lib/Lacuna/Role/IncomingSupplyChains.pm +++ b/lib/Lacuna/Role/IncomingSupplyChains.pm @@ -5,8 +5,9 @@ use Moose::Role; sub view_incoming_supply_chains { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + my $session = $self->get_session({session_id => $session_id, building_id => $building_id }); + my $empire = $session->current_empire; + my $building = $session->current_building; unless ($building) { confess [1002, "Cannot find that building."]; } diff --git a/lib/Lacuna/Role/TraderRpc.pm b/lib/Lacuna/Role/TraderRpc.pm index 2451be95..110c1a96 100644 --- a/lib/Lacuna/Role/TraderRpc.pm +++ b/lib/Lacuna/Role/TraderRpc.pm @@ -7,8 +7,9 @@ use Lacuna::Util qw(randint); sub view_my_market { my ($self, $session_id, $building_id, $page_number) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 $my_trades = $building->my_market->search(undef, { rows => 25, page => $page_number }); my @trades; @@ -32,8 +33,9 @@ sub view_my_market { sub view_market { my ($self, $session_id, $building_id, $page_number, $filter) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_id); + 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 $all_trades = $building->available_market->search( undef,{ @@ -84,8 +86,9 @@ sub view_market { sub get_ships { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ships = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->search( {body_id => $building->body_id, task => 'docked'}, {order_by => [ 'type', 'hold_size', 'speed']} @@ -111,8 +114,9 @@ sub get_ships { sub get_ship_summary { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $ships = Lacuna->db->resultset('Lacuna::DB::Result::Ships')->search( {body_id => $building->body_id, task => 'docked'}, {order_by => [ 'type', 'hold_size', 'speed']} @@ -150,8 +154,9 @@ sub get_ship_summary { sub get_prisoners { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $dt_parser = Lacuna->db->storage->datetime_parser; my $now = $dt_parser->format_datetime( DateTime->now ); @@ -178,8 +183,9 @@ sub get_prisoners { sub get_plan_summary { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @out; my $sorted_plans = $building->body->sorted_plans; @@ -205,8 +211,9 @@ sub get_plan_summary { sub get_glyph_summary { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @glyphs = sort {$a->type cmp $b->type} $building->body->glyph->all; my @out; @@ -229,8 +236,9 @@ sub get_glyph_summary { sub get_stored_resources { my ($self, $session_id, $building_id) = @_; - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 @types = (FOOD_TYPES, ORE_TYPES, qw(water waste energy)); my %out; my $body = $building->body; @@ -252,8 +260,9 @@ sub report_abuse { unless ($trade_id) { confess [1002, 'You have not specified a trade to withdraw.']; } - my $empire = $self->get_empire_by_session($session_id); - my $building = $self->get_building($empire, $building_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 $cache = Lacuna->cache; if ($cache->get('trade_lock', $trade_id)) { confess [1013, 'A buyer has placed an offer on this trade. Please wait a few moments and try again.']; diff --git a/lib/Lacuna/Session.pm b/lib/Lacuna/Session.pm index 0fe625ea..886c1351 100644 --- a/lib/Lacuna/Session.pm +++ b/lib/Lacuna/Session.pm @@ -20,7 +20,7 @@ sub BUILD { $self->api_key($session_data->{api_key}); $self->empire_id($session_data->{empire_id}); $self->extended($session_data->{extended}); - $self->is_sitter($session_data->{is_sitter}); + $self->_is_sitter($session_data->{is_sitter}); $self->is_from_admin($session_data->{is_from_admin}); $self->ip_address($session_data->{ip_address}); } @@ -35,11 +35,17 @@ has api_key => ( is => 'rw', ); -has is_sitter => ( +has _is_sitter => ( is => 'rw', default => 0, ); +sub is_sitter { + my ($self) = @_; + $self->_is_sitter or + $self->current_empire && $self->empire_id != $self->current_empire->id; +} + has is_from_admin => ( is => 'rw', default => 0, @@ -66,7 +72,7 @@ has empire => ( default => sub { my $self = shift; return undef unless $self->has_empire_id; - my $empire = Lacuna->db->resultset('Lacuna::DB::Result::Empire')->find($self->empire_id); + my $empire = Lacuna->db->resultset('Empire')->find($self->empire_id); if (defined $empire) { $empire->current_session($self); } @@ -74,6 +80,30 @@ has empire => ( }, ); +# if we are targeting a specific building, +# track it here. +has current_building => ( + is => 'rw', + predicate => 'has_building', + clearer => 'clear_building', + isa => 'Maybe[Lacuna::DB::Result::Building]', +); + +has current_body => ( + is => 'rw', + predicate => 'has_body', + clearer => 'clear_body', + isa => 'Maybe[Lacuna::DB::Result::Map::Body]', +); + +has current_empire => ( + is => 'rw', + isa => 'Maybe[Lacuna::DB::Result::Empire]', + default => sub { shift->empire }, +); + + + sub check_captcha { my $self = shift; my $valid = Lacuna->cache->get('captcha_valid', $self->id); @@ -92,7 +122,7 @@ sub update { empire_id => $self->empire_id, api_key => $self->api_key, extended => $self->extended, - is_sitter => $self->is_sitter, + is_sitter => $self->_is_sitter, is_from_admin => $self->is_from_admin, ip_address => $self->ip_address, }, diff --git a/var/www/public/changes.txt b/var/www/public/changes.txt index b7f574fd..fe0ec2ca 100644 --- a/var/www/public/changes.txt +++ b/var/www/public/changes.txt @@ -2,6 +2,7 @@ - Mod: Jackpot enhanced. - Fix: If parliament missing, better error handling. - Fix: Make sure scows display empty cargo on return. + - Mod: Reduce some red tape. 3.0915: - Fix: Reduce the wild resource fluctuations during planet ticking. -- 2.51.2