X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=faf8c1bd7941e3f71d416e37c25708a486def21a;hb=fdcd2271540f3e2d18886aaa413ae17ec2d131ec;hp=4e5b40666427fca0fdd367d65861c6140a3ab6a1;hpb=a222ac87c9aa8297cc7dd4ede7c9b92089d52238;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 4e5b406..faf8c1b 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -40,6 +40,21 @@ $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'), + '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.', + '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_match'=> array( 'it' => 'Il codice della partita è %d.', + 'en' => 'Match code is %d.'), + + + // br, hr, b, /b, win, fri 'info_part' => array( 'it' => 'Ha chiamato %3$s%5$s%4$s (punti torneo %7$d), il socio era %3$s%6$s%4$s,%1$s', 'en' => 'The declarer was %3$s%5$s%4$s (tournment points %7$d), the partner was %3$s%6$s%4$s,%1$s'), @@ -85,18 +100,6 @@ $mlang_bin5_bin5 = array( 'info_aban' => array( 'it' => ' Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.', 'en' => ' EN: Ha lasciato %3$s%5$s%4$s perché aveva al massimo %3$s2 punti%4$s.'), - 'info_shuf' => array( 'it' => 'Il mazzo a %s, ', - 'en' => '%s shuffled the cards, '), - '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_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', @@ -500,6 +503,11 @@ class Bin5_table extends Table { $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; @@ -508,11 +516,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; @@ -538,20 +541,155 @@ 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 - */ + $continue_tot = 0; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $user_cur = &$bri->user[$this->player[$i]]; + + 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 ($continue_tot < BIN5_PLAYERS_N) { + $msg = sprintf("L'utente %s vorrebbe continuare la partita n° %d.", + 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); + } + + /* 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']; + $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]]; - if ($user_cur->continue_get() != $match_id) { + $user_cur->continue_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); + 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(); + } + } + + function rules_change(&$bri, $user, $rules_code_s) + { + // + // Rules: update version following loaded tcode + // + $ret = FALSE; + $curtime = time(); + + do { + /* - verify if match_id and user are both valid to accept + the match_continue request - */ + $rules_id = (int)$match_code_s; + // FIXME: from dynamic rules list + if ($rules_id != 1 && $rules_id != 2 && $rules_id != 4) { + $msg = "queste regole non esistono o non sono attive"; + break; + } + + if ($this->match_id != -1) { + $msg = "Non si possono cambiare regole dopo che si è già ultimata una mano."; + break; + } + + // set the match_id for the current user + $user->rules_set($rules_id); + + // XXXXXXXXXXX + $tot_sel_rules = 0; + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + if ($bri->user[$this->player[$i]]->rules_get() == BIN5_USER_RULES_INIT) { + continue; + } + + if ($bri->user[$this->player[$i]]->rules_get() != $rules_id) { break; } + $tot_sel_rules++; } $ret = TRUE; // not all players set the continue match than we exit if ($i < BIN5_PLAYERS_N) { - $msg = sprintf("L'utente %s vorrebbe continuare la partita n° %d.", - xcape($user->name), $match_id); + $msg = sprintf("L'utente %s vorrebbe utilizzare le %s.", + xcape($user->name), xcape(rules_id2descr($rules_id))); break; } @@ -635,7 +773,7 @@ class Bin5_table extends 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; //