* multiple rules
DONE - show current rules
DONE - select tournment dropdown menu (send a 'cont' like message for each change)
+ WIP - new rules for 'together for fun' turnment
+ DONE . strange 4 abandoned rule for auction
+ DONE . check of max points
+ DONE . check of suit at the end of bet
+
+ - select rules dropdown 'selected' to the current rule or the current
- increase constraint for rules change
- - strange 4 abandoned rule for auction
- - 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
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
define('BIN5_RULES_ALLPASS', 2);
define('BIN5_RULES_ASTA', 3);
define('BIN5_RULES_NEXTAUCT', 4);
+define('BIN5_RULES_CHECKCHOOSE',5);
require_once("rules_base.phh");
require_once("rules_old_rules.phh");
return FALSE;
}
+ function rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)
+ {
+ if ( !($a_brisco >= 0 && $a_brisco < 40)) // (BIN5_CARD_HAND * BIN5_PLAYERS_N)) )
+ return FALSE;
+
+ if ( !($this->table->asta_win > -1 &&
+ $user->table_pos == $this->table->asta_win) )
+ return FALSE;
+
+ return TRUE;
+ }
+
function rules_nextauct(&$bri, $curtime, $action, $user, $maxcard)
{
if (($this->table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
$pnts_sav = array();
if ($action == BIN5_RULES_ASTA) {
- return ($this->rules_asta($bri, $curtime, $action, $user, &$opt1, $opt2, $opt3));
+ return ($this->rules_asta($bri, $curtime, $action, $user, $opt1, $opt2, $opt3));
}
else if ($action == BIN5_RULES_NEXTAUCT) {
return ($this->rules_nextauct($bri, $curtime, $action, $user, $opt1));
// $table->game_next(0);
$table->game_init(&$bri->user);
}
+ else if ($action == BIN5_RULES_CHECKCHOOSE) {
+ return ($this->rules_checkchoose($bri, $curtime, $action, $user, $opt1, $opt2));
+ }
else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct
$table->old_act = $action;
do {
{
$mx = 0;
for ($i = 0 ; $i < 4 ; $i++) {
- error_log("tourn_pts_max ");
- error_log(print_r($user->asta_tourn_pts, TRUE));
if ($user->asta_tourn_pts[$i] > $mx) {
$mx = $user->asta_tourn_pts[$i];
}
return $mx;
}
+ function min_tourn_points($a_pnt)
+ {
+ if ($a_pnt < 71)
+ $min_pts = 13;
+ else if ($a_pnt < 80)
+ $min_pts = 19;
+ else if ($a_pnt < 90)
+ $min_pts = 23;
+ else if ($a_pnt < 100)
+ $min_pts = 25;
+ else
+ $min_pts = 28;
+
+ return $min_pts;
+ }
+
+ function check_tourn_points($hand_pts, $a_pnt, $a_seed, &$ret_s) {
+ $min_pts = $this->min_tourn_points($a_pnt);
+
+ if ($hand_pts < $min_pts) {
+ // FIXME_LANG
+ $seeds = array('coppe', 'ori', 'spade', 'bastoni');
+ $ret_s = sprintf("Hai chiamato un due di %s a %d ma in mano per quel seme hai %d punti-torneo, non puoi.",
+ $seeds[$a_seed], $a_pnt, $hand_pts);
+ return FALSE;
+ }
+ return TRUE;
+ }
+
function rules_asta(&$bri, $curtime, $action, $user, &$ret_s, $a_card, $a_pnt) {
/*
Per le chiamate da 62 a 70 bisognerà avere 13 punti ( esempi.: asso e fante oppure tre
$this->table->asta_pla_n--;
if ($this->table->asta_card == -1 && $this->table->asta_pla_n == 1) {
- error_log('table_asta_card: ' . $this->table->asta_card);
// all abandon auction except one => move next bid to two and 71 points
$this->table->asta_card = 9;
$this->table->asta_pnt = 70;
else if ($a_card == 9 &&
$a_pnt > ($this->table->asta_pnt >= 61 ? $this->table->asta_pnt : 60)
&& $a_pnt <= 120) {
- if ($a_pnt < 71)
- $min_pts = 13;
- else if ($a_pnt < 80)
- $min_pts = 19;
- else if ($a_pnt < 90)
- $min_pts = 23;
- else if ($a_pnt < 100)
- $min_pts = 25;
- else
- $min_pts = 28;
+ $min_pts = $this->min_tourn_points($a_pnt);
$max_hand_pts = $this->tourn_points_max($user);
if ($max_hand_pts < $min_pts) {
}
+ function rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)
+ {
+ if (! parent::rules_checkchoose(&$bri, $curtime, $action, $user, &$ret_s, $a_brisco)) {
+ return FALSE;
+ }
+
+ if ($this->table->asta_card == 9) {
+ $bri_seed = (int)($a_brisco / 10);
+ return $this->check_tourn_points($user->asta_tourn_pts[$bri_seed],
+ $this->table->asta_pnt, $bri_seed, $ret_s);
+ }
+
+ return TRUE;
+ }
} // class Rules_no_draw
?>
\ No newline at end of file
}
/* asta::choose */
else if ($argz[0] == 'choose') {
- if ($table->asta_win > -1 &&
- $user->table_pos == $table->asta_win) {
+ $success = FALSE;
+ do {
$a_brisco = $argz[1];
- if ($a_brisco >= 0 && $a_brisco < (BIN5_CARD_HAND * BIN5_PLAYERS_N)) {
- $table->briscola = $a_brisco;
- if (BIN5_CARD_HAND == 8)
- $tourn_values = array(11, 10, 4,3,2, 1,1,1,1,1);
- else
- $tourn_values = array(33, 30, 12,9,6, 3,3,3,3,3);
+ if (!$table->rules->engine(&$bin5, $curtime, BIN5_RULES_CHECKCHOOSE, $user, $ret_s, $a_brisco)) {
+ break;
+ }
- $table->tourn_pts = 0;
- $seed = $a_brisco - ($a_brisco % 10);
- for ($i = $seed ; $i < ($seed + min(10, BIN5_CARD_HAND * BIN5_PLAYERS_N)) ; $i++) {
- if ($table->card[$i]->owner == $table->asta_win) {
- $table->tourn_pts += $tourn_values[$i - $seed];
- }
+ $table->briscola = $a_brisco;
+
+ if (BIN5_CARD_HAND == 8)
+ $tourn_values = array(11, 10, 4,3,2, 1,1,1,1,1);
+ else
+ $tourn_values = array(33, 30, 12,9,6, 3,3,3,3,3);
+
+ $table->tourn_pts = 0;
+ $seed = $a_brisco - ($a_brisco % 10);
+ for ($i = $seed ; $i < ($seed + min(10, BIN5_CARD_HAND * BIN5_PLAYERS_N)) ; $i++) {
+ if ($table->card[$i]->owner == $table->asta_win) {
+ $table->tourn_pts += $tourn_values[$i - $seed];
}
+ }
- $table->friend = $table->card[$a_brisco]->owner;
- log_wr("GSTART 2");
- $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N;
- log_wr("Setta la briscola a ".$a_brisco);
+ $table->friend = $table->card[$a_brisco]->owner;
+ log_wr("GSTART 2");
+ $table->gstart = ($table->mazzo+1) % BIN5_PLAYERS_N;
+ log_wr("Setta la briscola a ".$a_brisco);
- $chooser = $table->asta_win;
- $user_chooser = &$bin5->user[$table->player[$chooser]];
- for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
- $user_cur = &$bin5->user[$table->player[$i]];
- $user_cur->subst = 'game';
- $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1);
+ $chooser = $table->asta_win;
+ $user_chooser = &$bin5->user[$table->player[$chooser]];
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bin5->user[$table->player[$i]];
+ $user_cur->subst = 'game';
+ $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1);
- if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) {
- // $ret .= "var de_che= 33;";
- $ret .= playsound("ringbell.mp3");
- }
- $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig);
+ if ($user_cur->privflags & BIN5_USER_FLAG_RING_ENDAUCT) {
+ // $ret .= "var de_che= 33;";
+ $ret .= playsound("ringbell.mp3");
+ }
+ $ret .= sprintf('document.title = "Brisk - Tavolo %d";', $user->table_orig);
- /* bg of caller cell */
- $ret .= briscola_show($bin5, $table, $user_cur);
+ /* bg of caller cell */
+ $ret .= briscola_show($bin5, $table, $user_cur);
- /* first gamer */
- if ($i == ($table->gstart % BIN5_PLAYERS_N))
- $ret .= "is_my_time = true; remark_on();";
- else
- $ret .= "is_my_time = false; remark_off();";
+ /* first gamer */
+ if ($i == ($table->gstart % BIN5_PLAYERS_N))
+ $ret .= "is_my_time = true; remark_on();";
+ else
+ $ret .= "is_my_time = false; remark_off();";
- $user_cur->comm[$user_cur->step % COMM_N] = $ret;
- $user_cur->step_inc();
- }
- /*
- TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE
- VAR PER PASSARE ALLA FASE DI GIOCO
- */
+ $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+ $user_cur->step_inc();
+ }
+ /*
+ TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE
+ VAR PER PASSARE ALLA FASE DI GIOCO
+ */
+ $success = TRUE;
+ } while (0);
+ if (!$success) {
+ $ret = "";
+ if ($ret_s != "") {
+ $ret = show_notify($ret_s, 0, $mlang_indwr['btn_close'][$G_lang], 400, 150);
}
+ $user->comm[$user->step % COMM_N] = $ret;
+ $user->step_inc();
+
+ log_wr("Ripetere.");
}
+
}
}
else if ($user->subst == 'game') {