\n";
check_for_sickness($me,$mycards);
/* move on to the next stage*/
DB_set_hand_status_by_hash($me,'check');
}
}
break;
case 'check':
/* 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,
* so we should never get here,
* unless a user tries to cheat ;) */
echo "something went wrong...please contact the admin.";
}
else
{
/* check if this sickness needs to be handled first */
$gametype = DB_get_gametype_by_gameid($gameid);
$startplayer = DB_get_startplayer_by_gameid($gameid);
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\n";
DB_set_sickness_by_hash($me,"wedding");
}
else if($_REQUEST["poverty"] == "yes")
{
echo "So you got poverty. You might as well have said nothing, since this is not implemented yet,".
" 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";
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".
" is playing solo, this game will be canceled.\n";
DB_set_sickness_by_hash($me,"nines");
}
}
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');
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.
*/
echo " Checking if someone else selected solo, nines or wedding... Poverty not handled at the moment";
/* check if everyone has reached this stage */
$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)
{
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... please check back later....";
}
else
{
echo "Everyone has finished checking their cards, let's see what they said...";
/* 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);
/* check for different sickness and just output a general info */
/* check for nines */
$nines = 0;
foreach($userids as $user)
if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == 'nines')
{
$nines = $user;
$name = DB_get_name_by_userid($user);
echo "$name has a Vorbehalt. ";
break;
}
/* check players for poverty */
$poverty = 0;
foreach($userids as $user)
{
if(DB_get_sickness_by_userid_and_gameid($user,$gameid) == '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')
{
$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')
{
$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 */
/* gamestatus == normal, => cancel game */
if($gametype == "solo")
{
/* 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)
{
$To = DB_get_email_by_userid($user);
mymail($To,$EmailName."game canceled",$message);
}
/* 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();
exit();
}
else if($poverty==1 && $gametype !="poverty")
{
DB_set_gametype_by_gameid($gameid,"poverty");
$gametype = "poverty";
}
else if($poverty==2 && $gametype !="dpoverty")
{
DB_set_gametype_by_gameid($gameid,"dpoverty");
$gametype = "dpoverty";
}
else if($wedding> 0 && $gametype !="wedding")
{
DB_set_gametype_by_gameid($gameid,"wedding");
$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 */
$poverty = 0;
foreach($userids as $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 == "wedding" && $gametype =="wedding")
break;
if($usersick == "poverty" && $gametype =="poverty")
break;
if($usersick == "poverty" && $gametype =="dpoverty" && $poverty==2)
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";
/* finished the setup, set re/contra parties if possible, go to next stage unless there is a case of poverty*/
switch($gametype)
{
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");
else
DB_set_party_by_hash($me,"contra");
DB_set_hand_status_by_hash($me,'play');
break;
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");
echo "Don't know who will be Re and Contra, you need to ".
"figure that out at the end of the game yourself \n";
DB_set_hand_status_by_hash($me,'play');
break;
case "normal":
$hand = DB_get_all_hand($me);
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":
/* use extra column in DB.Game to store whom to ask,
* should be set for poverty and dpoverty(use two digits for dpoverty?) earlier*/
/* check if poverty resolved (e.g. DB.Game who set to NULL)
* yes? =>trump was taken, start game; break;
*
* check if we are being asked now
* no, display wait message, e.g. player X is asked at the moment
* 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
*
*/
case "dpoverty":
echo "TODO: handle poverty here (almost done in my developing version)";
DB_set_hand_status_by_hash($me,'play');
};
}
/* check if all players are ready to play */
$ok=1;
foreach($userids as $user)
if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
$ok=0;
if($ok)
{
/* only set this after all poverty, etc. are handled*/
DB_set_game_status_by_gameid($gameid,'play');
/* email startplayer */
$startplayer = DB_get_startplayer_by_gameid($gameid);
$email = DB_get_email_by_pos_and_gameid($startplayer,$gameid);
$hash = DB_get_hash_from_game_and_pos($gameid,$startplayer);
if($hash!=$me)
{
/* email startplayer) */
$message = "It's your turn now.\n".
"Use this link to play a card: ".$host."?me=".$hash."\n\n" ;
mymail($email,$EmailName."ready, set, go... ",$message);
}
else
echo " Please, start the game.";
}
else
echo "You finished the setup, once everyone else has done the same you'll get an email when it is your turn..";
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"]
* accordingly
*/
$gametype = DB_get_gametype_by_gameid($gameid);
$GT = $gametype;
if($gametype=="solo")
{
$gametype = DB_get_solo_by_gameid($gameid);
$GT = $gametype." ".$GT;
}
else
$gametype="normal";
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 links to the users status page */
$result = mysql_query("SELECT email,password from User WHERE id='$myid'" );
$r = mysql_fetch_array($result,MYSQL_NUM);
display_links($r[0],$r[1]);
/* end display useful things*/
/* has the game started? No, then just wait here...*/
if($gamestatus == 'pre')
{
echo "You finished the setup, but not everyone else finished it...so you need to wait for the others... ";
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, ".
" User.id ".
"FROM Hand ".
"LEFT JOIN User ON User.id=Hand.user_id ".
"WHERE Hand.game_id='".$gameid."' ".
"ORDER BY position ASC");
echo "

\n";
/* check if we need to set status to 'gameover' is done during playing of the card */
if($mystatus=='play')
break;
/* the following happens only when the gamestatus is 'gameover' */
/* check if game is over, display results */
if(DB_get_game_status_by_gameid($gameid)=='play')
{
echo "the game is over for you.. other people still need to play though";
}
else
{
echo "the game is over now...\n";
$result = mysql_query("SELECT fullname, SUM(score), Hand.party FROM Score".
" LEFT JOIN Hand ON Hand.id=hand_id".
" LEFT JOIN User ON Hand.user_id=User.id".
" WHERE Hand.game_id=$gameid".
" GROUP BY fullname" );
while( $r = mysql_fetch_array($result,MYSQL_NUM))
echo " FINAL SCORE: ".$r[0]."(".$r[2].") ".$r[1]."";
$result = mysql_query("SELECT Hand.party, SUM(score) FROM Score".
" LEFT JOIN Hand ON Hand.id=hand_id".
" LEFT JOIN User ON Hand.user_id=User.id".
" WHERE Hand.game_id=$gameid".
" GROUP BY Hand.party" );
while( $r = mysql_fetch_array($result,MYSQL_NUM))
echo " FINAL SCORE: ".$r[0]." ".$r[1]."\n";
$session = DB_get_session_by_gameid($gameid);
$result = mysql_query("SELECT id,create_date FROM Game".
" WHERE session=$session".
" ORDER BY create_date DESC".
" LIMIT 1");
$r=-1;
if($result)
$r = mysql_fetch_array($result,MYSQL_NUM);
if(!$session || $gameid==$r[0])
{
/* suggest a new game with the same people in it, just rotated once */
$names = DB_get_all_names_by_gameid($gameid);
output_ask_for_new_game($names[1],$names[2],$names[3],$names[0],$gameid);
}
}
break;
default:
echo "error in testing the status";
}
output_footer();
exit();
}
/* user status page */
else if(myisset("email","password"))
{
/* test id and password, should really be done in one step */
$email = $_REQUEST["email"];
$password = $_REQUEST["password"];
if(myisset("forgot"))
{
$ok=1;
$uid = DB_get_userid_by_email($email);
if(!$uid)
$ok=0;
if($ok)
{
echo "Hmm, you forgot your passwort...nothing I can do at the moment:( ";
echo " you need to email Arun for now... in the future it will be all automated and an ";
echo "email with a new password will go to $email.";
}
else
{
if($email=="")
echo "you need to give me an email address!";
else
echo "couldn't find a player with this email, please contact Arun, if you think this is a mistake";
}
}
else
{
if(strlen($password)!=32)
$password = md5($password);
$ok=1;
$uid = DB_get_userid_by_email_and_password($email,$password);
if(!$uid)
$ok=0;
if($ok)
{
$time = DB_get_user_timestamp($uid);
$unixtime =strtotime($time);
$offset = DB_get_user_timezone($uid);
$zone = return_timezone($offset);
date_default_timezone_set($zone);
echo "last login: ".date("r",$unixtime)."";
DB_update_user_timestamp($uid);
echo "

these are the games you are playing in:\n";
$result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand".
" LEFT JOIN Game On Hand.game_id=Game.id".
" WHERE Hand.user_id='$uid' AND Game.status<>'gameover'" );
while( $r = mysql_fetch_array($result,MYSQL_NUM))
{
echo "game #".$r[1]." ";
if(time()-strtotime($r[2]) > 60*60*24*30)
echo " The game has been running for over a month.".
" Do you want to cancel it? yes".
" (clicking here is final and can't be restored)";
echo "";
}
echo "