package ND::Web::Pages::Raids;
use strict;
-use warnings FATAL => 'all';
+use warnings;
use ND::Include;
use POSIX;
use CGI qw/:standard/;
use ND::Web::Include;
-our @ISA = qw/ND::Web::XMLPage/;
+use base qw/ND::Web::XMLPage/;
$ND::Web::Page::PAGES{raids} = __PACKAGE__;
while (my $target = $targets->fetchrow_hashref){
my %target;
$target{Id} = $target->{id};
- $target{Coords} = $target->{id};
my @waves;
for (my $i = 1; $i <= $raid->{waves}; $i++){
my %wave;
$claimers = join '/', @claimers;
if ($owner){
$wave{Command} = 'Unclaim';
- if ($raid->{released_coords}){
- $target{Coords} = $DBH->selectrow_array('SELECT coords(x,y,z) FROM current_planet_stats WHERE id = ?',undef,$target->{planet});
- }
}elsif ($joinable){
$wave{Command} = 'Join';
}else{
return $self->generateClaimXml($BODY,$raid,$from);
}
if ($self->{XML} && param('cmd') eq 'gettargets' ){
- $_ = listTargets();
+ $_ = $self->listTargets();
$BODY->param(TargetList => $_);
}
$noingal = "AND NOT (x = $planet->{x} AND y = $planet->{y})";
}
$BODY->param(Message => parseMarkup($raid->{message}));
- $BODY->param(LandingTick => parseMarkup($raid->{tick}));
- my $targetquery = $DBH->prepare(qq{SELECT r.id, r.planet, size, score, value, coords(p.x,p.y,p.z), race, p.value - p.size*200 -coalesce(c.metal+c.crystal+c.eonium,0)/150 - coalesce(c.structures,(SELECT avg(structures) FROM covop_targets)::int)*1500 AS fleetvalue,(c.metal+c.crystal+c.eonium)/100 AS resvalue, comment
+ $BODY->param(LandingTick => $raid->{tick});
+ my $targetquery = $DBH->prepare(qq{SELECT r.id, r.planet, size, score, value, p.x,p.y,p.z, race, p.value - p.size*200 -coalesce(c.metal+c.crystal+c.eonium,0)/150 - coalesce(c.structures,(SELECT avg(structures) FROM covop_targets)::int)*1500 AS fleetvalue,(c.metal+c.crystal+c.eonium)/100 AS resvalue, comment
FROM current_planet_stats p
JOIN raid_targets r ON p.id = r.planet
LEFT OUTER JOIN covop_targets c ON p.id = c.planet
$target{comment} = parseMarkup($target->{comment}) if ($target->{comment});
my $scans = $DBH->prepare(q{SELECT DISTINCT ON (type) type, tick, scan FROM scans
- WHERE planet = ? AND type ~ 'Unit|Planet|Military|.* Analysis' AND tick + 24 > tick()
+ WHERE planet = ? AND type ~ 'Unit|Planet|Advanced Unit|.* Analysis' AND tick + 24 > tick() AND scan is not null
GROUP BY type, tick, scan ORDER BY type ,tick DESC});
$scans->execute($target->{planet});
my %scans;
}
my @scans;
- for my $type ('Planet','Unit','Military','Surface Analysis','Technology Analysis'){
+ for my $type ('Planet','Unit','Advanced Unit','Surface Analysis','Technology Analysis'){
next unless exists $scans{$type};
my $scan = $scans{$type};
if ($self->{TICK} - $scan->{tick} > 5){
- $scan->{scan} =~ s{<table( cellpadding="\d+")?>}{<table$1 class="old">};
+ $scan->{scan} =~ s{<table( cellpadding="\d+")?>}{<table class="old">};
}
if ($type eq 'Planet'){
$target{PlanetScan} = $scan->{scan};
}
$target{Scans} = \@scans;
+ if ($planet){
+ if ($planet->{x} == $target->{x}){
+ $target{style} = 'incluster';
+ }
+ $target{ScoreBash} = 'bash' if ($target->{score}/$planet->{score} < 0.4);
+ $target{ValueBash} = 'bash' if ($target->{value}/$planet->{value} < 0.4);
+ }
+
my @roids;
my @claims;
my $size = $target{Size};
for (my $i = 1; $i <= $raid->{waves}; $i++){
my $roids = floor(0.25*$size);
$size -= $roids;
- my $xp;
+ my $xp = 0;
if ($planet){
- $xp = max(0,floor($roids * 10 * (min(2,$target{Score}/$planet->{score}) + min(2,$target{Value}/$planet->{value})-1)));
+ $xp = pa_xp($roids,$planet->{score},$planet->{value},$target{Score},$target{Value});
}
push @roids,{Wave => $i, Roids => $roids, XP => $xp};
if ($self->{AJAX}){
push @targets,\%target;
}
+ @targets = sort {$b->{Roids}[0]{XP} <=> $a->{Roids}[0]{XP} or $b->{Size} <=> $a->{Size}} @targets;
+
$BODY->param(Targets => \@targets);
}else{#list raids if we haven't chosen one yet
my $query = $DBH->prepare(q{SELECT id,released_coords FROM raids WHERE open AND not removed AND