'') //Namenssuche abgeschickt { $name=str_create_search_string($_POST['name']); $sql='SELECT login,acctid FROM accounts WHERE name LIKE "'.$name.'" AND acctid != '.$session['user']['acctid'].' ORDER BY login="'.mysql_real_escape_string($_POST['name']).'" DESC, login ASC LIMIT 50'; $result=db_query($sql); $rows=db_num_rows($result); if($rows==0) { $str_out.='Es gibt niemanden, der auf diesen Namen hört. Versuche es noch einmal!'; addnav('Neue Suche',$str_filename.'?op=InvitePlayer'); } elseif($rows>99) { $str_out.='Es treffen zu viele Namen auf diese Suche zu. Nur die ersten 50 werden angezeigt.'; addnav('Neue Suche',$str_filename.'?op=InvitePlayer'); } if($rows>0) { $str_out.='
Spieleinsatz:
Spiel gegen:
Deine Farbe: zufällig
Weiß
Schwarz
`n`nHinweis zum Spieleinsatz: `nBeide Spieler zahlen diesen Betrag in den Pot, welchen der Gewinner der Partie bekommt. `nEine Rückgabe der Beträge beim Zurückziehen der Herausforderung ist nicht möglich.'; //sonst könnte man auf die Idee kommen, vor dem DK ein paar Karteileichen herauszufordern addnav('',$str_filename); } } else { $str_out.='Wen willst du zu einer Partie Schach herausfordern?
'; addnav('',$str_filename.'?op=InvitePlayer'); } addnav('Zurück'); addnav('Zur Übersicht',$str_filename); break; } case 'viewboard': //Spiel, Brettansicht { if(!$_SESSION['gameID'] && !isset($_POST['gameID'])) redirect ($str_filename); require $str_extpath.'gui.php'; require $str_extpath.'move.php'; require $str_extpath.'undo.php'; /* check if loading game */ if (isset($_POST['gameID'])) $_SESSION['gameID'] = $_POST['gameID']; /* debug flag */ define ("DEBUG", 0); /* load game */ $isInCheck = ($_POST['isInCheck'] == 'true'); $isCheckMate = false; $isPromoting = false; $isUndoing = false; loadHistory(); loadGame(); processMessages(); if ($isUndoing) { doUndo(); saveGame(); } elseif (($_POST['promotion'] != "") && ($_POST['toRow'] != "") && ($_POST['toCol'] != "")) { savePromotion(); $board[$_POST['toRow']][$_POST['toCol']] = $_POST['promotion'] | ($board[$_POST['toRow']][$_POST['toCol']] & BLACK); saveGame(); } elseif (($_POST['fromRow'] != "") && ($_POST['fromCol'] != "") && ($_POST['toRow'] != "") && ($_POST['toCol'] != "")) { /* ensure it's the current player moving */ /* NOTE: if not, this will currently ignore the command... */ /* perhaps the status should be instead? */ /* (Could be confusing to player if they double-click or something */ $tmpIsValid = true; if (($numMoves == -1) || ($numMoves % 2 == 1)) { /* White's move... ensure that piece being moved is white */ if ((($board[$_POST['fromRow']][$_POST['fromCol']] & BLACK) != 0) || ($board[$_POST['fromRow']][$_POST['fromCol']] == 0)) /* invalid move */ $tmpIsValid = false; } else { /* Black's move... ensure that piece being moved is black */ if ((($board[$_POST['fromRow']][$_POST['fromCol']] & BLACK) != BLACK) || ($board[$_POST['fromRow']][$_POST['fromCol']] == 0)) /* invalid move */ $tmpIsValid = false; } if ($tmpIsValid) { saveHistory(); doMove(); saveGame(); } } /* find out if it's the current player's turn */ if (( (($numMoves == -1) || (($numMoves % 2) == 1)) && ($playersColor == "white")) || ((($numMoves % 2) == 0) && ($playersColor == "black"))) $isPlayersTurn = true; else $isPlayersTurn = false; if ($isPlayersTurn) $str_out.="`c`bDrachenschach - Dein Zug`b`c`n"; else $str_out.="`c`bDrachenschach - Warte auf Zug des Gegners`b`c`n"; //echo("\n"); $str_out.='
`c
'; if ($isPromoting) $str_out.=writePromotion(); if ($isUndoRequested) $str_out.=writeUndoRequest(); if ($isDrawRequested) $str_out.=writeDrawRequest(); $str_out.=drawboard(); $str_out.='
`c

Hinweise: `nFür eine Rochade muss nur der König gezogen werden, der Turm zieht automatisch. '.($bet>0?'`nDer Gewinner dieses Spiels erhält '.($bet*2).($bet<10?' Edelsteine.':' Gold.'):'').'

  '.writeStatus().'
'.writeHistory().'
'; if($session['user']['prefs']['chesschat']>0) { //require('lib/commentary_classic.lib.php'); addcommentary(); output($str_out.'`n`n'); $str_out=''; $chat = 'chess_'.min($session['user']['acctid'],$board['opponent']).'_'.max($session['user']['acctid'],$board['opponent']); viewcommentary($chat,'Hinzufügen',(int)$session['user']['prefs']['chesschat'],'sagt',false,true,false,0,false,false,2); } /* if it's not the player's turn, enable auto-refresh */ //Reload-Interval startet bei 15s und erhöht sich jeweils um 2s. Abbruch, wenn 60s erreicht sind (tritt nach 14 Minuten ein) if (!$isPlayersTurn && !isBoardDisabled() && $_GET['rs']<60 && $session['user']['prefs']['chessreload']!='no') { $countDownInterval=(isset($_GET['rs'])?min(60,(int)$_GET['rs']):15); $link=$str_filename.'?op=viewboard&rs='.($countDownInterval+2); addnav('',$link); $str_out.=' '; } addnav('Aktualisieren',$str_filename.'?op=viewboard'); addnav('Zurück'); addnav('Zur Übersicht',$str_filename); addnav('',$str_filename); addnav('',$str_filename.'?op=viewboard'); break; } default: //Start- und Übersichtsseite { /* cleanup dead games */ if(!$_SESSION['gameID']) //DB-Zugriffe reduzieren, nur prüfen wenn man neu reinkommt { /* determine threshold for oldest game permitted */ $targetDate = date("Y-m-d", mktime(0,0,0, date('m'), date('d') - $CFG_EXPIREGAME, date('Y'))); /* find out which games are older */ $sql = "SELECT gameID FROM chessgames WHERE lastMove < '".$targetDate."'"; $tmpOldGames = db_query($sql); /* for each older game... */ while($tmpOldGame = db_fetch_assoc($tmpOldGames)) { /* ... clear the history... */ db_query("DELETE FROM chesshistory WHERE gameID = ".$tmpOldGame['gameID']); /* ... and the board... */ //db_query("DELETE FROM pieces WHERE gameID = ".$tmpOldGame['gameID']); /* ... and the messages... */ db_query("DELETE FROM chessmessages WHERE gameID = ".$tmpOldGame['gameID']); /* ... and finally the game itself from the database */ db_query("DELETE FROM chessgames WHERE gameID = ".$tmpOldGame['gameID']); } } switch($_POST['ToDo']) { case 'InvitePlayer': $bet=(int)$_POST['bet']; //Spieler zahlungsfähig? $what=($bet<10?'gems':'gold'); if($session['user'][$what]>=$bet) { /* prevent multiple pending requests between two players with the same originator */ $tmpQuery = "SELECT gameID FROM chessgames WHERE gameMessage = 'playerInvited'"; $tmpQuery .= " AND ((messageFrom = 'white' AND whitePlayer = ".$session['user']['acctid']." AND blackPlayer = ".$_POST['opponent'].")"; $tmpQuery .= " OR (messageFrom = 'black' AND whitePlayer = ".$_POST['opponent']." AND blackPlayer = ".$session['user']['acctid']."))"; $tmpExistingRequests = db_query($tmpQuery); if (db_num_rows($tmpExistingRequests) == 0) { $bet=(int)$_POST['bet']; $opp=db_fetch_assoc(db_query('SELECT login FROM accounts WHERE acctid='.$_POST['opponent'])); if ($_POST['color'] == 'random') $tmpColor = (e_rand(0,1) == 1) ? "white" : "black"; else $tmpColor = $_POST['color']; $tmpQuery = 'INSERT INTO chessgames (whitePlayer, whiteName, blackPlayer, blackName, gameMessage, messageFrom, dateCreated, lastMove, pieces, bet) VALUES ('; if ($tmpColor == 'white') $tmpQuery .= $session['user']['acctid'].', "'.addslashes($session['user']['login']).'", '.$_POST['opponent'].', "'.addslashes($opp['login']); else $tmpQuery .= $_POST['opponent'].', "'.addslashes($opp['login']).'", '.$session['user']['acctid'].', "'.addslashes($session['user']['login']); $tmpQuery .= '", "playerInvited", "'.$tmpColor.'", NOW(), NOW(), "", '.$bet.')'; db_query($tmpQuery); $mailtext='`0Du wurdest von '.$session['user']['name']; if(CHESS_HOF) { $result=db_query('SELECT count(*) AS c FROM account_extra_info WHERE chessgameswon !=0 AND chessgameswon>(SELECT chessgameswon FROM account_extra_info WHERE acctid='.$session['user']['acctid'].')'); $chessrank = mysql_result($result,0) +1; $mailtext.=(' `6(in der Rangliste etwa Nummer '.$chessrank.')'); } $mailtext.='`0 zu einer Partie Schach herausgefordert. ' .($bet>0?'`nDer Spieleinsatz wurde auf '.$bet.($bet<10?' Edelsteine':' Gold').' festgelegt.':'') .'`n'.$session['user']['login'].' wartet in der Schenke auf Dich.'; $session['user'][$what]-=$bet; systemmail($_POST['opponent'],'Herausforderung Schach', $mailtext); } } else { $str_out.='`$Leider kannst du den Spieleinsatz nicht bezahlen`0'; } break; case 'ResponseToInvite': $gameID=(int)$_POST['gameID']; if ($_POST['response'] == 'accepted') { $tmpGame=db_fetch_assoc(db_query('SELECT * FROM chessgames WHERE gameID='.$gameID)); $what=($tmpGame['bet']<10?'gems':'gold'); if($session['user'][$what]>=$tmpGame['bet']) { /* update game data */ $tmpQuery = "UPDATE chessgames SET gameMessage = '', messageFrom = '' WHERE gameID = ".$gameID; db_query($tmpQuery); /* setup new board */ $_SESSION['gameID'] = $gameID; createNewGame($gameID); //newgame.php saveGame(); //chessdb.php $session['user'][$what]-=$tmpGame['bet']; } else { $str_out.='`$Leider kannst du den Spieleinsatz nicht bezahlen`0'; } } else { $tmpQuery = "UPDATE chessgames SET gameMessage = 'inviteDeclined', messageFrom = '".$_POST['messageFrom']."' WHERE gameID = ".$gameID; db_query($tmpQuery); } break; case 'WithdrawRequest': /* get opponent's player ID */ $result = db_query("SELECT whitePlayer,blackPlayer,gameMessage FROM chessgames WHERE gameID = ".$_POST['gameID']); if (db_num_rows($result) > 0) { $row=db_fetch_assoc($result); $opponentID=($row['whitePlayer']==$session['user']['acctid']?$row['blackPlayer']:$row['whitePlayer']); $tmpQuery = "DELETE FROM chessgames WHERE gameID = ".$_POST['gameID']; db_query($tmpQuery); if($row['gameMessage']=='playerInvited') systemmail($opponentID,'Herausforderung zurückgezogen',$session['user']['name'].' hat '.($session['user']['sex']?'ihre':'seine').' Herausforderung zum Schachspiel zurückgezogen.'); } break; case 'UpdatePrefs': if($_POST['rdoReload']=='no') $session['user']['prefs']['chessreload']='no'; else unset($session['user']['prefs']['chessreload']); if($_POST['rdoHistory']=='pgn') $session['user']['prefs']['chesshistory']='pgn'; else unset($session['user']['prefs']['chesshistory']); if($_POST['rdoChat']>0) { $session['user']['prefs']['chesschat']=(int)$_POST['rdoChat']; $session['user']['prefs']['chessreload']='no'; //Seitenreload ist ganz schlecht während man tippt } else unset($session['user']['prefs']['chesschat']); break; } $str_out.='`c`b`nDrachenschach - Übersicht und Einstellungen`0`b`c`n Deine offenen Herausforderungen`n`n
'; addnav('',$str_filename); /* if game is marked playerInvited and the invite is from the current player */ $sql = "SELECT * FROM chessgames WHERE (gameMessage = 'playerInvited' AND ((whitePlayer = ".$session['user']['acctid']." AND messageFrom = 'white') OR (blackPlayer = ".$session['user']['acctid']." AND messageFrom = 'black'))"; /* OR game is marked inviteDeclined and the response is from the opponent */ $sql .= ") OR (gameMessage = 'inviteDeclined' AND ((whitePlayer = ".$session['user']['acctid']." AND messageFrom = 'black') OR (blackPlayer = ".$session['user']['acctid']." AND messageFrom = 'white'))) ORDER BY dateCreated"; $result=db_query($sql); if (db_num_rows($result) == 0) { $str_out.="\n"; } else { while($tmpGame = db_fetch_assoc($result)) { /* Opponent */ $str_out.="'; /* Status */ $str_out.="\n"; } } $str_out.='
Gegner Deine Farbe Einsatz Status zurückziehen
Du hast im Moment niemand eingeladen
"; /* get opponent's nick */ if ($tmpGame['whitePlayer'] == $session['user']['acctid']) $opponent=$tmpGame['blackName']; else $opponent=$tmpGame['whiteName']; $str_out.=$opponent; /* Your Color */ $str_out.=""; if ($tmpGame['whitePlayer'] == $session['user']['acctid']) $str_out.="Weiß"; else $str_out.="Schwarz"; //Einsatz $str_out.=''.$tmpGame['bet'].($tmpGame['bet']==0?'':($tmpGame['bet']<10?' ES':' Gold')).'"; if ($tmpGame['gameMessage'] == 'playerInvited') $str_out.="Warte auf Antwort"; else if ($tmpGame['gameMessage'] == 'inviteDeclined') $str_out.="Abgelehnt"; /* Withdraw Request */ $str_out.="

Offene Herausforderungen anderer Spieler an dich`n`n
'; addnav('',$str_filename); $sql = "SELECT * FROM chessgames WHERE gameMessage = 'playerInvited' AND ((whitePlayer = ".$session['user']['acctid']." AND messageFrom = 'black') OR (blackPlayer = ".$session['user']['acctid']." AND messageFrom = 'white')) ORDER BY dateCreated"; $result = db_query($sql); if (db_num_rows($result) == 0) $str_out.="\n"; else while($tmpGame = db_fetch_assoc($result)) { /* Opponent */ $str_out.="'; /* Response */ $str_out.="\n"; } $str_out.='
Gegner Deine Farbe Einsatz Aktion
Du hast im Moment keine Herausforderungen zu einer Partie
"; /* get opponent's nick */ if ($tmpGame['whitePlayer'] == $session['user']['acctid']) $opponent=$tmpGame['blackName']; else $opponent=$tmpGame['whiteName']; $str_out.=$opponent; /* Your Color */ $str_out.=""; if ($tmpGame['whitePlayer'] == $session['user']['acctid']) { $str_out.="Weiß"; $tmpFrom = "white"; } else { $str_out.="Schwarz"; $tmpFrom = "black"; } //Einsatz $str_out.=''.$tmpGame['bet'].($tmpGame['bet']==0?'':($tmpGame['bet']<10?' ES':' Gold')).'

Partie fortsetzen:`n`n
'; addnav('',$str_filename.'?op=viewboard'); $sql="SELECT * FROM chessgames WHERE gameMessage = '' AND (whitePlayer = ".$session['user']['acctid']." OR blackPlayer = ".$session['user']['acctid'].") ORDER BY dateCreated"; $result=db_Query($sql); if (db_num_rows($result) == 0) $str_out.="\n"; else { while($tmpGame = db_fetch_assoc($result)) { /* Opponent */ $str_out.="\n"; } } $str_out.='
Gegner Deine Farbe Am Zug Startzeit Letzter Zug
Du hast derzeit kein angefangenes Spiel
"; /* get opponent's nick */ if ($tmpGame['whitePlayer'] == $session['user']['acctid']) $opponent=$tmpGame['blackName']; else $opponent=$tmpGame['whiteName']; $str_out.="".$opponent.""; /* Your Color */ $str_out.=""; if ($tmpGame['whitePlayer'] == $session['user']['acctid']) { $str_out.="Weiß"; $tmpColor = "white"; } else { $str_out.="Schwarz"; $tmpColor = "black"; } /* Current Turn */ $str_out.=""; /* get number of moves from history */ $tmpNumMoves = db_query("SELECT COUNT(gameID) FROM chesshistory WHERE gameID = ".$tmpGame['gameID']); $numMoves = mysql_result($tmpNumMoves,0); /* based on number of moves, output current color's turn */ if (($numMoves % 2) == 0) $tmpCurMove = "white"; else $tmpCurMove = "black"; if ($tmpCurMove == $tmpColor) $str_out.='`$DU`0'; else $str_out.="`2".$opponent."`0"; /* Start Date */ $str_out.="".date($dateformat,strtotime($tmpGame['dateCreated'])); /* Last Move */ $str_out.="".date($dateformat,strtotime($tmpGame['lastMove']))."

Beendete Partien ansehen:`n`n
'; addnav('',$str_filename.'?op=viewboard'); $result = db_query("SELECT * FROM chessgames WHERE (gameMessage <> '' AND gameMessage <> 'playerInvited' AND gameMessage <> 'inviteDeclined') AND (whitePlayer = ".$session['user']['acctid']." OR blackPlayer = ".$session['user']['acctid'].") ORDER BY lastMove DESC"); if (db_num_rows($result) == 0) $str_out.="\n"; else { while($tmpGame = db_fetch_assoc($result)) { /* Opponent */ $str_out.="\n"; } } $str_out.='
Gegner Deine Farbe Status Startzeit Letzter Zug
Für dich sind keine beendeten Partien gespeichert
"; /* get opponent's nick */ if ($tmpGame['whitePlayer'] == $session['user']['acctid']) $opponent=$tmpGame['blackName']; else $opponent=$tmpGame['whiteName']; $str_out.="".$opponent.""; /* Your Color */ $str_out.=""; if ($tmpGame['whitePlayer'] == $session['user']['acctid']) { $str_out.="Weiß"; $tmpColor = "white"; } else { $str_out.="Schwarz"; $tmpColor = "black"; } /* Status */ if (is_null($tmpGame['gameMessage'])) $str_out.=" "; else { if ($tmpGame['gameMessage'] == "draw") $str_out.="Ended in draw"; else if ($tmpGame['gameMessage'] == "playerResigned") $str_out.="".ucfirst(translate($tmpGame['messageFrom']))." gab auf"; else if (($tmpGame['gameMessage'] == "checkMate") && ($tmpGame['messageFrom'] == $tmpColor)) $str_out.="Schachmatt,
gewonnen!"; else if ($tmpGame['gameMessage'] == "checkMate") $str_out.="
Schachmatt,
verloren!"; else $str_out.="
 "; } /* Start Date */ $str_out.="".date($dateformat,strtotime($tmpGame['dateCreated'])); /* Last Move */ $str_out.="".date($dateformat,strtotime($tmpGame['lastMove']))."

Achtung!
Spiele werden OHNE BENACHRICHTIGUNG gelöscht, wenn der letzte Zug länger als '.$CFG_EXPIREGAME.' Tage her ist! `n`n
aktuelle Einstellungen
Brett aktualisieren: automatischer Reload
manuell
Darstellung Verlauf: ausführlicher Text
figurine Notation
Chat-Sektion: ausblenden
anzeigen (nicht empfohlen)
'; addnav('Spieler herausfordern',$str_filename.'?op=InvitePlayer'); addnav('Aktualisieren',$str_filename); addnav('Zurück'); } } output($str_out); if($session['user']['alive']) { addnav('In die Schenke','inn.php'); addnav('D?Zum Dorf','village.php'); } else { addnav('Zu den Schatten','shades.php'); } page_footer(); ?>