#!/usr/bin/perl
#
# Copyright (c) 2000,2001 - Stein Vråle
#
# 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
#############################################################################
#
# Script: xsw-score.pl
# 
# Contact: Stein Vråle <stein@terminator.net>
# Homepage: http://xsw.terminator.net/
#
# Description: 
#
# This script will generate HTML reports using data from the XSW server export files.
# It will currently read the files:
#      generic.scores - player stats
#      generic.conlist - player connections
#      generic.events - universe events
#
# Configuration:
#
# Edit the local config options
#

### MODULES
use strict;
use CGI qw(:standard);

### LOCAL CONFIG
my $universename = "Terminus";
my $bgimg = "/img/stars.gif";

### STANDARD CONFIG
my $logdir = "/home/swserv/universe/public_html"; 
my $scorefile = "$logdir/generic.scores";
my $connectfile = "$logdir/generic.conlist";
my $eventfile = "$logdir/generic.events";
my $colonyfile = "$logdir/ecoprod/score.html";

### DEFS
my $VERSION=0.12.2;

my %players;
my %logins;
my %kia;
my %events;
my %empires;

my @names;
my @fields;

my $sortfield;
my $pagename;
my $show_inactive;

my @milgrade = ("Emperor","Marshal","Admiral","Commodore","Colonel","Major","Captain","Lieutenant","Ensign","Cadet","Civilian");
my @milcode  = ("Emp","Msh","Adm","Com","Col","Maj","Cpt","Ltn","Ens","Cad","Civ");

my $active_players;

### BEGIN

# Check parameters

# Which sortfield?
if (param('sortfield') ne '') { 
	$sortfield = param('sortfield'); }
else { 
	$sortfield = "total_score" }

# Show inactive
if (param('show_inactive') ne '') { 
	$show_inactive = param('show_inactive'); }
else { 
	$show_inactive = 0 }

# Which page?
if (param('page') eq 'logins')
{
    $pagename = "Connections";
    &read_logins;
    &read_scores;
	&calculate_empires;
	&calc_grades;
    &print_logins;
}
elsif (param('page') eq 'kia')
{
    $pagename = "Killed In Action";
    &read_kia;
    &read_scores;
    &print_kia;
}
elsif (param('page') eq 'events')
{
    $pagename = "Events";
    &read_events;
    &print_events;
}
elsif (param('page') eq 'empires')
{
    $pagename = "Empires";
    &read_scores;
    &calculate_empires;
    &print_empires;
}
elsif (param('page') eq 'init')
{
    &read_scores;
    &print_init;
}
elsif (param('page') eq 'panel')
{
    $pagename = "Panel";
    &read_logins;
    &read_scores;
	&read_events;
	&read_kia;
    &calculate_empires;
	&calc_grades;
    &print_panel;
}
elsif (param('page') eq 'nukepanel')
{
    $pagename = "Panel";
    &read_logins;
    &read_scores;
    &calculate_empires;
	&calc_grades;
    &print_nukepanel;
}
elsif (param('page') eq 'nukelog')
{
    $pagename = "NukeLog";
	&read_events;
	&read_kia;
    &print_nukelog;
}
else
{
    $pagename = "Scores";
    &read_scores;
	&calculate_empires;
	&calc_grades;
    &print_scores;
}

exit(0);

### END


### SUBS

### Read colony stats
sub read_colonies{

    open COLONIES,"$colonyfile";
    
    while(<COLONIES>) {   
		chop;
		next if /^#/;
		next if /^\s*$/;
		
        my @vals;
        @vals = split /\t/ ;
		$players{$vals[0]}->{'colonies'} = $vals[1];
    }

    close COLONIES;
}

### Read kia events into kia array
sub read_kia{

    open EVENTS,"$eventfile";
    
    while(<EVENTS>) {
        my @vals;
        @vals = split /;/ ;
        if ($vals[1] == 40 || $vals[1] == 41 || $vals[1] == 0) # KIA event
        {   
            $kia{$vals[0]}->{'time'} = $vals[0];
            $kia{$vals[0]}->{'code'} = $vals[1];
            $kia{$vals[0]}->{'msg'} = $vals[2];
        }
    }

    close EVENTS;
}

### Analyze and print kia_events
sub print_kia{
    
    &print_htmlhead;
    
    print qq[<TABLE cellspacing=0 BORDER=0 WIDTH="90%">];
    print qq[<TR>];
    print qq[<TH>#</TH>];
    print qq[<TH>Time</TH>];
    print qq[<TH>Code</TH>];
    print qq[<TH>Message</TH></TR>\n];
    
    my $num;
    my $event;

    foreach $event (sort { $kia{$b}->{'time'} <=> $kia{$a}->{'time'} } keys %kia) 
    {           
        $num++;

		if ($num > 500) { last; }

        print qq[<TR><TD>];
        print $num;
        print "</TD><TD>";

		my @time = gmtime($kia{$event}->{'time'});
		$time[5] += 1900;
		$time[4]++;
		my $gmt = "$time[2]:$time[1]:$time[0]";

        print $gmt;
	print "</TD>";

        if ($kia{$event}->{'code'} == 40 ) # Destroyed
        {
            print qq[<TD BGCOLOR="#FFFF00">];
        }
        elsif ($kia{$event}->{'code'} == 41) # Player
        {
            print qq[<TD BGCOLOR="#FF3333">];
        }        
		elsif ($kia{$event}->{'code'} == 0) # Colony
        {
            print qq[<TD BGCOLOR="#3366FF">];
        }
        else 
        {
            print "<TD>";
        }
        print $kia{$event}->{'code'};
        print "</TD><TD>";
        print $kia{$event}->{'msg'};
	print "</TD></TR>";
    }
    
    print "</TABLE>";
    &print_htmltail;
}


### Read event file into event hash
sub read_events{

    my @vals;
    my $n = 0;

    open EVENTS,"tail -500 $eventfile |";

    while(<EVENTS>) {
        my @vals;
        $n++;
        @vals = split /;/ ;
        $events{$n}->{'time'} = $vals[0];
        $events{$n}->{'code'} = $vals[1];
        $events{$n}->{'msg'} = $vals[2];
#		my $match = $vals[2];
#		$match =~ /^Sector\((.*?)\)(.*?)\(.*by\s(.*?)\(.by\s(.*?)\(/;
#		$events{$n}->{'sector'} = $1;
#		$events{$n}->{'target'} = $2;
#		$events{$n}->{'weapon'} = $3;
#		$events{$n}->{'attacker'} = $4;            
    }
    
    close EVENTS;
}

### Print and analyze event hash
sub print_events{

    &print_htmlhead;

    print qq[<TABLE cellspacing=0 BORDER=0 WIDTH="90%">];
    print qq[<TR>];
    print qq[<TH>#</TH>];
    print qq[<TH>Time</TH>];
    print qq[<TH>Code</TH>];
    print qq[<TH>Event</TH></TR>];

    my $event;

    foreach $event (sort { $events{$b}->{'time'} <=> $events{$a}->{'time'} } keys %events) 
    {       
		if ($events{$event}->{'code'} == 22) # Launched weapon
		{ next; } # Skip this - not of any use/interest.

        print qq[<TR>];

        print "<TD>";
        print $event;

        print "</TD><TD>";

		my @time = gmtime($events{$event}->{'time'});
		$time[5] += 1900;
		$time[4]++;
#		my $gmt = "$time[5]-$time[4]-$time[3] $time[2]:$time[1]:$time[0]";
		my $gmt = "$time[2]:$time[1]:$time[0]";

        print $gmt;
	print "</TD>";

        if ($events{$event}->{'code'} == 40 || $events{$event}->{'code'} == 41) # Destroyed
        {
            print qq[<TD BGCOLOR="#FF3333">];
        }
        elsif ($events{$event}->{'code'} == 22) # Launched weapon
        {
            print qq[<TD BGCOLOR="#3366FF">];
        }           
        elsif ($events{$event}->{'code'} == 32 || $events{$event}->{'code'} == 30) # Hit
        {
            print qq[<TD BGCOLOR="#FFFF00">];
        }
        else
        {
            print "<TD>";
        }   
        
        print $events{$event}->{'code'};
        
        print "</TD><TD>";
        print $events{$event}->{'msg'};
	print "</TD>";
	print "</TR>";
#        print "<TD>";
#        print $events{$event}->{'sector'};
    }
    
    print "</TABLE>";
    &print_htmltail;
}

### Read connect file into login hash
sub read_logins{

    open LOGINS,"$connectfile";

    my $input = <LOGINS>;
    my $name;

    while(<LOGINS>) {
        my @vals;
        @vals = split /;/ ;
        $name = $vals[0];
        $name =~ s/\(.*//;

        # Read fields
        $logins{$name}->{'player'} = $name;
        $logins{$name}->{'duration'} = $vals[1];
        $logins{$name}->{'residency'} = $vals[2];
        $logins{$name}->{'client'} = $vals[3];
        
    }
    close LOGINS;
}

sub print_logins
{
    if (param('include') == 0 ) { &print_htmlhead; }
    else { print header;}

    print qq[<TABLE cellspacing=0 BORDER=0 WIDTH="90%">];
    print qq[<TR>\n];
    print qq[<TH>#</TH>];
    print qq[<TH>Rank</TH>];
    print qq[<TH>Player</TH>];
    print qq[<TH>Duration</TH>];
    print qq[<TH>Empire</TH>];
    print qq[<TH>Score</TH>];
    print qq[<TH>Kills</TH>];
    print qq[<TH>Ratio</TH>];
    print "</TR>\n";

# Print ROWS
    my $n = 0;
    my $login;
    my $s;
    my $m;
    my $h;

    foreach $login (keys %logins) {
        
        $n++;
        
        print "<TR>\n"; 
        print "<TD>";
        print "$players{$login}->{'rank'}";
		print "<TD>";print $players{$login}->{'milgrade'};
        print "<TD>";print $logins{$login}->{'player'};

        print "<TD ALIGN=RIGHT>";print $logins{$login}->{'duration'};   
#       print "<TD>";print $logins{$login}->{'client'};

        # Empire
        print "<TD";
        my $empire = $players{$login}->{'empire'};
        if ($empire eq "TGI") {print " BGCOLOR=#33FF33";}
        elsif ($empire eq "PKU") {print " BGCOLOR=#FFFF00";}
        elsif ($empire eq "WFG") {print " BGCOLOR=#3366FF";}
        elsif ($empire eq "CMC") {print " BGCOLOR=#FF3333";}
        else {print " BGCOLOR=##0F0000"}
        print ">";
        print "$empire";    

        #Total score
        print "<TD ALIGN=RIGHT>";
        print   $players{$login}->{'total_score'};
        
        # Kills
        print "<TD ALIGN=RIGHT>";
        print $players{$login}->{'kills'};  
        
        # Ratio
        print "<TD ALIGN=RIGHT>";print  $players{$login}->{'damage_ratio'};

        print "\n";
    }
    
    print "</TABLE>";
    if (param('include') == 0 ) { &print_htmltail }
}

sub print_panel
{

	my @time = gmtime();
	$time[5] += 1900;
	$time[4]++;
	my $startime = "$time[2]:$time[1]:$time[0]";
	my $stardate = "$time[5]-$time[4]-$time[3]";

    print header;

    print <<EOT;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Refresh" content="60">
<title>XSW $universename</title>
<link rel="stylesheet" href="/css/xsw.css">
<base target="terminus">
</head>
<body class=panel>

<a href="http://$ENV{'HTTP_HOST'}/">$ENV{'HTTP_HOST'}</a>
<br>
$stardate $startime
<p>
  <A HREF="/dot/StarLog/">news</A><BR>
  <A HREF="$ENV{'SCRIPT_NAME'}">scores</A><BR>
  <A HREF="/bridge/info.html">info</A><BR>
  <A HREF="/bridge/stats.html">logs</A><BR>
  <A HREF="/map/generic-map.html">map</A><BR>
  <A HREF="/download/">downloads</A>

<p>
EOT

print qq[<A HREF="$ENV{'SCRIPT_NAME'}?page=logins">logins</a><br>\n];
#print "<p>";

    my $n = 0;
    my $login;
    my $s;
    my $m;
    my $h;

    foreach $login (keys %logins) {
		$n++;
        
        my $empire = $players{$login}->{'empire'};

#		print "$players{$login}->{'rank'}";
		print $players{$login}->{'milcode'};
		print '&nbsp;';
		print $logins{$login}->{'player'};

		print " [<font";

        if ($empire eq "TGI") {print qq[ color="#33FF33">];}
        elsif ($empire eq "PKU") {print qq[ color="#FFFF00">];}
        elsif ($empire eq "WFG") {print qq[ color="#3366FF">];}
        elsif ($empire eq "CMC") {print qq[ color="#FF3333">];}
        else {print qq[ color="#AAAAAA">];}

        print "$empire";
	
		print "</font>]";

#		print $logins{$login}->{'duration'};   


#        print ">";
#        print   $players{$login}->{'total_score'};
#        print $players{$login}->{'kills'};  
#        print  $players{$login}->{'damage_ratio'};

        print "<br>\n";
    }

	if ($n == 0) {print "(none)\n";};



	print "<p>";
	print qq[<A HREF="$ENV{'SCRIPT_NAME'}?page=kia">latest</a><br>\n];
#	print "<p>";

    my $event;
	my $msg;
	my $num = 0 ;

    foreach $event (sort { $kia{$b}->{'time'} <=> $kia{$a}->{'time'} } keys %kia) 
    {           
        $num++;

		if ($num <= 10 ) {

#        print $num;

		my @time = gmtime($kia{$event}->{'time'});
		$time[5] += 1900;
		$time[4]++;
		my $gmt = "$time[2]:$time[1]:$time[0]";

        if ($kia{$event}->{'code'} == 40 ) # Destroyed
        {
            print qq[<font color="#FFFF00">];
        }
        elsif ($kia{$event}->{'code'} == 41) # Player
        {
            print qq[<font color="#FF3333">];
        }        
		elsif ($kia{$event}->{'code'} == 0) # Colony
        {
            print qq[<font color="#3366FF">];
        }
		else
        {
            print qq[<font color="#AAAAAA">];
        }
        print "($gmt) ";

		print "</font>";

        $msg = $kia{$event}->{'msg'};
		$msg =~ s/at\s(.*)//;

		print $msg;

#		print "</small>";

		print "<br>";

	}



}
    
   	print "</body></html>";
}


sub print_nukepanel
{
    print header;

	print qq[\n<div class=panel align=right>\n];

#	print qq[<A HREF="$ENV{'SCRIPT_NAME'}?page=logins">logins</a><br>\n];

    my $n = 0;
    my $login;

    foreach $login (keys %logins) {
		$n++;
        
        my $empire = $players{$login}->{'empire'};

#		print "$players{$login}->{'milcode'} ";

		print "$logins{$login}->{'player'} ";

		print "[<font";

        if ($empire eq "TGI") {print qq[ color="#33FF33">];}
        elsif ($empire eq "PKU") {print qq[ color="#FFFF00">];}
        elsif ($empire eq "WFG") {print qq[ color="#3366FF">];}
        elsif ($empire eq "CMC") {print qq[ color="#FF3333">];}
        else {print qq[ color="#AAAAAA">];}

        print "$empire</font>]<br>\n";
    }

	if ($n == 0) {print "(none)\n";};

	print qq[</div>\n];
}

sub print_nukelog {

    print header;

	print qq[\n<div class=panel>\n];

    my $event;
	my $msg;
	my $num = 0 ;

    foreach $event (sort { $kia{$b}->{'time'} <=> $kia{$a}->{'time'} } keys %kia)
	{
        $num++;
		if ($num <= 5 ) {
			my @time = gmtime($kia{$event}->{'time'});
			$time[5] += 1900;
			$time[4]++;
			my $gmt = "$time[2]:$time[1]:$time[0]";

	        if ($kia{$event}->{'code'} == 40 ) # Destroyed
			{
        	    print qq[<font color="#FFFF00">];
       	 	}	
        	elsif ($kia{$event}->{'code'} == 41) # Player
        	{
            	print qq[<font color="#FF3333">];
        	}        
			elsif ($kia{$event}->{'code'} == 0) # Colony
        	{
            	print qq[<font color="#3366FF">];
        	}
			else
        	{
            	print qq[<font color="#AAAAAA">];
        	}

			print "($gmt)";
			print "</font> ";

        	$msg = $kia{$event}->{'msg'};
			$msg =~ s/at\s(.*)//;
			$msg =~ s/\, killed\s(.*)//;

			print $msg . "<br>\n";
		}

	}
		print "</div>\n";
}


### Read scorefile into score hash
sub read_scores{

	&read_colonies;

	$active_players = 0;

    open SCORE,"$scorefile";

    my $input = <SCORE>;
    my $alias;
	my $rmu;
	
    @fields = split /;/ ;

    my $playernum=0;

    while(<SCORE>) {
        last if $_ =~ /END XSW Stats/;
        my @vals;
        @vals = split /;/ ;
        $alias = $vals[0];
        $names[$playernum] = $alias;
        
        # Read fields
        
        $players{$alias}->{"player"} = $vals[0];
        $players{$alias}->{"empire"} = $vals[1];
        $players{$alias}->{"kills"} = $vals[4];
        $players{$alias}->{"credits"} = int ( $vals[5] );
        $players{$alias}->{"damage_given"} = int ( $vals[2] );
        $players{$alias}->{"damage_recieved"} = int ( $vals[3] );
        $players{$alias}->{"rmu"} = int ( $vals[6] );
        $players{$alias}->{"rmu_max"} = $vals[7];
        
        # Calculate damage ratio
        if ( ($players{$alias}->{'damage_given'} > 0) || ($players{$alias}->{'damage_recieved'} > 0) ) 
        { 
            $players{$alias}->{'damage_ratio'} = int ( ( ($players{$alias}->{'damage_given'} + 1000 ) / 
														 ($players{$alias}->{'damage_recieved'} + 1000) * 100)
													   ) / 100;
        }
        else
        {
            $players{$alias}->{'damage_ratio'} = 0; 
        }

		# Colonies
		if ($players{$alias}->{'colonies'} eq '') {
			$players{$alias}->{'colonies'} = 0;
		}
        
        ### Calculate pseudo score
        # ( (credits/10000 + rmu/10 + kills ) * (1 + damageratio/10) ) + 1
        
        if (($players{$alias}->{'credits'} == 1000000 && 
		$players{$alias}->{'damage_ratio'} == 0 &&
		$players{$alias}->{'rmu'} == 0) ||
		$players{$alias}->{'empire'} eq 'ADM' || 
		$players{$alias}->{'empire'} eq 'IND' ||
		$players{$alias}->{'empire'} eq 'BORG' ||
		$players{$alias}->{'empire'} eq 'BOT' ||
		$players{$alias}->{'empire'} eq 'NONE' ||
		$players{$alias}->{'empire'} eq 'GST' ||
		$players{$alias}->{'empire'} eq '')
	{	
		# Inactive player
		$players{$alias}->{'total_score'} = 0;
        }
        else
        {
		$active_players++;
		$rmu = $players{$alias}->{'rmu'};
		#if ($rmu >= 1) {$rmu -= 1;} # Temporary 
		$players{$alias}->{'total_score'} = 
int (( 
#($players{$alias}->{"credits"} / 10000) + 
($rmu) +
($players{$alias}->{"kills"} * 2) + 
($players{$alias}->{'colonies'} * 4)
#													   ($players{$alias}->{'damage_given'} / 1000)
) *
( 1 + ($players{$alias}->{'damage_ratio'}) / 10 )
) + 1;

        }
        $playernum++;   
    }
    close SCORE;
}

sub calc_grades{
	
	my $player;
	my $empire;
	my $count;
	my $rank;
	my $relrank;
	my $grade;
	
    sub sortscore {
		$players{$b}->{'total_score'} <=> $players{$a}->{'total_score'}; 
    }

$rank = 1;

foreach $player ( sort sortscore keys %players ) {

	if ($players{$player}->{'total_score'} == 0){ # Inactive or no scores
		$players{$player}->{'milgrade'} = "Tourist";
		$players{$player}->{'milcode'} = "Tou";
		$players{$player}->{'rank'} = 0;
		next;
	}

	$players{$player}->{'rank'} = $rank;

	$relrank = ( $active_players - $rank) / ($active_players / 45.0 );

	$players{$player}->{'level'} = $relrank;

	$empire = $players{$player}->{'empire'};
	
	if ($players{$player}->{'total_score'} >= $empires{$empire}->{'emperor_score'}) {
		$grade = 0;
	}
	elsif ($relrank > 44) {
		$grade = 1;
	}	
	elsif ($relrank > 43) {
		$grade = 2;
	}
	elsif ($relrank > 41) {
		$grade = 3;
	}
	elsif ($relrank > 38) {
		$grade = 4;
	}	
	elsif ($relrank > 34) {
		$grade = 5;
	}
	elsif ($relrank > 29) {
		$grade = 6;
	}
	elsif ($relrank > 23) {
		$grade = 7;
	}
	elsif ($relrank > 16) {
		$grade = 8;
	}
	elsif ($relrank > 8) {
		$grade = 9;
	}
	elsif ($relrank > 1) {
		$grade = 10;
	}
	else {
		$grade = 10;
	}

	$players{$player}->{'milgrade'} = $milgrade[$grade];
	$players{$player}->{'milcode'} = $milcode[$grade];

	$rank++;
}

}

### Print scores from hash
sub print_scores{
    
    &print_htmlhead;
    
	print qq[<TABLE BORDER=0 WIDTH="90%">];
	print qq[ <TR>\n];
	print qq[  <TH>#</TH>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=empire&amp;show_inactive=$show_inactive">Empire</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=milgrade&amp;show_inactive=$show_inactive">Title</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=player&amp;show_inactive=$show_inactive">Name</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=total_score&amp;show_inactive=$show_inactive">Score</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=kills&amp;show_inactive=$show_inactive">Kills</a></th>]; 
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=colonies&amp;show_inactive=$show_inactive">Col</a></th>];
	print qq[  <TH align=right><A HREF="xsw-score.pl?sortfield=credits&amp;show_inactive=$show_inactive">Credits</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=rmu&amp;show_inactive=$show_inactive">RMU</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=damage_given&amp;show_inactive=$show_inactive">Dmg+</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=damage_recieved&amp;show_inactive=$show_inactive">Dmg-</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=damage_ratio&amp;show_inactive=$show_inactive">Dmg*</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=damage_ratio&amp;show_inactive=$show_inactive">X</a></th>];
	print qq[  <TH><A HREF="xsw-score.pl?sortfield=damage_ratio&amp;show_inactive=$show_inactive">%</a></th>];

	print qq[</TR>\n];

# Print ROWS
    
    my $n = 0;
    my $player;

    sub xswsort {
        if ($sortfield eq 'empire' || $sortfield eq 'player')
        {
            $players{$a}->{$sortfield} cmp $players{$b}->{$sortfield}
			or
			$players{$a}->{'rank'} <=> $players{$b}->{'rank'}
        }
        else 
        { 
            $players{$b}->{$sortfield} <=> $players{$a}->{$sortfield}
			or
			$players{$a}->{'rank'} <=> $players{$b}->{'rank'}
        }
    }

foreach $player ( sort xswsort keys %players ) {

    my $name = $players{$player}->{'player'};
 
    # Skip inactive players?
    if ($players{$name}->{'total_score'} == 0  && $show_inactive == 0 ) { next; }

    # Skip NONE players
    if ($players{$name}->{'empire'} eq 'NONE') { next; }    

    # Skip BOT players
    if ($players{$name}->{'empire'} eq 'BOT') { next; }

    # Skip ADM players
    if ($players{$name}->{'empire'} eq 'ADM') { next; }   

    # Skip BORG players
    if ($players{$name}->{'empire'} eq 'BORG') { next; }

    # Skip IND players
    if ($players{$name}->{'empire'} eq 'IND') { next; }

    # Skip undefined empire
    if ($players{$name}->{'empire'} eq '') { next; }

    $n++;
    
    print qq[<TR>\n]; 
    print qq[<TD ALIGN="RIGHT">];print $players{$name}->{'rank'};

    print qq[</TD><TD ALIGN="CENTER"];

    # Empire
    my $empire = $players{$name}->{'empire'};
    if ($empire eq '') {$empire="NONE"};
    if ($empire eq "TGI") {print qq[ BGCOLOR="#33FF33"];}
    elsif ($empire eq "PKU") {print qq[ BGCOLOR="#FFFF00"];}
    elsif ($empire eq "WFG") {print qq[ BGCOLOR="#3366FF"] ;}
    elsif ($empire eq "CMC") {print qq[ BGCOLOR="#FF3333"];}
    else {print qq[ BGCOLOR="#0F0000"]};

    print ">";
    print "$empire";    


    print qq[</TD><TD ALIGN="RIGHT">];print $players{$name}->{'milgrade'};
    print qq[</TD><TD ALIGN="LEFT">];print $players{$name}->{'player'};


    #Total score
    print "</TD><TD ALIGN=RIGHT>";print  $players{$name}->{'total_score'};

    # Kills
    print "</TD><TD ALIGN=RIGHT>";
    print $players{$name}->{'kills'};   

	# Colonies
	print "</TD><TD ALIGN=RIGHT>";print $players{$name}->{'colonies'};

    # Score
    my $cash = int($players{$name}->{'credits'} / 1000);	
    print "</TD><TD ALIGN=RIGHT>$cash k";
    print "</TD><TD ALIGN=RIGHT>";print $players{$name}->{'rmu'};

    # Damage
    print "</TD><TD ALIGN=RIGHT>";print $players{$name}->{'damage_given'};    
    print "</TD><TD ALIGN=RIGHT>";print $players{$name}->{'damage_recieved'};

    print "</TD><TD ALIGN=RIGHT>";print  $players{$name}->{'damage_ratio'};

	# Pseudorank
	my $prank;

	$prank = int ( (
	( $players{$name}->{'kills'} / $empires{'sum'}->{'kills'} ) +
#	( $players{$name}->{'credits'} / $empires{'sum'}->{'credits'} ) +
	( $players{$name}->{'colonies'} / $empires{'sum'}->{'colonies'} ) +		 
	( $players{$name}->{'rmu'} / $empires{'sum'}->{'rmu'} ) +
	( $players{$name}->{'damage_given'} / $empires{'sum'}->{'damage_given'} )
#	(1 - ( $players{$name}->{'damage_recieved'} /  $empires{'sum'}->{'damage_recieved'}) )
	) / 4 * 1000 * $active_players);

    print "</TD><TD ALIGN=RIGHT>"; print $prank;

    print "</TD><TD ALIGN=RIGHT>"; print  int( $prank / $active_players) / 10.0 ;

    print "</TD></TR>\n";
}

print "</TABLE>\n";
&print_htmltail;
}



sub calculate_empires{
	my $player;
	my $n;

	$empires{'TGI'}->{'emperor_score'} = 0;
	$empires{'CMC'}->{'emperor_score'} = 0;
	$empires{'PKU'}->{'emperor_score'} = 0;
	$empires{'WFG'}->{'emperor_score'} = 0;

foreach $player ( keys %players ) {
    
    my $name = $players{$player}->{'player'};
    
    # Skip NONE players
    if ($players{$name}->{'empire'} eq 'NONE') { next; }    

    # Skip BOT players
    if ($players{$name}->{'empire'} eq 'BOT') { next; }

    # Skip ADM players
    if ($players{$name}->{'empire'} eq 'ADM') { next; }   

    # Skip BORG players
    if ($players{$name}->{'empire'} eq 'BORG') { next; }

    # Skip IND players
    if ($players{$name}->{'empire'} eq 'IND') { next; }

    # Skip undefined empire
    if ($players{$name}->{'empire'} eq '') { next; }

    $n++;
    my $empire = $players{$name}->{'empire'};

	# Members
	$empires{$empire}->{'members'} += 1;

	# Emperor score
	if ($players{$name}->{'total_score'} > $empires{$empire}->{'emperor_score'}){
		$empires{$empire}->{'emperor_score'} = $players{$name}->{'total_score'};
	}

	# Active members
	if ($players{$name}->{'total_score'}) { 
		$empires{$empire}->{'active_members'} += 1;
	}
	else { 
        # Dont calculate score for inactive players
		next; 
	}

    # Pseudo score
    $empires{$empire}->{'total_score'} += $players{$name}->{'total_score'};

    # Kills
    $empires{$empire}->{'kills'} += $players{$name}->{'kills'};
    $empires{'sum'}->{'kills'} += $players{$name}->{'kills'};

    # Credits
    $empires{$empire}->{'credits'} += $players{$name}->{'credits'};
	$empires{'sum'}->{'credits'} += $players{$name}->{'credits'};

    # RMU
    $empires{$empire}->{'rmu'} += $players{$name}->{'rmu'};
    $empires{'sum'}->{'rmu'} += $players{$name}->{'rmu'};

    # Damage
    $empires{$empire}->{'damage_given'} += $players{$name}->{'damage_given'};
    $empires{'sum'}->{'damage_given'} += $players{$name}->{'damage_given'};
    $empires{$empire}->{'damage_recieved'} += $players{$name}->{'damage_recieved'};
    $empires{'sum'}->{'damage_recieved'} += $players{$name}->{'damage_recieved'};

	# Colonies
	$empires{$empire}->{'colonies'} += $players{$name}->{'colonies'};
	$empires{'sum'}->{'colonies'} += $players{$name}->{'colonies'};
}
}

### Print team scores from hash
sub print_empires{
    
    &print_htmlhead;
    
    print "<TABLE cellspacing=0 BORDER=0 WIDTH=90%>";
    print "<TR>\n";
    print "<TH>#</TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=empire>Empire</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=total_score>Score</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=colonies>Colonies</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=kills>Kills</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=credits>Credits</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=rmu>RMU</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=damage_given>Damage+</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=members>Members</a></TH>";  
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=active_members>Active</a></TH>";
    print "<TH><A HREF=xsw-score.pl?page=empires&amp;sortfield=total_score>Score/Active</a></TH>";
    print "</TR>\n";

# Print ROWS
    
    my $n = 0;
    my $empire;

    sub empiresort {
        $empires{$b}->{$sortfield} <=> $empires{$a}->{$sortfield}
	}
		
foreach $empire ( sort empiresort keys %empires ) {
    
    $n++;

	if ($empire eq "sum") { next } ;
    
    print "<TR>\n"; 
    print "<TD>$n</TD>\n";

    print "<TD ";
    # Empire
    if ($empire eq "TGI") {print " BGCOLOR=#33FF33";}
    elsif ($empire eq "PKU") {print " BGCOLOR=#FFFF00";}
    elsif ($empire eq "WFG") {print " BGCOLOR=#3366FF";}
    elsif ($empire eq "CMC") {print " BGCOLOR=#FF3333";}
    else {print " BGCOLOR=##0F0000"};

    print ">";
    print "$empire</TD>";    

    #Total score
    print "<TD ALIGN=RIGHT>";print  $empires{$empire}->{'total_score'};
	$empires{'total'}->{'total_score'} += $empires{$empire}->{'total_score'};
	
    print "</TD><TD ALIGN=RIGHT>";
    print $empires{$empire}->{'colonies'};
	$empires{'total'}->{'colonies'} += $empires{$empire}->{'colonies'};   

    # Kills
    print "</TD><TD ALIGN=RIGHT>";
    print $empires{$empire}->{'kills'};   
	$empires{'total'}->{'kills'} += $empires{$empire}->{'kills'};

    # Score
    print "</TD><TD ALIGN=RIGHT>";print $empires{$empire}->{'credits'};
	$empires{'total'}->{'credits'} += $empires{$empire}->{'credits'};

    print "</TD><TD ALIGN=RIGHT>";print $empires{$empire}->{'rmu'};
	$empires{'total'}->{'rmu'} += $empires{$empire}->{'rmu'};

    # Damage
    print "</TD><TD ALIGN=RIGHT>";print $empires{$empire}->{'damage_given'};    
	$empires{'total'}->{'damage_given'} += $empires{$empire}->{'damage_given'};

	# Members
	print "</TD><TD ALIGN=RIGHT>";print $empires{$empire}->{'members'};
	$empires{'total'}->{'members'} += $empires{$empire}->{'members'};

	print "</TD><TD ALIGN=RIGHT>";print $empires{$empire}->{'active_members'};    
	$empires{'total'}->{'active_members'} += $empires{$empire}->{'active_members'};

	#Average score
    	print "</TD><TD ALIGN=RIGHT>";
	if ($empires{$empire}->{'active_members'} > 0) {
		print  int( ($empires{$empire}->{'total_score'}) / ( $empires{$empire}->{'active_members'}) );
	}
	else {
		print '0';
	}
    print "</TD></TR>\n";
}

print "<TR>\n";
print "<TD>&nbsp;</TD>";
print "<TD>Total</TD>";
print "<TD ALIGN=RIGHT>"; print $empires{'total'}->{'total_score'}; 
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'colonies'};
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'kills'};
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'credits'};
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'rmu'};
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'damage_given'};
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'members'};
print "</TD><TD ALIGN=RIGHT>"; print $empires{'total'}->{'active_members'};
print "</TD><TD ALIGN=RIGHT>"; print int ($empires{'total'}->{'total_score'} / $empires{'total'}->{'active_members'});
print "</TD></TR>\n";

print "</TABLE>\n";
&print_htmltail;
}

sub print_htmlhead
{
    my $stardate = localtime();

    print header;

    print <<EOT;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>XSW $universename : $pagename</title>
<link rel="stylesheet" href="/css/xsw.css">
</head>
<body color="#FFFFCC">
<br>
<center>
<TABLE BORDER=0 WIDTH="90%">
 <TR>
  <TD align=left>Server: $ENV{'HTTP_HOST'}</TD>
  <td align=right>Stardate: $stardate</td>
 </TR>
 <TR>
 <TD colspan=2 align=center>
   <A HREF="/"><STRONG>XSW $universename</STRONG></A>
   <h1>$pagename</h1>
   <A HREF="$ENV{'SCRIPT_NAME'}?page=scoreboard">[Players]</a>
   <A HREF="$ENV{'SCRIPT_NAME'}?page=empires">[Empires]</a>
   <A HREF="/terminus/ecoprod/score.html">[Colonies]</a>
   <A HREF="$ENV{'SCRIPT_NAME'}?page=logins">[Logins]</a>                                                           
   <A HREF="$ENV{'SCRIPT_NAME'}?page=events">[Events]</a>
   <A HREF="$ENV{'SCRIPT_NAME'}?page=kia">[KIA]</a>
   <A HREF="$ENV{'SCRIPT_NAME'}?page=scoreboard&amp;show_inactive=1&amp;sortfield=player">[Accounts]</a>
   <A HREF="$ENV{'SCRIPT_NAME'}?page=panel" rel=sidebar target="panel">[Panel]</a>
  </td>
 </tr>
</TABLE>
<br>
EOT

}

sub print_htmltail
{
print <<EOT;
</center>
</body>
</html>
EOT

}

### Print init script for next game
sub print_init{
    my $player;
	my $rmu;
	
	print header;

	foreach $player (%players){		
		$rmu = int ($players{$player}->{'level'} - 5);
		# Skip lowest level
		if ($rmu <= 0) { next; }

		# print xsw command
		print "set $player=score/rmu:$rmu <BR>\n";
	}	
}