]> ruin.nu Git - ndwebbie.git/blobdiff - ND/Include.pm
fatal warnings and possible to comment targets again
[ndwebbie.git] / ND / Include.pm
index a01a37f6909fbeb0e3e766fce3b65c27655661fd..796ed68dbd10acabcc81244d97d295d335044e20 100644 (file)
@@ -25,7 +25,7 @@ require Exporter;
 our @ISA = qw/Exporter/;
 
 our @EXPORT = qw/isMember isHC isDC isBC isOfficer isScanner isIntel parseMarkup min max listTargets
-       alliances intelquery/;
+       alliances intelquery generateClaimXml/;
 
 sub isMember {
        return exists $ND::GROUPS{Members};
@@ -99,6 +99,7 @@ ORDER BY r.tick+c.wave,x,y,z});
 sub alliances {
        my ($alliance) = @_;
        my @alliances;
+       $alliance = -1 unless defined $alliance;
        push @alliances,{Id => -1, Name => ' ', Selected => not $alliance};
        my $query = $ND::DBH->prepare(q{SELECT id,name FROM alliances ORDER BY name});
        $query->execute;        
@@ -120,4 +121,73 @@ GROUP BY i.tick,i.mission,t.x,t.y,t.z,o.x,o.y,o.z,i.amount,i.ingal,u.username,t.
 ORDER BY i.tick DESC, i.mission};
 }
 
+
+sub generateClaimXml {
+       my ($raid, $from, $target) = @_;
+
+       my ($timestamp) = $ND::DBH->selectrow_array("SELECT MAX(modified)::timestamp AS modified FROM raid_targets");
+       $ND::BODY->param(Timestamp => $timestamp);
+       if ($target){
+               $target = "r.id = $target";
+               $_ = listTargets();
+               $ND::BODY->param(TargetList => $_);
+       }else{
+               $target = "r.raid = $raid->{id}";
+       }
+
+       if ($from){
+               $from = "AND modified > '$from'";
+       }else{
+               $from = '';
+       }
+       my $targets = $ND::DBH->prepare(qq{SELECT r.id,r.planet FROM raid_targets r WHERE $target $from});
+       $targets->execute or print p($ND::DBH->errstr);
+       my $claims =  $ND::DBH->prepare(qq{ SELECT username,joinable,launched FROM raid_claims
+               NATURAL JOIN users WHERE target = ? AND wave = ?});
+       my @targets;
+       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;
+                       $wave{Id} = $i;
+                       $claims->execute($target->{id},$i);
+                       my $joinable = 0;
+                       my $claimers;
+                       if ($claims->rows != 0){
+                               my $owner = 0;
+                               my @claimers;
+                               while (my $claim = $claims->fetchrow_hashref){
+                                       $owner = 1 if ($ND::USER eq $claim->{username});
+                                       $joinable = 1 if ($claim->{joinable});
+                                       $claim->{username} .= '*' if ($claim->{launched});
+                                       push @claimers,$claim->{username};
+                               }
+                               $claimers = join '/', @claimers;
+                               if ($owner){
+                                       $wave{Command} = 'Unclaim';
+                                       if ($raid->{released_coords}){
+                                               $target{Coords} = $ND::DBH->selectrow_array('SELECT coords(x,y,z) FROM current_planet_stats WHERE id = ?',undef,$target->{planet});
+                                       }
+                               }elsif ($joinable){
+                                       $wave{Command} = 'Join';
+                               }else{
+                                       $wave{Command} = 'none';
+                               }
+                       }else{
+                               #if (!isset($planet) || ($target->value/$planet->value > 0.4 || $target->score/$planet->score > 0.4))
+                               $wave{Command} = 'Claim';
+                       }
+                       $wave{Claimers} = $claimers;
+                       $wave{Joinable} = $joinable;
+                       push @waves,\%wave;
+               }
+               $target{Waves} = \@waves;
+               push @targets,\%target;
+       }
+       $ND::BODY->param(Targets => \@targets);
+}
+
 1;