539 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			539 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
| HLstatsX Community Edition - Real-time player and clan rankings and statistics
 | |
| Copyleft (L) 2008-20XX Nicholas Hastings (nshastings@gmail.com)
 | |
| http://www.hlxcommunity.com
 | |
| 
 | |
| HLstatsX Community Edition is a continuation of 
 | |
| ELstatsNEO - Real-time player and clan rankings and statistics
 | |
| Copyleft (L) 2008-20XX Malte Bayer (steam@neo-soft.org)
 | |
| http://ovrsized.neo-soft.org/
 | |
| 
 | |
| ELstatsNEO is an very improved & enhanced - so called Ultra-Humongus Edition of HLstatsX
 | |
| HLstatsX - Real-time player and clan rankings and statistics for Half-Life 2
 | |
| http://www.hlstatsx.com/
 | |
| Copyright (C) 2005-2007 Tobias Oetzel (Tobi@hlstatsx.com)
 | |
| 
 | |
| HLstatsX is an enhanced version of HLstats made by Simon Garner
 | |
| HLstats - Real-time player and clan rankings and statistics for Half-Life
 | |
| http://sourceforge.net/projects/hlstats/
 | |
| Copyright (C) 2001  Simon Garner
 | |
|             
 | |
| 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.
 | |
| 
 | |
| For support and installation notes visit http://www.hlxcommunity.com
 | |
| */
 | |
| 
 | |
| if ( !defined('IN_HLSTATS') )
 | |
| {
 | |
| 	die('Do not access this file directly.');
 | |
| }
 | |
| 
 | |
| function printserverstats($server_id)
 | |
| {
 | |
| 	global $db, $g_options;
 | |
|     $query= "
 | |
|             SELECT
 | |
|                 SUM(kills),
 | |
|                 SUM(headshots),
 | |
|                 count(serverId)     
 | |
|             FROM
 | |
|                 hlstats_Servers
 | |
| 			WHERE 
 | |
| 				serverId='$server_id'
 | |
|       ";
 | |
| 	$result = $db->query($query);
 | |
| 	list($total_kills, $total_headshots) = $db->fetch_row($result);
 | |
|     $query= "
 | |
|             SELECT
 | |
|                 serverId,
 | |
|                 name,
 | |
|                 IF(publicaddress != '',
 | |
|                     publicaddress,
 | |
|                     concat(address, ':', port)
 | |
|                 ) AS addr,
 | |
|                 statusurl,
 | |
|                 kills,
 | |
|                 players,
 | |
|                 rounds, suicides, 
 | |
|                 headshots, 
 | |
|                 bombs_planted, 
 | |
|                 bombs_defused, 
 | |
|                 ct_wins, 
 | |
|                 ts_wins, 
 | |
|                 ct_shots, 
 | |
|                 ct_hits, 
 | |
|                 ts_shots, 
 | |
|                 ts_hits,      
 | |
|                 act_players,                                
 | |
|                 max_players,
 | |
|                 act_map,
 | |
|                 map_started,
 | |
|                 map_ct_wins,
 | |
|                 map_ts_wins,
 | |
| 				game                 
 | |
|             FROM
 | |
|                 hlstats_Servers
 | |
|             WHERE
 | |
|                 serverId='$server_id'
 | |
|         ";
 | |
| 	$result = $db->query($query);
 | |
| 	$servers   = array();
 | |
| 	$servers[] = $db->fetch_array($result);
 | |
| ?>
 | |
| 
 | |
| 
 | |
| 
 | |
| <?php
 | |
| 
 | |
| 	$i=0;
 | |
| 	for ($i=0; $i<count($servers); $i++)
 | |
| 	{
 | |
| 		$rowdata = $servers[$i]; 
 | |
| 			
 | |
| 		$server_id = $rowdata['serverId'];
 | |
| 		$game = $rowdata['game'];
 | |
| 		$c = ($i % 2) + 1;
 | |
|             
 | |
| 		$addr = $rowdata["addr"];
 | |
| 		$kills     = $rowdata['kills'];
 | |
| 		$headshots = $rowdata['headshots'];
 | |
| 		$player_string = $rowdata['act_players']."/".$rowdata['max_players'];
 | |
| 		$map_teama_wins = $rowdata['map_ct_wins'];
 | |
| 		$map_teamb_wins = $rowdata['map_ts_wins'];
 | |
| 		$mode = 'playerinfo';
 | |
| 		if (strpos($_SERVER['PHP_SELF'], 'ingame') !== FALSE)
 | |
| 		{
 | |
| 			$mode = 'statsme';
 | |
| 		}
 | |
| //style="border:1px solid; margin-bottom:40px;margin-left:auto;margin-right:auto;"
 | |
| ?>
 | |
| 
 | |
| <table class="livestats-table">
 | |
| 	<tr class="data-table-head">
 | |
| 		<td class="fSmall" style="width:2%;"> #</td>
 | |
| 		<td class="fSmall" style="width:42%;text-align:left;"> Player</td>
 | |
| 		<td class="fSmall" colspan="3" style="width:5%;"> Kills</td>
 | |
| 		<td class="fSmall" style="width:4%;"> Hs</td>
 | |
| 		<td class="fSmall" style="width:8%;"> HS:K</td>
 | |
| 		<td class="fSmall" style="width:6%;"> Acc</td>
 | |
| 		<td class="fSmall" style="width:6%;"> Lat</td>
 | |
| 		<td class="fSmall" style="width:10%;"> Time</td>
 | |
| 		<td class="fSmall" style="width:6%;"> +/-</td>
 | |
| 		<td class="fSmall" style="width:6%;"> Skill</td>
 | |
| 	</tr>
 | |
| 
 | |
| <?php 
 | |
| 		unset($team_colors);
 | |
| 		$statsdata = $db->query("
 | |
| 			SELECT 
 | |
| 				team, 
 | |
| 				name, 
 | |
| 				teamkills, 
 | |
| 				teamdeaths, 
 | |
| 				teamheadshots, 
 | |
| 				teamping, 
 | |
| 				teamskill, 
 | |
| 				teamshots, 
 | |
| 				teamhits, 
 | |
| 				teamjointime, 
 | |
| 				IFNULL(playerlist_bgcolor,'#D5D5D5') as playerlist_bgcolor, 
 | |
| 				IFNULL(playerlist_color,'#050505') AS playerlist_color, 
 | |
| 				IFNULL( playerlist_index, 99 ) AS playerlist_index
 | |
| 			FROM 
 | |
| 				hlstats_Teams
 | |
| 			RIGHT JOIN
 | |
| 				(SELECT 
 | |
| 					team, 
 | |
| 					sum( kills ) AS teamkills, 
 | |
| 					sum( deaths ) AS teamdeaths, 
 | |
| 					sum( headshots ) AS teamheadshots, 
 | |
| 					avg( ping /2 ) AS teamping, 
 | |
| 					avg( skill ) AS teamskill, 
 | |
| 					sum( shots ) AS teamshots, 
 | |
| 					sum( hits ) AS teamhits, 
 | |
| 					sum( unix_timestamp( NOW( ) ) - connected ) AS teamjointime
 | |
| 				FROM 
 | |
| 					hlstats_Livestats
 | |
| 				WHERE 
 | |
| 					server_id = $server_id
 | |
| 					AND connected >0
 | |
| 				GROUP BY 
 | |
| 					team
 | |
| 				ORDER BY 
 | |
| 					teamkills
 | |
| 				) teaminfo
 | |
| 			ON
 | |
| 				code = team
 | |
| 			AND
 | |
| 				hlstats_Teams.game = '$game'
 | |
| 			ORDER BY 
 | |
| 				playerlist_index
 | |
| 			LIMIT 0 , 30
 | |
| 			");
 | |
| 		$teamdata = array();
 | |
| 		$playerdata = array();
 | |
| 		$teamno = 0;
 | |
| 		while ($thisteam = $db->fetch_array($statsdata))
 | |
| 		{
 | |
| 			$teamname = $db->escape($thisteam['team']);
 | |
| 			$teamdata[$teamno] = $thisteam;
 | |
| 			$pldata = $db->query("
 | |
| 								SELECT
 | |
| 									player_id, 
 | |
| 									name, 
 | |
| 									kills, 
 | |
| 									deaths, 
 | |
| 									headshots, 
 | |
| 									ping, 
 | |
| 									skill, 
 | |
| 									shots, 
 | |
| 									hits, 
 | |
| 									connected, 
 | |
| 									skill_change, 
 | |
| 									cli_flag
 | |
| 								FROM 
 | |
| 									hlstats_Livestats 
 | |
| 								WHERE 
 | |
| 									server_id = $server_id 
 | |
| 									AND team = '$teamname'
 | |
| 								ORDER BY 
 | |
| 									kills DESC
 | |
| 				");
 | |
| 			while ($thisplayer = $db->fetch_array($pldata))
 | |
| 			{
 | |
| 				$playerdata[$teamno][] = $thisplayer;
 | |
| 			}
 | |
| 			$teamno++;
 | |
| 		}
 | |
| 		$curteam = 0;
 | |
| 		while (isset($teamdata[$curteam]))
 | |
| 		{
 | |
| 			$j=0;
 | |
| 			$thisteam = $teamdata[$curteam];
 | |
| 			$teamcolor = 'background:'.$thisteam['playerlist_bgcolor'].';color:'.$thisteam['playerlist_color'];
 | |
| 			$bordercolor = 'background:'.$$thisteam['playerlist_bgcolor'].';color:'.$thisteam['playerlist_color'].';border-top:1px '.$thisteam['playerlist_color'].' solid';
 | |
| 			$team_display_name  = htmlspecialchars($thisteam['name']);
 | |
| 			while (isset($playerdata[$curteam][$j]))
 | |
| 			{
 | |
| 				$thisplayer = $playerdata[$curteam][$j];
 | |
| 
 | |
| ?>
 | |
| 	<tr style="<?php echo $teamcolor ?>">
 | |
| 		<td class="fSmall"><?php
 | |
| 				if (isset($thisplayer) && $team_display_name)
 | |
| 				{
 | |
| 					echo ($j+1);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="text-align:left;<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					if (strlen($thisplayer['name'])>50)
 | |
| 					{
 | |
| 						$thisplayer['name'] = substr($thisplayer['name'], 0, 50);
 | |
| 					}
 | |
| 					if ($g_options['countrydata'] == 1)
 | |
| 					{
 | |
| 						echo '<img src="'.getFlag($thisplayer['cli_flag']).'" alt="'.ucfirst(strtolower($thisplayer['cli_country'])).'" title="'.ucfirst(strtolower($thisplayer['cli_country'])).'" /> ';
 | |
| 					}
 | |
| 					echo '<a style="color:'.$thisteam['playerlist_color'].'" href="'.$g_options['scripturl'].'?mode='.$mode.'&player='.$thisplayer['player_id'].'">';
 | |
| 					echo htmlspecialchars($thisplayer['name'], ENT_COMPAT).'</a>';
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="text-align:right;width:2%;<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo $thisplayer['kills'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="width:1%;<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo ':';
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="text-align:left;width:2%;<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo $thisplayer['deaths'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo $thisplayer['headshots'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					$hpk = sprintf('%.2f', 0);
 | |
| 					if ($thisplayer['kills'] > 0)
 | |
| 					{
 | |
| 						$hpk = sprintf('%.2f', $thisplayer['headshots']/$thisplayer['kills']);
 | |
| 					}
 | |
| 					echo $hpk;
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					$acc = sprintf('%.0f', 0);
 | |
| 					if ($thisplayer['shots'] > 0)
 | |
| 					{
 | |
| 						$acc = sprintf('%.0f', ($thisplayer['hits']/$thisplayer['shots'])*100);
 | |
| 					}
 | |
| 					echo "$acc%";
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo sprintf('%.0f', $thisplayer['ping'] / 2);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					if ($thisplayer['connected']>0)
 | |
| 					{
 | |
| 						$stamp = time()-$thisplayer['connected'];
 | |
| 						$hours = sprintf('%02d', floor($stamp / 3600));
 | |
| 						$min   = sprintf('%02d', floor(($stamp % 3600) / 60));
 | |
| 						$sec   = sprintf('%02d', floor($stamp % 60));
 | |
| 						echo $hours.':'.$min.':'.$sec;
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						echo 'Unknown';
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo $thisplayer['skill_change'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $teamcolor ?>" class="fSmall"><?php
 | |
| 				if (isset($thisplayer))
 | |
| 				{
 | |
| 					echo number_format($thisplayer['skill']);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 	</tr>
 | |
| 
 | |
| <?php
 | |
| 			$j++;	
 | |
| 			}
 | |
| 			
 | |
| 			if ($team_display_name)
 | |
| 			{
 | |
|     ?>
 | |
| 	<tr style="<?php echo $teamcolor ?>">
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"> </td>
 | |
| 		<td style="text-align:left;<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				echo "<strong>$team_display_name</strong>";
 | |
| 				if (($map_teama_wins > 0) || ($map_teamb_wins > 0))
 | |
| 				{
 | |
| 					echo ' ('.$map_teama_wins.' wins)';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="width:2%;text-align:right;<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					echo $teamdata[$curteam]['teamkills'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="width:1%;<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					echo ':';
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="width:2%;text-align:left;<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					echo $teamdata[$curteam]['teamdeaths'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					echo $teamdata[$curteam]['teamheadshots'];
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					$hpk = sprintf('%.2f', 0);
 | |
| 					if ($teama_kills > 0)
 | |
| 					{
 | |
| 						$hpk = sprintf('%.2f', $teamdata[$curteam]['headshots']/$teamdata[$curteam]['kills']);
 | |
| 					}
 | |
| 					echo $hpk;
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					$acc = sprintf('%.0f', 0);
 | |
| 					if ($teama_shots > 0)
 | |
| 					{
 | |
| 						$acc = sprintf('%.0f', ($teamdata[$curteam]['teamhits']/$teamdata[$curteam]['teamshots'])*100);
 | |
| 					}
 | |
| 					echo "$acc%";
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
|                         ?></td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					echo sprintf('%.0f', $teamdata[$curteam]['teamping'] / count($teamdata[$curteam]));
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam]) > 0)
 | |
| 				{
 | |
| 					if ($teamdata[$curteam]['teamjointime'] > 0)
 | |
| 					{
 | |
| 						$stamp = $teamdata[$curteam]['teamjointime'];
 | |
| 						$hours = sprintf('%02d', floor($stamp / 3600));
 | |
| 						$min   = sprintf('%02d', floor(($stamp % 3600) / 60));
 | |
| 						$sec   = sprintf('%02d', floor($stamp % 60));
 | |
| 						echo $hours.':'.$min.':'.$sec;
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						echo 'Unknown';
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall">-</td>
 | |
| 		<td style="<?php echo $bordercolor ?>" class="fSmall"><?php
 | |
| 				if (count($teamdata[$curteam])>0)
 | |
| 				{
 | |
| 					echo number_format(sprintf('%.0f', $teamdata[$curteam]['teamskill']));
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					echo ' ';
 | |
| 				}
 | |
| ?>		</td>
 | |
| 	</tr>
 | |
| 
 | |
| <?php
 | |
| 			}
 | |
| 			$curteam++;
 | |
| 		} //while i for teams
 | |
| 		if (count($teamdata) == 0)
 | |
| 		{
 | |
| ?>
 | |
| 	<tr>
 | |
| 		<td style="background:#EFEFEF;color:black"><?php 
 | |
| 			echo ' ';  
 | |
| ?>		</td>
 | |
| 		<td colspan="11" style="text-align:left;background:#EFEFEF;color:black"><?php 
 | |
| 			echo "No Players";  
 | |
| ?>		</td>
 | |
| 	</tr>
 | |
| <?php
 | |
| 		}
 | |
|     ?>
 | |
| </table>
 | |
| <?php			  	
 | |
| 	}  // for servers
 | |
| }
 | |
| ?>
 |