X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Fgame.php;h=73353825170470c09aca98186e9ab170d33b1217;hp=b08f36b084b973bb86064eef351fa54fd2c0cbfe;hb=8413d51c55c34d83798127c9ba39358d86902c51;hpb=98959130e1ed875f0b4d783a5a82b144d504c1d4 diff --git a/include/game.php b/include/game.php index b08f36b..7335382 100644 --- a/include/game.php +++ b/include/game.php @@ -67,7 +67,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; } @@ -210,21 +210,38 @@ if($session) 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']; - echo "
Score: \n"; - foreach($finalscore as $user=>$value) + if($finalscore) + { + echo "Score: \n"; + foreach($finalscore as $user=>$value) + { + $name = DB_get_name('userid',$user); + echo " ".substr($name,0,2).": $value "; + } + } + else { - $name = DB_get_name('userid',$user); - echo " ".substr($name,0,2).": $value "; + /* 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 */ + /* 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; @@ -291,17 +308,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 @@ -340,14 +357,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); */ } } @@ -579,22 +595,20 @@ switch($mystatus) else if($nines) { /* cancel game */ - /* TODO: should we keep statistics of this? */ - $message = "Hello, \n\n". - " the game has been canceled because ".DB_get_name('userid',$nines). + $message = "The game has been canceled because ".DB_get_name('userid',$nines). " has five or more nines and nobody is playing solo.\n\n". - " To redeal either start a new game or, in case the game was part of a tournament, \n". - " go to the last game and use the link at the bottom of the page to redeal."; + "To redeal either start a new game or, in case the game was part of a tournament,\n". + "go to the last game and use the link at the bottom of the page to redeal.\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('nines',$gameid); echo "The game has been canceled because ".DB_get_name('userid',$nines). " has five or more nines and nobody is playing solo.\n"; @@ -720,9 +734,8 @@ switch($mystatus) if($gametype!='poverty' && $gametype!='dpoverty') { $startplayer = DB_get_startplayer_by_gameid($gameid); - $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); if($hash!=$me) @@ -732,11 +745,12 @@ switch($mystatus) /* email startplayer */ $message = "It's your turn now in game ".DB_format_gameid($gameid).".\n". "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$hash."\n\n" ; - mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message); + $subject = 'Ready, set, go... (game '.DB_format_gameid($gameid).')'; + mymail($who,$subject,$message); } } else - echo " Please, start the game.
\n"; + echo "
Please, start the game.
\n"; } else { @@ -746,10 +760,9 @@ switch($mystatus) $whoid = DB_get_userid('gameid-position',$gameid,$who); if($whoid==$myid) - echo " Please, start the game.
\n"; + echo "
Please, start the game.
\n"; else { - $email = DB_get_email('position-gameid',$who,$gameid); $whohash = DB_get_hash_from_game_and_pos($gameid,$who); DB_set_player_by_gameid($gameid,$whoid); @@ -758,7 +771,8 @@ switch($mystatus) /* email player for poverty */ $message = "Poverty: It's your turn now in game ".DB_format_gameid($gameid).".\n". "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$whohash."\n\n" ; - mymail($email,$EmailName."Poverty (game ".DB_format_gameid($gameid).") ",$message); + $subject = 'Poverty (game '.DB_format_gameid($gameid).') '; + mymail($whoid,$subject,$message); } } } @@ -782,9 +796,6 @@ switch($mystatus) * it is easier to check B) first */ - /* output pre game in case user reloads */ - - set_gametype($gametype); /* this sets the $CARDS variable */ $myparty = DB_get_party_by_hash($me); @@ -810,6 +821,25 @@ switch($mystatus) $mycards = DB_get_hand($me); $mycards = mysort($mycards,$gametype); + /* output pre-game trick in case user reloads, + * only needs to be done when a team has been formed */ + if($myparty=='re' || $myparty=='contra') + { + echo "\n
"; @@ -1051,6 +1079,27 @@ switch($mystatus) * in case of 'play' there is a break later that skips the last part */ + /* first check if the game has been canceled and display */ + switch($gamestatus) + { + case 'cancel-noplay': + echo "

The game has been canceled due to the request of one player.

If this was a mistake all 4 players need to send an Email to $ADMIN_NAME at $ADMIN_EMAIL requesting that the game should be restarted.

"; + break; + case 'cancel-timedout': + echo "

The game has been canceled because one player wasn't responding.

If this was a mistake all 4 players need to send an Email to $ADMIN_NAME at $ADMIN_EMAIL requesting that the game should be restarted.

"; + break; + case 'cancel-nines': + case 'cancel-timedout': + echo "

The game has been canceled because one player had too many nines.

"; + break; + case 'cancel-trump': + echo "

The game has been canceled because nobody wanted to take the trump.

"; + break; + } + /* for these two types, we shouldn't show the cards, since we might want to restart the game */ + if (in_array($gamestatus,array('cancel-noplay','cancel-timedout'))) + break; + /* check if all players are ready to play, * if so, send out email to the startplayer * only need to do this if the game hasn't started yet @@ -1077,9 +1126,8 @@ switch($mystatus) /* email startplayer */ $startplayer = DB_get_startplayer_by_gameid($gameid); - $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); if($hash!=$me && DB_get_email_pref_by_hash($hash)!='emailaddict') @@ -1087,7 +1135,8 @@ switch($mystatus) /* email startplayer) */ $message = "It's your turn now in game ".DB_format_gameid($gameid).".\n". "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$hash."\n\n" ; - mymail($email,$EmailName."ready, set, go... (game ".DB_format_gameid($gameid).") ",$message); + $subject = 'Ready, set, go... (game '.DB_format_gameid($gameid).')'; + mymail($who,$subject,$message); } } } @@ -1184,93 +1233,10 @@ switch($mystatus) { echo "
  • Pre\n". "
    \n"; - /* get information so show the cards that have been handed over in a poverty game */ - $partnerpos1 = 0; - $povertypos1 = 0; - $partnerpos2 = 0; - $povertypos2 = 0; - if($mygametype == 'poverty' || $mygametype=='dpoverty') - { - /* who has poverty */ - for($mypos=1;$mypos<5;$mypos++) - { - $usersick = DB_get_sickness_by_pos_and_gameid($mypos,$gameid); - if($usersick == 'poverty') - if($povertypos1) - $povertypos2 = $mypos; - else - $povertypos1 = $mypos; - } - /* get hash and cards for all */ - $povertyhash1 = DB_get_hash_from_game_and_pos($gameid,$povertypos1); - $partnerhash1 = DB_get_partner_hash_by_hash($povertyhash1); - - $povertycards1 = DB_get_exchanged_cards($povertyhash1); - $partnercards1 = DB_get_exchanged_cards($partnerhash1); - - $partnerpos1 = DB_get_pos_by_hash($partnerhash1); - if($povertypos2) - { - $povertyhash2 = DB_get_hash_from_game_and_pos($gameid,$povertypos2); - $partnerhash2 = DB_get_partner_hash_by_hash($povertyhash2); - - $povertycards2 = DB_get_exchanged_cards($povertyhash2); - $partnercards2 = DB_get_exchanged_cards($partnerhash2); - - $partnerpos2 = DB_get_pos_by_hash($partnerhash2); - } - } - - $show = 1; - for($mypos=1;$mypos<5;$mypos++) - { - $usersick = DB_get_sickness_by_pos_and_gameid($mypos,$gameid); - if($usersick!=NULL || - $mypos==$povertypos1 || $mypos==$partnerpos1 || - $mypos==$povertypos2 || $mypos==$partnerpos2 ) - { - echo "
    Vorbehalt
    "; - if($show) - echo " $usersick
    "; - if($mypos==$partnerpos1) - { - foreach($partnercards1 as $card) - if($povertyhash1 == $me || $partnerhash1 == $me || $mystatus=='gameover') - display_card($card,$PREF['cardset']); - else - display_card(0,$PREF['cardset']); - } - else if($mypos==$povertypos1) - { - foreach($povertycards1 as $card) - if($povertyhash1 == $me || $partnerhash1 == $me || $mystatus=='gameover') - display_card($card,$PREF['cardset']); - else - display_card(0,$PREF['cardset']); - } - else if($mypos==$povertypos2) - { - foreach($povertycards2 as $card) - if($povertyhash2 == $me || $partnerhash2 == $me || $mystatus=='gameover') - display_card($card,$PREF['cardset']); - else - display_card(0,$PREF['cardset']); - } - else if($mypos==$partnerpos2) - { - foreach($partnercards2 as $card) - if($povertyhash2 == $me || $partnerhash2 == $me || $mystatus=='gameover') - display_card($card,$PREF['cardset']); - else - display_card(0,$PREF['cardset']); - } - echo "
    \n"; + /* get information so show the cards that have been handed over in a poverty game */ + output_exchanged_cards(); - if($mygametype == $usersick) - $show = 0; - } - } echo "
    \n
  • \n"; /* end div trick, end li trick */ } @@ -1334,6 +1300,7 @@ switch($mystatus) /* end of trick? */ if($seq==4) { + $winner = get_winner($play,$gametype); /* returns the position */ echo " \n \n"; /* end div trick, end li trick */ } } @@ -1596,15 +1563,17 @@ switch($mystatus) if(DB_get_game_status_by_gameid($gameid)=='play') { $next_hash = DB_get_hash_from_game_and_pos($gameid,$next); - $email = DB_get_email('hash',$next_hash); - $who = DB_get_userid('email',$email); + $who = DB_get_userid('hash',$next_hash); DB_set_player_by_gameid($gameid,$who); $message = "A card has been played in game ".DB_format_gameid($gameid).".\n\n". "It's your turn now.\n". "Use this link to play a card: ".$HOST.$INDEX."?action=game&me=".$next_hash."\n\n" ; if( DB_get_email_pref_by_uid($who)!='emailaddict' ) - mymail($email,$EmailName."a card has been played in game ".DB_format_gameid($gameid),$message); + { + $subject = 'A card has been played in game '.DB_format_gameid($gameid); + mymail($who,$subject,$message); + } } else /* send out final email */ { @@ -1835,12 +1804,8 @@ switch($mystatus) $message .= "\nUse these links to have a look at game ".DB_format_gameid($gameid).": \n"; /* send out final email */ - $all = array(); - foreach($userids as $user) { - $all[] = DB_get_email('userid',$user); - /* add links for all players */ $hash = DB_get_hash_from_gameid_and_userid($gameid,$user); $name = DB_get_name('userid',$user); @@ -1848,10 +1813,9 @@ switch($mystatus) $link = "$name: ".$HOST.$INDEX."?action=game&me=".$hash."\n" ; $message .= $link; } - $To = implode(",",$all); - - $message .= "\n\n (you can use reply all on this email to reach all the players.)\n"; - mymail($To,$EmailName."Game over (game ".DB_format_gameid($gameid).") ",$message); + $message .= "\n\n (you can use reply all on this email to reach all the players.)\n\n"; + $subject = ' Game over (game '.DB_format_gameid($gameid).') '; + mymail($userids,$subject,$message); } } else @@ -1951,11 +1915,17 @@ switch($mystatus) * 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 && !$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 ) + ( (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 @@ -2067,7 +2037,10 @@ echo "\n"; 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". @@ -2093,6 +2066,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); }