BUGFIX: forgot to set default values for some new variables
[e-DoKo.git] / include / game.php
index 0d4f0a9856606465caabe651390a197e333b170b..a90d8b2dea1418bfdd3be82a2461a92a7b216dc0 100644 (file)
@@ -5,6 +5,7 @@
 if(!isset($HOST))
   exit;
 
 if(!isset($HOST))
   exit;
 
+/* calling game.php only makes sense when we give it a hash for a game */
 if(!myisset("me"))
   {
     echo "Hmm, you really shouldn't mess with the urls.<br />\n";
 if(!myisset("me"))
   {
     echo "Hmm, you really shouldn't mess with the urls.<br />\n";
@@ -12,10 +13,9 @@ if(!myisset("me"))
     DB_close();
     exit();
   }
     DB_close();
     exit();
   }
-
 $me = $_REQUEST["me"];
 
 $me = $_REQUEST["me"];
 
-/* test for valid ID */
+/* Ok, got a hash, but is it valid? */
 $myid = DB_get_userid('hash',$me);
 if(!$myid)
   {
 $myid = DB_get_userid('hash',$me);
 if(!$myid)
   {
@@ -26,11 +26,13 @@ if(!$myid)
     exit();
   }
 
     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"]);
 
 /* 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"]);
 
-/* the user had done something, update the timestamp */
+/* the user has done something, update the timestamp */
 DB_update_user_timestamp($myid);
 
 /* get some information from the DB */
 DB_update_user_timestamp($myid);
 
 /* get some information from the DB */
@@ -41,17 +43,11 @@ $mypos    = DB_get_pos_by_hash($me);
 $myhand   = DB_get_handid('hash',$me);
 $session  = DB_get_session_by_gameid($gameid);
 
 $myhand   = DB_get_handid('hash',$me);
 $session  = DB_get_session_by_gameid($gameid);
 
-/* get prefs and save them */
-DB_get_PREF($myid);
+/* get prefs and save them in a variable*/
+$PREF = DB_get_PREF($myid);
 
 /* get rule set for this game */
 
 /* get rule set for this game */
-$r = DB_query_array("SELECT * FROM Rulesets".
-                   " LEFT JOIN Game ON Game.ruleset=Rulesets.id ".
-                   " WHERE Game.id='$gameid'" );
-
-$RULES["dullen"]      = $r[2];
-$RULES["schweinchen"] = $r[3];
-$RULES["call"]        = $r[4];
+$RULES = DB_get_RULES($gameid);
 
 /* get some infos about the game */
 $gametype   = DB_get_gametype_by_gameid($gameid);
 
 /* get some infos about the game */
 $gametype   = DB_get_gametype_by_gameid($gameid);
@@ -63,18 +59,46 @@ if($gametype=="solo")
     $GT  = $gametype." ".$GT;
   }
 
     $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_gametype($gametype); /* this sets the $CARDS variable */
 
 /* put everyting in a form */
 echo "<form action=\"index.php?action=game&me=$me\" method=\"post\">\n";
 
 /* put everyting in a form */
 echo "<form action=\"index.php?action=game&me=$me\" method=\"post\">\n";
@@ -189,59 +213,75 @@ switch($mystatus)
          }
       }
   case 'init':
          }
       }
   case 'init':
-
+    /* here we ask the player if he is sick */
     $mycards = DB_get_hand($me);
     $mycards = DB_get_hand($me);
-    sort($mycards);
+    $mycards = mysort($mycards,$gametype);
 
 
-    output_check_for_sickness($me,$mycards);
+    /* 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";
+    echo "  <li class=\"nohighlight\"> Game ".DB_format_gameid($gameid).": </li>\n";
+    echo "  <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
+      "    <div class=\"trick\" id=\"trick0\">\n";
 
 
-    echo "<p class=\"mycards\">Your cards are: <br />\n";
-    foreach($mycards as $card)
-      display_card($card,$PREF["cardset"]);
-    echo "</p>\n";
+    for($pos=1;$pos<5;$pos++)
+      {
+       $usersick   = DB_get_sickness_by_pos_and_gameid($pos,$gameid);
+       $userid     = DB_get_userid('gameid-position',$gameid,$pos);
+       $userstatus = DB_get_hand_status_by_userid_and_gameid($userid,$gameid);
 
 
-    /* move on to the next stage*/
-    DB_set_hand_status_by_hash($me,'check');
-    break;
+       if($userstatus=='start' || $userstatus=='init')
+         echo " <div class=\"vorbehalt".($pos-1)."\"> still needs to decide </div>\n"; /* show this to everyone */
+       else
+         if($usersick!=NULL && $pos<=$mypos ) /* only show this for people sitting before the player */
+           echo " <div class=\"vorbehalt".($pos-1)."\"> sick </div>\n";
+         else if($usersick==NULL && $pos<=$mypos)
+           echo " <div class=\"vorbehalt".($pos-1)."\"> healthy </div>\n";
+      }
+    echo "    </div>\n  </li>\n</ul>\n";  /* end div trick, end li trick , end tricks*/
+    /* end displaying sickness */
 
 
-  case 'check':
-    /* ok, user is in the game, saw his cards and selected his vorbehalt
-     * so first we check what he selected
-     */
     if(!myisset("solo","wedding","poverty","nines") )
       {
     if(!myisset("solo","wedding","poverty","nines") )
       {
-       /* all these variables have a pre-selected default,
-        * so we should never get here,
-        * unless a user tries to cheat ;)
-        * can also happen if user reloads the page!
-        */
-       echo "<p class=\"message\"> You need to answer the <a href=\"$INDEX?action=game&me=$me&in=yes\">questions</a>.</p>";
-       DB_set_hand_status_by_hash($me,'init');
+       output_check_for_sickness($me,$mycards);
+
+       echo "<div class=\"mycards\">Your cards are: <br />\n";
+       foreach($mycards as $card)
+         display_card($card,$PREF["cardset"]);
+       echo "</div>\n";
+
+       break;
       }
     else
       {
       }
     else
       {
-       /* check if someone selected more than one vorbehalt */
-       $Nvorbehalt = 0;
-       if($_REQUEST["solo"]!="No")       $Nvorbehalt++;
-       if($_REQUEST["wedding"] == "yes") $Nvorbehalt++;
-       if($_REQUEST["poverty"] == "yes") $Nvorbehalt++;
-       if($_REQUEST["nines"] == "yes")   $Nvorbehalt++;
-
-       if($Nvorbehalt>1)
+       /* check if someone selected more than one sickness */
+       $Nsickness = 0;
+       if($_REQUEST["solo"]!="No")       $Nsickness++;
+       if($_REQUEST["wedding"] == "yes") $Nsickness++;
+       if($_REQUEST["poverty"] == "yes") $Nsickness++;
+       if($_REQUEST["nines"] == "yes")   $Nsickness++;
+
+       if($Nsickness>1)
          {
          {
-           echo "<p class=\"message\"> You selected more than one vorbehalt, please go back ".
+           echo "<p class=\"message\"> You selected more than one sickness, please go back ".
              "and answer the <a href=\"$INDEX?action=game&me=$me&in=yes\">question</a> again.</p>";
              "and answer the <a href=\"$INDEX?action=game&me=$me&in=yes\">question</a> again.</p>";
-           DB_set_hand_status_by_hash($me,'init');
+
+           echo "<div class=\"mycards\">Your cards are: <br />\n";
+           foreach($mycards as $card)
+             display_card($card,$PREF["cardset"]);
+           echo "</div>\n";
+
+           break;
          }
        else
          {
          }
        else
          {
+           /* everything is ok, save what user said and proceed */
            echo "<p class=\"message\">Processing what you selected in the last step...";
 
            /* check if this sickness needs to be handled first */
            $gametype    = DB_get_gametype_by_gameid($gameid);
            echo "<p class=\"message\">Processing what you selected in the last step...";
 
            /* check if this sickness needs to be handled first */
            $gametype    = DB_get_gametype_by_gameid($gameid);
-           $startplayer = DB_get_startplayer_by_gameid($gameid);
+           $startplayer = DB_get_startplayer_by_gameid($gameid); /* need this to check which solo goes first */
 
 
-           if( $_REQUEST["solo"]!="No")
+           if( $_REQUEST["solo"]!="No" )
              {
                /* user wants to play a solo */
 
              {
                /* user wants to play a solo */
 
@@ -281,51 +321,48 @@ switch($mystatus)
                DB_set_sickness_by_hash($me,"nines");
              }
 
                DB_set_sickness_by_hash($me,"nines");
              }
 
-           echo " Ok, done with checking, please go to the <a href=\"$INDEX?action=game&me=$me\">next step of the setup</a>.</p>";
+           echo "</p>\n";
 
            /* move on to the next stage*/
 
            /* move on to the next stage*/
-           DB_set_hand_status_by_hash($me,'poverty');
-
-           /* check if everyone has reached this stage, send out email */
-           $userids = DB_get_all_userid_by_gameid($gameid);
-           $ok = 1;
-           foreach($userids as $user)
-             {
-               $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
-               if($userstat!='poverty' && $userstat!='play')
-                 {
-                   $ok = 0;
-                   DB_set_player_by_gameid($gameid,$user);
-                 }
-             };
-           if($ok)
-             {
-               /* reset player = everyone has to do something now */
-               DB_set_player_by_gameid($gameid,NULL);
-
-               foreach($userids as $user)
-                 {
-                   $To       = DB_get_email('userid',$user);
-                   $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                   if($userhash != $me)
-                     {
-                       $message = "Everyone finish the questionary in game ".DB_format_gameid($gameid).", ".
-                         "please visit this link now to continue: \n".
-                         " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
-                       mymail($To,$EmailName." finished setup in game ".DB_format_gameid($gameid),$message);
-                     }
-                 };
-             };
+           DB_set_hand_status_by_hash($me,'check');
          };
       };
          };
       };
-    break;
 
 
-  case 'poverty':
-    /* here we need to check if there is a solo or some other form of sickness.
-     * If so, which one is the most important one
-     * set that one in the Game table
-     * tell people about it.
+  case 'check':
+    /* here we check what all players said and figure out what game we are playing
+     * this can therefore only be handled once all players finished the last stage
      */
      */
+
+    /* only need to redisplay the cards when the user reloads the page and lands directly here */
+    if($mystatus=='check')
+      {
+       $mycards = DB_get_hand($me);
+       $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";
+       echo "  <li class=\"nohighlight\"> Game ".DB_format_gameid($gameid).": </li>\n";
+       echo "  <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
+         "    <div class=\"trick\" id=\"trick0\">\n";
+
+       for($pos=1;$pos<5;$pos++)
+         {
+           $usersick   = DB_get_sickness_by_pos_and_gameid($pos,$gameid);
+           $userid     = DB_get_userid('gameid-position',$gameid,$pos);
+           $userstatus = DB_get_hand_status_by_userid_and_gameid($userid,$gameid);
+
+           if($userstatus=='start' || $userstatus=='init')
+             echo " <div class=\"vorbehalt".($pos-1)."\"> still needs to decide </div>\n"; /* show this to everyone */
+           else
+             if($usersick!=NULL) /* in the init-phase we only showed players with $pos<$mypos, now we can show all */
+               echo " <div class=\"vorbehalt".($pos-1)."\"> sick </div>\n";
+             else
+               echo " <div class=\"vorbehalt".($pos-1)."\"> healthy </div>\n";
+         }
+       echo "    </div>\n  </li>\n</ul>\n";  /* end div trick, end li trick , end tricks*/
+       /* end displaying sickness */
+      }
+
     echo "<div class=\"message\">\n";
     echo "<p> Checking if someone else selected solo, nines, wedding or poverty.</p>";
 
     echo "<div class=\"message\">\n";
     echo "<p> Checking if someone else selected solo, nines, wedding or poverty.</p>";
 
@@ -335,27 +372,46 @@ switch($mystatus)
     foreach($userids as $user)
       {
        $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
     foreach($userids as $user)
       {
        $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
-       if($userstat!='poverty' && $userstat!='play')
-         $ok = 0;
+       if($userstat!='check')
+         {
+           $ok = 0;
+           DB_set_player_by_gameid($gameid,$user);
+         }
       };
 
     if(!$ok)
       {
       };
 
     if(!$ok)
       {
-       echo "This step can only be handled after everyone finished the last step. ".
+       echo "<p>This step can only be handled after everyone finished the last step. ".
          "Seems like this is not the case, so you need to wait a bit... ".
          "you will get an email once that is the case, please use the link in ".
          "Seems like this is not the case, so you need to wait a bit... ".
          "you will get an email once that is the case, please use the link in ".
-         "that email to continue the game.<br />";
+         "that email to continue the game.</p></div>";
+
+       /* display cards, if player was just at the init-phase he will still see the cards from there
+        * we can put this one here, since the last player to finish the init state won't get here and
+        * will still see his card anyway from the init-phase
+        */
+       if($mystatus=='check')
+         {
+           /* show cards */
+           echo "<div class=\"mycards\">Your cards are: <br />\n";
+           foreach($mycards as $card)
+             display_card($card,$PREF["cardset"]);
+           echo "</div>\n";
+         }
+       break;
       }
     else
       {
       }
     else
       {
-       echo "Everyone has finished checking their cards, let's see what they said...<br />";
+       /* Ok, everyone finished the init-phase, time to figure out what game we
+        * are playing, in case there are any solos this already
+        * will have the correct information in it */
+
+       echo "<p> Ok, everyone is done... figuring out what kind of game we are playing.</p>";
 
 
-       /* check what kind of game we are playing,  in case there are any solos this already
-        *will have the correct information in it */
        $gametype    = DB_get_gametype_by_gameid($gameid);
        $startplayer = DB_get_startplayer_by_gameid($gameid);
 
        $gametype    = DB_get_gametype_by_gameid($gameid);
        $startplayer = DB_get_startplayer_by_gameid($gameid);
 
-       /* check for different sickness and just output a general info */
+       /* check for sickness */
        $nines   = 0;
        $poverty = 0;
        $wedding = 0;
        $nines   = 0;
        $poverty = 0;
        $wedding = 0;
@@ -367,28 +423,17 @@ switch($mystatus)
            if($usersick == 'nines')
              {
                $nines = $user;
            if($usersick == 'nines')
              {
                $nines = $user;
-               echo "$name has a Vorbehalt. <br />";
-               break;
+               break; /* no need to check for other poverties, since only solo can win and that is already set */
              }
            else if($usersick == 'poverty')
              }
            else if($usersick == 'poverty')
-             {
-               $poverty++;
-               echo "$name has a Vorbehalt. <br />";
-             }
+             $poverty++;
            else if($usersick == 'wedding')
            else if($usersick == 'wedding')
-             {
-               $wedding=$user;
-               echo "$name has a Vorbehalt. <br />"  ;
-             }
+             $wedding=$user;
            else if($usersick == 'solo')
            else if($usersick == 'solo')
-             {
-               $solo++;
-               echo "$name has a Vorbehalt. <br />"  ;
-             }
+             $solo++;
          }
 
        /* now check which sickness comes first and set the gametype to it */
          }
 
        /* now check which sickness comes first and set the gametype to it */
-
        if($gametype == "solo")
          {
            /* do nothing */
        if($gametype == "solo")
          {
            /* do nothing */
@@ -459,340 +504,407 @@ switch($mystatus)
            DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */
            $gametype = "wedding";
          };
            DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */
            $gametype = "wedding";
          };
+       /* now the gametype is set correctly in the database */
+       echo "<p> Got it :)</p>";
 
 
-       echo "<br />\n";
-
-       /* now the gametype is set correctly (shouldn't matter that this is calculated for every user)
-        * output what kind of game we have */
-
-       $poverty = 0;
-       foreach($userids as $user)
+       /* loop over all players, set re/contra if possible and start the game if possible */
+       $userids = DB_get_all_userid_by_gameid($gameid);
+       foreach($userids as $userid)
          {
          {
-           /* userids are sorted by position...
-            * so output whatever the first one has, then whatever the next one has
-            * stop when the sickness is the same as the gametype
-            */
+           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$userid);
 
 
-           $name     = DB_get_name('userid',$user);
-           $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+           switch($gametype)
+             {
+             case "solo":
+               /* are we the solo player? set us to re, else set us to contra */
+               $pos = DB_get_pos_by_hash($userhash);
+               if($pos == $startplayer)
+                 DB_set_party_by_hash($userhash,"re");
+               else
+                 DB_set_party_by_hash($userhash,"contra");
+               DB_set_hand_status_by_hash($userhash,'play');
+               break;
 
 
-           if($usersick)
-             echo "$name has $usersick. <br />"; /*TODO: perhaps save this in a string and store in Game? */
+             case "wedding":
+               /* set person with the wedding to re, do the rest during the game */
+               $usersick = DB_get_sickness_by_userid_and_gameid($userid,$gameid);
+               if($usersick == "wedding")
+                 DB_set_party_by_hash($userhash,"re");
+               else
+                 DB_set_party_by_hash($userhash,"contra");
 
 
-           if($usersick=="poverty")
-             $poverty++;
-           if($usersick == "wedding" && $gametype =="wedding")
-             break;
-           if($usersick == "poverty" && $gametype =="poverty")
-             break;
-           if($usersick == "poverty" && $gametype =="dpoverty" && $poverty==2)
-             break;
-           if($usersick == "solo" && $gametype =="solo")
-             break;
-         };
+               DB_set_hand_status_by_hash($userhash,'play');
+               break;
+
+             case "normal":
+               $hand = DB_get_all_hand($userhash);
 
 
-       /* output Schweinchen in case the rules need it */
-       if( $gametype != "solo")
-         if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" )
-           echo DB_get_name('hash',$GAME["schweinchen-who"])." has Schweinchen. <br />";
+               if(in_array('3',$hand)||in_array('4',$hand))
+                 DB_set_party_by_hash($userhash,"re");
+               else
+                 DB_set_party_by_hash($userhash,"contra");
+               DB_set_hand_status_by_hash($userhash,'play');
+               break;
+             case "poverty":
+             case "dpoverty":
+               /* set person with poverty to play status */
+               $usersick = DB_get_sickness_by_userid_and_gameid($userid,$gameid);
+               if($usersick == "poverty")
+                 DB_set_hand_status_by_hash($userhash,'play');
+
+               /* set status of first player to be asked to poverty */
+               $who = DB_get_sickness_by_gameid($gameid);
+               if($who > 6) $who= $who/10; /* in case we have dpoverty */
+               $whoid = DB_get_userid('gameid-position',$gameid,$who);
+               if($whoid==$userid)
+                 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);
 
 
-       echo "<br />\n";
+           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');
+                 }
+             }
+         }
 
 
-       /* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/
-       switch($gametype)
+       /* send out email to first player or poverty person*/
+       if($gametype!="poverty" && $gametype!="dpoverty")
          {
          {
-         case "solo":
-           /* are we the solo player? set us to re, else set us to contra */
-           $pos = DB_get_pos_by_hash($me);
-           if($pos == $startplayer)
-             DB_set_party_by_hash($me,"re");
+           $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)
+             {
+               if(DB_get_email_pref_by_hash($hash)!="emailaddict")
+                 {
+                   /* 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);
+                 }
+             }
            else
            else
-             DB_set_party_by_hash($me,"contra");
-           DB_set_hand_status_by_hash($me,'play');
-           break;
+             echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />\n";
+         }
+       else
+         {
+           /* set status of first player to be asked to poverty */
+           $who   = DB_get_sickness_by_gameid($gameid);
+           if($who > 6) $who= $who/10; /* in case we have dpoverty */
 
 
-         case "wedding":
-           /* set person with the wedding to re, do the rest during the game */
-           $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
-           if($usersick == "wedding")
-             DB_set_party_by_hash($me,"re");
+           $whoid = DB_get_userid('gameid-position',$gameid,$who);
+           if($whoid==$myid)
+             echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />\n";
            else
            else
-             DB_set_party_by_hash($me,"contra");
+             {
+               $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);
 
 
-           echo "Whoever will make the first trick will be on the re team. <br />\n";
-           echo " Ok, the game can start now, please finish <a href=\"$INDEX?action=game&me=$me\">the setup</a>.<br />";
-           DB_set_hand_status_by_hash($me,'play');
-           break;
+               if(DB_get_email_pref_by_hash($hash)!="emailaddict")
+                 {
+                   /* 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);
+                 }
+             }
+         }
+       echo "</div>\n";
+       break;
+      }
+  case 'poverty':
+    /* user only gets here in a poverty game, several things have to be handled here:
+     * A) ask, if user wants to take trump
+     *      yes-> take trump,
+     *            poverty: set re/contra
+     *            dpoverty: first time: set re, send email to second player
+     *                      second time: set contra
+     *            set status to play in case 0 trump
+     *      no -> set status to play,
+     *            ask next player or cancle the game if no more players
+     * B) user took trump and has too many cards (e.g. count(cards)>12 and re/contra set)
+     *         ask to give cards back, set status to play, once player has 12 cards
+     *
+     * it is easier to check B) first
+     */
 
 
-         case "normal":
-           $hand = DB_get_all_hand($me);
+    /* output pre game in case user reloads */
 
 
-           if(in_array('3',$hand)||in_array('4',$hand))
-             DB_set_party_by_hash($me,"re");
-           else
-             DB_set_party_by_hash($me,"contra");
-           DB_set_hand_status_by_hash($me,'play');
-           break;
-         case "poverty":
-         case "dpoverty":
-           /* check if poverty resolved (e.g. DB.Game who set to NULL)
-            *   yes? =>trump was taken, start game; break;
-            */
-           $who = DB_get_sickness_by_gameid($gameid);
-           if($who<0)
-             { /* trump has been taken */
-               DB_set_hand_status_by_hash($me,'play');
-               break;
-             };
 
 
-           if($who>9) /*= two people still have trump on the table*/
-             $add = 10;
-           else
-             $add = 1;
+    set_gametype($gametype); /* this sets the $CARDS variable */
+    $myparty = DB_get_party_by_hash($me);
 
 
-           /* check if we are being asked now
-            *    no? display wait message, e.g. player X is asked at the moment
-            */
-           $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
-           if(myisset("trump") && $_REQUEST["trump"]=="no" && ($who==$mypos || $who==$mypos*10))
+    /* the following is part B) of whats needs to be done)
+    /*    check if user wants to give cards back */
+    if(myisset("exchange"))
+      {
+       $exchange    = $_REQUEST['exchange'];
+       $partnerhash = DB_get_partner_hash_by_hash($me);
+       $partnerid   = DB_get_userid('hash',$partnerhash);
+       $partnerhand = DB_get_handid('gameid-userid',$gameid,$partnerid);
+
+       /* if exchange is set to a value>0, exchange that card back to the partner */
+       if($exchange >0)
+         {
+           $result = DB_query("UPDATE Hand_Card SET hand_id='$partnerhand'".
+                              " WHERE hand_id='$myhand' AND card_id=".DB_quote_smart($exchange));
+         };
+      }
+    /* update hand */
+    $mycards = DB_get_hand($me);
+    $mycards = mysort($mycards,$gametype);
+
+    /* check if user need to give more cards back */
+    if( ($myparty=='re' || $myparty=='contra') && count($mycards)>12)
+      {
+       echo "<div class=\"poverty\"> you need to get rid of a few cards</div>\n";
+
+       $type="exchange";
+       echo "<div class=\"mycards\">Your cards are: <br />\n";
+       foreach($mycards as $card)
+         display_link_card($card,$PREF["cardset"],$type);
+       echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select card to give back\" />\n";
+       echo "</div>\n";
+      }
+    else if( ($myparty=='re' || $myparty=='contra') && count($mycards)==12)
+      {
+       /* user is done, ready to play */
+       DB_set_hand_status_by_hash($me,'play');
+       /* TODO if resolved; email start player, set startplayer */
+      }
+
+    /* the following is part A) of what needs to be done */
+    if(!myisset("trump"))
+      {
+       if(!$myparty)
+         {
+           echo "<div class=\"poverty\">\n";
+           $userids = DB_get_all_userid_by_gameid($gameid);
+           foreach($userids as $user)
              {
              {
-               /* user doesn't want to take trump */
-               /* set next player who needs to be asked */
-               $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
-               $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+               $name      = DB_get_name('userid',$user);
+               $usersick  = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+               $userhash  = DB_get_hash_from_gameid_and_userid($gameid,$user);
+               $userparty = DB_get_party_by_hash($userhash);
 
 
-               if($firstsick=="poverty")
+               if($usersick=="poverty" && !$userparty)
                  {
                  {
-                   if($secondsick=="poverty")
-                     DB_set_sickness_by_gameid($gameid,$who+$add*3);
-                   else
-                     DB_set_sickness_by_gameid($gameid,$who+$add*2);
+                   $hash    = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                   $cards   = DB_get_hand($hash);
+                   /* count trump */
+                   $nrtrump = 0;
+                   foreach($cards as $card)
+                     if($card<27) $nrtrump++;
+                   echo "Player $name has $nrtrump trump. Do you want to take them?".
+                     "<a href=\"index.php?action=game&me=$me&amp;trump=$user\">yes</a> <br />\n";
                  }
                  }
-               else
-                 DB_set_sickness_by_gameid($gameid,$who+$add);
+             }
+           echo "<a href=\"index.php?action=game&me=$me&amp;trump=no\">No,way I take those trump...</a> <br />\n";
+           echo "</div><div>\n";
 
 
-               /* email next player */
-               $who = DB_get_sickness_by_gameid($gameid);
-               if($who>9) $who = $who/10;
+           echo "<div class=\"mycards\">Your cards are: <br />\n";
+           foreach($mycards as $card)
+             display_card($card,$PREF["cardset"]);
+           echo "</div></div>\n";
+         }
+       break;
+      }
+    else
+      {
+       $trump = $_REQUEST['trump'];
 
 
-               if($who<=4)
-                 {
-                   $To       = DB_get_email('position-gameid',$who,$gameid);
-                   $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
-                   $userid   = DB_get_userid('email',$To);
-                   DB_set_player_by_gameid($gameid,$userid);
+       if($trump=="no")
+         {
+           /* user doesn't want to take trump */
+           DB_set_hand_status_by_hash($me,'play');
 
 
-                   $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:".
-                     " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
-                   mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
-                 }
+           /* set next player who needs to be asked and email him*/
+           $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
+           $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
 
 
-               /* this user is done */
-               DB_set_hand_status_by_hash($me,'play');
-               break;
+           /* don't ask people who have poverty */
+           $next=1;
+           if($firstsick=="poverty")
+             {
+               if($secondsick=="poverty")
+                 $next=3;
+               else
+                 $next=2;
              }
              }
-           else if(myisset("trump") && !myisset("exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
+           if($gametype=="dpoverty")
              {
              {
-               /* user wants to take trump */
-               $trump = $_REQUEST["trump"];
-
-               /* get hand id for user $trump */
-               $userhand = DB_get_handid('gameid-userid',$gameid,$trump);
-               /* copy trump from player A to B */
-               $result = DB_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
-
-               /* add hidden button with trump in it to get to the next point */
-               echo "</div><div class=\"poverty\">\n";
-               echo "  <input type=\"hidden\" name=\"exchange\" value=\"-1\" />\n";
-               echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
-               echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select cards to give back\" />\n";
-               echo "</div><div>\n";
+               $next=999; /* need to cancel for sure, since both would need to take the trump */
              }
              }
-           else if(myisset("trump","exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10))
+
+           /* no more people to ask, need to cancel the game */
+           if($mypos+$next>4)
              {
              {
-               $trump    = $_REQUEST["trump"];
-               $exchange = $_REQUEST["exchange"];
-               $userhand = DB_get_handid('gameid-userid',$gameid,$trump);
+               $message = "Hello, \n\n".
+                 "Game ".DB_format_gameid($gameid)." has been canceled since nobody wanted to take the trump.\n";
 
 
-               /* if exchange is set to a value>0, exchange that card back to user $trump */
-               if($exchange >0)
+               $userids = DB_get_all_userid_by_gameid($gameid);
+               foreach($userids as $user)
                  {
                  {
-                   $result = DB_query("UPDATE Hand_Card SET hand_id='$userhand'".
-                                      " WHERE hand_id='$myhand' AND card_id='$exchange'" );
-                 };
+                   $To = DB_get_email('userid',$user);
+                   mymail($To,$EmailName."game ".DB_format_gameid($gameid)." canceled (poverty not resolved)",$message);
+                 }
 
 
-               /* if number of cards == 12, set status to play for both users */
-               $r = DB_query_array("SELECT COUNT(*) FROM Hand_Card  WHERE hand_id='$myhand'" );
-               if(!$r)
-                 {
-                   myerror("error in poverty");
-                   die();
-                 };
-               if($r[0]==12)
-                 {
-                   if($gametype=="poverty" || $who<9)
-                     {
-                       DB_set_sickness_by_gameid($gameid,-1); /* done with poverty */
-                     }
-                   else /* reduce poverty count by one, that is go to single digits $who */
-                     {
-                       $add = 1;
-                       $who = $who/10;
+               /* delete everything from the dB */
+               DB_cancel_game($me);
 
 
-                       /* whom to ask next */
-                       $firstsick  = DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
-                       $secondsick = DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+               echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid)." has been canceled.<br /><br /></p>";
+               output_footer();
+               DB_close();
+               exit();
+             }
+           else
+             {
+               /* email next player, set his status to poverty */
+               $To       = DB_get_email('position-gameid',$mypos+$next,$gameid);
+               $userhash = DB_get_hash_from_game_and_pos($gameid,$mypos+$next);
+               $userid   = DB_get_userid('email',$To);
 
 
-                       if($firstsick!="poverty")
-                         DB_set_sickness_by_gameid($gameid,$who+$add);
-                       else
-                         {
-                           if($secondsick!="poverty")
-                             DB_set_sickness_by_gameid($gameid,$who+$add*2);
-                           else
-                             DB_set_sickness_by_gameid($gameid,$who+$add*3);
-                         };
-
-                       /* email next player */
-                       $who = DB_get_sickness_by_gameid($gameid);
-                       if($who<=4)
-                         {
-                           $To       = DB_get_email('position-gameid',$who,$gameid);
-                           $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
-                           $userid   = DB_get_userid('email',$To);
-                           DB_set_player_by_gameid($gameid,$userid);
-
-                           $message = "Someone has poverty, it's your turn to decide, ".
-                             "if you want to take the trump. Please visit:".
-                             " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
-                           mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
-                         }
-                     }
+               DB_set_player_by_gameid($gameid,$userid);
+               DB_set_hand_status_by_hash($userhash,'poverty');
 
 
-                   /* this user is done */
-                   DB_set_hand_status_by_hash($me,'play');
-                   /* and so is his partner */
-                   $hash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
-                   DB_set_hand_status_by_hash($hash,'play');
+               $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:".
+                 " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
+               mymail($To,$EmailName." poverty (game ".DB_format_gameid($gameid).")",$message);
+             }
+         }
+       else
+         {
+           /* player wants to take trump, change cards */
 
 
-                   /* set party to re, unless we had dpoverty, in that case check if we need to set re/contra*/
-                   $re_set = 0;
-                   foreach($userids as $user)
-                     {
-                       $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                       $party    = DB_get_party_by_hash($userhash);
-                       if($party=="re")
-                         $re_set = 1;
-                     }
-                   if($re_set)
-                     {
-                       DB_set_party_by_hash($me,"contra");
-                       DB_set_party_by_hash($hash,"contra");
-                     }
-                   else
-                     {
-                       foreach($userids as $user)
-                         {
-                           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                           if($userhash==$hash||$userhash==$me)
-                             DB_set_party_by_hash($userhash,"re");
-                           else
-                             DB_set_party_by_hash($userhash,"contra");
-                         }
-                     }
+           /* user wants to take trump */
+           $trump = $_REQUEST["trump"];
+           $userhand = DB_get_handid('gameid-userid',$gameid,$trump);
+           $userhash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
 
 
+           /* copy trump from player A to B */
+           $result = DB_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
 
 
-                   break;
-                 }
-               else
-                 {
-                   /* else show all trump, have lowest card pre-selected, have hidden setting for */
-                   echo "</div><div class=\"poverty\"> you need to get rid of a few cards</div>\n";
-
-                   set_gametype($gametype); /* this sets the $CARDS variable */
-                   $mycards = DB_get_hand($me);
-                   $mycards = mysort($mycards,$gametype);
-
-                   $type="exchange";
-                   echo "<div class=\"mycards\">Your cards are: <br />\n";
-                   foreach($mycards as $card)
-                     display_link_card($card,$PREF["cardset"],$type);
-                   echo "  <input type=\"hidden\" name=\"trump\" value=\"".$trump."\" />\n";
-                   echo "  <input type=\"submit\" class=\"submitbutton\" value=\"select one card to give back\" />\n";
-                   echo "</div><div>\n";
-                 }
-             }
-           else if($who == $mypos || $who == $mypos*10)
+           $mycards = DB_get_hand($me);
+
+           /* set re/contra */
+           if($gametype=='poverty')
              {
              {
-               echo "</div><div class=\"poverty\">\n";
+               $userids = DB_get_all_userid_by_gameid($gameid);
                foreach($userids as $user)
                  {
                foreach($userids as $user)
                  {
-                   $name     = DB_get_name('userid',$user);
-                   $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
-
-                   if($usersick=="poverty")
+                   $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                   if($hash==$userhash||$hash==$me)
+                     DB_set_party_by_hash($hash,"re");
+                   else
+                     DB_set_party_by_hash($hash,"contra");
+                 }
+               /* check if we are done, if so, send everyone into the 'play' phase */
+               if(count($mycards)==12)
+                 {
+                   foreach($userids as $user)
                      {
                      {
-                       $hash    = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                       $cards   = DB_get_hand($hash);
-                       $nrtrump = count_trump($cards);
-                       /* count trump */
-                       if($nrtrump<4)
-                         echo "Player $name has $nrtrump trump. Do you want to take them?".
-                           "<a href=\"index.php?action=game&me=$me&amp;trump=$user\">yes</a> <br />\n";
+                       $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                       DB_set_hand_status_by_hash($hash,'play');
                      }
                  }
                      }
                  }
-               echo "<a href=\"index.php?action=game&me=$me&amp;trump=no\">No,way I take those trump...</a> <br />\n";
-               echo "</div><div>\n";
-
-               echo "Your cards are: <br />\n";
-               $mycards = DB_get_hand($me);
-               sort($mycards);
-               echo "<p class=\"mycards\">Your cards are: <br />\n";
-               foreach($mycards as $card)
-                 display_card($card,$PREF["cardset"]);
-               echo "</p>\n";
              }
              }
-           else
+           else /*dpoverty*/
              {
              {
-               $mysick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
-               if($mysick=="poverty")
-                 echo "The others are asked if they want to take your trump, you have to wait (you'll get an email).";
+               /* has the re party already been set?*/
+               $re_set=0;
+               $userids = DB_get_all_userid_by_gameid($gameid);
+               foreach($userids as $user)
+                 {
+                   $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                   $party = DB_get_party_by_hash($hash);
+                   if($party=='re')
+                     $re_set=1;
+                 }
+               if($re_set)
+                 {
+                   DB_set_party_by_hash($me,'contra');
+                   DB_set_party_by_hash($userhash,'contra');
+                 }
                else
                else
-                 echo "it's not your turn yet to decide if you want to take the trump or not.";
-             }
-         };
-       /* check if no one wanted to take trump, in that case the gamesickness would be set to 5 or 50 */
-       $who = DB_get_sickness_by_gameid($gameid);
-       if($who==5 || $who==50)
-         {
-           $message = "Hello, \n\n".
-             "Game ".DB_format_gameid($gameid)." has been canceled since nobody wanted to take the trump.\n";
+                 {
+                   DB_set_party_by_hash($me,'re');
+                   DB_set_party_by_hash($userhash,'re');
 
 
-           $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 (poverty not resolved)",$message);
-             }
+                   /* send out email to second non-poverty player */
+                   $firstsick  = (string) DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
+                   $secondsick = (string) DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
 
 
-           /* delete everything from the dB */
-           DB_cancel_game($me);
+                   $next=1;
+                   if($firstsick=="poverty")
+                     if($secondsick=="poverty")
+                       $next=3;
+                     else
+                       $next=2;
 
 
-           echo "<p style=\"background-color:red\";>Game ".DB_format_gameid($gameid)." has been canceled.<br /><br /></p>";
-           output_footer();
-           DB_close();
-           exit();
+                   if($mypos+$next>4)
+                     echo "<div class=\"message\">Error in poverty, please contact the Admin</div>\n";
+
+                   $To       = DB_get_email('position-gameid',$mypos+$next,$gameid);
+                   $userhash = DB_get_hash_from_game_and_pos($gameid,$mypos+$next);
+                   $userid   = DB_get_userid('email',$To);
+
+                   DB_set_player_by_gameid($gameid,$userid);
+                   DB_set_hand_status_by_hash($userhash,'poverty');
+
+                   $message = "Two people have poverty, it's your turn to decide, if you want to take the trump. Please visit:".
+                     " ".$HOST.$INDEX."?action=game&me=".$userhash."\n\n" ;
+                   mymail($To,$EmailName." double poverty (game ".DB_format_gameid($gameid).")",$message);
+
+
+                 }
+             }
+           echo "<div class=\"message\"> Please, <a href=\"$INDEX?action=game&me=$me\">continue</a> here.</div>\n";
          }
          }
+      }
+    echo "</div>";
+    break;
+
+  case 'play':
+  case 'gameover':
+    /* both entries here,  so that the tricks are visible for both.
+     * in case of 'play' there is a break later that skips the last part
+     */
 
 
-       /* check if all players are ready to play */
+    /* 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
+     */
+    $gamestatus = DB_get_game_status_by_gameid($gameid);
+    if($gamestatus == 'pre')
+      {
        $ok = 1;
        $ok = 1;
+       $userids = DB_get_all_userid_by_gameid($gameid);
        foreach($userids as $user)
        foreach($userids as $user)
-         if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
-           {
-             $ok = 0;
-             DB_set_player_by_gameid($gameid,$user);
-           }
-
+         {
+           $userstatus = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
+           if($userstatus !='play' && $userstatus!='gameover')
+             {
+               $ok = 0;
+               DB_set_player_by_gameid($gameid,$user);
+             }
+         }
        if($ok)
          {
            /* only set this after all poverty, etc. are handled*/
        if($ok)
          {
            /* only set this after all poverty, etc. are handled*/
@@ -812,20 +924,8 @@ switch($mystatus)
                  "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);
              }
                  "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);
              }
-           else
-             echo " Please, <a href=\"$INDEX?action=game&me=$me\">start</a> the game.<br />";
          }
          }
-       else
-         echo "\n <br />";
       }
       }
-    echo "</div>\n";
-    break;
-  case 'play':
-  case 'gameover':
-    /* both entries here,  so that the tricks are visible for both.
-     * in case of 'play' there is a break later that skips the last part
-     */
-
     /* figure out what kind of game we are playing,
      * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"],
      * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"]
     /* figure out what kind of game we are playing,
      * set the global variables $CARDS["trump"],$CARDS["diamonds"],$CARDS["hearts"],
      * $CARDS["clubs"],$CARDS["spades"],$CARDS["foxes"]
@@ -837,14 +937,17 @@ switch($mystatus)
     if($gametype=="solo")
       {
        $gametype = DB_get_solo_by_gameid($gameid);
     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";
 
     set_gametype($gametype); /* this sets the $CARDS variable */
 
       }
     else
       $gametype = "normal";
 
     set_gametype($gametype); /* this sets the $CARDS variable */
 
-    /* get some infos about the game */
+    /* get some infos about the game, need to reset this, since it might have changed */
     $gamestatus = DB_get_game_status_by_gameid($gameid);
 
     /* has the game started? No, then just wait here...*/
     $gamestatus = DB_get_game_status_by_gameid($gameid);
 
     /* has the game started? No, then just wait here...*/
@@ -852,6 +955,15 @@ switch($mystatus)
       {
        echo "<p class=\"message\"> You finished the setup, but not everyone else finished it... ".
          "You need to wait for the others. Just wait for an email. </p>";
       {
        echo "<p class=\"message\"> You finished the setup, but not everyone else finished it... ".
          "You need to wait for the others. Just wait for an email. </p>";
+
+       $mycards = DB_get_hand($me);
+       $mycards = mysort($mycards,$gametype);
+
+       echo "<div class=\"mycards\">Your cards are: <br />\n";
+       foreach($mycards as $card)
+         display_card($card,$PREF["cardset"]);
+       echo "</div>\n";
+
        break; /* not sure this works... the idea is that you can
                * only  play a card after everyone is ready to play */
       }
        break; /* not sure this works... the idea is that you can
                * only  play a card after everyone is ready to play */
       }
@@ -860,7 +972,7 @@ switch($mystatus)
     $r = DB_query_array("SELECT mod_date from Game WHERE id='$gameid' " );
     $gameend = time() - strtotime($r[0]);
 
     $r = DB_query_array("SELECT mod_date from Game WHERE id='$gameid' " );
     $gameend = time() - strtotime($r[0]);
 
-    /* handel comments in case player didn't play a card, allow comments a week after the end of the game */
+    /* handle comments in case player didn't play a card, allow comments a week after the end of the game */
     if( (!myisset("card") && $mystatus=='play') || ($mystatus=='gameover' && ($gameend < 60*60*24*7)) )
       if(myisset("comment"))
        {
     if( (!myisset("card") && $mystatus=='play') || ($mystatus=='gameover' && ($gameend < 60*60*24*7)) )
       if(myisset("comment"))
        {
@@ -912,7 +1024,7 @@ switch($mystatus)
 
     /* output vorbehalte */
     $mygametype =  DB_get_gametype_by_gameid($gameid);
 
     /* 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";
       {
        echo "  <li onclick=\"hl('0');\" class=\"current\"><a href=\"#\">Pre</a>\n".
          "    <div class=\"trick\" id=\"trick0\">\n";
@@ -944,8 +1056,11 @@ switch($mystatus)
        $user    = $r[6];
 
        /* check if first schweinchen has been played */
        $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);
 
        /* save card to be able to find the winner of the trick later */
        $play[$seq] = array("card"=>$r[0],"pos"=>$pos);
@@ -1016,6 +1131,7 @@ switch($mystatus)
       {
        $card   = $_REQUEST["card"];
        $handid = DB_get_handid('hash',$me);
       {
        $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*/
 
        /* 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*/
@@ -1052,20 +1168,23 @@ switch($mystatus)
 
            $playid = DB_play_card($trickid,$handcardid,$sequence);
 
 
            $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)
                if ($debug)
-                 echo "schweinchen = ".$GAME["schweinchen"]." ---<br />";
+                 echo "schweinchen = ".$GAME["schweinchen-who"]." ---<br />";
              }
 
            /* if sequence == 4 check who one in case of wedding */
              }
 
            /* if sequence == 4 check who one in case of wedding */
@@ -1118,7 +1237,7 @@ switch($mystatus)
                if(DB_get_gametype_by_gameid($gameid)=="solo")
                  {
                    $solo = DB_get_solo_by_gameid($gameid);
                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
                      $ok = 1; /* for trump solos and silent solos, foxes are ok */
                  }
                else
@@ -1206,6 +1325,8 @@ switch($mystatus)
                $comment = $_REQUEST["comment"];
                if($comment != "")
                  DB_insert_comment($comment,$playid,$myid);
                $comment = $_REQUEST["comment"];
                if($comment != "")
                  DB_insert_comment($comment,$playid,$myid);
+               if($commentSchweinchen)
+                 $comment = $commentSchweinchen . $comment;
              };
 
            /* check for note */
              };
 
            /* check for note */
@@ -1606,7 +1727,10 @@ switch($mystatus)
 
          foreach($mycards as $card)
            {
 
          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"]);
                display_card($card,$PREF["cardset"]);
              else
                display_link_card($card,$PREF["cardset"]);
@@ -1759,8 +1883,15 @@ switch($mystatus)
            $type  = DB_get_gametype_by_gameid($gameid);
 
            if($type=="solo")
            $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);
          }
       }
              output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
          }
       }