From: Matteo Nastasi Date: Sun, 9 Jul 2017 17:02:31 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/together-for-fun' into nginx X-Git-Tag: v5.6.0~33 X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=commitdiff_plain;h=c0cc54c9494acf8f43b92a0517d32d38b5006aa0;hp=302c97f7ac81dfcc6fc8d8d44359f4f432e4618a;p=brisk.git Merge remote-tracking branch 'origin/together-for-fun' into nginx Conflicts: web/briskin5/Obj/briskin5.phh web/briskin5/index_wr.php web/briskin5/stat-day.php web/briskin5/statadm.php --- diff --git a/INSTALL.sh b/INSTALL.sh index 219c73e..1966c41 100755 --- a/INSTALL.sh +++ b/INSTALL.sh @@ -85,7 +85,7 @@ function searchetc() { fi pp="$(dirname "$pp")" done - + return 1 } @@ -227,7 +227,7 @@ echo " web_only: \"$web_only\"" echo " test_add: \"$test_add\"" if [ ! -z "$outconf" ]; then - ( + ( echo "#" echo "# Produced automatically by brisk::INSTALL.sh" echo "#" @@ -324,7 +324,7 @@ if [ "$web_only" = "FALSE" ]; then exit 3 fi rm $ftokk_path/spy.txt - + # create the fs subtree to enable ftok-ing touch ${ftokk_path}/main chmod 666 ${ftokk_path}/main @@ -369,7 +369,7 @@ if [ "$web_only" = "FALSE" ]; then fi install -d ${web_path}__ for i in $(find web -type d | grep '/' | sed 's/^....//g'); do - install -d ${web_path}__/$i + install -d ${web_path}__/$i done for i in $(find web -name '.htaccess' -o -name '*.php' -o -name '*.phh' -o -name '*.pho' -o -name '*.css' -o -name '*.js' -o -name '*.mp3' -o -name '*.swf' -o -name 'terms-of-service*' | sed 's/^....//g'); do diff --git a/TODO.txt b/TODO.txt index ce58d46..266c4ff 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,6 +3,7 @@ BUGS | ------+ + - /cont and /rules just during 'bidding' phase DONE - Not sequence of 3 same chars DONE . check server side with test DONE - Global vars checker @@ -16,6 +17,22 @@ FEATURES | ----------+ + * multiple rules + DONE - show current rules + DONE - select tournment dropdown menu (send a 'cont' like message for each change) + WIP - new rules for 'together for fun' turnment + DONE . strange 4 abandoned rule for auction + DONE . check of max points + DONE . check of suit at the end of bet + + DONE - increase constraint for rules change + DONE - select rules dropdown 'selected' to the current rule or the current + + POSTPONED - no points multiplication for abandon + POSTPONED - cache data structure for tournments + POSTPONED . reload on SIGHUP + + WIP * inherited info * Users Network construction DONE - sql diff --git a/bin/5fire.sh b/bin/5fire.sh new file mode 100755 index 0000000..472073d --- /dev/null +++ b/bin/5fire.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# set -x +declare -a coor pids +#coor[0]="0,0,0,560,650" +#coor[1]="0,443,108,560,650" +#coor[2]="0,878,197,560,650" +coor[0]="0,0,0,840,975" +coor[1]="0,863,0,840,975" +coor[2]="0,1712,0,840,975" +coor[3]="0,863,300,840,975" +coor[4]="0,1712,300,840,975" + + +# TODO: pids2wids function IN: pids OUT: associated windows ids + +ffox () { + if [ "$1" = "-v" ]; then + ps ax | egrep '[0-9] /usr/lib/firefox/firefox -no-remote -P (one|two|three|four|five) ' | grep -v grep | sed 's/^ *//g;s/ .*-P//g;s/ http.*//g' + else + ps ax | egrep '[0-9] /usr/lib/firefox/firefox -no-remote -P (one|two|three|four|five) ' | grep -v grep | sed 's/^ *//g;s/ .*//g' + fi +} + +rearrange_windows () { + ct=0 + while true; do + sleep 1 + wids="$(wmctrl -l -p | sed 's/ \+/|/g' | cut -d '|' -f 1,3 | egrep "\|(${pids[0]}|${pids[1]}|${pids[2]}|${pids[3]}|${pids[4]})$")" + l="$(echo "$wids" | wc -l)" + if [ $l -eq 5 ]; then + for i in $(seq 0 4); do + wid="$(echo "$wids" | grep "|${pids[$i]}\$" | cut -d '|' -f 1)" + wmctrl -i -r $wid -e ${coor[$i]} + echo wmctrl out: $? + done + break + fi + ct=$((ct + 1)) + if [ $ct -gt 10 ]; then + break + fi + done +} + +# +# MAIN +# +HOMEPAGE="http://dodo.birds.van/brisk/index.php" +if [ "$1" = "help" -o "$1" = "-h" -o "$1" = "--help" ]; then + echo "$0 - run firefoxes" + echo "$0 list [-v] - list firefoxes" + echo "$0 - send signal to firefoxes" + echo "$0 help - this help" +elif [ "$1" = "list" ]; then + ffox $2 +elif [ "$1" = "stop" -o "$1" = "cont" -o "$1" = "term" -o "$1" = "kill" ]; then + case "$1" in + stop) sig=-STOP ;; + cont) sig=-CONT ;; + term) sig=-TERM ;; + kill) sig=-KILL ;; + esac + + kill $sig $(ffox) +elif [ "$1" = "rearrange" ]; then + list="$($0 list -v)" + declare -a pids + ct=0 + for i in one two three four five; do + pids[$ct]="$(echo "$list" | grep -- " $i$" | sed 's/ .*//g')" + ct=$((ct + 1)) + done + rearrange_windows +elif [ $# -eq 0 ]; then + ct=0 + for i in one two three four five; do + firefox -no-remote -P $i "$HOMEPAGE?whoami=$i" & + pd="$!" + echo "$i: $pd" + pids[$ct]="$pd" + ct=$((ct + 1)) + done + + rearrange_windows +fi diff --git a/bin/brisk_explain_update.sh b/bin/brisk_explain_update.sh new file mode 100755 index 0000000..51faf5b --- /dev/null +++ b/bin/brisk_explain_update.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# set -x +export PATH=/home/nastasi/bin:/usr/local/bin:/usr/bin:/bin:/usr/games + +CONFIG_FILE="$HOME/.brisk_install" + +# default values +web_url="http://localhost/brisk" +admin_password="" +if [ -f "$CONFIG_FILE" ]; then + source "$CONFIG_FILE" + conffile_in="$CONFIG_FILE" +fi + +tty -s +is_a_tty=$? +if [ -z "$admin_password" ]; then + if [ "$is_a_tty" -eq 0 ]; then + read -s -p "Please insert admin password (no echo): " admin_password + else + echo "Incomplete configuration" + exit 1 + fi +fi + +# now="$(date -d '2014-01-21 23:56:00' +%s)" +now="$(date +%s)" +delta="86400" + +to="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "($now / 86400) * 86400 + 7200 + $delta" | bc))" +from="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "($now / 86400) * 86400 + 7200 - (86400) + $delta" | bc))" +# to="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$now + 7200 + $delta" | bc))" +# from="$(date +"%Y-%m-%d+%H:%M:%S" -d @$(echo "$now - 9200 + $delta" | bc))" + +curl -d "pazz=$admin_password" "$web_url/briskin5/stat-day.php?from=$from&to=$to" diff --git a/bin/brisk_pts_update.sh b/bin/brisk_pts_update.sh new file mode 100755 index 0000000..791521e --- /dev/null +++ b/bin/brisk_pts_update.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -x +B_HOSTNAME="http://localhost/brisk" +export PATH=/home/nastasi/bin:/usr/local/bin:/usr/bin:/bin:/usr/games +curl -d 'pazz=yourpasswd' "$B_HOSTNAME/briskin5/statadm.php" diff --git a/sql/sql.d/080-games-tourn-pts.sql b/sql/sql.d/080-games-tourn-pts.sql new file mode 100644 index 0000000..0efa468 --- /dev/null +++ b/sql/sql.d/080-games-tourn-pts.sql @@ -0,0 +1,4 @@ +-- add tourn_pts to bin5_games table +ALTER TABLE #PFX#bin5_games DROP COLUMN tourn_pts; +ALTER TABLE #PFX#bin5_games ADD COLUMN tourn_pts integer DEFAULT -1; -- points at the beginning of the hand + diff --git a/sql/sql.d/085-tourn-update.sql b/sql/sql.d/085-tourn-update.sql new file mode 100644 index 0000000..56dd0c4 --- /dev/null +++ b/sql/sql.d/085-tourn-update.sql @@ -0,0 +1,7 @@ +-- from: +-- INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (1, 1, 'normal match'); +-- INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (2, 1, 'special match'); + +UPDATE #PFX#bin5_tournaments SET (name) = ('old rules: with draw') WHERE code = 1; +UPDATE #PFX#bin5_tournaments SET (name) = ('new rules: without draw') WHERE code = 2; +INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (3, 1, 'special match'); diff --git a/sql/sql.d/090-together-add.sql b/sql/sql.d/090-together-add.sql new file mode 100644 index 0000000..364c911 --- /dev/null +++ b/sql/sql.d/090-together-add.sql @@ -0,0 +1,2 @@ +-- new tournment id of 'insieme per gioco' tournment +INSERT INTO #PFX#bin5_tournaments (code, active, name) VALUES (4, 1, 'together for fun'); diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 0c33591..c89d6ac 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -153,10 +153,10 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', $G_lng = langtolng($G_lang); $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "5.2.1"; +$G_brisk_version = "5.4.1"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ -$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': puoi creare la tua rete di amicizie con /info, vedere cosa pensano i tuoi amici degli altri utenti e ci sono i nuovi tavoli riservati per registrati e apprendisti, corretti alcuni errori.', +$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': potete scegliere che regole usare per giocare dal menu "Prefs" al tavolo, descrizioni più consistenti.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ), 'en' => array ( 'EN Brisk (Ver. '.$G_brisk_version.'), NOVITA\': puoi creare la tua rete di amicizie con /info,', 'vedere cosa pensano i tuoi amici degli altri utenti e tavoli riservati per registrati e apprendisti.', diff --git a/web/Obj/dbase_pgsql.phh b/web/Obj/dbase_pgsql.phh index cdcec51..74a5dbd 100644 --- a/web/Obj/dbase_pgsql.phh +++ b/web/Obj/dbase_pgsql.phh @@ -628,13 +628,6 @@ class BriskDB } $gam_obj = pg_fetch_object($gam_pg, 0); - $table->old_reason = game_description($gam_obj->act, 'html', $gam_obj->mult, - $gam_obj->asta_win, ($gam_obj->asta_win != -1 ? - $users[$gam_obj->asta_win]['login'] : ""), - $gam_obj->friend, ($gam_obj->friend != -1 ? - $users[$gam_obj->friend]['login'] : ""), - $gam_obj->pnt, $gam_obj->asta_pnt); - // update matches with new ttok and table idx $mtc_sql = sprintf("UPDATE %sbin5_matches SET (ttok, tidx) = ('%s', %d) WHERE code = %d RETURNING *;", $G_dbpfx, $sql_ttok, $tidx, $match_code); @@ -642,6 +635,20 @@ class BriskDB log_crit(sprintf("%s::%s: update matches table failed", __CLASS__, __FUNCTION__)); return (FALSE); } + $mtc_obj = pg_fetch_object($mtc_pg, 0); + + $old_rules = $table->rules; + $rules_name = rules_id2name($mtc_obj->tcode); + $table->rules = new $rules_name($table); + unset($old_rules); + + $table->old_reason = ${rules_name}::game_description($gam_obj->act, 'html', $gam_obj->mult, + $gam_obj->asta_win, ($gam_obj->asta_win != -1 ? + $users[$gam_obj->asta_win]['login'] : ""), + $gam_obj->friend, ($gam_obj->friend != -1 ? + $users[$gam_obj->friend]['login'] : ""), + $gam_obj->pnt, $gam_obj->asta_pnt, $gam_obj->tourn_pts); + return (TRUE); } @@ -712,8 +719,9 @@ class BriskDB if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) { // match not exists, insert it - $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next) VALUES ('%s', %d, %d, %d) RETURNING *;", - $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult); + // , BIN5_TOURNAMENT_NO_DRAW + $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next, tcode) VALUES ('%s', %d, %d, %d, %d) RETURNING *;", + $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult, $table->rules->id_get()); if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_affected_rows($mtc_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert match [%s]", $mtc_sql)); break; @@ -760,13 +768,14 @@ class BriskDB /* * games management */ - $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult) - VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d) RETURNING *;", + $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult, tourn_pts) + VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d, %d) RETURNING *;", $G_dbpfx, $mtc_obj->code, $date, $action, $table->old_asta_pnt, $table->old_pnt, $table->old_asta_win, $table->old_friend, - $table->old_mazzo, $table->old_mult); + $table->old_mazzo, $table->old_mult, + $table->old_tourn_pts); if (($gam_pg = $this->query($gam_sql)) == FALSE || pg_affected_rows($gam_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert game [%s]", $gam_sql)); break; diff --git a/web/Obj/user.phh b/web/Obj/user.phh index c972404..305dd34 100644 --- a/web/Obj/user.phh +++ b/web/Obj/user.phh @@ -707,7 +707,8 @@ class User { } } } - if ($G_with_splash && + // if ($G_with_splash && + if ($this->is_auth() && (! $this->is_appr()) && $G_with_splash && ($splashdate < $curtime - $G_splash_interval || $splashdate > $curtime)) { $is_super = $this->flags & USER_FLAG_TY_SUPER; diff --git a/web/brisk.css b/web/brisk.css index 75b4975..c0a99b0 100644 --- a/web/brisk.css +++ b/web/brisk.css @@ -28,7 +28,7 @@ } body { - background-image: url('img/najole_wh.png'); + background-image: url('img/lines.png'); background-color: #fafafa; background-attachment: fixed; margin: 0px; @@ -110,7 +110,7 @@ img.ib_nobo { -moz-border-radius: 8px; border-radius: 8px; - background-image: url('img/najole_wh_light.png'); + background-image: url('img/lines_light.png'); background-attachment: fixed; top: 0; diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 67b584c..c9002b9 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -30,10 +30,9 @@ define('BIN5_SHM_MAX', (BIN5_SHM_MIN + 1048576)); define('BIN5_SHM_DLT', 32768); define('BIN5_PROXY_PATH', PROXY_PATH."/bin5"); -define('BIN5_RULES_OLDSCHEMA', -1); -define('BIN5_RULES_FINISH', 0); -define('BIN5_RULES_ABANDON', 1); -define('BIN5_RULES_ALLPASS', 2); +require_once('rules.phh'); + +define('BIN5_TOURNAMENT_CURRENT', BIN5_TOURNAMENT_NO_DRAW); $mlang_bin5_bin5 = array( // br, hr, b, /b, win, fri @@ -41,51 +40,8 @@ $mlang_bin5_bin5 = array( 'en' => '%3$slast hand%4$s'), 'info_curr' => array( 'it' => '%3$smano corrente%4$s', 'en' => '%3$scurrent hand%4$s'), - // br, hr, b, /b, win, fri - 'info_part' => array( 'it' => 'Ha chiamato %3$s%5$s%4$s, il socio era %3$s%6$s%4$s,%1$s', - 'en' => 'The declarer was %3$s%5$s%4$s, the partner was %3$s%6$s%4$s,%1$s'), - // br, hr, b, /b - 'info_capp' => array( 'it' => 'hanno fatto %3$scappotto%4$s EBBRAVI!.%1$s', - 'en' => 'and they made %3Dscapot%4$s WELL DONE!.%1$s'), - - // br, hr, b, /b, old_asta_pnt, old_pnt, winornot - 'info_alea' => array( 'it' => 'dovevano fare %3$salmeno %5$d%4$s punti e ne hanno fatti %3$s%6$d%4$s: hanno %7$s.%1$s', - 'en' => 'they had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: they have %7$s.%1$s'), - // br, hr, b, /b, old_pnt, winornot - 'info_more' => array( 'it' => 'dovevano fare %3$spiù di 60%4$s punti e ne hanno fatti %3$s%5$d%4$s: hanno %6$s.%1$s', - 'en' => 'they had to do %3$sover 60%4$s points and they had made %3$s%5$d%4$s: they have %3$s%6$s%4$s.%1$s'), - 'info_win' => array( 'it' => 'vinto', - 'en' => 'win'), - 'info_peer' => array( 'it' => 'pareggiato', - 'en' => 'drew'), - 'info_lost' => array( 'it' => 'perso', - 'en' => 'lost'), - - // br, hr, b, /b, win_name - 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano,%1$s', - 'en' => '%3$s%5$s%4$s play alone against each other,%1$s'), - // br, hr, b, /b, old_asta_pnt, old_pnt, winornot - 'info_aleaa' => array( 'it' => 'doveva fare %3$salmeno %5$d%4$s punti e ne ha fatti %3$s%6$d%4$s: ha %3$s%7$s%4$s.%1$s', - 'en' => 'he/she had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: he/she had %3$s%7$s%4$s.%1$s'), - // br, hr, b, /b, old_pnt, winornot - 'info_morea' => array( 'it' => 'doveva fare %3$spiù di 60%4$s punti e ne ha fatti %3$s%5$d%4$s: ha %3$s%6$s%4$s.%1$s', - 'en' => 'he/she had to do %3$smore than 60%4$s points and they had made %3$s%5$d%4$s: he/she had %3$s%6$s%4$s.%1$s'), - // br, hr, b, /b - 'info_acap' => array( 'it' => 'ha fatto %3$scappotto%4$s EBBRAVO!.%1$s', - 'en' => 'and he/she made %3$scapot%4$s WELL DONE!.%1$s'), - - // br, hr, b, /b - 'info_omul' => array( 'it' => '%1$sLa partita valeva %3$s%5$s%4$s.%1$s', - 'en' => '%1$sEN: The game was worth %3$s%5$s%4$s.%1$s' ), - - // br, hr, b, /b - 'info_alpa' => array( 'it' => '%1$sHanno passato %3$stutti%4$s.%1$s', - 'en' => '%1$sEN: Hanno passato %3$stutti%4$s.%1$s' ), - - // br, hr, b, /b, aband-name - 'info_aban' => array( 'it' => ' Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.', - 'en' => ' EN: Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.'), - + 'info_yshuf'=> array( 'it' => 'Fai tu il mazzo, ', + 'en' => 'It\'s your shuffled the cards, '), 'info_shuf' => array( 'it' => 'Il mazzo a %s, ', 'en' => '%s shuffled the cards, '), 'info_yturn'=> array( 'it' => ' tocca a te giocare.', @@ -94,10 +50,9 @@ $mlang_bin5_bin5 = array( 'en' => 'it\'s the %s\'s turn.'), 'info_mult' => array( 'it' => ' La partita vale %s.', 'en' => ' The game worth %s.' ), - 'info_yshuf'=> array( 'it' => 'Fai tu il mazzo, ', - 'en' => 'It\'s your shuffled the cards, '), 'info_match'=> array( 'it' => 'Il codice della partita è %d.', 'en' => 'Match code is %d.'), + 'btn_bkgame'=> array( 'it' => 'torna alla partita', 'en' => 'back to the game'), 'call_wptn' => array( 'it' => '
con %d punti', @@ -126,6 +81,19 @@ function multoval($mult) return (sprintf(($G_lang == 'en' ? "%d-ple" : "%d-plo"), $mult)); } +function dom_select_rules() +{ + GLOBAL $G_lang; + + $ret = "\n"; + + echo "$ret"; +} class Card { var $value; /* 0 - 39 card value */ @@ -168,23 +136,24 @@ class Card { } // end class Card class Bin5_table extends Table { - var $card; // il mazzo di carte - var $mazzo; // chi e' di mazzo - var $gstart; - var $turn; + var $card; // il mazzo di carte + var $mazzo; // chi e' di mazzo + var $gstart; // first player of the current game + var $turn; // turn in the game (absolute, not modularized) - var $asta_pla; - var $asta_pla_n; - var $asta_card; - var $asta_pnt; + var $asta_pla; // array(); TRUE: in auction, FALSE: out of the auction + var $asta_pla_n; // number of players in auction + var $asta_card; // current card for auction + var $asta_pnt; // current point for auction var $mult; - var $points; // points array - var $points_n; // number of row of points + var $points; // points array + var $points_n; // number of row of points var $total; var $asta_win; // the caller idx position at table var $briscola; + var $tourn_pts; // points in the caller hand var $friend; // the callee idx position at table var $match_id; // the id of the match on the database (-1 == just not saved) @@ -198,6 +167,9 @@ class Bin5_table extends Table { var $old_asta_win; // the old caller idx position at table var $old_friend; // the old callee idx position at table + var $old_tourn_pts; // the old tournment computed points in the hand of caller + var $rules; + function Bin5_table() { } @@ -223,6 +195,7 @@ class Bin5_table extends Table { $thiz->total = array( 0, 0, 0, 0, 0); $thiz->asta_win = -1; $thiz->briscola = -1; + $thiz->tourn_pts = -1; $thiz->friend = -1; $thiz->turn = 0; @@ -266,6 +239,7 @@ class Bin5_table extends Table { $thiz->asta_win = $from->asta_win; $thiz->briscola = $from->briscola; + $thiz->tourn_pts = $from->tourn_pts; $thiz->friend = $from->friend; $thiz->match_id = $from->match_id; @@ -290,6 +264,7 @@ class Bin5_table extends Table { function spawn(&$from) { + GLOBAL $G_lang; if (($thiz =& new Bin5_table()) == FALSE) return (FALSE); @@ -299,7 +274,7 @@ class Bin5_table extends Table { $thiz->card = array(); $thiz->bunch_create(); - $thiz->mazzo = rand(0,PLAYERS_N-1); + $thiz->mazzo = rand(0,PLAYERS_N-1); $thiz->points = array(); $thiz->total = array(); $thiz->points_n = 0; @@ -310,6 +285,8 @@ class Bin5_table extends Table { $thiz->old_asta_win = -1; $thiz->old_reason = ""; + $rules_name = rules_id2name(BIN5_TOURNAMENT_CURRENT); + $thiz->rules = new $rules_name($thiz); // players are rearranged in an dedicated array $thiz->player = array(); for ($i = 0 ; $i < $from->player_n ; $i++) @@ -320,41 +297,6 @@ class Bin5_table extends Table { return ($thiz); } - static function asta2mult($asta_pnt) - { - if ($asta_pnt > 110) - return (6); - else if ($asta_pnt > 100) - return (5); - else if ($asta_pnt > 90) - return (4); - else if ($asta_pnt > 80) - return (3); - else if ($asta_pnt > 70) - return (2); - else - return (1); - } - - function multer($is_new) - { - if ($is_new) { - return (static::s_multer($this->mult, $this->asta_pnt)); - } - else { - return (static::s_multer($this->old_mult, $this->old_asta_pnt)); - } - } - - static function s_multer($mult, $pnt) - { - return (pow(2, $mult) * static::asta2mult($pnt)); - } - - static function s_point_calc($pnt_done, $mult, $pnt_req, $is_allpoints) - { - return ($pnt_done * static::s_multer($mult, $pnt_req) * ($is_allpoints ? 2 : 1)); - } // function bunch_create_old() function AND // { @@ -436,6 +378,7 @@ class Bin5_table extends Table { $this->asta_pnt = 60; $this->asta_win = -1; $this->briscola = -1; + $this->tourn_pts = -1; $this->friend = -1; $this->turn = 0; @@ -446,6 +389,7 @@ class Bin5_table extends Table { $user_cur->asta_card = -2; $user_cur->asta_pnt = -1; $user_cur->handpt = $this->hand_points($i); + $this->rules->tourn_points($user_cur, $i); } log_rd2("GEND 4"); } @@ -508,170 +452,20 @@ class Bin5_table extends Table { return ($ct); } - function rules_engine(&$bri, $curtime, $action, $user) - { - GLOBAL $G_all_points, $G_dbasetype; - - $pnts_sav = array(); - - if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct - $this->old_act = $action; - $this->old_asta_win = -1; - $this->old_pnt = 0; - $this->mult_inc(1); - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $pnts_sav[$i] = 0; - } - - $game_delta = 1; - // $this->game_next(1); - $this->game_init($bri->user); - } - else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct - if (!($user->handpt <= 2)) { - return (FALSE); - } - $this->old_act = $action; - log_wr(sprintf("GIOCO FINITO !!!")); - $this->old_asta_win = $user->table_pos; - $this->old_pnt = 0; - $this->mult_inc(1); - - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $pnts_sav[$i] = 0; - } - - // Non si cambia mazzo se si abbandona la partita - $game_delta = 0; - // $this->game_next(0); - $this->game_init($bri->user); - } - else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct - $this->old_act = $action; - do { - $pro = 0; - - if ($this->asta_pnt == 60) - $this->asta_pnt = 61; - - $this->old_reason = ""; - - // count points for the temporary 2 teams - for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { - $ctt = $this->card[$i]->value % 10; - $own = $this->card[$i]->owner; - if ($own == $this->asta_win || $own == $this->friend) - $pro += $G_all_points[$ctt]; - } - - log_wr(sprintf("PRO: [%d]", $pro)); - - // PATTA case ! - if (game_result($this->asta_pnt, $pro) == 0) { - $this->points[$this->points_n % MAX_POINTS] = array(); - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $this->points[$this->points_n % MAX_POINTS][$i] = 0; - $pnts_sav[$i] = 0; - } - $this->points_n++; - $this->old_pnt = $pro; - $this->old_asta_win = $this->asta_win; - $this->mult_inc(1); - - break; - } - - if ($pro >= $this->asta_pnt) - $sig = 1; - else - $sig = -1; - - // TAG: POINTS_MANAGEMENT - $this->points[$this->points_n % MAX_POINTS] = array(); - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - if ($i == $this->asta_win) - $pnt = ($i == $this->friend ? 4 : 2); - else if ($i == $this->friend) - $pnt = 1; - else - $pnt = -1; - - log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pnt)); - - $pnt_sav = static::s_point_calc($pnt * $sig, 0, $this->asta_pnt, ($pro == 120)); - $pnt_tab = static::s_point_calc($pnt * $sig, $this->mult, $this->asta_pnt, ($pro == 120)); - - $this->points[$this->points_n % MAX_POINTS][$i] = $pnt_tab; - $this->total[$i] += $pnt_tab; - $pnts_sav[$i] = $pnt_sav; - } - $this->points_n++; - $this->old_pnt = $pro; - $this->old_asta_win = $this->asta_win; - $this->mult_set(0); - } while (0); - $game_delta = 1; - } - else { - return (FALSE); - } - $this->game_next($game_delta); - - $plist = "$this->table_token|$user->table_orig|$this->player_n"; - $ucodes = array(); - $codes = ""; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bri->user[$this->player[$i]]; - - /* pro db */ - $ucodes[$i] = $user_cur->code_get(); - - /* pro log */ - $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i]; - $codes .= '|'.xcapelt($user_cur->code_get()); - } - $plist .= $codes; - log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); - - $this->old_asta_pnt = $this->asta_pnt; - // $this->old_mazzo is managed by ->game_next(); - // $this->old_mult, $this->old_pnt, $this->old_reason and $this->old_asta_win are specific - - $this->old_friend = $this->friend; - $this->old_reason = game_description($action, 'html', $this->old_mult, - $this->old_asta_win, - ($this->old_asta_win != -1 ? - $bri->user[$this->player[$this->old_asta_win]]->name : ""), - $this->old_friend, - ($this->old_friend != -1 ? - $bri->user[$this->player[$this->old_friend]]->name : ""), - $this->old_pnt, $this->old_asta_pnt); - - - if ($user->table_orig < TABLES_AUTH_N) { - require_once("../Obj/dbase_".$G_dbasetype.".phh"); - - if (($bdb = BriskDB::create()) != FALSE) { - $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pnts_sav); - unset($bdb); - } - else { - log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); - } - log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); - } - - $this->game_init($bri->user); - - return (TRUE); - } - function match_continue(&$bri, $user, $match_id_s) { + // + // Rules: update version following loaded tcode + // $ret = FALSE; $curtime = time(); do { + if ($this->match_id != -1) { + $msg = sprintf("Stai già giocando la partita con codice %d.", $this->match_id); + break; + } + /* - verify if match_id and user are both valid to accept the match_continue request - */ $match_id = (int)$match_id_s; @@ -680,11 +474,6 @@ class Bin5_table extends Table { 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; @@ -710,18 +499,34 @@ class Bin5_table extends Table { /* - the user is in the list, add the match_id to his profile and check if he is the N'th to require continue - */ - // set the match_id for the current user - $user->continue_set($match_id); - + $continue_tot = 0; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$this->player[$i]]; - if ($user_cur->continue_get() != $match_id) { - break; + + if ($user == $user_cur) { + $continue_tot += 1; + continue; } + + if ($user_cur->continue_get() == BIN5_USER_CONTINUE_INIT) + continue; + + if ($user_cur->continue_get() != $match_id) + break; + $continue_tot += 1; } + if ($i < BIN5_PLAYERS_N) { + $msg = sprintf("L'utente %s voleva già continuare la partita n° %d.", + xcape($user_cur->name), $user_cur->continue_get()); + break; + } + + // set the match_id for the current user + $user->continue_set($match_id); + $ret = TRUE; // not all players set the continue match than we exit - if ($i < BIN5_PLAYERS_N) { + if ($continue_tot < BIN5_PLAYERS_N) { $msg = sprintf("L'utente %s vorrebbe continuare la partita n° %d.", xcape($user->name), $match_id); break; @@ -759,6 +564,10 @@ class Bin5_table extends Table { unset($bdb); } + /* update rules engine */ + $rules_name = rules_id2name($match_data['tcode']); + $this->rules = new $rules_name($this); + /* bunch and multiplier status set */ $this->mazzo = $match_data['mazzo_next']; $this->mult = $match_data['mult_next']; @@ -768,7 +577,6 @@ class Bin5_table extends Table { /* 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); @@ -796,6 +604,127 @@ class Bin5_table extends Table { } } + function rules_change(&$bri, $user, $rules_id_s) + { + GLOBAL $G_lang; + + // + // Rules: update version following loaded tcode + // + $ret = FALSE; + $curtime = time(); + + do { + if ($this->match_id != -1) { + // FIXME_LANG + $msg = sprintf("Stai già giocando la partita con codice %d.", $this->match_id); + break; + } + + if ($this->asta_card != -1 || $this->asta_pla_n < BIN5_PLAYERS_N) { + // FIXME_LANG + $msg = sprintf("La partita è già stata avviata."); + break; + } + + $rules_id = (int)$rules_id_s; + if (! in_array($rules_id, rules_keys())) { + // FIXME_LANG + $msg = "queste regole non esistono o non sono attive"; + break; + } + + if ($user->rules_get() == $rules_id) { + // FIXME_LANG + $msg = "hai già richiesto di usare queste regole"; + break; + } + + /* - the user is in the list, add the match_id to his profile + and check if he is the N'th to require continue - */ + + $rules_tot = 0; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + + if ($user == $user_cur) { + $rules_tot += 1; + continue; + } + + if ($user_cur->rules_get() == BIN5_USER_CONTINUE_INIT) + continue; + + if ($user_cur->rules_get() != $rules_id) + break; + $rules_tot += 1; + } + if ($i < BIN5_PLAYERS_N) { + // FIXME_LANG + $msg = sprintf("L'utente %s voleva già usare le %s.", + xcape($user_cur->name), xcape(rules_id2descr($user_cur->rules_get(), $G_lang))); + break; + } + + // set the match_id for the current user + $user->rules_set($rules_id); + + $ret = TRUE; + // not all players set the continue match than we exit + if ($rules_tot < BIN5_PLAYERS_N) { + // FIXME_LANG + $msg = sprintf("L'utente %s vorrebbe usare le %s.", + xcape($user->name), xcape(rules_id2descr($rules_id, $G_lang))); + break; + } + + /* - all users decide to continue the same match, update all infos and rearrange users + to the right positions on the table - */ + + /* update rules engine */ + $rules_name = rules_id2name($rules_id); + $this->rules = new $rules_name($this); + + // $this->game_init(&$bri->user); + + /* reload of the page with the new layout */ + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + $this->rules->tourn_points($user_cur, $i); + + $user_cur->rules_set(BIN5_USER_CONTINUE_INIT); + $user_cur->trans_step = $user_cur->step + 1; + $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("index.php");|', $user_cur->step+1); + $user_cur->step_inc(); + + // a void command force xynt-streamer to flush all data to client + $user_cur->trans_step = $user_cur->step + 1; + $user_cur->comm[$user_cur->step % COMM_N] = ""; + $user_cur->step_inc(); + + $user_cur->comm[$user_cur->step % COMM_N] = show_table(&$bri, &$user_cur, $user_cur->step+1, TRUE, FALSE); + $user_cur->step_inc(); + } + return (TRUE); + } while (FALSE); + + $dt = date("H:i ", $curtime); + if ($ret == TRUE) { + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; + $user_cur->comm[$user_cur->step % COMM_N] .= nickserv_msg($dt, $msg); + $user_cur->step_inc(); + } + } + else { + $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; + $user->comm[$user->step % COMM_N] = xcape(sprintf("rules_set(%d);", + $this->rules->id)); + $user->comm[$user->step % COMM_N] .= nickserv_msg($dt, $msg); + $user->step_inc(); + } + } // end function rules_change } // end class Bin5_table @@ -803,7 +732,8 @@ class Bin5_table extends Table { define('BIN5_USER_FLAG_RING_ENDAUCT', 0x01); define('BIN5_USER_CONTINUE_INIT', -1); -define('BIN5_USER_CONTINUE_ALREADY', -2); + +define('BIN5_USER_RULES_INIT', -1); class Bin5_user extends User { var $asta_card; // var $asta_pnt; // @@ -812,6 +742,9 @@ class Bin5_user extends User { var $privflags; // Flags for briskin5 only var $continue; // Id of the match that the user would continue + var $rules; // Id of rules required by user + + var $asta_tourn_pts; // array with tournment points for each suit const BASE = "../"; @@ -829,6 +762,7 @@ class Bin5_user extends User { $thiz->exitislock = TRUE; $thiz->privflags = 0; $thiz->continue = BIN5_USER_CONTINUE_INIT; + $thiz->rules = BIN5_USER_RULES_INIT; return ($thiz); } @@ -849,6 +783,7 @@ class Bin5_user extends User { $this->exitislock = $from->exitislock; $this->privflags = $from->privflags; $this->continue = $from->continue; + $this->rules = $from->rules; } /* CLONE NOT USED @@ -884,6 +819,7 @@ class Bin5_user extends User { $thiz->handpt = -1; $thiz->exitislock = TRUE; $thiz->continue = BIN5_USER_CONTINUE_INIT; + $thiz->rules = BIN5_USER_RULES_INIT; log_wr("Bin5 constructor"); @@ -1130,6 +1066,15 @@ class Bin5_user extends User { return ($this->continue); } + function rules_set($rules_id) + { + $this->rules = $rules_id; + } + + function rules_get() { + return ($this->rules); + } + } // end class Bin5_user @@ -1375,6 +1320,12 @@ class Bin5 { $match_id = substr($user_mesg, 6); $table->match_continue($this, $user, $match_id); } + else if (strncmp($user_mesg, "/rules ", 7) == 0) { + log_main($user->sess." chatt_send BEGIN"); + + $rules_id = substr($user_mesg, 7); + $table->rules_change($this, $user, $rules_id); + } else { for ($i = 0 ; $i < ($user->stat == 'room' ? BIN5_MAX_PLAYERS : BIN5_PLAYERS_N) ; $i++) { if ($user->stat == 'room') { @@ -1613,8 +1564,10 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) $ret .= $table->exitlock_show($bri->user, $table_pos); if (!$is_again) { /* GENERAL STATUS */ - $ret .= sprintf( 'gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d;', - $sendstep, $user->stat, $user->subst, $table_pos); + $user_rules = $user->rules_get(); + $ret .= sprintf('gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d; rules_set(%d);', + $sendstep, $user->stat, $user->subst, $table_pos, + ($user_rules == BIN5_USER_CONTINUE_INIT ? $table->rules->id_get() : $user_rules)); log_rd(sprintf( 'SHOW_TABLE: gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d;', $sendstep, $user->stat, $user->subst, $table_pos)); @@ -1650,7 +1603,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) if (!$is_again) $ret .= table_welcome($user); - if ($is_transition && !$is_again) { // appena seduti al tavolo, play della mucca + if ($is_transition && !$is_again) { // just sit, play cow $ret .= playsound("cow.mp3"); } @@ -1750,6 +1703,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) $table->asta_card); } else { + // FIXME - RULES to be able to abandon table /* show auction */ if ($table_pos == ($table->gstart % BIN5_PLAYERS_N) && $table->asta_win == -1) @@ -1848,7 +1802,8 @@ function show_table_info(&$bri, &$table, $table_pos) // TAG: POINTS_MANAGEMENT $pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS; - $noty = sprintf(''); + $noty = sprintf('

%s.

\n', xcape(ucfirst(rules_id2descr($table->rules->id_get(), $G_lang)))); + $noty .= sprintf('
'); // Names. for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) @@ -1908,7 +1863,7 @@ function show_table_info(&$bri, &$table, $table_pos) $noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam); } - $multer = $table->multer(TRUE); + $multer = $table->rules->multer(TRUE); if ($multer > 1) { $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($multer) ); } @@ -1973,26 +1928,6 @@ function briscola_show($bri, $table, $user) return ($ret); } - -function game_result($asta_pnt, $pnt) -{ - $sixty = 60; - if ($asta_pnt == 61) { - if ($pnt > $sixty) - return (1); - else if ($pnt == $sixty) - return (0); - else - return (-1); - } - else { - if ($pnt >= $asta_pnt) - return (1); - else - return (-1); - } -} - function log_points($remote_addr, $curtime, $user, $where, $mesg) { if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) { @@ -2004,111 +1939,5 @@ function log_points($remote_addr, $curtime, $user, $where, $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 = "
"; - $tg_hr = "
"; - $tg_bo = ""; - $tg_bc = ""; - $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: "
Nell'ultima mano ha chiamato %s, il socio era %s,
", "hanno fatto cappotto EBBRAVI!.
", "dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", "
Nell'ultima mano %s si è chiamato in mano,
", "ha fatto cappotto EBBRAVO!.
", "doveva fare %s punti e ne ha fatti %d: ha %s.
", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */ - - $noty .= sprintf($mlang_bin5_bin5['info_part'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - $win_name, - $fri_name); - if ($old_pnt == 120) { - $noty .= sprintf($mlang_bin5_bin5['info_capp'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc ); - } - else { - if ($old_asta_pnt > 61) { - $noty .= sprintf($mlang_bin5_bin5['info_alea'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - $old_asta_pnt, $old_pnt, - ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : - ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : - $mlang_bin5_bin5['info_lost'][$G_lang]))); - } - else { - $noty .= sprintf($mlang_bin5_bin5['info_more'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - $old_pnt, - ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : - ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : - $mlang_bin5_bin5['info_lost'][$G_lang]))); - } // else of if ($old_asta_pnt > 61) { - } // else of if ($old_pnt == 120) { - } // if ($win != $fri) { // not alone case - else { - $noty .= sprintf($mlang_bin5_bin5['info_alon'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - $win_name); - if ($old_pnt == 120) { - $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc); - } - else { - if ($old_asta_pnt > 61) { - $noty .= sprintf($mlang_bin5_bin5['info_aleaa'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - $old_asta_pnt, $old_pnt, - ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : - ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : - $mlang_bin5_bin5['info_lost'][$G_lang]))); - } - else { - $noty .= sprintf($mlang_bin5_bin5['info_morea'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - $old_pnt, - ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : - ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : - $mlang_bin5_bin5['info_lost'][$G_lang]))); - } - } - } - } - - $old_multer = Bin5_table::s_multer($old_mult, $old_asta_pnt); - if ($old_multer > 1) { - $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], - $tg_br, $tg_hr, $tg_bo, $tg_bc, - multoval($old_multer)); - } - $noty .= sprintf('%2$s', $tg_br, $tg_hr); - - return ($noty); -} ?> diff --git a/web/briskin5/Obj/rules.phh b/web/briskin5/Obj/rules.phh new file mode 100644 index 0000000..48e540b --- /dev/null +++ b/web/briskin5/Obj/rules.phh @@ -0,0 +1,72 @@ + \ No newline at end of file diff --git a/web/briskin5/Obj/rules_base.phh b/web/briskin5/Obj/rules_base.phh new file mode 100644 index 0000000..6f93892 --- /dev/null +++ b/web/briskin5/Obj/rules_base.phh @@ -0,0 +1,102 @@ + array( 'it' => 'Ha chiamato %3$s%5$s%4$s, il socio era %3$s%6$s%4$s,%1$s', + 'en' => 'The declarer was %3$s%5$s%4$s, the partner was %3$s%6$s%4$s,%1$s'), + // br, hr, b, /b + 'info_capp' => array( 'it' => 'hanno fatto %3$scappotto%4$s EBBRAVI!.%1$s', + 'en' => 'and they made %3Dscapot%4$s WELL DONE!.%1$s'), + + // br, hr, b, /b, old_asta_pnt, old_pnt, winornot + 'info_alea' => array( 'it' => 'dovevano fare %3$salmeno %5$d%4$s punti e ne hanno fatti %3$s%6$d%4$s: hanno %7$s.%1$s', + 'en' => 'they had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: they have %7$s.%1$s'), + // br, hr, b, /b, old_pnt, winornot + 'info_more' => array( 'it' => 'dovevano fare %3$spiù di 60%4$s punti e ne hanno fatti %3$s%5$d%4$s: hanno %6$s.%1$s', + 'en' => 'they had to do %3$sover 60%4$s points and they had made %3$s%5$d%4$s: they have %3$s%6$s%4$s.%1$s'), + 'info_win' => array( 'it' => 'vinto', + 'en' => 'win'), + 'info_peer' => array( 'it' => 'pareggiato', + 'en' => 'drew'), + 'info_lost' => array( 'it' => 'perso', + 'en' => 'lost'), + + // br, hr, b, /b, win_name + 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano,%1$s', + 'en' => '%3$s%5$s%4$s play alone against each other,%1$s'), + // br, hr, b, /b, old_asta_pnt, old_pnt, winornot + 'info_aleaa' => array( 'it' => 'doveva fare %3$salmeno %5$d%4$s punti e ne ha fatti %3$s%6$d%4$s: ha %3$s%7$s%4$s.%1$s', + 'en' => 'he/she had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: he/she had %3$s%7$s%4$s.%1$s'), + // br, hr, b, /b, old_pnt, winornot + 'info_morea' => array( 'it' => 'doveva fare %3$spiù di 60%4$s punti e ne ha fatti %3$s%5$d%4$s: ha %3$s%6$s%4$s.%1$s', + 'en' => 'he/she had to do %3$smore than 60%4$s points and they had made %3$s%5$d%4$s: he/she had %3$s%6$s%4$s.%1$s'), + // br, hr, b, /b + 'info_acap' => array( 'it' => 'ha fatto %3$scappotto%4$s EBBRAVO!.%1$s', + 'en' => 'and he/she made %3$scapot%4$s WELL DONE!.%1$s'), + + // br, hr, b, /b + 'info_omul' => array( 'it' => '%1$sLa partita valeva %3$s%5$s%4$s.%1$s', + 'en' => '%1$sEN: The game was worth %3$s%5$s%4$s.%1$s' ), + + // br, hr, b, /b + 'info_alpa' => array( 'it' => '%1$sHanno passato %3$stutti%4$s.%1$s', + 'en' => '%1$sEN: Hanno passato %3$stutti%4$s.%1$s' ), + + // br, hr, b, /b, aband-name + 'info_aban' => array( 'it' => ' Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.', + 'en' => ' EN: Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.') + ); + +abstract class Rules { + var $table; + var $id; + + abstract function engine(&$bri, $curtime, $action, $user); + + function __construct($table) + { + $this->table = $table; + } + + function id_get() + { + return ($this->id); + } + + function tourn_points(&$user, $i) + { + return; + } + + function tourn_points_max($user) + { + return 0; + } + +} + +?> \ No newline at end of file diff --git a/web/briskin5/Obj/rules_no_draw.phh b/web/briskin5/Obj/rules_no_draw.phh new file mode 100644 index 0000000..c5ca0cf --- /dev/null +++ b/web/briskin5/Obj/rules_no_draw.phh @@ -0,0 +1,45 @@ +id = 2; + } + + static function game_result($asta_pnt, $pnt) + { + if ($pnt >= $asta_pnt) + return (1); + else + return (-1); + } + +} // class Rules_no_draw + +?> \ No newline at end of file diff --git a/web/briskin5/Obj/rules_old_rules.phh b/web/briskin5/Obj/rules_old_rules.phh new file mode 100644 index 0000000..ffa1a1b --- /dev/null +++ b/web/briskin5/Obj/rules_old_rules.phh @@ -0,0 +1,430 @@ +id = 1; + } + + static function asta2mult($asta_pnt) + { + if ($asta_pnt > 110) + return (6); + else if ($asta_pnt > 100) + return (5); + else if ($asta_pnt > 90) + return (4); + else if ($asta_pnt > 80) + return (3); + else if ($asta_pnt > 70) + return (2); + else + return (1); + } + static function s_multer($mult, $pnt) + { + return (pow(2, $mult) * static::asta2mult($pnt)); + } + + static function s_point_calc($pnt_done, $mult, $pnt_req, $is_allpoints) + { + return ($pnt_done * static::s_multer($mult, $pnt_req) * ($is_allpoints ? 2 : 1)); + } + + function multer($is_new) + { + if ($is_new) { + return (static::s_multer($this->table->mult, $this->table->asta_pnt)); + } + else { + return (static::s_multer($this->table->old_mult, $this->table->old_asta_pnt)); + } + } + + static function game_result($asta_pnt, $pnt) + { + $sixty = (BIN5_PLAYERS_N == 3 ? 30 : 60); + if ($asta_pnt == 61) { + if ($pnt > $sixty) + return (1); + else if ($pnt == $sixty) + return (0); + else + return (-1); + } + else { + if ($pnt >= $asta_pnt) + return (1); + else + return (-1); + } + } + + function rules_asta(&$bri, $curtime, $action, $user, &$ret_s, $a_card, $a_pnt) + { + $index_cur = $this->table->gstart % BIN5_PLAYERS_N; + + // Abbandono dell'asta + if ($a_card <= -1) { + log_wr("Abbandona l'asta."); + $this->table->asta_pla[$index_cur] = FALSE; + $user->asta_card = -1; + $this->table->asta_pla_n--; + + return TRUE; + } + else if ($a_card <= 9) { + $ret_s = ""; + + do { + if ($a_card >= 0 && $a_card < 9 && $a_card > $this->table->asta_card) + ; + else if ($a_card == 9 && $a_pnt > ($this->table->asta_pnt >= 61 ? $this->table->asta_pnt : 60) + && $a_pnt <= 120) + ; + else + break; + + $user->asta_card = $a_card; + $this->table->asta_card = $a_card; + if ($a_card == 9) { + $user->asta_pnt = $a_pnt; + $this->table->asta_pnt = $a_pnt; + } + + return TRUE; + } while (0); + } + + return FALSE; + } + + function rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco) + { + if ( !($a_brisco >= 0 && $a_brisco < 40)) // (BIN5_CARD_HAND * BIN5_PLAYERS_N)) ) + return FALSE; + + if ( !($this->table->asta_win > -1 && + $user->table_pos == $this->table->asta_win) ) + return FALSE; + + return TRUE; + } + + function rules_nextauct(&$bri, $curtime, $action, $user, $maxcard) + { + if (($this->table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) && + !($this->table->asta_card == 9 && $this->table->asta_pnt == 120)) { + return TRUE; + } + else { + return FALSE; + } + + } + + function engine(&$bri, $curtime, $action, $user, &$opt1 = NULL, &$opt2 = NULL, &$opt3 = NULL) + { + GLOBAL $G_all_points, $G_dbasetype; + + $table = $this->table; + $pnts_sav = array(); + + if ($action == BIN5_RULES_ASTA) { + return ($this->rules_asta($bri, $curtime, $action, $user, $opt1, $opt2, $opt3)); + } + else if ($action == BIN5_RULES_NEXTAUCT) { + return ($this->rules_nextauct($bri, $curtime, $action, $user, $opt1)); + } + else if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct + $table->old_act = $action; + $table->old_asta_win = -1; + $table->old_pnt = 0; + $table->mult_inc(1); + for ($i = 0 ; $i < PLAYERS_N ; $i++) { + $pnts_sav[$i] = 0; + } + + $game_delta = 1; + // $table->game_next(1); + $table->game_init(&$bri->user); + } + else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct + if (!($user->handpt <= 2)) { + return (FALSE); + } + $table->old_act = $action; + log_wr(sprintf("GIOCO FINITO !!!")); + $table->old_asta_win = $user->table_pos; + $table->old_pnt = 0; + $table->mult_inc(1); + + for ($i = 0 ; $i < PLAYERS_N ; $i++) { + $pnts_sav[$i] = 0; + } + + // Non si cambia mazzo se si abbandona la partita + $game_delta = 0; + // $table->game_next(0); + $table->game_init(&$bri->user); + } + else if ($action == BIN5_RULES_CHECKCHOOSE) { + return ($this->rules_checkchoose($bri, $curtime, $action, $user, $opt1, $opt2)); + } + else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct + $table->old_act = $action; + do { + $pro = 0; + + if ($table->asta_pnt == 60) + $table->asta_pnt = 61; + + $table->old_reason = ""; + + // count points for the temporary 2 teams + for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { + $ctt = $table->card[$i]->value % 10; + $own = $table->card[$i]->owner; + if ($own == $table->asta_win || $own == $table->friend) + $pro += $G_all_points[$ctt]; + } + + log_wr(sprintf("PRO: [%d]", $pro)); + + // PATTA case ! + if (static::game_result($table->asta_pnt, $pro) == 0) { + $table->points[$table->points_n % MAX_POINTS] = array(); + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $table->points[$table->points_n % MAX_POINTS][$i] = 0; + $pnts_sav[$i] = 0; + } + $table->points_n++; + $table->old_pnt = $pro; + $table->old_asta_win = $table->asta_win; + $table->mult_inc(1); + + break; + } + + if (static::game_result($table->asta_pnt, $pro) == 1) + $sig = 1; + else + $sig = -1; + + // TAG: POINTS_MANAGEMENT + $table->points[$table->points_n % MAX_POINTS] = array(); + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + if ($i == $table->asta_win) + $pnt = ($i == $table->friend ? 4 : 2); + else if ($i == $table->friend) + $pnt = 1; + else + $pnt = -1; + + log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pnt)); + + $pnt_sav = static::s_point_calc($pnt * $sig, 0, $table->asta_pnt, ($pro == 120)); + $pnt_tab = static::s_point_calc($pnt * $sig, $table->mult, $table->asta_pnt, ($pro == 120)); + + $table->points[$table->points_n % MAX_POINTS][$i] = $pnt_tab; + $table->total[$i] += $pnt_tab; + $pnts_sav[$i] = $pnt_sav; + } + $table->points_n++; + $table->old_pnt = $pro; + $table->old_asta_win = $table->asta_win; + $table->mult_set(0); + } while (0); + $game_delta = 1; + } + else { + return (FALSE); + } + $table->game_next($game_delta); + + $plist = "$table->table_token|$user->table_orig|$table->player_n"; + $ucodes = array(); + $codes = ""; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$table->player[$i]]; + + /* pro db */ + $ucodes[$i] = $user_cur->code_get(); + + /* pro log */ + $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i]; + $codes .= '|'.xcapelt($user_cur->code_get()); + } + $plist .= $codes; + log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); + + $table->old_asta_pnt = $table->asta_pnt; + // $table->old_mazzo is managed by ->game_next(); + // $table->old_mult, $table->old_pnt, $table->old_reason and $table->old_asta_win are specific + + $table->old_friend = $table->friend; + $table->old_tourn_pts = $table->tourn_pts; + + $table->old_reason = static::game_description($action, 'html', $table->old_mult, + $table->old_asta_win, + ($table->old_asta_win != -1 ? + $bri->user[$table->player[$table->old_asta_win]]->name : ""), + $table->old_friend, + ($table->old_friend != -1 ? + $bri->user[$table->player[$table->old_friend]]->name : ""), + $table->old_pnt, $table->old_asta_pnt, $table->old_tourn_pts); + + + if ($user->table_orig < TABLES_AUTH_N) { + require_once("../Obj/dbase_".$G_dbasetype.".phh"); + + if (($bdb = BriskDB::create()) != FALSE) { + $bdb->bin5_points_save($curtime, $table, $user->table_orig, $action, $ucodes, $pnts_sav); + unset($bdb); + } + else { + log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); + } + log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); + } + + $table->game_init(&$bri->user); + + return (TRUE); + } + + static function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?", + $old_pnt = -1, $old_asta_pnt = -1, $old_tourn_pts = -1) + { + GLOBAL $G_lang, $mlang_bin5_rules; + + if ($form == 'html') { + $tg_br = "
"; + $tg_hr = "
"; + $tg_bo = ""; + $tg_bc = ""; + $win_name = xcape($win_name); + $fri_name = xcape($fri_name); + } + else { + $tg_br = " "; + $tg_hr = " "; + $tg_bo = ""; + $tg_bc = ""; + } + + if ($act == BIN5_RULES_OLDSCHEMA) { + return (""); + } + else if ($act == BIN5_RULES_ALLPASS) { + return (sprintf($mlang_bin5_rules['info_alpa'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc)); + } + else if ($act == BIN5_RULES_ABANDON) { + return (sprintf($mlang_bin5_rules['info_aban'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name)); + } + else { + $wol = static::game_result($old_asta_pnt, $old_pnt); + + $noty = ""; + + if ($win != $fri) { // not alone case + /* MLANG: "
Nell'ultima mano ha chiamato %s, il socio era %s,
", "hanno fatto cappotto EBBRAVI!.
", "dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", "
Nell'ultima mano %s si è chiamato in mano,
", "ha fatto cappotto EBBRAVO!.
", "doveva fare %s punti e ne ha fatti %d: ha %s.
", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */ + + $noty .= sprintf($mlang_bin5_rules['info_part'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name, + $fri_name); + if ($old_pnt == 120) { + $noty .= sprintf($mlang_bin5_rules['info_capp'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc ); + } + else { + if ($old_asta_pnt > 61) { + $noty .= sprintf($mlang_bin5_rules['info_alea'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_asta_pnt, $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } + else { + $noty .= sprintf($mlang_bin5_rules['info_more'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } // else of if ($old_asta_pnt > 61) { + } // else of if ($old_pnt == 120) { + } // if ($win != $fri) { // not alone case + else { + $noty .= sprintf($mlang_bin5_rules['info_alon'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name); + if ($old_pnt == 120) { + $noty .= sprintf($mlang_bin5_rules['info_acap'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc); + } + else { + if ($old_asta_pnt > 61) { + $noty .= sprintf($mlang_bin5_rules['info_aleaa'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_asta_pnt, $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } + else { + $noty .= sprintf($mlang_bin5_rules['info_morea'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } + } + } + } + + $old_multer = static::s_multer($old_mult, $old_asta_pnt); + if ($old_multer > 1) { + $noty .= sprintf($mlang_bin5_rules['info_omul'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + multoval($old_multer)); + } + $noty .= sprintf('%2$s', $tg_br, $tg_hr); + + return ($noty); + } +} // class Rules_old_rules + +?> \ No newline at end of file diff --git a/web/briskin5/Obj/rules_together17.phh b/web/briskin5/Obj/rules_together17.phh new file mode 100644 index 0000000..86b0d22 --- /dev/null +++ b/web/briskin5/Obj/rules_together17.phh @@ -0,0 +1,314 @@ + array( 'it' => 'Ha chiamato %3$s%5$s%4$s (punti torneo %7$d), il socio era %3$s%6$s%4$s,%1$s', + 'en' => 'The declarer was %3$s%5$s%4$s (tournment points %7$d), the partner was %3$s%6$s%4$s,%1$s'), + // br, hr, b, /b, win_name + 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano (punti torneo %6$d),%1$s', + 'en' => '%3$s%5$s%4$s play alone against each other (tournment points %6$d),%1$s') + ); + +class Rules_together17 extends Rules_no_draw { + function __construct($table) + { + parent::__construct($table); + $this->id = 4; + } + + function tourn_points(&$user, $user_pos) + { + $card = $this->table->card; + unset($user->asta_tourn_pts); + $user->asta_tourn_pts = array(0, 0, 0, 0); + if (BIN5_CARD_HAND == 8) + $tourn_values = array(11, 10, 4,3,2, 1,1,1,1,1); + else + $tourn_values = array(33, 30, 12,9,6, 3,3,3,3,3); + + for ($i = 0 ; $i < BIN5_PLAYERS_N * BIN5_CARD_HAND ; $i++) { + + if ($card[$i]->owner == $user_pos) { + $user->asta_tourn_pts[(int)($i / 10)] += $tourn_values[$i % 10]; + } + } + } + + function tourn_points_max($user) + { + $mx = 0; + for ($i = 0 ; $i < 4 ; $i++) { + if ($user->asta_tourn_pts[$i] > $mx) { + $mx = $user->asta_tourn_pts[$i]; + } + } + + return $mx; + } + + function min_tourn_points($a_pnt) + { + if ($a_pnt < 62) + $min_pts = 0; + else if ($a_pnt < 71) + $min_pts = 13; + else if ($a_pnt < 80) + $min_pts = 19; + else if ($a_pnt < 90) + $min_pts = 23; + else if ($a_pnt < 100) + $min_pts = 25; + else + $min_pts = 28; + + return $min_pts; + } + + function check_tourn_points($hand_pts, $a_pnt, $a_seed, &$ret_s) { + $min_pts = $this->min_tourn_points($a_pnt); + + if ($hand_pts < $min_pts) { + // FIXME_LANG + $seeds = array('coppe', 'ori', 'spade', 'bastoni'); + $ret_s = sprintf("Hai chiamato un due di %s a %d ma in mano per quel seme hai %d punti-torneo, non puoi.", + $seeds[$a_seed], $a_pnt, $hand_pts); + return FALSE; + } + return TRUE; + } + + function rules_asta(&$bri, $curtime, $action, $user, &$ret_s, $a_card, $a_pnt) { + /* +Per le chiamate da 62 a 70 bisognerà avere 13 punti ( esempi.: asso e fante oppure tre +e cavallo oppure re, cavallo, fante, sette, sei, cinque, quattro) ; +Per chiamate da 71 ad 80 bisognerà avere 19 punti ( esempi.: asso, re, cavallo e 6 +oppure tre, re, fante, 7, 6 e 5 ); +Per chiamate da 81 a 90 bisognerà avere 23 punti ( esempi.: asso, tre e fante oppure +asso, re, cavallo, fante, 6, 5 e 4); +Per chiamate da 91 a 100 bisognerà avere 25 punti ( esempi.: asso, tre, re e 7 oppure +asso, tre, cavallo e fante ); +Per chiamate da 101 a 120 bisognerà avere 28 punti ( esempi.:asso, tre, re e cavallo +oppure asso, tre, cavallo, 7, 6, 5 e 4 ). + */ + + $index_cur = $this->table->gstart % BIN5_PLAYERS_N; + + // Abbandono dell'asta + if ($a_card <= -1) { + log_wr("Abbandona l'asta."); + $this->table->asta_pla[$index_cur] = FALSE; + $user->asta_card = -1; + $this->table->asta_pla_n--; + + if ($this->table->asta_card == -1 && $this->table->asta_pla_n == 1) { + // all abandon auction except one => move next bid to two and 71 points + $this->table->asta_card = 9; + $this->table->asta_pnt = 70; + } + + return TRUE; + } + else if ($a_card <= 9) { + $ret_s = ""; + + do { + if ($a_card >= 0 && $a_card < 9 && $a_card > $this->table->asta_card) { + ; + } + else if ($a_card == 9 && + $a_pnt > ($this->table->asta_pnt >= 61 ? $this->table->asta_pnt : 60) + && $a_pnt <= 120) { + $min_pts = $this->min_tourn_points($a_pnt); + + $max_hand_pts = $this->tourn_points_max($user); + if ($max_hand_pts < $min_pts) { + // FIXME_LANG + $ret_s = sprintf("Hai chiamato un due a %d ma in mano hai al massimo %d punti-torneo, non puoi.", + $a_pnt, $max_hand_pts); + break; + } + } + else { + break; + } + + $user->asta_card = $a_card; + $this->table->asta_card = $a_card; + if ($a_card == 9) { + $user->asta_pnt = $a_pnt; + $this->table->asta_pnt = $a_pnt; + } + + return TRUE; + } while (0); + } + + return FALSE; + } + + function rules_nextauct(&$bri, $curtime, $action, $user, $maxcard) + { + if (($this->table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) && + !($this->table->asta_card == 9 && $this->table->asta_pnt == 120)) { + return TRUE; + } + else { + return FALSE; + } + + } + + function rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco) + { + if (! parent::rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)) { + return FALSE; + } + + if ($this->table->asta_card == 9) { + $bri_seed = (int)($a_brisco / 10); + return $this->check_tourn_points($user->asta_tourn_pts[$bri_seed], + $this->table->asta_pnt, $bri_seed, $ret_s); + } + + return TRUE; + } + + + static function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?", + $old_pnt = -1, $old_asta_pnt = -1, $old_tourn_pts = -1) + { + GLOBAL $G_lang, $mlang_bin5_rules, $mlang_bin5_toge17_rules; + + if ($form == 'html') { + $tg_br = "
"; + $tg_hr = "
"; + $tg_bo = ""; + $tg_bc = ""; + $win_name = xcape($win_name); + $fri_name = xcape($fri_name); + } + else { + $tg_br = " "; + $tg_hr = " "; + $tg_bo = ""; + $tg_bc = ""; + } + + if ($act == BIN5_RULES_OLDSCHEMA) { + return (""); + } + else if ($act == BIN5_RULES_ALLPASS) { + return (sprintf($mlang_bin5_rules['info_alpa'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc)); + } + else if ($act == BIN5_RULES_ABANDON) { + return (sprintf($mlang_bin5_rules['info_aban'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name)); + } + else { + $wol = static::game_result($old_asta_pnt, $old_pnt); + + $noty = ""; + + if ($win != $fri) { // not alone case + /* MLANG: "
Nell'ultima mano ha chiamato %s, il socio era %s,
", "hanno fatto cappotto EBBRAVI!.
", "dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", "
Nell'ultima mano %s si è chiamato in mano,
", "ha fatto cappotto EBBRAVO!.
", "doveva fare %s punti e ne ha fatti %d: ha %s.
", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */ + + $noty .= sprintf($mlang_bin5_toge17_rules['info_part'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name, + $fri_name, + $old_tourn_pts); + if ($old_pnt == 120) { + $noty .= sprintf($mlang_bin5_rules['info_capp'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc ); + } + else { + if ($old_asta_pnt > 61) { + $noty .= sprintf($mlang_bin5_rules['info_alea'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_asta_pnt, $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } + else { + $noty .= sprintf($mlang_bin5_rules['info_more'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } // else of if ($old_asta_pnt > 61) { + } // else of if ($old_pnt == 120) { + } // if ($win != $fri) { // not alone case + else { + $noty .= sprintf($mlang_bin5_toge17_rules['info_alon'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $win_name, + $old_tourn_pts); + if ($old_pnt == 120) { + $noty .= sprintf($mlang_bin5_rules['info_acap'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc); + } + else { + if ($old_asta_pnt > 61) { + $noty .= sprintf($mlang_bin5_rules['info_aleaa'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_asta_pnt, $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } + else { + $noty .= sprintf($mlang_bin5_rules['info_morea'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + $old_pnt, + ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : + ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : + $mlang_bin5_rules['info_lost'][$G_lang]))); + } + } + } + } + + $old_multer = static::s_multer($old_mult, $old_asta_pnt); + if ($old_multer > 1) { + $noty .= sprintf($mlang_bin5_rules['info_omul'][$G_lang], + $tg_br, $tg_hr, $tg_bo, $tg_bc, + multoval($old_multer)); + } + $noty .= sprintf('%2$s', $tg_br, $tg_hr); + + return ($noty); + } +} // class Rules_no_draw + +?> \ No newline at end of file diff --git a/web/briskin5/briskin5.js b/web/briskin5/briskin5.js index f67dd49..4b29178 100644 --- a/web/briskin5/briskin5.js +++ b/web/briskin5/briskin5.js @@ -353,3 +353,13 @@ function preferences_showhide() else $('preferences').style.visibility = 'hidden'; } + +function act_select_rules(rule_id) +{ + send_mesg("chatt|/rules " + rule_id); +} + +function rules_set(id) +{ + $('select_rules').value = id; +} diff --git a/web/briskin5/index.php b/web/briskin5/index.php index 80f7366..64e7bc5 100644 --- a/web/briskin5/index.php +++ b/web/briskin5/index.php @@ -121,6 +121,8 @@ window.onload = function() { window.onunload = onunload_cb; xstm.start(); + + addEvent($('select_rules'), "change", function() { act_select_rules(this.value); } ); // FIXME: add this setTimeout(preload_images into data stream to avoid // race on opened socket // setTimeout(preload_images, 0, g_preload_img_arr, g_imgct); @@ -305,6 +307,9 @@ window.onload = function() {


+
+ +
diff --git a/web/briskin5/index_wr.php b/web/briskin5/index_wr.php index bc69682..09c030a 100644 --- a/web/briskin5/index_wr.php +++ b/web/briskin5/index_wr.php @@ -34,6 +34,7 @@ require_once("Obj/briskin5.phh"); function bin5_index_wr_main(&$bin5, $remote_addr_full, $get, $post, $cookie) { GLOBAL $G_base, $G_dbasetype, $G_ban_list, $G_black_list; + GLOBAL $mlang_indwr, $G_lang; $remote_addr = addrtoipv4($remote_addr_full); @@ -50,15 +51,11 @@ function bin5_index_wr_main(&$bin5, $remote_addr_full, $get, $post, $cookie) log_wr('COMM: '.$mesg); - if (($CO_bin5_pref_ring_endauct = gpcs_var('CO_bin5_pref_ring_endauct', $get, $post, $cookie)) === FALSE) $CO_bin5_pref_ring_endauct = ""; - - log_wr(0, 'bin::index_wr.php: COMM: '.xcapemesg($mesg)); - if (($user = &$bin5->get_user($sess, $idx)) == FALSE) { echo "Get User Error"; log_wr("Get User Error"); @@ -172,33 +169,7 @@ function bin5_index_wr_main(&$bin5, $remote_addr_full, $get, $post, $cookie) } else if ($user->subst == 'asta') { if ($argz[0] == 'lascio') { - // && $user->handpt <= 2) { - /* $index_cur = $table->gstart % BIN5_PLAYERS_N; */ - - /* log_wr(sprintf("GIOCO FINITO !!!")); */ - - /* $table->mult += 1; */ - /* $table->old_reason = sprintf("Ha lasciato %s perché aveva al massimo 2 punti.", xcape($user->name)); */ - - /* // Non si cambia mazzo se si abbandona la partita */ - /* $table->game_next(0); */ - - /* if ($user->table_orig < TABLES_AUTH_N) { */ - /* require_once("../Obj/dbase_".$G_dbasetype.".phh"); */ - - /* if (($bdb = BriskDB::create()) != FALSE) { */ - /* $bdb->bin5_points_save($curtime, $table, $user->table_orig, $ucodes, $pt_cur); */ - /* unset($bdb); */ - /* } */ - /* else { */ - /* log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); */ - /* } */ - /* log_points($curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); */ - /* } */ - - /* $table->game_init(&$bin5->user); */ - - if ($table->rules_engine($bin5, $curtime, BIN5_RULES_ABANDON, $user)) { + if ($table->rules->engine($bin5, $curtime, BIN5_RULES_ABANDON, $user)) { for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bin5->user[$table->player[$i]]; @@ -210,199 +181,221 @@ function bin5_index_wr_main(&$bin5, $remote_addr_full, $get, $post, $cookie) } } else if ($argz[0] == 'asta') { - $again = TRUE; - + $success = FALSE; $index_cur = $table->gstart % BIN5_PLAYERS_N; - if ($user->table_pos == $index_cur && - $table->asta_pla[$index_cur]) { + do { + $ret_s = ''; + + if ($user->table_pos != $index_cur || + !$table->asta_pla[$index_cur]) { + // FIXME_LANG + $ret_s = 'grave inconsistenza'; + break; + } + $a_card = $argz[1]; $a_pnt = $argz[2]; log_wr("CI SIAMO a_card ".$a_card." asta_card ".$table->asta_card); - // Abbandono dell'asta - if ($a_card <= -1) { - log_wr("Abbandona l'asta."); - $table->asta_pla[$index_cur] = FALSE; - $user->asta_card = -1; - $table->asta_pla_n--; - $again = FALSE; - } - else if ($a_card <= 9) { - if ($a_card >= 0 && $a_card < 9 && $a_card > $table->asta_card) - $again = FALSE; - else if ($a_card == 9 && $a_pnt > ($table->asta_pnt >= 61 ? $table->asta_pnt : 60) && $a_pnt <= 120) - $again = FALSE; - - - if ($again == FALSE) { - log_wr("NUOVI ORZI."); - $user->asta_card = $a_card; - $table->asta_card = $a_card; - if ($a_card == 9) { - $user->asta_pnt = $a_pnt; - $table->asta_pnt = $a_pnt; - } - } + /* user action management */ + if (!$table->rules->engine(&$bin5, $curtime, BIN5_RULES_ASTA, $user, + $ret_s, $a_card, $a_pnt)) { + break; } - if ($again) { // Qualcosa non andato bene, rifare - $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1, - ($table->asta_pnt > 60 ? $table->asta_pnt + 1 : 61) ); - $user->comm[$user->step % COMM_N] = $ret; - $user->step_inc(); + /* next step */ + $showst = "show_astat("; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bin5->user[$table->player[$i]]; + $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), + ($user_cur->asta_card < 9 ? $user_cur->asta_card : + $user_cur->asta_pnt)); + } + if (BIN5_PLAYERS_N == 3) + $showst .= ",-2,-2"; + $showst .= ");"; - log_wr("Ripetere."); + $maxcard = -2; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bin5->user[$table->player[$i]]; + if ($maxcard < $user_cur->asta_card) + $maxcard = $user_cur->asta_card; } - else { - /* next step */ - $showst = "show_astat("; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bin5->user[$table->player[$i]]; - $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), - ($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt)); + + /* + * IF not max points AND + * (asta_pla_n > 1 if someone bet OR + * asta_pla_n > 0 if someone NOT bet) + * THEN advance auction + */ + if ($table->rules->engine(&$bin5, $curtime, BIN5_RULES_NEXTAUCT, $user, $maxcard)) { + /* search the next player in auction and put it in gstart field */ + for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) { + $index_next = ($table->gstart + $i) % BIN5_PLAYERS_N; + if ($table->asta_pla[$index_next]) { + log_wr("GSTART 1"); + $table->gstart += $i; + break; + } } - if (BIN5_PLAYERS_N == 3) - $showst .= ",-2,-2"; - $showst .= ");"; - $maxcard = -2; + /* set client side view */ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bin5->user[$table->player[$i]]; - if ($maxcard < $user_cur->asta_card) - $maxcard = $user_cur->asta_card; + $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst); + if ($user_cur->table_pos == ($table->gstart % BIN5_PLAYERS_N)) + $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();', + $table->asta_card + 1, $table->asta_pnt+1, ($user_cur->handpt <= 2 ? "true" : "false")); + else + $ret .= sprintf('dispose_asta(%d,%d, %s); remark_off();', + $table->asta_card + 1, -($table->asta_pnt+1), ($user_cur->handpt <= 2 ? "true" : "false")); + $user_cur->comm[$user_cur->step % COMM_N] = $ret; + $user_cur->step_inc(); } + } + else if ($table->asta_pla_n == 0) { + log_wr("PASSANO TUTTI!"); - if (($table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) && - !($table->asta_card == 9 && $table->asta_pnt == 120)) { - log_wr("ALLOPPA QUI"); - for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) { - $index_next = ($table->gstart + $i) % BIN5_PLAYERS_N; - if ($table->asta_pla[$index_next]) { - log_wr("GSTART 1"); - $table->gstart += $i; - break; - } - } - - + if ($table->rules->engine(&$bin5, $curtime, BIN5_RULES_ALLPASS, $user)) { for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bin5->user[$table->player[$i]]; - $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst); - if ($user_cur->table_pos == ($table->gstart % BIN5_PLAYERS_N)) - $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();', - $table->asta_card + 1, $table->asta_pnt+1, ($user_cur->handpt <= 2 ? "true" : "false")); - else - $ret .= sprintf('dispose_asta(%d,%d, %s); remark_off();', - $table->asta_card + 1, -($table->asta_pnt+1), ($user_cur->handpt <= 2 ? "true" : "false")); + + $ret = sprintf('gst.st = %d;', $user_cur->step+1); + $ret .= show_table(&$bin5,&$user_cur,$user_cur->step+1, TRUE, TRUE); $user_cur->comm[$user_cur->step % COMM_N] = $ret; $user_cur->step_inc(); } } - else if ($table->asta_pla_n == 0) { - log_wr("PASSANO TUTTI!"); - - if ($table->rules_engine($bin5, $curtime, BIN5_RULES_ALLPASS, $user)) { - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bin5->user[$table->player[$i]]; - - $ret = sprintf('gst.st = %d;', $user_cur->step+1); - $ret .= show_table($bin5, $user_cur,$user_cur->step+1, TRUE, TRUE); - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); - } - } + } + else { + log_wr("FINITA !"); + // if a_pnt == 120 supergame ! else abbandono + if ($a_pnt == 120 || $user->asta_card != -1) { + $chooser = $index_cur; + for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) + if ($i != $chooser) + $table->asta_pla[$i] = FALSE; } else { - log_wr("FINITA !"); - // if a_pnt == 120 supergame ! else abbandono - if ($a_pnt == 120 || $user->asta_card != -1) { - $chooser = $index_cur; - for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) - if ($i != $chooser) - $table->asta_pla[$i] = FALSE; - } - else { - /* - $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();", - $user->step+1, $table->asta_card + 1,-($table->asta_pnt)); - $user->step_inc(); - */ - for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) { - $chooser = ($table->gstart + $i) % BIN5_PLAYERS_N; - if ($table->asta_pla[$chooser]) { - break; - } + /* + $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();", + $user->step+1, $table->asta_card + 1,-($table->asta_pnt)); + $user->step_inc(); + */ + for ($i = 1 ; $i < BIN5_PLAYERS_N ; $i++) { + $chooser = ($table->gstart + $i) % BIN5_PLAYERS_N; + if ($table->asta_pla[$chooser]) { + break; } } - $table->asta_win = $chooser; - - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bin5->user[$table->player[$i]]; - $ret = sprintf('gst.st = %d; %s dispose_asta(%d, %d, false);', $user_cur->step+1, $showst, - $table->asta_card + 1,-($table->asta_pnt)); + } + $table->asta_win = $chooser; - if ($i == $chooser) { - $ret .= "choose_seed(". $table->asta_card."); remark_on();"; - } - else { - $ret .= "remark_off();"; - } + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bin5->user[$table->player[$i]]; + $ret = sprintf('gst.st = %d; %s dispose_asta(%d, %d, false);', $user_cur->step+1, $showst, + $table->asta_card + 1,-($table->asta_pnt)); - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); + if ($i == $chooser) { + $ret .= "choose_seed(". $table->asta_card."); remark_on();"; + } + else { + $ret .= "remark_off();"; } + + $user_cur->comm[$user_cur->step % COMM_N] = $ret; + $user_cur->step_inc(); } } - } - else { - log_wr("NON CI SIAMO"); + $success = TRUE; + } while(FALSE); + + if (!$success) { + $ret = sprintf('gst.st = %d; asta_pnt_set(%d);', $user->step+1, + ($table->asta_pnt > 60 ? $table->asta_pnt + 1 : 61) ); + if ($ret_s != "") { + $ret .= show_notify($ret_s, 0, $mlang_indwr['btn_close'][$G_lang], 400, 150); + } + $user->comm[$user->step % COMM_N] = $ret; + $user->step_inc(); + + log_wr("Ripetere."); } } /* asta::choose */ else if ($argz[0] == 'choose') { - if ($table->asta_win > -1 && - $user->table_pos == $table->asta_win) { + $success = FALSE; + do { $a_brisco = $argz[1]; - if ($a_brisco >= 0 && $a_brisco < (BIN5_CARD_HAND * BIN5_PLAYERS_N)) { - $table->briscola = $a_brisco; - $table->friend = $table->card[$a_brisco]->owner; - log_wr("GSTART 2"); - $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N; - log_wr("Setta la briscola a ".$a_brisco); - - $chooser = $table->asta_win; - $user_chooser = &$bin5->user[$table->player[$chooser]]; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - $user_cur = &$bin5->user[$table->player[$i]]; - $user_cur->subst = 'game'; - $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1); - if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) { - // $ret .= "var de_che= 33;"; - $ret .= playsound("ringbell.mp3"); - } - $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig); + if (!$table->rules->engine(&$bin5, $curtime, BIN5_RULES_CHECKCHOOSE, $user, $ret_s, $a_brisco)) { + break; + } - /* bg of caller cell */ - $ret .= briscola_show($bin5, $table, $user_cur); + $table->briscola = $a_brisco; - /* first gamer */ - if ($i == ($table->gstart % BIN5_PLAYERS_N)) - $ret .= "is_my_time = true; remark_on();"; - else - $ret .= "is_my_time = false; remark_off();"; + if (BIN5_CARD_HAND == 8) + $tourn_values = array(11, 10, 4,3,2, 1,1,1,1,1); + else + $tourn_values = array(33, 30, 12,9,6, 3,3,3,3,3); - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); + $table->tourn_pts = 0; + $seed = $a_brisco - ($a_brisco % 10); + for ($i = $seed ; $i < ($seed + min(10, BIN5_CARD_HAND * BIN5_PLAYERS_N)) ; $i++) { + if ($table->card[$i]->owner == $table->asta_win) { + $table->tourn_pts += $tourn_values[$i - $seed]; } - /* - TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE - VAR PER PASSARE ALLA FASE DI GIOCO - */ + } + + $table->friend = $table->card[$a_brisco]->owner; + log_wr("GSTART 2"); + $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N; + log_wr("Setta la briscola a ".$a_brisco); + + $chooser = $table->asta_win; + $user_chooser = &$bin5->user[$table->player[$chooser]]; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bin5->user[$table->player[$i]]; + $user_cur->subst = 'game'; + $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1); + if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) { + // $ret .= "var de_che= 33;"; + $ret .= playsound("ringbell.mp3"); + } + $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig); + + /* bg of caller cell */ + $ret .= briscola_show($bin5, $table, $user_cur); + + /* first gamer */ + if ($i == ($table->gstart % BIN5_PLAYERS_N)) + $ret .= "is_my_time = true; remark_on();"; + else + $ret .= "is_my_time = false; remark_off();"; + + $user_cur->comm[$user_cur->step % COMM_N] = $ret; + $user_cur->step_inc(); } + /* + TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE + VAR PER PASSARE ALLA FASE DI GIOCO + */ + $success = TRUE; + } while (0); + + if (!$success) { + $ret = ""; + if ($ret_s != "") { + $ret = show_notify($ret_s, 0, $mlang_indwr['btn_close'][$G_lang], 400, 150); + } + $user->comm[$user->step % COMM_N] = $ret; + $user->step_inc(); + + log_wr("Ripetere."); } + } } else if ($user->subst == 'game') { @@ -490,7 +483,7 @@ function bin5_index_wr_main(&$bin5, $remote_addr_full, $get, $post, $cookie) if ($table->turn == (BIN5_PLAYERS_N * BIN5_CARD_HAND)) { /* game finished */ log_wr(sprintf("GIOCO FINITO !!!")); - if ($table->rules_engine($bin5, $curtime, BIN5_RULES_FINISH, $user)) { + if ($table->rules->engine($bin5, $curtime, BIN5_RULES_FINISH, $user)) { for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bin5->user[$table->player[$i]]; $retar[$i] .= show_table($bin5, $user_cur, $user_cur->step+1, TRUE, TRUE); diff --git a/web/briskin5/stat-day.php b/web/briskin5/stat-day.php index d96cb6c..8d3dd3e 100644 --- a/web/briskin5/stat-day.php +++ b/web/briskin5/stat-day.php @@ -40,11 +40,8 @@ curl -d "pazz=$BRISK_PASS" "http://$BRISK_SITE/briskin5/stat-day.php?from=$(date $G_base = "../"; -$mlang_stat_day = array( 'normal match'=> array( 'it' => 'Partite normali', - 'en' => 'Normal matches' ), - 'special match' => array( 'it' => 'Partite speciali', - 'en' => 'Special matches'), - +// SYNC WITH bin5_tournaments table +$mlang_stat_day = array( 'info_total'=> array( 'it' => 'totali', 'en' => 'En totali') ); @@ -59,178 +56,6 @@ require_once("../Obj/dbase_${G_dbasetype}.phh"); require_once("Obj/briskin5.phh"); require_once("Obj/placing.phh"); -function main_file($curtime) -{ - GLOBAL $G_lang, $G_alarm_passwd; - $tri = array(); - $mon = array(); - $wee = array(); - - if (($fp = @fopen(LEGAL_PATH."/points.log", 'r')) == FALSE) { - echo "Open data file error"; - exit; - } - echo "prima
"; - - if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'r')) != FALSE) { - $skip = intval(fgets($fp_start)); - if ($skip > 0) - fseek($fp, $skip, SEEK_SET); - fclose($fp_start); - } - - if (($bdb = BriskDB::create()) == FALSE) { - echo "database connection failed"; - exit; - } - - $bdb->users_load(); - - for ($i = 0 ; $i < $bdb->count() ; $i++) { - $login = $bdb->getlogin_byidx($i); - $tri[$i] = new Ptsgam($login); - $mon[$i] = new Ptsgam($login); - $wee[$i] = new Ptsgam($login); - } - - // recalculate all the placings - // 1246428948|492e4e9e856b0|N|tre|172.22.1.90|STAT:BRISKIN5:FINISH_GAME|4a4afd4983039|6|3|tre|1|due|2|uno|-1| - while (!feof($fp)) { - $p = 0; - $bf = fgets($fp, 4096); - $ar = csplitter($bf, '|'); - // if not auth table, continue - if (count($ar) < 15) - continue; - - // echo $p++."
"; - if ($ar[7] >= TABLES_AUTH_N) - continue; - // echo $p++." ".$ar[5]."
"; - // if not FINISH_GAME line, continue - if ($ar[5] != "STAT:BRISKIN5:FINISH_GAME") - continue; - // echo $p++."
"; - // if to much old points, continue - if ($ar[0] < $curtime - TRI_LIMIT) { - if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'w')) != FALSE) { - $curpos = ftell($fp); - fwrite($fp_start, sprintf("%d\n", $curpos)); - fclose($fp_start); - } - - continue; - } - // echo $p++." ".BIN5_PLAYERS_N."
"; - - $found = FALSE; - $mult = 1; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) { - if ($ar[10+($i*2)] == $ar[10+($e*2)]) { - $mult = abs($ar[10+($i*2)]); - $found = TRUE; - } - } - if ($found) - break; - } - - if ($mult == 0) - continue; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - // echo $p." i) ".$i."
"; - $username = $ar[9+($i*2)]; - if (($item = $bdb->getitem_bylogin($username, $id)) == FALSE) { - echo "WARNING: the user [".$username."] NOT EXISTS!
"; - continue; - } - - // echo $item->login." id)".$id." ".$ar[10+($i*2)]." mult: ".$mult."
"; - $tri[$id]->add($ar[10+($i*2)] / $mult); - if ($ar[0] >= $curtime - MON_LIMIT) - $mon[$id]->add($ar[10+($i*2)] / $mult); - if ($ar[0] >= $curtime - WEE_LIMIT) - $wee[$id]->add($ar[10+($i*2)] / $mult); - } - // $p++; echo $p++."
"; - } - fclose($fp); - - usort($tri, ptsgam_cmp); - usort($mon, ptsgam_cmp); - usort($wee, ptsgam_cmp); - - echo "

TRI
\n"; - - if (($fplo = @fopen(LEGAL_PATH."/class_tri_lo.log", 'w')) == FALSE) { - echo "Open tri_lo failed
"; - exit; - } - if (($fphi = @fopen(LEGAL_PATH."/class_tri_hi.log", 'w')) == FALSE) { - echo "Open tri_hi failed
"; - exit; - } - - for ($i = 0 ; $i < count($tri) ; $i++) { - if ($tri[$i]->gam == 0.0) - continue; - printf("%s: %s (%d)
\n", $tri[$i]->username, $tri[$i]->snormpts(), $tri[$i]->gam); - if ($tri[$i]->gam >= TRI_MAX_GAMES) - fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam)); - else if ($tri[$i]->gam > TRI_MIN_GAMES) - fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam)); - } - fclose($fphi); - fclose($fplo); - - echo "

MON
\n"; - - if (($fplo = @fopen(LEGAL_PATH."/class_mon_lo.log", 'w')) == FALSE) { - echo "Open tri_lo failed
"; - exit; - } - if (($fphi = @fopen(LEGAL_PATH."/class_mon_hi.log", 'w')) == FALSE) { - echo "Open tri_hi failed
"; - exit; - } - - for ($i = 0 ; $i < count($mon) ; $i++) { - if ($mon[$i]->gam == 0.0) - continue; - printf("%s: %s (%d)
\n", $mon[$i]->username, $mon[$i]->snormpts(), $mon[$i]->gam); - if ($mon[$i]->gam >= MON_MAX_GAMES) - fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam)); - else if ($mon[$i]->gam > MON_MIN_GAMES) - fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam)); - } - fclose($fphi); - fclose($fplo); - - echo "

WEE
\n"; - if (($fplo = @fopen(LEGAL_PATH."/class_wee_lo.log", 'w')) == FALSE) { - echo "Open wee_lo failed
"; - exit; - } - if (($fphi = @fopen(LEGAL_PATH."/class_wee_hi.log", 'w')) == FALSE) { - echo "Open wee_hi failed
"; - exit; - } - - for ($i = 0 ; $i < count($wee) ; $i++) { - if ($wee[$i]->gam == 0.0) - continue; - printf("%s: %s (%d)
\n", $wee[$i]->username, $wee[$i]->snormpts(), $wee[$i]->gam); - if ($wee[$i]->gam >= WEE_MAX_GAMES) - fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam)); - else if ($wee[$i]->gam > WEE_MIN_GAMES) - fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam)); - } - fclose($fphi); - fclose($fplo); - -} - function main_pgsql($from, $to) { GLOBAL $G_lang, $G_dbpfx, $mlang_stat_day; @@ -252,10 +77,10 @@ function main_pgsql($from, $to) break; } - if (pg_query($bdb->dbconn->db(), "BEGIN") == FALSE) { - log_crit("stat-day: begin failed"); - break; - } + //if ($bdb->transaction("BEGIN") == FALSE) { + // log_crit("stat-day: begin failed"); + // break; + //} // retrieve list of active tournaments $trn_sql = sprintf("SELECT * FROM %sbin5_tournaments WHERE active = 1;", $G_dbpfx); @@ -295,12 +120,8 @@ SELECT m.code AS code, m.mazzo_next as minus_one_is_old 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, "

%s

", $mlang_stat_day[$trn_obj->name][$G_lang]); + printf("[Tournament [%s]], number of matches: %d\n", rules_id2descr($trn_obj->code, $G_lang), $tmt_n); + fprintf($fpexp, "

%s

", xcape(ucfirst(rules_id2descr($trn_obj->code, $G_lang)))); // loop on matches for ($m = 0 ; $m < $tmt_n ; $m++) { @@ -422,19 +243,21 @@ SELECT p.pts AS pts fprintf($fpexp, "<%s class='%s'>%d", ($tmt_obj->minus_one_is_old == -1 ? "td" : "th"), - $cla_nam, pow(2,$gam_obj->mult) * $pts, + $cla_nam, + pow(2,$gam_obj->mult) * $pts, ($tmt_obj->minus_one_is_old == -1 ? "td" : "th")); } if ($tmt_obj->minus_one_is_old != -1) { + $rules_name = rules_id2name($trn_obj->code); fprintf($fpexp, "", $users[$gam_obj->mazzo]['login'], - xcape( game_description($gam_obj->act, 'plain', $gam_obj->mult, + xcape( ${rules_name}::game_description($gam_obj->act, 'plain', $gam_obj->mult, $gam_obj->asta_win, ($gam_obj->asta_win != -1 ? $users[$gam_obj->asta_win]['login'] : ""), $gam_obj->friend, ($gam_obj->friend != -1 ? $users[$gam_obj->friend]['login'] : ""), - $gam_obj->pnt, $gam_obj->asta_pnt) ) + $gam_obj->pnt, $gam_obj->asta_pnt, $gam_obj->tourn_pts) ) ); } fprintf($fpexp, "\n"); @@ -470,15 +293,18 @@ SELECT sum(p.pts * (2^g.mult)) AS pts } } if ($t < $trn_n) { - log_crit("stat-day: t < trn_n"); + log_crit(sprintf("stat-day: t < trn_n (%d, %d)", $t, $trn_n)); break; } + // if ($bdb->transaction("COMMIT") == FALSE) { + // break; + // } $ret = (TRUE); } while (0); - if ($ret == FALSE) { - pg_query($bdb->dbconn->db(), "ROLLBACK"); - } + // if ($ret == FALSE) { + // $bdb->transaction("ROLLBACK"); + // } if ($fpexp != FALSE) { fclose($fpexp); } diff --git a/web/briskin5/statadm.php b/web/briskin5/statadm.php index a65acef..71d2321 100644 --- a/web/briskin5/statadm.php +++ b/web/briskin5/statadm.php @@ -3,7 +3,7 @@ * brisk - statadm.php * * Copyright (C) 2009-2012 Matteo Nastasi - * mailto: nastasi@alternativeoutput.it + * mailto: nastasi@alternativeoutput.it * matteo.nastasi@milug.org * web: http://www.alternativeoutput.it * @@ -25,13 +25,11 @@ /* line example: 1246428948|492e4e9e856b0|N|tre|172.22.1.90|STAT:BRISKIN5:FINISH_GAME|4a4afd4983039|6|3|tre|1|due|2|uno|-1| - + */ $G_base = "../"; -define('BIN5_TOURNAMENT_NORMAL', 1); - ini_set("max_execution_time", "240"); require_once("../Obj/brisk.phh"); @@ -41,178 +39,6 @@ require_once("../Obj/dbase_${G_dbasetype}.phh"); require_once("Obj/briskin5.phh"); require_once("Obj/placing.phh"); -function main_file($curtime) -{ - GLOBAL $G_alarm_passwd; - $tri = array(); - $mon = array(); - $wee = array(); - - if (($fp = @fopen(LEGAL_PATH."/points.log", 'r')) == FALSE) { - echo "Open data file error"; - exit; - } - echo "prima
"; - - if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'r')) != FALSE) { - $skip = intval(fgets($fp_start)); - if ($skip > 0) - fseek($fp, $skip, SEEK_SET); - fclose($fp_start); - } - - if (($bdb = BriskDB::create()) == FALSE) { - echo "database connection failed"; - exit; - } - - $bdb->users_load(); - - for ($i = 0 ; $i < $bdb->count() ; $i++) { - $login = $bdb->getlogin_byidx($i); - $tri[$i] = new Ptsgam($login); - $mon[$i] = new Ptsgam($login); - $wee[$i] = new Ptsgam($login); - } - - // recalculate all the placings - // 1246428948|492e4e9e856b0|N|tre|172.22.1.90|STAT:BRISKIN5:FINISH_GAME|4a4afd4983039|6|3|tre|1|due|2|uno|-1| - while (!feof($fp)) { - $p = 0; - $bf = fgets($fp, 4096); - $ar = csplitter($bf, '|'); - // if not auth table, continue - if (count($ar) < 15) - continue; - - // echo $p++."
"; - if ($ar[7] >= TABLES_AUTH_N) - continue; - // echo $p++." ".$ar[5]."
"; - // if not FINISH_GAME line, continue - if ($ar[5] != "STAT:BRISKIN5:FINISH_GAME") - continue; - // echo $p++."
"; - // if to much old points, continue - if ($ar[0] < $curtime - TRI_LIMIT) { - if (($fp_start = @fopen(LEGAL_PATH."/points.start", 'w')) != FALSE) { - $curpos = ftell($fp); - fwrite($fp_start, sprintf("%d\n", $curpos)); - fclose($fp_start); - } - - continue; - } - // echo $p++." ".BIN5_PLAYERS_N."
"; - - $found = FALSE; - $mult = 1; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) { - if ($ar[10+($i*2)] == $ar[10+($e*2)]) { - $mult = abs($ar[10+($i*2)]); - $found = TRUE; - } - } - if ($found) - break; - } - - if ($mult == 0) - continue; - for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - // echo $p." i) ".$i."
"; - $username = $ar[9+($i*2)]; - if (($item = $bdb->getitem_bylogin($username, $id)) == FALSE) { - echo "WARNING: the user [".$username."] NOT EXISTS!
"; - continue; - } - - // echo $item->login." id)".$id." ".$ar[10+($i*2)]." mult: ".$mult."
"; - $tri[$id]->add($ar[10+($i*2)] / $mult); - if ($ar[0] >= $curtime - MON_LIMIT) - $mon[$id]->add($ar[10+($i*2)] / $mult); - if ($ar[0] >= $curtime - WEE_LIMIT) - $wee[$id]->add($ar[10+($i*2)] / $mult); - } - // $p++; echo $p++."
"; - } - fclose($fp); - - usort($tri, ptsgam_cmp); - usort($mon, ptsgam_cmp); - usort($wee, ptsgam_cmp); - - echo "

TRI
\n"; - - if (($fplo = @fopen(LEGAL_PATH."/class_tri_lo.log", 'w')) == FALSE) { - echo "Open tri_lo failed
"; - exit; - } - if (($fphi = @fopen(LEGAL_PATH."/class_tri_hi.log", 'w')) == FALSE) { - echo "Open tri_hi failed
"; - exit; - } - - for ($i = 0 ; $i < count($tri) ; $i++) { - if ($tri[$i]->gam == 0.0) - continue; - printf("%s: %s (%d)
\n", $tri[$i]->username, $tri[$i]->snormpts(), $tri[$i]->gam); - if ($tri[$i]->gam >= TRI_MAX_GAMES) - fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam)); - else if ($tri[$i]->gam > TRI_MIN_GAMES) - fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($tri[$i]->username), $tri[$i]->pts, $tri[$i]->gam)); - } - fclose($fphi); - fclose($fplo); - - echo "

MON
\n"; - - if (($fplo = @fopen(LEGAL_PATH."/class_mon_lo.log", 'w')) == FALSE) { - echo "Open tri_lo failed
"; - exit; - } - if (($fphi = @fopen(LEGAL_PATH."/class_mon_hi.log", 'w')) == FALSE) { - echo "Open tri_hi failed
"; - exit; - } - - for ($i = 0 ; $i < count($mon) ; $i++) { - if ($mon[$i]->gam == 0.0) - continue; - printf("%s: %s (%d)
\n", $mon[$i]->username, $mon[$i]->snormpts(), $mon[$i]->gam); - if ($mon[$i]->gam >= MON_MAX_GAMES) - fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam)); - else if ($mon[$i]->gam > MON_MIN_GAMES) - fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($mon[$i]->username), $mon[$i]->pts, $mon[$i]->gam)); - } - fclose($fphi); - fclose($fplo); - - echo "

WEE
\n"; - if (($fplo = @fopen(LEGAL_PATH."/class_wee_lo.log", 'w')) == FALSE) { - echo "Open wee_lo failed
"; - exit; - } - if (($fphi = @fopen(LEGAL_PATH."/class_wee_hi.log", 'w')) == FALSE) { - echo "Open wee_hi failed
"; - exit; - } - - for ($i = 0 ; $i < count($wee) ; $i++) { - if ($wee[$i]->gam == 0.0) - continue; - printf("%s: %s (%d)
\n", $wee[$i]->username, $wee[$i]->snormpts(), $wee[$i]->gam); - if ($wee[$i]->gam >= WEE_MAX_GAMES) - fwrite($fphi, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam)); - else if ($wee[$i]->gam > WEE_MIN_GAMES) - fwrite($fplo, sprintf("%s|%d|%d|\n", xcapelt($wee[$i]->username), $wee[$i]->pts, $wee[$i]->gam)); - } - fclose($fphi); - fclose($fplo); - -} - function main_pgsql($curtime) { GLOBAL $G_dbpfx; @@ -227,20 +53,20 @@ function main_pgsql($curtime) $maxg = array( TRI_MAX_GAMES, MON_MAX_GAMES, WEE_MAX_GAMES ); do { - if (pg_query($bdb->dbconn->db(), "BEGIN") == FALSE) { + if ($bdb->transaction("BEGIN") == FALSE) { log_crit("statadm: begin failed"); break; } - - $mtc_sql = sprintf("CREATE TEMPORARY TABLE %sbin5_temp_matches ON COMMIT DROP AS SELECT m.code, max(g.tstamp) AS tstamp - FROM %sbin5_matches as m, %sbin5_games as g - WHERE m.tcode = %d AND m.code = g.mcode GROUP BY m.code, m.ttok", - $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL); + + $mtc_sql = sprintf("CREATE TEMPORARY TABLE %sbin5_temp_matches ON COMMIT DROP AS SELECT m.code, max(g.tstamp) AS tstamp + FROM %sbin5_matches as m, %sbin5_games as g + WHERE (m.tcode = %d OR m.tcode = %d) AND m.code = g.mcode GROUP BY m.code, m.ttok", + $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_OLDRULES, BIN5_TOURNAMENT_NO_DRAW); if (pg_query($bdb->dbconn->db(), $mtc_sql) == FALSE) { log_crit("statadm: temporary matches table creation [$mtc_sql] failed"); break; } - + $tmt_sql = sprintf("SELECT * FROM %sbin5_temp_matches WHERE tstamp < to_timestamp(%d)", $G_dbpfx, $curtime - TRI_LIMIT); @@ -254,39 +80,40 @@ function main_pgsql($curtime) log_crit("statadm: log file [$fname] open failed"); break; } - + $tmt_n = pg_numrows($tmt_pg); // get matches for ($m = 0 ; $m < $tmt_n ; $m++) { $tmt_obj = pg_fetch_object($tmt_pg, $m); - + $mtc_sql = sprintf("SELECT * from %sbin5_matches WHERE code = %d", $G_dbpfx, $tmt_obj->code); - + if (($mtc_pg = pg_query($bdb->dbconn->db(), $mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) { log_crit("statadm: matches row select failed"); break; } $mtc_obj = pg_fetch_object($mtc_pg, 0); - - if (fwrite($fp, sprintf("M|%d|%s|%d|\n", $mtc_obj->code, xcapelt($mtc_obj->ttok), $mtc_obj->tidx)) == FALSE) { + + if (fwrite($fp, sprintf("M|%d|%s|%d|%d|\n", $mtc_obj->code, xcapelt($mtc_obj->ttok), + $mtc_obj->tidx, $mtc_obj->tcode)) == FALSE) { log_crit("statadm: log file [$fname] write match failed"); break; } - + // get games associated to each match - $gam_sql = sprintf("SELECT code, mcode, EXTRACT(epoch FROM tstamp) AS tstamp FROM %sbin5_games + $gam_sql = sprintf("SELECT code, mcode, EXTRACT(epoch FROM tstamp) AS tstamp FROM %sbin5_games WHERE mcode = %d ORDER BY tstamp", $G_dbpfx, $mtc_obj->code); if (($gam_pg = pg_query($bdb->dbconn->db(), $gam_sql)) == FALSE) { log_crit("statadm: games row select failed"); break; } - + $gam_n = pg_numrows($gam_pg); for ($g = 0 ; $g < $gam_n ; $g++) { $gam_obj = pg_fetch_object($gam_pg, $g); - + if (fwrite($fp, sprintf("G|%d|%d|%d|\n", $gam_obj->mcode, $gam_obj->code, $gam_obj->tstamp)) == FALSE) { log_crit("statadm: log file [$fname] write game failed"); break; @@ -299,7 +126,7 @@ function main_pgsql($curtime) $pts_n = pg_numrows($pts_pg); for ($p = 0 ; $p < $pts_n ; $p++) { $pts_obj = pg_fetch_object($pts_pg, $p); - + if (fwrite($fp, sprintf("P|%d|%d|%d|\n", $pts_obj->gcode, $pts_obj->ucode, $pts_obj->pts)) == FALSE) { log_crit("statadm: log file [$fname] write pts failed"); break; @@ -310,7 +137,7 @@ function main_pgsql($curtime) } if ($g < $gam_n) break; - + // delete match and all it's childs (games and points) $del_sql = sprintf("DELETE FROM %sbin5_matches WHERE code = %d", $G_dbpfx, $tmt_obj->code); @@ -318,7 +145,7 @@ function main_pgsql($curtime) log_crit("statadm: matches row deletion failed"); break; } - + } if ($m < $tmt_n) break; @@ -330,7 +157,7 @@ function main_pgsql($curtime) log_crit("statadm: truncate failed"); break; } - + for ($dtime = 0 ; $dtime < count($limi) ; $dtime++) { $old_score = array( 1000000000, 1000000000); $old_gam = array( -1, -1); @@ -338,16 +165,17 @@ function main_pgsql($curtime) // TAG: POINTS_MANAGEMENT $pla_sql = sprintf("SELECT (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) as score, sum(p.pts) as points, count(p.pts) as games, u.code as ucode, u.login as login - FROM %sbin5_points as p, %sbin5_games as g, %sbin5_matches as m, %susers as u - WHERE m.tcode = %d AND m.code = g.mcode AND + FROM %sbin5_points as p, %sbin5_games as g, %sbin5_matches as m, %susers as u + WHERE (m.tcode = %d OR m.tcode = %d) AND m.code = g.mcode AND ( (u.type & (CAST (X'ff0000' as integer))) <> (CAST (X'800000' as integer)) ) AND g.tstamp > to_timestamp(%d) AND g.tstamp <= to_timestamp(%d) AND p.ucode = u.code AND p.gcode = g.code AND p.pts != 0 GROUP BY u.code, u.login - ORDER BY (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) DESC, + ORDER BY (float4(sum(p.pts)) * 100.0 ) / float4(count(p.pts)) DESC, count(p.pts) DESC", - $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, BIN5_TOURNAMENT_NORMAL, + $G_dbpfx, $G_dbpfx, $G_dbpfx, $G_dbpfx, + BIN5_TOURNAMENT_OLDRULES, BIN5_TOURNAMENT_NO_DRAW, $curtime - $limi[$dtime], $curtime); // log_crit("statadm: INFO: [$pla_sql]"); @@ -357,7 +185,7 @@ function main_pgsql($curtime) log_crit("statadm: main placement select failed [$pla_sql]"); break; } - + for ($i = 0 ; $i < pg_numrows($pla_pg) ; $i++) { $pla_obj = pg_fetch_object($pla_pg,$i); if ($pla_obj->games < $ming[$dtime]) @@ -367,22 +195,22 @@ function main_pgsql($curtime) $subty = 0; else $subty = 1; - + $ty = ($dtime * 2) + $subty; - + if ($pla_obj->games != $old_gam[$subty] || $pla_obj->score != $old_score[$subty]) { $rank[$subty]++; } $new_sql = sprintf("INSERT INTO %sbin5_places (type, rank, ucode, login, pts, games, score) VALUES (%d, %d, %d, '%s', %d, %d, %f);", - $G_dbpfx, $ty, $rank[$subty], $pla_obj->ucode, escsql($pla_obj->login), + $G_dbpfx, $ty, $rank[$subty], $pla_obj->ucode, escsql($pla_obj->login), $pla_obj->points, $pla_obj->games, $pla_obj->score); - if ( ! (($new_pg = pg_query($bdb->dbconn->db(), $new_sql)) != FALSE && + if ( ! (($new_pg = pg_query($bdb->dbconn->db(), $new_sql)) != FALSE && pg_affected_rows($new_pg) == 1) ) { log_crit("statadm: new place insert failed: ".print_r($pla_obj, TRUE)); - break; + break; } - + $old_gam[$subty] = $pla_obj->games; $old_score[$subty] = $pla_obj->score; } // for ($i = 0 ; $i < pg_numrows($pla_pg) ; $i++) { @@ -396,19 +224,19 @@ function main_pgsql($curtime) $mti_sql = sprintf("UPDATE %sbin5_places_mtime SET mtime = (to_timestamp(%d)) WHERE code = 0;", $G_dbpfx, $curtime); - if ( ! (($mti_pg = pg_query($bdb->dbconn->db(), $mti_sql)) != FALSE && + if ( ! (($mti_pg = pg_query($bdb->dbconn->db(), $mti_sql)) != FALSE && pg_affected_rows($mti_pg) == 1) ) { log_crit("statadm: new mtime insert failed."); - break; + break; } - - if (pg_query($bdb->dbconn->db(), "COMMIT") == FALSE) { + + if ($bdb->transaction("COMMIT") == FALSE) { break; } return (TRUE); } while (0); - pg_query($bdb->dbconn->db(), "ROLLBACK"); + $bdb->transaction("ROLLBACK"); return (FALSE); } @@ -416,7 +244,7 @@ function main_pgsql($curtime) function main() { GLOBAL $G_dbasetype, $G_alarm_passwd, $pazz; - + echo "Inizio.
"; mop_flush(); if ($pazz != $G_alarm_passwd) { @@ -424,9 +252,9 @@ function main() mop_flush(); exit; } - + $fun_name = "main_${G_dbasetype}"; - + $ctime = time(); if (BIN5_PLAYERS_N != 5) @@ -437,7 +265,7 @@ function main() echo "Success.
\n"; else echo "Failed.
\n"; - + echo "Fine.\n"; mop_flush(); } diff --git a/web/index.php b/web/index.php index 155935a..478d880 100644 --- a/web/index.php +++ b/web/index.php @@ -685,8 +685,9 @@ google_color_url = "000000";
%s%s
@@ -995,7 +996,7 @@ supported by:
'.$altout_support_big.'
- + ' . ( /* NOTE: here facebook or fake facebook */ (!$G_is_local && $_cookie_law_3party == 'true') ? '
diff --git a/web/room.css b/web/room.css index 02d8cd6..9f4946b 100644 --- a/web/room.css +++ b/web/room.css @@ -138,7 +138,7 @@ table.placings td } table.placing { - background-image: url('img/najole_wh_light.png'); + background-image: url('img/lines_light.png'); background-attachment: fixed; border: 1px solid gray; @@ -149,8 +149,14 @@ table.placing { table.placing th { border: 1px solid gray; - text-align: center; - padding: 4px; + text-align: right; + padding: 8px; + min-width: 50px; +} + +table.placing th span { + font-weight: normal; + float: left; } table.placing td { @@ -196,7 +202,7 @@ table.room_tab td { -moz-border-radius: 8px; border-radius: 8px; - background-image: url('img/najole_wh_light.png'); + background-image: url('img/lines_light.png'); background-attachment: fixed; width: 25%; @@ -244,7 +250,7 @@ table.room_standup { border-spacing: 0px; padding: 0px; - background-image: url('img/najole_wh_light.png'); + background-image: url('img/lines_light.png'); background-attachment: fixed; } @@ -264,7 +270,7 @@ table.login { border: 1px solid gray; margin-top: 8px; - background-image: url('img/najole_wh_light.png'); + background-image: url('img/lines_light.png'); background-attachment: fixed; } @@ -316,7 +322,7 @@ div.esco { -moz-border-radius: 4px; border-radius: 4px; - background-image: url('img/najole_wh_light.png'); + background-image: url('img/lines_light.png'); background-attachment: fixed; } diff --git a/web/room.js b/web/room.js index 38a3d2a..26d78e9 100644 --- a/web/room.js +++ b/web/room.js @@ -639,7 +639,7 @@ function mesgtoadm_formtext_hilite(form) function j_check_email(email, ret) { - if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,10})+$/.test(email)) + if (/^\w+([\.-]*\w+)*@\w+([\.-]*\w+)*(\.\w{2,10})+$/.test(email)) return (true); ret.ret += (g_lang == 'en' ? "Invalid email address. " : "Indirizzo e-mail non valido."); diff --git a/web/usermgmt.php b/web/usermgmt.php index 3f52c36..307372c 100644 --- a/web/usermgmt.php +++ b/web/usermgmt.php @@ -233,7 +233,8 @@ SELECT usr.*, guar.login AS guar_login break; } } - } + } // else if ($action == "accept") { + do { if (($bdb = BriskDB::create()) == FALSE) { @@ -489,6 +490,108 @@ SELECT usr.*, guar.login AS guar_login } exit; } + + + else if ($action == "delete") { + foreach($_POST as $key => $value) { + if (substr($key, 0, 9) != "f_newuser") + continue; + + $id = (int)substr($key, 9); + if ($id <= 0) + continue; + + // check existence of username or email + $is_trans = FALSE; + $res = FALSE; + do { + if (($bdb = BriskDB::create()) == FALSE) + break; + + // retrieve list added users + $usr_sql = sprintf(" +SELECT usr.*, guar.login AS guar_login + FROM %susers AS usr + JOIN %susers AS guar ON guar.code = usr.guar_code + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) + AND usr.disa_reas = %d AND usr.code = %d;", + $G_dbpfx, $G_dbpfx, + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_TOBECHK, $id); + + + if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + $usr_n = pg_numrows($usr_pg); + if ($usr_n != 1) { + $status .= sprintf("Inconsistency for code %d, returned %d records, skipped.
", + $id, $usr_n); + break; + } + + $usr_obj = pg_fetch_object($usr_pg, 0); + + $bdb->transaction('BEGIN'); + $is_trans = TRUE; + + $del_sql = sprintf("DELETE FROM %susers WHERE code = %d;", + $G_dbpfx, $usr_obj->code); + + if (($del_pg = pg_query($bdb->dbconn->db(), $del_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + + // FIXME: add to index_wr.php strings + $subj = "Brisk: nickname rifiutato"; + // the same for both cases: + // if (($usr_obj->type & USER_FLAG_TY_APPR) == USER_FLAG_TY_APPR) { + $body_txt = sprintf('Ciao, sono l\' amministratore del sito di Brisk. + +Ti volevo segnalare che il nickname \'%s\' con cui ti volevi registrare +non ha superato la fase di verifica manuale; il motivo può essere +la sua illeggibilità per gli altri utenti o il contenuto poco ortodosso +o troppo aggressivo o o ci sono troppe cifre consecutive o qualcosa del genere. + +La procedura di registrazione va ripetuta. + +Saluti e buone partite, mop.', $usr_obj->login); + + $body_htm = sprintf('Ciao, sono l\' amministratore del sito di Brisk.

+Ti volevo segnalare che il nickname \'%s\' con cui ti volevi registrare +non ha superato la fase di verifica manuale; il motivo può essere +la sua illeggibilità per gli altri utenti o il contenuto poco ortodosso +o troppo aggressivo o o ci sono troppe cifre consecutive o qualcosa del genere.

+La procedura di registrazione va ripetuta.

+Saluti e buone partite, mop.', $usr_obj->login); + /* } */ + /* else { */ + /* $body_txt = sprintf($mlang_indwr['nu_mtext'][$G_lang], */ + /* $usr_obj->guar_login, $usr_obj->login, $confirm_page); */ + /* $body_htm = sprintf($mlang_indwr['nu_mhtml'][$G_lang], */ + /* $usr_obj->guar_login, $usr_obj->login, $confirm_page); */ + /* } */ + + if (brisk_mail($usr_obj->email, $subj, $body_txt, $body_htm) == FALSE) { + // mail error + fprintf(STDERR, "ERROR: mail send FAILED\n"); + break; + } + $status .= sprintf("user delete for %s: SUCCESS
", $usr_obj->login); + $bdb->transaction('COMMIT'); + $res = TRUE; + } while(FALSE); + if ($res == FALSE) { + $status .= sprintf("Error occurred during accept action
"); + if ($is_trans) + $bdb->transaction('ROLLBACK'); + break; + } + printf("Registration %s for login %s deleted
\n", $usr_obj->code, $usr_obj->login); + } + } else { do { if (($bdb = BriskDB::create()) == FALSE) {
'.$banner_top_left.'
'.(($G_with_topbanner || $G_with_donors) ? '
' : '').'
- - '.$mlang_room['headline'][$G_lang].'
+ ' +/* ciao Prof' */ + .$mlang_room['headline'][$G_lang].'
'.( ($G_with_topbanner || $G_with_donors) ? sprintf('
%s
', ($G_with_topbanner ? $G_topbanner : "
donatori
") ) : '').'