+ // players are rearranged in an dedicated array
+ $thiz->player = array();
+ for ($i = 0 ; $i < $from->player_n ; $i++)
+ $thiz->player[$i] = $i;
+
+ log_main("TABLE_OLD_WIN - spawn:".$thiz->old_asta_win);
+
+ 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
+ // {
+ // $ret = array();
+ //
+ // for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
+ // // for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
+ // $ret[$i] =& new Card($i, 'bunch', 'no_owner');
+ // }
+ //
+ // $oret = &$ret;
+ // return ($oret);
+ // }
+
+ function bunch_create()
+ {
+ $ret = array();
+
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $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 = (BIN5_CARD_HAND * BIN5_PLAYERS_N) - 1 ; $i >= 0 ; $i--)
+ $rest[$i] = $i;
+
+ for ($i = (BIN5_CARD_HAND * BIN5_PLAYERS_N) - 1 ; $i >= 0 ; $i--) {
+ $rn = rand(0, $i);
+
+ if ($rn == 0)
+ log_main("RND ZERO");
+
+ $id = $rest[$rn];
+
+ $owner = $i % BIN5_PLAYERS_N;
+ $this->card[$id]->assign('hand', $owner);
+
+ $rest[$rn] = $rest[$i];
+ // $pubbpos[$rn2] = $pubbpos[$i];
+ }
+ log_main("bunch_make end");
+ }
+
+ function init($userarr)
+ {
+ /* MOVED INTO SPAWN
+ $this->mazzo = rand(0,PLAYERS_N-1);
+ $this->points_n = 0;
+ $this->mult = 0;
+ $this->old_asta_win = -1;
+ $this->old_reason = "";
+ */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $this->total[$i] = 0;
+ $user_cur = $userarr[$this->player[$i]];
+ $user_cur->stat_set('table');
+ $user_cur->exitislock = TRUE;
+ }
+
+ log_main("table::init: ci siamo");
+ }
+
+ function game_init($userarr)
+ {
+ log_rd2("GSTART 4");
+
+ $this->gstart = ($this->mazzo+1) % BIN5_PLAYERS_N;
+ $this->bunch_make();
+
+ $this->asta_pla_n = BIN5_PLAYERS_N;
+ $this->asta_card = -1;
+ $this->asta_pnt = 60;
+ $this->asta_win = -1;
+ $this->briscola = -1;
+ $this->friend = -1;
+ $this->turn = 0;
+
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $this->asta_pla[$i] = TRUE;
+ $user_cur = $userarr[$this->player[$i]];
+ $user_cur->subst = 'asta';
+ $user_cur->asta_card = -2;
+ $user_cur->asta_pnt = -1;
+ $user_cur->handpt = $this->hand_points($i);
+ }
+ log_rd2("GEND 4");
+ }
+
+ function game_next($delta)
+ {
+ $this->old_mazzo = $this->mazzo;
+ $this->mazzo = ($this->mazzo + $delta) % BIN5_PLAYERS_N;
+ }
+
+ function mult_inc($val)
+ {
+ $this->old_mult = $this->mult;
+ $this->mult += $val;
+ }
+
+ function mult_set($val)
+ {
+ $this->old_mult = $this->mult;
+ $this->mult = $val;
+ }
+
+ function hand_points($idx)
+ {
+ GLOBAL $G_all_points;
+
+ $tot = 0;
+
+ for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) {
+ // for ($i = 0 ; $i < 40 ; $i++) {
+ if ($this->card[$i]->owner != $idx)
+ continue;
+
+ $ctt = $this->card[$i]->value % 10;
+ $tot += $G_all_points[$ctt];
+ }
+
+ return ($tot);
+ }
+
+
+ function exitlock_show($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'));
+ return ($ret);
+ }
+
+ function exitlock_calc(&$userarr, $table_pos)
+ {
+ $ct = 0;
+
+ for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) {
+ if ($userarr[$this->player[$i]]->exitislock == FALSE)
+ $ct++;
+ }
+
+ return ($ct);
+ }
+
+ function rules_engine(&$bri, $curtime, $action, $user)
+ {
+ GLOBAL $G_all_points, $G_dbasetype;
+
+ $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($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED");
+ }
+ log_points($remote_addr, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist);
+ }
+
+ $this->game_init(&$bri->user);
+
+ return (TRUE);
+ }
+
+ function match_continue(&$bri, $user, $match_id_s)
+ {
+ $ret = FALSE;
+ $curtime = time();
+
+ do {
+ /* - verify if match_id and user are both valid to accept
+ the match_continue request - */
+ $match_id = (int)$match_id_s;
+ if ($match_id <= 0) {
+ $msg = "questa partita non esiste";
+ break;
+ }
+
+ if ($user->continue_get() == BIN5_USER_CONTINUE_ALREADY) {
+ $msg = "Hai già richiesto di continuare una partita.";
+ break;
+ }
+
+ if ($user->continue_get() == $match_id) {
+ $msg = "Hai già richiesto di continuare questa partita.";
+ break;
+ }
+ // retrieves users list for this match
+ $match_data = array();
+ if (($bdb = BriskDB::create()) != FALSE) {
+ // match_order_get return FALSE for old matches
+ $ucodes = $bdb->match_order_get($match_data, $match_id, BIN5_PLAYERS_N);
+ unset($bdb);
+ }
+ if ($ucodes == FALSE) {
+ $msg = "questa partita non è stata memorizzata correttamente";
+ break;
+ }
+
+ // if current user code must be in the users list
+ if (array_search($user->code, $ucodes) === FALSE) {
+ $msg = sprintf("Questo utente non compare nella partita che si vuole continuare [%d].", $user->code);
+ break;
+ }
+
+ /* - the user is in the list, add the match_id to his profile
+ and check if he is the N'th to require continue - */
+
+ // set the match_id for the current user
+ $user->continue_set($match_id);
+
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ if ($user_cur->continue_get() != $match_id) {
+ break;
+ }
+ }
+ $ret = TRUE;
+ // not all players set the continue match than we exit
+ if ($i < BIN5_PLAYERS_N) {
+ $msg = sprintf("<b>L'utente <i>%s</i> vorrebbe continuare la partita n° %d.</b>",
+ xcape($user->name), $match_id);
+ break;
+ }
+
+ /* - all users decide to continue the same match, update all infos and rearrange users
+ to the right positions on the table - */
+
+ /* reset users table order */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N - 1 ; $i++) {
+ if ($bri->user[$this->player[$i]]->code == $ucodes[$i]) {
+ continue;
+ }
+ for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) {
+ if ($bri->user[$this->player[$e]]->code == $ucodes[$i]) {
+ $swap = $this->player[$i];
+ $this->player[$i] = $this->player[$e];
+ $this->player[$e] = $swap;
+ $bri->user[$this->player[$i]]->table_pos = $i;
+ $bri->user[$this->player[$e]]->table_pos = $e;
+ }
+ }
+ }
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ fprintf(STDERR, "USERZ: [%s]\n", $bri->user[$this->player[$i]]->name);
+ }
+
+ // update database info to be aligned with current table (ttok and table_idx
+ if (($bdb = BriskDB::create()) != FALSE) {
+ if ($bdb->match_continue($match_id, $this, $user->table_orig) == FALSE) {
+ unset($bdb);
+ $msg = "aggiornamento dei dati della partita fallito";
+ break;
+ }
+ unset($bdb);
+ }
+
+ /* bunch and multiplier status set */
+ $this->mazzo = $match_data['mazzo_next'];
+ $this->mult = $match_data['mult_next'];
+ $this->match_id = $match_id;
+ $this->game_init(&$bri->user);
+
+ /* reload of the page with the new layout */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ $user_cur->continue_set(BIN5_USER_CONTINUE_ALREADY);
+
+ $user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("index.php");|', $user_cur->step+1);
+ $user_cur->step_inc();
+
+ // a void command force xynt-streamer to flush all data to client
+ $user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = "";
+ $user_cur->step_inc();
+
+ $user_cur->comm[$user_cur->step % COMM_N] = show_table(&$bri, &$user_cur, $user_cur->step+1, TRUE, FALSE);
+ $user_cur->step_inc();
+ }
+ return (TRUE);
+ } while (FALSE);
+
+ $dt = date("H:i ", $curtime);
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ if ($ret == FALSE && $this->player[$i] != $user->idx)
+ continue;
+ $user_cur = &$bri->user[$this->player[$i]];
+ $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
+ $user_cur->comm[$user_cur->step % COMM_N] .= nickserv_msg($dt, $msg);
+ $user_cur->step_inc();
+ }
+ }
+
+} // end class Bin5_table
+
+
+
+
+define('BIN5_USER_FLAG_RING_ENDAUCT', 0x01);
+define('BIN5_USER_CONTINUE_INIT', -1);
+define('BIN5_USER_CONTINUE_ALREADY', -2);
+class Bin5_user extends User {
+ var $asta_card; //
+ var $asta_pnt; //
+ var $handpt; // Total card points at the beginning of the current hand.
+ var $exitislock; // Player can exit from the table ?
+ var $privflags; // Flags for briskin5 only
+
+ var $continue; // Id of the match that the user would continue
+
+ const BASE = "../";
+
+ function User() {
+ }
+
+ /* CREATE NOT USED
+ function create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
+ if (($thiz =& new User()) == FALSE)
+ return (FALSE);
+
+ $thiz->asta_card = -2;
+ $thiz->asta_pnt = -1;
+ $thiz->handpt = -1;
+ $thiz->exitislock = TRUE;
+ $thiz->privflags = 0;
+ $thiz->continue = BIN5_USER_CONTINUE_INIT;
+
+ return ($thiz);
+ }
+ */
+
+ function parentcopy(&$from)
+ {
+ parent::copy($from);
+ }
+
+ function copy(&$from)
+ {
+ $this->parentcopy($from);
+
+ $this->asta_card = $from->asta_card;
+ $this->asta_pnt = $from->asta_pnt;
+ $this->handpt = $from->handpt;
+ $this->exitislock = $from->exitislock;
+ $this->privflags = $from->privflags;
+ $this->continue = $from->continue;
+ }
+
+ /* CLONE NOT USED
+ function myclone(&$from)
+ {
+ if (($thiz =& new User()) == FALSE)
+ return (FALSE);
+
+ $thiz->copy($from);
+
+ return ($thiz);
+ }
+ */
+
+ static function spawn($from, &$bri, $table, $table_pos, $get, $post, $cookie)
+ {
+ if (($thiz = new Bin5_user()) == FALSE)
+ return (FALSE);
+
+ if (($CO_bin5_pref_ring_endauct = gpcs_var("CO_bin5_pref_ring_endauct", $get, $post, $cookie)) === FALSE) {
+ $CO_bin5_pref_ring_endauct = "";
+ }
+
+ $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->room = $bri;
+ $thiz->idx = $table_pos; // it is the position in the mini-room,
+ // not related to table pos (see below)
+ $thiz->asta_card = -2;
+ $thiz->asta_pnt = -1;
+ $thiz->handpt = -1;
+ $thiz->exitislock = TRUE;
+ $thiz->continue = BIN5_USER_CONTINUE_INIT;
+
+ log_wr("Bin5 constructor");
+
+ $thiz->privflags = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0;
+
+ $thiz->table_orig = $table;
+ $thiz->table = 0;
+ $thiz->table_pos = $table_pos;
+
+ $thiz->step_inc();
+
+ return ($thiz);
+ }
+
+ function step_set($step)
+ {
+ $this->step = $step & 0x7fffffff;
+
+ return TRUE;
+ }
+
+ function step_inc($delta = 1) {
+ $this->step += $delta;
+ /* modularization because unpack() not manage unsigned 32bit int correctly */
+ $this->step &= 0x7fffffff;
+
+ return (TRUE);
+ }
+
+ static function load_step($tab_id, $sess)
+ {
+ $fp = FALSE;
+ do {
+ if (validate_sess($sess) == FALSE)
+ break;
+
+ if (file_exists(BIN5_PROXY_PATH."/table".$tab_id) == FALSE)
+ mkdir(BIN5_PROXY_PATH."/table".$tab_id, 0775, TRUE);
+ if (($fp = @fopen(BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step", 'rb')) == FALSE)
+ break;
+ 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);
+ }
+
+ function save_step()
+ {
+ do {
+ if (validate_sess($this->sess) == FALSE)
+ break;
+ if (file_exists(BIN5_PROXY_PATH."/table".$this->table_orig) == FALSE)
+ mkdir(BIN5_PROXY_PATH."/table".$this->table_orig, 0775, TRUE);
+ if (($fp = @fopen(BIN5_PROXY_PATH."/table".$this->table_orig."/".$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);
+ }
+
+ static function unproxy_step($tab_id, $sess)
+ {
+ log_rd2("UNPROXY: ".BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step");
+ if (file_exists(BIN5_PROXY_PATH."/table".$tab_id) == FALSE)
+ return;
+
+ @unlink(BIN5_PROXY_PATH."/table".$tab_id."/".$sess.".step");
+ }
+
+ function destroy_data($tab_id)
+ {
+ do {
+ if (($tok = @ftok(FTOK_PATH."/bin5/table".$tab_id."/user".$this->table_pos, "B")) == -1) {
+ log_crit("BIN5 USER DATA REMOVE FAILED 1 [".FTOK_PATH."/bin5/table".$tab_id."/user".$this->table_pos."]");
+ break;
+ }
+
+ if (($shm = @shmop_open($tok, 'a', 0, 0)) == FALSE) {
+ log_crit("BIN5 USER DATA REMOVE FAILED 2");
+ break;
+ }
+ if (shmop_delete($shm) == 0) {
+ log_crit("BIN5 USER DATA REMOVE FAILED 3");
+ break;
+ }
+ $shm = FALSE;
+
+ log_main("BIN5 USER DATA DESTROY SUCCESS");
+
+ // log_main("QUI CI ARRIVA [".$bri->user[0]->name."]");
+ $ret = TRUE;
+ } while (0);
+
+ if ($shm)
+ shm_detach($shm);
+
+ return ($ret);
+ }
+
+ static function blocking_error($is_unrecoverable)
+ {
+ log_crit("BLOCKING_ERROR UNREC: ".($is_unrecoverable ? "TRUE" : "FALSE"));
+ return (sprintf(($is_unrecoverable ? 'xstm.stop(); ' : '').'window.onbeforeunload = null; window.onunload = null; document.location.assign("../index.php");'));
+ }
+
+ protected function page_sync($sess, $page)
+ {
+ log_rd2("PAGE_SYNC");
+ printf("xXx BIN5_USER::PAGE_SYNC\n");
+ return (sprintf('xstm.stop(); window.onbeforeunload = null; window.onunload = null; document.location.assign("%s");', $page));
+ }
+
+ protected function maincheck($get, $post, $cookie)
+ {
+ GLOBAL $G_lang;
+ GLOBAL $G_with_splash, $G_splash_content, $G_splash_interval, $G_splash_idx;
+ GLOBAL $G_splash_w, $G_splash_h, $G_splash_timeout;
+
+ GLOBAL $S_load_stat;
+
+ log_rd("maincheck begin");
+
+ $ret = FALSE;
+ $curtime = time();
+
+ /* Nothing changed, return. */
+ if ($this->rd_step == $this->step)
+ return (FALSE);
+
+ log_rd2("do other cur_stat[".$this->rd_stat."] user->stat[".$this->stat."] cur_step[".$this->rd_step."] user_step[".$this->step."]");
+
+ if ($this->rd_step == -1) {
+ /*
+ * if $this->rd_step == -1 load the current state from the main struct
+ */
+
+ $S_load_stat['wR_minusone']++;
+
+ // if ($this->the_end == TRUE) {
+ // log_rd2("main_check: the end".var_export(debug_backtrace()));
+ // }
+
+ if ($this->trans_step != -1) {
+ log_rd2("TRANS USATO ".$this->trans_step);
+ $this->rd_step = $this->trans_step;
+ $this->trans_step = -1;
+ }
+ else {
+ log_rd2("TRANS NON ATTIVATO");
+ }