From: arun Date: Thu, 7 Jun 2007 18:09:08 +0000 (+0000) Subject: * FIX: added extra check for calling 120, etc. so that people can't cheat X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=commitdiff_plain;h=e68d4598c0d0a5e1f138b9c891f5c1c9ae0e8541;hp=337229f87e4507dd1ea9fa80cfc981f19822b726 * FIX: added extra check for calling 120, etc. so that people can't cheat * NEW: display sessions * NEW: display who's turn it is on the userpage (change in DB) * NEW: different ways when to say 90, 60, etc. (change in DB) * MISC: some clean up, e.g. display of final score --- diff --git a/create_database.sql b/create_database.sql index 4b75c47..b480bf3 100644 --- a/create_database.sql +++ b/create_database.sql @@ -74,6 +74,7 @@ CREATE TABLE `Game` ( `solo` enum('trumpless','jack','queen','trump','club','spade','heart','silent') default NULL, `sickness` int(11) default NULL, `startplayer` tinyint(4) default '1', + `playerid` int(11) default NULL, `status` enum('pre','play','gameover') default NULL, `ruleset` int(11) default NULL, `session` int(11) default NULL, @@ -102,6 +103,7 @@ CREATE TABLE `Rulesets` ( `create_date` timestamp NOT NULL default '0000-00-00 00:00:00', `dullen` enum('none','firstwins','secondwins') default 'secondwins', `schweinchen` enum ('none','both','second','secondaftercall') default 'second', + `call` enum ('1st-own-card','5th-card','9-cards') default '1st-own-card', `id` int(11) NOT NULL auto_increment, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/css/standard.css b/css/standard.css index d6eebc5..a54d165 100644 --- a/css/standard.css +++ b/css/standard.css @@ -242,6 +242,9 @@ ul.tricks li div div.card3 span{ padding:0; } +.session { + border-bottom:1px solid black; +} .ruleset { float:left; diff --git a/db.php b/db.php index 64a80b9..935c848 100644 --- a/db.php +++ b/db.php @@ -629,6 +629,24 @@ function DB_set_startplayer_by_gameid($id,$p) return; } +function DB_get_player_by_gameid($id) +{ + $result = mysql_query("SELECT player FROM Game WHERE id=".DB_quote_smart($id)); + $r = mysql_fetch_array($result,MYSQL_NUM); + + if($r) + return $r[0]; + else + return 0; +} +function DB_set_player_by_gameid($id,$p) +{ + mysql_query("UPDATE Game SET player='".DB_quote_smart($p)."' WHERE id=".DB_quote_smart($id)); + return; +} + + + function DB_get_ruleset_by_gameid($id) { $result = mysql_query("SELECT ruleset FROM Game WHERE id=".DB_quote_smart($id)); @@ -662,6 +680,20 @@ function DB_get_max_session() return 0; } +function DB_get_hashes_by_session($session,$user) +{ + $r = array(); + + $result = mysql_query("SELECT Hand.hash FROM Hand". + " LEFT JOIN Game ON Game.id=Hand.game_id ". + " WHERE Game.session=".DB_quote_smart($session). + " AND Hand.user_id=".DB_quote_smart($user)); + while($t = mysql_fetch_array($result,MYSQL_NUM)) + $r[] = $t[0]; + + return $r; +} + function DB_get_ruleset($dullen,$schweinchen) { $r = array(); diff --git a/functions.php b/functions.php index 893f916..997ba43 100644 --- a/functions.php +++ b/functions.php @@ -656,7 +656,7 @@ function can_call($what,$hash) $gameid = DB_get_gameid_by_hash($hash); $gametype = DB_get_gametype_by_gameid($gameid); - $NRcards = count(DB_get_hand($me)); + $NRcards = count(DB_get_hand($hash)); $NRallcards = 0; for ($i=1;$i<5;$i++) diff --git a/index.php b/index.php index 8e4f17f..a2cf35b 100644 --- a/index.php +++ b/index.php @@ -101,9 +101,9 @@ if(myisset("new")) /* get max session */ $max = DB_get_max_session(); $max++; + 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','pre',". "'$ruleset','$max' ,NULL)"); - mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup)); } } else @@ -233,6 +233,7 @@ else if(myisset("me")) $mystatus = DB_get_status_by_hash($me); $mypos = DB_get_pos_by_hash($me); $myhand = DB_get_handid_by_hash($me); + $session = DB_get_session_by_gameid($gameid); /* get prefs and save them */ DB_get_PREF($myid); @@ -247,7 +248,7 @@ else if(myisset("me")) $RULES["dullen"] = $r[2]; $RULES["schweinchen"] = $r[3]; - $RULES["call"] = "1st-own-card"; + $RULES["call"] = $r[4]; /* get some infos about the game */ @@ -269,7 +270,27 @@ else if(myisset("me")) 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; @@ -405,35 +426,35 @@ else if(myisset("me")) " 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'); - - /* 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) + + 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) { - $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); - } - }; + $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; @@ -472,12 +493,10 @@ else if(myisset("me")) $startplayer = DB_get_startplayer_by_gameid($gameid); /* check for different sickness and just output a general info */ - - - $nines = 0; + $nines = 0; $poverty = 0; $wedding = 0; - $solo = 0; + $solo = 0; foreach($userids as $user) { $name = DB_get_name_by_userid($user); @@ -507,7 +526,6 @@ else if(myisset("me")) /* now check which sickness comes first and set the gametype to it */ - /* gamestatus == normal, => cancel game */ if($gametype == "solo") { /* do nothing */ @@ -538,7 +556,7 @@ else if(myisset("me")) DB_close(); exit(); } - else if($poverty==1) + else if($poverty==1) /* one person has poverty */ { DB_set_gametype_by_gameid($gameid,"poverty"); $gametype = "poverty"; @@ -552,7 +570,7 @@ else if(myisset("me")) DB_set_sickness_by_gameid($gameid,1); /* who needs to be asked first */ } } - else if($poverty==2) + else if($poverty==2) /* two people have poverty */ { DB_set_gametype_by_gameid($gameid,"dpoverty"); $gametype = "dpoverty"; @@ -698,7 +716,8 @@ else if(myisset("me")) { $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); @@ -777,7 +796,8 @@ else if(myisset("me")) { $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" ; @@ -924,6 +944,8 @@ else if(myisset("me")) $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) { @@ -992,7 +1014,8 @@ else if(myisset("me")) " Hand.party as party, ". " Hand.sickness as sickness, ". " Hand.point_call, ". - " User.last_login ". + " User.last_login, ". + " Hand.hash ". "FROM Hand ". "LEFT JOIN User ON User.id=Hand.user_id ". "WHERE Hand.game_id='".$gameid."' ". @@ -1009,13 +1032,19 @@ else if(myisset("me")) $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"; - echo " $name "; + if(!$debug) + echo " $name \n"; + else + { + echo "$name\n"; + } /* add hints for poverty, wedding, solo, etc */ if($GT=="poverty" && $party=="re") if($sickness=="poverty") @@ -1210,25 +1239,24 @@ else if(myisset("me")) { $comment = ""; - /* mark card as played */ - mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=". - DB_quote_smart($card)); - /* update Game timestamp */ DB_update_game_timestamp($gameid); - /* check if a call was made */ - if(myisset("call120") && $_REQUEST["call120"] == "yes") + /* check if a call was made, must do this before we set the card status to played */ + if(myisset("call120") && $_REQUEST["call120"] == "yes" && can_call(120,$me)) $result = mysql_query("UPDATE Hand SET point_call='120' WHERE hash='$me' "); - if(myisset("call90") && $_REQUEST["call90"] == "yes") + if(myisset("call90") && $_REQUEST["call90"] == "yes" && can_call(90,$me)) $result = mysql_query("UPDATE Hand SET point_call='90' WHERE hash='$me' "); - if(myisset("call60") && $_REQUEST["call60"] == "yes") + if(myisset("call60") && $_REQUEST["call60"] == "yes" && can_call(60,$me)) $result = mysql_query("UPDATE Hand SET point_call='60' WHERE hash='$me' "); - if(myisset("call30") && $_REQUEST["call30"] == "yes") + if(myisset("call30") && $_REQUEST["call30"] == "yes" && can_call(30,$me)) $result = mysql_query("UPDATE Hand SET point_call='30' WHERE hash='$me' "); - if(myisset("call0") && $_REQUEST["call0"] == "yes") + if(myisset("call0") && $_REQUEST["call0"] == "yes" && can_call(0,$me)) $result = mysql_query("UPDATE Hand SET point_call='0' WHERE hash='$me' "); + /* mark card as played */ + mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=". + DB_quote_smart($card)); /* check for schweinchen */ //echo "schweinchen = ".$GAME["schweinchen"]." --$card-
"; @@ -1337,24 +1365,24 @@ else if(myisset("me")) /* email all players */ /* individual score */ - $result = mysql_query("SELECT fullname, SUM(score), Hand.party FROM Score". - " LEFT JOIN Hand ON Hand.id=hand_id". + $result = mysql_query("SELECT fullname, IFNULL(SUM(score),0), Hand.party FROM Hand". + " LEFT JOIN Score ON Hand.id=Score.hand_id". " LEFT JOIN User ON Hand.user_id=User.id". " WHERE Hand.game_id=$gameid". " GROUP BY fullname" ); $message = "The game is over. Thanks for playing :)\n"; + $message .= "Final score:\n"; while( $r = mysql_fetch_array($result,MYSQL_NUM)) - $message .= " FINAL SCORE: ".$r[0]."(".$r[2].") ".$r[1]."\n"; - $message .= "\nIf your not in the list above your score is zero...\n\n"; + $message .= " ".$r[0]."(".$r[2].") ".$r[1]."\n"; - $result = mysql_query("SELECT Hand.party, SUM(score) FROM Score". - " LEFT JOIN Hand ON Hand.id=hand_id". + $result = mysql_query("SELECT Hand.party, IFNULL(SUM(score),0) FROM Hand". + " LEFT JOIN Score ON Hand.id=Score.hand_id". " LEFT JOIN User ON Hand.user_id=User.id". " WHERE Hand.game_id=$gameid". " GROUP BY Hand.party" ); - $message .= "\n"; + $message .= "\nTotals:\n"; while( $r = mysql_fetch_array($result,MYSQL_NUM)) - $message .= " FINAL SCORE: ".$r[0]." ".$r[1]."\n"; + $message .= " ".$r[0]." ".$r[1]."\n"; /* check who wants to be CC'ed on the email */ $h = array(); @@ -1415,7 +1443,9 @@ else if(myisset("me")) /* email next player */ $next_hash = DB_get_hash_from_game_and_pos($gameid,$next); $email = DB_get_email_by_hash($next_hash); - + $who = DB_get_userid_by_email($email); + DB_set_player_by_gameid($gameid,$who); + $message = "A card has been played in game $gameid.\n\n". "It's your turn now.\n". "Use this link to play a card: ".$host."?me=".$next_hash."\n\n" ; @@ -1494,7 +1524,7 @@ else if(myisset("me")) } echo "\n"; - /* check if we need to set status to 'gameover' is done during playing of the card */ + /* if the game is over do some extra stuff, therefore exit the swtich statement if we are still playing*/ if($mystatus=='play') break; /* the following happens only when the gamestatus is 'gameover' */ @@ -1507,22 +1537,27 @@ else if(myisset("me")) { 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". + $result = mysql_query("SELECT fullname, IFNULL(SUM(score),0), Hand.party FROM Hand". + " LEFT JOIN Score ON Hand.id=Score.hand_id". " LEFT JOIN User ON Hand.user_id=User.id". " WHERE Hand.game_id=$gameid". " GROUP BY fullname" ); + echo "Final Score:
\n". + " \n";; 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". + echo " "; + echo "
".$r[0]."(".$r[2].") ".$r[1]."
\n"; + + $result = mysql_query("SELECT Hand.party, IFNULL(SUM(score),0) FROM Hand". + " LEFT JOIN Score ON Hand.id=Score.hand_id". " LEFT JOIN User ON Hand.user_id=User.id". " WHERE Hand.game_id=$gameid". " GROUP BY Hand.party" ); + echo "Totals:
\n". + " \n"; while( $r = mysql_fetch_array($result,MYSQL_NUM)) - echo " FINAL SCORE: ".$r[0]." ".$r[1]."
\n"; - + echo " \n"; + echo "
".$r[0]." ".$r[1]."
\n"; $session = DB_get_session_by_gameid($gameid); $result = mysql_query("SELECT id,create_date FROM Game". @@ -1643,12 +1678,22 @@ else if(myisset("me")) DB_update_user_timestamp($uid); echo "

these are your games that haven't started yet:
\n"; - $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand". + $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player from Hand". " LEFT JOIN Game On Hand.game_id=Game.id". " WHERE Hand.user_id='$uid' AND Game.status='pre'" ); while( $r = mysql_fetch_array($result,MYSQL_NUM)) { echo "game #".$r[1]." "; + if($r[3]) + { + if($r[3]==$uid) + echo "(it's your turn)\n"; + else + { + $name = DB_get_name_by_userid($r[3]); + echo "(it's $name's turn)\n"; + }; + } 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". @@ -1658,12 +1703,22 @@ else if(myisset("me")) echo "

\n"; echo "

these are the games you are playing in:
\n"; - $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand". + $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player from Hand". " LEFT JOIN Game On Hand.game_id=Game.id". " WHERE Hand.user_id='$uid' AND Game.status='play'" ); while( $r = mysql_fetch_array($result,MYSQL_NUM)) { echo "game #".$r[1]." "; + if($r[3]) + { + if($r[3]==$uid) + echo "(it's your turn)\n"; + else + { + $name = DB_get_name_by_userid($r[3]); + echo "(it's $name's turn)\n"; + }; + } 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".