372 lines
11 KiB
XML
372 lines
11 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
|
|
<!DOCTYPE xsl:stylesheet [
|
|
<!ENTITY nbsp " ">
|
|
<!ENTITY copy "©">
|
|
<!ENTITY reg "®">
|
|
<!ENTITY trade "™">
|
|
<!ENTITY mdash "—">
|
|
<!ENTITY ldquo "“">
|
|
<!ENTITY rdquo "”">
|
|
<!ENTITY pound "£">
|
|
<!ENTITY yen "¥">
|
|
<!ENTITY euro "€">
|
|
<!ENTITY raquo "»">
|
|
]>
|
|
|
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
|
|
|
|
|
<xsl:template name="ReturnUp">
|
|
<div align="center"><a href="#top"><img src="../../../basics/arrup.gif"/>
|
|
<span class="ReturnUp">Return to Match Information</span>
|
|
</a></div><br/>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template name="FormatMS">
|
|
<xsl:param name="MS"/>
|
|
<xsl:variable name="S">
|
|
<xsl:value-of select="(($MS mod 60000) div 1000)"/>
|
|
</xsl:variable>
|
|
<xsl:variable name="M">
|
|
<xsl:value-of select="(($MS - $S * 1000) div 60000)"/>
|
|
</xsl:variable>
|
|
<xsl:value-of select="$M"/>:<xsl:value-of select="format-number($S, '00.000')"/>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="/">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-2" />
|
|
<title>Match Statistics</title>
|
|
<link href="../../../basics/stats141.css" type="text/css" rel="stylesheet" />
|
|
</head>
|
|
<body onLoad="parent.processFilter(this)">
|
|
|
|
<div><a name="top"></a>
|
|
|
|
|
|
<xsl:for-each select="match">
|
|
<p class="SectionTitle">Match Details</p>
|
|
|
|
<table class="MatchInfo">
|
|
<tr>
|
|
<td class="MatchInfoLabel">Date</td>
|
|
<td class="MatchInfoValue"><xsl:value-of select="substring-before(@datetime,' ')"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="MatchInfoLabel">Time</td>
|
|
<td class="MatchInfoValue"><xsl:value-of select="substring-after(@datetime,' ')"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="MatchInfoLabel">Map</td>
|
|
<td class="MatchInfoValue"><xsl:value-of select="@map" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="MatchInfoLabel">Gametype</td>
|
|
<td class="MatchInfoValue"><xsl:value-of select="@type" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="MatchInfoLabel">Server</td>
|
|
<td class="MatchInfoValue"><xsl:value-of select="@server" /></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p class="SectionTitle">
|
|
<xsl:choose>
|
|
<xsl:when test="@isTeamGame = 'true'">
|
|
Showing <xsl:value-of select="count(team)" /> teams:
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
Showing <xsl:value-of select="count(player)" /> players:
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</p>
|
|
|
|
<xsl:choose>
|
|
<xsl:when test="@isTeamGame = 'true'">
|
|
<table class="TeamScores">
|
|
<xsl:for-each select="team">
|
|
<td align="center">
|
|
<table>
|
|
<tr>
|
|
<td class="TeamName"><xsl:value-of select="@name"/></td>
|
|
<td />
|
|
<td class="TeamScore"><xsl:value-of select="@score"/></td>
|
|
</tr>
|
|
<xsl:for-each select="player">
|
|
<xsl:sort select="number(stat[@name='Net']/@value)" data-type="number" order="descending" />
|
|
<tr>
|
|
<td><a href="#{@name}" id="filterme" target="_self"><img src="../../../basics/arrdown.gif" />  <span class="PlayerHeaderName" id="filterme"><xsl:value-of select="@name" /></span> </a></td>
|
|
<td class="PlayerHeaderScore"><xsl:value-of select="number(stat[@name='Net']/@value)" /></td>
|
|
<td class="PlayerHeaderScore"><xsl:value-of select="number(stat[@name='Score']/@value)" /></td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
</td>
|
|
<td class="TeamScoresPad"/>
|
|
</xsl:for-each>
|
|
</table>
|
|
|
|
<br/><hr/>
|
|
|
|
<xsl:for-each select="team">
|
|
<span class="SectionTitle"><xsl:value-of select="@name" /></span>
|
|
<xsl:for-each select="player">
|
|
<xsl:sort select="number(stat[@name='Net']/@value)" data-type="number" order="descending" />
|
|
<xsl:apply-templates select=".">
|
|
<xsl:with-param name="isTeamGame" select="1" />
|
|
</xsl:apply-templates>
|
|
<xsl:call-template name="ReturnUp"/>
|
|
</xsl:for-each>
|
|
<br />
|
|
</xsl:for-each>
|
|
</xsl:when>
|
|
|
|
<xsl:otherwise>
|
|
<table class="PlayerScores">
|
|
<xsl:for-each select="player">
|
|
<xsl:sort select="number(stat[@name='Score']/@value)" data-type="number" order="descending" />
|
|
<tr>
|
|
<td><a href="#{@name}" id="filterme"><img src="../../../basics/arrdown.gif" />  <span class="PlayerHeaderName" id="filterme"><xsl:value-of select="@name" /></span> </a></td>
|
|
<td><p class="PlayerHeaderScore"><xsl:value-of select="stat[@name='Score']/@value" /></p></td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
|
|
<br/><hr/>
|
|
|
|
<xsl:for-each select="player">
|
|
<xsl:sort select="number(stat[@name='Score']/@value)" data-type="number" order="descending" />
|
|
<xsl:apply-templates select=".">
|
|
<xsl:with-param name="isTeamGame" select="0" />
|
|
</xsl:apply-templates>
|
|
<xsl:call-template name="ReturnUp"/>
|
|
</xsl:for-each>
|
|
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:for-each>
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="player">
|
|
<xsl:param name="isTeamGame"/>
|
|
|
|
<!-- populate all our synthetics NOW, instead of clustering them in with the display code -->
|
|
<!-- we explicitly calc them AS vars rather than just emitting, so they can be used for sorting etc -->
|
|
|
|
<xsl:variable name="EFF">
|
|
<xsl:choose>
|
|
<xsl:when test="stat[@name='Kills'] = 0">
|
|
0
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="(round (100 * stat[@name='Kills']/@value div (stat[@name='Kills']/@value + stat[@name='Deaths']/@value) ) )" />%
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="DmgEFF">
|
|
<xsl:choose>
|
|
<xsl:when test="stat[@name='DamageGiven'] = 0">
|
|
0
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="(round (100 * stat[@name='DamageGiven']/@value div (stat[@name='DamageGiven']/@value + stat[@name='DamageTaken']/@value) ) )" />%
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="DmgTeam">
|
|
<xsl:choose>
|
|
<xsl:when test="string(0 - stat[@name='TeamDamage']/@value) = 'NaN'">
|
|
0
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="stat[@name='TeamDamage']/@value" />
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
|
|
<a name="{@name}"/>
|
|
<td class="PlayerHeaderName" id="filterme"><xsl:value-of select="@name"/></td>
|
|
<td class="PlayerHeaderScore"><xsl:value-of select="stat[@name='Score']/@value"/></td>
|
|
|
|
<!--
|
|
<xsl:variable name="guid">
|
|
<xsl:choose>
|
|
<xsl:when test="@guid = ''">
|
|
<xsl:value-of select="'none'" />
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="@guid" />
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
<tr>
|
|
<td><p class="playerGUID">GUID:<xsl:value-of select="$guid" /> </p></td>
|
|
</tr>
|
|
-->
|
|
|
|
<xsl:if test="count(CTF/stat) != 0">
|
|
<p class="SectionTitle">Flag Roles</p>
|
|
<table class="Combat">
|
|
<tr>
|
|
<xsl:for-each select="CTF/stat">
|
|
<td class="StatName"><xsl:value-of select="@name"/></td>
|
|
</xsl:for-each>
|
|
</tr>
|
|
<tr>
|
|
<xsl:for-each select="CTF/stat">
|
|
<td class="StatValue"><xsl:value-of select="@value"/></td>
|
|
</xsl:for-each>
|
|
</tr>
|
|
</table>
|
|
</xsl:if>
|
|
|
|
<p class="SectionTitle">Combat</p>
|
|
<table class="Combat">
|
|
<tr>
|
|
<td><p class="StatName">
|
|
<xsl:choose>
|
|
<xsl:when test="$isTeamGame = 1">
|
|
NET
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
Score
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</p></td>
|
|
<td><p class="StatName">Kills</p></td>
|
|
<td><p class="StatName">Deaths</p></td>
|
|
<td><p class="StatName">Suicides</p></td>
|
|
<td><p class="StatName">EFF</p></td>
|
|
<xsl:if test="string(0 - stat[@name='TeamKills']/@value) != 'NaN'">
|
|
<td><p class="StatName">TeamKills</p></td>
|
|
</xsl:if>
|
|
</tr>
|
|
<tr>
|
|
<td><p class="StatValue">
|
|
<xsl:choose>
|
|
<xsl:when test="$isTeamGame = 1">
|
|
<xsl:value-of select="stat[@name='Net']/@value" />
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="stat[@name='Score']/@value" />
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="stat[@name='Kills']/@value" /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="stat[@name='Deaths']/@value" /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="stat[@name='Suicides']/@value" /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="$EFF" /></p></td>
|
|
<xsl:if test="string(0 - stat[@name='TeamKills']/@value) != 'NaN'">
|
|
<td><p class="StatValue"><xsl:value-of select="stat[@name='TeamKills']/@value" /></p></td>
|
|
</xsl:if>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><p class="StatName">DmgEFF</p></td>
|
|
<td><p class="StatName">DmgGiven</p></td>
|
|
<td><p class="StatName">DmgTaken</p></td>
|
|
<xsl:if test="$DmgTeam != 0">
|
|
<td><p class="StatName">Team Damage</p></td>
|
|
</xsl:if>
|
|
<td><p class="StatName">DmgNET</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td><p class="StatValue"><xsl:value-of select="$DmgEFF" /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="stat[@name='DamageGiven']/@value" /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="stat[@name='DamageTaken']/@value" /></p></td>
|
|
<xsl:if test="$DmgTeam != 0">
|
|
<td><p class="StatValue"><xsl:value-of select="$DmgTeam" /></p></td>
|
|
</xsl:if>
|
|
<td><p class="StatValue"><xsl:value-of select="(stat[@name='DamageGiven']/@value - stat[@name='DamageTaken']/@value - $DmgTeam)" /></p></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<xsl:if test="count(powerups/item) != 0"> <!-- lol@xsl: count(SET) always returns 1, gg -->
|
|
<p class="SectionTitle">Powerups</p>
|
|
<table class="Powerups">
|
|
<xsl:for-each select="powerups/item">
|
|
<tr>
|
|
<td class="StatName"><xsl:value-of select="@name"/></td>
|
|
<td class="StatValue"><xsl:value-of select="@pickups"/></td>
|
|
<td class="StatValue">
|
|
<xsl:call-template name="FormatMS">
|
|
<xsl:with-param name="MS" select="@time"/>
|
|
</xsl:call-template>
|
|
</td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
</xsl:if>
|
|
|
|
<p class="SectionTitle">Weapons</p>
|
|
<table class="Weapons">
|
|
<tr>
|
|
<td><p class="StatName">Weapon</p></td>
|
|
<td><p class="StatName">Kills</p></td>
|
|
<td><p class="StatName">Acc</p></td>
|
|
<td><p class="StatName">Hits</p></td>
|
|
<td><p class="StatName">Shots</p></td>
|
|
</tr>
|
|
<xsl:for-each select="weapons/weapon">
|
|
<tr>
|
|
<td><xsl:value-of select="@name"/></td>
|
|
<td><p class="StatValue"><xsl:value-of select="@kills" /></p></td>
|
|
<td><p class="StatValue"><xsl:apply-templates select="." /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="@hits" /></p></td>
|
|
<td><p class="StatValue"><xsl:value-of select="@shots" /></p></td>
|
|
</tr>
|
|
</xsl:for-each>
|
|
</table>
|
|
|
|
<xsl:if test="count(items) != 0">
|
|
<p class="SectionTitle">Items</p>
|
|
<table class="Items">
|
|
<tr>
|
|
<xsl:if test="string(0 - stat[@name='HealthTotal']/@value) != 'NaN'">
|
|
<td class="StatName">Health</td>
|
|
</xsl:if>
|
|
<xsl:if test="string(0 - stat[@name='ArmorTotal']/@value) != 'NaN'">
|
|
<td class="StatName">Armor</td>
|
|
</xsl:if>
|
|
<xsl:for-each select="items/item">
|
|
<td class="StatName"><xsl:value-of select="@name"/></td>
|
|
</xsl:for-each>
|
|
</tr>
|
|
<xsl:if test="string(0 - stat[@name='HealthTotal']/@value) != 'NaN'">
|
|
<td class="StatValue"><xsl:value-of select="stat[@name='HealthTotal']/@value" /></td>
|
|
</xsl:if>
|
|
<xsl:if test="string(0 - stat[@name='ArmorTotal']/@value) != 'NaN'">
|
|
<td class="StatValue"><xsl:value-of select="stat[@name='ArmorTotal']/@value" /></td>
|
|
</xsl:if>
|
|
<xsl:for-each select="items/item">
|
|
<td class="StatValue"><xsl:value-of select="@pickups"/></td>
|
|
</xsl:for-each>
|
|
<tr>
|
|
</tr>
|
|
</table>
|
|
</xsl:if>
|
|
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="weapon">
|
|
<xsl:if test="@shots > 0">
|
|
<xsl:value-of select="(round (@hits div @shots * 10000)) div 100" />%
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
</xsl:stylesheet>
|