diff options
author | Matthijs Kuiper <info@matthijskuiper.nl> | 2018-01-08 23:47:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-08 23:47:23 +0100 |
commit | e861eafbeae0560add7956530d76de6cc285be20 (patch) | |
tree | c32e746977fde711cecd716570989014bf2d3592 /html/includes/renderer-dm.php | |
parent | 66b162b5f01c996fd8a5cd4e570e31f8483cdffa (diff) | |
parent | 730c20dd04b5753cb372a289923e39516d1f8b87 (diff) |
Merge pull request #5 from randommonk/develop4.3.0
Bumped version to 4.3. Added jpgraph stats developed by killerEye
Diffstat (limited to 'html/includes/renderer-dm.php')
-rw-r--r-- | html/includes/renderer-dm.php | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/html/includes/renderer-dm.php b/html/includes/renderer-dm.php new file mode 100644 index 0000000..8e9f439 --- /dev/null +++ b/html/includes/renderer-dm.php @@ -0,0 +1,252 @@ +<?php + +require_once 'renderer-general-import.php'; + +/** +Render team DM graph for 2 teams scenario +*/ +function renderFragBarsTeams($datafragsteam,$derivfragsteam,$topTeams,$counter) { + global $matchid; + + $teamLabels = generateTeamLabels(); + + if($playernumberofteams == 2) { + // Net frags for first 2 teams + for($i=0;$i<($counter-1);$i++) { + $netfragsteam[0][$i] = $derivfragsteam[0][$i]-$derivfragsteam[1][$i]; + $netfragsteam[1][$i] = $derivfragsteam[1][$i]-$derivfragsteam[0][$i]; + + $netfragsteam[0][$i] = $netfragsteam[0][$i]>0 ? $netfragsteam[0][$i] : 0; + $netfragsteam[1][$i] = $netfragsteam[1][$i]>0 ? $netfragsteam[1][$i] : 0; + } + + // Save net frags in db for first 2 teams + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_TEAMDERIV.", + '".mysql_real_escape_string(gzencode(serialize(array($netfragsteam,$datafragsteam))))."', + '".mysql_real_escape_string(gzencode(serialize($teamLabels)))."')") or die(mysql_error()); + + } else { + + // Save team score over team for teams + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_TEAMSCORE.", + '".mysql_real_escape_string(gzencode(serialize($datafragsteam)))."', + '".mysql_real_escape_string(gzencode(serialize($teamLabels)))."')") or die(mysql_error()); + + } + + // Generate normalized data (vs #2) & store it + $normalfragsteam = normalizeDMdata($datafragsteam,$topTeams,$counter); + + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_TEAMNORMAL.", + '".mysql_real_escape_string(gzencode(serialize($normalfragsteam)))."', + '".mysql_real_escape_string(gzencode(serialize($teamLabels)))."')") or die(mysql_error()); + +} + + +/** +Basically generates all the different graphs wrt frags over time +*/ +function renderFragBars($datafrags, $derivfrags, $topFraggers,$counter) { + global $matchid; + + // base frags based on amount of players + $countPlayers = count($topFraggers); + + $topFraggersLabels = array_chunk(generateLabelsFraggers($topFraggers),4); + $datafragschunks = array_chunk(sortDMdata($datafrags,$topFraggers),4); + + // Only do something if there are frags & players + if($countPlayers > 1 && count($datafrags[$topFraggers[0]])>0 && count($derivfrags[$topFraggers[0]])>0) { + + // In duel, show bar chart like DOM + if($countPlayers == 2) { + + // Net frags for first 2 players + for($i=0;$i<($counter-1);$i++) { + $netfrags[0][$i] = $derivfrags[$topFraggers[0]][$i]-$derivfrags[$topFraggers[1]][$i]; + $netfrags[1][$i] = $derivfrags[$topFraggers[1]][$i]-$derivfrags[$topFraggers[0]][$i]; + + $netfrags[0][$i] = $netfrags[0][$i]>0 ? $netfrags[0][$i] : 0; + $netfrags[1][$i] = $netfrags[1][$i]>0 ? $netfrags[1][$i] : 0; + } + + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_PLAYERDERIV.", + '".mysql_real_escape_string(gzencode(serialize(array($netfrags,$datafragschunks[0]))))."', + '".mysql_real_escape_string(gzencode(serialize($topFraggersLabels[0])))."')") or die(mysql_error()); + + } else { + + // Generate graph for player 1 to 4 + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_PLAYERSCORE.", + '".mysql_real_escape_string(gzencode(serialize($datafragschunks[0])))."', + '".mysql_real_escape_string(gzencode(serialize($topFraggersLabels[0])))."')") or die(mysql_error()); + + } + + // Normalize frags + $normalfrags = normalizeDMdata($datafrags,$topFraggers,$counter); + $normalfragschunks = array_chunk(sortDMdata($normalfrags,$topFraggers),4); + + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_PLAYERNORMAL.", + '".mysql_real_escape_string(gzencode(serialize($normalfragschunks[0])))."', '".mysql_real_escape_string(gzencode(serialize($topFraggersLabels[0])))."')") or die(mysql_error()); + + // If at least 8 players, also great second graph for 5 to 8 + if($countPlayers >= 8) { + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_PLAYERSCORE5.", + '".mysql_real_escape_string(gzencode(serialize($datafragschunks[1])))."', + '".mysql_real_escape_string(gzencode(serialize($topFraggersLabels[1])))."')") or die(mysql_error()); + + mysql_query("INSERT INTO uts_chartdata (mid,chartid,data,labels) VALUES (".$matchid.", ".RENDERER_CHART_FRAGS_PLAYERNORMAL5.", + '".mysql_real_escape_string(gzencode(serialize($normalfragschunks[1])))."', + '".mysql_real_escape_string(gzencode(serialize($topFraggersLabels[1])))."')") or die(mysql_error()); + } + + + } +} + + +/** +Sort data based on ranking of players +*/ +function sortDMdata($datafrags,$topFraggers) { + $sortedArray = array(); + + foreach($topFraggers as $fragger) { + $sortedArray[] = $datafrags[$fragger]; + } + + return $sortedArray; +} + +/** +Normalize data vs #2 in rank to show gap over time +*/ +function normalizeDMdata($datafrags, $topFraggers,$counter) { + // base frags based on amount of players + $countPlayers = count($topFraggers); + $player3hasData = (count($datafrags[$topFraggers[2]])>0); + $player4hasData = (count($datafrags[$topFraggers[3]])>0); + + // Generate normalized data for players + for($i=0;$i<$counter;$i++) { + + // Normalize data vs #2 for first 4 players + $normalfrags[$topFraggers[0]][$i] = $datafrags[$topFraggers[0]][$i] - $datafrags[$topFraggers[1]][$i]; + $normalfrags[$topFraggers[1]][$i] = 0; + + if($countPlayers >=3 && $player3hasData) + $normalfrags[$topFraggers[2]][$i] = $datafrags[$topFraggers[2]][$i] - $datafrags[$topFraggers[1]][$i]; + if($countPlayers >=4 && $player4hasData) + $normalfrags[$topFraggers[3]][$i] = $datafrags[$topFraggers[3]][$i] - $datafrags[$topFraggers[1]][$i]; + + // Also do this vs 6 for player 5 to 8 if we have at least 8 players + if($countPlayers >= 8) { + $normalfrags[$topFraggers[4]][$i] = $datafrags[$topFraggers[4]][$i] - $datafrags[$topFraggers[5]][$i]; + $normalfrags[$topFraggers[6]][$i] = $datafrags[$topFraggers[6]][$i] - $datafrags[$topFraggers[5]][$i]; + $normalfrags[$topFraggers[7]][$i] = $datafrags[$topFraggers[7]][$i] - $datafrags[$topFraggers[5]][$i]; + $normalfrags[$topFraggers[5]][$i] = 0; + } + + } + + return $normalfrags; +} + +/** +Get data wrt frags over time +*/ +function parseDMdata($uid) { + global $time_gamestart; + global $time_gameend; + global $time_ratio_correction; + global $playernumberofteams; + global $playerteams; + + $uid = mysql_real_escape_string($uid); + + // Get all frags related events + start & end + $q_frags = mysql_query("SELECT * FROM `uts_temp_$uid` WHERE col0>=".mysql_real_escape_string($time_gamestart)." ORDER BY id ASC") or die(mysql_error()); + + // Get all unique player id's + $q_ids = mysql_query("SELECT DISTINCT col2 FROM `uts_temp_$uid` WHERE col1='kill'"); + while($data = mysql_fetch_array($q_ids)) { + $ids[] = $data[0]; + } + + // Iterate over frags + $prevx = 0; + $prevfrags = array(); + $prevfragsteam = array(); + $counter = 1; + $firstrun = true; + $realTimeEnd = ($time_gameend-$time_gamestart)/$time_ratio_correction/60; + + while($data = mysql_fetch_array($q_frags)) { + + // Collect data from utstats own table + $r_time = ($data[1]-$time_gamestart)/$time_ratio_correction/60; // Transform UT time to real time + $r_type = $data[2]; + $r_killer = $data[3]; + + // If game_end event & game ended cause timelimit reached, round the time down to prevent UT gay timing to screw the graph + if($r_type == "game_end" && $r_capper == "timelimit") + $r_time = floor($r_time); + + // Add frag if kill event, deduct if suicide + if($r_type == "kill") { + $frags[$r_killer]++; + $fragsteam[$playerteams[$r_killer]]++; + } else if($r_type == "suicide" || $r_type == "teamkill") { + $frags[$r_killer]--; + $fragsteam[$playerteams[$r_killer]]--; + } + + // Only save the data each minute. Added game_start & game_end for first & last tick + // Add 0.05 sec to counter for gay UT timing rounding error + if($r_type == "game_start" || ($r_time>$counter && ($realTimeEnd-$r_time)>0.4) || $r_type == "game_end") { + + foreach($ids as $id) { + // On first run, everyone has score 0 + if($firstrun) + $frags[$id] = 0; + else + $derivfrags[$id][] = $frags[$id] - $prevfrags[$id]; + + $datafrags[$id][] = $frags[$id]; + } + + $prevfrags = $frags; + + for($i=0;$i<$playernumberofteams;$i++) { + // On first run, everyone has score 0 + if($firstrun) + $fragsteam[$i] = 0; + else + $derivfragsteam[$i][] = $fragsteam[$i] - $prevfragsteam[$i]; + + $datafragsteam[$i][] = $fragsteam[$i]; + + } + + $prevfragsteam = $fragsteam; + + if(!$firstrun) + $counter++; + else + $firstrun = false; + } + + } + + // Get top 8 - no time for the noobies + arsort($frags); + arsort($fragsteam); + $topFraggers = array_slice(array_keys($frags),0,8); + $topTeams = array_slice(array_keys($fragsteam),0,$playernumberofteams); + + return array($datafrags, $derivfrags, $topFraggers,$counter,$datafragsteam,$derivfragsteam,$topTeams); +} + +?>
\ No newline at end of file |