552 lines
18 KiB
PHP
552 lines
18 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.');
|
|
}
|
|
require (PAGE_PATH . '/livestats.php');
|
|
$db->query("SELECT name FROM hlstats_Games WHERE code='$game'");
|
|
if ($db->num_rows() < 1) {
|
|
error("No such game '$game'.");
|
|
}
|
|
|
|
list($gamename) = $db->fetch_row();
|
|
$db->free_result();
|
|
|
|
pageHeader(array($gamename), array($gamename => ''));
|
|
|
|
include (PAGE_PATH . '/voicecomm_serverlist.php');
|
|
|
|
$query = "
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
hlstats_Players
|
|
WHERE
|
|
game='$game'
|
|
";
|
|
$result = $db->query($query);
|
|
list($total_players) = $db->fetch_row($result);
|
|
|
|
$query = "
|
|
SELECT
|
|
players
|
|
FROM
|
|
hlstats_Trend
|
|
WHERE
|
|
game='$game'
|
|
AND timestamp<=" . (time() - 86400) . "
|
|
ORDER BY
|
|
timestamp DESC LIMIT 0,1
|
|
";
|
|
$result = $db->query($query);
|
|
list($total_players_24h) = $db->fetch_row($result);
|
|
$players_last_day = -1;
|
|
if ($total_players_24h > 0) {
|
|
$players_last_day = $total_players - $total_players_24h;
|
|
}
|
|
|
|
$query = "
|
|
SELECT
|
|
SUM(kills),
|
|
SUM(headshots),
|
|
count(serverId)
|
|
FROM
|
|
hlstats_Servers
|
|
WHERE
|
|
game='$game'
|
|
";
|
|
$result = $db->query($query);
|
|
list($total_kills, $total_headshots, $total_servers) = $db->fetch_row($result);
|
|
|
|
$query = "
|
|
SELECT
|
|
kills
|
|
FROM
|
|
hlstats_Trend
|
|
WHERE
|
|
game='$game'
|
|
AND timestamp<=" . (time() - 86400) . "
|
|
ORDER BY
|
|
timestamp DESC LIMIT 0,1
|
|
";
|
|
$result = $db->query($query);
|
|
list($total_kills_24h) = $db->fetch_row($result);
|
|
$db->free_result();
|
|
|
|
$kills_last_day = -1;
|
|
if ($total_kills_24h > 0) {
|
|
$kills_last_day = $total_kills - $total_kills_24h;
|
|
}
|
|
|
|
$query = "
|
|
SELECT
|
|
serverId,
|
|
name,
|
|
IF(publicaddress != '',
|
|
publicaddress,
|
|
concat(address, ':', port)
|
|
) AS addr,
|
|
kills,
|
|
headshots,
|
|
act_players,
|
|
max_players,
|
|
act_map,
|
|
map_started,
|
|
map_ct_wins,
|
|
map_ts_wins
|
|
FROM
|
|
hlstats_Servers
|
|
WHERE
|
|
game='$game'
|
|
ORDER BY
|
|
sortorder, name, serverId
|
|
";
|
|
$db->query($query);
|
|
$servers = $db->fetch_row_set();
|
|
$db->free_result();
|
|
?>
|
|
|
|
<div class="block">
|
|
|
|
<?php printSectionTitle('Participating Servers'); ?>
|
|
<div class="subblock">
|
|
<?php
|
|
if (count($servers) == 1)
|
|
{
|
|
?>
|
|
|
|
<table class="data-table">
|
|
<tr class="data-table-head"><td><?php
|
|
if ($total_kills > 0)
|
|
$hpk = sprintf("%.2f", ($total_headshots / $total_kills) * 100);
|
|
else
|
|
$hpk = sprintf("%.2f", 0);
|
|
if ($players_last_day > -1)
|
|
echo "Tracking <b>" . number_format($total_players) . "</b> players (<b>+" . number_format($players_last_day) . "</b> new players last 24h) with <b>" . number_format($total_kills) . "</b> kills (<b>+" . number_format($kills_last_day) . "</b> last 24h) and <b>" . number_format($total_headshots) . "</b> headshots (<b>$hpk%</b>) on <b>" . number_format($total_servers) . "</b> servers";
|
|
else
|
|
echo "Tracking <b>" . number_format($total_players) . "</b> players with <b>" . number_format($total_kills) . "</b> kills and <b>" . number_format($total_headshots) . "</b> headshots (<b>$hpk%</b>) on <b>" . number_format($total_servers) . "</b> servers";
|
|
?></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<?php
|
|
}
|
|
else
|
|
{
|
|
|
|
if ($g_options['slider'] == 1) {
|
|
?>
|
|
<table class="data-table" id="accordion">
|
|
<?php
|
|
} else {
|
|
?>
|
|
<table class="data-table">
|
|
<?php
|
|
}
|
|
?>
|
|
|
|
<tr class="data-table-head"><td colspan="9" style="padding:4px;width:100%;"><?php
|
|
if ($total_kills > 0)
|
|
$hpk = sprintf("%.2f", ($total_headshots / $total_kills) * 100);
|
|
else
|
|
$hpk = sprintf("%.2f", 0);
|
|
if ($players_last_day > -1)
|
|
echo "Tracking <b>" . number_format($total_players) . "</b> players (<b>+" . number_format($players_last_day) . "</b> new players last 24h) with <b>" . number_format($total_kills) . "</b> kills (<b>+" . number_format($kills_last_day) . "</b> last 24h) and <b>" . number_format($total_headshots) . "</b> headshots (<b>$hpk%</b>) on <b>" . number_format($total_servers) . "</b> servers";
|
|
else
|
|
echo "Tracking <b>" . number_format($total_players) . "</b> players with <b>" . number_format($total_kills) . "</b> kills and <b>" . number_format($total_headshots) . "</b> headshots (<b>$hpk%</b>) on <b>" . number_format($total_servers) . "</b> servers";
|
|
?></td>
|
|
</tr>
|
|
<tr class="data-table-head">
|
|
<td class="fSmall" style="width:37%;"> Server</td>
|
|
<td class="fSmall" style="width:19%;"> Address</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Map</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Played</td>
|
|
<td class="fSmall" style="width:10%;text-align:center;"> Players</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Kills</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Headshots</td>
|
|
<td class="fSmall" style="width:6%;text-align:center;"> HS:K</td>
|
|
</tr>
|
|
|
|
<?php
|
|
$i = 0;
|
|
for ($i = 0; $i < count($servers); $i++)
|
|
{
|
|
$rowdata = $servers[$i];
|
|
$server_id = $rowdata['serverId'];
|
|
$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'];
|
|
?>
|
|
<?php
|
|
if ($g_options['slider'] == 1) {
|
|
?>
|
|
<tr class="game-table-row toggler" style="cursor: pointer;" onmouseover="this.setAttribute('class', 'game-table-row-hover');" onmouseout="this.setAttribute('class', 'game-table-row toggler');">
|
|
<td class="game-table-cell">
|
|
<?php
|
|
} else {
|
|
?>
|
|
<tr class="game-table-row">
|
|
<td class="game-table-cell">
|
|
<?php
|
|
}
|
|
$image = getImage("/games/$game/game");
|
|
echo '<img src="';
|
|
if ($image)
|
|
echo $image['url'];
|
|
else
|
|
echo IMAGE_PATH . '/game.gif';
|
|
echo "\" alt=\"$game\" /> ";
|
|
echo '<b>' . $rowdata['name'] . '</b>';
|
|
?></td>
|
|
<td class="game-table-cell"><?php
|
|
echo "$addr (<a href=\"steam://connect/$addr\">Join</a>)";
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo $rowdata['act_map'];
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
$stamp = $rowdata['map_started']==0?0:time() - $rowdata['map_started'];
|
|
$hours = sprintf("%02d", floor($stamp / 3600));
|
|
$min = sprintf("%02d", floor(($stamp % 3600) / 60));
|
|
$sec = sprintf("%02d", floor($stamp % 60));
|
|
echo $hours . ":" . $min . ":" . $sec;
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo $player_string;
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo number_format($kills);
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo number_format($headshots);
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
if ($kills > 0)
|
|
echo sprintf("%.2f", ($headshots / $kills));
|
|
else
|
|
echo sprintf("%.2f", 0);
|
|
?></td>
|
|
</tr>
|
|
<?php
|
|
if ($g_options['slider'] == 1) {
|
|
?>
|
|
<tr>
|
|
<td colspan="9" style="padding: 0px; border: none;">
|
|
<div class="opener">
|
|
<?php printserverstats($server_id); ?>
|
|
<div class="subblock">
|
|
<?php
|
|
$range_arr = array(1=>"24h View", 2=>"Last Week", 3=>"Last Month", 4=>"Last Year");
|
|
foreach($range_arr as $range_code => $range_name) {
|
|
print('<table class="data-table"><tr class="data-table-head">');
|
|
print('<td class="fSmall"> '.$range_name.'</td></tr>');
|
|
print('<tr class="data-table-row"><td style="text-align:center; height: 200px; vertical-align:middle;">');
|
|
print('<img ');
|
|
if(!$_SESSION['nojs']) {
|
|
/* Javascript is on, so delay loading the image,
|
|
until the accordion code is called below. We do this
|
|
by setting src to a static image, and storing the 'real' image
|
|
URL in delaysrc. */
|
|
print('src="' . IMAGE_PATH .'/title-small.png" delay');
|
|
}
|
|
|
|
print('src="show_graph.php?type=0&width=870&height=200&'.
|
|
'game='.$game.'&server_id='.$server_id.'&'.
|
|
'bgcolor='.$g_options['graphbg_load'].'&color='.$g_options['graphtxt_load'].
|
|
'&range='.$range_code.'" alt="'.$range_name.'" title="'.$range_name.'" />');
|
|
print('</td></tr> </table><br /><br />');
|
|
}
|
|
?>
|
|
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
}
|
|
echo '</table>';
|
|
|
|
if ($g_options['slider'] == 1) {
|
|
?>
|
|
<script type="text/javascript">
|
|
var myAccordion = new Accordion($('accordion'), 'tr.toggler', 'div.opener', {
|
|
opacity: false,
|
|
display: '-1',
|
|
alwaysHide: true,
|
|
onActive: function(toggler, element){
|
|
toggler.setStyle('color', '#ff3300');
|
|
/* here we set the 'src' attribute properly,
|
|
so that the images load once the accordion is opened */
|
|
|
|
element.getElements('img').each(function(el) {
|
|
if(el.get('delaysrc')!=null)
|
|
el.set('src', el.get('delaysrc'));
|
|
});
|
|
},
|
|
onBackground: function(toggler, element){
|
|
toggler.setStyle('color', '#222');
|
|
}
|
|
});
|
|
</script>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
if (($g_options['show_google_map'] == 1) || ($g_options['show_server_load_image'] == 1)) {
|
|
|
|
echo '<table class="data-table" style="margin-bottom:40px;">';
|
|
|
|
if ($g_options['show_google_map'] == 1) {
|
|
?>
|
|
<tr class="data-table-row">
|
|
<td style="text-align:center;">
|
|
<div id="map" style="margin:10px auto;width: 870px; height: 380px; color:black;"></div>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
if ($g_options['show_server_load_image'] == 1) {
|
|
?>
|
|
<tr class="data-table-row">
|
|
<td style="text-align:center;padding:0px;">
|
|
<img src="show_graph.php?type=1&game=<?php echo $game ?>&width=870&height=200&bgcolor=<?php echo $g_options['graphbg_load']; ?>&color=<?php echo $g_options['graphtxt_load']; ?>" alt="Server Load Graph" title="serverLoadGraph" />
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
|
|
echo '</table>';
|
|
}
|
|
if (($g_options['show_google_map'] == 0) && ($g_options['show_server_load_image'] == 0)) {
|
|
echo '<br /> ';
|
|
}
|
|
|
|
if ($g_options['slider'] == 0 || ($g_options['slider'] == 1 && count($servers) == 1)) {
|
|
$i=0;
|
|
for ($i=0; $i<count($servers); $i++)
|
|
{
|
|
$rowdata = $servers[$i];
|
|
|
|
$server_id = $rowdata['serverId'];
|
|
|
|
$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'];
|
|
?>
|
|
<table class="data-table">
|
|
<tr class="data-table-head">
|
|
<td class="fSmall" style="width:37%;"> Server</td>
|
|
<td class="fSmall" style="width:19%;"> Address</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Map</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Played</td>
|
|
<td class="fSmall" style="width:10%;text-align:center;"> Players</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Kills</td>
|
|
<td class="fSmall" style="width:7%;text-align:center;"> Headshots</td>
|
|
<td class="fSmall" style="width:6%;text-align:center;"> HS:K</td>
|
|
</tr>
|
|
<tr class="game-table-row">
|
|
<td class="game-table-cell"><?php
|
|
$image = getImage("/games/$game/game");
|
|
echo '<img src="';
|
|
if ($image)
|
|
echo $image['url'];
|
|
else
|
|
echo IMAGE_PATH . '/game.gif';
|
|
echo "\" alt=\"$game\" /> ";
|
|
echo "<b><a href=\"" . $g_options['scripturl'] . "?mode=servers&server_id=$server_id&game=$game\" style=\"text-decoration:none;\">" . htmlspecialchars($rowdata['name']) . "</a></b>";
|
|
?></td>
|
|
<td class="game-table-cell"><?php
|
|
echo "$addr <a href=\"steam://connect/$addr\" style=\"color:black\">(Join)</a>";
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo $rowdata['act_map'];
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
$stamp = $rowdata['map_started']==0?0:time() - $rowdata['map_started'];
|
|
$hours = sprintf('%02d', floor($stamp / 3600));
|
|
$min = sprintf('%02d', floor(($stamp % 3600) / 60));
|
|
$sec = sprintf('%02d', floor($stamp % 60));
|
|
echo $hours . ':' . $min . ':' . $sec;
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo $player_string;
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo number_format($kills);
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
echo number_format($headshots);
|
|
?></td>
|
|
<td class="game-table-cell" style="text-align:center;"><?php
|
|
if ($kills > 0)
|
|
echo sprintf('%.4f', ($headshots / $kills));
|
|
else
|
|
echo sprintf('%.4f', 0);
|
|
?></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<table class="data-table">
|
|
<tr class="data-table-row">
|
|
<td style="padding:0px;text-align:center;">
|
|
<a href="<?php $g_options['scripturl'] ?>?mode=servers&server_id=<?php echo $server_id ?>&game=<?php echo $game ?>" style="text-decoration:none;"><img src="show_graph.php?type=0&game=<?php echo $game; ?>&width=870&height=200&server_id=<?php echo $server_id ?>&bgcolor=<?php echo $g_options['graphbg_load']; ?>&color=<?php echo $g_options['graphtxt_load']; ?>" style="border:0px;" alt="Server Load Graph" title="Server Load Graph" /></a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<?php
|
|
printserverstats($server_id);
|
|
|
|
} // for servers
|
|
}
|
|
?>
|
|
</div></div>
|
|
<?php
|
|
if ($g_options['gamehome_show_awards'] == 1) {
|
|
$resultAwards = $db->query("
|
|
SELECT
|
|
hlstats_Awards.awardId,
|
|
hlstats_Awards.name,
|
|
hlstats_Awards.verb,
|
|
hlstats_Awards.d_winner_id,
|
|
hlstats_Awards.d_winner_count,
|
|
hlstats_Players.lastName AS d_winner_name,
|
|
hlstats_Players.flag AS flag,
|
|
hlstats_Players.country AS country
|
|
FROM
|
|
hlstats_Awards
|
|
LEFT JOIN hlstats_Players ON
|
|
hlstats_Players.playerId = hlstats_Awards.d_winner_id
|
|
WHERE
|
|
hlstats_Awards.game='$game'
|
|
ORDER BY
|
|
hlstats_Awards.name
|
|
");
|
|
|
|
$result = $db->query("
|
|
SELECT
|
|
IFNULL(value, 1)
|
|
FROM
|
|
hlstats_Options
|
|
WHERE
|
|
keyname='awards_numdays'
|
|
");
|
|
|
|
if ($db->num_rows($result) == 1)
|
|
list($awards_numdays) = $db->fetch_row($result);
|
|
else
|
|
$awards_numdays = 1;
|
|
|
|
$result = $db->query("
|
|
SELECT
|
|
DATE_FORMAT(value, '%W %e %b'),
|
|
DATE_FORMAT( DATE_SUB( value, INTERVAL $awards_numdays DAY ) , '%W %e %b' )
|
|
FROM
|
|
hlstats_Options
|
|
WHERE
|
|
keyname='awards_d_date'
|
|
");
|
|
list($awards_d_date, $awards_s_date) = $db->fetch_row($result);
|
|
|
|
if ($db->num_rows($resultAwards) > 0 && $awards_d_date) {
|
|
?>
|
|
<div class="block" style="padding-top:20px">
|
|
|
|
<?php
|
|
printSectionTitle((($awards_numdays == 1) ? 'Daily' : "$awards_numdays Day")." Awards ($awards_d_date)");
|
|
?>
|
|
<div class="subblock">
|
|
|
|
<table class="data-table">
|
|
|
|
<?php
|
|
$c = 0;
|
|
while ($awarddata = $db->fetch_array($resultAwards))
|
|
{
|
|
$colour = ($c % 2) + 1;
|
|
$c++;
|
|
?>
|
|
|
|
<tr class="bg<?php echo $colour; ?>">
|
|
<td style="width:40%;"><?php
|
|
echo '<a href="'.$g_options['scripturl'].'?mode=dailyawardinfo&award='.$awarddata['awardId']."&game=$game\">".htmlspecialchars($awarddata['name']).'</a>';
|
|
?></td>
|
|
<td style="width:60%;"><?php
|
|
|
|
if ($awarddata['d_winner_id']) {
|
|
if ($g_options['countrydata'] == 1) {
|
|
$flag = '0.gif';
|
|
$alt = 'Unknown Country';
|
|
if ($awarddata['flag'] != '') {
|
|
$alt = ucfirst(strtolower($awarddata['country']));
|
|
}
|
|
echo "<img src=\"" . getFlag($awarddata['flag']) . "\" hspace=\"4\" alt=\"$alt\" title=\"$alt\" /><a href=\"{$g_options['scripturl']}?mode=playerinfo&player={$awarddata['d_winner_id']}\"><b>" . htmlspecialchars($awarddata['d_winner_name'], ENT_COMPAT) . "</b></a> ({$awarddata['d_winner_count']} " . htmlspecialchars($awarddata['verb']) . ")";
|
|
} else {
|
|
echo "<img src=\"" . IMAGE_PATH . "/player.gif\" hspace=\"4\" alt=\"Player\" /><a href=\"{$g_options['scripturl']}?mode=playerinfo&player={$awarddata['d_winner_id']}\"><b>" . htmlspecialchars($awarddata['d_winner_name'], ENT_COMPAT) . "</b></a> ({$awarddata['d_winner_count']} ". htmlspecialchars($awarddata['verb']) . ")";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
echo ' <em>No Award Winner</em>';
|
|
}
|
|
?></td>
|
|
</tr>
|
|
|
|
<?php
|
|
}
|
|
?></table>
|
|
</div></div>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|