From: Matteo Nastasi (mop) Date: Thu, 2 Mar 2017 08:55:27 +0000 (+0100) Subject: first working version of rules change with custom bet X-Git-Tag: v5.4.1~16 X-Git-Url: https://mop.ddnsfree.com/gitweb/?p=brisk.git;a=commitdiff_plain;h=a83aff42b8b01a66aba1bfa42e9d7722fc8e1455 first working version of rules change with custom bet --- diff --git a/TODO.txt b/TODO.txt index d37f4ba..03d018e 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,12 +3,7 @@ BUGS | ------+ - - cache data structure for tournments - . reload on SIGHUP - - new rules for 'together for fun' turnment - - select tournment dropdown menu (send a 'cont' like message for each change) - - show current rules - + - /cont and /rules just during 'bidding' phase DONE - Not sequence of 3 same chars DONE . check server side with test DONE - Global vars checker @@ -22,6 +17,17 @@ FEATURES | ----------+ + * multiple rules + DONE - show current rules + DONE - select tournment dropdown menu (send a 'cont' like message for each change) + - increase constraint for rules change + - check of max points + - check of suit at the end of bet + - new rules for 'together for fun' turnment + - cache data structure for tournments + . reload on SIGHUP + - select rules dropdown 'selected' to the current rule + WIP * inherited info * Users Network construction DONE - sql diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index 51ff38a..d1bbbcc 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -130,7 +130,7 @@ function multoval($mult) function dom_select_rules() { - printf(""); + printf(""); } class Card { @@ -426,6 +426,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"); } @@ -613,7 +614,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_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); @@ -641,7 +641,7 @@ class Bin5_table extends Table { } } - function rules_change(&$bri, $user, $rules_code_s) + function rules_change(&$bri, $user, $rules_id_s) { // // Rules: update version following loaded tcode @@ -650,39 +650,57 @@ class Bin5_table extends Table { $curtime = time(); do { - /* - verify if match_id and user are both valid to accept - the match_continue request - */ - $rules_id = (int)$match_code_s; + 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 ($this->match_id != -1) { - $msg = "Non si possono cambiare regole dopo che si è già ultimata una mano."; + if ($user->rules_get() == $rules_id) { + $msg = "hai già richiesto di usare queste regole"; break; } - // set the match_id for the current user - $user->rules_set($rules_id); + /* - the user is in the list, add the match_id to his profile + and check if he is the N'th to require continue - */ - // XXXXXXXXXXX - $tot_sel_rules = 0; + $rules_tot = 0; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { - if ($bri->user[$this->player[$i]]->rules_get() == BIN5_USER_RULES_INIT) { + $user_cur = &$bri->user[$this->player[$i]]; + + if ($user == $user_cur) { + $rules_tot += 1; continue; } - if ($bri->user[$this->player[$i]]->rules_get() != $rules_id) { + if ($user_cur->rules_get() == BIN5_USER_CONTINUE_INIT) + continue; + + if ($user_cur->rules_get() != $rules_id) break; - } - $tot_sel_rules++; + $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 ($i < BIN5_PLAYERS_N) { - $msg = sprintf("L'utente %s vorrebbe utilizzare le %s.", + 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; } @@ -690,50 +708,18 @@ class Bin5_table extends Table { /* - 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']); + $rules_name = rules_id2name($rules_id); $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); + // $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_INIT); + $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(); @@ -758,8 +744,7 @@ class Bin5_table extends Table { $user_cur->comm[$user_cur->step % COMM_N] .= nickserv_msg($dt, $msg); $user_cur->step_inc(); } - } - + } // end function rules_change } // end class Bin5_table @@ -778,6 +763,9 @@ class Bin5_user extends User { 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 = "../"; function User() { @@ -1632,7 +1620,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"); } @@ -1830,7 +1818,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++) diff --git a/web/briskin5/Obj/rules_base.phh b/web/briskin5/Obj/rules_base.phh index b102f8f..cb8aa93 100644 --- a/web/briskin5/Obj/rules_base.phh +++ b/web/briskin5/Obj/rules_base.phh @@ -73,6 +73,7 @@ $mlang_bin5_rules = array( abstract class Rules { var $table; + var $id; abstract function engine(&$bri, $curtime, $action, $user); @@ -80,6 +81,22 @@ abstract class Rules { { $this->table = $table; } + + function id_get() + { + return ($this->id); + } + + function tourn_points(&$user, $i) + { + return; + } + + function tourn_points_max($user) + { + return 0; + } + } ?> \ No newline at end of file diff --git a/web/briskin5/Obj/rules_no_draw.phh b/web/briskin5/Obj/rules_no_draw.phh index 8b4121c..c5ca0cf 100644 --- a/web/briskin5/Obj/rules_no_draw.phh +++ b/web/briskin5/Obj/rules_no_draw.phh @@ -29,6 +29,7 @@ class Rules_no_draw extends Rules_old_rules { function __construct($table) { parent::__construct($table); + $this->id = 2; } static function game_result($asta_pnt, $pnt) diff --git a/web/briskin5/Obj/rules_old_rules.phh b/web/briskin5/Obj/rules_old_rules.phh index 0d2259a..f37f627 100644 --- a/web/briskin5/Obj/rules_old_rules.phh +++ b/web/briskin5/Obj/rules_old_rules.phh @@ -29,6 +29,7 @@ class Rules_old_rules extends Rules { function __construct($table) { parent::__construct($table); + $this->id = 1; } static function asta2mult($asta_pnt) diff --git a/web/briskin5/briskin5.js b/web/briskin5/briskin5.js index 59acd54..91fe98f 100644 --- a/web/briskin5/briskin5.js +++ b/web/briskin5/briskin5.js @@ -356,5 +356,5 @@ function preferences_showhide() function act_select_rules(rule_id) { - send_mesg("/rules " + rule_id); + send_mesg("chatt|/rules " + rule_id); }