X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=index.php;h=f5c3d3da4e66b491cd3b79c6ba03f045522a3150;hp=eded836ac1c86f532853864c5cecc121c2269720;hb=bcf82bbe699d28a45c44c9c18d96466713e81bef;hpb=0dd96314cb0fc3d40502d87f354c6fd61f35a3cd diff --git a/index.php b/index.php index eded836..f5c3d3d 100644 --- a/index.php +++ b/index.php @@ -13,15 +13,27 @@ include_once("functions.php"); /* the rest */ if(!isset($EmailName)) $EmailName="[DoKo] "; -if(0) -{ - output_header(); - echo "Working on the database...please check back in a few mintues"; - output_footer(); - exit(); -} - -DB_open(); + +/* in case work has to be done on the database or other section we can + * shut down the server and tell people to come back later + */ +if(0) + { + output_header(); + echo "Working on the database...please check back in a few mintues"; + output_footer(); + exit(); + } + +if(DB_open()<0) + { + output_header(); + echo "Database error, can't connect..."; + output_footer(); + exit(); + } + +/* done major error checking, output header of HTML page */ output_header(); /* check if we want to start a new game */ @@ -49,6 +61,8 @@ if(myisset("new")) if($EmailA=="" || $EmailB=="" || $EmailC=="" || $EmailD=="") { echo "couldn't find one of the names, please start a new game"; + output_footer(); + DB_close(); exit(); } @@ -58,7 +72,7 @@ if(myisset("new")) $useridD = DB_get_userid_by_name($PlayerD); /* create random numbers */ - $randomNR = create_array_of_random_numbers(); + $randomNR = create_array_of_random_numbers($useridA,$useridB,$useridC,$useridD); $randomNRstring = join(":",$randomNR); /* get ruleset information or create new one */ @@ -66,6 +80,8 @@ if(myisset("new")) if($ruleset <0) { echo "Error defining ruleset: $ruleset"; + output_footer(); + DB_close(); exit(); }; @@ -78,41 +94,42 @@ if(myisset("new")) $ruleset = DB_get_ruleset_by_gameid($followup); /* just copy ruleset from old game, this way no manipulation is possible */ if($session) - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre',". + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','1','pre',". "'$ruleset','$session' ,NULL)"); else { /* get max session */ $max = DB_get_max_session(); $max++; - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre',". - "'$ruleset','$max' ,NULL)"); mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup)); + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','1','pre',". + "'$ruleset','$max' ,NULL)"); } } else - mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,'1','pre', ". + mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','1','pre', ". "'$ruleset',NULL ,NULL)"); $game_id = mysql_insert_id(); /* create hash */ - $hashA = md5("AGameOfDoko".$game_id.$PlayerA.$EmailA); - $hashB = md5("AGameOfDoko".$game_id.$PlayerB.$EmailB); - $hashC = md5("AGameOfDoko".$game_id.$PlayerC.$EmailC); - $hashD = md5("AGameOfDoko".$game_id.$PlayerD.$EmailD); + $TIME = (string) time(); /* to avoid collisions */ + $hashA = md5("AGameOfDoko".$game_id.$PlayerA.$EmailA.$TIME); + $hashB = md5("AGameOfDoko".$game_id.$PlayerB.$EmailB.$TIME); + $hashC = md5("AGameOfDoko".$game_id.$PlayerC.$EmailC.$TIME); + $hashD = md5("AGameOfDoko".$game_id.$PlayerD.$EmailD.$TIME); /* create hands */ mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridA). - ", ".DB_quote_smart($hashA).", 'start','1',NULL,NULL,NULL,'false','false',NULL)"); + ", ".DB_quote_smart($hashA).", 'start','1',NULL,NULL,NULL,NULL)"); $hand_idA = mysql_insert_id(); mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridB). - ", ".DB_quote_smart($hashB).", 'start','2',NULL,NULL,NULL,'false','false',NULL)"); + ", ".DB_quote_smart($hashB).", 'start','2',NULL,NULL,NULL,NULL)"); $hand_idB = mysql_insert_id(); mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridC). - ", ".DB_quote_smart($hashC).", 'start','3',NULL,NULL,NULL,'false','false',NULL)"); + ", ".DB_quote_smart($hashC).", 'start','3',NULL,NULL,NULL,NULL)"); $hand_idC = mysql_insert_id(); mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridD). - ", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,'false','false',NULL)"); + ", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,NULL)"); $hand_idD = mysql_insert_id(); /* save cards */ @@ -136,7 +153,7 @@ if(myisset("new")) "$PlayerC\n". "$PlayerD\n\n". "If you want to join this game, please follow this link:\n\n". - " ".$host."?me="; + "".$host."?me="; mymail($EmailA,"You are invited to a game of DoKo","Hello $PlayerA,\n".$message.$hashA); mymail($EmailB,"You are invited to a game of DoKo","Hello $PlayerB,\n".$message.$hashB); @@ -145,10 +162,9 @@ if(myisset("new")) echo "You started a new game. The emails have been sent out!"; } /* end set up a new game */ +/* cancle a game, if nothing has happend in the last N minutes */ else if(myisset("cancle","me")) { - /* cancle a game, if it is older than N minutes */ - $me = $_REQUEST["me"]; /* test for valid ID */ @@ -157,6 +173,8 @@ else if(myisset("cancle","me")) { echo "Can't find you in the database, please check the url.
\n"; echo "perhaps the game has been cancled, check by login in here."; + output_footer(); + DB_close(); exit(); } @@ -169,7 +187,7 @@ else if(myisset("cancle","me")) /* check if game really is old enough */ $result = mysql_query("SELECT mod_date from Game WHERE id='$gameid' " ); $r = mysql_fetch_array($result,MYSQL_NUM); - if(time()-strtotime($r[0]) > 60*60*24*30) + if(time()-strtotime($r[0]) > 60*60*24*30) /* = 1 month */ { $message = "Hello, \n\n". "Game $gameid has been cancled since nothing happend for a while and $myname requested it.\n"; @@ -178,7 +196,7 @@ else if(myisset("cancle","me")) foreach($userids as $user) { $To = DB_get_email_by_userid($user); - mymail($To,$EmailName."game cancled (timed out)",$message); + mymail($To,$EmailName."game $gameid cancled (timed out)",$message); } /* delete everything from the dB */ @@ -189,12 +207,10 @@ else if(myisset("cancle","me")) else echo "

You need to wait longer before you can cancle a game...

\n"; } +/* handle request from one specific player for one game, + * (the hash is set on a per game base) */ else if(myisset("me")) { - /* handle request from one specific player, - * the hash is set on a per game base - */ - $me = $_REQUEST["me"]; /* test for valid ID */ @@ -203,9 +219,12 @@ else if(myisset("me")) { echo "Can't find you in the database, please check the url.
\n"; echo "perhaps the game has been cancled, check by login in here."; + output_footer(); + DB_close(); exit(); } - + + /* the user had done something, update the timestamp */ DB_update_user_timestamp($myid); /* get some information from the DB */ @@ -213,22 +232,78 @@ else if(myisset("me")) $myname = DB_get_name_by_hash($me); $mystatus = DB_get_status_by_hash($me); $mypos = DB_get_pos_by_hash($me); - - /* display the game number */ - echo "

Game $gameid

\n"; + $myhand = DB_get_handid_by_hash($me); + $session = DB_get_session_by_gameid($gameid); - /* display rule set */ - echo "
\n Rules:
"; - $result = mysql_query("SELECT * FROM Rulesets LEFT JOIN Game ON Game.ruleset=Rulesets.id WHERE Game.id='$gameid'" ); + /* get prefs and save them */ + DB_get_PREF($myid); + /* end set pref */ + + + /* get rule set for this game */ + $result = mysql_query("SELECT * FROM Rulesets". + " LEFT JOIN Game ON Game.ruleset=Rulesets.id ". + " WHERE Game.id='$gameid'" ); $r = mysql_fetch_array($result,MYSQL_NUM); - $RULES["dullen"]=$r[2]; - $RULES["schweinchen"]=$r[3]; + $RULES["dullen"] = $r[2]; + $RULES["schweinchen"] = $r[3]; + $RULES["call"] = $r[4]; + - echo "10ofhearts : ".$r[2]."
"; - echo "schweinchen: ".$r[3]."
"; + /* get some infos about the game */ + $gametype = DB_get_gametype_by_gameid($gameid); + $gamestatus = DB_get_game_status_by_gameid($gameid); + $GT = $gametype; + if($gametype=="solo") + { + $gametype = DB_get_solo_by_gameid($gameid); + $GT = $gametype." ".$GT; + } + + /* display rule set for this game */ + echo "
\n"; + + if($gamestatus != 'pre') + echo " Gametype: $GT
\n"; + + echo "Rules:
\n"; + echo "10ofhearts : ".$r[2]."
\n"; + echo "schweinchen: ".$r[3]."
\n"; + echo "call: ".$r[4]."
\n"; echo "
\n"; + + /* output extra division in case this game is part of a session */ + if($session) + { + echo "
\n". + "This game is part of session $session: \n"; + $hashes = DB_get_hashes_by_session($session,$myid); + $i = 1; + foreach($hashes as $hash) + { + if($hash == $me) + echo "$i "; + else + echo "$i "; + $i++; + } + echo "
\n"; + } + + /* does anyone have both foxes */ + $GAME["schweinchen"]=0; + 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"]=1; + $GAME["schweinchen-who"]=$hash; + } + }; /* mystatus gets the player through the different stages of a game. * start: yes/no @@ -248,9 +323,12 @@ else if(myisset("me")) DB_set_hand_status_by_hash($me,'init'); break; case 'init': + /* first check if everything went ok in the last step + * if not, send user back, if yes, check what he did + */ if( !myisset("in") ) { - echo "you need to answer the question"; + echo "

you need to answer the question.

"; DB_set_hand_status_by_hash($me,'start'); } else @@ -265,7 +343,7 @@ else if(myisset("me")) foreach($userids as $user) { $To = DB_get_email_by_userid($user); - mymail($To,$EmailName."game canceled",$message); + mymail($To,$EmailName."game $gameid canceled",$message); } /* delete everything from the dB */ @@ -279,20 +357,23 @@ else if(myisset("me")) sort($mycards); echo "

your cards are:
\n"; foreach($mycards as $card) - display_card($card); + display_card($card,$PREF["cardset"]); echo "

\n"; - check_for_sickness($me,$mycards); + output_check_for_sickness($me,$mycards); /* move on to the next stage*/ DB_set_hand_status_by_hash($me,'check'); } } break; - + case 'check': - echo "checking if you selected solo or nines...
". - " Please click here to finish the setup.
"; + /* ok, user is in the game, saw his cards and selected his vorbehalt + * so first we check what he selected + */ + echo "Processing what you selected in the last step...
"; + if(!myisset("solo","wedding","poverty","nines") ) { /* all these variables have a pre-selected default, @@ -308,9 +389,12 @@ else if(myisset("me")) if( $_REQUEST["solo"]!="No") { + /* user wants to play a solo */ + /* store the info in the user's hand info */ DB_set_solo_by_hash($me,$_REQUEST["solo"]); DB_set_sickness_by_hash($me,"solo"); + echo "
Seems like you want to play a ".$_REQUEST["solo"]." solo. Got it.
\n"; if($gametype == "solo" && $startplayer<$mypos) @@ -333,32 +417,54 @@ else if(myisset("me")) } else if($_REQUEST["poverty"] == "yes") { - echo "So you got poverty. You might as well have said nothing, since this is not implemented yet,". - " so you need to play a normal game...to make it a bit harder, I'll tell the other people that". - " you only have a few trump... should make the game more interesting (although perhaps not for you:))
\n"; + echo "Don't think you can win with just a few trump...? ok, poverty chosen
\n"; DB_set_sickness_by_hash($me,"poverty"); } else if($_REQUEST["nines"] == "yes") { - echo "What you just don't want to play a game because you have a few nines? Well, if no one". + echo "What? You just don't want to play a game because you have a few nines? Well, if no one". " is playing solo, this game will be canceled.
\n"; DB_set_sickness_by_hash($me,"nines"); } - } - - /* move on to the next stage*/ - DB_set_hand_status_by_hash($me,'poverty'); - - + + echo " Ok, done with checking, please go to the next step of the setup.
"; + + /* 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; + }; + if($ok) + foreach($userids as $user) + { + $To = DB_get_email_by_userid($user); + $userhash =DB_get_hash_from_gameid_and_userid($gameid,$user); + if($userhash!=$me) + { + $message = "Everyone finish the questionary in game $gameid, ". + "please visit this link now to continue: \n". + " ".$host."?me=".$userhash."\n\n" ; + mymail($To,$EmailName." finished setup in game $gameid",$message); + } + }; + }; + break; + case 'poverty': /* here we need to check if there is a solo or some other form of sickness. - * If so, which one counts + * If so, which one is the most important one * set that one in the Game table * tell people about it. */ - echo "
checking if someone else selected solo or nines... poverty not handled at the moment
". - " Please click here to finish the setup.
"; + echo "
Checking if someone else selected solo, nines or wedding or poverty.
"; /* check if everyone has reached this stage */ $userids = DB_get_all_userid_by_gameid($gameid); @@ -370,114 +476,148 @@ else if(myisset("me")) $ok=0; }; - if($ok) + if(!$ok) + { + echo "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 ". + "that email to continue the game.
"; + } + else { echo "Everyone has finished checking their cards, let's see what they said...
"; - /* check what kind of game we are playing */ + + /* 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); - - /* nines? */ - $nines = 0; - /* check for nines */ - foreach($userids as $user) - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'nines') - $nines = $user; - - /* gamestatus == normal, => cancel game */ - if($nines && $gametype != "solo") - { - /* TODO: should we keep statistics of this? */ - $message = "Hello, \n\n". - "the game has been canceled because ".DB_get_name_by_userid($nines)." has five or more nines.\n"; - - $userids = DB_get_all_userid_by_gameid($gameid); - foreach($userids as $user) - { - $To = DB_get_email_by_userid($user); - mymail($To,$EmailName."game canceled",$message); - } - - /* delete everything from the dB */ - DB_cancel_game($me); - exit(); - } /* check for different sickness and just output a general info */ - - /* check players for poverty */ + $nines = 0; $poverty = 0; + $wedding = 0; + $solo = 0; foreach($userids as $user) { - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'poverty') + $name = DB_get_name_by_userid($user); + $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid); + if($usersick == 'nines') + { + $nines = $user; + echo "$name has a Vorbehalt.
"; + break; + } + else if($usersick == 'poverty') { $poverty++; - $name = DB_get_name_by_userid($user); echo "$name has a Vorbehalt.
"; } - } - - /* check players for wedding */ - $wedding = 0; - foreach($userids as $user) - { - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'wedding') + else if($usersick == 'wedding') { $wedding=$user; - $name = DB_get_name_by_userid($user); echo "$name has a Vorbehalt.
" ; } - }; - - /* check for solo, output vorbehalt */ - $solo = 0; - foreach($userids as $user) - { - if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'solo') + else if($usersick == 'solo') { $solo++; - $name = DB_get_name_by_userid($user); echo "$name has a Vorbehalt.
" ; } } /* now check which sickness comes first and set the gametype to it */ - /* if gamestatus == normal, set poverty or dpovert (in case two people have poverty) */ - if($poverty>0 && $gametype == "normal") + if($gametype == "solo") { - if($poverty==1) + /* do nothing */ + } + else if($nines) + { + /* cancle game */ + /* TODO: should we keep statistics of this? */ + $message = "Hello, \n\n". + "the game has been canceled because ".DB_get_name_by_userid($nines). + " has five or more nines and nobody is playing solo.\n"; + + /* TODO: add info about redeal in case this is a game of a series */ + + $userids = DB_get_all_userid_by_gameid($gameid); + foreach($userids as $user) { - DB_set_gametype_by_gameid($gameid,"poverty"); - $gametype = "poverty"; + $To = DB_get_email_by_userid($user); + mymail($To,$EmailName."game $gameid canceled",$message); } - else if($poverty==2) + + /* delete everything from the dB */ + DB_cancel_game($me); + + echo "The game has been canceled because ".DB_get_name_by_userid($nines). + " has five or more nines and nobody is playing solo.\n"; + output_footer(); + DB_close(); + exit(); + } + else if($poverty==1) /* one person has poverty */ + { + DB_set_gametype_by_gameid($gameid,"poverty"); + $gametype = "poverty"; + $who=DB_get_sickness_by_gameid($gameid); + if(!$who) { - DB_set_gametype_by_gameid($gameid,"dpoverty"); - $gametype = "dpoverty"; - }; - }; - /* if gamestatus == normal, set wedding */ - if($wedding> 0 && $gametype == "normal") + $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid); + if($firstsick == "poverty") + DB_set_sickness_by_gameid($gameid,2); /* who needs to be asked first */ + else + DB_set_sickness_by_gameid($gameid,1); /* who needs to be asked first */ + } + } + else if($poverty==2) /* two people have poverty */ + { + DB_set_gametype_by_gameid($gameid,"dpoverty"); + $gametype = "dpoverty"; + $who=DB_get_sickness_by_gameid($gameid); + if(!$who) + { + $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid); + if($firstsick == "poverty") + { + $seconsick = DB_get_sickness_by_pos_and_gameid(1,$gameid); + if($secondsick == "poverty") + DB_set_sickness_by_gameid($gameid,30); /* who needs to be asked first */ + else + DB_set_sickness_by_gameid($gameid,20); /* who needs to be asked first */ + } + else + DB_set_sickness_by_gameid($gameid,10); /* who needs to be asked first */ + } + } + else if($wedding> 0) { DB_set_gametype_by_gameid($gameid,"wedding"); + DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */ $gametype = "wedding"; }; - + + echo "
\n"; + /* now the gametype is set correctly (shouldn't matter that this is calculated for every user) * output what kind of game we have */ - echo "
\n"; - - $poverty=0; + $poverty = 0; foreach($userids as $user) { - $name = DB_get_name_by_userid($user); + /* userids are sorted by position... + * so output whatever the firstone has, then whatever the next one has + * stop when the sickness is the same as the gametype + */ + + $name = DB_get_name_by_userid($user); $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid); + + if($usersick) + echo "$name has $usersick.
"; /*TODO: perhaps save this in a string and store in Game? */ + if($usersick=="poverty") $poverty++; - if($usersick) - echo "$name has $usersick
"; if($usersick == "wedding" && $gametype =="wedding") break; if($usersick == "poverty" && $gametype =="poverty") @@ -486,17 +626,16 @@ else if(myisset("me")) break; if($usersick == "solo" && $gametype =="solo") break; - }; + }; + + /* output Schweinchen in case the rules need it */ + if( $gametype != "solo") + if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" ) + echo DB_get_name_by_hash($GAME["schweinchen-who"])." has Schweinchen.
"; + echo "
\n"; - /* check for Schweinchen (cards 21,22) */ - if($RULES["schweinchen"]=="both") - { - set_gametype($gametype); - echo "TODO: check if one user has both foxes and output here "; - } - - /* finished the setup, go to next stage unless there is a case of poverty*/ + /* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/ switch($gametype) { case "solo": @@ -508,10 +647,20 @@ else if(myisset("me")) DB_set_party_by_hash($me,"contra"); DB_set_hand_status_by_hash($me,'play'); break; + case "wedding": - echo "Don't know who will be Re and Contra, you need to figure that out at the end of the game yourself
\n"; + /* 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"); + else + DB_set_party_by_hash($me,"contra"); + + echo "Whoever will make the first trick will be on the re team.
\n"; + echo " Ok, the game can start now, please finish the setup.
"; DB_set_hand_status_by_hash($me,'play'); break; + case "normal": $hand = DB_get_all_hand($me); @@ -523,15 +672,263 @@ else if(myisset("me")) break; case "poverty": case "dpoverty": - echo "TODO: handle poverty here"; - DB_set_hand_status_by_hash($me,'play'); + /* 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; + + /* 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)) + { + /* 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); + + if($firstsick=="poverty") + { + if($secondsick=="poverty") + DB_set_sickness_by_gameid($gameid,$who+$add*3); + else + DB_set_sickness_by_gameid($gameid,$who+$add*2); + } + else + DB_set_sickness_by_gameid($gameid,$who+$add); + + /* email next player */ + $who = DB_get_sickness_by_gameid($gameid); + if($who>9) $who = $who/10; + + if($who<=4) + { + $To = DB_get_email_by_pos_and_gameid($who,$gameid); + $userhash = DB_get_hash_from_game_and_pos($gameid,$who); + DB_set_player_by_gameid($gameid,$who); + + $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:". + " ".$host."?me=".$userhash."\n\n" ; + mymail($To,$EmailName." poverty (game $gameid)",$message); + } + + /* this user is done */ + DB_set_hand_status_by_hash($me,'play'); + break; + } + else if(myisset("trump") && !myisset("exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10)) + { + /* user wants to take trump */ + $trump = $_REQUEST["trump"]; + + /* get hand id for user $trump */ + $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump); + /* copy trump from player A to B */ + $result = mysql_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 "
\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + } + else if(myisset("trump","exchange") && $_REQUEST["trump"]>0 && ($who==$mypos || $who==$mypos*10)) + { + $trump = $_REQUEST["trump"]; + $exchange = $_REQUEST["exchange"]; + $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump); + + /* if exchange is set to a value>0, exchange that card back to user $trump */ + if($exchange >0) + { + $result = mysql_query("UPDATE Hand_Card SET hand_id='$userhand'". + " WHERE hand_id='$myhand' AND card_id='$exchange'" ); + }; + + /* if number of cards == 12, set status to play for both users */ + $result = mysql_query("SELECT COUNT(*) FROM Hand_Card WHERE hand_id='$myhand'" ); + $r = mysql_fetch_array($result,MYSQL_NUM); + if(!$r) + { + die("error in poverty"); + }; + 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; + + /* 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); + + 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_by_pos_and_gameid($who,$gameid); + $userhash = DB_get_hash_from_game_and_pos($gameid,$who); + DB_set_player_by_gameid($gameid,$who); + + $message = "Someone has poverty, it's your turn to decide, ". + "if you want to take the trump. Please visit:". + " ".$host."?me=".$userhash."\n\n" ; + mymail($To,$EmailName." poverty (game $gameid)",$message); + } + + } + + /* 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'); + + /* 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"); + } + } + + + break; + } + else + { + /* else show all trump, have lowest card pre-selected, have hidden setting for */ + echo "you need to get rid of a few cards
\n"; + + set_gametype($gametype); /* this sets the $CARDS variable */ + $mycards = DB_get_hand($me); + $mycards = mysort($mycards,$gametype); + + echo "
\n"; + $type="exchange"; + foreach($mycards as $card) + display_link_card($card,$PREF["cardset"],$type); + echo " \n"; + echo " \n"; + echo " \n"; + echo "
\n"; + } + } + else if($who == $mypos || $who == $mypos*10) + { + foreach($userids as $user) + { + $name = DB_get_name_by_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); + $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?". + "yes
"; + } + } + echo "I don't want to take any trump: ". + "yes
"; + + echo "Your cards are:
\n"; + $mycards = DB_get_hand($me); + sort($mycards); + echo "

your cards are:
\n"; + foreach($mycards as $card) + display_card($card,$PREF["cardset"]); + echo "

\n"; + } + else + { + $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)."; + else + echo "it's not your turn yet to decide if you want to take the trump or not."; + } + /* + * yes, display number of trump and user's hand, ask if he wants to take it + * no, set whom-to-ask to next player, email next player, cancle game if no next player + * yes -> link to new page:display all cards, ask for N return cards + * set re/contra + * + */ }; } - else + /* 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) { - echo "You need to wait for the others, the game can only start after everyone finished checking their cards.
"; - }; - + $message = "Hello, \n\n". + "Game $gameid has been cancled since nobody wanted to take the trump.\n"; + + $userids = DB_get_all_userid_by_gameid($gameid); + foreach($userids as $user) + { + $To = DB_get_email_by_userid($user); + mymail($To,$EmailName."game $gameid cancled (poverty not resolved)",$message); + } + + /* delete everything from the dB */ + DB_cancel_game($me); + + echo "

Game $gameid has been cancled.

"; + output_footer(); + DB_close(); + exit(); + } + /* check if all players are ready to play */ $ok=1; foreach($userids as $user) @@ -542,8 +939,27 @@ else if(myisset("me")) { /* 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_by_pos_and_gameid($startplayer,$gameid); + $hash = DB_get_hash_from_game_and_pos($gameid,$startplayer); + $who = DB_get_userid_by_email($email); + DB_set_player_by_gameid($gameid,$who); + + if($hash!=$me) + { + /* email startplayer) */ + $message = "It's your turn now in game $gameid.\n". + "Use this link to play a card: ".$host."?me=".$hash."\n\n" ; + mymail($email,$EmailName."ready, set, go... (game $gameid) ",$message); + } + else + echo " Please, start the game.
"; } - + else + echo "\n
"; + break; case 'play': case 'gameover': @@ -567,51 +983,39 @@ else if(myisset("me")) else $gametype="normal"; - set_gametype($gametype); + set_gametype($gametype); /* this sets the $CARDS variable */ /* get some infos about the game */ $gamestatus = DB_get_game_status_by_gameid($gameid); /* display useful things in divs */ - /* display local time */ - echo "
\n Local times:"; - $users = array(); - $users = DB_get_all_userid_by_gameid($gameid); - foreach($users as $user) - { - $offset = DB_get_user_timezone($user); - $zone = return_timezone($offset); - date_default_timezone_set($zone); - $name = DB_get_name_by_userid($user); - - echo "\n"; - }; - echo "
$name ".date("Y-m-d H:i:s")."
\n
\n"; - - if($gamestatus != 'pre') - display_status($GT); - /* display links to the users status page */ $result = mysql_query("SELECT email,password from User WHERE id='$myid'" ); $r = mysql_fetch_array($result,MYSQL_NUM); - output_link_to_user_page($r[0],$r[1]); - display_news(); + display_links($r[0],$r[1]); /* end display useful things*/ /* has the game started? No, then just wait here...*/ if($gamestatus == 'pre') { - echo "you need to wait for the others...
"; + echo "You finished the setup, but not everyone else finished it... ". + "so you need to wait for the others. Just wait for the an email...
"; break; /* not sure this works... the idea is that you can * only play a card after everyone is ready to play */ } /* display the table and the names */ $result = mysql_query("SELECT User.fullname as name,". - " Hand.position as position ". + " Hand.position as position, ". + " User.id, ". + " Hand.party as party, ". + " Hand.sickness as sickness, ". + " Hand.point_call, ". + " User.last_login, ". + " Hand.hash ". "FROM Hand ". "LEFT JOIN User ON User.id=Hand.user_id ". "WHERE Hand.game_id='".$gameid."' ". @@ -621,19 +1025,98 @@ else if(myisset("me")) " \"table\"\n"; while($r = mysql_fetch_array($result,MYSQL_NUM)) { - $name = $r[0]; - $pos = $r[1]; + $name = $r[0]; + $pos = $r[1]; + $user = $r[2]; + $party = $r[3]; + $sickness = $r[4]; + $call = $r[5]; + $lastlogin = strtotime($r[6]); + $hash = $r[7]; + + $offset = DB_get_user_timezone($user); + $zone = return_timezone($offset); + date_default_timezone_set($zone); + + echo " \n"; + if(!$debug) + echo " $name \n"; + else + { + echo "$name\n"; + } + /* add hints for poverty, wedding, solo, etc */ + if($GT=="poverty" && $party=="re") + if($sickness=="poverty") + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_all_hand($userhash); + $trumpNR = count_trump($cards); + if($trumpNR) + echo "(poverty < trump back)"; + else + echo "(poverty <)"; + } + else + echo "(poverty >)"; + + if($GT=="dpoverty") + if($party=="re") + if($sickness=="poverty") + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_all_hand($userhash); + $trumpNR = count_trump($cards); + if($trumpNR) + echo "(poverty A < trump back)"; + else + echo "(poverty A <)"; + } + else + echo "(poverty A >)"; + else + if($sickness=="poverty") + { + $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); + $cards = DB_get_all_hand($userhash); + $trumpNR = count_trump($cards); + if($trumpNR) + echo "(poverty B < trump back)"; + else + echo "(poverty B <)"; + } + else + echo "(poverty B >)"; + + if($GT=="wedding" && $party=="re") + if($sickness=="wedding") + echo "(wedding +)"; + else + echo "(wedding)"; - echo " $name\n"; + if(ereg("solo",$GT) && $party=="re") + echo "($GT)"; + + /* add point calls */ + if($call!=NULL) + echo " $party $call "; + + echo "
\n"; + echo " local time: ".date("Y-m-d H:i:s")."
\n"; + echo " last login: ".date("Y-m-d H:i:s",$lastlogin)."
\n"; + echo "
\n"; + } echo "
\n"; - + /* get everything relevant to display the tricks */ $result = mysql_query("SELECT Hand_Card.card_id as card,". " Hand.position as position,". " Play.sequence as sequence, ". " Trick.id, ". - " Comment.comment ". + " Comment.comment, ". + " Play.create_date, ". + " Hand.user_id ". "FROM Trick ". "LEFT JOIN Play ON Trick.id=Play.trick_id ". "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ". @@ -651,7 +1134,7 @@ else if(myisset("me")) $firstcard = ""; /* first card in a trick */ echo "\n