]> ruin.nu Git - ndwebbie.git/blobdiff - lib/NDWeb/Controller/CovOp.pm
Tweaked covop sorting and output
[ndwebbie.git] / lib / NDWeb / Controller / CovOp.pm
index 516e45d23a918ec033ae29f28c99609abb24ac14..b4e71fe67319f0b98eb9e65b9788c81bf16a5a5b 100644 (file)
@@ -23,58 +23,76 @@ Catalyst Controller.
 
 sub index :Path :Args(0) {
        my ( $self, $c ) = @_;
-       $c->stash( where => q{AND MaxResHack > 130000
-               ORDER BY minalert ASC,MaxResHack DESC});
+       $c->stash( where => q{hack5 > 60000 AND minalert < 60
+               ORDER BY hack5 DESC, hack13 DESC
+                       ,(CASE WHEN tick() - lastcovop < 6 THEN lastcovop ELSE NULL END) NULLS FIRST
+                       ,minalert, pstick DESC, dstick DESC,x,y,z
+               });
+       $c->forward('list');
+}
+
+sub easy : Local {
+       my ( $self, $c ) = @_;
+       $c->stash( where =>  q{minalert < 60
+               ORDER BY minalert, hack5 DESC,lastcovop NULLS FIRST
+                       ,hack13 DESC,pstick DESC, dstick DESC,x,y,z
+               });
        $c->forward('list');
 }
 
 sub distwhores : Local {
        my ( $self, $c ) = @_;
-       $c->stash( where =>  qq{AND distorters > 0
-               ORDER BY distorters DESC, minalert ASC});
+       $c->stash( where =>  q{distorters > 0
+               ORDER BY distorters DESC, minalert
+                       ,lastcovop NULLS FIRST,pstick DESC, dstick DESC,x,y,z
+               });
        $c->forward('list');
 }
 
 sub marktarget : Local {
        my ( $self, $c, $target ) = @_;
        my $dbh = $c->model;
-
        my $update = $dbh->prepare(q{INSERT INTO covop_attacks (uid,id,tick) VALUES(?,?,tick())});
-       $update->execute($c->user->id,$target);
-
-       $c->res->redirect($c->req->referer);
+       eval{
+               $update->execute($c->user->id,$target);
+       };
+       $c->forward('/redirect');
 }
 
 sub list : Private {
        my ( $self, $c ) = @_;
        my $dbh = $c->model;
 
-       my $query = $dbh->prepare(q{SELECT id, coords, metal, crystal, eonium
-               , covop_alert(seccents,structures,gov,0) AS minalert
-               , covop_alert(seccents,structures,gov,50) AS maxalert
-               , distorters,gov
-               , MaxResHack,co.tick AS lastcovop
-               FROM (SELECT p.id,coords(x,y,z), metal,crystal,eonium,
-                       seccents,NULLIF(ss.total::integer,0) AS structures,distorters
-                       ,max_bank_hack(metal,crystal,eonium,p.value
-                               ,(SELECT value FROM current_planet_stats WHERE id = ?)) AS MaxResHack
-                       , planet_status, relationship,gov
+       my $query = $dbh->prepare(q{
+       SELECT * FROM (
+               SELECT *
+                       ,(2*pvalue::float/cvalue) :: Numeric(3,1) AS max_bank_hack
+                       ,max_bank_hack(metal,crystal,eonium,pvalue,cvalue,5) AS hack5
+                       ,max_bank_hack(metal,crystal,eonium,pvalue,cvalue,13) AS hack13
+               FROM (SELECT p.id,coords(x,y,z),x,y,z,size
+                       ,metal + metal_roids * (tick()-ps.tick) * 125 AS metal
+                       ,crystal + crystal_roids * (tick()-ps.tick) * 125 AS crystal
+                       ,eonium + eonium_roids * (tick()-ps.tick) * 125 AS eonium
+                       ,distorters,guards
+                       ,covop_alert(seccents,ds.total,size,guards,gov,0) AS minalert
+                       ,covop_alert(seccents,ds.total,size,guards,gov,50) AS maxalert
+                       , planet_status, relationship,gov,ps.tick AS pstick, ds.tick AS dstick
+                       , p.value AS pvalue, c.value AS cvalue
                        FROM current_planet_stats p
-                               LEFT OUTER JOIN planet_scans ps ON p.id = ps.planet
-                               LEFT OUTER JOIN structure_scans ss ON p.id = ss.planet
+                               LEFT OUTER JOIN current_planet_scans ps ON p.id = ps.planet
+                               LEFT OUTER JOIN current_development_scans ds ON p.id = ds.planet
+                               CROSS JOIN (SELECT value FROM current_planet_stats WHERE id = $1) c
                        ) AS foo
-                       LEFT OUTER JOIN (SELECT id,max(tick) AS tick FROM covop_attacks GROUP BY id) co USING (id)
-               WHERE (metal IS NOT NULL OR seccents IS NOT NULL)
+                       LEFT OUTER JOIN (SELECT id,max(tick) AS lastcovop FROM covop_attacks
+                               GROUP BY id) co USING (id)
+               WHERE (metal IS NOT NULL OR distorters IS NOT NULL)
                        AND (NOT planet_status IN ('Friendly','NAP'))
                        AND  (relationship IS NULL OR NOT relationship IN ('Friendly','NAP'))
-               } . $c->stash->{where});
+       ) a
+       WHERE } . $c->stash->{where});
        $query->execute($c->user->planet);
 
-       my @targets;
-       while (my $target = $query->fetchrow_hashref){
-               push @targets,$target;
-       }
-       $c->stash(targets => \@targets);
+       $c->stash(targets => $query->fetchall_arrayref({}));
 
        $c->stash(template => 'covop/index.tt2');
 }