From 28e6b03ac62d7f50b8b520dada33665d9ac90cbb Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Mon, 7 Apr 2008 23:03:38 +0200 Subject: [PATCH] Calc alert and show government on cov op page --- NDWeb/Pages/CovOp.pm | 16 +++++++++------- database/covops2.sql | 11 +++++++++++ templates/covop.tmpl | 5 +++-- 3 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 database/covops2.sql diff --git a/NDWeb/Pages/CovOp.pm b/NDWeb/Pages/CovOp.pm index ce6a417..16a429b 100644 --- a/NDWeb/Pages/CovOp.pm +++ b/NDWeb/Pages/CovOp.pm @@ -46,7 +46,7 @@ sub render_body { $show = '' if defined param('show') && param('show') eq 'all'; if (defined param('covop') && param('covop') =~ /^(\d+)$/){ my $update = $DBH->prepare(q{INSERT INTO covop_attacks (uid,id,tick) VALUES(?,?,tick())}); - $update->execute($ND::UID,$1); + $update->execute($ND::UID,$1) or warn $DBH->errstr; } my $list = ''; @@ -58,18 +58,20 @@ sub render_body { }else{ $where = qq{AND MaxResHack > 130000 $show - ORDER BY COALESCE(seccents::float/structures*100,0) ASC,MaxResHack DESC,metal+crystal+eonium DESC}; + ORDER BY minalert ASC,MaxResHack DESC}; } $BODY->param(List => $list); my $query = $DBH->prepare(qq{SELECT id, coords, metal, crystal, eonium - , seccents::float/structures*100 AS seccents, distorters + , 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,0) AS structures,distorters + 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 + , planet_status, relationship,gov 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 @@ -77,8 +79,8 @@ sub render_body { 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) $where - }); - $query->execute($self->{PLANET}); + }) or warn $DBH->errstr; + $query->execute($self->{PLANET}) or warn $DBH->errstr; my @targets; while (my $target = $query->fetchrow_hashref){ diff --git a/database/covops2.sql b/database/covops2.sql new file mode 100644 index 0000000..9c3eed3 --- /dev/null +++ b/database/covops2.sql @@ -0,0 +1,11 @@ +CREATE OR REPLACE FUNCTION covop_alert(secs integer, strucs integer, gov governments, population integer) RETURNS integer + AS $_$ + SELECT (70*(1.0+LEAST(COALESCE($1::float/$2,$4),0.30)*2 + + (CASE $3 + WHEN 'Dic' THEN 0.20 + WHEN 'Feu' THEN -0.20 + WHEN 'Uni' THEN -0.10 + ELSE 0 + END) + $4/100.0))::integer; +$_$ + LANGUAGE sql IMMUTABLE; diff --git a/templates/covop.tmpl b/templates/covop.tmpl index 8c7ec87..2a80247 100644 --- a/templates/covop.tmpl +++ b/templates/covop.tmpl @@ -1,6 +1,6 @@ - + @@ -8,7 +8,8 @@ - + + -- 2.39.2
CoordsMetalCrystalEonium% Sec CentresDistsMax (15 agents)Last covop (tick)CoordsMetalCrystalEoniumGovAlertDistsMax (15 agents)Last covop (tick)
-