CONFIG_FILE="$HOME/.brisk_install"
apache_conf="/etc/apache2/sites-available/default"
+card_hand=3
players_n=3
tables_n=44
tables_auth_n=12
echo "$1 -h"
echo "$1 chk - run lintian on all ph* files."
echo "$1 pkg - build brisk packages."
- echo "$1 [-W] [-n 3|5] [-t <(n>=4)>] [-T <auth_tab>] [-A <apache-conf>] [-a <auth_file_name>] [-f <conffile>] [-p <outconf>] [-U <usock_path>] [-u <sys_user>] [-d <TRUE|FALSE>] [-w <web_dir>] [-k <ftok_dir>] [-l <legal_path>] [-y <proxy_path>] [-P <prefix_path>]"
+ echo "$1 [-W] [-n 3|5] [-c 3|8] [-t <(n>=4)>] [-T <auth_tab>] [-A <apache-conf>] [-a <auth_file_name>] [-f <conffile>] [-p <outconf>] [-U <usock_path>] [-u <sys_user>] [-d <TRUE|FALSE>] [-w <web_dir>] [-k <ftok_dir>] [-l <legal_path>] [-y <proxy_path>] [-P <prefix_path>]"
echo " -h this help"
echo " -f use this config file"
echo " -p save preferences in the file"
echo " -W web files only"
echo " -A apache_conf - def. $apache_conf"
+ echo " -c number cards in hand - def. $card_hand"
echo " -n number of players - def. $players_n"
echo " -t number of tables - def. $tables_n"
echo " -T number of auth-only tables - def. $tables_auth_n"
-A*) apache_conf="$(get_param "-A" "$1" "$2")"; sh=$?;;
-f*) conffile="$(get_param "-f" "$1" "$2")"; sh=$?;;
-p*) outconf="$(get_param "-p" "$1" "$2")"; sh=$?;;
+ -c*) card_hand="$(get_param "-c" "$1" "$2")"; sh=$?;;
-n*) players_n="$(get_param "-n" "$1" "$2")"; sh=$?;;
-t*) tables_n="$(get_param "-t" "$1" "$2")"; sh=$?;;
-T*) tables_auth_n="$(get_param "-T" "$1" "$2")"; sh=$?;;
#
echo " outconf: \"$outconf\""
echo " apache_conf:\"$apache_conf\""
+echo " card_hand: $card_hand"
echo " players_n: $players_n"
-echo " tables_n: $tables_n"
+echo " tables_n: $tables_n"
echo " tables_auth_n: $tables_auth_n"
echo " brisk_auth_conf: \"$brisk_auth_conf\""
echo " brisk_debug:\"$brisk_debug\""
echo "# Produced automatically by brisk::INSTALL.sh"
echo "#"
echo "apache_conf=$apache_conf"
+ echo "card_hand=$card_hand"
echo "players_n=$players_n"
echo "tables_n=$tables_n"
echo "tables_auth_n=$tables_auth_n"
#
ftokk_path="${ftok_path}k"
+if [ $card_hand -lt 3 -o $card_hand -gt 8 ]; then
+ echo "card_hand ($card_hand) out of range (3 <= c <= 8)"
+ exit 1
+fi
+
if [ $players_n -ne 3 -a $players_n -ne 5 ]; then
echo "players_n ($players_n) out of range (3|5)"
exit 1
fi
# .js substitutions
+sed -i "s/CARD_HAND *= *[0-9]\+/CARD_HAND = $card_hand/g" $(find ${web_path}__ -type f -name '*.js' -exec grep -l 'CARD_HAND *= *[0-9]\+' {} \;)
sed -i "s/PLAYERS_N *= *[0-9]\+/PLAYERS_N = $players_n/g" $(find ${web_path}__ -type f -name '*.js' -exec grep -l 'PLAYERS_N *= *[0-9]\+' {} \;)
sed -i "s/^var G_send_time *= *[0-9]\+/var G_send_time = $send_time/g" $(find ${web_path}__ -type f -name '*.js' -exec grep -l '^var G_send_time *= *[0-9]\+' {} \;)
# .ph[pho] substitutions
sed -i "s/define *( *'PLAYERS_N', *[0-9]\+ *)/define('PLAYERS_N', $players_n)/g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'PLAYERS_N', *[0-9]\+ *)" {} \;)
+sed -i "s/define *( *'BIN5_CARD_HAND', *[0-9]\+ *)/define('BIN5_CARD_HAND', $card_hand)/g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'BIN5_CARD_HAND', *[0-9]\+ *)" {} \;)
+
sed -i "s/define *( *'BIN5_PLAYERS_N', *[0-9]\+ *)/define('BIN5_PLAYERS_N', $players_n)/g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'BIN5_PLAYERS_N', *[0-9]\+ *)" {} \;)
sed -i "s@define *( *'FTOK_PATH',[^)]*)@define('FTOK_PATH', \"$ftok_path\")@g" $(find ${web_path}__ -type f -name '*.ph*' -exec grep -l "define *( *'FTOK_PATH',[^)]*)" {} \;)
FEATURES |
----------+
+ WIP - CONTINUE FEATURE
+ . replace explicit strings with multilanguage array
+
+ DONE . save points every game
+ DONE . modify points calculation to include order and mazzo
+ DONE . exclude not standard types from statistics
+ DONE . daily reports (1 for each active tournament)
+ DONE . monthly stats (for normal match only)
+
+ DONE . show current match ID when created
+ DONE . add info about continue to the info page
+ DONE . add command to continue
+ DONE . check consistency of the request
+ DONE . rearrange users and game status to continue the selected match
+
+ DONE . investigate user reordering ??
+
- WEBSOCKET TRANSPORT
. refactoring $enc attribute management
DONE . reintroduced $enc = 'plain' for websocket
--- /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"
+
+
+# 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) ' | 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) ' | 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]})$")"
+ l="$(echo "$wids" | wc -l)"
+ if [ $l -eq 3 ]; then
+ for i in $(seq 0 2); 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; 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; do
+ firefox -no-remote -P $i "$HOMEPAGE?whoami=$i" &
+ pd="$!"
+ echo "$i: $pd"
+ pids[$ct]="$pd"
+ ct=$((ct + 1))
+ done
+
+ rearrange_windows
+fi
#!/bin/bash
-etags -l php $(find -name '*.ph*')
\ No newline at end of file
+etags -l php $(find -name '*.ph*')
+
Sparse documentation about Brisk.
+==== brisk/table/user relationships ====
+
+=== in the room ===
+
+// when standup
+bri->user[user_idx] = user
+user->idx = user_idx
+user->idx_orig = user_idx
+
+// when sitdown
+table->player[player_idx] = user_idx
+user->table_pos = player_idx
+
+=== in the game ===
+
+bin5->user[user_idx] = user
+table->player[player_idx] = user_idx
+user->table_pos = player_idx
+
+
Many things aren't documented at all, but I start with authentication workflow.
==== MODIFY USERS TABLE ====
- align many status var with briskin5 user values
- room_join_wakeup()
+==== Chunk flow ====
+
+
+$ret = $user->maincheck($old_stat, $old_subst, $old_step, $this->rd_stat, $this->rd_subst, $this->rd_step,
+ $splashdate, $table_idx, $table_token))
+$user->rd_transp->chunk($this->rd_scristp++, $ret);
+
#! /bin/bash
#
-# all this part is from mopshop and we will use it to construct the brisk database
+# functions
+usage () {
+ echo " USAGE"
+ echo " ./builder <command> [-d|--dryrun] [-a|--allfiles] [-s|--short] ..."
+ echo " ./builder <-h|--help|help>"
+ echo " commands are:"
+ echo " create"
+ echo " destroy"
+ echo " clean"
+ echo " build"
+ echo " rebuild"
+ echo " psql"
+ echo " piped"
+ echo " add <filesql> [<filesql2> [..]]"
+ echo " del <filesql> [<filesql2> [..]]"
+ echo " dump [dumpfile]"
+ echo " dumpall [dumpfile]"
+ echo " all"
+ exit $1
+}
+
+sqlexe () {
+ local sht
+ sht=$1
+
+ if [ "$SHORT" = "y" ]; then
+ sed "s/#PFX#/$PFX/g" | psql -a $pg_args 2>&1 | egrep 'ERROR|^-- MESG'
+ else
+ sed "s/#PFX#/$PFX/g" | psql -a $pg_args
+ fi
+
+ return 0
+}
+
+one_or_all() {
+ if [ "$ALL_FILES" = "y" ]; then
+ sfx_files='*'
+ else
+ sfx_files='*.sql'
+ fi
+
+ if [ "$1" = "" ]; then
+ cat sql.d/$sfx_files
+ else
+ cat "$1"
+ fi
+}
+
#
+# MAIN
+#
+
+CMD=$1
+shift
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -d|--dryrun)
+ DRY_RUN=y
+ psql () {
+ echo "MOCKPSQL params: $@"
+ cat
+ }
+ ;;
+ -a|--allfiles)
+ ALL_FILES=y
+ ;;
+ -s|--short)
+ SHORT=y
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
if [ -f $HOME/.brisk-db.conf ]; then
source $HOME/.brisk-db.conf
elif [ -f $HOME/.db.conf ]; then
test "$DBUSER" != "" && pg_args="$pg_args -U $DBUSER"
test "$DBPORT" != "" && pg_args="$pg_args -p $DBPORT"
test "$DBBASE" != "" && pg_args="$pg_args $DBBASE"
-
-sqlexe () {
- local sht
- sht=$1
-
- if [ $sht -eq 1 ]; then
- sed "s/#PFX#/$PFX/g" | psql -a $pg_args 2>&1 | egrep 'ERROR|^-- MESG'
- else
- sed "s/#PFX#/$PFX/g" | psql -a $pg_args
- fi
- return 0
-}
+MATCH_DROP='^drop|^alter table.* drop '
-one_or_all() {
- if [ "$1" = "" ]; then
- cat sql.d/*.sql
- else
- cat "$1"
- fi
-}
+case $CMD in
+ "create")
+ echo "su root"
+ su root -c "su postgres -c \"echo \\\"DBUser passwd: $DBPASS\\\" ; createuser -S -D -R -P $DBUSER && createdb -E utf8 -O $DBUSER $DBBASE\""
+ ;;
-#
-# MAIN
-#
-sht=0
+ "destroy")
+ echo "su root"
+ su root -c "su postgres -c \"dropdb $DBBASE && dropuser $DBUSER\""
+ ;;
+ "clean")
+ ( echo "-- MESG: clean start" ; one_or_all $2 | egrep -i "$MATCH_DROP" | tac ; echo "-- MESG: clean end" ; ) | sqlexe
+ ;;
+ "build")
+ ( echo "-- MESG: build start" ; one_or_all $2 | egrep -iv "$MATCH_DROP" ; echo "-- MESG: build end" ; ) | sqlexe
+ ;;
+ "rebuild")
+ ( echo "-- MESG: clean start" ; one_or_all $2 | egrep -i "$MATCH_DROP" | tac ; echo "-- MESG: clean end" ; \
+ echo "-- MESG: build start" ; one_or_all $2 | egrep -iv "$MATCH_DROP" ; echo "-- MESG: build end" ; ) \
+ | sqlexe
+ ;;
+ "psql")
+ psql $pg_args $@
+ ;;
-if [ "$1" = "-s" ]; then
- shift
- sht=1
-fi
+ "piped")
+ psql $pg_args -t -q -A -F '|' $@
+ ;;
+ "dump")
+ if [ $# -eq 1 ]; then
+ pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE
+ else
+ pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE > $1
+ fi
+ ;;
+ "dumpall")
+ if [ $# -eq 1 ]; then
+ pg_dump -h $DBHOST -U $DBUSER $DBBASE
+ else
+ pg_dump -h $DBHOST -U $DBUSER $DBBASE > $1
+ fi
+ ;;
+ "add")
+ ( echo "-- MESG: add start" ; cat "$@" | egrep -iv "$MATCH_DROP" ; echo "-- MESG: add end" ; ) | sqlexe
+ ;;
+ "del")
+ ( echo "-- MESG: del start" ; cat "$@" | egrep -i "$MATCH_DROP" | tac ; echo "-- MESG: del end" ; ) | sqlexe
+ ;;
+ "help"|"-h"|"--help")
+ usage 0
+ ;;
+ *)
+ usage 1
+ ;;
+esac
-if [ "$1" = "create" ]; then
- echo "su root"
- su root -c "su postgres -c \"echo \\\"DBUser passwd: $DBPASS\\\" ; createuser -S -D -R -P $DBUSER && createdb -E utf8 -O $DBUSER $DBBASE\""
-elif [ "$1" = "destroy" ]; then
- echo "su root"
- su root -c "su postgres -c \"dropdb $DBBASE && dropuser $DBUSER\""
-elif [ "$1" = "clean" ]; then
- ( echo "-- MESG: clean start" ; one_or_all $2 | grep -i '^drop' | tac ; echo "-- MESG: clean end" ; ) | sqlexe $sht
-elif [ "$1" = "build" ]; then
- ( echo "-- MESG: build start" ; one_or_all $2 | grep -iv '^drop' ; echo "-- MESG: build end" ; ) | sqlexe $sht
-elif [ "$1" = "rebuild" ]; then
- ( echo "-- MESG: clean start" ; one_or_all $2 | grep -i '^drop' | tac ; echo "-- MESG: clean end" ; \
- echo "-- MESG: build start" ; one_or_all $2 | grep -iv '^drop' ; echo "-- MESG: build end" ; ) \
- | sqlexe $sht
-elif [ "$1" = "psql" ]; then
- shift
- psql $pg_args $@
-elif [ "$1" = "piped" ]; then
- shift
- psql $pg_args -t -q -A -F '|' $@
-elif [ "$1" = "dump" ]; then
- if [ $# -eq 1 ]; then
- pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE
- else
- pg_dump -a --inserts -h $DBHOST -U $DBUSER $DBBASE > $2
- fi
-elif [ "$1" = "dumpall" ]; then
- if [ $# -eq 1 ]; then
- pg_dump -h $DBHOST -U $DBUSER $DBBASE
- else
- pg_dump -h $DBHOST -U $DBUSER $DBBASE > $2
- fi
-elif [ "$1" = "add" ]; then
- cat "$2" | sqlexe $sht
-else
- echo " USAGE"
- echo " ./builder create"
- echo " ./builder destroy"
- echo " ./builder clean"
- echo " ./builder build"
- echo " ./builder rebuild"
- echo " ./builder psql"
- echo " ./builder piped"
- echo " ./builder add <filesql>"
- echo " ./builder dump [dumpfile]"
- echo " ./builder dumpall [dumpfile]"
- echo " ./builder all"
- echo " ./builder help"
-fi
+exit 0
+ALTER TABLE #PFX#users DROP COLUMN last_dona;
ALTER TABLE #PFX#users ADD COLUMN last_dona integer DEFAULT 0; -- last donate
-ALTER TABLE #PFX#users ADD COLUMN supp_comp text DEFAULT 'ff0000ffff00' -- fg/bg supporter color
\ No newline at end of file
+
+ALTER TABLE #PFX#users DROP COLUMN supp_comp;
+ALTER TABLE #PFX#users ADD COLUMN supp_comp text DEFAULT 'ff0000ffff00'; -- fg/bg supporter color
+
--- /dev/null
+DROP TABLE #PFX#bin5_table_orders;
+CREATE TABLE #PFX#bin5_table_orders (
+ mcode integer REFERENCES #PFX#bin5_matches (code) ON DELETE cascade ON UPDATE cascade,
+ pos integer,
+ ucode integer REFERENCES #PFX#users (code) ON DELETE cascade ON UPDATE cascade
+ );
+
+ALTER TABLE #PFX#bin5_matches DROP COLUMN mult_next;
+ALTER TABLE #PFX#bin5_matches ADD COLUMN mult_next integer DEFAULT -1; -- next multiplier
+
+ALTER TABLE #PFX#bin5_matches DROP COLUMN mazzo_next;
+ALTER TABLE #PFX#bin5_matches ADD COLUMN mazzo_next integer DEFAULT -1; -- next card shaker
+
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN asta_pnt;
+ALTER TABLE #PFX#bin5_games ADD COLUMN asta_pnt integer DEFAULT -1; -- curr bet points
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN pnt;
+ALTER TABLE #PFX#bin5_games ADD COLUMN pnt integer DEFAULT -1; -- curr points made
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN asta_win;
+ALTER TABLE #PFX#bin5_games ADD COLUMN asta_win integer DEFAULT -1; -- curr caller id
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN friend;
+ALTER TABLE #PFX#bin5_games ADD COLUMN friend integer DEFAULT -1; -- curr callee id
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN mazzo;
+ALTER TABLE #PFX#bin5_games ADD COLUMN mazzo integer DEFAULT -1; -- curr card shaker
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN mult;
+ALTER TABLE #PFX#bin5_games ADD COLUMN mult integer DEFAULT -1; -- curr multiplier
--- /dev/null
+DROP TABLE #PFX#bin5_tournaments;
+CREATE TABLE #PFX#bin5_tournaments (
+ code SERIAL PRIMARY KEY,
+ active integer,
+ name text
+ );
+
+-- add tournaments and field in the bin5_matches table
+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');
+ALTER SEQUENCE #PFX#bin5_tournaments_code_seq RESTART WITH 3;
+
+ALTER TABLE #PFX#bin5_matches DROP COLUMN tcode;
+ALTER TABLE #PFX#bin5_matches ADD COLUMN tcode integer DEFAULT 1;
+
+ALTER TABLE #PFX#bin5_matches DROP CONSTRAINT #PFX#bin5_matches_tcode_fkey;
+ALTER TABLE #PFX#bin5_matches ADD FOREIGN KEY (tcode) REFERENCES #PFX#bin5_tournaments(code) ON UPDATE cascade ON DELETE cascade;
+
+ALTER TABLE #PFX#bin5_games DROP COLUMN act;
+ALTER TABLE #PFX#bin5_games ADD COLUMN act integer DEFAULT -1; -- end reason of the game
-- define(USER_FLAG_TY_SUSPEND, 0x00400000); // done
-- define(USER_FLAG_TY_DISABLE, 0x00800000); // done
-INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (1, 'uno', md5('one'), 'uno@pluto.com', CAST (X'00020000' as integer), 0);
-INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (2, 'due', md5('two'), 'due@pluto.com', CAST (X'00010000' as integer), 0);
-INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (3, 'tre', md5('thr'), 'tre@pluto.com', CAST (X'00010000' as integer), 0);
-INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (4, 'qua', md5('for'), 'qua@pluto.com', CAST (X'00210000' as integer), 0);
-INSERT INTO #PFX#users (code, login, pass, email, type, flags) VALUES (5, 'cin', md5('fiv'), 'cin@pluto.com', CAST (X'00010000' as integer), 0);
-
+INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10101, 'uno', md5('one'), 'uno@pluto.com', CAST (X'00020000' as integer));
+INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10102, 'due', md5('two'), 'due@pluto.com', CAST (X'00010000' as integer));
+INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10103, 'tre', md5('thr'), 'tre@pluto.com', CAST (X'00010000' as integer));
+INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10104, 'qua', md5('for'), 'qua@pluto.com', CAST (X'00010000' as integer));
+INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10105, 'cin', md5('fiv'), 'cin@pluto.com', CAST (X'00010000' as integer));
+INSERT INTO #PFX#users (code, login, pass, email, type) VALUES (10106, 'sei', md5('six'), 'sei@pluto.com', CAST (X'00210000' as integer));
+ALTER SEQUENCE #PFX#users_code_seq RESTART WITH 10107;
$G_lng = langtolng($G_lang);
$G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
-$G_brisk_version = "4.9.3";
+$G_brisk_version = "4.10.0";
/* MLANG: ALL THE INFO STRINGS IN brisk.phh */
-$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: aggiunto WebSocket come sistema preferenziale di comunicazione e corretto qualche bug.',
+$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: aggiunto il comando /cont per proseguire le partite.',
'Se vuoi iscriverti alla <a target="_blank" href="mailto:ml-briscola+subscribe@milug.org">Mailing List</a>, cliccala!' ),
- 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: added WebSocket as preferential communication system and fixed some bug.',
+ 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: added /cont command to continue matches.',
'If you want to subscribe our <a target="_blank" href="ml-briscola+subscribe@milug.org">Mailing List</a>, click it!' ) );
$G_room_help = array( 'it' => '
<dd><b>/nick <i><nuovo_nickname></i></b> - cambio di nickname
<dd><b>/tav <i><frase di invito></i></b> - invito per gli altri giocatori al tavolo dove si è seduti
<dd><b>/st <i><stato></i></b> - cambia l\'icona associata al tuo user; <i>stato</i> può valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
+<dd><b>/cont <i><id partita></i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
<dd><b>/authreq</b> - se si è autenticati permette di garantire per un utente fidato
<dd><b>/mesgtoadm</b> - se si è autenticati permette di lasciare un messaggio all\'amministratore del sito
<dd><b>/listen <all or auth></b> - se si è autenticati permette leggere solo i messaggi degli altri autenticati (auth) o di tutti (all)
return ($ret);
}
- function bin5_points_save($date, $ttok, $tidx, $codes, $pts)
+ function bin5_points_save($date, $table, $tidx, $action, $ucodes, $pts)
{
return TRUE;
}
* brisk - dbase_pgsql.phh
*
* Copyright (C) 2006-2012 Matteo Nastasi
- * mailto: nastasi@alternativeoutput.it
+ * mailto: nastasi@alternativeoutput.it
* matteo.nastasi@milug.org
* web: http://www.alternativeoutput.it
*
return str_replace($escsql_from, $escsql_to, $s);
}
-class DBConn
+class DBConn
{
static $dbcnnx = FALSE;
var $db = FALSE;
-
+
function DBConn()
{
- $this->db = DBConn::$dbcnnx;
+ $this->db = DBConn::$dbcnnx;
}
static function create()
{
GLOBAL $G_dbauth;
-
+
if (DBConn::$dbcnnx == FALSE) {
if (!(DBConn::$dbcnnx = @pg_connect ($G_dbauth, PGSQL_CONNECT_FORCE_NEW))) {
return (FALSE);
var $dbconn;
var $item;
var $item_n;
-
+
function BriskDB($dbconn)
{
$this->dbconn = $dbconn;
$ret = FALSE;
log_main("BriskDB create:start");
-
+
do {
if (($dbconn = DBConn::create()) == FALSE) {
break;
}
-
+
$ret = new BriskDB($dbconn);
} while (0);
-
+
return ($ret);
}
function users_load()
{
}
-
+
function login_exists($login)
{
GLOBAL $G_dbpfx;
/* check the existence of the nick in the BriskDB */
log_main("login_exists: ".$login);
-
+
$user_sql = sprintf("SELECT * FROM %susers WHERE login = lower('%s') AND (type & CAST (X'%08x' as integer)) = 0;",
$G_dbpfx, escsql($login), USER_FLAG_TY_DISABLE);
if (($user_pg = $this->query($user_sql)) != FALSE)
if (pg_numrows($user_pg) == 1)
return TRUE;
-
+
return FALSE;
}
}
if (pg_numrows($user_pg) != 1)
return FALSE;
-
+
$user_obj = pg_fetch_object($user_pg, 0);
return ($user_obj);
return TRUE;
}
-
+
+ /*
+ if success return a LoginDBItem object
+ */
function login_verify($login, $pass)
{
GLOBAL $G_dbpfx;
-
+
$ret = FALSE;
-
+
log_main("login_verify: ".$login);
-
-
+
//O /* check the existence of the nick in the BriskDB */
//O for ($i = 0 ; $i < $this->item_n ; $i++) {
//O log_main("login_verify: BEGIN");
-
+
if (($user_obj = $this->getrecord_bylogin($login)) == FALSE) {
return FALSE;
}
log_main("login[".$user_obj->code."]: ".$user_obj->login);
-
+
/* if it exists check for a valid challenge */
- if (($a_sem = Challenges::lock_data(TRUE)) != FALSE) {
+ if (($a_sem = Challenges::lock_data(TRUE)) != FALSE) {
if (($chals = &Challenges::load_data()) != FALSE) {
for ($e = 0 ; $e < $chals->item_n ; $e++) {
log_main("challenge[".$e."]: ".$chals->item[$e]->login);
if (strcmp($login, $chals->item[$e]->login) == 0) {
log_main("login_verify [".$pass."] with [".md5($chals->item[$e]->token.$user_obj->pass)."]");
-
+
if (strcmp($pass, md5($chals->item[$e]->token.$user_obj->pass)) == 0) {
log_main("login_verify SUCCESS for ".$login);
-
+
$chals->rem($login);
$this->user_update_login_time($user_obj->code, time());
$ret = LoginDBItem::LoginDBItemFromRecord($user_obj);
}
} // end for ($e = 0 ...
}
-
+
if ($chals->ismod()) {
Challenges::save_data(&$chals);
}
-
+
Challenges::unlock_data($a_sem);
}
//O break;
// O } // if (strcasecmp($this->item[$i]->login, ...
//O }
-
+
return ($ret);
}
function getitem_bylogin($login, &$id) {
$ret = FALSE;
$id = -1;
-
+
log_main("getitem_bylogin: ".$login);
-
+
if (($user_obj = $this->getrecord_bylogin($login)) == FALSE)
return $ret;
$id = $user_obj->code;
return (LoginDBItem::LoginDBItemFromRecord($user_obj));
}
-
+
// TODO FOR DB
function getmail($login)
{
if (($ret = $this->getrecord_bylogin($login)) == FALSE)
return FALSE;
-
+
return ($ret->email);
}
for ($i = 0 ; $i < $olddb->count() ; $i++) {
$user_sql = sprintf("INSERT INTO %susers ( login, pass, email, type) VALUES ('%s', '%s', '%s', %d);",
$G_dbpfx, escsql(strtolower($olddb->item[$i]->login)), escsql($olddb->item[$i]->pass),
- escsql($olddb->item[$i]->email), $olddb->item[$i]->type & USER_FLAG_TY_ALL);
+ escsql($olddb->item[$i]->email), $olddb->item[$i]->type & USER_FLAG_TY_ALL);
if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) {
$cont .= sprintf("ERROR IN LINE: %s\n", eschtml($user_sql));
return ($this->dbconn);
}
- // ttok text UNIQUE,
- // tidx
- function bin5_points_save($date, $ttok, $tidx, $ucodes, $pts)
+ // return array of array('code', 'login' [, 'first', 'last', 'tidx']) ordered by table position
+ function users_get($match_code, $with_minmaxtidx, $is_newmatch)
+ {
+ GLOBAL $G_dbpfx;
+
+ if ($is_newmatch) { // is new
+ $usr_sql = sprintf("SELECT u.code AS code, u.login AS login%s
+ FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p,
+ %susers AS u, %sbin5_table_orders AS o
+ WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode
+ AND m.code = o.mcode AND u.code = o.ucode AND m.code = %d
+ GROUP BY u.code, u.login%s, o.pos
+ ORDER BY o.pos;",
+ ($with_minmaxtidx ? ", min(g.tstamp) AS first, max(g.tstamp) AS last, m.tidx AS tidx" : ""),
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $match_code,
+ ($with_minmaxtidx ? ", m.tidx" : ""));
+ }
+ else { // is old
+ $usr_sql = sprintf("SELECT u.code AS code, u.login AS login%s
+ FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u
+ WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d
+ GROUP BY u.code, u.login%s;",
+ ($with_minmaxtidx ? ", min(g.tstamp) AS first, max(g.tstamp) AS last, m.tidx AS tidx" : ""),
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $match_code,
+ ($with_minmaxtidx ? ", m.tidx" : ""));
+ }
+
+ if (($usr_pg = pg_query($this->dbconn->db(), $usr_sql)) == FALSE ) {
+ log_crit(sprintf("%s::%s: pg_query usr_sql failed [%s]", __CLASS__, __FUNCTION__, $usr_sql));
+ return (FALSE);
+ }
+ $usr_n = pg_numrows($usr_pg);
+ if ($usr_n != BIN5_PLAYERS_N) {
+ log_crit(sprintf("%s::%s: wrong number of players [%s] %d", __CLASS__, __FUNCTION__, $usr_sql, $usr_n));
+ return (FALSE);
+ }
+ $users = array();
+
+ if ($with_minmaxtidx)
+ $fields = array('code', 'login', 'first', 'last', 'tidx');
+ else
+ $fields = array('code', 'login');
+
+ for ($u = 0 ; $u < $usr_n ; $u++) {
+ $usr_obj = pg_fetch_object($usr_pg, $u);
+ $users[$u] = array();
+ foreach($fields as $field) {
+ $users[$u][$field] = $usr_obj->$field;
+ }
+ }
+ return ($users);
+ }
+
+ // out: tab->{points,points_n,old_reason}, in: tab->ttok
+ function match_continue($match_code, $table, $tidx)
+ {
+ GLOBAL $G_dbpfx;
+
+ if (($users = $this->users_get($match_code, FALSE /*without minmaxidx*/, TRUE /*new game*/)) == FALSE) {
+ log_crit(sprintf("%s::%s: retrieve users fails", __CLASS__, __FUNCTION__));
+ return (FALSE);
+ }
+
+ $num_sql = sprintf("SELECT count(*) AS points_n FROM %sbin5_games WHERE mcode = %d;", $G_dbpfx, $match_code);
+ if (($num_pg = $this->query($num_sql)) == FALSE || pg_numrows($num_pg) != 1) {
+ log_crit(sprintf("%s::%s: get games number fails", __CLASS__, __FUNCTION__));
+ return (FALSE);
+ }
+ $num_obj = pg_fetch_object($num_pg, 0);
+ $table->points_n = $num_obj->points_n;
+
+ $tot_sql = sprintf("SELECT sum(p.pts) AS pts
+ FROM %sbin5_games AS g, %sbin5_points AS p, %susers AS u,
+ %sbin5_table_orders AS o
+ WHERE g.mcode = %d AND g.code = p.gcode AND p.ucode = u.code
+ AND p.ucode = o.ucode AND g.mcode = o.mcode
+ GROUP BY p.ucode, o.pos
+ ORDER BY o.pos;",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $match_code);
+ if (($tot_pg = pg_query($this->dbconn->db(), $tot_sql)) == FALSE
+ || pg_numrows($tot_pg) != BIN5_PLAYERS_N) {
+ log_crit(sprintf("%s::%s: get games totals fails", __CLASS__, __FUNCTION__));
+ return(FALSE);
+ }
+
+ $u = 0;
+ foreach ($users as $user) {
+ $pts_sql = sprintf("SELECT p.pts AS pts
+ FROM %sbin5_points as p, %sbin5_games as g
+ WHERE p.gcode = g.code AND g.mcode = %d AND p.ucode = %d
+ ORDER BY g.code ASC
+ LIMIT %d OFFSET %d;",
+ $G_dbpfx, $G_dbpfx, $match_code, $user['code'],
+ MAX_POINTS,
+ ($num_obj->points_n < MAX_POINTS ? 0 : $num_obj->points_n - MAX_POINTS));
+
+ // points of the match for each user
+ if (($pts_pg = $this->query($pts_sql)) == FALSE) {
+ log_crit(sprintf("%s::%s: get points fails", __CLASS__, __FUNCTION__));
+ return (FALSE);
+ }
+ $pts_n = pg_numrows($pts_pg);
+ if ($pts_n > $table->points_n) {
+ // inconsistent scenario number of points great than number of games
+ log_crit(sprintf("%s::%s: number of points great than number of games", __CLASS__, __FUNCTION__));
+ return (FALSE);
+ }
+ for ($i = 0 , $ct = $table->points_n - $pts_n; $ct < $table->points_n ; $ct++, $i++) {
+ $pts_obj = pg_fetch_object($pts_pg, $i);
+ $table->points[$ct % MAX_POINTS][$u] = $pts_obj->pts;
+ }
+ $tot_obj = pg_fetch_object($tot_pg, $u);
+ $table->total[$u] = $tot_obj->pts;
+
+ $u++;
+ }
+
+ $gam_sql = sprintf("SELECT * FROM %sbin5_games WHERE mcode = %d ORDER BY code DESC LIMIT 1;", $G_dbpfx, $match_code);
+ if (($gam_pg = $this->query($gam_sql)) == FALSE || pg_numrows($gam_pg) != 1) {
+ log_crit(sprintf("%s::%s: get last game fails", __CLASS__, __FUNCTION__));
+ return (FALSE);
+ }
+ $gam_obj = pg_fetch_object($gam_pg, 0);
+
+ $table->old_reason = game_description($gam_obj->act, 'html', $gam_obj->mult,
+ $gam_obj->asta_win, $users[$gam_obj->asta_win]['login'],
+ $gam_obj->friend, $users[$gam_obj->friend]['login'],
+ $gam_obj->pnt, $gam_obj->asta_pnt);
+
+ return (TRUE);
+ }
+
+ function match_order_get(&$match_data, $match_code, $exp_num)
+ {
+ GLOBAL $G_dbpfx;
+
+ $ord_sql = sprintf("SELECT ucode FROM %sbin5_table_orders WHERE mcode = %d ORDER BY pos ASC;",
+ $G_dbpfx, $match_code);
+
+ if (($ord_pg = $this->query($ord_sql)) == FALSE || pg_numrows($ord_pg) != $exp_num) {
+ log_crit(sprintf("%s: fails for id or users number", __FUNCTION__));
+ return (FALSE);
+ }
+
+ $ucodes = array();
+ for ($i = 0 ; $i < $exp_num ; $i++) {
+ $ord_obj = pg_fetch_object($ord_pg, $i);
+ $ucodes[$i] = $ord_obj->ucode;
+ }
+
+ if ($match_data !== NULL) {
+ $mtdt_sql = sprintf("SELECT * FROM %sbin5_matches WHERE code = %d;",
+ $G_dbpfx, $match_code);
+
+ if (($mtdt_pg = $this->query($mtdt_sql)) == FALSE || pg_numrows($mtdt_pg) != 1) {
+ log_crit(sprintf("%s: fails retrieve match_data values [%d]", __FUNCTION__, $match_code));
+ return (FALSE);
+ }
+
+ $mtdt_obj = pg_fetch_object($mtdt_pg, 0);
+
+ foreach (array('ttok', 'tidx', 'mult_next', 'mazzo_next', 'tcode') as $match_name) {
+ $match_data[$match_name] = $mtdt_obj->$match_name;
+ }
+ }
+
+ return ($ucodes);
+ }
+
+ // ttok text UNIQUE,
+ // tidx
+ function bin5_points_save($date, $table, $tidx, $action, $ucodes, $pts)
{
GLOBAL $G_dbpfx;
+ $sql_ttok = escsql($table->table_token);
$is_trans = FALSE;
$ret = FALSE;
$n = count($ucodes);
/* check the existence of the nick in the BriskDB */
log_main("bin5_points_save: ");
-
+
do {
if ($this->query("BEGIN") == FALSE) {
break;
/*
* matches management
*/
- $mtc_sql = sprintf("SELECT * FROM %sbin5_matches WHERE ttok = '%s';", $G_dbpfx, escsql($ttok));
+ $mtc_sql = sprintf("UPDATE %sbin5_matches SET (mazzo_next, mult_next) = (%d, %d) WHERE ttok = '%s' RETURNING *;",
+ $G_dbpfx, $table->mazzo, $table->mult, $sql_ttok);
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) VALUES ('%s', %d) RETURNING *;",
- $G_dbpfx, escsql($ttok), $tidx);
- if ( ! (($mtc_pg = $this->query($mtc_sql)) != FALSE &&
- pg_affected_rows($mtc_pg) == 1) ) {
+ $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);
+ 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;
}
+ $mtc_obj = pg_fetch_object($mtc_pg, 0);
+
+ for ($i = 0 ; $i < $n ; $i++) {
+ $ord_sql = sprintf("INSERT INTO %sbin5_table_orders (mcode, ucode, pos) VALUES (%d, %d, %d);",
+ $G_dbpfx, $mtc_obj->code, $ucodes[$i], $i);
+ if (($ord_pg = $this->query($ord_sql)) == FALSE || pg_affected_rows($ord_pg) != 1 ) {
+ log_crit(sprintf("bin5_points_save: failed at insert table order [%s]", $ord_sql));
+ break;
+ }
+ }
+ if ($i < $n)
+ break;
+ }
+ else {
+ $mtc_obj = pg_fetch_object($mtc_pg,0);
}
- $mtc_obj = pg_fetch_object($mtc_pg,0);
/*
* games management
*/
- $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp)
- VALUES (%d, to_timestamp(%d)) RETURNING *;",
- $G_dbpfx, $mtc_obj->code, $date);
- if ( ! (($gam_pg = $this->query($gam_sql)) != FALSE &&
- pg_affected_rows($gam_pg) == 1) ) {
+ $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 *;",
+ $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);
+ 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;
+ break;
}
-
+
$gam_obj = pg_fetch_object($gam_pg,0);
/*
*/
for ($i = 0 ; $i < $n ; $i++) {
/* put points */
- $pts_sql = sprintf("INSERT INTO %sbin5_points (gcode, ucode, pts)
+ $pts_sql = sprintf("INSERT INTO %sbin5_points (gcode, ucode, pts)
VALUES (%d, %d, %d);",
$G_dbpfx, $gam_obj->code, $ucodes[$i], $pts[$i]);
- if ( ! (($pts_pg = $this->query($pts_sql)) != FALSE &&
- pg_affected_rows($pts_pg) == 1) ) {
+ if (($pts_pg = $this->query($pts_sql)) == FALSE || pg_affected_rows($pts_pg) != 1) {
log_crit(sprintf("bin5_points_save: failed at insert point [%s]", $pts_sql));
- break;
+ break;
}
}
-
if ($i < $n)
break;
-
+
if ($this->query("COMMIT") == FALSE) {
break;
}
-
+
$is_trans = FALSE;
- $ret = TRUE;
+ $table->match_id = $mtc_obj->code;
+ $ret = TRUE;
} while (0);
-
+
if ($is_trans)
$this->query("ROLLBACK");
-
+
return $ret;
}
} // End class BriskDB
-class LoginDBOld
+class LoginDBOld
{
var $item;
var $item_n;
if ($buf == FALSE || mb_strlen($buf, "ASCII") == 0) {
// close socket case
if ($buf == FALSE) {
- printf("ERROR READING\n");
+ printf("INFO: read return false\n");
}
if ($sock === $this->list) {
printf("Arrivati %d bytes da list\n", mb_strlen($buf, "ASCII"));
global_dump();
}
- else if ($line == "shutdown") {
+ else if ($line == "shutdown" || $line == "sd") {
if ($this->app->dump_data()) {
return(0);
}
function chunk($step, $cont)
{
+ // fprintf(STDERR, "CHUNK: [%s]\n", $cont);
return $this->frame('@BEGIN@'.$cont.'@END@'); // , 'text', TRUE);
}
function chunk($step, $cont)
{
+ // fprintf(STDERR, "CHUNK: [%s]\n", $cont);
return ("@BEGIN@".$cont."@END@");
}
function chunk($step, $cont)
{
+ // fprintf(STDERR, "CHUNK: [%s]\n", $cont);
if ($cont == NULL) {
return sprintf("<script id='hs%d' type='text/javascript'><!--
push(null);\n// -->\n</script>", $step);
class User {
var $room; // reference to the room where the user is registered
- var $idx; // index in the users array when you are in game
- var $idx_orig; // index in the users array when you aren't in game
+ var $idx; // index in the room users array when you are in game
+ var $idx_orig; // index in the room table users array when you aren't in game
var $code; // authentication code
var $name; // name of the user
var $sess; // session of the user
for ($i = $cur_step ; $i < $this->step ; $i++) {
$ii = $i % COMM_N;
log_rd2("ADDED TO THE STREAM: ".$this->comm[$ii]);
+ if ($this->comm[$ii] == "") {
+ if ($i == $cur_step)
+ continue;
+ else
+ break;
+ }
$ret .= $this->comm[$ii];
}
$new_stat = $this->stat;
*/
body {
- background-image: url('img/snowy.jpg');
+ background-image: url('img/happysunbg.jpg');
background-color: #fafafa;
background-repeat: no-repeat;
background-position: center center;
/*
* brisk - briskin5.phh
*
- * Copyright (C) 2006-2012 Matteo Nastasi
- * mailto: nastasi@alternativeoutput.it
+ * Copyright (C) 2006-2013 Matteo Nastasi
+ * mailto: nastasi@alternativeoutput.it
* matteo.nastasi@milug.org
* web: http://www.alternativeoutput.it
*
*
*/
define('BIN5_PLAYERS_N', 3);
+define('BIN5_CARD_HAND', 3); // normal value 8
define('BIN5_MAX_PLAYERS', BIN5_PLAYERS_N);
// define(BIN5_SHM_MIN', (50000 * BIN5_MAX_PLAYERS));
define('BIN5_SHM_MIN', 32768);
define('BIN5_SHM_DLT', 32768);
define('BIN5_PROXY_PATH', PROXY_PATH."/bin5");
-$mlang_bin5_bin5 = array(
- 'info_part' => array( 'it' => '<hr>Nell\'ultima mano ha chiamato <b>%s</b>, il socio era <b>%s</b>,<br>',
- 'en' => '<hr>In the last hand the declarer was <b>%s</b>, the partner was <b>%s</b>,<br>'),
- 'info_capp' => array( 'it' => 'hanno fatto <b>cappotto</b> EBBRAVI!.<br>',
- 'en' => 'and they made <b>capot</b> WELL DONE!.<br>'),
- 'info_pnt' => array( 'it' => 'dovevano fare <b>%s</b> punti e ne hanno fatti <b>%d</b>: hanno %s.<br>',
- 'en' => 'they had to do <b>%s</b> points and they had made <b>%d</b>: they have %s.<br>'),
- 'info_alea' => array( 'it' => 'almeno ',
- 'en' => 'at least '),
- 'info_more' => array( 'it' => 'più di 60',
- 'en' => 'over 60'),
- 'info_win' => array( 'it' => '<b>vinto</b>',
- 'en' => '<b>win</b>'),
- 'info_peer' => array( 'it' => '<b>pareggiato</b>',
- 'en' => '<b>drew</b>'),
- 'info_lost' => array( 'it' => '<b>perso</b>',
- 'en' => '<b>lost</b>'),
-
- 'info_alon' => array( 'it' => '<hr>Nell\'ultima partita <b>%s</b> si è chiamato in mano,<br>',
- 'en' => '<hr>In the last hand <b>%s</b> play alone against each other,<br>'),
- 'info_apnt' => array( 'it' => 'doveva fare <b>%s</b> punti e ne ha fatti <b>%d</b>: ha %s.<br>',
- 'en' => 'he/she had to do <b>%s</b> points and they had made <b>%d</b>: he/she had %s.<br>'),
- 'info_acap' => array( 'it' => 'ha fatto <b>cappotto</b> EBBRAVO!.<hr>',
- 'en' => 'and he/she made <b>capot</b> WELL DONE!.<hr>'),
-
- 'info_omul' => array( 'it' => ' La partita valeva <b>%s</b>.',
- 'en' => ' EN: The game was worth <b>%s</b>.' ),
+define('BIN5_RULES_OLDSCHEMA', -1);
+define('BIN5_RULES_FINISH', 0);
+define('BIN5_RULES_ABANDON', 1);
+define('BIN5_RULES_ALLPASS', 2);
+
+$mlang_bin5_bin5 = array(
+ // br, hr, b, /b, win, fri
+ 'info_part' => array( 'it' => 'Nell\'ultima mano ha chiamato %3$s%5$s%4$s, il socio era %3$s%6$s%4$s,%1$s',
+ 'en' => 'In the last hand 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' => 'Nell\'ultima partita %3$s%5$s%4$s si è chiamato in mano,%1$s',
+ 'en' => 'In the last hand %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_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 <b>your</b> turn.'),
'info_turn' => array( 'it' => 'tocca a <b>%s</b> giocare.',
'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_shuf' => array( 'it' => 'Il mazzo a <b>%s</b>, ',
- 'en' => '<b>%s</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',
'en' => 'Call%s:'),
'call_call' => array( 'it' => 'Chiama %s%s:',
'en' => 'The declarer is %s%s:')
-
-
);
// MLANG
var $asta_pla_n;
var $asta_card;
var $asta_pnt;
-
+
var $mult;
var $points; // points array
var $points_n; // number of row of points
var $total;
- var $asta_win;
+ var $asta_win; // the caller idx position at table
var $briscola;
- var $friend;
-
+ 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_act; // last action that trigs the end of the game
+ var $old_mazzo;
var $old_reason;
var $old_asta_pnt;
var $old_mult;
- var $old_pnt;
- var $old_win;
- var $old_friend;
+ var $old_pnt; // points made by caller and callee
+ var $old_asta_win; // the old caller idx position at table
+ var $old_friend; // the old callee idx position at table
- function Bin5_table()
+ function Bin5_table()
{
}
/* CREATE() NOT USED
- function create($idx)
+ function create($idx)
{
if (($thiz =& new Bin5_table()) == FALSE)
return (FALSE);
$thiz->asta_card = -1;
$thiz->asta_pnt = -1;
$thiz->mult = 0;
-
+
$thiz->points = array( );
$thiz->points_n = 0;
$thiz->total = array( 0, 0, 0, 0, 0);
$thiz->friend = -1;
$thiz->turn = 0;
+ $thiz->match_id = -1;
+
+ $thiz->old_act = -1;
+ $thiz->old_mazzo = -1;
$thiz->old_reason = "";
$thiz->old_asta_pnt = -1;
$thiz->old_mult = -1;
$thiz->old_pnt = -1;
- $thiz->old_win = -1;
+ $thiz->old_asta_win = -1;
$thiz->old_friend = -1;
return ($thiz);
{
if (($thiz =& new Bin5_table()) == FALSE)
return (FALSE);
-
+
parent::copy($from);
- $thiz->card = $from->card;
- $thiz->mazzo = $from->mazzo; // REVIEW
- $thiz->gstart = $from->gstart;
- $thiz->turn = $from->turn;
-
- $thiz->asta_pla = $from->asta_pla;
- $thiz->asta_pla_n = $from->asta_pla_n;
- $thiz->asta_card = $from->asta_card;
- $thiz->asta_pnt = $from->asta_pnt;
-
- $thiz->mult = $from->mult;
- $thiz->points = $from->points;
- $thiz->points_n = $from->points_n;
- $thiz->total = $from->total;
-
- $thiz->asta_win = $from->asta_win;
- $thiz->briscola = $from->briscola;
- $thiz->friend = $from->friend;
-
- $thiz->old_reason = $from->old_reason;
+ $thiz->card = $from->card;
+ $thiz->mazzo = $from->mazzo; // REVIEW
+ $thiz->gstart = $from->gstart;
+ $thiz->turn = $from->turn;
+
+ $thiz->asta_pla = $from->asta_pla;
+ $thiz->asta_pla_n = $from->asta_pla_n;
+ $thiz->asta_card = $from->asta_card;
+ $thiz->asta_pnt = $from->asta_pnt;
+
+ $thiz->mult = $from->mult;
+ $thiz->points = $from->points;
+ $thiz->points_n = $from->points_n;
+ $thiz->total = $from->total;
+
+ $thiz->asta_win = $from->asta_win;
+ $thiz->briscola = $from->briscola;
+ $thiz->friend = $from->friend;
+
+ $thiz->match_id = $from->match_id;
+
+ $thiz->old_act = $from->old_act;
+ $thiz->old_mazzo = $from->old_mazzo;
+ $thiz->old_reason = $from->old_reason;
$thiz->old_asta_pnt = $from->old_asta_pnt;
- $thiz->old_mult = $from->mult;
- $thiz->old_pnt = $from->old_pnt;
- $thiz->old_win = $from->old_win;
- $thiz->old_friend = $from->old_friend;
+ $thiz->old_mult = $from->mult;
+ $thiz->old_pnt = $from->old_pnt;
+ $thiz->old_asta_win = $from->old_asta_win;
+ $thiz->old_friend = $from->old_friend;
return ($thiz);
}
{
if (($thiz =& new Bin5_table()) == FALSE)
return (FALSE);
-
+
$thiz->parentcopy($from);
log_main("PLAYER_N - spawn.".$thiz->player_n);
$thiz->card = array();
$thiz->bunch_create();
$thiz->mazzo = rand(0,PLAYERS_N-1);
+ $thiz->points = array();
+ $thiz->total = array();
$thiz->points_n = 0;
$thiz->mult = 0;
- $thiz->old_win = -1;
+
+ $thiz->match_id = -1;
+
+ $thiz->old_asta_win = -1;
$thiz->old_reason = "";
// players are rearranged in an dedicated array
for ($i = 0 ; $i < $from->player_n ; $i++)
$thiz->player[$i] = $i;
- log_main("TABLE_OLD_WIN - spawn:".$thiz->old_win);
+ log_main("TABLE_OLD_WIN - spawn:".$thiz->old_asta_win);
return ($thiz);
}
- function asta2mult($asta_pnt)
+ static function asta2mult($asta_pnt)
{
if ($asta_pnt > 110)
return (6);
function multer($is_new)
{
if ($is_new) {
- return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt));
+ // return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt));
+ return (static::s_multer($this->mult, $this->asta_pnt));
}
else {
- return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt));
+ // return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt));
+ return (static::s_multer($this->old_mult, $this->old_asta_pnt));
}
}
+ static function s_multer($mult, $pnt)
+ {
+ return (pow(2, $mult) * static::asta2mult($pnt));
+ }
- // function bunch_create_old() function AND
+ // function bunch_create_old() function AND
// {
// $ret = array();
- //
- // for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
- // // for ($i = 0 ; $i < 40 ; $i++) {
+ //
+ // for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
+ // // for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
// $ret[$i] =& new Card($i, 'bunch', 'no_owner');
// }
- //
+ //
// $oret = &$ret;
// return ($oret);
// }
function bunch_create()
{
$ret = array();
-
- for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
$this->card[$i] = new Card($i, 'bunch', 'no_owner');
}
}
{
log_main("bunch_make start");
$ct = array(0,0,0,0,0);
-
+
mt_srand(make_seed());
-
- for ($i = (BIN5_PLAYERS_N == 5 ? 40 : 24) - 1 ; $i >= 0 ; $i--)
+
+ for ($i = (BIN5_CARD_HAND * BIN5_PLAYERS_N) - 1 ; $i >= 0 ; $i--)
$rest[$i] = $i;
- for ($i = (BIN5_PLAYERS_N == 5 ? 40 : 24) - 1 ; $i >= 0 ; $i--) {
+ for ($i = (BIN5_CARD_HAND * BIN5_PLAYERS_N) - 1 ; $i >= 0 ; $i--) {
$rn = rand(0, $i);
-
+
if ($rn == 0)
log_main("RND ZERO");
-
+
$id = $rest[$rn];
$owner = $i % BIN5_PLAYERS_N;
$this->mazzo = rand(0,PLAYERS_N-1);
$this->points_n = 0;
$this->mult = 0;
- $this->old_win = -1;
+ $this->old_asta_win = -1;
$this->old_reason = "";
*/
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$this->total[$i] = 0;
$user_cur = $userarr[$this->player[$i]];
+ $user_cur->stat_set('table');
$user_cur->exitislock = TRUE;
}
$this->gstart = ($this->mazzo+1) % BIN5_PLAYERS_N;
$this->bunch_make();
-
-
+
$this->asta_pla_n = BIN5_PLAYERS_N;
$this->asta_card = -1;
$this->asta_pnt = 60;
$this->briscola = -1;
$this->friend = -1;
$this->turn = 0;
-
+
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$this->asta_pla[$i] = TRUE;
$user_cur = $userarr[$this->player[$i]];
$user_cur->asta_card = -2;
$user_cur->asta_pnt = -1;
$user_cur->handpt = $this->hand_points($i);
- // SEE function calculate_points(&$table)
}
log_rd2("GEND 4");
}
- function game_next()
+ function game_next($delta)
+ {
+ $this->old_mazzo = $this->mazzo;
+ $this->mazzo = ($this->mazzo + $delta) % BIN5_PLAYERS_N;
+ }
+
+ function mult_inc($val)
{
- $this->mazzo = ($this->mazzo + 1) % BIN5_PLAYERS_N;
+ $this->old_mult = $this->mult;
+ $this->mult += $val;
}
+ function mult_set($val)
+ {
+ $this->old_mult = $this->mult;
+ $this->mult = $val;
+ }
function hand_points($idx)
{
- GLOBAL $G_all_points;
-
+ GLOBAL $G_all_points;
+
$tot = 0;
-
- for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
// for ($i = 0 ; $i < 40 ; $i++) {
if ($this->card[$i]->owner != $idx)
continue;
{
$ct = $this->exitlock_calc($userarr, $table_pos);
- $ret = sprintf('exitlock_show(%d, %s);', $ct,
+ $ret = sprintf('exitlock_show(%d, %s);', $ct,
($userarr[$this->player[$table_pos]]->exitislock ? 'true' : 'false'));
return ($ret);
}
{
$ct = 0;
- for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) {
+ for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) {
if ($userarr[$this->player[$i]]->exitislock == FALSE)
$ct++;
}
return ($ct);
}
+
+ function rules_engine(&$bri, $curtime, $action, $user)
+ {
+ GLOBAL $G_all_points, $G_dbasetype;
+
+ $pts = array();
+
+ $this->old_act = $action;
+ if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct
+ $this->old_asta_win = -1;
+ $this->old_pnt = 0;
+ $this->mult_inc(1);
+ for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ $pts[$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
+ 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++) {
+ $pts[$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
+ 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 ($this->asta_pnt == 61 && $pro == 60) {
+ $this->points[$this->points_n % MAX_POINTS] = array();
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $this->points[$this->points_n % MAX_POINTS][$i] = 0;
+ $pts[$i] = 0;
+ }
+ $this->points_n++;
+ $this->old_pnt = $pro;
+ $this->mult_inc(1);
+
+ // return($pts);
+ break;
+ }
+
+ if ($pro >= $this->asta_pnt)
+ $sig = 1;
+ else
+ $sig = -1;
+
+ $this->points[$this->points_n % MAX_POINTS] = array();
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ if ($i == $this->asta_win)
+ $pt = ($i == $this->friend ? 4 : 2);
+ else if ($i == $this->friend)
+ $pt = 1;
+ else
+ $pt = -1;
+
+ log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pt));
+
+ $pt = $pt * $sig * $this->multer(TRUE) * ($pro == 120 ? 2 : 1);
+
+ log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $this->multer(TRUE), ($pro == 120 ? 2 : 1)));
+
+ $this->points[$this->points_n % MAX_POINTS][$i] = $pt;
+ $this->total[$i] += $pt;
+ $pts[$i] = $pt;
+ }
+ $this->points_n++;
+ $this->old_pnt = $pro;
+ $this->old_asta_win = $this->asta_win;
+ $this->mult_set(0);
+
+ // return($pts);
+ } 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).'|'.$pts[$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, $bri->user[$this->player[$this->old_asta_win]]->name,
+ $this->old_friend, $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, $pts);
+ unset($bdb);
+ }
+ else {
+ log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED");
+ }
+ log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
+ }
+
+ $this->game_init(&$bri->user);
+
+ return (TRUE);
+ }
+
+ function match_continue(&$bri, $user, $match_id_s)
+ {
+ $ret = FALSE;
+ $curtime = time();
+
+ do {
+ /* - verify if match_id and user are both valid to accept
+ the match_continue request - */
+ $match_id = (int)$match_id_s;
+ if ($match_id <= 0) {
+ $msg = "questa partita non esiste";
+ 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;
+ }
+ // retrieves users list for this match
+ $match_data = array();
+ if (($bdb = BriskDB::create()) != FALSE) {
+ // match_order_get return FALSE for old matches
+ $ucodes = $bdb->match_order_get($match_data, $match_id, BIN5_PLAYERS_N);
+ unset($bdb);
+ }
+ if ($ucodes == FALSE) {
+ $msg = "questa partita non è stata memorizzata correttamente";
+ break;
+ }
+
+ // if current user code must be in the users list
+ if (array_search($user->code, $ucodes) === FALSE) {
+ $msg = sprintf("Questo utente non compare nella partita che si vuole continuare [%d].", $user->code);
+ 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);
+
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ if ($user_cur->continue_get() != $match_id) {
+ break;
+ }
+ }
+ $ret = TRUE;
+ // not all players set the continue match than we exit
+ if ($i < BIN5_PLAYERS_N) {
+ $msg = sprintf("<b>L'utente <i>%s</i> vorrebbe continuare la partita n° %d.</b>",
+ xcape($user->name), $match_id);
+ break;
+ }
+
+ /* - all users decide to continue the same match, update all infos and rearrange users
+ to the right positions on the table - */
+
+ /* reset users table order */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N - 1 ; $i++) {
+ if ($bri->user[$this->player[$i]]->code == $ucodes[$i]) {
+ continue;
+ }
+ for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) {
+ if ($bri->user[$this->player[$e]]->code == $ucodes[$i]) {
+ $swap = $this->player[$i];
+ $this->player[$i] = $this->player[$e];
+ $this->player[$e] = $swap;
+ $bri->user[$this->player[$i]]->table_pos = $i;
+ $bri->user[$this->player[$e]]->table_pos = $e;
+ }
+ }
+ }
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ fprintf(STDERR, "USERZ: [%s]\n", $bri->user[$this->player[$i]]->name);
+ }
+
+ // update database info to be aligned with current table (ttok and table_idx
+ if (($bdb = BriskDB::create()) != FALSE) {
+ if ($bdb->match_continue($match_id, $this, $user->table_orig) == FALSE) {
+ unset($bdb);
+ $msg = "aggiornamento dei dati della partita fallito";
+ break;
+ }
+ unset($bdb);
+ }
+
+ /* bunch and multiplier status set */
+ $this->mazzo = $match_data['mazzo_next'];
+ $this->mult = $match_data['mult_next'];
+ $this->match_id = $match_id;
+ $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]];
+ $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);
+ $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);
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ if ($ret == FALSE && $this->player[$i] != $user->idx)
+ continue;
+ $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] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");',
+ $dt, NICKSERV, $msg);
+ $user_cur->step_inc();
+ }
+ }
+
} // end class Bin5_table
define('BIN5_USER_FLAG_RING_ENDAUCT', 0x01);
-
+define('BIN5_USER_CONTINUE_INIT', -1);
+define('BIN5_USER_CONTINUE_ALREADY', -2);
class Bin5_user extends User {
- var $asta_card; //
+ var $asta_card; //
var $asta_pnt; //
var $handpt; // Total card points at the beginning of the current hand.
var $exitislock; // Player can exit from the table ?
- var $privflags; // Flags for briskin5 only
+ var $privflags; // Flags for briskin5 only
+
+ var $continue; // Id of the match that the user would continue
const BASE = "../";
-
+
function User() {
}
-
+
/* CREATE NOT USED
function create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
if (($thiz =& new User()) == FALSE)
return (FALSE);
-
+
$thiz->asta_card = -2;
$thiz->asta_pnt = -1;
$thiz->handpt = -1;
$thiz->exitislock = TRUE;
$thiz->privflags = 0;
-
+ $thiz->continue = BIN5_USER_CONTINUE_INIT;
+
return ($thiz);
}
*/
-
+
function parentcopy(&$from)
{
parent::copy($from);
}
-
+
function copy(&$from)
{
$this->parentcopy($from);
-
+
$this->asta_card = $from->asta_card;
$this->asta_pnt = $from->asta_pnt;
$this->handpt = $from->handpt;
$this->exitislock = $from->exitislock;
$this->privflags = $from->privflags;
+ $this->continue = $from->continue;
}
-
+
/* CLONE NOT USED
function myclone(&$from)
{
if (($thiz =& new User()) == FALSE)
return (FALSE);
-
+
$thiz->copy($from);
-
+
return ($thiz);
- }
+ }
*/
-
+
static function spawn($from, &$bri, $table, $table_pos, $get, $post, $cookie)
{
if (($thiz = new Bin5_user()) == FALSE)
}
$thiz->parentcopy($from);
-
- /* NOTE: at this moment idx and table_pos fields have the same value
+
+ /* NOTE: at this moment idx and table_pos fields have the same value
but diffentent functions, we keep them separated for a while */
$thiz->room = $bri;
- $thiz->idx = $table_pos;
+ $thiz->idx = $table_pos; // it is the position in the mini-room,
+ // not related to table pos (see below)
$thiz->asta_card = -2;
$thiz->asta_pnt = -1;
$thiz->handpt = -1;
$thiz->exitislock = TRUE;
-
+ $thiz->continue = BIN5_USER_CONTINUE_INIT;
+
log_wr("Bin5 constructor");
-
+
$thiz->privflags = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0;
$thiz->table_orig = $table;
$thiz->table = 0;
$thiz->table_pos = $table_pos;
-
+
$thiz->step_inc();
return ($thiz);
}
- function step_set($step)
+ function step_set($step)
{
$this->step = $step & 0x7fffffff;
-
+
return TRUE;
}
-
+
function step_inc($delta = 1) {
$this->step += $delta;
/* modularization because unpack() not manage unsigned 32bit int correctly */
$this->step &= 0x7fffffff;
-
+
return (TRUE);
}
do {
if (validate_sess($sess) == FALSE)
break;
-
+
if (file_exists(BIN5_PROXY_PATH."/table".$tab_id) == FALSE)
mkdir(BIN5_PROXY_PATH."/table".$tab_id, 0775, TRUE);
if (($fp = @fopen(BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step", 'rb')) == FALSE)
break;
$arr = unpack('Ls/Li', $s);
fclose($fp);
-
+
// log_rd2("A0: ".$arr[0]." A1: ".$arr[1]);
return ($arr);
} while (0);
-
+
if ($fp != FALSE)
fclose($fp);
-
+
log_rd2("STEP_GET [".$sess."]: return false ");
-
+
return (FALSE);
}
- function save_step()
+ function save_step()
{
do {
if (validate_sess($this->sess) == FALSE)
break;
fwrite($fp, pack("LL",$this->step, $this->idx));
fclose($fp);
-
- log_main("step_set [".$this->sess. "] [".$this->step."]");
-
+
+ log_main("step_set [".$this->sess. "] [".$this->step."]");
+
return (TRUE);
} while (0);
-
+
return (FALSE);
}
-
+
static function unproxy_step($tab_id, $sess)
{
log_rd2("UNPROXY: ".BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step");
@unlink(BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step");
}
-
- function destroy_data($tab_id)
+
+ function destroy_data($tab_id)
{
do {
if (($tok = @ftok(FTOK_PATH."/bin5/table".$tab_id."/user".$this->table_pos, "B")) == -1) {
log_crit("BIN5 USER DATA REMOVE FAILED 1 [".FTOK_PATH."/bin5/table".$tab_id."/user".$this->table_pos."]");
break;
}
-
+
if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE) {
log_crit("BIN5 USER DATA REMOVE FAILED 2");
break;
$shm = FALSE;
log_main("BIN5 USER DATA DESTROY SUCCESS");
-
+
// log_main("QUI CI ARRIVA [".$bri->user[0]->name."]");
$ret = TRUE;
} while (0);
-
+
if ($shm)
shm_detach($shm);
-
+
return ($ret);
}
log_crit("BLOCKING_ERROR UNREC: ".($is_unrecoverable ? "TRUE" : "FALSE"));
return (sprintf(($is_unrecoverable ? 'xstm.stop(); ' : '').'window.onbeforeunload = null; window.onunload = null; document.location.assign("../index.php");'));
}
-
+
protected function page_sync($sess, $page)
{
log_rd2("PAGE_SYNC");
GLOBAL $G_splash_w, $G_splash_h, $G_splash_timeout;
$CO_splashdate = "CO_splashdate".$G_splash_idx;
$$CO_splashdate = $splashdate;
-
+
GLOBAL $S_load_stat;
-
+
log_rd("maincheck begin");
-
+
$ret = FALSE;
$curtime = time();
-
+
/* Nothing changed, return. */
- if ($cur_step == $this->step)
+ if ($cur_step == $this->step)
return (FALSE);
-
+
log_rd2("do other cur_stat[".$cur_stat."] user->stat[".$this->stat."] cur_step[".$cur_step."] user_step[".$this->step."]");
-
+
if ($cur_step == -1) {
/*
* if $cur_step == -1 load the current state from the main struct
*/
-
+
$S_load_stat['wR_minusone']++;
-
+
// if ($this->the_end == TRUE) {
// log_rd2("main_check: the end".var_export(debug_backtrace()));
// }
-
+
if ($this->trans_step != -1) {
log_rd2("TRANS USATO ".$this->trans_step);
$cur_step = $this->trans_step;
log_rd2("TRANS NON ATTIVATO");
}
}
-
-
+
+
/* this part I suppose is read only on $this->room structure */
if ($cur_step == -1) {
log_rd2("PRE-NEWSTAT");
-
+
/***************
* *
* TABLE *
else {
/* $sem = Room::lock_data(FALSE); */
$S_load_stat['rU_heavy']++;
-
+
if ($cur_step < $this->step) {
do {
if ($cur_step + COMM_N < $this->step) {
printf("xXx LOST HISTORY!\n");
$new_step = -1;
break;
- }
+ }
for ($i = $cur_step ; $i < $this->step ; $i++) {
$ii = $i % COMM_N;
+ if ($this->comm[$ii] == "") {
+ if ($i == $cur_step)
+ continue;
+ else
+ break;
+ }
log_rd2("ADDED TO THE STREAM: ".$this->comm[$ii]);
$ret .= $this->comm[$ii];
}
$new_subst = $this->subst;
$new_step = $this->step;
} while (0);
-
+
log_rd2($this->step, 'index_rd.php: after ret set');
-
+
if ($this->the_end == TRUE) {
log_rd2("LOGOUT BYE BYE!!");
log_auth($this->sess, "Explicit logout.");
-
+
if ($this->the_end == TRUE) {
$this->reset();
-
- // FIXME !!!
+
+ // FIXME !!!
/* if ($this->subst == 'sitdown') { */
/* log_load("ROOM WAKEUP"); */
/* $this->room->room_wakeup($this); */
/* $this->room->room_outstandup($this); */
/* else */
/* log_rd2("LOGOUT FROM WHAT ???"); */
-
+
} /* if ($this->the_end == TRUE) { ... */
} /* if ($this->the_end == TRUE) { ... */
} /* if ($cur_step < $this->step) { */
-
+
/* Room::unlock_data($sem); */
} /* else of if ($cur_step == -1) { */
-
-
- return ($ret);
- } // function maincheck (...
-
+ return ($ret);
+ } // function maincheck (...
+ function continue_set($match_code)
+ {
+ $this->continue = $match_code;
+ }
+ function continue_get() {
+ return ($this->continue);
+ }
} // end class Bin5_user
-
class Bin5 {
static $delta_t = array();
var $step; // current step of the comm array
var $garbage_timeout;
var $shm_sz;
-
+
var $table_idx;
var $table_token;
-
+
var $the_end;
var $tok;
function Bin5 ($room, $table_idx, $table_token, $get, $post, $cookie) {
$this->user = array();
$this->table = array();
-
+
$this->the_end = FALSE;
$this->shm_sz = BIN5_SHM_MIN;
if (($this->tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1) {
echo "FTOK FAILED";
exit;
}
-
+
$user = $room->user;
$table = $room->table[$table_idx];
-
+
log_wr("Bin5 constructor");
-
+
for ($i = 0 ; $i < $table->player_n ; $i++) {
$user[$table->player[$i]]->table_token = $table_token;
$this->user[$i] = Bin5_user::spawn($user[$table->player[$i]], $this, $table_idx, $i, $get, $post, $cookie);
}
$this->table[0] = Bin5_table::spawn(&$table);
-
- log_main("TABLE_OLD_WIN - Bin5:".$this->table[0]->old_win);
-
+
+ log_main("TABLE_OLD_WIN - Bin5:".$this->table[0]->old_asta_win);
+
$this->table_idx = $table_idx;
$this->table_token = $table_token;
$this->garbage_timeout = 0;
-
+
$this->delay_mgr = new Delay_Manager((GARBAGE_TIMEOUT *3.0) / 2.0);
log_wr("Bin5 constructor end");
}
-
+
function get_user($sess, &$idx)
{
GLOBAL $PHP_SELF;
-
+
if (validate_sess($sess)) {
for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
if (strcmp($sess, $this->user[$i]->sess) == 0) {
}
}
log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
- // for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++)
+ // for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++)
// log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
}
else {
log_main(sprintf("get_user: Wrong strlen [%s]",$sess));
}
-
+
return (FALSE);
}
-
-
+
+
function garbage_manager($force)
{
GLOBAL $G_base;
-
+
/* Garbage collector degli utenti in timeout */
$ismod = FALSE;
$curtime = time();
if ($force || $this->garbage_timeout < $curtime) {
for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
$user_cur = $this->user[$i];
- if ($user_cur->sess == "" ||
+ if ($user_cur->sess == "" ||
($user_cur->stat == 'table' && ($user_cur->subst == 'shutdowned' || $user_cur->subst == 'shutdowner')))
continue;
-
+
if ($user_cur->lacc + EXPIRE_TIME_RD < ($curtime - $delta)) { // Auto logout dell'utente
log_rd2($user_cur->sess." bin5 AUTO LOGOUT.");
-
+
if ($user_cur->stat == 'table') {
log_auth($user_cur->sess," bin5 Autologout session.");
-
- /* SI DELEGA AL garbage_manager principale LA RIMOZIONE DELL'UTENTE
-
+
+ /* SI DELEGA AL garbage_manager principale LA RIMOZIONE DELL'UTENTE
+
$tmp_sess = $user_cur->sess;
$user_cur->sess = "";
Bin5_user::step_unproxy($tmp_sess);
$user_cur->name = "";
$user_cur->the_end = FALSE;
-
+
*/
-
+
/* se gli altri utenti non erano d'accordo questo utente viene bannato */
$remcalc = $this->table[0]->exitlock_calc(&$this->user, $user_cur->table_pos);
if ($remcalc < 3) {
$user_cur->ip, $user_cur->sess, $user_cur->laccwr + BAN_TIME);
}
// $user->bantime = $user->laccwr + BAN_TIME;
-
+
$this->table_wakeup($user_cur);
}
}
}
log_rd2($user_cur->sess." GARBAGE UPDATED!");
-
+
$this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
-
+
$ismod = TRUE;
}
-
+
$this->delay_mgr->lastcheck_set($curtime);
return ($ismod);
}
-
- function destroy_data()
+
+ function destroy_data()
{
GLOBAL $sess;
$ret = FALSE;
$shm = FALSE;
log_main("DESTROY BRISKIN5 DATA");
-
+
do {
log_main("DESTROY2 BRISKIN5 DATA [".$this->table_idx."]");
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$this->user[$i]->destroy_data($this->table_idx);
Bin5_user::unproxy_step($this->table_idx, $this->user[$i]->sess);
}
- if (($tok = @ftok(FTOK_PATH."/bin5/table".$this->table_idx."/table", "B")) == -1)
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$this->table_idx."/table", "B")) == -1)
break;
if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE)
break;
-
+
if (shmop_delete($shm) == 0) {
log_only("REMOVE FALLITA ");
break;
}
-
+
$shm = FALSE;
log_main("DESTROY2 BRISKIN5 DATA SUCCESS");
-
+
// log_main("QUI CI ARRIVA [".$bri->user[0]->name."]");
$ret = TRUE;
} while (0);
-
+
if ($shm)
shm_detach($shm);
-
+
return ($ret);
}
if (($res = file_lock(FTOK_PATH."/bin5/table".$table_idx."/table", $is_exclusive)) != FALSE) {
self::$delta_t = microtime(TRUE);
log_lock("LOCK table [".$table_idx."] [".self::$delta_t[$table_idx]."]");
-
+
return (new Vect(array('res' => $res, 'tab' => $table_idx)));
}
-
+
return (FALSE);
}
-
+
static function unlock_data($res_vect)
{
- GLOBAL $sess;
+ GLOBAL $sess;
$res = $res_vect->getbyid('res');
$tab = $res_vect->getbyid('tab');
{
GLOBAL $mlang_brisk, $G_lang;
- if ($user->stat == 'table') {
- $table = &$this->table[$user->table];
+ if ($user->stat != 'table') {
+ return;
}
-
- $user_mesg = substr($mesg,6);
-
$curtime = time();
-
- $dt = date("H:i ", $curtime);
- if (strncmp($user_mesg, "/nick ", 6) == 0) {
- log_main($user->sess." chatt_send BEGIN");
- if (($name_new = validate_name(substr($user_mesg, 6))) == FALSE) {
- $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
- $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['nickmust'][$G_lang]);
- $user->step_inc();
-
- return;
- }
- $user_mesg = "COMMAND ".$user_mesg;
- // Search dup name
- // change
- // update local graph
- // update remote graphs
- for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
- $user_cur = $this->user[$i];
- // if ($user_cur->sess == '' || $user_cur->stat != 'room')
- if ($user_cur->sess == '')
- continue;
- if (strcasecmp($user_cur->name, $name_new) == 0) {
- $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
+ $table = &$this->table[$user->table];
+ $user_mesg = substr($mesg,6);
- $premsg = sprintf($mlang_brisk['nickdupl'][$G_lang], xcape($name_new));
- $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $premsg);
- $user->step_inc();
- break;
- }
- }
- if ($i == BIN5_MAX_PLAYERS) {
- if ($user->flags & USER_FLAG_AUTH && strcasecmp($user->name,$name_new) != 0) {
- if ($this->table[$user->table]->auth_only == TRUE) {
- $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
- $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"<b>%s</b>");', $dt, NICKSERV, $mlang_brisk['authchan'][$G_lang]);
- $user->step_inc();
- return;
- }
- else {
- $user->flags &= ~USER_FLAG_AUTH; // Remove auth if name changed
- }
- }
-
- $user->name = $name_new;
+ $ret = FALSE;
+ $mesg = "";
- log_main($user->sess." chatt_send start set");
-
+ $dt = date("H:i ", $curtime);
+ if (strncmp($user_mesg, "/cont ", 6) == 0) {
+ log_main($user->sess." chatt_send BEGIN");
- for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
- log_main($user->sess." chatt_send set loop");
-
- $user_cur = &$this->user[$i];
- if ($user_cur->sess == '')
- continue;
-
- if ($user_cur->stat == 'table' && $user_cur->table == $user->table) {
- $table = &$this->table[$user->table];
-
- $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
- $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('set_names([%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"]); ',
- $this->user[$table->player[($user_cur->table_pos) % BIN5_PLAYERS_N]]->flags,
- xcape($this->user[$table->player[($user_cur->table_pos) % BIN5_PLAYERS_N]]->name),
-
- $this->user[$table->player[($user_cur->table_pos+1) % BIN5_PLAYERS_N]]->flags,
- xcape($this->user[$table->player[($user_cur->table_pos+1) % BIN5_PLAYERS_N]]->name),
-
- $this->user[$table->player[($user_cur->table_pos+2) % BIN5_PLAYERS_N]]->flags,
- xcape($this->user[$table->player[($user_cur->table_pos+2) % BIN5_PLAYERS_N]]->name),
-
- (BIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+3) % BIN5_PLAYERS_N]]->flags),
- (BIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3) % BIN5_PLAYERS_N]]->name)),
-
- (BIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+4) % BIN5_PLAYERS_N]]->flags),
- (BIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4) % BIN5_PLAYERS_N]]->name)));
- if ($user_cur == $user) {
- $user_cur->comm[$user_cur->step % COMM_N] .= $user_cur->myname_innerHTML();
- }
- $user_cur->step_inc();
- }
- }
- }
+ $match_id = substr($user_mesg, 6);
+ $table->match_continue($this, $user, $match_id);
}
else {
for ($i = 0 ; $i < ($user->stat == 'room' ? BIN5_MAX_PLAYERS : BIN5_PLAYERS_N) ; $i++) {
else {
$user_cur = &$this->user[$table->player[$i]];
}
-
+
$user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
$user_cur->comm[$user_cur->step % COMM_N] .= sprintf('chatt_sub("%s", [%d, "%s"],"%s");',
$dt, $user->flags, xcape($user->name), xcape($user_mesg));
$curtime = time();
log_main("BIN5_WAKEUP from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
-
+
for ($i = 0 ; $i < $table->player_n ; $i++) {
$user_cur = &$this->user[$i];
log_main("PREIMPOST INLOOP name: ".$user_cur->name);
-
+
if ($user_cur == $user)
$user_cur->subst = "shutdowner";
else
$this->the_end = TRUE;
}
-
+
/*
* If all players are freezed the room garbage_manager clean up table and users.
- */
- function is_abandoned()
+ */
+ function is_abandoned()
{
$is_ab = TRUE;
$curtime = time();
for ($i = 0 ; $i < $table->player_n ; $i++) {
$user_cur = &$this->user[$i];
- if ($user_cur->lacc + (EXPIRE_TIME_RD * 2) >= $curtime) {
+ if ($user_cur->lacc + (EXPIRE_TIME_RD * 2) >= $curtime) {
$is_ab = FALSE;
break;
}
GLOBAL $G_black_list;
printf("NEW_SOCKET (root): %d\n", intval($new_socket));
-
+
$enc = get_encoding($header);
if (isset($header['User-Agent'])) {
if (strstr($header['User-Agent'], "MSIE")) {
}
force_no_cache($header_out);
- if (($table_idx = gpcs_var('table_idx', $get, $post, $cookie)) === FALSE)
+ if (($table_idx = gpcs_var('table_idx', $get, $post, $cookie)) === FALSE)
unset($table_idx);
-
- if (($table_token = gpcs_var('table_token', $get, $post, $cookie)) === FALSE)
+
+ if (($table_token = gpcs_var('table_token', $get, $post, $cookie)) === FALSE)
unset($table_token);
bin5_index_main($transp_type, $header_out, $addr, $get, $post, $cookie);
$content = ob_get_contents();
ob_end_clean();
-
+
$s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
return TRUE;
-
+
break;
case "index_wr.php":
// FIXME $content can be unset
}
$s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
return TRUE;
-
+
break;
case "index_rd_ifra.php":
if (($transp = gpcs_var('transp', $get, $post, $cookie)) === FALSE)
printf("CLOSE AND OPEN AGAIN ON IFRA2\n");
$user->rd_socket_set(NULL);
}
-
+
$content = "";
$user->stream_init($s_a_p->rndstr, $enc, $header, $header_out, $content, $get, $post, $cookie);
$response = headers_render($header_out, -1).$user->chunked_content($content);
$response_l = mb_strlen($response, "ASCII");
-
+
$wret = @fwrite($new_socket, $response, $response_l);
if ($wret < $response_l) {
printf("TROUBLES WITH FWRITE: %d\n", $wret);
$user->rd_cache_set("");
}
fflush($new_socket);
-
-
+
+
$s_a_p->socks_set($new_socket, $user, NULL);
$user->rd_socket_set($new_socket);
printf(" - qui ci siamo - ");
return TRUE;
} while (FALSE);
-
+
return FALSE;
break;
-
+
default:
return FALSE;
break;
return (TRUE);
}
-
-}
-
-
-// rendiamo qui l'elenco dei punti come return della func
-function calculate_points(&$table)
-{
- GLOBAL $G_all_points;
-
- $ret = array();
- $pro = 0;
-
- if ($table->asta_pnt == 60)
- $table->asta_pnt = 61;
-
- $table->old_reason = "";
- $table->old_win = $table->asta_win;
- $table->old_friend = $table->friend;
- $table->old_asta_pnt = $table->asta_pnt;
- $table->old_mult = $table->mult;
-
- // count points for the temporary 2 teams
- for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
- // for ($i = 0 ; $i < 40 ; $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 ($table->asta_pnt == 61 && $pro == 60) {
- $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;
- $ret[$i] = 0;
- }
- $table->points_n++;
- $table->old_pnt = $pro;
- $table->mult += 1;
-
- return($ret);
- }
-
- if ($pro >= $table->asta_pnt)
- $sig = 1;
- else
- $sig = -1;
- $table->points[$table->points_n % MAX_POINTS] = array();
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- if ($i == $table->asta_win)
- $pt = ($i == $table->friend ? 4 : 2);
- else if ($i == $table->friend)
- $pt = 1;
- else
- $pt = -1;
-
-
-
- log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pt));
-
- $pt = $pt * $sig * $table->multer(TRUE) * ($pro == 120 ? 2 : 1);
-
- log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $table->multer(TRUE), ($pro == 120 ? 2 : 1)));
-
- $table->points[$table->points_n % MAX_POINTS][$i] = $pt;
- $table->total[$i] += $pt;
- $ret[$i] = $pt;
- }
- $table->points_n++;
- $table->old_pnt = $pro;
- $table->mult = 0;
-
- return($ret);
}
-/* show table
+
+/* show table
is_transition (is from room to table ?)
is_again (is another game)
/* BACKGROUND */
$ret .= "background_set();";
-
+
/* USERS INFO */
$ret .= $user->myname_innerHTML();
$ret .= sprintf('set_names([%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"]); ',
$ret .= show_table_info(&$bri, &$table, $table_pos);
$ret .= "setTimeout(preload_images, 500, g_preload_img_arr, g_imgct);";
}
- if (!$is_again)
+ else {
+ $ret .= "\$('imgct').innerHTML = \$('imgct').innerHTML = mlang_commons['imgload_a'][g_lang]+\"100%.\";";
+ }
+ if (!$is_again)
$ret .= table_welcome($user);
if ($is_transition && !$is_again) { // appena seduti al tavolo, play della mucca
/* CARDS */
if ($is_transition) { // && $user->subst == "asta" superfluo
$ret .= "|";
-
- for ($i = 0 ; $i < 8 ; $i++) {
+
+ for ($i = 0 ; $i < BIN5_CARD_HAND ; $i++) {
for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) {
$ct = 0;
- for ($o = 0 ; $o < (BIN5_PLAYERS_N == 5 ? 40 : 24) && $ct < $i+1 ; $o++) {
+ for ($o = 0 ; $o < (BIN5_CARD_HAND * BIN5_PLAYERS_N) && $ct < $i+1 ; $o++) {
// for ($o = 0 ; $o < 40 && $ct < $i+1 ; $o++) {
if ($table->card[$o]->owner == (($e + $table->gstart) % BIN5_PLAYERS_N)) {
$ct++;
}
}
log_rd("O ".$o." VAL ".$table->card[$o]->value." Owner: ".$table->card[$o]->owner);
-
- $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % BIN5_PLAYERS_N,
+
+ $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % BIN5_PLAYERS_N,
$i, ((($e + BIN5_PLAYERS_N - $table_pos + $table->gstart) % BIN5_PLAYERS_N) == 0 ?
- $table->card[$o]->value : -1),
+ $table->card[$o]->value : -1),
($i == 7 && $e == (BIN5_PLAYERS_N - 1) ? 1 : 0.5),$i+1);
}
- }
+ }
}
else {
$taked = array(0,0,0,0,0);
$ontabl = array(-1,-1,-1,-1,-1);
$cards = array();
- for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
// for ($i = 0 ; $i < 40 ; $i++) {
if ($table->card[$i]->stat == 'hand') {
if ($table->card[$i]->owner == $table_pos) {
/* Set ours cards. */
$oursarg = "";
- for ($i = 0 ; $i < $inhand[$table_pos] ; $i++)
+ for ($i = 0 ; $i < $inhand[$table_pos] ; $i++)
$oursarg .= ($i == 0 ? "" : ", ").$cards[$i];
- for ($i = $inhand[$table_pos] ; $i < 8 ; $i++)
+ for ($i = $inhand[$table_pos] ; $i < BIN5_CARD_HAND ; $i++)
$oursarg .= ($i == 0 ? "" : ", ")."-1";
$ret .= sprintf('card_setours(%s);', $oursarg);
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
/* Qui sotto al posto di + 1 c'era + ->gstart ... credo in modo errato */
$ret .= sprintf('cards_dispose(%d,%d,%d);', $i,
- ($inhand[$i] <= 8 ? $inhand[$i] : 8) , $taked[$i]);
+ ($inhand[$i] <= BIN5_CARD_HAND ? $inhand[$i] : BIN5_CARD_HAND), $taked[$i]);
if ($ontabl[$i] != -1) {
- $ret .= sprintf('card_place(%d,%d,%d,%d,%d);',$i, $inhand[$i],
- $table->card[$ontabl[$i]]->value,
+ $ret .= sprintf('card_place(%d,%d,%d,%d,%d);',$i, $inhand[$i],
+ $table->card[$ontabl[$i]]->value,
$table->card[$ontabl[$i]]->x, $table->card[$ontabl[$i]]->y);
}
}
$showst = "";
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$table->player[$i]];
- $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "),
+ $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "),
($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt));
}
if (BIN5_PLAYERS_N == 3)
else {
/* show auction */
if ($table_pos == ($table->gstart % BIN5_PLAYERS_N) &&
- $table->asta_win == -1)
- $ret .= sprintf('dispose_asta(%d,%d, %s);',
+ $table->asta_win == -1)
+ $ret .= sprintf('dispose_asta(%d,%d, %s);',
$table->asta_card + 1, $table->asta_pnt+1, ($user->handpt <= 2 ? "true" : "false"));
else
$ret .= sprintf('dispose_asta(%d,%d, %s);',
/* Remark */
if ($table->asta_win == -1) { // auction case
- if ($table_pos == ($table->gstart % BIN5_PLAYERS_N))
+ if ($table_pos == ($table->gstart % BIN5_PLAYERS_N))
$ret .= "remark_on();";
else
$ret .= "remark_off();";
}
else { // chooseed case
- if ($table_pos == $table->asta_win)
+ if ($table_pos == $table->asta_win)
$ret .= "remark_on();";
else
$ret .= "remark_off();";
}
else if ($user->subst == 'game') {
/* HIGHLIGHT */
- if (($table->gstart + $table->turn) % BIN5_PLAYERS_N == $table_pos)
+ if (($table->gstart + $table->turn) % BIN5_PLAYERS_N == $table_pos)
$ret .= "is_my_time = true; remark_on();";
else
$ret .= "remark_off();";
-
+
/* WHO CALL AND WHAT */
$ret .= briscola_show($bri, $table, $user);
-
+
}
return ($ret);
} // end function show_table(...
$cur_val = 100;
$cur_seed = $table->briscola - ($table->briscola % 10);
- for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
// for ($i = 0 ; $i < 40 ; $i++) {
if ($table->card[$i]->stat != "table")
continue;
log_wr(sprintf("Card On table: [%d]", $i));
- $v = $table->card[$i]->value;
+ $v = $table->card[$i]->value;
$ontab[$table->card[$i]->owner] = $v;
$ontid[$table->card[$i]->owner] = $i;
/* se briscola setto il flag */
$pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS;
$noty = sprintf('<table class=\"points\"><tr><th></th>');
-
+
// Names.
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++)
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++)
$noty .= sprintf('<th class=\"td_points\">%s</th>', xcape($bri->user[$table->player[$i]]->name));
$noty .= sprintf("</tr>");
for ($i = $pnt_min ; $i < $table->points_n ; $i++) {
$noty .= sprintf('<tr><th class=\"td_points\">%d</th>', $i+1);
- for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++)
+ for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++)
$noty .= sprintf('<td class=\"td_points\">%d</td>', $table->points[$i % MAX_POINTS][$e]);
$noty .= "</tr>";
}
// Total points.
$noty .= '<tr><th class=\"td_points\">Tot.</th>';
- for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++)
+ for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++)
$noty .= sprintf('<td class=\"td_points\">%d</td>', $table->total[$e]);
$noty .= "</tr></table>";
-
+ $noty .= "<hr>";
if ($table->old_reason != "") {
- $noty .= sprintf("<hr><b>%s</b><br>", xcape($table->old_reason));
+ $noty .= $table->old_reason;
}
- if ($table->old_win != -1) {
- log_main("TABLE_OLD_WIN:".$table->old_win);
- $win = $table->player[$table->old_win];
- log_main("TABLE_OLD_FRIEND:".$table->old_friend);
- $fri = $table->player[$table->old_friend];
-
- $wol = game_result($table->old_asta_pnt, $table->old_pnt);
-
- if ($win != $fri) {
- /* 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],
- xcape($bri->user[$win]->name),
- xcape($bri->user[$fri]->name));
- if ($table->old_pnt == 120) {
- $noty .= sprintf($mlang_bin5_bin5['info_capp'][$G_lang]);
- }
- else {
- $noty .= sprintf($mlang_bin5_bin5['info_pnt'][$G_lang],
- ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt :
- $mlang_bin5_bin5['info_more'][$G_lang]), $table->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_alon'][$G_lang],
- xcape($bri->user[$win]->name));
- if ($table->old_pnt == 120) {
- $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang]);
- }
- else {
- $noty .= sprintf($mlang_bin5_bin5['info_apnt'][$G_lang],
-
- ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt :
- $mlang_bin5_bin5['info_more'][$G_lang]), $table->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 = $table->multer(FALSE);
- if ($old_multer > 1) {
- $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], multoval($old_multer));
- }
- $noty .= "<hr><br>";
- }
/* MLANG: "Fai <b>tu</b> il mazzo,", "Il mazzo a <b>$unam</b>," */
- if ($table->mazzo == $table_pos)
+ if ($table->mazzo == $table_pos)
$noty .= $mlang_bin5_bin5['info_yshuf'][$G_lang];
else {
$unam = xcape($bri->user[$table->player[$table->mazzo]]->name);
if ($user->subst == 'asta') {
if ($table->asta_win == -1) // auction case
$curplayer = $table->gstart % BIN5_PLAYERS_N;
- else
+ else
$curplayer = $table->asta_win;
}
else if ($user->subst == 'game') {
$unam = xcape($bri->user[$table->player[$curplayer]]->name);
$noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam);
}
-
+
$multer = $table->multer(TRUE);
if ($multer > 1) {
$noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($multer) );
}
$noty .= "<hr><br>";
+ if ($table->match_id != -1) {
+ $noty .= sprintf($mlang_bin5_bin5['info_match'][$G_lang], $table->match_id);
+ $noty .= "<hr><br>";
+ }
$ret .= show_notify($noty, 3000, $mlang_bin5_bin5['btn_bkgame'][$G_lang], 500, 400);
- /* NOTE: show_notify($noty, 3000, "torna alla partita", 500,
- * 130 + ($table->points_n > 0 ? 50 : 0) +
+ /* NOTE: show_notify($noty, 3000, "torna alla partita", 500,
+ * 130 + ($table->points_n > 0 ? 50 : 0) +
* (120 * ($table->points_n / MAX_POINTS)));
- * will be used when we refact notify js function following
- * photoo class logic
- */
-
+ * will be used when we refact notify js function following
+ * photoo class logic
+ */
+
return ($ret);
}
$ptnadd = "";
$ret = "";
- if ($table->asta_card == 9)
+ if ($table->asta_card == 9)
$ptnadd = sprintf($mlang_bin5_bin5['call_wptn'][$G_lang], $table->asta_pnt);
-
+
/* text of caller cell */
if ($user->table_pos == $table->asta_win) {
$prestr = sprintf('$("callerinfo").innerHTML = "%s";', $mlang_bin5_bin5['call_ycall'][$G_lang]);
}
else {
$prestr = sprintf('$("callerinfo").innerHTML = "%s";', $mlang_bin5_bin5['call_call'][$G_lang]);
- $ret .= sprintf($prestr,
+ $ret .= sprintf($prestr,
xcape($bri->user[$table->player[$table->asta_win]]->name), $ptnadd);
}
$ret .= sprintf('set_iscalling(%d);', ($table->asta_win - $user->table_pos + BIN5_PLAYERS_N) % BIN5_PLAYERS_N);
$ret .= sprintf('$("astalascio").style.visibility = "";');
$ret .= sprintf('$("asta").style.visibility = "hidden";');
$ret .= sprintf('show_astat(-2,-2,-2,-2,-2);');
-
+
return ($ret);
}
}
}
-function log_points($remote_addr, $curtime, $user, $where, $mesg)
+function log_points($remote_addr, $curtime, $user, $where, $mesg)
{
if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) {
/* Unix time | session | nickname | IP | where was | mesg */
}
}
+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%1$s', $tg_br, $tg_hr);
+
+ return ($noty);
+}
+
?>
}
/* types of placing based on delta time */
-define(TY_DTIME_TRI, 0);
-define(TY_DTIME_MON, 1);
-define(TY_DTIME_WEE, 2);
+define('TY_DTIME_TRI', 0);
+define('TY_DTIME_MON', 1);
+define('TY_DTIME_WEE', 2);
/* subtypes of placing based on number of played games */
-define(SUBTY_FREQ_LO, 0);
-define(SUBTY_FREQ_HI, 1);
+define('SUBTY_FREQ_LO', 0);
+define('SUBTY_FREQ_HI', 1);
function placings_show($user)
show_astat(-2,-2,-2,-2,-2);
set_iscalling(-1);
- for (i=0 ; i < 8 ; i++) {
+ for (i=0 ; i < CARD_HAND ; i++) {
Drag.init($("card" + i), card_mouseup_cb);
for (e = 0 ; e < PLAYERS_N ; e++)
$("card"+sux[e]+i).style.visibility = "hidden";
$("takes"+sux[i]).style.visibility = "hidden";
}
- for (i = 0 ; i < 8 ; i++) {
+ for (i=0 ; i < CARD_HAND ; i++) {
cards_pos[i] = i;
cards_ea_pos[i] = i;
cards_ne_pos[i] = i;
* Suite 330, Boston, MA 02111-1307, USA.
*
*/
-
+/* number of players */
var PLAYERS_N = 3;
+/* initial number of cards in hand */
+var CARD_HAND = 3;
/* current manche */
var manche = 1;
/* cards on hands */
/* suffix to add to images name */
var sux = new Array( "", "_ea", "", "", "_we");
-var cards_pos = new Array (8);
-var cards_ea_pos = new Array (8);
-var cards_ne_pos = new Array (8);
-var cards_nw_pos = new Array (8);
-var cards_we_pos = new Array (8);
+var cards_pos = new Array (CARD_HAND);
+var cards_ea_pos = new Array (CARD_HAND);
+var cards_ne_pos = new Array (CARD_HAND);
+var cards_nw_pos = new Array (CARD_HAND);
+var cards_we_pos = new Array (CARD_HAND);
var take_x = new Array(562, 745, 452, 30, 52);
var take_y = new Array(545, 177, 70, 62,155);
-for (i = 0 ; i < 8 ; i++) {
+for (i = 0 ; i < CARD_HAND ; i++) {
cards_pos[i] = i;
cards_ea_pos[i] = i;
cards_ne_pos[i] = i;
for (i = 0 ; i < car_n ; i++) {
$("card" + cards_pos[i]).style.left = start + (i * inter);
$("card" + cards_pos[i]).style.top = 475 + (125 - cards_height)/2;
- $("card" + cards_pos[i]).style.zIndex = 8 - i;
+ $("card" + cards_pos[i]).style.zIndex = CARD_HAND - i;
$("card" + cards_pos[i]).style.visibility = "visible";
}
for (i = 0 ; i < car_n ; i++) {
$("card_ea" + cards_ea_pos[i]).style.left = 675 + (125 - cards_height)/2;
$("card_ea" + cards_ea_pos[i]).style.top = start + (i * inter);
- $("card_ea" + cards_ea_pos[i]).style.zIndex = 8 - i;
+ $("card_ea" + cards_ea_pos[i]).style.zIndex = CARD_HAND - i;
$("card_ea" + cards_ea_pos[i]).style.visibility = "visible";
// alert("xx "+ (675 + (125 - cards_height)/2) +" yy " + start + (i * inter));
}
for (i = 0 ; i < car_n ; i++) {
$("card_we" + cards_we_pos[i]).style.left = (125 - cards_height)/2;
$("card_we" + cards_we_pos[i]).style.top = start - (i * inter);
- $("card_we" + cards_we_pos[i]).style.zIndex = 8 - i;
+ $("card_we" + cards_we_pos[i]).style.zIndex = CARD_HAND - i;
$("card_we" + cards_we_pos[i]).style.visibility = "visible";
}
var i;
var arg = new Array(zer,uno,due,tre,qua,cin,sei,set);
- for (i = 0 ; i < 8 ; i++) {
+ for (i = 0 ; i < CARD_HAND ; i++) {
$("card"+i).src = getcard(arg[i], 0);
$("card"+i).briskid = arg[i];
}
require_once("Obj/placing.phh");
function main() {
-
- if (file_exists(LEGAL_PATH."/explain.log")) {
- $ret .= file_get_contents(LEGAL_PATH."/explain.log");
- }
- echo "$ret";
+ $ret = "";
+ if (file_exists(LEGAL_PATH."/explain.log")) {
+ $ret .= file_get_contents(LEGAL_PATH."/explain.log");
+ }
+ echo "$ret";
}
?>
<html>
<?php
/*
- * brisk - index_wr.php
+ * brisk - briskin5/index_wr.php
*
* Copyright (C) 2006-2012 Matteo Nastasi
- * mailto: nastasi@alternativeoutput.it
+ * mailto: nastasi@alternativeoutput.it
* matteo.nastasi@milug.org
* web: http://www.alternativeoutput.it
*
if ($bri == NULL) {
return FALSE;
}
-
- if (($mesg = gpcs_var('mesg', $get, $post, $cookie)) === FALSE)
+
+ if (($mesg = gpcs_var('mesg', $get, $post, $cookie)) === FALSE)
unset($mesg);
-
- if (($sess = gpcs_var('sess', $get, $post, $cookie)) === FALSE)
+
+ if (($sess = gpcs_var('sess', $get, $post, $cookie)) === FALSE)
$sess = "";
log_wr('COMM: '.$mesg);
- if (($CO_bin5_pref_ring_endauct = gpcs_var('CO_bin5_pref_ring_endauct', $get, $post, $cookie)) === FALSE)
+ 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 = &$bri->get_user($sess, &$idx)) == FALSE) {
echo "Get User Error";
log_wr("Get User Error");
}
$argz = explode('|', $mesg);
-
+
log_wr('POSTSPLIT: '.$argz[0].' user->stat: ['.$user->stat.']');
log_wr($user->step, 'bin::index_wr.php: after get_user()');
$user->lacc = $curtime;
-
+
if ($argz[0] == 'ping') {
log_wr("PING RECEIVED");
}
else if (false && $argz[0] == 'shutdown') {
log_auth($user_cur->sess, "Shutdown session. delegate to room gc the autologout");
-
+
log_rd2("bin5/index_wr.php: AUTO LOGOUT.");
if ($user->stat == 'table') {
$bri->table_wakeup($user);
else if ($user->stat == 'table') {
$user->laccwr = time();
$table = $bri->table[$user->table];
-
+
if ($argz[0] == 'tableinfo') {
log_wr("PER DI TABLEINFO");
$user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
}
else if ($argz[0] == 'preferences_update') {
log_wr("PER DI PREFERENCES_UPDATE");
-
+
if ($CO_bin5_pref_ring_endauct == "true")
$user->privflags |= BIN5_USER_FLAG_RING_ENDAUCT;
else
}
else if ($argz[0] == 'logout') {
$remcalc = $argz[1];
-
+
if ($user->exitislock == TRUE) {
$remcalc++;
$user->exitislock = FALSE;
}
-
+
$logout_cont = TRUE;
if ($remcalc >= 3) {
$lockcalc = $table->exitlock_calc(&$bri->user, $user->table_pos);
$user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
$user->comm[$user->step % COMM_N] .= $table->exitlock_show(&$bri->user, $user->table_pos);
$user->comm[$user->step % COMM_N] .= show_notify("<br>I dati presenti sul server non erano allineati con quelli inviati dal tuo browser, adesso lo sono. Riprova ora.", 2000, "torna alla partita.", 400, 100);
-
+
log_wr($user->comm[$user->step % COMM_N]);
$user->step_inc();
$logout_cont = FALSE;
$user->ip, $user->sess, $user->laccwr + BAN_TIME);
}
// $user->bantime = $user->laccwr + BAN_TIME;
-
+
if ($logout_cont == TRUE) {
$bri->table_wakeup(&$user);
}
else if ($argz[0] == 'exitlock') {
if ($user->exitislock == TRUE) {
$user->exitislock = ($user->exitislock == TRUE ? FALSE : TRUE);
- for ($ct = 0, $i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ for ($ct = 0, $i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur[$i] = &$bri->user[$table->player[$i]];
if ($user_cur[$i]->exitislock == FALSE)
$ct++;
}
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$ret = sprintf('gst.st = %d;', $user_cur[$i]->step+1);
- $ret .= sprintf('exitlock_show(%d, %s);', $ct,
+ $ret .= sprintf('exitlock_show(%d, %s);', $ct,
($user_cur[$i]->exitislock ? 'true' : 'false'));
$user_cur[$i]->comm[$user_cur[$i]->step % COMM_N] = $ret;
log_wr($user_cur[$i]->comm[$user_cur[$i]->step % COMM_N]);
}
}
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();
- $table->game_init(&$bri->user);
-
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bri->user[$table->player[$i]];
-
- $ret = sprintf('gst.st = %d;', $user_cur->step+1);
- $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
- $user_cur->step_inc();
+ 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(&$bri->user); */
+
+ if ($table->rules_engine(&$bri, $curtime, BIN5_RULES_ABANDON, $user)) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$table->player[$i]];
+
+ $ret = sprintf('gst.st = %d;', $user_cur->step+1);
+ $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
+ $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+ $user_cur->step_inc();
+ }
}
}
else if ($argz[0] == 'asta') {
$again = TRUE;
-
+
$index_cur = $table->gstart % BIN5_PLAYERS_N;
if ($user->table_pos == $index_cur &&
$table->asta_pla[$index_cur]) {
$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.");
$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;
}
}
}
-
-
-
+
if ($again) { // Qualcosa non andato bene, rifare
- $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1,
+ $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();
-
+
log_wr("Ripetere.");
}
else {
/* next step */
- $showst = "show_astat(";
+ $showst = "show_astat(";
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$table->player[$i]];
- $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "),
+ $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 .= ");";
-
+
$maxcard = -2;
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$table->player[$i]];
if ($maxcard < $user_cur->asta_card)
$maxcard = $user_cur->asta_card;
}
-
+
if (($table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
!($table->asta_card == 9 && $table->asta_pnt == 120)) {
log_wr("ALLOPPA QUI");
break;
}
}
-
-
+
+
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->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();',
+ 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();',
}
else if ($table->asta_pla_n == 0) {
log_wr("PASSANO TUTTI!");
-
- log_wr(sprintf("GIOCO FINITO !!!"));
-
- $table->old_reason = "Hanno passato tutti.";
- $table->mult += 1;
-
- $table->game_next();
- $table->game_init(&$bri->user);
-
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bri->user[$table->player[$i]];
-
- $ret = sprintf('gst.st = %d;', $user_cur->step+1);
- $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
- $user_cur->step_inc();
+
+ if ($table->rules_engine(&$bri, $curtime, BIN5_RULES_ALLPASS, $user)) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$table->player[$i]];
+
+ $ret = sprintf('gst.st = %d;', $user_cur->step+1);
+ $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
+ $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+ $user_cur->step_inc();
+ }
}
}
else {
// 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++)
+ 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->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();
*/
}
}
$table->asta_win = $chooser;
-
+
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->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));
-
+
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();
+ $user_cur->step_inc();
}
}
}
}
/* asta::choose */
else if ($argz[0] == 'choose') {
- if ($table->asta_win > -1 &&
+ if ($table->asta_win > -1 &&
$user->table_pos == $table->asta_win) {
$a_brisco = $argz[1];
if ($a_brisco >= 0 && $a_brisco < 40) {
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 = &$bri->user[$table->player[$chooser]];
for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->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($bri, $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();
+ $user_cur->step_inc();
}
/*
TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE
VAR PER PASSARE ALLA FASE DI GIOCO
*/
-
+
}
}
}
}
else if ($user->subst == 'game') {
log_wr("state: table::game".$argz[0]);
-
+
if ($argz[0] == 'play') {
$a_play = $argz[1];
$a_x = $argz[2];
$a_y = $argz[3];
-
+
if (strpos($a_x, "px") != FALSE)
$a_x = substr($a_x,0,-2);
if (strpos($a_y, "px") != FALSE)
$a_y = substr($a_y,0,-2);
-
+
$loggo = sprintf("A_play %s, table_pos %d == %d, mazzo %d, gstart %d, card_stat %d, card_own %d",
$a_play, $user->table_pos, ($table->gstart % BIN5_PLAYERS_N),
$table->mazzo, $table->gstart,
$table->card[$a_play]->stat, $table->card[$a_play]->owner);
log_wr("CIC".$loggo);
-
+
/* se era il suo turno e la carta era sua ed era in mano */
- if ($a_play >=0 && $a_play < (BIN5_PLAYERS_N == 5 ? 40 : 24) &&
+ if ($a_play >=0 && $a_play < (BIN5_CARD_HAND * BIN5_PLAYERS_N) &&
($user->table_pos == (($table->gstart + $table->turn) % BIN5_PLAYERS_N)) &&
$table->card[$a_play]->stat == 'hand' &&
$table->card[$a_play]->owner == $user->table_pos) {
log_wr(sprintf("User: %s Play: %d",$user->name, $a_play));
-
+
/* Change the card status. */
$table->card[$a_play]->play($a_x, $a_y);
-
+
/*
* !!!! TURN INCREMENTED BEFORE !!!!
*/
$turn_cur = ($table->gstart + $table->turn) % BIN5_PLAYERS_N;
$table->turn++;
-
+
$card_play = sprintf("card_play(%d,%d,%d,%d);|",
$user->table_pos, $a_play, $a_x, $a_y);
if (($table->turn % BIN5_PLAYERS_N) != 0) { /* manche not finished */
$turn_nex = ($table->gstart + $table->turn) % BIN5_PLAYERS_N;
-
+
$player_cur = "remark_off();";
$player_nex = $card_play . "is_my_time = true; remark_on();";
$player_oth = $card_play;
}
- else if ($table->turn <= (BIN5_PLAYERS_N * 8)) { /* manche finished */
+ else if ($table->turn <= (BIN5_PLAYERS_N * BIN5_CARD_HAND)) { /* manche finished */
$winner = calculate_winner($table);
log_wr("GSTART 3");
$table->gstart = $winner;
$turn_nex = ($table->gstart + $table->turn) % BIN5_PLAYERS_N;
-
+
log_wr(sprintf("The winner is: [%d] [%s]", $winner, $bri->user[$table->player[$winner]]->name));
$card_take = sprintf("sleep(gst,2000);|cards_take(%d);|", $winner);
- $player_cur = "remark_off();" . $card_take;
+ $player_cur = "remark_off();" . $card_take;
if ($turn_cur != $turn_nex)
$player_nex = $card_play . $card_take;
else
$player_nex = "";
- if ($table->turn < (BIN5_PLAYERS_N * 8)) /* game NOT finished */
+ if ($table->turn < (BIN5_PLAYERS_N * BIN5_CARD_HAND)) /* game NOT finished */
$player_nex .= "is_my_time = true; remark_on();";
$player_oth = $card_play . $card_take;
}
-
+
log_wr(sprintf("Turn Cur %d Turn Nex %d",$turn_cur, $turn_nex));
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$table->player[$i]];
-
+
$ret = sprintf('gst.st = %d; ', $user_cur->step+1);
-
-
+
+
if ($i == $turn_cur) {
- $ret .= $player_cur;
+ $ret .= $player_cur;
}
if ($i == $turn_nex) {
- $ret .= $player_nex;
+ $ret .= $player_nex;
}
if ($i != $turn_cur && $i != $turn_nex) {
$ret .= $player_oth;
}
-
+
$retar[$i] = $ret;
}
-
- if ($table->turn == (BIN5_PLAYERS_N * 8)) { /* game finished */
+
+ if ($table->turn == (BIN5_PLAYERS_N * BIN5_CARD_HAND)) { /* game finished */
log_wr(sprintf("GIOCO FINITO !!!"));
-
-
- /* ************************************************ */
- /* PRIMA LA PARTE PER LO SHOW DI CHI HA VINTO */
- /* ************************************************ */
- $pt_cur = calculate_points(&$table);
-
- $plist = "$table->table_token|$user->table_orig|$table->player_n";
- $ucodes = array();
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bri->user[$table->player[$i]];
- $plist .= '|'.xcapelt($user_cur->name).'|'.$pt_cur[$i];
- $ucodes[$i] = $user_cur->code_get();
- }
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $plist .= '|'.xcapelt($ucodes[$i]);
- }
- log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
- 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->table_token, $user->table_orig, $ucodes, $pt_cur);
- unset($bdb);
- }
- else {
- log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED");
+
+ if ($table->rules_engine(&$bri, $curtime, BIN5_RULES_FINISH, $user)) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$table->player[$i]];
+ $retar[$i] .= show_table(&$bri,&$user_cur,$user_cur->step+1,TRUE, TRUE);
}
- log_points($curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
- }
-
- $table->game_next();
- $table->game_init(&$bri->user);
-
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bri->user[$table->player[$i]];
- $retar[$i] .= show_table(&$bri,&$user_cur,$user_cur->step+1,TRUE, TRUE);
}
}
-
-
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$bri->user[$table->player[$i]];
-
+
$user_cur->comm[$user_cur->step % COMM_N] = $retar[$i];
- $user_cur->step_inc();
+ $user_cur->step_inc();
}
-
+
log_wr(sprintf("TURN: %d",$table->turn));
/* Have played all the players ? */
/* NO: switch the focus and enable the next player to play. */
-
+
/* YES: calculate who win and go to the next turn. */
}
}
<?php
/*
- * brisk - statadm.php
+ * brisk - stat-day.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|
-
+ call example:
+wget -O daily.txt dodo.birds.van/brisk/briskin5/stat-day.php?pazz=yourpasswd&from=1000&to=1380308086
+
+now="$(date +%s)"
+
+# from 100 days ago to 1 day after
+to="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$(date +%s) + 86400" | bc))"
+from="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$(date +%s) - 8640000" | bc))"
+# to="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$now + 7200 " | bc))"
+# from="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$now - 9200 " | bc))"
+
+curl -d "pazz=$BRISK_PASS" "http://$BRISK_SITE/briskin5/stat-day.php?from=$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$(date +%s) - 8640000" | bc))&to=$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$(date +%s) + 86400" | bc))"
+
*/
$G_base = "../";
+$mlang_stat_day = array( 'normal match'=> array( 'it' => 'Partite normali',
+ 'en' => 'Normal matches' ),
+ 'special match' => array( 'it' => 'Partite speciali',
+ 'en' => 'Special matches'),
+
+ 'info_total'=> array( 'it' => 'totali',
+ 'en' => 'En totali')
+ );
+
+
ini_set("max_execution_time", "240");
require_once("../Obj/brisk.phh");
function main_file($curtime)
{
- GLOBAL $G_alarm_passwd;
+ 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)
echo "database connection failed";
exit;
}
-
+
$bdb->users_load();
for ($i = 0 ; $i < $bdb->count() ; $i++) {
// if not auth table, continue
if (count($ar) < 15)
continue;
-
+
// echo $p++."<br>";
if ($ar[7] >= TABLES_AUTH_N)
continue;
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++) {
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)
+ if ($ar[0] >= $curtime - MON_LIMIT)
$mon[$id]->add($ar[10+($i*2)] / $mult);
- if ($ar[0] >= $curtime - WEE_LIMIT)
+ 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) {
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)
+ 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)
+ 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);
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)
+ 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)
+ 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);
}
for ($i = 0 ; $i < count($wee) ; $i++) {
- if ($wee[$i]->gam == 0.0)
+ 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)
+ 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)
+ 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);
function main_pgsql($from, $to)
{
- GLOBAL $G_dbpfx;
+ GLOBAL $G_lang, $G_dbpfx, $mlang_stat_day;
- if (($fpexp = @fopen(LEGAL_PATH."/explain.log", 'w')) == FALSE) {
- echo "Open explain failed<br>";
- exit;
- }
- fprintf($fpexp, "<h2>Minuta delle partite dal (%s) al (%s)</h2>",
- $from, $to);
+ $ret = FALSE;
+ $fpexp = FALSE;
- if (($bdb = BriskDB::create()) == FALSE) {
- echo "database connection failed";
- exit;
- }
do {
+ if (($fpexp = @fopen(LEGAL_PATH."/explain.log", 'w')) == FALSE) {
+ log_crit("stat-day: open explain failed");
+ break;
+ }
+ fprintf($fpexp, "<h2>Minuta delle partite dal (%s) al (%s)</h2>",
+ $from, $to);
+
+ if (($bdb = BriskDB::create()) == FALSE) {
+ log_crit("stat-day: database connection failed");
+ break;
+ }
+
if (pg_query($bdb->dbconn->db(), "BEGIN") == FALSE) {
- log_crit("statadm: begin failed");
+ log_crit("stat-day: begin failed");
break;
}
-
- $tmt_sql = sprintf("select m.code as code from %sbin5_matches as m, %sbin5_games as g WHERE m.code = g.mcode AND g.tstamp >= '%s' AND g.tstamp < '%s' GROUP BY m.code;", $G_dbpfx, $G_dbpfx, $from, $to);
- // if deletable old matches exists then ...
- if (($tmt_pg = pg_query($bdb->dbconn->db(), $tmt_sql)) != FALSE) {
+ // retrieve list of active tournaments
+ $trn_sql = sprintf("SELECT * FROM %sbin5_tournaments WHERE active = 1;", $G_dbpfx);
+ if (($trn_pg = pg_query($bdb->dbconn->db(), $trn_sql)) == FALSE) {
+ log_crit("stat-day: select from tournaments failed");
+ break;
+ }
+
+ $trn_n = pg_numrows($trn_pg);
+ printf("Number of tournaments: %d\n", $trn_n);
+
+ for ($t = 0 ; $t < $trn_n ; $t++) {
+ $trn_obj = pg_fetch_object($trn_pg, $t);
+
+ $tmt_sql = sprintf("SELECT m.code AS code, m.mazzo_next as minus_one_is_old FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_tournaments as t WHERE t.code = m.tcode AND m.code = g.mcode AND t.code = %d AND g.tstamp >= '%s' AND g.tstamp < '%s' GROUP BY m.code, minus_one_is_old ORDER BY m.code, minus_one_is_old DESC;",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $trn_obj->code, $from, $to);
+
+ // if deletable old matches exists then ...
+ if (($tmt_pg = pg_query($bdb->dbconn->db(), $tmt_sql)) == FALSE) {
+ log_crit("stat-day: select from matches failed");
+ break;
+ }
+
//
// store matches before clean them
//
$tmt_n = pg_numrows($tmt_pg);
// get matches
+ 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]);
+
for ($m = 0 ; $m < $tmt_n ; $m++) {
fprintf($fpexp, "<br>");
$tmt_obj = pg_fetch_object($tmt_pg, $m);
-
- $usr_sql = sprintf("
-SELECT u.code AS code, u.login AS login, min(g.tstamp) AS first, max(g.tstamp) AS last, m.tidx AS tidx FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d GROUP BY u.code, u.login, m.tidx;", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, $tmt_obj->code);
-
- if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE ) {
+
+ if (($users = $bdb->users_get($tmt_obj->code, TRUE, ($tmt_obj->minus_one_is_old > -1))) == FALSE) {
+ log_crit("%s: users_get failed", __FUNCTION__);
break;
}
- $usr_n = pg_numrows($usr_pg);
- if ($usr_n != 5) {
+
+ $gam_sql = sprintf("SELECT g.* FROM %sbin5_tournaments as t, %sbin5_matches AS m, %sbin5_games AS g WHERE t.code = m.tcode AND m.code = g.mcode AND m.code = %d ORDER BY g.tstamp;",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $tmt_obj->code);
+ if (($gam_pg = pg_query($bdb->dbconn->db(), $gam_sql)) == FALSE ) {
+ log_crit("stat-day: gam_sql failed");
break;
- }
- for ($u = 0 ; $u < $usr_n ; $u++) {
- $usr_obj = pg_fetch_object($usr_pg, $u);
+ }
+
+ for ($u = 0 ; $u < count($users) ; $u++) {
if ($u == 0) {
- fprintf($fpexp, "<h3>Codice: %d (%s - %s), Tavolo: %s</h3>\n", $tmt_obj->code, $usr_obj->first, $usr_obj->last, $usr_obj->tidx);
+ fprintf($fpexp, "<h3>Codice: %d (%s - %s), Tavolo: %s</h3>\n", $tmt_obj->code, $users[$u]['first'], $users[$u]['last'], $users[$u]['tidx']);
fprintf($fpexp, "<table align='center' class='placing'><tr>\n");
- }
- fprintf($fpexp, "<th>%s</th>", $usr_obj->login);
- $pts_sql = sprintf("
-select p.pts as pts from %sbin5_matches as m, %sbin5_games as g, %sbin5_points as p, %susers as u WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d AND u.code = %d ORDER BY g.code", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx,
- $tmt_obj->code, $usr_obj->code);
+ }
+ fprintf($fpexp, "<th>%s</th>", $users[$u]['login']);
+ // note: we are looping on users, order on them not needed
+ $pts_sql = sprintf("SELECT p.pts as pts from %sbin5_games as g, %sbin5_points as p WHERE g.code = p.gcode AND g.mcode = %d AND p.ucode = %d ORDER BY g.code",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx,
+ $tmt_obj->code, $users[$u]['code']);
- if (($pts_pg[$u] = pg_query($bdb->dbconn->db(), $pts_sql)) == FALSE) {
+ // points of the match for each user
+ if (($pts_pg[$u] = pg_query($bdb->dbconn->db(), $pts_sql)) == FALSE) {
+ log_crit("stat-day: pts_sql failed");
break;
}
if ($u == 0) {
}
else {
if ($num_games != pg_numrows($pts_pg[$u])) {
+ log_crit("stat-day: num_games != pg_numrows");
break;
}
}
}
- if ($u != 5) {
+ if ($u != BIN5_PLAYERS_N) {
+ log_crit("stat-day: u != BIN5_PLAYERS_N");
break;
- }
- fprintf($fpexp, "</tr>\n");
+ }
+ if ($tmt_obj->minus_one_is_old != -1) {
+ fprintf($fpexp, "<th>mazzo</th><th>descrizione</th></tr>\n");
+ }
// LISTA DELLE VARIE PARTITE
for ($g = 0 ; $g < $num_games ; $g++) {
+ $gam_obj = pg_fetch_object($gam_pg, $g);
fprintf($fpexp, "<tr>");
- for ($u = 0 ; $u < 5 ; $u++) {
+ for ($u = 0 ; $u < BIN5_PLAYERS_N ; $u++) {
$pts_obj = pg_fetch_object($pts_pg[$u], $g);
- fprintf($fpexp, "<td>%d</td>", $pts_obj->pts);
+ fprintf($fpexp, "<%s>%d</%s>",
+ ($tmt_obj->minus_one_is_old == -1 ? "td" : "th"),
+ $pts_obj->pts,
+ ($tmt_obj->minus_one_is_old == -1 ? "td" : "th"));
+ }
+ if ($tmt_obj->minus_one_is_old != -1) {
+ fprintf($fpexp, "<td>%s</td><td>%s</td>", $users[$gam_obj->mazzo]['login'],
+ xcape( game_description($gam_obj->act, 'plain', $gam_obj->mult,
+ $gam_obj->asta_win, $users[$gam_obj->asta_win]['login'],
+ $gam_obj->friend, $users[$gam_obj->friend]['login'],
+ $gam_obj->pnt, $gam_obj->asta_pnt) )
+ );
}
fprintf($fpexp, "</tr>\n");
}
// LISTA DEI TOTALI
fprintf($fpexp, "<tr>");
- for ($u = 0 ; $u < 5 ; $u++) {
- $usr_obj = pg_fetch_object($usr_pg, $u);
+ for ($u = 0 ; $u < BIN5_PLAYERS_N ; $u++) {
$tot_sql = sprintf("
SELECT SUM(p.pts) AS pts FROM %sbin5_matches AS m, %sbin5_games AS g, %sbin5_points AS p, %susers AS u WHERE m.code = g.mcode AND g.code = p.gcode AND u.code = p.ucode AND m.code = %d AND u.code = %d", $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx,
- $tmt_obj->code, $usr_obj->code);
+ $tmt_obj->code, $users[$u]['code']);
if (($tot_pg = pg_query($bdb->dbconn->db(), $tot_sql)) == FALSE ) {
break;
}
$tot_obj = pg_fetch_object($tot_pg, 0);
fprintf($fpexp, "<th>%d</th>", $tot_obj->pts);
}
- fprintf($fpexp, "</tr>\n");
+ if ($tmt_obj->minus_one_is_old != -1) {
+ fprintf($fpexp, "<th colspan='2'>%s</th></tr>\n", $mlang_stat_day['info_total'][$G_lang]);
+ }
fprintf($fpexp, "</table>\n");
}
if ($m < $tmt_n)
break;
- } // if (($tmt_pg = pg_query($bdb->dbco...
-
- fclose($fpexp);
- return (TRUE);
+ }
+ if ($t < $trn_n)
+ break;
+ $ret = (TRUE);
} while (0);
- pg_query($bdb->dbconn->db(), "ROLLBACK");
- fclose($fpexp);
+ if ($ret == FALSE) {
+ pg_query($bdb->dbconn->db(), "ROLLBACK");
+ }
+ if ($fpexp != FALSE) {
+ fclose($fpexp);
+ }
- return (FALSE);
+ return ($ret);
}
// echo "QUIr\n";
// exit(123);
function main()
{
- GLOBAL $G_dbasetype, $G_alarm_passwd, $pazz, $from, $to;
-
+ GLOBAL $G_lang, $G_dbasetype, $G_alarm_passwd, $pazz, $from, $to;
+
if ($pazz != $G_alarm_passwd) {
echo "Wrong password<br>";
mop_flush();
exit;
}
-
+
$fun_name = "main_${G_dbasetype}";
-
+
if ($ret = $fun_name($from, $to))
echo "Success.<br>\n";
else
echo "Failed.<br>\n";
-
+
echo "Fine.\n";
mop_flush();
}
$G_base = "../";
+define('BIN5_TOURNAMENT_NORMAL', 1);
+
ini_set("max_execution_time", "240");
require_once("../Obj/brisk.phh");
$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 g.mcode = m.code GROUP BY m.code, m.ttok",
- $G_dbpfx, $G_dbpfx, $G_dbpfx);
+ WHERE m.tcode = %d AND m.code = g.mcode GROUP BY m.code, m.ttok",
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL);
if (pg_query($bdb->dbconn->db(), $mtc_sql) == FALSE) {
log_crit("statadm: temporary matches table creation [$mtc_sql] failed");
break;
$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 p.ucode = u.code AND p.gcode = g.code AND g.mcode = m.code AND
- g.tstamp > to_timestamp(%d) AND g.tstamp <= to_timestamp(%d)
+ WHERE m.tcode = %d AND m.code = g.mcode AND
+ g.tstamp > to_timestamp(%d) AND g.tstamp <= to_timestamp(%d) AND
+ p.ucode = u.code AND p.gcode = g.code
GROUP BY u.code, u.login
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, $curtime - $limi[$dtime], $curtime);
+ $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL,
+ $curtime - $limi[$dtime], $curtime);
// log_crit("statadm: INFO: [$pla_sql]");
var EXIT_BAN_TIME = 3600;
var cookiepath = "/brisk/";
-var mlang_commons = { 'imgload_a' : { 'it' : 'Immagine caricate ',
+var mlang_commons = { 'imgload_a' : { 'it' : 'Immagini caricate ',
'en' : 'Loaded images ' },
'imgload_b' : { 'it' : '%.',
'en' : '%.' },
'en' => 'user\'s placings'),
'itm_cla' => array('it' => 'classifiche',
'en' => 'placings'),
+ 'tit_mnu' => array('it' => 'minuta giornaliera',
+ 'en' => 'daily report'),
+ 'itm_mnu' => array('it' => 'minuta',
+ 'en' => 'daily deport'),
'tit_rmap' => array('it' => 'prossime funzionalità implementate',
'en' => 'roadmap of next functionalities'),
'itm_rmap' => array('it' => 'roadmap',
onmouseover="menu_hide(0,1);"
title="'.$mlang_room['tit_cla'][$G_lang].'" onclick="act_placing();">'.$mlang_room['itm_cla'][$G_lang].'</a><br>
+<a target="_blank" href="briskin5/explain.php"
+ onmouseover="menu_hide(0,1);"
+ title="'.$mlang_room['tit_mnu'][$G_lang].'">'.$mlang_room['itm_mnu'][$G_lang].'</a><br>
+
<a href="#"
onmouseover="menu_hide(0,1);"
title="'.$mlang_room['tit_rmap'][$G_lang].'" onclick="act_roadmap();">'.$mlang_room['itm_rmap'][$G_lang].'</a><br>
$bri_user_cur = $bri->user[$i];
$user_cur = $room->user[$table->player[$i]];
- $bri_user_cur->stat_set('table');
- $bri_user_cur->subst = 'asta';
$bri_user_cur->laccwr = $curtime;
-
$bri_user_cur->trans_step = $user_cur->step + 1;
$bri_user_cur->comm[$bri_user_cur->step % COMM_N] = "";
$bri_user_cur->step_inc();
// // CHECK
while (array_pop($user_cur->comm) != NULL);
- $ret = "";
- $ret .= sprintf('gst.st_loc++; gst.st=%d; createCookie("table_idx", %d, 24*365, cookiepath); createCookie("table_token", "%s", 24*365, cookiepath); createCookie("lang", "%s", 24*365, cookiepath); xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("briskin5/index.php");|', $user_cur->step+1, $table_idx, $table_token, $G_lang);
-
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
$user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; createCookie("table_idx", %d, 24*365, cookiepath); createCookie("table_token", "%s", 24*365, cookiepath); createCookie("lang", "%s", 24*365, cookiepath); xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("briskin5/index.php");|', $user_cur->step+1, $table_idx, $table_token, $G_lang);
log_wr("TRANS ATTIVATO");
$user_cur->stat_set('table');
//xx this.hbit("+");
// alert("SINGLE: ["+singlecomm+"]");
+ // window.console.log("["+singlecomm+"]");
this.cmdproc(singlecomm);
again = 1;
}
"Restart: da 1 a 8 ogni secondo, pausa 16 secondi (status passa ad arancione e poi a rosso), poi ricomincia (e status torna a verde).",
"Pausa: da 1 a 5 ogni secondo, pausa 3 secondi, e poi 8 e 9 ogni secondo, e poi ricomincia (status sempre verde).",
"Keyword: da 1 a 5 ogni secondo, @BEGIN@, @END@, @BEGIN@ xxx yyy @END@, 9, (status sempre verde).",
- "Reload limiter: da 1 a 8 ogni secondo e chiude, 9 setta e chiude subito,<br>il client aspetta 3 secondi, e poi da 10 a N ogni secondo, (status sempre verde).");
+ "Reload limiter: da 1 a 8 ogni secondo e chiude, 9 setta e chiude subito,<br>il client aspetta 3 secondi, e poi da 10 a N ogni secondo, (status sempre verde).",
+ "Esegue un comando, manda loc_new a un valore irraggiungibile, stoppa il processore di comandi e poi dà un comando teoricamente irraggiungibile.");
// trim(mb_convert_case($split[0], MB_CASE_TITLE, 'UTF-8'))
sleep(1);
}
}
+ break;
+ case 7:
+ $chunk = $trobj->chunk(1, sprintf("gst.st++; \$('container').innerHTML = 'prima';"));
+ print($chunk);
+
+ $chunk = $trobj->chunk(2, sprintf("gst.st++; gst.st_loc_new++; xstm.stop();"));
+ print($chunk);
+
+ $chunk = $trobj->chunk(3, sprintf("gst.st++; \$('container').innerHTML = 'dopo';"));
+ print($chunk);
+
break;
}