From 38ca8c5683ec02a62badb6a0150e60a9a9338580 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Fri, 15 Dec 2006 11:47:03 +0000 Subject: [PATCH] initial commit of alliances --- alliances.pl | 123 +++++++++++++++++++++++++++++++++++++++ index.pl | 2 +- templates/alliances.tmpl | 106 +++++++++++++++++++++++++++++++++ 3 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 alliances.pl create mode 100644 templates/alliances.tmpl diff --git a/alliances.pl b/alliances.pl new file mode 100644 index 0000000..101f2db --- /dev/null +++ b/alliances.pl @@ -0,0 +1,123 @@ +#************************************************************************** +# Copyright (C) 2006 by Michael Andreen * +# * +# This program is free software; you can redistribute it and/or modify * +# it under the terms of the GNU General Public License as published by * +# the Free Software Foundation; either version 2 of the License, or * +# (at your option) any later version. * +# * +# This program is distributed in the hope that it will be useful, * +# but WITHOUT ANY WARRANTY; without even the implied warranty of * +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# GNU General Public License for more details. * +# * +# You should have received a copy of the GNU General Public License * +# along with this program; if not, write to the * +# Free Software Foundation, Inc., * +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * +#**************************************************************************/ + +use strict; +use POSIX; +our $BODY; +our $DBH; +our $LOG; +my $error; + +$ND::TEMPLATE->param(TITLE => 'Alliances'); + +die "You don't have access" unless isHC(); + +my $alliance; +if (param('alliance') =~ /^(\d+)$/){ + my $query = $DBH->prepare(q{SELECT id,name, relationship FROM alliances WHERE id = ?}); + $alliance = $DBH->selectrow_hashref($query,undef,$1); +} +if ($alliance && param ('cmd') eq 'coords'){ + $DBH->begin_work; + $DBH->commit or $error .= "

Something went wrong: ".$DBH->errstr."

"; +} +if ($alliance && param ('cmd') eq 'change'){ + $DBH->begin_work; + $DBH->commit or $error .= "

Something went wrong: ".$DBH->errstr."

"; +} + +if ($alliance){ + $BODY->param(Alliance => $alliance->{name}); + $BODY->param(Id => $alliance->{id}); + my @relationships; + for my $relationship (" ","Friendly", "NAP", "Hostile"){ + push @relationships,{Rel => $relationship, Selected => $relationship eq $alliance->{relationship}} + } + $BODY->param(Relationships => \@relationships); + + my $order = "p.x,p.y,p.z"; + if (param('order') =~ /^(score|size|value|xp|hit_us|race)$/){ + $order = "$1 DESC"; + } + my $members = $DBH->prepare(qq{ +SELECT coords(x,y,z), nick, ruler, planet, race, size, score, value, xp, + planet_status,hit_us, sizerank, scorerank, valuerank, xprank + FROM current_planet_stats p +WHERE p.alliance_id = ? +ORDER BY $order}); + my @members; + $members->execute($alliance->{id}); + my $i = 0; + while (my $member = $members->fetchrow_hashref){ + $member->{ODD} = $i % 2; + push @members,$member; + $i++; + } + $BODY->param(Members => \@members); + + my $query = $DBH->prepare(intelquery('o.alliance AS oalliance,coords(o.x,o.y,o.z) AS origin, t.alliance AS talliance,coords(t.x,t.y,t.z) AS target',qq{not ingal AND (t.alliance_id = ? OR t.alliance_id = ?) + AND (i.mission = 'Defend' OR i.mission = 'AllyDef') + AND (t.alliance_id != ? OR t.alliance_id IS NULL OR o.alliance_id != ? OR o.alliance_id IS NULL) + AND i.sender NOT IN (SELECT planet FROM users u NATURAL JOIN groupmembers gm WHERE gid = 8 AND planet IS NOT NULL) + })); + $query->execute($alliance->{id},$alliance->{id},$alliance->{id},$alliance->{id}) or $error .= $DBH->errstr; + + my @intel; + my $i = 0; + while (my $intel = $query->fetchrow_hashref){ + if ($intel->{ingal}){ + $intel->{missionclass} = 'ingal'; + }else{ + $intel->{missionclass} = $intel->{mission}; + } + $intel->{ODD} = $i % 2; + push @intel,$intel; + $i++; + } + $BODY->param(Intel => \@intel); +}else{ + + my $order = "score DESC"; + if (param('order') =~ /^(score|kscore|size|ksize|members|kmem|kxp|kxp|scavg|kscavg|siavg|ksiavg|kxpavg|kvalue|kvalavg)$/){ + $order = "$1 DESC"; + } + my $query = $DBH->prepare(qq{ +SELECT DISTINCT a.id,name,COALESCE(s.score,SUM(p.score)) AS score,COALESCE(s.size,SUM(p.size)) AS size,s.members,count(*) AS kmem, + COALESCE(SUM(p.score),-1) AS kscore, COALESCE(SUM(p.size),-1) AS ksize, COALESCE(SUM(p.xp),-1) AS kxp,COALESCE(SUM(p.value),-1) AS kvalue, + COALESCE(s.score/LEAST(s.members,60),-1) AS scavg, COALESCE(AVG(p.score)::int,-1) AS kscavg, COALESCE(s.size/s.members,-1) AS siavg, + COALESCE(AVG(p.size)::int,-1) AS ksiavg, COALESCE(AVG(p.xp)::int,-1) AS kxpavg, COALESCE(AVG(p.value)::int,-1) AS kvalavg +FROM alliances a + LEFT OUTER JOIN (SELECT * FROM alliance_stats WHERE tick = (SELECT max(tick) FROM alliance_stats)) s ON s.id = a.id + LEFT OUTER JOIN current_planet_stats p ON p.alliance_id = a.id +GROUP BY a.id,a.name,s.score,s.size,s.members +ORDER BY $order + })or $error .= $DBH->errstr; + $query->execute or $error .= $DBH->errstr; + my @alliances; + my $i = 0; + while (my $alliance = $query->fetchrow_hashref){ + next if ($alliance->{score} < 1 && $alliance->{kscore} < 1); + $alliance->{ODD} = $i % 2; + push @alliances, $alliance; + $i++; + } + $BODY->param(Alliances => \@alliances); +} +$BODY->param(Error => $error); +1; diff --git a/index.pl b/index.pl index b41a889..e557be1 100755 --- a/index.pl +++ b/index.pl @@ -64,7 +64,7 @@ while (my ($name,$attack,$gid) = $query->fetchrow()){ our $LOG = $DBH->prepare('INSERT INTO log (uid,text) VALUES(?,?)'); my $page = 'main'; -if (param('page') =~ /^(main|check|motd|points|covop|top100|launchConfirmation|addintel|defrequest|raids|editRaid|calls|intel|users)$/){ +if (param('page') =~ /^(main|check|motd|points|covop|top100|launchConfirmation|addintel|defrequest|raids|editRaid|calls|intel|users|alliances)$/){ $page = $1; } diff --git a/templates/alliances.tmpl b/templates/alliances.tmpl new file mode 100644 index 0000000..85f84ff --- /dev/null +++ b/templates/alliances.tmpl @@ -0,0 +1,106 @@ + + +
Alliances: + + + +

Alliance:

+

Relationship: +

+

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
CoordsNickHit usPlanetRaceSize (rank)Score (rank)Value (rank)XP (rank)
() OF () () () ()
+
+
+
Coords + + + +

Paste a list of coords that you want to add to this alliance

+ +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
AllianceSenderMissionLanding tickETAAmountTargetAllianceIngalReported by
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
UserKnown membersTotal membersScore (known planets)Avg Score (known planets)Size (known planets)Avg Size (known planets)XP (avg)Value (avg)
() () () () () ()
+
-- 2.39.2