fi
pp="$(dirname "$pp")"
done
-
+
return 1
}
echo " test_add: \"$test_add\""
if [ ! -z "$outconf" ]; then
- (
+ (
echo "#"
echo "# Produced automatically by brisk::INSTALL.sh"
echo "#"
exit 3
fi
rm $ftokk_path/spy.txt
-
+
# create the fs subtree to enable ftok-ing
touch ${ftokk_path}/main
chmod 666 ${ftokk_path}/main
fi
install -d ${web_path}__
for i in $(find web -type d | grep '/' | sed 's/^....//g'); do
- install -d ${web_path}__/$i
+ install -d ${web_path}__/$i
done
for i in $(find web -name '.htaccess' -o -name '*.php' -o -name '*.phh' -o -name '*.pho' -o -name '*.css' -o -name '*.js' -o -name '*.mp3' -o -name '*.swf' -o -name 'terms-of-service*' | sed 's/^....//g'); do
BUGS |
------+
+ - /cont and /rules just during 'bidding' phase
DONE - Not sequence of 3 same chars
DONE . check server side with test
DONE - Global vars checker
FEATURES |
----------+
+ * multiple rules
+ DONE - show current rules
+ DONE - select tournment dropdown menu (send a 'cont' like message for each change)
+ WIP - new rules for 'together for fun' turnment
+ DONE . strange 4 abandoned rule for auction
+ DONE . check of max points
+ DONE . check of suit at the end of bet
+
+ DONE - increase constraint for rules change
+ DONE - select rules dropdown 'selected' to the current rule or the current
+
+ POSTPONED - no points multiplication for abandon
+ POSTPONED - cache data structure for tournments
+ POSTPONED . reload on SIGHUP
+
+
WIP * inherited info
* Users Network construction
DONE - sql
--- /dev/null
+#!/bin/bash
+# set -x
+declare -a coor pids
+#coor[0]="0,0,0,560,650"
+#coor[1]="0,443,108,560,650"
+#coor[2]="0,878,197,560,650"
+coor[0]="0,0,0,840,975"
+coor[1]="0,863,0,840,975"
+coor[2]="0,1712,0,840,975"
+coor[3]="0,863,300,840,975"
+coor[4]="0,1712,300,840,975"
+
+
+# TODO: pids2wids function IN: pids OUT: associated windows ids
+
+ffox () {
+ if [ "$1" = "-v" ]; then
+ ps ax | egrep '[0-9] /usr/lib/firefox/firefox -no-remote -P (one|two|three|four|five) ' | grep -v grep | sed 's/^ *//g;s/ .*-P//g;s/ http.*//g'
+ else
+ ps ax | egrep '[0-9] /usr/lib/firefox/firefox -no-remote -P (one|two|three|four|five) ' | grep -v grep | sed 's/^ *//g;s/ .*//g'
+ fi
+}
+
+rearrange_windows () {
+ ct=0
+ while true; do
+ sleep 1
+ wids="$(wmctrl -l -p | sed 's/ \+/|/g' | cut -d '|' -f 1,3 | egrep "\|(${pids[0]}|${pids[1]}|${pids[2]}|${pids[3]}|${pids[4]})$")"
+ l="$(echo "$wids" | wc -l)"
+ if [ $l -eq 5 ]; then
+ for i in $(seq 0 4); do
+ wid="$(echo "$wids" | grep "|${pids[$i]}\$" | cut -d '|' -f 1)"
+ wmctrl -i -r $wid -e ${coor[$i]}
+ echo wmctrl out: $?
+ done
+ break
+ fi
+ ct=$((ct + 1))
+ if [ $ct -gt 10 ]; then
+ break
+ fi
+ done
+}
+
+#
+# MAIN
+#
+HOMEPAGE="http://dodo.birds.van/brisk/index.php"
+if [ "$1" = "help" -o "$1" = "-h" -o "$1" = "--help" ]; then
+ echo "$0 - run firefoxes"
+ echo "$0 list [-v] - list firefoxes"
+ echo "$0 <stop|cont|term|kill> - send signal to firefoxes"
+ echo "$0 help - this help"
+elif [ "$1" = "list" ]; then
+ ffox $2
+elif [ "$1" = "stop" -o "$1" = "cont" -o "$1" = "term" -o "$1" = "kill" ]; then
+ case "$1" in
+ stop) sig=-STOP ;;
+ cont) sig=-CONT ;;
+ term) sig=-TERM ;;
+ kill) sig=-KILL ;;
+ esac
+
+ kill $sig $(ffox)
+elif [ "$1" = "rearrange" ]; then
+ list="$($0 list -v)"
+ declare -a pids
+ ct=0
+ for i in one two three four five; do
+ pids[$ct]="$(echo "$list" | grep -- " $i$" | sed 's/ .*//g')"
+ ct=$((ct + 1))
+ done
+ rearrange_windows
+elif [ $# -eq 0 ]; then
+ ct=0
+ for i in one two three four five; do
+ firefox -no-remote -P $i "$HOMEPAGE?whoami=$i" &
+ pd="$!"
+ echo "$i: $pd"
+ pids[$ct]="$pd"
+ ct=$((ct + 1))
+ done
+
+ rearrange_windows
+fi
--- /dev/null
+#!/bin/bash
+# set -x
+export PATH=/home/nastasi/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
+
+CONFIG_FILE="$HOME/.brisk_install"
+
+# default values
+web_url="http://localhost/brisk"
+admin_password=""
+if [ -f "$CONFIG_FILE" ]; then
+ source "$CONFIG_FILE"
+ conffile_in="$CONFIG_FILE"
+fi
+
+tty -s
+is_a_tty=$?
+if [ -z "$admin_password" ]; then
+ if [ "$is_a_tty" -eq 0 ]; then
+ read -s -p "Please insert admin password (no echo): " admin_password
+ else
+ echo "Incomplete configuration"
+ exit 1
+ fi
+fi
+
+# now="$(date -d '2014-01-21 23:56:00' +%s)"
+now="$(date +%s)"
+delta="86400"
+
+to="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "($now / 86400) * 86400 + 7200 + $delta" | bc))"
+from="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "($now / 86400) * 86400 + 7200 - (86400) + $delta" | bc))"
+# to="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$now + 7200 + $delta" | bc))"
+# from="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$now - 9200 + $delta" | bc))"
+
+curl -d "pazz=$admin_password" "$web_url/briskin5/stat-day.php?from=$from&to=$to"
--- /dev/null
+#!/bin/bash
+set -x
+B_HOSTNAME="http://localhost/brisk"
+export PATH=/home/nastasi/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
+curl -d 'pazz=yourpasswd' "$B_HOSTNAME/briskin5/statadm.php"
--- /dev/null
+-- add tourn_pts to bin5_games table
+ALTER TABLE #PFX#bin5_games DROP COLUMN tourn_pts;
+ALTER TABLE #PFX#bin5_games ADD COLUMN tourn_pts integer DEFAULT -1; -- points at the beginning of the hand
+
--- /dev/null
+-- from:
+-- INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (1, 1, 'normal match');
+-- INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (2, 1, 'special match');
+
+UPDATE #PFX#bin5_tournaments SET (name) = ('old rules: with draw') WHERE code = 1;
+UPDATE #PFX#bin5_tournaments SET (name) = ('new rules: without draw') WHERE code = 2;
+INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (3, 1, 'special match');
--- /dev/null
+-- new tournment id of 'insieme per gioco' tournment
+INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (4, 1, 'together for fun');
$G_lng = langtolng($G_lang);
$G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
-$G_brisk_version = "5.2.1";
+$G_brisk_version = "5.4.1";
/* MLANG: ALL THE INFO STRINGS IN brisk.phh */
-$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: puoi creare la tua rete di amicizie con /info, vedere cosa pensano i tuoi amici degli altri utenti e ci sono i nuovi tavoli riservati per registrati e apprendisti, corretti alcuni errori.',
+$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: potete scegliere che regole usare per giocare dal menu "Prefs" al tavolo, descrizioni più consistenti.',
'Se vuoi iscriverti alla <a target="_blank" href="mailto:ml-briscola+subscribe@milug.org">Mailing List</a>, cliccala!' ),
'en' => array ( 'EN Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: puoi creare la tua rete di amicizie con /info,',
'vedere cosa pensano i tuoi amici degli altri utenti e tavoli riservati per registrati e apprendisti.',
}
$gam_obj = pg_fetch_object($gam_pg, 0);
- $table->old_reason = game_description($gam_obj->act, 'html', $gam_obj->mult,
- $gam_obj->asta_win, ($gam_obj->asta_win != -1 ?
- $users[$gam_obj->asta_win]['login'] : ""),
- $gam_obj->friend, ($gam_obj->friend != -1 ?
- $users[$gam_obj->friend]['login'] : ""),
- $gam_obj->pnt, $gam_obj->asta_pnt);
-
// update matches with new ttok and table idx
$mtc_sql = sprintf("UPDATE %sbin5_matches SET (ttok, tidx) = ('%s', %d) WHERE code = %d RETURNING *;",
$G_dbpfx, $sql_ttok, $tidx, $match_code);
log_crit(sprintf("%s::%s: update matches table failed", __CLASS__, __FUNCTION__));
return (FALSE);
}
+ $mtc_obj = pg_fetch_object($mtc_pg, 0);
+
+ $old_rules = $table->rules;
+ $rules_name = rules_id2name($mtc_obj->tcode);
+ $table->rules = new $rules_name($table);
+ unset($old_rules);
+
+ $table->old_reason = ${rules_name}::game_description($gam_obj->act, 'html', $gam_obj->mult,
+ $gam_obj->asta_win, ($gam_obj->asta_win != -1 ?
+ $users[$gam_obj->asta_win]['login'] : ""),
+ $gam_obj->friend, ($gam_obj->friend != -1 ?
+ $users[$gam_obj->friend]['login'] : ""),
+ $gam_obj->pnt, $gam_obj->asta_pnt, $gam_obj->tourn_pts);
+
return (TRUE);
}
if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) {
// match not exists, insert it
- $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next) VALUES ('%s', %d, %d, %d) RETURNING *;",
- $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult);
+ // , BIN5_TOURNAMENT_NO_DRAW
+ $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next, tcode) VALUES ('%s', %d, %d, %d, %d) RETURNING *;",
+ $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult, $table->rules->id_get());
if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_affected_rows($mtc_pg) != 1) {
log_crit(sprintf("bin5_points_save: failed at insert match [%s]", $mtc_sql));
break;
/*
* games management
*/
- $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult)
- VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d) RETURNING *;",
+ $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult, tourn_pts)
+ VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d, %d) RETURNING *;",
$G_dbpfx, $mtc_obj->code, $date, $action,
$table->old_asta_pnt, $table->old_pnt,
$table->old_asta_win,
$table->old_friend,
- $table->old_mazzo, $table->old_mult);
+ $table->old_mazzo, $table->old_mult,
+ $table->old_tourn_pts);
if (($gam_pg = $this->query($gam_sql)) == FALSE || pg_affected_rows($gam_pg) != 1) {
log_crit(sprintf("bin5_points_save: failed at insert game [%s]", $gam_sql));
break;
}
}
}
- if ($G_with_splash &&
+ // if ($G_with_splash &&
+ if ($this->is_auth() && (! $this->is_appr()) && $G_with_splash &&
($splashdate < $curtime - $G_splash_interval ||
$splashdate > $curtime)) {
$is_super = $this->flags & USER_FLAG_TY_SUPER;
}
body {
- background-image: url('img/najole_wh.png');
+ background-image: url('img/lines.png');
background-color: #fafafa;
background-attachment: fixed;
margin: 0px;
-moz-border-radius: 8px;
border-radius: 8px;
- background-image: url('img/najole_wh_light.png');
+ background-image: url('img/lines_light.png');
background-attachment: fixed;
top: 0;
define('BIN5_SHM_DLT', 32768);
define('BIN5_PROXY_PATH', PROXY_PATH."/bin5");
-define('BIN5_RULES_OLDSCHEMA', -1);
-define('BIN5_RULES_FINISH', 0);
-define('BIN5_RULES_ABANDON', 1);
-define('BIN5_RULES_ALLPASS', 2);
+require_once('rules.phh');
+
+define('BIN5_TOURNAMENT_CURRENT', BIN5_TOURNAMENT_NO_DRAW);
$mlang_bin5_bin5 = array(
// br, hr, b, /b, win, fri
'en' => '%3$slast hand%4$s'),
'info_curr' => array( 'it' => '%3$smano corrente%4$s',
'en' => '%3$scurrent hand%4$s'),
- // br, hr, b, /b, win, fri
- 'info_part' => array( 'it' => 'Ha chiamato %3$s%5$s%4$s, il socio era %3$s%6$s%4$s,%1$s',
- 'en' => 'The declarer was %3$s%5$s%4$s, the partner was %3$s%6$s%4$s,%1$s'),
- // br, hr, b, /b
- 'info_capp' => array( 'it' => 'hanno fatto %3$scappotto%4$s EBBRAVI!.%1$s',
- 'en' => 'and they made %3Dscapot%4$s WELL DONE!.%1$s'),
-
- // br, hr, b, /b, old_asta_pnt, old_pnt, winornot
- 'info_alea' => array( 'it' => 'dovevano fare %3$salmeno %5$d%4$s punti e ne hanno fatti %3$s%6$d%4$s: hanno %7$s.%1$s',
- 'en' => 'they had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: they have %7$s.%1$s'),
- // br, hr, b, /b, old_pnt, winornot
- 'info_more' => array( 'it' => 'dovevano fare %3$spiù di 60%4$s punti e ne hanno fatti %3$s%5$d%4$s: hanno %6$s.%1$s',
- 'en' => 'they had to do %3$sover 60%4$s points and they had made %3$s%5$d%4$s: they have %3$s%6$s%4$s.%1$s'),
- 'info_win' => array( 'it' => 'vinto',
- 'en' => 'win'),
- 'info_peer' => array( 'it' => 'pareggiato',
- 'en' => 'drew'),
- 'info_lost' => array( 'it' => 'perso',
- 'en' => 'lost'),
-
- // br, hr, b, /b, win_name
- 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano,%1$s',
- 'en' => '%3$s%5$s%4$s play alone against each other,%1$s'),
- // br, hr, b, /b, old_asta_pnt, old_pnt, winornot
- 'info_aleaa' => array( 'it' => 'doveva fare %3$salmeno %5$d%4$s punti e ne ha fatti %3$s%6$d%4$s: ha %3$s%7$s%4$s.%1$s',
- 'en' => 'he/she had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: he/she had %3$s%7$s%4$s.%1$s'),
- // br, hr, b, /b, old_pnt, winornot
- 'info_morea' => array( 'it' => 'doveva fare %3$spiù di 60%4$s punti e ne ha fatti %3$s%5$d%4$s: ha %3$s%6$s%4$s.%1$s',
- 'en' => 'he/she had to do %3$smore than 60%4$s points and they had made %3$s%5$d%4$s: he/she had %3$s%6$s%4$s.%1$s'),
- // br, hr, b, /b
- 'info_acap' => array( 'it' => 'ha fatto %3$scappotto%4$s EBBRAVO!.%1$s',
- 'en' => 'and he/she made %3$scapot%4$s WELL DONE!.%1$s'),
-
- // br, hr, b, /b
- 'info_omul' => array( 'it' => '%1$sLa partita valeva %3$s%5$s%4$s.%1$s',
- 'en' => '%1$sEN: The game was worth %3$s%5$s%4$s.%1$s' ),
-
- // br, hr, b, /b
- 'info_alpa' => array( 'it' => '%1$sHanno passato %3$stutti%4$s.%1$s',
- 'en' => '%1$sEN: Hanno passato %3$stutti%4$s.%1$s' ),
-
- // br, hr, b, /b, aband-name
- 'info_aban' => array( 'it' => ' Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.',
- 'en' => ' EN: Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.'),
-
+ 'info_yshuf'=> array( 'it' => 'Fai <b>tu</b> il mazzo, ',
+ 'en' => 'It\'s <b>your</b> shuffled the cards, '),
'info_shuf' => array( 'it' => 'Il mazzo a <b>%s</b>, ',
'en' => '<b>%s</b> shuffled the cards, '),
'info_yturn'=> array( 'it' => ' tocca a <b>te</b> giocare.',
'en' => 'it\'s the <b>%s</b>\'s turn.'),
'info_mult' => array( 'it' => ' La partita vale <b>%s</b>.',
'en' => ' The game worth <b>%s</b>.' ),
- 'info_yshuf'=> array( 'it' => 'Fai <b>tu</b> il mazzo, ',
- 'en' => 'It\'s <b>your</b> shuffled the cards, '),
'info_match'=> array( 'it' => 'Il codice della partita è <b>%d</b>.',
'en' => 'Match code is <b>%d</b>.'),
+
'btn_bkgame'=> array( 'it' => 'torna alla partita',
'en' => 'back to the game'),
'call_wptn' => array( 'it' => '<br>con %d punti',
return (sprintf(($G_lang == 'en' ? "%d-ple" : "%d-plo"), $mult));
}
+function dom_select_rules()
+{
+ GLOBAL $G_lang;
+
+ $ret = "<select id='select_rules'>\n";
+ foreach (rules_keys() as $key) {
+ $value = rules_id2descr($key, $G_lang);
+ $ret .= sprintf("<option value='%d'>%s</option>\n", $key, $value);
+ }
+ $ret .= "</select>\n";
+
+ echo "$ret";
+}
class Card {
var $value; /* 0 - 39 card value */
} // end class Card
class Bin5_table extends Table {
- var $card; // il mazzo di carte
- var $mazzo; // chi e' di mazzo
- var $gstart;
- var $turn;
+ var $card; // il mazzo di carte
+ var $mazzo; // chi e' di mazzo
+ var $gstart; // first player of the current game
+ var $turn; // turn in the game (absolute, not modularized)
- var $asta_pla;
- var $asta_pla_n;
- var $asta_card;
- var $asta_pnt;
+ var $asta_pla; // array(); TRUE: in auction, FALSE: out of the auction
+ var $asta_pla_n; // number of players in auction
+ var $asta_card; // current card for auction
+ var $asta_pnt; // current point for auction
var $mult;
- var $points; // points array
- var $points_n; // number of row of points
+ var $points; // points array
+ var $points_n; // number of row of points
var $total;
var $asta_win; // the caller idx position at table
var $briscola;
+ var $tourn_pts; // points in the caller hand
var $friend; // the callee idx position at table
var $match_id; // the id of the match on the database (-1 == just not saved)
var $old_asta_win; // the old caller idx position at table
var $old_friend; // the old callee idx position at table
+ var $old_tourn_pts; // the old tournment computed points in the hand of caller
+ var $rules;
+
function Bin5_table()
{
}
$thiz->total = array( 0, 0, 0, 0, 0);
$thiz->asta_win = -1;
$thiz->briscola = -1;
+ $thiz->tourn_pts = -1;
$thiz->friend = -1;
$thiz->turn = 0;
$thiz->asta_win = $from->asta_win;
$thiz->briscola = $from->briscola;
+ $thiz->tourn_pts = $from->tourn_pts;
$thiz->friend = $from->friend;
$thiz->match_id = $from->match_id;
function spawn(&$from)
{
+ GLOBAL $G_lang;
if (($thiz =& new Bin5_table()) == FALSE)
return (FALSE);
$thiz->card = array();
$thiz->bunch_create();
- $thiz->mazzo = rand(0,PLAYERS_N-1);
+ $thiz->mazzo = rand(0,PLAYERS_N-1);
$thiz->points = array();
$thiz->total = array();
$thiz->points_n = 0;
$thiz->old_asta_win = -1;
$thiz->old_reason = "";
+ $rules_name = rules_id2name(BIN5_TOURNAMENT_CURRENT);
+ $thiz->rules = new $rules_name($thiz);
// players are rearranged in an dedicated array
$thiz->player = array();
for ($i = 0 ; $i < $from->player_n ; $i++)
return ($thiz);
}
- static function asta2mult($asta_pnt)
- {
- if ($asta_pnt > 110)
- return (6);
- else if ($asta_pnt > 100)
- return (5);
- else if ($asta_pnt > 90)
- return (4);
- else if ($asta_pnt > 80)
- return (3);
- else if ($asta_pnt > 70)
- return (2);
- else
- return (1);
- }
-
- function multer($is_new)
- {
- if ($is_new) {
- return (static::s_multer($this->mult, $this->asta_pnt));
- }
- else {
- return (static::s_multer($this->old_mult, $this->old_asta_pnt));
- }
- }
-
- static function s_multer($mult, $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
// {
$this->asta_pnt = 60;
$this->asta_win = -1;
$this->briscola = -1;
+ $this->tourn_pts = -1;
$this->friend = -1;
$this->turn = 0;
$user_cur->asta_card = -2;
$user_cur->asta_pnt = -1;
$user_cur->handpt = $this->hand_points($i);
+ $this->rules->tourn_points($user_cur, $i);
}
log_rd2("GEND 4");
}
return ($ct);
}
- function rules_engine(&$bri, $curtime, $action, $user)
- {
- GLOBAL $G_all_points, $G_dbasetype;
-
- $pnts_sav = array();
-
- if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct
- $this->old_act = $action;
- $this->old_asta_win = -1;
- $this->old_pnt = 0;
- $this->mult_inc(1);
- for ($i = 0 ; $i < PLAYERS_N ; $i++) {
- $pnts_sav[$i] = 0;
- }
-
- $game_delta = 1;
- // $this->game_next(1);
- $this->game_init($bri->user);
- }
- else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct
- if (!($user->handpt <= 2)) {
- return (FALSE);
- }
- $this->old_act = $action;
- log_wr(sprintf("GIOCO FINITO !!!"));
- $this->old_asta_win = $user->table_pos;
- $this->old_pnt = 0;
- $this->mult_inc(1);
-
- for ($i = 0 ; $i < PLAYERS_N ; $i++) {
- $pnts_sav[$i] = 0;
- }
-
- // Non si cambia mazzo se si abbandona la partita
- $game_delta = 0;
- // $this->game_next(0);
- $this->game_init($bri->user);
- }
- else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct
- $this->old_act = $action;
- do {
- $pro = 0;
-
- if ($this->asta_pnt == 60)
- $this->asta_pnt = 61;
-
- $this->old_reason = "";
-
- // count points for the temporary 2 teams
- for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
- $ctt = $this->card[$i]->value % 10;
- $own = $this->card[$i]->owner;
- if ($own == $this->asta_win || $own == $this->friend)
- $pro += $G_all_points[$ctt];
- }
-
- log_wr(sprintf("PRO: [%d]", $pro));
-
- // PATTA case !
- if (game_result($this->asta_pnt, $pro) == 0) {
- $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;
- $pnts_sav[$i] = 0;
- }
- $this->points_n++;
- $this->old_pnt = $pro;
- $this->old_asta_win = $this->asta_win;
- $this->mult_inc(1);
-
- break;
- }
-
- if ($pro >= $this->asta_pnt)
- $sig = 1;
- 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)
- $pnt = ($i == $this->friend ? 4 : 2);
- else if ($i == $this->friend)
- $pnt = 1;
- else
- $pnt = -1;
-
- log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pnt));
-
- $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));
-
- $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);
- } while (0);
- $game_delta = 1;
- }
- else {
- return (FALSE);
- }
- $this->game_next($game_delta);
-
- $plist = "$this->table_token|$user->table_orig|$this->player_n";
- $ucodes = array();
- $codes = "";
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bri->user[$this->player[$i]];
-
- /* pro db */
- $ucodes[$i] = $user_cur->code_get();
-
- /* pro log */
- $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i];
- $codes .= '|'.xcapelt($user_cur->code_get());
- }
- $plist .= $codes;
- log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
-
- $this->old_asta_pnt = $this->asta_pnt;
- // $this->old_mazzo is managed by ->game_next();
- // $this->old_mult, $this->old_pnt, $this->old_reason and $this->old_asta_win are specific
-
- $this->old_friend = $this->friend;
- $this->old_reason = game_description($action, 'html', $this->old_mult,
- $this->old_asta_win,
- ($this->old_asta_win != -1 ?
- $bri->user[$this->player[$this->old_asta_win]]->name : ""),
- $this->old_friend,
- ($this->old_friend != -1 ?
- $bri->user[$this->player[$this->old_friend]]->name : ""),
- $this->old_pnt, $this->old_asta_pnt);
-
-
- if ($user->table_orig < TABLES_AUTH_N) {
- require_once("../Obj/dbase_".$G_dbasetype.".phh");
-
- if (($bdb = BriskDB::create()) != FALSE) {
- $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pnts_sav);
- unset($bdb);
- }
- else {
- log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED");
- }
- log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
- }
-
- $this->game_init($bri->user);
-
- return (TRUE);
- }
-
function match_continue(&$bri, $user, $match_id_s)
{
+ //
+ // Rules: update version following loaded tcode
+ //
$ret = FALSE;
$curtime = time();
do {
+ if ($this->match_id != -1) {
+ $msg = sprintf("Stai già giocando la partita con codice %d.", $this->match_id);
+ break;
+ }
+
/* - verify if match_id and user are both valid to accept
the match_continue request - */
$match_id = (int)$match_id_s;
break;
}
- if ($user->continue_get() == BIN5_USER_CONTINUE_ALREADY) {
- $msg = "Hai già richiesto di continuare una partita.";
- break;
- }
-
if ($user->continue_get() == $match_id) {
$msg = "Hai già richiesto di continuare questa partita.";
break;
/* - the user is in the list, add the match_id to his profile
and check if he is the N'th to require continue - */
- // set the match_id for the current user
- $user->continue_set($match_id);
-
+ $continue_tot = 0;
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$this->player[$i]];
- if ($user_cur->continue_get() != $match_id) {
- break;
+
+ if ($user == $user_cur) {
+ $continue_tot += 1;
+ continue;
}
+
+ if ($user_cur->continue_get() == BIN5_USER_CONTINUE_INIT)
+ continue;
+
+ if ($user_cur->continue_get() != $match_id)
+ break;
+ $continue_tot += 1;
}
+ if ($i < BIN5_PLAYERS_N) {
+ $msg = sprintf("<b>L'utente <i>%s</i> voleva già continuare la partita n° %d.</b>",
+ xcape($user_cur->name), $user_cur->continue_get());
+ break;
+ }
+
+ // set the match_id for the current user
+ $user->continue_set($match_id);
+
$ret = TRUE;
// not all players set the continue match than we exit
- if ($i < BIN5_PLAYERS_N) {
+ if ($continue_tot < BIN5_PLAYERS_N) {
$msg = sprintf("<b>L'utente <i>%s</i> vorrebbe continuare la partita n° %d.</b>",
xcape($user->name), $match_id);
break;
unset($bdb);
}
+ /* update rules engine */
+ $rules_name = rules_id2name($match_data['tcode']);
+ $this->rules = new $rules_name($this);
+
/* bunch and multiplier status set */
$this->mazzo = $match_data['mazzo_next'];
$this->mult = $match_data['mult_next'];
/* reload of the page with the new layout */
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$this->player[$i]];
- $user_cur->continue_set(BIN5_USER_CONTINUE_ALREADY);
$user_cur->trans_step = $user_cur->step + 1;
$user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("index.php");|', $user_cur->step+1);
}
}
+ function rules_change(&$bri, $user, $rules_id_s)
+ {
+ GLOBAL $G_lang;
+
+ //
+ // Rules: update version following loaded tcode
+ //
+ $ret = FALSE;
+ $curtime = time();
+
+ do {
+ if ($this->match_id != -1) {
+ // FIXME_LANG
+ $msg = sprintf("Stai già giocando la partita con codice %d.", $this->match_id);
+ break;
+ }
+
+ if ($this->asta_card != -1 || $this->asta_pla_n < BIN5_PLAYERS_N) {
+ // FIXME_LANG
+ $msg = sprintf("La partita è già stata avviata.");
+ break;
+ }
+
+ $rules_id = (int)$rules_id_s;
+ if (! in_array($rules_id, rules_keys())) {
+ // FIXME_LANG
+ $msg = "queste regole non esistono o non sono attive";
+ break;
+ }
+
+ if ($user->rules_get() == $rules_id) {
+ // FIXME_LANG
+ $msg = "hai già richiesto di usare queste regole";
+ break;
+ }
+
+ /* - the user is in the list, add the match_id to his profile
+ and check if he is the N'th to require continue - */
+
+ $rules_tot = 0;
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+
+ if ($user == $user_cur) {
+ $rules_tot += 1;
+ continue;
+ }
+
+ if ($user_cur->rules_get() == BIN5_USER_CONTINUE_INIT)
+ continue;
+
+ if ($user_cur->rules_get() != $rules_id)
+ break;
+ $rules_tot += 1;
+ }
+ if ($i < BIN5_PLAYERS_N) {
+ // FIXME_LANG
+ $msg = sprintf("<b>L'utente <i>%s</i> voleva già usare le %s.</b>",
+ xcape($user_cur->name), xcape(rules_id2descr($user_cur->rules_get(), $G_lang)));
+ break;
+ }
+
+ // set the match_id for the current user
+ $user->rules_set($rules_id);
+
+ $ret = TRUE;
+ // not all players set the continue match than we exit
+ if ($rules_tot < BIN5_PLAYERS_N) {
+ // FIXME_LANG
+ $msg = sprintf("<b>L'utente <i>%s</i> vorrebbe usare le %s.</b>",
+ xcape($user->name), xcape(rules_id2descr($rules_id, $G_lang)));
+ break;
+ }
+
+ /* - all users decide to continue the same match, update all infos and rearrange users
+ to the right positions on the table - */
+
+ /* update rules engine */
+ $rules_name = rules_id2name($rules_id);
+ $this->rules = new $rules_name($this);
+
+ // $this->game_init(&$bri->user);
+
+ /* reload of the page with the new layout */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ $this->rules->tourn_points($user_cur, $i);
+
+ $user_cur->rules_set(BIN5_USER_CONTINUE_INIT);
+ $user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("index.php");|', $user_cur->step+1);
+ $user_cur->step_inc();
+
+ // a void command force xynt-streamer to flush all data to client
+ $user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = "";
+ $user_cur->step_inc();
+
+ $user_cur->comm[$user_cur->step % COMM_N] = show_table(&$bri, &$user_cur, $user_cur->step+1, TRUE, FALSE);
+ $user_cur->step_inc();
+ }
+ return (TRUE);
+ } while (FALSE);
+
+ $dt = date("H:i ", $curtime);
+ if ($ret == TRUE) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
+ $user_cur->comm[$user_cur->step % COMM_N] .= nickserv_msg($dt, $msg);
+ $user_cur->step_inc();
+ }
+ }
+ else {
+ $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
+ $user->comm[$user->step % COMM_N] = xcape(sprintf("rules_set(%d);",
+ $this->rules->id));
+ $user->comm[$user->step % COMM_N] .= nickserv_msg($dt, $msg);
+ $user->step_inc();
+ }
+ } // end function rules_change
} // end class Bin5_table
define('BIN5_USER_FLAG_RING_ENDAUCT', 0x01);
define('BIN5_USER_CONTINUE_INIT', -1);
-define('BIN5_USER_CONTINUE_ALREADY', -2);
+
+define('BIN5_USER_RULES_INIT', -1);
class Bin5_user extends User {
var $asta_card; //
var $asta_pnt; //
var $privflags; // Flags for briskin5 only
var $continue; // Id of the match that the user would continue
+ var $rules; // Id of rules required by user
+
+ var $asta_tourn_pts; // array with tournment points for each suit
const BASE = "../";
$thiz->exitislock = TRUE;
$thiz->privflags = 0;
$thiz->continue = BIN5_USER_CONTINUE_INIT;
+ $thiz->rules = BIN5_USER_RULES_INIT;
return ($thiz);
}
$this->exitislock = $from->exitislock;
$this->privflags = $from->privflags;
$this->continue = $from->continue;
+ $this->rules = $from->rules;
}
/* CLONE NOT USED
$thiz->handpt = -1;
$thiz->exitislock = TRUE;
$thiz->continue = BIN5_USER_CONTINUE_INIT;
+ $thiz->rules = BIN5_USER_RULES_INIT;
log_wr("Bin5 constructor");
return ($this->continue);
}
+ function rules_set($rules_id)
+ {
+ $this->rules = $rules_id;
+ }
+
+ function rules_get() {
+ return ($this->rules);
+ }
+
} // end class Bin5_user
$match_id = substr($user_mesg, 6);
$table->match_continue($this, $user, $match_id);
}
+ else if (strncmp($user_mesg, "/rules ", 7) == 0) {
+ log_main($user->sess." chatt_send BEGIN");
+
+ $rules_id = substr($user_mesg, 7);
+ $table->rules_change($this, $user, $rules_id);
+ }
else {
for ($i = 0 ; $i < ($user->stat == 'room' ? BIN5_MAX_PLAYERS : BIN5_PLAYERS_N) ; $i++) {
if ($user->stat == 'room') {
$ret .= $table->exitlock_show($bri->user, $table_pos);
if (!$is_again) {
/* GENERAL STATUS */
- $ret .= sprintf( 'gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d;',
- $sendstep, $user->stat, $user->subst, $table_pos);
+ $user_rules = $user->rules_get();
+ $ret .= sprintf('gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d; rules_set(%d);',
+ $sendstep, $user->stat, $user->subst, $table_pos,
+ ($user_rules == BIN5_USER_CONTINUE_INIT ? $table->rules->id_get() : $user_rules));
log_rd(sprintf( 'SHOW_TABLE: gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d;', $sendstep, $user->stat, $user->subst, $table_pos));
if (!$is_again)
$ret .= table_welcome($user);
- if ($is_transition && !$is_again) { // appena seduti al tavolo, play della mucca
+ if ($is_transition && !$is_again) { // just sit, play cow
$ret .= playsound("cow.mp3");
}
$table->asta_card);
}
else {
+ // FIXME - RULES to be able to abandon table
/* show auction */
if ($table_pos == ($table->gstart % BIN5_PLAYERS_N) &&
$table->asta_win == -1)
// 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>');
+ $noty = sprintf('<p>%s.</p>\n', xcape(ucfirst(rules_id2descr($table->rules->id_get(), $G_lang))));
+ $noty .= sprintf('<table class=\"points\"><tr><th></th>');
// Names.
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++)
$noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam);
}
- $multer = $table->multer(TRUE);
+ $multer = $table->rules->multer(TRUE);
if ($multer > 1) {
$noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($multer) );
}
return ($ret);
}
-
-function game_result($asta_pnt, $pnt)
-{
- $sixty = 60;
- if ($asta_pnt == 61) {
- if ($pnt > $sixty)
- return (1);
- else if ($pnt == $sixty)
- return (0);
- else
- return (-1);
- }
- else {
- if ($pnt >= $asta_pnt)
- return (1);
- else
- return (-1);
- }
-}
-
function log_points($remote_addr, $curtime, $user, $where, $mesg)
{
if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) {
}
}
-function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?",
- $old_pnt = -1, $old_asta_pnt = -1)
-{
- GLOBAL $G_lang, $mlang_bin5_bin5;
-
- if ($form == 'html') {
- $tg_br = "<br>";
- $tg_hr = "<hr>";
- $tg_bo = "<b>";
- $tg_bc = "</b>";
- $win_name = xcape($win_name);
- $fri_name = xcape($fri_name);
- }
- else {
- $tg_br = " ";
- $tg_hr = " ";
- $tg_bo = "";
- $tg_bc = "";
- }
-
- if ($act == BIN5_RULES_OLDSCHEMA) {
- return ("");
- }
- else if ($act == BIN5_RULES_ALLPASS) {
- return (sprintf($mlang_bin5_bin5['info_alpa'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc));
- }
- else if ($act == BIN5_RULES_ABANDON) {
- return (sprintf($mlang_bin5_bin5['info_aban'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $win_name));
- }
- else {
- $wol = game_result($old_asta_pnt, $old_pnt);
-
- $noty = "";
-
- if ($win != $fri) { // not alone case
- /* MLANG: "<hr>Nell'ultima mano ha chiamato <b>%s</b>, il socio era <b>%s</b>,<br>", "hanno fatto <b>cappotto</b> EBBRAVI!.<hr>", "dovevano fare <b>%s</b> punti e ne hanno fatti <b>%d</b>: hanno <b>%s</b>.<hr>", "<hr>Nell'ultima mano <b>%s</b> si è chiamato in mano,<br>", "ha fatto <b>cappotto</b> EBBRAVO!.<hr>", "doveva fare <b>%s</b> punti e ne ha fatti <b>%d</b>: ha <b>%s</b>.<hr>", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */
-
- $noty .= sprintf($mlang_bin5_bin5['info_part'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $win_name,
- $fri_name);
- if ($old_pnt == 120) {
- $noty .= sprintf($mlang_bin5_bin5['info_capp'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc );
- }
- else {
- if ($old_asta_pnt > 61) {
- $noty .= sprintf($mlang_bin5_bin5['info_alea'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $old_asta_pnt, $old_pnt,
- ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] :
- ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] :
- $mlang_bin5_bin5['info_lost'][$G_lang])));
- }
- else {
- $noty .= sprintf($mlang_bin5_bin5['info_more'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $old_pnt,
- ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] :
- ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] :
- $mlang_bin5_bin5['info_lost'][$G_lang])));
- } // else of if ($old_asta_pnt > 61) {
- } // else of if ($old_pnt == 120) {
- } // if ($win != $fri) { // not alone case
- else {
- $noty .= sprintf($mlang_bin5_bin5['info_alon'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $win_name);
- if ($old_pnt == 120) {
- $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc);
- }
- else {
- if ($old_asta_pnt > 61) {
- $noty .= sprintf($mlang_bin5_bin5['info_aleaa'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $old_asta_pnt, $old_pnt,
- ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] :
- ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] :
- $mlang_bin5_bin5['info_lost'][$G_lang])));
- }
- else {
- $noty .= sprintf($mlang_bin5_bin5['info_morea'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- $old_pnt,
- ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] :
- ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] :
- $mlang_bin5_bin5['info_lost'][$G_lang])));
- }
- }
- }
- }
-
- $old_multer = Bin5_table::s_multer($old_mult, $old_asta_pnt);
- if ($old_multer > 1) {
- $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang],
- $tg_br, $tg_hr, $tg_bo, $tg_bc,
- multoval($old_multer));
- }
- $noty .= sprintf('%2$s', $tg_br, $tg_hr);
-
- return ($noty);
-}
?>
--- /dev/null
+<?php
+/*
+ * brisk - rules.phh
+ *
+ * Copyright (C) 2017 Matteo Nastasi
+ * mailto: nastasi@alternativeoutput.it
+ * matteo.nastasi@milug.org
+ * web: http://www.alternativeoutput.it
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+define('BIN5_TOURNAMENT_OLDRULES', 1);
+define('BIN5_TOURNAMENT_NO_DRAW', 2);
+define('BIN5_TOURNAMENT_TOGETHER17', 4);
+
+define('BIN5_RULES_OLDSCHEMA', -1);
+define('BIN5_RULES_FINISH', 0);
+define('BIN5_RULES_ABANDON', 1);
+define('BIN5_RULES_ALLPASS', 2);
+define('BIN5_RULES_ASTA', 3);
+define('BIN5_RULES_NEXTAUCT', 4);
+define('BIN5_RULES_CHECKCHOOSE',5);
+
+require_once("rules_base.phh");
+require_once("rules_old_rules.phh");
+require_once("rules_no_draw.phh");
+require_once("rules_together17.phh");
+
+// FIXME - DYNAMIC WITH CACHE AND RELOAD FROM DB
+function rules_keys()
+{
+ return array(1,2,4);
+}
+
+function rules_id2name($id)
+{
+ if ($id == 1)
+ return 'Rules_old_rules';
+ else if ($id == 2)
+ return 'Rules_no_draw';
+ else if ($id == 4)
+ return 'Rules_together17';
+
+ return 'Rules_unknown';
+}
+
+function rules_id2descr($id, $lang)
+{
+ if ($id == 1)
+ return 'regole vecchie (con pareggio)';
+ else if ($id == 2)
+ return 'regole nuove (senza pareggio)';
+ else if ($id == 4)
+ return 'regole del torneo "insieme per gioco"';
+
+ return 'Regole sconosciute';
+}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/*
+ * brisk - rules.phh
+ *
+ * Copyright (C) 2017 Matteo Nastasi
+ * mailto: nastasi@alternativeoutput.it
+ * matteo.nastasi@milug.org
+ * web: http://www.alternativeoutput.it
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+require_once("briskin5.phh");
+
+$mlang_bin5_rules = array(
+ // br, hr, b, /b, win, fri
+ 'info_part' => array( 'it' => 'Ha chiamato %3$s%5$s%4$s, il socio era %3$s%6$s%4$s,%1$s',
+ 'en' => 'The declarer was %3$s%5$s%4$s, the partner was %3$s%6$s%4$s,%1$s'),
+ // br, hr, b, /b
+ 'info_capp' => array( 'it' => 'hanno fatto %3$scappotto%4$s EBBRAVI!.%1$s',
+ 'en' => 'and they made %3Dscapot%4$s WELL DONE!.%1$s'),
+
+ // br, hr, b, /b, old_asta_pnt, old_pnt, winornot
+ 'info_alea' => array( 'it' => 'dovevano fare %3$salmeno %5$d%4$s punti e ne hanno fatti %3$s%6$d%4$s: hanno %7$s.%1$s',
+ 'en' => 'they had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: they have %7$s.%1$s'),
+ // br, hr, b, /b, old_pnt, winornot
+ 'info_more' => array( 'it' => 'dovevano fare %3$spiù di 60%4$s punti e ne hanno fatti %3$s%5$d%4$s: hanno %6$s.%1$s',
+ 'en' => 'they had to do %3$sover 60%4$s points and they had made %3$s%5$d%4$s: they have %3$s%6$s%4$s.%1$s'),
+ 'info_win' => array( 'it' => 'vinto',
+ 'en' => 'win'),
+ 'info_peer' => array( 'it' => 'pareggiato',
+ 'en' => 'drew'),
+ 'info_lost' => array( 'it' => 'perso',
+ 'en' => 'lost'),
+
+ // br, hr, b, /b, win_name
+ 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano,%1$s',
+ 'en' => '%3$s%5$s%4$s play alone against each other,%1$s'),
+ // br, hr, b, /b, old_asta_pnt, old_pnt, winornot
+ 'info_aleaa' => array( 'it' => 'doveva fare %3$salmeno %5$d%4$s punti e ne ha fatti %3$s%6$d%4$s: ha %3$s%7$s%4$s.%1$s',
+ 'en' => 'he/she had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: he/she had %3$s%7$s%4$s.%1$s'),
+ // br, hr, b, /b, old_pnt, winornot
+ 'info_morea' => array( 'it' => 'doveva fare %3$spiù di 60%4$s punti e ne ha fatti %3$s%5$d%4$s: ha %3$s%6$s%4$s.%1$s',
+ 'en' => 'he/she had to do %3$smore than 60%4$s points and they had made %3$s%5$d%4$s: he/she had %3$s%6$s%4$s.%1$s'),
+ // br, hr, b, /b
+ 'info_acap' => array( 'it' => 'ha fatto %3$scappotto%4$s EBBRAVO!.%1$s',
+ 'en' => 'and he/she made %3$scapot%4$s WELL DONE!.%1$s'),
+
+ // br, hr, b, /b
+ 'info_omul' => array( 'it' => '%1$sLa partita valeva %3$s%5$s%4$s.%1$s',
+ 'en' => '%1$sEN: The game was worth %3$s%5$s%4$s.%1$s' ),
+
+ // br, hr, b, /b
+ 'info_alpa' => array( 'it' => '%1$sHanno passato %3$stutti%4$s.%1$s',
+ 'en' => '%1$sEN: Hanno passato %3$stutti%4$s.%1$s' ),
+
+ // br, hr, b, /b, aband-name
+ 'info_aban' => array( 'it' => ' Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.',
+ 'en' => ' EN: Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.')
+ );
+
+abstract class Rules {
+ var $table;
+ var $id;
+
+ abstract function engine(&$bri, $curtime, $action, $user);
+
+ function __construct($table)
+ {
+ $this->table = $table;
+ }
+
+ function id_get()
+ {
+ return ($this->id);
+ }
+
+ function tourn_points(&$user, $i)
+ {
+ return;
+ }
+
+ function tourn_points_max($user)
+ {
+ return 0;
+ }
+
+}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/*
+ * brisk - rules_no_draw.phh
+ *
+ * Copyright (C) 2017 Matteo Nastasi
+ * mailto: nastasi@alternativeoutput.it
+ * matteo.nastasi@milug.org
+ * web: http://www.alternativeoutput.it
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+require_once("briskin5.phh");
+require_once("rules_base.phh");
+
+class Rules_no_draw extends Rules_old_rules {
+ function __construct($table)
+ {
+ parent::__construct($table);
+ $this->id = 2;
+ }
+
+ static function game_result($asta_pnt, $pnt)
+ {
+ if ($pnt >= $asta_pnt)
+ return (1);
+ else
+ return (-1);
+ }
+
+} // class Rules_no_draw
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/*
+ * brisk - rules_old_rules.phh
+ *
+ * Copyright (C) 2017 Matteo Nastasi
+ * mailto: nastasi@alternativeoutput.it
+ * matteo.nastasi@milug.org
+ * web: http://www.alternativeoutput.it
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+require_once("briskin5.phh");
+require_once("rules_base.phh");
+
+class Rules_old_rules extends Rules {
+ function __construct($table)
+ {
+ parent::__construct($table);
+ $this->id = 1;
+ }
+
+ static function asta2mult($asta_pnt)
+ {
+ if ($asta_pnt > 110)
+ return (6);
+ else if ($asta_pnt > 100)
+ return (5);
+ else if ($asta_pnt > 90)
+ return (4);
+ else if ($asta_pnt > 80)
+ return (3);
+ else if ($asta_pnt > 70)
+ return (2);
+ else
+ return (1);
+ }
+ static function s_multer($mult, $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 multer($is_new)
+ {
+ if ($is_new) {
+ return (static::s_multer($this->table->mult, $this->table->asta_pnt));
+ }
+ else {
+ return (static::s_multer($this->table->old_mult, $this->table->old_asta_pnt));
+ }
+ }
+
+ static function game_result($asta_pnt, $pnt)
+ {
+ $sixty = (BIN5_PLAYERS_N == 3 ? 30 : 60);
+ if ($asta_pnt == 61) {
+ if ($pnt > $sixty)
+ return (1);
+ else if ($pnt == $sixty)
+ return (0);
+ else
+ return (-1);
+ }
+ else {
+ if ($pnt >= $asta_pnt)
+ return (1);
+ else
+ return (-1);
+ }
+ }
+
+ function rules_asta(&$bri, $curtime, $action, $user, &$ret_s, $a_card, $a_pnt)
+ {
+ $index_cur = $this->table->gstart % BIN5_PLAYERS_N;
+
+ // Abbandono dell'asta
+ if ($a_card <= -1) {
+ log_wr("Abbandona l'asta.");
+ $this->table->asta_pla[$index_cur] = FALSE;
+ $user->asta_card = -1;
+ $this->table->asta_pla_n--;
+
+ return TRUE;
+ }
+ else if ($a_card <= 9) {
+ $ret_s = "";
+
+ do {
+ if ($a_card >= 0 && $a_card < 9 && $a_card > $this->table->asta_card)
+ ;
+ else if ($a_card == 9 && $a_pnt > ($this->table->asta_pnt >= 61 ? $this->table->asta_pnt : 60)
+ && $a_pnt <= 120)
+ ;
+ else
+ break;
+
+ $user->asta_card = $a_card;
+ $this->table->asta_card = $a_card;
+ if ($a_card == 9) {
+ $user->asta_pnt = $a_pnt;
+ $this->table->asta_pnt = $a_pnt;
+ }
+
+ return TRUE;
+ } while (0);
+ }
+
+ return FALSE;
+ }
+
+ function rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)
+ {
+ if ( !($a_brisco >= 0 && $a_brisco < 40)) // (BIN5_CARD_HAND * BIN5_PLAYERS_N)) )
+ return FALSE;
+
+ if ( !($this->table->asta_win > -1 &&
+ $user->table_pos == $this->table->asta_win) )
+ return FALSE;
+
+ return TRUE;
+ }
+
+ function rules_nextauct(&$bri, $curtime, $action, $user, $maxcard)
+ {
+ if (($this->table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
+ !($this->table->asta_card == 9 && $this->table->asta_pnt == 120)) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+
+ }
+
+ function engine(&$bri, $curtime, $action, $user, &$opt1 = NULL, &$opt2 = NULL, &$opt3 = NULL)
+ {
+ GLOBAL $G_all_points, $G_dbasetype;
+
+ $table = $this->table;
+ $pnts_sav = array();
+
+ if ($action == BIN5_RULES_ASTA) {
+ return ($this->rules_asta($bri, $curtime, $action, $user, $opt1, $opt2, $opt3));
+ }
+ else if ($action == BIN5_RULES_NEXTAUCT) {
+ return ($this->rules_nextauct($bri, $curtime, $action, $user, $opt1));
+ }
+ else if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct
+ $table->old_act = $action;
+ $table->old_asta_win = -1;
+ $table->old_pnt = 0;
+ $table->mult_inc(1);
+ for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ $pnts_sav[$i] = 0;
+ }
+
+ $game_delta = 1;
+ // $table->game_next(1);
+ $table->game_init(&$bri->user);
+ }
+ else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct
+ if (!($user->handpt <= 2)) {
+ return (FALSE);
+ }
+ $table->old_act = $action;
+ log_wr(sprintf("GIOCO FINITO !!!"));
+ $table->old_asta_win = $user->table_pos;
+ $table->old_pnt = 0;
+ $table->mult_inc(1);
+
+ for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ $pnts_sav[$i] = 0;
+ }
+
+ // Non si cambia mazzo se si abbandona la partita
+ $game_delta = 0;
+ // $table->game_next(0);
+ $table->game_init(&$bri->user);
+ }
+ else if ($action == BIN5_RULES_CHECKCHOOSE) {
+ return ($this->rules_checkchoose($bri, $curtime, $action, $user, $opt1, $opt2));
+ }
+ else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct
+ $table->old_act = $action;
+ do {
+ $pro = 0;
+
+ if ($table->asta_pnt == 60)
+ $table->asta_pnt = 61;
+
+ $table->old_reason = "";
+
+ // count points for the temporary 2 teams
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
+ $ctt = $table->card[$i]->value % 10;
+ $own = $table->card[$i]->owner;
+ if ($own == $table->asta_win || $own == $table->friend)
+ $pro += $G_all_points[$ctt];
+ }
+
+ log_wr(sprintf("PRO: [%d]", $pro));
+
+ // PATTA case !
+ if (static::game_result($table->asta_pnt, $pro) == 0) {
+ $table->points[$table->points_n % MAX_POINTS] = array();
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $table->points[$table->points_n % MAX_POINTS][$i] = 0;
+ $pnts_sav[$i] = 0;
+ }
+ $table->points_n++;
+ $table->old_pnt = $pro;
+ $table->old_asta_win = $table->asta_win;
+ $table->mult_inc(1);
+
+ break;
+ }
+
+ if (static::game_result($table->asta_pnt, $pro) == 1)
+ $sig = 1;
+ else
+ $sig = -1;
+
+ // TAG: POINTS_MANAGEMENT
+ $table->points[$table->points_n % MAX_POINTS] = array();
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ if ($i == $table->asta_win)
+ $pnt = ($i == $table->friend ? 4 : 2);
+ else if ($i == $table->friend)
+ $pnt = 1;
+ else
+ $pnt = -1;
+
+ log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pnt));
+
+ $pnt_sav = static::s_point_calc($pnt * $sig, 0, $table->asta_pnt, ($pro == 120));
+ $pnt_tab = static::s_point_calc($pnt * $sig, $table->mult, $table->asta_pnt, ($pro == 120));
+
+ $table->points[$table->points_n % MAX_POINTS][$i] = $pnt_tab;
+ $table->total[$i] += $pnt_tab;
+ $pnts_sav[$i] = $pnt_sav;
+ }
+ $table->points_n++;
+ $table->old_pnt = $pro;
+ $table->old_asta_win = $table->asta_win;
+ $table->mult_set(0);
+ } while (0);
+ $game_delta = 1;
+ }
+ else {
+ return (FALSE);
+ }
+ $table->game_next($game_delta);
+
+ $plist = "$table->table_token|$user->table_orig|$table->player_n";
+ $ucodes = array();
+ $codes = "";
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$table->player[$i]];
+
+ /* pro db */
+ $ucodes[$i] = $user_cur->code_get();
+
+ /* pro log */
+ $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i];
+ $codes .= '|'.xcapelt($user_cur->code_get());
+ }
+ $plist .= $codes;
+ log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
+
+ $table->old_asta_pnt = $table->asta_pnt;
+ // $table->old_mazzo is managed by ->game_next();
+ // $table->old_mult, $table->old_pnt, $table->old_reason and $table->old_asta_win are specific
+
+ $table->old_friend = $table->friend;
+ $table->old_tourn_pts = $table->tourn_pts;
+
+ $table->old_reason = static::game_description($action, 'html', $table->old_mult,
+ $table->old_asta_win,
+ ($table->old_asta_win != -1 ?
+ $bri->user[$table->player[$table->old_asta_win]]->name : ""),
+ $table->old_friend,
+ ($table->old_friend != -1 ?
+ $bri->user[$table->player[$table->old_friend]]->name : ""),
+ $table->old_pnt, $table->old_asta_pnt, $table->old_tourn_pts);
+
+
+ if ($user->table_orig < TABLES_AUTH_N) {
+ require_once("../Obj/dbase_".$G_dbasetype.".phh");
+
+ if (($bdb = BriskDB::create()) != FALSE) {
+ $bdb->bin5_points_save($curtime, $table, $user->table_orig, $action, $ucodes, $pnts_sav);
+ unset($bdb);
+ }
+ else {
+ log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED");
+ }
+ log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
+ }
+
+ $table->game_init(&$bri->user);
+
+ return (TRUE);
+ }
+
+ static function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?",
+ $old_pnt = -1, $old_asta_pnt = -1, $old_tourn_pts = -1)
+ {
+ GLOBAL $G_lang, $mlang_bin5_rules;
+
+ if ($form == 'html') {
+ $tg_br = "<br>";
+ $tg_hr = "<hr>";
+ $tg_bo = "<b>";
+ $tg_bc = "</b>";
+ $win_name = xcape($win_name);
+ $fri_name = xcape($fri_name);
+ }
+ else {
+ $tg_br = " ";
+ $tg_hr = " ";
+ $tg_bo = "";
+ $tg_bc = "";
+ }
+
+ if ($act == BIN5_RULES_OLDSCHEMA) {
+ return ("");
+ }
+ else if ($act == BIN5_RULES_ALLPASS) {
+ return (sprintf($mlang_bin5_rules['info_alpa'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc));
+ }
+ else if ($act == BIN5_RULES_ABANDON) {
+ return (sprintf($mlang_bin5_rules['info_aban'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $win_name));
+ }
+ else {
+ $wol = static::game_result($old_asta_pnt, $old_pnt);
+
+ $noty = "";
+
+ if ($win != $fri) { // not alone case
+ /* MLANG: "<hr>Nell'ultima mano ha chiamato <b>%s</b>, il socio era <b>%s</b>,<br>", "hanno fatto <b>cappotto</b> EBBRAVI!.<hr>", "dovevano fare <b>%s</b> punti e ne hanno fatti <b>%d</b>: hanno <b>%s</b>.<hr>", "<hr>Nell'ultima mano <b>%s</b> si è chiamato in mano,<br>", "ha fatto <b>cappotto</b> EBBRAVO!.<hr>", "doveva fare <b>%s</b> punti e ne ha fatti <b>%d</b>: ha <b>%s</b>.<hr>", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */
+
+ $noty .= sprintf($mlang_bin5_rules['info_part'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $win_name,
+ $fri_name);
+ if ($old_pnt == 120) {
+ $noty .= sprintf($mlang_bin5_rules['info_capp'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc );
+ }
+ else {
+ if ($old_asta_pnt > 61) {
+ $noty .= sprintf($mlang_bin5_rules['info_alea'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_asta_pnt, $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ }
+ else {
+ $noty .= sprintf($mlang_bin5_rules['info_more'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ } // else of if ($old_asta_pnt > 61) {
+ } // else of if ($old_pnt == 120) {
+ } // if ($win != $fri) { // not alone case
+ else {
+ $noty .= sprintf($mlang_bin5_rules['info_alon'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $win_name);
+ if ($old_pnt == 120) {
+ $noty .= sprintf($mlang_bin5_rules['info_acap'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc);
+ }
+ else {
+ if ($old_asta_pnt > 61) {
+ $noty .= sprintf($mlang_bin5_rules['info_aleaa'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_asta_pnt, $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ }
+ else {
+ $noty .= sprintf($mlang_bin5_rules['info_morea'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ }
+ }
+ }
+ }
+
+ $old_multer = static::s_multer($old_mult, $old_asta_pnt);
+ if ($old_multer > 1) {
+ $noty .= sprintf($mlang_bin5_rules['info_omul'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ multoval($old_multer));
+ }
+ $noty .= sprintf('%2$s', $tg_br, $tg_hr);
+
+ return ($noty);
+ }
+} // class Rules_old_rules
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/*
+ * brisk - rules_together17.phh
+ *
+ * Copyright (C) 2017 Matteo Nastasi
+ * mailto: nastasi@alternativeoutput.it
+ * matteo.nastasi@milug.org
+ * web: http://www.alternativeoutput.it
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details. You should have received a
+ * copy of the GNU General Public License along with this program; if
+ * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+require_once("briskin5.phh");
+require_once("rules_base.phh");
+
+
+$mlang_bin5_toge17_rules =
+ array(
+ // br, hr, b, /b, win, fri
+ 'info_part' => array( 'it' => 'Ha chiamato %3$s%5$s%4$s (punti torneo %7$d), il socio era %3$s%6$s%4$s,%1$s',
+ 'en' => 'The declarer was %3$s%5$s%4$s (tournment points %7$d), the partner was %3$s%6$s%4$s,%1$s'),
+ // br, hr, b, /b, win_name
+ 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano (punti torneo %6$d),%1$s',
+ 'en' => '%3$s%5$s%4$s play alone against each other (tournment points %6$d),%1$s')
+ );
+
+class Rules_together17 extends Rules_no_draw {
+ function __construct($table)
+ {
+ parent::__construct($table);
+ $this->id = 4;
+ }
+
+ function tourn_points(&$user, $user_pos)
+ {
+ $card = $this->table->card;
+ unset($user->asta_tourn_pts);
+ $user->asta_tourn_pts = array(0, 0, 0, 0);
+ if (BIN5_CARD_HAND == 8)
+ $tourn_values = array(11, 10, 4,3,2, 1,1,1,1,1);
+ else
+ $tourn_values = array(33, 30, 12,9,6, 3,3,3,3,3);
+
+ for ($i = 0 ; $i < BIN5_PLAYERS_N * BIN5_CARD_HAND ; $i++) {
+
+ if ($card[$i]->owner == $user_pos) {
+ $user->asta_tourn_pts[(int)($i / 10)] += $tourn_values[$i % 10];
+ }
+ }
+ }
+
+ function tourn_points_max($user)
+ {
+ $mx = 0;
+ for ($i = 0 ; $i < 4 ; $i++) {
+ if ($user->asta_tourn_pts[$i] > $mx) {
+ $mx = $user->asta_tourn_pts[$i];
+ }
+ }
+
+ return $mx;
+ }
+
+ function min_tourn_points($a_pnt)
+ {
+ if ($a_pnt < 62)
+ $min_pts = 0;
+ else if ($a_pnt < 71)
+ $min_pts = 13;
+ else if ($a_pnt < 80)
+ $min_pts = 19;
+ else if ($a_pnt < 90)
+ $min_pts = 23;
+ else if ($a_pnt < 100)
+ $min_pts = 25;
+ else
+ $min_pts = 28;
+
+ return $min_pts;
+ }
+
+ function check_tourn_points($hand_pts, $a_pnt, $a_seed, &$ret_s) {
+ $min_pts = $this->min_tourn_points($a_pnt);
+
+ if ($hand_pts < $min_pts) {
+ // FIXME_LANG
+ $seeds = array('coppe', 'ori', 'spade', 'bastoni');
+ $ret_s = sprintf("Hai chiamato un due di %s a %d ma in mano per quel seme hai %d punti-torneo, non puoi.",
+ $seeds[$a_seed], $a_pnt, $hand_pts);
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ function rules_asta(&$bri, $curtime, $action, $user, &$ret_s, $a_card, $a_pnt) {
+ /*
+Per le chiamate da 62 a 70 bisognerà avere 13 punti ( esempi.: asso e fante oppure tre
+e cavallo oppure re, cavallo, fante, sette, sei, cinque, quattro) ;
+Per chiamate da 71 ad 80 bisognerà avere 19 punti ( esempi.: asso, re, cavallo e 6
+oppure tre, re, fante, 7, 6 e 5 );
+Per chiamate da 81 a 90 bisognerà avere 23 punti ( esempi.: asso, tre e fante oppure
+asso, re, cavallo, fante, 6, 5 e 4);
+Per chiamate da 91 a 100 bisognerà avere 25 punti ( esempi.: asso, tre, re e 7 oppure
+asso, tre, cavallo e fante );
+Per chiamate da 101 a 120 bisognerà avere 28 punti ( esempi.:asso, tre, re e cavallo
+oppure asso, tre, cavallo, 7, 6, 5 e 4 ).
+ */
+
+ $index_cur = $this->table->gstart % BIN5_PLAYERS_N;
+
+ // Abbandono dell'asta
+ if ($a_card <= -1) {
+ log_wr("Abbandona l'asta.");
+ $this->table->asta_pla[$index_cur] = FALSE;
+ $user->asta_card = -1;
+ $this->table->asta_pla_n--;
+
+ if ($this->table->asta_card == -1 && $this->table->asta_pla_n == 1) {
+ // all abandon auction except one => move next bid to two and 71 points
+ $this->table->asta_card = 9;
+ $this->table->asta_pnt = 70;
+ }
+
+ return TRUE;
+ }
+ else if ($a_card <= 9) {
+ $ret_s = "";
+
+ do {
+ if ($a_card >= 0 && $a_card < 9 && $a_card > $this->table->asta_card) {
+ ;
+ }
+ else if ($a_card == 9 &&
+ $a_pnt > ($this->table->asta_pnt >= 61 ? $this->table->asta_pnt : 60)
+ && $a_pnt <= 120) {
+ $min_pts = $this->min_tourn_points($a_pnt);
+
+ $max_hand_pts = $this->tourn_points_max($user);
+ if ($max_hand_pts < $min_pts) {
+ // FIXME_LANG
+ $ret_s = sprintf("Hai chiamato un due a %d ma in mano hai al massimo %d punti-torneo, non puoi.",
+ $a_pnt, $max_hand_pts);
+ break;
+ }
+ }
+ else {
+ break;
+ }
+
+ $user->asta_card = $a_card;
+ $this->table->asta_card = $a_card;
+ if ($a_card == 9) {
+ $user->asta_pnt = $a_pnt;
+ $this->table->asta_pnt = $a_pnt;
+ }
+
+ return TRUE;
+ } while (0);
+ }
+
+ return FALSE;
+ }
+
+ function rules_nextauct(&$bri, $curtime, $action, $user, $maxcard)
+ {
+ if (($this->table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
+ !($this->table->asta_card == 9 && $this->table->asta_pnt == 120)) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+
+ }
+
+ function rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)
+ {
+ if (! parent::rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)) {
+ return FALSE;
+ }
+
+ if ($this->table->asta_card == 9) {
+ $bri_seed = (int)($a_brisco / 10);
+ return $this->check_tourn_points($user->asta_tourn_pts[$bri_seed],
+ $this->table->asta_pnt, $bri_seed, $ret_s);
+ }
+
+ return TRUE;
+ }
+
+
+ static function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?",
+ $old_pnt = -1, $old_asta_pnt = -1, $old_tourn_pts = -1)
+ {
+ GLOBAL $G_lang, $mlang_bin5_rules, $mlang_bin5_toge17_rules;
+
+ if ($form == 'html') {
+ $tg_br = "<br>";
+ $tg_hr = "<hr>";
+ $tg_bo = "<b>";
+ $tg_bc = "</b>";
+ $win_name = xcape($win_name);
+ $fri_name = xcape($fri_name);
+ }
+ else {
+ $tg_br = " ";
+ $tg_hr = " ";
+ $tg_bo = "";
+ $tg_bc = "";
+ }
+
+ if ($act == BIN5_RULES_OLDSCHEMA) {
+ return ("");
+ }
+ else if ($act == BIN5_RULES_ALLPASS) {
+ return (sprintf($mlang_bin5_rules['info_alpa'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc));
+ }
+ else if ($act == BIN5_RULES_ABANDON) {
+ return (sprintf($mlang_bin5_rules['info_aban'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $win_name));
+ }
+ else {
+ $wol = static::game_result($old_asta_pnt, $old_pnt);
+
+ $noty = "";
+
+ if ($win != $fri) { // not alone case
+ /* MLANG: "<hr>Nell'ultima mano ha chiamato <b>%s</b>, il socio era <b>%s</b>,<br>", "hanno fatto <b>cappotto</b> EBBRAVI!.<hr>", "dovevano fare <b>%s</b> punti e ne hanno fatti <b>%d</b>: hanno <b>%s</b>.<hr>", "<hr>Nell'ultima mano <b>%s</b> si è chiamato in mano,<br>", "ha fatto <b>cappotto</b> EBBRAVO!.<hr>", "doveva fare <b>%s</b> punti e ne ha fatti <b>%d</b>: ha <b>%s</b>.<hr>", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */
+
+ $noty .= sprintf($mlang_bin5_toge17_rules['info_part'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $win_name,
+ $fri_name,
+ $old_tourn_pts);
+ if ($old_pnt == 120) {
+ $noty .= sprintf($mlang_bin5_rules['info_capp'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc );
+ }
+ else {
+ if ($old_asta_pnt > 61) {
+ $noty .= sprintf($mlang_bin5_rules['info_alea'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_asta_pnt, $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ }
+ else {
+ $noty .= sprintf($mlang_bin5_rules['info_more'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ } // else of if ($old_asta_pnt > 61) {
+ } // else of if ($old_pnt == 120) {
+ } // if ($win != $fri) { // not alone case
+ else {
+ $noty .= sprintf($mlang_bin5_toge17_rules['info_alon'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $win_name,
+ $old_tourn_pts);
+ if ($old_pnt == 120) {
+ $noty .= sprintf($mlang_bin5_rules['info_acap'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc);
+ }
+ else {
+ if ($old_asta_pnt > 61) {
+ $noty .= sprintf($mlang_bin5_rules['info_aleaa'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_asta_pnt, $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ }
+ else {
+ $noty .= sprintf($mlang_bin5_rules['info_morea'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ $old_pnt,
+ ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] :
+ ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] :
+ $mlang_bin5_rules['info_lost'][$G_lang])));
+ }
+ }
+ }
+ }
+
+ $old_multer = static::s_multer($old_mult, $old_asta_pnt);
+ if ($old_multer > 1) {
+ $noty .= sprintf($mlang_bin5_rules['info_omul'][$G_lang],
+ $tg_br, $tg_hr, $tg_bo, $tg_bc,
+ multoval($old_multer));
+ }
+ $noty .= sprintf('%2$s', $tg_br, $tg_hr);
+
+ return ($noty);
+ }
+} // class Rules_no_draw
+
+?>
\ No newline at end of file
else
$('preferences').style.visibility = 'hidden';
}
+
+function act_select_rules(rule_id)
+{
+ send_mesg("chatt|/rules " + rule_id);
+}
+
+function rules_set(id)
+{
+ $('select_rules').value = id;
+}
window.onunload = onunload_cb;
xstm.start();
+
+ addEvent($('select_rules'), "change", function() { act_select_rules(this.value); } );
// FIXME: add this setTimeout(preload_images into data stream to avoid
// race on opened socket
// setTimeout(preload_images, 0, g_preload_img_arr, g_imgct);
<div style="width: 95%; /* background-color: red; */ margin: auto; text-align: left;">
<br><br>
<input type="checkbox" name="pref_ring_endauct" id="pref_ring_endauct" onclick="pref_ring_endauct_set(this);"><?php echo $mlang_bin5_index['itm_ringauc'][$G_lang] ?>
+ <div>
+ <label>Regole:</label><?php dom_select_rules();?>
+ </div>
</div>
function bin5_index_wr_main(&$bin5, $remote_addr_full, $get, $post, $cookie)
{
GLOBAL $G_base, $G_dbasetype, $G_ban_list, $G_black_list;
+ GLOBAL $mlang_indwr, $G_lang;
$remote_addr = addrtoipv4($remote_addr_full);
log_wr('COMM: '.$mesg);
-
if (($CO_bin5_pref_ring_endauct = gpcs_var('CO_bin5_pref_ring_endauct', $get, $post, $cookie)) === FALSE)
$CO_bin5_pref_ring_endauct = "";
-
-
log_wr(0, 'bin::index_wr.php: COMM: '.xcapemesg($mesg));
-
if (($user = &$bin5->get_user($sess, $idx)) == FALSE) {
echo "Get User Error";
log_wr("Get User Error");
}
else if ($user->subst == 'asta') {
if ($argz[0] == 'lascio') {
- // && $user->handpt <= 2) {
- /* $index_cur = $table->gstart % BIN5_PLAYERS_N; */
-
- /* log_wr(sprintf("GIOCO FINITO !!!")); */
-
- /* $table->mult += 1; */
- /* $table->old_reason = sprintf("Ha lasciato %s perché aveva al massimo 2 punti.", xcape($user->name)); */
-
- /* // Non si cambia mazzo se si abbandona la partita */
- /* $table->game_next(0); */
-
- /* if ($user->table_orig < TABLES_AUTH_N) { */
- /* require_once("../Obj/dbase_".$G_dbasetype.".phh"); */
-
- /* if (($bdb = BriskDB::create()) != FALSE) { */
- /* $bdb->bin5_points_save($curtime, $table, $user->table_orig, $ucodes, $pt_cur); */
- /* unset($bdb); */
- /* } */
- /* else { */
- /* log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); */
- /* } */
- /* log_points($curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); */
- /* } */
-
- /* $table->game_init(&$bin5->user); */
-
- if ($table->rules_engine($bin5, $curtime, BIN5_RULES_ABANDON, $user)) {
+ if ($table->rules->engine($bin5, $curtime, BIN5_RULES_ABANDON, $user)) {
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bin5->user[$table->player[$i]];
}
}
else if ($argz[0] == 'asta') {
- $again = TRUE;
-
+ $success = FALSE;
$index_cur = $table->gstart % BIN5_PLAYERS_N;
- if ($user->table_pos == $index_cur &&
- $table->asta_pla[$index_cur]) {
+ do {
+ $ret_s = '';
+
+ if ($user->table_pos != $index_cur ||
+ !$table->asta_pla[$index_cur]) {
+ // FIXME_LANG
+ $ret_s = 'grave inconsistenza';
+ break;
+ }
+
$a_card = $argz[1];
$a_pnt = $argz[2];
log_wr("CI SIAMO a_card ".$a_card." asta_card ".$table->asta_card);
- // Abbandono dell'asta
- if ($a_card <= -1) {
- log_wr("Abbandona l'asta.");
- $table->asta_pla[$index_cur] = FALSE;
- $user->asta_card = -1;
- $table->asta_pla_n--;
- $again = FALSE;
- }
- else if ($a_card <= 9) {
- if ($a_card >= 0 && $a_card < 9 && $a_card > $table->asta_card)
- $again = FALSE;
- else if ($a_card == 9 && $a_pnt > ($table->asta_pnt >= 61 ? $table->asta_pnt : 60) && $a_pnt <= 120)
- $again = FALSE;
-
-
- if ($again == FALSE) {
- log_wr("NUOVI ORZI.");
- $user->asta_card = $a_card;
- $table->asta_card = $a_card;
- if ($a_card == 9) {
- $user->asta_pnt = $a_pnt;
- $table->asta_pnt = $a_pnt;
- }
- }
+ /* user action management */
+ if (!$table->rules->engine(&$bin5, $curtime, BIN5_RULES_ASTA, $user,
+ $ret_s, $a_card, $a_pnt)) {
+ break;
}
- if ($again) { // Qualcosa non andato bene, rifare
- $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1,
- ($table->asta_pnt > 60 ? $table->asta_pnt + 1 : 61) );
- $user->comm[$user->step % COMM_N] = $ret;
- $user->step_inc();
+ /* next step */
+ $showst = "show_astat(";
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bin5->user[$table->player[$i]];
+ $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "),
+ ($user_cur->asta_card < 9 ? $user_cur->asta_card :
+ $user_cur->asta_pnt));
+ }
+ if (BIN5_PLAYERS_N == 3)
+ $showst .= ",-2,-2";
+ $showst .= ");";
- log_wr("Ripetere.");
+ $maxcard = -2;
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bin5->user[$table->player[$i]];
+ if ($maxcard < $user_cur->asta_card)
+ $maxcard = $user_cur->asta_card;
}
- else {
- /* next step */
- $showst = "show_astat(";
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bin5->user[$table->player[$i]];
- $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "),
- ($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt));
+
+ /*
+ * IF not max points AND
+ * (asta_pla_n > 1 if someone bet OR
+ * asta_pla_n > 0 if someone NOT bet)
+ * THEN advance auction
+ */
+ if ($table->rules->engine(&$bin5, $curtime, BIN5_RULES_NEXTAUCT, $user, $maxcard)) {
+ /* search the next player in auction and put it in gstart field */
+ for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $index_next = ($table->gstart + $i) % BIN5_PLAYERS_N;
+ if ($table->asta_pla[$index_next]) {
+ log_wr("GSTART 1");
+ $table->gstart += $i;
+ break;
+ }
}
- if (BIN5_PLAYERS_N == 3)
- $showst .= ",-2,-2";
- $showst .= ");";
- $maxcard = -2;
+ /* set client side view */
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bin5->user[$table->player[$i]];
- if ($maxcard < $user_cur->asta_card)
- $maxcard = $user_cur->asta_card;
+ $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst);
+ if ($user_cur->table_pos == ($table->gstart % BIN5_PLAYERS_N))
+ $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();',
+ $table->asta_card + 1, $table->asta_pnt+1, ($user_cur->handpt <= 2 ? "true" : "false"));
+ else
+ $ret .= sprintf('dispose_asta(%d,%d, %s); remark_off();',
+ $table->asta_card + 1, -($table->asta_pnt+1), ($user_cur->handpt <= 2 ? "true" : "false"));
+ $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+ $user_cur->step_inc();
}
+ }
+ else if ($table->asta_pla_n == 0) {
+ log_wr("PASSANO TUTTI!");
- if (($table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
- !($table->asta_card == 9 && $table->asta_pnt == 120)) {
- log_wr("ALLOPPA QUI");
- for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) {
- $index_next = ($table->gstart + $i) % BIN5_PLAYERS_N;
- if ($table->asta_pla[$index_next]) {
- log_wr("GSTART 1");
- $table->gstart += $i;
- break;
- }
- }
-
-
+ if ($table->rules->engine(&$bin5, $curtime, BIN5_RULES_ALLPASS, $user)) {
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bin5->user[$table->player[$i]];
- $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst);
- if ($user_cur->table_pos == ($table->gstart % BIN5_PLAYERS_N))
- $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();',
- $table->asta_card + 1, $table->asta_pnt+1, ($user_cur->handpt <= 2 ? "true" : "false"));
- else
- $ret .= sprintf('dispose_asta(%d,%d, %s); remark_off();',
- $table->asta_card + 1, -($table->asta_pnt+1), ($user_cur->handpt <= 2 ? "true" : "false"));
+
+ $ret = sprintf('gst.st = %d;', $user_cur->step+1);
+ $ret .= show_table(&$bin5,&$user_cur,$user_cur->step+1, TRUE, TRUE);
$user_cur->comm[$user_cur->step % COMM_N] = $ret;
$user_cur->step_inc();
}
}
- else if ($table->asta_pla_n == 0) {
- log_wr("PASSANO TUTTI!");
-
- if ($table->rules_engine($bin5, $curtime, BIN5_RULES_ALLPASS, $user)) {
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bin5->user[$table->player[$i]];
-
- $ret = sprintf('gst.st = %d;', $user_cur->step+1);
- $ret .= show_table($bin5, $user_cur,$user_cur->step+1, TRUE, TRUE);
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
- $user_cur->step_inc();
- }
- }
+ }
+ else {
+ log_wr("FINITA !");
+ // if a_pnt == 120 supergame ! else abbandono
+ if ($a_pnt == 120 || $user->asta_card != -1) {
+ $chooser = $index_cur;
+ for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++)
+ if ($i != $chooser)
+ $table->asta_pla[$i] = FALSE;
}
else {
- log_wr("FINITA !");
- // if a_pnt == 120 supergame ! else abbandono
- if ($a_pnt == 120 || $user->asta_card != -1) {
- $chooser = $index_cur;
- for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++)
- if ($i != $chooser)
- $table->asta_pla[$i] = FALSE;
- }
- else {
- /*
- $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();",
- $user->step+1, $table->asta_card + 1,-($table->asta_pnt));
- $user->step_inc();
- */
- for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) {
- $chooser = ($table->gstart + $i) % BIN5_PLAYERS_N;
- if ($table->asta_pla[$chooser]) {
- break;
- }
+ /*
+ $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();",
+ $user->step+1, $table->asta_card + 1,-($table->asta_pnt));
+ $user->step_inc();
+ */
+ for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $chooser = ($table->gstart + $i) % BIN5_PLAYERS_N;
+ if ($table->asta_pla[$chooser]) {
+ break;
}
}
- $table->asta_win = $chooser;
-
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bin5->user[$table->player[$i]];
- $ret = sprintf('gst.st = %d; %s dispose_asta(%d, %d, false);', $user_cur->step+1, $showst,
- $table->asta_card + 1,-($table->asta_pnt));
+ }
+ $table->asta_win = $chooser;
- if ($i == $chooser) {
- $ret .= "choose_seed(". $table->asta_card."); remark_on();";
- }
- else {
- $ret .= "remark_off();";
- }
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bin5->user[$table->player[$i]];
+ $ret = sprintf('gst.st = %d; %s dispose_asta(%d, %d, false);', $user_cur->step+1, $showst,
+ $table->asta_card + 1,-($table->asta_pnt));
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
- $user_cur->step_inc();
+ if ($i == $chooser) {
+ $ret .= "choose_seed(". $table->asta_card."); remark_on();";
+ }
+ else {
+ $ret .= "remark_off();";
}
+
+ $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+ $user_cur->step_inc();
}
}
- }
- else {
- log_wr("NON CI SIAMO");
+ $success = TRUE;
+ } while(FALSE);
+
+ if (!$success) {
+ $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1,
+ ($table->asta_pnt > 60 ? $table->asta_pnt + 1 : 61) );
+ if ($ret_s != "") {
+ $ret .= show_notify($ret_s, 0, $mlang_indwr['btn_close'][$G_lang], 400, 150);
+ }
+ $user->comm[$user->step % COMM_N] = $ret;
+ $user->step_inc();
+
+ log_wr("Ripetere.");
}
}
/* asta::choose */
else if ($argz[0] == 'choose') {
- if ($table->asta_win > -1 &&
- $user->table_pos == $table->asta_win) {
+ $success = FALSE;
+ do {
$a_brisco = $argz[1];
- if ($a_brisco >= 0 && $a_brisco < (BIN5_CARD_HAND * BIN5_PLAYERS_N)) {
- $table->briscola = $a_brisco;
- $table->friend = $table->card[$a_brisco]->owner;
- log_wr("GSTART 2");
- $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N;
- log_wr("Setta la briscola a ".$a_brisco);
-
- $chooser = $table->asta_win;
- $user_chooser = &$bin5->user[$table->player[$chooser]];
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bin5->user[$table->player[$i]];
- $user_cur->subst = 'game';
- $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1);
- if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) {
- // $ret .= "var de_che= 33;";
- $ret .= playsound("ringbell.mp3");
- }
- $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig);
+ if (!$table->rules->engine(&$bin5, $curtime, BIN5_RULES_CHECKCHOOSE, $user, $ret_s, $a_brisco)) {
+ break;
+ }
- /* bg of caller cell */
- $ret .= briscola_show($bin5, $table, $user_cur);
+ $table->briscola = $a_brisco;
- /* first gamer */
- if ($i == ($table->gstart % BIN5_PLAYERS_N))
- $ret .= "is_my_time = true; remark_on();";
- else
- $ret .= "is_my_time = false; remark_off();";
+ if (BIN5_CARD_HAND == 8)
+ $tourn_values = array(11, 10, 4,3,2, 1,1,1,1,1);
+ else
+ $tourn_values = array(33, 30, 12,9,6, 3,3,3,3,3);
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
- $user_cur->step_inc();
+ $table->tourn_pts = 0;
+ $seed = $a_brisco - ($a_brisco % 10);
+ for ($i = $seed ; $i < ($seed + min(10, BIN5_CARD_HAND * BIN5_PLAYERS_N)) ; $i++) {
+ if ($table->card[$i]->owner == $table->asta_win) {
+ $table->tourn_pts += $tourn_values[$i - $seed];
}
- /*
- TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE
- VAR PER PASSARE ALLA FASE DI GIOCO
- */
+ }
+
+ $table->friend = $table->card[$a_brisco]->owner;
+ log_wr("GSTART 2");
+ $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N;
+ log_wr("Setta la briscola a ".$a_brisco);
+
+ $chooser = $table->asta_win;
+ $user_chooser = &$bin5->user[$table->player[$chooser]];
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bin5->user[$table->player[$i]];
+ $user_cur->subst = 'game';
+ $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1);
+ if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) {
+ // $ret .= "var de_che= 33;";
+ $ret .= playsound("ringbell.mp3");
+ }
+ $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig);
+
+ /* bg of caller cell */
+ $ret .= briscola_show($bin5, $table, $user_cur);
+
+ /* first gamer */
+ if ($i == ($table->gstart % BIN5_PLAYERS_N))
+ $ret .= "is_my_time = true; remark_on();";
+ else
+ $ret .= "is_my_time = false; remark_off();";
+
+ $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+ $user_cur->step_inc();
}
+ /*
+ TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE
+ VAR PER PASSARE ALLA FASE DI GIOCO
+ */
+ $success = TRUE;
+ } while (0);
+
+ if (!$success) {
+ $ret = "";
+ if ($ret_s != "") {
+ $ret = show_notify($ret_s, 0, $mlang_indwr['btn_close'][$G_lang], 400, 150);
+ }
+ $user->comm[$user->step % COMM_N] = $ret;
+ $user->step_inc();
+
+ log_wr("Ripetere.");
}
+
}
}
else if ($user->subst == 'game') {
if ($table->turn == (BIN5_PLAYERS_N * BIN5_CARD_HAND)) { /* game finished */
log_wr(sprintf("GIOCO FINITO !!!"));
- if ($table->rules_engine($bin5, $curtime, BIN5_RULES_FINISH, $user)) {
+ if ($table->rules->engine($bin5, $curtime, BIN5_RULES_FINISH, $user)) {
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bin5->user[$table->player[$i]];
$retar[$i] .= show_table($bin5, $user_cur, $user_cur->step+1, TRUE, TRUE);
$G_base = "../";
-$mlang_stat_day = array( 'normal match'=> array( 'it' => 'Partite normali',
- 'en' => 'Normal matches' ),
- 'special match' => array( 'it' => 'Partite speciali',
- 'en' => 'Special matches'),
-
+// SYNC WITH bin5_tournaments table
+$mlang_stat_day = array(
'info_total'=> array( 'it' => 'totali',
'en' => 'En totali')
);
require_once("Obj/briskin5.phh");
require_once("Obj/placing.phh");
-function main_file($curtime)
-{
- GLOBAL $G_lang, $G_alarm_passwd;
- $tri = array();
- $mon = array();
- $wee = array();
-
- if (($fp = @fopen(LEGAL_PATH."/points.log", 'r')) == FALSE) {
- echo "Open data file error";
- exit;
- }
- echo "prima<br>";
-
- if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'r')) != FALSE) {
- $skip = intval(fgets($fp_start));
- if ($skip > 0)
- fseek($fp, $skip, SEEK_SET);
- fclose($fp_start);
- }
-
- if (($bdb = BriskDB::create()) == FALSE) {
- echo "database connection failed";
- exit;
- }
-
- $bdb->users_load();
-
- for ($i = 0 ; $i < $bdb->count() ; $i++) {
- $login = $bdb->getlogin_byidx($i);
- $tri[$i] = new Ptsgam($login);
- $mon[$i] = new Ptsgam($login);
- $wee[$i] = new Ptsgam($login);
- }
-
- // recalculate all the placings
- // 1246428948|492e4e9e856b0|N|tre|172.22.1.90|STAT:BRISKIN5:FINISH_GAME|4a4afd4983039|6|3|tre|1|due|2|uno|-1|
- while (!feof($fp)) {
- $p = 0;
- $bf = fgets($fp, 4096);
- $ar = csplitter($bf, '|');
- // if not auth table, continue
- if (count($ar) < 15)
- continue;
-
- // echo $p++."<br>";
- if ($ar[7] >= TABLES_AUTH_N)
- continue;
- // echo $p++." ".$ar[5]."<br>";
- // if not FINISH_GAME line, continue
- if ($ar[5] != "STAT:BRISKIN5:FINISH_GAME")
- continue;
- // echo $p++."<br>";
- // if to much old points, continue
- if ($ar[0] < $curtime - TRI_LIMIT) {
- if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'w')) != FALSE) {
- $curpos = ftell($fp);
- fwrite($fp_start, sprintf("%d\n", $curpos));
- fclose($fp_start);
- }
-
- continue;
- }
- // echo $p++." ".BIN5_PLAYERS_N."<br>";
-
- $found = FALSE;
- $mult = 1;
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) {
- if ($ar[10+($i*2)] == $ar[10+($e*2)]) {
- $mult = abs($ar[10+($i*2)]);
- $found = TRUE;
- }
- }
- if ($found)
- break;
- }
-
- if ($mult == 0)
- continue;
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- // echo $p." i) ".$i."<br>";
- $username = $ar[9+($i*2)];
- if (($item = $bdb->getitem_bylogin($username, $id)) == FALSE) {
- echo "WARNING: the user [".$username."] NOT EXISTS!<br>";
- continue;
- }
-
- // echo $item->login." id)".$id." ".$ar[10+($i*2)]." mult: ".$mult."<br>";
- $tri[$id]->add($ar[10+($i*2)] / $mult);
- if ($ar[0] >= $curtime - MON_LIMIT)
- $mon[$id]->add($ar[10+($i*2)] / $mult);
- if ($ar[0] >= $curtime - WEE_LIMIT)
- $wee[$id]->add($ar[10+($i*2)] / $mult);
- }
- // $p++; echo $p++."<br>";
- }
- fclose($fp);
-
- usort($tri, ptsgam_cmp);
- usort($mon, ptsgam_cmp);
- usort($wee, ptsgam_cmp);
-
- echo "<br><br>TRI<br>\n";
-
- if (($fplo = @fopen(LEGAL_PATH."/class_tri_lo.log", 'w')) == FALSE) {
- echo "Open tri_lo failed<br>";
- exit;
- }
- if (($fphi = @fopen(LEGAL_PATH."/class_tri_hi.log", 'w')) == FALSE) {
- echo "Open tri_hi failed<br>";
- exit;
- }
-
- for ($i = 0 ; $i < count($tri) ; $i++) {
- if ($tri[$i]->gam == 0.0)
- continue;
- printf("%s: %s (%d) <br>\n", $tri[$i]->username, $tri[$i]->snormpts(), $tri[$i]->gam);
- if ($tri[$i]->gam >= TRI_MAX_GAMES)
- fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam));
- else if ($tri[$i]->gam > TRI_MIN_GAMES)
- fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam));
- }
- fclose($fphi);
- fclose($fplo);
-
- echo "<br><br>MON<br>\n";
-
- if (($fplo = @fopen(LEGAL_PATH."/class_mon_lo.log", 'w')) == FALSE) {
- echo "Open tri_lo failed<br>";
- exit;
- }
- if (($fphi = @fopen(LEGAL_PATH."/class_mon_hi.log", 'w')) == FALSE) {
- echo "Open tri_hi failed<br>";
- exit;
- }
-
- for ($i = 0 ; $i < count($mon) ; $i++) {
- if ($mon[$i]->gam == 0.0)
- continue;
- printf("%s: %s (%d) <br>\n", $mon[$i]->username, $mon[$i]->snormpts(), $mon[$i]->gam);
- if ($mon[$i]->gam >= MON_MAX_GAMES)
- fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam));
- else if ($mon[$i]->gam > MON_MIN_GAMES)
- fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam));
- }
- fclose($fphi);
- fclose($fplo);
-
- echo "<br><br>WEE<br>\n";
- if (($fplo = @fopen(LEGAL_PATH."/class_wee_lo.log", 'w')) == FALSE) {
- echo "Open wee_lo failed<br>";
- exit;
- }
- if (($fphi = @fopen(LEGAL_PATH."/class_wee_hi.log", 'w')) == FALSE) {
- echo "Open wee_hi failed<br>";
- exit;
- }
-
- for ($i = 0 ; $i < count($wee) ; $i++) {
- if ($wee[$i]->gam == 0.0)
- continue;
- printf("%s: %s (%d) <br>\n", $wee[$i]->username, $wee[$i]->snormpts(), $wee[$i]->gam);
- if ($wee[$i]->gam >= WEE_MAX_GAMES)
- fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam));
- else if ($wee[$i]->gam > WEE_MIN_GAMES)
- fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam));
- }
- fclose($fphi);
- fclose($fplo);
-
-}
-
function main_pgsql($from, $to)
{
GLOBAL $G_lang, $G_dbpfx, $mlang_stat_day;
break;
}
- if (pg_query($bdb->dbconn->db(), "BEGIN") == FALSE) {
- log_crit("stat-day: begin failed");
- break;
- }
+ //if ($bdb->transaction("BEGIN") == FALSE) {
+ // log_crit("stat-day: begin failed");
+ // break;
+ //}
// retrieve list of active tournaments
$trn_sql = sprintf("SELECT * FROM %sbin5_tournaments WHERE active = 1;", $G_dbpfx);
if ($tmt_n == 0)
continue;
- if (!isset($mlang_stat_day[$trn_obj->name][$G_lang])) {
- log_crit("stat-day: tournament name not found in array");
- break;
- }
- printf("[Tournament [%s]], number of matches: %d\n", $mlang_stat_day[$trn_obj->name][$G_lang], $tmt_n);
- fprintf($fpexp, "<h3>%s</h3>", $mlang_stat_day[$trn_obj->name][$G_lang]);
+ printf("[Tournament [%s]], number of matches: %d\n", rules_id2descr($trn_obj->code, $G_lang), $tmt_n);
+ fprintf($fpexp, "<h2 style=\"padding: 8px; background-color: pink;\">%s</h2>", xcape(ucfirst(rules_id2descr($trn_obj->code, $G_lang))));
// loop on matches
for ($m = 0 ; $m < $tmt_n ; $m++) {
fprintf($fpexp, "<%s class='%s'>%d</%s>",
($tmt_obj->minus_one_is_old == -1 ? "td" : "th"),
- $cla_nam, pow(2,$gam_obj->mult) * $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) {
+ $rules_name = rules_id2name($trn_obj->code);
fprintf($fpexp, "<td>%s</td><td>%s</td>", $users[$gam_obj->mazzo]['login'],
- xcape( game_description($gam_obj->act, 'plain', $gam_obj->mult,
+ xcape( ${rules_name}::game_description($gam_obj->act, 'plain', $gam_obj->mult,
$gam_obj->asta_win,
($gam_obj->asta_win != -1 ?
$users[$gam_obj->asta_win]['login'] : ""),
$gam_obj->friend,
($gam_obj->friend != -1 ?
$users[$gam_obj->friend]['login'] : ""),
- $gam_obj->pnt, $gam_obj->asta_pnt) )
+ $gam_obj->pnt, $gam_obj->asta_pnt, $gam_obj->tourn_pts) )
);
}
fprintf($fpexp, "</tr>\n");
}
}
if ($t < $trn_n) {
- log_crit("stat-day: t < trn_n");
+ log_crit(sprintf("stat-day: t < trn_n (%d, %d)", $t, $trn_n));
break;
}
+ // if ($bdb->transaction("COMMIT") == FALSE) {
+ // break;
+ // }
$ret = (TRUE);
} while (0);
- if ($ret == FALSE) {
- pg_query($bdb->dbconn->db(), "ROLLBACK");
- }
+ // if ($ret == FALSE) {
+ // $bdb->transaction("ROLLBACK");
+ // }
if ($fpexp != FALSE) {
fclose($fpexp);
}
* brisk - statadm.php
*
* Copyright (C) 2009-2012 Matteo Nastasi
- * mailto: nastasi@alternativeoutput.it
+ * mailto: nastasi@alternativeoutput.it
* matteo.nastasi@milug.org
* web: http://www.alternativeoutput.it
*
/*
line example:
1246428948|492e4e9e856b0|N|tre|172.22.1.90|STAT:BRISKIN5:FINISH_GAME|4a4afd4983039|6|3|tre|1|due|2|uno|-1|
-
+
*/
$G_base = "../";
-define('BIN5_TOURNAMENT_NORMAL', 1);
-
ini_set("max_execution_time", "240");
require_once("../Obj/brisk.phh");
require_once("Obj/briskin5.phh");
require_once("Obj/placing.phh");
-function main_file($curtime)
-{
- GLOBAL $G_alarm_passwd;
- $tri = array();
- $mon = array();
- $wee = array();
-
- if (($fp = @fopen(LEGAL_PATH."/points.log", 'r')) == FALSE) {
- echo "Open data file error";
- exit;
- }
- echo "prima<br>";
-
- if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'r')) != FALSE) {
- $skip = intval(fgets($fp_start));
- if ($skip > 0)
- fseek($fp, $skip, SEEK_SET);
- fclose($fp_start);
- }
-
- if (($bdb = BriskDB::create()) == FALSE) {
- echo "database connection failed";
- exit;
- }
-
- $bdb->users_load();
-
- for ($i = 0 ; $i < $bdb->count() ; $i++) {
- $login = $bdb->getlogin_byidx($i);
- $tri[$i] = new Ptsgam($login);
- $mon[$i] = new Ptsgam($login);
- $wee[$i] = new Ptsgam($login);
- }
-
- // recalculate all the placings
- // 1246428948|492e4e9e856b0|N|tre|172.22.1.90|STAT:BRISKIN5:FINISH_GAME|4a4afd4983039|6|3|tre|1|due|2|uno|-1|
- while (!feof($fp)) {
- $p = 0;
- $bf = fgets($fp, 4096);
- $ar = csplitter($bf, '|');
- // if not auth table, continue
- if (count($ar) < 15)
- continue;
-
- // echo $p++."<br>";
- if ($ar[7] >= TABLES_AUTH_N)
- continue;
- // echo $p++." ".$ar[5]."<br>";
- // if not FINISH_GAME line, continue
- if ($ar[5] != "STAT:BRISKIN5:FINISH_GAME")
- continue;
- // echo $p++."<br>";
- // if to much old points, continue
- if ($ar[0] < $curtime - TRI_LIMIT) {
- if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'w')) != FALSE) {
- $curpos = ftell($fp);
- fwrite($fp_start, sprintf("%d\n", $curpos));
- fclose($fp_start);
- }
-
- continue;
- }
- // echo $p++." ".BIN5_PLAYERS_N."<br>";
-
- $found = FALSE;
- $mult = 1;
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) {
- if ($ar[10+($i*2)] == $ar[10+($e*2)]) {
- $mult = abs($ar[10+($i*2)]);
- $found = TRUE;
- }
- }
- if ($found)
- break;
- }
-
- if ($mult == 0)
- continue;
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- // echo $p." i) ".$i."<br>";
- $username = $ar[9+($i*2)];
- if (($item = $bdb->getitem_bylogin($username, $id)) == FALSE) {
- echo "WARNING: the user [".$username."] NOT EXISTS!<br>";
- continue;
- }
-
- // echo $item->login." id)".$id." ".$ar[10+($i*2)]." mult: ".$mult."<br>";
- $tri[$id]->add($ar[10+($i*2)] / $mult);
- if ($ar[0] >= $curtime - MON_LIMIT)
- $mon[$id]->add($ar[10+($i*2)] / $mult);
- if ($ar[0] >= $curtime - WEE_LIMIT)
- $wee[$id]->add($ar[10+($i*2)] / $mult);
- }
- // $p++; echo $p++."<br>";
- }
- fclose($fp);
-
- usort($tri, ptsgam_cmp);
- usort($mon, ptsgam_cmp);
- usort($wee, ptsgam_cmp);
-
- echo "<br><br>TRI<br>\n";
-
- if (($fplo = @fopen(LEGAL_PATH."/class_tri_lo.log", 'w')) == FALSE) {
- echo "Open tri_lo failed<br>";
- exit;
- }
- if (($fphi = @fopen(LEGAL_PATH."/class_tri_hi.log", 'w')) == FALSE) {
- echo "Open tri_hi failed<br>";
- exit;
- }
-
- for ($i = 0 ; $i < count($tri) ; $i++) {
- if ($tri[$i]->gam == 0.0)
- continue;
- printf("%s: %s (%d) <br>\n", $tri[$i]->username, $tri[$i]->snormpts(), $tri[$i]->gam);
- if ($tri[$i]->gam >= TRI_MAX_GAMES)
- fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam));
- else if ($tri[$i]->gam > TRI_MIN_GAMES)
- fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam));
- }
- fclose($fphi);
- fclose($fplo);
-
- echo "<br><br>MON<br>\n";
-
- if (($fplo = @fopen(LEGAL_PATH."/class_mon_lo.log", 'w')) == FALSE) {
- echo "Open tri_lo failed<br>";
- exit;
- }
- if (($fphi = @fopen(LEGAL_PATH."/class_mon_hi.log", 'w')) == FALSE) {
- echo "Open tri_hi failed<br>";
- exit;
- }
-
- for ($i = 0 ; $i < count($mon) ; $i++) {
- if ($mon[$i]->gam == 0.0)
- continue;
- printf("%s: %s (%d) <br>\n", $mon[$i]->username, $mon[$i]->snormpts(), $mon[$i]->gam);
- if ($mon[$i]->gam >= MON_MAX_GAMES)
- fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam));
- else if ($mon[$i]->gam > MON_MIN_GAMES)
- fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam));
- }
- fclose($fphi);
- fclose($fplo);
-
- echo "<br><br>WEE<br>\n";
- if (($fplo = @fopen(LEGAL_PATH."/class_wee_lo.log", 'w')) == FALSE) {
- echo "Open wee_lo failed<br>";
- exit;
- }
- if (($fphi = @fopen(LEGAL_PATH."/class_wee_hi.log", 'w')) == FALSE) {
- echo "Open wee_hi failed<br>";
- exit;
- }
-
- for ($i = 0 ; $i < count($wee) ; $i++) {
- if ($wee[$i]->gam == 0.0)
- continue;
- printf("%s: %s (%d) <br>\n", $wee[$i]->username, $wee[$i]->snormpts(), $wee[$i]->gam);
- if ($wee[$i]->gam >= WEE_MAX_GAMES)
- fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam));
- else if ($wee[$i]->gam > WEE_MIN_GAMES)
- fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam));
- }
- fclose($fphi);
- fclose($fplo);
-
-}
-
function main_pgsql($curtime)
{
GLOBAL $G_dbpfx;
$maxg = array( TRI_MAX_GAMES, MON_MAX_GAMES, WEE_MAX_GAMES );
do {
- if (pg_query($bdb->dbconn->db(), "BEGIN") == FALSE) {
+ if ($bdb->transaction("BEGIN") == FALSE) {
log_crit("statadm: begin failed");
break;
}
-
- $mtc_sql = sprintf("CREATE TEMPORARY TABLE %sbin5_temp_matches ON COMMIT DROP AS SELECT m.code, max(g.tstamp) AS tstamp
- FROM %sbin5_matches as m, %sbin5_games as g
- WHERE m.tcode = %d AND m.code = g.mcode GROUP BY m.code, m.ttok",
- $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL);
+
+ $mtc_sql = sprintf("CREATE TEMPORARY TABLE %sbin5_temp_matches ON COMMIT DROP AS SELECT m.code, max(g.tstamp) AS tstamp
+ FROM %sbin5_matches as m, %sbin5_games as g
+ WHERE (m.tcode = %d OR m.tcode = %d) AND m.code = g.mcode GROUP BY m.code, m.ttok",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_OLDRULES, BIN5_TOURNAMENT_NO_DRAW);
if (pg_query($bdb->dbconn->db(), $mtc_sql) == FALSE) {
log_crit("statadm: temporary matches table creation [$mtc_sql] failed");
break;
}
-
+
$tmt_sql = sprintf("SELECT * FROM %sbin5_temp_matches WHERE tstamp < to_timestamp(%d)",
$G_dbpfx, $curtime - TRI_LIMIT);
log_crit("statadm: log file [$fname] open failed");
break;
}
-
+
$tmt_n = pg_numrows($tmt_pg);
// get matches
for ($m = 0 ; $m < $tmt_n ; $m++) {
$tmt_obj = pg_fetch_object($tmt_pg, $m);
-
+
$mtc_sql = sprintf("SELECT * from %sbin5_matches WHERE code = %d",
$G_dbpfx, $tmt_obj->code);
-
+
if (($mtc_pg = pg_query($bdb->dbconn->db(), $mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) {
log_crit("statadm: matches row select failed");
break;
}
$mtc_obj = pg_fetch_object($mtc_pg, 0);
-
- if (fwrite($fp, sprintf("M|%d|%s|%d|\n", $mtc_obj->code, xcapelt($mtc_obj->ttok), $mtc_obj->tidx)) == FALSE) {
+
+ if (fwrite($fp, sprintf("M|%d|%s|%d|%d|\n", $mtc_obj->code, xcapelt($mtc_obj->ttok),
+ $mtc_obj->tidx, $mtc_obj->tcode)) == FALSE) {
log_crit("statadm: log file [$fname] write match failed");
break;
}
-
+
// get games associated to each match
- $gam_sql = sprintf("SELECT code, mcode, EXTRACT(epoch FROM tstamp) AS tstamp FROM %sbin5_games
+ $gam_sql = sprintf("SELECT code, mcode, EXTRACT(epoch FROM tstamp) AS tstamp FROM %sbin5_games
WHERE mcode = %d ORDER BY tstamp",
$G_dbpfx, $mtc_obj->code);
if (($gam_pg = pg_query($bdb->dbconn->db(), $gam_sql)) == FALSE) {
log_crit("statadm: games row select failed");
break;
}
-
+
$gam_n = pg_numrows($gam_pg);
for ($g = 0 ; $g < $gam_n ; $g++) {
$gam_obj = pg_fetch_object($gam_pg, $g);
-
+
if (fwrite($fp, sprintf("G|%d|%d|%d|\n", $gam_obj->mcode, $gam_obj->code, $gam_obj->tstamp)) == FALSE) {
log_crit("statadm: log file [$fname] write game failed");
break;
$pts_n = pg_numrows($pts_pg);
for ($p = 0 ; $p < $pts_n ; $p++) {
$pts_obj = pg_fetch_object($pts_pg, $p);
-
+
if (fwrite($fp, sprintf("P|%d|%d|%d|\n", $pts_obj->gcode, $pts_obj->ucode, $pts_obj->pts)) == FALSE) {
log_crit("statadm: log file [$fname] write pts failed");
break;
}
if ($g < $gam_n)
break;
-
+
// delete match and all it's childs (games and points)
$del_sql = sprintf("DELETE FROM %sbin5_matches WHERE code = %d",
$G_dbpfx, $tmt_obj->code);
log_crit("statadm: matches row deletion failed");
break;
}
-
+
}
if ($m < $tmt_n)
break;
log_crit("statadm: truncate failed");
break;
}
-
+
for ($dtime = 0 ; $dtime < count($limi) ; $dtime++) {
$old_score = array( 1000000000, 1000000000);
$old_gam = array( -1, -1);
// TAG: POINTS_MANAGEMENT
$pla_sql = sprintf("SELECT (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) as score, sum(p.pts) as points, count(p.pts) as games, u.code as ucode, u.login as login
- FROM %sbin5_points as p, %sbin5_games as g, %sbin5_matches as m, %susers as u
- WHERE m.tcode = %d AND m.code = g.mcode AND
+ FROM %sbin5_points as p, %sbin5_games as g, %sbin5_matches as m, %susers as u
+ WHERE (m.tcode = %d OR m.tcode = %d) AND m.code = g.mcode AND
( (u.type & (CAST (X'ff0000' as integer))) <> (CAST (X'800000' as integer)) ) AND
g.tstamp > to_timestamp(%d) AND g.tstamp <= to_timestamp(%d) AND
p.ucode = u.code AND p.gcode = g.code AND
p.pts != 0
GROUP BY u.code, u.login
- ORDER BY (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) DESC,
+ ORDER BY (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) DESC,
count(p.pts) DESC",
- $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL,
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx,
+ BIN5_TOURNAMENT_OLDRULES, BIN5_TOURNAMENT_NO_DRAW,
$curtime - $limi[$dtime], $curtime);
// log_crit("statadm: INFO: [$pla_sql]");
log_crit("statadm: main placement select failed [$pla_sql]");
break;
}
-
+
for ($i = 0 ; $i < pg_numrows($pla_pg) ; $i++) {
$pla_obj = pg_fetch_object($pla_pg,$i);
if ($pla_obj->games < $ming[$dtime])
$subty = 0;
else
$subty = 1;
-
+
$ty = ($dtime * 2) + $subty;
-
+
if ($pla_obj->games != $old_gam[$subty] || $pla_obj->score != $old_score[$subty]) {
$rank[$subty]++;
}
$new_sql = sprintf("INSERT INTO %sbin5_places (type, rank, ucode, login, pts, games, score)
VALUES (%d, %d, %d, '%s', %d, %d, %f);",
- $G_dbpfx, $ty, $rank[$subty], $pla_obj->ucode, escsql($pla_obj->login),
+ $G_dbpfx, $ty, $rank[$subty], $pla_obj->ucode, escsql($pla_obj->login),
$pla_obj->points, $pla_obj->games, $pla_obj->score);
- if ( ! (($new_pg = pg_query($bdb->dbconn->db(), $new_sql)) != FALSE &&
+ if ( ! (($new_pg = pg_query($bdb->dbconn->db(), $new_sql)) != FALSE &&
pg_affected_rows($new_pg) == 1) ) {
log_crit("statadm: new place insert failed: ".print_r($pla_obj, TRUE));
- break;
+ break;
}
-
+
$old_gam[$subty] = $pla_obj->games;
$old_score[$subty] = $pla_obj->score;
} // for ($i = 0 ; $i < pg_numrows($pla_pg) ; $i++) {
$mti_sql = sprintf("UPDATE %sbin5_places_mtime SET mtime = (to_timestamp(%d)) WHERE code = 0;",
$G_dbpfx, $curtime);
- if ( ! (($mti_pg = pg_query($bdb->dbconn->db(), $mti_sql)) != FALSE &&
+ if ( ! (($mti_pg = pg_query($bdb->dbconn->db(), $mti_sql)) != FALSE &&
pg_affected_rows($mti_pg) == 1) ) {
log_crit("statadm: new mtime insert failed.");
- break;
+ break;
}
-
- if (pg_query($bdb->dbconn->db(), "COMMIT") == FALSE) {
+
+ if ($bdb->transaction("COMMIT") == FALSE) {
break;
}
return (TRUE);
} while (0);
- pg_query($bdb->dbconn->db(), "ROLLBACK");
+ $bdb->transaction("ROLLBACK");
return (FALSE);
}
function main()
{
GLOBAL $G_dbasetype, $G_alarm_passwd, $pazz;
-
+
echo "Inizio.<br>";
mop_flush();
if ($pazz != $G_alarm_passwd) {
mop_flush();
exit;
}
-
+
$fun_name = "main_${G_dbasetype}";
-
+
$ctime = time();
if (BIN5_PLAYERS_N != 5)
echo "Success.<br>\n";
else
echo "Failed.<br>\n";
-
+
echo "Fine.\n";
mop_flush();
}
<table width="100%%" border="0" cols="3"><tr>
<td align="left"><div style="padding-left: 8px;">'.$banner_top_left.'</div></td>
<td align="center">'.(($G_with_topbanner || $G_with_donors) ? '<table><tr><td>' : '').'<div style="text-align: center;">
- <!--<img class="nobo" src="img/brisk_logo64.png">--><img class="nobo" src="img/brisk_logo64_blackribbon.png" title="ciao grrr">
- '.$mlang_room['headline'][$G_lang].'<br>
+ <img class="nobo" src="img/brisk_logo64.png">'
+/* <img class="nobo" src="img/brisk_logo64_blackribbon.png" title="ciao Prof" alt="ciao Prof">' */
+ .$mlang_room['headline'][$G_lang].'<br>
</div>'.( ($G_with_topbanner || $G_with_donors) ? sprintf('</td><td>%s</td></tr></table>',
($G_with_topbanner ? $G_topbanner :
"<div style='background-color: #ffd780; border: 1px solid black; text-align: center;'><img class='nobo' src=\"donometer.php?c=".$G_donors_cur."&a=".$G_donors_all."\"><div style='padding: 1px; background-color: white;'><b>donatori</b></div></div>") ) : '').'</td>
<div style="position: absolute;">
'.$altout_support_big.'
</div>
-<a style="/* position: absolute; top: 40px; left: 6px; */" target="_blank" href="http://it-it.facebook.com/group.php?gid=59742820791"><img class="nobo" id="btn_facebook" src="img/facebook_btn.png" title="unisciti al gruppo \'quelli della brisk\'"></a>
+<a style="/* position: absolute; top: 40px; left: 6px; */" target="_blank" href="https://www.facebook.com/groups/59742820791"><img class="nobo" id="btn_facebook" src="img/facebook_btn.png" title="unisciti al gruppo \'quelli della brisk\'"></a>
' . ( /* NOTE: here facebook or fake facebook */
(!$G_is_local && $_cookie_law_3party == 'true') ?
'<div class="fb-like" style="margin-top: 4px;" data-href="https://www.facebook.com/pages/Brisk-briscola-chiamata-in-salsa-ajax/716026558416911" data-share="false" data-send="true" data-width="70" data-show-faces="false" data-colorscheme="dark" layout="button_count"></div>
}
table.placing {
- background-image: url('img/najole_wh_light.png');
+ background-image: url('img/lines_light.png');
background-attachment: fixed;
border: 1px solid gray;
table.placing th {
border: 1px solid gray;
- text-align: center;
- padding: 4px;
+ text-align: right;
+ padding: 8px;
+ min-width: 50px;
+}
+
+table.placing th span {
+ font-weight: normal;
+ float: left;
}
table.placing td {
-moz-border-radius: 8px;
border-radius: 8px;
- background-image: url('img/najole_wh_light.png');
+ background-image: url('img/lines_light.png');
background-attachment: fixed;
width: 25%;
border-spacing: 0px;
padding: 0px;
- background-image: url('img/najole_wh_light.png');
+ background-image: url('img/lines_light.png');
background-attachment: fixed;
}
border: 1px solid gray;
margin-top: 8px;
- background-image: url('img/najole_wh_light.png');
+ background-image: url('img/lines_light.png');
background-attachment: fixed;
}
-moz-border-radius: 4px;
border-radius: 4px;
- background-image: url('img/najole_wh_light.png');
+ background-image: url('img/lines_light.png');
background-attachment: fixed;
}
function j_check_email(email, ret)
{
- if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,10})+$/.test(email))
+ if (/^\w+([\.-]*\w+)*@\w+([\.-]*\w+)*(\.\w{2,10})+$/.test(email))
return (true);
ret.ret += (g_lang == 'en' ? "Invalid email address. " :
"Indirizzo e-mail non valido.");
break;
}
}
- }
+ } // else if ($action == "accept") {
+
do {
if (($bdb = BriskDB::create()) == FALSE) {
}
exit;
}
+
+
+ else if ($action == "delete") {
+ foreach($_POST as $key => $value) {
+ if (substr($key, 0, 9) != "f_newuser")
+ continue;
+
+ $id = (int)substr($key, 9);
+ if ($id <= 0)
+ continue;
+
+ // check existence of username or email
+ $is_trans = FALSE;
+ $res = FALSE;
+ do {
+ if (($bdb = BriskDB::create()) == FALSE)
+ break;
+
+ // retrieve list added users
+ $usr_sql = sprintf("
+SELECT usr.*, guar.login AS guar_login
+ FROM %susers AS usr
+ JOIN %susers AS guar ON guar.code = usr.guar_code
+ WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer))
+ AND usr.disa_reas = %d AND usr.code = %d;",
+ $G_dbpfx, $G_dbpfx,
+ USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE,
+ USER_DIS_REA_NU_TOBECHK, $id);
+
+
+ if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) {
+ log_crit("stat-day: select from tournaments failed");
+ break;
+ }
+ $usr_n = pg_numrows($usr_pg);
+ if ($usr_n != 1) {
+ $status .= sprintf("Inconsistency for code %d, returned %d records, skipped.<br>",
+ $id, $usr_n);
+ break;
+ }
+
+ $usr_obj = pg_fetch_object($usr_pg, 0);
+
+ $bdb->transaction('BEGIN');
+ $is_trans = TRUE;
+
+ $del_sql = sprintf("DELETE FROM %susers WHERE code = %d;",
+ $G_dbpfx, $usr_obj->code);
+
+ if (($del_pg = pg_query($bdb->dbconn->db(), $del_sql)) == FALSE) {
+ log_crit("stat-day: select from tournaments failed");
+ break;
+ }
+
+ // FIXME: add to index_wr.php strings
+ $subj = "Brisk: nickname rifiutato";
+ // the same for both cases:
+ // if (($usr_obj->type & USER_FLAG_TY_APPR) == USER_FLAG_TY_APPR) {
+ $body_txt = sprintf('Ciao, sono l\' amministratore del sito di Brisk.
+
+Ti volevo segnalare che il nickname \'%s\' con cui ti volevi registrare
+non ha superato la fase di verifica manuale; il motivo può essere
+la sua illeggibilità per gli altri utenti o il contenuto poco ortodosso
+o troppo aggressivo o o ci sono troppe cifre consecutive o qualcosa del genere.
+
+La procedura di registrazione va ripetuta.
+
+Saluti e buone partite, mop.', $usr_obj->login);
+
+ $body_htm = sprintf('Ciao, sono l\' amministratore del sito di Brisk.<br><br>
+Ti volevo segnalare che il nickname \'%s\' con cui ti volevi registrare
+non ha superato la fase di verifica manuale; il motivo può essere
+la sua illeggibilità per gli altri utenti o il contenuto poco ortodosso
+o troppo aggressivo o o ci sono troppe cifre consecutive o qualcosa del genere.<br><br>
+La procedura di registrazione va ripetuta.<br><br>
+Saluti e buone partite, mop.', $usr_obj->login);
+ /* } */
+ /* else { */
+ /* $body_txt = sprintf($mlang_indwr['nu_mtext'][$G_lang], */
+ /* $usr_obj->guar_login, $usr_obj->login, $confirm_page); */
+ /* $body_htm = sprintf($mlang_indwr['nu_mhtml'][$G_lang], */
+ /* $usr_obj->guar_login, $usr_obj->login, $confirm_page); */
+ /* } */
+
+ if (brisk_mail($usr_obj->email, $subj, $body_txt, $body_htm) == FALSE) {
+ // mail error
+ fprintf(STDERR, "ERROR: mail send FAILED\n");
+ break;
+ }
+ $status .= sprintf("user delete for %s: SUCCESS<br>", $usr_obj->login);
+ $bdb->transaction('COMMIT');
+ $res = TRUE;
+ } while(FALSE);
+ if ($res == FALSE) {
+ $status .= sprintf("Error occurred during accept action<br>");
+ if ($is_trans)
+ $bdb->transaction('ROLLBACK');
+ break;
+ }
+ printf("Registration %s for login %s deleted<br>\n", $usr_obj->code, $usr_obj->login);
+ }
+ }
else {
do {
if (($bdb = BriskDB::create()) == FALSE) {