$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;
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;
/* - 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("<b>L'utente <i>%s</i> voleva già continuare la partita n° %d.</b>",
+ 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("<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);
+ }
+
+ /* 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("<b>L'utente <i>%s</i> vorrebbe continuare la partita n° %d.</b>",
- xcape($user->name), $match_id);
+ $msg = sprintf("<b>L'utente <i>%s</i> vorrebbe utilizzare le %s.</b>",
+ xcape($user->name), xcape(rules_id2descr($rules_id)));
break;
}
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; //