X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=3da15451732e63b85bf1304502167c5f396f7144;hb=8fe1e432c4661ebf186026f920d778d37dbe0953;hp=1afb8b2ce5f9fd69d750713791e60bc7b441621a;hpb=cb0ba3960a1911a231d114b25560e8bce211a79a;p=brisk.git
diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh
index 1afb8b2..3da1545 100644
--- a/web/briskin5/Obj/briskin5.phh
+++ b/web/briskin5/Obj/briskin5.phh
@@ -2,7 +2,7 @@
/*
* brisk - briskin5.phh
*
- * Copyright (C) 2006-2009 Matteo Nastasi
+ * Copyright (C) 2006-2011 Matteo Nastasi
* mailto: nastasi@alternativeoutput.it
* matteo.nastasi@milug.org
* web: http://www.alternativeoutput.it
@@ -20,17 +20,83 @@
* not, write to the Free Software Foundation, Inc, 59 Temple Place -
* Suite 330, Boston, MA 02111-1307, USA.
*
- * $Id$
- *
*/
-define(BRISKIN5_PLAYERS_N, 3);
-define(BRISKIN5_MAX_PLAYERS, BRISKIN5_PLAYERS_N);
-// define(BRISKIN5_SHM_MIN, (50000 * BRISKIN5_MAX_PLAYERS));
-define(BRISKIN5_SHM_MIN, 32768);
-define(BRISKIN5_SHM_MAX, (BRISKIN5_SHM_MIN + 1048576));
-define(BRISKIN5_SHM_DLT, 32768);
+define(BIN5_PLAYERS_N, 3);
+define(BIN5_MAX_PLAYERS, BIN5_PLAYERS_N);
+// define(BIN5_SHM_MIN, (50000 * BIN5_MAX_PLAYERS));
+define(BIN5_SHM_MIN, 32768);
+define(BIN5_SHM_MAX, (BIN5_SHM_MIN + 1048576));
+define(BIN5_SHM_DLT, 32768);
+define(BIN5_PROXY_PATH, PROXY_PATH."/bin5");
+
+$mlang_bin5_bin5 = array(
+ 'info_part' => array( 'it' => '
Nell\'ultima mano ha chiamato %s, il socio era %s,
',
+ 'en' => '
In the last hand the declarer was %s, the partner was %s,
'),
+ 'info_capp' => array( 'it' => 'hanno fatto cappotto EBBRAVI!.
',
+ 'en' => 'and they made capot WELL DONE!.
'),
+ 'info_pnt' => array( 'it' => 'dovevano fare %s punti e ne hanno fatti %d: hanno %s.
',
+ 'en' => 'they had to do %s points and they had made %d: they have %s.
'),
+ 'info_alea' => array( 'it' => 'almeno ',
+ 'en' => 'at least '),
+ 'info_more' => array( 'it' => 'più di 60',
+ 'en' => 'over 60'),
+ 'info_win' => array( 'it' => 'vinto',
+ 'en' => 'win'),
+ 'info_peer' => array( 'it' => 'pareggiato',
+ 'en' => 'drew'),
+ 'info_lost' => array( 'it' => 'perso',
+ 'en' => 'lost'),
+
+ 'info_alon' => array( 'it' => '
Nell\'ultima partita %s si è chiamato in mano,
',
+ 'en' => '
In the last hand %s play alone against each other,
'),
+ 'info_apnt' => array( 'it' => 'doveva fare %s punti e ne ha fatti %d: ha %s.
',
+ 'en' => 'he/she had to do %s points and they had made %d: he/she had %s.
'),
+ 'info_acap' => array( 'it' => 'ha fatto cappotto EBBRAVO!.
',
+ 'en' => 'and he/she made capot WELL DONE!.
'),
+
+ 'info_omul' => array( 'it' => ' La partita valeva %s.',
+ 'en' => ' EN: The game was worth %s.' ),
+
+ 'info_yturn'=> array( 'it' => ' tocca a te giocare.',
+ 'en' => ' it\'s your turn.'),
+ 'info_turn' => array( 'it' => 'tocca a %s giocare.',
+ '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_shuf' => array( 'it' => 'Il mazzo a %s, ',
+ 'en' => '%s shuffled the cards, '),
+ 'btn_bkgame'=> array( 'it' => 'torna alla partita',
+ 'en' => 'back to the game'),
+ 'call_wptn' => array( 'it' => '
con %d punti',
+ 'en' => '
with %d points'),
+ 'call_ycall'=> array( 'it' => 'Chiami%s:',
+ 'en' => 'Call%s:'),
+ 'call_call' => array( 'it' => 'Chiama %s%s:',
+ 'en' => 'The declarer is %s%s:')
+
+
+ );
+
+ // MLANG
+ $table_wellarr = Array( 'it' => Array ( 'Benvenuto al tavolo. Se almeno tre giocatori non sbloccano l\'uscita cliccando il lucchetto, chi esce non può risedersi a un qualunque tavolo per '.floor(BAN_TIME/60).' minuti.'),
+ 'en' => Array ( 'EN Benvenuto al tavolo. Se almeno tre giocatori non sbloccano l\'uscita cliccando il lucchetto, chi esce non può risedersi a un qualunque tavolo per '.floor(BAN_TIME/60).' minuti.') );
+
+function multoval($mult)
+{
+ GLOBAL $G_lang;
+
+ if ($mult == 2)
+ return ($G_lang == 'en' ? 'double' : 'doppio');
+ if ($mult == 3)
+ return ($G_lang == 'en' ? 'triple' : 'triplo');
+ else if ($mult == 4)
+ return ($G_lang == 'en' ? 'quadruple' : 'quadruplo');
+ else
+ return (sprintf(($G_lang == 'en' ? "%d-ple" : "%d-plo"), $mult));
+}
-$table_wellarr = Array ( 'Benvenuto al tavolo. Se almeno tre giocatori non sbloccano l\'uscita cliccando il lucchetto, chi esce non può risedersi a un qualunque tavolo per '.floor(BAN_TIME/60).' minuti.');
class Card {
var $value; /* 0 - 39 card value */
@@ -72,7 +138,7 @@ class Card {
}
} // end class Card
-class Table_briskin5 extends Table {
+class Bin5_table extends Table {
var $card; // il mazzo di carte
var $mazzo; // chi e' di mazzo
var $gstart;
@@ -94,22 +160,21 @@ class Table_briskin5 extends Table {
var $old_reason;
var $old_asta_pnt;
+ var $old_mult;
var $old_pnt;
var $old_win;
var $old_friend;
- function Table_briskin5()
+ function Bin5_table()
{
}
/* CREATE() NOT USED
- function &create($idx)
+ function create($idx)
{
- GLOBAL $G_false;
-
- if (($thiz =& new Table_briskin5()) == FALSE)
- return ($G_false);
+ if (($thiz =& new Bin5_table()) == FALSE)
+ return (FALSE);
$thiz->create($idx);
@@ -130,6 +195,7 @@ class Table_briskin5 extends Table {
$thiz->old_reason = "";
$thiz->old_asta_pnt = -1;
+ $thiz->old_mult = -1;
$thiz->old_pnt = -1;
$thiz->old_win = -1;
$thiz->old_friend = -1;
@@ -139,12 +205,10 @@ class Table_briskin5 extends Table {
*/
/* CLONE() NOT USED
- function &clone(&$from)
+ function myclone(&$from)
{
- GLOBAL $G_false;
-
- if (($thiz =& new Table_briskin5()) == FALSE)
- return ($G_false);
+ if (($thiz =& new Bin5_table()) == FALSE)
+ return (FALSE);
parent::copy($from);
@@ -169,6 +233,7 @@ class Table_briskin5 extends Table {
$thiz->old_reason = $from->old_reason;
$thiz->old_asta_pnt = $from->old_asta_pnt;
+ $thiz->old_mult = $from->mult;
$thiz->old_pnt = $from->old_pnt;
$thiz->old_win = $from->old_win;
$thiz->old_friend = $from->old_friend;
@@ -182,18 +247,17 @@ class Table_briskin5 extends Table {
parent::copy($from);
}
- function &spawn(&$from)
+ function spawn(&$from)
{
- GLOBAL $G_false;
-
- if (($thiz =& new Table_briskin5()) == FALSE)
- return ($G_false);
+ if (($thiz =& new Bin5_table()) == FALSE)
+ return (FALSE);
$thiz->parentcopy($from);
log_main("PLAYER_N - spawn.".$thiz->player_n);
- $thiz->card = &$thiz->bunch_create();
+ $thiz->card = array();
+ $thiz->bunch_create();
$thiz->mazzo = rand(0,PLAYERS_N-1);
$thiz->points_n = 0;
$thiz->mult = 1;
@@ -211,28 +275,39 @@ class Table_briskin5 extends Table {
}
- function &bunch_create()
+ // function bunch_create_old() function AND
+ // {
+ // $ret = array();
+ //
+ // for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ // // for ($i = 0 ; $i < 40 ; $i++) {
+ // $ret[$i] =& new Card($i, 'bunch', 'no_owner');
+ // }
+ //
+ // $oret = &$ret;
+ // return ($oret);
+ // }
+
+ function bunch_create()
{
- $ret = array();
-
- for ($i = 0 ; $i < 40 ; $i++) {
- $ret[$i] =& new Card($i, 'bunch', 'no_owner');
- }
-
- $oret = &$ret;
- return ($oret);
+ $ret = array();
+
+ for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ $this->card[$i] = new Card($i, 'bunch', 'no_owner');
+ }
}
function bunch_make()
{
+ log_main("bunch_make start");
$ct = array(0,0,0,0,0);
mt_srand(make_seed());
- for ($i = 39 ; $i >= 0 ; $i--)
+ for ($i = (BIN5_PLAYERS_N == 5 ? 40 : 24) - 1 ; $i >= 0 ; $i--)
$rest[$i] = $i;
- for ($i = 39 ; $i >= 0 ; $i--) {
+ for ($i = (BIN5_PLAYERS_N == 5 ? 40 : 24) - 1 ; $i >= 0 ; $i--) {
$rn = rand(0, $i);
if ($rn == 0)
@@ -240,15 +315,16 @@ class Table_briskin5 extends Table {
$id = $rest[$rn];
- $owner = $i % PLAYERS_N;
+ $owner = $i % BIN5_PLAYERS_N;
$this->card[$id]->assign('hand', $owner);
$rest[$rn] = $rest[$i];
// $pubbpos[$rn2] = $pubbpos[$i];
}
+ log_main("bunch_make end");
}
- function init(&$userarr)
+ function init($userarr)
{
/* MOVED INTO SPAWN
$this->mazzo = rand(0,PLAYERS_N-1);
@@ -257,24 +333,24 @@ class Table_briskin5 extends Table {
$this->old_win = -1;
$this->old_reason = "";
*/
- for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$this->total[$i] = 0;
- $user_cur = &$userarr[$this->player[$i]];
+ $user_cur = $userarr[$this->player[$i]];
$user_cur->exitislock = TRUE;
}
log_main("table::init: ci siamo");
}
- function game_init(&$userarr)
+ function game_init($userarr)
{
log_rd2("GSTART 4");
- $this->gstart = ($this->mazzo+1) % PLAYERS_N;
+ $this->gstart = ($this->mazzo+1) % BIN5_PLAYERS_N;
$this->bunch_make();
- $this->asta_pla_n = PLAYERS_N;
+ $this->asta_pla_n = BIN5_PLAYERS_N;
$this->asta_card = -1;
$this->asta_pnt = 60;
$this->asta_win = -1;
@@ -282,20 +358,21 @@ class Table_briskin5 extends Table {
$this->friend = -1;
$this->turn = 0;
- for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$this->asta_pla[$i] = TRUE;
- $user_cur = &$userarr[$this->player[$i]];
+ $user_cur = $userarr[$this->player[$i]];
$user_cur->subst = 'asta';
$user_cur->asta_card = -2;
$user_cur->asta_pnt = -1;
$user_cur->handpt = $this->hand_points($i);
// SEE function calculate_points(&$table)
}
+ log_rd2("GEND 4");
}
function game_next()
{
- $this->mazzo = ($this->mazzo + 1) % PLAYERS_N;
+ $this->mazzo = ($this->mazzo + 1) % BIN5_PLAYERS_N;
}
@@ -305,7 +382,8 @@ class Table_briskin5 extends Table {
$tot = 0;
- for ($i = 0 ; $i < 40 ; $i++) {
+ for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ // for ($i = 0 ; $i < 40 ; $i++) {
if ($this->card[$i]->owner != $idx)
continue;
@@ -317,9 +395,9 @@ class Table_briskin5 extends Table {
}
- function exitlock_show(&$userarr, $table_pos)
+ function exitlock_show($userarr, $table_pos)
{
- $ct = $this->exitlock_calc(&$userarr, $table_pos);
+ $ct = $this->exitlock_calc($userarr, $table_pos);
$ret = sprintf('exitlock_show(%d, %s);', $ct,
($userarr[$this->player[$table_pos]]->exitislock ? 'true' : 'false'));
@@ -337,97 +415,273 @@ class Table_briskin5 extends Table {
return ($ct);
}
-} // end class Table_briskin5
-
+} // end class Bin5_table
+define(BIN5_USER_FLAG_RING_ENDAUCT, 0x01);
-class User_briskin5 extends User {
- var $asta_card; //
- var $asta_pnt; //
- var $handpt; // Total card points at the beginning of the current hand.
- var $exitislock; // Player can exit from the table ?
-
- function User() {
- }
-
- /* CREATE NOT USED
- function &create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
- GLOBAL $G_false;
-
- if (($thiz =& new User()) == FALSE)
- return ($G_false);
-
- $thiz->asta_card = -2;
- $thiz->asta_pnt = -1;
- $thiz->handpt = -1;
- $thiz->exitislock = TRUE;
-
- return ($thiz);
- }
- */
-
- function parentcopy(&$from)
- {
- parent::copy($from);
- }
-
- function copy(&$from)
- {
- $this->parentcopy($from);
-
- $this->asta_card = $from->asta_card;
- $this->asta_pnt = $from->asta_pnt;
- $this->handpt = $from->handpt;
- $this->exitislock = $from->exitislock;
- }
+class Bin5_user extends User {
+ var $asta_card; //
+ var $asta_pnt; //
+ var $handpt; // Total card points at the beginning of the current hand.
+ var $exitislock; // Player can exit from the table ?
+ var $privflags; // Flags for briskin5 only
+
+ function User() {
+ }
+
+ /* CREATE NOT USED
+ function create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
+ if (($thiz =& new User()) == FALSE)
+ return (FALSE);
+
+ $thiz->asta_card = -2;
+ $thiz->asta_pnt = -1;
+ $thiz->handpt = -1;
+ $thiz->exitislock = TRUE;
+ $thiz->privflags = 0;
+
+ return ($thiz);
+ }
+ */
+
+ function parentcopy(&$from)
+ {
+ parent::copy($from);
+ }
+
+ function copy(&$from)
+ {
+ $this->parentcopy($from);
+
+ $this->asta_card = $from->asta_card;
+ $this->asta_pnt = $from->asta_pnt;
+ $this->handpt = $from->handpt;
+ $this->exitislock = $from->exitislock;
+ $this->privflags = $from->privflags;
+ }
+
+ /* CLONE NOT USED
+ function myclone(&$from)
+ {
+ if (($thiz =& new User()) == FALSE)
+ return (FALSE);
+
+ $thiz->copy($from);
+
+ return ($thiz);
+ }
+ */
+
+ function spawn($from, $table, $table_pos)
+ {
+ GLOBAL $CO_bin5_pref_ring_endauct;
+
+ if (($thiz = new Bin5_user()) == FALSE)
+ return (FALSE);
+
+ $thiz->parentcopy($from);
+
+ /* NOTE: at this moment idx and table_pos fields have the same value
+ but diffentent functions, we keep them separated for a while */
+ $thiz->idx = $table_pos;
+ $thiz->asta_card = -2;
+ $thiz->asta_pnt = -1;
+ $thiz->handpt = -1;
+ $thiz->exitislock = TRUE;
+
+ log_wr("Bin5 constructor");
+
+ $this->privflags = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0;
+
+ $thiz->table_orig = $table;
+ $thiz->table = 0;
+ $thiz->table_pos = $table_pos;
+
+ $thiz->step_inc();
+
+ return ($thiz);
+ }
- /* CLONE NOT USED
- function &clone(&$from)
- {
- GLOBAL $G_false;
+ function step_set($step)
+ {
+ $this->step = $step & 0x7fffffff;
+
+ return TRUE;
+ }
- if (($thiz =& new User()) == FALSE)
- return ($G_false);
+ function step_inc($delta = 1) {
+ $this->step += $delta;
+ /* modularization because unpack() not manage unsigned 32bit int correctly */
+ $this->step &= 0x7fffffff;
+
+ return (TRUE);
+ }
- $thiz->copy($from);
+ static function load_step($sess)
+ {
+ $fp = FALSE;
+ do {
+ if (validate_sess($sess) == FALSE)
+ break;
+
+ if (file_exists(BIN5_PROXY_PATH) == FALSE)
+ mkdir(BIN5_PROXY_PATH, 0775, TRUE);
+ if (($fp = @fopen(BIN5_PROXY_PATH."/".$sess.".step", 'rb')) == FALSE)
+ break;
+ if (($s = fread($fp, 8)) == FALSE)
+ break;
+ if (mb_strlen($s, "ASCII") != 8)
+ break;
+ $arr = unpack('Ls/Li', $s);
+ fclose($fp);
+
+ // log_rd2("A0: ".$arr[0]." A1: ".$arr[1]);
+ return ($arr);
+ } while (0);
+
+ if ($fp != FALSE)
+ fclose($fp);
+
+ log_rd2("STEP_GET [".$sess."]: return false ");
+
+ return (FALSE);
+ }
- return ($thiz);
- }
- */
-
- function &spawn(&$from, $table, $table_pos)
- {
- GLOBAL $G_false;
+ function save_step()
+ {
+ do {
+ if (validate_sess($this->sess) == FALSE)
+ break;
+ if (file_exists(BIN5_PROXY_PATH) == FALSE)
+ mkdir(BIN5_PROXY_PATH, 0775, TRUE);
+ if (($fp = @fopen(BIN5_PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE)
+ break;
+ fwrite($fp, pack("LL",$this->step, $this->idx));
+ fclose($fp);
+
+ log_main("step_set [".$this->sess. "] [".$this->step."]");
+
+ return (TRUE);
+ } while (0);
+
+ return (FALSE);
+ }
- if (($thiz =& new User_briskin5()) == FALSE)
- return ($G_false);
- $thiz->parentcopy($from);
+ static function load_data($tab_id, $id, $sess)
+ {
+ log_main("Bin5_user::load_data: tab_id [".$tab_id."] id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] ");
+
+ do {
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$tab_id."/user".$id, "B")) == -1) {
+ log_main("ftok failed");
+ break;
+ }
+
+ if (($shm_sz = sharedmem_sz($tok)) == -1) {
+ log_main("shmop_open failed");
+ }
+
+ if ($shm_sz == -1)
+ $shm_sz = SHM_DIMS_U_MIN;
+
+ if ($shm = shm_attach($tok, $shm_sz)) {
+ $user = @shm_get_var($shm, $tok);
+
+ if ($sess != FALSE && $user->sess != $sess) {
+ break;
+ }
+ log_only("user == ".($user == FALSE ? "FALSE" : "TRUE")." user === ".($user === FALSE ? "FALSE" : "TRUE")." user isset ".(isset($user) ? "TRUE" : "FALSE"));
+
+ if ($user == FALSE) {
+ log_only("INIT MAIN DATA");
+
+ // SHSPLIT FIXME: init_data for User class ??
+ $user = User::create($id, "", "");
+ if (@shm_put_var($shm, $tok, $user) == FALSE) {
+ log_only("PUT_VAR FALLITA ".strlen(serialize($user)));
+ log_only(serialize($user));
+ }
+ }
+ else {
+ if ($sess != FALSE) {
+ // This part isn't strictly required but is good to verify
+ // the coerence of cached and User class saved value of step field.
+ $old_step = $user->step;
+ $arr = Bin5_user::load_step($sess);
+ $user->step = $arr['s'];
+ if ($old_step != $user->step) {
+ log_crit("Bin5:: steps are diffetents User->step ".$user->step." Old_step: ".$old_step);
+ }
+
+ }
+ }
+
+ $user->shm_sz = $shm_sz;
+
+ shm_detach($shm);
+ }
+
+ //
+ // SHSPLIT: load users from the shared memory
+ //
+ return ($user);
+ } while (0);
+
+ log_crit("Bin5_user::load_data:ret FALSE");
+
+ return (FALSE);
+ }
- $thiz->asta_card = -2;
- $thiz->asta_pnt = -1;
- $thiz->handpt = -1;
- $thiz->exitislock = TRUE;
+ static function save_data($user, $tab_id, $id)
+ {
+ GLOBAL $sess;
+
+ $shm = FALSE;
+
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$tab_id."/user".$id, "B")) == -1) {
+ return (FALSE);
+ }
+ while ($user->shm_sz < SHM_DIMS_U_MAX) {
+ if (($shm = shm_attach($tok, $user->shm_sz)) == FALSE)
+ break;
+
+ // log_only("PUT_VAR DI ".strlen(serialize($user)));
+ if (shm_put_var($shm, $tok, $user) != FALSE) {
+ shm_detach($shm);
+ $user->save_step();
+ log_main("User[".$id."] saved.");
+ return (TRUE);
+ }
+ if (shm_remove($shm) === FALSE) {
+ log_only("REMOVE FALLITA");
+ break;
+ }
+ shm_detach($shm);
+ $user->shm_sz += SHM_DIMS_U_DLT;
+ }
+
+ if ($shm)
+ shm_detach($shm);
+
+ return (FALSE);
+ }
- $thiz->table_orig = $table;
- $thiz->table = 0;
- $thiz->table_pos = $table_pos;
+} // end class Bin5_user
- return ($thiz);
- }
-} // end class User_briskin5
+class Bin5 {
+ static $delta_t = array();
-class Briskin5 {
var $user;
var $table;
var $comm; // commands for many people
var $step; // current step of the comm array
- var $garbage_timeout;
+ // externalized var $garbage_timeout;
var $shm_sz;
var $table_idx;
@@ -436,44 +690,44 @@ class Briskin5 {
var $the_end;
var $tok;
- function Briskin5 (&$room, $table_idx, $table_token) {
+ function Bin5 ($room, $table_idx, $table_token) {
$this->user = array();
$this->table = array();
$this->the_end = FALSE;
- $this->shm_sz = BRISKIN5_SHM_MIN;
- if (($this->tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
+ $this->shm_sz = BIN5_SHM_MIN;
+ if (($this->tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1) {
echo "FTOK FAILED";
exit;
}
- $user =& $room->user;
- $table =& $room->table[$table_idx];
+ $user = $room->user;
+ $table = $room->table[$table_idx];
- log_wr("Briskin5 constructor");
+ log_wr("Bin5 constructor");
for ($i = 0 ; $i < $table->player_n ; $i++) {
$user[$table->player[$i]]->table_token = $table_token;
- $this->user[$i] =& User_briskin5::spawn(&$user[$table->player[$i]], $table_idx, $i);
+ $this->user[$i] = Bin5_user::spawn($user[$table->player[$i]], $table_idx, $i);
}
- $this->table[0] =& Table_briskin5::spawn(&$table);
+ $this->table[0] = Bin5_table::spawn(&$table);
- log_main("TABLE_OLD_WIN - Briskin5:".$this->table[0]->old_win);
+ log_main("TABLE_OLD_WIN - Bin5:".$this->table[0]->old_win);
$this->table_idx = $table_idx;
$this->table_token = $table_token;
- $this->garbage_timeout = 0;
+ Bin5::garbage_time_expire_set(0);
- log_wr("Briskin5 constructor end");
+ log_wr("Bin5 constructor end");
}
- function &get_user($sess, &$idx)
+ function get_user($sess, &$idx)
{
- GLOBAL $PHP_SELF, $G_false;
+ GLOBAL $PHP_SELF;
if (validate_sess($sess)) {
- for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
if (strcmp($sess, $this->user[$i]->sess) == 0) {
// find it
$idx = $i;
@@ -482,27 +736,28 @@ class Briskin5 {
}
}
log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
- // for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++)
+ // for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++)
// log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
}
else {
log_main(sprintf("get_user: Wrong strlen [%s]",$sess));
}
- return ($G_false);
+ return (FALSE);
}
function garbage_manager($force)
{
-
+ GLOBAL $G_base;
+
/* Garbage collector degli utenti in timeout */
$ismod = FALSE;
$curtime = time();
- if ($force || $this->garbage_timeout < $curtime) {
-
- for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
- $user_cur = &$this->user[$i];
+ // externalized if ($force || $this->garbage_timeout < $curtime) {
+ if ($force || Bin5::garbage_time_is_expired($curtime)) {
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
+ $user_cur = $this->user[$i];
if ($user_cur->sess == "" ||
($user_cur->stat == 'table' && ($user_cur->subst == 'shutdowned' || $user_cur->subst == 'shutdowner')))
continue;
@@ -523,37 +778,40 @@ class Briskin5 {
*/
- $this->table_wakeup(&$user_cur);
+ /* se gli altri utenti non erano d'accordo questo utente viene bannato */
+ $remcalc = $this->table[0]->exitlock_calc(&$this->user, $user_cur->table_pos);
+ if ($remcalc < 3) {
+ require_once("${G_base}Obj/hardban.phh");
+ Hardbans::add(($user_cur->flags & USER_FLAG_AUTH ? $user_cur->name : FALSE),
+ $user_cur->ip, $user_cur->sess, $user_cur->laccwr + BAN_TIME);
+ }
+ // $user->bantime = $user->laccwr + BAN_TIME;
+
+ $this->table_wakeup($user_cur);
}
}
}
log_rd2($user_cur->sess." GARBAGE UPDATED!");
- $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
+ // externalized $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
+ Bin5::garbage_time_expire_set($curtime + GARBAGE_TIMEOUT);
+
$ismod = TRUE;
}
return ($ismod);
}
-
-
-
- //
- // static functions
- //
- function &load_data($table_idx, $table_token = "")
+ // Bin5::load_data
+ static function load_data($table_idx, $table_token = "")
{
- GLOBAL $G_false, $sess;
- $doexit = FALSE;
$shm = FALSE;
- log_wr("TABLE_IDX ".FTOK_PATH."/table".$table_idx);
+ log_wr("TABLE_FTOK ".FTOK_PATH."/bin5/table".$table_idx."/table");
do {
- if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1) {
log_main("ftok failed");
- $doexit = TRUE;
break;
}
@@ -570,65 +828,82 @@ class Briskin5 {
if ($table_token != "" && $bri->table_token != $table_token) {
log_wr("bri->table_token: ".$bri->table_token."table_token: ".$table_token);
-
break;
}
$bri->tok = $tok;
shm_detach($shm);
-
- $ret = &$bri;
- return ($ret);
+
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
+ if (($bri->user[$i] = Bin5_user::load_data($table_idx, $i, FALSE)) == FALSE) {
+ log_crit("Bin5_user::load_data failed");
+ break;
+ }
+ }
+ if ($i < BIN5_MAX_PLAYERS) {
+ break;
+ }
+
+ return ($bri);
} while (FALSE);
if ($shm != FALSE)
shm_detach($shm);
log_wr("briskin5 load_data failed");
- if ($doexit)
- exit();
- return ($G_false);
+ return (FALSE);
}
- function save_data(&$bri)
+ function save_data($bri)
{
- GLOBAL $sess;
-
- $ret = FALSE;
- $shm = FALSE;
-
- log_main("SAVE BRISKIN5 DATA");
-
- if (!isset($bri->tok))
- return (FALSE);
-
- while ($bri->shm_sz < BRISKIN5_SHM_MAX) {
- if (($shm = shm_attach($bri->tok, $bri->shm_sz)) == FALSE)
- break;
+ GLOBAL $sess;
+
+ $ret = FALSE;
+ $shm = FALSE;
- if (@shm_put_var($shm, $bri->tok, $bri) != FALSE) {
- shm_detach($shm);
- return (TRUE);
+ log_main("SAVE BRISKIN5 DATA");
+
+ if (!isset($bri->tok))
+ return (FALSE);
+
+ $user_park = array();
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
+ $user_park[$i] = $bri->user[$i];
+ $bri->user[$i] = FALSE;
}
- if (shm_remove($shm) === FALSE) {
- log_only("REMOVE FALLITA");
- break;
+
+ while ($bri->shm_sz < BIN5_SHM_MAX) {
+ if (($shm = shm_attach($bri->tok, $bri->shm_sz)) == FALSE)
+ break;
+
+ if (@shm_put_var($shm, $bri->tok, $bri) != FALSE) {
+ $ret = TRUE;
+ break;
+ }
+ if (shm_remove($shm) === FALSE) {
+ log_only("REMOVE FALLITA");
+ break;
+ }
+ shm_detach($shm);
+ $bri->shm_sz += BIN5_SHM_DLT;
+ }
+
+ if ($shm)
+ shm_detach($shm);
+
+ // SHSPLIT: reattach users to the room class
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
+ Bin5_user::save_data($user_park[$i], $bri->table_idx, $i);
+ $bri->user[$i] = $user_park[$i];
}
- shm_detach($shm);
- $bri->shm_sz += BRISKIN5_SHM_DLT;
- }
-
- log_crit("save data failed!");
-
- if ($shm)
- shm_detach($shm);
-
- return ($ret);
+ log_load("FINISH: ".($ret == TRUE ? "TRUE" : "FALSE"));
+
+ return ($ret);
}
-
+
function destroy_data($table_idx)
@@ -642,7 +917,7 @@ class Briskin5 {
do {
log_main("DESTROY2 BRISKIN5 DATA");
- if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1)
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1)
break;
if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE)
@@ -670,11 +945,11 @@ class Briskin5 {
{
GLOBAL $sess;
- log_lock("LOCK_DATA ".FTOK_PATH."/table".$table_idx);
+ log_main("lockinfo: DATA ".FTOK_PATH."/bin5/table".$table_idx."/table");
// echo "LOCK: ".FTOK_PATH."/main";
// exit;
// WARNING monitor this step
- if (($tok = @ftok(FTOK_PATH."/table".$table_idx, "B")) == -1) {
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$table_idx."/table", "B")) == -1) {
return (FALSE);
}
// WARNING monitor this step
@@ -682,27 +957,34 @@ class Briskin5 {
return (FALSE);
}
if (sem_acquire($res)) {
- log_lock("LOCK table ".$table_idx."[res: ".$res."]");
- return ($res);
+ self::$delta_t[$table_idx] = microtime(TRUE);
+ log_lock("LOCK table [".$table_idx."] [".self::$delta_t[$table_idx]."]");
+
+ return (new Vect(array('res' => $res, 'tab' => $table_idx)));
}
else {
- log_lock("LOCK table ".$table_idx.":FAILED");
- return (FALSE);
+ log_lock("LOCK table ".$table_idx.":FAILED");
+ return (FALSE);
}
}
- function unlock_data($res)
+ function unlock_data($res_vect)
{
GLOBAL $sess;
-
- log_lock("UNLOCK table [res: ".$res."]");
+
+ $res = $res_vect->getbyid('res');
+ $tab = $res_vect->getbyid('tab');
+
+ log_lock("UNLOCK table [".$tab."] [".(microtime(TRUE) - (self::$delta_t[$tab]))."]");
return (sem_release($res));
}
- function chatt_send(&$user, $mesg)
+ function chatt_send($user, $mesg)
{
+ GLOBAL $mlang_brisk, $G_lang;
+
if ($user->stat == 'table') {
$table = &$this->table[$user->table];
}
@@ -717,7 +999,7 @@ class Briskin5 {
if (($name_new = validate_name(substr($user_mesg, 6))) == FALSE) {
$user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
- $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.");', $dt, NICKSERV);
+ $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['nickmust'][$G_lang]);
$user->step_inc();
return;
@@ -727,23 +1009,25 @@ class Briskin5 {
// change
// update local graph
// update remote graphs
- for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
- $user_cur = &$this->user[$i];
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
+ $user_cur = $this->user[$i];
// if ($user_cur->sess == '' || $user_cur->stat != 'room')
if ($user_cur->sess == '')
continue;
if ($user_cur->name == $name_new) {
$user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
- $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"Nickname %s già in uso.%d");', $dt, NICKSERV, xcape($name_new), $this->table[$user->table]->auth_only == TRUE);
+
+ $premsg = sprintf($mlang_brisk['nickdupl'][$G_lang], xcape($name_new));
+ $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $premsg);
$user->step_inc();
break;
}
}
- if ($i == BRISKIN5_MAX_PLAYERS) {
+ if ($i == BIN5_MAX_PLAYERS) {
if ($user->flags & USER_FLAG_AUTH && strcasecmp($user->name,$name_new) != 0) {
if ($this->table[$user->table]->auth_only == TRUE) {
$user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
- $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"Non puoi cambiare nick a un tavolo per soli autenticati.");', $dt, NICKSERV);
+ $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['authchan'][$G_lang]);
$user->step_inc();
return;
}
@@ -757,7 +1041,7 @@ class Briskin5 {
log_main($user->sess." chatt_send start set");
- for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
+ for ($i = 0 ; $i < BIN5_MAX_PLAYERS ; $i++) {
log_main($user->sess." chatt_send set loop");
$user_cur = &$this->user[$i];
@@ -769,20 +1053,20 @@ class Briskin5 {
$user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
$user_cur->comm[$user_cur->step % COMM_N] .= sprintf('set_names([%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"]); ',
- $this->user[$table->player[($user_cur->table_pos) % BRISKIN5_PLAYERS_N]]->flags,
- xcape($this->user[$table->player[($user_cur->table_pos) % BRISKIN5_PLAYERS_N]]->name),
+ $this->user[$table->player[($user_cur->table_pos) % BIN5_PLAYERS_N]]->flags,
+ xcape($this->user[$table->player[($user_cur->table_pos) % BIN5_PLAYERS_N]]->name),
- $this->user[$table->player[($user_cur->table_pos+1) % BRISKIN5_PLAYERS_N]]->flags,
- xcape($this->user[$table->player[($user_cur->table_pos+1) % BRISKIN5_PLAYERS_N]]->name),
+ $this->user[$table->player[($user_cur->table_pos+1) % BIN5_PLAYERS_N]]->flags,
+ xcape($this->user[$table->player[($user_cur->table_pos+1) % BIN5_PLAYERS_N]]->name),
- $this->user[$table->player[($user_cur->table_pos+2) % BRISKIN5_PLAYERS_N]]->flags,
- xcape($this->user[$table->player[($user_cur->table_pos+2) % BRISKIN5_PLAYERS_N]]->name),
+ $this->user[$table->player[($user_cur->table_pos+2) % BIN5_PLAYERS_N]]->flags,
+ xcape($this->user[$table->player[($user_cur->table_pos+2) % BIN5_PLAYERS_N]]->name),
- (BRISKIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+3) % BRISKIN5_PLAYERS_N]]->flags),
- (BRISKIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3) % BRISKIN5_PLAYERS_N]]->name)),
+ (BIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+3) % BIN5_PLAYERS_N]]->flags),
+ (BIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3) % BIN5_PLAYERS_N]]->name)),
- (BRISKIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+4) % BRISKIN5_PLAYERS_N]]->flags),
- (BRISKIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4) % BRISKIN5_PLAYERS_N]]->name)));
+ (BIN5_PLAYERS_N == 3 ? 0: $this->user[$table->player[($user_cur->table_pos+4) % BIN5_PLAYERS_N]]->flags),
+ (BIN5_PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4) % BIN5_PLAYERS_N]]->name)));
if ($user_cur == $user) {
$itin = ($user->flags & USER_FLAG_AUTH ? "" : "");
$itou = ($user->flags & USER_FLAG_AUTH ? "" : "");
@@ -795,7 +1079,7 @@ class Briskin5 {
}
}
else {
- for ($i = 0 ; $i < ($user->stat == 'room' ? BRISKIN5_MAX_PLAYERS : BRISKIN5_PLAYERS_N) ; $i++) {
+ for ($i = 0 ; $i < ($user->stat == 'room' ? BIN5_MAX_PLAYERS : BIN5_PLAYERS_N) ; $i++) {
if ($user->stat == 'room') {
$user_cur = &$this->user[$i];
if ($user_cur->sess == '' || $user_cur->stat != 'room')
@@ -814,15 +1098,15 @@ class Briskin5 {
}
}
- function table_wakeup(&$user)
+ function table_wakeup($user)
{
$table = &$this->table[0];
- log_main("BRISKIN5_WAKEUP begin function table stat: ".$user->stat." subst: ".$user->subst);
+ log_main("BIN5_WAKEUP begin function table stat: ".$user->stat." subst: ".$user->subst);
$curtime = time();
- log_main("BRISKIN5_WAKEUP from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
+ log_main("BIN5_WAKEUP from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
for ($i = 0 ; $i < $table->player_n ; $i++) {
$user_cur = &$this->user[$i];
@@ -837,7 +1121,7 @@ class Briskin5 {
$ret = "gst.st = ".($user_cur->step+1)."; ";
$ret .= 'gst.st_loc++; the_end=true; window.onbeforeunload = null; window.onunload = null; document.location.assign("../index.php");|';
- log_wr($user_cur->sess." BRISKIN5_WAKEUP: ".$ret);
+ log_wr($user_cur->sess." BIN5_WAKEUP: ".$ret);
$user_cur->comm[$user_cur->step % COMM_N] = $ret;
$user_cur->step_inc();
}
@@ -866,7 +1150,51 @@ class Briskin5 {
return ($is_ab);
}
-} // end class Briskin5
+
+
+ static function garbage_time_is_expired($tm)
+ {
+ $ret = TRUE;
+ $fp = FALSE;
+ do {
+ if (file_exists(BIN5_PROXY_PATH) == FALSE)
+ mkdir(BIN5_PROXY_PATH, 0775, TRUE);
+ if (($fp = @fopen(BIN5_PROXY_PATH."/garbage_time.expired", 'rb')) == FALSE)
+ break;
+ if (($s = fread($fp, 4)) == FALSE)
+ break;
+ if (mb_strlen($s, "ASCII") != 4)
+ break;
+ $arr = unpack('Le', $s);
+ if ($arr['e'] > $tm)
+ $ret = FALSE;
+ } while (0);
+
+ if ($fp != FALSE)
+ fclose($fp);
+
+ log_rd2("END: return ".($ret ? "TRUE" : "FALSE"));
+
+ return ($ret);
+ }
+
+ static function garbage_time_expire_set($tm)
+ {
+ do {
+ if (file_exists(BIN5_PROXY_PATH) == FALSE)
+ mkdir(BIN5_PROXY_PATH, 0775, TRUE);
+ if (($fp = @fopen(BIN5_PROXY_PATH."/garbage_time.expired", 'wb')) == FALSE)
+ break;
+ fwrite($fp, pack("L",$tm));
+ fclose($fp);
+
+ return (TRUE);
+ } while (0);
+
+ return (FALSE);
+ }
+
+} // end class Bin5
function locshm_exists($tok)
{
@@ -886,11 +1214,28 @@ function locshm_exists($tok)
}
+function asta2mult($asta_pnt)
+{
+ if ($asta_pnt > 110)
+ return (5);
+ else if ($asta_pnt > 100)
+ return (4);
+ else if ($asta_pnt > 90)
+ return (3);
+ else if ($asta_pnt > 80)
+ return (2);
+ else if ($asta_pnt > 70)
+ return (1);
+ else
+ return (0);
+}
+// rendiamo qui l'elenco dei punti come return della func
function calculate_points(&$table)
{
GLOBAL $G_all_points;
+ $ret = array();
$pro = 0;
if ($table->asta_pnt == 60)
@@ -900,8 +1245,10 @@ function calculate_points(&$table)
$table->old_win = $table->asta_win;
$table->old_friend = $table->friend;
$table->old_asta_pnt = $table->asta_pnt;
+ $table->old_mult = $table->mult;
- for ($i = 0 ; $i < 40 ; $i++) {
+ for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ // for ($i = 0 ; $i < 40 ; $i++) {
$ctt = $table->card[$i]->value % 10;
$own = $table->card[$i]->owner;
if ($own == $table->asta_win || $own == $table->friend)
@@ -913,13 +1260,15 @@ function calculate_points(&$table)
if ($table->asta_pnt == 61 && $pro == 60) { // PATTA !
$table->points[$table->points_n % MAX_POINTS] = array();
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++)
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$table->points[$table->points_n % MAX_POINTS][$i] = 0;
+ $ret[$i] = 0;
+ }
$table->points_n++;
$table->old_pnt = $pro;
- $table->mult *= 2;
+ $table->mult += 1;
- return;
+ return($ret);
}
if ($pro >= $table->asta_pnt)
@@ -927,27 +1276,34 @@ function calculate_points(&$table)
else
$sig = -1;
+ $gamult = asta2mult($table->asta_pnt);
+
$table->points[$table->points_n % MAX_POINTS] = array();
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
if ($i == $table->asta_win)
$pt = ($i == $table->friend ? 4 : 2);
else if ($i == $table->friend)
$pt = 1;
else
$pt = -1;
+
+
log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pt));
- $pt = $pt * $sig * $table->mult * ($pro == 120 ? 2 : 1);
+ $pt = $pt * $sig * ($gamult + $table->mult) * ($pro == 120 ? 2 : 1);
log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $table->mult, ($pro == 120 ? 2 : 1)));
$table->points[$table->points_n % MAX_POINTS][$i] = $pt;
$table->total[$i] += $pt;
+ $ret[$i] = $pt;
}
$table->points_n++;
$table->old_pnt = $pro;
$table->mult = 1;
+
+ return($ret);
}
/* show table
@@ -963,7 +1319,7 @@ Examples of $is_transition, $is_again:
function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
{
$table_idx = $user->table;
- $table = &$room->table[$table_idx];
+ $table = $room->table[$table_idx];
$table_pos = $user->table_pos;
$ret = "table_init();";
@@ -984,20 +1340,20 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
$ret .= sprintf('$("myname").innerHTML = "%s%s%s";', $itin, xcape($user->name), $itou);
$ret .= sprintf('set_names([%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"], [%d, "%s"]); ',
- $room->user[$table->player[($table_pos) % BRISKIN5_PLAYERS_N]]->flags,
- xcape($room->user[$table->player[($table_pos) % BRISKIN5_PLAYERS_N]]->name),
+ $room->user[$table->player[($table_pos) % BIN5_PLAYERS_N]]->flags,
+ xcape($room->user[$table->player[($table_pos) % BIN5_PLAYERS_N]]->name),
- $room->user[$table->player[($table_pos+1) % BRISKIN5_PLAYERS_N]]->flags,
- xcape($room->user[$table->player[($table_pos+1) % BRISKIN5_PLAYERS_N]]->name),
+ $room->user[$table->player[($table_pos+1) % BIN5_PLAYERS_N]]->flags,
+ xcape($room->user[$table->player[($table_pos+1) % BIN5_PLAYERS_N]]->name),
- $room->user[$table->player[($table_pos+2) % BRISKIN5_PLAYERS_N]]->flags,
- xcape($room->user[$table->player[($table_pos+2) % BRISKIN5_PLAYERS_N]]->name),
+ $room->user[$table->player[($table_pos+2) % BIN5_PLAYERS_N]]->flags,
+ xcape($room->user[$table->player[($table_pos+2) % BIN5_PLAYERS_N]]->name),
- (BRISKIN5_PLAYERS_N == 3 ? 0 : $room->user[$table->player[($table_pos+3) % BRISKIN5_PLAYERS_N]]->flags),
- (BRISKIN5_PLAYERS_N == 3 ? "" : xcape($room->user[$table->player[($table_pos+3) % BRISKIN5_PLAYERS_N]]->name)),
+ (BIN5_PLAYERS_N == 3 ? 0 : $room->user[$table->player[($table_pos+3) % BIN5_PLAYERS_N]]->flags),
+ (BIN5_PLAYERS_N == 3 ? "" : xcape($room->user[$table->player[($table_pos+3) % BIN5_PLAYERS_N]]->name)),
- (BRISKIN5_PLAYERS_N == 3 ? 0 : $room->user[$table->player[($table_pos+4) % BRISKIN5_PLAYERS_N]]->flags),
- (BRISKIN5_PLAYERS_N == 3 ? "" : xcape($room->user[$table->player[($table_pos+4) % BRISKIN5_PLAYERS_N]]->name)));
+ (BIN5_PLAYERS_N == 3 ? 0 : $room->user[$table->player[($table_pos+4) % BIN5_PLAYERS_N]]->flags),
+ (BIN5_PLAYERS_N == 3 ? "" : xcape($room->user[$table->player[($table_pos+4) % BIN5_PLAYERS_N]]->name)));
}
/* NOTIFY FOR THE CARD MAKER */
if ($is_transition) { // && $user->subst == "asta" superfluo
@@ -1016,10 +1372,11 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
$ret .= "|";
for ($i = 0 ; $i < 8 ; $i++) {
- for ($e = 0 ; $e < BRISKIN5_PLAYERS_N ; $e++) {
+ for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++) {
$ct = 0;
- for ($o = 0 ; $o < 40 && $ct < $i+1 ; $o++) {
- if ($table->card[$o]->owner == (($e + $table->gstart) % BRISKIN5_PLAYERS_N)) {
+ for ($o = 0 ; $o < (BIN5_PLAYERS_N == 5 ? 40 : 24) && $ct < $i+1 ; $o++) {
+ // for ($o = 0 ; $o < 40 && $ct < $i+1 ; $o++) {
+ if ($table->card[$o]->owner == (($e + $table->gstart) % BIN5_PLAYERS_N)) {
$ct++;
if ($ct == $i+1)
break;
@@ -1027,10 +1384,10 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
}
log_rd("O ".$o." VAL ".$table->card[$o]->value." Owner: ".$table->card[$o]->owner);
- $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % BRISKIN5_PLAYERS_N,
- $i, ((($e + BRISKIN5_PLAYERS_N - $table_pos + $table->gstart) % BRISKIN5_PLAYERS_N) == 0 ?
+ $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % BIN5_PLAYERS_N,
+ $i, ((($e + BIN5_PLAYERS_N - $table_pos + $table->gstart) % BIN5_PLAYERS_N) == 0 ?
$table->card[$o]->value : -1),
- ($i == 7 && $e == (BRISKIN5_PLAYERS_N - 1) ? 1 : 0.5),$i+1);
+ ($i == 7 && $e == (BIN5_PLAYERS_N - 1) ? 1 : 0.5),$i+1);
}
}
}
@@ -1040,7 +1397,8 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
$ontabl = array(-1,-1,-1,-1,-1);
$cards = array();
- for ($i = 0 ; $i < 40 ; $i++) {
+ for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ // for ($i = 0 ; $i < 40 ; $i++) {
if ($table->card[$i]->stat == 'hand') {
if ($table->card[$i]->owner == $table_pos) {
$cards[$inhand[$table->card[$i]->owner]] = $table->card[$i]->value;
@@ -1056,7 +1414,7 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
}
}
$logg = "\n";
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$logg .= sprintf("INHAND: %d IN TABLE %d TAKED %d\n", $inhand[$i], $ontabl[$i], $taked[$i]);
}
log_main("Stat table: ".$logg);
@@ -1070,10 +1428,10 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
$ret .= sprintf('card_setours(%s);', $oursarg);
/* Dispose all cards */
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
/* Qui sotto al posto di + 1 c'era + ->gstart ... credo in modo errato */
$ret .= sprintf('cards_dispose(%d,%d,%d);', $i,
- $inhand[$i], $taked[$i]);
+ ($inhand[$i] <= 8 ? $inhand[$i] : 8) , $taked[$i]);
if ($ontabl[$i] != -1) {
$ret .= sprintf('card_place(%d,%d,%d,%d,%d);',$i, $inhand[$i],
@@ -1088,13 +1446,14 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
/* show users auction status */
$showst = "";
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$user_cur = &$room->user[$table->player[$i]];
$showst .= sprintf("%s%d", ($i == 0 ? "" : ", "),
($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt));
}
- if (BRISKIN5_PLAYERS_N == 3)
+ if (BIN5_PLAYERS_N == 3)
$showst .= ",-2,-2";
+ $ret .= sprintf('document.title = "Brisk - Tavolo %d (asta)";', $user->table_orig);
$ret .= sprintf('show_astat(%s);', $showst);
if ($table->asta_win != -1 && $table->asta_win == $table_pos) {
@@ -1104,7 +1463,7 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
}
else {
/* show auction */
- if ($table_pos == ($table->gstart % BRISKIN5_PLAYERS_N) &&
+ if ($table_pos == ($table->gstart % BIN5_PLAYERS_N) &&
$table->asta_win == -1)
$ret .= sprintf('dispose_asta(%d,%d, %s);',
$table->asta_card + 1, $table->asta_pnt+1, ($user->handpt <= 2 ? "true" : "false"));
@@ -1115,7 +1474,7 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
/* Remark */
if ($table->asta_win == -1) { // auction case
- if ($table_pos == ($table->gstart % BRISKIN5_PLAYERS_N))
+ if ($table_pos == ($table->gstart % BIN5_PLAYERS_N))
$ret .= "remark_on();";
else
$ret .= "remark_off();";
@@ -1129,12 +1488,12 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
}
else if ($user->subst == 'game') {
/* HIGHLIGHT */
- if (($table->gstart + $table->turn) % BRISKIN5_PLAYERS_N == $table_pos)
+ if (($table->gstart + $table->turn) % BIN5_PLAYERS_N == $table_pos)
$ret .= "is_my_time = true; remark_on();";
else
$ret .= "remark_off();";
- /* WHO CALL AND WATH */
+ /* WHO CALL AND WHAT */
$ret .= briscola_show($room, $table, $user);
}
@@ -1150,7 +1509,8 @@ function calculate_winner(&$table)
$cur_val = 100;
$cur_seed = $table->briscola - ($table->briscola % 10);
- for ($i = 0 ; $i < 40 ; $i++) {
+ for ($i = 0 ; $i < (BIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+ // for ($i = 0 ; $i < 40 ; $i++) {
if ($table->card[$i]->stat != "table")
continue;
@@ -1170,7 +1530,7 @@ function calculate_winner(&$table)
$cur_seed = $cur_val - ($cur_val % 10);
}
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
if (($ontab[$i] - ($ontab[$i] % 10)) == $cur_seed) {
if ($ontab[$i] < $cur_val) {
$cur_val = $ontab[$i];
@@ -1179,7 +1539,7 @@ function calculate_winner(&$table)
}
}
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
$table->card[$ontid[$i]]->owner = $cur_win;
$table->card[$ontid[$i]]->stat = "take"; // Card stat
}
@@ -1188,14 +1548,16 @@ function calculate_winner(&$table)
function show_table_info(&$room, &$table, $table_pos)
{
+ GLOBAL $G_lang, $mlang_bin5_bin5;
+
$ret = "";
- $user = &$room->user[$table->player[$table_pos]];
+ $user = $room->user[$table->player[$table_pos]];
$pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS;
$noty = sprintf(' | ');
// Names.
- for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++)
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++)
$noty .= sprintf('%s | ', xcape($room->user[$table->player[$i]]->name));
$noty .= sprintf("
");
@@ -1204,14 +1566,14 @@ function show_table_info(&$room, &$table, $table_pos)
for ($i = $pnt_min ; $i < $table->points_n ; $i++) {
$noty .= sprintf('%d | ', $i+1);
- for ($e = 0 ; $e < BRISKIN5_PLAYERS_N ; $e++)
+ for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++)
$noty .= sprintf('%d | ', $table->points[$i % MAX_POINTS][$e]);
$noty .= "
";
}
// Total points.
$noty .= 'Tot. | ';
- for ($e = 0 ; $e < BRISKIN5_PLAYERS_N ; $e++)
+ for ($e = 0 ; $e < BIN5_PLAYERS_N ; $e++)
$noty .= sprintf('%d | ', $table->total[$e]);
$noty .= "
---|
";
@@ -1229,65 +1591,72 @@ function show_table_info(&$room, &$table, $table_pos)
if ($win != $fri) {
/* 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("
Nell'ultima mano ha chiamato %s, il socio era %s,
",
+
+ $noty .= sprintf($mlang_bin5_bin5['info_part'][$G_lang],
xcape($room->user[$win]->name),
xcape($room->user[$fri]->name));
if ($table->old_pnt == 120) {
- $noty .= sprintf("hanno fatto cappotto EBBRAVI!.
");
+ $noty .= sprintf($mlang_bin5_bin5['info_capp'][$G_lang]);
}
else {
- $noty .= sprintf("dovevano fare %s punti e ne hanno fatti %d: hanno %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_pnt'][$G_lang],
+ ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt :
+ $mlang_bin5_bin5['info_more'][$G_lang]), $table->old_pnt,
+ ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : $mlang_bin5_bin5['info_lost'][$G_lang])));
}
}
else {
- $noty .= sprintf("
Nell'ultima mano %s si è chiamato in mano,
",
+ $noty .= sprintf($mlang_bin5_bin5['info_alon'][$G_lang],
xcape($room->user[$win]->name));
if ($table->old_pnt == 120) {
- $noty .= sprintf("ha fatto cappotto EBBRAVO!.
");
+ $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang]);
}
else {
- $noty .= sprintf("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_apnt'][$G_lang],
+
+ ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt :
+ $mlang_bin5_bin5['info_more'][$G_lang]), $table->old_pnt,
+
+ ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : $mlang_bin5_bin5['info_lost'][$G_lang])));
}
}
+ if (($table->old_mult + asta2mult($table->old_asta_pnt)) > 1) {
+ $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], multoval($table->old_mult + asta2mult($table->old_asta_pnt)));
+ }
+ $noty .= "
";
}
/* MLANG: "Fai tu il mazzo,", "Il mazzo a $unam," */
if ($table->mazzo == $table_pos)
- $noty .= "Fai tu il mazzo,";
+ $noty .= $mlang_bin5_bin5['info_yshuf'][$G_lang];
else {
$unam = xcape($room->user[$table->player[$table->mazzo]]->name);
- $noty .= "Il mazzo a $unam,";
+ $noty .= sprintf($mlang_bin5_bin5['info_shuf'][$G_lang], $unam);
}
if ($user->subst == 'asta') {
if ($table->asta_win == -1) // auction case
- $curplayer = $table->gstart % BRISKIN5_PLAYERS_N;
+ $curplayer = $table->gstart % BIN5_PLAYERS_N;
else
$curplayer = $table->asta_win;
}
else if ($user->subst == 'game') {
- $curplayer = ($table->gstart + $table->turn) % BRISKIN5_PLAYERS_N;
+ $curplayer = ($table->gstart + $table->turn) % BIN5_PLAYERS_N;
}
/* MLANG: " tocca a te giocare.", " tocca a $unam giocare.", " La partita vale %s.", "torna alla partita" */
if ($curplayer == $table_pos) {
- $noty .= " tocca a te giocare.";
+ $noty .= $mlang_bin5_bin5['info_yturn'][$G_lang];
}
else {
$unam = xcape($room->user[$table->player[$curplayer]]->name);
- $noty .= " tocca a $unam giocare.";
+ $noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam);
}
- if ($table->mult > 1) {
- $noty .= sprintf(" La partita vale %s.", multoval($table->mult));
+ if (($table->mult + asta2mult($table->asta_pnt)) > 1) {
+ $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($table->mult + asta2mult($table->asta_pnt)));
}
$noty .= "
";
- $ret .= show_notify($noty, 3000, "torna alla partita", 500, 400);
+ $ret .= show_notify($noty, 3000, $mlang_bin5_bin5['btn_bkgame'][$G_lang], 500, 400);
/* NOTE: show_notify($noty, 3000, "torna alla partita", 500,
* 130 + ($table->points_n > 0 ? 50 : 0) +
* (120 * ($table->points_n / MAX_POINTS)));
@@ -1300,11 +1669,11 @@ function show_table_info(&$room, &$table, $table_pos)
function table_wellcome($user)
{
- GLOBAL $table_wellarr;
+ GLOBAL $table_wellarr, $G_lang;
$ret = "";
- for ($i = 0 ; $i < count($table_wellarr) ; $i++)
- $ret .= sprintf('chatt_sub("%s", [2, "ChanServ: "],"%s");', "", str_replace('"', '\"', $table_wellarr[$i]));
+ for ($i = 0 ; $i < count($table_wellarr[$G_lang]) ; $i++)
+ $ret .= sprintf('chatt_sub("%s", [2, "ChanServ: "],"%s");', "", str_replace('"', '\"', $table_wellarr[$G_lang][$i]));
return ($ret);
}
@@ -1312,18 +1681,24 @@ function table_wellcome($user)
function briscola_show($room, $table, $user)
{
+ GLOBAL $G_lang, $mlang_bin5_bin5;
$ptnadd = "";
$ret = "";
if ($table->asta_card == 9)
- $ptnadd = sprintf("
con %d punti", $table->asta_pnt);
+ $ptnadd = sprintf($mlang_bin5_bin5['call_wptn'][$G_lang], $table->asta_pnt);
/* text of caller cell */
- if ($user->table_pos == $table->asta_win)
- $ret .= sprintf('$("callerinfo").innerHTML = "Chiami%s:";', $ptnadd);
- else
- $ret .= sprintf('$("callerinfo").innerHTML = "Chiama %s%s:";',
+ if ($user->table_pos == $table->asta_win) {
+ $prestr = sprintf('$("callerinfo").innerHTML = "%s";', $mlang_bin5_bin5['call_ycall'][$G_lang]);
+ $ret .= sprintf($prestr, $ptnadd);
+ }
+ else {
+ $prestr = sprintf('$("callerinfo").innerHTML = "%s";', $mlang_bin5_bin5['call_call'][$G_lang]);
+ $ret .= sprintf($prestr,
xcape($room->user[$table->player[$table->asta_win]]->name), $ptnadd);
+ }
+ $ret .= sprintf('set_iscalling(%d);', ($table->asta_win - $user->table_pos + BIN5_PLAYERS_N) % BIN5_PLAYERS_N);
$ret .= sprintf('$("caller").style.backgroundImage = \'url("img/brisk_caller_sand%d.png")\';',
$table->asta_win);
@@ -1356,4 +1731,17 @@ function game_result($asta_pnt, $pnt)
}
}
+function log_points($curtime, $user, $where, $mesg)
+{
+ GLOBAL $_SERVER;
+
+ if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) {
+ /* Unix time | session | nickname | IP | where was | mesg */
+ fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess,
+ ($user->flags & USER_FLAG_AUTH ? 'A' : 'N'),
+ $user->name, $_SERVER['REMOTE_ADDR'], $where , $mesg));
+ fclose($fp);
+ }
+}
+
?>