X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fbriskin5.phh;h=76e3c72bd3a4028ee9b20d017f8572d4d4dd37e1;hb=4504fa6c9ae69cbe9322e28fba9d98d1a6c08cc1;hp=faf8c1bd7941e3f71d416e37c25708a486def21a;hpb=fdcd2271540f3e2d18886aaa413ae17ec2d131ec;p=brisk.git diff --git a/web/briskin5/Obj/briskin5.phh b/web/briskin5/Obj/briskin5.phh index faf8c1b..76e3c72 100644 --- a/web/briskin5/Obj/briskin5.phh +++ b/web/briskin5/Obj/briskin5.phh @@ -53,53 +53,6 @@ $mlang_bin5_bin5 = array( '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'), - // br, hr, b, /b - 'info_capp' => array( 'it' => 'hanno fatto %3$scappotto%4$s EBBRAVI!.%1$s', - 'en' => 'and they made %3Dscapot%4$s WELL DONE!.%1$s'), - - // br, hr, b, /b, old_asta_pnt, old_pnt, winornot - 'info_alea' => array( 'it' => 'dovevano fare %3$salmeno %5$d%4$s punti e ne hanno fatti %3$s%6$d%4$s: hanno %7$s.%1$s', - 'en' => 'they had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: they have %7$s.%1$s'), - // br, hr, b, /b, old_pnt, winornot - 'info_more' => array( 'it' => 'dovevano fare %3$spiù di 60%4$s punti e ne hanno fatti %3$s%5$d%4$s: hanno %6$s.%1$s', - 'en' => 'they had to do %3$sover 60%4$s points and they had made %3$s%5$d%4$s: they have %3$s%6$s%4$s.%1$s'), - 'info_win' => array( 'it' => 'vinto', - 'en' => 'win'), - 'info_peer' => array( 'it' => 'pareggiato', - 'en' => 'drew'), - 'info_lost' => array( 'it' => 'perso', - 'en' => 'lost'), - - // br, hr, b, /b, win_name - 'info_alon' => array( 'it' => '%3$s%5$s%4$s si è chiamato in mano (punti torneo %6$d),%1$s', - 'en' => '%3$s%5$s%4$s play alone against each other (tournment points %6$d),%1$s'), - // br, hr, b, /b, old_asta_pnt, old_pnt, winornot - 'info_aleaa' => array( 'it' => 'doveva fare %3$salmeno %5$d%4$s punti e ne ha fatti %3$s%6$d%4$s: ha %3$s%7$s%4$s.%1$s', - 'en' => 'he/she had to do %3$sat least %5$d%4$s points and they had made %3$s%6$d%4$s: he/she had %3$s%7$s%4$s.%1$s'), - // br, hr, b, /b, old_pnt, winornot - 'info_morea' => array( 'it' => 'doveva fare %3$spiù di 60%4$s punti e ne ha fatti %3$s%5$d%4$s: ha %3$s%6$s%4$s.%1$s', - 'en' => 'he/she had to do %3$smore than 60%4$s points and they had made %3$s%5$d%4$s: he/she had %3$s%6$s%4$s.%1$s'), - // br, hr, b, /b - 'info_acap' => array( 'it' => 'ha fatto %3$scappotto%4$s EBBRAVO!.%1$s', - 'en' => 'and he/she made %3$scapot%4$s WELL DONE!.%1$s'), - - // br, hr, b, /b - 'info_omul' => array( 'it' => '%1$sLa partita valeva %3$s%5$s%4$s.%1$s', - 'en' => '%1$sEN: The game was worth %3$s%5$s%4$s.%1$s' ), - - // br, hr, b, /b - 'info_alpa' => array( 'it' => '%1$sHanno passato %3$stutti%4$s.%1$s', - 'en' => '%1$sEN: Hanno passato %3$stutti%4$s.%1$s' ), - - // br, hr, b, /b, aband-name - '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.'), - 'btn_bkgame'=> array( 'it' => 'torna alla partita', 'en' => 'back to the game'), 'call_wptn' => array( 'it' => '
con %d punti', @@ -114,16 +67,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 +81,17 @@ function multoval($mult) return (sprintf(($G_lang == 'en' ? "%d-ple" : "%d-plo"), $mult)); } +function dom_select_rules() +{ + $ret = "\n"; + + echo "$ret"; +} class Card { var $value; /* 0 - 39 card value */ @@ -180,19 +134,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 +386,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"); } @@ -619,7 +574,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); @@ -647,7 +601,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 @@ -656,39 +610,65 @@ 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; - // FIXME: from dynamic rules list - if ($rules_id != 1 && $rules_id != 2 && $rules_id != 4) { + if ($this->match_id != -1) { + // FIXME_LANG + $msg = sprintf("Stai già giocando la partita con codice %d.", $this->match_id); + break; + } + + if ($this->asta_card != -1 || $this->asta_pla_n < BIN5_PLAYERS_N) { + // FIXME_LANG + $msg = sprintf("La partita è già stata avviata."); + break; + } + + $rules_id = (int)$rules_id_s; + if (! in_array($rules_id, rules_keys())) { + // FIXME_LANG $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) { + // FIXME_LANG + $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; } @@ -696,50 +676,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_ALREADY); + $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(); @@ -756,16 +704,22 @@ class Bin5_table extends Table { } 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(); + if ($ret == TRUE) { + for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { + $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(); + } } - } - + else { + $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; + $user->comm[$user->step % COMM_N] = xcape(sprintf("rules_set(%d);", + $this->rules->id)); + $user->comm[$user->step % COMM_N] .= nickserv_msg($dt, $msg); + $user->step_inc(); + } + } // end function rules_change } // end class Bin5_table @@ -774,6 +728,7 @@ class Bin5_table extends Table { define('BIN5_USER_FLAG_RING_ENDAUCT', 0x01); define('BIN5_USER_CONTINUE_INIT', -1); +define('BIN5_USER_RULES_INIT', -1); class Bin5_user extends User { var $asta_card; // var $asta_pnt; // @@ -782,6 +737,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 = "../"; @@ -799,6 +757,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); } @@ -819,6 +778,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 @@ -854,6 +814,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"); @@ -1100,6 +1061,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 @@ -1345,6 +1315,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') { @@ -1582,8 +1558,10 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again) $ret .= $table->exitlock_show(&$bri->user, $table_pos); if (!$is_again) { /* GENERAL STATUS */ - $ret .= sprintf( 'gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d;', - $sendstep, $user->stat, $user->subst, $table_pos); + $user_rules = $user->rules_get(); + $ret .= sprintf('gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d; rules_set(%d);', + $sendstep, $user->stat, $user->subst, $table_pos, + ($user_rules == BIN5_USER_CONTINUE_INIT ? $table->rules->id_get() : $user_rules)); log_rd(sprintf( 'SHOW_TABLE: gst.st = %d; stat = "%s"; subst = "%s"; table_pos = %d;', $sendstep, $user->stat, $user->subst, $table_pos)); @@ -1619,7 +1597,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"); } @@ -1719,6 +1697,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) @@ -1817,7 +1796,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++)