From: Arun Persaud Date: Sun, 11 May 2008 22:48:05 +0000 (-0700) Subject: BUGFIX: rewrote poverty, should fix lots of bugs X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=commitdiff_plain;h=5973166a4b936e2f8e2d923bc6dcb8bc3db89d85 BUGFIX: rewrote poverty, should fix lots of bugs poverty should work now, even if the user doesn't do everything in one go. Cleaned up the layout at the same time. The cards were sometime displayed below the main page, which led to a lot of empty space... Indicating whos turns it is during the pre-game phase should now be ok. Also cleaned up whitespaces. Signed-off-by: Arun Persaud --- diff --git a/css/standard001.css b/css/standard002.css similarity index 97% rename from css/standard001.css rename to css/standard002.css index b694fe9..b4d1fe0 100644 --- a/css/standard001.css +++ b/css/standard002.css @@ -38,7 +38,7 @@ position: absolute; background-color: #fff; width: 20%; - top:22em; + top:19em; left:40%; right:40%; text-align: center; @@ -61,12 +61,6 @@ z-index:15; } -.poverty { - top:32em; - z-index:15; - background-color:#fff; -} - .rules { margin-top:20em; } @@ -86,7 +80,7 @@ margin-top:20em; /* display the table and the names */ div.table { position:absolute; - width:99%; + width:100%; height:35em; margin:0; left:0; @@ -198,7 +192,7 @@ ul.tricks li div div.card0 img,ul.tricks li div div.card0 .score, .vorbehalt0 { left:37.5%; right:56x.5%; width:6%; - z-index:9; + z-index:30; } ul.tricks li div div.card0 span.comment{ position:absolute; @@ -220,7 +214,7 @@ ul.tricks li div div.card1 img,ul.tricks li div div.card1 .score, .vorbehalt1 { right:47%; width:6%; text-align:center; - z-index:9; + z-index:30; } ul.tricks li div div.card1 span.comment{ position:absolute; @@ -242,7 +236,7 @@ ul.tricks li div div.card2 img,ul.tricks li div div.card2 .score, .vorbehalt2{ right:37.5%; left:56x.5%; width:6%; - z-index:9; + z-index:30; } ul.tricks li div div.card2 span.comment{ position:absolute; @@ -265,7 +259,7 @@ ul.tricks li div div.card3 img,ul.tricks li div div.card3 .score, .vorbehalt3{ right:47%; width:6%; text-align:center; - z-index:9; + z-index:30; } ul.tricks li div div.card3 span.comment{ position:absolute; diff --git a/include/functions.php b/include/functions.php index 382b148..31f9ba8 100644 --- a/include/functions.php +++ b/include/functions.php @@ -367,17 +367,17 @@ function create_array_of_random_numbers($useridA,$useridB,$useridC,$useridD) if($debug) { $r[ 0]=1; $r[12]=47; $r[24]=13; $r[36]=37; - $r[ 1]=2; $r[13]=48; $r[25]=14; $r[37]=38; + $r[ 1]=2; $r[13]=23; $r[25]=14; $r[37]=38; $r[ 2]=3; $r[14]=27; $r[26]=15; $r[38]=39; $r[ 3]=4; $r[15]=16; $r[27]=28; $r[39]=40; $r[ 4]=5; $r[16]=17; $r[28]=29; $r[40]=41; $r[ 5]=18; $r[17]=6; $r[29]=30; $r[41]=42; - $r[ 6]=19; $r[18]=7; $r[30]=31; $r[42]=43; - $r[ 7]=20; $r[19]=8; $r[31]=32; $r[43]=44; - $r[ 8]=45; $r[20]=9; $r[32]=21; $r[44]=33; - $r[ 9]=46; $r[21]=10; $r[33]=22; $r[45]=34; - $r[10]=35; $r[22]=11; $r[34]=23; $r[46]=25; - $r[11]=36; $r[23]=12; $r[35]=24; $r[47]=26; + $r[ 6]=21; $r[18]=7; $r[30]=31; $r[42]=43; + $r[ 7]=22; $r[19]=8; $r[31]=32; $r[43]=44; + $r[ 8]=45; $r[20]=9; $r[32]=19; $r[44]=33; + $r[ 9]=46; $r[21]=10; $r[33]=20; $r[45]=24; + $r[10]=35; $r[22]=11; $r[34]=48; $r[46]=25; + $r[11]=36; $r[23]=12; $r[35]=34; $r[47]=26; } else { @@ -703,6 +703,10 @@ function display_table () echo " $name\n"; /* add hints for poverty, wedding, solo, etc */ + if( $gametype != "solo") + if($GAME["schweinchen"] && $RULES["schweinchen"]=="both" && $GAME["schweinchen-who"]==$hash) + echo " Schweinchen.
"; + if($GT=="poverty" && $party=="re") if($sickness=="poverty") { diff --git a/include/game.php b/include/game.php index d7e7b95..5f2c002 100644 --- a/include/game.php +++ b/include/game.php @@ -192,7 +192,7 @@ switch($mystatus) echo "
  • Game ".DB_format_gameid($gameid).":
  • \n"; echo "
  • Pre\n". "
    \n"; - + for($pos=1;$pos<5;$pos++) { $usersick = DB_get_sickness_by_pos_and_gameid($pos,$gameid); @@ -203,7 +203,7 @@ switch($mystatus) echo "
    still needs to decide
    \n"; /* show this to everyone */ else if($usersick!=NULL && $pos<=$mypos ) /* only show this for people sitting before the player */ - echo "
    sick
    \n"; + echo "
    sick
    \n"; else if($usersick==NULL && $pos<=$mypos) echo "
    healthy
    \n"; } @@ -214,10 +214,10 @@ switch($mystatus) { output_check_for_sickness($me,$mycards); - echo "

    Your cards are:
    \n"; + echo "

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

    \n"; + echo "
    \n"; break; } @@ -235,10 +235,10 @@ switch($mystatus) echo "

    You selected more than one sickness, please go back ". "and answer the question again.

    "; - echo "

    Your cards are:
    \n"; + echo "

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

    \n"; + echo "
    \n"; break; } @@ -290,25 +290,49 @@ switch($mystatus) " is playing solo, this game will be canceled.
    \n"; DB_set_sickness_by_hash($me,"nines"); } - + echo "

    \n"; - + /* move on to the next stage*/ DB_set_hand_status_by_hash($me,'check'); }; }; case 'check': - /* hmm, by reorganizing things a bit, this stage is empty at the moment */ - /* move on to the next stage, but user shouldn't get here anymore anyway */ - DB_set_hand_status_by_hash($me,'poverty'); - - 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. + /* 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); + sort($mycards); + + /* output sickness of other playes, in case the already selected and are sitting in front of the current player */ + echo "\n
      \n"; + echo "
    • Game ".DB_format_gameid($gameid).":
    • \n"; + echo "
    • Pre\n". + "
      \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 "
      still needs to decide
      \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 "
      sick
      \n"; + else + echo "
      healthy
      \n"; + } + echo "
      \n
    • \n
    \n"; /* end div trick, end li trick , end tricks*/ + /* end displaying sickness */ + } + echo "
    \n"; echo "

    Checking if someone else selected solo, nines, wedding or poverty.

    "; @@ -318,27 +342,46 @@ switch($mystatus) 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) { - echo "This step can only be handled after everyone finished the last step. ". + 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.
    "; + "that email to continue the game.

    "; + + /* 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 "
    Your cards are:
    \n"; + foreach($mycards as $card) + display_card($card,$PREF["cardset"]); + echo "
    \n"; + } + break; } else { - echo "Everyone has finished checking their cards, let's see what they said...
    "; + /* 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 "

    Ok, everyone is done... figuring out 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); - /* check for different sickness and just output a general info */ + /* check for sickness */ $nines = 0; $poverty = 0; $wedding = 0; @@ -350,28 +393,17 @@ switch($mystatus) if($usersick == 'nines') { $nines = $user; - echo "$name has a Vorbehalt.
    "; - break; + break; /* no need to check for other poverties, since only solo can win and that is already set */ } else if($usersick == 'poverty') - { - $poverty++; - echo "$name has a Vorbehalt.
    "; - } + $poverty++; else if($usersick == 'wedding') - { - $wedding=$user; - echo "$name has a Vorbehalt.
    " ; - } + $wedding=$user; else if($usersick == 'solo') - { - $solo++; - echo "$name has a Vorbehalt.
    " ; - } + $solo++; } /* now check which sickness comes first and set the gametype to it */ - if($gametype == "solo") { /* do nothing */ @@ -442,373 +474,403 @@ switch($mystatus) DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */ $gametype = "wedding"; }; + /* now the gametype is set correctly in the database */ + echo "

    Got it :)

    "; - 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) + /* 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.
    "; /*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; - /* 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.
    "; + case "normal": + $hand = DB_get_all_hand($userhash); - echo "
    \n"; + 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'); + } + } - /* 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 - DB_set_party_by_hash($me,"contra"); - DB_set_hand_status_by_hash($me,'play'); - break; + echo " Please, start the game.
    \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, start the game.
    \n"; 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.
    \n"; - echo " Ok, the game can start now, please finish the setup.
    "; - 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 "
    \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 "
    you need to get rid of a few cards
    \n"; + + $type="exchange"; + echo "
    Your cards are:
    \n"; + foreach($mycards as $card) + display_link_card($card,$PREF["cardset"],$type); + echo " \n"; + echo "
    \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 "
    \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?". + "yes
    \n"; } - else - DB_set_sickness_by_gameid($gameid,$who+$add); + } + echo "No,way I take those trump...
    \n"; + echo "
    \n"; - /* email next player */ - $who = DB_get_sickness_by_gameid($gameid); - if($who>9) $who = $who/10; + echo "
    Your cards are:
    \n"; + foreach($mycards as $card) + display_card($card,$PREF["cardset"]); + echo "
    \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 "
    \n"; - echo " \n"; - echo " \n"; - echo " \n"; - echo "
    \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 "

    Game ".DB_format_gameid($gameid)." has been canceled.

    "; + 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 "
    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); - - $type="exchange"; - echo "
    Your cards are:
    \n"; - foreach($mycards as $card) - display_link_card($card,$PREF["cardset"],$type); - echo " \n"; - echo " \n"; - echo "
    \n"; - } - } - else if($who == $mypos || $who == $mypos*10) + $mycards = DB_get_hand($me); + + /* set re/contra */ + if($gametype=='poverty') { - echo "
    \n"; + $userids = DB_get_all_userid_by_gameid($gameid); 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?". - "yes
    \n"; + $hash = DB_get_hash_from_gameid_and_userid($gameid,$user); + DB_set_hand_status_by_hash($hash,'play'); } } - echo "No,way I take those trump...
    \n"; - echo "
    \n"; - - 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 + 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 - 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 "

    Game ".DB_format_gameid($gameid)." has been canceled.

    "; - output_footer(); - DB_close(); - exit(); - } + if($mypos+$next>4) + echo "
    Error in poverty, please contact the Admin
    \n"; - /* 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; - DB_set_player_by_gameid($gameid,$user); - } + $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($ok) - { - /* only set this after all poverty, etc. are handled*/ - DB_set_game_status_by_gameid($gameid,'play'); + DB_set_player_by_gameid($gameid,$userid); + DB_set_hand_status_by_hash($userhash,'poverty'); - /* email startplayer */ - $startplayer = DB_get_startplayer_by_gameid($gameid); - $email = DB_get_email('position-gameid',$startplayer,$gameid); - $hash = DB_get_hash_from_game_and_pos($gameid,$startplayer); - $who = DB_get_userid('email',$email); - DB_set_player_by_gameid($gameid,$who); + $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); - if($hash!=$me && 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 - echo " Please, start the game.
    "; + echo "
    Please, continue here.
    \n"; } - else - echo "\n
    "; } - echo "
    \n"; + echo ""; 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 */ + $ok = 1; + $userids = DB_get_all_userid_by_gameid($gameid); + foreach($userids as $user) + { + $userstatus = DB_get_hand_status_by_userid_and_gameid($user,$gameid); + if($userstatus !='play') + { + $ok = 0; + DB_set_player_by_gameid($gameid,$user); + } + } + if($ok) + { + /* only set this after all poverty, etc. are handled*/ + DB_set_game_status_by_gameid($gameid,'play'); + + /* email startplayer */ + $startplayer = DB_get_startplayer_by_gameid($gameid); + $email = DB_get_email('position-gameid',$startplayer,$gameid); + $hash = DB_get_hash_from_game_and_pos($gameid,$startplayer); + $who = DB_get_userid('email',$email); + DB_set_player_by_gameid($gameid,$who); + + if($hash!=$me && DB_get_email_pref_by_hash($hash)!="emailaddict") + { + /* email startplayer) */ + $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); + } + } + /* 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"] @@ -835,6 +897,15 @@ switch($mystatus) { echo "

    You finished the setup, but not everyone else finished it... ". "You need to wait for the others. Just wait for an email.

    "; + + $mycards = DB_get_hand($me); + $mycards = mysort($mycards,$gametype); + + echo "
    Your cards are:
    \n"; + foreach($mycards as $card) + display_card($card,$PREF["cardset"]); + echo "
    \n"; + break; /* not sure this works... the idea is that you can * only play a card after everyone is ready to play */ } @@ -843,7 +914,7 @@ switch($mystatus) $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")) { diff --git a/include/output.php b/include/output.php index dc10fa3..8779ad8 100644 --- a/include/output.php +++ b/include/output.php @@ -1,5 +1,5 @@ e-Doko - +