exit();
}
+global $GAME,$RULES,$CARDS;
+
/* user might get here by clicking on the link in an email, so session might not be set */
if(isset($_SESSION["name"]))
output_status($_SESSION["name"]);
$GT = $gametype." ".$GT;
}
-/* does anyone have both foxes */
-$GAME["schweinchen"]=0;
-for($i=1;$i<5;$i++)
+/* do we need to worry about Schweinchen?
+ * check gametype and rules
+ * if yes, figure out if someone actually has Schweinchen
+ * save information in $GAME
+ */
+$ok=0;
+if( $gamestatus == 'pre' )
{
- $hash = DB_get_hash_from_game_and_pos($gameid,$i);
- $cards = DB_get_all_hand($hash);
- if( in_array("19",$cards) && in_array("20",$cards) )
- {
- $GAME["schweinchen"]=1;
- $GAME["schweinchen-who"]=$hash;
- }
- };
+ /* always need to use Schweinchen to figure out for example who has poverty */
+ $ok=1;
+ }
+else
+ {
+ /* in a game Schweinchen is not valid in all types of games */
+ if( $gametype == 'normal' || $gametype == 'silent' || $gametype=='trump' )
+ if( in_array($RULES['schweinchen'],array('both','second','secondaftercall')) )
+ $ok=1;
+ }
+
+/* these are the defaults */
+$GAME['schweinchen-who'] = NULL;
+$GAME['schweinchen-first'] = NULL;
+$GAME['schweinchen-second'] = NULL;
+
+if($ok)
+{
+ /* need to check for Schweinchen */
+ for($i=1;$i<5;$i++)
+ {
+ $hash = DB_get_hash_from_game_and_pos($gameid,$i);
+ $cards = DB_get_all_hand($hash);
+ if( in_array("19",$cards) && in_array("20",$cards) )
+ $GAME['schweinchen-who']=$hash;
+ };
+ $GAME['schweinchen-first'] = 0; /* to keep track if they have been played already */
+ $GAME['schweinchen-second'] = 0;
+}
+/* end check for Schweinchen */
+
+/* set the $CARDS variable, needed for sorting the cards
+ * we set it to normal so that the pre-game phase is handled ok
+ * and later set it to the correct game type that is played
+ */
+set_gametype('normal');
/* put everyting in a form */
echo "<form action=\"index.php?action=game&me=$me\" method=\"post\">\n";
/* whos turn is it? */
DB_set_player_by_gameid($gameid,$user);
$ok = 0;
+ break;
}
};
if($ok)
case 'init':
/* here we ask the player if he is sick */
$mycards = DB_get_hand($me);
- sort($mycards);
+ $mycards = mysort($mycards,$gametype);
/* output sickness of other playes, in case the already selected and are sitting in front of the current player */
echo "\n<ul class=\"tricks\">\n";
if($mystatus=='check')
{
$mycards = DB_get_hand($me);
- sort($mycards);
+ $mycards = mysort($mycards,$gametype);
/* output sickness of other playes, in case the already selected and are sitting in front of the current player */
echo "\n<ul class=\"tricks\">\n";
{
$ok = 0;
DB_set_player_by_gameid($gameid,$user);
+ break;
}
};
DB_set_hand_status_by_hash($userhash,'poverty');
}
}
+ /* check for silent solo, set game type to solo in this case */
+ $gametype = DB_get_gametype_by_gameid($gameid);
+ $userids = DB_get_all_userid_by_gameid($gameid);
+ foreach($userids as $userid)
+ {
+ $userhash = DB_get_hash_from_gameid_and_userid($gameid,$userid);
+
+ if($gametype=='normal')
+ {
+ $userhand = DB_get_all_hand($userhash);
+ if(check_wedding($userhand))
+ {
+ /* normal game type and player has both queens -> silent solo */
+ /* keep startplayer, just set gametype to silent solo */
+ DB_set_gametype_by_gameid($gameid,"solo");
+ DB_set_solo_by_gameid($gameid,'silent');
+ }
+ }
+ }
/* send out email to first player or poverty person*/
if($gametype!="poverty" && $gametype!="dpoverty")
/* 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
+ * only need to do this if the game hasn't started yet
*/
$gamestatus = DB_get_game_status_by_gameid($gameid);
if($gamestatus == 'pre')
{
$ok = 0;
DB_set_player_by_gameid($gameid,$user);
+ break;
}
}
if($ok)
{
/* only set this after all poverty, etc. are handled*/
DB_set_game_status_by_gameid($gameid,'play');
-
+
/* 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);
DB_set_player_by_gameid($gameid,$who);
-
+
if($hash!=$me && DB_get_email_pref_by_hash($hash)!="emailaddict")
{
/* email startplayer) */
if($gametype=="solo")
{
$gametype = DB_get_solo_by_gameid($gameid);
- $GT = $gametype." ".$GT;
+ if($gametype=='silent')
+ $GT = 'normal';
+ else
+ $GT = $gametype." ".$GT;
}
else
$gametype = "normal";
/* output vorbehalte */
$mygametype = DB_get_gametype_by_gameid($gameid);
- if($mygametype != "normal") /* only show when needed */
+ if($mygametype != 'normal' && $mygametype != 'silent') /* only show when needed */
{
echo " <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
" <div class=\"trick\" id=\"trick0\">\n";
$user = $r[6];
/* check if first schweinchen has been played */
- if( $GAME["schweinchen"] && ($r[0] == 19 || $r[0] == 20) )
- $GAME["schweinchen"]++;
+ if( $GAME['schweinchen-who'] && ($r[0] == 19 || $r[0] == 20) )
+ if(!$GAME['schweinchen-first'])
+ $GAME['schweinchen-first'] = 1; /* playing the first fox */
+ else
+ $GAME['schweinchen-second'] = 1; /* this must be the second fox */
/* save card to be able to find the winner of the trick later */
$play[$seq] = array("card"=>$r[0],"pos"=>$pos);
{
$card = $_REQUEST["card"];
$handid = DB_get_handid('hash',$me);
+ $commentSchweinchen =""; /* used to add a comment when Schweinchen is being played */
/* check if we have card and that we haven't played it yet*/
/* set played in hand_card to true where hand_id and card_id*/
$playid = DB_play_card($trickid,$handcardid,$sequence);
- /* check special output for schweinchen in case:
- * schweinchen is in the rules, a fox has been played and the gametype is correct
+ /* check special output for schweinchen in case in case a fox is being played
+ * check for correct rules, etc. has already been done
*/
- if( $GAME["schweinchen"] &&
- ($card == 19 || $card == 20) &&
- ($gametype == "normal" || $gametype == "silent"|| $gametype=="trump"))
+ if( $GAME["schweinchen-who"] && ($card == 19 || $card == 20) )
{
- $GAME["schweinchen"]++; // count how many have been played including this one
- if($GAME["schweinchen"]==3 && $RULES["schweinchen"]=="second" )
- DB_insert_comment("Schweinchen! ",$playid,$myid);
- if($RULES["schweinchen"]=="both" )
- DB_insert_comment("Schweinchen! ",$playid,$myid);
+ if(!$GAME['schweinchen-first'])
+ $GAME['schweinchen-first'] = 1; /* playing the first fox */
+ else
+ $GAME['schweinchen-second'] = 1; /* this must be the second fox */
+
+ if( ($GAME['schweinchen-second']==1 && $RULES['schweinchen']=='second') || $RULES['schweinchen']=='both')
+ {
+ DB_insert_comment("Schweinchen! ",$playid,$myid);
+ $commentSchweinchen = "Schweinchen! ";
+ }
if ($debug)
- echo "schweinchen = ".$GAME["schweinchen"]." ---<br />";
+ echo "schweinchen = ".$GAME["schweinchen-who"]." ---<br />";
}
/* if sequence == 4 check who one in case of wedding */
if(DB_get_gametype_by_gameid($gameid)=="solo")
{
$solo = DB_get_solo_by_gameid($gameid);
- if($solo == "trump" || $solo == "silent")
+ if($solo == 'trump' || $solo == 'silent')
$ok = 1; /* for trump solos and silent solos, foxes are ok */
}
else
$comment = $_REQUEST["comment"];
if($comment != "")
DB_insert_comment($comment,$playid,$myid);
+ if($commentSchweinchen)
+ $comment = $commentSchweinchen . $comment;
};
/* check for note */
foreach($mycards as $card)
{
- if($followsuit && !same_type($card,$firstcard))
+ if( ($followsuit && !same_type($card,$firstcard)) ||
+ ( (int)($card)==19 && ($RULES['schweinchen']=='second'||$RULES['schweinchen']=='secondaftercall')
+ && $GAME['schweinchen-who']==$me && !$GAME['schweinchen-first'] )
+ )
display_card($card,$PREF["cardset"]);
else
display_link_card($card,$PREF["cardset"]);
$type = DB_get_gametype_by_gameid($gameid);
if($type=="solo")
- output_ask_for_new_game($names[0],$names[1],$names[2],$names[3],$gameid);
- else
+ {
+ $solo = DB_get_solo_by_gameid($gameid);
+
+ if($solo!='silent') /* repeat game with same first player */
+ 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);
+ }
+ else /* rotate normally */
output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
}
}