X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Fgame.php;h=eb66a987157c6bcd98ddbcf57f0ce343e7e7fcca;hp=49957b121ec31c81e781425fafa632e87bec97b5;hb=8550cac6f9bedbd9219d898f7b3de731bf1cb2b2;hpb=eb20bf1a0cae1192eb50c19220e72df8d971d8e7;ds=sidebyside diff --git a/include/game.php b/include/game.php index 49957b1..eb66a98 100644 --- a/include/game.php +++ b/include/game.php @@ -1,4 +1,23 @@ + * + * This file is part of e-DoKo. + * + * e-DoKo is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * e-DoKo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with e-DoKo. If not, see . + * + */ + /* make sure that we are not called from outside the scripts, * use a variable defined in config.php to check this */ @@ -24,16 +43,14 @@ if(!$myid) global $GAME,$RULES,$CARDS; -/* the user has done something, update the timestamp */ -if(isset($_SESSION['id'])) - DB_update_user_timestamp($_SESSION['id']); - /* get some information from the DB */ $gameid = DB_get_gameid_by_hash($me); $myname = DB_get_name('hash',$me); $mystatus = DB_get_status_by_hash($me); +$origmystatus = DB_get_status_by_hash($me); /* to show "it's your turn" menu when game has just finished */ $mypos = DB_get_pos_by_hash($me); $myhand = DB_get_handid('hash',$me); +$myparty = DB_get_party_by_hash($me); $session = DB_get_session_by_gameid($gameid); /* get prefs and save them in a variable*/ @@ -66,7 +83,7 @@ if( $gamestatus == 'pre' ) else { /* in a game Schweinchen is not valid in all types of games */ - if( $gametype == 'normal' || $gametype == 'silent' || $gametype=='trump' || $gametype=='wedding') + if( in_array($gametype,array('normal','wedding','trump','silent') )) if( in_array($RULES['schweinchen'],array('both','second','secondaftercall')) ) $ok=1; } @@ -109,68 +126,141 @@ if( $mystatus!='gameover' ) if($note != '') DB_insert_note($note,$gameid,$myid); }; -output_user_notes($myid,$gameid,$mystatus); -/* handle calls */ +/* make sure that we don't show the notes to the wrong person + * (e.g. other people looking at an old game) + */ +if( $mystatus != 'gameover' || + ( $mystatus == 'gameover' && + isset($_SESSION['id']) && + $myid == $_SESSION['id'])) + output_user_notes($myid,$gameid,$mystatus); + +/* handle calls, output a comment to show when the call was made */ +/* initialize comments */ +$comment = ''; + +/* check for calls, set comment */ if(myisset('call') && $_REQUEST['call'] == '120' && can_call(120,$me)) - $result = DB_query("UPDATE Hand SET point_call='120' WHERE hash='$me' "); + { + $result = DB_query("UPDATE Hand SET point_call='120' WHERE hash='$me' "); + if($myparty=='re') + $comment .= "Re"; + else if($myparty=='contra') + $comment .= "Contra"; + } if(myisset('call') && $_REQUEST['call'] == '90' && can_call(90,$me)) - $result = DB_query("UPDATE Hand SET point_call='90' WHERE hash='$me' "); + { + $result = DB_query("UPDATE Hand SET point_call='90' WHERE hash='$me' "); + $comment .= "No 90"; + } if(myisset('call') && $_REQUEST['call'] == '60' && can_call(60,$me)) - $result = DB_query("UPDATE Hand SET point_call='60' WHERE hash='$me' "); + { + $result = DB_query("UPDATE Hand SET point_call='60' WHERE hash='$me' "); + $comment .= "No 60"; + } if(myisset('call') && $_REQUEST['call'] == '30' && can_call(30,$me)) - $result = DB_query("UPDATE Hand SET point_call='30' WHERE hash='$me' "); + { + $result = DB_query("UPDATE Hand SET point_call='30' WHERE hash='$me' "); + $comment .= "No 30"; + } if(myisset('call') && $_REQUEST['call'] == '0' && can_call(0,$me)) - $result = DB_query("UPDATE Hand SET point_call='0' WHERE hash='$me' "); + { + $result = DB_query("UPDATE Hand SET point_call='0' WHERE hash='$me' "); + $comment .= "Zero"; + } + +/* get information needed to submit comment */ +$playid = DB_get_current_playid($gameid); + +/* set comment */ +if($comment != '') + DB_insert_comment($comment,$playid,$myid); +/* clear up */ +unset($comment); +/* end check for calls */ + /* output extra division in case this game is part of a session */ if($session) { echo "
\n"; - echo "
Rules: "; + echo '
'._('Rules').': '; switch($RULES['dullen']) { case 'none': - echo "\"not\n"; break; + echo " \""._('no\n"; break; case 'firstwins': - echo "\"ten\n"; break; + echo " \""._('ten\n"; break; case 'secondwins': - echo "\"second\n"; break; + echo " \""._('second\n"; break; } switch($RULES['schweinchen']) { case 'none': - echo "\"no\n"; break; case 'both': - echo "\"two\n"; break; case 'second': - echo "\"second\n"; break; case 'secondaftercall': - echo "\"second\n"; break; } switch($RULES['call']) { case '1st-own-card': - echo "\"1st-own-card\"\n"; break; + echo " \""._('1st-own-card')."\"\n"; break; case '5th-card': - echo "\"5th-card\"\n"; break; + echo " \""._('5th-card')."\"\n"; break; case '9-cards': - echo "\"9-cards\"\n"; break; + echo " \""._('9-cards')."\"\n"; break; } - echo "
\n"; - echo " 10ofhearts : {$RULES['dullen']}
\n"; - echo " schweinchen: {$RULES['schweinchen']}
\n"; - echo " call: {$RULES['call']}
\n"; - echo "
\n
\n"; - echo "
Score \n"; + echo "
\n"; + echo ' '._('10ofhearts').": {$RULES['dullen']}
\n"; + echo ' '._('schweinchen').": {$RULES['schweinchen']}
\n"; + echo ' '._('call').": {$RULES['call']}
\n"; + echo ' '._('lowtrump').": {$RULES['lowtrump']}
\n"; + echo "
\n
\n"; + + /* show score */ + + echo "
"; + $score = generate_score_table($session); + + /* get the last entry to show on the main page */ + $tmpscore= $score; + $finalscore = array_pop($tmpscore); + $finalscore = $finalscore['players']; + + if($finalscore) + { + echo _('Score').": \n"; + foreach($finalscore as $user=>$value) + { + $name = DB_get_name('userid',$user); + echo " ".substr($name,0,2).": $value "; + } + } + else + { + /* first game, no score yet */ + echo " "; + } + + /* output all games for the score table */ echo format_score_table_html($score,$myid); echo "
\n"; + + /* figure out which game in a session we are in and link to the + * previous and next game if possible + */ $hashes = DB_get_hashes_by_session($session,$myid); + $next = NULL; $i = 1; foreach($hashes as $hash) { @@ -180,11 +270,27 @@ if($session) $lasthash=$hash; } $i--; + + if($j>1) + $previous = $hashes[$j-2]; + else + $previous = NULL; + if($j<$i) + $next = $hashes[$j]; + else + $next = NULL; + if(isset($_SESSION['id']) && $_SESSION['id']==$myid) - echo "This is game number $j of $i in session $session."; + { + if($previous) + echo ""._('previous game')."    \n"; + echo "This is game number $j of $i in session $session.\n"; + if($next) + echo "   "._('next game')." \n"; + } else echo "This is game number $j of $i in session $session."; - echo "
\n"; + echo "\n
\n"; } /* display the table and the names */ @@ -199,6 +305,16 @@ display_table(); * play: game in progress * gameover: are we revisiting a game */ + +/* the user has done something, update the timestamp. Use $myid in + * active games and check for session-id in old games (myid might be wrong in that case) + */ +if($mystatus!='gameover') + DB_update_user_timestamp($myid); + else + if(isset($_SESSION['id'])) + DB_update_user_timestamp($_SESSION['id']); + switch($mystatus) { case 'start': @@ -219,17 +335,17 @@ switch($mystatus) { /* cancel the game */ $message = "Hello, \n\n". - "the game has been canceled due to the request of one of the players.\n"; + "the game has been canceled due to the request of one of the players.\n\n"; $userids = DB_get_all_userid_by_gameid($gameid); foreach($userids as $user) { - $To = DB_get_email('userid',$user); - mymail($To,"$EmailName game ".DB_format_gameid($gameid)." canceled",$message); + $subject = 'Game '.DB_format_gameid($gameid).' canceled'; + mymail($user,$subject,$message); } - /* delete everything from the dB */ - DB_cancel_game($me); + /* update game status */ + cancel_game('noplay',$gameid); break; } else @@ -268,14 +384,13 @@ switch($mystatus) { /* email startplayer */ /* - $email = DB_get_email('position-gameid',$startplayer,$gameid); $hash = DB_get_hash_from_game_and_pos($gameid,$startplayer); - $who = DB_get_userid('email',$email); + $who = DB_get_userid('hash',$hash); DB_set_player_by_gameid($gameid,$who); $message = "It's your turn now in game ".DB_format_gameid($gameid).".\n". "Use this link to go the game: ".$HOST.$INDEX."?action=game&me=".$hash."\n\n" ; - mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message); + mymail($who,"Ready, set, go... (game ".DB_format_gameid($gameid).") ",$message); */ } } @@ -286,7 +401,7 @@ switch($mystatus) $mycards = DB_get_hand($me); $mycards = mysort($mycards,$gametype); - if(!myisset('solo','wedding','poverty','nines') ) + if(!myisset('solo','wedding','poverty','nines','lowtrump') ) { /* output sickness of other playes, in case the already selected and are sitting in front of the current player */ echo "\n\n"; /* end ul tricks*/ $mycards = DB_get_hand($me); @@ -1862,7 +1983,7 @@ switch($mystatus) if($myturn && !myisset('card') && $mystatus=='play' ) { echo "Hello ".$myname.", it's your turn!
\n"; - echo "Your cards are:
\n"; + echo _('Your cards are').":
\n"; /* do we have to follow suite? */ $followsuit = 0; @@ -1871,9 +1992,21 @@ switch($mystatus) foreach($mycards as $card) { + /* display only cards that the player is allowed to play as links, the rest just display normal + * also check if we have both schweinchen, in that case only display on of them as playable + */ if( ($followsuit && !same_type($card,$firstcard)) || - ( (int)($card)==19 && ($RULES['schweinchen']=='second'||$RULES['schweinchen']=='secondaftercall') - && $GAME['schweinchen-who']==$me && !$GAME['schweinchen-first'] ) + ( (int)($card)==19 && + !$GAME['schweinchen-first'] && + ( $RULES['schweinchen']=='second' || + ( $RULES['schweinchen']=='secondaftercall' && + (DB_get_call_by_hash($GAME['schweinchen-who']) || + DB_get_partner_call_by_hash($GAME['schweinchen-who']) ) + ) + ) && + $GAME['schweinchen-who']==$me && + in_array($gametype,array('normal','wedding','trump','silent')) + ) ) display_card($card,$PREF['cardset']); else @@ -1882,7 +2015,7 @@ switch($mystatus) } else if($mystatus=='play' ) { - echo "Your cards are:
\n"; + echo _('Your cards are').":
\n"; foreach($mycards as $card) display_card($card,$PREF['cardset']); } @@ -1890,7 +2023,15 @@ switch($mystatus) { $oldcards = DB_get_all_hand($me); $oldcards = mysort($oldcards,$gametype); - echo "Your cards were:
\n"; + + if(isset($_SESSION['id']) && $myid==$_SESSION['id']) + echo _('Your cards were').":
\n"; + else + { + $name = DB_get_name('userid',$myid); + echo "$name's were:
\n"; + } + foreach($oldcards as $card) display_card($card,$PREF['cardset']); @@ -1922,54 +2063,92 @@ switch($mystatus) /* check if game is over, display results */ if(DB_get_game_status_by_gameid($gameid)=='play') { - echo "The game is over for you.. other people still need to play though"; + echo _('The game is over for you... other people still need to play though'); } break; default: myerror("error in testing the status"); } -/* output left menu */ -display_user_menu(); -/* output right menu */ +/* output other games where it is the users turn + * make sure that the people looking at old games don't see the wrong games here + */ +if( $gamestatus != 'gameover' ) + { + /* game isn't over, only valid user can get here, so show menu */ + display_user_menu($myid); + } +else if( $origmystatus != 'gameover' ) + { + /* user just played the very last card, game is now over, it's still ok to show the menu though */ + display_user_menu($myid); + } +else if( $mystatus == 'gameover' && + isset($_SESSION['id']) ) + { + /* user is looking at someone else's game, show the menu for the correct user */ + display_user_menu($_SESSION['id']); + } +else + { + echo "
\n"; + echo "It's your turn in these games:
\n"; + echo "Please log in to see this information.\n"; + echo "
\n"; + } -/* display rule set for this game */ -echo "
\n"; +/* + * display gameinfo: re/contra, comment-box, play-card button, games played by others + */ -if($gamestatus == 'play' ) - output_form_calls($me); +echo "
\n"; /* get time from the last action of the game */ $r = DB_query_array("SELECT mod_date from Game WHERE id='$gameid' " ); $gameend = time() - strtotime($r[0]); +/* comment box */ if($gamestatus == 'play' || $gameend < 60*60*24*7) { - echo "
\nA short comment:\n"; + echo ' '._('A short comment').":\n"; + } + +/* re-contra */ +if($gamestatus == 'play' ) + { + $myparty = DB_get_party_by_hash($me); + output_form_calls($me,$myparty); } -echo "\n"; +/* play-card button */ +if($gamestatus == 'play' || $gameend < 60*60*24*7) + { + echo " \n"; + } /* has this hand been played by others? */ $other_game_ids = DB_played_by_others($gameid); if(sizeof($other_game_ids)>0 && $mystatus=='gameover') { $mypos = DB_get_pos_by_hash($me); - echo "

See how other played the same hand:
\n"; + echo "

See how other played the same hand: \n"; foreach($other_game_ids as $id) { $otherhash = DB_get_hash_from_game_and_pos($id,$mypos); $othername = DB_get_name('hash',$otherhash); - echo "$othername
"; + echo " $othername "; } - echo "

\n"; + echo "

\n"; } -echo "
\n"; +echo "
\n"; /* end gameinfo */ echo "\n"; -if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' && isset($_SESSION['id']) && $_SESSION['id']==$myid) +$gamestatus = DB_get_game_status_by_gameid($gameid); +if($mystatus=='gameover' && + ($gamestatus =='gameover' || $gamestatus =='cancel-nines' || $gamestatus =='cancel-trump') && + isset($_SESSION['id']) && $_SESSION['id']==$myid) { $session = DB_get_session_by_gameid($gameid); $result = DB_query("SELECT id,create_date FROM Game". @@ -1995,6 +2174,8 @@ if($mystatus=='gameover' && DB_get_game_status_by_gameid($gameid)=='gameover' && else /* rotate normally */ output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid); } + else if($gamestatus == 'cancel-nines' || $gamestatus == 'cancel-trump') + output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid); else /* rotate normally */ output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid); }