$num_obj = pg_fetch_object($num_pg, 0);
$table->points_n = $num_obj->points_n;
- $tot_sql = sprintf("SELECT sum(p.pts) AS pts
+ // TAG: POINTS_MANAGEMENT
+ $tot_sql = sprintf("SELECT sum(p.pts * (2^g.mult)) AS pts
FROM %sbin5_games AS g, %sbin5_points AS p, %susers AS u,
%sbin5_table_orders AS o
WHERE g.mcode = %d AND g.code = p.gcode AND p.ucode = u.code
$u = 0;
foreach ($users as $user) {
- $pts_sql = sprintf("SELECT p.pts AS pts
+ // TAG: POINTS_MANAGEMENT
+ $pts_sql = sprintf("SELECT p.pts AS pts, g.mult AS mult
FROM %sbin5_points as p, %sbin5_games as g
WHERE p.gcode = g.code AND g.mcode = %d AND p.ucode = %d
ORDER BY g.code ASC
log_crit(sprintf("%s::%s: number of points great than number of games", __CLASS__, __FUNCTION__));
return (FALSE);
}
+ // TAG: POINTS_MANAGEMENT
for ($i = 0 , $ct = $table->points_n - $pts_n; $ct < $table->points_n ; $ct++, $i++) {
$pts_obj = pg_fetch_object($pts_pg, $i);
- $table->points[$ct % MAX_POINTS][$u] = $pts_obj->pts;
+ $table->points[$ct % MAX_POINTS][$u] = $pts_obj->pts * pow(2, $pts_obj->mult);
}
$tot_obj = pg_fetch_object($tot_pg, $u);
$table->total[$u] = $tot_obj->pts;
function multer($is_new)
{
if ($is_new) {
- // return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt));
return (static::s_multer($this->mult, $this->asta_pnt));
}
else {
- // return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt));
return (static::s_multer($this->old_mult, $this->old_asta_pnt));
}
}
return (pow(2, $mult) * static::asta2mult($pnt));
}
+ static function s_point_calc($pnt_done, $mult, $pnt_req, $is_allpoints)
+ {
+ return ($pnt_done * static::s_multer($mult, $pnt_req) * ($is_allpoints ? 2 : 1));
+ }
+
// function bunch_create_old() function AND
// {
// $ret = array();
{
GLOBAL $G_all_points, $G_dbasetype;
- $pts = array();
+ $pnts_sav = array();
$this->old_act = $action;
if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct
$this->old_pnt = 0;
$this->mult_inc(1);
for ($i = 0 ; $i < PLAYERS_N ; $i++) {
- $pts[$i] = 0;
+ $pnts_sav[$i] = 0;
}
$game_delta = 1;
$this->mult_inc(1);
for ($i = 0 ; $i < PLAYERS_N ; $i++) {
- $pts[$i] = 0;
+ $pnts_sav[$i] = 0;
}
// Non si cambia mazzo se si abbandona la partita
$this->points[$this->points_n % MAX_POINTS] = array();
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$this->points[$this->points_n % MAX_POINTS][$i] = 0;
- $pts[$i] = 0;
+ $pnts_sav[$i] = 0;
}
$this->points_n++;
$this->old_pnt = $pro;
$this->mult_inc(1);
- // return($pts);
break;
}
else
$sig = -1;
+ // TAG: POINTS_MANAGEMENT
$this->points[$this->points_n % MAX_POINTS] = array();
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
if ($i == $this->asta_win)
- $pt = ($i == $this->friend ? 4 : 2);
+ $pnt = ($i == $this->friend ? 4 : 2);
else if ($i == $this->friend)
- $pt = 1;
+ $pnt = 1;
else
- $pt = -1;
+ $pnt = -1;
- log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pt));
+ log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pnt));
- $pt = $pt * $sig * $this->multer(TRUE) * ($pro == 120 ? 2 : 1);
+ $pnt_sav = static::s_point_calc($pnt * $sig, 0, $this->asta_pnt, ($pro == 120));
+ $pnt_tab = static::s_point_calc($pnt * $sig, $this->mult, $this->asta_pnt, ($pro == 120));
- log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $this->multer(TRUE), ($pro == 120 ? 2 : 1)));
-
- $this->points[$this->points_n % MAX_POINTS][$i] = $pt;
- $this->total[$i] += $pt;
- $pts[$i] = $pt;
+ $this->points[$this->points_n % MAX_POINTS][$i] = $pnt_tab;
+ $this->total[$i] += $pnt_tab;
+ $pnts_sav[$i] = $pnt_sav;
}
$this->points_n++;
$this->old_pnt = $pro;
$this->old_asta_win = $this->asta_win;
$this->mult_set(0);
-
- // return($pts);
} while (0);
$game_delta = 1;
}
$ucodes[$i] = $user_cur->code_get();
/* pro log */
- $plist .= '|'.xcapelt($user_cur->name).'|'.$pts[$i];
+ $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i];
$codes .= '|'.xcapelt($user_cur->code_get());
}
$plist .= $codes;
require_once("../Obj/dbase_".$G_dbasetype.".phh");
if (($bdb = BriskDB::create()) != FALSE) {
- $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pts);
+ $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pnts_sav);
unset($bdb);
}
else {
$ret = "";
$user = $bri->user[$table->player[$table_pos]];
+ // TAG: POINTS_MANAGEMENT
$pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS;
$noty = sprintf('<table class=\"points\"><tr><th></th>');
fprintf($fpexp, "<%s class='%s'>%d</%s>",
($tmt_obj->minus_one_is_old == -1 ? "td" : "th"),
- $cla_nam, $pts,
+ $cla_nam, pow(2,$gam_obj->mult) * $pts,
($tmt_obj->minus_one_is_old == -1 ? "td" : "th"));
}
if ($tmt_obj->minus_one_is_old != -1) {
// LISTA DEI TOTALI
fprintf($fpexp, "<tr>");
for ($u = 0 ; $u < BIN5_PLAYERS_N ; $u++) {
+ // NOTE: this part must be revisited when we move to multiple game rules
+ // probably removing the sum and adding another nested iteration on games.
$tot_sql = sprintf("
-SELECT SUM(p.pts) AS pts FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u
-WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND ( (u.type & (CAST (X'00ff0000' as integer))) <> (CAST (X'00800000' as integer)) ) AND m.code = %d AND u.code = %d", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx,
+SELECT sum(p.pts * (2^g.mult)) AS pts
+ FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u
+ WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode
+ AND ( (u.type & (CAST (X'00ff0000' as integer))) <> (CAST (X'00800000' as integer)) )
+ AND m.code = %d AND u.code = %d",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx,
$tmt_obj->code, $users[$u]['code']);
if (($tot_pg = pg_query($bdb->dbconn->db(), $tot_sql)) == FALSE ) {
break;
return ($ret);
}
-// echo "QUIr\n";
-// exit(123);
function main()
{
GLOBAL $G_lang, $G_dbasetype, $G_alarm_passwd, $pazz, $from, $to;