function g2_test() { $r0 = 1500; // Glicko 1 rating $RD0 = 350; // Glicko 1 rating deviation $sigma0 = 0.06; // Glicko 2 volatility $tau = 0.5; // constrains volatility over time $epsilon = 1.0E-6; $q_inv = 173.7178; //400/log(10); $mu0 = 0; $phi0 = $RD0 / $q_inv; // 2players $A_mu = g2_from_g1_rating(1500, $r0); $A_phi = g2_from_g1_deviation(350); $A_sigma = $sigma0; $B_mu = g2_from_g1_rating(1500, $r0); $B_phi = g2_from_g1_deviation(350); $B_sigma = $sigma0; $A_r = g2_to_g1_rating($A_mu, $r0); $A_RD = g2_to_g1_deviation($A_phi); $B_r = g2_to_g1_rating($B_mu, $r0); $B_RD = g2_to_g1_deviation($B_phi); echo "A mu={$A_mu}, r={$A_r}<br>"; echo "A phi={$A_phi}, RD={$A_RD}<br>"; echo "A sigma={$A_sigma}<br>"; echo "B mu={$B_mu}, r={$B_r}<br>"; echo "B phi={$B_phi}, RD={$B_RD}<br>"; echo "B sigma={$B_sigma}<br>"; echo "-----------------------------------<br>"; $update_A = glicko2_update($A_mu, $A_phi, $A_sigma, 1, $B_mu, $B_phi, $B_sigma, 2, $tau, $epsilon); $update_B = glicko2_update($B_mu, $B_phi, $B_sigma, 2, $A_mu, $A_phi, $A_sigma, 1, $tau, $epsilon); $A_mu = $A_mu + $update_A[0]; $A_phi = $A_phi * $update_A[1]; $A_sigma = $A_sigma * $update_A[2]; $B_mu = $B_mu + $update_B[0]; $B_phi = $B_phi * $update_B[1]; $B_sigma = $B_sigma * $update_B[2]; $A_r = g2_to_g1_rating($A_mu, $r0); $A_RD = g2_to_g1_deviation($A_phi); $B_r = g2_to_g1_rating($B_mu, $r0); $B_RD = g2_to_g1_deviation($B_phi); echo "---><br>"; echo "A mu={$A_mu}, r={$A_r}<br>"; echo "A phi={$A_phi}, RD={$A_RD}<br>"; echo "A sigma={$A_sigma}<br>"; echo "B mu={$B_mu}, r={$B_r}<br>"; echo "B phi={$B_phi}, RD={$B_RD}<br>"; echo "B sigma={$B_sigma}<br>"; echo "-----------------------------------<br>"; }
function match_scores_update() { global $sql; // Get event info $event_id = $this->fields['Event']; $event = new Event($event_id); // Initialize scores ELO/TrueSkill/Glicko2 $deltaELO = 0; $deltaTS_mu = 0; $deltaTS_sigma = 1; $deltaG2_mu = 0; $deltaG2_phi = 1; $deltaG2_sigma = 1; $G2_r0 = $event->getField('G2_default_r'); $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($deltaELO) . "'," . " Player_deltaTS_mu = '" . floatToSQL($deltaTS_mu) . "'," . " Player_deltaTS_sigma = '" . floatToSQL($deltaTS_sigma) . "'," . " Player_deltaG2_mu = '" . floatToSQL($deltaG2_mu) . "'," . " Player_deltaG2_phi = '" . floatToSQL($deltaG2_phi) . "'," . " Player_deltaG2_sigma = '" . floatToSQL($deltaG2_sigma) . "'," . " Player_Win = 0," . " Player_Draw = 0," . " Player_Loss = 0," . " Player_Points = 0" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')"; $result = $sql->db_Query($q); // Calculate number of players and teams for the match $q = "SELECT DISTINCT " . TBL_SCORES . ".Player_MatchTeam" . " FROM " . TBL_SCORES . " WHERE (" . TBL_SCORES . ".MatchID = '" . $this->fields['MatchID'] . "')"; $result = $sql->db_Query($q); $nbr_teams = mysql_numrows($result); if ($nbr_teams != 0) { // Update scores ELO and TS for ($i = 1; $i <= $nbr_teams - 1; $i++) { for ($j = $i + 1; $j <= $nbr_teams; $j++) { $output .= "Team {$i} vs. Team {$j}<br />"; switch ($event->getMatchPlayersType()) { case 'Players': $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_PLAYERS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_PLAYERS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_PLAYERS . ".PlayerID = " . TBL_SCORES . ".Player)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$i}')"; $resultA = $sql->db_Query($q); $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_PLAYERS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_PLAYERS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_PLAYERS . ".PlayerID = " . TBL_SCORES . ".Player)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$j}')"; $resultB = $sql->db_Query($q); $NbrPlayersTeamA = mysql_numrows($resultA); $teamA_Rank = mysql_result($resultA, 0, TBL_SCORES . ".Player_Rank"); $teamA_Forfeit = mysql_result($resultA, 0, TBL_SCORES . ".Player_Forfeit"); $teamA_ELO = 0; $teamA_TS_mu = 0; $teamA_TS_sigma2 = 0; $teamA_G2_r = 0; $teamA_G2_RD2 = 0; $teamA_G2_sigma2 = 0; for ($k = 0; $k < $NbrPlayersTeamA; $k++) { $teamA_ELO += mysql_result($resultA, $k, TBL_PLAYERS . ".ELORanking"); $teamA_TS_mu += mysql_result($resultA, $k, TBL_PLAYERS . ".TS_mu"); $teamA_TS_sigma2 += pow(mysql_result($resultA, $k, TBL_PLAYERS . ".TS_sigma"), 2); $teamA_G2_r += mysql_result($resultA, $k, TBL_PLAYERS . ".G2_r"); $teamA_G2_RD2 += pow(mysql_result($resultA, $k, TBL_PLAYERS . ".G2_RD"), 2); $teamA_G2_sigma2 += pow(mysql_result($resultA, $k, TBL_PLAYERS . ".G2_sigma"), 2); } $teamA_TS_sigma = sqrt($teamA_TS_sigma2); $teamA_G2_RD = sqrt($teamA_G2_RD2); $teamA_G2_sigma = sqrt($teamA_G2_sigma2); $teamA_G2_mu = g2_from_g1_rating($teamA_G2_r, $G2_r0, G2_qinv); $teamA_G2_phi = g2_from_g1_deviation($teamA_G2_RD, G2_qinv); $output .= "Team {$i} ELO: {$teamA_ELO}, rank: {$teamA_Rank}<br />"; $output .= "Team {$i} TS: mu = {$teamA_TS_mu}, sigma= {$teamA_TS_sigma}<br />"; $output .= "Team {$i} TS: mu = {$teamA_TS_mu}, sigma= {$teamA_TS_sigma}<br />"; $output .= "Team {$i} G2: mu = {$teamA_G2_mu}, phi= {$teamA_G2_phi}, sigma= {$teamA_G2_sigma}<br />"; $NbrPlayersTeamB = mysql_numrows($resultB); $teamB_Rank = mysql_result($resultB, 0, TBL_SCORES . ".Player_Rank"); $teamB_Forfeit = mysql_result($resultB, 0, TBL_SCORES . ".Player_Forfeit"); $teamB_ELO = 0; $teamB_TS_mu = 0; $teamB_TS_sigma2 = 0; $teamB_G2_r = 0; $teamB_G2_RD2 = 0; $teamB_G2_sigma2 = 0; for ($k = 0; $k < $NbrPlayersTeamB; $k++) { $teamB_ELO += mysql_result($resultB, $k, TBL_PLAYERS . ".ELORanking"); $teamB_TS_mu += mysql_result($resultB, $k, TBL_PLAYERS . ".TS_mu"); $teamB_TS_sigma2 += pow(mysql_result($resultB, $k, TBL_PLAYERS . ".TS_sigma"), 2); $teamB_G2_r += mysql_result($resultB, $k, TBL_PLAYERS . ".G2_r"); $teamB_G2_RD2 += pow(mysql_result($resultB, $k, TBL_PLAYERS . ".G2_RD"), 2); $teamB_G2_sigma2 += pow(mysql_result($resultB, $k, TBL_PLAYERS . ".G2_sigma"), 2); } $teamB_TS_sigma = sqrt($teamB_TS_sigma2); $teamB_G2_RD = sqrt($teamB_G2_RD2); $teamB_G2_sigma = sqrt($teamB_G2_sigma2); $teamB_G2_mu = g2_from_g1_rating($teamB_G2_r, $G2_r0, G2_qinv); $teamB_G2_phi = g2_from_g1_deviation($teamB_G2_RD, G2_qinv); $output .= "Team {$j} ELO: {$teamB_ELO}, rank: {$teamB_Rank}<br />"; $output .= "Team {$j} TS: mu = {$teamB_TS_mu}, sigma= {$teamB_TS_sigma}<br />"; $output .= "Team {$j} G2: mu = {$teamB_G2_mu}, phi= {$teamB_G2_phi}, sigma= {$teamB_G2_sigma}<br />"; break; case 'Teams': $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_TEAMS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_TEAMS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_TEAMS . ".TeamID = " . TBL_SCORES . ".Team)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$i}')"; $resultA = $sql->db_Query($q); $q = "SELECT " . TBL_MATCHS . ".*, " . TBL_SCORES . ".*, " . TBL_TEAMS . ".*" . " FROM " . TBL_MATCHS . ", " . TBL_SCORES . ", " . TBL_TEAMS . " WHERE (" . TBL_MATCHS . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".MatchID = " . TBL_MATCHS . ".MatchID)" . " AND (" . TBL_TEAMS . ".TeamID = " . TBL_SCORES . ".Team)" . " AND (" . TBL_SCORES . ".Player_MatchTeam = '{$j}')"; $resultB = $sql->db_Query($q); $NbrPlayersTeamA = mysql_numrows($resultA); $teamA_Rank = mysql_result($resultA, 0, TBL_SCORES . ".Player_Rank"); $teamA_Forfeit = mysql_result($resultA, 0, TBL_SCORES . ".Player_Forfeit"); $teamA_ELO = 0; $teamA_TS_mu = 0; $teamA_TS_sigma2 = 0; $teamA_G2_r = 0; $teamA_G2_RD2 = 0; $teamA_G2_sigma2 = 0; for ($k = 0; $k < $NbrPlayersTeamA; $k++) { $teamA_ELO += mysql_result($resultA, $k, TBL_TEAMS . ".ELORanking"); $teamA_TS_mu += mysql_result($resultA, $k, TBL_TEAMS . ".TS_mu"); $teamA_TS_sigma2 += pow(mysql_result($resultA, $k, TBL_TEAMS . ".TS_sigma"), 2); $teamA_G2_r += mysql_result($resultA, $k, TBL_TEAMS . ".G2_r"); $teamA_G2_RD2 += pow(mysql_result($resultA, $k, TBL_TEAMS . ".G2_RD"), 2); $teamA_G2_sigma2 += pow(mysql_result($resultA, $k, TBL_TEAMS . ".G2_sigma"), 2); } $teamA_TS_sigma = sqrt($teamA_TS_sigma2); $teamA_G2_RD = sqrt($teamA_G2_RD2); $teamA_G2_sigma = sqrt($teamA_G2_sigma2); $teamA_G2_mu = g2_from_g1_rating($teamA_G2_r, $G2_r0, G2_qinv); $teamA_G2_phi = g2_from_g1_deviation($teamA_G2_RD, G2_qinv); $output .= "Team {$i} ELO: {$teamA_ELO}, rank: {$teamA_Rank}<br />"; $output .= "Team {$i} TS: mu = {$teamA_TS_mu}, sigma= {$teamA_TS_sigma}<br />"; $output .= "Team {$i} G2: mu = {$teamA_G2_mu}, phi= {$teamA_G2_phi}, sigma= {$teamA_G2_sigma}<br />"; $NbrPlayersTeamB = mysql_numrows($resultB); $teamB_Rank = mysql_result($resultB, 0, TBL_SCORES . ".Player_Rank"); $teamB_Forfeit = mysql_result($resultB, 0, TBL_SCORES . ".Player_Forfeit"); $teamB_ELO = 0; $teamB_TS_mu = 0; $teamB_TS_sigma2 = 0; $teamB_G2_r = 0; $teamB_G2_RD2 = 0; $teamB_G2_sigma2 = 0; for ($k = 0; $k < $NbrPlayersTeamB; $k++) { $teamB_ELO += mysql_result($resultB, $k, TBL_TEAMS . ".ELORanking"); $teamB_TS_mu += mysql_result($resultB, $k, TBL_TEAMS . ".TS_mu"); $teamB_TS_sigma2 += pow(mysql_result($resultB, $k, TBL_TEAMS . ".TS_sigma"), 2); $teamB_G2_r += mysql_result($resultB, $k, TBL_TEAMS . ".G2_r"); $teamB_G2_RD2 += pow(mysql_result($resultB, $k, TBL_TEAMS . ".G2_RD"), 2); $teamB_G2_sigma2 += pow(mysql_result($resultB, $k, TBL_TEAMS . ".G2_sigma"), 2); } $teamB_TS_sigma = sqrt($teamB_TS_sigma2); $teamB_G2_RD = sqrt($teamB_G2_RD2); $teamB_G2_sigma = sqrt($teamB_G2_sigma2); $teamB_G2_mu = g2_from_g1_rating($teamB_G2_r, $G2_r0, G2_qinv); $teamB_G2_phi = g2_from_g1_deviation($teamB_G2_RD, G2_qinv); $output .= "Team {$j} ELO: {$teamB_ELO}, rank: {$teamB_Rank}<br />"; $output .= "Team {$j} TS: mu = {$teamB_TS_mu}, sigma= {$teamB_TS_sigma}<br />"; $output .= "Team {$j} G2: mu = {$teamB_G2_mu}, phi= {$teamB_G2_phi}, sigma= {$teamB_G2_sigma}<br />"; break; default: } $teamA_win = 0; $teamA_loss = 0; $teamA_draw = 0; $teamB_win = 0; $teamB_loss = 0; $teamB_draw = 0; // Wins/Losses/Draws if ($teamA_Rank < $teamB_Rank) { $teamA_win = 1; $teamB_loss = 1; } else { if ($teamA_Rank > $teamB_Rank) { $teamA_loss = 1; $teamB_win = 1; } else { $teamA_draw = 1; $teamB_draw = 1; } } /* Forfeit */ $teamA_fwin = 0; $teamA_floss = 0; $teamB_fwin = 0; $teamB_floss = 0; if ($event->getField('AllowForfeit') == 1) { if ($teamA_Forfeit == 1) { $teamA_floss = 1; $teamB_fwin = 1; $teamA_loss = 0; $teamB_win = 0; } else { if ($teamB_Forfeit == 1) { $teamB_floss = 1; $teamA_fwin = 1; $teamB_loss = 0; $teamA_win = 0; } } } $teamA_Points = $teamA_win * $event->getField('PointsPerWin') + $teamA_draw * $event->getField('PointsPerDraw') + $teamA_loss * $event->getField('PointsPerLoss') + $teamA_fwin * $event->getField('ForfeitWinPoints') + $teamA_floss * $event->getField('ForfeitLossPoints'); $teamB_Points = $teamB_win * $event->getField('PointsPerWin') + $teamB_draw * $event->getField('PointsPerDraw') + $teamB_loss * $event->getField('PointsPerLoss') + $teamB_fwin * $event->getField('ForfeitWinPoints') + $teamB_floss * $event->getField('ForfeitLossPoints'); $output .= "Team A: {$teamA_Points}, {$teamA_win}, {$teamA_draw}, {$teamA_loss}, <br />"; $output .= "Team B: {$teamB_Points}, {$teamB_win}, {$teamB_draw}, {$teamB_loss}, <br />"; if ($event->getField('ForfeitWinLossUpdate') == 1) { $teamA_win += $teamA_fwin; $teamB_win += $teamB_fwin; $teamA_loss += $teamA_floss; $teamB_loss += $teamB_floss; } // New ELO ------------------------------------------ $M = min($NbrPlayersTeamA, $NbrPlayersTeamB) * $event->getField('ELO_M'); // Span $K = $event->getField('ELO_K'); // Max adjustment per game if ($teamA_Forfeit == 1 || $teamB_Forfeit == 1) { $deltaELO = 0; } else { $deltaELO = ELO($M, $K, $teamA_ELO, $teamB_ELO, $teamA_Rank, $teamB_Rank); } $output .= "deltaELO: {$deltaELO}<br />"; // New TrueSkill ------------------------------------------ $beta = $event->getField('TS_beta'); // beta $epsilon = $event->getField('TS_epsilon'); // draw probability $tau = $event->getField('TS_tau'); // dynamics factor if ($teamA_Forfeit == 1 || $teamB_Forfeit == 1) { $update = array(0, 1, 0, 1); } else { $update = Trueskill_update($epsilon, $beta, $tau, $teamA_TS_mu, $teamA_TS_sigma, $teamA_Rank, $teamB_TS_mu, $teamB_TS_sigma, $teamB_Rank); } $teamA_deltaTS_mu = $update[0]; $teamA_deltaTS_sigma = $update[1]; $teamB_deltaTS_mu = $update[2]; $teamB_deltaTS_sigma = $update[3]; $output .= "Team {$i} TS: delta mu = {$teamA_deltaTS_mu}, delta sigma= {$teamA_deltaTS_sigma}<br />"; $output .= "Team {$j} TS: delta mu = {$teamB_deltaTS_mu}, delta sigma= {$teamB_deltaTS_sigma}<br />"; // New Glicko 2 ------------------------------------------ $epsilon = $event->getField('G2_epsilon'); // $tau = $event->getField('G2_tau'); // volatility variance if ($teamA_Forfeit == 1 || $teamB_Forfeit == 1) { $update_A = array(0, 1, 1, 0, 1, 1); $update_B = array(0, 1, 1, 0, 1, 1); } else { $update_A = glicko2_update($teamA_G2_mu, $teamA_G2_phi, $teamA_G2_sigma, $teamA_Rank, $teamB_G2_mu, $teamB_G2_phi, $teamB_G2_sigma, $teamB_Rank, $tau, $epsilon); $update_B = glicko2_update($teamB_G2_mu, $teamB_G2_phi, $teamB_G2_sigma, $teamB_Rank, $teamA_G2_mu, $teamA_G2_phi, $teamA_G2_sigma, $teamA_Rank, $tau, $epsilon); } $teamA_deltaG2_mu = $update_A[0]; $teamA_deltaG2_phi = $update_A[1]; $teamA_deltaG2_sigma = $update_A[2]; $teamB_deltaG2_mu = $update_B[0]; $teamB_deltaG2_phi = $update_B[1]; $teamB_deltaG2_sigma = $update_B[2]; $output .= "Team {$i} G2: delta mu = {$teamA_deltaG2_mu}, delta phi= {$teamA_deltaG2_phi}, delta sigma= {$teamA_deltaG2_sigma}<br />"; $output .= "Team {$j} G2: delta mu = {$teamB_deltaG2_mu}, delta phi= {$teamB_deltaG2_phi}, delta sigma= {$teamB_deltaG2_sigma}<br />"; // Update Scores ------------------------------------------ for ($k = 0; $k < $NbrPlayersTeamA; $k++) { $scoreELO = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaELO"); $scoreTS_mu = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaTS_mu"); $scoreTS_sigma = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaTS_sigma"); $scoreG2_mu = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaG2_mu"); $scoreG2_phi = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaG2_phi"); $scoreG2_sigma = mysql_result($resultA, $k, TBL_SCORES . ".Player_deltaG2_sigma"); $scoreWin = mysql_result($resultA, $k, TBL_SCORES . ".Player_Win"); $scoreDraw = mysql_result($resultA, $k, TBL_SCORES . ".Player_Draw"); $scoreLoss = mysql_result($resultA, $k, TBL_SCORES . ".Player_Loss"); $scorePoints = mysql_result($resultA, $k, TBL_SCORES . ".Player_Points"); $scoreELO += $deltaELO / $NbrPlayersTeamA; $scoreTS_mu += $teamA_deltaTS_mu / $NbrPlayersTeamA; $scoreTS_sigma *= $teamA_deltaTS_sigma; $scoreG2_mu += $teamA_deltaG2_mu / $NbrPlayersTeamA; $scoreG2_phi *= $teamA_deltaG2_phi; $scoreG2_sigma *= $teamA_deltaG2_sigma; $scoreWin += $teamA_win; $scoreDraw += $teamA_draw; $scoreLoss += $teamA_loss; $scorePoints += $teamA_Points; switch ($event->getMatchPlayersType()) { case 'Players': $pid = mysql_result($resultA, $k, TBL_PLAYERS . ".PlayerID"); $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . " Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . " Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . " Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . " Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . " Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . " Player_Win = {$scoreWin}," . " Player_Draw = {$scoreDraw}," . " Player_Loss = {$scoreLoss}," . " Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Player = '{$pid}')"; break; case 'Teams': $pid = mysql_result($resultA, $k, TBL_TEAMS . ".TeamID"); $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . " Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . " Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . " Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . " Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . " Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . " Player_Win = {$scoreWin}," . " Player_Draw = {$scoreDraw}," . " Player_Loss = {$scoreLoss}," . " Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Team = '{$pid}')"; break; default: } $result = $sql->db_Query($q); $output .= "team A, Player {$pid} query: {$q}<br />"; } for ($k = 0; $k < $NbrPlayersTeamB; $k++) { $scoreELO = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaELO"); $scoreTS_mu = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaTS_mu"); $scoreTS_sigma = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaTS_sigma"); $scoreG2_mu = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaG2_mu"); $scoreG2_phi = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaG2_phi"); $scoreG2_sigma = mysql_result($resultB, $k, TBL_SCORES . ".Player_deltaG2_sigma"); $scoreWin = mysql_result($resultB, $k, TBL_SCORES . ".Player_Win"); $scoreDraw = mysql_result($resultB, $k, TBL_SCORES . ".Player_Draw"); $scoreLoss = mysql_result($resultB, $k, TBL_SCORES . ".Player_Loss"); $scorePoints = mysql_result($resultB, $k, TBL_SCORES . ".Player_Points"); $scoreELO -= $deltaELO / $NbrPlayersTeamB; $scoreTS_mu += $teamB_deltaTS_mu / $NbrPlayersTeamB; $scoreTS_sigma *= $teamB_deltaTS_sigma; $scoreG2_mu += $teamB_deltaG2_mu / $NbrPlayersTeamB; $scoreG2_phi *= $teamB_deltaG2_phi; $scoreG2_sigma *= $teamB_deltaG2_sigma; $scoreWin += $teamB_win; $scoreDraw += $teamB_draw; $scoreLoss += $teamB_loss; $scorePoints += $teamB_Points; switch ($event->getMatchPlayersType()) { case 'Players': $pid = mysql_result($resultB, $k, TBL_PLAYERS . ".PlayerID"); $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . " Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . " Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . " Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . " Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . " Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . " Player_Win = {$scoreWin}," . " Player_Draw = {$scoreDraw}," . " Player_Loss = {$scoreLoss}," . " Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Player = '{$pid}')"; break; case 'Teams': $tid = mysql_result($resultB, $k, TBL_TEAMS . ".TeamID"); $q = "UPDATE " . TBL_SCORES . " SET Player_deltaELO = '" . floatToSQL($scoreELO) . "'," . " Player_deltaTS_mu = '" . floatToSQL($scoreTS_mu) . "'," . " Player_deltaTS_sigma = '" . floatToSQL($scoreTS_sigma) . "'," . " Player_deltaG2_mu = '" . floatToSQL($scoreG2_mu) . "'," . " Player_deltaG2_phi = '" . floatToSQL($scoreG2_phi) . "'," . " Player_deltaG2_sigma = '" . floatToSQL($scoreG2_sigma) . "'," . " Player_Win = {$scoreWin}," . " Player_Draw = {$scoreDraw}," . " Player_Loss = {$scoreLoss}," . " Player_Points = {$scorePoints}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Team = '{$tid}')"; break; default: } $result = $sql->db_Query($q); } } } $output .= '<br />'; // Update scores score against switch ($event->getMatchPlayersType()) { case 'Players': $q = "SELECT " . TBL_SCORES . ".*, " . TBL_PLAYERS . ".*" . " FROM " . TBL_SCORES . ", " . TBL_PLAYERS . " WHERE (" . TBL_SCORES . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".Player = " . TBL_PLAYERS . ".PlayerID)"; break; case 'Teams': $q = "SELECT " . TBL_SCORES . ".*, " . TBL_TEAMS . ".*" . " FROM " . TBL_SCORES . ", " . TBL_TEAMS . " WHERE (" . TBL_SCORES . ".MatchID = '" . $this->fields['MatchID'] . "')" . " AND (" . TBL_SCORES . ".Team = " . TBL_TEAMS . ".TeamID)"; break; default: } $result = $sql->db_Query($q); $nbr_players = mysql_numrows($result); for ($i = 0; $i < $nbr_players; $i++) { switch ($event->getMatchPlayersType()) { case 'Players': $pid = mysql_result($result, $i, TBL_PLAYERS . ".PlayerID"); break; case 'Teams': $pid = mysql_result($result, $i, TBL_TEAMS . ".TeamID"); break; default: } $scoreid = mysql_result($result, $i, TBL_SCORES . ".ScoreID"); $prank = mysql_result($result, $i, TBL_SCORES . ".Player_Rank"); $pteam = mysql_result($result, $i, TBL_SCORES . ".Player_MatchTeam"); $pOppScore = 0; $pnbrOpps = 0; for ($j = 0; $j < $nbr_players; $j++) { $opprank = mysql_result($result, $j, TBL_SCORES . ".Player_Rank"); $oppteam = mysql_result($result, $j, TBL_SCORES . ".Player_MatchTeam"); $oppscore = mysql_result($result, $j, TBL_SCORES . ".Player_Score"); if ($pteam != $oppteam) { $pOppScore += $oppscore; $pnbrOpps++; } } $pOppScore /= $pnbrOpps; switch ($event->getMatchPlayersType()) { case 'Players': $q_1 = "UPDATE " . TBL_SCORES . " SET Player_ScoreAgainst = {$pOppScore}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Player = '{$pid}')"; break; case 'Teams': $q_1 = "UPDATE " . TBL_SCORES . " SET Player_ScoreAgainst = {$pOppScore}" . " WHERE (MatchID = '" . $this->fields['MatchID'] . "')" . " AND (Team = '{$pid}')"; break; default: } $result_1 = $sql->db_Query($q_1); } $output .= '<br />'; //echo $output; //exit; } }