Beispiel #1
0
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;