X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Ffunctions.php;h=044c6c718c286e3c97cf5b358ac89d34ba337d1c;hp=8307648975873ed49ddfb4bf66e0ec7fb0e193e7;hb=0bb6975e8b766bfe5dfd150285d8dc06b3a2832d;hpb=02b7328ec7f2c4d9eb7862553da000f386830017
diff --git a/include/functions.php b/include/functions.php
index 8307648..044c6c7 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -177,14 +177,27 @@ function compare_cards($a,$b,$game)
return 1;
if($b == 19 || $b == 20 )
return 0;
- };
- if($RULES['schweinchen']=='second' && $GAME['schweinchen-second'])
+ }
+ else if($RULES['schweinchen']=='second' && $GAME['schweinchen-second'])
{
if($a == 19 || $a == 20 )
return 1;
if($b == 19 || $b == 20 )
return 0;
- };
+ }
+ else if($RULES['schweinchen']=='secondaftercall' && $GAME['schweinchen-who'] && $GAME['schweinchen-second'] )
+ {
+ /* check if a call was made either by the player or his partner. If so activate Schweinchen rule. */
+ if(DB_get_call_by_hash($GAME['schweinchen-who']) || DB_get_partner_call_by_hash($GAME['schweinchen-who']) )
+ {
+ if($a == 19 || $a == 20 )
+ return 1;
+ if($b == 19 || $b == 20 )
+ return 0;
+ }
+ /* if not, do nothing and the foxes are just handeled as normal trump */
+ }
+ ;
case "heart":
case "spade":
case "club":
@@ -316,17 +329,22 @@ function check_wedding($cards)
return 0;
}
-function count_trump($cards)
+function count_trump($cards,$status='pregame')
{
global $RULES;
$trump = 0;
- /* count each trump, including the foxes */
+ /* count each trump, including the foxes, since this is used to determine poverty status */
foreach($cards as $c)
if( (int)($c) <27)
$trump++;
+ /* In case we really want to know the amount of trump, we can use the status variable.
+ * This is needed for example to figure out what icon to display on the table in case of
+ * trump given back in poverty */
+ if($status=='all') return $trump;
+
/* normally foxes don't count as trump, so we substract them here
* in case someone has schweinchen, one or two of them should count as trump
* though, so we need to add one trump for those cases */
@@ -595,21 +613,39 @@ function set_gametype($gametype)
function mysort($cards,$gametype)
{
- usort ( $cards, "sort_comp" );
+ global $PREF;
+ if(isset($PREF['sorting']))
+ if($PREF['sorting']=='high-low')
+ usort ( $cards, 'sort_comp_high_low' );
+ else
+ usort ( $cards, 'sort_comp_low_high' );
+ else
+ usort ( $cards, 'sort_comp_high_low' );
return $cards;
}
-function sort_comp($a,$b)
+function sort_comp_high_low($a,$b)
{
global $CARDS;
$ALL = array();
- $ALL = array_merge($CARDS["trump"],$CARDS["diamonds"],$CARDS["clubs"],
- $CARDS["hearts"],$CARDS["spades"]);
+ $ALL = array_merge($CARDS['trump'],$CARDS['diamonds'],$CARDS['clubs'],
+ $CARDS['hearts'],$CARDS['spades']);
return pos_array($a,$ALL)-pos_array($b,$ALL);
}
+function sort_comp_low_high($a,$b)
+{
+ global $CARDS;
+
+ $ALL = array();
+ $ALL = array_merge($CARDS['trump'],$CARDS['diamonds'],$CARDS['clubs'],
+ $CARDS['hearts'],$CARDS['spades']);
+
+ return -pos_array($a,$ALL)+pos_array($b,$ALL);
+}
+
function can_call($what,$hash)
{
global $RULES;
@@ -696,7 +732,7 @@ function can_call($what,$hash)
function display_table ()
{
- global $gameid, $GT, $debug,$INDEX,$defaulttimezone;
+ global $gameid, $GT, $debug,$INDEX,$defaulttimezone,$session;
global $RULES,$GAME,$gametype;
$result = DB_query("SELECT User.fullname as name,".
@@ -746,14 +782,14 @@ function display_table ()
{
$userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
$cards = DB_get_all_hand($userhash);
- $trumpNR = count_trump($cards);
+ $trumpNR = count_trump($cards,'all');
if($trumpNR)
- echo " ";
+ echo " ";
else
- echo " ";
+ echo " ";
}
else
- echo " \" />";
+ echo " \" title=\"poverty partner\" />";
if($GT=="dpoverty")
if($party=="re")
@@ -761,79 +797,79 @@ function display_table ()
{
$userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
$cards = DB_get_all_hand($userhash);
- $trumpNR = count_trump($cards);
+ $trumpNR = count_trump($cards,'all');
if($trumpNR)
- echo " ";
+ echo " ";
else
- echo " ";
+ echo " ";
}
else
- echo " \" />";
+ echo " \" title=\"poverty partner\" />";
else
if($sickness=="poverty")
{
$userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
$cards = DB_get_all_hand($userhash);
- $trumpNR = count_trump($cards);
+ $trumpNR = count_trump($cards,'all');
if($trumpNR)
- echo " ";
+ echo " ";
else
- echo " ";
+ echo " ";
}
else
- echo " \" />";
+ echo " \" title=\"poverty2 partner\" />";
if($GT=="wedding" && $party=="re")
if($sickness=="wedding")
- echo " ";
+ echo " ";
else
- echo " ";
+ echo " ";
if(ereg("solo",$GT) && $party=="re")
{
if(ereg("queen",$GT))
- echo " ";
+ echo " ";
else if(ereg("jack",$GT))
- echo " ";
+ echo " ";
else if(ereg("club",$GT))
- echo " ";
+ echo " ";
else if(ereg("spade",$GT))
- echo " ";
+ echo " ";
else if(ereg("heart",$GT))
- echo " ";
+ echo " ";
else if(ereg("trumpless",$GT))
- echo " ";
+ echo " ";
else if(ereg("trump",$GT))
- echo " ";
+ echo " ";
}
/* add point calls */
if($call!=NULL)
{
if($party=="re")
- echo " ";
+ echo " ";
else
- echo " ";
+ echo " ";
switch($call)
{
case "0":
- echo " ";
+ echo " ";
break;
case "30":
- echo " ";
+ echo " ";
break;
case "60":
- echo " ";
+ echo " ";
break;
case "90":
- echo " ";
+ echo " ";
break;
}
}
echo "
\n";
- echo " local time\n";
- echo " last login\n";
+ echo " time info\n";
echo " \n";
}
@@ -844,14 +880,14 @@ function display_table ()
}
-function display_user_menu()
+function display_user_menu($id)
{
- global $WIKI,$myid,$INDEX;
+ global $WIKI,$INDEX;
$result = DB_query("SELECT Hand.hash,Hand.game_id,Game.player from Hand".
" LEFT JOIN Game On Hand.game_id=Game.id".
- " WHERE Hand.user_id='$myid'".
- " AND Game.player='$myid'".
+ " WHERE Hand.user_id='$id'".
+ " AND ( Game.player='$id' OR ISNULL(Game.player) )".
" AND Game.status<>'gameover'".
" ORDER BY Game.session" );
@@ -865,7 +901,8 @@ function display_user_menu()
}
$i++;
- echo "game ".DB_format_gameid($r[1])."
\n";
+ echo "game ".DB_format_gameid($r[1])."
\n";
if($i>4)
{
echo "...
\n";
@@ -907,11 +944,12 @@ function generate_score_table($session)
foreach($gameids as $gameid)
{
$re_score = DB_get_score_by_gameid($gameid);
+ $gametype = DB_get_gametype_by_gameid($gameid);
foreach($player as $id=>$points)
{
$party = DB_get_party_by_gameid_and_userid($gameid,$id);
if($party == "re")
- if(DB_get_gametype_by_gameid($gameid)=="solo")
+ if($gametype=="solo")
$player[$id] += 3*$re_score;
else
$player[$id] += $re_score;
@@ -921,7 +959,7 @@ function generate_score_table($session)
$score[$i]['gameid'] = $gameid ;
$score[$i]['players'] = $player;
$score[$i]['points'] = abs($re_score);
- $score[$i]['solo'] = (DB_get_gametype_by_gameid($gameid)=="solo");
+ $score[$i]['solo'] = ($gametype=="solo");
$i++;
}
@@ -950,12 +988,14 @@ function generate_global_score_table()
foreach($gameids as $gameid)
{
$re_score = DB_get_score_by_gameid($gameid);
+ $gametype = DB_get_gametype_by_gameid($gameid);
+
/* TODO: this shouldn't loop over all players, just the 4 players that are in the game */
foreach($player as $key=>$pl)
{
$party = DB_get_party_by_gameid_and_userid($gameid,$pl['id']);
if($party == "re")
- if(DB_get_gametype_by_gameid($gameid)=="solo")
+ if($gametype=="solo")
$player[$key]['points'] += 3*$re_score;
else
$player[$key]['points'] += $re_score;
@@ -996,7 +1036,9 @@ function format_score_table_ascii($score)
if(sizeof($score)==0)
return "";
- // if(sizeof($score)>5) $header.= " ... \n";
+ /* truncate table if we have too many games */
+ $max = sizeof($score);
+ if($max>6) $output.=" (table truncated to last 6 games)\n";
/* output header */
foreach($score[0]['players'] as $id=>$points)
@@ -1004,18 +1046,16 @@ function format_score_table_ascii($score)
$name = DB_get_name('userid',$id); /*TODO*/
$output.= " ".substr($name,0,2)." |";
}
- $output.=" P |\n ";
+ $output.=" P |\n";
$output.= "------+------+------+------+------+\n";
- $max = sizeof($score);
+ /* output score for each game */
$i=0;
-
- if($i<$max-6) $output.=" ...\n";
-
foreach($score as $game)
{
$i++;
if($i-1<$max-6) continue;
+
foreach($game['players'] as $id=>$points)
$output.=str_pad($points,6," ",STR_PAD_LEFT)."|";
$output.=str_pad($game['points'],4," ",STR_PAD_LEFT);
@@ -1038,40 +1078,66 @@ function format_score_table_html($score,$userid)
if(sizeof($score)==0)
return "";
- $output = "
No | "; + $header = ""; + $header.= " \n||||||
---|---|---|---|---|---|---|
No | "; foreach($score[0]['players'] as $id=>$points) { $name = DB_get_name('userid',$id); /*TODO*/ - $output.= "".substr($name,0,2)." | "; + $header.= "".substr($name,0,2)." | "; } - $output.="P | \nP | \n \n \n"; + /* use the same as footer */ + $footer = ""; + $footer.= " \n||
No | "; + foreach($score[0]['players'] as $id=>$points) + { + $name = DB_get_name('userid',$id); /*TODO*/ + $footer.= "".substr($name,0,2)." | "; + } + $footer.="P | \n||||
$i | "; + /* create link to old games only if you are logged in and its your game*/ + if(isset($_SESSION['id']) && $_SESSION['id']==$userid) + $body.="$i | "; + else + $body.="$i | "; + foreach($game['players'] as $id=>$points) - $output.="".$points." | "; - $output.="".$game['points']; + $body.=" | ".$points." | "; + $body.="".$game['points']; /* check for solo */ if($game['solo']) - $output.= " S"; - $output.=" |