# #=============================================================================== # # DESCRIPTION: Scows.pm sends any available scows to a body's nearest star # if waste level exceeeds the colony's 'send_scows_above' # configuration for waste. # #=============================================================================== package Games::Lacuna::Client::Governor::Scows; { $Games::Lacuna::Client::Governor::Scows::VERSION = '0.003'; } use strict; use warnings qw(FATAL all); use Carp; use English qw(-no_match_vars); use Data::Dumper; { use Storable qw(lock_nstore lock_retrieve); use Date::Parse qw(str2time); use List::MoreUtils qw(minmax uniq any); use Games::Lacuna::Client::PrettyPrint qw(trace message warning action ptime phours); my $PROBES_PER_PAGE = 25; my $SHIPS_PER_PAGE = 25; my $PROBES_PER_LVL = 3; sub run { my $class = shift; my $gov = shift; my ($pid,$config,$status) = @{$gov->{current}}{qw(planet_id config status)}; my $ssa = $config->{profile}->{waste}->{send_scows_above}; return if (not defined $ssa or $status->{waste_capacity} == 0 or ($status->{waste_stored}/$status->{waste_capacity}) < $ssa); ### Find Spaceports. my ($sp) = $gov->find_buildings('SpacePort'); my @ships; my @probe_to_port; my $page = 0; while( $page <= 4 ){ $page++; my $data = $sp->view_all_ships($page); push @ships, grep { $_->{task} eq 'Docked' and $_->{type} eq 'scow' } @{$data->{ships}}; last if $page * $SHIPS_PER_PAGE >= $data->{number_of_ships}; } my $target = { star_id => $status->{star_id}, }; while(@ships && ($status->{waste_stored}/$status->{waste_capacity}) >= $ssa) { my $ship = pop @ships; $sp->send_ship($ship->{id},$target); $status->{waste_stored} -= $ship->{hold_size}; action('Sending scow from '.$status->{name}.' to star carrying '.$ship->{hold_size}.' waste.'); } return; } } 1; __END__ =pod =head1 NAME Games::Lacuna::Client::Governor::Astronomer - A rudimentary plugin for Governor that will automate the targetting of probes. =head1 SYNOPSIS Add 'astronomer' to the Governor configuration priorities list. =head1 DESCRIPTION This module examines each colony and the scows currently available. This module looks for the profile->waste->send_scows_above configuration key in the governor config for each colony. This number is a decimal between 0 and 1, representing a proportion. If the proportion of waste to capacity is over this amount, scows are sent to the nearest star. =head1 SEE ALSO L, by Steffen Mueller on which this module is dependent. L, by Adam Bellaire of which this module is a plugin. Of course also, the Lacuna Expanse API docs themselves at L. =head1 AUTHOR Adam Bellaire, Ebellaire@ufl.eduE =head1 COPYRIGHT AND LICENSE Copyright (C) 2010 by Steffen Mueller This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available. =cut