id = 1; } static function asta2mult($asta_pnt) { if ($asta_pnt > 110) return (6); else if ($asta_pnt > 100) return (5); else if ($asta_pnt > 90) return (4); else if ($asta_pnt > 80) return (3); else if ($asta_pnt > 70) return (2); else return (1); } static function s_multer($mult, $pnt) { return (pow(2, $mult) * static::asta2mult($pnt)); } static function s_point_calc($pnt_done, $mult, $pnt_req, $is_allpoints) { return ($pnt_done * static::s_multer($mult, $pnt_req) * ($is_allpoints ? 2 : 1)); } function multer($is_new) { if ($is_new) { return (static::s_multer($this->table->mult, $this->table->asta_pnt)); } else { return (static::s_multer($this->table->old_mult, $this->table->old_asta_pnt)); } } static function game_result($asta_pnt, $pnt) { $sixty = (BIN5_PLAYERS_N == 3 ? 30 : 60); if ($asta_pnt == 61) { if ($pnt > $sixty) return (1); else if ($pnt == $sixty) return (0); else return (-1); } else { if ($pnt >= $asta_pnt) return (1); else return (-1); } } function rules_asta(&$bri, $curtime, $action, $user, &$ret_s, $a_card, $a_pnt) { $index_cur = $this->table->gstart % BIN5_PLAYERS_N; // Abbandono dell'asta if ($a_card <= -1) { log_wr("Abbandona l'asta."); $this->table->asta_pla[$index_cur] = FALSE; $user->asta_card = -1; $this->table->asta_pla_n--; return TRUE; } else if ($a_card <= 9) { $ret_s = ""; do { if ($a_card >= 0 && $a_card < 9 && $a_card > $this->table->asta_card) ; else if ($a_card == 9 && $a_pnt > ($this->table->asta_pnt >= 61 ? $this->table->asta_pnt : 60) && $a_pnt <= 120) ; else break; $user->asta_card = $a_card; $this->table->asta_card = $a_card; if ($a_card == 9) { $user->asta_pnt = $a_pnt; $this->table->asta_pnt = $a_pnt; } return TRUE; } while (0); } return FALSE; } function rules_nextauct(&$bri, $curtime, $action, $user, $maxcard) { if (($this->table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) && !($this->table->asta_card == 9 && $this->table->asta_pnt == 120)) { return TRUE; } else { return FALSE; } } function engine(&$bri, $curtime, $action, $user, &$opt1 = NULL, &$opt2 = NULL, &$opt3 = NULL) { GLOBAL $G_all_points, $G_dbasetype; $table = $this->table; $pnts_sav = array(); if ($action == BIN5_RULES_ASTA) { 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)); } else if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct $table->old_act = $action; $table->old_asta_win = -1; $table->old_pnt = 0; $table->mult_inc(1); for ($i = 0 ; $i < PLAYERS_N ; $i++) { $pnts_sav[$i] = 0; } $game_delta = 1; // $table->game_next(1); $table->game_init(&$bri->user); } else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct if (!($user->handpt <= 2)) { return (FALSE); } $table->old_act = $action; log_wr(sprintf("GIOCO FINITO !!!")); $table->old_asta_win = $user->table_pos; $table->old_pnt = 0; $table->mult_inc(1); for ($i = 0 ; $i < PLAYERS_N ; $i++) { $pnts_sav[$i] = 0; } // Non si cambia mazzo se si abbandona la partita $game_delta = 0; // $table->game_next(0); $table->game_init(&$bri->user); } else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct $table->old_act = $action; do { $pro = 0; if ($table->asta_pnt == 60) $table->asta_pnt = 61; $table->old_reason = ""; // count points for the temporary 2 teams for ($i = 0 ; $i < (BIN5_CARD_HAND * BIN5_PLAYERS_N) ; $i++) { $ctt = $table->card[$i]->value % 10; $own = $table->card[$i]->owner; if ($own == $table->asta_win || $own == $table->friend) $pro += $G_all_points[$ctt]; } log_wr(sprintf("PRO: [%d]", $pro)); // PATTA case ! if (static::game_result($table->asta_pnt, $pro) == 0) { $table->points[$table->points_n % MAX_POINTS] = array(); for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $table->points[$table->points_n % MAX_POINTS][$i] = 0; $pnts_sav[$i] = 0; } $table->points_n++; $table->old_pnt = $pro; $table->old_asta_win = $table->asta_win; $table->mult_inc(1); break; } if (static::game_result($table->asta_pnt, $pro) == 1) $sig = 1; else $sig = -1; // TAG: POINTS_MANAGEMENT $table->points[$table->points_n % MAX_POINTS] = array(); for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { if ($i == $table->asta_win) $pnt = ($i == $table->friend ? 4 : 2); else if ($i == $table->friend) $pnt = 1; else $pnt = -1; log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pnt)); $pnt_sav = static::s_point_calc($pnt * $sig, 0, $table->asta_pnt, ($pro == 120)); $pnt_tab = static::s_point_calc($pnt * $sig, $table->mult, $table->asta_pnt, ($pro == 120)); $table->points[$table->points_n % MAX_POINTS][$i] = $pnt_tab; $table->total[$i] += $pnt_tab; $pnts_sav[$i] = $pnt_sav; } $table->points_n++; $table->old_pnt = $pro; $table->old_asta_win = $table->asta_win; $table->mult_set(0); } while (0); $game_delta = 1; } else { return (FALSE); } $table->game_next($game_delta); $plist = "$table->table_token|$user->table_orig|$table->player_n"; $ucodes = array(); $codes = ""; for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) { $user_cur = &$bri->user[$table->player[$i]]; /* pro db */ $ucodes[$i] = $user_cur->code_get(); /* pro log */ $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i]; $codes .= '|'.xcapelt($user_cur->code_get()); } $plist .= $codes; log_legal($curtime, $user->ip, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); $table->old_asta_pnt = $table->asta_pnt; // $table->old_mazzo is managed by ->game_next(); // $table->old_mult, $table->old_pnt, $table->old_reason and $table->old_asta_win are specific $table->old_friend = $table->friend; $table->old_tourn_pts = $table->tourn_pts; $table->old_reason = static::game_description($action, 'html', $table->old_mult, $table->old_asta_win, ($table->old_asta_win != -1 ? $bri->user[$table->player[$table->old_asta_win]]->name : ""), $table->old_friend, ($table->old_friend != -1 ? $bri->user[$table->player[$table->old_friend]]->name : ""), $table->old_pnt, $table->old_asta_pnt, $table->old_tourn_pts); if ($user->table_orig < TABLES_AUTH_N) { require_once("../Obj/dbase_".$G_dbasetype.".phh"); if (($bdb = BriskDB::create()) != FALSE) { $bdb->bin5_points_save($curtime, $table, $user->table_orig, $action, $ucodes, $pnts_sav); unset($bdb); } else { log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", "DATABASE CONNECTION FAILED"); } log_points($user->ip, $curtime, $user, "STAT:BRISKIN5:FINISH_GAME", $plist); } $table->game_init(&$bri->user); return (TRUE); } static function game_description($act, $form, $old_mult, $win = -1, $win_name = "?1?", $fri = -1, $fri_name = "?2?", $old_pnt = -1, $old_asta_pnt = -1, $old_tourn_pts = -1) { GLOBAL $G_lang, $mlang_bin5_rules; if ($form == 'html') { $tg_br = "
"; $tg_hr = "
"; $tg_bo = ""; $tg_bc = ""; $win_name = xcape($win_name); $fri_name = xcape($fri_name); } else { $tg_br = " "; $tg_hr = " "; $tg_bo = ""; $tg_bc = ""; } if ($act == BIN5_RULES_OLDSCHEMA) { return (""); } else if ($act == BIN5_RULES_ALLPASS) { return (sprintf($mlang_bin5_rules['info_alpa'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc)); } else if ($act == BIN5_RULES_ABANDON) { return (sprintf($mlang_bin5_rules['info_aban'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $win_name)); } else { $wol = static::game_result($old_asta_pnt, $old_pnt); $noty = ""; if ($win != $fri) { // not alone case /* MLANG: "
Nell'ultima mano ha chiamato %s, il socio era %s,
", "hanno fatto cappotto EBBRAVI!.
", "dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", "
Nell'ultima mano %s si è chiamato in mano,
", "ha fatto cappotto EBBRAVO!.
", "doveva fare %s punti e ne ha fatti %d: ha %s.
", ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : 'più di 60'), $table->old_pnt, ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso" */ $noty .= sprintf($mlang_bin5_rules['info_part'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $win_name, $fri_name, $old_tourn_pts); if ($old_pnt == 120) { $noty .= sprintf($mlang_bin5_rules['info_capp'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc ); } else { if ($old_asta_pnt > 61) { $noty .= sprintf($mlang_bin5_rules['info_alea'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $old_asta_pnt, $old_pnt, ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : $mlang_bin5_rules['info_lost'][$G_lang]))); } else { $noty .= sprintf($mlang_bin5_rules['info_more'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $old_pnt, ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : $mlang_bin5_rules['info_lost'][$G_lang]))); } // else of if ($old_asta_pnt > 61) { } // else of if ($old_pnt == 120) { } // if ($win != $fri) { // not alone case else { $noty .= sprintf($mlang_bin5_rules['info_alon'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $win_name, $old_tourn_pts); if ($old_pnt == 120) { $noty .= sprintf($mlang_bin5_rules['info_acap'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc); } else { if ($old_asta_pnt > 61) { $noty .= sprintf($mlang_bin5_rules['info_aleaa'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $old_asta_pnt, $old_pnt, ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : $mlang_bin5_rules['info_lost'][$G_lang]))); } else { $noty .= sprintf($mlang_bin5_rules['info_morea'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, $old_pnt, ($wol == 1 ? $mlang_bin5_rules['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_rules['info_peer'][$G_lang] : $mlang_bin5_rules['info_lost'][$G_lang]))); } } } } $old_multer = static::s_multer($old_mult, $old_asta_pnt); if ($old_multer > 1) { $noty .= sprintf($mlang_bin5_rules['info_omul'][$G_lang], $tg_br, $tg_hr, $tg_bo, $tg_bc, multoval($old_multer)); } $noty .= sprintf('%2$s', $tg_br, $tg_hr); return ($noty); } } // class Rules_old_rules ?>