X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=d3066be39c8b6adc6efe1d408fa8360c89710594;hb=51d3c2f014e177b27027d1340f7e49a947f6f9b0;hp=91fb9c74c29229b44023c90d9a091de05a010b72;hpb=14ad625280a22b32bb9d6035c24b868a77f630aa;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 91fb9c7..d3066be 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -32,7 +32,9 @@ define('BIN5_PROXY_PATH', PROXY_PATH."/bin5"); require_once('rules.phh'); -define('BIN5_TOURNAMENT_CURRENT', BIN5_TOURNAMENT_NO_DRAW); +// FIXME: JUST FOR DEVELOP +// define('BIN5_TOURNAMENT_CURRENT', BIN5_TOURNAMENT_NO_DRAW); +define('BIN5_TOURNAMENT_CURRENT', BIN5_TOURNAMENT_TOGETHER17); $mlang_bin5_bin5 = array( // br, hr, b, /b, win, fri @@ -114,16 +116,6 @@ $mlang_bin5_bin5 = array( $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 rules_id2name($id) -{ - if ($id == 1) - return 'Rules_old_rules'; - else if ($id == 2) - return 'Rules_no_draw'; - - return 'Rules_unknown'; -} - function multoval($mult) { GLOBAL $G_lang; @@ -138,6 +130,10 @@ function multoval($mult) return (sprintf(($G_lang == 'en' ? "%d-ple" : "%d-plo"), $mult)); } +function dom_select_rules() +{ + printf(""); +} class Card { var $value; /* 0 - 39 card value */ @@ -180,19 +176,19 @@ 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 @@ -432,6 +428,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"); } @@ -503,6 +500,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; @@ -511,11 +513,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; @@ -541,18 +538,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; @@ -603,7 +616,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); @@ -631,6 +643,110 @@ class Bin5_table extends Table { } } + function rules_change(&$bri, $user, $rules_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; + } + + $rules_id = (int)$rules_id_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 ($user->rules_get() == $rules_id) { + $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()))); + 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))); + 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); + 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 function rules_change } // end class Bin5_table @@ -638,7 +754,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; // @@ -647,6 +764,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 = "../"; @@ -664,6 +784,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); } @@ -684,6 +805,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 @@ -719,6 +841,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"); @@ -965,6 +1088,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 @@ -1210,6 +1342,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') { @@ -1484,7 +1622,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"); } @@ -1584,6 +1722,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) @@ -1682,7 +1821,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())))); + $noty .= sprintf('
'); // Names. for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++)