+
+/*
+ * config
+ */
+
+$base = "http://doko.nubati.net/";
+$host = $base."index.php";
+$wiki = "http://wiki.nubati.net/index.php?title=EmailDoko";
+$debug = 0;
+
+$last=-2;
+
+/*
+ * end config
+ */
+
+echo "</div>\n";
+
+/* end header */
+
+/* helper function */
+function mymail($To,$Subject,$message)
+{
+ global $debug;
+
+ if($debug)
+ {
+ $message = str_replace("\n","<br />",$message);
+ echo "<br />To: $To<br />Subject: $Subject <br />$message<br />\n";
+ }
+ else
+ mail($To,$Subject,$message);
+ return;
+}
+
+function is_trump($c) { return (($c<27) ? 1:0);}
+function is_club($c) { return (in_array($c,array('27','28','29','30','31','32','33','34')));}
+function is_spade($c) { return (in_array($c,array('35','36','37','38','39','40','41','42')));}
+function is_heart($c) { return (in_array($c,array('43','44','45','46','47','48')));}
+
+function compare_cards($a,$b)
+{
+ /* if a is higher than b return 1, else 0, a being the card first played */
+
+ /* first map all cards to the odd number */
+ if( $a/2 - (int)($a/2) != 0.5)
+ $a--;
+ if( $b/2 - (int)($b/2) != 0.5)
+ $b--;
+
+ if(is_trump($a) && $a<=$b)
+ return 1;
+ else if(is_trump($a) && $a>$b)
+ return 0;
+ else
+ { /*$a is not a trump */
+ if(is_trump($b))
+ return 0;
+ else
+ {
+ /* both clubs? */
+ if( is_club($a) && is_club($b))
+ if($a<=$b)
+ return 1;
+ else
+ return 0;
+ /* both spade? */
+ if( is_spade($a) && is_spade($b))
+ if($a<=$b)
+ return 1;
+ else
+ return 0;
+ /* both heart? */
+ if( is_heart($a) && is_heart($b))
+ if($a<=$b)
+ return 1;
+ else
+ return 0;
+ return 1;
+ }
+ }
+
+}
+
+function get_winner($p)
+{
+ /* get all 4 cards played in a trick */
+ $c1 = $p[0];
+ $c2 = $p[1];
+ $c3 = $p[2];
+ $c4 = $p[3];
+
+ /* find out who won */
+ if( compare_cards($c1,$c2) && compare_cards($c1,$c3) && compare_cards($c1,$c4) )
+ return 0;
+ if( compare_cards($c2,$c3) && compare_cards($c2,$c4) )
+ return 1;
+ if( compare_cards($c3,$c4) )
+ return 2;
+ return 3;
+}
+
+function parse_status()
+{
+ global $game,$history,$player,$hash,$lines;
+
+ $game["init"] = 0;
+ $game["solo-who"] = -1;
+ $game["solo-what"] = "todo";
+ $game["wedding"] = -1;
+ $game["poverty"] = "";
+ $game["nines"] = -1;
+ $game["startplayer"] = 0;
+
+ for($i=0;$i<4;$i++)
+ {
+ $tmp = explode( ":",$lines[$i]);
+ $hash[$i] = $tmp[0];
+ $player[$tmp[0]]["number"] = $i;
+ $player[$tmp[0]]["hash"] = $tmp[0];
+ $player[$tmp[0]]["name"] = $tmp[1];
+ $player[$tmp[0]]["email"] = $tmp[2];
+ $player[$tmp[0]]["option"] = $tmp[3];
+ $player[$tmp[0]]["points"] = $tmp[4];
+ $player[$tmp[0]]["cards"] = $tmp[5];
+ if(ereg("s",$tmp[3])) $game["init"]++; /* how many players are ready? */
+ if(ereg("P",$tmp[3])) $game["poverty"].= $i; /* players with poverty, could be two, so use a string */
+ if(ereg("N",$tmp[3])) $game["nines"] = $i; /* the player with too many nines, only one possible */
+ if(ereg("W",$tmp[3])) $game["wedding"] = $i; /* the player with the wedding, also only one possible */
+ if(ereg("([OSQJCAH])",$tmp[3],$match) && ($game["solo-who"]<0) )
+ {
+ $game["solo-who"] = $i;
+ $game["startplayer"] = $i;
+ switch($match[1])
+ {
+ case "O":
+ $game["solo-what"] = "No Trump";
+ case "S":
+ $game["solo-what"] = "Trump";
+ case "Q":
+ $game["solo-what"] = "Queen";
+ case "J":
+ $game["solo-what"] = "Jack";
+ case "C":
+ $game["solo-what"] = "Club";
+ case "A":
+ $game["solo-what"] = "Spade";
+ case "H":
+ $game["solo-what"] = "Heart";
+ }
+ }
+
+ }
+ /* save the game history */
+ for($i=4;$i<sizeof($lines);$i++)
+ if(!ereg("^[[:space:]]*$",trim($lines[$i])))
+ $history[] = $lines[$i];
+
+ if(sizeof($history)==0 || (sizeof($history)==1 && strlen($history[0])==3 ))
+ $history[0] = $game["startplayer"].":";
+
+ return;
+}
+
+function count_nines($cards)
+{
+ $card = explode(";",$cards);
+ $nines = 0;
+
+ foreach($card as $c)
+ {
+ if($c == "25" || $c == "26") $nines++;
+ else if($c == "33" || $c == "34") $nines++;
+ else if($c == "41" || $c == "42") $nines++;
+ else if($c == "47" || $c == "48") $nines++;
+ }
+
+ return $nines;
+}
+
+function check_wedding($cards)
+{
+ $card = explode(";",$cards);
+
+ if( in_array("3",$card) && in_array("2",$card) )
+ return 1;
+
+ return 0;
+}
+
+function count_trump($cards)
+{
+ $card = explode(";",$cards);
+ $trump = 0;
+
+ /* count each trump */
+ foreach($card as $c)
+ if( (int)($c) <27)
+ $trump++;
+
+ /* subtract foxes */
+ if( in_array("19",$card))
+ $trump--;
+ if( in_array("20",$card) )
+ $trump--;
+ /* add one, in case the player has both foxes (schweinchen) */
+ if( in_array("19",$card) && in_array("20",$card) )
+ $trump++;
+
+ return $trump;
+}
+
+function card_to_name($card)
+{
+ switch($card)
+ {
+ case 1:
+ case 2:
+ return "ten of hearts";
+ case 3:
+ case 4:
+ return "queen of clubs";
+ case 5:
+ case 6:
+ return "queen of spades";
+ case 7:
+ case 8:
+ return "queen of hearts";
+ case 9:
+ case 10:
+ return "queen of diamonds";
+ case 11:
+ case 12:
+ return "jack of clubs";
+ case 13:
+ case 14:
+ return "jack of spades";
+ case 15:
+ case 16:
+ return "jack of hearts";
+ case 17:
+ case 18:
+ return "jack of diamonds";
+ case 19:
+ case 20:
+ return "ace of diamonds";
+ case 21:
+ case 22:
+ return "ten of diamonds";
+ case 23:
+ case 24:
+ return "king of diamonds";
+ case 25:
+ case 26:
+ return "nine of diamonds";;
+ case 27:
+ case 28:
+ return "ace of clubs";
+ case 29:
+ case 30:
+ return "ten of clubs";
+ case 31:
+ case 32:
+ return "king of clubs";
+ case 33:
+ case 34:
+ return "nine of clubs";
+ case 35:
+ case 36:
+ return "ace of spades";
+ case 37:
+ case 38:
+ return "ten of spades";
+ case 39:
+ case 40:
+ return "king of spades";
+ case 41:
+ case 42:
+ return "nine of spades";
+ case 43:
+ case 44:
+ return "ace of hearts";
+ case 45:
+ case 46:
+ return "king of hearts";
+ case 47:
+ case 48:
+ return "nine of hearts";
+ default:
+ return "something went wrong, please contact the admin. Error: code1.";
+ }
+}
+
+function card_value($card)
+{
+ switch($card)
+ {
+ case 1: /* heart */
+ case 2:
+ return 10;
+ case 3: /* clubes */
+ case 4:
+ case 5: /* spades */
+ case 6:
+ case 7: /* hearts */
+ case 8:
+ case 9: /* diamonds */
+ case 10:
+ return 3;
+ case 11: /* clubes */
+ case 12:
+ case 13: /* spades */
+ case 14:
+ case 15: /* hearts */
+ case 16:
+ case 17: /* diamonds */
+ case 18:
+ return 2;
+ case 19: /* diamonds */
+ case 20:
+ case 27: /* clubs */
+ case 28:
+ case 35: /* spades */
+ case 36:
+ case 43: /* hearts */
+ case 44:
+ return 11;
+ case 21: /* diamonds */
+ case 22:
+ case 29: /* clubs */
+ case 30:
+ case 37: /* spades */
+ case 38:
+ return 10;
+ case 23: /* diamonds */
+ case 24:
+ case 31: /* clubs */
+ case 32:
+ case 39: /* spades */
+ case 40:
+ case 45: /* hearts */
+ case 46:
+ return 4;
+ case 25: /* diamonds */
+ case 26:
+ case 33: /* clubs */
+ case 34:
+ case 41: /* spades */
+ case 42:
+ case 47: /* hearts */
+ case 48:
+ return 0;
+ default:
+ echo "something went wrong, please contact the admin. ErrorCode: 2<br>";
+ return 0;
+ }
+}
+
+function display_card($card)
+{
+ /* cards are only availabl for the odd values, e.g. 1.png, 3.png, ...
+ * convert even cards to the matching odd value */
+
+ if( $card/2 - (int)($card/2) == 0.5)
+ echo "<img src=\"".$base."cards/".$card.".png\" alt=\"".card_to_name($card)."\" />\n";
+ else
+ echo "<img src=\"".$base."cards/".($card-1).".png\" alt=\"".card_to_name($card-1)."\" />\n";
+
+ return;
+}
+
+function display_link_card($card,$me)
+{
+ if( $card/2 - (int)($card/2) == 0.5)
+ echo "<input type=\"radio\" name=\"card\" value=\"".$card."\" /><img src=\"".$base."cards/".$card.".png\" alt=\"\" />\n";
+ else
+ echo "<input type=\"radio\" name=\"card\" value=\"".$card."\" /><img src=\"".$base."cards/".($card-1).".png\" alt=\"\" />\n";
+ return;
+}
+
+function save_status()
+{
+ global $player,$game,$hash,$history;
+
+ $output = fopen("status.txt","w");
+ if ($output)
+ {
+ foreach($hash as $key)
+ {
+ /* sorting the options, not sure why I do that actually */
+ $tmp="";
+ if( ereg("i",$player[$key]["option"]) )
+ $tmp.="i";
+ if( ereg("s",$player[$key]["option"]) )
+ $tmp.="s";
+ if( ereg("t",$player[$key]["option"]) )
+ $tmp.="t";
+ if( ereg("c",$player[$key]["option"]) )
+ $tmp.="c";
+ if( ereg("N",$player[$key]["option"]) )
+ $tmp.="N";
+ if( ereg("W",$player[$key]["option"]) )
+ $tmp.="W";
+ if( ereg("P",$player[$key]["option"]) )
+ $tmp.="P";
+ if( ereg("O",$player[$key]["option"]) )
+ $tmp.="O";
+ if( ereg("S",$player[$key]["option"]) )
+ $tmp.="S";
+ if( ereg("Q",$player[$key]["option"]) )
+ $tmp.="Q";
+ if( ereg("J",$player[$key]["option"]) )
+ $tmp.="J";
+ if( ereg("C",$player[$key]["option"]) )
+ $tmp.="C";
+ if( ereg("A",$player[$key]["option"]) )
+ $tmp.="A";
+ if( ereg("H",$player[$key]["option"]) )
+ $tmp.="H";
+ $player[$key]["option"]=$tmp;
+
+ /* saving the player stats */
+ fwrite($output,"".$player[$key]["hash"].":" );
+ fwrite($output,"".$player[$key]["name"].":" );
+ fwrite($output,"".$player[$key]["email"].":" );
+ fwrite($output,"".$player[$key]["option"].":" );
+ fwrite($output,"".$player[$key]["points"].":" );
+ fwrite($output,"".$player[$key]["cards"] .":");
+ fwrite($output,"\n");
+ }
+ fwrite($output,"\n");
+ foreach($history as $line)
+ fwrite($output,$line);
+
+ fwrite($output,"\n");
+ fclose($output);
+ }
+ else
+ echo "can't open file for writing, please inform the admin.errorcode3";
+
+ return;
+}
+
+/***************** M A I N **************************/
+
+$history=array();
+