summaryrefslogtreecommitdiff
path: root/html/pages
diff options
context:
space:
mode:
Diffstat (limited to 'html/pages')
-rwxr-xr-xhtml/pages/admin/acelog.php318
-rwxr-xr-xhtml/pages/admin/aclog.php108
-rwxr-xr-xhtml/pages/admin/check.php408
-rwxr-xr-xhtml/pages/admin/dmatch.php105
-rwxr-xr-xhtml/pages/admin/dplayer.php76
-rwxr-xr-xhtml/pages/admin/dpmatch.php106
-rwxr-xr-xhtml/pages/admin/editgames.php74
-rwxr-xr-xhtml/pages/admin/editgamestype.php228
-rwxr-xr-xhtml/pages/admin/editweapons.php58
-rwxr-xr-xhtml/pages/admin/emptydb.php62
-rwxr-xr-xhtml/pages/admin/index.htm0
-rwxr-xr-xhtml/pages/admin/ipsearch.php58
-rwxr-xr-xhtml/pages/admin/main.php117
-rwxr-xr-xhtml/pages/admin/mplayers.php91
-rwxr-xr-xhtml/pages/admin/mservers.php41
-rwxr-xr-xhtml/pages/admin/pban.php74
-rwxr-xr-xhtml/pages/admin/pinfo.php91
-rwxr-xr-xhtml/pages/admin/plm.php329
-rwxr-xr-xhtml/pages/admin/recalcflags.php72
-rwxr-xr-xhtml/pages/admin/recalcranking.php77
-rwxr-xr-xhtml/pages/admin/utdclog.php137
-rwxr-xr-xhtml/pages/admin/utdcshot.php22
-rwxr-xr-xhtml/pages/credits.php311
-rwxr-xr-xhtml/pages/dpmatch.php102
-rwxr-xr-xhtml/pages/graph_mbreakdown.php229
-rwxr-xr-xhtml/pages/graph_pbreakdown.php137
-rwxr-xr-xhtml/pages/help.php183
-rwxr-xr-xhtml/pages/home.php100
-rwxr-xr-xhtml/pages/index.htm0
-rwxr-xr-xhtml/pages/maps.php143
-rwxr-xr-xhtml/pages/maps_info.php321
-rwxr-xr-xhtml/pages/match.php10
-rwxr-xr-xhtml/pages/match_info.php78
-rwxr-xr-xhtml/pages/match_info_ass.php64
-rwxr-xr-xhtml/pages/match_info_bt.php164
-rwxr-xr-xhtml/pages/match_info_ctf.php362
-rwxr-xr-xhtml/pages/match_info_killsmatrix.php131
-rwxr-xr-xhtml/pages/match_info_lms.php144
-rwxr-xr-xhtml/pages/match_info_other.php115
-rwxr-xr-xhtml/pages/match_info_other2.php143
-rwxr-xr-xhtml/pages/match_info_server.php114
-rwxr-xr-xhtml/pages/match_player.php151
-rwxr-xr-xhtml/pages/match_report.php17
-rwxr-xr-xhtml/pages/players.php124
-rwxr-xr-xhtml/pages/players_explain_ranking.php190
-rwxr-xr-xhtml/pages/players_info.php442
-rwxr-xr-xhtml/pages/players_search.php83
-rwxr-xr-xhtml/pages/rank.php56
-rwxr-xr-xhtml/pages/rank_extended.php75
-rwxr-xr-xhtml/pages/recent.php137
-rwxr-xr-xhtml/pages/report.php24
-rwxr-xr-xhtml/pages/report/bbcode.php424
-rwxr-xr-xhtml/pages/report/clanbase.php530
-rwxr-xr-xhtml/pages/report/index.htm0
-rwxr-xr-xhtml/pages/report_cb.php168
-rwxr-xr-xhtml/pages/servers.php74
-rwxr-xr-xhtml/pages/servers_info.php104
-rwxr-xr-xhtml/pages/servers_query.php176
-rwxr-xr-xhtml/pages/totals.php606
-rwxr-xr-xhtml/pages/watchlist.php106
60 files changed, 8990 insertions, 0 deletions
diff --git a/html/pages/admin/acelog.php b/html/pages/admin/acelog.php
new file mode 100755
index 0000000..365174a
--- /dev/null
+++ b/html/pages/admin/acelog.php
@@ -0,0 +1,318 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('Access denied');
+
+$filename = (!empty($_REQUEST['filename'])) ? my_stripslashes($_REQUEST['filename']) : '';
+$filename = str_replace(array('..', '/', '\\', '<', ':'), array(), $filename);
+
+function InvertSort($curr_field, $order, $sort) {
+ if ($curr_field != $order) return(($curr_field == "time") ? "DESC" : "ASC");
+ if ($sort == 'ASC') return('DESC');
+ return('ASC');
+}
+
+function SortPic($curr_field, $order, $sort) {
+ if ($curr_field != $order) return;
+ $fname = 'images/s_'. strtolower($sort) .'.png';
+ if (!file_exists($fname)) return;
+ return('&nbsp;<img src="'. $fname .'" border="0" width="11" height="9" alt="" title="('.strtolower($sort).'ending)">');
+}
+
+// Get filter, order and set sorting
+if (isset($_GET[order])) {
+ $order = my_addslashes($_GET[order]);
+ setcookie('uts_ace_order', $_GET['order'], time()+60*60*24*30*365);
+}
+else if (isset($_COOKIE['uts_ace_order'])){
+ $order = $_REQUEST['uts_ace_order'];
+}
+else {
+ $order = "time";
+}
+
+if (isset($_GET[sort])) {
+ $sort = my_addslashes($_GET[sort]);
+ setcookie('uts_ace_sort', $_GET['sort'], time()+60*60*24*30*365);
+}
+else if (isset($_COOKIE['uts_ace_sort'])){
+ $sort = $_REQUEST['uts_ace_sort'];
+}
+else {
+ $sort = ($order == "time") ? "DESC" : "ASC";
+}
+
+if (isset($_GET[timeout])) {
+ $timeout = my_addslashes($_GET[timeout]);
+ setcookie('uts_ace_timeout', $_GET['timeout'], time()+60*60*24*30*365);
+}
+else if (isset($_COOKIE['uts_ace_timeout'])){
+ $timeout = $_REQUEST['uts_ace_timeout'];
+}
+else {
+ $timeout = 0;
+}
+
+if (isset($_GET[show])) {
+ $show = my_addslashes($_GET[show]);
+ setcookie('uts_ace_show', $_GET['show'], time()+60*60*24*30*365);
+}
+else if (isset($_COOKIE['uts_ace_show'])){
+ $show = $_REQUEST['uts_ace_show'];
+}
+else {
+ $show = "week";
+}
+
+if (!empty($filename)) {
+ if (!file_exists('logs/ace/'. $filename) or !is_file('logs/ace/'. $filename)) die('File not found');
+ if (isset($_REQUEST['del'])) {
+ unlink('logs/ace/'. $filename);
+ $filename = '';
+ }
+}
+
+if (empty($filename)) {
+ echo '
+
+ <script language = "javascript">
+
+ function timefilter() {
+ var filter = document.filter.show.value;
+ window.open("admin.php?key='.$adminkey.'&action='.$action.'&show="+filter, "_parent");
+ }
+
+ function toggletimeouts() {
+ if (document.filter.timeouts.checked == true) {
+ window.open("admin.php?key='.$adminkey.'&action='.$action.'&timeout=1", "_parent");
+ }
+ else {
+ window.open("admin.php?key='.$adminkey.'&action='.$action.'&timeout=0", "_parent");
+ }
+ }
+ </script>
+ <form name = "filter">
+ <table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tr>
+ <td class="heading" align="center" width="100%" colspan="5">Available ACE Logs:</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="100%" colspan = "5">Filter:
+ <select onchange = "javascript:timefilter()" name = "show">
+ <option value = "all"'.($show == "all" ? ' selected=selected' : '').'>All</option>
+ <option value = "day"'.($show == "day" ? ' selected=selected' : '').'>Last day</option>
+ <option value = "week"'.($show == "week" ? ' selected=selected' : '').'>Last week</option>
+ <option value = "month"'.($show == "month" ? ' selected=selected' : '').'>Last month</option>
+ </select>
+ <input name = "timeouts" type = "checkbox" value = 1 onchange = "javascript:toggletimeouts()"'.($timeout == 1 ? ' checked="yes"' : '').'> Show timeouts</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center"><a class="smheading" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;order=time&amp;sort='.InvertSort('time', $order, $sort).'">Time</a>'.SortPic('time', $order, $sort).'</td>
+ <td class="smheading" align="center"><a class="smheading" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;order=name&amp;sort='.InvertSort('name', $order, $sort).'">Player Name</a>'.SortPic('name', $order, $sort).'</td>
+ <td class="smheading" align="center"><a class="smheading" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;order=reason&amp;sort='.InvertSort('reason', $order, $sort).'">Kick Reason</a>'.SortPic('reason', $order, $sort).'</td>
+ <td class="smheading" align="center" colspan = 2></td>
+ </tr>';
+ $logdir = opendir('logs/ace');
+ $logs = array();
+ $sortlogs = array();
+ $i = 0;
+ while (false !== ($filename = readdir($logdir))) {
+ if (!is_file('logs/ace/'. $filename)) continue;
+ if ($filename == '.htaccess' or $filename == 'index.htm') continue;
+
+ preg_match('/\d{4}\.\d{2}.\d{2}.\d{2}.\d{2}.\d{2}/', $filename, &$date);
+ $adate = preg_split('/\./', $date[0]);
+ // filter on days
+ if ($show != "all") {
+ // calculate days
+ $logAgeInDays = abs(strtotime(date("Y/m/d")) - strtotime("$adate[0]/$adate[1]/$adate[2]"))/68400-1;
+ if (($show == "day" and $logAgeInDays > 1)
+ or ($show == "week" and $logAgeInDays > 7)
+ or ($show == "month" and $logAgeInDays > 31)) {
+ continue;
+ }
+ }
+
+ $i++;
+ $TimeStamp = "unknown";
+ $PlayerName = "unknown";
+ $KickReason = "unknown";
+ if (substr($filename, strlen($filename) - strlen($import_ace_screenshot_extension)) == $import_ace_screenshot_extension
+ and substr($filename, 0, strlen($import_ace_screenshot_start)) == $import_ace_screenshot_start) {
+ // Screenshot
+ $TimeStamp = "$adate[2]-$adate[1]-$adate[0] / $adate[3]:$adate[4]:$adate[5]";
+ $PlayerName = "Unknown";
+ $KickReason = "Screenshot";
+ }
+ else {
+ // logfile
+
+ $fp = my_fopen('logs/ace/'.$filename, 'rb', $compression = NULL);
+ if (!$fp) die("Error opening file");
+
+ while (($line = my_fgets($fp, 5000, $compression)) !== FALSE) {
+ $info = preg_split('/\s/', $line, 3);
+ $info[2] = preg_replace('/[\r\n]+/', '', $info[2]);
+ if ($info[1] == "TimeStamp....:") {
+ $TimeStamp = $info[2];
+ }
+ else if ($info[1] == "PlayerName...:") {
+ $PlayerName = $info[2];
+ }
+ else if ($info[1] == "KickReason...:") {
+ $KickReason = $info[2];
+ }
+ else if ($info[1] == "RequestedBy..:") {
+ $KickReason = "Requested Screenshot";
+ }
+ else if ($info[1] == "WARNING:") {
+ $ainfo = preg_split('/\s/', $info[2]);
+ if ($ainfo[5] == "UDP") {
+ $TimeStamp = "$adate[2]-$adate[1]-$adate[0] / $adate[3]:$adate[4]:$adate[5]";
+ $PlayerName = $ainfo[1];
+ $KickReason = "Proxy/Tunnel";
+ }
+ }
+ else if ($info[2] == ": Kicked - [REASON] Timeout during check spawn") {
+ $TimeStamp = "$adate[2]-$adate[1]-$adate[0] / $adate[3]:$adate[4]:$adate[5]";
+ $PlayerName = preg_replace('/[\[\]]/', '', $info[1]);
+ $KickReason = "Timeout during check spawn";
+ }
+ }
+ my_fclose($fp, $compression);
+ }
+
+ // don't show timeout logs?
+ if (($timeout == 0)
+ and (($KickReason == "Timeout during check spawn")
+ or ($KickReason == "Timeout during checks")
+ or ($KickReason == "Timeout during initial check"))) {
+ continue;
+ }
+
+ $logs[$i] = array($filename, $TimeStamp, $PlayerName, $KickReason);
+ $extra = 0;
+ if (substr($filename, -4) == '.bz2') $extra = 4;
+ if (substr($filename, -3) == '.gz') $extra = 3;
+
+ if ($order == "time") {
+ $sortlogs[$i] = $date[0];
+ }
+ else if ($order == "name") {
+ $sortlogs[$i] = strtolower($PlayerName);
+ }
+ else if ($order == "reason") {
+ $sortlogs[$i] = strtolower($KickReason);
+ }
+ }
+ closedir($logdir);
+ if (count($logs) == 0) {
+ echo '<tr><td class="grey" colspan="5">No logs available!</td></tr>';
+ } else {
+ if ($sort == "ASC") {
+ asort($sortlogs);
+ }
+ else {
+ arsort($sortlogs);
+ }
+ $i = 0;
+ foreach($sortlogs as $id => $date) {
+ $log = $logs[$id][0];
+ if (empty($log)) {
+ continue;
+ }
+ $TimeStamp = $logs[$id][1];
+ $PlayerName = $logs[$id][2];
+ $KickReason = $logs[$id][3];
+ $Screenshot = $logs[$id][4];
+ $extra = 0;
+ if (substr($log, -4) == '.bz2') $extra = 4;
+ if (substr($log, -3) == '.gz') $extra = 3;
+
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'">';
+ $tmp = substr($log, strlen($log) - (23 + $extra), 19);
+ $tmp = str_replace('.', '', $tmp);
+ // $ts = mtimestamp($tmp);
+ echo ' <a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.$TimeStamp.'</a>';
+ echo '</td><td class="'.$class.'">';
+ echo '<a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.$PlayerName.'</a>';
+ echo '</td><td class="'.$class.'">';
+ echo '<a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.$KickReason.'</a>';
+ echo '</td><td class="'.$class.'" align="right">';
+ $d_size = file_size_info(filesize('logs/ace/'. $log));
+ echo $d_size['size'] .' '. $d_size['type'];
+ echo '</td><td class="'.$class.'" align="center">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td></tr>';
+ }
+ }
+ echo '</form>';
+}
+
+
+if (!empty($filename)) {
+ if (!file_exists('logs/ace/'. $filename) or !is_file('logs/ace/'. $filename)) die('File not found (2)');
+ echo'<br><table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tr>
+ <td class="smheading" align="center" width="95%" colspan="4">'.$filename.'</td>
+ <td class="smheading" align="center" width="5%" align="right">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($filename).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td>
+ </tr>';
+ if (substr($filename, strlen($filename) - strlen($import_ace_screenshot_extension)) == $import_ace_screenshot_extension
+ and substr($filename, 0, strlen($import_ace_screenshot_start)) == $import_ace_screenshot_start) {
+ // screenshot
+ echo '<tr><td class="grey" colspan="5"><span style="font-family: monospace;">';
+ echo '<a href = "logs/ace/'.preg_replace('/\+/', '%20', urlencode($filename)).'" target = "_blank"><img src = "logs/ace/'.preg_replace('/\+/', '%20', urlencode($filename)).'" width = 100% border = 0></a>';
+ echo '</span></td></tr>';
+ }
+ else {
+ $fp = my_fopen('logs/ace/'.$filename, 'rb', $compression = NULL);
+ if (!$fp) die("Error opening file");
+
+ $i = 0;
+ echo '<tr><td class="grey" colspan="5"><span style="font-family: monospace;">';
+
+ while (($line = my_fgets($fp, 5000, $compression)) !== FALSE) {
+ /*
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'" colspan="4">';
+ echo '<span style="font-family: monospace;">';
+ echo htmlentities($line);
+ echo '</span>';
+ echo '</td></tr>';
+ */
+ echo wordwrap(htmlentities($line), 80, '<br />', 1) ."<br />";
+ $info = preg_split('/\s/', $line, 3);
+ $info[2] = preg_replace('/[\r\n]/', '', $info[2]);
+ if ($info[1] == "FileName.....:") {
+ $Screenshot = basename($info[2]);
+ }
+
+ }
+ echo '</span></td></tr>';
+ my_fclose($fp, $compression);
+
+ // look for a matching ace screenshot
+ if (isset($Screenshot) and file_exists('logs/ace/' . $Screenshot)) {
+ echo '<tr>
+ <td class="smheading" align="center" width="95%" colspan="4">'.$Screenshot.'</td>
+ <td class="smheading" align="center" width="5%" align="right">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.preg_replace('/\+/', '%20', urlencode($Screenshot)).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td>
+ </tr>';
+
+ echo '<tr><td class="grey" colspan="5"><span style="font-family: monospace;">';
+ echo '<a href = "logs/ace/'.preg_replace('/\+/', '%20', urlencode($Screenshot)).'" target = "_blank"><img src = "logs/ace/'.preg_replace('/\+/', '%20', urlencode($Screenshot)).'" width = 100% border = 0></a>';
+ echo '</span></td></tr>';
+ }
+ }
+}
+
+echo '</tr>';
+if (!empty($filename)) echo'<tr><td class="smheading" align="center" colspan="5"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'&amp;action='.$action.'">Go Back To Logfile Overview</a></td></tr>';
+echo'<tr><td class="smheading" align="center" colspan="5"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td></tr>';
+echo '</table>';
+
+?>
diff --git a/html/pages/admin/aclog.php b/html/pages/admin/aclog.php
new file mode 100755
index 0000000..ada35c8
--- /dev/null
+++ b/html/pages/admin/aclog.php
@@ -0,0 +1,108 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$filename = (!empty($_REQUEST['filename'])) ? my_stripslashes($_REQUEST['filename']) : '';
+$filename = str_replace(array('..', '/', '\\', '<', ':'), array(), $filename);
+
+
+if (!empty($filename)) {
+ if (!file_exists('logs/ac/'. $filename) or !is_file('logs/ac/'. $filename)) die('bla');
+ if (isset($_REQUEST['del'])) {
+ unlink('logs/ac/'. $filename);
+ $filename = '';
+ }
+}
+
+
+
+
+if (empty($filename)) {
+ echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" width="100%" colspan="4">Available AnthChecker Logs:</td>
+ </tr>';
+ $logdir = opendir('logs/ac');
+ $logs = array();
+ $sort = array();
+ $i = 0;
+ while (false !== ($filename = readdir($logdir))) {
+ if (!is_file('logs/ac/'. $filename)) continue;
+ if ($filename == '.htaccess' or $filename == 'index.htm') continue;
+ $i++;
+ $logs[$i] = $filename;
+ $extra = 0;
+ if (substr($filename, -4) == '.bz2') $extra = 4;
+ if (substr($filename, -3) == '.gz') $extra = 3;
+
+ $sort[$i] = substr($filename, strlen($filename) - (23 + $extra), 19);
+ }
+ closedir($logdir);
+ if (count($logs) == 0) {
+ echo '<tr><td class="grey" colspan="4">No logs available!</td></tr>';
+ } else {
+ arsort($sort);
+ $i = 0;
+ foreach($sort as $id => $date) {
+ $log = $logs[$id];
+ $extra = 0;
+ if (substr($log, -4) == '.bz2') $extra = 4;
+ if (substr($log, -3) == '.gz') $extra = 3;
+
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'">';
+ $tmp = substr($log, strlen($log) - (23 + $extra), 19);
+ $tmp = str_replace('.', '', $tmp);
+ $ts = mtimestamp($tmp);
+ echo ' <a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.date('Y-m-d H:i', $ts).'</a>';
+ echo '</td><td class="'.$class.'">';
+ echo '<a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.substr($log, 6, strlen($log) - 30 - $extra).'</a>';
+ echo '</td><td class="'.$class.'" align="right">';
+ $d_size = file_size_info(filesize('logs/ac/'. $log));
+ echo $d_size['size'] .' '. $d_size['type'];
+ echo '</td><td class="'.$class.'" align="center">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td></tr>';
+ }
+ }
+}
+
+
+if (!empty($filename)) {
+ if (!file_exists('logs/ac/'. $filename) or !is_file('logs/ac/'. $filename)) die('bla');
+ echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" width="95%" colspan="3">'.$filename.'</td>
+ <td class="smheading" align="center" width="5%" align="right">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($filename).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td>
+ </tr>';
+
+ $fp = my_fopen('logs/ac/'.$filename, 'rb', $compression = NULL);
+ if (!$fp) die("Error opening file");
+
+ $i = 0;
+ echo '<tr><td class="grey" colspan="4"><span style="font-family: monospace;">';
+
+ while (($line = my_fgets($fp, 5000, $compression)) !== FALSE) {
+ /*
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'" colspan="4">';
+ echo '<span style="font-family: monospace;">';
+ echo htmlentities($line);
+ echo '</span>';
+ echo '</td></tr>';
+ */
+ echo wordwrap(htmlentities($line), 80, '<br />', 1) ."<br />";
+ }
+ echo '</span></td></tr>';
+ my_fclose($fp, $compression);
+}
+
+echo '</tr>';
+if (!empty($filename)) echo'<tr><td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'&amp;action='.$action.'">Go Back To Logfile Overview</a></td></tr>';
+echo'<tr><td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td></tr>';
+echo '</table>';
+
+?>
diff --git a/html/pages/admin/check.php b/html/pages/admin/check.php
new file mode 100755
index 0000000..a03bf91
--- /dev/null
+++ b/html/pages/admin/check.php
@@ -0,0 +1,408 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+echo '
+ <center>
+ <table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center" colspan="2">Server configuration check</td>
+ </tr></tbody></table><br>';
+
+// Check access rights
+echo '
+ <table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tr>
+ <td class="smheading" align="center" height="25" width="550" colspan="2">Checking access rights</td>
+ </tr>';
+
+// directories
+foreach (array("logs", "logs/ac", "logs/backup", "logs/utdc", "logs/ace") as $dir)
+{
+ echo '
+ <tr>
+ <td class="smheading" align="left" width="350">', $dir, '</td>';
+ if (!file_exists($dir)) {
+ if (mkdir($dir, 0777)) {
+ echo '
+ <td class="warn" align="left" width="200">Created</td></tr>';
+ }
+ else {
+ echo '
+ <td class="warn" align="left" width="200">Not found!</td></tr>';
+ }
+ }
+ else if (!is_dir($dir)) {
+ echo '
+ <td class="warn" align="left" width="200">Not a directory!</td></tr>';
+ }
+ else if (!is_writable($dir)) {
+ if (@chmod($dir, 0777)) {
+ echo '
+ <td class="grey" align="left" width="200">SET</td></tr>';
+ }
+ else {
+ echo '
+ <td class="warn" align="left" width="200">Incorrect access rights: ' , substr(sprintf('%o', fileperms($dir)), -4) , '</td></tr>';
+ }
+ }
+ else {
+ echo '
+ <td class="grey" align="left" width="200">OK</td></tr>';
+ }
+}
+
+// files:
+foreach (array("includes/ftptimestamp.php") as $file)
+{
+ echo '
+ <tr>
+ <td class="smheading" align="left" width="350">', $file, '</td>';
+ if (!file_exists($file)) {
+ echo '
+ <td class="warn" align="left" width="200">Not found!</td></tr>';
+ }
+ else if (!is_file($file)) {
+ echo '
+ <td class="warn" align="left" width="200">Not a file!</td></tr>';
+ }
+ else if (!is_writable($file)) {
+ if (@chmod($file, 0777)) {
+ echo '
+ <td class="grey" align="left" width="200">SET</td></tr>';
+ }
+ else {
+ echo '
+ <td class="warn" align="left" width="200">Incorrect access rights: ' , substr(sprintf('%o', fileperms($file)), -4) , '</td></tr>';
+ }
+ }
+ else {
+ echo '
+ <td class="grey" align="left" width="200">OK</td></tr>';
+ }
+}
+
+echo '
+ </tbody></table>
+<div class="opnote">* Might not work correctly on Windows systems *</div><br>';
+
+
+// connect to the database and check structure
+echo '
+ <table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tr>
+ <td class="smheading" align="center" height="25" width="550" colspan="2">Checking mysql tables</td>
+ </tr>';
+
+// database creation array
+// to add a database simply add $create_table['dbname'] = "database creation sql"
+$create_table['uts_events'] = "
+CREATE TABLE `uts_events` (
+ `id` mediumint(10) NOT NULL auto_increment,
+ `matchid` mediumint(10) NOT NULL default '0',
+ `playerid` tinyint(3) NOT NULL default '0',
+ `col0` varchar(20) NOT NULL default '',
+ `col1` varchar(120) NOT NULL default '',
+ `col2` varchar(120) NOT NULL default '',
+ `col3` varchar(120) NOT NULL default '',
+ `col4` varchar(120) NOT NULL default '',
+ PRIMARY KEY (`id`)
+);
+";
+
+$create_table['uts_games'] = "
+CREATE TABLE `uts_games` (
+ `id` tinyint(3) unsigned NOT NULL auto_increment,
+ `gamename` varchar(100) NOT NULL default '',
+ `name` varchar(100) NOT NULL default '',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 ;
+";
+
+$create_table['uts_gamestype'] = "
+CREATE TABLE `uts_gamestype` (
+ `id` smallint(5) unsigned NOT NULL auto_increment,
+ `serverip` varchar(21) NOT NULL default '',
+ `gamename` varchar(100) NOT NULL default '',
+ `mutator` varchar(100) NOT NULL default '',
+ `gid` tinyint(3) unsigned NOT NULL default '0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM;
+";
+
+$create_table['uts_ignoreips'] = "
+CREATE TABLE IF NOT EXISTS `uts_ignoreips` (
+ `ip` bigint(15) NOT NULL default '0',
+ PRIMARY KEY (`ip`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+";
+
+$create_table['uts_killsmatrix'] = "
+CREATE TABLE `uts_killsmatrix` (
+ `matchid` mediumint(8) unsigned NOT NULL default '0',
+ `killer` tinyint(4) NOT NULL default '0',
+ `victim` tinyint(4) NOT NULL default '0',
+ `kills` tinyint(3) unsigned NOT NULL default '0',
+ KEY `matchid` (`matchid`)
+) ENGINE=MyISAM;
+";
+
+$create_table['uts_match'] = "
+CREATE TABLE `uts_match` (
+ `id` mediumint(10) NOT NULL auto_increment,
+ `time` varchar(14) default NULL,
+ `servername` varchar(100) NOT NULL default '',
+ `serverip` varchar(21) NOT NULL default '0',
+ `gamename` varchar(100) NOT NULL default '0',
+ `gid` tinyint(3) unsigned NOT NULL default '0',
+ `gametime` float NOT NULL default '0',
+ `mutators` longtext NOT NULL,
+ `insta` tinyint(1) NOT NULL default '0',
+ `tournament` varchar(5) NOT NULL default '',
+ `teamgame` varchar(5) NOT NULL default '',
+ `mapname` varchar(100) NOT NULL default '',
+ `mapfile` varchar(100) NOT NULL default '',
+ `serverinfo` mediumtext NOT NULL,
+ `gameinfo` mediumtext NOT NULL,
+ `firstblood` int(10) unsigned NOT NULL default '0',
+ `frags` mediumint(5) NOT NULL default '0',
+ `deaths` mediumint(5) NOT NULL default '0',
+ `kills` mediumint(5) NOT NULL default '0',
+ `suicides` mediumint(5) NOT NULL default '0',
+ `teamkills` mediumint(5) NOT NULL default '0',
+ `assaultid` varchar(10) NOT NULL default '',
+ `ass_att` tinyint(1) NOT NULL default '0',
+ `ass_win` tinyint(4) NOT NULL default '0',
+ `t0` tinyint(1) NOT NULL default '0',
+ `t1` tinyint(1) NOT NULL default '0',
+ `t2` tinyint(1) NOT NULL default '0',
+ `t3` tinyint(1) NOT NULL default '0',
+ `t0score` mediumint(5) NOT NULL default '0',
+ `t1score` mediumint(5) NOT NULL default '0',
+ `t2score` mediumint(5) NOT NULL default '0',
+ `t3score` mediumint(5) NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `serverip` (`serverip`)
+) ENGINE=MyISAM AUTO_INCREMENT=83 ;
+";
+
+$create_table['uts_pinfo'] = "
+CREATE TABLE `uts_pinfo` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(50) NOT NULL default '',
+ `country` char(2) NOT NULL default '',
+ `banned` enum('Y','N') NOT NULL default 'N',
+ PRIMARY KEY (`id`),
+ KEY `name` (`name`(22))
+) ENGINE=MyISAM AUTO_INCREMENT=136 ;
+";
+
+$create_table['uts_player'] = "
+CREATE TABLE `uts_player` (
+ `id` mediumint(10) NOT NULL auto_increment,
+ `matchid` mediumint(10) NOT NULL default '0',
+ `insta` tinyint(1) NOT NULL default '0',
+ `playerid` tinyint(3) NOT NULL default '0',
+ `pid` int(10) unsigned NOT NULL default '0',
+ `team` tinyint(2) unsigned NOT NULL default '0',
+ `isabot` tinyint(1) NOT NULL default '0',
+ `country` char(2) NOT NULL default '',
+ `ip` int(10) unsigned NOT NULL default '0',
+ `gid` tinyint(3) unsigned NOT NULL default '0',
+ `gametime` float NOT NULL default '0',
+ `gamescore` smallint(5) NOT NULL default '0',
+ `lowping` smallint(5) unsigned NOT NULL default '0',
+ `highping` smallint(5) unsigned NOT NULL default '0',
+ `avgping` smallint(5) unsigned NOT NULL default '0',
+ `frags` smallint(5) NOT NULL default '0',
+ `deaths` smallint(5) unsigned NOT NULL default '0',
+ `kills` smallint(5) unsigned NOT NULL default '0',
+ `suicides` smallint(5) unsigned NOT NULL default '0',
+ `teamkills` smallint(5) unsigned NOT NULL default '0',
+ `eff` float NOT NULL default '0',
+ `accuracy` float NOT NULL default '0',
+ `ttl` float NOT NULL default '0',
+ `flag_taken` smallint(5) unsigned NOT NULL default '0',
+ `flag_dropped` smallint(5) unsigned NOT NULL default '0',
+ `flag_return` smallint(5) unsigned NOT NULL default '0',
+ `flag_capture` tinyint(3) unsigned NOT NULL default '0',
+ `flag_cover` smallint(5) unsigned NOT NULL default '0',
+ `flag_seal` smallint(5) unsigned NOT NULL default '0',
+ `flag_assist` smallint(5) unsigned NOT NULL default '0',
+ `flag_kill` mediumint(5) unsigned NOT NULL default '0',
+ `flag_pickedup` smallint(5) unsigned NOT NULL default '0',
+ `dom_cp` smallint(5) unsigned NOT NULL default '0',
+ `ass_obj` smallint(5) unsigned NOT NULL default '0',
+ `spree_double` smallint(5) unsigned NOT NULL default '0',
+ `spree_triple` smallint(5) unsigned NOT NULL default '0',
+ `spree_multi` smallint(5) unsigned NOT NULL default '0',
+ `spree_mega` tinyint(3) unsigned NOT NULL default '0',
+ `spree_ultra` tinyint(3) unsigned NOT NULL default '0',
+ `spree_monster` tinyint(3) unsigned NOT NULL default '0',
+ `spree_kill` smallint(5) unsigned NOT NULL default '0',
+ `spree_rampage` smallint(5) unsigned NOT NULL default '0',
+ `spree_dom` tinyint(3) unsigned NOT NULL default '0',
+ `spree_uns` tinyint(3) unsigned NOT NULL default '0',
+ `spree_god` smallint(5) unsigned NOT NULL default '0',
+ `pu_pads` tinyint(3) unsigned NOT NULL default '0',
+ `pu_armour` tinyint(3) unsigned NOT NULL default '0',
+ `pu_keg` tinyint(3) unsigned NOT NULL default '0',
+ `pu_invis` tinyint(3) unsigned NOT NULL default '0',
+ `pu_belt` tinyint(3) unsigned NOT NULL default '0',
+ `pu_amp` tinyint(3) unsigned NOT NULL default '0',
+ `rank` float NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `matchid` (`matchid`,`team`),
+ KEY `pid` (`pid`),
+ KEY `gid` (`gid`)
+) ENGINE=MyISAM AUTO_INCREMENT=615 ;
+";
+
+$create_table['uts_rank'] = "
+CREATE TABLE `uts_rank` (
+ `id` mediumint(10) NOT NULL auto_increment,
+ `time` float unsigned NOT NULL default '0',
+ `pid` int(10) unsigned NOT NULL default '0',
+ `gid` tinyint(3) unsigned NOT NULL default '0',
+ `rank` float NOT NULL default '0',
+ `prevrank` float NOT NULL default '0',
+ `matches` mediumint(5) NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `name` (`pid`,`gid`),
+ KEY `rank` (`rank`),
+ KEY `gamename` (`gid`,`rank`)
+) ENGINE=MyISAM AUTO_INCREMENT=173 ;
+";
+
+$create_table['uts_weapons'] = "
+CREATE TABLE `uts_weapons` (
+ `id` tinyint(3) unsigned NOT NULL auto_increment,
+ `name` varchar(100) NOT NULL default '',
+ `image` varchar(50) NOT NULL default '',
+ `sequence` tinyint(3) unsigned NOT NULL default '200',
+ `hide` enum('N','Y') NOT NULL default 'N',
+ PRIMARY KEY (`id`),
+ KEY `name` (`name`(20))
+) ENGINE=MyISAM AUTO_INCREMENT=20 ;
+";
+
+$create_table['uts_weaponstats'] = "
+CREATE TABLE `uts_weaponstats` (
+ `matchid` mediumint(8) unsigned NOT NULL default '0',
+ `pid` int(10) unsigned NOT NULL default '0',
+ `weapon` tinyint(3) unsigned NOT NULL default '0',
+ `kills` mediumint(8) unsigned NOT NULL default '0',
+ `shots` int(10) unsigned NOT NULL default '0',
+ `hits` int(10) unsigned NOT NULL default '0',
+ `damage` int(10) unsigned NOT NULL default '0',
+ `acc` float unsigned NOT NULL default '0',
+ KEY `full` (`matchid`,`pid`)
+) ENGINE=MyISAM;
+";
+
+foreach ($create_table as $table => $query) {
+ echo '
+ <tr>
+ <td class="smheading" align="left" width="350">', $table, '</td>';
+ if (small_count("SHOW TABLES LIKE '$table'") == 1) {
+ // database exists, check columns
+ echo '
+ <td class="grey" align="left" width="200">OK</td></tr>';
+ }
+ else {
+ if (mysql_query($query)) {
+ echo '
+ <td class="grey" align="left" width="200">Created</td></tr>';
+ }
+ else {
+ echo '
+ <td class="warn" align="left" width="200">Not found!</td></tr>';
+ }
+ }
+}
+echo '
+ </tbody></table><br>';
+
+// Check the weapons
+$create_weapon['Translocator'] = "INSERT INTO `uts_weapons` VALUES (1, 'Translocator', 'trans.jpg', 1, 'N');";
+$create_weapon['Impact Hammer'] = "INSERT INTO `uts_weapons` VALUES (2, 'Impact Hammer', 'impact.jpg', 2, 'N');";
+$create_weapon['Enforcer'] = "INSERT INTO `uts_weapons` VALUES (3, 'Enforcer', 'enforcer.jpg', 3, 'N');";
+$create_weapon['Double Enforcer'] = "INSERT INTO `uts_weapons` VALUES (4, 'Double Enforcer', 'enforcer2.jpg', 4, 'N');";
+$create_weapon['GES Bio Rifle'] = "INSERT INTO `uts_weapons` VALUES (5, 'GES Bio Rifle', 'bio.jpg', 5, 'N');";
+$create_weapon['Ripper'] = "INSERT INTO `uts_weapons` VALUES (6, 'Ripper', 'ripper.jpg', 6, 'N');";
+$create_weapon['Shock Rifle'] = "INSERT INTO `uts_weapons` VALUES (7, 'Shock Rifle', 'shock.jpg', 7, 'N');";
+$create_weapon['Enhanced Shock Rifle'] = "INSERT INTO `uts_weapons` VALUES (8, 'Enhanced Shock Rifle', 'ishock.jpg', 8, 'N');";
+$create_weapon['Pulse Gun'] = "INSERT INTO `uts_weapons` VALUES (9, 'Pulse Gun', 'pulse.jpg', 9, 'N');";
+$create_weapon['Minigun'] = "INSERT INTO `uts_weapons` VALUES (10, 'Minigun', 'minigun.jpg', 10, 'N');";
+$create_weapon['Flak Cannon'] = "INSERT INTO `uts_weapons` VALUES (11, 'Flak Cannon', 'flak.jpg', 11, 'N');";
+$create_weapon['Rocket Launcher'] = "INSERT INTO `uts_weapons` VALUES (12, 'Rocket Launcher', 'rockets.jpg', 12, 'N');";
+$create_weapon['Sniper Rifle'] = "INSERT INTO `uts_weapons` VALUES (13, 'Sniper Rifle', 'sniper.jpg', 13, 'N');";
+$create_weapon['Redeemer'] = "INSERT INTO `uts_weapons` VALUES (14, 'Redeemer', 'deemer.jpg', 14, 'N');";
+$create_weapon['None'] = "INSERT INTO `uts_weapons` VALUES (15, 'None', 'blank.jpg', 15, 'N');";
+$create_weapon['Chainsaw'] = "INSERT INTO `uts_weapons` VALUES (16, 'Chainsaw', 'chainsaw.jpg', 16, 'N');";
+
+echo '
+ <table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tr>
+ <td class="smheading" align="center" height="25" width="550" colspan="2">Checking supported weapons</td>
+ </tr>';
+if (small_count("SHOW TABLES LIKE 'uts_weapons'") != 1) {
+ // database exists, check columns
+ echo '
+ <td class="warn" align="left" width="550" colspan = "2">Table uts_weapons does not exist!</td></tr>';
+}
+else {
+ foreach ($create_weapon as $weapon => $query) {
+ echo '
+ <tr>
+ <td class="smheading" align="left" width="350">', $weapon, '</td>';
+ if (small_count("SELECT id FROM uts_weapons WHERE name = '$weapon' LIMIT 0,1") == 1) {
+ // database exists, check columns
+ echo '
+ <td class="grey" align="left" width="200">OK</td></tr>';
+ }
+ else {
+ if (mysql_query($query)) {
+ echo '
+ <td class="grey" align="left" width="200">Added</td></tr>';
+ }
+ else {
+ echo '
+ <td class="warn" align="left" width="200">Not found!</td></tr>';
+ }
+ }
+ }
+}
+echo '
+ </tbody></table><br>';
+
+echo '
+ <table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tr>
+ <td class="smheading" align="center" height="25" width="550" colspan="2">Checking data</td>
+ </tr>';
+
+ echo '
+ <tr>
+ <td class="smheading" align="left" width="350">Fix BT cap times</td>';
+
+ $q = mysql_query("UPDATE uts_events SET col3 = ROUND(CEILING((col3-1)*100/1.1) / 100, 2), col1 = 'btcap' WHERE col1 = 'cap'");
+ $affected = mysql_affected_rows();
+
+ if ($affected == -1) {
+ echo '
+ <td class="error" align="left" width="200">Failed</td></tr>
+ <table>';
+ }
+ else {
+ echo '
+ <td class="grey" align="left" width="200">Updated ' . $affected . ' rows.</td></tr>
+ <table><br>';
+ }
+
+echo '
+ <table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody>';
+echo '<tr><td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td></tr>';
+echo '</tbody></table>';
+
+?> \ No newline at end of file
diff --git a/html/pages/admin/dmatch.php b/html/pages/admin/dmatch.php
new file mode 100755
index 0000000..9fed97d
--- /dev/null
+++ b/html/pages/admin/dmatch.php
@@ -0,0 +1,105 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Delete match';
+$i = 0;
+$options['vars'][$i]['name'] = 'server';
+$options['vars'][$i]['type'] = 'server';
+$options['vars'][$i]['prompt'] = 'Choose the server where the match took place:';
+$options['vars'][$i]['caption'] = 'Server:';
+$i++;
+$options['vars'][$i]['name'] = 'mid';
+$options['vars'][$i]['type'] = 'match';
+$options['vars'][$i]['whereserver'] = 'server';
+$options['vars'][$i]['prompt'] = 'Choose the match to delete:';
+$options['vars'][$i]['caption'] = 'Match to delete:';
+$i++;
+
+$results = adminselect($options);
+
+
+$matchid = $results['mid'];
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Deleting Match ID '.$matchid.'</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Adjusting Rankings</td>';
+$sql_radjust = "SELECT pid, gid, rank FROM uts_player WHERE matchid = $matchid";
+$q_radjust = mysql_query($sql_radjust) or die(mysql_error());
+$pids = array();
+while ($r_radjust = mysql_fetch_array($q_radjust)) {
+
+ $pid = $r_radjust[pid];
+ $pids[] = $pid;
+ $gid = $r_radjust[gid];
+ $rank = $r_radjust[rank];
+
+ $sql_crank = small_query("SELECT id, rank, matches FROM uts_rank WHERE pid = $pid AND gid = $gid");
+ if (!$sql_crank) continue;
+
+ $rid = $sql_crank[id];
+ $newrank = $sql_crank[rank]-$rank;
+ $oldrank = $sql_crank[rank];
+ $matchcount = $sql_crank[matches]-1;
+
+ mysql_query("UPDATE uts_rank SET rank = $newrank, prevrank = $oldrank, matches = $matchcount WHERE id = $rid") or die(mysql_error());
+ mysql_query("DELETE FROM uts_rank WHERE matches = 0") or die(mysql_error());
+}
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Match Record:</td>';
+mysql_query("DELETE FROM uts_match WHERE id = $matchid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Player Records:</td>';
+mysql_query("DELETE FROM uts_player WHERE matchid = $matchid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Kill Matrix Entries:</td>';
+mysql_query("DELETE FROM uts_killsmatrix WHERE matchid = $matchid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE matchid = $matchid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Player Weapon Stats:</td>';
+foreach($pids as $pid) {
+ mysql_query("DELETE FROM uts_weaponstats WHERE matchid IN ('$matchid','0') AND pid = '$pid'") or die(mysql_error());
+
+ $q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE pid = '$pid' GROUP BY weapon") or die(mysql_error());
+ while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='$pid', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+ }
+}
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Global Weapon Stats:</td>';
+ mysql_query("DELETE FROM uts_weaponstats WHERE matchid='0' AND pid='0'") or die(mysql_error());
+
+ $q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE matchid = '0' GROUP BY weapon") or die(mysql_error());
+ while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='0', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+ }
+
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing events:</td>';
+mysql_query("DELETE FROM uts_events WHERE matchid = $matchid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="center" colspan="2">Match Deleted - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+
+?>
diff --git a/html/pages/admin/dplayer.php b/html/pages/admin/dplayer.php
new file mode 100755
index 0000000..0239e5d
--- /dev/null
+++ b/html/pages/admin/dplayer.php
@@ -0,0 +1,76 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Delete Player';
+$i = 0;
+$options['vars'][$i]['name'] = 'pid';
+$options['vars'][$i]['type'] = 'player';
+$options['vars'][$i]['prompt'] = 'Choose the player you want to delete:';
+$options['vars'][$i]['caption'] = 'Player to delete:';
+$i++;
+
+$results = adminselect($options);
+
+
+$pid = $results['pid'];
+$playerid = $pid;
+
+echo'<table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Deleting Player</td>
+</tr>
+<tr>
+ <td class="smheading" align="left">Removing Kill Matrix Entries:</td>';
+ $q_match = mysql_query("SELECT matchid, playerid FROM uts_player WHERE pid = '$pid'") or die(mysql_error());
+ while ($r_match = mysql_fetch_array($q_match)) {
+ mysql_query("DELETE FROM uts_killsmatrix WHERE matchid = '${r_match['matchid']}' AND (killer = '${r_match['playerid']}' OR victim = '${r_match['playerid']}')") or die(mysql_error());
+ }
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+
+<tr>
+ <td class="smheading" align="left" width="300">Removing Player Info:</td>';
+$r_pinfo = small_query("SELECT banned FROM uts_pinfo WHERE id = $playerid");
+if ($r_pinfo['banned'] != 'Y') {
+ mysql_query("DELETE FROM uts_pinfo WHERE id = $playerid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="300">Done</td>';
+} else {
+ echo'<td class="grey" align="left" width="300">No (player banned)</td>';
+}
+echo '
+</tr>
+<tr>
+ <td class="smheading" align="left">Removing Player Match Events:</td>';
+mysql_query("DELETE e.* FROM uts_player as p, uts_events as e WHERE p.pid = $playerid AND p.playerid = e.playerid AND p.matchid = e.matchid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left">Removing Player Match Records:</td>';
+mysql_query("DELETE FROM uts_player WHERE pid = $playerid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left">Removing Player Rank:</td>';
+mysql_query("DELETE FROM uts_rank WHERE pid = $playerid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left">Removing Player Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE pid = $playerid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Global Weapon Stats:</td>';
+ mysql_query("DELETE FROM uts_weaponstats WHERE matchid='0' AND pid='0'") or die(mysql_error());
+
+ $q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE matchid = '0' GROUP BY weapon") or die(mysql_error());
+ while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='0', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+ }
+
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="center" colspan="2">Player Deleted - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+?>
diff --git a/html/pages/admin/dpmatch.php b/html/pages/admin/dpmatch.php
new file mode 100755
index 0000000..b021054
--- /dev/null
+++ b/html/pages/admin/dpmatch.php
@@ -0,0 +1,106 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Delete Player from Match';
+$i = 0;
+$options['vars'][$i]['name'] = 'pid';
+$options['vars'][$i]['type'] = 'player';
+$options['vars'][$i]['prompt'] = 'Choose the player you want to delete from a match:';
+$options['vars'][$i]['caption'] = 'Player to delete:';
+$i++;
+$options['vars'][$i]['name'] = 'mid';
+$options['vars'][$i]['type'] = 'match';
+$options['vars'][$i]['whereplayer'] = 'pid';
+$options['vars'][$i]['prompt'] = 'Choose the match you want to delete the player from:';
+$options['vars'][$i]['caption'] = 'Match:';
+$i++;
+
+$results = adminselect($options);
+
+
+$matchid = $results['mid'];
+$pid = $results['pid'];
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Delete Player From Match ID '.$matchid.'</td>
+</tr>';
+
+echo'<tr>
+ <td class="smheading" align="left" width="200">Amending Players Rank:</td>';
+
+$q_radjust = small_query("SELECT pid, gid, rank FROM uts_player WHERE id = $pid");
+if (!$q_radjust) {
+ $sql_crank = false;
+} else {
+ $rank_pid = $q_radjust[pid];
+ $rank_gid = $q_radjust[gid];
+ $rank = $q_radjust[rank];
+
+ $sql_crank = small_query("SELECT id, rank, matches FROM uts_rank WHERE pid = $rank_pid AND gid = '$rank_gid'");
+}
+if (!$sql_crank) {
+ echo'<td class="grey" align="left" width="400">Player not in rankings</td>';
+} else {
+ $rid = $sql_crank[id];
+ $newrank = $sql_crank[rank]-$rank;
+ $oldrank = $sql_crank[rank];
+ $matchcount = $sql_crank[matches]-1;
+
+ mysql_query("UPDATE uts_rank SET rank = $newrank, prevrank = $oldrank, matches = $matchcount WHERE id = $rid") or die(mysql_error());
+ mysql_query("DELETE FROM uts_rank WHERE matches = 0") or die(mysql_error());
+
+ echo'<td class="grey" align="left" width="400">Done</td>';
+}
+echo'</tr>
+<tr>
+ <td class="smheading" align="left">Removing Kill Matrix Entries:</td>';
+ $q_match = mysql_query("SELECT matchid, playerid FROM uts_player WHERE pid = '$pid' and matchid = '$matchid'") or die(mysql_error());
+ while ($r_match = mysql_fetch_array($q_match)) {
+ mysql_query("DELETE FROM uts_killsmatrix WHERE matchid = '${r_match['matchid']}' AND (killer = '${r_match['playerid']}' OR victim = '${r_match['playerid']}')") or die(mysql_error());
+ }
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+
+
+<tr>
+ <td class="smheading" align="left" width="200">Removing Player Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE matchid = $matchid AND pid = $pid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Player Events:</td>';
+mysql_query("DELETE e.* FROM uts_events as e, uts_player as p WHERE p.pid = '$pid' AND e.matchid = $matchid AND p.playerid = e.playerid AND p.matchid = e.matchid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Player From Match:</td>';
+mysql_query("DELETE FROM uts_player WHERE matchid IN ('$matchid','0') AND pid = '$pid'") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Player Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE matchid IN ('$matchid','0') AND pid = '$pid'") or die(mysql_error());
+
+$q_weaponstats = mysql_query("SELECT SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE pid = '$pid' GROUP BY weapon") or die(mysql_error());
+while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='$pid', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+}
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Global Weapon Stats:</td>';
+ mysql_query("DELETE FROM uts_weaponstats WHERE matchid='0' AND pid='0'") or die(mysql_error());
+
+ $q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE matchid = '0' GROUP BY weapon") or die(mysql_error());
+ while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='0', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+ }
+
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="center" colspan="2">Match Deleted - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+?>
diff --git a/html/pages/admin/editgames.php b/html/pages/admin/editgames.php
new file mode 100755
index 0000000..3f7a542
--- /dev/null
+++ b/html/pages/admin/editgames.php
@@ -0,0 +1,74 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+if (isset($_REQUEST['submit'])) {
+ foreach($_REQUEST['name'] as $id => $bla) {
+ if ($id == 0) {
+ if (empty($_REQUEST['name'][$id])) continue;
+ mysql_query(" INSERT INTO uts_games
+ SET name = '". my_addslashes($_REQUEST['name'][$id]) ."',
+ gamename = '(user defined)';") or die(mysql_error());
+ } else {
+ mysql_query(" UPDATE uts_games
+ SET name = '". my_addslashes($_REQUEST['name'][$id]) ."'
+ WHERE id = '$id';") or die(mysql_error());
+ }
+ }
+}
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="medheading" align="center" colspan="2">Edit games</td>
+</tr>
+<tr>
+ <td class="smheading">GameName</td>
+ <td class="smheading">DisplayName</td>
+</tr>
+<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
+<input type="hidden" name="key" value="'.$adminkey.'">
+<input type="hidden" name="action" value="'.$action.'">
+';
+
+
+$sql_games = "SELECT id, gamename, name FROM uts_games ORDER BY gamename ASC;";
+$q_games = mysql_query($sql_games) or die(mysql_error());
+$i = 0;
+while ($r_games = mysql_fetch_array($q_games)) {
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr>';
+ echo '<td class="'.$class.'">'.htmlentities($r_games['gamename']).'</td>';
+ echo '<td class="'.$class.'"><input class="searchform" type="text" name="name['.$r_games['id'].']" value="'.$r_games['name'].'"></td>';
+ echo '</tr>';
+}
+echo'
+<tr>
+ <td colspan="2">&nbsp;</td>
+</tr>
+<tr>
+ <td class="smheading" colspan="2" align="center">Add new</td>
+</tr>
+<tr>
+ <td class="grey">(n/a)</td>
+ <td class="grey"><input class="searchform" type="text" name="name[0]" value=""></td></td>
+</tr>
+<tr>
+ <td colspan="2">&nbsp;</td>
+</tr>
+<tr>
+ <td class="smheading" colspan="2" align="center">Submit</td>
+</tr>
+';
+
+
+echo '<tr>';
+echo '<td class="darkgrey" colspan="4" align="center"><input class="searchformb" type="Submit" name="submit" value="Save"></td>';
+echo '</tr>';
+
+echo'</form>
+ <tr>
+ <td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr>
+</table>';
+
+?>
diff --git a/html/pages/admin/editgamestype.php b/html/pages/admin/editgamestype.php
new file mode 100755
index 0000000..d9e4ff1
--- /dev/null
+++ b/html/pages/admin/editgamestype.php
@@ -0,0 +1,228 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$sql_server = "SELECT id, servername, serverip FROM uts_match GROUP BY servername, serverip ORDER BY servername ASC";
+$q_server = mysql_query($sql_server) or die(mysql_error());
+$servernames = array('0' => '');
+$serverips = array('0' => '*');
+while ($r_server = mysql_fetch_array($q_server)) {
+ $servernames[$r_server['id']] = $r_server['servername'];
+ $serverips[$r_server['id']] = $r_server['serverip'];
+}
+
+$sql_games = "SELECT id, gamename, name FROM uts_games ORDER BY gamename ASC";
+$q_games = mysql_query($sql_games) or die(mysql_error());
+$gamedisplaynames = array('0' => '');
+$gamenames = array('0' => '*');
+while ($r_games = mysql_fetch_array($q_games)) {
+ $gamenames[$r_games['id']] = $r_games['gamename'];
+ $gamedisplaynames[$r_games['id']] = $r_games['name'];
+}
+
+
+if (isset($_REQUEST['submit'])) {
+ mysql_query(" INSERT INTO uts_gamestype
+ SET serverip = '". my_addslashes($_REQUEST['serverip']) ."',
+ gamename = '". my_addslashes($_REQUEST['gamename']) ."',
+ mutator = '". my_addslashes($_REQUEST['mutator']) ."',
+ gid = '". my_addslashes($_REQUEST['gid']) ."'
+ ") or die(mysql_error());
+
+ if (isset($_REQUEST['update'])) {
+ echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" colspan="2">Updating...</td>
+ </tr>
+
+
+
+ <tr>
+ <td class="smheading" align="left" width="200">Updating Player Records</td>';
+ $where = 'WHERE 1';
+ if ($_REQUEST['serverip'] != '*') {
+ $where .= " AND m.serverip = '". my_addslashes($_REQUEST['serverip']) ."'";
+ }
+ if ($_REQUEST['gamename'] != '*') {
+ $gids = array_keys($gamenames, my_stripslashes($_REQUEST['gamename']));
+ $where .= " AND m.gid IN (".implode(',', $gids).")";
+ }
+ if ($_REQUEST['mutator'] != '*') {
+ $where .= " AND m.mutators LIKE '%".my_addslashes($_REQUEST['mutator'])."%'";
+ }
+
+ mysql_query("UPDATE uts_player p, uts_match m SET p.gid = '". my_addslashes($_REQUEST['gid']) ."' $where AND m.id = p.matchid;") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done (updated '.mysql_affected_rows().' records)</td>
+ </tr>
+
+
+
+
+ <tr>
+ <td class="smheading" align="left" width="200">Updating Matches</td>';
+ mysql_query("UPDATE uts_match m SET m.gid = '". my_addslashes($_REQUEST['gid']) ."' $where;") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done (updated '.mysql_affected_rows().' matches)</td>
+ </tr>
+
+
+
+
+
+ <tr>
+ <td class="smheading" align="left" width="200">Re-Calcuating Rankings</td>';
+
+ if ($_REQUEST['gamename'] != '*') {
+ $gids[] = $_REQUEST['gid'];
+ $where = "WHERE gid IN (".implode(',', $gids).")";
+ } else {
+ $where = 'WHERE 1';
+ }
+ mysql_query("DELETE FROM uts_rank $where;") or die(mysql_error());
+
+ $sql_nrank = "SELECT SUM(p.gametime) AS time, p.pid, p.gid, SUM(p.rank) AS rank, COUNT(p.matchid) AS matches FROM uts_player p, uts_pinfo pi $where AND pi.id = p.pid AND pi.banned <> 'Y' GROUP BY p.gid, p.pid";
+ $q_nrank = mysql_query($sql_nrank) or die(mysql_error());
+ $num_ranks = 0;
+ while ($r_nrank = mysql_fetch_array($q_nrank)) {
+ mysql_query("INSERT INTO uts_rank SET time = '${r_nrank['time']}', pid = ${r_nrank['pid']}, gid = ${r_nrank['gid']}, rank = '${r_nrank['rank']}', prevrank = '${r_nrank['rank']}', matches = ${r_nrank['matches']}") or die(mysql_error());
+ $num_ranks++;
+ }
+ echo'<td class="grey" align="left" width="400">Done (recalculated '.$num_ranks.' rankings)</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" colspan="2">Update finished..</td>
+ </tr>
+ </table>';
+ }
+}
+
+if (isset($_REQUEST['del'])) {
+ mysql_query(" DELETE FROM uts_gamestype
+ WHERE id = '". my_addslashes($_REQUEST['del']) ."'
+ ") or die(mysql_error());
+}
+
+
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="medheading" align="center" colspan="8">Current Mappings</td>
+</tr>
+<tr>
+ <td class="smheading" width="130">&nbsp;Server IP</td>
+ <td class="smheading" width="20"></td>
+ <td class="smheading" width="130">&nbsp;Game Name</td>
+ <td class="smheading" width="20"></td>
+ <td class="smheading" width="130">&nbsp;Mutatorlist contains</td>
+ <td class="smheading" width="20"></td>
+ <td class="smheading" width="130">&nbsp;Game</td>
+ <td class="smheading" width="20"></td>
+</tr>';
+
+
+
+
+
+
+$sql_gamestype = "SELECT id, serverip, gamename, mutator, gid FROM uts_gamestype ORDER BY id ASC;";
+$q_gamestype = mysql_query($sql_gamestype) or die(mysql_error());
+$i = 0;
+while ($r_gamestype = mysql_fetch_array($q_gamestype)) {
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr>';
+ echo '<td class="'.$class.'">&nbsp;'.htmlentities($r_gamestype['serverip']).'</td>';
+ echo '<td class="smheading" align="center">+</td>';
+ echo '<td class="'.$class.'">&nbsp;'.htmlentities($r_gamestype['gamename']).'</td>';
+ echo '<td class="smheading" align="center">+</td>';
+ echo '<td class="'.$class.'">&nbsp;'.htmlentities($r_gamestype['mutator']).'</td>';
+ echo '<td class="smheading" align="center">=</td>';
+ echo '<td class="'.$class.'">&nbsp;'.htmlentities($gamedisplaynames[$r_gamestype['gid']]).'</td>';
+ echo '<td class="'.$class.'" align="center">';
+ echo '<a href="'.$_SERVER['PHP_SELF'].'?action='.$action.'&amp;key='.$adminkey.'&amp;del='.$r_gamestype['id'].'">';
+ echo '<img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" />';
+ echo '</a>';
+ echo '</td>';
+ echo '</tr>';
+}
+
+echo '</tr></table>';
+
+
+
+
+
+
+
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="medheading" align="center" colspan="2">Add new gamestype</td>
+</tr>
+<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
+<input type="hidden" name="key" value="'.$adminkey.'">
+<input type="hidden" name="action" value="'.$action.'">
+';
+
+$class='grey';
+echo '<tr>';
+echo '<td class="smheading" width="170">If server =</td>';
+echo '<td class="'.$class.'">';
+echo '<select class="searchform" name="serverip">';
+foreach($serverips as $id => $bla) {
+ echo '<option value="'.$serverips[$id].'">'. $serverips[$id];
+ if (!empty($servernames[$id])) echo ' ('. $servernames[$id] .')';
+ echo '</option>';
+ }
+echo '</select>';
+echo '</td></tr>';
+
+
+echo '<tr><td class="smheading" nowrap>and gamename =</td>';
+echo '<td class="'.$class.'">';
+
+echo '<select class="searchform" name="gamename">';
+foreach($gamenames as $id => $bla) {
+ if ($gamenames[$id] == '(user defined)') continue;
+ echo '<option value="'.$gamenames[$id].'">'. $gamenames[$id];
+ if (!empty($gamedisplaynames[$id])) echo ' ('. $gamedisplaynames[$id] .')';
+ echo '</option>';
+}
+echo '</select>';
+echo '</td></tr>';
+
+
+echo '<tr><td class="smheading" nowrap>and mutatorlist contains</td>';
+echo '<td class="'.$class.'">';
+echo '<input type="text" class="searchform" name="mutator" value="*"> <span class="text2">(case insensitive substring)</span>';
+echo '</td></tr>';
+
+
+echo '<tr><td class="smheading" nowrap>==&gt; assume gametype:</td>';
+echo '<td class="'.$class.'">';
+
+echo '<select class="searchform" name="gid">';
+foreach($gamenames as $id => $bla) {
+ if ($gamenames[$id] == '*') continue;
+ echo '<option value="'.$id.'">'. $gamenames[$id];
+ if (!empty($gamedisplaynames[$id])) echo ' ['. $gamedisplaynames[$id] .']';
+ echo '</option>';
+}
+echo '</select>';
+echo '</td></tr>';
+
+echo '<tr><td class="smheading">Update existing matches:</td>';
+echo '<td class="'.$class.'">';
+echo '<input type="checkbox" checked name="update"> <span class="text2">(this cannot be undone easily!)</span>';
+echo '</td></tr>';
+
+
+echo '<tr>';
+echo '<td class="'.$class.'" colspan="2" align="center"><input class="searchformb" type="Submit" name="submit" value="Add"></td>';
+echo '</tr>';
+
+echo'</form>
+ <tr>
+ <td class="smheading" align="center" colspan="2"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr>
+</table>';
+
+?>
diff --git a/html/pages/admin/editweapons.php b/html/pages/admin/editweapons.php
new file mode 100755
index 0000000..2baeab9
--- /dev/null
+++ b/html/pages/admin/editweapons.php
@@ -0,0 +1,58 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+if (isset($_REQUEST['submit'])) {
+ foreach($_REQUEST['image'] as $id => $bla) {
+ mysql_query(" UPDATE uts_weapons
+ SET image = '". my_addslashes($_REQUEST['image'][$id]) ."',
+ sequence = '". my_addslashes($_REQUEST['sequence'][$id]) ."',
+ hide = '". (isset($_REQUEST['hide'][$id]) ? 'Y' : 'N') ."'
+ WHERE id = '$id';") or die(mysql_error());
+ }
+}
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="medheading" align="center" colspan="4">Edit weapons</td>
+</tr>
+<tr>
+ <td class="smheading">Name</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('', 'Image to display instead of the weapon\'s name<br>Should exist in images/weapons/<br>Leave empty to display the weapon name').'>Image</td>
+ <td class="smheading" '.OverlibPrintHint('', 'Use this number to set the weapons order to your liking').'>Order</td>
+ <td class="smheading" '.OverlibPrintHint('', 'If checked, this weapon won\'t be shown (including kills, shots, acc, ...)').'>Hide</td>
+</tr>
+<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
+<input type="hidden" name="key" value="'.$adminkey.'">
+<input type="hidden" name="action" value="'.$action.'">
+';
+
+
+$sql_weapons = "SELECT id, name, image, sequence, hide FROM uts_weapons ORDER BY sequence ASC;";
+$q_weapons = mysql_query($sql_weapons) or die(mysql_error());
+$i = 0;
+while ($r_weapons = mysql_fetch_array($q_weapons)) {
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr>';
+ echo '<td class="'.$class.'">'.htmlentities($r_weapons['name']).'</td>';
+ echo '<td class="'.$class.'">';
+ echo '<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td width="60%">';
+ echo '<input class="searchform" type="text" name="image['.$r_weapons['id'].']" value="'.$r_weapons['image'].'">';
+ echo '</td><td width="40%" align="center">';
+ if (!empty($r_weapons['image'])) echo ' <img src="images/weapons/'. $r_weapons['image'] .'" border="0">';
+ echo' </td></tr></table></td>';
+ echo '<td class="'.$class.'"><input class="searchform" type="text" name="sequence['.$r_weapons['id'].']" value="'.$r_weapons['sequence'].'" size="3" maxlength="3"></td>';
+ echo '<td class="'.$class.'"><input class="searchform" type="checkbox" name="hide['.$r_weapons['id'].']" '.($r_weapons['hide'] == 'Y' ? 'checked' : '').'></td>';
+ echo '</tr>';
+}
+
+echo '<tr>';
+echo '<td class="darkgrey" colspan="4" align="center"><input class="searchformb" type="Submit" name="submit" value="Save"></td>';
+echo '</tr>';
+
+echo'</form>
+ <tr>
+ <td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+?>
diff --git a/html/pages/admin/emptydb.php b/html/pages/admin/emptydb.php
new file mode 100755
index 0000000..9eee7d2
--- /dev/null
+++ b/html/pages/admin/emptydb.php
@@ -0,0 +1,62 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Empty the Database';
+$i = 0;
+$options['vars'][$i]['name'] = 'sure';
+$options['vars'][$i]['type'] = 'static';
+$options['vars'][$i]['options'] = 'No|Yes';
+$options['vars'][$i]['exitif'] = 'No';
+$options['vars'][$i]['prompt'] = 'Are you sure (all data will be lost)?';
+$options['vars'][$i]['caption'] = 'Sure:';
+$i++;
+$options['vars'][$i]['name'] = 'really';
+$options['vars'][$i]['type'] = 'static';
+$options['vars'][$i]['options'] = 'No|Yes';
+$options['vars'][$i]['exitif'] = 'No';
+$options['vars'][$i]['prompt'] = 'Are you really sure (this can NOT be undone)?';
+$options['vars'][$i]['caption'] = 'Really sure (last warning):';
+$i++;
+
+$results = adminselect($options);
+
+
+IF ($results['sure'] == "Yes" and $results['really'] == "Yes") {
+ echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" colspan="2">Empty Database</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="left" width="300">Emptying All Tables but uts_ip2country and uts_weaponstats</td>';
+ mysql_query("TRUNCATE uts_events;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_games;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_gamestype;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_killsmatrix;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_match;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_pinfo;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_player;") or die(mysql_error());
+ mysql_query("TRUNCATE uts_rank;") or die(mysql_error());
+ mysql_query("DELETE FROM uts_weapons WHERE id > 19") or die(mysql_error());
+ mysql_query("ALTER TABLE uts_weapons AUTO_INCREMENT=20") or die(mysql_error());
+ mysql_query("TRUNCATE uts_weaponstats;") or die(mysql_error());
+ echo'<td class="grey" align="left" width="300">Done</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" colspan="2">Database Emptied - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+ </tr></table>';
+} else {
+ echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" colspan="2">Empty Database</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="left" width="300">Database Not Emptied</td>
+ <td class="grey" align="left" width="300">Answer Was No</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" colspan="2">Database Not Emptied - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+ </tr></table>';
+}
+
+
+?>
diff --git a/html/pages/admin/index.htm b/html/pages/admin/index.htm
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/html/pages/admin/index.htm
diff --git a/html/pages/admin/ipsearch.php b/html/pages/admin/ipsearch.php
new file mode 100755
index 0000000..4ac9731
--- /dev/null
+++ b/html/pages/admin/ipsearch.php
@@ -0,0 +1,58 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['requireconfirmation'] = false;
+$options['title'] = 'IP Search';
+$i = 0;
+$options['vars'][$i]['name'] = 'ip_from';
+$options['vars'][$i]['type'] = 'text';
+$options['vars'][$i]['prompt'] = 'Enter the IP you want to search from:';
+$options['vars'][$i]['caption'] = 'IP from:';
+$i++;
+$options['vars'][$i]['name'] = 'ip_to';
+$options['vars'][$i]['type'] = 'text';
+$options['vars'][$i]['initialvalue'] = 'ip_from';
+$options['vars'][$i]['prompt'] = 'Enter the IP you want to search to:';
+$options['vars'][$i]['caption'] = 'IP to:';
+$i++;
+
+$results = adminselect($options);
+
+
+$ip_from = $results['ip_from'];
+$ip_to = $results['ip_to'];
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Players using IPs '.$ip_from.' - '.$ip_to.' and their last 5 matches using these IPs</td>
+</tr>';
+
+
+$sql_players = "SELECT pi.name, pi.id AS pid FROM uts_player p, uts_pinfo pi WHERE p.pid = pi.id AND p.ip BETWEEN INET_ATON('$ip_from') AND INET_ATON('$ip_to') GROUP BY pid";
+$q_players = mysql_query($sql_players) or die(mysql_error());
+$j = 0;
+while ($r_players = mysql_fetch_array($q_players)) {
+ echo '<tr>';
+ echo '<td class="dark" align="center" valign="top" width="150">';
+ echo '<a class="darkhuman" href="admin.php?action=pinfo&amp;pid='.$r_players['pid'].'">'.$r_players['name'].'</a></td>';
+ $sql_recent = "SELECT m.time AS time, m.id AS mid, INET_NTOA(p.ip) AS ip FROM uts_player p, uts_match m WHERE m.id = p.matchid AND p.pid = '${r_players['pid']}' AND p.ip BETWEEN INET_ATON('$ip_from') AND INET_ATON('$ip_to') ORDER BY m.time DESC LIMIT 0,5";
+ echo '<td class="grey">';
+ echo '<table width="100%" border="0" cellspacing="0" cellpadding="2">';
+ $q_recent= mysql_query($sql_recent) or die(mysql_error());
+ while ($r_recent = mysql_fetch_array($q_recent)) {
+ $j++;
+ $class = ($j%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'" align="center" width="60%">';
+ echo '<a class="'.$class.'" href="./?p=match&amp;mid='.$r_recent['mid'].'">'.mdate($r_recent['time']).'</a>';
+ echo '</td><td class="'.$class.'" align="center">';
+ echo $r_recent['ip'];
+ echo '</td></tr>';
+ }
+ echo '</table></td></tr>';
+}
+
+
+echo'<tr>
+ <td class="smheading" align="center" colspan="2"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+?>
diff --git a/html/pages/admin/main.php b/html/pages/admin/main.php
new file mode 100755
index 0000000..4d60302
--- /dev/null
+++ b/html/pages/admin/main.php
@@ -0,0 +1,117 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+if (isset($_REQUEST['droptable'])) {
+ $droptable = my_addslashes($_REQUEST['droptable']);
+ if (substr($droptable, 0, 9) == 'uts_temp_' and strlen($droptable) == 17) {
+ mysql_query("DROP TABLE $droptable;") or die(mysql_error());
+ } else {
+ die('NO!');
+ }
+}
+
+
+// Graph width
+$max_width = 150;
+function nf($number) {
+ return(number_format($number));
+}
+
+
+echo'<table class = "box" border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" height="25" colspan="4">Database Statistics</td>
+</tr>';
+
+$q_dbsize = mysql_query("SHOW table STATUS") or die(mysql_error());
+$tot_size = 0;
+$tot_rows = 0;
+$max_size = 0;
+while ($r_dbsize = mysql_fetch_array($q_dbsize)) {
+ if (substr($r_dbsize['Name'], 0, 4) != 'uts_') continue;
+ $size = $r_dbsize['Data_length'] + $r_dbsize['Index_length'];
+ $rows = $r_dbsize['Rows'];
+ $tables[] = array (
+ 'name' => $r_dbsize['Name'],
+ 'size' => $size,
+ 'rows' => $rows
+ );
+ $tot_size += $size;
+ $tot_rows += $rows;
+ if ($max_size < $size) $max_size = $size;
+
+}
+
+$i = 0;
+foreach($tables as $table) {
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+
+ $d_size = file_size_info($table['size']);
+ $title = get_dp($table['size'] / $tot_size * 100) .' %';
+ echo'<tr>
+ <td class="smheading" align="left" width="200">';
+ if (substr($table['name'], 0, 9) == 'uts_temp_' and strlen($table['name']) == 17) {
+ echo '<a href="admin.php?key='. urlencode($adminkey) .'&amp;action=main&amp;droptable='.htmlentities($table['name']).'"><img src="images/del.png" border="0" width="16" height="16" title="Click to drop this table" alt="Delete" /></a><em>'.$table['name'].'</em>';
+ } else {
+ echo $table['name'];
+ }
+ echo '</td>
+ <td class="'.$class.'" align="right">'.nf($table['rows']).' rows</td>
+ <td class="'.$class.'" align="right">'.$d_size['size'] .' '. $d_size['type'].'</td>
+ <td class="'.$class.'" width="'.($max_width + 5).'"><img border="0" src="images/bars/h_bar'. ($i % 16 + 1) .'.png" height="10" width="'.(int)($table['size'] / $max_size * $max_width).'" alt="'. $title .'" title="'. $title .'"></td>
+ </tr>';
+}
+
+$d_size = file_size_info($tot_size);
+echo'<tr>
+ <td class="smheading" align="left" width="200">Total Database Size</td>
+ <td class="darkgrey" align="right">'.nf($tot_rows).' rows</td>
+ <td class="darkgrey" align="right">'.$d_size['size'] .' '. $d_size['type'].'</td>
+ <td class="darkgrey" >&nbsp;</td>
+</tr>
+</table><br>';
+
+echo'<table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr><td width="100%">';
+
+echo '
+ <ul>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=mplayers">Merge Players</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=mservers">Merge Servers</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=plm">Merge IPs with more than 1 Player</a></li>';
+ echo '<br>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=dmatch">Delete Match</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=dpmatch">Delete Player From Match</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=dplayer">Delete Player</a></li>';
+ echo '<br>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=pban&amp;saction=ban">Ban Player</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=pban&amp;saction=unban">Unban Player</a></li>';
+ echo '<br>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=pinfo">Extended Player Info</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=ipsearch">Search IP</a></li>';
+ if ($import_utdc_download_enable) {
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=utdclog">View UTDC logs</a></li>';
+ }
+ if ($import_ac_download_enable) {
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=aclog">View AnthChecker logs</a></li>';
+ }
+ if ($import_ace_download_enable) {
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=acelog">View ACE logs</a></li>';
+ }
+ echo '<br>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=editweapons">Edit Weapons</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=editgames">Add/Edit Game Names</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=editgamestype">Add/Edit Game Types</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=recalcranking">Recalculate Rankings</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=recalcflags">Recalculate Countryflags</a></li>';
+ echo '<br>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=check">Check server settings</a></li>';
+ echo '<li><a href="admin.php?key='. urlencode($adminkey) .'&amp;action=emptydb">Empty the database</a></li>';
+echo '
+</ul>
+';
+
+
+
+echo'</td></tr></table>';
+?>
diff --git a/html/pages/admin/mplayers.php b/html/pages/admin/mplayers.php
new file mode 100755
index 0000000..3754d99
--- /dev/null
+++ b/html/pages/admin/mplayers.php
@@ -0,0 +1,91 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Merge Players';
+$i = 0;
+$options['vars'][$i]['name'] = 'mplayer1';
+$options['vars'][$i]['type'] = 'player';
+$options['vars'][$i]['prompt'] = 'Choose player to merge to:';
+$options['vars'][$i]['caption'] = 'Player to merge to:';
+$i++;
+$options['vars'][$i]['name'] = 'mplayer2';
+$options['vars'][$i]['type'] = 'player';
+$options['vars'][$i]['prompt'] = 'Choose player to merge from:';
+$options['vars'][$i]['caption'] = 'Player to merge from:';
+$options['vars'][$i]['exclude'] = 'mplayer1';
+$i++;
+
+$results = adminselect($options);
+
+
+
+$mplayer1 = $results['mplayer1'];
+$mplayer2 = $results['mplayer2'];
+
+
+$mp1name = small_query("SELECT name FROM uts_pinfo WHERE id = $mplayer1");
+$mp2name = small_query("SELECT name FROM uts_pinfo WHERE id = $mplayer2");
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Merging '.$mp2name[name].' Into '.$mp1name[name].'</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Info Records</td>';
+mysql_query("DELETE FROM uts_pinfo WHERE id = $mplayer2") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Updating Player Records</td>';
+mysql_query("UPDATE uts_player SET pid = $mplayer1 WHERE pid = $mplayer2") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Updating Weapon Records</td>';
+mysql_query("UPDATE uts_weaponstats SET pid = $mplayer1 WHERE pid = $mplayer2") or die(mysql_error());
+mysql_query("DELETE FROM uts_weaponstats WHERE pid = $mplayer2") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Player Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE matchid='0' AND pid = '$mplayer1'") or die(mysql_error());
+
+$q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE pid = '$mplayer1' GROUP BY weapon") or die(mysql_error());
+while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='$mplayer1', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+}
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Updating First Blood Records</td>';
+mysql_query("UPDATE uts_match SET firstblood = $mplayer1 WHERE firstblood = $mplayer2") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Temporary Rank</td>';
+mysql_query("UPDATE uts_rank SET pid = $mplayer2 WHERE pid= $mplayer1") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Creating New Rank</td>';
+
+$sql_nrank = "SELECT SUM(time) AS time, pid, gid, AVG(rank) AS rank, AVG(prevrank) AS prevrank, SUM(matches) AS matches FROM uts_rank WHERE pid = $mplayer2 GROUP BY pid, gid";
+$q_nrank = mysql_query($sql_nrank) or die(mysql_error());
+while ($r_nrank = mysql_fetch_array($q_nrank)) {
+
+ mysql_query("INSERT INTO uts_rank SET time = '$r_nrank[time]', pid = $mplayer1, gid = $r_nrank[gid], rank = '$r_nrank[rank]', prevrank = '$r_nrank[prevrank]', matches = $r_nrank[matches]") or die(mysql_error());
+}
+
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Old Rank</td>';
+mysql_query("DELETE FROM uts_rank WHERE pid = $mplayer2") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="center" colspan="2">Player Record Merged - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr>
+</table>';
+
+?>
diff --git a/html/pages/admin/mservers.php b/html/pages/admin/mservers.php
new file mode 100755
index 0000000..b52a9d1
--- /dev/null
+++ b/html/pages/admin/mservers.php
@@ -0,0 +1,41 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Merge Servers';
+$i = 0;
+$options['vars'][$i]['name'] = 'mserver1';
+$options['vars'][$i]['type'] = 'server';
+$options['vars'][$i]['prompt'] = 'Choose the server to merge to:';
+$options['vars'][$i]['caption'] = 'Server to merge to:';
+$i++;
+$options['vars'][$i]['name'] = 'mserver2';
+$options['vars'][$i]['type'] = 'server';
+$options['vars'][$i]['prompt'] = 'Choose the server to merge from:';
+$options['vars'][$i]['caption'] = 'Server to merge from:';
+$options['vars'][$i]['exclude'] = 'mserver1';
+$i++;
+
+$results = adminselect($options);
+
+
+$mserver1 = $results[mserver1];
+$mserver2 = $results[mserver2];
+
+$q_myserver1 = small_query("SELECT servername, serverip FROM uts_match WHERE id = $mserver1");
+$q_myserver2 = small_query("SELECT servername, serverip FROM uts_match WHERE id = $mserver2");
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Merging '.$q_myserver2[servername].' ('.$q_myserver2[serverip].')<br>
+ Into '.$q_myserver1[servername].' ('.$q_myserver1[serverip].')</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Merging Records</td>';
+mysql_query("UPDATE uts_match SET serverip = '". addslashes($q_myserver1[serverip]) ."', servername = '". addslashes($q_myserver1[servername]) ."' WHERE serverip = '". addslashes($q_myserver2[serverip]) ."' and servername = '". addslashes($q_myserver2[servername]) ."'") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="center" colspan="2">Server Records Merged - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+?>
diff --git a/html/pages/admin/pban.php b/html/pages/admin/pban.php
new file mode 100755
index 0000000..f421ef5
--- /dev/null
+++ b/html/pages/admin/pban.php
@@ -0,0 +1,74 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$ban = ($_REQUEST['saction'] == 'ban') ? true : false;
+
+if ($ban) {
+ $options['title'] = 'Ban Player';
+} else {
+ $options['title'] = 'Unban Player';
+}
+$i = 0;
+$options['vars'][$i]['name'] = 'pid';
+$options['vars'][$i]['type'] = 'player';
+if ($ban) {
+ $options['vars'][$i]['whereisbanned'] = 'N';
+} else {
+ $options['vars'][$i]['whereisbanned'] = 'Y';
+}
+$options['vars'][$i]['prompt'] = 'Player?';
+$options['vars'][$i]['caption'] = 'Player:';
+$i++;
+
+$results = adminselect($options);
+
+
+$pid = $results['pid'];
+
+if ($ban) {
+ echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" colspan="2">Banning Player</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="left">Removing Player Rank:</td>';
+ mysql_query("DELETE FROM uts_rank WHERE pid = $pid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="left">Updating Player Record:</td>';
+ mysql_query("UPDATE uts_pinfo SET banned = 'Y' WHERE id = $pid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+ </tr>
+
+ <tr>
+ <td class="smheading" align="center" colspan="2">Player Banned - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+ </tr></table>';
+} else {
+ echo'<table border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" colspan="2">Unbanning Player</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="left">Updating Player Record:</td>';
+ mysql_query("UPDATE uts_pinfo SET banned = 'N' WHERE id = $pid") or die(mysql_error());
+ echo'<td class="grey" align="left">Done</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="left" width="200">Restoring Rankings</td>';
+
+ $sql_nrank = "SELECT SUM(gametime) AS time, pid, gid, SUM(rank) AS rank, COUNT(matchid) AS matches FROM uts_player WHERE pid = $pid GROUP BY pid, gid";
+ $q_nrank = mysql_query($sql_nrank) or die(mysql_error());
+ while ($r_nrank = mysql_fetch_array($q_nrank)) {
+
+ mysql_query("INSERT INTO uts_rank SET time = '$r_nrank[time]', pid = $pid, gid = $r_nrank[gid], rank = '$r_nrank[rank]', prevrank = '$r_nrank[rank]', matches = $r_nrank[matches]") or die(mysql_error());
+ }
+
+ echo'<td class="grey" align="left" width="400">Done</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" colspan="2">Player Unbanned - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+ </tr></table>';
+}
+
+?>
diff --git a/html/pages/admin/pinfo.php b/html/pages/admin/pinfo.php
new file mode 100755
index 0000000..7be13ae
--- /dev/null
+++ b/html/pages/admin/pinfo.php
@@ -0,0 +1,91 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Extended Player Info';
+$options['requireconfirmation'] = false;
+$i = 0;
+$options['vars'][$i]['name'] = 'v_pid';
+$options['vars'][$i]['type'] = 'player';
+$options['vars'][$i]['prompt'] = 'Player?';
+$options['vars'][$i]['caption'] = 'Player:';
+$i++;
+
+if (isset($_REQUEST['pid'])) {
+ $pid = $_REQUEST['pid'];
+}else {
+ $results = adminselect($options);
+ $pid = $results['v_pid'];
+}
+
+$is_admin = true;
+include('pages/players_info.php');
+
+echo '<br>';
+
+$sql_ips = "SELECT INET_NTOA(p.ip) AS ip, COUNT(p.id) AS matches, MIN(m.time) AS first, MAX(m.time) AS last FROM uts_player AS p, uts_match AS m WHERE p.pid = ".$pid." AND m.id = p.matchid GROUP BY ip ORDER BY ip";
+$q_ips = mysql_query($sql_ips) or die("Can't get ip's: " . mysql_error());
+echo '
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="5" align="center">IP\'s used</td>
+ </tr>
+ <tr>
+ <td class="smheading" width="80" align = "center">IP</td>
+ <td class="smheading" width="180" align = "left">Hostname</td>
+ <td class="smheading" width="60" align = "center">Matches</td>
+ <td class="smheading" width="200" align = "left">First</td>
+ <td class="smheading" width="200" align = "left">Last</td>
+ </tr>';
+
+while ($r_ips = mysql_fetch_assoc($q_ips)) {
+ echo '
+ <tr>
+ <td class="grey" align = "center">'.$r_ips['ip'].'</td>
+ <td class="grey" align = "left">'.gethostbyaddr($r_ips['ip']).'</td>
+ <td class="grey" align = "center">'.$r_ips['matches'].'</td>
+ <td class="grey" align = "left">'.mdate($r_ips['first']).'</td>
+ <td class="grey" align = "left">'.mdate($r_ips['last']).'</td>
+ </tr>';
+}
+
+echo '
+ </tbody>
+</table>
+<div class="opnote">* Hostnames are real time and might have been different at the time of playing. *</div>
+<br>';
+
+mysql_free_result($q_ips);
+
+$sql_fakes = "SELECT INET_NTOA(p1.ip) AS ip, pi.name FROM uts_player AS p1, uts_player AS p2, uts_pinfo AS pi WHERE p1.pid = ".$pid." AND p1.ip = p2.ip AND p1.pid <> p2.pid AND pi.id = p2.pid GROUP BY pi.name";
+$q_fakes = mysql_query($sql_fakes) or die("Can't retrieve fake nicks: " . mysql_error());
+echo '
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="480">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="2" align="center">Possible aliasses</td>
+ </tr>
+ <tr>
+ <td class="smheading" width="120" align = "center">Nick</td>
+ <td class="smheading" width="360" align = "center">IP</td>
+ </tr>';
+
+if (mysql_num_rows($q_fakes) == 0) {
+ echo '
+ <tr>
+ <td class="grey" align = "center" colspan="2">No other names found</td>
+ </tr>';
+}
+else {
+ while($r_fakes = mysql_fetch_assoc($q_fakes)) {
+ echo '
+ <tr>
+ <td class="grey" align = "center">'.$r_fakes[ip].'</td>
+ <td class="grey" align = "center">'.$r_fakes[name].'</td>
+ </tr>';
+ }
+}
+echo '
+ </tbody>
+</table><br>';
+?>
diff --git a/html/pages/admin/plm.php b/html/pages/admin/plm.php
new file mode 100755
index 0000000..68992e2
--- /dev/null
+++ b/html/pages/admin/plm.php
@@ -0,0 +1,329 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$debug = 0; // This enables debug messages
+
+/*
+** This function merges two playerss
+** @var $mplayer1 : The player to merge to
+** @var $mplayer2 : The player who gets merged into mplayer 1
+** @return null
+*/
+function merge_players($mplayer1, $mplayer2) {
+ $mp1name = small_query("SELECT name FROM uts_pinfo WHERE id = $mplayer1");
+ $mp2name = small_query("SELECT name FROM uts_pinfo WHERE id = $mplayer2");
+
+ mysql_query("DELETE FROM uts_pinfo WHERE id = $mplayer2") or die(mysql_error());
+ mysql_query("UPDATE uts_player SET pid = $mplayer1 WHERE pid = $mplayer2") or die(mysql_error());
+ mysql_query("UPDATE uts_weaponstats SET pid = $mplayer1 WHERE pid = $mplayer2") or die(mysql_error());
+ mysql_query("DELETE FROM uts_weaponstats WHERE pid = $mplayer2") or die(mysql_error());
+ mysql_query("DELETE FROM uts_weaponstats WHERE matchid='0' AND pid = '$mplayer1'") or die(mysql_error());
+
+ $q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE pid = '$mplayer1' GROUP BY weapon") or die(mysql_error());
+ while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='$mplayer1', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+ }
+ mysql_query("UPDATE uts_match SET firstblood = $mplayer1 WHERE firstblood = $mplayer2") or die(mysql_error());
+ mysql_query("UPDATE uts_rank SET pid = $mplayer2 WHERE pid= $mplayer1") or die(mysql_error());
+ $sql_nrank = "SELECT SUM(time) AS time, pid, gid, AVG(rank) AS rank, AVG(prevrank) AS prevrank, SUM(matches) AS matches FROM uts_rank WHERE pid = $mplayer2 GROUP BY pid, gid";
+ $q_nrank = mysql_query($sql_nrank) or die(mysql_error());
+ while ($r_nrank = mysql_fetch_array($q_nrank)) {
+
+ mysql_query("INSERT INTO uts_rank SET time = '$r_nrank[time]', pid = $mplayer1, gid = $r_nrank[gid], rank = '$r_nrank[rank]', prevrank = '$r_nrank[prevrank]', matches = $r_nrank[matches]") or die(mysql_error());
+ }
+ mysql_query("DELETE FROM uts_rank WHERE pid = $mplayer2") or die(mysql_error());
+}
+
+// If debugmode is on, get start time
+if($debug) {
+ $time = microtime();
+ $time = explode(' ', $time);
+ $time = $time[1] + $time[0];
+ $begintime = $time;
+}
+
+// Print header & links
+echo '<P><B>Player merging tool</B></P>';
+echo "<P><A href=admin.php?key=".$adminkey."&action=plm>Merge ip's</A> - <A href=admin.php?key=".$adminkey."&action=plm&onlyrange=true>Merge ip's, limited on range</A> - <A href=admin.php?key=".$adminkey."&action=plm&manignore=true>Manage ignored ip's</A> - <A href=admin.php?key=".$adminkey."&action=plm&manignore=true&onlyrange=true>Manage ignored ip's - only range</A><BR><BR></P>";
+
+// CASE: MANAGE IGNORED IPS
+if($_GET['manignore'] == "true") {
+ if($_POST['submit'] == "Remove from ignored list") {
+ echo "<P><B>Stopped ignore ip's</B></P>";
+ foreach($_POST as $key=>$value) {
+ if($key !='submit') {
+ $key = mysql_real_escape_string(str_replace("_",".",$key));
+ $query = "DELETE FROM uts_ignoreips WHERE ip = (INET_ATON('".$key."'))";
+ mysql_query($query) or die(mysql_error());
+ echo "<br>$key";
+ }
+ }
+ } else if($_GET['onlyrange'] == "true") {
+ if($_POST['submit'] == "Confirm") {
+ echo '<P><B>Ignored ip\'s in range '.htmlentities($_POST['from']).' to '.htmlentities($_POST['to']).'</B><br><I>If you want to stop ignoring some ip\'s, because for example you accidently ignored these, check these and press the button at the lower end to confirm this</I></P>';
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm&manignore=true" target="_blank">';
+
+ $from = mysql_real_escape_string($_POST['from']);
+ $to = mysql_real_escape_string($_POST['to']);
+
+ $ignore_ips = mysql_query("SELECT ip FROM uts_ignoreips WHERE ip >= INET_ATON('$from') AND ip <= INET_ATON('$to') ORDER BY ip ASC");
+
+ if(mysql_num_rows($ignore_ips) > 0) {
+ while ($r_pipcheck = mysql_fetch_array($ignore_ips)) {
+
+ $playerip = $r_pipcheck[ip];
+ $trueplayerip = long2ip($playerip);
+ $pidcount = $r_pipcheck[pidcount];
+
+ echo "<br><input type=checkbox name=$trueplayerip> <b>$trueplayerip</b>";
+
+ // Query for player names and ids associated to that ip during the cycle
+ $sql_pcheck = "SELECT pi.id, pi.name, pi.country, p.pid, p.ip FROM uts_pinfo AS pi, uts_player AS p WHERE pi.id = p.pid AND p.ip = $playerip GROUP BY pi.id, pi.name, p.pid, p.ip, pi.country";
+ $q_pcheck = mysql_query($sql_pcheck) or die(mysql_error());
+ while ($r_pcheck = mysql_fetch_array($q_pcheck)) {
+ echo '<br><a class="darkhuman" href="admin.php?key='.$adminkey.'&amp;action=pinfo&amp;pid='.$r_pcheck[pid].'">'.FormatPlayerName($r_pcheck[country], $r_pcheck['pid'], $r_pcheck['name']).'</a> ';
+ }
+ echo '<br />';
+ }
+ echo '<BR><INPUT TYPE="SUBMIT" VALUE="Remove from ignored list" NAME="submit"></FORM>';
+ } else {
+ echo "<BR><P>No ignored ip's found</P>";
+ }
+ } else {
+ echo "<P><B>Ignored ip's in range: Enter range to filter on</B></P>";
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm&manignore=true&onlyrange=true">';
+ echo '<BR>Ranging from <INPUT TYPE="TEXT" NAME="from" SIZE="20" VALUE="0.0.0.0"> to <INPUT TYPE="TEXT" NAME="to" SIZE="20" VALUE="255.255.255.255">';
+ echo '<BR><BR><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Confirm"></FORM>';
+ }
+ } else {
+ echo '<P><B>Ignored ip\'s</B><br><I>If you want to stop ignoring some ip\'s, because for example you accidently ignored these, check these and press the button at the lower end to confirm this</I></P>';
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm&manignore=true" target="_blank">';
+
+ $ignore_ips = mysql_query("SELECT ip FROM uts_ignoreips ORDER BY ip ASC");
+ if(mysql_num_rows($ignore_ips) > 0) {
+ while ($r_pipcheck = mysql_fetch_array($ignore_ips)) {
+
+ $playerip = $r_pipcheck[ip];
+ $trueplayerip = long2ip($playerip);
+ $pidcount = $r_pipcheck[pidcount];
+
+ echo "<br><input type=checkbox name=$trueplayerip> <b>$trueplayerip</b>";
+
+ // Query for player names and ids associated to that ip during the cycle
+ $sql_pcheck = "SELECT pi.id, pi.name, pi.country, p.pid, p.ip FROM uts_pinfo AS pi, uts_player AS p WHERE pi.id = p.pid AND p.ip = $playerip GROUP BY pi.id, pi.name, p.pid, p.ip, pi.country";
+ $q_pcheck = mysql_query($sql_pcheck) or die(mysql_error());
+ while ($r_pcheck = mysql_fetch_array($q_pcheck)) {
+ echo '<br><a class="darkhuman" href="admin.php?key='.$adminkey.'&amp;action=pinfo&amp;pid='.$r_pcheck[pid].'">'.FormatPlayerName($r_pcheck[country], $r_pcheck['pid'], $r_pcheck['name']).'</a> ';
+ }
+ echo '<br />';
+ }
+ echo '<BR><INPUT TYPE="SUBMIT" VALUE="Remove from ignored list" NAME="submit"></FORM>';
+ } else {
+ echo "<BR><P>No ignored ip's found</P>";
+ }
+ }
+
+// CASE: IGNORE SUBMITTED IP'S
+} else if($_POST['submit'] == "ignore") {
+ echo "<P><B>Ignored ips</B></P>";
+ foreach($_POST as $key=>$value) {
+ if($key !='submit') {
+ $key = mysql_real_escape_string(str_replace("_",".",$key));
+ $query = "INSERT INTO uts_ignoreips (ip) VALUES (INET_ATON('".$key."'))";
+ mysql_query($query) or die(mysql_error());
+ echo "<br>$key";
+ }
+ }
+ echo "<br>";
+
+// CASE: SHOW NICKS WITH GIVEN SHARED IP
+} else if(substr($_POST['submit'],0,8) == "merge - ") {
+ echo "<P><B>Merge nicks with shared ip</B></P>";
+
+ $ip = mysql_real_escape_string(str_replace("_",".",substr($_POST['submit'],8)));
+ $sql_pipcheck = "SELECT ip, COUNT(DISTINCT pid) AS pidcount FROM uts_player WHERE ip = INET_ATON('$ip') GROUP BY ip ORDER BY ip ASC";
+ $q_pipcheck = mysql_query($sql_pipcheck) or die(mysql_error());
+ while ($r_pipcheck = mysql_fetch_array($q_pipcheck)) {
+
+ $playerip = $r_pipcheck[ip];
+ $trueplayerip = long2ip($playerip);
+ $pidcount = $r_pipcheck[pidcount];
+
+ // If there is more than one pid associated to an IP ...
+ IF ($pidcount > 1 ) {
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm">';
+ echo "<br><b>$trueplayerip</b>";
+
+ // Query for player names and ids associated to that ip during the cycle
+ $sql_pcheck = "SELECT pi.id, pi.name, pi.country, p.pid, p.ip FROM uts_pinfo AS pi, uts_player AS p WHERE pi.id = p.pid AND p.ip = $playerip GROUP BY pi.id, pi.name, p.pid, p.ip, pi.country";
+
+ $q_pcheck = mysql_query($sql_pcheck) or die(mysql_error());
+ while ($r_pcheck = mysql_fetch_array($q_pcheck)) {
+ echo '<br><a class="darkhuman" href="./?p=pinfo&amp;pid='.$r_pcheck[pid].'">'.FormatPlayerName($r_pcheck[country], $r_pcheck['pid'], $r_pcheck['name']).'</a> ';
+ $options .= '<OPTION value="'.$r_pcheck[pid].'">'.$r_pcheck['name'].'</OPTION>';
+ }
+ echo '<br><br>Merge to: <SELECT NAME="merge_to">'.$options.'</SELECT>';
+ echo "<br><INPUT TYPE=\"hidden\" NAME=\"ip\" VALUE=\"$ip\"><INPUT TYPE=\"SUBMIT\" VALUE=\"Player merge\" NAME=\"submit\"></FORM>";
+ echo '<br />';
+ }
+ }
+
+// CASE: MERGE NICKS WITH SHARED IP
+} else if($_POST['submit'] == "Player merge") {
+ echo "<P><B>Merging nicks with shared ip</B></P>";
+
+ $ip = mysql_real_escape_string(str_replace("_",".",$_POST['ip']));
+ $merge_to_pid = mysql_real_escape_string($_POST['merge_to']);
+ $sql_pipcheck = "SELECT ip, COUNT(DISTINCT pid) AS pidcount FROM uts_player WHERE ip = INET_ATON('$ip') GROUP BY ip ORDER BY ip ASC";
+ $q_pipcheck = mysql_query($sql_pipcheck) or die(mysql_error());
+ while ($r_pipcheck = mysql_fetch_array($q_pipcheck)) {
+
+ $playerip = $r_pipcheck[ip];
+ $trueplayerip = long2ip($playerip);
+ $pidcount = $r_pipcheck[pidcount];
+
+ // If there is more than one pid associated to an IP ...
+ IF ($pidcount > 1 ) {
+ echo "<b>$trueplayerip</b><br><br>merge:<br>";
+
+ // Query for player names and ids associated to that ip during the cycle
+ $sql_pcheck = "SELECT p.pid FROM uts_pinfo AS pi, uts_player AS p WHERE pi.id = p.pid AND p.ip = $playerip GROUP BY pi.id, pi.name, p.pid, p.ip, pi.country";
+
+ $q_pcheck = mysql_query($sql_pcheck) or die(mysql_error());
+ $i=0;
+ while ($r_pcheck = mysql_fetch_array($q_pcheck)) {
+ if($r_pcheck['pid'] != $merge_to_pid) {
+ $pid_from[$i] = $r_pcheck['pid'];
+ echo $pid_from[$i].'<br>';
+ $i++;
+ }
+ }
+ echo '<br />merge to: '.$merge_to_pid;
+ }
+ }
+ if($debug) echo "<br> -- started merging";
+ for($j=0;$j<count($pid_from);$j++) {
+ merge_players($merge_to_pid, $pid_from[$j]);
+ }
+ if($debug) echo "<br> -- merging ended";
+
+// CASE: SHOW ALL IP'S LINKED TO MORE THAN ONE NICK - ONLY RANGE
+} else if($_GET['onlyrange'] == "true") {
+ if($_POST['submit'] == "Confirm") {
+ echo "<P><B>Showing all ip's in range ".htmlentities($_POST['from'])." to ".htmlentities($_POST['to'])."</B><br><I>If you want to ignore some ip's, because for example different but unrelated nicks are associated with it, check these and press the button at the lower end to confirm this</I></P>";
+ $from = mysql_real_escape_string($_POST['from']);
+ $to = mysql_real_escape_string($_POST['to']);
+
+ $ignore_ips = mysql_query("SELECT ip FROM uts_ignoreips WHERE ip >= INET_ATON('$from') AND ip <= INET_ATON('$to')");
+ $extended_query = "WHERE ip >= INET_ATON('$from') AND ip <= INET_ATON('$to')";
+ $i=0;
+ while($ignore_ips_array = mysql_fetch_array($ignore_ips)) {
+ $ip = $ignore_ips_array[0];
+ $extended_query .= " AND ";
+ $extended_query .= "ip <> '".$ip."'";
+ $i++;
+ }
+
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm" target="_blank">';
+
+
+ // Query for list of unique ips and player ids
+ $sql_pipcheck = "SELECT ip, COUNT(DISTINCT pid) AS pidcount FROM uts_player ".$extended_query." GROUP BY ip ORDER BY ip ASC";
+ $q_pipcheck = mysql_query($sql_pipcheck) or die(mysql_error());
+ if(mysql_num_rows($q_pipcheck) > 0) {
+ while ($r_pipcheck = mysql_fetch_array($q_pipcheck)) {
+
+ $playerip = $r_pipcheck[ip];
+ $trueplayerip = long2ip($playerip);
+ $pidcount = $r_pipcheck[pidcount];
+
+ // If there is more than one pid associated to an IP ...
+ IF ($pidcount > 1 ) {
+
+ echo "<br><input type=checkbox name=$trueplayerip> <b>$trueplayerip</b>";
+
+ // Query for player names and ids associated to that ip during the cycle
+ $sql_pcheck = "SELECT pi.id, pi.name, pi.country, p.pid, p.ip FROM uts_pinfo AS pi, uts_player AS p WHERE pi.id = p.pid AND p.ip = $playerip GROUP BY pi.id, pi.name, p.pid, p.ip, pi.country";
+ $q_pcheck = mysql_query($sql_pcheck) or die(mysql_error());
+ while ($r_pcheck = mysql_fetch_array($q_pcheck)) {
+ echo '<br><a class="darkhuman" href="admin.php?key='.$adminkey.'&amp;action=pinfo&amp;pid='.$r_pcheck[pid].'">'.FormatPlayerName($r_pcheck[country], $r_pcheck['pid'], $r_pcheck['name']).'</a> ';
+ }
+ echo "<br><INPUT TYPE=\"SUBMIT\" VALUE=\"merge - $trueplayerip\" NAME=\"submit\">";
+ echo '<br />';
+ }
+ }
+
+
+ echo '<BR><INPUT TYPE="SUBMIT" VALUE="ignore" NAME="submit"></FORM>';
+ } else {
+ echo "<P><BR>No ip's found with more than one nick linked to it and which are not ignored and are in this range</P>";
+ }
+
+ } else {
+ echo "<P><B>Showing all ip's in range - Enter range to filter on</B></P>";
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm&onlyrange=true">';
+ echo '<BR>Ranging from <INPUT TYPE="TEXT" NAME="from" SIZE="20" VALUE="0.0.0.0"> to <INPUT TYPE="TEXT" NAME="to" SIZE="20" VALUE="255.255.255.255">';
+ echo '<BR><BR><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Confirm"></FORM>';
+ }
+
+// CASE: SHOW ALL IP'S LINKED TO MORE THAN ONE NICK
+} else {
+ echo "<P><B>IP's linked with more than one nick</B><br><I>If you want to ignore some ip's, because for example different but unrelated nicks are associated with it, check these and press the button at the lower end to confirm this</I></P>";
+
+ $ignore_ips = mysql_query("SELECT ip FROM uts_ignoreips");
+ $extended_query = "";
+ $i=0;
+ while($ignore_ips_array = mysql_fetch_array($ignore_ips)) {
+ $ip = $ignore_ips_array[0];
+ if($i==0)
+ $extended_query = " WHERE ";
+ else
+ $extended_query .= " AND ";
+ $extended_query .= "ip <> '".$ip."'";
+ $i++;
+ }
+
+ echo '<FORM METHOD="POST" ACTION="admin.php?key='.$adminkey.'&action=plm" target="_blank">';
+
+
+ // Query for list of unique ips and player ids
+ $sql_pipcheck = "SELECT ip, COUNT(DISTINCT pid) AS pidcount FROM uts_player ".$extended_query." GROUP BY ip ORDER BY ip ASC";
+ $q_pipcheck = mysql_query($sql_pipcheck) or die(mysql_error());
+ if(mysql_num_rows($q_pipcheck) > 0) {
+ while ($r_pipcheck = mysql_fetch_array($q_pipcheck)) {
+
+ $playerip = $r_pipcheck[ip];
+ $trueplayerip = long2ip($playerip);
+ $pidcount = $r_pipcheck[pidcount];
+
+ // If there is more than one pid associated to an IP ...
+ IF ($pidcount > 1 ) {
+
+ echo "<br><input type=checkbox name=$trueplayerip> <b>$trueplayerip</b>";
+
+ // Query for player names and ids associated to that ip during the cycle
+ $sql_pcheck = "SELECT pi.id, pi.name, pi.country, p.pid, p.ip FROM uts_pinfo AS pi, uts_player AS p WHERE pi.id = p.pid AND p.ip = $playerip GROUP BY pi.id, pi.name, p.pid, p.ip, pi.country";
+ $q_pcheck = mysql_query($sql_pcheck) or die(mysql_error());
+ while ($r_pcheck = mysql_fetch_array($q_pcheck)) {
+ echo '<br><a class="darkhuman" href="admin.php?key='.$adminkey.'&amp;action=pinfo&amp;pid='.$r_pcheck[pid].'">'.FormatPlayerName($r_pcheck[country], $r_pcheck['pid'], $r_pcheck['name']).'</a> ';
+ }
+ echo "<br><INPUT TYPE=\"SUBMIT\" VALUE=\"merge - $trueplayerip\" NAME=\"submit\">";
+ echo '<br />';
+ }
+ }
+ echo '<BR><INPUT TYPE="SUBMIT" VALUE="ignore" NAME="submit"></FORM>';
+ } else {
+ echo "<P><BR>No ip's found with more than one nick linked to it and which are not ignored</P>";
+ }
+}
+
+// If debugmode is on, determine end time & output execution time
+if($debug) {
+ $time = microtime();
+ $time = explode(" ", $time);
+ $time = $time[1] + $time[0];
+ $endtime = $time;
+ $totaltime = ($endtime - $begintime);
+ echo "<br>execution time: $totaltime";
+}
+?> \ No newline at end of file
diff --git a/html/pages/admin/recalcflags.php b/html/pages/admin/recalcflags.php
new file mode 100755
index 0000000..073e648
--- /dev/null
+++ b/html/pages/admin/recalcflags.php
@@ -0,0 +1,72 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Recalculate Countryflags';
+$options['requireconfirmation'] = false;
+$i = 0;
+$options['vars'][$i]['name'] = 'start';
+$options['vars'][$i]['type'] = 'static';
+$options['vars'][$i]['options'] = 'No|Yes';
+$options['vars'][$i]['exitif'] = 'No';
+$options['vars'][$i]['prompt'] = 'Are you sure';
+$options['vars'][$i]['caption'] = 'Sure:';
+$i++;
+
+$results = adminselect($options);
+
+if ($results['start'] != 'Yes') {
+ include('pages/admin/main.php');
+ exit;
+}
+@ignore_user_abort(true);
+@set_time_limit(0);
+
+include("includes/geoip.inc");
+
+/* Opens the database file */
+$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
+
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Recalculating Countryflags</td>
+</tr>';
+
+echo'</tr>
+<tr>
+ <td class="smheading" align="left">Recalculating Rankings:</td>';
+ echo'<td class="grey" align="left">';
+
+ echo'Recalculating pinfo table...<br>';
+ /* update pinfo table */
+ $sql_pids = mysql_query("SELECT uts_pinfo.id as pid, uts_pinfo.country as country, uts_player.ip as ip FROM uts_pinfo, uts_player WHERE uts_pinfo.id = uts_player.pid GROUP BY uts_player.pid;") or die(mysql_error());
+ while($sql_pid = mysql_fetch_array($sql_pids))
+ {
+ $playercountry = strtolower(geoip_country_code_by_addr($gi,long2ip($sql_pid['ip'])));
+
+ if ($playercountry != $sql_pid['country'] )
+ {
+ mysql_query("UPDATE uts_pinfo SET country = '$playercountry' WHERE id = '".$sql_pid['pid']."'") or die(mysql_error());
+ }
+ }
+
+ echo'Recalculating player table...<br>';
+ /* update player table */
+ $sql_pids = mysql_query("SELECT pid, ip, country FROM uts_player");
+ while ($sql_pid = mysql_fetch_array($sql_pids))
+ {
+ $playercountry = strtolower(geoip_country_code_by_addr($gi,long2ip($sql_pid['ip'])));
+
+ if ($playercountry != $sql_pid['country'])
+ {
+ mysql_query("UPDATE uts_player SET country = '$playercountry' WHERE pid = '".$sql_pid['pid']."'") or die(mysql_error());
+ }
+ }
+ echo 'Done</td>
+</tr>
+
+<tr>
+ <td class="smheading" align="center" colspan="2">Countryflags recalculated - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+?>
diff --git a/html/pages/admin/recalcranking.php b/html/pages/admin/recalcranking.php
new file mode 100755
index 0000000..1cbc865
--- /dev/null
+++ b/html/pages/admin/recalcranking.php
@@ -0,0 +1,77 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Recalculate Rankings';
+$options['requireconfirmation'] = false;
+$i = 0;
+$options['vars'][$i]['name'] = 'start';
+$options['vars'][$i]['type'] = 'static';
+$options['vars'][$i]['options'] = 'No|Yes';
+$options['vars'][$i]['exitif'] = 'No';
+$options['vars'][$i]['prompt'] = 'Are you sure';
+$options['vars'][$i]['caption'] = 'Sure:';
+$i++;
+
+$results = adminselect($options);
+
+if ($results['start'] != 'Yes') {
+ include('pages/admin/main.php');
+ exit;
+}
+@ignore_user_abort(true);
+@set_time_limit(0);
+
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Recalculating Rankings</td>
+</tr>';
+
+echo'<tr>
+ <td class="smheading" align="left" width="200">Deleting rankings</td>';
+
+ mysql_query("TRUNCATE uts_rank") or die(mysql_error());
+
+ echo'<td class="grey" align="left" width="400">Done</td>';
+
+echo'</tr>
+<tr>
+ <td class="smheading" align="left">Recalculating Rankings:</td>';
+ echo'<td class="grey" align="left">';
+ $playerbanned = false;
+ $q_pm = mysql_query( " SELECT p.id,
+ p.matchid,
+ p.pid,
+ p.gid,
+ m.gamename
+ FROM uts_player p,
+ uts_pinfo pi,
+ uts_match m
+ WHERE pi.id = p.pid
+ AND pi.banned <> 'Y'
+ AND m.id = p.matchid
+ ORDER BY p.matchid ASC,
+ p.playerid ASC");
+ $i = 0;
+ while ($r_pm = mysql_fetch_array($q_pm)) {
+ $i++;
+ if ($i%50 == 0) {
+ echo '. ';
+ flush();
+ }
+ $playerecordid = $r_pm['id'];
+ $matchid = $r_pm['matchid'];
+ $pid = $r_pm['pid'];
+ $gid = $r_pm['gid'];
+ $gamename = $r_pm['gamename'];
+// echo "$pid|$gid|$matchid<br>";
+ include('import/import_ranking.php');
+ }
+ echo 'Done</td>
+</tr>
+
+<tr>
+ <td class="smheading" align="center" colspan="2">Rankings recalculated - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+?>
diff --git a/html/pages/admin/utdclog.php b/html/pages/admin/utdclog.php
new file mode 100755
index 0000000..b22bfd7
--- /dev/null
+++ b/html/pages/admin/utdclog.php
@@ -0,0 +1,137 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$filename = (!empty($_REQUEST['filename'])) ? my_stripslashes($_REQUEST['filename']) : '';
+$filename = str_replace(array('..', '/', '\\', '<', ':'), array(), $filename);
+
+
+if (!empty($filename)) {
+ if (!file_exists('logs/utdc/'. $filename) or !is_file('logs/utdc/'. $filename)) die('bla');
+ if (isset($_REQUEST['del'])) {
+ unlink('logs/utdc/'. $filename);
+ $filename = '';
+ }
+}
+
+
+
+
+if (empty($filename)) {
+ echo'<br><table class = "box" border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" width="100%" colspan="4">Available UTDC Logs:</td>
+ </tr>';
+ $logdir = opendir('logs/utdc');
+ $logs = array();
+ $sort = array();
+ $i = 0;
+ while (false !== ($filename = readdir($logdir))) {
+ if (!is_file('logs/utdc/'. $filename)) continue;
+ if ($filename == '.htaccess' or $filename == 'index.htm') continue;
+ $i++;
+ $logs[$i] = $filename;
+ $extra = 0;
+ if (substr($filename, -4) == '.bz2') $extra = 4;
+ if (substr($filename, -3) == '.gz') $extra = 3;
+
+ $sort[$i] = substr($filename, strlen($filename) - (23 + $extra), 19);
+ }
+ closedir($logdir);
+ if (count($logs) == 0) {
+ echo '<tr><td class="grey" colspan="4">No logs available!</td></tr>';
+ } else {
+ arsort($sort);
+ $i = 0;
+ foreach($sort as $id => $date) {
+ $log = $logs[$id];
+ $extra = 0;
+ if (substr($log, -4) == '.bz2') $extra = 4;
+ if (substr($log, -3) == '.gz') $extra = 3;
+
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'">';
+ $tmp = substr($log, strlen($log) - (23 + $extra), 19);
+ $tmp = str_replace('.', '', $tmp);
+ $ts = mtimestamp($tmp);
+ echo ' <a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.date('Y-m-d H:i', $ts).'</a>';
+ echo '</td><td class="'.$class.'">';
+ echo '<a class="'.$class.'" href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'">'.substr($log, 6, strlen($log) - 30 - $extra).'</a>';
+ echo '</td><td class="'.$class.'" align="right">';
+ $d_size = file_size_info(filesize('logs/utdc/'. $log));
+ echo $d_size['size'] .' '. $d_size['type'];
+ echo '</td><td class="'.$class.'" align="center">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($log).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td></tr>';
+ }
+ }
+}
+
+
+if (!empty($filename)) {
+ if (!file_exists('logs/utdc/'. $filename) or !is_file('logs/utdc/'. $filename)) die('bla');
+ echo'<br><table class = "box" border="0" cellpadding="1" cellspacing="2" width="600">
+ <tr>
+ <td class="smheading" align="center" width="95%" colspan="3">'.$filename.'</td>
+ <td class="smheading" align="center" width="5%" align="right">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($filename).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td>
+ </tr>';
+ if (substr($filename, -4) == '.enc') {
+ echo '<tr><td class="grey" colspan="4"><span style="font-family: monospace;">';
+ echo '<a href = "pages/admin/utdcshot.php?filename='.urlencode($filename).'" target = "_blank"><img src = "pages/admin/utdcshot.php?filename='.urlencode($filename).'" width = 100% border = 0></a>';
+ echo '</span></td></tr>';
+ }
+ else {
+ $fp = my_fopen('logs/utdc/'.$filename, 'rb', $compression = NULL);
+ if (!$fp) die("Error opening file");
+
+ $i = 0;
+ echo '<tr><td class="grey" colspan="4"><span style="font-family: monospace;">';
+
+ while (($line = my_fgets($fp, 5000, $compression)) !== FALSE) {
+ /*
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '<tr><td class="'.$class.'" colspan="4">';
+ echo '<span style="font-family: monospace;">';
+ echo htmlentities($line);
+ echo '</span>';
+ echo '</td></tr>';
+ */
+ echo wordwrap(htmlentities($line), 80, '<br />', 1) ."<br />";
+ }
+ echo '</span></td></tr>';
+ my_fclose($fp, $compression);
+
+ // look for a matching utdc screenshot
+ $logdir = opendir('logs/utdc');
+ if (substr($filename, -4) == '.bz2') $extra = 4;
+ if (substr($filename, -3) == '.gz') $extra = 3;
+ while (false !== ($file = readdir($logdir))) {
+ if (!is_file('logs/utdc/'. $filename)) continue;
+ if ($filename == '.htaccess' or $filename == 'index.htm') continue;
+ if ((substr($file, -4) == '.enc') and
+ ((substr($filename, strlen($filename)-(23 + $extra), 19) == substr($file, strlen($file)-23, 19)) or ((substr($filename, strlen($filename)-(23 + $extra), 17) == substr($file, strlen($file)-23, 17)) and (abs(intval(substr($file, strlen($file)- 6, 2)) - intval(substr($filename, strlen($filename)-(6 + $extra), 17))) <=3)))) {
+ echo '<tr>
+ <td class="smheading" align="center" width="95%" colspan="3">'.$file.'</td>
+ <td class="smheading" align="center" width="5%" align="right">';
+ echo '<a href="admin.php?key='.$adminkey.'&amp;action='.$action.'&amp;filename='.urlencode($file).'&amp;del=1"><img src="images/del.png" border="0" width="16" height="16" title="Delete" alt="Delete" /></a>';
+ echo '</td>
+ </tr>';
+
+ echo '<tr><td class="grey" colspan="4"><span style="font-family: monospace;">';
+ echo '<a href = "pages/admin/utdcshot.php?filename='.urlencode($file).'" target = "_blank"><img src = "pages/admin/utdcshot.php?filename='.urlencode($file).'" width = 100% border = 0></a>';
+ echo '</span></td></tr>';
+ }
+ }
+ closedir($logdir);
+ }
+}
+
+echo '</tr>';
+if (!empty($filename)) echo'<tr><td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'&amp;action='.$action.'">Go Back To Logfile Overview</a></td></tr>';
+echo'<tr><td class="smheading" align="center" colspan="4"><a class="grey" href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td></tr>';
+echo '</table>';
+
+?>
diff --git a/html/pages/admin/utdcshot.php b/html/pages/admin/utdcshot.php
new file mode 100755
index 0000000..24b21f7
--- /dev/null
+++ b/html/pages/admin/utdcshot.php
@@ -0,0 +1,22 @@
+<?php
+$filename = (!empty($_REQUEST['filename'])) ? stripslashes($_REQUEST['filename']) : '';
+$filename = str_replace(array('..', '/', '\\', '<', ':'), array(), $filename);
+
+
+if (!empty($filename)) {
+ if (!file_exists('../../logs/utdc/'. $filename) or !is_file('../../logs/utdc/'. $filename)) die('bla ' . $filename);
+
+ header("Content-type: image/jpg");
+
+ $fp_in = fopen('../../logs/utdc/'. $filename, 'rb') or die("Can't open file");
+ $blocksize = 1024;
+ while (!feof($fp_in)) {
+ $buffer .= @fread($fp_in, $blocksize);
+ if ($buffer === false) return(false);
+ if ($bytes === false) return(false);
+ }
+
+ $buffer = preg_replace('[\x00]', '', $buffer);
+ echo base64_decode($buffer);
+}
+?> \ No newline at end of file
diff --git a/html/pages/credits.php b/html/pages/credits.php
new file mode 100755
index 0000000..e27de84
--- /dev/null
+++ b/html/pages/credits.php
@@ -0,0 +1,311 @@
+<?php
+echo'
+<div class="text" align="left">
+<p><span class="txttitle">Credits</span></p>
+
+<blockquote><p>
+&nbsp;1. <a href="#developers">Developers</a><br>
+&nbsp;2. <a href="#changelog">Change Log</a><br>
+&nbsp;3. <a href="#todolist">To Do List</a><br>
+&nbsp;4. <a href="#thanks">Thanks</a><br>
+&nbsp;5. <a href="#copyright">Copyright Notices</a><br>
+</p></blockquote>
+
+<p><a name="developers"></a><b>Developers</b></p>
+<blockquote><p>UTStats was developed by azazel, )&deg;DoE&deg;(-AnthraX, PJMODOS and toa.<br>
+All original pages are W3C <a href="http://validator.w3.org/check?uri=referer" target="_blank">HTML 4.01</a> and
+<a href="http://jigsaw.w3.org/css-validator/" target="_blank">CSS</a> compliant</p>
+
+</blockquote>
+
+<p><a name="changelog"></a><b>Change Log</b></p>
+<blockquote><p>
+<dl>
+ <dt>beta 4.2.8 (23/7/2011 by Rork)</dt>
+ <dd>Bug Fixes:<br>
+ Fixed explain rankings (reported by Letylove49)<br>
+ Fixed delete player (reported by The Cowboy)<br>
+ Fixed delete player from match<br>
+ Fixed support for LMS++<br><br></dd>
+
+ <dt>beta 4.2.7 (24/4/2011 by Rork)</dt>
+ <dd>Added:<br>
+ IP Information in extended player info<br>
+ Possible fake nicks in extended player info<br>
+ Added support for LMS+<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Fixed player deletion<br>
+ Fixed DOM import with bots<br>
+ Fixed player info BT records<br>
+ Fixed order players in playersearch<br>
+ Fixed player time on server longer then gametime<br>
+ Fixed lms player sorting<br>
+ Fixed lms ttl<br>
+ Fixed SQL table creation (reported by PopCorn)<br><br></dd>
+
+ <dt>beta 4.2.6 (04/12/2010 by Rork)</dt>
+ <dd>Bug Fixes:<br>
+ Fixed serveral vulnerabilities<br>
+ Fixed DOM specific map page not showing<br>
+ Fix Assault Match looks<br>
+ Add support for new BT times<br>
+ Fixed CTF Match Reports<br><br></dd>
+
+ <dt>beta 4.2.5 (23/10/2010 by Rork)</dt>
+ <dd>Added:<br>
+ Game time in match stats<br>
+ Added applicable totals per gametype on the mappage<br>
+ Bunny Track stats, <A HREF = "http://www.unrealadmin.org/forums/showthread.php?t=18991" TARGET = "_blank">BT++</A> support only<br>
+ Server configuration checker/database setup<br>
+ UTDC Screenshots viewer<br>
+ ACE Logviewer<br>
+ Added out time in LMS<br>
+ Added number of players to recent matches<br>
+ Hide not applicable statistics from player pages<br>
+ Various lay-out improvements<br>
+ Filters in maplist<br>
+ Show Score under Match Totals for teamgames<br>
+ Added debug messages<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Fixed delete player from match<br>
+ Fixed bug where players are spec after merging or teamchange<br>
+ Fixed effective rank after merging players<br>
+ Dirty fix for divide by zero bug on logimport (was line 47) (gametime = 0)<br>
+ Fixed dodgy import log recognition<br>
+ Fixed playerlink in explain ranking<br>
+ Two bug fixes by Enakin reported in the 4.2.3 release thread<br>
+ Fixed LMS ttl by using the time until the player is out.<br>
+ Sorted LMS players by ttl, the winner on top<br>
+ Fixed php shorttag in import_playerstuff.php<br>
+ Prevent removing files from ftp after error<br>
+ Prevent importing empty log after ftp error<br>
+ Made the main pages W3C HTML 4.01 Compliant<br>
+ Fixed some vulnerabilities<br><br></dd>
+
+ <dt>beta 4.2.4 (10/04/2010 by Loki)</dt>
+ <dd>Added:<br>
+ Breakdown of server occupation per weekday (By Loki)<br>
+ Breakdown of country of origin (By Loki)<br>
+ Included IpToCountry patch into the release, added GeoIP.dat from March 2010 (By Loki)<br><br></dd>
+ <dd>Bug Fixes:<br>
+ Fixed PHP opening tags (By Loki)<br><br></dd>
+
+ <dt>beta 4.2.3 (18/01/09 by 2399Skillz)</dt>
+ <dd>Bug Fixes:<br>
+ Lots of bug fixes/database corrections (By Enakin)<br><br></dd>
+
+ <dt>beta 4.2.2 (30/12/08 by 2399Skillz)</dt>
+ <dd>Added:<br>
+ Option to import AnthChecker logs (admin viewable only) (Added by Skillz)<br>
+ New player merger page for admins(Added by killereye)<br><br></dd>
+ <dd>Bug Fixes:<br>
+ UT Stats DOM fix (Edited by killereye)<br><br></dd>
+
+ <dt>beta 4.2 (20/10/2005 by Azazel)</dt>
+ <dd>Added:<br>
+ Ranking re-calculation option added to admin section<br>
+ Import and display player pings<br>
+ <i>Explain Ranking</i> page<br>
+ Added an option to the admin page to delete temporary tables (if any)<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Import fix for MySQL v3.x<br>
+ Partial Import delete fix<br>
+ bbcode and Clanbase Report Fix - not showing high score win reports.<br>
+ Ranking fix (was more than 300 mins to get full ranking points)<br>
+ Spectator fix (was logging players as spectators)<br>
+ Efficiency on Players Total worked out as SUM rather than AVG<br>
+ Clanbase report fixed<br>
+ Totals on Totals Page fixed<br>
+ Events on Totals Page only show if they really happened<br>
+ Number of matches on Totals Page fixed<br>
+ Fixed a crash when trying to import logs that didnt contain IP records<br>
+ Maps sometimes appeared twice on the maps list / incorrect map statistics<br>
+ First/Prev/Next/Last links on map stas page were not working correctly<br>
+ Improved server actor version uploaded (old one may have caused some server lag at times)<br>
+ Updated import.php for new server actor<br>
+ Few actor fixes<br>
+ Weapon stats for second attacking team in assault games were not correct (reported by wgray8231)<br>
+ Delete player from match didn\'t correctly remove the player from the match (reported by wgray8231)<br><br></dd>
+
+ <dt>beta 4.0</dt>
+ <dd>Added:<br>
+ Many pages overhauled<br>
+ Database overhauled<br>
+ Option to import bots or not (off by default)<br>
+ Command Line Interface now outputs to text not html<br>
+ Ranking stuff on match and player pages include gold/silver/bronze cups for each gametype<br>
+ Rankings tweaked so new players get even less points<br>
+ Maps page now sortable<br>
+ Flag Assists now show, get the new <a href="http://www.unrealadmin.org/forums/showthread.php?t=9561" target="_blank">Smart CTF</a><br>
+ Report generator outputting to Clanbase and bbcode format<br>
+ Support added for custom weapons and gametypes<br>
+ Admin page including server/player merging, deletion of players/matches, renaming of "game types" etc<br>
+ Option to compress logs when backing them up (requires bzip/gzip support in php)<br>
+ More debugging stuff added<br>
+ Accuracy package optimised and recoded for better performance (it will not lag the server in anyway now)<br>
+ More detailed weapon statistics added<br>
+ Totals page expanded with information like on the old NGStats<br>
+ JailBreak should now display its statistics properly<br>
+ Purge logs option added<br>
+ Graphs now display better regardless of data used<br>
+ CTF4 Compatibility<br>
+ Date and Game Type filtering on Recent Matches page<br>
+ Ability to Ban players<br>
+ Ability to ignore matches < X minues in length<br>
+ IP Search within Administration<br>
+ Ability to ignore matches less than X minutes in length<br>
+ Option to import UTDC logs (admin viewable only)<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Ranking overhauled to better reflect average game play of players<br>
+ Cleaned up the importer<br>
+ Teamscores now shown correctly regardless of player switching activity<br>
+ Kills matrix is now created on combined player records<br>
+ Kills against bots no longer counted if bots are not imported<br>
+ Domination logs only log when players are in<br>
+ Teamkills identified as kills in non-team games (gg Epic :/)<br>
+ Eff etc fixed because of above Teamkills bug<br>
+ Last line not logging of buffer fixed<br><br></dd>
+
+ <dt>beta 3.2</dt>
+ <dd>Added:<br>
+ Debugging Option<br>
+ Better FTP Capabilities<br>
+ Filters carried over on next last etc on player page<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Imports failing on some versions of php 4.3.x<br>
+ Totals page fixed<br>
+ Totals info at the top of match pages fixed<br><br></dd>
+
+ <dt>beta 3.1</dt>
+ <dd>Added:<br>
+ Kills Matchup Matrix
+ Country Flags for Players<br>
+ Hover Hints over key parts of the page (eg. K F D S)<br>
+ Some Graphs<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Importer can now import unlimited logs<br>
+ Kills on match pages not listed<br>
+ Games where nothing happens no longer imported<br>
+ Players who have 0 kills &amp; 0 deaths no longer get imported<br>
+ FTP script re-written<br>
+ Pickups removed from insta pages<br>
+ Translocator entries removed from logs (throws not kills)<br>
+ Multis & Sprees report correct player now<br>
+ Kills correctly worked out on non-Team Games<br>
+
+ Frags correctly worked out on all games<br><br></dd>
+
+ <dt>beta 3.0</dt>
+ <dd>Added:<br>
+ SmartCTF events<br>
+ UTGL Compatibility<br><br>
+ Updated:<br>
+ UTStats actor re-written from scratch, it now uses NGLog files<br>
+ Database re-written from scratch<br>
+ PHP code re-written from scratch<br><br></dd>
+
+ <dd>Bug Fixes:<br>
+ Too many to think about<br><br></dd>
+
+ <dt>beta 2.0</dt>
+ <dd>Code rewritten from ground up then lost :(<br><br></dd>
+
+
+ <dt>beta 1.2</dt>
+ <dd>Added:<br>
+ Accuracy Code (best in insta but works on all weapons)<br>
+ UT2004 spree scheme<br>
+ Who killed the Flag Carrier<br>
+ <br>
+ Updated:<br>
+ Complete overhaul of pages/theme to mimic closley UT2004 Stats by Epic<br>
+ Cap times added to Clanbase Report<br>
+ Stats database, now at least 10-20x smaller<br>
+ <br>
+ Bug Fixes:<br>
+ TeamKills no longer appear in DM<br>
+ TeamKills no longer mess up overall stats<br>
+ Bot kills etc no longer included in overall stats<br>
+ Sprees are unique<br><br></dd>
+
+ <dt>beta 1.1</dt>
+ <dd>Added:<br>
+ Clanbse Reports for CTF Match\'s<br>
+ 30 Recent Match\'s to Player View<br><br></dd>
+
+ <dt>beta 1</dt>
+ <dd>Stats output for:<br>
+ Player Joins/Leaves<br>
+ Match Start/End<br>
+ Frags and Item Pickups<br>
+ Sprees (Doubles/Multis and Domination/Monster etc)<br>
+ Events</dd>
+
+</dl></blockquote>
+
+<p><a name="todolist"></a><b>To Do List</b></p>
+<blockquote><dl><dd>
+ <i>"Requests"</i><br>
+ Centralise stats<br>
+ Web based installer<br>
+ Other Anticheat log parser. (UTPure, EUT, etc..)<br>
+ Multi language support<br>
+ Add sftp support<br>
+ Add siege support<br>
+ Wins/Losses to the Career summary<br>
+ Killgraph as in utstatsdb<br>
+ <br></dd></dl>
+</blockquote>
+
+<p><a name="thanks"></a><b>Thanks</b></p>
+<blockquote>
+<dl>
+<dd>Epic for making a game that we still play<br>
+ kostaki for the database pointers, scoring system and the <a href="http://www.inzane.de/" target="_blank">inzane</a> public servers :)<br>
+ Limited for the late night sesions, the linux script and the original zero_out function<br>
+ L0cky and Flash for the original FTP Script<br>
+ Loph for the 6 different reports o/<br>
+ Rush for the improved linux script, testing, suggestions and bug finding<br>
+ TNSe for being TNSe<br>
+ Truff for testing, suggestions and constant bug finding<br>
+ Truff Community for testing, suggestions and input<br>
+ UnrealAdmin.org testers and suggesters<br></dd></dl></blockquote>
+
+<p><a name="copyright"></a><b>Copyright Notices</b></p>
+<blockquote><dl>
+<dd>UTStats<br>
+ Copyright (C) 2004/2005 <a href="http://utstats.unrealadmin.org/" target="_blank">UTStats</a><br>
+ <br>
+ This program is free software; you can redistribute and/or modify<br>
+ it under the terms of the Open Unreal Mod License.<br>
+ <br>
+ If you do make any changes, fixes or updates posting them on the<br>
+ forum would be appreciated.<br>
+ <br>
+ UT Query PHP script v1.01 by Almar Joling, 2003<br>
+ <a href="http://www.persistentrealities.com/" target="_blank">www.persistentrealities.com</a><br>
+ <br>
+ pemftp Class by Alexey Dotsenko &lt;alex at paneuromedia dot com&gt;<br>
+ <a href="http://www.phpclasses.org/browse/package/1743.html" target="_blank">http://www.phpclasses.org/browse/package/1743.html</a><br>
+ <br>
+ GeoLite data created by MaxMind<br/>
+ Available from <a href="http://www.maxmind.com/app/geolitecountry" target="_blank">http://www.maxmind.com/app/geolitecountry</a><br>
+ <br>
+ overLIB by Erik Bosrup<br>
+ <a href="http://www.bosrup.com/web/overlib/" target="_blank">http://www.bosrup.com/web/overlib/</a>
+ </dd></dl></blockquote>
+<br>
+<table width="70%">
+ <tbody><tr>
+ <td align="left"><a href="#Top">Back to Top</a></td>
+ <td align="right">&nbsp;</td>
+ </tr>
+</tbody></table>
+</div>';
+?> \ No newline at end of file
diff --git a/html/pages/dpmatch.php b/html/pages/dpmatch.php
new file mode 100755
index 0000000..b563fa0
--- /dev/null
+++ b/html/pages/dpmatch.php
@@ -0,0 +1,102 @@
+<?php
+if (empty($import_adminkey) or isset($_REQUEST['import_adminkey']) or $import_adminkey != $adminkey) die('bla');
+
+$options['title'] = 'Delete Player from Match';
+$i = 0;
+$options['vars'][$i]['name'] = 'pid';
+$options['vars'][$i]['type'] = 'player';
+$options['vars'][$i]['prompt'] = 'Choose the player you want to delete from a match:';
+$options['vars'][$i]['caption'] = 'Player to delete:';
+$i++;
+$options['vars'][$i]['name'] = 'mid';
+$options['vars'][$i]['type'] = 'match';
+$options['vars'][$i]['whereplayer'] = 'pid';
+$options['vars'][$i]['prompt'] = 'Choose the match you want to delete the player from:';
+$options['vars'][$i]['caption'] = 'Match:';
+$i++;
+
+$results = adminselect($options);
+
+
+$matchid = $results['mid'];
+$pid = $results['pid'];
+
+echo'<br><table border="0" cellpadding="1" cellspacing="2" width="600">
+<tr>
+ <td class="smheading" align="center" colspan="2">Delete Player From Match ID '.$matchid.'</td>
+</tr>';
+
+echo'<tr>
+ <td class="smheading" align="left" width="200">Amending Players Rank:</td>';
+
+$q_radjust = small_query("SELECT pid, gid, rank FROM uts_player WHERE id = $pid");
+if (!$q_radjust) {
+ $sql_crank = false;
+} else {
+ $rank_pid = $q_radjust[pid];
+ $rank_gid = $q_radjust[gid];
+ $rank = $q_radjust[rank];
+
+ $sql_crank = small_query("SELECT id, rank, matches FROM uts_rank WHERE pid = $rank_pid AND gid = '$rank_gid'");
+}
+if (!$sql_crank) {
+ echo'<td class="grey" align="left" width="400">Player not in rankings</td>';
+} else {
+ $rid = $sql_crank[id];
+ $newrank = $sql_crank[rank]-$rank;
+ $oldrank = $sql_crank[rank];
+ $matchcount = $sql_crank[matches]-1;
+
+ mysql_query("UPDATE uts_rank SET rank = $newrank, prevrank = $oldrank, matches = $matchcount WHERE id = $rid") or die(mysql_error());
+ mysql_query("DELETE FROM uts_rank WHERE matches = 0") or die(mysql_error());
+
+ echo'<td class="grey" align="left" width="400">Done</td>';
+}
+echo'</tr>
+<tr>
+ <td class="smheading" align="left">Removing Kill Matrix Entries:</td>';
+ $q_match = mysql_query("SELECT matchid, playerid FROM uts_player WHERE pid = '$pid' and matchid = '$matchid'") or die(mysql_error());
+ while ($r_match = mysql_fetch_array($q_match)) {
+ mysql_query("DELETE FROM uts_killsmatrix WHERE matchid = '${r_match['matchid']}' AND (killer = '${r_match['playerid']}' OR victim = '${r_match['playerid']}')") or die(mysql_error());
+ }
+ echo'<td class="grey" align="left">Done</td>
+</tr>
+
+
+<tr>
+ <td class="smheading" align="left" width="200">Removing Player Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE matchid = $matchid AND pid = $pid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Removing Player From Match:</td>';
+mysql_query("DELETE FROM uts_player WHERE matchid = $matchid AND pid = $pid") or die(mysql_error());
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Player Weapon Stats:</td>';
+mysql_query("DELETE FROM uts_weaponstats WHERE matchid IN ('$matchid','0') AND pid = '$pid'") or die(mysql_error());
+
+$q_weaponstats = mysql_query("SELECT SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE pid = '$pid' GROUP BY weapon") or die(mysql_error());
+while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='$pid', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+}
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+<tr>
+ <td class="smheading" align="left" width="200">Amending Global Weapon Stats:</td>';
+ mysql_query("DELETE FROM uts_weaponstats WHERE matchid='0' AND pid='0'") or die(mysql_error());
+
+ $q_weaponstats = mysql_query("SELECT weapon, SUM(kills) AS kills, SUM(shots) AS shots, SUM(hits) as hits, SUM(damage) as damage, AVG(acc) AS acc FROM uts_weaponstats WHERE matchid = '0' GROUP BY weapon") or die(mysql_error());
+ while ($r_weaponstats = mysql_fetch_array($q_weaponstats)) {
+ mysql_query("INSERT INTO uts_weaponstats SET matchid='0', pid='0', weapon='${r_weaponstats['weapon']}', kills='${r_weaponstats['kills']}', shots='${r_weaponstats['shots']}', hits='${r_weaponstats['hits']}', damage='${r_weaponstats['damage']}', acc='${r_weaponstats['acc']}'") or die(mysql_error());
+ }
+
+ echo'<td class="grey" align="left" width="400">Done</td>
+</tr>
+
+<tr>
+ <td class="smheading" align="center" colspan="2">Match Deleted - <a href="./admin.php?key='.$_REQUEST[key].'">Go Back To Admin Page</a></td>
+</tr></table>';
+
+?>
diff --git a/html/pages/graph_mbreakdown.php b/html/pages/graph_mbreakdown.php
new file mode 100755
index 0000000..44ef717
--- /dev/null
+++ b/html/pages/graph_mbreakdown.php
@@ -0,0 +1,229 @@
+<?php
+$max_height = 100;;
+
+// Hourly Breakdown
+$sql_ghours = "SELECT HOUR(time) AS res_hour, COUNT(*) AS res_count
+FROM uts_match WHERE $bgwhere GROUP by res_hour";
+$q_ghours = mysql_query($sql_ghours) or die(mysql_error());
+$hour_max = 0;
+$hour_sum = 0;
+while ($r_ghours = mysql_fetch_array($q_ghours)) {
+ $gb_hour[$r_ghours['res_hour']] = $r_ghours['res_count'];
+ if ($r_ghours['res_count'] > $hour_max) $hour_max = $r_ghours['res_count'];
+ $hour_sum += $r_ghours['res_count'];
+}
+if ($hour_max == 0) return;
+
+// Daily Breakdown
+// We use WEEKDAY rather then DAYOFWEEK because now the week starts with Monday instead of Sunday
+$sql_gdays = "SELECT WEEKDAY(time) AS res_day, COUNT(*) AS res_count
+FROM uts_match WHERE $bgwhere GROUP by res_day";
+$q_gdays = mysql_query($sql_gdays) or die(mysql_error());
+$day_max = 0;
+$day_sum = 0;
+while ($r_gdays = mysql_fetch_array($q_gdays)) {
+ $gb_day[$r_gdays['res_day']] = $r_gdays['res_count'];
+ if ($r_gdays['res_count'] > $day_max) $day_max = $r_gdays['res_count'];
+ $day_sum += $r_gdays['res_count'];
+}
+
+// Monthly Breakdown
+$sql_gmonths = "SELECT MONTH(time) AS res_month, COUNT(*) AS res_count
+FROM uts_match WHERE $bgwhere GROUP by res_month";
+$q_gmonths = mysql_query($sql_gmonths) or die(mysql_error());
+$month_max = 0;
+$month_sum = 0;
+while ($r_gmonths = mysql_fetch_array($q_gmonths)) {
+ $gb_month[$r_gmonths['res_month']] = $r_gmonths['res_count'];
+ if ($r_gmonths['res_count'] > $month_max) $month_max = $r_gmonths['res_count'];
+ $month_sum += $r_gmonths['res_count'];
+}
+
+// very dirty hack, to deal with the $bgwhere containing an OR
+// if it contains an OR, all literals should be prefixed with "m."
+if (substr_count($bgwhere, ' or ') == 0){
+ $bgwhere = 'm.' . $bgwhere;
+} else {
+ $bgwhere = substr($bgwhere, 1, -1);
+ $part = explode(' or ', $bgwhere);
+ $bgwhere = '';
+ foreach($part as $i){
+ $bgwhere .= 'm.' . $i . ' OR ';
+ }
+ $bgwhere = '(' . substr($bgwhere, 0, -4) . ')';
+}
+
+// Country Breakdown
+$sql_gcountries = "SELECT country AS res_country, COUNT(*) AS res_count FROM
+ (SELECT p.country AS country FROM uts_player AS p, uts_match AS m
+ WHERE m.id = p.matchid AND $bgwhere GROUP BY p.pid) AS res_table
+GROUP BY res_country ORDER BY res_count DESC";
+$q_gcountries = mysql_query($sql_gcountries) or die(mysql_error());
+$country_max = 0;
+$country_sum = 0;
+$i = 0;
+while ($r_gcountries = mysql_fetch_array($q_gcountries)) {
+ $gb_country[$i] = $r_gcountries['res_country'] . ";" . $r_gcountries['res_count'];
+ if ($r_gcountries['res_count'] > $country_max) $country_max = $r_gcountries['res_count'];
+ $country_sum += $r_gcountries['res_count'];
+ $i++;
+}
+
+echo'
+<table class = "box" border="0" cellpadding="0" cellspacing="2">
+<tbody>
+<tr><td>
+<table border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="heading" align="center" colspan="47">Hourly, Daily and Monthly Activity '.$gtitle.'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" colspan="47" height="10"></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="15"></td>';
+
+// Hourly
+for ($i = 0; $i <= 23; $i++) {
+ if (!isset($gb_hour[$i])) $gb_hour[$i] = 0;
+ $title = $gb_hour[$i] .' ('. get_dp($gb_hour[$i] / $hour_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="15"><img border="0" src="images/bars/v_bar'. ($i % 16 + 1) .'.png" width="18" height="'.(int)($gb_hour[$i] / $hour_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+}
+
+echo '<td class="dark" align="center" valign="bottom" width="15"></td>';
+
+// Daily
+for ($i = 0; $i <= 6; $i++) {
+ if (!isset($gb_day[$i])) $gb_day[$i] = 0;
+ $title = $gb_day[$i] .' ('. get_dp($gb_day[$i] / $day_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="15"><img border="0" src="images/bars/v_bar'. ($i % 16 + 1) .'.png" width="18" height="'.(int)($gb_day[$i] / $day_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+}
+
+echo '<td class="dark" align="center" valign="bottom" width="15"></td>';
+
+// Monthly
+for ($i = 1; $i <= 12; $i++) {
+ if (!isset($gb_month[$i])) $gb_month[$i] = 0;
+ $title = $gb_month[$i] .' ('. get_dp($gb_month[$i] / $month_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="15"><img border="0" src="images/bars/v_bar'. (($i + 8) % 16 + 1) .'.png" width="18" height="'.(int)($gb_month[$i] / $month_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+}
+echo '<td class="dark" align="center" valign="bottom" width="15"></td>';
+echo'</tr><tr>
+ <td class="grey" align="center" width="15"></td>
+ <td class="grey" align="center">0</td>
+ <td class="grey" align="center">1</td>
+ <td class="grey" align="center">2</td>
+ <td class="grey" align="center">3</td>
+ <td class="grey" align="center">4</td>
+ <td class="grey" align="center">5</td>
+ <td class="grey" align="center">6</td>
+ <td class="grey" align="center">7</td>
+ <td class="grey" align="center">8</td>
+ <td class="grey" align="center">9</td>
+ <td class="grey" align="center">10</td>
+ <td class="grey" align="center">11</td>
+ <td class="grey" align="center">12</td>
+ <td class="grey" align="center">13</td>
+ <td class="grey" align="center">14</td>
+ <td class="grey" align="center">15</td>
+ <td class="grey" align="center">16</td>
+ <td class="grey" align="center">17</td>
+ <td class="grey" align="center">18</td>
+ <td class="grey" align="center">19</td>
+ <td class="grey" align="center">20</td>
+ <td class="grey" align="center">21</td>
+ <td class="grey" align="center">22</td>
+ <td class="grey" align="center">23</td>
+ <td class="grey" align="center" width="10"></td>
+ <td class="grey" align="center">M</td>
+ <td class="grey" align="center">T</td>
+ <td class="grey" align="center">W</td>
+ <td class="grey" align="center">T</td>
+ <td class="grey" align="center">F</td>
+ <td class="grey" align="center">S</td>
+ <td class="grey" align="center">S</td>
+ <td class="grey" align="center" width="10"></td>
+ <td class="grey" align="center">J</td>
+ <td class="grey" align="center">F</td>
+ <td class="grey" align="center">M</td>
+ <td class="grey" align="center">A</td>
+ <td class="grey" align="center">M</td>
+ <td class="grey" align="center">J</td>
+ <td class="grey" align="center">J</td>
+ <td class="grey" align="center">A</td>
+ <td class="grey" align="center">S</td>
+ <td class="grey" align="center">O</td>
+ <td class="grey" align="center">N</td>
+ <td class="grey" align="center">D</td>
+ <td class="grey" align="center" width="15"></td>
+</tr>
+</tbody></table>
+</tr>
+</tbody>
+</table>
+<br><br>';
+
+global $a_countries;
+// The number of different countries we want to display
+$no_countries = 20;
+
+// Check if there are more countries then $no_countries; if so, we can have a "others" column
+if ( count($gb_country) < $no_countries ){
+ $max_cntry = count($gb_country);
+ $collspan = $max_cntry + 2;
+ $others = false;
+} else {
+ $max_cntry = $no_countries;
+ $collspan = $max_cntry + 3;
+ $others = true;
+}
+
+echo'
+<table class = "box" border="0" cellpadding="0" cellspacing="2">
+<tbody>
+<tr><td><table border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="heading" align="center" colspan="' . $collspan . '">&nbsp;&nbsp;Origin of Players&nbsp;&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" colspan="' . $collspan . '" height="10"></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="15"></td>';
+
+// Countries
+$x = 0;
+for ($i = 0; $i < $max_cntry; $i++) {
+ if (!isset($gb_hour[$i])) $gb_hour[$i] = 0;
+ $country = explode(";",$gb_country[$i]);
+ $title = $a_countries[$country[0]] .': ' . $country[1] . ' ('. get_dp($country[1] / $country_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="20"><img border="0" src="images/bars/v_bar'. ($i % 16 + 1) .'.png" width="20" height="'.(int)($country[1] / $country_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+ $x += $country[1];
+}
+if($others){
+ $countries_left = $country_sum - $x;
+ $title = 'Other Countries: ' . $countries_left . ' ('. get_dp($countries_left / $country_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="20"><img border="0" src="images/bars/v_bar'. ($max_cntry % 16 + 1) .'.png" width="20" height="'.(int)($countries_left / $country_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+};
+
+echo '<td class="dark" align="center" valign="bottom" width="18"></td>';
+echo'</tr><tr>
+ <td class="grey" align="center" width="18"></td>';
+ for ($i = 0; $i < $max_cntry; $i++) {
+ $country = explode(";",$gb_country[$i]);
+ $country = strtoupper($country[0]);
+ echo '<td class="grey" align="center">' . $country . '</td>';
+ }
+if($others){
+ echo '<td class="grey" align="center">--</td>';
+}
+echo'<td class="grey" align="center" width="15"></td>
+</tr>
+</tbody></table>
+</tr>
+</tbody>
+</table>
+<br>';
+?> \ No newline at end of file
diff --git a/html/pages/graph_pbreakdown.php b/html/pages/graph_pbreakdown.php
new file mode 100755
index 0000000..808c7cb
--- /dev/null
+++ b/html/pages/graph_pbreakdown.php
@@ -0,0 +1,137 @@
+<?php
+$max_height = 80;
+
+// Hourly Breakdown
+$sql_ghours = "SELECT HOUR(m.time) AS res_hour, COUNT(p.id) AS res_count
+FROM uts_match m, uts_player p WHERE $bgwhere AND m.id = p.matchid GROUP by res_hour";
+$q_ghours = mysql_query($sql_ghours) or die(mysql_error());
+$hour_max = 0;
+$hour_sum = 0;
+while ($r_ghours = mysql_fetch_array($q_ghours)) {
+ $gb_hour[$r_ghours['res_hour']] = $r_ghours['res_count'];
+ if ($r_ghours['res_count'] > $hour_max) $hour_max = $r_ghours['res_count'];
+ $hour_sum += $r_ghours['res_count'];
+}
+if ($hour_max == 0) return;
+
+// Daily Breakdown
+// We use WEEKDAY rather then DAYOFWEEK because now the week starts with Monday instead of Sunday
+$sql_gdays = "SELECT WEEKDAY(time) AS res_day, COUNT(*) AS res_count
+FROM uts_match m, uts_player p WHERE $bgwhere AND m.id = p.matchid GROUP by res_day";
+$q_gdays = mysql_query($sql_gdays) or die(mysql_error());
+$day_max = 0;
+$day_sum = 0;
+while ($r_gdays = mysql_fetch_array($q_gdays)) {
+ $gb_day[$r_gdays['res_day']] = $r_gdays['res_count'];
+ if ($r_gdays['res_count'] > $day_max) $day_max = $r_gdays['res_count'];
+ $day_sum += $r_gdays['res_count'];
+}
+
+// Monthly Breakdown
+$sql_gmonths = "SELECT MONTH(m.time) AS res_month, COUNT(p.id) AS res_count
+FROM uts_match m, uts_player p WHERE $bgwhere AND m.id = p.matchid GROUP by res_month";
+$q_gmonths = mysql_query($sql_gmonths) or die(mysql_error());
+$month_max = 0;
+$month_sum = 0;
+while ($r_gmonths = mysql_fetch_array($q_gmonths)) {
+ $gb_month[$r_gmonths['res_month']] = $r_gmonths['res_count'];
+ if ($r_gmonths['res_count'] > $month_max) $month_max = $r_gmonths['res_count'];
+ $month_sum += $r_gmonths['res_count'];
+}
+
+
+echo'
+<table class = "box" border="0" cellpadding="0" cellspacing="2">
+<tbody>
+<tr><td>
+<table border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="heading" align="center" colspan="47">Hourly, Daily and Monthly Activity '.$gtitle.'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" colspan="47" height="10"></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="15"></td>';
+
+// Hourly
+for ($i = 0; $i <= 23; $i++) {
+ if (!isset($gb_hour[$i])) $gb_hour[$i] = 0;
+ $title = $gb_hour[$i] .' ('. get_dp($gb_hour[$i] / $hour_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="15"><img border="0" src="images/bars/v_bar'. ($i % 16 + 1) .'.png" width="18" height="'.(int)($gb_hour[$i] / $hour_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+}
+
+echo '<td class="dark" align="center" valign="bottom" width="15"></td>';
+
+// Daily
+for ($i = 0; $i <= 6; $i++) {
+ if (!isset($gb_day[$i])) $gb_day[$i] = 0;
+ $title = $gb_day[$i] .' ('. get_dp($gb_day[$i] / $day_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="15"><img border="0" src="images/bars/v_bar'. ($i % 16 + 1) .'.png" width="18" height="'.(int)($gb_day[$i] / $day_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+}
+
+echo '<td class="dark" align="center" valign="bottom" width="15"></td>';
+
+// Monthly
+for ($i = 1; $i <= 12; $i++) {
+ if (!isset($gb_month[$i])) $gb_month[$i] = 0;
+ $title = $gb_month[$i] .' ('. get_dp($gb_month[$i] / $month_sum * 100) .' %)';
+ echo '<td class="dark" align="center" valign="bottom" width="15"><img border="0" src="images/bars/v_bar'. (($i + 8) % 16 + 1) .'.png" width="18" height="'.(int)($gb_month[$i] / $month_max * $max_height).'" alt="'. $title .'" title="'. $title .'"></td>';
+}
+echo '<td class="dark" align="center" valign="bottom" width="15"></td>';
+echo'</tr><tr>
+ <td class="grey" align="center" width="15"></td>
+ <td class="grey" align="center">0</td>
+ <td class="grey" align="center">1</td>
+ <td class="grey" align="center">2</td>
+ <td class="grey" align="center">3</td>
+ <td class="grey" align="center">4</td>
+ <td class="grey" align="center">5</td>
+ <td class="grey" align="center">6</td>
+ <td class="grey" align="center">7</td>
+ <td class="grey" align="center">8</td>
+ <td class="grey" align="center">9</td>
+ <td class="grey" align="center">10</td>
+ <td class="grey" align="center">11</td>
+ <td class="grey" align="center">12</td>
+ <td class="grey" align="center">13</td>
+ <td class="grey" align="center">14</td>
+ <td class="grey" align="center">15</td>
+ <td class="grey" align="center">16</td>
+ <td class="grey" align="center">17</td>
+ <td class="grey" align="center">18</td>
+ <td class="grey" align="center">19</td>
+ <td class="grey" align="center">20</td>
+ <td class="grey" align="center">21</td>
+ <td class="grey" align="center">22</td>
+ <td class="grey" align="center">23</td>
+ <td class="grey" align="center" width="10"></td>
+ <td class="grey" align="center">M</td>
+ <td class="grey" align="center">T</td>
+ <td class="grey" align="center">W</td>
+ <td class="grey" align="center">T</td>
+ <td class="grey" align="center">F</td>
+ <td class="grey" align="center">S</td>
+ <td class="grey" align="center">S</td>
+ <td class="grey" align="center" width="10"></td>
+ <td class="grey" align="center">J</td>
+ <td class="grey" align="center">F</td>
+ <td class="grey" align="center">M</td>
+ <td class="grey" align="center">A</td>
+ <td class="grey" align="center">M</td>
+ <td class="grey" align="center">J</td>
+ <td class="grey" align="center">J</td>
+ <td class="grey" align="center">A</td>
+ <td class="grey" align="center">S</td>
+ <td class="grey" align="center">O</td>
+ <td class="grey" align="center">N</td>
+ <td class="grey" align="center">D</td>
+ <td class="grey" align="center" width="15"></td>
+</tr>
+</tbody></table>
+</tr>
+</tbody>
+</table>
+<br>';
+?> \ No newline at end of file
diff --git a/html/pages/help.php b/html/pages/help.php
new file mode 100755
index 0000000..fb7a923
--- /dev/null
+++ b/html/pages/help.php
@@ -0,0 +1,183 @@
+<?php
+echo'
+<div class="text" align="left">
+<p><span class="txttitle">Frequently Asked Questions</span></p>
+
+<blockquote><p>
+ 1. <a href="#servers">Stat Tracking Servers</a><br>
+ 2. <a href="#enable">Enabling your personal stats tracking</a><br>
+ 3. <a href="#info">Information about how the stats work</a><br>
+ 4. <a href="#types">What are the \'official\' Unreal Tournament gametypes?</a><br>
+ 5. <a href="#rank">How does ranking work?</a><br>
+ 6. <a href="#score">Scoring - Individual player points awarded?</a><br>
+&nbsp;7. <a href="#tscore">Team Scores?</a><br>
+ 8. <a href="#glossary">Glossary - Terms and abbreviations.</a><br>
+&nbsp;9. <a href="#statserver">Enabling Stats on a Server</a><br>
+</p></blockquote>
+
+<p><a name="servers"></a><b>Stat Tracking Servers</b></p>
+<blockquote><p>UTStats only does stats tracking for servers that have UTStats
+ installed.<br>
+ To download and get the latest information, please click the forum link to
+ the left.</p></blockquote>
+
+<p><a name="enable"></a><b>Enabling your personal stats tracking</b></p>
+<blockquote><p>Currently this is not possible, for now you need to use the same
+ nick for this group of servers.<br>
+ If the server runs UTGL your stats nick always will be the one you registered
+ with so there are no stats tracking issues on UTGL servers.</p></blockquote>
+
+<p><a name="info"></a><b>Information about how the stats work</b></p>
+<blockquote><p>A server with stat tracking enabled will send information to the
+stats server about the game - each frag, score, etc.  Once the game is
+completed the match is processed and posted on the stats pages.  The best
+way to look up a recent match you played is either by your stats ID or the
+server ID.  You can search for your user ID or the server ID by name.
+The user names used on the stats pages are based on the last player name you
+used in a match - your stats user name you entered in the networking settings is
+not displayed.</p>
+<p>Bots are not logged, nor are any kills against them.</p>
+</blockquote>
+
+<p><a name="types"></a><b>What are the \'official\' Unreal Tournament gametypes?</b></p>
+<blockquote><p>Out of the box Unreal Tournament features the gametypes
+Deathmatch, Team Deathmatch, Capture the Flag, Assault and Domination.<br>
+There are separate rankings for each of the official game types.</p></blockquote>
+
+<p><a name="rank"></a><b>How does ranking work?</b></p>
+<blockquote><p>Ranking points are based on what you do in a game.<br>
+Points are awarded for fragging and events (eg. flag captures).<br>
+Points are deducted for deaths, suicides and teamkills<br><br>
+Player ranking points are reduced until they have completed 300 minutes of games.</p></blockquote>
+
+<p><a name="score"></a><b>Scoring - Individual player points award:</b></p>
+<blockquote><p>These depend on the game type you are playing. There are
+individual player scores awarded for special achievements, such as captures,
+assists, etc. <br>
+See the Score tables on the Players or Matches subpages to find
+out how many points are actually awarded for each score type.</p></blockquote>
+
+<p><a name="tscore"></a><b>Team Scores?</b></p>
+<blockquote><p>Aside from the individual player scoring in team based gametypes
+(CTF, AS, DOM), there are also Team Scores, that are awarded to
+your team as a whole, for fulfilling a gametype specific objective:<br>
+</p><ul>
+ <li>Capture the Flag - capturing, covering, killing and returning the flag.</li>
+ <li>Assault - achieving an objective.</li>
+ <li>Domination - \'holding\' domination points.</li>
+</ul>
+Note: A team based game is won by the Team Score; the individual player score
+sums do not matter!<p></p></blockquote>
+
+<p><br><a name="glossary"></a><span class="txttitle">Glossary</span></p>
+<blockquote>
+
+<p><a name="fAbb"></a><b>Abbreviations</b></p>
+<blockquote><p>Common abbreviations in UTStats.<br>
+- K = Kills, S = Suicides, F = Frags, D = Deaths<br>
+- E = Events, TK = Team Kills, TD = Team Deaths<br>
+- DM = Deathmatch, TDM = Team Deathmatch, CTF = Capture the Flag,<br>
+- AS = Assault, DOM = Domination<br>
+- FPH = Frags per Hour, SPH = Score per Hour<br>
+- [d] = Time in days, [h] = Time in hours,<br>
+- [m],[min] = Time in minutes, [s],[sec] = Time in seconds</p></blockquote>
+
+<p><a name="fDeaths"></a><b>Deaths</b></p>
+<blockquote><p>Number of times a player gets killed by another player.<br>
+- This does not include environment induced deaths, like trap doors. These and
+self kills are counted separately, as suicides.<br>
+- Team based deaths are counted as team deaths.<br>
+- In tables with weapon specific information, deaths are the number of times a
+player died holding that weapon.</p></blockquote>
+
+<p><a name="fDodging"></a><b>Dodging</b></p>
+<blockquote><p>Special move in Unreal Tournament, that can be activated by
+tapping any movement key twice.  Used by many good players to improve their
+maneuverability.</p></blockquote>
+
+<p><a name="fEff"></a><b>Efficiency</b></p>
+<blockquote><p>A ratio that denotes the player\'s kill skill by comparing it with
+his overall performance.  A perfect efficiency is equal to 1 (100%),
+anything less than 0.5 (50%) is below average.<br>
+Formula: Kills / (Kills + Deaths + Suicides [+Team Kills])</p></blockquote>
+
+<p><a name="fEvents"></a><b>Events</b></p>
+<blockquote><p>Anything not related to frags, deaths, suicides or kills is
+hereby defined as an event. Typical events would be a flag capture (score
+related) or a flag drop (not score related). Events are mostly used to track all
+the other things going on in a game, that are not frag-related.</p></blockquote>
+
+<p><a name="fFB"></a><b>First Blood</b></p>
+<blockquote><p>Special event awarded to the player who gets the first kill in a
+newly started match.</p></blockquote>
+
+<p><a name="fFrags"></a><b>Frags</b></p>
+<blockquote><p>A player\'s frag count is equal to their kills minus
+suicides.  In team games team kills (not team suicides) are also subtracted
+from the player\'s kills.</p></blockquote>
+
+<p><a name="fFPH"></a><b>Frags Per Hour</b></p>
+<blockquote><p>A ratio between the number of frags a player scores per one
+hour.  30 frags in 5 minutes will give you 360 FPH.<br>
+Formula: Frags / (Time played in hours)</p></blockquote>
+
+<p><a name="fKills"></a><b>Kills</b></p>
+<blockquote><p>Number of times a player kills another player.<br>
+Note: UTStats only tracks human vs. human kills. Bot kills and other bot
+related events are tracked at the <i>admins discretion</i>.</p></blockquote>
+
+<p><a name="fMK"></a><b>Multi Kills</b></p>
+<blockquote><p>Special event awarded to the player for killing other players in
+a certain time frame.  Every time a player scores a kill he has up to 3
+seconds to make another kill.  So 2 kills in 3 seconds gets you a Double
+Kill, 3 kills within 3 seconds apart from another a Multi Kill and so on:<br>
+- Double Kill = 2 kills<br>
+- Multi Kill = 3 kills<br>
+- Ultra Kill = 5 kills<br>
+- Monster Kill = 6 kills</p></blockquote>
+
+<p><a name="fPing"></a><b>Ping</b></p>
+<blockquote><p>Measure of your connection quality.  Ping is the round trip
+delay in milliseconds that your computer has to the game server.  Low
+values are not important for a fun game, but it sure helps.</p></blockquote>
+
+<p><a name="fSpree"></a><b>Killing Sprees</b></p>
+<blockquote><p>Special event: If you manage to kill 5 or more opponents without
+dying yourself, you will be on a killing spree. If you kill more than 10
+opponents, you are on a rampage, etc.:<br>
+- Killing Spree! 5 kills<br>
+- Rampage! 10 kills<br>
+- Dominating! 15 kills<br>
+- Unstoppable! 20 kills<br>
+- God Like! 25 kills</blockquote>
+
+<p><a name="fSuicides"></a><b>Suicides</b></p>
+<blockquote><p>Number of times a player dies due to action of their own cause.
+Suicides can be environment induced (drowning, getting crushed, falling) or
+weapon related (fatal splash damage from their own weapon).</p></blockquote>
+
+<p><a name="fTD"></a><b>Team Deaths</b></p>
+<blockquote><p>Number of times a player in a team based game is killed by
+someone on their own team.</p></blockquote>
+
+<p><a name="fTK"></a><b>Team Kills</b></p>
+<blockquote><p>Number of times a player in a team based game kills someone on
+their own team.<br>
+Note: Team kills subtract from a player\'s personal frags and thus the team frags
+as a whole.</p></blockquote>
+
+<p><a name="fTTL"></a><b>TTL</b></p>
+<blockquote><p>TTL is Time to Live.<br>
+Its the length of time you are in a game in seconds divided by how many times you die,
+thus giving an average time of how long you will live.</p></blockquote>
+
+</blockquote>
+
+<p><a name="statserver"></a><b>Enabling Stats on a Server</b></p>
+<blockquote><p>Download and get the latest information on UTStats by clicking
+ the forum link to the left.</p></blockquote>
+
+<br>
+<a href="#Top">Back to Top</a>
+</div>';
+?> \ No newline at end of file
diff --git a/html/pages/home.php b/html/pages/home.php
new file mode 100755
index 0000000..3cb167d
--- /dev/null
+++ b/html/pages/home.php
@@ -0,0 +1,100 @@
+<?php
+echo'
+<table class="box" border="0" cellpadding="1" cellspacing="1" width="450">
+ <tbody><tr>
+ <td class="heading" colspan="5" align="center">UTStats Summary</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Players</td>
+ <td class="smheading" align="center">Servers</td>
+ <td class="smheading" align="center">Maps</td>
+ <td class="smheading" align="center">Matches Logged</td>
+ <td class="smheading" align="center">Player Hours</td>
+ </tr>';
+
+// Get Summary Info
+$r_playercount = small_query("SELECT COUNT(*) AS result FROM uts_pinfo");
+$playercount = $r_playercount['result'];
+$servercount = small_count("SELECT DISTINCT servername FROM uts_match");
+$mapcount = small_count("SELECT COUNT(mapfile) AS result FROM uts_match GROUP BY mapfile");
+$r_matchcount = small_query("SELECT COUNT(*) AS result FROM uts_match");
+$matchcount= $r_matchcount['result'];
+$hourscount = small_query("SELECT SUM(gametime) AS result FROM uts_player");
+
+$gametime = sec2hour($hourscount[result]);
+
+echo'
+ <tr>
+ <td class="lggrey" align="center">'.$playercount.'</td>
+ <td class="lggrey" align="center">'.$servercount.'</td>
+ <td class="lggrey" align="center">'.$mapcount.'</td>
+ <td class="lggrey" align="center">'.$matchcount.'</td>
+ <td class="lggrey" align="center">'.$gametime.'</td>
+ </tr>
+</tbody></table>
+
+<table border="0" width="600">
+ <tbody><tr>
+ <td align="center">
+ <div class="titlemsg">
+ <p>Welcome to UTStats.<br>
+ Here you can look up information on UT matches and players.<br>
+ Select a category from the column on the left.<br></p>
+ </div>
+
+ <table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tbody><tr>
+ <td class="heading" colspan="8" align="center">Game Summary</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="150">Match Type</td>
+ <td class="smheading" align="center" width="52">Frags</td>
+ <td class="smheading" align="center" width="52">Kills</td>
+ <td class="smheading" align="center" width="52">Suicides</td>
+ <td class="smheading" align="center" width="40">Team Kills</td>
+ <td class="smheading" align="center" width="52">Matches</td>
+ <td class="smheading" align="center" width="52">Game Hours</td>
+ </tr>';
+
+$sql_gamesummary = "SELECT g.id AS gid, g.name AS gamename, SUM(p.frags) AS frags, SUM(p.kills) AS kills, SUM(p.suicides) AS suicides, SUM(p.teamkills) AS teamkills, COUNT(DISTINCT p.matchid) AS matchcount
+FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id GROUP BY gamename ORDER BY gamename ASC";
+$q_gamesummary = mysql_query($sql_gamesummary) or die(mysql_error());
+while ($r_gamesummary = mysql_fetch_array($q_gamesummary)) {
+
+ $gid = $r_gamesummary[gid];
+
+ $q_gametime = small_query("SELECT SUM(gametime) AS gametime FROM uts_match WHERE gid = '$gid'");
+ $gametime = sec2hour($q_gametime[gametime]);
+
+ echo'<tr><td class="dark" align="center">'.$r_gamesummary[gamename].'</td>
+ <td class="grey" align="center">'.$r_gamesummary[frags].'</td>
+ <td class="grey" align="center">'.$r_gamesummary[kills].'</td>
+ <td class="grey" align="center">'.$r_gamesummary[suicides].'</td>
+ <td class="grey" align="center">'.$r_gamesummary[teamkills].'</td>
+ <td class="grey" align="center">'.$r_gamesummary[matchcount].'</td>
+ <td class="grey" align="center">'.$gametime.'</td>';
+}
+
+$totalsummary = small_query("SELECT SUM(p.frags) AS frags, SUM(p.kills) AS kills, SUM(p.suicides) AS suicides, SUM(p.teamkills) AS teamkills, COUNT(DISTINCT p.matchid) AS matchcount, SUM(p.gametime) AS gametime
+FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id");
+
+$q_gametime = small_query("SELECT SUM(gametime) AS gametime FROM uts_match");
+$gametime = sec2hour($q_gametime[gametime]);
+
+echo' <tr>
+ <td class="dark" align="center"><b>Totals for All Players</b></td>
+ <td class="darkgrey" align="center">'.$totalsummary[frags].'</td>
+ <td class="darkgrey" align="center">'.$totalsummary[kills].'</td>
+ <td class="darkgrey" align="center">'.$totalsummary[suicides].'</td>
+ <td class="darkgrey" align="center">'.$totalsummary[teamkills].'</td>
+ <td class="darkgrey" align="center">'.$totalsummary[matchcount].'</td>
+ <td class="darkgrey" align="center">'.$gametime.'</td>
+ </tr>
+ </tbody></table>
+</tbody></table><br>';
+
+// Do graph stuff
+$gtitle = "Across All Servers";
+$bgwhere = "id >= 0";
+include("pages/graph_mbreakdown.php");
+?> \ No newline at end of file
diff --git a/html/pages/index.htm b/html/pages/index.htm
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/html/pages/index.htm
diff --git a/html/pages/maps.php b/html/pages/maps.php
new file mode 100755
index 0000000..409398c
--- /dev/null
+++ b/html/pages/maps.php
@@ -0,0 +1,143 @@
+<?php
+function InvertSort($curr_field, $filter, $sort) {
+ if ($curr_field != $filter) return(($curr_field == "mapfile") ? "ASC" : "DESC");
+ if ($sort == 'ASC') return('DESC');
+ return('ASC');
+}
+
+function SortPic($curr_field, $filter, $sort) {
+ if ($curr_field != $filter) return;
+ $fname = 'images/s_'. strtolower($sort) .'.png';
+ if (!file_exists($fname)) return;
+ return('&nbsp;<img src="'. $fname .'" border="0" width="11" height="9" alt="" title="('.strtolower($sort).'ending)">');
+}
+
+
+// Get filter and set sorting
+$filter = my_addslashes($_GET[filter]);
+$sort = my_addslashes($_GET[sort]);
+$q = my_addslashes($_GET[q]);
+$gid = preg_replace('/\D/', '', $_GET[gid]);
+
+IF (empty($filter) or (!in_array(strtolower($filter), array("mapfile", "matchcount", "frags", "matchscore", "gametime")))) {
+ $filter = "mapfile";
+}
+
+if (empty($sort) or ($sort != 'ASC' and $sort != 'DESC')) $sort = ($filter == "mapfile") ? "ASC" : "DESC";
+
+if (isset($gid)) {
+ if ($gid != 0) {
+ $url_condition .= "&amp;gid=".urlencode($gid);
+ $sql_condition = " WHERE gid = $gid";
+ }
+}
+else {
+ $gid = 0;
+}
+
+if (isset($q)) {
+ if ($gid != 0) {
+ $sql_condition .= ' AND mapfile LIKE "%' . $q . '%" ';
+ }
+ else {
+ $sql_condition .= ' WHERE mapfile LIKE "%' . $q . '%" ';
+ }
+ $url_condition .= "&amp;q=".urlencode($q);
+}
+
+
+// Firstly we need to work out First Last Next Prev pages
+
+$mcount = small_count("SELECT mapfile FROM uts_match" . $sql_condition . " GROUP BY mapfile");
+
+$ecount = $mcount/25;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = preg_replace('/\D/', '', $_GET["page"]);
+IF ($cpage == "") { $cpage = "0"; }
+$qpage = $cpage*25;
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=maps&amp;filter=$filter&amp;sort=$sort&amp;page=$ppage".$url_condition."\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=maps&amp;filter=$filter&amp;sort=$sort&amp;page=$npage".$url_condition."\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=maps&amp;filter=$filter&amp;sort=$sort&amp;page=$fpage".$url_condition."\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=maps&amp;filter=$filter&amp;sort=$sort&amp;page=$lpage".$url_condition."\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+echo'
+<form NAME="mapfilter" METHOD="get" ACTION="">
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="5" align="center">Unreal Tournament Maps List</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="100%" colspan="5">
+ <input type = "hidden" name = "p" value = "maps">
+ <input type = "hidden" name = "sort" value = "'.$sort.'">
+ <input type = "hidden" name = "filter" value = "'.$filter.'">
+ Filter: ';
+echo '<select class="searchform" name="gid">';
+echo '<option value="0">*</option>';
+$sql_game = "SELECT DISTINCT(p.gid), g.name FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id ORDER BY g.name ASC";
+$q_game = mysql_query($sql_game) or die(mysql_error());
+while ($r_game = mysql_fetch_array($q_game)) {
+ $selected = ($r_game['gid'] == $gid) ? 'selected' : '';
+ echo '<option '.$selected.' value="'.$r_game['gid'].'">'. $r_game['name'] .'</option>';
+}
+echo '</select> ';
+echo ' Search: <input type = "text" name="q" size="16"'.(empty($q) ? '' : ' value="'.htmlentities($q).'"').'>';
+echo ' <input class="searchform" type="Submit" value="Apply">';
+echo '
+ </td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="250"><a class="smheading" href="./?p=maps&amp;filter=mapfile&amp;sort='.InvertSort('mapfile', $filter, $sort).$url_condition.'">Map Name</a>'.SortPic('mapfile', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="150"><a class="smheading" href="./?p=maps&amp;filter=matchcount&amp;sort='.InvertSort('matchcount', $filter, $sort).$url_condition.'">Matches</a>'.SortPic('matchcount', $filter, $sort).'</td>
+ <td class="smheading" align="center"><a class="smheading" href="./?p=maps&amp;filter=frags&amp;sort='.InvertSort('frags', $filter, $sort).$url_condition.'">Avg. Frags</a>'.SortPic('frags', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="100"><a class="smheading" href="./?p=maps&amp;filter=matchscore&amp;sort='.InvertSort('matchscore', $filter, $sort).$url_condition.'">Avg. Score</a>'.SortPic('matchscore', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="100"><a class="smheading" href="./?p=maps&amp;filter=gametime&amp;sort='.InvertSort('gametime', $filter, $sort).$url_condition.'">Time</a>'.SortPic('gametime', $filter, $sort).'</td>
+ </tr>';
+
+$sql_maps = "SELECT IF(RIGHT(mapfile,4) LIKE '.unr', mapfile, CONCAT(mapfile, '.unr')) as mapfile, COUNT(id) AS matchcount, AVG(frags) AS frags, AVG(t0score+t1score+t2score+t3score) AS matchscore, SUM(gametime) AS gametime
+FROM uts_match" . $sql_condition . " GROUP BY mapfile ORDER BY $filter $sort LIMIT $qpage,25";
+$q_maps = mysql_query($sql_maps) or die(mysql_error());
+while ($r_maps = mysql_fetch_array($q_maps)) {
+
+ $r_mapfile = un_ut($r_maps[mapfile]);
+ $myurl = urlencode($r_mapfile);
+ $r_gametime = GetMinutes($r_maps[gametime]);
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=minfo&amp;map='.$myurl.'">'.$r_mapfile.'</a></td>
+ <td class="grey" align="center">'.$r_maps[matchcount].'</td>
+ <td class="grey" align="center">'.get_dp($r_maps[frags]).'</td>
+ <td class="grey" align="center">'.get_dp($r_maps[matchscore]).'</td>
+ <td class="grey" align="center">'.$r_gametime.'</td>
+ </tr>';
+}
+
+echo'
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+</form>';
+?> \ No newline at end of file
diff --git a/html/pages/maps_info.php b/html/pages/maps_info.php
new file mode 100755
index 0000000..329fcce
--- /dev/null
+++ b/html/pages/maps_info.php
@@ -0,0 +1,321 @@
+<?php
+$map = my_addslashes($_GET[map]);
+$bugmap = my_addslashes($_GET[map]);
+$realmap = $bugmap.".unr";
+
+$map_matches = small_query("SELECT COUNT(id) as matchcount, SUM(t0score+t1score+t2score+t3score) AS gamescore,
+SUM(gametime) AS gametime, SUM(kills) AS kills, SUM(deaths) AS deaths, SUM(suicides) AS suicides, SUM(teamkills) AS teamkills FROM uts_match WHERE mapfile = '$realmap' OR mapfile = '$bugmap'");
+$map_last = small_query("SELECT time FROM uts_match WHERE mapfile = '$realmap' OR mapfile = '$bugmap' ORDER BY time DESC LIMIT 0,1");
+
+$map_tottime = GetMinutes($map_matches[gametime]);
+$map_lastmatch = mdate($map_last[time]);
+
+// Map pic code
+$mappic = strtolower("images/maps/".$map.".jpg");
+
+if (file_exists($mappic)) {
+} else {
+ $mappic = ("images/maps/blank.jpg");
+}
+
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="100%">
+ <tbody><tr>
+ <td class="heading" align="center" colspan="4">Statistics for '.htmlentities($map).'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Matches</td>
+ <td class="grey" align="center">'.$map_matches[matchcount].'</td>
+ <td class="grey" align="center" rowspan="9"><img border="0" alt="'.htmlentities($map).'" title="'.htmlentities($map).'" src="'.$mappic.'"></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Time</td>
+ <td class="grey" align="center">'.$map_tottime.' minutes</td>
+ </tr>';
+// Show some gametype specific stuff
+if ((strtolower(substr($map, 0, 7)) == "ctf-bt-") or (strtolower(substr($map, 0, 3)) == "bt-")) {
+ // Bunny Track
+ $record = small_query("SELECT pi.id, pi.name AS name, pi.country, e.col3 AS time, e.col4 AS date FROM uts_events AS e, uts_pinfo AS pi, uts_player AS p, uts_match AS m WHERE m.id = e.matchid AND m.id = p.matchid AND p.playerid = e.playerid AND pi.id = p.pid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap') AND e.col1 = 'btcap' GROUP BY pi.id ORDER BY (0 + e.col3) ASC, e.col4 ASC LIMIT 0,1");
+ if (!empty($record['time'])) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Fastest Capture</td>
+ <td class="grey" align="center"><a href="?p=pinfo&amp;pid='.$record[id].'">'.FormatPlayerName($record['country'], $record['id'], $record['name']).'</a><br>' . btcaptime($record['time']) . ' minutes<BR>'.gmdate('d-m-Y h:i a', $record['date']).'</td>
+ </tr>';
+ }
+ else {
+ echo '
+ <tr>
+ <td class="dark" align="center">Fastest Capture</td>
+ <td class="grey" align="center">No record set!</td>
+ </tr>';
+ }
+ echo '
+ <tr>
+ <td class="dark" align="center">Total Flags Captured</td>
+ <td class="grey" align="center">'.$map_matches[gamescore].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Suicides</td>
+ <td class="grey" align="center">'.$map_matches[suicides].'</td>
+ </tr>';
+}
+else if (strtolower(substr($map, 0, 4)) == "ctf-") {
+ // Capture the Flag
+ $totals = small_query("SELECT SUM(p.flag_taken) as flag_taken, SUM(p.flag_return) AS flag_return, SUM(p.flag_cover) AS flag_cover FROM uts_player AS p, uts_match AS m WHERE m.id = p.matchid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap')");
+ echo '
+ <tr>
+ <td class="dark" align="center">Total Flags Captured</td>
+ <td class="grey" align="center">'.$map_matches[gamescore].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Flags Taken</td>
+ <td class="grey" align="center">'.$totals['flag_taken'].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Covers</td>
+ <td class="grey" align="center">'.$totals['flag_cover'].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Flags Returned</td>
+ <td class="grey" align="center">'.$totals['flag_return'].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Kills</td>
+ <td class="grey" align="center">'.$map_matches[kills].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Suicides</td>
+ <td class="grey" align="center">'.$map_matches[suicides].'</td>
+ </tr>';
+}
+else if (strtolower(substr($map, 0, 3)) == "as-") {
+ // Assault
+ $totals = small_query("SELECT SUM(p.ass_obj) as ass_obj FROM uts_player AS p, uts_match AS m WHERE m.id = p.matchid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap')");
+ echo '
+ <tr>
+ <td class="dark" align="center">Total Objectives Achieved</td>
+ <td class="grey" align="center">'.$totals[ass_obj].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Kills</td>
+ <td class="grey" align="center">'.$map_matches[kills].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Suicides</td>
+ <td class="grey" align="center">'.$map_matches[suicides].'</td>
+ </tr>';
+}
+else if (strtolower(substr($map, 0, 3)) == "jb-") {
+ // Assault
+ $totals = small_query("SELECT SUM(p.ass_obj) as ass_obj FROM uts_player AS p, uts_match AS m WHERE m.id = p.matchid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap')");
+ echo '
+ <tr>
+ <td class="dark" align="center">Team Releases</td>
+ <td class="grey" align="center">'.$totals[ass_obj].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Kills</td>
+ <td class="grey" align="center">'.$map_matches[kills].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Suicides</td>
+ <td class="grey" align="center">'.$map_matches[suicides].'</td>
+ </tr>';
+}
+else if (strtolower(substr($map, 0, 4)) == "dom-") {
+ // Assault
+ $totals = small_query("SELECT SUM(p.dom_cp) as dom_cp FROM uts_player AS p, uts_match AS m WHERE m.id = p.matchid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap')");
+ echo '
+ <tr>
+ <td class="dark" align="center">Total Control Points Captured</td>
+ <td class="grey" align="center">'.$totals['dom_cp'].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Kills</td>
+ <td class="grey" align="center">'.$map_matches[kills].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Suicides</td>
+ <td class="grey" align="center">'.$map_matches[suicides].'</td>
+ </tr>';
+}
+else {
+ echo '
+ <tr>
+ <td class="dark" align="center">Total Score</td>
+ <td class="grey" align="center">'.$map_matches[gamescore].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Kills</td>
+ <td class="grey" align="center">'.$map_matches[kills].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Teamkills</td>
+ <td class="grey" align="center">'.$map_matches[teamkills].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Total Suicides</td>
+ <td class="grey" align="center">'.$map_matches[suicides].'</td>
+ </tr>';
+}
+echo '
+ <tr>
+ <td class="dark" align="center">Last Match</td>
+ <td class="grey" align="center">'.$map_lastmatch.'</td>
+ </tr>
+</tbody></table>
+<br>';
+
+// Do graph stuff
+$bgwhere = "(mapfile = '$realmap' or mapfile = '$bugmap')";
+include("pages/graph_mbreakdown.php");
+
+// Show a list of BT records
+if ((strtolower(substr($map, 0, 7)) == "ctf-bt-") or (strtolower(substr($map, 0, 3)) == "bt-")) {
+ $mcount = small_count("SELECT pi.id FROM uts_events AS e, uts_pinfo AS pi, uts_player AS p, uts_match AS m WHERE m.id = e.matchid AND m.id = p.matchid AND p.playerid = e.playerid AND pi.id = p.pid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap') GROUP BY pi.id");
+
+ $ecount = $mcount/25;
+ $ecount2 = number_format($ecount, 0, '.', '');
+
+ IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+ }
+
+ $fpage = 0;
+ IF($ecount < 1) { $lpage = 0; }
+ else { $lpage = $ecount2-1; }
+
+ $cpage = preg_replace('/\D/', '', $_GET["rpage"]);
+ $qpage = $cpage*25;
+
+ IF ($cpage == "") { $cpage = "0"; }
+
+ $tfpage = $cpage+1;
+ $tlpage = $lpage+1;
+
+ $ppage = $cpage-1;
+ $ppageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;rpage=$ppage\">[Previous]</a>";
+ IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+ $npage = $cpage+1;
+ $npageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;rpage=$npage\">[Next]</a>";
+ IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+ $fpageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;rpage=$fpage\">[First]</a>";
+ IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+ $lpageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;rpage=$lpage\">[Last]</a>";
+ IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+ $sql_btrecords = "SELECT pi.id, pi.name AS name, pi.country, e.col3 AS time, e.col4 AS date FROM uts_events AS e, uts_pinfo AS pi, uts_player AS p, uts_match AS m WHERE m.id = e.matchid AND m.id = p.matchid AND p.playerid = e.playerid AND pi.id = p.pid AND (m.mapfile = '$realmap' OR m.mapfile = '$bugmap') AND e.col1 = 'btcap' GROUP BY pi.id ORDER BY (0 + e.col3) ASC, e.col4 ASC LIMIT $qpage,25";
+ $q_btrecords = mysql_query($sql_btrecords) or die (mysql_error());
+ if (mysql_num_rows($q_btrecords) > 0) {
+ echo '
+ <div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="480">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="4" align="center">Fastest captures</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="40">N&deg;</td>
+ <td class="smheading" align="center" width="200">Name</td>
+ <td class="smheading" align="center" width="60">Time</td>
+ <td class="smheading" align="center" width="180">Date</td>
+ </tr>';
+ $i = $qpage;
+ $lasttime = -1;
+ while ($r_btrecords = mysql_fetch_array($q_btrecords)) {
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ echo '
+ <tr><td class = "'.$class.'" align = "right">'.($lasttime == $r_btrecords['time'] ? '' : $i).'&nbsp;</td>
+ <td class = "'.$class.'" align = "center"><a href="?p=pinfo&amp;pid='.$r_btrecords[id].'">', FormatPlayerName($r_btrecords['country'], $r_btrecords['id'], $r_btrecords['name']), '</a></td>
+ <td class = "'.$class.'" align = "center">', btcaptime($r_btrecords['time']), '</td>
+ <td class = "'.$class.'" align = "center">', gmdate('d-m-Y h:i a', $r_btrecords['date']), '</td></tr>';
+ $lasttime = $r_btrecords['time'];
+ }
+ echo '
+ </tbody>
+ </table>
+ <div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div><br>';
+ }
+}
+
+
+
+// Show a list of recent matches
+$mcount = small_count("SELECT id FROM uts_match WHERE mapfile = '$realmap' OR mapfile = '$bugmap' GROUP BY id");
+
+$ecount = $mcount/25;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = preg_replace('/\D/', '', $_GET["page"]);
+$qpage = $cpage*25;
+
+IF ($cpage == "") { $cpage = "0"; }
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;page=$ppage\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;page=$npage\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;page=$fpage\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=minfo&amp;map=".htmlentities($map)."&amp;page=$lpage\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+// list recent matches
+echo'
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="5" align="center">Recent Matches</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="250">Date</td>
+ <td class="smheading" align="center" width="100">Match Type</td>
+ <td class="smheading" align="center">Player Count</td>
+ <td class="smheading" align="center" width="100">Time</td>
+ </tr>';
+
+$sql_maps = "SELECT m.id, m.time, g.name AS gamename, m.gametime
+FROM uts_match AS m, uts_games AS g WHERE (m.mapfile = '$realmap' OR m.mapfile = '$bugmap') AND m.gid = g.id ORDER BY time DESC LIMIT $qpage,25";
+$q_maps = mysql_query($sql_maps) or die(mysql_error());
+while ($r_maps = mysql_fetch_array($q_maps)) {
+
+ $r_mapfile = un_ut($r_maps[mapfile]);
+ $r_matchtime = mdate($r_maps[time]);
+ $r_gametime = GetMinutes($r_maps[gametime]);
+
+ $map_pcount = small_count("SELECT id FROM uts_player WHERE matchid = $r_maps[id]");
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=match&amp;mid='.$r_maps[id].'">'.$r_matchtime.'</a></td>
+ <td class="grey" align="center">'.$r_maps[gamename].'</td>
+ <td class="grey" align="center">'.$map_pcount.'</td>
+ <td class="grey" align="center">'.$r_gametime.'</td>
+ </tr>';
+}
+
+echo'
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>';
+?>
diff --git a/html/pages/match.php b/html/pages/match.php
new file mode 100755
index 0000000..22a0399
--- /dev/null
+++ b/html/pages/match.php
@@ -0,0 +1,10 @@
+<?php
+$mid = preg_replace('/\D/', '', $_GET[mid]);
+$pid = preg_replace('/\D/', '', $_GET[pid]);
+
+IF ($pid != "") {
+ include("match_player.php");
+} else {
+ include("match_info.php");
+}
+?> \ No newline at end of file
diff --git a/html/pages/match_info.php b/html/pages/match_info.php
new file mode 100755
index 0000000..27b6669
--- /dev/null
+++ b/html/pages/match_info.php
@@ -0,0 +1,78 @@
+<?php
+$r_info = small_query("SELECT teamgame, t0, t1, t2, t3, t0score, t1score, t2score, t3score FROM uts_match WHERE id = '$mid'");
+if (!$r_info) die("Match not found");
+$teamgame = ($r_info['teamgame'] == 'True') ? true : false;
+
+echo '
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center">Unreal Tournament Match</td>
+ </tr>
+</tbody></table>
+<br>';
+include("pages/match_info_server.php");
+
+$GLOBALS['gid'] = $gid;
+$_GLOBALS['gid'] = $gid;
+$GLOBALS['gamename'] = $gamename;
+$_GLOBALS['gamename'] = $gamename;
+
+include('includes/teamstats.php');
+switch($real_gamename) {
+ case "Assault":
+ case "Assault (insta)":
+ include("pages/match_info_ass.php");
+ break;
+
+ case "Capture the Flag":
+ case "Capture the Flag (insta)":
+ include("pages/match_info_ctf.php");
+ teamstats($mid, 'Match Summary');
+ break;
+
+ case "Domination":
+ case "Domination (insta)":
+ teamstats($mid, 'Match Summary', 'dom_cp', 'Dom Pts');
+ break;
+
+ case "JailBreak":
+ case "JailBreak (insta)":
+ teamstats($mid, 'Match Summary', 'ass_obj', 'Team Releases');
+ break;
+
+ case "Bunny Track":
+ include("pages/match_info_bt.php");
+ break;
+
+ case "Extended Last Man Standing":
+ case "Extended Last Man Standing (insta)":
+ case "Last Man Standing":
+ case "Last Man Standing (insta)":
+ case "Last Man Standing +":
+ case "Last Man Standing + (insta)":
+ case "Last Man Standing++":
+ case "Last Man Standing++ (insta)":
+ include("pages/match_info_lms.php");
+ break;
+
+ default:
+ if ($teamgame) {
+ teamstats($mid, 'Match Summary');
+ } else {
+ teamstats($mid, 'Player Summary');
+ }
+}
+
+
+if ($real_gamename == "Assault" or $real_gamename== "Assault (insta)") {
+ include("pages/match_info_other2.php");
+}
+else if ($real_gamename != "Bunny Track") {
+ include("pages/match_info_other.php");
+}
+
+if ($real_gamename == "Capture the Flag" or $real_gamename== "Capture the Flag (insta)") {
+ include("pages/match_report.php");
+}
+
+?> \ No newline at end of file
diff --git a/html/pages/match_info_ass.php b/html/pages/match_info_ass.php
new file mode 100755
index 0000000..df968ec
--- /dev/null
+++ b/html/pages/match_info_ass.php
@@ -0,0 +1,64 @@
+<?php
+// Get information about this match
+$sql_assault = small_query("SELECT assaultid, ass_att, gametime, ass_win FROM uts_match WHERE id = $mid");
+$ass_id = $sql_assault[assaultid];
+$gametime = $sql_assault[gametime];
+
+// Get information about the other match
+$sql_assault2 = small_query("SELECT id, gametime, ass_win FROM uts_match WHERE assaultid = '$ass_id' AND id != $mid LIMIT 0,1");
+$mid2 = $sql_assault2[id];
+$gametime2 = $sql_assault2[gametime];
+
+// Work out who was attacking which match
+$ass_att = $sql_assault[ass_att];
+IF($ass_att == 0) {
+ $ass_att = "Red";
+ $ass_att2 = "Blue";
+} else {
+ $ass_att = "Blue";
+ $ass_att2 = "Red";
+}
+
+// Work out the end result for each match
+$asswin = $sql_assault[ass_win];
+$asswin2 = $sql_assault2[ass_win];
+IF($asswin == 0) {
+ $asswin = "$ass_att2 Successfully Defended";
+} else {
+ $asswin = "$ass_att Successfully Attacked";
+}
+
+IF($asswin2 == 0) {
+ $asswin2 = "$ass_att Successfully Defended";
+} else {
+ $asswin2 = "$ass_att2 Successfully Attacked";
+}
+
+$gametime = sec2min($gametime);
+$gametime2 = sec2min($gametime2);
+
+
+teamstats($mid, 'Match Summary - '.$ass_att.' Team Attacking', 'ass_obj', 'Ass Obj');
+
+echo'
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="hlheading" colspan="15" align="center">'.$asswin.'</td>
+ </tr>
+</tbody></table>
+<br>';
+
+// The Other Game (if it happened)
+
+IF($mid2 != NULL) {
+ teamstats($mid2, 'Match Summary - '.$ass_att2.' Team Attacking', 'ass_obj', 'Ass Obj');
+
+ echo'
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="hlheading" colspan="15" align="center">'.$asswin2.'</td>
+ </tr>
+ </tbody></table>
+ <br>';
+}
+?>
diff --git a/html/pages/match_info_bt.php b/html/pages/match_info_bt.php
new file mode 100755
index 0000000..ed14e3d
--- /dev/null
+++ b/html/pages/match_info_bt.php
@@ -0,0 +1,164 @@
+<?php
+/* get events first
+$sql_caprecords = "SELECT playerid, col3 FROM uts_events WHERE matchid = $mid AND col1 = 'btcap' ORDER BY col3 DESC";
+$q_caprecords = mysql_query($sql_caprecords);
+
+while ($r_caprecords = mysql_fetch_array($q_caprecords)) {
+ $caprecords[$r_caprecords['playerid']] = btcaptime($r_caprecords['col3']);
+} */
+
+echo'
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="12" align="center">Game Summary</td>
+ </tr>
+ <tr>
+ <td class="hlheading" colspan="12" align="center">Team: Red</td>
+ </tr>
+ <tr>
+ <td class="smheading" rowspan="2" align="center">Player</td>
+ <td class="smheading" rowspan="2" align="center" width="90">Time</td>
+ <td class="smheading" colspan="2" align="center" width="90">Score</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Captures</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Fastest Capture</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Suicides</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Player</td>
+ </tr>';
+
+$sql_msred = "SELECT p.playerid, pi.name, pi.banned, p.country, p.pid, p.gamescore, p.gametime, p.flag_capture, p.suicides, p.rank, MIN(e.col3) AS captime
+ FROM uts_pinfo AS pi, uts_player AS p
+ LEFT JOIN uts_events AS e
+ ON p.playerid = e.playerid AND p.matchid = e.matchid AND e.col1 = 'btcap'
+ WHERE p.pid = pi.id AND p.matchid = $mid AND team = 0
+ GROUP BY p.playerid
+ ORDER BY e.col1 DESC, (0 + e.col3) ASC, gamescore DESC";
+$q_msred = mysql_query($sql_msred) or die(mysql_error());
+$i = 0;
+while ($r_msred = zero_out(mysql_fetch_array($q_msred))) {
+ if (!$r_msred['playerid']) {
+ $r_msred['playerid'] = 0;
+ }
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $redpname = $r_msred[name];
+ $myurl = urlencode($r_msred[name]);
+
+
+
+ echo'<tr>';
+ if ($r_msred['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_msred['pid'].'">'.FormatPlayerName($r_msred[country], $r_msred['pid'], $redpname, $gid, $gamename, true, $r_msred['rank']).'</a></td>';
+ } else {
+ $r_msred ['gamescore'] = '-';
+ $r_msred ['suicides'] = '-';
+ $r_msred ['flag_capture'] = '-';
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_msred[country], $r_msred['pid'], $redpname, $gid, $gamename, true, $r_msred['rank']).'</span></td>';
+ }
+
+ echo '
+ <td class="'.$class.'" align="center">'.GetMinutes($r_msred[gametime]).'</td>
+ <td class="'.$class.'" align="center"></td>
+ <td class="'.$class.'" align="center">'.$r_msred[gamescore].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_capture].'</td>
+ <td class="'.$class.'" align="center">'.btcaptime($r_msred[captime]).'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[suicides].'</td>
+ </tr>';
+}
+
+$teamscore = small_query("SELECT t0score AS teamscore FROM uts_match WHERE id = $mid");
+$msredtot = small_query("SELECT SUM(gamescore) AS gamescore, SUM(suicides) AS suicides, SUM(flag_capture) AS flag_capture FROM uts_player WHERE matchid = $mid AND team = 0 ORDER BY gamescore DESC");
+
+
+echo'
+ <tr>
+ <td class="dark" align="center">Totals</td>
+ <td class="darkgrey" align="center"></td>
+ <td class="darkgrey" align="center">'.$teamscore[teamscore].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_capture].'</td>
+ <td class="darkgrey" align="center"></td>
+ <td class="darkgrey" align="center">'.$msredtot[suicides].'</td>
+ </tr>';
+
+echo'
+ <tr>
+ <td class="hlheading" colspan="12" align="center">Team: Blue</td>
+ </tr>
+ <tr>
+ <td class="smheading" rowspan="2" align="center">Player</td>
+ <td class="smheading" rowspan="2" align="center" width="90">Time</td>
+ <td class="smheading" colspan="2" align="center" width="90">Score</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Captures</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Fastest Capture</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Suicides</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Player</td>
+ </tr>';
+
+$sql_msblue = "SELECT p.playerid, pi.name, pi.banned, p.country, p.pid, p.gamescore, p.gametime, p.flag_capture, p.suicides, p.rank, MIN(e.col3) AS captime
+ FROM uts_pinfo AS pi, uts_player AS p
+ LEFT JOIN uts_events AS e
+ ON p.playerid = e.playerid AND p.matchid = e.matchid AND e.col1 = 'btcap'
+ WHERE p.pid = pi.id AND p.matchid = $mid AND team = 1
+ GROUP BY p.playerid
+ ORDER BY e.col1 DESC, (0 + e.col3) ASC, gamescore DESC";
+$q_msblue = mysql_query($sql_msblue) or die(mysql_error());
+$i = 0;
+while ($r_msblue = zero_out(mysql_fetch_array($q_msblue))) {
+ if (!$r_msblue['playerid']) {
+ $r_msblue['playerid'] = 0;
+ }
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $bluepname = $r_msblue[name];
+ $myurl = urlencode($r_msblue[name]);
+
+
+
+ echo'<tr>';
+ if ($r_msblue['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_msblue['pid'].'">'.FormatPlayerName($r_msblue[country], $r_msblue['pid'], $bluepname, $gid, $gamename, true, $r_msblue['rank']).'</a></td>';
+ } else {
+ $r_msblue ['gamescore'] = '-';
+ $r_msblue ['suicides'] = '-';
+ $r_msblue ['flag_capture'] = '-';
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_msblue[country], $r_msblue['pid'], $bluepname, $gid, $gamename, true, $r_msblue['rank']).'</span></td>';
+ }
+
+ echo '
+ <td class="'.$class.'" align="center">'.GetMinutes($r_msblue[gametime]).'</td>
+ <td class="'.$class.'" align="center"></td>
+ <td class="'.$class.'" align="center">'.$r_msblue[gamescore].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_capture].'</td>
+ <td class="'.$class.'" align="center">'.btcaptime($r_msblue[captime]).'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[suicides].'</td>
+ </tr>';
+}
+
+$teamscore = small_query("SELECT t1score AS teamscore FROM uts_match WHERE id = $mid");
+$msbluetot = small_query("SELECT SUM(gamescore) AS gamescore, SUM(suicides) AS suicides, SUM(flag_capture) AS flag_capture FROM uts_player WHERE matchid = $mid AND team = 1 ORDER BY gamescore DESC");
+
+
+echo'
+ <tr>
+ <td class="dark" align="center">Totals</td>
+ <td class="darkgrey" align="center"></td>
+ <td class="darkgrey" align="center">'.$teamscore[teamscore].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_capture].'</td>
+ <td class="darkgrey" align="center"></td>
+ <td class="darkgrey" align="center">'.$msbluetot[suicides].'</td>
+ </tr>';
+
+
+echo'</tbody></table>
+<br>';
+
+?>
diff --git a/html/pages/match_info_ctf.php b/html/pages/match_info_ctf.php
new file mode 100755
index 0000000..7426a4e
--- /dev/null
+++ b/html/pages/match_info_ctf.php
@@ -0,0 +1,362 @@
+<?php
+echo'
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="12" align="center">Flag Event Summary</td>
+ </tr>
+ <tr>
+ <td class="hlheading" colspan="12" align="center">Team: Red</td>
+ </tr>
+ <tr>
+ <td class="smheading" rowspan="2" align="center">Player</td>
+ <td class="smheading" colspan="2" align="center" width="90">Score</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Taken</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Pickup</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Drop</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Assist</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Cover</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Seal</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Capture</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Kill</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Return</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Player</td>
+ </tr>';
+
+$sql_msred = "SELECT p.playerid, pi.name, pi.banned, p.country, p.pid, p.gamescore, p.flag_taken, p.flag_pickedup, p.flag_dropped, p.flag_assist, p.flag_cover, p.flag_seal, p.flag_capture, p.flag_kill, p.flag_return, p.rank
+FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $mid AND team = 0 ORDER BY gamescore DESC";
+$q_msred = mysql_query($sql_msred) or die(mysql_error());
+$i = 0;
+while ($r_msred = zero_out(mysql_fetch_array($q_msred))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $redpname = $r_msred[name];
+ $myurl = urlencode($r_msred[name]);
+
+
+
+ echo'<tr>';
+ if ($r_msred['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_msred['pid'].'">'.FormatPlayerName($r_msred[country], $r_msred['pid'], $redpname, $gid, $gamename, true, $r_msred['rank']).'</a></td>';
+ } else {
+ $r_msred ['gamescore'] = '-';
+ $r_msred ['flag_taken'] = '-';
+ $r_msred ['flag_pickedup'] = '-';
+ $r_msred ['flag_dropped'] = '-';
+ $r_msred ['flag_assist'] = '-';
+ $r_msred ['flag_cover'] = '-';
+ $r_msred ['flag_seal'] = '-';
+ $r_msred ['flag_capture'] = '-';
+ $r_msred ['flag_kill'] = '-';
+ $r_msred ['flag_return'] = '-';
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_msred[country], $r_msred['pid'], $redpname, $gid, $gamename, true, $r_msred['rank']).'</span></td>';
+ }
+
+ echo '
+ <td class="'.$class.'" align="center"></td>
+ <td class="'.$class.'" align="center">'.$r_msred[gamescore].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_taken].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_pickedup].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_dropped].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_assist].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_cover].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_seal].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_capture].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_kill].'</td>
+ <td class="'.$class.'" align="center">'.$r_msred[flag_return].'</td>
+ </tr>';
+}
+
+$teamscore = small_query("SELECT t0score AS teamscore FROM uts_match WHERE id = $mid");
+$msredtot = small_query("SELECT SUM(gamescore) AS gamescore, SUM(flag_taken) AS flag_taken, SUM(flag_pickedup) AS flag_pickedup, SUM(flag_dropped) AS flag_dropped, SUM(flag_assist) AS flag_assist, SUM(flag_cover) AS flag_cover, SUM(flag_seal) AS flag_seal, SUM(flag_capture) AS flag_capture, SUM(flag_kill)as flag_kill, SUM(flag_return) AS flag_return
+FROM uts_player WHERE matchid = $mid AND team = 0 ORDER BY gamescore DESC");
+
+
+echo'
+ <tr>
+ <td class="dark" align="center">Totals</td>
+ <td class="darkgrey" align="center">'.$teamscore[teamscore].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_taken].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_pickedup].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_dropped].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_assist].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_cover].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_seal].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_capture].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_kill].'</td>
+ <td class="darkgrey" align="center">'.$msredtot[flag_return].'</td>
+ </tr>
+
+
+ <tr>
+ <td class="hlheading" colspan="12" align="center">Team: Blue</td>
+ </tr>
+ <tr>
+ <td class="smheading" rowspan="2" align="center">Player</td>
+ <td class="smheading" colspan="2" align="center" width="90">Score</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Taken</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Pickup</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Drop</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Assist</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Cover</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Seal</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Capture</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Kill</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Return</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Player</td>
+ </tr>';
+
+$sql_msblue = "SELECT p.playerid, pi.name, pi.banned, p.country, p.pid, p.gamescore, p.flag_taken, p.flag_pickedup, p.flag_dropped, p.flag_assist, p.flag_cover, p.flag_seal, p.flag_capture, p.flag_kill, p.flag_return, p.rank
+FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $mid AND team = 1 ORDER BY gamescore DESC";
+$q_msblue = mysql_query($sql_msblue) or die(mysql_error());
+$i = 0;
+while ($r_msblue = zero_out(mysql_fetch_array($q_msblue))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $bluepname = $r_msblue[name];
+ $myurl = urlencode($r_msblue[name]);
+
+ echo'<tr>';
+ if ($r_msblue['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_msblue['pid'].'">'.FormatPlayerName($r_msblue[country], $r_msblue['pid'], $bluepname, $gid, $gamename, true, $r_msblue['rank']).'</a></td>';
+ } else {
+ $r_msblue ['gamescore'] = '-';
+ $r_msblue ['flag_taken'] = '-';
+ $r_msblue ['flag_pickedup'] = '-';
+ $r_msblue ['flag_dropped'] = '-';
+ $r_msblue ['flag_assist'] = '-';
+ $r_msblue ['flag_cover'] = '-';
+ $r_msblue ['flag_seal'] = '-';
+ $r_msblue ['flag_capture'] = '-';
+ $r_msblue ['flag_kill'] = '-';
+ $r_msblue ['flag_return'] = '-';
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_msblue[country], $r_msblue['pid'], $bluepname, $gid, $gamename, true, $r_msblue['rank']).'</span></td>';
+ }
+
+ echo '
+ <td class="'.$class.'" align="center"></td>
+ <td class="'.$class.'" align="center">'.$r_msblue[gamescore].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_taken].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_pickedup].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_dropped].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_assist].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_cover].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_seal].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_capture].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_kill].'</td>
+ <td class="'.$class.'" align="center">'.$r_msblue[flag_return].'</td>
+ </tr>';
+}
+
+$teamscore = small_query("SELECT t1score AS teamscore FROM uts_match WHERE id = $mid");
+$msbluetot = small_query("SELECT SUM(gamescore) AS gamescore, SUM(flag_taken) AS flag_taken, SUM(flag_pickedup) AS flag_pickedup, SUM(flag_dropped) AS flag_dropped, SUM(flag_assist) AS flag_assist, SUM(flag_cover) AS flag_cover, SUM(flag_seal) AS flag_seal, SUM(flag_capture) AS flag_capture, SUM(flag_kill)as flag_kill, SUM(flag_return) AS flag_return
+FROM uts_player WHERE matchid = $mid AND team = 1 ORDER BY gamescore DESC");
+
+echo'
+ <tr>
+ <td class="dark" align="center">Totals</td>
+ <td class="darkgrey" align="center">'.$teamscore[teamscore].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_taken].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_pickedup].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_dropped].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_assist].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_cover].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_seal].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_capture].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_kill].'</td>
+ <td class="darkgrey" align="center">'.$msbluetot[flag_return].'</td>
+ </tr>';
+
+// Check If Green Team Were Used (CTF4 Compatibility)
+
+$greencheck = small_count("SELECT * FROM uts_player WHERE matchid = $mid AND team = 2");
+IF ($greencheck > 0) {
+
+ echo'<tr>
+ <td class="hlheading" colspan="12" align="center">Team: Green</td>
+ </tr>
+ <tr>
+ <td class="smheading" rowspan="2" align="center">Player</td>
+ <td class="smheading" colspan="2" align="center" width="90">Score</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Taken</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Pickup</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Drop</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Assist</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Cover</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Seal</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Capture</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Kill</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Return</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Player</td>
+ </tr>';
+
+ $sql_msgreen = "SELECT p.playerid, pi.name, pi.banned, p.country, p.pid, p.gamescore, p.flag_taken, p.flag_pickedup, p.flag_dropped, p.flag_assist, p.flag_cover, p.flag_seal, p.flag_capture, p.flag_kill, p.flag_return, p.rank
+ FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $mid AND team = 2 ORDER BY gamescore DESC";
+ $q_msgreen = mysql_query($sql_msgreen) or die(mysql_error());
+ $i = 0;
+ while ($r_msgreen = zero_out(mysql_fetch_array($q_msgreen))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $greenpname = $r_msgreen[name];
+ $myurl = urlencode($r_msgreen[name]);
+
+ echo'<tr>';
+ if ($r_msgreen['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_msgreen['pid'].'">'.FormatPlayerName($r_msgreen[country], $r_msgreen['pid'], $greenpname, $gid, $gamename, true, $r_msgreen['rank']).'</a></td>';
+ } else {
+ $r_msgreen ['gamescore'] = '-';
+ $r_msgreen ['flag_taken'] = '-';
+ $r_msgreen ['flag_pickedup'] = '-';
+ $r_msgreen ['flag_dropped'] = '-';
+ $r_msgreen ['flag_assist'] = '-';
+ $r_msgreen ['flag_cover'] = '-';
+ $r_msgreen ['flag_seal'] = '-';
+ $r_msgreen ['flag_capture'] = '-';
+ $r_msgreen ['flag_kill'] = '-';
+ $r_msgreen ['flag_return'] = '-';
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_msgreen[country], $r_msgreen['pid'], $greenpname, $gid, $gamename, true, $r_msgreen['rank']).'</span></td>';
+ }
+
+ echo '
+ <td class="'.$class.'" align="center"></td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[gamescore].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_taken].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_pickedup].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_dropped].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_assist].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_cover].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_seal].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_capture].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_kill].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgreen[flag_return].'</td>
+ </tr>';
+ }
+
+ $teamscore = small_query("SELECT t1score AS teamscore FROM uts_match WHERE id = $mid");
+ $msgreentot = small_query("SELECT SUM(gamescore) AS gamescore, SUM(flag_taken) AS flag_taken, SUM(flag_pickedup) AS flag_pickedup, SUM(flag_dropped) AS flag_dropped, SUM(flag_assist) AS flag_assist, SUM(flag_cover) AS flag_cover, SUM(flag_seal) AS flag_seal, SUM(flag_capture) AS flag_capture, SUM(flag_kill)as flag_kill, SUM(flag_return) AS flag_return
+ FROM uts_player WHERE matchid = $mid AND team = 2 ORDER BY gamescore DESC");
+
+ echo'
+ <tr>
+ <td class="dark" align="center">Totals</td>
+ <td class="darkgrey" align="center">'.$teamscore[teamscore].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_taken].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_pickedup].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_dropped].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_assist].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_cover].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_seal].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_capture].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_kill].'</td>
+ <td class="darkgrey" align="center">'.$msgreentot[flag_return].'</td>
+ </tr>';
+}
+
+// Check If Gold Team Were Used (CTF4 Compatibility)
+
+$goldcheck = small_count("SELECT * FROM uts_player WHERE matchid = $mid AND team = 3");
+IF ($goldcheck > 0) {
+
+ echo'<tr>
+ <td class="hlheading" colspan="12" align="center">Team: Gold</td>
+ </tr>
+ <tr>
+ <td class="smheading" rowspan="2" align="center">Player</td>
+ <td class="smheading" colspan="2" align="center" width="90">Score</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Taken</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Pickup</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Drop</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Assist</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Cover</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Seal</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Capture</td>
+ <td class="smheading" rowspan="2" align="center" width="60">Flag Kill</td>
+ <td class="smheading" rowspan="2" align="center" width="50">Flag Return</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Player</td>
+ </tr>';
+
+ $sql_msgold = "SELECT p.playerid, pi.name, pi.banned, p.country, p.pid, p.gamescore, p.flag_taken, p.flag_pickedup, p.flag_dropped, p.flag_assist, p.flag_cover, p.flag_seal, p.flag_capture, p.flag_kill, p.flag_return, p.rank
+ FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $mid AND team = 3 ORDER BY gamescore DESC";
+ $q_msgold = mysql_query($sql_msgold) or die(mysql_error());
+ $i = 0;
+ while ($r_msgold = zero_out(mysql_fetch_array($q_msgold))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $goldpname = $r_msgold[name];
+ $myurl = urlencode($r_msgold[name]);
+
+ echo'<tr>';
+ if ($r_msgold['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_msgold['pid'].'">'.FormatPlayerName($r_msgold[country], $r_msgold['pid'], $goldpname, $gid, $gamename, true, $r_msgold['rank']).'</a></td>';
+ } else {
+ $r_msgold ['gamescore'] = '-';
+ $r_msgold ['flag_taken'] = '-';
+ $r_msgold ['flag_pickedup'] = '-';
+ $r_msgold ['flag_dropped'] = '-';
+ $r_msgold ['flag_assist'] = '-';
+ $r_msgold ['flag_cover'] = '-';
+ $r_msgold ['flag_seal'] = '-';
+ $r_msgold ['flag_capture'] = '-';
+ $r_msgold ['flag_kill'] = '-';
+ $r_msgold ['flag_return'] = '-';
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_msgold[country], $r_msgold['pid'], $goldpname, $gid, $gamename, true, $r_msgold['rank']).'</span></td>';
+ }
+
+ echo '
+ <td class="'.$class.'" align="center"></td>
+ <td class="'.$class.'" align="center">'.$r_msgold[gamescore].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_taken].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_pickedup].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_dropped].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_assist].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_cover].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_seal].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_capture].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_kill].'</td>
+ <td class="'.$class.'" align="center">'.$r_msgold[flag_return].'</td>
+ </tr>';
+ }
+
+ $teamscore = small_query("SELECT t1score AS teamscore FROM uts_match WHERE id = $mid");
+ $msgoldtot = small_query("SELECT SUM(gamescore) AS gamescore, SUM(flag_taken) AS flag_taken, SUM(flag_pickedup) AS flag_pickedup, SUM(flag_dropped) AS flag_dropped, SUM(flag_assist) AS flag_assist, SUM(flag_cover) AS flag_cover, SUM(flag_seal) AS flag_seal, SUM(flag_capture) AS flag_capture, SUM(flag_kill)as flag_kill, SUM(flag_return) AS flag_return
+ FROM uts_player WHERE matchid = $mid AND team = 3 ORDER BY gamescore DESC");
+
+ echo'
+ <tr>
+ <td class="dark" align="center">Totals</td>
+ <td class="darkgrey" align="center">'.$teamscore[teamscore].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_taken].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_pickedup].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_dropped].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_assist].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_cover].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_seal].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_capture].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_kill].'</td>
+ <td class="darkgrey" align="center">'.$msgoldtot[flag_return].'</td>
+ </tr>';
+}
+
+echo'</tbody></table>
+<br>';
+
+?>
diff --git a/html/pages/match_info_killsmatrix.php b/html/pages/match_info_killsmatrix.php
new file mode 100755
index 0000000..be16905
--- /dev/null
+++ b/html/pages/match_info_killsmatrix.php
@@ -0,0 +1,131 @@
+<?php
+function PrintVertical($text) {
+ $len = strlen($text);
+ $ret = '';
+ for ($i = 0; $i < $len; $i++) {
+ $ret .= substr($text, $i, 1) .'<br>';
+ }
+ return($ret);
+}
+
+// Retrieve the killmatrix
+$sql_km = " SELECT killer,
+ victim,
+ kills
+ FROM uts_killsmatrix
+ WHERE matchid = $mid;";
+
+$q_km = mysql_query($sql_km) or die(mysql_error());
+while ($r_km = mysql_fetch_array($q_km)) {
+ $km[intval($r_km['killer'])][intval($r_km['victim'])] = $r_km['kills'];
+}
+
+// No matrix: bye
+if (!isset($km)) return;
+
+// Are we processing a teamgame?
+$qm_teamgame = small_query("SELECT teamgame FROM uts_match WHERE id = '$mid';");
+$teamgame = $qm_teamgame['teamgame'];
+$teamgame = ($teamgame == 'False') ? false : true;
+
+// Get the players of this match
+$sql_players = " SELECT p.pid,
+ p.playerid,
+ pi.name,
+ pi.country,
+ pi.banned,
+ p.team,
+ p.suicides
+ FROM uts_player p,
+ uts_pinfo pi
+ WHERE (p.pid = pi.id)
+ AND matchid = '$mid'
+ ORDER BY team ASC,
+ gamescore DESC;";
+$q_players = mysql_query($sql_players) or die(mysql_error());
+while ($r_players = mysql_fetch_array($q_players)) {
+ $players[intval($r_players['playerid'])] = array( 'pid' => $r_players['pid'],
+ 'name' => $r_players['name'],
+ 'country' => $r_players['country'],
+ 'banned' => $r_players['banned'],
+ 'suicides' => intval($r_players['suicides']),
+ 'team' => intval($r_players['team']));
+}
+
+
+// Table header
+$extra = $teamgame ? 3 : 2;
+echo '<table class = "box" border="0" cellpadding="1" cellspacing="2">
+ <tbody><tr>
+ <td class="heading" colspan="'. (count($players) + $extra) .'" align="center">Kills Match Up</td>
+ </tr>
+ <tr>
+ <td class="dark" colspan="'.$extra.'" rowspan="'.$extra.'" align="center">&nbsp;</td>
+ <td class="dark" colspan="'. count($players).'" align="center"><strong>Victim</strong></td>
+ </tr>
+ <tr>';
+
+// Victims
+foreach($players as $player) {
+
+
+ echo '<td class="darkhuman" align="center" onmouseover="overlib(\''.
+ str_replace('"', '\\\'', QuoteHintText(FormatPlayerName($player['country'], $player['pid'], $player['name'], $gid, $gamename))) .'\');" onmouseout="nd();">
+ <a class="darkhuman" href="?p=matchp&amp;mid='. $mid .'&amp;pid='. urlencode($player['pid']). '">'.
+ PrintVertical($player['name']) .
+ '</a></td>';
+}
+echo '</tr><tr>';
+
+// Team colors victims
+if ($teamgame) {
+ foreach($players as $player) {
+ switch($player['team']) {
+ case 0: $teamcolor = 'redteam'; break;
+ case 1: $teamcolor = 'blueteam'; break;
+ case 2: $teamcolor = 'greenteam'; break;
+ case 3: $teamcolor = 'goldteam'; break;
+ }
+ echo '<td class="'. $teamcolor .'" align="center" width="20">
+ &nbsp;</td>';
+ }
+ echo '</tr>';
+}
+
+// Killer rows
+$first = true;
+$i = 0;
+foreach($players as $kid => $killer) {
+ if ($killer['banned'] == 'Y') continue;
+ $i++;
+ echo '<tr>';
+ if ($first) echo'<td class="dark" rowspan="'. count($players) .'" align="center" width="20"><strong>K<br>i<br>l<br>l<br>e<br>r</strong></td>';
+ echo '<td nowrap class="darkhuman" align="left" style="width: 150px;">';
+ echo '<a class="darkhuman" href="?p=matchp&amp;mid='. $mid .'&amp;pid='. urlencode($killer['pid']). '">'.
+ FormatPlayerName($killer['country'], $killer['pid'], $killer['name'], $gid, $gamename) .'&nbsp;</a></td>';
+ if ($teamgame) {
+ switch($killer['team']) {
+ case 0: $teamcolor = 'redteam'; break;
+ case 1: $teamcolor = 'blueteam'; break;
+ case 2: $teamcolor = 'greenteam'; break;
+ case 3: $teamcolor = 'goldteam'; break;
+ }
+ echo '<td class="'. $teamcolor .'" align="center" width="20">&nbsp;</td>';
+ }
+ foreach($players as $vid => $victim) {
+ $class = ($kid == $vid) ? 'darkgrey' : 'grey';
+ //if ($i % 2) $class .= '2';
+ echo '<td class="'. $class .'" align="center" width="20">';
+ if ($kid == $vid) {
+ $val = ($killer['suicides'] != 0) ? $killer['suicides'] : '&nbsp;';
+ } else {
+ $val = (isset($km[$kid][$vid])) ? $km[$kid][$vid] : '&nbsp';
+ }
+ echo $val .'</td>';
+ }
+
+ $first = false;
+}
+
+echo '</tbody></table><br>';
+?> \ No newline at end of file
diff --git a/html/pages/match_info_lms.php b/html/pages/match_info_lms.php
new file mode 100755
index 0000000..1c6aa05
--- /dev/null
+++ b/html/pages/match_info_lms.php
@@ -0,0 +1,144 @@
+<?php
+
+ global $gamename, $gid;
+ $r_info = small_query("SELECT teamgame, t0score, t1score, t2score, t3score FROM uts_match WHERE id = '$mid'");
+ if (!$r_info) die("Match not found");
+ $teams = ($r_info['teamgame'] == 'True') ? true : false;
+ $teamscore[-1] = 0;
+ $teamscore[0] = $r_info['t0score'];
+ $teamscore[1] = $r_info['t1score'];
+ $teamscore[2] = $r_info['t2score'];
+ $teamscore[3] = $r_info['t3score'];
+
+
+ $cols = 11;
+ $oldteam = -1;
+
+
+ echo'
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="600">
+ <tbody><tr>
+ <td class="heading" colspan="'.$cols.'" align="center">Player Summary</td>
+ </tr>';
+
+
+ $sql_players = "SELECT pi.name, pi.banned, p.playerid, p.pid, p.team, p.country, p.gametime, p.gamescore, p.frags, p.deaths, p.suicides, p.teamkills, p.eff, p.accuracy, p.ttl, p.rank, MAX(e.col2)
+ FROM uts_pinfo AS pi, uts_player AS p
+ LEFT JOIN uts_events AS e
+ ON p.playerid = e.playerid AND p.matchid = e.matchid AND e.col1 = 'out' AND p.gamescore = 0
+ WHERE p.pid = pi.id AND p.matchid = $mid
+ GROUP BY p.playerid
+ ORDER BY p.gamescore DESC, (0+e.col2) DESC";
+
+ $q_players = mysql_query($sql_players) or die(mysql_error());
+ $header = true;
+
+ $totals['gamescore'] = 0;
+ if ($extra) $totals[$extra] = 0;
+ $totals['frags'] = 0;
+ $totals['kills'] = 0;
+ $totals['deaths'] = 0;
+ $totals['suicides'] = 0;
+ $totals['teamkills'] = 0;
+ $totals['eff'] = 0;
+ $totals['acc'] = 0;
+ $totals['ttl'] = 0;
+ $num = 0;
+
+ while ($r_players = zero_out(mysql_fetch_array($q_players))) {
+ if ($header) {
+ $header = false;
+ echo '
+ <tr>
+ <td class="smheading" align="center">Player</td>
+ <td class="smheading" align="center" width="50">Time</td>
+ <td class="smheading" align="center" width="50">Score</td>
+ <td class="smheading" align="center" width="50">Out</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('F').'>F</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('K').'>K</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('D').'>D</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('S').'>S</td>';
+ if ($teams) echo '<td class="smheading" align="center" width="40" '.OverlibPrintHint('TK').'>TK</td>';
+ echo '
+ <td class="smheading" align="center" width="55" '.OverlibPrintHint('EFF').'>Eff.</td>
+ <td class="smheading" align="center" width="55" '.OverlibPrintHint('ACC').'>Acc.</td>
+ <td class="smheading" align="center" width="50" '.OverlibPrintHint('TTL').'>Avg TTL</td>
+ </tr>';
+ }
+
+ $eff = get_dp($r_players['eff']);
+ $acc = get_dp($r_players['accuracy']);
+ $ttl = GetMinutes($r_players['ttl']);
+ $kills = $r_players['frags'] + $r_players['suicides'];
+ $pname = $r_players['name'];
+
+ $totals['gamescore'] += $r_players['gamescore'];
+ if ($extra) $totals[$extra] += $r_players[$extra];
+ $totals['frags'] += $r_players['frags'];
+ $totals['kills'] += $kills;
+ $totals['deaths'] += $r_players['deaths'];
+ $totals['suicides'] += $r_players['suicides'];
+ $totals['teamkills'] += $r_players['teamkills'];
+ $totals['eff'] += $r_players['eff'];
+ $totals['acc'] += $r_players['accuracy'];
+ $totals['ttl'] += $r_players['ttl'];
+ $num++;
+
+ if ($r_players['banned'] == 'Y') {
+ $eff = '-';
+ $acc = '-';
+ $ttl = '-';
+ $kills = '-';
+ $r_players['gamescore'] = '-';
+ $r_players[$extra] = '-';
+ $r_players['frags'] = '-';
+ $r_players['deaths'] = '-';
+ $r_players['suicides'] = '-';
+ $r_players['teamkills'] = '-';
+ }
+
+
+ $class = ($num % 2) ? 'grey' : 'grey2';
+ echo '<tr>';
+ if ($r_players['banned'] != 'Y') {
+ echo '<td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_players['pid'].'">'.FormatPlayerName($r_players['country'], $r_players['pid'], $r_players['name'], $gid, $gamename, true, $r_players['rank']).'</a></td>';
+ } else {
+ echo '<td nowrap class="darkhuman" align="left"><span style="text-decoration: line-through;">'.FormatPlayerName($r_players['country'], $r_players['pid'], $r_players['name'], $gid, $gamename, true, $r_players['rank']).'</span></td>';
+ }
+ echo '<td class="'.$class.'" align="center">'.GetMinutes($r_players[gametime]).'</td>';
+ echo '<td class="'.$class.'" align="center">'.$r_players[gamescore].'</td>';
+ echo '<td class="'.$class.'" align="center">'.(empty($r_players['MAX(e.col2)']) ? '' : GetMinutes($r_players['MAX(e.col2)'])).'</td>';
+
+ echo '<td class="'.$class.'" align="center">'.$r_players[frags].'</td>';
+ echo '<td class="'.$class.'" align="center">'.$kills.'</td>';
+ echo '<td class="'.$class.'" align="center">'.$r_players[deaths].'</td>';
+ echo '<td class="'.$class.'" align="center">'.$r_players[suicides].'</td>';
+
+ echo '<td class="'.$class.'" align="center">'.$eff.'</td>';
+ echo '<td class="'.$class.'" align="center">'.$acc.'</td>';
+ echo '<td class="'.$class.'" align="center">'.$ttl.'</td>';
+ echo '</tr>';
+ }
+ if ($num == 0) $num = 1;
+ $eff = get_dp($totals['eff'] / $num);
+ $acc = get_dp($totals['acc'] / $num);
+ $ttl = GetMinutes($totals['ttl'] / $num);
+
+
+ echo '<tr>';
+ echo '<td nowrap class="dark" align="center">Totals</td>';
+ echo '<td class="darkgrey" align="center"></td>';
+ echo '<td class="darkgrey" align="center">'.$totals[gamescore].'</td>';
+ echo '<td class="darkgrey" align="center"></td>';
+ echo '<td class="darkgrey" align="center">'.$totals[frags].'</td>';
+ echo '<td class="darkgrey" align="center">'.$totals[kills].'</td>';
+ echo '<td class="darkgrey" align="center">'.$totals[deaths].'</td>';
+ echo '<td class="darkgrey" align="center">'.$totals[suicides].'</td>';
+
+ if ($teams) echo '<td class="darkgrey" align="center">'.$totals[teamkills].'</td>';
+
+ echo '<td class="darkgrey" align="center">'.$eff.'</td>';
+ echo '<td class="darkgrey" align="center">'.$acc.'</td>';
+ echo '<td class="darkgrey" align="center">'.$ttl.'</td>';
+ echo '</tr>';
+ echo '</tbody></table><br>';
diff --git a/html/pages/match_info_other.php b/html/pages/match_info_other.php
new file mode 100755
index 0000000..d0a3527
--- /dev/null
+++ b/html/pages/match_info_other.php
@@ -0,0 +1,115 @@
+<?php
+include('pages/match_info_killsmatrix.php');
+
+include('includes/weaponstats.php');
+weaponstats($mid, NULL);
+
+echo'<br>
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="600">
+ <tbody><tr>
+ <td class="heading" colspan="11" align="center">Special Events</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" rowspan="2" width="">Player</td>
+ <td class="smheading" align="center" rowspan="2" width="60">First Blood</td>
+ <td class="smheading" align="center" colspan="4" width="160" '.OverlibPrintHint('Multis').'>Multis</td>
+ <td class="smheading" align="center" colspan="5" width="200" '.OverlibPrintHint('Sprees').'>Sprees</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('DK').'>Dbl</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('MK').'>Multi</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('UK').'>Ultra</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('MOK').'>Mons</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('KS').'>Kill</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('RA').'>Ram</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('DO').'>Dom</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('US').'>Uns</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('GL').'>God</td>
+ </tr>';
+$sql_firstblood = small_query("SELECT firstblood FROM uts_match WHERE id = $mid");
+$sql_multis = "SELECT p.pid, pi.name, p.country, SUM(spree_double) AS spree_double, SUM(spree_multi) AS spree_multi,
+SUM(spree_ultra) AS spree_ultra, SUM(spree_monster) AS spree_monster,
+SUM(spree_kill) AS spree_kill, SUM(spree_rampage) AS spree_rampage, SUM(spree_dom) AS spree_dom,
+SUM(spree_uns) AS spree_uns, SUM(spree_god) AS spree_god
+FROM uts_player as p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND matchid = $mid GROUP BY pid ORDER BY name ASC";
+$q_multis = mysql_query($sql_multis) or die(mysql_error());
+$i = 0;
+while ($r_multis = zero_out(mysql_fetch_array($q_multis))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+ $r_pname = $r_multis[name];
+ $myurl = urlencode($r_pname);
+
+ echo'
+ <tr>
+ <td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_multis['pid'].'">'.FormatPlayerName($r_multis[country], $r_multis[pid], $r_pname, $gid, $gamename).'</a></td>
+ <td class="'.$class.'" align="center">', ($sql_firstblood['firstblood'] == $r_multis['pid'] ? "Yes": ""), '</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_double].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_multi].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_ultra].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_monster].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_kill].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_rampage].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_dom].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_uns].'</td>
+ <td class="'.$class.'" align="center">'.$r_multis[spree_god].'</td>
+ </tr>';
+}
+
+// No items in insta matches or lms
+if ((strpos($gamename, '(insta)') === false) && (strpos($gamename, "Last Man Standing") === false)) {
+ echo'</tbody></table><br>
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="600">
+ <tbody><tr>
+ <td class="heading" colspan="7" align="center">Pickups Summary</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Player</td>
+ <td class="smheading" align="center" width="71">Pads</td>
+ <td class="smheading" align="center" width="71">Armour</td>
+ <td class="smheading" align="center" width="71">Keg</td>
+ <td class="smheading" align="center" width="71">Invisibility</td>
+ <td class="smheading" align="center" width="71">Shield<br>Belt</td>
+ <td class="smheading" align="center" width="71">Damage Amp</td>
+ </tr>';
+
+ $sql_pickups = "SELECT p.pid, pi.name, p.country, SUM(p.pu_pads) AS pu_pads, SUM(p.pu_armour) AS pu_armour, SUM(p.pu_keg) AS pu_keg,
+ SUM(p.pu_invis) AS pu_invis, SUM(p.pu_belt) AS pu_belt, SUM(p.pu_amp) AS pu_amp
+ FROM uts_player as p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND matchid = $mid GROUP BY pid ORDER BY name ASC";
+ $q_pickups = mysql_query($sql_pickups) or die(mysql_error());
+ $i = 0;
+ while ($r_pickups = zero_out(mysql_fetch_array($q_pickups))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+ $r_pname = $r_pickups[name];
+ $myurl = urlencode($r_pname);
+
+ echo'
+ <tr>
+ <td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_pickups['pid'].'">'.FormatPlayerName($r_pickups[country], $r_pickups[pid], $r_pname, $gid, $gamename).'</a></td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_pads].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_armour].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_keg].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_invis].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_belt].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_amp].'</td>
+ </tr>';
+ }
+}
+echo'</tbody></table>';
+
+/* $sql_firstblood = small_query("SELECT pi.name, pi.country, m.firstblood FROM uts_match AS m, uts_pinfo AS pi WHERE m.firstblood = pi.id AND m.id = $mid");
+if (!$sql_firstblood) $sql_firstblood = array('country' => '', 'name' => '(unknown)', 'firstblood' => NULL);
+
+echo'
+<br>
+<table border="0" cellpadding="1" cellspacing="2" width="200">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="2" align="center">First Blood</td>
+ </tr>
+ <tr>
+ <td class="grey2" align="center" width="150">'.FormatPlayerName($sql_firstblood[country], $sql_firstblood[firstblood], $sql_firstblood[name], $gid, $gamename).'</td>
+ </tr>
+</tbody></table>'; */
+?>
diff --git a/html/pages/match_info_other2.php b/html/pages/match_info_other2.php
new file mode 100755
index 0000000..1f72fdd
--- /dev/null
+++ b/html/pages/match_info_other2.php
@@ -0,0 +1,143 @@
+<?php
+//include('pages/match_info_killsmatrix.php');
+
+include('includes/weaponstats.php');
+weaponstats($mid, 0, 'Weapons Summary - '.$ass_att.' Attacking');
+
+IF($mid2 != NULL) {
+ echo '<br>';
+ weaponstats($mid2, 0, 'Weapons Summary - '.$ass_att2.' Attacking');
+}
+
+echo'
+<br>
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="7" align="center">Pickups Summary - '.$ass_att.' Attacking</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Player</td>
+ <td class="smheading" align="center" width="80">Pads</td>
+ <td class="smheading" align="center" width="80">Armour</td>
+ <td class="smheading" align="center" width="80">Keg</td>
+ <td class="smheading" align="center" width="80">Invisibility</td>
+ <td class="smheading" align="center" width="80">Shield Belt</td>
+ <td class="smheading" align="center" width="80">Damage Amp</td>
+ </tr>';
+
+$sql_pickups = "SELECT p.pid, pi.name, p.country, SUM(p.pu_pads) AS pu_pads, SUM(p.pu_armour) AS pu_armour, SUM(p.pu_keg) AS pu_keg,
+SUM(p.pu_invis) AS pu_invis, SUM(p.pu_belt) AS pu_belt, SUM(p.pu_amp) AS pu_amp
+FROM uts_player as p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND matchid = $mid GROUP BY pid ORDER BY name ASC";
+$q_pickups = mysql_query($sql_pickups) or die(mysql_error());
+$i = 0;
+while ($r_pickups = zero_out(mysql_fetch_array($q_pickups))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $r_pname = $r_pickups[name];
+ $myurl = urlencode($r_pname);
+
+ echo'
+ <tr>
+ <td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_pickups[pid].'">'.FormatPlayerName($r_pickups[country], $r_pickups[pid], $r_pname, $gid, $gamename).'</a></td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_pads].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_armour].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_keg].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_invis].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_belt].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_amp].'</td>
+ </tr>';
+}
+
+IF($mid2 == NULL) {
+} else {
+ echo'</tbody></table>
+ <br>
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="7" align="center">Pickups Summary - '.$ass_att2.' Attacking</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Player</td>
+ <td class="smheading" align="center" width="80">Pads</td>
+ <td class="smheading" align="center" width="80">Armour</td>
+ <td class="smheading" align="center" width="80">Keg</td>
+ <td class="smheading" align="center" width="80">Invisibility</td>
+ <td class="smheading" align="center" width="80">Shield Belt</td>
+ <td class="smheading" align="center" width="80">Damage Amp</td>
+ </tr>';
+
+ $sql_pickups = "SELECT p.pid, pi.name, p.country, SUM(p.pu_pads) AS pu_pads, SUM(p.pu_armour) AS pu_armour, SUM(p.pu_keg) AS pu_keg,
+ SUM(p.pu_invis) AS pu_invis, SUM(p.pu_belt) AS pu_belt, SUM(p.pu_amp) AS pu_amp
+ FROM uts_player as p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND matchid = $mid2 GROUP BY pid ORDER BY name ASC";
+ $q_pickups = mysql_query($sql_pickups) or die(mysql_error());
+ $i = 0;
+ while ($r_pickups = zero_out(mysql_fetch_array($q_pickups))) {
+ $i++;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+
+ $r_pname = $r_pickups[name];
+ $myurl = urlencode($r_pname);
+
+ echo'
+ <tr>
+ <td nowrap class="darkhuman" align="left"><a class="darkhuman" href="./?p=matchp&amp;mid='.$mid.'&amp;pid='.$r_pickups[pid].'">'.FormatPlayerName($r_pickups[country], $r_pickups[pid], $r_pname, $gid, $gamename).'</a></td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_pads].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_armour].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_keg].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_invis].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_belt].'</td>
+ <td class="'.$class.'" align="center">'.$r_pickups[pu_amp].'</td>
+ </tr>';
+ }
+}
+
+$sql_firstblood = small_query("SELECT pi.name, pi.country, m.firstblood FROM uts_match AS m, uts_pinfo AS pi WHERE m.firstblood = pi.id AND m.id = $mid");
+if (!$sql_firstblood) $sql_firstblood = array('country' => '', 'name' => '(unknown)', 'firstblood' => NULL);
+$sql_multis = small_query("SELECT SUM(spree_double) AS spree_double, SUM(spree_multi) AS spree_multi, SUM(spree_ultra) AS spree_ultra, SUM(spree_monster) AS spree_monster FROM uts_player WHERE matchid = $mid");
+
+IF($mid2 == NULL) {
+} else {
+$sql_firstblood2 = small_query("SELECT pi.name, pi.country, m.firstblood FROM uts_match AS m, uts_pinfo AS pi WHERE m.firstblood = pi.id AND m.id = $mid2");
+if (!$sql_firstblood2) $sql_firstblood2 = array('country' => '', 'name' => '(unknown)', 'firstblood' => NULL);
+$sql_multis2 = small_query("SELECT SUM(spree_double) AS spree_double, SUM(spree_multi) AS spree_multi, SUM(spree_ultra) AS spree_ultra, SUM(spree_monster) AS spree_monster FROM uts_player WHERE matchid = $mid2");
+}
+echo'</tbody></table>
+<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="2" align="center">Special Events - '.$ass_att.' Attacking</td>
+ <td class="heading" colspan="2" align="center">Special Events - '.$ass_att2.' Attacking</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="150">First Blood</td>
+ <td class="grey" align="center" width="150">'.FormatPlayerName($sql_firstblood[country], $sql_firstblood[firstblood], $sql_firstblood[name], $gid, $gamename).'</td>
+ <td class="dark" align="center" width="150">First Blood</td>
+ <td class="grey" align="center" width="150">'.FormatPlayerName($sql_firstblood2[country], $sql_firstblood[firstblood], $sql_firstblood2[name], $gid, $gamename).'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Double Kills</td>
+ <td class="grey2" align="center">'.$sql_multis[spree_double].'</td>
+ <td class="dark" align="center">Double Kills</td>
+ <td class="grey2" align="center">'.$sql_multis2[spree_double].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Multi Kills</td>
+ <td class="grey" align="center">'.$sql_multis[spree_multi].'</td>
+ <td class="dark" align="center">Multi Kills</td>
+ <td class="grey" align="center">'.$sql_multis2[spree_multi].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Ultra Kills</td>
+ <td class="grey2" align="center">'.$sql_multis[spree_ultra].'</td>
+ <td class="dark" align="center">Ultra Kills</td>
+ <td class="grey2" align="center">'.$sql_multis2[spree_ultra].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Monster Kills</td>
+ <td class="grey" align="center">'.$sql_multis[spree_monster].'</td>
+ <td class="dark" align="center">Monster Kills</td>
+ <td class="grey" align="center">'.$sql_multis2[spree_monster].'</td>
+ </tr>
+</tbody></table>';
+?>
diff --git a/html/pages/match_info_server.php b/html/pages/match_info_server.php
new file mode 100755
index 0000000..fb92456
--- /dev/null
+++ b/html/pages/match_info_server.php
@@ -0,0 +1,114 @@
+<?php
+echo'
+<table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Totals for This Match</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="45">Team Score</td>
+ <td class="smheading" align="center" width="50">Player Score</td>
+ <td class="smheading" align="center" width="45">Frags</td>
+ <td class="smheading" align="center" width="45">Kills</td>
+ <td class="smheading" align="center" width="50">Deaths</td>
+ <td class="smheading" align="center" width="60">Suicides</td>
+ </tr>';
+
+// Get Summary Info
+$teamscore = small_query("SELECT SUM(t0score + t1score + t2score + t3score) AS result FROM uts_match WHERE id = $mid");
+$playerscore = small_query("SELECT SUM(gamescore) AS result FROM uts_player WHERE matchid = $mid");
+$fragcount = small_query("SELECT SUM(frags) AS result FROM uts_match WHERE id = $mid");
+$killcount = small_query("SELECT SUM(kills) AS result FROM uts_match WHERE id = $mid");
+$deathcount = small_query("SELECT SUM(deaths) AS result FROM uts_match WHERE id = $mid");
+$suicidecount = small_query("SELECT SUM(suicides) AS result FROM uts_match WHERE id = $mid");
+
+echo'
+ <tr>
+ <td class="smheading" align="center" width="45">'.$teamscore[result].'</td>
+ <td class="smheading" align="center" width="50">'.$playerscore[result].'</td>
+ <td class="smheading" align="center" width="45">'.$fragcount[result].'</td>
+ <td class="smheading" align="center" width="45">'.$killcount[result].'</td>
+ <td class="smheading" align="center" width="50">'.$deathcount[result].'</td>
+ <td class="smheading" align="center" width="60">'.$suicidecount[result].'</td>
+ </tr>';
+
+// Teamgame? Then show score
+if ($teamgame) {
+ echo '
+ <tr>
+ <td class="heading" align="center" valign="middle" colspan="6">';
+ echo '
+ Score:';
+ if ($r_info[t0]) {
+ echo '
+ '.$r_info[t0score];
+ }
+ if ($r_info[t1]) {
+ echo '
+ - '.$r_info[t1score];
+ }
+ if ($r_info[t2]) {
+ echo '
+ - '.$r_info[t2score];
+ }
+ if ($r_info[t3]) {
+ echo '
+ - '.$r_info[t3score];
+ }
+ echo '
+ </td>
+ </tr>';
+}
+
+echo '
+</tbody></table>
+<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="4" align="center">Unreal Tournament Match Stats</td>
+ </tr>';
+
+$matchinfo = small_query("SELECT m.time, m.servername, g.name AS gamename, m.gamename AS real_gamename, m.gid, m.mapname, m.mapfile, m.serverinfo, m.gameinfo, m.mutators, m.serverip FROM uts_match AS m, uts_games AS g WHERE m.gid = g.id AND m.id = $mid");
+$matchdate = mdate($matchinfo[time]);
+$gamename = $matchinfo[gamename];
+$real_gamename = $matchinfo[real_gamename];
+$gid = $matchinfo[gid];
+
+$mapname = un_ut($matchinfo[mapfile]);
+$mappic = strtolower("images/maps/".$mapname.".jpg");
+
+if (file_exists($mappic)) {
+} else {
+ $mappic = ("images/maps/blank.jpg");
+}
+
+ $myurl = urlencode($mapname);
+
+ echo'
+ <tr>
+ <td class="dark" align="center" width="110">Match Date</td>
+ <td class="grey" align="center">'.$matchdate.'</td>
+ <td class="dark" align="center" width="110">Server</td>
+ <td class="grey" align="center" width="146"><a class="grey" href="./?p=sinfo&amp;serverip='.$matchinfo[serverip].'">'.$matchinfo[servername].'</a></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Match Type</td>
+ <td class="grey" align="center">'.$gamename.'</td>
+ <td class="dark" align="center">Map Name</td>
+ <td class="greyhuman" align="center"><a class="grey" href="./?p=minfo&amp;map='.$myurl.'">'.$matchinfo[mapname].'</a></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Server Info</td>
+ <td class="grey" align="center">'.$matchinfo[serverinfo].'</td>
+ <td class="dark" align="center" rowspan="4" colspan="2"><img border="0" alt="'.$mapname.'" title="'.$mapname.'" src="'.$mappic.'"></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Game Info</td>
+ <td class="grey" align="center">'.$matchinfo[gameinfo].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Mutators</td>
+ <td class="grey" align="center">'.$matchinfo[mutators].'</td>
+ </tr>
+</tbody></table>
+<br>';
+?>
diff --git a/html/pages/match_player.php b/html/pages/match_player.php
new file mode 100755
index 0000000..4cc73a0
--- /dev/null
+++ b/html/pages/match_player.php
@@ -0,0 +1,151 @@
+<?php
+$mid = preg_replace('/\D/', '', $_GET[mid]);
+$pid = preg_replace('/\D/', '', $_GET[pid]);
+
+$r_infos = small_query("SELECT p.playerid, p.country, pi.name, pi.banned, p.gid, g.name AS gamename FROM uts_player p, uts_pinfo pi, uts_games g WHERE p.gid = g.id AND p.pid = pi.id AND p.pid = '$pid' AND matchid = '$mid' LIMIT 0,1;");
+
+if (!$r_infos) {
+ echo "Unable to retrieve data!";
+ include("includes/footer.php");
+ exit;
+}
+if ($r_infos['banned'] == 'Y') {
+ if (isset($is_admin) and $is_admin) {
+ echo "Warning: Banned player - Admin override<br>";
+ } else {
+ echo "Sorry, this player has been banned!";
+ include("includes/footer.php");
+ exit;
+ }
+}
+
+$playerid = $r_infos['playerid'];
+$playername = $r_infos['name'];
+$country = $r_infos['country'];
+$gamename = $r_infos['gamename'];
+$gid = $r_infos['gid'];
+
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center">Individual Match Stats for <a href="./?p=pinfo&amp;pid='.$pid.'">'.FlagImage($country) .' '. htmlentities($playername) .'</a>
+ <span style="font-size: 70%">'. RankImageOrText($pid, $playername, NULL, $gid, $gamename, true, '(%IT% in %GN% with %RP% ranking points)') .'</span>
+ </td>
+ </tr>
+</tbody></table>
+<br>';
+
+// Get Summary Info
+include("pages/match_info_server.php");
+
+echo '
+<br>
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="400">
+ <tbody><tr>
+ <td class="heading" colspan="8" align="center">Game Summary</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="40">Frags</td>
+ <td class="smheading" align="center" width="40">Kills</td>
+ <td class="smheading" align="center" width="50">Deaths</td>
+ <td class="smheading" align="center" width="60">Suicides</td>
+ <td class="smheading" align="center" width="70">Efficiency</td>
+ <td class="smheading" align="center" width="50">Accuracy</td>
+ <td class="smheading" align="center" width="50">Avg TTL</td>
+ <td class="smheading" align="center" width="50">Time</td>
+ </tr>';
+
+$r_gsumm = zero_out(small_query("SELECT gamescore, frags, SUM(frags+suicides) AS kills, deaths, suicides, teamkills, eff, accuracy, ttl, gametime, spree_kill, spree_rampage, spree_dom, spree_uns, spree_god
+FROM uts_player WHERE matchid = $mid AND pid = '$pid'
+GROUP BY pid"));
+
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$r_gsumm[frags].'</td>
+ <td class="grey" align="center">'.$r_gsumm[kills].'</td>
+ <td class="grey" align="center">'.$r_gsumm[deaths].'</td>
+ <td class="grey" align="center">'.$r_gsumm[suicides].'</td>
+ <td class="grey" align="center">'.$r_gsumm[eff].'</td>
+ <td class="grey" align="center">'.$r_gsumm[accuracy].'</td>
+ <td class="grey" align="center">'.$r_gsumm[ttl].'</td>
+ <td class="grey" align="center">'.GetMinutes($r_gsumm[gametime]).'</td>
+ </tr>';
+
+echo'
+</tbody></table>
+<br>
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="400">
+ <tbody><tr>
+ <td class="heading" colspan="10" align="center">Special Events</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" rowspan="2" width="40">First Blood</td>
+ <td class="smheading" align="center" colspan="4" width="160" '.OverlibPrintHint('Multis').'>Multis</td>
+ <td class="smheading" align="center" colspan="5" width="200" '.OverlibPrintHint('Sprees').'>Sprees</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('DK').'>Dbl</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('MK').'>Multi</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('UK').'>Ultra</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('MOK').'>Mons</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('KS').'>Kill</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('RA').'>Ram</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('DO').'>Dom</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('US').'>Uns</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('GL').'>God</td>
+ </tr>';
+
+$r_gsumm = zero_out(small_query("SELECT spree_double, spree_multi, spree_ultra, spree_monster, spree_kill, spree_rampage, spree_dom, spree_uns, spree_god
+FROM uts_player WHERE matchid = $mid AND pid = '$pid'
+GROUP BY pid"));
+
+$sql_firstblood = small_query("SELECT firstblood FROM uts_match WHERE id = $mid");
+
+IF ($sql_firstblood[firstblood] == $pid) {
+ $firstblood = "Yes";
+} else {
+ $firstblood = "No";
+}
+
+
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$firstblood.'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_double].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_multi].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_ultra].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_monster].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_kill].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_rampage].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_dom].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_uns].'</td>
+ <td class="grey" align="center">'.$r_gsumm[spree_god].'</td>
+ </tr>
+ </tbody></table>
+<br>';
+
+include('includes/weaponstats.php');
+weaponstats($mid, $pid);
+
+$r_pings = small_query("SELECT lowping, avgping, highping FROM uts_player WHERE pid = $pid and matchid = $mid and lowping > 0");
+if ($r_pings and $r_pings['lowping']) {
+echo '
+ <br>
+ <table class = "box" border="0" cellpadding="0" cellspacing="2">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Pings</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="80">Min</td>
+ <td class="smheading" align="center" width="80">Avg</td>
+ <td class="smheading" align="center" width="80">Max</td>
+ </tr>
+ <tr>
+ <td class="grey" align="center">'.ceil($r_pings['lowping']).'</td>
+ <td class="grey" align="center">'.ceil($r_pings['avgping']).'</td>
+ <td class="grey" align="center">'.ceil($r_pings['highping']).'</td>
+ </tr>
+ </tbody></table>';
+}
+
+?>
diff --git a/html/pages/match_report.php b/html/pages/match_report.php
new file mode 100755
index 0000000..0f452ba
--- /dev/null
+++ b/html/pages/match_report.php
@@ -0,0 +1,17 @@
+<?php
+$matchid = preg_replace('/\D/', '', $_GET[mid]);
+
+echo'<br><table class = "box" border="0" cellpadding="1" cellspacing="2" width="300">
+ <tbody>
+ <tr>
+ <td class="heading" align="center">Match Reports</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=report&amp;id='.$matchid.'&amp;rtype=clanbase">Clanbase Cup Format</a></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=report&amp;id='.$matchid.'&amp;rtype=bbcode">Forum BBCode Format</a></td>
+ </tr>
+ </tbody>
+</table>';
+?> \ No newline at end of file
diff --git a/html/pages/players.php b/html/pages/players.php
new file mode 100755
index 0000000..1d9788a
--- /dev/null
+++ b/html/pages/players.php
@@ -0,0 +1,124 @@
+<?php
+function InvertSort($curr_field, $filter, $sort) {
+ if ($curr_field != $filter) return(($curr_field == "name") ? "ASC" : "DESC");
+ if ($sort == 'ASC') return('DESC');
+ return('ASC');
+}
+
+function SortPic($curr_field, $filter, $sort) {
+ if ($curr_field != $filter) return;
+ $fname = 'images/s_'. strtolower($sort) .'.png';
+ if (!file_exists($fname)) return;
+ return('&nbsp;<img src="'. $fname .'" border="0" width="11" height="9" alt="" title="('.strtolower($sort).'ending)">');
+}
+
+
+// Get filter and set sorting
+$filter = my_addslashes($_GET[filter]);
+$sort = my_addslashes($_GET[sort]);
+
+IF (empty($filter) or (!in_array(strtolower($filter), array("name", "games", "gamescore", "frags", "kills", "deaths", "suicides", "eff", "accuracy", "ttl", "gametime")))) {
+ $filter = "name";
+}
+
+if (empty($sort) or ($sort != 'ASC' and $sort != 'DESC')) $sort = ($filter == "name") ? "ASC" : "DESC";
+
+
+// Work out Prev, Next, First, Last Stuff
+
+$r_pcount = small_query("SELECT COUNT(*) AS pcount FROM uts_pinfo");
+$pcount = $r_pcount['pcount'];
+
+$ecount = $pcount/50;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = preg_replace('/\D/', '', $_GET["page"]);
+IF ($cpage == "") { $cpage = "0"; }
+$qpage = $cpage*50;
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=players&amp;filter=$filter&amp;sort=$sort&amp;page=$ppage\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=players&amp;filter=$filter&amp;sort=$sort&amp;page=$npage\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=players&amp;filter=$filter&amp;sort=$sort&amp;page=$fpage\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=players&amp;filter=$filter&amp;sort=$sort&amp;page=$lpage\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+// Show information
+echo'
+<form NAME="playersearch" METHOD="post" ACTION="./?p=psearch">
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<div class="opnote">* Click headings to change Sorting *</div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="12" align="center">Unreal Tournament Player List</td>
+ </tr>
+ <tr>
+ <td class = "smheading" colspan = "12" ALIGN="center">Name Search:
+ <input TYPE="text" NAME="name" MAXLENGTH="35" SIZE="20" CLASS="searchform">
+ <input TYPE="submit" NAME="Default" VALUE="Search" CLASS="searchformb"></td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="150"><a class="smheading" href="./?p=players&amp;filter=name&amp;sort='.InvertSort('name', $filter, $sort).'">Player Name</a>'.SortPic('name', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=players&amp;filter=games&amp;sort='.InvertSort('games', $filter, $sort).'">Matches</a>'.SortPic('games', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=players&amp;filter=gamescore&amp;sort='.InvertSort('gamescore', $filter, $sort).'">Score</a>'.SortPic('gamescore', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=players&amp;filter=frags&amp;sort='.InvertSort('frags', $filter, $sort).'">Frags</a>'.SortPic('frags', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=players&amp;filter=kills&amp;sort='.InvertSort('kills', $filter, $sort).'">Kills</a>'.SortPic('kills', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=players&amp;filter=deaths&amp;sort='.InvertSort('deaths', $filter, $sort).'">Deaths</a>'.SortPic('deaths', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=players&amp;filter=suicides&amp;sort='.InvertSort('suicides', $filter, $sort).'">Suicides</a>'.SortPic('suicides', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=players&amp;filter=eff&amp;sort='.InvertSort('eff', $filter, $sort).'">Eff.</a>'.SortPic('eff', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=players&amp;filter=accuracy&amp;sort='.InvertSort('accuracy', $filter, $sort).'">Acc.</a>'.SortPic('accuracy', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=players&amp;filter=ttl&amp;sort='.InvertSort('ttl', $filter, $sort).'">TTL</a>'.SortPic('ttl', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=players&amp;filter=gametime&amp;sort='.InvertSort('gametime', $filter, $sort).'">Hours</a>'.SortPic('gametime', $filter, $sort).'</td>
+ </tr>';
+
+$sql_plist = "SELECT pi.name AS name, pi.country AS country, p.pid, COUNT(p.id) AS games, SUM(p.gamescore) as gamescore, SUM(p.frags) AS frags, SUM(p.kills) AS kills,
+SUM(p.deaths) AS deaths, SUM(p.suicides) as suicides, AVG(p.eff) AS eff, AVG(p.accuracy) AS accuracy, AVG(p.ttl) AS ttl, SUM(gametime) as gametime
+FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY p.pid ORDER BY $filter $sort LIMIT $qpage,50";
+$q_plist = mysql_query($sql_plist) or die(mysql_error());
+while ($r_plist = mysql_fetch_array($q_plist)) {
+
+ $gametime = sec2hour($r_plist[gametime]);
+ $eff = get_dp($r_plist[eff]);
+ $acc = get_dp($r_plist[accuracy]);
+ $ttl = GetMinutes($r_plist[ttl]);
+ $r_pname = $r_plist[name];
+ $myurl = urlencode($r_pname);
+
+ echo'
+ <tr>
+ <td nowrap class="dark" align="left"><a class="darkhuman" href="./?p=pinfo&amp;pid='.$r_plist['pid'].'">'.FormatPlayerName($r_plist[country], $r_plist['pid'], $r_pname).'</a></td>
+ <td class="grey" align="center">'.$r_plist[games].'</td>
+ <td class="grey" align="center">'.$r_plist[gamescore].'</td>
+ <td class="grey" align="center">'.$r_plist[frags].'</td>
+ <td class="grey" align="center">'.$r_plist[kills].'</td>
+ <td class="grey" align="center">'.$r_plist[deaths].'</td>
+ <td class="grey" align="center">'.$r_plist[suicides].'</td>
+ <td class="grey" align="center">'.$eff.'</td>
+ <td class="grey" align="center">'.$acc.'</td>
+ <td class="grey" align="center">'.$ttl.'</td>
+ <td class="grey" align="center">'.$gametime.'</td>
+ </tr>';
+}
+echo'
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+</form>';
+?>
diff --git a/html/pages/players_explain_ranking.php b/html/pages/players_explain_ranking.php
new file mode 100755
index 0000000..5930cfb
--- /dev/null
+++ b/html/pages/players_explain_ranking.php
@@ -0,0 +1,190 @@
+<?php
+function row($name = NULL, $amount = 0, $multiplier = 0, $extra_multiplier = true) {
+ static $i = 0;
+ if (empty($name)) {
+ echo '<tr><td colspan="4" height="3"></td></tr>';
+ $i = 0;
+ return(0);
+ }
+ $i++;
+ $class = ($i%2) ? 'grey' : 'grey2';
+ if ($extra_multiplier) $multiplier *= 600;
+ $points = $amount * $multiplier;
+
+ $d_points = get_dp($points);
+ if ($points % 1 == 0) $d_points = ceil($points);
+ echo '<tr>';
+ echo '<td class="dark">'. htmlentities($name) .'</td>';
+ echo '<td class="'.$class.'" align="center">'. $amount .'</td>';
+ echo '<td class="'.$class.'" align="center">'. $multiplier .'</td>';
+ echo '<td class="'.$class.'" align="right">'. $d_points .'</td>';
+ echo '</tr>';
+ return($points);
+}
+
+$pid = isset($pid) ? $pid : $_GET['pid'];
+$gid = isset($gid) ? $gid : $_GET['gid'];
+
+$pid = preg_replace('/\D/', '', $pid);
+$gid = preg_replace('/\D/', '', $gid);
+
+$r_info = small_query("SELECT name, country, banned FROM uts_pinfo WHERE id = '$pid'");
+if (!$r_info) {
+ echo "Player not found";
+ include("includes/footer.php");
+ exit;
+}
+
+if ($r_info['banned'] == 'Y') {
+ if (isset($is_admin) and $is_admin) {
+ echo "Warning: Banned player - Admin override<br>";
+ } else {
+ echo "Sorry, this player has been banned!";
+ include("includes/footer.php");
+ exit;
+ }
+}
+
+$playername = $r_info['name'];
+
+$r_game = small_query("SELECT name, gamename FROM uts_games WHERE id = '$gid'");
+if (!$r_game) {
+ echo "Game ($gid) not found.";
+ include("includes/footer.php");
+ exit;
+}
+$real_gamename = $r_game['gamename'];
+
+
+$r_cnt = small_query("SELECT
+ SUM(frags) AS frags, SUM(deaths) AS deaths, SUM(suicides) AS suicides, SUM(teamkills) AS teamkills,
+ SUM(flag_taken) AS flag_taken, SUM(flag_pickedup) AS flag_pickedup, SUM(flag_return) AS flag_return, SUM(flag_capture) AS flag_capture, SUM(flag_cover) AS flag_cover,
+ SUM(flag_seal) AS flag_seal, SUM(flag_assist) AS flag_assist, SUM(flag_kill) AS flag_kill,
+ SUM(dom_cp) AS dom_cp, SUM(ass_obj) AS ass_obj,
+ SUM(spree_double) AS spree_double, SUM(spree_multi) AS spree_multi, SUM(spree_ultra) AS spree_ultra, SUM(spree_monster) AS spree_monster,
+ SUM(spree_kill) AS spree_kill, SUM(spree_rampage) AS spree_rampage, SUM(spree_dom) AS spree_dom, SUM(spree_uns) AS spree_uns, SUM(spree_god) AS spree_god,
+ SUM(gametime) AS gametime
+ FROM uts_player WHERE pid = $pid and gid = $gid");
+
+
+
+
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center"><a href="?p=pinfo&amp;pid='.$pid.'">'.FlagImage($r_info['country'], false).' '.htmlentities($playername).'</a>\'s '. htmlentities($r_game['name']) .' ranking explained </td>
+ </tr>
+</tbody></table>';
+echo '<br /><br />';
+
+
+
+
+
+echo '
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+<tbody>
+ <tr>
+ <td class="smheading" width="250"></td>
+ <td class="smheading" width="80" align="center">Amount</td>
+ <td class="smheading" width="80" align="center">Multiplier</td>
+ <td class="smheading" width="100" align="right">Points</t>
+ </tr>';
+
+if ($real_gamename == "Bunny Track") {
+ $sql_btmaprank = "SELECT e.col2 AS no, COUNT(e.col2) AS count FROM uts_events AS e, uts_player AS p WHERE p.pid = $pid AND p.gid = $gid AND p.playerid = e.playerid AND e.matchid = p.matchid AND e.col2 > 0 AND e.col2 <= 5 GROUP BY e.col2";
+ $q_btmaprank = mysql_query($sql_btmaprank) or die ("Can't retrieve \$q_btmaprank: ". mysql_error());
+ $mapranks = array();
+ while($r_btmaprank = mysql_fetch_assoc($q_btmaprank)) {
+ $mapranks[$r_btmaprank[no]] = $r_btmaprank[count];
+ }
+
+ $t_points += row('First place', (!empty($mapranks[1]) ? $mapranks[1] : 0), 10);
+ $t_points += row('Second place', (!empty($mapranks[2]) ? $mapranks[2] : 0), 8);
+ $t_points += row('Third place', (!empty($mapranks[3]) ? $mapranks[3] : 0), 6);
+ $t_points += row('Fourth place', (!empty($mapranks[4]) ? $mapranks[4] : 0), 4);
+ $t_points += row('Fifth place', (!empty($mapranks[5]) ? $mapranks[5] : 0), 2);
+}
+else {
+ $t_points = 0;
+ $t_points += row('Frags', $r_cnt['frags'], 0.5);
+ $t_points += row('Deaths', $r_cnt['deaths'], -0.25);
+ $t_points += row('Suicides', $r_cnt['suicides'], -0.25 );
+ $t_points += row('Teamkills', $r_cnt['teamkills'], -2);
+ row();
+ $t_points += row('Flag Takes', $r_cnt['flag_taken'], 1);
+ $t_points += row('Flag Pickups', $r_cnt['flag_pickedup'], 1);
+ $t_points += row('Flag Returns', $r_cnt['flag_return'], 1);
+ $t_points += row('Flag Captures', $r_cnt['flag_capture'], 10);
+ $t_points += row('Flag Covers', $r_cnt['flag_cover'], 3);
+ $t_points += row('Flag Seals', $r_cnt['flag_seal'], 2);
+ $t_points += row('Flag Assists', $r_cnt['flag_assist'], 5);
+ $t_points += row('Flag Kills', $r_cnt['flag_kill'], 2);
+ row();
+ $t_points += row('Controlpoint Captures', $r_cnt['dom_cp'], 10);
+ if (strpos($real_gamename, 'Assault') !== false) {
+ $t_points += row('Assault Objectives', $r_cnt['ass_obj'], 10);
+ } else {
+ $t_points += row('Assault Objectives', 0, 10);
+ }
+ if (strpos($real_gamename, 'JailBreak') !== false) {
+ $t_points += row('Team Releases', $r_cnt['ass_obj'], 1.5);
+ } else {
+ $t_points += row('Team Releases', 0, 1.5);
+ }
+ row();
+ $t_points += row('Double Kills', $r_cnt['spree_double'], 1);
+ $t_points += row('Multi Kills', $r_cnt['spree_multi'], 1);
+ $t_points += row('Ultra Kills', $r_cnt['spree_ultra'], 1);
+ $t_points += row('Monster Kills', $r_cnt['spree_monster'], 2);
+ row();
+ $t_points += row('Killing Sprees', $r_cnt['spree_kill'], 1);
+ $t_points += row('Rampages', $r_cnt['spree_rampage'], 1);
+ $t_points += row('Dominatings', $r_cnt['spree_dom'], 1.5);
+ $t_points += row('Unstoppables', $r_cnt['spree_uns'], 2);
+ $t_points += row('Godlikes', $r_cnt['spree_god'], 3);
+}
+
+row();
+row();
+echo '<tr> <td class="dark">Total</td>
+ <td class="grey" align="center"></td>
+ <td class="grey" align="center"></td>
+ <td class="grey" align="right">'. ceil($t_points) .'</td>
+ </tr>';
+
+$gametime = ceil($r_cnt['gametime'] / 60);
+$t_points = $t_points / $gametime;
+echo '<tr> <td class="dark">Divided by game minutes</td>
+ <td class="grey2" align="center">'.$gametime.'</td>
+ <td class="grey2" align="center"></td>
+ <td class="grey2" align="right">'. get_dp($t_points) .'</td>
+ </tr>';
+
+IF ($gametime < 10) {
+ $t_points += row('Penalty for playing < 10 minutes', get_dp($t_points), 0, false);
+}
+
+IF ($gametime >= 10 && $gametime < 50) {
+ $t_points += row('Penalty for playing < 50 minutes', get_dp($t_points), -0.75, false);
+}
+
+IF ($gametime >= 50 && $gametime < 100) {
+ $t_points += row('Penalty for playing < 100 minutes', get_dp($t_points), -0.5, false);
+}
+
+IF ($gametime >= 100 && $gametime < 200) {
+ $t_points += row('Penalty for playing < 200 minutes', get_dp($t_points), -0.3, false);
+}
+
+IF ($gametime >= 200 && $gametime < 300) {
+ $t_points += row('Penalty for playing < 300 minutes', get_dp($t_points), -0.15, false);
+}
+row();
+echo '<tr> <td class="darkgrey"><strong>Total</strong></td>
+ <td class="darkgrey" align="center"></td>
+ <td class="darkgrey" align="center"></td>
+ <td class="darkgrey" align="right"><strong>'. get_dp($t_points) .'</strong></td>
+ </tr>';
+echo '</tbody></table>';
+?>
diff --git a/html/pages/players_info.php b/html/pages/players_info.php
new file mode 100755
index 0000000..11064dc
--- /dev/null
+++ b/html/pages/players_info.php
@@ -0,0 +1,442 @@
+<?php
+global $pic_enable;
+$pid = isset($pid) ? $pid : $_GET['pid'];
+$pid = preg_replace('/\D/', '', $pid);
+
+$r_info = small_query("SELECT name, country, banned FROM uts_pinfo WHERE id = '$pid'");
+if (!$r_info) {
+ echo "Player not found";
+ include("includes/footer.php");
+ exit;
+}
+
+if ($r_info['banned'] == 'Y') {
+ if (isset($is_admin) and $is_admin) {
+ echo "Warning: Banned player - Admin override<br>";
+ } else {
+ echo "Sorry, this player has been banned!";
+ include("includes/footer.php");
+ exit;
+ }
+}
+
+$playername = $r_info['name'];
+
+if (isset($_GET['togglewatch'])) {
+ $status = ToggleWatchStatus($pid);
+ include('includes/header.php');
+ if ($status == 1) {
+ echo htmlentities($playername) ." has been added to your watchlist";
+ } else {
+ echo htmlentities($playername) ." has been removed from your watchlist";
+ }
+ echo "<br>";
+ $target = $PHP_SELF .'?p=pinfo&amp;pid='. $pid;
+ echo 'You will be taken back to the <a href="'. $target .'">'. htmlentities($playername) .'\'s page</a> in a moment.';
+ echo '<meta http-equiv="refresh" content="2;URL='. $target .'">';
+ return;
+}
+
+
+if (isset($_GET['pics'])) {
+ $gid = $_GET['gid'];
+ $gid = preg_replace("/\D/", "", $gid);
+ if (!$pic_enable) {
+ echo "Sorry, pictures are disabled by the administrator";
+ return;
+ }
+ $oururl = $_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
+ $oururl = str_replace("index.php", "", $oururl);
+
+ echo '<div class="pages" align="left">';
+ require('includes/config_pic.php');
+ $disp = false;
+ foreach($pic as $num => $options) {
+ if (!$options['enabled']) continue;
+ if ($options['gidrequired'] and empty($gid)) continue;
+ $disp = true;
+ $pinfourl = "http://${oururl}?p=pinfo&pid=$pid";
+ $lgid = ($options['gidrequired']) ? $gid : 0;
+ $imgurl = "http://${oururl}pic.php/$num/$pid/$lgid/.".$options['output']['type'];
+ echo '<table class="box" border="0" cellspacing="2" cellpadding="1" align="center"><tr>';
+ echo '<td colspan="2" align="center"><img src="'. $imgurl .'" border="0" /></td>';
+ echo '</tr><tr>';
+ echo '<td class="smheading">BB Code:</td><td><textarea rows="1" cols="85">'. str_replace(' ', '&nbsp;', htmlentities('[url='.$pinfourl.'][img]'.$imgurl.'[/img][/url]')) .'</textarea></td>';
+ echo '</tr><tr>';
+ echo '<td class="smheading">HTML Code:</td><td><textarea rows="1" cols="85">'. str_replace(' ', '&nbsp;', htmlentities('<a href="'.$pinfourl.'" target="_blank"><img src="'.$imgurl.'" border="0"></img></a>')) .'</textarea></td>';
+ echo '</tr></table><br><br>';
+ }
+ if (!$disp) echo "Sorry, no pictures in this category";
+ echo '</div>';
+ return;
+}
+
+
+
+
+
+echo'
+<table class="box" border="0" cellpadding="1" cellspacing="2" width="710">
+ <tbody><tr>
+ <td class="heading" colspan="12" align="center">Career Summary for '.FlagImage($r_info['country'], false).' '.htmlentities($playername).' ';
+
+if (PlayerOnWatchlist($pid)) {
+ echo '<a href="?p=pinfo&amp;pid='.$pid.'&amp;togglewatch=1&amp;noheader=1"><img src="images/unwatch.png" width="17" height="11" border="0" alt="" title="You are watching this player. Click to remove from your watchlist."></a>';
+} else {
+ echo '<a href="?p=pinfo&amp;pid='.$pid.'&amp;togglewatch=1&amp;noheader=1"><img src="images/watch.png" width="17" height="11" border="0" alt="" title="Click to add this player to your watchlist."></a>';
+}
+
+echo '
+ </td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center">Match Type</td>
+ <td class="smheading" align="center">Score</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('F').'>F</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('K').'>K</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('D').'>D</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('S').'>S</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('TK').'>TK</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('EFF').'>Eff.</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('ACC').'>Acc.</td>
+ <td class="smheading" align="center" '.OverlibPrintHint('TTL').'>Avg TTL</td>
+ <td class="smheading" align="center">Matches</td>
+ <td class="smheading" align="center">Hours</td>
+ </tr>';
+
+$sql_plist = "SELECT g.name AS gamename, SUM(p.gamescore) AS gamescore, SUM(p.frags) AS frags, SUM(p.kills) AS kills, SUM(p.deaths) AS deaths,
+SUM(p.suicides) AS suicides, SUM(p.teamkills) AS teamkills, SUM(kills+deaths+suicides+teamkills) AS sumeff, AVG(p.accuracy) AS accuracy, AVG(p.ttl) AS ttl,
+COUNT(p.id) AS games, SUM(p.gametime) as gametime
+FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id AND p.pid = '$pid' GROUP BY p.gid";
+
+$q_plist = mysql_query($sql_plist) or die(mysql_error());
+while ($r_plist = mysql_fetch_array($q_plist)) {
+
+ $gametime = sec2hour($r_plist[gametime]);
+ $eff = get_dp($r_plist[kills]/$r_plist[sumeff]*100);
+ $acc = get_dp($r_plist[accuracy]);
+ $ttl = GetMinutes($r_plist[ttl]);
+
+ echo'<tr>
+ <td class="dark" align="center">'.$r_plist[gamename].'</td>
+ <td class="grey" align="center">'.$r_plist[gamescore].'</td>
+ <td class="grey" align="center">'.$r_plist[frags].'</td>
+ <td class="grey" align="center">'.$r_plist[kills].'</td>
+ <td class="grey" align="center">'.$r_plist[deaths].'</td>
+ <td class="grey" align="center">'.$r_plist[suicides].'</td>
+ <td class="grey" align="center">'.$r_plist[teamkills].'</td>
+ <td class="grey" align="center">'.$eff.'</td>
+ <td class="grey" align="center">'.$acc.'</td>
+ <td class="grey" align="center">'.$ttl.'</td>
+ <td class="grey" align="center">'.$r_plist[games].'</td>
+ <td class="grey" align="center">'.$gametime.'</td>
+ </tr>';
+}
+
+$r_sumplist = small_query("SELECT SUM(gamescore) AS gamescore, SUM(frags) AS frags, SUM(kills) AS kills, SUM(deaths) AS deaths,
+SUM(suicides) AS suicides, SUM(teamkills) AS teamkills, SUM(kills+deaths+suicides+teamkills) AS sumeff,
+AVG(accuracy) AS accuracy, AVG(ttl) AS ttl, COUNT(id) AS games, SUM(gametime) as gametime
+FROM uts_player WHERE pid = '$pid'");
+
+$gametime = sec2hour($r_sumplist[gametime]);
+$eff = get_dp($r_sumplist[kills]/$r_sumplist[sumeff]*100);
+$acc = get_dp($r_sumplist[accuracy]);
+$ttl = GetMinutes($r_sumplist[ttl]);
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><b>Totals</b></td>
+ <td class="darkgrey" align="center">'.$r_sumplist[gamescore].'</td>
+ <td class="darkgrey" align="center">'.$r_sumplist[frags].'</td>
+ <td class="darkgrey" align="center">'.$r_sumplist[kills].'</td>
+ <td class="darkgrey" align="center">'.$r_sumplist[deaths].'</td>
+ <td class="darkgrey" align="center">'.$r_sumplist[suicides].'</td>
+ <td class="darkgrey" align="center">'.$r_sumplist[teamkills].'</td>
+ <td class="darkgrey" align="center">'.$eff.'</td>
+ <td class="darkgrey" align="center">'.$acc.'</td>
+ <td class="darkgrey" align="center">'.$ttl.'</td>
+ <td class="darkgrey" align="center">'.$r_sumplist[games].'</td>
+ <td class="darkgrey" align="center">'.$gametime.'</td>
+ </tr>
+</tbody></table>
+<br>';
+
+$q_assgids = mysql_query("SELECT id FROM uts_games WHERE gamename LIKE '%Assault%';") or die(mysql_error());
+$assgids = array();
+while ($r_assgids = mysql_fetch_array($q_assgids)) {
+ $assgids[] = $r_assgids['id'];
+}
+$assquery = (count($assgids) > 0) ? 'SUM(IF (gid IN ('. implode(',', $assgids) .'), ass_obj, 0)) AS ass_obj' : '0 AS ass_obj';
+ $sql_cdatot = zero_out(small_query("SELECT SUM(dom_cp) AS dom_cp, $assquery, SUM(flag_taken) AS flag_taken,
+SUM(flag_pickedup) AS flag_pickedup, SUM(flag_dropped) AS flag_dropped, SUM(flag_assist) AS flag_assist, SUM(flag_cover) AS flag_cover,
+SUM(flag_seal) AS flag_seal, SUM(flag_capture) AS flag_capture, SUM(flag_kill)as flag_kill,
+SUM(flag_return) AS flag_return FROM uts_player WHERE pid = '$pid'"));
+
+if ($sql_cdatot[ass_obj] || $sql_cdatot[dom_cp] || $sql_cdatot[flag_taken] || $sql_cdatot[flag_pickedup] || $sql_cdatot[flag_dropped] || $sql_cdatot[flag_assist] || $sql_cdatot[flag_cover] || $sql_cdatot[flag_seal] || $sql_cdatot[flag_capture] || $sql_cdatot[flag_kill] || $sql_cdatot[flag_return]) {
+ echo '
+ <table class = "box" border="0" cellpadding="1" cellspacing="2" width="600">
+ <tbody><tr>
+ <td class="heading" colspan="11" align="center">Assault, Domination and CTF Events Summary</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" rowspan="2">Assault Objectives</td>
+ <td class="dark" align="center" rowspan="2">Control Point Captures</td>
+ <td class="dark" align="center" colspan="9">Capture The Flag</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Flag Takes</td>
+ <td class="dark" align="center">Flag Pickups</td>
+ <td class="dark" align="center">Flag Drops</td>
+ <td class="dark" align="center">Flag Assists</td>
+ <td class="dark" align="center">Flag Covers</td>
+ <td class="dark" align="center">Flag Seals</td>
+ <td class="dark" align="center">Flag Captures</td>
+ <td class="dark" align="center">Flag Kills</td>
+ <td class="dark" align="center">Flag Returns</td>
+ </tr>';
+
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$sql_cdatot[ass_obj].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[dom_cp].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_taken].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_pickedup].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_dropped].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_assist].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_cover].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_seal].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_capture].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_kill].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_return].'</td>
+ </tr>
+ </tbody></table>
+ <br>';
+}
+
+$sql_firstblood = zero_out(small_query("SELECT COUNT(id) AS fbcount FROM uts_match WHERE firstblood = '$pid'"));
+$sql_multis = zero_out(small_query("SELECT SUM(spree_double) AS spree_double, SUM(spree_multi) AS spree_multi,
+SUM(spree_ultra) AS spree_ultra, SUM(spree_monster) AS spree_monster,
+SUM(spree_kill) AS spree_kill, SUM(spree_rampage) AS spree_rampage, SUM(spree_dom) AS spree_dom,
+SUM(spree_uns) AS spree_uns, SUM(spree_god) AS spree_god
+FROM uts_player WHERE pid = '$pid'"));
+
+if ($sql_firstblood[fbcount] || $sql_multis[spree_double] || $sql_multis[spree_multi] || $sql_multis[spree_ultra] || $sql_multis[spree_monster] || $sql_multis[spree_kill] || $sql_multis[spree_rampage] || $sql_multis[spree_dom] || $sql_multis[spree_uns] || $sql_multis[spree_god] ) {
+ echo '
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="400">
+ <tbody><tr>
+ <td class="heading" colspan="10" align="center">Special Events</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" rowspan="2" width="40">First Blood</td>
+ <td class="smheading" align="center" colspan="4" width="160" '.OverlibPrintHint('Multis').'>Multis</td>
+ <td class="smheading" align="center" colspan="5" width="200" '.OverlibPrintHint('Sprees').'>Sprees</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('DK').'>Dbl</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('MK').'>Multi</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('UK').'>Ultra</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('MOK').'>Mons</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('KS').'>Kill</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('RA').'>Ram</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('DO').'>Dom</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('US').'>Uns</td>
+ <td class="smheading" align="center" width="40" '.OverlibPrintHint('GL').'>God</td>
+ </tr>';
+
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$sql_firstblood[fbcount].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_double].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_multi].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_ultra].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_monster].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_kill].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_rampage].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_dom].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_uns].'</td>
+ <td class="grey" align="center">'.$sql_multis[spree_god].'</td>
+ </tr>
+ </tbody></table>
+ <br>';
+}
+
+$r_pickups = zero_out(small_query("SELECT SUM(pu_pads) AS pu_pads, SUM(pu_armour) AS pu_armour, SUM(pu_keg) AS pu_keg,
+SUM(pu_invis) AS pu_invis, SUM(pu_belt) AS pu_belt, SUM(pu_amp) AS pu_amp
+FROM uts_player WHERE pid = '$pid'"));
+
+if ($r_pickups[pu_pads] || $r_pickups[pu_armour] || $r_pickups[pu_keg] || $r_pickups[pu_invis] || $r_pickups[pu_belt] || $r_pickups[pu_amp] ) {
+ echo '
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="480">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Pickups Summary</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="80">Pads</td>
+ <td class="smheading" align="center" width="80">Armour</td>
+ <td class="smheading" align="center" width="80">Keg</td>
+ <td class="smheading" align="center" width="80">Invisibility</td>
+ <td class="smheading" align="center" width="80">Shield Belt</td>
+ <td class="smheading" align="center" width="80">Damage Amp</td>
+ </tr>
+ <tr>
+ <td class="grey" align="center">'.$r_pickups[pu_pads].'</td>
+ <td class="grey" align="center">'.$r_pickups[pu_armour].'</td>
+ <td class="grey" align="center">'.$r_pickups[pu_keg].'</td>
+ <td class="grey" align="center">'.$r_pickups[pu_invis].'</td>
+ <td class="grey" align="center">'.$r_pickups[pu_belt].'</td>
+ <td class="grey" align="center">'.$r_pickups[pu_amp].'</td>
+ </tr>
+ </tbody></table>
+ <br>';
+}
+
+include('includes/weaponstats.php');
+weaponstats(0, $pid);
+
+echo '<br>';
+
+// bt records
+$sql_btrecords = "
+SELECT
+ m.mapfile AS map,
+ e.col3 AS time,
+ e.col4 AS date
+FROM
+ uts_match AS m,
+ uts_events AS e,
+ uts_player AS p
+WHERE
+ p.pid = $pid AND
+ p.playerid = e.playerid AND
+ e.matchid = p.matchid AND
+ m.id = p.matchid AND
+ e.col1 = 'btcap'
+GROUP BY
+ m.mapfile
+ORDER BY
+ m.mapfile,
+ 0 + e.col3 ASC";
+
+$q_btrecords = mysql_query($sql_btrecords) or die (mysql_error());
+if (mysql_num_rows($q_btrecords) > 0) {
+ echo '
+ <table class = "box" border="0" cellpadding="0" cellspacing="2" width="600">
+ <tbody><tr>
+ <td class="heading" colspan="4" align="center">Bunny Track Personal Records</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="200">Map</td>
+ <td class="smheading" align="center" width="80">N&deg;</td>
+ <td class="smheading" align="center" width="80">Time</td>
+ <td class="smheading" align="center" width="200">Date</td>
+ </tr>';
+ while ($r_btrecords = mysql_fetch_array($q_btrecords)) {
+ $map = un_ut($r_btrecords['map']);
+ $myurl = urlencode($map);
+ $maprank = 1 + small_count("SELECT DISTINCT p.pid AS rank FROM uts_player as p, uts_events AS e, uts_match as m WHERE (m.mapfile = '" . addslashes($map) . "' OR m.mapfile = '" . addslashes($map) . ".unr') AND m.id = e.matchid AND e.matchid = p.matchid AND e.playerid = p.playerid AND e.col3 < ".$r_btrecords['time'] . " AND e.col1 = 'btcap'");
+ echo '
+ <tr><td class = "dark">&nbsp;<a class="darkhuman" href="./?p=minfo&amp;map='.$myurl.'">'.htmlentities($map).'</a></td>
+ <td class = "grey" align = "center">', $maprank, '</td>
+ <td class = "grey" align = "center">', btcaptime($r_btrecords['time']), '</td>
+ <td class = "grey" align = "center">', gmdate('d-m-Y h:i a', $r_btrecords['date']), '</td></tr>';
+ }
+ echo '
+ </tbody></table>
+ <br>';
+}
+
+// Do graph stuff
+$bgwhere = "pid = '$pid'";
+include("pages/graph_pbreakdown.php");
+
+
+// Player's ranks
+echo'<table class = "box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Ranking</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="50">N&deg;</td>
+ <td class="smheading" align="center" width="140">Match Type</td>
+ <td class="smheading" align="center" width="80">Rank</td>
+ <td class="smheading" align="center" width="50">Matches</td>
+ <td class="smheading" align="center" width="50">Explain</td>';
+ if ($pic_enable and basename($_SERVER['PATH_TRANSLATED']) != 'admin.php') echo '<td class="smheading" align="center" width="50">Pics</td>';
+echo '</tr>';
+
+$sql_rank = "SELECT g.name AS gamename, r.rank, r.prevrank, r.matches, r.gid, r.pid FROM uts_rank AS r, uts_games AS g WHERE r.gid = g.id AND r.pid = '$pid';";
+$q_rank = mysql_query($sql_rank) or die(mysql_error());
+while ($r_rank = mysql_fetch_array($q_rank)) {
+ $r_no = small_query("SELECT (COUNT(*) + 1) AS no FROM uts_rank WHERE gid= '${r_rank['gid']}' and rank > ". get_dp($r_rank['rank']) ."9");
+ echo'<tr>
+ <td class="grey" align="center">'.RankImageOrText($r_rank['pid'], $name, $r_no['no'], $r_rank['gid'], $r_rank['gamename'], false, '%IT%').'</td>
+ <td class="grey" align="center">'.$r_rank['gamename'].'</td>
+ <td class="grey" align="center">'.get_dp($r_rank['rank']) .' '. RankMovement($r_rank['rank'] - $r_rank['prevrank']) . '</td>
+ <td class="grey" align="center">'.$r_rank['matches'].'</td>';
+ echo '<td class="grey" align="center"><a class="grey" href="?p=pexplrank&amp;pid='.$pid.'&amp;gid='.$r_rank['gid'].'">(Click)</a></td>';
+ if ($pic_enable and basename($_SERVER['PATH_TRANSLATED']) != 'admin.php') echo '<td class="grey" align="center"><a class="grey" href="?p=pinfo&amp;pid='.$pid.'&amp;gid='.$r_rank['gid'].'&amp;pics=1">(Click)</a></td>';
+ echo '</tr>';
+}
+
+echo '</tbody></table>';
+
+
+$r_pings = small_query("SELECT MIN(lowping * 1) AS lowping, AVG(avgping * 1) AS avgping, MAX(highping * 1) AS highping FROM uts_player WHERE pid = $pid and lowping > 0");
+if ($r_pings and $r_pings['lowping']) {
+echo '
+ <br>
+ <table class = "box" border="0" cellpadding="0" cellspacing="2">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Pings</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="80">Min</td>
+ <td class="smheading" align="center" width="80">Avg</td>
+ <td class="smheading" align="center" width="80">Max</td>
+ </tr>
+ <tr>
+ <td class="grey" align="center">'.ceil($r_pings['lowping']).'</td>
+ <td class="grey" align="center">'.ceil($r_pings['avgping']).'</td>
+ <td class="grey" align="center">'.ceil($r_pings['highping']).'</td>
+ </tr>
+ </tbody></table>';
+}
+
+
+
+
+echo'<br><table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Last 50 Games</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="80">Match ID</td>
+ <td class="smheading" align="center" width="220">Date/Time</td>
+ <td class="smheading" align="center" width="140">Match Type</td>
+ <td class="smheading" align="center">Map</td>';
+ if (isset($is_admin) and $is_admin) echo '<td class="smheading" align="center">IP Used</td>';
+ echo'</tr>';
+
+$sql_recent = "SELECT m.id, m.time, g.name AS gamename, m.mapfile, INET_NTOA(p.ip) AS ip FROM uts_match m, uts_player p, uts_games g
+WHERE p.pid = '$pid' AND m.id = p.matchid AND m.gid = g.id ORDER BY time DESC LIMIT 0,50";
+$q_recent = mysql_query($sql_recent) or die(mysql_error());
+while ($r_recent = mysql_fetch_array($q_recent)) {
+
+ $r_time = mdate($r_recent[time]);
+ $r_mapfile = un_ut($r_recent[mapfile]);
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><a class="darkid" href="./?p=match&amp;mid='.$r_recent[id].'">'.$r_recent[id].'</a></td>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=match&amp;mid='.$r_recent[id].'">'.$r_time.'</a></td>
+ <td class="grey" align="center">'.$r_recent[gamename].'</td>
+ <td class="grey" align="center">'.$r_mapfile.'</td>';
+ if (isset($is_admin) and $is_admin) echo '<td class="grey" align="center">'. $r_recent[ip].'</td>';
+
+ echo '</tr>';
+}
+
+echo'
+</tbody></table>
+';
+?>
diff --git a/html/pages/players_search.php b/html/pages/players_search.php
new file mode 100755
index 0000000..1791393
--- /dev/null
+++ b/html/pages/players_search.php
@@ -0,0 +1,83 @@
+<?php
+
+function InvertSort($curr_field, $filter, $sort) {
+ if ($curr_field != $filter) return(($curr_field == "name") ? "ASC" : "DESC");
+ if ($sort == 'ASC') return('DESC');
+ return('ASC');
+}
+
+function SortPic($curr_field, $filter, $sort) {
+ if ($curr_field != $filter) return;
+ $fname = 'images/s_'. strtolower($sort) .'.png';
+ if (!file_exists($fname)) return;
+ return('&nbsp;<img src="'. $fname .'" border="0" width="11" height="9" alt="" title="('.strtolower($sort).'ending)">');
+}
+
+// Get filter and set sorting
+$playername = my_stripslashes($_REQUEST[name]);
+$playersearch = my_addslashes($_REQUEST[name]);
+$filter = my_addslashes($_GET[filter]);
+$sort = my_addslashes($_GET[sort]);
+
+IF (empty($filter) or (!in_array(strtolower($filter), array("name", "games", "gamescore", "frags", "kills", "deaths", "suicides", "eff", "accuracy", "ttl", "gametime")))) {
+ $filter = "name";
+}
+
+if (empty($sort) or ($sort != 'ASC' and $sort != 'DESC')) $sort = ($filter == "name") ? "ASC" : "DESC";
+
+echo'
+<form NAME="playersearch" METHOD="post" ACTION="./?p=psearch">
+<div class="opnote">* Click headings to change Sorting *</div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="11" align="center">Player Search List</td>
+ </tr>
+ <tr>
+ <td class = "smheading" colspan = "12" ALIGN="center">Name Search:
+ <input TYPE="text" NAME="name" MAXLENGTH="35" SIZE="20" CLASS="searchform" VALUE="'.htmlentities($playername).'">
+ <input TYPE="submit" NAME="Default" VALUE="Search" CLASS="searchformb"></td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="150"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=name&amp;sort='.InvertSort('name', $filter, $sort).'">Player Name</a>'.SortPic('name', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=games&amp;sort='.InvertSort('games', $filter, $sort).'">Matches</a>'.SortPic('games', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=gamescore&amp;sort='.InvertSort('gamescore', $filter, $sort).'">Score</a>'.SortPic('gamescore', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=frags&amp;sort='.InvertSort('frags', $filter, $sort).'">Frags</a>'.SortPic('frags', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=kills&amp;sort='.InvertSort('kills', $filter, $sort).'">Kills</a>'.SortPic('kills', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=deaths&amp;sort='.InvertSort('deaths', $filter, $sort).'">Deaths</a>'.SortPic('deaths', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="50"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=suicides&amp;sort='.InvertSort('suicides', $filter, $sort).'">Suicides</a>'.SortPic('suicides', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=eff&amp;sort='.InvertSort('eff', $filter, $sort).'">Eff.</a>'.SortPic('eff', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=accuracy&amp;sort='.InvertSort('accuracy', $filter, $sort).'">Acc.</a>'.SortPic('accuracy', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=ttl&amp;sort='.InvertSort('ttl', $filter, $sort).'">TTL</a>'.SortPic('ttl', $filter, $sort).'</td>
+ <td class="smheading" align="center" width="45"><a class="smheading" href="./?p=psearch&amp;name='.urlencode($playername).'&amp;filter=gametime&amp;sort='.InvertSort('gametime', $filter, $sort).'">Hours</a>'.SortPic('gametime', $filter, $sort).'</td>
+ </tr>';
+
+$sql_plist = "SELECT pi.name AS name, pi.country AS country, p.pid, COUNT(p.id) AS games, SUM(p.gamescore) as gamescore, SUM(p.frags) AS frags, SUM(p.kills) AS kills,
+SUM(p.deaths) AS deaths, SUM(p.suicides) as suicides, AVG(p.eff) AS eff, AVG(p.accuracy) AS accuracy, AVG(p.ttl) AS ttl, SUM(gametime) as gametime
+FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.name LIKE '%".$playersearch."%' AND pi.banned <> 'Y' GROUP BY name ORDER BY $filter $sort";
+
+$q_plist = mysql_query($sql_plist) or die(mysql_error());
+while ($r_plist = mysql_fetch_array($q_plist)) {
+
+ $gametime = sec2hour($r_plist[gametime]);
+ $eff = get_dp($r_plist[eff]);
+ $acc = get_dp($r_plist[accuracy]);
+ $ttl = GetMinutes($r_plist[ttl]);
+
+ echo'
+ <tr>
+ <td nowrap class="dark" align="left"><a class="darkhuman" href="./?p=pinfo&amp;pid='.$r_plist['pid'].'">'.FormatPlayerName($r_plist[country], $r_plist['pid'], $r_plist[name]).'</a></td>
+ <td class="grey" align="center">'.$r_plist[games].'</td>
+ <td class="grey" align="center">'.$r_plist[gamescore].'</td>
+ <td class="grey" align="center">'.$r_plist[frags].'</td>
+ <td class="grey" align="center">'.$r_plist[kills].'</td>
+ <td class="grey" align="center">'.$r_plist[deaths].'</td>
+ <td class="grey" align="center">'.$r_plist[suicides].'</td>
+ <td class="grey" align="center">'.$eff.'</td>
+ <td class="grey" align="center">'.$acc.'</td>
+ <td class="grey" align="center">'.$ttl.'</td>
+ <td class="grey" align="center">'.$gametime.'</td>
+ </tr>';
+}
+echo'
+</tbody></table></form>';
+?> \ No newline at end of file
diff --git a/html/pages/rank.php b/html/pages/rank.php
new file mode 100755
index 0000000..6eacca0
--- /dev/null
+++ b/html/pages/rank.php
@@ -0,0 +1,56 @@
+<?php
+$sql_rgame = "SELECT DISTINCT(p.gid), g.name FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id ORDER BY g.name ASC";
+$q_rgame = mysql_query($sql_rgame) or die(mysql_error());
+while ($r_rgame = mysql_fetch_array($q_rgame)) {
+
+ echo'
+ <table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="4" align="center">Top 10 '.$r_rgame['name'].' Players</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="75">N&deg;</td>
+ <td class="smheading" align="center" width="150">Player Name</td>
+ <td class="smheading" align="center" width="75">Rank</td>
+ <td class="smheadingx" align="center" width="75">Matches</td>
+ </tr>
+ ';
+
+ $ranking = 0;
+
+ $sql_rplayer = "SELECT pi.id AS pid, pi.name, pi.country, r.rank, r.prevrank, r.matches FROM uts_rank AS r, uts_pinfo AS pi WHERE r.pid = pi.id AND r.gid = '$r_rgame[gid]' AND pi.banned <> 'Y' ORDER BY r.rank DESC LIMIT 0,10";
+ $q_rplayer = mysql_query($sql_rplayer) or die(mysql_error());
+ if (mysql_num_rows($q_rplayer) == 0) {
+ echo '
+ <tr>
+ <td class="grey" align="center" colspan = "4">No players entered the rankings yet.</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" colspan="4">&nbsp;</td>
+ </tr>
+ </tbody></table><br>';
+
+ }
+ else {
+ while ($r_rplayer = mysql_fetch_array($q_rplayer)) {
+
+ $ranking++;
+ $myurl = urlencode($r_rplayer[name]);
+
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$ranking.'</td>
+ <td nowrap class="dark" align="left"><a class="darkhuman" href="./?p=pinfo&amp;pid='.$r_rplayer[pid].'">'.FlagImage($r_rplayer[country]).' '.htmlspecialchars($r_rplayer[name], ENT_QUOTES) .' '. RankMovement($r_rplayer['rank'] - $r_rplayer['prevrank']).'</a></td>
+ <td class="dark" align="center">'.get_dp($r_rplayer[rank]).'</td>
+ <td class="grey" align="center">'.$r_rplayer[matches].'</td>
+ </tr>';
+ }
+ echo'
+ <tr>
+ <td class="smheading" align="center" colspan="4"><a href="./?p=ext_rank&amp;gid='.$r_rgame[gid].'">Click Here To See All The Rankings</a></td>
+ </tr>
+ </tbody></table><br>';
+ }
+}
+?> \ No newline at end of file
diff --git a/html/pages/rank_extended.php b/html/pages/rank_extended.php
new file mode 100755
index 0000000..b41baf2
--- /dev/null
+++ b/html/pages/rank_extended.php
@@ -0,0 +1,75 @@
+<?php
+$gid = my_addslashes($_GET['gid']);
+
+$r_gamename = small_query("SELECT name FROM uts_games WHERE id = '$gid'");
+$gamename = $r_gamename['name'];
+
+$r_pcount = small_query("SELECT COUNT(*) as pcount FROM uts_rank WHERE gid= '$gid'");
+$pcount = $r_pcount['pcount'];
+
+$ecount = $pcount/25;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = $_GET["page"];
+IF ($cpage == "") { $cpage = "0"; }
+$qpage = $cpage*25;
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=ext_rank&amp;gid=$gid&amp;page=$ppage\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=ext_rank&amp;gid=$gid&amp;page=$npage\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=ext_rank&amp;gid=$gid&amp;page=$fpage\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=ext_rank&amp;gid=$gid&amp;page=$lpage\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+echo'
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="4" align="center">'.$gamename.' Ranking Players</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="75">N&deg;</td>
+ <td class="smheading" align="center" width="150">Player Name</td>
+ <td class="smheading" align="center" width="75">Rank</td>
+ <td class="smheadingx" align="center" width="75">Matches</td>
+ </tr>';
+
+ $ranking = $qpage;
+
+ $sql_rplayer = "SELECT pi.name, pi.country, r.rank, r.prevrank, r.matches, r.pid FROM uts_rank AS r, uts_pinfo AS pi WHERE r.pid = pi.id AND r.gid = '$gid' AND pi.banned <> 'Y' ORDER BY rank DESC LIMIT $qpage,25";
+ $q_rplayer = mysql_query($sql_rplayer) or die(mysql_error());
+ while ($r_rplayer = mysql_fetch_array($q_rplayer)) {
+
+ $ranking++;
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$ranking.'</td>
+ <td nowrap class="dark" align="left"><a class="darkhuman" href="./?p=pinfo&amp;pid='.$r_rplayer['pid'].'">'.FlagImage($r_rplayer[country]).' '.htmlspecialchars($r_rplayer[name]) .' '. RankMovement($r_rplayer['rank'] - $r_rplayer['prevrank']) .'</a></td>
+ <td class="dark" align="center">'.get_dp($r_rplayer[rank]).'</td>
+ <td class="grey" align="center">'.$r_rplayer[matches].'</td>
+ </tr>';
+
+}
+echo'
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>';
+?> \ No newline at end of file
diff --git a/html/pages/recent.php b/html/pages/recent.php
new file mode 100755
index 0000000..92fafb7
--- /dev/null
+++ b/html/pages/recent.php
@@ -0,0 +1,137 @@
+<?php
+// Firstly we need to work out First Last Next Prev pages
+$where = ' ';
+$year = !empty($_REQUEST['year']) ? my_addslashes(sprintf("%04d", $_REQUEST['year'])) : 0;
+$month = !empty($_REQUEST['month']) ? my_addslashes(sprintf("%02d", $_REQUEST['month'])) : 0;
+$day = !empty($_REQUEST['day']) ? my_addslashes(sprintf("%02d", $_REQUEST['day'])) : 0;
+$gid = !empty($_REQUEST['gid']) ? my_addslashes($_REQUEST['gid']) : 0;
+
+if (!empty($year) and empty($month) and empty($day)) $where .= " AND m.time LIKE '$year%'";
+if (!empty($year) and !empty($month) and empty($day)) $where .= " AND m.time LIKE '$year$month%'";
+if (!empty($year) and !empty($month) and !empty($day)) $where .= " AND m.time LIKE '$year$month$day%'";
+if (!empty($gid)) $where .= " AND m.gid = '$gid'";
+$r_mcount = small_query("SELECT COUNT(*) AS result FROM uts_match m WHERE 1 $where");
+$mcount = $r_mcount['result'];
+
+$ecount = $mcount/25;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = preg_replace('/\D/', '', $_REQUEST["page"]);
+IF ($cpage == "") { $cpage = "0"; }
+$qpage = $cpage*25;
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=recent&amp;year=$year&amp;month=$month&amp;day=$day&amp;gid=$gid&amp;page=$ppage\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=recent&amp;year=$year&amp;month=$month&amp;day=$day&amp;gid=$gid&amp;page=$npage\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=recent&amp;year=$year&amp;month=$month&amp;day=$day&amp;gid=$gid&amp;page=$fpage\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=recent&amp;year=$year&amp;month=$month&amp;day=$day&amp;gid=$gid&amp;page=$lpage\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+echo '
+<form action="'.$_SERVER['PHP_SELF'].'" method="GET">
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<table width="720" class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="7" align="center">Unreal Tournament Match List</td>
+ </tr>';
+
+echo '
+ <tr>
+ <td class = "smheading" colspan = "7" align = "center">';
+echo '<input type="hidden" name="p" value="'.$_REQUEST['p'].'">';
+echo '<table width="700" class="searchform" border="0" cellpadding="1" cellspacing="1">';
+echo '<tr><td><strong>Filter:</strong></td>';
+//echo '<td>Date:</td>';
+echo '<td><select class="searchform" name="year">';
+echo '<option value="0">*</option>';
+for($i = date('Y');$i >= date("Y") - 5; $i--) {
+ $selected = ($year == $i) ? 'selected' : '';
+ echo '<option '.$selected.' value="'.$i.'">'.$i.'</option>';
+}
+echo '</select>';
+echo '&nbsp;';
+echo '<select class="searchform" name="month">';
+echo '<option value="0">*</option>';
+$monthname = array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
+for($i = 1;$i <= 12; $i++) {
+ $selected = ($month == $i) ? 'selected' : '';
+ echo '<option '.$selected.' value="'.$i.'">'.$monthname[$i].'</option>';
+}
+echo '</select>';
+echo '&nbsp;';
+echo '<select class="searchform" name="day">';
+echo '<option value="0">*</option>';
+for($i = 1;$i <= 31; $i++) {
+ $selected = ($day == $i) ? 'selected' : '';
+ echo '<option '.$selected.' value="'.$i.'">'.$i.'</option>';
+}
+echo '</select></td>';
+
+echo '<td>Gametype:</td>';
+echo '<td><select class="searchform" name="gid">';
+echo '<option value="0">*</option>';
+$sql_game = "SELECT DISTINCT(p.gid), g.name FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id ORDER BY g.name ASC";
+$q_game = mysql_query($sql_game) or die(mysql_error());
+while ($r_game = mysql_fetch_array($q_game)) {
+ $selected = ($r_game['gid'] == $gid) ? 'selected' : '';
+ echo '<option '.$selected.' value="'.$r_game['gid'].'">'. $r_game['name'] .'</option>';
+}
+echo '</select></td>';
+echo '<td><input class="searchform" type="Submit" name="filter" value="Apply"></td>';
+echo '</tr></table>';
+echo '</td></tr>';
+
+echo '
+ <tr>
+ <td class="smheading" align="center" width="80">Match ID</td>
+ <td class="smheading" align="center" width="220">Date/Time</td>
+ <td class="smheading" align="center" width="140">Match Type</td>
+ <td class="smheading" align="center">Map</td>
+ <td class="smheading" align="center" width="60">Time</td>
+ <td class="smheading" align="center" width="60">Players</td>
+ </tr>';
+
+$sql_recent = "SELECT m.id, m.time, g.name AS gamename, m.mapfile, m.gametime, (SELECT count(p.id) FROM uts_player AS p WHERE m.id = p.matchid) as players FROM uts_match AS m, uts_games AS g WHERE g.id = m.gid $where ORDER BY m.time DESC LIMIT $qpage,25";
+$q_recent = mysql_query($sql_recent) or die(mysql_error());
+while ($r_recent = mysql_fetch_array($q_recent)) {
+
+ $r_time = mdate($r_recent[time]);
+ $r_mapfile = un_ut($r_recent[mapfile]);
+ $r_gametime = GetMinutes($r_recent[gametime]);
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><a class="darkid" href="./?p=match&amp;mid='.$r_recent[id].'">'.$r_recent[id].'</a></td>
+ <td nowrap class="dark" align="center"><a class="darkhuman" href="./?p=match&amp;mid='.$r_recent[id].'">'.$r_time.'</a></td>
+ <td nowrap class="grey" align="center">'.$r_recent[gamename].'</td>
+ <td class="grey" align="center">'.$r_mapfile.'</td>
+ <td class="grey" align="center">'.$r_gametime.'</td>
+ <td class="grey" align="center">'.$r_recent[players].'</td>
+ </tr>';
+}
+
+
+
+echo '
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+</form>';
+?> \ No newline at end of file
diff --git a/html/pages/report.php b/html/pages/report.php
new file mode 100755
index 0000000..946b847
--- /dev/null
+++ b/html/pages/report.php
@@ -0,0 +1,24 @@
+<?php
+$id = preg_replace('/\D/', '', $_GET["id"]);
+$wid = preg_replace('/\D/', '', $_GET["wid"]);
+$stage = my_addslashes($_GET["stage"]);
+$oururl = $_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
+$oururl = str_replace("index.php", "", $oururl);
+$rtype = my_addslashes($_GET["rtype"]);
+
+if (empty($id)) {
+ die("No ID given");
+}
+
+IF ($rtype == "clanbase") {
+ include("pages/report_cb.php");
+}
+
+IF ($rtype == "bbcode") {
+ include("pages/report/bbcode.php");
+}
+
+IF ($rtype == "clanbase" && $stage == "generate") {
+ include("pages/report/clanbase.php");
+}
+?> \ No newline at end of file
diff --git a/html/pages/report/bbcode.php b/html/pages/report/bbcode.php
new file mode 100755
index 0000000..e07aa91
--- /dev/null
+++ b/html/pages/report/bbcode.php
@@ -0,0 +1,424 @@
+<?php
+echo'<textarea rows="50" name="cbrep" cols="75">';
+
+$id = preg_replace('/\D/', '', $_GET[id]);
+
+if (empty($id)) {
+ die("No ID given");
+}
+
+$sql_s = small_query("SELECT mapfile, gametime FROM uts_match WHERE id = '$id'");
+
+$map = str_replace(".unr", "", "$sql_s[mapfile]");
+$mappic = strtolower("images/maps/".$map.".jpg");
+$actgamelength = $sql_s[gametime];
+
+// Lets work out what kind of game this was from the scores
+
+$q_score = small_query("SELECT t0score, t1score FROM uts_match WHERE id = $id");
+$t0score = $q_score[t0score];
+$t1score = $q_score[t1score];
+
+$teama = "Red Team";
+$teamb = "Blue Team";
+
+IF ($t0score > $t1score) {
+
+ $twin = 0;
+ $twin_team = $teama;
+ $twin_score = $t0score;
+
+ $tlose = 1;
+ $tlose_team = $teamb;
+ $tdraw = "0";
+
+ $tdiff = $t0score+$t1score;
+
+ IF ($tdiff <= 3) {
+ $reptype = "low";
+ } elseIF ($tdiff >= 9) {
+ $reptype = "high";
+ } else {
+ $reptype = "medium";
+ }
+
+} elseIF ($t0score < $t1score) {
+ $twin = 1;
+ $twin_team = $teamb;
+ $twin_score = $t1score;
+
+ $tlose = 0;
+ $tlose_team = $teama;
+ $tdraw = "0";
+
+ $tdiff = $t1score+$t0score;
+
+ IF ($tdiff <= 2) {
+ $reptype = "low";
+ } elseIF ($tdiff >= 9) {
+ $reptype = "high";
+ } else {
+ $reptype = "medium";
+ }
+
+} else {
+ $twin = "0";
+ $tlose = "1";
+ $tdraw = "1";
+
+ $tdiff = $t1score+$t0score;
+ $twin_team = $teama;;
+ $tlose_team = $teamb;
+
+ IF ($tdiff <= 4) {
+ $reptype = "low";
+ } elseIF ($tdiff >= 10) {
+ $reptype = "high";
+ } else {
+ $reptype = "medium";
+ }
+}
+
+// Queries used within the report
+
+// First blood
+$q_fblood = small_query("SELECT firstblood FROM uts_match WHERE id = $id");
+
+// Player id of first blood
+$t_fblood = small_query("SELECT name FROM uts_pinfo WHERE id = '".$q_fblood[firstblood]."'");
+$t_fbloodid = small_query("SELECT id FROM uts_player WHERE pid = '".$q_fblood[firstblood]."' AND matchid = $id");
+$r_fbloodid = $t_fbloodid[id];
+$r_fbloodname = $t_fblood[name];
+
+// Belt count
+$q_t0bcount = small_query("SELECT SUM(pu_belt) AS bcount FROM uts_player WHERE matchid = $id AND team = 0 AND pu_belt >0");
+$q_t1bcount = small_query("SELECT SUM(pu_belt) AS bcount FROM uts_player WHERE matchid = $id AND team = 1 AND pu_belt >0");
+
+// Amp count
+$q_t0acount = small_query("SELECT SUM(pu_amp) AS acount FROM uts_player WHERE matchid = $id AND team = 0 AND pu_amp >0");
+$q_t1acount = small_query("SELECT SUM(pu_amp) AS acount FROM uts_player WHERE matchid = $id AND team = 1 AND pu_amp >0");
+
+// Cap count
+$q_capsa = small_query("SELECT pi.name, SUM(p.flag_capture) AS flag_caps FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 AND flag_capture >= 1 GROUP BY name");
+$q_capsb = small_query("SELECT pi.name, SUM(p.flag_capture) AS flag_caps FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 AND flag_capture >= 1 GROUP BY name");
+
+// Most Flag Grabs (W)
+$q_topgrab = small_query("SELECT p.id, pi.name, p.flag_taken FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_taken DESC LIMIT 0,1");
+$r_topgrabid = $q_topgrab[id];
+$r_topgrabname = $q_topgrab[name];
+
+// Most Flag Grabs (L)
+$q_topgrabl = small_query("SELECT p.id, pi.name, p.flag_taken FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_taken DESC LIMIT 0,1");
+$r_topgrabidl = $q_topgrabl[id];
+$r_topgrabnamel = $q_topgrabl[name];
+
+// Most Flag Grabs (D)
+$q_topgrabd = small_query("SELECT p.id, pi.name, p.flag_taken, team FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY flag_taken DESC LIMIT 0,1");
+$r_topgrabidd = $q_topgrabd[id];
+$r_topgrabnamed = $q_topgrabd[name];
+
+IF ($redteam == $q_topgrabd[team]) {
+ $r_topgrabteamd = $warinfo[0][2];
+ $r_topgrabteamdid = $warinfo[0][1];
+} else {
+ $r_topgrabteamd = $warinfo[1][2];
+ $r_topgrabteamdid = $warinfo[1][1];
+}
+
+
+// Most Flag Covers (W)
+$q_topcover = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverid = $q_topcover[id];
+$r_topcovername = $q_topcover[name];
+
+// Most Flag Covers (L)
+$q_topcoverl = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverlid = $q_topcoverl[id];
+$r_topcoverlname = $q_topcoverl[name];
+
+// Most Flag Covers (R)
+$q_topcoverr = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverrid = $q_topcoverr[id];
+$r_topcoverrname = $q_topcoverr[name];
+
+// Most Flag Covers (B)
+$q_topcoverb = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverbid = $q_topcoverb[id];
+$r_topcoverbname = $q_topcoverb[name];
+
+// Most Flag Assists (D)
+$q_topassistd = small_query("SELECT p.id, pi.name, p.flag_assist, team FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topassistdid = $q_topassistd[id];
+$r_topassistdname = $q_topassistd[name];
+
+IF ($q_topassistd[team] == $redteam) {
+ $r_topassistdteam = $teamb;
+} else {
+ $r_topassistdteam = $teama;
+}
+
+// Most Flag Seals (W)
+$q_topseal = small_query("SELECT p.id, pi.name, p.flag_seal FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_seal DESC LIMIT 0,1");
+$r_topsealid = $q_topseal[id];
+$r_topsealname = $q_topseal[name];
+
+// Most Flag Seals (L)
+$q_topseall = small_query("SELECT p.id, pi.name, p.flag_seal FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_seal DESC LIMIT 0,1");
+$r_topseallid = $q_topseall[id];
+$r_topseallname = $q_topseall[name];
+
+// Top Capper (W)
+$q_topcap = small_query("SELECT p.id, pi.name, p.flag_capture FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_capture DESC LIMIT 0,1");
+$r_topcapid = $q_topcap[id];
+$r_topcapname = $q_topcap[name];
+
+// Top Capper (D)
+$q_topcapd = small_query("SELECT p.id, pi.name, p.flag_capture FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY flag_capture DESC LIMIT 0,1");
+$r_topcapdid = $q_topcap[id];
+$r_topcapdname = $q_topcap[name];
+
+// Most Flag Kills (L)
+$q_topdefl = small_query("SELECT p.id, pi.name, p.flag_kill FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_kill DESC LIMIT 0,1");
+$r_topdeflid = $q_topdefl[id];
+$r_topdeflname = $q_topdefl[name];
+
+// Most Flag Kills (W)
+$q_topfkill = small_query("SELECT p.id, pi.name, p.flag_kill FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_kill DESC LIMIT 0,1");
+$r_topfkillid = $q_topfkill[id];
+$r_topfkillname = $q_topfkill[name];
+
+// 2nd Most Flag Kills (W)
+$q_topfkill2 = small_query("SELECT p.id, pi.name, p.flag_kill FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_kill DESC LIMIT 1,1");
+$r_topfkillid2 = $q_topfkill2[id];
+$r_topfkillname2 = $q_topfkill2[name];
+
+// Most Frags (D)
+$q_topfrag = small_query("SELECT p.id, pi.name, p.frags FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY frags DESC LIMIT 0,1");
+$r_topfragid = $q_topfrag[id];
+$r_topfragname = $q_topfrag[name];
+
+// Most Frags (W)
+$q_topfragw = small_query("SELECT p.id, pi.name, p.frags FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY frags DESC LIMIT 0,1");
+$r_topfragwid = $q_topfkill2[id];
+$r_topfragwname = $q_topfkill2[name];
+
+// Most Deaths (L)
+$q_topdeath = small_query("SELECT p.id, pi.name, p.deaths FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY deaths DESC LIMIT 0,1");
+$r_topdeathid = $q_topdeath[id];
+$r_topdeathname = $q_topdeath[name];
+
+// Player of the Match
+$q_topstats = small_query("SELECT p.id, pi.name, p.rank AS prank FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id GROUP BY id, name ORDER BY prank DESC LIMIT 0,1");
+$r_topstatsid = $q_topstats[id];
+$r_topstatsname = $q_topstats[name];
+
+
+// Write the top of the report (non game specific)
+
+//Player List for Red Team
+echo'[b]'.$teama.' Lineup[/b]
+';
+
+$sql_rplayer = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 ORDER BY pi.name ASC";
+$q_rplayer = mysql_query($sql_rplayer);
+while ($r_rplayer = mysql_fetch_array($q_rplayer)) {
+
+ echo''.$r_rplayer[name].'
+';
+}
+
+//Player List for Blue Team
+
+echo'
+[b]'.$teamb.' Lineup[/b]
+';
+
+$sql_bplayer = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 ORDER BY pi.name ASC";
+$q_bplayer = mysql_query($sql_bplayer);
+while ($r_bplayer = mysql_fetch_array($q_bplayer)) {
+
+ echo''.$r_bplayer[name].'
+';
+}
+
+// Firstblood and Pickup stats
+
+echo '
+[b]Statistics[/b]
+First Blood: '.$r_fbloodname.'
+'.$teama.' Belts: '.$q_t0bcount[bcount].'
+'.$teamb.' Belts: '.$q_t1bcount[bcount].'
+'.$teama.' Amps: '.$q_t0acount[acount].'
+'.$teamb.' Amps: '.$q_t1acount[acount].'
+
+[b]Match Report[/b]
+';
+
+
+// Low Scores and a Draw
+IF ($reptype == "low" && $tdraw == 1) {
+echo'Neither team were better this map, scorline is proof of this.
+[cl]'.$r_topgrabteamdid.','.$r_topgrabteamd.'[/cl] had the most chances to cap with '.$r_topgrabnamed.' taking the flag '.$q_topgrabd[flag_taken].' times, but unfortuantely couldnt cap as many as he took.
+
+Big credit to both teams defences; ';
+
+IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo ''.$r_topdeflname.' defended the flag and got '.$q_topdefl[flag_kill].' flagkills while '.$r_topfkillname.' also had a pretty nice defensive game killing '.$q_topfkill[flag_kill].' flag carriers.
+ ';
+} else {
+ echo ''.$r_topfkillname.' defended the flag and got '.$q_topfkill[flag_kill].' flagkills while '.$r_topdeflname.' also had a pretty nice defensive game killing '.$q_topdefl[flag_kill].' flag carriers.
+ ';
+}
+
+echo'Seems the attackers had a frustrating game on this map, credit to ';
+
+IF ($q_topcover[flag_cover] >= $q_topcoverl[flag_cover]) {
+ echo ''.$r_topcovername.' for covering his flag carrier '.$q_topcover[flag_cover].' times and also '.$r_topcoverlname.' for covering '.$q_topcoverl[flag_cover].' times.
+ ';
+} else {
+ echo ''.$r_topcoverlname.' for covering his flag carrier '.$q_topcoverl[flag_cover].' times and also '.$r_topcovername.' for covering '.$q_topcover[flag_cover].' times.
+ ';
+}
+
+echo'Well done '.$r_topfragname.' for ensuring a tight scoreline with '.$q_topfrag[frags].' frags.
+If this map would be played again between these two clans, we might see a change of strategy in the attacking play, but the defenders were strong on both sides this time.
+
+Good game.
+Stats player of the map was '.$r_topstatsname.' with '.$q_topstats[prank].' stat points.
+Well played both teams.';
+}
+
+// Medium Scores and a Draw
+IF ($reptype == "medium" && $tdraw == 1) {
+echo'An excitingly close game with neither side having the upper hand.
+Both clans teamplay was about even and the result shows that it could have easily gone either way.
+
+Capping opportunities came along time after time, with [cl]'.$r_topgrabid.','.$r_topgrabname.'[/cl] taking the flag '.$q_topgrab[flag_taken].' times and at the other end [cl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/cl] taking the flag '.$q_topgrabl[flag_taken].' times.
+
+Help was at hand for the flag runners with '.$teama.'\'s '.$r_topcoverrname.' covering '.$q_topcoverr[flag_cover].' times and '.$r_topcoverbname.' covering '.$q_topcoverb[flag_cover].' times for '.$teamb.'.
+
+Big credit to both teams defences; ';
+
+IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo ''.$r_topdeflname.' defended the flag and got '.$q_topdefl[flag_kill].' flagkills while '.$r_topfkillname.' also had a pretty nice defensive game killing '.$q_topfkill[flag_kill].' flag carriers.
+ ';
+} else {
+ echo ''.$r_topfkillname.' defended the flag and got '.$q_topfkill[flag_kill].' flagkills while '.$r_topdeflname.' also had a pretty nice defensive game killing '.$q_topdefl[flag_kill].' flag carriers.
+ ';
+}
+
+echo'Both teams showed great teamplay and skill and the scoreline represents this.
+Two even lineups for this map.
+
+Well done '.$r_topfragname.' who had '.$q_topfrag[frags].' frags.
+
+Good game.
+Stats player of the map was '.$r_topstatsname.' with '.$q_topstats[prank].' stat points.
+Well played both teams.';
+}
+
+// High Scores and a Draw
+IF ($reptype == "high" && $tdraw == 1) {
+echo'A very very exciting, close CTF game Im sure both clans will agree.
+This high scoring draw proves that '.$teama.' and '.$teamb.' were evenly matched on this map.
+Teamplay and strategy enabled both teams to cap quite a few times.
+Well done to both teams attackers especially '.$r_topcapdname.' who capped '.$q_topcapd[flag_capture].' times.
+
+Capping opportunities came along time after time, with [cl]'.$r_topgrabid.','.$r_topgrabname.'[/cl] taking the flag '.$q_topgrab[flag_taken].' times and at the other end [cl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/cl] taking the flag '.$q_topgrabl[flag_taken].' times.
+
+Help was at hand for the flag runners with '.$teama.'\'s '.$r_topcoverrname.' covering '.$q_topcoverr[flag_cover].' times and '.$r_topcoverbname.' covering '.$q_topcoverb[flag_cover].' times for '.$teamb.'.
+
+Although the defenders probably didnt have as good a game as the attackers on this map, credit should be awarded to ';
+
+IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo ''.$r_topdeflname.' for killing '.$q_topdefl[flag_kill].' flag carriers and also to ';
+} else {
+ echo ''.$r_topfkillname.' for killing '.$q_topfkill[flag_kill].' flag carriers and also to ';
+}
+
+IF ($q_topseall[flag_seal] >= $q_topseal[flag_seal]) {
+ echo ''.$r_topseallname.' for sealing the base '.$q_topseall[flag_seal].' times for his flag carrier to cap.
+ <br >';
+} else {
+ echo ''.$r_topsealname.' for sealing the base '.$q_topseal[flag_seal].' times for his flag carrier to cap.
+ <br >';
+}
+
+echo' '.$r_topassistdname.' helped '.$r_topassistdteam.' get as many caps as they did by assisting '.$q_topassistd[flag_assist].' times in their caps.
+This shows great teamplay and cover, well played.
+
+Both teams showed great teamplay and skill and the scoreline represents this.
+Well done '.$r_topfragname.' who had '.$q_topfrag[frags].' frags.
+
+Good game.
+Stats player of the map was '.$r_topstatsname.' with '.$q_topstats[prank].' stat points.
+Well played both teams.';
+}
+
+// Low Scores and not a Draw
+IF ($reptype == "low" && $tdraw == 0) {
+echo 'Not very many caps in this close game, but '.$twin_team.' emerge victorious.
+
+Big credit to both teams defences; ';
+
+IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo ''.$r_topdeflname.' defended the flag and got '.$q_topdefl[flag_kill].' flagkills while '.$r_topfkillname.' also had a pretty nice defensive game killing '.$q_topfkill[flag_kill].' flag carriers.
+ ';
+} else {
+ echo ''.$r_topfkillname.' defended the flag and got '.$q_topfkill[flag_kill].' flagkills while '.$r_topdeflname.' also had a pretty nice defensive game killing '.$q_topdefl[flag_kill].' flag carriers.
+ ';
+}
+
+echo 'Seems the attackers had a frustrating game on this map, especially [cl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/cl] who took the flag '.$q_topgrabl[flag_taken].' and still lost the game :(
+
+Suportive play was made by '.$r_topcoverlname.' having '.$q_topcoverl[flag_cover].' covers, but even with covering play, the majority of the flags got returned and the game ended with '.$tlose_team.' losing out.
+
+Well done to '.$r_topcapname.' for capping '.$q_topcap[flag_capture].'.
+On other days the outcome could have been different.
+
+Good game and congratulations '.$twin_team.'.
+Stats player of the map was '.$r_topstatsname.' with '.$q_topstats[prank].' stat points.
+Well played both teams.';
+}
+
+// Medium Scores and not a Draw
+IF ($reptype == "medium" && $tdraw == 0) {
+echo 'A nice game of Capture the Flag took place this map with both teams trying hard to get flags back but only occasionally succeeding.
+
+'.$twin_team.' however managed to succesfully cap more than '.$tlose_team.' with big help from '.$r_topcapname.' who capped '.$q_topcap[flag_capture].'.
+'.$r_topgrabname.' made it hard for the '.$tlose_team.' defenders taking the flag a total of '.$q_topgrab[flag_taken].' times.
+Not to say that the defence was bad at all, '.$r_topdeflname.' got '.$q_topdefl[flag_kill].' flag kills and this made attacking hard work for '.$twin_team.'.
+
+Sealing off the base for '.$twin_team.' was some nice defence including '.$r_topsealname.' who sealed the base '.$q_topseal[flag_seal].' times.
+Covering the flag carrier for '.$twin_team.' mostly was '.$r_topcovername.' with '.$q_topcover[flag_cover].' covers.
+
+Attacking in vain at the other end of the map was '.$r_topgrabnamel.' who managed to take the '.$twin_team.' flag '.$q_topgrabl[flag_taken].' times, but unfortunately was unable to match the '.$twin_score.' caps made by '.$twin_team.'.
+'.$r_topgrabnamel.' was also up against some heavy defence including '.$r_topfkillname.' with '.$q_topfkill[flag_kill].' flag kills and '.$r_topfkillname2.' with '.$q_topfkill2[flag_kill].' flag kills.
+
+Good game and congratulations '.$twin_team.'.
+Stats player of the map was '.$r_topstatsname.' with '.$q_topstats[prank].' stat points.
+Well played both teams.';
+}
+
+// High Scores and not a Draw
+IF ($reptype == "high" && $tdraw == 0) {
+echo ''.$twin_team.' were victorious thanks to some nice capping by '.$r_topcapname.' who capped '.$q_topcap[flag_capture].' and '.$r_topgrabname.' who took the flag'.$q_topgrab[flag_taken].' times.
+
+'.$r_topcapname.' probably could not have done it without the help of '.$r_topcovername.' who had '.$q_topcover[flag_cover].' covers and '.$r_topsealname.' for sealing the base off '.$q_topseal[flag_seal].' times.
+
+Although the '.$tlose_team.' defenders played well, the '.$q_topdefl[flag_kill].' flag kills by '.$r_topdeflname.' was just not enough to stop the '.$twin_team.' attackers succeeding.
+Extra Credit should be given to '.$r_topfragwname.' for getting '.$q_topwfrag[frags].' frags.
+Some sympathy should be given to '.$r_topdeathname.' who died a whopping '.$q_topdeath[deaths].' times - unlucky!.
+
+All in all, this was a great attacking game for '.$twin_team.', but all players deserve credit for playing well.
+
+Good game and congratulations '.$twin_team.'.
+Stats player of the map was '.$r_topstatsname.' with '.$q_topstats[prank].' stat points.';
+}
+
+echo'
+
+This report was created with UTStats from the following game:
+[url]http://'.$oururl.'?p=match&mid='.$id.'[/url]
+</textarea>';
+?> \ No newline at end of file
diff --git a/html/pages/report/clanbase.php b/html/pages/report/clanbase.php
new file mode 100755
index 0000000..6b7d412
--- /dev/null
+++ b/html/pages/report/clanbase.php
@@ -0,0 +1,530 @@
+<?php
+echo'<textarea rows="50" name="cbrep" cols="75">';
+
+$id = preg_replace('/\D/', '', $_GET[id]);
+
+if (empty($id)) {
+ die("No ID given");
+}
+
+function get_cbid($pid) {
+ $cbid = preg_replace('/\D/', '', $_GET[$pid]);
+ return $cbid;
+}
+$cbid = get_cbid;
+
+function get_cbnick($badtext) {
+ $badstuff = array("[","]");
+ $goodtext = str_replace($badstuff, " ", $badtext);
+ return $goodtext;
+}
+$cbnick = get_cbnick;
+
+$warinfo = get_clans($wid);
+
+$redteam = $_GET["red"];
+
+IF($redteam == $warinfo[0][1]) {
+ $teamaid = $warinfo[0][1];
+ $teambid = $warinfo[1][1];
+ $cbteama = $warinfo[0][2];
+ $cbteamb = $warinfo[1][2];
+ $redteam = 0;
+ $blueteam = 1;
+
+} else {
+ $teamaid = $warinfo[1][1];
+ $teambid = $warinfo[0][1];
+ $cbteama = $warinfo[1][2];
+ $cbteamb = $warinfo[0][2];
+ $redteam = 1;
+ $blueteam = 0;
+}
+
+$teama = str_replace("<img src=", "", $cbteama);
+$teamb = str_replace("<img src=", "", $cbteamb);
+
+list($teama, $teamacup) = split("'", $teama, 3);
+list($teamb, $teambcup) = split("'", $teamb, 3);
+
+$teama = '[cl]'.$teamaid.','.$teama.'[/cl]';
+$teamb = '[cl]'.$teambid.','.$teamb.'[/cl]';
+
+$sql_s = small_query("SELECT mapfile, gametime FROM uts_match WHERE id = '$id'");
+
+$map = str_replace(".unr", "", "$sql_s[mapfile]");
+$mappic = strtolower("images/maps/".$map.".jpg");
+$actgamelength = $sql_s[gametime];
+
+// Lets work out what kind of game this was from the scores
+
+$q_score = small_query("SELECT t0score, t1score FROM uts_match WHERE id = $id");
+$t0score = $q_score[t0score];
+$t1score = $q_score[t1score];
+
+IF ($t0score > $t1score) {
+
+ $twin = 0;
+ $twin_team = $teama;
+ $twin_score = $t0score;
+
+ $tlose = 1;
+ $tlose_team = $teamb;
+ $tdraw = "0";
+
+ $tdiff = $t0score+$t1score;
+
+ IF ($tdiff <= 3) {
+ $reptype = "low";
+ } elseIF ($tdiff >= 9) {
+ $reptype = "high";
+ } else {
+ $reptype = "medium";
+ }
+
+} elseIF ($t0score < $t1score) {
+ $twin = 1;
+ $twin_team = $teamb;
+ $twin_score = $t1score;
+
+ $tlose = 0;
+ $tlose_team = $teama;
+ $tdraw = "0";
+
+ $tdiff = $t1score+$t0score;
+
+ IF ($tdiff <= 2) {
+ $reptype = "low";
+ } elseIF ($tdiff >= 9) {
+ $reptype = "high";
+ } else {
+ $reptype = "medium";
+ }
+
+} else {
+ $twin = "0";
+ $tlose = "1";
+ $tdraw = "1";
+
+ $tdiff = $t1score+$t0score;
+ $twin_team = $teama;
+ $tlose_team = $teamb;
+
+ IF ($tdiff <= 4) {
+ $reptype = "low";
+ } elseIF ($tdiff >= 10) {
+ $reptype = "high";
+ } else {
+ $reptype = "medium";
+ }
+}
+
+// Queries used within the report
+
+// First blood
+$q_fblood = small_query("SELECT firstblood FROM uts_match WHERE id = $id");
+
+// Player id of first blood
+$t_fblood = small_query("SELECT name FROM uts_pinfo WHERE id = '".$q_fblood[firstblood]."'");
+$t_fbloodid = small_query("SELECT id FROM uts_player WHERE pid = '".$q_fblood[firstblood]."' AND matchid = $id");
+$r_fbloodid = $cbid($t_fbloodid[id]);
+$r_fbloodname = $cbnick($t_fblood[name]);
+
+// Belt count
+$q_t0bcount = small_query("SELECT SUM(pu_belt) AS bcount FROM uts_player WHERE matchid = $id AND team = 0 AND pu_belt >0");
+$q_t1bcount = small_query("SELECT SUM(pu_belt) AS bcount FROM uts_player WHERE matchid = $id AND team = 1 AND pu_belt >0");
+
+// Amp count
+$q_t0acount = small_query("SELECT SUM(pu_amp) AS acount FROM uts_player WHERE matchid = $id AND team = 0 AND pu_amp >0");
+$q_t1acount = small_query("SELECT SUM(pu_amp) AS acount FROM uts_player WHERE matchid = $id AND team = 1 AND pu_amp >0");
+
+// Cap count
+$q_capsa = small_query("SELECT pi.name, SUM(p.flag_capture) AS flag_caps FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 AND flag_capture >= 1 GROUP BY name");
+$q_capsb = small_query("SELECT pi.name, SUM(p.flag_capture) AS flag_caps FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 AND flag_capture >= 1 GROUP BY name");
+
+// Most Flag Grabs (W)
+$q_topgrab = small_query("SELECT p.id, pi.name, p.flag_taken FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_taken DESC LIMIT 0,1");
+$r_topgrabid = $cbid($q_topgrab[id]);
+$r_topgrabname = $cbnick($q_topgrab[name]);
+
+// Most Flag Grabs (L)
+$q_topgrabl = small_query("SELECT p.id, pi.name, p.flag_taken FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_taken DESC LIMIT 0,1");
+$r_topgrabidl = $cbid($q_topgrabl[id]);
+$r_topgrabnamel = $cbnick($q_topgrabl[name]);
+
+// Most Flag Grabs (D)
+$q_topgrabd = small_query("SELECT p.id, pi.name, p.flag_taken, team FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY flag_taken DESC LIMIT 0,1");
+$r_topgrabidd = $cbid($q_topgrabd[id]);
+$r_topgrabnamed = $cbnick($q_topgrabd[name]);
+
+IF ($redteam == $q_topgrabd[team]) {
+ $r_topgrabteamd = $warinfo[0][2];
+ $r_topgrabteamdid = $warinfo[0][1];
+} else {
+ $r_topgrabteamd = $warinfo[1][2];
+ $r_topgrabteamdid = $warinfo[1][1];
+}
+
+
+// Most Flag Covers (W)
+$q_topcover = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverid = $cbid($q_topcover[id]);
+$r_topcovername = $cbnick($q_topcover[name]);
+
+// Most Flag Covers (L)
+$q_topcoverl = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverlid = $cbid($q_topcoverl[id]);
+$r_topcoverlname = $cbnick($q_topcoverl[name]);
+
+// Most Flag Covers (R)
+$q_topcoverr = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverrid = $cbid($q_topcoverr[id]);
+$r_topcoverrname = $cbnick($q_topcoverr[name]);
+
+// Most Flag Covers (B)
+$q_topcoverb = small_query("SELECT p.id, pi.name, p.flag_cover FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topcoverbid = $cbid($q_topcoverb[id]);
+$r_topcoverbname = $cbnick($q_topcoverb[name]);
+
+// Most Flag Assists (D)
+$q_topassistd = small_query("SELECT p.id, pi.name, p.flag_assist, team FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY flag_cover DESC LIMIT 0,1");
+$r_topassistdid = $cbid($q_topassistd[id]);
+$r_topassistdname = $cbnick($q_topassistd[name]);
+
+IF ($q_topassistd[team] == $redteam) {
+ $r_topassistdteam = $teamb;
+} else {
+ $r_topassistdteam = $teama;
+}
+
+// Most Flag Seals (W)
+$q_topseal = small_query("SELECT p.id, pi.name, p.flag_seal FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_seal DESC LIMIT 0,1");
+$r_topsealid = $cbid($q_topseal[id]);
+$r_topsealname = $cbnick($q_topseal[name]);
+
+// Most Flag Seals (L)
+$q_topseall = small_query("SELECT p.id, pi.name, p.flag_seal FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_seal DESC LIMIT 0,1");
+$r_topseallid = $cbid($q_topseall[id]);
+$r_topseallname = $cbnick($q_topseall[name]);
+
+// Top Capper (W)
+$q_topcap = small_query("SELECT p.id, pi.name, p.flag_capture FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_capture DESC LIMIT 0,1");
+$r_topcapid = $cbid($q_topcap[id]);
+$r_topcapname = $cbnick($q_topcap[name]);
+
+// Top Capper (D)
+$q_topcapd = small_query("SELECT p.id, pi.name, p.flag_capture FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY flag_capture DESC LIMIT 0,1");
+$r_topcapdid = $cbid($q_topcap[id]);
+$r_topcapdname = $cbnick($q_topcap[name]);
+
+// Most Flag Kills (L)
+$q_topdefl = small_query("SELECT p.id, pi.name, p.flag_kill FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY flag_kill DESC LIMIT 0,1");
+$r_topdeflid = $cbid($q_topdefl[id]);
+$r_topdeflname = $cbnick($q_topdefl[name]);
+
+// Most Flag Kills (W)
+$q_topfkill = small_query("SELECT p.id, pi.name, p.flag_kill FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_kill DESC LIMIT 0,1");
+$r_topfkillid = $cbid($q_topfkill[id]);
+$r_topfkillname = $cbnick($q_topfkill[name]);
+
+// 2nd Most Flag Kills (W)
+$q_topfkill2 = small_query("SELECT p.id, pi.name, p.flag_kill FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY flag_kill DESC LIMIT 1,1");
+$r_topfkillid2 = $cbid($q_topfkill2[id]);
+$r_topfkillname2 = $cbnick($q_topfkill2[name]);
+
+// Most Frags (D)
+$q_topfrag = small_query("SELECT p.id, pi.name, p.frags FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id ORDER BY frags DESC LIMIT 0,1");
+$r_topfragid = $cbid($q_topfrag[id]);
+$r_topfragname = $cbnick($q_topfrag[name]);
+
+// Most Frags (W)
+$q_topfragw = small_query("SELECT p.id, pi.name, p.frags FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $twin ORDER BY frags DESC LIMIT 0,1");
+$r_topfragwid = $cbid($q_topfkill2[id]);
+$r_topfragwname = $cbnick($q_topfkill2[name]);
+
+// Most Deaths (L)
+$q_topdeath = small_query("SELECT p.id, pi.name, p.deaths FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = $tlose ORDER BY deaths DESC LIMIT 0,1");
+$r_topdeathid = $cbid($q_topdeath[id]);
+$r_topdeathname = $cbnick($q_topdeath[name]);
+
+// Player of the Match
+$q_topstats = small_query("SELECT p.id, pi.name, p.rank AS prank FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id GROUP BY id, name ORDER BY prank DESC LIMIT 0,1");
+$r_topstatsid = $cbid($q_topstats[id]);
+$r_topstatsname = $cbnick($q_topstats[name]);
+
+
+// Write the top of the report (non game specific)
+
+//Player List for Red Team
+echo'_______________________________________________________________________<br />
+'.$teama.' Lineup: <br />
+';
+
+$sql_rplayer = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 ORDER BY pi.name ASC";
+$q_rplayer = mysql_query($sql_rplayer);
+while ($r_rplayer = mysql_fetch_array($q_rplayer)) {
+
+ echo'[pl]'.$cbid($r_rplayer[id]).','.$cbnick($r_rplayer[name]).'[/pl] ';
+}
+
+//Player List for Blue Team
+
+echo'<br />_______________________________________________________________________<br />
+'.$teamb.' Lineup: <br />
+';
+
+$sql_bplayer = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 ORDER BY pi.name ASC";
+$q_bplayer = mysql_query($sql_bplayer);
+while ($r_bplayer = mysql_fetch_array($q_bplayer)) {
+
+ echo'[pl]'.$cbid($r_bplayer[id]).','.$cbnick($r_bplayer[name]).'[/pl] ';
+}
+echo '_______________________________________________________________________<br />
+<br />';
+
+// Firstblood and Pickup stats
+
+echo 'First Blood: [pl]'.$r_fbloodid.','.$r_fbloodname.'[/pl]<br />
+'.$teama.' Belts: '.$q_t0bcount[bcount].'<br />
+'.$teamb.' Belts: '.$q_t1bcount[bcount].'<br />
+'.$teama.' Amps: '.$q_t0acount[acount].'<br />
+'.$teamb.' Amps: '.$q_t1acount[acount].'<br />
+';
+
+echo '_______________________________________________________________________<br />
+<br />
+';
+
+// Low Scores and a Draw
+IF ($reptype == "low" && $tdraw == 1) {
+ echo'Neither team were better this map, scorline is proof of this. <br />
+ [cl]'.$r_topgrabteamdid.','.$r_topgrabteamd.'[/cl] had the most chances to cap with [pl]'.$r_topgrabidd.','.$r_topgrabnamed.'[/pl]
+ taking the flag '.$q_topgrabd[flag_taken].' times, but unfortuantely couldnt cap as many as he took.<br />
+ <br />
+ Big credit to both teams defences; ';
+
+ IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo '[pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl] defended the flag
+ and got '.$q_topdefl[flag_kill].' flagkills while [pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl]
+ also had a pretty nice defensive game killing '.$q_topfkill[flag_kill].' flag carriers.<br />
+ <br />';
+ } else {
+ echo '[pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl] defended the flag
+ and got '.$q_topfkill[flag_kill].' flagkills while [pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl]
+ also had a pretty nice defensive game killing '.$q_topdefl[flag_kill].' flag carriers.<br />
+ <br />';
+ }
+
+ echo'Seems the attackers had a frustrating game on this map, credit to ';
+
+ IF ($q_topcover[flag_cover] >= $q_topcoverl[flag_cover]) {
+ echo '[pl]'.$r_topcoverid.','.$r_topcovername.'[/pl] for covering his flag carrier
+ '.$q_topcover[flag_cover].' times and also [pl]'.$r_topcoverlid.','.$r_topcoverlname.'[/pl]
+ for covering '.$q_topcoverl[flag_cover].' times. <br />
+ <br />';
+ } else {
+ echo '[pl]'.$r_topcoverlid.','.$r_topcoverlname.'[/pl] for covering his flag carrier
+ '.$q_topcoverl[flag_cover].' times and also [pl]'.$r_topcoverid.','.$r_topcovername.'[/pl]
+ for covering '.$q_topcover[flag_cover].' times. <br />
+ <br />';
+ }
+
+ echo'Well done [pl]'.$r_topfragid.','.$r_topfragname.'[/pl] for ensuring a tight scoreline with
+ '.$q_topfrag[frags].' frags.<br />
+ <br />
+ If this map would be played again between these two clans, we might see a change of strategy
+ in the attacking play, but the defenders were strong on both sides this time.<br />
+ <br />
+ Good game.<br />
+ Stats player of the map was [pl]'.$r_topstatsid.','.$r_topstatsname.'[/pl] with '.$q_topstats[prank].'
+ stat points.<br />
+ Well played both teams.';
+}
+
+// Medium Scores and a Draw
+IF ($reptype == "medium" && $tdraw == 1) {
+ echo'An excitingly close game with neither side having the upper hand.<br />
+ Both clans teamplay was about even and the result shows that it could have easily gone either way.<br />
+ <br />
+ Capping opportunities came along time after time, with [cl]'.$r_topgrabid.','.$r_topgrabname.'[/cl]
+ taking the flag '.$q_topgrab[flag_taken].' times and at the other end [cl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/cl]
+ taking the flag '.$q_topgrabl[flag_taken].' times.
+
+ Help was at hand for the flag runners with '.$teama.'\'s [pl]'.$r_topcoverrid.','.$r_topcoverrname.'[/pl]
+ covering '.$q_topcoverr[flag_cover].' times and [pl]'.$r_topcoverbid.','.$r_topcoverbname.'[/pl]
+ covering '.$q_topcoverb[flag_cover].' times for '.$teamb.'.<br />
+ <br />
+ Big credit to both teams defences; ';
+
+ IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo '[pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl] defended the flag
+ and got '.$q_topdefl[flag_kill].' flagkills while [pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl]
+ also had a pretty nice defensive game killing '.$q_topfkill[flag_kill].' flag carriers.<br />
+ <br />';
+ } else {
+ echo '[pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl] defended the flag
+ and got '.$q_topfkill[flag_kill].' flagkills while [pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl]
+ also had a pretty nice defensive game killing '.$q_topdefl[flag_kill].' flag carriers.<br />
+ <br />';
+ }
+
+ echo'Both teams showed great teamplay and skill and the scoreline represents this.
+ Two even lineups for this map.<br />
+ <br />
+ Well done [pl]'.$r_topfragid.','.$r_topfragname.'[/pl] who had '.$q_topfrag[frags].' frags.<br />
+ <br />
+ Good game.<br />
+ Stats player of the map was [pl]'.$r_topstatsid.','.$r_topstatsname.'[/pl] with '.$q_topstats[prank].'
+ stat points.<br />
+ Well played both teams.';
+}
+
+// High Scores and a Draw
+IF ($reptype == "high" && $tdraw == 1) {
+echo' A very very exciting, close CTF game Im sure both clans will agree.<br />
+This high scoring draw proves that '.$teama.' and '.$teamb.' were evenly matched on this map.<br />
+Teamplay and strategy enabled both teams to cap quite a few times.<br />
+Well done to both teams attackers especially [pl]'.$r_topcapdid.','.$r_topcapdname.'[/pl]
+who capped '.$q_topcapd[flag_capture].' times.<br />
+<br />
+ Capping opportunities came along time after time, with [cl]'.$r_topgrabid.','.$r_topgrabname.'[/cl]
+ taking the flag '.$q_topgrab[flag_taken].' times and at the other end [cl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/cl]
+ taking the flag '.$q_topgrabl[flag_taken].' times.<br />
+ <br />
+ Help was at hand for the flag runners with '.$teama.'\'s [pl]'.$r_topcoverrid.','.$r_topcoverrname.'[/pl]
+ covering '.$q_topcoverr[flag_cover].' times and [pl]'.$r_topcoverbid.','.$r_topcoverbname.'[/pl]
+ covering '.$q_topcoverb[flag_cover].' times for '.$teamb.'.<br />
+ <br />
+ Although the defenders probably didnt have as good a game as the attackers on this map,
+ credit should be awarded to ';
+
+ IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo '[pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl] for killing '.$q_topdefl[flag_kill].'
+ flag carriers and also to ';
+ } else {
+ echo '[pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl] for killing '.$q_topfkill[flag_kill].'
+ flag carriers and also to ';
+ }
+
+ IF ($q_topseall[flag_seal] >= $q_topseal[flag_seal]) {
+ echo '[pl]'.$r_topseallid.','.$r_topseallname.'[/pl] for sealing the base '.$q_topseall[flag_seal].'
+ times for his flag carrier to cap.<br />
+ <br >';
+ } else {
+ echo '[pl]'.$r_topsealid.','.$r_topsealname.'[/pl] for sealing the base '.$q_topseal[flag_seal].'
+ times for his flag carrier to cap.<br />
+ <br >';
+ }
+
+ echo' [pl]'.$r_topassistdid.','.$r_topassistdname.'[/pl] helped '.$r_topassistdteam.' get as many
+ caps as they did by assisting '.$q_topassistd[flag_assist].' times in their caps.<br />
+ This shows great teamplay and cover, well played.<br />
+ <br />
+ Both teams showed great teamplay and skill and the scoreline represents this.<br />
+ <br />
+ Well done [pl]'.$r_topfragid.','.$r_topfragname.'[/pl] who had '.$q_topfrag[frags].' frags.<br />
+ <br />
+ Good game.<br />
+ Stats player of the map was [pl]'.$r_topstatsid.','.$r_topstatsname.'[/pl] with '.$q_topstats[prank].'
+ stat points.<br />
+ Well played both teams.';
+}
+
+// Low Scores and not a Draw
+IF ($reptype == "low" && $tdraw == 0) {
+ echo 'Not very many caps in this close game, but '.$twin_team.' emerge victorious.<br />
+ <br />
+ Big credit to both teams defences; ';
+
+ IF ($q_topdefl[flag_kill] >= $q_topfkill[flag_kill]) {
+ echo '[pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl] defended the flag
+ and got '.$q_topdefl[flag_kill].' flagkills while [pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl]
+ also had a pretty nice defensive game killing '.$q_topfkill[flag_kill].' flag carriers.<br />
+ <br />';
+ } else {
+ echo '[pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl] defended the flag
+ and got '.$q_topfkill[flag_kill].' flagkills while [pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl]
+ also had a pretty nice defensive game killing '.$q_topdefl[flag_kill].' flag carriers.<br />
+ <br />';
+ }
+
+ echo 'Seems the attackers had a frustrating game on this map,
+ especially [cl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/cl] who took the flag '.$q_topgrabl[flag_taken].'
+ and still lost the game :(<br />
+ <br />
+ Suportive play was made by [pl]'.$r_topcoverlid.','.$r_topcoverlname.'[/pl] having
+ '.$q_topcoverl[flag_cover].' covers, but even with covering play,
+ the majority of the flags got returned and the game ended with '.$tlose_team.' losing out.<br />
+ <br />
+ Well done to [pl]'.$r_topcapid.','.$r_topcapname.'[/pl] for capping '.$q_topcap[flag_capture].'.<br />
+ On other days the outcome could have been different.<br />
+ <br />
+ Good game and congratualtions '.$twin_team.'.<br />
+ Stats player of the map was [pl]'.$r_topstatsid.','.$r_topstatsname.'[/pl] with '.$q_topstats[prank].'
+ stat points.<br />
+ Well played both teams.';
+}
+
+// Medium Scores and not a Draw
+IF ($reptype == "medium" && $tdraw == 0) {
+ echo 'A nice game of Capture the Flag took place this map with both teams trying
+ hard to get flags back but only occasionally succeeding.<br />
+ <br />
+ '.$twin_team.' however managed to succesfully cap more than '.$tlose_team.' with big help
+ from [pl]'.$r_topcapid.','.$r_topcapname.'[/pl] who capped '.$q_topcap[flag_capture].'.
+ [pl]'.$r_topgrabid.','.$r_topgrabname.'[/pl] made it hard for the '.$tlose_team.' defenders taking the
+ flag a total of '.$q_topgrab[flag_taken].' times.<br />
+ Not to say that the defence was bad at all, [pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl]
+ got '.$q_topdefl[flag_kill].' flag kills and this made attacking hard work for '.$twin_team.'. <br />
+ <br />
+ Sealing off the base for '.$twin_team.' was some nice defence including
+ [pl]'.$r_topsealid.','.$r_topsealname.'[/pl] who sealed the base '.$q_topseal[flag_seal].' times.<br />
+ Covering the flag carrier for '.$twin_team.' mostly was [pl]'.$r_topcoverid.','.$r_topcovername.'[/pl]
+ with '.$q_topcover[flag_cover].' covers.<br />
+ <br />
+ Attacking in vain at the other end of the map was [pl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/pl]
+ who managed to take the '.$twin_team.' flag '.$q_topgrabl[flag_taken].' times,
+ but unfortunately was unable to match the '.$twin_score.' caps made by '.$twin_team.'.<br />
+ [pl]'.$r_topgrabidl.','.$r_topgrabnamel.'[/pl] was also up against some heavy defence including
+ [pl]'.$r_topfkillid.','.$r_topfkillname.'[/pl] with '.$q_topfkill[flag_kill].' flag kills and
+ [pl]'.$r_topfkillid2.','.$r_topfkillname2.'[/pl] with '.$q_topfkill2[flag_kill].' flag kills.<br />
+ <br />
+ Good game and congratualtions '.$twin_team.'.<br />
+ Stats player of the map was [pl]'.$r_topstatsid.','.$r_topstatsname.'[/pl] with '.$q_topstats[prank].'
+ stat points.<br />
+ Well played both teams.';
+}
+
+// High Scores and not a Draw
+IF ($reptype == "high" && $tdraw == 0) {
+ echo ''.$twin_team.' were victorious thanks to some nice capping by
+ [pl]'.$r_topcapid.','.$r_topcapname.'[/pl] who capped '.$q_topcap[flag_capture].' and
+ [pl]'.$r_topgrabid.','.$r_topgrabname.'[/pl] who took the flag'.$q_topgrab[flag_taken].' times.<br />
+ <br />
+ [pl]'.$r_topcapid.','.$r_topcapname.'[/pl] probably could not have done it without the help of
+ [pl]'.$r_topcoverid.','.$r_topcovername.'[/pl] who had '.$q_topcover[flag_cover].' covers and
+ [pl]'.$r_topsealid.','.$r_topsealname.'[/pl] for sealing the base off
+ '.$q_topseal[flag_seal].' times.<br />
+ <br />
+ Although the '.$tlose_team.' defenders played well, the '.$q_topdefl[flag_kill].' flag kills by
+ [pl]'.$r_topdeflid.','.$r_topdeflname.'[/pl] was just not enough to stop the
+ '.$twin_team.' attackers succeeding. Extra Credit should be given to
+ [pl]'.$r_topfragwid.','.$r_topfragwname.'[/pl] for getting '.$q_topwfrag[frags].' frags.<br />
+ Some sympathy should be given to [pl]'.$r_topdeathid.','.$r_topdeathname.'[/pl]
+ who died a whopping '.$q_topdeath[deaths].' times - unlucky!.<br />
+ <br />
+ All in all, this was a great attacking game for '.$twin_team.', but all players deserve credit for
+ playing well.<br />
+ <br />
+ Good game and congratualtions '.$twin_team.'.<br />
+ Stats player of the map was [pl]'.$r_topstatsid.','.$r_topstatsname.'[/pl] with '.$q_topstats[prank].'
+ stat points.';
+
+}
+
+echo'<br />
+ <br />
+ This report was created with UTStats from the following game:<br />
+ [el]http://'.$oururl.'?p=match&mid='.$id.',http://'.$oururl.'?p=match&mid='.$id.'[/el]
+ </textarea>';
+?> \ No newline at end of file
diff --git a/html/pages/report/index.htm b/html/pages/report/index.htm
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/html/pages/report/index.htm
diff --git a/html/pages/report_cb.php b/html/pages/report_cb.php
new file mode 100755
index 0000000..ebde5a6
--- /dev/null
+++ b/html/pages/report_cb.php
@@ -0,0 +1,168 @@
+<?php
+echo'<form NAME="report" METHOD="get" ACTION="./?p=report">
+ <input type="hidden" name="p" value="report" size="0">
+ <input type="hidden" name="rtype" value="clanbase" size="0">
+ <input type="hidden" name="id" value="'.$id.'" size="0">
+ <input type="hidden" name="stage" value="1" size="0">
+ <table CLASS="searchformb">
+ <tr>
+ <td class="heading" colspan="2" ALIGN="center" width="480">Enter the Clanbase WarID</td>
+ </tr>
+ <tr>
+ <td ALIGN="left" class="grey">
+ <input TYPE="text" NAME="wid" MAXLENGTH="20" SIZE="20" value="'.(preg_replace('/\D/', '', $_GET['wid'])).'" CLASS="searchform">
+ <input TYPE="submit" VALUE="Submit" CLASS="searchformb"></td>
+ </tr>
+ </table>
+</form>';
+
+echo'<table>
+<tr>
+ <td width="480" align="center" class="heading" colspan="2">
+ <b>Team BreakDown of Match</b></td>
+</tr>
+<tr>
+<td width="240" align="center" class="smheading">Red Team</td>
+<td width="240" align="center" class="smheading">Blue Team</td>
+<tr>
+ <td width="50%" class="grey">';
+
+$sql_rteam = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 ORDER BY pi.name ASC";
+$q_rteam = mysql_query($sql_rteam);
+while ($r_rteam = mysql_fetch_array($q_rteam)) {
+ echo''.$r_rteam[name].'<br />';
+ }
+echo'</td>
+<td width="50%" class="grey">';
+
+$sql_bteam = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 ORDER BY pi.name ASC";
+$q_bteam = mysql_query($sql_bteam);
+while ($r_bteam = mysql_fetch_array($q_bteam)) {
+ echo''.$r_bteam[name].'<br />';
+ }
+echo'</td></tr></table><br>';
+
+IF ($wid == "") {
+}
+
+IF ($stage >= "1") {
+ include("includes/clanbase.php");
+ $warinfo = get_clans($wid);
+}
+
+IF ($stage == "1") {
+ $claninfo0 = get_players($warinfo[0][1]);
+ $claninfo1 = get_players($warinfo[1][1]);
+
+ echo'<form action="" method="get">
+ <input type="hidden" name="p" value="report" size="0">
+ <input type="hidden" name="rtype" value="clanbase" size="0">
+ <input type="hidden" name="id" value="'.$id.'" size="0">
+ <input type="hidden" name="wid" value="'.$wid.'" size="0">
+ <input type="hidden" name="stage" value="2" size="0">
+ <table class="searchformb">
+
+ <tr>
+ <td width="480" align="center" class="heading" colspan="2">
+ <b>Who Played As Red Team?</b></td>
+ </tr>
+ <tr>
+ <td width="100%" class="grey" colspan="2">
+ <select size="1" name="red" CLASS="searchform">
+ <option value="'.$warinfo[0][1].'">'.$warinfo[0][2].'</option>
+ <option value="'.$warinfo[1][1].'">'.$warinfo[1][2].'</option>
+ </select>
+ <input type=submit CLASS="searchformb" value="Assign"></td>
+ </tr>
+ </table>
+ </form>';
+}
+
+IF ($stage == "2") {
+ $redteam = $_GET["red"];
+
+ IF($redteam == $warinfo[0][1]) {
+ $redcid = $warinfo[0][1];
+ $redname = $warinfo[0][2];
+ $redinfo = get_players($warinfo[0][1]);
+ $bluecid = $warinfo[1][1];
+ $bluename = $warinfo[1][2];
+ $blueinfo = get_players($warinfo[1][1]);
+
+ } else {
+ $redcid = $warinfo[1][1];
+ $redname = $warinfo[1][2];
+ $redinfo = get_players($warinfo[1][1]);
+ $bluecid = $warinfo[0][1];
+ $bluename = $warinfo[0][2];
+ $blueinfo = get_players($warinfo[0][1]);
+ }
+
+ echo'<form action="" method="get">
+ <input type="hidden" name="p" value="report" size="0">
+ <input type="hidden" name="rtype" value="clanbase" size="0">
+ <input type="hidden" name="stage" value="generate" size="0">
+ <input type="hidden" name="id" value="'.$id.'" size="0">
+ <input type="hidden" name="wid" value="'.$wid.'" size="0">
+ <input type="hidden" name="red" value="'.htmlspecialchars($redteam, ENT_QUOTES).'" size="0">
+ <table class="searchformb">
+ <tr>
+ <td width="480" colspan="2" align="center" class="heading">
+ <b>Clan and Player Info for Clanbase War ID '.$wid.'</b></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" class="smheading">
+ <a href="http://www.clanbase.com/claninfo.php?cid='.$redcid.'" target="_blank">'.$redname.'</a></td>
+ </tr>';
+
+ $redcount = count($redinfo);
+ $bluecount = count($blueinfo);
+
+ $sql_rteam = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 0 ORDER BY pi.name ASC";
+
+ $q_rteam = mysql_query($sql_rteam);
+ while($r_rteam = mysql_fetch_array($q_rteam)) {
+
+ echo'<tr>
+ <td class="grey">'.$r_rteam[name].'</td>
+ <td class="grey">
+ <select CLASS="searchform" name="'.$r_rteam[id].'">
+ <option selected CLASS="searchform" value="">Use Me To Assign a CB Player to Stats</option>';
+
+ for ($i = 0; $i < $redcount; $i++) {
+ echo'<option CLASS="searchform" value="'.$redinfo[$i][0].'">'.$redinfo[$i][1].'</option>';
+ }
+ echo'</select></td>
+ </tr>';
+ }
+
+ echo'<td width="100%" align="center" class="smheading" colspan="2">
+ <a href="http://www.clanbase.com/claninfo.php?cid='.$bluecid.'" target="_blank">'.$bluename.'</a></td>';
+
+
+ $sql_bteam = "SELECT p.id, pi.name FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND matchid = $id AND team = 1 ORDER BY pi.name ASC";
+
+ $q_bteam = mysql_query($sql_bteam);
+ while($r_bteam = mysql_fetch_array($q_bteam)) {
+
+ echo'<tr>
+ <td class="grey">'.$r_bteam[name].'</td>
+ <td class="grey">
+ <select CLASS="searchform" name="'.$r_bteam[id].'">
+ <option selected CLASS="searchform" value="">Use Me To Assign a CB Player to Stats</option>';
+
+ for ($i = 0; $i < $bluecount; $i++) {
+ echo'<option CLASS="searchform" value="'.$blueinfo[$i][0].'">'.$blueinfo[$i][1].'</option>';
+ }
+ echo'</select></td>
+ </tr>';
+ }
+
+ echo'<tr>
+ <td class="grey" colspan="2" align="center">
+ <input type=submit CLASS="searchformb" value="Generate Report">
+ </td>
+ </tr>
+ </table></form>';
+}
+?> \ No newline at end of file
diff --git a/html/pages/servers.php b/html/pages/servers.php
new file mode 100755
index 0000000..63d3721
--- /dev/null
+++ b/html/pages/servers.php
@@ -0,0 +1,74 @@
+<?php
+// Firstly we need to work out First Last Next Prev pages
+
+$scount = small_count("SELECT servername, serverip FROM uts_match GROUP BY servername, serverip");
+
+$ecount = $scount/25;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = preg_replace('/\D/', '', $_GET["page"]);
+IF ($cpage == "") { $cpage = "0"; }
+$qpage = $cpage*25;
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=servers&amp;page=$ppage\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=servers&amp;page=$npage\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=servers&amp;page=$fpage\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=servers&amp;page=$lpage\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+echo'
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="6" align="center">Unreal Tournament Server List</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="250">Server Name</td>
+ <td class="smheading" align="center" width="50">Status</td>
+ <td class="smheading" align="center" width="100">Matches</td>
+ <td class="smheading" align="center">Frags</td>
+ <td class="smheading" align="center" width="100">TeamScore</td>
+ <td class="smheading" align="center" width="100">Hours</td>
+ </tr>';
+
+$sql_servers = "SELECT servername, serverip, COUNT(*) AS matchcount, SUM(frags) AS frags, SUM(t0score+t1score+t2score+t3score) AS matchscore, SUM(gametime) AS gametime
+FROM uts_match GROUP BY servername, serverip ORDER BY servername ASC LIMIT $qpage,25";
+$q_servers = mysql_query($sql_servers) or die(mysql_error());
+while ($r_servers = mysql_fetch_array($q_servers)) {
+
+ $r_gametime = sec2hour($r_servers[gametime]);
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=sinfo&amp;serverip='.$r_servers[serverip].'">'.$r_servers[servername].'</a></td>
+ <td class="grey" align="center"><a href="./?p=squery&amp;serverip='.$r_servers[serverip].'"><img border="0" alt="Server Status" title="Server Status" src="images/magnify.gif"></a></td>
+ <td class="grey" align="center">'.$r_servers[matchcount].'</td>
+ <td class="grey" align="center">'.$r_servers[frags].'</td>
+ <td class="grey" align="center">'.$r_servers[matchscore].'</td>
+ <td class="grey" align="center">'.$r_gametime.'</td>
+ </tr>';
+}
+
+echo'
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>';
+?> \ No newline at end of file
diff --git a/html/pages/servers_info.php b/html/pages/servers_info.php
new file mode 100755
index 0000000..2548197
--- /dev/null
+++ b/html/pages/servers_info.php
@@ -0,0 +1,104 @@
+<?php
+$serverip = $_GET[serverip];
+
+// Firstly we need to work out First Last Next Prev pages
+$scount = small_count("SELECT id FROM uts_match WHERE serverip = '$serverip'");
+
+$ecount = $scount/25;
+$ecount2 = number_format($ecount, 0, '.', '');
+
+IF($ecount > $ecount2) {
+ $ecount2 = $ecount2+1;
+}
+
+$fpage = 0;
+IF($ecount < 1) { $lpage = 0; }
+else { $lpage = $ecount2-1; }
+
+$cpage = $_GET["page"];
+IF ($cpage == "") { $cpage = "0"; }
+$qpage = $cpage*25;
+
+$tfpage = $cpage+1;
+$tlpage = $lpage+1;
+
+$ppage = $cpage-1;
+$ppageurl = "<a class=\"pages\" href=\"./?p=sinfo&amp;serverip=$serverip&amp;page=$ppage\">[Previous]</a>";
+IF ($ppage < "0") { $ppageurl = "[Previous]"; }
+
+$npage = $cpage+1;
+$npageurl = "<a class=\"pages\" href=\"./?p=sinfo&amp;serverip=$serverip&amp;page=$npage\">[Next]</a>";
+IF ($npage >= "$ecount") { $npageurl = "[Next]"; }
+
+$fpageurl = "<a class=\"pages\" href=\"./?p=sinfo&amp;serverip=$serverip&amp;page=$fpage\">[First]</a>";
+IF ($cpage == "0") { $fpageurl = "[First]"; }
+
+$lpageurl = "<a class=\"pages\" href=\"./?p=sinfo&amp;serverip=$serverip&amp;page=$lpage\">[Last]</a>";
+IF ($cpage == "$lpage") { $lpageurl = "[Last]"; }
+
+
+// Get the last match entry for this server
+
+$serverinfo = small_query("SELECT time, servername, serverinfo, gameinfo, mutators FROM uts_match WHERE serverip = '$serverip' ORDER BY time DESC LIMIT 0,1");
+$matchdate = mdate($serverinfo[time]);
+
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center" colspan="4">'.$serverinfo[servername].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="110">Last Match</td>
+ <td class="grey" align="center" width="305">'.$matchdate.'</td>
+ <td class="dark" align="center" width="305">Game Info</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Server Info</td>
+ <td class="grey" align="center">'.$serverinfo[serverinfo].'</td>
+ <td class="grey" align="center" rowspan="2">'.$serverinfo[gameinfo].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Mutators</td>
+ <td class="grey" align="center">'.$serverinfo[mutators].'</td>
+ </tr>
+</tbody></table>
+<br>';
+
+// Do graph stuff
+$bgwhere = "serverip = '$serverip'";
+include("pages/graph_mbreakdown.php");
+
+echo'<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>
+<table class="box" border="0" cellpadding="1" cellspacing="1">
+ <tbody><tr>
+ <td class="heading" colspan="4" align="center">Unreal Tournament Match List</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="220">Date/Time</td>
+ <td class="smheading" align="center" width="140">Match Type</td>
+ <td class="smheading" align="center">Map</td>
+ <td class="smheading" align="center" width="40">Time</td>
+ </tr>';
+
+$sql_recent = "SELECT m.id, m.time, g.name AS gamename, m.mapfile, m.gametime FROM uts_match AS m, uts_games AS g WHERE g.id = m.gid AND m.serverip = '$serverip' ORDER BY m.time DESC LIMIT $qpage,25";
+$q_recent = mysql_query($sql_recent) or die(mysql_error());
+while ($r_recent = mysql_fetch_array($q_recent)) {
+
+ $r_time = mdate($r_recent[time]);
+ $r_mapfile = un_ut($r_recent[mapfile]);
+ $r_gametime = sec2min($r_recent[gametime]);
+ $myurl = urlencode($r_mapfile);
+
+ echo'
+ <tr>
+ <td class="dark" align="center"><a class="darkhuman" href="./?p=match&amp;mid='.$r_recent[id].'">'.$r_time.'</a></td>
+ <td class="grey" align="center">'.$r_recent[gamename].'</td>
+ <td class="grey" align="center"><a class="grey" href="./?p=minfo&amp;map='.$myurl.'">'.$r_mapfile.'</a></td>
+ <td class="grey" align="center">'.$r_gametime.'</td>
+ </tr>';
+}
+
+echo'
+</tbody></table>
+<div class="pages"><b>Page ['.$tfpage.'/'.$tlpage.'] Selection: '.$fpageurl.' / '.$ppageurl.' / '.$npageurl.' / '.$lpageurl.'</b></div>';
+?> \ No newline at end of file
diff --git a/html/pages/servers_query.php b/html/pages/servers_query.php
new file mode 100755
index 0000000..95265c6
--- /dev/null
+++ b/html/pages/servers_query.php
@@ -0,0 +1,176 @@
+<?php
+//Return if no variables are set (exit)
+if (isset($_GET['serverip']) != 1) return;
+
+// Get server IP info
+list($serverip, $serverport) = split(":", addslashes($_GET[serverip]));
+$queryport = preg_replace('/\D/', '', $serverport)+1;
+
+// check for valid ip address, no ipv6 support
+if (!preg_match('/(\w{1,3}\.){3}\w{1,3}/', $serverip)) {
+ die('bla');
+}
+
+//If there is no IP, return (exit)
+if (strlen($serverip) == 0) return;
+
+//Open UDP socket to server
+$sock = fsockopen("udp://" . $serverip, $queryport, $errno, $errstr,4);
+
+//Check if we have a socket open, if not, display error message
+if (!$sock) {
+ echo "$errstr ($errno)<br>\n";
+ exit;
+}
+
+fputs($sock,"\\status\\\player_property\Health\\\game_property\ElapsedTime\\\game_property\RemainingTime\\");
+
+$gotfinal = False;
+$data = "";
+
+//Set starttime, for possible loop expiration, so the server doesn't get too much work.
+$starttime = Time();
+
+//Loop until final packet has been received.
+while(!($gotfinal == True || feof($sock))) {
+
+ //Get data
+ if(($buf = fgetc($sock)) == FALSE) {
+ usleep(100); // wait for additional data? :S whatever
+ }
+
+ //Add to databuffer
+ $data .= $buf;
+
+ //Check if final item (queryid) has been received
+ if (strpos($data,"final\\") != False) {
+ $gotfinal = True;
+ }
+
+ //Protect webserver against massive loop.
+ if ((Time() - $starttime) > 5) {
+ echo "Data receiving took too long. Cancelled.<P>";
+ $gotfinal = True;
+ }
+}
+
+//Close socket
+fclose ($sock);
+
+
+//Split chunks by \
+$chunks = split('[\]', $data);
+
+$mappic = strtolower("images/maps/".$map.".jpg");
+
+if (file_exists($mappic)) {
+} else {
+ $mappic = ("images/maps/blank.jpg");
+}
+
+$mapname = getiteminfo("mapname",$chunks);
+$mappic = strtolower("images/maps/".$mapname.".jpg");
+IF (file_exists($mappic)) {
+ } else {
+ $mappic = "images/maps/blank.jpg";
+}
+
+$r_hostname = getiteminfo("hostname",$chunks);
+$r_gametype = getiteminfo("gametype",$chunks);
+
+$r_adminname = getiteminfo("adminname",$chunks);
+$r_adminemail = getiteminfo("adminemail",$chunks);
+
+$r_password = getiteminfo("password",$chunks);
+$r_timelimit = getiteminfo("timelimit",$chunks);
+$r_remainingtime = GetMinutes(getiteminfo("RemainingTime",$chunks)) . " mins";
+$r_elapsedtime = GetMinutes(getiteminfo("ElapsedTime",$chunks)) . " mins";
+
+$r_goalteamscore = getiteminfo("goalteamscore",$chunks);
+$r_numplayers = getiteminfo("numplayers",$chunks);
+$r_minplayers = getiteminfo("minplayers",$chunks);
+$r_maxplayers = getiteminfo("maxplayers",$chunks);
+$r_maxteams = getiteminfo("maxteams",$chunks);
+
+$r_balanceteams = getiteminfo("balanceteams",$chunks);
+$r_tournament = getiteminfo("tournament",$chunks);
+$r_friendlyfire = getiteminfo("friendlyfire",$chunks);
+$r_gamestyle = getiteminfo("gamestyle",$chunks);
+
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" colspan="4" align="center">Server Status for '.$r_hostname.'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="110">Server IP</td>
+ <td class="grey" align="center" width="350"><a class="grey" href="unreal://'.$serverip.':'.$serverport.'">'.$serverip.':'.$serverport.'</a></td>
+ <td class="dark" align="center" rowspan="5" colspan="2"><img border="0" alt="'.$mapname.'" title="'.$mapname.'" src="'.$mappic.'"></td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Map Name</td>
+ <td class="grey" align="center">'.$mapname.'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="110">Match Type</td>
+ <td class="grey" align="center">'.$r_gametype.'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Server Info</td>
+ <td class="grey" align="center">Admin: '.$r_adminname.'<br />Email: '.$r_adminemail.'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Game Info</td>
+ <td class="grey" align="center">
+ Goal Team Score: '.$r_goalteamscore.'<br />
+ Min Players: '.$r_minplayers.'<br />
+ Max Players: '.$r_maxplayers.'<br />
+ Max Teams: '.$r_maxteams.'<br />
+ Balanced Teams: '.$r_balanceteams.'<br />
+ Tournament Mode: '.$r_tournament.'<br />
+ Friendly Fire: '.$r_friendlyfire.'<br />
+ Game Style: '.$r_gamestyle.'<br /><br />
+ Time Limit: '.$r_timelimit.'<br />
+ Time Remaining: '.$r_remainingtime.'<br />
+ Time Elapsed: '.$r_elapsedtime.'<br />
+ Password Required: '.$r_password.'<br />
+ </td>
+ </tr>
+</tbody></table>
+<br>
+
+<table class = "box" border="0" cellpadding="0" cellspacing="2" width="720">
+ <tbody>
+ <tr>
+ <td class="heading" colspan="5" align="center">Player Information</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="270">Player</td>
+ <td class="smheading" align="center">Frags</td>
+ <td class="smheading" align="center">Team</td>
+ <td class="smheading" align="center">Ping</td>
+ <td class="smheading" align="center">Health</td>
+ </tr>';
+
+//Loop through all players
+for ($i = 0; $i < $r_numplayers; $i++) {
+ $actualid = $i;
+ $itemx = $i+1;
+
+ $r_playername = getiteminfo("player_" . $actualid,$chunks);
+ $r_playerfrags = getiteminfo("frags_" . $actualid,$chunks);
+ $r_playerteam = getiteminfo("team_" . $actualid,$chunks);
+ $r_playerping = getiteminfo("ping_" . $actualid,$chunks);
+ $r_playerhealth = getiteminfo("Health_" . $itemx,$chunks);
+
+ echo'<tr>
+ <td class="grey" align="center">'.$r_playername.'</td>
+ <td class="grey" align="center">'.$r_playerfrags.'</td>
+ <td class="grey" align="center">'.$r_playerteam.'</td>
+ <td class="grey" align="center">'.$r_playerping.'</td>
+ <td class="grey" align="center">'.$r_playerhealth.'</td>
+ </tr>';
+}
+
+echo'</tbody></table>';
+?> \ No newline at end of file
diff --git a/html/pages/totals.php b/html/pages/totals.php
new file mode 100755
index 0000000..64acedd
--- /dev/null
+++ b/html/pages/totals.php
@@ -0,0 +1,606 @@
+<?php
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center">Totals Summary</td>
+ </tr>
+</tbody></table>
+<br>
+<table class="box" border="0" cellpadding="1" cellspacing="2">
+ <tbody><tr>
+ <td class="medheading" colspan="10" align="center">Summary</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="150">Game Type</td>
+ <td class="smheading" align="center" width="45">Score</td>
+ <td class="smheading" align="center" width="35">Frags</td>
+ <td class="smheading" align="center" width="35">Kills</td>
+ <td class="smheading" align="center" width="35">Suicides</td>
+ <td class="smheading" align="center" width="35">Team Kills</td>
+ <td class="smheading" align="center" width="50">Matches</td>
+ <td class="smheading" align="center" width="45">Hours</td>
+ </tr>';
+
+$sql_totsumm = "SELECT g.name AS gamename, SUM(p.gamescore) AS gamescore, SUM(p.frags) AS frags, SUM(p.kills) AS kills, SUM(p.suicides) AS suicides, SUM(p.teamkills) AS teamkills, COUNT(DISTINCT p.matchid) AS matchcount, SUM(p.gametime) AS sumgametime
+FROM uts_player AS p, uts_games AS g WHERE p.gid = g.id GROUP BY gamename ORDER BY gamename ASC";
+$q_totsumm = mysql_query($sql_totsumm) or die(mysql_error());
+while ($r_totsumm = zero_out(mysql_fetch_array($q_totsumm))) {
+
+ $gametime = sec2hour($r_totsumm[sumgametime]);
+
+ echo'
+ <tr>
+ <td class="dark" align="center">'.$r_totsumm[gamename].'</td>
+ <td class="grey" align="center">'.$r_totsumm[gamescore].'</td>
+ <td class="grey" align="center">'.$r_totsumm[frags].'</td>
+ <td class="grey" align="center">'.$r_totsumm[kills].'</td>
+ <td class="grey" align="center">'.$r_totsumm[suicides].'</td>
+ <td class="grey" align="center">'.$r_totsumm[teamkills].'</td>
+ <td class="grey" align="center">'.$r_totsumm[matchcount].'</td>
+ <td class="grey" align="center">'.$gametime.'</td>
+ </tr>';
+}
+
+$sql_summtot = zero_out(small_query("SELECT SUM(gamescore) AS gamescore, SUM(frags) AS frags, SUM(kills) AS kills, SUM(suicides) AS suicides, SUM(teamkills) AS teamkills, COUNT(DISTINCT matchid) AS matchcount, SUM(gametime) AS sumgametime
+FROM uts_player"));
+
+$gametime2 = sec2hour($sql_summtot[sumgametime]);
+
+echo'
+ <tr>
+ <td class="dark" align="center"><b>Totals</b></td>
+ <td class="grey" align="center">'.$sql_summtot[gamescore].'</td>
+ <td class="grey" align="center">'.$sql_summtot[frags].'</td>
+ <td class="grey" align="center">'.$sql_summtot[kills].'</td>
+ <td class="grey" align="center">'.$sql_summtot[suicides].'</td>
+ <td class="grey" align="center">'.$sql_summtot[teamkills].'</td>
+ <td class="grey" align="center">'.$sql_summtot[matchcount].'</td>
+ <td class="grey" align="center">'.$gametime2.'</td>
+ </tr>
+</tbody></table>
+<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="600">
+ <tbody><tr>
+ <td class="medheading" colspan="11" align="center">Assault, Domination and CTF Events Summary</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" rowspan="2">Assault Objectives</td>
+ <td class="dark" align="center" rowspan="2">Control Point Captures</td>
+ <td class="dark" align="center" colspan="9">Capture The Flag</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Flag Takes</td>
+ <td class="dark" align="center">Flag Pickups</td>
+ <td class="dark" align="center">Flag Drops</td>
+ <td class="dark" align="center">Flag Assists</td>
+ <td class="dark" align="center">Flag Covers</td>
+ <td class="dark" align="center">Flag Seals</td>
+ <td class="dark" align="center">Flag Captures</td>
+ <td class="dark" align="center">Flag Kills</td>
+ <td class="dark" align="center">Flag Returns</td>
+ </tr>';
+
+ $q_assgids = mysql_query("SELECT id FROM uts_games WHERE gamename LIKE '%Assault%';") or die(mysql_error());
+ $assgids = array();
+ while ($r_assgids = mysql_fetch_array($q_assgids)) {
+ $assgids[] = $r_assgids['id'];
+ }
+ $assquery = (count($assgids) > 0) ? 'SUM(IF (gid IN ('. implode(',', $assgids) .'), ass_obj, 0)) AS ass_obj' : '0 AS ass_obj';
+
+ $sql_cdatot = zero_out(small_query("SELECT SUM(dom_cp) AS dom_cp, $assquery, SUM(flag_taken) AS flag_taken,
+ SUM(flag_pickedup) AS flag_pickedup, SUM(flag_dropped) AS flag_dropped, SUM(flag_assist) AS flag_assist, SUM(flag_cover) AS flag_cover,
+ SUM(flag_seal) AS flag_seal, SUM(flag_capture) AS flag_capture, SUM(flag_kill)as flag_kill,
+ SUM(flag_return) AS flag_return FROM uts_player"));
+
+ echo'
+ <tr>
+ <td class="grey" align="center">'.$sql_cdatot[ass_obj].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[dom_cp].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_taken].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_pickedup].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_dropped].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_assist].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_cover].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_seal].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_capture].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_kill].'</td>
+ <td class="grey" align="center">'.$sql_cdatot[flag_return].'</td>
+ </tr>
+</tbody></table>
+<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="500">
+ <tbody><tr>
+ <td class="medheading" colspan="4" align="center">Special Events</td>
+ </tr>';
+
+$sql_firstblood = zero_out(small_count("SELECT firstblood FROM uts_match WHERE firstblood != ''"));
+$sql_multis = zero_out(small_query("SELECT SUM(spree_double) AS spree_double, SUM(spree_multi) AS spree_multi, SUM(spree_ultra) AS spree_ultra, SUM(spree_monster) AS spree_monster FROM uts_player"));
+$sql_sprees = zero_out(small_query("SELECT SUM(spree_kill) AS spree_kill, SUM(spree_rampage) AS spree_rampage, SUM(spree_dom) AS spree_dom, SUM(spree_uns) AS spree_uns, SUM(spree_god) AS spree_god FROM uts_player"));
+
+ echo'
+ <tr>
+ <td class="smheading" align="center" colspan="2" width="250">Special/Multis</td>
+ <td class="smheading" align="center" colspan="2" width="250">Sprees</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center" width="150">First Blood</td>
+ <td class="grey" align="center" width="100">'.$sql_firstblood.'</td>
+ <td class="dark" align="center" width="150">Killing Spree</td>
+ <td class="grey" align="center" width="100">'.$sql_sprees[spree_kill].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Double Kills</td>
+ <td class="grey" align="center">'.$sql_multis[spree_double].'</td>
+ <td class="dark" align="center">Rampage</td>
+ <td class="grey" align="center">'.$sql_sprees[spree_rampage].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Multi Kills</td>
+ <td class="grey" align="center">'.$sql_multis[spree_multi].'</td>
+ <td class="dark" align="center">Dominating</td>
+ <td class="grey" align="center">'.$sql_sprees[spree_dom].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Ultra Kills</td>
+ <td class="grey" align="center">'.$sql_multis[spree_ultra].'</td>
+ <td class="dark" align="center">Unstoppable</td>
+ <td class="grey" align="center">'.$sql_sprees[spree_uns].'</td>
+ </tr>
+ <tr>
+ <td class="dark" align="center">Monster Kills</td>
+ <td class="grey" align="center">'.$sql_multis[spree_monster].'</td>
+ <td class="dark" align="center">Godlike</td>
+ <td class="grey" align="center">'.$sql_sprees[spree_god].'</td>
+ </tr>
+</tbody></table>
+<br>';
+
+include('includes/weaponstats.php');
+weaponstats(0, 0);
+
+echo'<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="710">
+ <tbody><tr>
+ <td class="heading" align="center">Totals for Players</td>
+ </tr>
+</tbody></table>';
+
+// NGStats Style Total Highs (All Time)
+
+$sql_chighfrags = small_query("SELECT p.pid, pi.name, p.country, SUM(frags) AS frags , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY frags DESC LIMIT 0,1");
+$sql_chighdeaths = small_query("SELECT p.pid, pi.name, p.country, SUM(deaths) AS deaths , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY deaths DESC LIMIT 0,1");
+$sql_chighkills = small_query("SELECT p.pid, pi.name, p.country, SUM(kills) AS kills , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY kills DESC LIMIT 0,1");
+$sql_chighsuicides = small_query("SELECT p.pid, pi.name, p.country, SUM(suicides) AS suicides , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY suicides DESC LIMIT 0,1");
+$sql_chighteamkills = small_query("SELECT p.pid, pi.name, p.country, SUM(teamkills) AS teamkills , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY teamkills DESC LIMIT 0,1");
+$sql_chigheff = small_query("SELECT p.pid, pi.name, p.country, AVG(eff) AS eff , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY eff DESC LIMIT 0,1");
+$sql_chighaccuracy = small_query("SELECT p.pid, pi.name, p.country, AVG(accuracy) AS accuracy , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY accuracy DESC LIMIT 0,1");
+$sql_chighttl = small_query("SELECT p.pid, pi.name, p.country, AVG(ttl) AS ttl , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY ttl DESC LIMIT 0,1");
+$sql_chighflag_capture = small_query("SELECT p.pid, pi.name, p.country, SUM(flag_capture) AS flag_capture , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY flag_capture DESC LIMIT 0,1");
+$sql_chighflag_kill = small_query("SELECT p.pid, pi.name, p.country, SUM(flag_kill) AS flag_kill , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY flag_kill DESC LIMIT 0,1");
+$sql_chighdom_cp = small_query("SELECT p.pid, pi.name, p.country, SUM(dom_cp) AS dom_cp , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY dom_cp DESC LIMIT 0,1");
+
+$ass_obj_check = small_query("SELECT COUNT(id) AS idcount FROM uts_games WHERE gamename LIKE '%Assault%';") or die(mysql_error());
+IF ($ass_obj_check[idcount] > 0 ) {
+ $sql_chighass_obj = small_query("SELECT p.pid, pi.name, p.country, SUM(ass_obj) AS ass_obj , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY ass_obj DESC LIMIT 0,1");
+} else {
+ $sql_chighass_obj = "";
+}
+
+$sql_chighspree_monster = small_query("SELECT p.pid, pi.name, p.country, SUM(spree_monster) AS spree_monster , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY spree_monster DESC LIMIT 0,1");
+$sql_chighspree_god = small_query("SELECT p.pid, pi.name, p.country, SUM(spree_god) AS spree_god , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY spree_god DESC LIMIT 0,1");
+$sql_chighrank = small_query("SELECT p.pid, pi.name, p.country, SUM(rank) AS rank , SUM(gametime) AS sumgametime, COUNT(matchid) AS mcount FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' GROUP BY pid HAVING sumgametime > 1800 ORDER BY rank DESC LIMIT 0,1");
+
+echo'<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="550">
+ <tbody>
+ <tr>
+ <td class="medheading" colspan="5" align="center">Career Highs</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="200">Category</td>
+ <td class="smheading" align="center" width="200">Player</td>
+ <td class="smheading" align="center" width="50">Amount</td>
+ <td class="smheading" align="center" width="50">Hours</td>
+ <td class="smheading" align="center" width="50">Matches</td>
+ </tr>';
+if ($sql_chighfrags and $sql_chighfrags[frags]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Frags</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighfrags[pid].'">'.FlagImage($sql_chighfrags['country'], false).' '.$sql_chighfrags[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighfrags[frags].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighfrags[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighfrags[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighdeaths and $sql_chighdeaths[deaths]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Deaths</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighdeaths[pid].'">'.FlagImage($sql_chighdeaths['country'], false).' '.$sql_chighdeaths[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighdeaths[deaths].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighdeaths[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighdeaths[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighkills and $sql_chighkills[kills]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighkills[pid].'">'.FlagImage($sql_chighkills['country'], false).' '.$sql_chighkills[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighkills[kills].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighkills[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighkills[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighsuicides and $sql_chighsuicides[suicides]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Suicides</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighsuicides[pid].'">'.FlagImage($sql_chighsuicides['country'], false).' '.$sql_chighsuicides[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighsuicides[suicides].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighsuicides[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighsuicides[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighteamkills and $sql_chighteamkills[teamkills]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Team Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighteamkills[pid].'">'.FlagImage($sql_chighteamkills['country'], false).' '.$sql_chighteamkills[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighteamkills[teamkills].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighteamkills[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighteamkills[mcount].'</td>
+ </tr>';
+}
+if ($sql_chigheff and $sql_chigheff[eff]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Efficiency</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chigheff[pid].'">'.FlagImage($sql_chigheff['country'], false).' '.$sql_chigheff[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_chigheff[eff]).'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chigheff[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chigheff[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighaccuracy and $sql_chighaccuracy[accuracy]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Accuracy</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighaccuracy[pid].'">'.FlagImage($sql_chighaccuracy['country'], false).' '.$sql_chighaccuracy[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_chighaccuracy[accuracy]).'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighaccuracy[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighaccuracy[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighttl and $sql_chighttl[ttl]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">TTL</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighttl[pid].'">'.FlagImage($sql_chighttl['country'], false).' '.$sql_chighttl[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_chighttl[ttl]).'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighttl[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighttl[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighflag_capture and $sql_chighflag_capture[flag_capture]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Flag Caps</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighflag_capture[pid].'">'.FlagImage($sql_chighflag_capture['country'], false).' '.$sql_chighflag_capture[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighflag_capture[flag_capture].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighflag_capture[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighflag_capture[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighflag_kill and $sql_chighflag_kill[flag_kill]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Flag Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighflag_kill[pid].'">'.FlagImage($sql_chighflag_kill['country'], false).' '.$sql_chighflag_kill[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighflag_kill[flag_kill].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighflag_kill[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighflag_kill[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighdom_cp and $sql_chighdom_cp[dom_cp]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Domination Control Points</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighdom_cp[pid].'">'.FlagImage($sql_chighdom_cp['country'], false).' '.$sql_chighdom_cp[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighdom_cp[dom_cp].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighdom_cp[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighdom_cp[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighass_obj and $sql_chighass_obj[ass_obj]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Assault Objectives</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighass_obj[pid].'">'.FlagImage($sql_chighass_obj['country'], false).' '.$sql_chighass_obj[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighass_obj[ass_obj].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighass_obj[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighass_obj[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighspree_monster and $sql_chighspree_monster[spree_monster]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Monster Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighspree_monster[pid].'">'.FlagImage($sql_chighspree_monster['country'], false).' '.$sql_chighspree_monster[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighspree_monster[spree_monster].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighspree_monster[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighspree_monster[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighspree_god and $sql_chighspree_god[spree_god]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Godlikes</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighspree_god[pid].'">'.FlagImage($sql_chighspree_god['country'], false).' '.$sql_chighspree_god[name].'</a></td>
+ <td class="grey" align="center">'.$sql_chighspree_god[spree_god].'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighspree_god[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighspree_god[mcount].'</td>
+ </tr>';
+}
+if ($sql_chighrank and $sql_chighrank[rank]) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Rank Points</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_chighrank[pid].'">'.FlagImage($sql_chighrank['country'], false).' '.$sql_chighrank[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_chighrank[rank]).'</td>
+ <td class="grey" align="center">'.sec2hour($sql_chighrank[sumgametime]).'</td>
+ <td class="grey" align="center">'.$sql_chighrank[mcount].'</td>
+ </tr>';
+}
+echo '
+</tbody></table>
+<br>';
+
+
+// NGStats Style Total Highs (Single Match)
+
+$sql_mhighfrags = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(frags) AS frags , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND frags > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY frags DESC LIMIT 0,1");
+$sql_mhighdeaths = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(deaths) AS deaths , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND deaths > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY deaths DESC LIMIT 0,1");
+$sql_mhighkills = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(kills) AS kills , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND kills > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY kills DESC LIMIT 0,1");
+$sql_mhighsuicides = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(suicides) AS suicides , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND suicides > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY suicides DESC LIMIT 0,1");
+$sql_mhighteamkills = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(teamkills) AS teamkills , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND teamkills > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY teamkills DESC LIMIT 0,1");
+$sql_mhigheff = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(eff) AS eff , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND eff > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY eff DESC LIMIT 0,1");
+$sql_mhighaccuracy = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(accuracy) AS accuracy , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND accuracy > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY accuracy DESC LIMIT 0,1");
+$sql_mhighttl = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(ttl) AS ttl , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND ttl > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY ttl DESC LIMIT 0,1");
+$sql_mhighflag_capture = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(flag_capture) AS flag_capture , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND flag_capture > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY flag_capture DESC LIMIT 0,1");
+$sql_mhighflag_kill = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(flag_kill) AS flag_kill , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND flag_kill > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY flag_kill DESC LIMIT 0,1");
+$sql_mhighdom_cp = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(dom_cp) AS dom_cp , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND dom_cp > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY dom_cp DESC LIMIT 0,1");
+
+$ass_obj_check = small_query("SELECT COUNT(id) AS idcount FROM uts_games WHERE gamename LIKE '%Assault%';") or die(mysql_error());
+IF ($ass_obj_check[idcount] > 0 ) {
+ $sql_mhighass_obj = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(ass_obj) AS ass_obj , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND ass_obj > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY ass_obj DESC LIMIT 0,1");
+} else {
+ $sql_mhighass_obj = "";
+}
+
+$sql_mhighspree_monster = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(spree_monster) AS spree_monster , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND spree_monster > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY spree_monster DESC LIMIT 0,1");
+$sql_mhighspree_god = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(spree_god) AS spree_god , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND spree_god > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY spree_god DESC LIMIT 0,1");
+$sql_mhighrank = small_query("SELECT p.matchid, p.pid, pi.name, p.country, SUM(rank) AS rank , SUM(gametime) AS sumgametime FROM uts_player AS p, uts_pinfo AS pi WHERE p.pid = pi.id AND pi.banned <> 'Y' AND rank > 0 GROUP BY matchid, pid HAVING sumgametime > 600 ORDER BY rank DESC LIMIT 0,1");
+
+echo'<table class = "box" border="0" cellpadding="1" cellspacing="2" width="480">
+ <tbody>
+ <tr>
+ <td class="medheading" colspan="4" align="center">Match Highs</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="175">Category</td>
+ <td class="smheading" align="center" width="175">Player</td>
+ <td class="smheading" align="center" width="65">Amount</td>
+ <td class="smheading" align="center" width="65">Match</td>
+ </tr>';
+
+if ($sql_mhighfrags) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Frags</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighfrags[pid].'">'.FlagImage($sql_mhighfrags['country'], false).' '.$sql_mhighfrags[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighfrags[frags].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighfrags[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighdeaths) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Deaths</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighdeaths[pid].'">'.FlagImage($sql_mhighdeaths['country'], false).' '.$sql_mhighdeaths[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighdeaths[deaths].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighdeaths[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighkills) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighkills[pid].'">'.FlagImage($sql_mhighkills['country'], false).' '.$sql_mhighkills[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighkills[kills].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighkills[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighsuicides) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Suicides</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighsuicides[pid].'">'.FlagImage($sql_mhighsuicides['country'], false).' '.$sql_mhighsuicides[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighsuicides[suicides].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighsuicides[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighteamkills) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Team Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighteamkills[pid].'">'.FlagImage($sql_mhighteamkills['country'], false).' '.$sql_mhighteamkills[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighteamkills[teamkills].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighteamkills[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhigheff) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Efficiency</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhigheff[pid].'">'.FlagImage($sql_mhigheff['country'], false).' '.$sql_mhigheff[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_mhigheff[eff]).'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhigheff[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighaccuracy) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Accuracy</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighaccuracy[pid].'">'.FlagImage($sql_mhighaccuracy['country'], false).' '.$sql_mhighaccuracy[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_mhighaccuracy[accuracy]).'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighaccuracy[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighttl) {
+ echo '
+ <tr>
+ <td class="dark" align="center">TTL</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighttl[pid].'">'.FlagImage($sql_mhighttl['country'], false).' '.$sql_mhighttl[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_mhighttl[ttl]).'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighttl[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighflag_capture) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Flag Caps</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighflag_capture[pid].'">'.FlagImage($sql_mhighflag_capture['country'], false).' '.$sql_mhighflag_capture[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighflag_capture[flag_capture].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighflag_capture[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighflag_kill) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Flag Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighflag_kill[pid].'">'.FlagImage($sql_mhighflag_kill['country'], false).' '.$sql_mhighflag_kill[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighflag_kill[flag_kill].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighflag_kill[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighdom_cp) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Domination Control Points</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighdom_cp[pid].'">'.FlagImage($sql_mhighdom_cp['country'], false).' '.$sql_mhighdom_cp[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighdom_cp[dom_cp].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighdom_cp[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighass_obj) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Assault Objectives</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighass_obj[pid].'">'.FlagImage($sql_mhighass_obj['country'], false).' '.$sql_mhighass_obj[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighass_obj[ass_obj].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighass_obj[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighspree_monster) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Monster Kills</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighspree_monster[pid].'">'.FlagImage($sql_mhighspree_monster['country'], false).' '.$sql_mhighspree_monster[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighspree_monster[spree_monster].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighspree_monster[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighspree_god) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Godlikes</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighspree_god[pid].'">'.FlagImage($sql_mhighspree_god['country'], false).' '.$sql_mhighspree_god[name].'</a></td>
+ <td class="grey" align="center">'.$sql_mhighspree_god[spree_god].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighspree_god[matchid].'">(click)</a></td>
+ </tr>';
+}
+if ($sql_mhighrank) {
+ echo '
+ <tr>
+ <td class="dark" align="center">Rank Points</td>
+ <td nowrap class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$sql_mhighrank[pid].'">'.FlagImage($sql_mhighrank['country'], false).' '.$sql_mhighrank[name].'</a></td>
+ <td class="grey" align="center">'.get_dp($sql_mhighrank[rank]).'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$sql_mhighrank[matchid].'">(click)</a></td>
+ </tr>';
+}
+echo '
+</tbody></table>
+<br>
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="480">
+ <tbody>
+<tr>
+ <td class="medheading" colspan="4" align="center">Weapon Career Highs</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="175">Category</td>
+ <td class="smheading" align="center" width="175">Player</td>
+ <td class="smheading" align="center" width="65">Kills</td>
+ <td class="smheading" align="center" width="65">Matches</td>
+ </tr>
+';
+
+$sql_mweapons = "SELECT id, name, image FROM uts_weapons WHERE hide <> 'Y' ORDER BY sequence, id ASC";
+$q_mweapons = mysql_query($sql_mweapons) or die(mysql_error());
+while ($r_mweapons = mysql_fetch_array($q_mweapons)) {
+
+ $wid = $r_mweapons[id];
+ $sql_mweaponsl = "SELECT w.pid AS playerid, pi.name AS name, pi.country AS country, SUM(w.kills) as kills, COUNT(DISTINCT w.matchid) AS mcount FROM uts_weaponstats AS w LEFT JOIN uts_pinfo AS pi ON w.pid = pi.id WHERE w.weapon = '$wid' AND w.pid > 0 AND w.matchid <> 0 AND pi.banned <> 'Y' GROUP BY w.pid ORDER BY kills DESC LIMIT 0,1";
+ $q_mweaponsl = mysql_query($sql_mweaponsl) or die(mysql_error());
+ while ($r_mweaponsl = mysql_fetch_array($q_mweaponsl)) {
+
+ echo '<tr>
+ <td class="dark" align="center">'.$r_mweapons[name].'</td>
+ <td class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$r_mweaponsl[playerid].'">'.FlagImage($r_mweaponsl[country], false).' '.$r_mweaponsl[name].'</a></td>
+ <td class="grey" align="center">'.$r_mweaponsl[kills].'</td>
+ <td class="grey" align="center">'.$r_mweaponsl[mcount].'</td>
+ </tr>';
+
+ }
+}
+
+echo '</tbody></table>
+<br>';
+
+// NGStats Style Weapon Highs (All Time)
+
+echo '<table class = "box" border="0" cellpadding="1" cellspacing="2" width="480">
+ <tbody>
+<tr>
+ <td class="medheading" colspan="4" align="center">Weapon Match Highs</td>
+ </tr>
+ <tr>
+ <td class="smheading" align="center" width="175">Category</td>
+ <td class="smheading" align="center" width="175">Player</td>
+ <td class="smheading" align="center" width="65">Kills</td>
+ <td class="smheading" align="center" width="65">Match</td>
+ </tr>
+';
+
+$sql_mweapons = "SELECT id, name, image FROM uts_weapons WHERE hide <> 'Y' ORDER BY sequence, id ASC";
+$q_mweapons = mysql_query($sql_mweapons) or die(mysql_error());
+while ($r_mweapons = mysql_fetch_array($q_mweapons)) {
+
+ $wid = $r_mweapons[id];
+ $sql_mweaponsl = "SELECT w.matchid, w.pid AS playerid, pi.name AS name, pi.country AS country, w.kills FROM uts_weaponstats AS w LEFT JOIN uts_pinfo AS pi ON w.pid = pi.id WHERE w.weapon = '$wid' AND w.pid > 0 AND w.matchid > 0 AND pi.banned <> 'Y' ORDER BY w.kills DESC LIMIT 0,1";
+ $q_mweaponsl = mysql_query($sql_mweaponsl) or die(mysql_error());
+ while ($r_mweaponsl = mysql_fetch_array($q_mweaponsl)) {
+
+ echo '<tr>
+ <td class="dark" align="center">'.$r_mweapons[name].'</td>
+ <td class="greyhuman" align="center"><a class="greyhuman" href="./?p=pinfo&amp;pid='.$r_mweaponsl[playerid].'">'.FlagImage($r_mweaponsl[country], false).' '.$r_mweaponsl[name].'</a></td>
+ <td class="grey" align="center">'.$r_mweaponsl[kills].'</td>
+ <td class="grey" align="center"><a class="greyhuman" href="./?p=match&amp;mid='.$r_mweaponsl[matchid].'">(click)</a></td>
+ </tr>';
+ }
+}
+
+// NGStats Style Weapon Highs (Single Match)
+echo'</tbody></table>';
+?>
diff --git a/html/pages/watchlist.php b/html/pages/watchlist.php
new file mode 100755
index 0000000..bfc8512
--- /dev/null
+++ b/html/pages/watchlist.php
@@ -0,0 +1,106 @@
+<?php
+global $s_lastvisit;
+echo'
+<table class = "box" border="0" cellpadding="1" cellspacing="2" width="720">
+ <tbody><tr>
+ <td class="heading" align="center">Your Watchlist</td>
+ </tr>
+</tbody></table>';
+echo '<br><br><br>';
+
+
+$watchlist = GetCurrentWatchlist();
+if (count($watchlist) > 25) $watchlist = array_slice($watchlist, 0, 25);
+if (count($watchlist) == 0) {
+ echo "<p class='pages'>Your watchlist is empty!<br><br>You can add players to your watchlist by clicking the appropriate icon on the header of their career summary page.</p>";
+ return;
+}
+
+echo '
+<table class="box" border="0" cellpadding="1" cellspacing="1" width="625">
+ <tbody>
+ <tr>
+ <td class="smheading" align="center" width="150">Player Name</td>
+ <td class="smheading" align="center">Last Match</td>
+ <td class="smheading" align="center">Matches</td>
+ <td class="smheading" align="center">Score</td>
+ <td class="smheading" align="center">Frags</td>
+ <td class="smheading" align="center">Kills</td>
+ <td class="smheading" align="center">Deaths</td>
+ <td class="smheading" align="center">Suicides</td>
+ <td class="smheading" align="center">Eff</td>
+ <td class="smheading" align="center">Acc</td>
+ <td class="smheading" align="center">TTL</td>
+ <td class="smheading" align="center">Hours</td>
+ </tr>';
+
+
+$i = 0;
+foreach($watchlist as $pid) {
+ $sql_players = "SELECT pi.id AS pid,
+ pi.name,
+ pi.country,
+ m.time,
+ m.id AS mid
+ FROM uts_pinfo pi,
+ uts_match m,
+ uts_player p
+ WHERE pi.id = '$pid'
+ AND p.matchid = m.id
+ AND p.pid = pi.id
+ ORDER BY m.time DESC
+ LIMIT 0,1
+ ";
+
+ $sql_pinfo = " SELECT COUNT(*) AS games,
+ SUM(p.gamescore) as gamescore,
+ SUM(p.frags) AS frags,
+ SUM(p.kills) AS kills,
+ SUM(p.deaths) AS deaths,
+ SUM(p.suicides) as suicides,
+ AVG(p.eff) AS eff,
+ AVG(p.accuracy) AS accuracy,
+ AVG(p.ttl) AS ttl,
+ SUM(gametime) as gametime
+ FROM uts_player AS p
+ WHERE p.pid = '$pid'
+ GROUP BY p.pid";
+ $r_pinfo = small_query($sql_pinfo);
+
+ $q_players = mysql_query($sql_players) or die(mysql_error());
+
+
+ while ($r_players = mysql_fetch_array($q_players)) {
+ $i++;
+ $new = (mtimestamp($r_players['time']) > $s_lastvisit) ? true : false;
+ $class = ($i % 2) ? 'grey' : 'grey2';
+ echo '<tr>';
+ echo '<td class="dark"><a class="darkhuman" href="?p=pinfo&amp;pid='. $r_players['pid'] .'">';
+ echo FormatPlayerName($r_players['country'], $r_players['pid'], $r_players['name']);
+ echo '</a></td>';
+ echo '<td class="'.$class.'" align="center"><a class="'.$class.'" href="?p=match&amp;mid='. $r_players['mid'] .'">';;
+ if ($new) echo "<strong>";
+ echo date("Y-m-d H:i", mtimestamp($r_players['time']));
+ if ($new) echo "</strong>";
+ echo '</a></td>';
+
+ echo '
+ <td class="'.$class.'" align="center">'.$r_pinfo['games'].'</td>
+ <td class="'.$class.'" align="center">'.$r_pinfo['gamescore'].'</td>
+ <td class="'.$class.'" align="center">'.$r_pinfo['frags'].'</td>
+ <td class="'.$class.'" align="center">'.$r_pinfo['kills'].'</td>
+ <td class="'.$class.'" align="center">'.$r_pinfo['deaths'].'</td>
+ <td class="'.$class.'" align="center">'.$r_pinfo['suicides'].'</td>
+ <td class="'.$class.'" align="center">'.get_dp($r_pinfo['eff']).'</td>
+ <td class="'.$class.'" align="center">'.get_dp($r_pinfo['accuracy']).'</td>
+ <td class="'.$class.'" align="center">'.GetMinutes($r_pinfo['ttl']).'</td>
+ <td class="'.$class.'" align="center">'.sec2hour($r_pinfo['gametime']).'</td>';
+
+ echo '</tr>';
+ }
+}
+
+echo '</tbody></table>';
+
+
+?>