#!/usr/bin/perl
#
# halfStats:  A half-life log parsing program
# Location:   http://www.planethalflife.com/halfStats
# Author:     Zachary Karpinski
# Email:      zachkarp@csd.uwm.edu
#

my @time =  localtime(time);

my $sec = $time[0];
my $min = $time[1];
my $hour = $time[2];

my $miltime = "$hour$min";

my $start = $sec + ($min * 60) + (($hour * 60) * 60);

my $settings = &parseConfig();

&mergeLogs($settings);

my $stats = &createStatsHash($settings);

if($settings->{'OS'} eq "unix" 
   && $miltime >= $settings->{'connectStatStart'}
   && $miltime <= $settings->{'connectStatEnd'}
)
{
    &createIPpage($settings, $stats);
}

&setKillsPerDeath($stats);

&writeIndex($settings, $stats, $start);

&cleanup($settings);

sub writeIndex
{
    my $settings = $_[0];
    my $stats = $_[1];
    my $start = $_[2];

    my $index = "$settings->{'skillFile'}";

    my $bgc = $settings->{'bgColor'};
    my $fgc = $settings->{'fgColor'};
    my $lc  = $settings->{'linkColor'};
    my $listMax = $settings->{'listMax'};

    my $name = 0;
    my $count = 1;
    my $goodName = 0;
    my $var = 0;

    &printTop($settings);

    open(FILE, ">>$index");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}

    print FILE "<table width='90%' border='0'>\n";
    print FILE "<tr bgcolor='#555555'>\n";
    print FILE "<td><b>Rank</b></td>\n";
    print FILE "<td><b>Name</b></td>\n";
    print FILE "<td><b><a href='topten-highest_kills.html'>Total Kills</a></b></td>\n";
    print FILE "<td><b><a href='topten-highest_deaths.html'>Total Deaths</a></b></td>\n";
    print FILE "<td><b><a href='topten-highest_kpd.html'>Kills per Death</a></b></td>\n";
    print FILE "<td><b><a href='index.html'>Skill rating</a></b></td>\n";
    print FILE "</tr>\n";

    foreach $name (sort {$stats->{$b}{'skill'} <=> $stats->{$a}{'skill'}} keys(%{$stats}))
    {
	if(
	   $stats->{$name}{'total'} > $settings->{'minimumKills'} 
	   && $name ne ""
	   )
	{
	    if($count <= $settings->{'listMax'} 
	       || $settings->{'listMax'} == 0 
	       && $stats->{$name}{'skill'} >= $settings->{'minimumSkill'})
	    {
		
		$goodName = &removeJunk($name);
		print FILE "<tr>\n";
		print FILE "<td><b>$count</b></td>\n";
		print FILE "<td><a href='players/$goodName.html'>$name</a></td>\n";
		print FILE "<td>$stats->{$name}{'total'}</td>\n";
		print FILE "<td>$stats->{$name}{'deaths'}</td>\n";
		print FILE "<td>$stats->{$name}{'kpd'}</td>\n";
		print FILE "<td><b>$stats->{$name}{'skill'}</b></td>\n";
		print FILE "</tr>\n";
	    }
	    &writePlayerPage($settings, $stats, $name);
	    $count++;
	}
    }
    print FILE "</table>\n";
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(FILE);

    &writeTopTenPages($stats, $settings, "$settings->{'killsFile'}", "total");
    &writeTopTenPages($stats, $settings, "$settings->{'kpdFile'}", "kpd");
    &writeTopTenPages($stats, $settings, "$settings->{'deathsFile'}", "deaths");

    if($settings->{'showAwards'} eq "yes")
    {
	&writeAwards($settings, $stats);
    }

    my $thisHost = "error processing hostname";

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);


    my $now = $sec + ($min * 60) + (($hour * 60) * 60);

    my $time = $now - $start;

    $mon = $mon + 1;
    $year = $year  + 1900;

    if(length($min) < 2){$min = "0$min";}

    my $lastRanDate = "$mon/$mday/$year";
    my $lastRanTime = "$hour:$min";
   
    if($settings->{'hostname'} eq "default")
    {
        $thisHost = `hostname`;
        chomp($thisHost);
    }
    else
    {
        $thisHost = $settings->{'hostname'};
    }

    open(FILE, ">>$index");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}
    print FILE "<br><br><br>\n";

    if($settings->{'OS'} eq "unix")
    {
	print FILE "<a href='connect_stats.html'>View connection stats</a><br><br>\n";
    }


    if($settings->{'OS'} eq "unix")
    {
	my $duText = `du -H $settings->{'logDir'}`;
	chomp($duText);
	
	my ($size, $dot) = split(" ", $duText);
	print FILE "$size of log files processed in $time seconds<br>\n";

    }

    print FILE "halfStats was last ran $lastRanDate at $lastRanTime<br>\n";
    my $statsmonth = $settings->{'monthsToUse'} + 1;
    print FILE "Stats are being discarded after <b>$statsmonth</b> months<br>\n";

    print FILE "The hostname of this machine is: $thisHost<br><br>\n";
    print FILE "<a href='http://www.planethalflife.com/halfStats'>halfStats</a> was written by <a href='MAILTO:zachkarp\@csd.uwm.edu'>Zach Karpinski</a><br><br><br>\n";    
    print FILE "</center></body></html>\n";
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(FILE);

}

sub writeAwards
{
    my $settings = $_[0];
    my $stats = $_[1];

    my $totalAwards = $settings->{'numberOfAwards'};

    my $count = 1;
    my %high = ();
    my $thisTag = 0;
    my ($weaponTag, $awardTag, $descTag) = ();

        while($count <= $totalAwards)
	{
	    $thisTag = "award$count";
	    ($weaponTag, $awardTag, $descTag) = split(/\;/, $settings->{$thisTag});
	    $weaponTag =~ s/ /_/g;

	    $high{$weaponTag}{'award'} = $awardTag;
	    $high{$weaponTag}{'desc'} = $descTag;
	    $high{$weaponTag}{'uses'} = 0;
	    $high{$weaponTag}{'name'} = "Unclaimed";
	    $count++;
	}

    foreach $key (keys %high)
    {
	foreach $player (keys %{$stats})
	{
	    if($stats->{$player}{'weapons'}{$key} > $high{$key}{'uses'})
	    {
		$high{$key}{'uses'} = $stats->{$player}{'weapons'}{$key};
		$high{$key}{'name'} = $player;
	    }
	}
    }

    open(FILE, ">>$settings->{'htmlDir'}/index.html");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}
    print FILE "<br><br><br><br>\n";
    print FILE "<table border='1' width='90%'>\n";
    print FILE "<tr bgcolor='$settings->{'fgColor'}'><td align='center'>\n";
    print FILE "<font color='$settings->{'bgColor'}' size='+2'>\n";
    print FILE "Individual Awards for High Weapon Usage\n";
    print FILE "</font></td></tr></table><br>\n";

    print FILE "<table border='0' width='90%'>\n";
    foreach $key (keys %high)
    {
	print FILE "<tr>\n";
        print FILE "<td><i><font face='helvetica' size='+1'>\n";
	print FILE "$high{$key}{'award'}</font></i><br>\n";
        print FILE "<font size='-1'>($high{$key}{'desc'})</font></td>\n";
	if($settings->{'showWeaponImages'} eq "yes")
        {
            print FILE "<td><img src='images/$key.gif' border='0'></td>\n";
        }
        else
        {
            print FILE "<td>$key</td>\n";
        }
	print FILE "<td><b>$high{$key}{'name'}</b></td>\n";
        print FILE "<td><font color='yellow'><b>$high{$key}{'uses'}</b></font></td>\n";
        print FILE "</tr>\n";
    }
    print FILE "</table>\n";
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(FILE);

}

sub printTop
{
    my $settings = $_[0];
    
    my $index = "$settings->{'htmlDir'}/index.html";
    my $bgc = $settings->{'bgColor'};
    my $fgc = $settings->{'fgColor'};
    my $lc  = $settings->{'linkColor'};

    open(FILE, ">$index");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}
    print FILE "<html><head><title>\n";
    print FILE "welcome to halfStats running on $settings->{'hostname'}\n";
    print FILE "</title></head>\n";
    print FILE "<body bgcolor='$bgc' text='$fgc' link='$lc' vlink='$lc' alink='$lc'>\n";
    print FILE "<center>$settings->{'serverBanner'}\n";
    print FILE "<br><br><br>\n";
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(FILE);
}

sub calculateKillsPerDeath
{
    my $stats = $_[0];
    my $key = 0;
    my $kpd = 0;

    if($stats->{$key}{'deaths'} > 0)
    {
	$kpd = $stats->{$key}{'total'} / $stats->{$key}{'deaths'};
    }
    else 
    {
	$kpd = "N/A";
    }
    return($kpd);
}

sub createStatsHash
{
    my $settings = $_[0];
    
    my @array = ();
    my $line = 0;
    my $month = 0;
    my $day = 0;
    my $year = 0;

    my @time = localtime(time);

    my $mo = $time[4] + 1;
    my $yr = $time[5] + 1900;
    chomp($mo);chomp($yr);

    my $monthStart = $mo - $settings->{'monthsToUse'};

    my $obit = 0;
    my %stats = ();
    
    my $name = 0;
    my $victim = 0;
    my $weapon = 0;
    my $wasThisASuicide = 0;

    open(FILE, "<$settings->{'mergedLog'}");
    @array = <FILE>;
    close(FILE);

    foreach $line (@array)
    {
	chomp($line);

	$line =~ /^.{2}(..)\/(..)\/(....)/;
	$month = $1;
	$day   = $2;
	$year  = $3;
	
	#$line =~ /^.{15}(..)\:(..)\:(..)/;#$hour   = $1;#$minute = $2;#$second = $3;
	
	
	if($month >= $monthStart && $month <= $mo && $year == $yr)
	{
	    
	    $line =~ /^.{25}\"(.+?)\"/;
	    $name = $1;
	    
	    if($line =~ "self")
	    {
		$line =~ s/self/\"$name\"/g;
		$wasThisASuicide = 1;
	    }
	    elsif($line =~ "by world")
	    {
		$line =~ s/by world/\"$name\"/g;
		$wasThisASuicide = 1;
	    }
	    
	    $line =~ /^.{25}(.+)/;
	    $obit = $1;
	    
	    $obit =~ /^.{1}(.+?)\<(.){1,3}\>\" killed \"(.+?)\<(.){1,3}\>\" with (.+)/;
	    $name = $1;
	    $victim = $3;
	    $weapon = $5;
	    
	    if($name ne "" && $victim ne "" && $weapon ne "")
	    {
		$weapon =~ s/ /_/g;
		
		if($wasThisASuicide == 1)
		{
		    # dont count this kill
		}
		else
		{
		    $stats{$name}{'total'} = $stats{$name}{'total'} + 1;
		    $stats{$victim}{'deaths'} = $stats{$victim}{'deaths'} + 1;
		}
				
		$stats{$name}{'weapons'}{$weapon} 
		=
		    $stats{$name}{'weapons'}{$weapon} 
		+ 
		    1;
		
		$stats{$name}{'victims'}{$victim}{'total'} 
		=
		    $stats{$name}{'victims'}{$victim}{'total'}
		+
		    1;
		
		$stats{$name}{'victims'}{$victim}{$weapon}
		=
		    $stats{$name}{'victims'}{$victim}{$weapon}
		+
		    1;
		
		if($stats{$name}{'deaths'} eq ""){$stats{$name}{'deaths'} = 0;}
		if($stats{$victim}{'deaths'} eq ""){$stats{$victim}{'deaths'} = 0;}
		
		
		&calcSkill($name, $victim, \%stats);
		
		$stats{$name}{'kpd'} = 0;
		
		$wasThisASuicide = 0;
	    }
	}
	else
	{
	    # do nothing, this is not an obit line
	}
    }
    return(\%stats);
}


sub cleanup
{
    my $settings = $_[0];

    if($settings->{'OS'} eq "unix")
    {
	system("rm -rf $settings->{'mergedLog'}");
	system("rm -rf $settings->{'ipLog'}");
    }
    else
    {
	system("erase $settings->{'mergedLog'}");
    }

}

sub createIPpage
{
    #L 10/15/1999 - 14:05:37: "KOSH<1><WON:4800179>" connected, address "206.172.191.172:27005"

    my $settings = $_[0];
    my $stats = $_[1];

    my %ips = ();    
    my @array = ();
    my $line = ();
    my $time, $name, $playerNum, $wonID, $ip, $port, $count, $num = 0;

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
    
    $year = $year + 1900;
    $mon = $mon + 1;

    my $monthStart = $mon - $settings->{'monthsToUse'};

    my $cMon, $cDay, $cYear = 0;

    my $bgc = $settings->{'bgColor'};
    my $fgc = $settings->{'fgColor'};
    my $lc  = $settings->{'linkColor'};
    my $lastNum = 0;
    my $goodName = 0;

    open(FILE, "<$settings->{'ipLog'}");
    @array = <FILE>;
    close(FILE);
 
    foreach $line (@array)
    {
	$line =~ /^L (.+?): \"(.+?)<(.+?)><WON:(.+?)>\" connected, address \"(.+?):(.+?)\"/;
	
	$time      = $1;
	$name      = $2;
	$playerNum = $3;
	$wonID     = $4;
	$ip        = $5;
	$port      = $6;

	$time =~ /^(.{1,2})\/(.{1,2})\/(....) \- (..):(..):(..)/;
	$cMon = $1;$cDay = $2;$cYear = $3;

	if($cMon >= $monthStart && $cMon <= $mon && $cYear == $year)
	{
	    $ips{$ip}{$name}{'count'} = $ips{$ip}{$name}{'count'} + 1;
	    $lastNum = "$cYear$cMon$cDay";
	    $stats->{$name}{'totalConnects'} = $stats->{$name}{'totalConnects'} + 1;

	    if($ips{$ip}{$name}{'lastComp'} <= $lastNum)
	    {
		$ips{$ip}{$name}{'lastComp'} = "$cYear$cMon$cDay";
		$ips{$ip}{$name}{'last'} = "$time";
		$stats->{$name}{'lastIP'} = $ip;
	    }
	}
    }

    open(FILE, ">connect_stats.html");

    print FILE "<html><head><title>Connection Statistics</title></head>\n";
    print FILE "<body bgcolor='$bgc' text='$fgc' link='$lc' vlink='$lc' alink='$lc'>\n";
    print FILE "<center>$settings->{'serverBanner'}\n";
   
    print FILE "<br><br><center><table width='50%'>\n";
    print FILE "<tr><td><font size='+1'><b>IP:</b></font></td>\n";
    print FILE "<td><font size='+1'>[# of connects] <b>Name</b> (last on)</font></td></tr>\n";


    foreach $ip (sort
		 { $ips{$b} <=> $ips{$a} } keys(%ips)
		 )
    {
	$num = $count % 2;
	if($num == 0)
	{
	    $thisrow = "\#555555";
	}
	else
	{
	    $thisrow = "\#222222";
	}
	print FILE "<tr bgcolor='$thisrow'><td><b>$ip</b></td><td>\n";
	foreach $name ( keys %{$ips{$ip}} )
			    
	{
	    print FILE "[<font color='yellow'><b>$ips{$ip}{$name}{'count'}</font>] <b>$name</b>\n";
	    print FILE "<b>(</b>$ips{$ip}{$name}{'last'}<b>)</b><br>\n";
	}
	print FILE "</td></tr>\n";
	$count++;
    }

    print FILE "</table></center><br><br>\n";
    print FILE "<a href='index.html'>Back to main listing</a><br></body></html>\n";
    close(FILE);
}

sub mergeLogs
{
    my $settings = $_[0];

    if($settings->{'OS'} eq "unix")
    {
	system("cat $settings->{'logDir'}/*.log | grep 'killed' > $settings->{'mergedLog'}");
	system("cat $settings->{'logDir'}/*.log | grep 'connected, address' > $settings->{'ipLog'}");
    }
    else
    {
	my $line = 0;
	my $count = 0;
	my $thisCount = 0;
	
	my @logs = ();
	my @logArray = ();
	my @thisArray = ();

	system("dir /O /B $settings->{'logDir'}\\*.log > logList.txt");
	
	open(FILE,  "<logList.txt");
	@logs = <FILE>;
	close(FILE);

	foreach $line (@logs)
	{
	    chomp($line);
	    if($line ne "")
	    {
		open(FILE, "$settings->{'logDir'}\\$line");
		@thisArray = <FILE>;
		close(FILE);
		foreach $logLine (@thisArray)
		{
		    if($logLine =~ "killed")
		    {
			$logArray[$count] = $logLine;
			$count++;
		    }
		}
	    }
	}

	open(FILE, ">$settings->{'mergedLog'}");
	foreach $line (@logArray)
	{
	    print FILE "$line";
	}
	close(FILE);

	#system("erase .\logList.txt");
    }
    
}

sub parseConfig
{
    my $configFile = "./halfStats.cfg";
    my @fileContents;
    my $variable = 0;
    my $value = 0;
    my %config = ();
    my $line = 0;
    my $firstChar = 0;
    my $rest = 0;

    open(FILE, "<$configFile") || die "\n\n*** ERROR: $! for $configFile\n\n";
    @fileContents = <FILE>;
    close(FILE);

    foreach $line (@fileContents)
    {
	chomp($line);

	$firstChar = substr($line, 0, 1);

        if($firstChar ne "#" && $firstChar ne "")
        {
            ($variable, $value) = split(/\=/, $line, 2);
	    $config{$variable} = $value;
        }
        else
        {
            # do nothing, this is a comment
        }
    }
    # these are internal halfStats settings
    $config{'mergedLog'}  = "./_mergedLog_.$$";
    $config{'killLog'}    = "./_killLog_.$$";
    $config{'ipLog'}      = "./_ipLog_.$$";
    $config{'tmpFile'}    = "./_tmpFile_.$$";
    $config{'killsFile'}  = "$config{'htmlDir'}/topten-highest_kills.html";
    $config{'deathsFile'} = "$config{'htmlDir'}/topten-highest_deaths.html";
    $config{'kpdFile'}    = "$config{'htmlDir'}/topten-highest_kpd.html";
    $config{'skillFile'}  = "$config{'htmlDir'}/index.html";

    if($config{'OS'} ne "unix")
    {
	foreach $key (keys %config)
	{
	    if($key ne "serverBanner")
	    {
		$config{$key} =~ s/\//\\/g;
	    }
	}
    }

    return(\%config);
}

sub setKillsPerDeath
{
    my $stats = $_[0];
    my $key = 0;
    
    foreach $key (keys %{$stats})
    {
	if($stats->{$key}{'deaths'} > 0)
	{
	    if($stats->{$key}{'total'} eq "")
	    {
		$stats->{$key}{'total'} = 0;
	    }
	    $stats->{$key}{'kpd'} 
	    = sprintf("%.2f", ($stats->{$key}{'total'} / $stats->{$key}{'deaths'}));
	}
	else
	{
	    $stats->{$key}{'kpd'} = $stats->{$key}{'total'};
 	}
    }
}

sub removeJunk
{
    my $string = $_[0];
    $string =~ s/(\W)/_/g;
    return($string);
}

sub writePlayerPage
{
    my $settings = $_[0];
    my $stats = $_[1];
    my $player = $_[2];

    my $goodName = &removeJunk($player);

    my $bgc = $settings->{'bgColor'};
    my $fgc = $settings->{'fgColor'};
    my $lc  = $settings->{'linkColor'};

    my $file = "$settings->{'htmlDir'}/players/$goodName.html";

    my $weapon = 0;
    my $count = 1;
    my $percent = 0;
    my $size = 0;
    my $bar = 0;
    my $thisKpd = 0;
    my ($favWeap, $favCount) = ();

    open(PAGE, ">$file");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}
    print PAGE "<html><head><title>\n";
    print PAGE "Individual statistics for $player\n";
    print PAGE "</title></head>\n";

    print PAGE "<body bgcolor='$bgc' text='$fgc' link='$lc' vlink='$lc'>\n";

    print PAGE "<br><br><br>\n";
    print PAGE "<center>\n";
    print PAGE "<table width='90%' border='0'><tr><td>\n";
    print PAGE "<font face='helvetica' size='+1'>\n";
    print PAGE "Individual statistics for</font>\n";
    print PAGE "<font face='times' size='+2'><i>$player</i>\n";
    print PAGE "</font></td></tr>\n";

    if($stats->{$player}{'totalConnects'} eq "")
    {
	print PAGE "<tr><td><br>This person has never connected.  They are a BOT or have changed to this name from the name they connected with.</td></tr></table>\n";
    }
    else
    {
	print PAGE "<tr><td><br>This person has connected $stats->{$player}{'totalConnects'} times\n";
	print PAGE "<b>[</b>Last ip: $stats->{$player}{'lastIP'}<b>]</b></td></tr></table>\n";
    }

    print PAGE "<br><br><br>\n";
    print PAGE "<table width='400' border='0'>\n";
    print PAGE "<tr bgcolor='$fgc'>\n";
    print PAGE "<td><font color='$bgc' face='helvetica'>\n";
    print PAGE "<center><i><b>Kill Total: </i></b>\n";
    print PAGE "$stats->{$player}{'total'}</center>\n";
    print PAGE "</font></td>\n";
    print PAGE "<td><font color='$bgc' face='helvetica'>\n";
    print PAGE "<center><i><b>Death Total: </i></b>\n";
    print PAGE "$stats->{$player}{'deaths'}</center>\n";
    print PAGE "</font></td>\n";

    if($settings->{'calcSuicides'} eq "yes")
    {
	if($stats->{$player}{'victims'}{$player}{'total'} eq "")
	{
	    $stats->{$player}{'victims'}{$player}{'total'} = 0;
	}
	print PAGE "<td><font color='$bgc' face='helvetica'>\n";
	print PAGE "<center><i><b>Suicide Total: </i></b>\n";
	print PAGE "$stats->{$player}{'victims'}{$player}{'total'}\n";
	print PAGE "</b></i></center>\n";
	print PAGE "</font></td>\n";
    }
    print PAGE "</tr></table>\n";

    print PAGE "<br><br>\n";
   
    print PAGE "<table width='90%' border='1'><tr><td align='center'>\n";
    print PAGE "<font face='times' size='+2'>Weapon usage chart</font>\n";
    print PAGE "</td></tr></table>\n";

    print PAGE "<table width='90%' border='0'>\n";
    print PAGE "<tr bgcolor='#555555'>\n";
    print PAGE "<td><b><font color='white'>Rank:</font></b></td>\n";
    print PAGE "<td><b><font color='white'>Weapon:</font></b></td>\n";
    print PAGE "<td><b><font color='white'>Number of uses:</font></b></td>\n";
    print PAGE "<td><b><font color='white'>Percentage of kills:</font></b></td>\n";
    print PAGE "<td><b><font color='white'>\%</font></b></td>\n";
    print PAGE "</tr>\n";

    foreach $weapon (sort 
		     { $stats->{$player}{'weapons'}{$b}
		       <=> $stats->{$player}{'weapons'}{$a} }
		     keys %{$stats->{$player}{'weapons'}}
		     )
    {
	if($weapon ne "door"
	   && $weapon ne "rotating"
	   && $weapon ne "trigger_hurt"
	   && $weapon ne "plat"
	   && $weapon ne "worldspawn"
	   && $weapon ne "world"
	   && $weapon ne "env_explosion")
	{

	    print PAGE "<td><b>$count</b></td>\n";
	    if($settings->{'showWeaponImages'} eq "yes")
	    {
		print PAGE "<td><img src='../images/$weapon.gif' border='0'></td>\n";
	    }
	    else
	    {
		print PAGE "<td>$weapon</td>\n";
	    }
	    print PAGE "<td><b>$stats->{$player}{'weapons'}{$weapon}</b></td>\n";

	    if($stats->{$player}{'total'} != 0)
	    {
		$percent = sprintf("%.3f", 
				   ($stats->{$player}{'weapons'}{$weapon}
				    / $stats->{$player}{'total'}));
		$percent = $percent * 100;
	    }
	    else{$percent = "N/A";}

	    if($percent >= 50)
	    {
		$bar = "../images/bar_bright_green.gif";
	    }
	    elsif($percent >= 35)
	    {
		$bar = "../images/bar_dark_green.gif";
	    }
	    elsif($percent >= 20)
	    {
		$bar = "../images/bar_bright_yellow.gif";
	    }
	    elsif($percent >= 10)
	    {
		$bar = "../images/bar_dark_yellow.gif";
	    }
	    elsif($percent >= 5)
	    {
		$bar = "../images/bar_bright_red.gif";
	    }
	    else
	    {
		$bar = "../images/bar_dark_red.gif";
	    }
	    $size = $percent * 3;

	    print PAGE "<td><img src='../images/$bar' border='0' width='$size' height='10'><font color='$fgc'></td>\n";
	    print PAGE "<td><b>$percent\%</b></td>\n";
	    print PAGE "</tr>\n";
	    $count++;
	}
    }
    
    print PAGE "</table>\n";
    print PAGE "<br><br>\n";

    print PAGE "<table width='90%' border='1'><tr><td align='center'>\n";
    print PAGE "<font face='times' size='+2'>Opponent matchup listing</font>\n";
    print PAGE "</td></tr></table>\n";

    print PAGE "<font color='white'>\n";
    print PAGE "<table width='90%' border='0'>\n";
    print PAGE "<tr bgcolor='#555555'>\n";
    print PAGE "<td><b>Name:</b></td>\n";
    print PAGE "<td><b>Losses against $player:</b></td>\n";
    print PAGE "<td><b>Wins against $player:</b></td>\n";
    print PAGE "<td><b>$player\'s kill to death ratio:</b></td>\n";
    print PAGE "<td><b>Favorite weapon to use:</b></td>\n";
    print PAGE "</tr>\n";
    

    foreach $victim (sort
                     { $stats->{$player}{'victims'}{$b}{'total'}
                       <=> $stats->{$player}{'victims'}{$a}{'total'} }
                     keys %{$stats->{$player}{'victims'}}
                     )
    {
	if($victim ne $player)
	{
	    if($stats->{$victim}{'victims'}{$player}{'total'} eq "")
	    {
		$stats->{$victim}{'victims'}{$player}{'total'} = 0;
	    }
	    if($stats->{$player}{'victims'}{$victim}{'total'} eq "")
	    {
		$stats->{$player}{'victims'}{$victim}{'total'} = 0;
	    }
	    print PAGE "<tr>\n";
	    
	    if($stats->{$victim}{'total'} >= $settings->{'minimumKills'})
	    {
		$goodName = &removeJunk($victim);
		print PAGE "<td><a href='$goodName.html'>$victim</a></td>\n";
	    }
	    else
	    {
		print PAGE "<td>$victim</a></td>\n";
	    }
	    print PAGE "<td>$stats->{$player}{'victims'}{$victim}{'total'}</td>\n";
	    print PAGE "<td>$stats->{$victim}{'victims'}{$player}{'total'}</td>\n";
	    

	    if($stats->{$victim}{'victims'}{$player}{'total'} > 0)
	    {
		$thisKpd = sprintf("%.2f", 
				   ($stats->{$player}{'victims'}{$victim}{'total'}
				    /$stats->{$victim}{'victims'}{$player}{'total'})
				   );
	    }
	    else
	    {
		$thisKpd = "N/A";
	    }
	    print PAGE "<td>$thisKpd</td>\n";
	    
	    if($stats->{$player}{'victims'}{$victim}{'total'} > 0)
	    {
		($favWeap, $favCount) = split(/\,/, &getHighestWeapUsage($player, $victim, $stats));
		if($settings->{'showWeaponImages'} eq "yes")
		{
		    print PAGE "<td><img src='../images/$favWeap.gif' border='0'> x $favCount</td>\n";
		}
		else
		{
		    print PAGE "<td>$favWeap x $favCount</td>\n";
		}
	    }
	    else
	    {
		print PAGE "<td>N/A</td>\n";
	    }
	    print PAGE "</tr>\n";
	}
    }
    print PAGE "</table>\n";
    print PAGE "<br><br><br>\n";

    print PAGE "</center><a href='../index.html'>\n";
    print PAGE "<font size='+2'>Back to Main Player Listing</font>\n";
    print PAGE "</a></body></html>\n";
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
    close(PAGE);
}

sub getHighestWeapUsage
{
    my $player = $_[0];
    my $victim = $_[1];
    my $stats = $_[2];
    my $highCount = 0;
    my $highWeap = 0;
    my $weapon = 0;
    
    foreach $weapon (keys %{$stats->{$player}{'victims'}{$victim}})
    {
	if($stats->{$player}{'victims'}{$victim}{$weapon} > $highCount
	   && $weapon ne "total")
	{
	    $highWeap = $weapon;
	    $highCount = $stats->{$player}{'victims'}{$victim}{$weapon};
	}
    }
    return("$highWeap,$highCount");
}

sub writeTopTenPages
{
    my $stats = $_[0];
    my $settings = $_[1];
    my $file = $_[2];
    my $criteria = $_[3];

    my $bgc = $settings->{'bgColor'};
    my $fgc = $settings->{'fgColor'};
    my $lc  = $settings->{'linkColor'};

    my $name = 0;
    my $count = 1;
    my $goodName = 0;
    my $var = 0;

    
    open(FILE, ">$file");
    if($settings->{'OS'} eq "unix"){flock(FILE, 2);}

    print FILE "<html><head><title>\n";
    print FILE "welcome to halfStats running on $settings->{'hostname'}\n";
    print FILE "</title></head>\n";
    print FILE "<body bgcolor='$bgc' text='$fgc' link='$lc' vlink='$lc' alink='$lc'>\n";
    print FILE "<center>$settings->{'serverBanner'}\n";
    
    print FILE "<br><br><br>\n";
    print FILE "<table width='90%' border='0'>\n";
    print FILE "<tr bgcolor='#555555'>\n";
    print FILE "<td><b>Rank</b></td>\n";
    print FILE "<td><b>Name</b></td>\n";
    print FILE "<td><b><a href='topten-highest_kills.html'>Total Kills</a></b></td>\n";
    print FILE "<td><b><a href='topten-highest_deaths.html'>Total Deaths</a></b></td>\n";
    print FILE "<td><b><a href='topten-highest_kpd.html'>Kills per Death</a></b></td>\n";
    print FILE "<td><b><a href='index.html'>Skill rating</a></b></td>\n";
    print FILE "</tr>\n";

    foreach $name (sort {$stats->{$b}{$criteria} <=> $stats->{$a}{$criteria}} keys(%{$stats}))
    {
        if(
           $stats->{$name}{'total'} > $settings->{'minimumKills'}
           && $name ne ""
           )
        {
            if($count <= 10)
            {

                $goodName = &removeJunk($name);
                print FILE "<tr>\n";
                print FILE "<td><b>$count</b></td>\n";
                print FILE "<td><a href='players/$goodName.html'>$name</a></td>\n";
		print FILE "<td>$stats->{$name}{'total'}</td>\n";
                print FILE "<td>$stats->{$name}{'deaths'}</td>\n";
                print FILE "<td>$stats->{$name}{'kpd'}</td>\n";
		print FILE "<td><b>$stats->{$name}{'skill'}</b></td>\n";
                print FILE "</tr>\n";
            }
            $count++;
        }
    }
    print FILE "</table>\n";
    print FILE "</center></body></html>\n";
    if($settings->{'OS'} eq "unix"){flock(FILE, 8);}
}
		 
sub calcSkill
{
    my $killer = $_[0];
    my $victim = $_[1];
    my $stats = $_[2];


    if($stats->{$victim}{'skill'} eq "" || $stats->{$victim}{'skill'} < 1000)
    {$stats->{$victim}{'skill'} = 1000;}

    if($stats->{$killer}{'skill'} eq "" || $stats->{$killer}{'skill'} < 1000)
    {$stats->{$killer}{'skill'} = 1000;}

    if($killer ne $victim)
    {
	$killerSkill = $stats->{$killer}{'skill'};
	$killeeSkill = $stats->{$victim}{'skill'};


	$stats->{$killer}{'skill'} = 
	    $killerSkill + (($killeeSkill / $killerSkill) * 10);

	$stats->{$victim}{'skill'} = $stats->{$victim}{'skill'} - 20;

    }
    else
    {
	$stats->{$killer}{'skill'} =
	    $stats->{$killer}{'skill'} - (($stats->{$killer}{'skill'}/1000)*5);
    }

    $stats->{$killer}{'skill'} = sprintf("%.0f", $stats->{$killer}{'skill'});
    $stats->{$victim}{'skill'} = sprintf("%.0f", $stats->{$victim}{'skill'});

}   

