+++ /dev/null
-#**************************************************************************
-# Copyright (C) 2006 by Michael Andreen <harvATruinDOTnu> *
-# *
-# 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. *
-#**************************************************************************/
-
-package NDWeb::Pages::Check;
-use strict;
-use warnings;
-use ND::Include;
-use CGI qw/:standard/;
-use NDWeb::Include;
-
-use base qw/NDWeb::XMLPage/;
-
-$NDWeb::Page::PAGES{check} = __PACKAGE__;
-
-sub parse {
- my $self = shift;
- if ($self->{URI} =~ m{^/.*/((\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?(?: |:(\d+))?)$}){
- param('coords',$1);
- }
-}
-
-sub render_body {
- my $self = shift;
- my ($BODY) = @_;
- $self->{TITLE} = 'Check planets and galaxies';
- my $DBH = $self->{DBH};
-
- return $self->noAccess unless $self->{ATTACKER};
-
- $BODY->param(isBC => $self->isMember && ($self->isOfficer || $self->isBC));
-
- my ($x,$y,$z);
- if (param('coords') =~ /(\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?(?: |:(\d+))?/){
- $x = $1;
- $y = $2;
- $z = $3;
- $BODY->param(Coords => "$x:$y".(defined $z ? ":$z" : ''));
- }else{
- $ND::ERROR .= p b q{Couldn't parse coords};
- return $BODY;
- }
-
- if ($self->isMember && defined param('cmd') && param('cmd') eq 'arbiter'){
- my $query = $DBH->prepare(q{SELECT count(*) AS friendlies FROM current_planet_stats WHERE x = ? AND y = ?
- AND (planet_status IN ('Friendly','NAP') OR relationship IN ('Friendly','NAP'))});
- my ($count) = $DBH->selectrow_array($query,undef,$x,$y);
- if ($count > 0){
- $BODY->param(Arbiter => '<b>DO NOT ATTACK THIS GAL</b>');
- }else{
- $BODY->param(Arbiter => '<b>KILL THESE BASTARDS</b>');
- }
- log_message $ND::UID,"Arbiter check on $x:$y";
- }
-
- my $where = '';
- my $extra_columns = '';
-
- $where = 'AND z = ?' if defined $z;
- if ($self->isMember && $self->isOfficer){
- $extra_columns = ",planet_status,hit_us, alliance,relationship,nick";
- }elsif ($self->isMember && $self->isBC){
- $extra_columns = ", planet_status,hit_us, alliance,relationship";
- }
-
- my $query = $DBH->prepare(qq{Select p.id,coords(x,y,z), ((ruler || ' OF ') || p.planet) as planet,race,gov,
- size, size_gain, size_gain_day,
- score,score_gain,score_gain_day,
- value,value_gain,value_gain_day,
- xp,xp_gain,xp_gain_day,
- sizerank,sizerank_gain,sizerank_gain_day,
- scorerank,scorerank_gain,scorerank_gain_day,
- valuerank,valuerank_gain,valuerank_gain_day,
- xprank,xprank_gain,xprank_gain_day,
- p.value - p.size*200 -
- COALESCE(ps.metal+ps.crystal+ps.eonium,0)/150 -
- COALESCE(ss.total ,(SELECT COALESCE(avg(total),0) FROM structure_scans)::int)*1500 AS fleetvalue
- ,(metal+crystal+eonium)/100 AS resvalue $extra_columns
- FROM current_planet_stats_full p
- LEFT OUTER JOIN planet_scans ps ON p.id = ps.planet
- LEFT OUTER JOIN structure_scans ss ON p.id = ss.planet
- WHERE x = ? AND y = ? $where ORDER BY x,y,z ASC
- });
-
- if (defined $z){
- $query->execute($x,$y,$z);
- }else{
- $query->execute($x,$y);
- if ($self->isMember && ($self->isBC || $self->isOfficer) && !$self->isHC){
- log_message $ND::UID,"BC browsing $x:$y";
- }
- }
- my @planets;
- my $planet_id = undef;
- while (my $planet = $query->fetchrow_hashref){
- $planet_id = $planet->{id};
- for my $type (qw/size score value xp/){
- $planet->{"${type}img"} = 'stay';
- $planet->{"${type}img"} = 'up' if $planet->{"${type}_gain_day"} > 0;
- $planet->{"${type}img"} = 'down' if $planet->{"${type}_gain_day"} < 0;
- $planet->{"${type}rankimg"} = 'stay';
- $planet->{"${type}rankimg"} = 'up' if $planet->{"${type}rank_gain_day"} < 0;
- $planet->{"${type}rankimg"} = 'down' if $planet->{"${type}rank_gain_day"} > 0;
- for my $type ($type,"${type}_gain","${type}_gain_day"){
- $planet->{$type} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000
- }
- }
- if ($self->isMember && ($self->isOfficer || $self->isBC)){
- if ($z && defined $planet->{alliance} && $planet->{alliance} eq 'NewDawn' && not ($self->isHC || $self->isOfficer)){
- log_message $ND::UID,"BC browsing ND planet $planet->{coords} tick $self->{TICK}";
- }
- }
- delete $planet->{id};
- push @planets,$planet;
- }
- $BODY->param(GPlanets => \@planets);
-
- if ($z && $planet_id){
- $BODY->param(OnePlanet => 1);
-
- my $query = $DBH->prepare(q{
- SELECT i.id,i.mission, i.name, i.tick AS landingtick,MIN(eta) AS eta
- , i.amount, coords(x,y,z) AS target
- FROM fleets i
- LEFT OUTER JOIN (planets
- NATURAL JOIN planet_stats) t ON i.target = t.id
- AND t.tick = ( SELECT MAX(tick) FROM planet_stats)
- WHERE i.uid = -1
- AND i.sender = ?
- AND (i.tick > tick() - 14 OR i.mission = 'Full fleet')
- GROUP BY i.id,x,y,z,i.mission,i.tick,i.name,i.amount,i.ingal,i.uid
- ORDER BY i.tick,x,y,z
- });
- $query->execute($planet_id);
- my $ships = $DBH->prepare(q{SELECT ship,amount FROM fleet_ships
- WHERE id = ? ORDER BY num
- });
- my @missions;
- while (my $mission = $query->fetchrow_hashref){
- $mission->{CLASS} = $mission->{mission};
- my @ships;
- $ships->execute($mission->{id});
- while (my $ship = $ships->fetchrow_hashref){
- push @ships,$ship;
- }
- push @ships, {ship => 'No', amount => 'ships'} if @ships == 0;
- $mission->{ships} = \@ships;
- push @missions,$mission;
- }
- $BODY->param(Missions => \@missions);
-
- $query = $DBH->prepare(q{
- SELECT i.id,i.mission, i.name, i.tick AS landingtick,MIN(eta) AS eta
- , i.amount, coords(x,y,z) AS sender
- FROM fleets i
- LEFT OUTER JOIN (planets
- NATURAL JOIN planet_stats) s ON i.sender = s.id
- AND s.tick = ( SELECT MAX(tick) FROM planet_stats)
- WHERE i.uid = -1
- AND i.target = ?
- AND (i.tick > tick() - 14 OR i.mission = 'Full fleet')
- GROUP BY i.id,x,y,z,i.mission,i.tick,i.name,i.amount,i.ingal,i.uid
- ORDER BY i.tick,x,y,z
- });
- $query->execute($planet_id);
- my @incomings;
- while (my $mission = $query->fetchrow_hashref){
- $mission->{CLASS} = $mission->{mission};
- my @ships;
- $ships->execute($mission->{id});
- while (my $ship = $ships->fetchrow_hashref){
- push @ships,$ship;
- }
- push @ships, {ship => 'No', amount => 'ships'} if @ships == 0;
- $mission->{ships} = \@ships;
- push @incomings,$mission;
- }
- $BODY->param(Incomings => \@incomings);
-
- $query = $DBH->prepare(q{SELECT value,value_gain AS gain,tick FROM planet_stats
- WHERE id = ? AND tick > tick() - 24});
- $query->execute($planet_id);
- my @values;
- while (my $value = $query->fetchrow_hashref){
- $value->{class} = 'Defend';
- $value->{class} = 'Attack' if $value->{gain} < 0;
- push @values, $value;
- }
- $BODY->param(Values => \@values);
-
- $query = $DBH->prepare(q{SELECT type,scan_id, tick FROM scans
- WHERE planet = ? AND tick > tick() - 168
- ORDER BY tick,type DESC
- });
- $query->execute($planet_id);
- my @scans;
- while (my $scan = $query->fetchrow_hashref){
- push @scans,$scan;
- }
- $BODY->param(Scans => \@scans);
-
- $query = $DBH->prepare(q{SELECT x,y,z,tick FROM planet_stats
- WHERE id = ? ORDER BY tick ASC});
- $query->execute($planet_id);
- my @coords;
- my $c = {x => 0, y => 0, z => 0};
- while (my $c2 = $query->fetchrow_hashref){
- if ($c->{x} != $c2->{x} || $c->{y} != $c2->{y} || $c->{z} != $c2->{z}){
- $c = $c2;
- push @coords,$c;
- }
- }
- $BODY->param(OldCoords => \@coords);
-
- $query = $DBH->prepare(q{SELECT DISTINCT ON(rid) tick,category,name,amount
- FROM planet_data pd JOIN planet_data_types pdt ON pd.rid = pdt.id
- WHERE pd.id = $1 ORDER BY rid,tick DESC
- });
- $query->execute($planet_id);
- my @pdata;
- while (my $data = $query->fetchrow_hashref){
- $data->{amount} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000
- push @pdata,$data;
- }
- $BODY->param(PlanetData => \@pdata);
-
- }
- $query = $DBH->prepare(q{SELECT x,y,
- size, size_gain, size_gain_day,
- score,score_gain,score_gain_day,
- value,value_gain,value_gain_day,
- xp,xp_gain,xp_gain_day,
- sizerank,sizerank_gain,sizerank_gain_day,
- scorerank,scorerank_gain,scorerank_gain_day,
- valuerank,valuerank_gain,valuerank_gain_day,
- xprank,xprank_gain,xprank_gain_day,
- planets,planets_gain,planets_gain_day
- FROM galaxies g
- WHERE tick = ( SELECT max(tick) AS max FROM galaxies)
- AND x = $1 AND y = $2
- });
- $query->execute($x,$y) or $ND::ERROR .= p($DBH->errstr);
-
- my @galaxies;
- while (my $galaxy = $query->fetchrow_hashref){
- for my $type (qw/planets size score xp value/){
- #$galaxy->{$type} = prettyValue($galaxy->{$type});
- next unless defined $galaxy->{"${type}_gain_day"};
- $galaxy->{"${type}img"} = 'stay';
- $galaxy->{"${type}img"} = 'up' if $galaxy->{"${type}_gain_day"} > 0;
- $galaxy->{"${type}img"} = 'down' if $galaxy->{"${type}_gain_day"} < 0;
- unless( $type eq 'planets'){
- $galaxy->{"${type}rankimg"} = 'stay';
- $galaxy->{"${type}rankimg"} = 'up' if $galaxy->{"${type}rank_gain_day"} < 0;
- $galaxy->{"${type}rankimg"} = 'down' if $galaxy->{"${type}rank_gain_day"} > 0;
- }
- for my $type ($type,"${type}_gain","${type}_gain_day"){
- $galaxy->{$type} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000
- }
- }
- push @galaxies,$galaxy;
- }
- $BODY->param(Galaxies => \@galaxies);
-
- return $BODY;
-}
-
-1;
INSERT INTO roles VALUES('calls_edit');
INSERT INTO roles VALUES('raids_info');
INSERT INTO roles VALUES('raids_edit');
+INSERT INTO roles VALUES('stats_intel');
+INSERT INTO roles VALUES('stats_details');
+INSERT INTO roles VALUES('stats_missions');
+INSERT INTO roles VALUES('stats_scans');
+INSERT INTO roles VALUES('stats_planetdata');
INSERT INTO group_roles (gid,role) VALUES(2,'member_menu');
INSERT INTO group_roles (gid,role) VALUES(2,'attack_menu');
INSERT INTO group_roles (gid,role) VALUES(2,'members');
INSERT INTO group_roles (gid,role) VALUES(2,'covop');
+INSERT INTO group_roles (gid,role) VALUES(2,'stats_details');
+INSERT INTO group_roles (gid,role) VALUES(2,'stats_missions');
+INSERT INTO group_roles (gid,role) VALUES(2,'stats_scans');
+INSERT INTO group_roles (gid,role) VALUES(2,'stats_planetdata');
INSERT INTO group_roles (gid,role) VALUES(6,'dc_menu');
INSERT INTO group_roles (gid,role) VALUES(6,'calls_list');
INSERT INTO group_roles (gid,role) VALUES(8,'no_fleet_update');
INSERT INTO group_roles (gid,role) VALUES(9,'members_points_nolimit');
+INSERT INTO group_roles (gid,role) VALUES(9,'stats_intel');
INSERT INTO group_roles (gid,role) VALUES(1,'dc_menu');
INSERT INTO group_roles (gid,role) VALUES(1,'bc_menu');
$dbh->do(q{SET timezone = 'GMT'});
$c->stash(TICK =>$dbh->selectrow_array('SELECT tick()',undef));
+ $c->stash(STICK =>$dbh->selectrow_array('SELECT max(tick) FROM planet_stats',undef));
$c->stash->{game}->{tick} = $c->stash->{TICK};
if ($c->user_exists){
--- /dev/null
+package NDWeb::Controller::Stats;
+
+use strict;
+use warnings;
+use parent 'Catalyst::Controller';
+
+use NDWeb::Include;
+
+=head1 NAME
+
+NDWeb::Controller::Stats - Catalyst Controller
+
+=head1 DESCRIPTION
+
+Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+
+=head2 index
+
+=cut
+
+sub index :Path :Args(0) {
+ my ( $self, $c ) = @_;
+
+ $c->response->body('Matched NDWeb::Controller::Stats in Stats.');
+}
+
+sub galaxy : Local {
+ my ( $self, $c, $x, $y, $z ) = @_;
+ my $dbh = $c->model;
+
+ $c->stash( comma => \&comma_value);
+
+ my $query = $dbh->prepare(q{SELECT x,y,
+ size, size_gain, size_gain_day,
+ score,score_gain,score_gain_day,
+ value,value_gain,value_gain_day,
+ xp,xp_gain,xp_gain_day,
+ sizerank,sizerank_gain,sizerank_gain_day,
+ scorerank,scorerank_gain,scorerank_gain_day,
+ valuerank,valuerank_gain,valuerank_gain_day,
+ xprank,xprank_gain,xprank_gain_day,
+ planets,planets_gain,planets_gain_day
+ ,ticks_roiding, ticks_roided
+ FROM galaxies g
+ JOIN (SELECT x,y,count(CASE WHEN size_gain > 0 THEN 1 ELSE NULL END) AS ticks_roiding
+ ,count(CASE WHEN size_gain < 0 THEN 1 ELSE NULL END) AS ticks_roided
+ FROM galaxies GROUP BY x,y) ga USING (x,y)
+ WHERE tick = ( SELECT max(tick) AS max FROM galaxies)
+ AND x = $1 AND y = $2
+ });
+
+ $query->execute($x,$y);
+ $c->stash(g => $query->fetchrow_hashref );
+
+ my $extra_columns = '';
+ if ($c->check_user_roles(qw/stats_intel/)){
+ $c->stash(intel => 1);
+ $extra_columns = ",planet_status,hit_us, alliance,relationship,nick";
+ }
+ if ($c->check_user_roles(qw/stats_details/)){
+ $c->stash( details => 1);
+ $extra_columns .= q{
+ ,gov, p.value - p.size*200 -
+ COALESCE(ps.metal+ps.crystal+ps.eonium,0)/150 -
+ COALESCE(ss.total ,(SELECT COALESCE(avg(total),0)
+ FROM structure_scans)::int)*1500 AS fleetvalue
+ ,(metal+crystal+eonium)/100 AS resvalue
+ };
+ }
+
+ $query = $dbh->prepare(qq{SELECT p.id,coords(x,y,z), ruler, p.planet,race,
+ size, size_gain, size_gain_day,
+ score,score_gain,score_gain_day,
+ value,value_gain,value_gain_day,
+ xp,xp_gain,xp_gain_day,
+ sizerank,sizerank_gain,sizerank_gain_day,
+ scorerank,scorerank_gain,scorerank_gain_day,
+ valuerank,valuerank_gain,valuerank_gain_day,
+ xprank,xprank_gain,xprank_gain_day
+ $extra_columns
+ FROM current_planet_stats_full p
+ LEFT OUTER JOIN planet_scans ps ON p.id = ps.planet
+ LEFT OUTER JOIN structure_scans ss ON p.id = ss.planet
+ WHERE x = ? AND y = ? AND COALESCE(z = ?,TRUE) ORDER BY x,y,z ASC
+ });
+
+ $query->execute($x,$y,$z);
+ $c->stash(planets => $query->fetchall_arrayref({}) );
+}
+
+sub planet : Local {
+ my ( $self, $c, $id ) = @_;
+ my $dbh = $c->model;
+
+ my $p = $dbh->selectrow_hashref(q{SELECT id,x,y,z FROM current_planet_stats
+ WHERE id = $1},undef,$id);
+
+ $c->forward('galaxy',[$p->{x},$p->{y},$p->{z}]);
+ $c->stash(p => $p);
+
+ if ($c->check_user_roles(qw/stats_missions/)){
+ my $query = $dbh->prepare(q{
+ SELECT DISTINCT ON (i.tick,x,y,z,t.id,i.name,i.amount) i.id,i.mission, i.name, i.tick, i.eta AS eta
+ , i.amount, coords(x,y,z) AS coords, t.id AS planet
+ FROM ((
+ SELECT * FROM fleets
+ WHERE sender = $1 AND tick > tick() - 14
+ ) UNION (
+ SELECT * FROM fleets WHERE sender = $1 AND mission = 'Full fleet'
+ ORDER BY tick DESC LIMIT 5
+ )
+ ) i
+ LEFT OUTER JOIN (planets
+ NATURAL JOIN planet_stats) t ON i.target = t.id
+ AND t.tick = ( SELECT MAX(tick) FROM planet_stats)
+ WHERE i.uid = -1
+ ORDER BY i.tick,x,y,z,t.id,i.name,i.amount,i.eta
+ });
+ $query->execute($id);
+ my $ships = $dbh->prepare(q{SELECT ship,amount FROM fleet_ships
+ WHERE id = ? ORDER BY num
+ });
+ my @missions;
+ while (my $mission = $query->fetchrow_hashref){
+ my @ships;
+ $ships->execute($mission->{id});
+ if ($ships->rows != 0){
+ while (my $ship = $ships->fetchrow_hashref){
+ push @ships,$ship;
+ }
+ $mission->{ships} = \@ships;
+ }
+ push @missions,$mission;
+ }
+ $c->stash(outgoings => \@missions);
+
+ $query = $dbh->prepare(q{
+ SELECT DISTINCT ON (i.tick,x,y,z,s.id,i.name,i.amount) i.id,i.mission, i.name, i.tick,eta
+ , i.amount, coords(x,y,z) AS coords, s.id AS planet
+ FROM fleets i
+ LEFT OUTER JOIN (planets
+ NATURAL JOIN planet_stats) s ON i.sender = s.id
+ AND s.tick = ( SELECT MAX(tick) FROM planet_stats)
+ WHERE i.uid = -1
+ AND i.target = ?
+ AND i.tick > tick() - 3
+ ORDER BY i.tick,x,y,z,s.id,i.name,i.amount,i.eta
+ });
+ $query->execute($id);
+ my @incomings;
+ while (my $mission = $query->fetchrow_hashref){
+ my @ships;
+ $ships->execute($mission->{id});
+ if ($ships->rows != 0){
+ while (my $ship = $ships->fetchrow_hashref){
+ push @ships,$ship;
+ }
+ $mission->{ships} = \@ships;
+ }
+ push @incomings,$mission;
+ }
+ $c->stash(incomings => \@incomings);
+ }
+
+ if ($c->check_user_roles(qw/stats_scans/)){
+ my $query = $dbh->prepare(q{SELECT type,scan_id, tick FROM scans
+ WHERE planet = ? AND tick > tick() - 168
+ ORDER BY tick,type DESC
+ });
+ $query->execute($id);
+ $c->stash(scans => $query->fetchall_arrayref({}) );
+ }
+
+ if ($c->check_user_roles(qw/stats_planetdata/)){
+ my $query = $dbh->prepare(q{SELECT DISTINCT ON(rid) tick,category,name,amount
+ FROM planet_data pd JOIN planet_data_types pdt ON pd.rid = pdt.id
+ WHERE pd.id = $1 ORDER BY rid,tick DESC
+ });
+ $query->execute($id);
+ $c->stash(planetdata => $query->fetchall_arrayref({}) );
+ }
+
+ my $query = $dbh->prepare(q{SELECT value,value_gain AS gain,tick FROM planet_stats
+ WHERE id = ? AND tick > tick() - 24});
+ $query->execute($id);
+ $c->stash(values => $query->fetchall_arrayref({}) );
+
+ $query = $dbh->prepare(q{SELECT x,y,z,tick FROM planet_stats
+ WHERE id = ? ORDER BY tick ASC});
+ $query->execute($id);
+ my @coords;
+ my $co = {x => 0, y => 0, z => 0};
+ while (my $c2 = $query->fetchrow_hashref){
+ if ($co->{x} != $c2->{x} || $co->{y} != $c2->{y} || $co->{z} != $c2->{z}){
+ $co = $c2;
+ push @coords,$co;
+ }
+ }
+ $c->stash(oldcoords => \@coords);
+
+}
+
+sub find : Local {
+ my ( $self, $c, $find ) = @_;
+ my $dbh = $c->model;
+
+ local $_ = $find || $c->req->param('coords');
+
+ if (/(\d+)(?: |:)(\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?/){
+ my $planet = $dbh->selectrow_array(q{SELECT planetid($1,$2,$3,$4)}
+ ,undef,$1,$2,$3,$4);
+ $c->res->redirect($c->uri_for('planet',$planet));
+ }elsif (/(\d+)(?: |:)(\d+)/){
+ $c->res->redirect($c->uri_for('galaxy',$1,$2));
+ }
+
+}
+
+
+=head1 AUTHOR
+
+Michael Andreen (harv@ruin.nu)
+
+=head1 LICENSE
+
+GPL 2.0, or later.
+
+=cut
+
+1;
--- /dev/null
+ <table>
+ <tr><th></th><th>Coords</th><th>Name</th><th>Mission</th><th>Tick</th><th>ETA</th><th>Amount</th></tr>
+ [% FOR m IN missions %]
+ <tr align="center" class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]" onclick="$('#fleet[% m.id %]').toggle()">
+ <td>
+ [% IF m.ships %]
+ <b>⇓</b>
+ [% END %]
+ </td><td>
+ [% IF m.planet %]
+ <a href="[% c.uri_for('/stats/planet', m.planet) %]">[% m.coords %]</a>
+ [% END %]
+ </td>
+ <td>[% m.name %]</td>
+ <td class="[% m.mission %]">[% m.mission %]</td>
+ <td>[% m.tick %]</td>
+ <td>[% m.eta %]</td>
+ <td>[% m.amount %]</td>
+ [% IF m.fleetcatch %]
+ <td class="Hostile">FLEETCATCH!!</td>
+ [% END %]
+ </tr>
+ [% IF m.ships %]
+ <tr id="fleet[% m.id %]" class="hidden">
+ <td>
+ <td colspan="5"><table>
+ [% FOR s IN m.ships %]
+ <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td>[% s.ship %]</td><td>[% s.amount %]</td>
+ </tr>
+ [% END %]
+ </table></td>
+ </tr>
+ [% END %]
+ [% END %]
+ </table>
--- /dev/null
+<table class="stats">
+ <tr align="center"><th colspan="4">Rank</th>
+ </tr>
+ <tr>
+ <th>Size</th>
+ <th>Score</th>
+ <th>Value</th>
+ <th>XP</th>
+ <th>Coords</th>
+ <th>Planets</th>
+ <th>Size</th>
+ <th>Score</th>
+ <th>Value</th>
+ <th>XP</th>
+ <th>Roided</th>
+ <th>Roiding</th>
+ </tr>
+ <tr align="right" class="odd">
+ [% g.sizerankimg = (g.sizerank_gain_day == 0 ? 'stay' : (g.sizerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% g.sizerank_gain_day %] Today | [% g.sizerank_gain %] Tick">[% g.sizerank %] <img src="/static/images/[% g.sizerankimg %].png" alt="[% g.sizerankimg %]"> </td>
+ [% g.scorerankimg = (g.scorerank_gain_day == 0 ? 'stay' : (g.scorerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% g.scorerank_gain_day %] Today | [% g.scorerank_gain %] Tick">[% g.scorerank %] <img src="/static/images/[% g.scorerankimg %].png" alt="[% g.scorerankimg %]"> </td>
+ [% g.valuerankimg = (g.valuerank_gain_day == 0 ? 'stay' : (g.valuerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% g.valuerank_gain_day %] Today | [% g.valuerank_gain %] Tick">[% g.valuerank %] <img src="/static/images/[% g.valuerankimg %].png" alt="[% g.valuerankimg %]"> </td>
+ [% g.xprankimg = (g.xprank_gain_day == 0 ? 'stay' : (g.xprank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% g.xprank_gain_day %] Today | [% g.xprank_gain %] Tick">[% g.xprank %] <img src="/static/images/[% g.xprankimg %].png" alt="[% g.xprankimg %]"> </td>
+ <td><a href="[% c.uri_for('/stats','galaxy',g.x,g.y) %]">[% g.x %]:[% g.y %]</a></td>
+ [% g.planetsimg = (g.planets_gain_day == 0 ? 'stay' : (g.planets_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% g.planets_gain_day %] Today | [% g.planets_gain %] Tick">[% comma(g.planets) %] <img src="/static/images/[% g.planetsimg %].png" alt="[% g.planetsimg %]"> </td>
+ [% g.sizeimg = (g.size_gain_day == 0 ? 'stay' : (g.size_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% g.size_gain_day %] Today | [% g.size_gain %] Tick">[% comma(g.size) %] <img src="/static/images/[% g.sizeimg %].png" alt="[% g.sizeimg %]"> </td>
+ [% g.scoreimg = (g.score_gain_day == 0 ? 'stay' : (g.score_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(g.score_gain_day) %] Today | [% comma(g.score_gain) %] Tick">[% comma(g.score) %] <img src="/static/images/[% g.scoreimg %].png" alt="[% g.scoreimg %]"> </td>
+ [% g.valueimg = (g.value_gain_day == 0 ? 'stay' : (g.value_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(g.value_gain_day) %] Today | [% comma(g.value_gain) %] Tick">[% comma(g.value) %] <img src="/static/images/[% g.valueimg %].png" alt="[% g.valueimg %]"> </td>
+ [% g.xpimg = (g.xp_gain_day == 0 ? 'stay' : (g.xp_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(g.xp_gain_day) %] Today | [% comma(g.xp_gain) %] Tick">[% comma(g.xp) %] <img src="/static/images/[% g.xpimg %].png" alt="[% g.xpimg %]"> </td>
+ <td>[% g.ticks_roided %]</td>
+ <td>[% g.ticks_roiding %]</td>
+ </tr>
+</table>
+
+<table>
+ <tr align="center"><th colspan="4">Rank</th>
+ </tr>
+ <tr><th>Size</th><th>Score</th><th>Value </th> <th>XP</th>
+ <th>Coords</th><th>Planet</th><th>Race</th>
+ <th>Size</th><th>Score</th><th>Value </th><th>XP</th>
+ [% IF details %]<th>Gov</th><th>Fleet (Resource) value</th>[% END %]
+ [% IF intel %]<th>Nick</th><th>Hit us</th><th>Alliance</th>[% END %]
+ </tr>
+[% FOR p IN planets %]
+ <tr align="right" class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ [% p.sizerankimg = (p.sizerank_gain_day == 0 ? 'stay' : (p.sizerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.sizerank_gain_day %] Today | [% p.sizerank_gain %] Tick">[% p.sizerank %] <img src="/static/images/[% p.sizerankimg %].png" alt="[% p.sizerankimg %]"> </td>
+ [% p.scorerankimg = (p.scorerank_gain_day == 0 ? 'stay' : (p.scorerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.scorerank_gain_day %] Today | [% p.scorerank_gain %] Tick">[% p.scorerank %] <img src="/static/images/[% p.scorerankimg %].png" alt="[% p.scorerankimg %]"> </td>
+ [% p.valuerankimg = (p.valuerank_gain_day == 0 ? 'stay' : (p.valuerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.valuerank_gain_day %] Today | [% p.valuerank_gain %] Tick">[% p.valuerank %] <img src="/static/images/[% p.valuerankimg %].png" alt="[% p.valuerankimg %]"> </td>
+ [% p.xprankimg = (p.xprank_gain_day == 0 ? 'stay' : (p.xprank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.xprank_gain_day %] Today | [% p.xprank_gain %] Tick">[% p.xprank %] <img src="/static/images/[% p.xprankimg %].png" alt="[% p.xprankimg %]"> </td>
+
+ <td><a href="[% c.uri_for('/stats','planet',p.id) %]">[% p.coords %]</a></td>
+ <td align="center">[% p.ruler %] <b>OF</b> [% p.planet %]</td>
+ <td align="center">[% p.race %]</td>
+ [% p.sizeimg = (p.size_gain_day == 0 ? 'stay' : (p.size_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% p.size_gain_day %] Today | [% p.size_gain %] Tick">[% comma(p.size) %] <img src="/static/images/[% p.sizeimg %].png" alt="[% p.sizeimg %]"> </td>
+ [% p.scoreimg = (p.score_gain_day == 0 ? 'stay' : (p.score_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(p.score_gain_day) %] Today | [% comma(p.score_gain) %] Tick">[% comma(p.score) %] <img src="/static/images/[% p.scoreimg %].png" alt="[% p.scoreimg %]"> </td>
+ [% p.valueimg = (p.value_gain_day == 0 ? 'stay' : (p.value_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(p.value_gain_day) %] Today | [% comma(p.value_gain) %] Tick">[% comma(p.value) %] <img src="/static/images/[% p.valueimg %].png" alt="[% p.valueimg %]"> </td>
+ [% p.xpimg = (p.xp_gain_day == 0 ? 'stay' : (p.xp_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(p.xp_gain_day) %] Today | [% comma(p.xp_gain) %] Tick">[% comma(p.xp) %] <img src="/static/images/[% p.xpimg %].png" alt="[% p.xpimg %]"> </td>
+ [% IF details %]
+ <td align="center">[% p.gov %]</td>
+ <td align="center">[% p.fleetvalue %] ([% p.resvalue %])</td>
+ [% END %]
+ [% IF intel %]
+ <td align="center" class="[% p.planet_status %]"><a href="[% c.uri_for('/intel','planet',p.id) %]">[% p.nick %]([% p.planet_stats %])</a></td>
+ <td>[% p.hit_us %]</td>
+ <td align="center" class="[% p.relationship %]">[% p.alliance %]</td>
+ [% END %]
+ </tr>
+[% END %]
+</table>
</head>
<body>
[% content %]
+
+<script type="text/javascript">
+<!--
+$(document).ready(function(){
+ $('.hidden').hide();
+ $('a[rel="external"]').click(function() {
+ window.open( $(this).attr('href') );
+ return false;
+ });
+});
+-->
+</script>
</body>
</html>
<li><a href="/rankings/planets">Planet Rankings</a></li>
<li><a href="/rankings/alliances">Alliance Rankings</a></li>
<li><a href="/rankings/galaxies">Galaxy Rankings</a></li>
+ <li><form action="/stats/find" method="post"><p>
+ <input class="coordsinput" type="text" name="coords" value="[% checkcoords %]">
+ <input class="coordsinput" type="submit" value="Check">
+ </p></form>
+ </li>
</ul>
[% IF c.check_user_roles("member_menu") %]
[% IF user.attacker %]
[% IF user.attacker %]
<p>Attack menu</p>
<ul class="linkbar">
- <li><form action="/check" method="post"><p>
- <input class="coordsinput" type="text" name="coords" value="[% cords or '1:1:1' %]">
- <input class="coordsinput" type="submit" value="Check">
- </p></form></li>
<li><a href="/raids">Web raids</a></li>
</ul>
<p><input type="button" value="Update target list"
[% META title = 'Edit call' %]
-[% BLOCK missiontable %]
-<table>
- <tr><th></th><th>Coords</th><th>Name</th><th>Mission</th><th>Tick</th><th>ETA</th><th>Amount</th></tr>
- [% FOR m IN missions %]
- <tr align="center" class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]" onclick="$('#fleet[% m.id %]').toggle()">
- <td>
- [% IF m.ships %]
- <b>⇓</b>
- [% END %]
- </td><td>
- [% IF m.planet %]
- <a href="[% c.uri_for('/stats/planet', m.planet) %]">[% m.coords %]</a>
- [% END %]
- </td>
- <td>[% m.name %]</td>
- <td class="[% m.mission %]">[% m.mission %]</td>
- <td>[% m.tick %]</td>
- <td>[% m.eta %]</td>
- <td>[% m.amount %]</td>
- [% IF m.fleetcatch %]
- <td class="Hostile">FLEETCATCH!!</td>
- [% END %]
- </tr>
- [% IF m.ships %]
- <tr id="fleet[% m.id %]" class="missionrow">
- <td>
- <td colspan="5"><table>
- [% FOR s IN m.ships %]
- <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
- <td>[% s.ship %]</td><td>[% s.amount %]</td>
- </tr>
- [% END %]
- </table></td>
- </tr>
- [% END %]
- [% END %]
- </table>
-[% END %]
-
<form action="[% c.uri_for('postcallupdate',call.id) %]" method="post">
<fieldset> <legend>Call details, call# [% call.id %]</legend>
<table>
<td>[% a.fleet %]</td>
<td><input type="checkbox" name="change:[% a.id %]"></td>
</tr>
- <tr id="attacker[% a.id %]" class="missionrow">
+ <tr id="attacker[% a.id %]" class="hidden">
<td></td>
<td colspan="8">
- [% PROCESS missiontable missions=a.missions %]
+ [% PROCESS inc/missionlist.tt2 missions=a.missions %]
</td></tr>
[% END %]
</table>
</form>
</fieldset>
<fieldset><legend>Member fleet</legend>
-[% PROCESS missiontable missions=fleets %]
+[% PROCESS inc/missionlist.tt2 missions=fleets %]
</fieldset>
<fieldset><legend>Defenders</legend>
-[% PROCESS missiontable missions=defenders %]
+[% PROCESS inc/missionlist.tt2 missions=defenders %]
</fieldset>
<div>
<input type="submit" value="Submit">
</fieldset></form>
</div>
-
-<script type="text/javascript">
-<!--
-$(document).ready(function(){
- $('.missionrow').hide();
-});
--->
-</script>
--- /dev/null
+[% META title = 'Find' %]
+
+<p>Could not find: "[% c.req.param('coords') | html %]"</p>
+
+<p>The following syntaxes are possible:</p>
+<ul>
+ <li>X:Y:Z tick (i.e. "1:1:1 37") Finds the planet that had the coords at the specified tick</li>
+ <li>X:Y:Z (i.e. "1:1:1") Finds the planet that had the coords at the current tick</li>
+ <li>X:Y (i.e. "1:1") Finds a galaxy</li>
+</ul>
--- /dev/null
+[% META title = 'Galaxy stats' %]
+[% PROCESS inc/stats.tt2 %]
+<div class="leftinfo">
+<img class="graph" src="[% c.uri_for('/graphs/galaxystats',g.x,g.y,STICK) %]" alt="stats" height="300" width="500">
+<img class="graph" src="[% c.uri_for('/graphs/galaxyranks',g.x,g.y,STICK) %]" alt="ranks" height="300" width="500">
+</div>
--- /dev/null
+[% META title = 'Planet stats' %]
+[% PROCESS inc/stats.tt2 %]
+
+[% IF planetdata %]
+<div class="leftinfo">
+<table>
+ <tr><th>Tick</th><th>Type</th><th>Amount</th></tr>
+ [% FOR pd IN planetdata %]
+ <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td>[% pd.tick %]</td>
+ <td>[% pd.category %] [% pd.name %]</td>
+ <td>[% comma(pd.amount) %]</td>
+ </tr>
+ [% END %]
+</table>
+</div>
+[% END %]
+<div class="leftinfo">
+<table>
+ <tr><th>Tick</th><th>Value</th><th>Gain</th></tr>
+[% FOR v IN values %]
+ <tr>
+ <td>[% v.tick %]</td><td>[% v.value %]</td>
+ <td class="[% v.gain < 0 ? 'Attack' : 'Defend' %]">[% v.gain %]</td>
+ </tr>
+[% END %]
+</table>
+</div>
+<div class="leftinfo">
+<table>
+[% IF scans %]
+ <tr><th>Tick</th><th>Scan</th></tr>
+ [% FOR s IN scans %]
+ <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td>[% s.tick %]</td>
+ <td><a href="http://game.planetarion.com/showscan.pl?scan_id=[% s.scan_id %]" rel="external">[% s.type %]</a></td>
+</tr>
+ [% END %]
+[% END %]
+ <tr><th>Tick</th><th>Coords</th></tr>
+[% FOR coords IN oldcoords %]
+ <tr>
+ <td>[% coords.tick %]</td>
+ <td>[% coords.x %]:[% coords.y %]:[% coords.z %]</td>
+ </tr>
+[% END %]
+</table>
+</div>
+[% IF outgoings %]
+<div class="leftinfo">
+<p>Outgoing fleets</p>
+ [% PROCESS inc/missionlist.tt2 missions=outgoings %]
+<p>Incoming fleets</p>
+ [% PROCESS inc/missionlist.tt2 missions=incomings %]
+</div>
+[% END %]
+
+<div class="leftinfo">
+<img class="graph" src="[% c.uri_for('/graphs/planetstats',p.id,STICK) %]" alt="stats" height="300" width="500">
+<img class="graph" src="[% c.uri_for('/graphs/planetranks',p.id,STICK) %]" alt="ranks" height="300" width="500">
+</div>
--- /dev/null
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+BEGIN { use_ok 'Catalyst::Test', 'NDWeb' }
+BEGIN { use_ok 'NDWeb::Controller::Stats' }
+
+ok( request('/stats')->is_success, 'Request should succeed' );
+
+
+++ /dev/null
-<p><TMPL_IF Arbiter><TMPL_VAR NAME=Arbiter><TMPL_ELSE><a href="/<TMPL_VAR NAME=PAGE>?cmd=arbiter&coords=<TMPL_VAR ESCAPE=URL NAME=Coords>">Do arbiter check on gal</a></TMPL_IF></p>
-
-<table class="stats">
- <tr align="center"><th colspan="4">Rank</th>
- </tr>
- <tr>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=sizerank">Size</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=scorerank">Score</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=valuerank">Value</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=xprank">XP</a></th>
- <th>Coords</th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=planets">Planets</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=sizerank">Size</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=scorerank">Score</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=valuerank">Value</a></th>
- <th><a href="/<TMPL_VAR NAME=PAGE>?offset=<TMPL_VAR NAME=Offset>&order=xprank">XP</a></th>
- </tr>
- <TMPL_LOOP Galaxies>
- <tr align="right" class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td title="<TMPL_VAR NAME=SizeRank_Gain_day> Today | <TMPL_VAR NAME=SizeRank_Gain> Tick"><TMPL_VAR NAME=SizeRank> <img src="/images/<TMPL_VAR NAME=SizeRankImg>.png" alt="<TMPL_VAR NAME=SizeImg>"/> </td>
- <td title="<TMPL_VAR NAME=ScoreRank_Gain_day> Today | <TMPL_VAR NAME=ScoreRank_Gain> Tick"><TMPL_VAR NAME=ScoreRank> <img src="/images/<TMPL_VAR NAME=ScoreRankImg>.png" alt="<TMPL_VAR NAME=ScoreImg>"/> </td>
- <td title="<TMPL_VAR NAME=ValueRank_Gain_day> Today | <TMPL_VAR NAME=ValueRank_Gain> Tick"><TMPL_VAR NAME=ValueRank> <img src="/images/<TMPL_VAR NAME=ValueRankImg>.png" alt="<TMPL_VAR NAME=ValueImg>"/> </td>
- <td title="<TMPL_VAR NAME=XPRank_Gain_day> Today | <TMPL_VAR NAME=XPRank_Gain> Tick"><TMPL_VAR NAME=XPRank> <img src="/images/<TMPL_VAR NAME=XPRankImg>.png" alt="<TMPL_VAR NAME=XPImg>"/> </td>
-
- <td><a href="/check?coords=<TMPL_VAR NAME=X>:<TMPL_VAR NAME=Y>"><TMPL_VAR NAME=X>:<TMPL_VAR NAME=Y></a></td>
- <td title="<TMPL_VAR NAME=Planets_Gain_day> Today | <TMPL_VAR NAME=Planets_Gain> Tick"><TMPL_VAR NAME=Planets> <img src="/images/<TMPL_VAR NAME=PlanetsImg>.png" alt="<TMPL_VAR NAME=PlanetsImg>"/> </td>
- <td title="<TMPL_VAR NAME=Size_Gain_day> Today | <TMPL_VAR NAME=Size_Gain> Tick"><TMPL_VAR NAME=Size> <img src="/images/<TMPL_VAR NAME=SizeImg>.png" alt="<TMPL_VAR NAME=SizeImg>"/> </td>
- <td title="<TMPL_VAR NAME=Score_Gain_day> Today | <TMPL_VAR NAME=Score_Gain> Tick"><TMPL_VAR NAME=Score> <img src="/images/<TMPL_VAR NAME=ScoreImg>.png" alt="<TMPL_VAR NAME=ScoreImg>"/> </td>
- <td title="<TMPL_VAR NAME=Value_Gain_day> Today | <TMPL_VAR NAME=Value_Gain> Tick"><TMPL_VAR NAME=Value> <img src="/images/<TMPL_VAR NAME=ValueImg>.png" alt="<TMPL_VAR NAME=ValueImg>"/> </td>
- <td title="<TMPL_VAR NAME=XP_Gain_day> Today | <TMPL_VAR NAME=XP_Gain> Tick"><TMPL_VAR NAME=XP> <img src="/images/<TMPL_VAR NAME=XPImg>.png" alt="<TMPL_VAR NAME=XPImg>"/> </td>
-
- </tr>
- </TMPL_LOOP>
-</table>
-
-<table>
- <tr align="center"><th colspan="4">Rank</th>
- </tr>
- <tr><th>Size</th><th>Score</th><th>Value </th> <th>XP</th><th>Coords</th><th>Planet</th><th>Race</th><th>Gov</th><th>Size</th><th>Score</th><th>Value </th>
- <th>XP</th><th>Fleet (Resource) value</th><TMPL_IF isBC><th>Nick</th><th>Hit us</th><th>Alliance</th></TMPL_IF>
- </tr>
- <TMPL_LOOP GPlanets>
- <tr align="right" class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
-
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=SizeRank_Gain_day> Today | <TMPL_VAR NAME=SizeRank_Gain> Tick"><TMPL_VAR NAME=SizeRank> <img src="/images/<TMPL_VAR NAME=SizeRankImg>.png" alt="<TMPL_VAR NAME=SizeImg>"/> </td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=ScoreRank_Gain_day> Today | <TMPL_VAR NAME=ScoreRank_Gain> Tick"><TMPL_VAR NAME=ScoreRank> <img src="/images/<TMPL_VAR NAME=ScoreRankImg>.png" alt="<TMPL_VAR NAME=ScoreImg>"/> </td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=ValueRank_Gain_day> Today | <TMPL_VAR NAME=ValueRank_Gain> Tick"><TMPL_VAR NAME=ValueRank> <img src="/images/<TMPL_VAR NAME=ValueRankImg>.png" alt="<TMPL_VAR NAME=ValueImg>"/> </td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=XPRank_Gain_day> Today | <TMPL_VAR NAME=XPRank_Gain> Tick"><TMPL_VAR NAME=XPRank> <img src="/images/<TMPL_VAR NAME=XPRankImg>.png" alt="<TMPL_VAR NAME=XPImg>"/> </td>
-
- <td align="left"><a href="/<TMPL_VAR NAME=PAGE>?coords=<TMPL_VAR NAME=Coords>"><TMPL_VAR NAME=Coords></a></td>
- <td align="center"><TMPL_VAR NAME=Planet></td>
- <td align="center"><TMPL_VAR NAME=Race></td>
- <td align="center"><TMPL_VAR NAME=Gov></td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=Size_Gain_day> Today | <TMPL_VAR NAME=Size_Gain> Tick"><TMPL_VAR NAME=Size> <img src="/images/<TMPL_VAR NAME=SizeImg>.png" alt="<TMPL_VAR NAME=SizeImg>"/> </td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=Score_Gain_day> Today | <TMPL_VAR NAME=Score_Gain> Tick"><TMPL_VAR NAME=Score> <img src="/images/<TMPL_VAR NAME=ScoreImg>.png" alt="<TMPL_VAR NAME=ScoreImg>"/> </td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=Value_Gain_day> Today | <TMPL_VAR NAME=Value_Gain> Tick"><TMPL_VAR NAME=Value> <img src="/images/<TMPL_VAR NAME=ValueImg>.png" alt="<TMPL_VAR NAME=ValueImg>"/> </td>
- <td style="padding-left: 0.5em" title="<TMPL_VAR NAME=XP_Gain_day> Today | <TMPL_VAR NAME=XP_Gain> Tick"><TMPL_VAR NAME=XP> <img src="/images/<TMPL_VAR NAME=XPImg>.png" alt="<TMPL_VAR NAME=XPImg>"/> </td>
- <td align="center"><TMPL_VAR NAME=FleetValue> (<TMPL_VAR NAME=ResValue>)</td>
- <TMPL_IF isBC>
- <td align="center" class="<TMPL_VAR NAME=Planet_Status>"><a href="intel?coords=<TMPL_VAR NAME=Coords>"><TMPL_VAR NAME=Nick>(<TMPL_VAR NAME=Planet_Status>)</a></td>
- <td align="center"><TMPL_VAR NAME=Hit_Us></td>
- <td align="center" class="<TMPL_VAR NAME=Relationship>"><TMPL_VAR NAME=Alliance></td>
- </TMPL_IF>
- </tr>
-
- </TMPL_LOOP>
-</table>
-<TMPL_IF OnePlanet>
-<div class="leftinfo">
-<table>
-<tr><th>Tick</th><th>Type</th>Amount</tr>
-<TMPL_LOOP PlanetData>
-<tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td><TMPL_VAR NAME=Tick></td>
- <td><TMPL_VAR NAME=Category> <TMPL_VAR NAME=Name></td>
- <td><TMPL_VAR NAME=Amount></td>
-</tr>
-</TMPL_LOOP>
-</table>
-</div>
-<div class="leftinfo">
-<table>
-<tr><th>Tick</th><th>Value</th><th>Gain</th></tr>
-<TMPL_LOOP Values>
-<tr>
- <td><TMPL_VAR NAME=Tick></td><td><TMPL_VAR NAME=Value></td>
- <td class="<TMPL_VAR NAME=Class>"><TMPL_VAR NAME=Gain></td>
-</tr>
-</TMPL_LOOP>
-</table>
-</div>
-<div class="leftinfo">
-<table>
-<tr><th>Tick</th><th>Scan</th></tr>
-<TMPL_LOOP Scans>
-<tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td><TMPL_VAR NAME=Tick></td>
- <td><a href="http://game.planetarion.com/showscan.pl?scan_id=<TMPL_VAR NAME=Scan_id>"><TMPL_VAR NAME=Type></a></td>
-</tr>
-</TMPL_LOOP>
-<tr><th>Tick</th><th>Coords</th></tr>
-<TMPL_LOOP OldCoords>
-<tr>
- <td><TMPL_VAR NAME=Tick></td><td><TMPL_VAR NAME=X>:<TMPL_VAR NAME=Y>:<TMPL_VAR NAME=Z></td>
-</tr>
-</TMPL_LOOP>
-</table>
-</div>
-<div class="leftinfo">
-<table>
- <tr><th>Target</th><th>Name</th><th>Mission</th><th>Landing tick</th><th>ETA</th><th>Amount</th></tr>
- <TMPL_LOOP Missions>
- <tr align="center" class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>" onclick="toggleVisibility('fleet<TMPL_VAR NAME=Id>')">
- <td><a href="/check?coords=<TMPL_VAR NAME=Target>"><TMPL_VAR NAME=Target></a></td>
- <td><TMPL_VAR NAME=Name></td>
- <td class="<TMPL_VAR NAME=Class>"><TMPL_VAR NAME=Mission></td><td><TMPL_VAR NAME=LandingTick></td>
- <td><TMPL_VAR NAME=ETA></td><td><TMPL_VAR NAME=Amount></td>
- </tr>
- <tr id="fleet<TMPL_VAR NAME=Id>" style="z-index:1; display:none;">
- <td/>
- <td colspan="5"><table>
- <TMPL_LOOP Ships>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td><TMPL_VAR NAME=Ship></td><td><TMPL_VAR NAME=Amount></td>
- </tr>
- </TMPL_LOOP>
- </table></td>
- </tr>
- </TMPL_LOOP>
-</table>
-<table>
- <tr><th>Sender</th><th>Name</th><th>Mission</th><th>Landing tick</th><th>ETA</th><th>Amount</th></tr>
- <TMPL_LOOP Incomings>
- <tr align="center" class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>" onclick="toggleVisibility('fleet<TMPL_VAR NAME=Id>')">
- <td><a href="/check?coords=<TMPL_VAR NAME=Sender>"><TMPL_VAR NAME=Sender></a></td>
- <td><TMPL_VAR NAME=Name></td>
- <td class="<TMPL_VAR NAME=Class>"><TMPL_VAR NAME=Mission></td><td><TMPL_VAR NAME=LandingTick></td>
- <td><TMPL_VAR NAME=ETA></td><td><TMPL_VAR NAME=Amount></td>
- </tr>
- <tr id="fleet<TMPL_VAR NAME=Id>" style="z-index:1; display:none;">
- <td/>
- <td colspan="5"><table>
- <TMPL_LOOP Ships>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td><TMPL_VAR NAME=Ship></td><td><TMPL_VAR NAME=Amount></td>
- </tr>
- </TMPL_LOOP>
- </table></td>
- </tr>
- </TMPL_LOOP>
-</table>
-</div>
-</TMPL_IF>
-<div class="leftinfo">
-<img class="graph" src="/graph/stats/<TMPL_VAR NAME=Coords>" alt="stats" height="300" width="500"/>
-<img class="graph" src="/graph/ranks/<TMPL_VAR NAME=Coords>" alt="ranks" height="300" width="500"/>
-</div>