function mobile_move($config) { if ($_GET['gameid'] != "" && $_GET['from'] != "" && $_GET['to'] != "") { //Instantiate theCR3DCQuery Class $oR3DCQuery = new CR3DCQuery($config); $xsid = $_GET['sid']; $session = base64_decode($xsid); list($uniq, $player_id) = preg_split("/\\|/", $session); $movefrom = $_GET['from']; $moveto = $_GET['to']; $bmove_error = false; //Create Move String $movestr = $movefrom . "," . $moveto; $movestr2 = $movefrom . "-" . $moveto; // get the fen for the game $fen = $oR3DCQuery->GetHackedFEN($xsid, $_GET['gameid']); //$fen3 = $oR3DCQuery->GetHackedFEN($xsid, $_GET['gameid']); $bturn = $oR3DCQuery->IsPlayersTurn($config, $player_id, $_GET['gameid']); if ($bturn) { //check to see if the move is valid if (is_Move_legal($fen, $movestr2)) { $oR3DCQuery->CurrentGameMovePiece($config, $_GET['gameid'], $xsid, $player_id, $movestr); $initiator = ""; $w_player_id = ""; $b_player_id = ""; $status = ""; $completion_status = ""; $start_time = ""; $next_move = ""; $oR3DCQuery->GetGameInfoByRef($config, $_GET['gameid'], $initiator, $w_player_id, $b_player_id, $status, $completion_status, $start_time, $next_move); //checkmate if (get_GameState() == 1) { //if($w_player_id == $player_id){ if ($next_move == 'w') { /////////////////////////////////////////////////////////////////////// //ELO Point Calculation if ($oR3DCQuery->ELOIsActive() && $oR3DCQuery->IsGameRated($_GET['gameid'])) { $bcurpoints = $oR3DCQuery->ELOGetRating($b_player_id); $wcurpoints = $oR3DCQuery->ELOGetRating($w_player_id); //Calculate black player $bnewpoints = $oR3DCQuery->ELOCalculation($bcurpoints, $wcurpoints, 1, 1, $oR3DCQuery->GetPlayerGameCount($b_player_id)); //Calculate white player $wnewpoints = $oR3DCQuery->ELOCalculation($wcurpoints, $bcurpoints, 0, 1, $oR3DCQuery->GetPlayerGameCount($w_player_id)); //update points $oR3DCQuery->ELOUpdateRating($b_player_id, $bnewpoints); $oR3DCQuery->ELOUpdateRating($w_player_id, $wnewpoints); } /////////////////////////////////////////////////////////////////////// $oR3DCQuery->UpdateGameStatus($config, $_GET['gameid'], "C", "B"); } else { /////////////////////////////////////////////////////////////////////// //ELO Point Calculation if ($oR3DCQuery->ELOIsActive() && $oR3DCQuery->IsGameRated($_GET['gameid'])) { $bcurpoints = $oR3DCQuery->ELOGetRating($b_player_id); $wcurpoints = $oR3DCQuery->ELOGetRating($w_player_id); //Calculate black player $bnewpoints = $oR3DCQuery->ELOCalculation($bcurpoints, $wcurpoints, 0, 1, $oR3DCQuery->GetPlayerGameCount($b_player_id)); //Calculate white player $wnewpoints = $oR3DCQuery->ELOCalculation($wcurpoints, $bcurpoints, 1, 1, $oR3DCQuery->GetPlayerGameCount($w_player_id)); //update points $oR3DCQuery->ELOUpdateRating($b_player_id, $bnewpoints); $oR3DCQuery->ELOUpdateRating($w_player_id, $wnewpoints); } /////////////////////////////////////////////////////////////////////// $oR3DCQuery->UpdateGameStatus($config, $_GET['gameid'], "C", "W"); } $oR3DCQuery->CachePlayerPointsByPlayerID($b_player_id); $oR3DCQuery->CachePlayerPointsByPlayerID($w_player_id); } else { if (get_GameState() == 2) { /////////////////////////////////////////////////////////////////////// //ELO Point Calculation if ($oR3DCQuery->ELOIsActive() && $oR3DCQuery->IsGameRated($_GET['gameid'])) { $bcurpoints = $oR3DCQuery->ELOGetRating($b_player_id); $wcurpoints = $oR3DCQuery->ELOGetRating($w_player_id); //Calculate black player $bnewpoints = $oR3DCQuery->ELOCalculation($bcurpoints, $wcurpoints, 0.5, 1, $oR3DCQuery->GetPlayerGameCount($b_player_id)); //Calculate white player $wnewpoints = $oR3DCQuery->ELOCalculation($wcurpoints, $bcurpoints, 0.5, 1, $oR3DCQuery->GetPlayerGameCount($w_player_id)); //update points $oR3DCQuery->ELOUpdateRating($b_player_id, $bnewpoints); $oR3DCQuery->ELOUpdateRating($w_player_id, $wnewpoints); } /////////////////////////////////////////////////////////////////////// $oR3DCQuery->UpdateGameStatus($config, $_GET['gameid'], "C", "D"); $bmove_error = false; $oR3DCQuery->CachePlayerPointsByPlayerID($b_player_id); $oR3DCQuery->CachePlayerPointsByPlayerID($w_player_id); } } } else { $bmove_error = true; } } else { $bmove_error = true; } // If a draw offer was made, cancel it. $isblack = $oR3DCQuery->IsPlayerBlack($config, $_GET['gameid'], $player_id); $isdraw = $oR3DCQuery->IsRequestDraw($config, $_GET['gameid'], $isblack); if ($isdraw != 'IDS_DRAW' && $isdraw != 'IDS_NO_DRAW') { $oR3DCQuery->RevokeDrawGame($config, $_GET['gameid'], $player_id); } $oR3DCQuery->Close(); unset($oR3DCQuery); } else { $bmove_error = true; } if ($bmove_error) { echo "<RESPONSE>\n"; echo "<MOVE>false</MOVE>\n"; echo "</RESPONSE>\n"; } else { echo "<RESPONSE>\n"; echo "<MOVE>true</MOVE>\n"; mobile_get_full_game_update(); $move = ChessHelper::get_last_move(); echo "<MOVE_SAN>" . $move['SAN'] . "</MOVE_SAN>\n"; echo "<MOVE_FROM>" . $move['from'] . "</MOVE_FROM>\n"; echo "<MOVE_TO>" . $move['to'] . "</MOVE_TO>\n"; echo "</RESPONSE>\n"; } }
//Calculate white player $wnewpoints = $oR3DCQuery->ELOCalculation($wcurpoints, $bcurpoints, 0, 1, $oR3DCQuery->GetPlayerGameCount($w_player_id)); //update points $oR3DCQuery->ELOUpdateRating($b_player_id, $bnewpoints); $oR3DCQuery->ELOUpdateRating($w_player_id, $wnewpoints); } /////////////////////////////////////////////////////////////////////// $oR3DCQuery->UpdateGameStatus($config, $gid, "C", "B"); $oR3DCQuery->CachePlayerPointsByPlayerID($b_player_id); $oR3DCQuery->CachePlayerPointsByPlayerID($w_player_id); } } /////////////// $cmdRevokeDraw = $_GET['cmdRevokeDraw']; if ($cmdRevokeDraw != "") { $oR3DCQuery->RevokeDrawGame($ConfigFile, $gid, $_SESSION['id']); } $cmdDraw = $_GET['cmdDraw']; if ($cmdDraw != "") { if ($isblack) { $oR3DCQuery->DrawGame($config, $gid, "b"); } else { $oR3DCQuery->DrawGame($config, $gid, "w"); } } $isexitrealtime = false; $isdraw = $oR3DCQuery->IsRequestDraw($config, $gid, $isblack); $cmdExitRealtime = $_GET['cmdExitRealtime']; if ($cmdExitRealtime != "") { $oR3DCQuery->ExitRealTimeGame($config, $gid); $isexitrealtime = true;