From b8ebcdc6f3a685e4f546e6ca463d12ad61e9e6c0 Mon Sep 17 00:00:00 2001 From: "Matteo Nastasi (mop)" Date: Sat, 19 Jan 2008 15:11:38 +0000 Subject: [PATCH] moved in Obj dir --- web/brisk.phh | 1828 ------------------------------------------------- 1 file changed, 1828 deletions(-) delete mode 100644 web/brisk.phh diff --git a/web/brisk.phh b/web/brisk.phh deleted file mode 100644 index 2fc0462..0000000 --- a/web/brisk.phh +++ /dev/null @@ -1,1828 +0,0 @@ -SERVER"); -define(BRISK_DEBUG, FALSE); -// define(DEBUGGING, "local"); - -$G_false = FALSE; - -$G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "0.8.2"; - -$root_wellarr = Array ( 'Benvenuto in brisk (Ver. '.$G_brisk_version.'), NOVITA\': nuovo layout che permette più tavoli, più tavoli.', - 'Se vuoi iscriverti alla Mailing List, cliccala!' ); -$table_wellarr = 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.'); - - -$G_room_help= ' -
-Descrizione
-Questa è un\'implementazione della briscola in cinque, così come è spiegata su -Wikipedia; in breve è la variante con l\'asta prima sulla carta e poi sui punti.

-Configurazione del browser.
-Occorre abilitare i cookies.
-
-Uso del sito
-Potete sedervi a un tavolo o rimanere in piedi.
-Se al vostro tavolo si raggiungono i 5 giocatori inizia automaticamente la partita.
-
-Partita
-All\'inizio vengono distribuite le carte e parte l\'asta; per partecipare all\'asta, quando sarà il vostro turno, potrete scegliere se andare avanti o passare cliccando sulle icone corrispondenti. Se si arriva ai punti, scrivete nella textbox il vostro rilancio e cliccate PUNTI.

-Chi vince l\'asta dovrà decidere il seme della carta scelta e inizierà la mano.
-Per giocare le carte dovrete trascinarle nel quadrato al centro del vostro schermo.

-Il vostro turno è sempre segnalato da una cornice verde lampeggiante intorno al quadrato al centro del vostro schermo.

-Durante la partita, se vorrete ricaricare la pagina, usate l\'apposito bottone \\"reload\\" in basso a destra.
-Dopo che è iniziata una partita per uscirne dovete chiedere agli altri giocatori di sbloccarla cliccando sul lucchetto. Se non si segue questa prassi, una volta usciti, non vi potrete sedere a nessun tavolo per '.floor(BAN_TIME/60).' minuti. -
-
Comandi della chat -
/nick <nuovo_nickname> - cambio di nickname -
.. to be continue .. -
-
-'; - -$G_room_about= '
-
- - briscola chiamata in salsa ajax -
-
version '.$G_brisk_version.'

-Copyright 2006-2007 Matteo Nastasi (aka mop)

'; - - -function xcape($s) -{ - $from = array ( '\\', '@', '|' ); - $to = array ( '\\\\', '@', '¦' ); - - return (str_replace($from, $to, htmlentities($s,ENT_COMPAT,"UTF-8"))); -} - - -class Card { - var $value; /* 0 - 39 card value */ - var $stat; /* 'bunch', 'hand', 'table', 'take' */ - var $owner; /* (table position 0-4) */ - // var $pos; /* Pos in hand. */ - var $x; /* When played the X position on the table of the owner. */ - var $y; /* When played the Y position on the table of the owner. */ - - function Card($value, $stat, $owner) - { - $this->value = $value; - $this->stat = $stat; // Card stat - $this->owner = $owner; - } - - function assign($stat,$owner) - { - $this->stat = $stat; // Card stat - $this->owner = $owner; - } - - function setpos($pos) - { - $this->pos = $pos; - } - - function play($x,$y) - { - $this->stat = 'table'; // Card stat - $this->x = $x; - $this->y = $y; - } - - function take($newown) - { - $this->stat = 'take'; // Card stat - $this->owner = $newown; - } -} - -class Table { - var $player; - var $player_n; - var $card; - var $mazzo; - var $gstart; - var $turn; - - var $asta_pla; - var $asta_pla_n; - var $asta_card; - var $asta_pnt; - - var $mult; - var $points; // points array - var $points_n; // number of row of points - var $total; - - var $asta_win; - var $briscola; - var $friend; - - var $old_reason; - var $old_asta_pnt; - var $old_pnt; - var $old_win; - var $old_friend; - - function Table() - { - } - - function &create() - { - GLOBAL $G_false; - - if (($thiz = new Table()) == FALSE) - return ($G_false); - - $thiz->player = array(); - $thiz->player_n = 0; - $thiz->card = &$thiz->bunch_create(); - $thiz->asta_pla = array(); // TRUE: in auction, FALSE: out of the auction - $thiz->asta_pla_n= -1; - $thiz->asta_card = -1; - $thiz->asta_pnt = -1; - $thiz->mult = 1; - $thiz->points = array( ); - $thiz->points_n = 0; - $thiz->total = array( 0, 0, 0, 0, 0); - $thiz->asta_win = -1; - $thiz->briscola = -1; - $thiz->friend = -1; - $thiz->turn = 0; - $thiz->old_reason = ""; - $thiz->old_asta_pnt = -1; - $thiz->old_pnt = -1; - $thiz->old_win = -1; - $thiz->old_friend= -1; - - return ($thiz); - } - - function &bunch_create() - { - $ret = array(); - - for ($i = 0 ; $i < 40 ; $i++) { - $ret[$i] =& new Card($i, 'bunch', 'no_owner'); - } - - $oret = &$ret; - return ($oret); - } - - function bunch_make() - { - $ct = array(0,0,0,0,0); - - mt_srand(make_seed()); - - for ($i = 39 ; $i >= 0 ; $i--) - $rest[$i] = $i; - - for ($i = 39 ; $i >= 0 ; $i--) { - $rn = rand(0, $i); - - if ($rn == 0) - log_main("RND ZERO", ""); - - $id = $rest[$rn]; - - $owner = $i % 5; - $this->card[$id]->assign('hand', $owner); - - $rest[$rn] = $rest[$i]; - // $pubbpos[$rn2] = $pubbpos[$i]; - } - } - - function init(&$userarr) - { - $this->mazzo = rand(0,PLAYERS_N-1); - $this->points_n = 0; - $this->mult = 1; - $this->old_win =-1; - $this->old_reason = ""; - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $this->total[$i] = 0; - $user_cur = &$userarr[$this->player[$i]]; - $user_cur->exitislock = TRUE; - } - - log_main("table::init","ci siamo"); - } - - function game_init(&$userarr) - { - log_rd2("XXX", "GSTART 4"); - - $this->gstart = ($this->mazzo+1) % PLAYERS_N; - $this->bunch_make(); - - - $this->asta_pla_n = PLAYERS_N; - $this->asta_card = -1; - $this->asta_pnt = 60; - $this->asta_win = -1; - $this->briscola = -1; - $this->friend = -1; - $this->turn = 0; - - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $this->asta_pla[$i] = TRUE; - $user_cur = &$userarr[$this->player[$i]]; - $user_cur->subst = 'asta'; - $user_cur->asta_card = -2; - $user_cur->asta_pnt = -1; - $user_cur->handpt = $this->hand_points($i); - // SEE function calculate_points(&$table) - } - } - - function game_next() - { - $this->mazzo = ($this->mazzo + 1) % PLAYERS_N; - } - - function getPlayer($idx) - { - return ($this->player[$idx]); - } - - function setPlayer($idx, $player) - { - $this->player[$idx] = $player; - } - - function user_add($idx) - { - $this->player[$this->player_n] = $idx; - $this->player_n++; - - return ($this->player_n - 1); - } - - function user_rem(&$room, &$user) - { - $tabpos = $user->table_pos; - - /* verifico la consistenza dei dati */ - if ($room->user[$this->player[$tabpos]] == $user) { - - /* aggiorna l'array dei giocatori al tavolo. */ - for ($i = $tabpos ; $i < $this->player_n-1 ; $i++) { - $this->player[$i] = $this->player[$i+1]; - $user_cur = &$room->user[$this->player[$i]]; - $user_cur->table_pos = $i; - } - $this->player_n--; - } - else { - log_main($user->sess, "INCONSISTENCY ON TABLE."); - } - } - - function hand_points($idx) - { - GLOBAL $G_all_points; - - $tot = 0; - - for ($i = 0 ; $i < 40 ; $i++) { - if ($this->card[$i]->owner != $idx) - continue; - - $ctt = $this->card[$i]->value % 10; - $tot += $G_all_points[$ctt]; - } - - return ($tot); - } - - function exitlock_show(&$userarr, $table_pos) - { - $ct = $this->exitlock_calc(&$userarr, $table_pos); - - $ret = sprintf('exitlock_show(%d, %s);', $ct, - ($userarr[$this->player[$table_pos]]->exitislock ? 'true' : 'false')); - return ($ret); - } - - function exitlock_calc(&$userarr, $table_pos) - { - $ct = 0; - - for ($i = 0 , $ct = 0 ; $i < PLAYERS_N ; $i++) { - if ($userarr[$this->player[$i]]->exitislock == FALSE) - $ct++; - } - - return ($ct); - } -} // End class Table - -class User { - var $name; // name of the user - var $sess; // session of the user - var $ip; // ip of the user - var $lacc; // last access (for the cleanup) - var $laccwr; // last access (for the cleanup) - var $bantime; // timeout to temporary ban - var $stat; // status (outdoor, room, table, game, ...) - var $subst; // substatus for each status - var $step; // step of the current status - var $trans_step; // step to enable transition between pages (disable == -1) - var $comm; // commands array - var $asta_card; // - var $asta_pnt; // - var $handpt; // Total card points at the beginning of the current hand. - var $exitislock; // Player can exit from the table ? - var $table; // id of the current table (if in table state) - var $table_pos; // idx on the table - var $the_end; // Flag to change the end of the session - - function User() { - } - - function &create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") { - GLOBAL $G_false; - - if (($thiz = new User()) == FALSE) - return ($G_false); - - $thiz->name = $name; - $thiz->sess = $sess; - $thiz->ip = $ip; - $thiz->lacc = time(); - $thiz->laccwr = time(); - $thiz->bantime = 0; - $thiz->stat = $stat; - $thiz->subst = $subst; - $thiz->step = 1; - $thiz->trans_step = -1; - $thiz->comm = array(); - $thiz->asta_card = -2; - $thiz->asta_pnt = -1; - $thiz->handpt = -1; - $thiz->exitislock = TRUE; - - $thiz->table = $table; - - return ($thiz); - } - - function stat_set($stat) { - $this->stat = "$stat"; - - /* - if (validate_sess($this->sess)) { - $fp = fopen(PROXY_PATH."/".$this->sess.".stat", 'w'); - fwrite($fp, sprintf("%s\n",$this->stat)); - fclose($fp); - } - */ - } - - function step_set($step) { - $this->step = $step; - - do { - if (validate_sess($this->sess) == FALSE) - break; - if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE) - break; - fwrite($fp, pack("l",$this->step), 4); - fclose($fp); - - return (TRUE); - } while (0); - - return (FALSE); - } - - function step_inc() { - $this->step++; - - if (validate_sess($this->sess)) { - $fp = fopen(PROXY_PATH."/".$this->sess.".step", 'w'); - fwrite($fp, pack("l",$this->step), 4); - fclose($fp); - - return (TRUE); - } - - return (FALSE); - } -} - -function step_get($sess) { - $fp = FALSE; - $ct = 0; - do { - if (validate_sess($sess) == FALSE) - break; - $ct = 1; - if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE) - break; - $ct = 2; - if (($s = fread($fp, 4)) == FALSE) - break; - $ct = 3; - if (strlen($s) != 4) - break; - $ct = 4; - $arr = unpack('l', $s); - fclose($fp); - - // log_rd2($sess, "A0: ".$arr[0]." A1: ".$arr[1]); - return ($arr[1]); - } while (0); - - if ($fp != FALSE) - fclose($fp); - - log_rd2($sess, "STEP_GET: return false ".$ct); - return (FALSE); -} - -function step_unproxy($sess) { - log_rd2($sess, "UNPROXY: ".PROXY_PATH."/".$sess.".step"); - @unlink(PROXY_PATH."/".$sess.".step"); -} - - -class Room { - var $user; - var $table; - var $comm; // commands for many people - var $step; // current step of the comm array - var $garbage_timeout; - - function Room () { - $this->user = array(); - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $this->user[$i] =& User::create("", ""); - } - - for ($i = 0 ; $i < TABLES_N ; $i++) - $this->table[$i] =& Table::create(); - $this->garbage_timeout = 0; - } - - function garbage_manager($force) - { - - /* Garbage collector degli utenti in timeout */ - $curtime = time(); - if ($force || $this->garbage_timeout < $curtime) { - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; - if ($user_cur->sess == "") - continue; - - if ($user_cur->lacc + EXPIRE_TIME_RD < $curtime) { // Auto logout dell'utente - log_rd2($user_cur->sess, "AUTO LOGOUT."); - - if ($user_cur->stat == 'table' || $user_cur->stat == 'room') { - log_auth($user_cur->sess, "Autologout session."); - - $tmp_sess = $user_cur->sess; - $user_cur->sess = ""; - step_unproxy($tmp_sess); - $user_cur->name = ""; - $user_cur->the_end = FALSE; - - log_rd2($user_cur->sess, "AUTO LOGOUT."); - if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table') - $this->room_wakeup(&$user_cur); - else if ($user_cur->subst == 'standup') - $this->room_outstandup(&$user_cur); - else - log_rd2($sess, "LOGOUT FROM WHAT ???"); - } - } - - if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < $curtime) { // lo rimettiamo in piedi - if ($user_cur->stat == 'room' && $user_cur->subst == 'sitdown') { - $this->room_wakeup(&$user_cur); - $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; - $user_cur->comm[$user_cur->step % COMM_N] .= show_notify("
Sei stato inattivo per ".(EXPIRE_TIME_SMAMMA/60.0)." minuti.

Quindi ritorni tra i Giocatori in piedi.", 0, "torna ai tavoli", 400, 100); - $user_cur->step_inc(); - } - } - } - log_rd2($user_cur->sess, "GARBAGE UPDATED!"); - - $this->garbage_timeout = time() + GARBAGE_TIMEOUT; - } - - // BAN_IP_CLEAN - - } - - - function room_wakeup(&$user) - { - $table_idx = $user->table; - $table = &$this->table[$table_idx]; - - log_main("WAKEUP", "begin function table:".$table_idx." stat: ".$user->stat." subst: ".$user->subst); - - $curtime = time(); - - $from_table = ($user->stat == "table"); - if ($from_table) { - log_main("WAKEUP", "from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n); - - for ($i = 0 ; $i < $table->player_n ; $i++) { - $user_cur = &$this->user[$table->player[$i]]; - log_main("PREIMPOST", "INLOOP name: ".$user_cur->name); - - if ($user_cur != $user) { - $user_cur->stat_set("room"); - $user_cur->subst = "sitdown"; - $user_cur->laccwr = $curtime; - } - else if ($user->sess != "") { - $user_cur->stat_set("room"); - $user_cur->subst = "standup"; - $user_cur->laccwr = $curtime; - $user_cur->table = -1; - } - } - } - else { - $user->stat_set("room"); - $user->subst = "standup"; - $user->laccwr = $curtime; - } - /* aggiorna l'array dei giocatori al tavolo. */ - $table->user_rem(&$this, &$user); - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; - if ($user_cur->sess == '' || $user_cur->stat != 'room') - continue; - - log_main("VALORI", "name: ".$user_cur->name."from_table: ".$from_table." tab: ".$user_cur->table." taix: ".$table_idx." ucur: ".$user_cur." us: ".$user); - - $ret = "gst.st = ".($user_cur->step+1)."; "; - if ($from_table && ($user_cur->table == $table_idx || $user_cur == $user)) { - $ret .= 'gst.st_loc++; the_end=true; window.onunload = null; document.location.assign("index.php");|'; - // $ret .= 'gst.st_loc++; document.location.assign("index.php");|'; - log_main("DOCUMENT.index.php", "from table"); - } - else if ($user_cur->stat == "room") { - log_main("DOCUMENT.index.php", "from table"); - - $ret .= table_content($this, $user_cur, $table_idx); - $ret .= standup_content($this, $user_cur); - - $act_content = table_act_content(FALSE, 0, $table_idx, $user->table); - $ret .= sprintf('$("table_act%d").innerHTML = "%s";', $table_idx, $act_content); - - - if ($user_cur == $user) { - // set the new status - $ret .= 'subst = "standup"; '; - // clean the action buttons in other tables - for ($e = 0 ; $e < TABLES_N ; $e++) { - if ($this->table[$e]->player_n < PLAYERS_N) - $ret .= sprintf('$("table_act%d").innerHTML = "%s";', $e, table_act_content(TRUE, 0, $e, $user->table)); - } - } - else { - $act_content = table_act_content(($user_cur->subst == 'standup'), $table->player_n, $table_idx, $user_cur->table); - $ret .= sprintf('$("table_act%d").innerHTML = "%s";', $table_idx, $act_content); - } - } - log_wr($user_cur->sess, "ROOM_WAKEUP: ".$ret); - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); - } - } - - - - - function room_outstandup(&$user) - { - $this->room_sitdown(&$user, -1); - } - - function table_update(&$user) - { - log_main("table_update", "pre - USER: ".$user->name); - - $table_idx = $user->table; - - if ($table_idx > -1) - $table = &$this->table[$table_idx]; - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $ret = ""; - $user_cur = &$this->user[$i]; - if ($user_cur->sess == '' || $user_cur->stat != 'room') - continue; - - $ret = "gst.st = ".($user_cur->step+1)."; "; - if ($table_idx > -1) - $ret .= table_content($this, $user_cur, $table_idx); - - if ($user_cur == $user) { - $ret .= sprintf('$("myname").innerHTML = "%s: ";', xcape($user->name)); - } - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); - } - - log_main("table_update", "post"); - } - - function room_sitdown(&$user, $table_idx) - { - log_main("room_sitdown", ($user == FALSE ? "USER: FALSE" : "USER: ".$user->name)); - - if ($table_idx > -1) - $table = &$this->table[$table_idx]; - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $ret = ""; - $user_cur = &$this->user[$i]; - if ($user_cur->sess == '' || $user_cur->stat != 'room') - continue; - - $ret = "gst.st = ".($user_cur->step+1)."; "; - if ($table_idx > -1) - $ret .= table_content($this, $user_cur, $table_idx); - $ret .= standup_content($this, $user_cur); - - if ($user_cur == $user) { - $ret .= 'subst = "sitdown"; '; - // clean the action buttons in other tables - for ($e = 0 ; $e < TABLES_N ; $e++) { - $act_content = table_act_content(FALSE, 0, $e, $user_cur->table); - $ret .= sprintf('$("table_act%d").innerHTML = "%s";', $e, $act_content); - } - } - else if ($table_idx > -1) { - if ($table->player_n == PLAYERS_N) { - $act_content = table_act_content(($user_cur->subst == 'standup'), PLAYERS_N, $table_idx, $user_cur->table); - $ret .= sprintf('$("table_act%d").innerHTML = "%s";', $table_idx, $act_content); - } - } - $user_cur->comm[$user_cur->step % COMM_N] = $ret; - $user_cur->step_inc(); - } - } - - function chatt_send(&$user, $mesg) - { - if ($user->stat == 'table') { - $table = &$this->table[$user->table]; - } - - $user_mesg = substr($mesg,6); - - $timecur = time(); - - $dt = date("H:i ", $timecur); - if (strncmp($user_mesg, "/nick ", 6) == 0) { - log_main($user->sess, "chatt_send BEGIN"); - - if (($name_new = validate_name(substr($user_mesg, 6))) == FALSE) { - $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; - $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s","Il nickname deve contenere almeno una lettera o una cifra.");', $dt.NICKSERV, xcape($name_new)); - $user->step_inc(); - - return; - } - $user_mesg = "COMMAND ".$user_mesg; - // Search dup name - // change - // update local graph - // update remote graphs - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; - // if ($user_cur->sess == '' || $user_cur->stat != 'room') - if ($user_cur->sess == '') - continue; - if ($user_cur->name == $name_new) { - $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; "; - $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s","Nickname %s già in uso.");', $dt.NICKSERV, xcape($name_new)); - $user->step_inc(); - break; - } - } - if ($i == MAX_PLAYERS) { - $user->name = $name_new; - - log_main($user->sess, "chatt_send start set"); - - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - log_main($user->sess, "chatt_send set loop"); - - $user_cur = &$this->user[$i]; - if ($user_cur->sess == '') - continue; - if ($user_cur->stat == 'room') { - if ($user->stat == 'room' && $user->subst == 'standup') { - $this->standup_update(&$user); - } - else if ($user->stat == 'room' && $user->subst == 'sitdown' || - $user->stat == 'table') { - log_main($user->sess, "chatt_send pre table update"); - - $this->table_update(&$user); - - log_main($user->sess, "chatt_send post table update"); - } - } - else if ($user_cur->stat == 'table' && $user_cur->table == $user->table) { - $table = &$this->table[$user->table]; - - $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; - $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('set_names(" %s", " %s", " %s", " %s", " %s"); ', - xcape($this->user[$table->player[($user_cur->table_pos)%PLAYERS_N]]->name), - xcape($this->user[$table->player[($user_cur->table_pos+1)%PLAYERS_N]]->name), - xcape($this->user[$table->player[($user_cur->table_pos+2)%PLAYERS_N]]->name), - (PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+3)%PLAYERS_N]]->name)), - (PLAYERS_N == 3 ? "" : xcape($this->user[$table->player[($user_cur->table_pos+4)%PLAYERS_N]]->name))); - if ($user_cur == $user) - $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('$("myname").innerHTML = "%s";', - xcape($user->name,ENT_COMPAT,"UTF-8")); - $user_cur->step_inc(); - } - } - } - } - else { - for ($i = 0 ; $i < ($user->stat == 'room' ? MAX_PLAYERS : PLAYERS_N) ; $i++) { - if ($user->stat == 'room') { - $user_cur = &$this->user[$i]; - if ($user_cur->sess == '' || $user_cur->stat != 'room') - continue; - } - else { - $user_cur = &$this->user[$table->player[$i]]; - } - - $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; "; - $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('chatt_sub("%s","%s");', - $dt.xcape($user->name), xcape($user_mesg)); - $user_cur->step_inc(); - } - log_legal($timecur, $user->sess, $user->name, - ($user->stat == 'room' ? 'room' : 'table '.$user->table),$user_mesg); - } - } - - function &get_user($sess, &$idx) - { - GLOBAL $PHP_SELF, $G_false; - - if (validate_sess($sess)) { - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - if (strcmp($sess, $this->user[$i]->sess) == 0) { - // find it - $idx = $i; - $ret = &$this->user[$i]; - return ($ret); - } - } - log_main($sess, sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF)); - // for ($i = 0 ; $i < MAX_PLAYERS ; $i++) - // log_main($sess, sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess)); - } - else { - log_main($sess, sprintf("get_user: Wrong strlen [%s]",$sess)); - } - - return ($G_false); - } - - /* - * function &add_user(&$room, &$sess, &$idx, $name, $ip) - * - * RETURN VALUE: - * if ($idx != -1 && ret == FALSE) => duplicated nick - * if ($idx == -2 && ret == FALSE) => invalid name - * if ($idx == -1 && ret == FALSE) => no space left - * if (ret == TRUE) => SUCCESS - */ - function &add_user(&$sess, &$idx, $name, $ip) - { - GLOBAL $G_false; - - $idx = -1; - $idfree = -1; - - if (($name_new = validate_name($name)) == FALSE) { - $idx = -2; - return ($G_false); - } - - log_auth("XXX", sprintf("ARRIVA: [%s]", $sess)); - if (validate_sess($sess) == FALSE) - $sess = ""; - - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - /* free user ? */ - if (strcmp($sess, $this->user[$i]->sess) == 0) { - if ($idx == -1) - $idx = $i; - } - if ($idfree == -1 && strcmp("", $this->user[$i]->sess) == 0) { - $idfree = $i; - } - if (strcmp($this->user[$i]->name, $name_new) == 0) { - $idx = $i; - break; - } - } - if ($idx == -1) - $idx = $idfree; - - log_auth("XXX", sprintf("TROVATO A QUESTO PUNTO [%d] sess [%s] name [%s]", $idx, $sess, $name_new)); - - if ($idx != -1 && $i == MAX_PLAYERS) { - /* SUCCESS */ - $curtime = time(); - if ($sess == "") { - $this->user[$idx]->sess = uniqid(""); - $sess = $this->user[$idx]->sess; - - } - else { - $this->user[$idx]->sess = $sess; - } - $this->user[$idx]->name = $name_new; - $this->user[$idx]->stat_set("room"); - // MOP $this->user[$idx]->step_set(0); - $this->user[$idx]->subst = "standup"; - $this->user[$idx]->lacc = $curtime; - $this->user[$idx]->laccwr = $curtime; - $this->user[$idx]->bantime = 0; - $this->user[$idx]->ip = $ip; - log_main("XXX", sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s]", $idx, $sess, $name_new)); - - return ($this->user[$idx]); - } - - return ($G_false); - } - - function standup_update(&$user) - { - for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - $user_cur = &$this->user[$i]; - if ($user_cur->sess == '') - continue; - - log_main("STANDUP START", $user_cur->stat); - - if ($user_cur->stat == 'room') { - $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ".standup_content($this, $user_cur); - if ($user_cur == $user) - $user_cur->comm[$user_cur->step % COMM_N] .= sprintf('$("myname").innerHTML = "%s: ";', xcape($user->name)); - - log_main("FROM STANDUP", "NAME: ".$user_cur->name." SENDED: ".$user_cur->comm[$user_cur->step % COMM_N]); - - $user_cur->step_inc(); - } - } - } - - // Static functions - function &init_data() - { - $room =& new Room(); - - return $room; - } - - - function &load_data() - { - GLOBAL $G_false, $sess; - - if (($tok = ftok(FTOK_PATH."/main", "B")) == -1) { - echo "FTOK FAILED"; - exit; - } - - if ($shm = shm_attach($tok, SHM_DIMS)) { - $room = @shm_get_var($shm, $tok); - - log_only($sess, "bri == ".($room == FALSE ? "FALSE" : "TRUE")." bri === ".($room === FALSE ? "FALSE" : "TRUE")." bri isset ".(isset($room) ? "TRUE" : "FALSE")); - if (isset($room)) - log_only($sess, "bri count ".count($room)); - - if ($room == FALSE) { - log_only($sess, "INIT MAIN DATA"); - - $room =& Room::init_data(); - if (shm_put_var($shm, $tok, $room) == FALSE) { - log_only($sess, "PUT_VAR FALLITA ".strlen(serialize($room))); - log_only($sess, serialize($room)); - } - } - - shm_detach($shm); - - $ret = &$room; - return ($ret); - } - - return ($G_false); - } - - - function save_data(&$room) - { - GLOBAL $sess; - - $ret = FALSE; - $shm = FALSE; - $isacq = FALSE; - - // var_dump($room); - - if (($tok = ftok(FTOK_PATH."/main", "B")) == -1) - return (FALSE); - - do { - $isacq = TRUE; - - if (($shm = shm_attach($tok, SHM_DIMS)) == FALSE) - break; - - // log_only($sess, "PUT_VAR DI ".strlen(serialize($room))); - if (shm_put_var($shm, $tok, $room) == FALSE) { - log_only($sess, "PUT_VAR FALLITA ".strlen(serialize($room))); - log_only($sess, serialize($room)); - break; - } - // log_main("XXX", "QUI CI ARRIVA [".$room->user[0]->name."]"); - $ret = TRUE; - } while (0); - - if ($shm) - shm_detach($shm); - - return ($ret); - } - - function lock_data() - { - GLOBAL $sess; - - // echo "LOCK: ".FTOK_PATH."/main"; - // exit; - if (($tok = ftok(FTOK_PATH."/main", "B")) == -1) { - echo "FTOK FAILED"; - exit; - } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { - echo "SEM_GET FAILED"; - exit; - } - if (sem_acquire($res)) { - log_only($sess, "LOCK"); - return ($res); - } - else - return (FALSE); - } - - function unlock_data($res) - { - GLOBAL $sess; - - log_only($sess, "UNLOCK"); - - return (sem_release($res)); - } -} // end class Room - -function make_seed() -{ - list($usec, $sec) = explode(' ', microtime()); - return (float) $sec + ((float) $usec * 100000); -} - -function log_only2($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - - if (($fp = @fopen("/tmp/brisk_only2.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_only($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - - if (($fp = @fopen("/tmp/brisk_only.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_main($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_main.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_rd($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_rd.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_rd2($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_rd2.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_send($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_send.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_auth($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_auth.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%d] [%s] [%s]\n", time(), $sess, $log)); - fclose($fp); - } -} - -function log_lock($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_lock.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%d] [%s] [%s]\n", time(), $sess, $log)); - fclose($fp); - } -} - -function log_wr($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_wr.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_load($sess, $log) { - if (BRISK_DEBUG != TRUE) - return; - - if (($fp = @fopen("/tmp/brisk_load.log", 'a')) != FALSE) { - fwrite($fp, sprintf("SESS: [%s] [%s]\n", $sess, $log)); - fclose($fp); - } -} - -function log_legal($timecur, $sess, $name, $where, $mesg) -{ - GLOBAL $_SERVER; - - if (($fp = @fopen(LEGAL_PATH, 'a')) != FALSE) { - /* Unix time | session | nickname | IP | where was | mesg */ - fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|\n", $timecur, $sess, $name, $_SERVER['REMOTE_ADDR'], $where , $mesg)); - fclose($fp); - } -} - - - - -function lock_banlist() -{ - if (($tok = ftok(FTOK_PATH."/main", "L")) == -1) { - echo "FTOK FAILED"; - exit; - } - if (($res = sem_get($tok)) == FALSE) { - echo "SEM_GET FAILED"; - exit; - } - if (sem_acquire($res)) - return ($res); - else - return (FALSE); -} - -function unlock_banlist($res) -{ - return (sem_release($res)); -} - -function table_act_content($isstanding, $sitted, $table, $cur_table) -{ - $ret = ""; - - if ($isstanding) { - if ($sitted < PLAYERS_N) { - $ret = sprintf('', $table, $table); - } - } - else { - if ($table == $cur_table) - $ret = sprintf(''); - else - $ret = ""; - } - return ($ret); -} - -function table_content($room, $user, $table_idx) -{ - $content = ""; - $ret = ""; - // TODO - // - // Si possono usare i dati nella classe table - // - - $sess = $user->sess; - $table = &$room->table[$table_idx]; - - if ($user->stat != 'room') - return; - - for ($i = 0 ; $i < $table->player_n ; $i++) { - $user_cur = &$room->user[$table->player[$i]]; - - if ($user_cur == $user) - { $hilion = ""; $hilioff = ""; } - else - { $hilion = ""; $hilioff = ""; } - - log_main($user_cur->name, sprintf("IN TABLE [%d]", $table_idx)); - - $content .= sprintf("%s%s%s
",$hilion, xcape($user_cur->name), $hilioff); - } - /* - for ( ; $i < PLAYERS_N ; $i++) - $content .= "
"; - */ - - $ret .= sprintf('$("table%d").innerHTML = "%s";', $table_idx, $content); - - return ($ret); -} - -function standup_content(&$room, $user) -{ - $ret = ""; - $content = ""; - - if ($user->stat != 'room') - return; - - for ($e = 0 , $ct = 0 ; $ct < 4 && $e < MAX_PLAYERS ; $e++) { - if ($room->user[$e]->sess == "" || $room->user[$e]->stat != "room" || $room->user[$e]->name == "") - continue; - $ct++; - } - - $content .= sprintf('', $ct); - - for ($e = 0 , $ct = 0 ; $e < MAX_PLAYERS ; $e++) { - if ($room->user[$e]->sess == "" || $room->user[$e]->stat != "room" || $room->user[$e]->name == "") - continue; - - - if ($room->user[$e]->subst == "standup") { - if (($ct % 4) == 0) { - $content .= ''; - } - if ($room->user[$e] == $user) - { $hilion = ""; $hilioff = ""; } - else - { $hilion = ""; $hilioff = ""; } - - $content .= sprintf('',$hilion, xcape($room->user[$e]->name), $hilioff); - if (($ct % 4) == 3) { - $content .= ''; - } - $ct++; - } - } - $content .= '
%s%s%s
'; - - $content2 = ''; - $ret .= sprintf('$("standup").innerHTML = "%s"; $("esco").innerHTML = "%s";', - $content, $content2); - - return ($ret); -} - - -function show_notify($text, $tout, $butt, $w, $h) -{ - log_main("SHOW_NOTIFY", $text); - return sprintf('var noti = new notify(gst,"%s",%d,"%s",%d,%d);', $text, $tout, $butt, $w, $h); -} - -function briscola_show($room, $table, $user) -{ - $ptnadd = ""; - $ret = ""; - - if ($table->asta_card == 9) - $ptnadd = sprintf("
con %d punti", $table->asta_pnt); - - /* text of caller cell */ - if ($user->table_pos == $table->asta_win) - $ret .= sprintf('$("callerinfo").innerHTML = "Chiami%s:";', $ptnadd); - else - $ret .= sprintf('$("callerinfo").innerHTML = "Chiama %s%s:";', - xcape($room->user[$table->player[$table->asta_win]]->name), $ptnadd); - - $ret .= sprintf('$("caller").style.backgroundImage = \'url("img/brisk_caller_sand%d.png")\';', - $table->asta_win); - $ret .= sprintf('$("callerimg").src = "img/%02d.png";', $table->briscola); - $ret .= sprintf('$("caller").style.visibility = "visible";'); - $ret .= sprintf('$("chooseed").style.visibility = "hidden";'); - $ret .= sprintf('$("astalascio").style.visibility = "";'); - $ret .= sprintf('$("asta").style.visibility = "hidden";'); - $ret .= sprintf('show_astat(-2,-2,-2,-2,-2);'); - - return ($ret); -} - - -function game_result($asta_pnt, $pnt) -{ - if ($asta_pnt == 61) { - if ($pnt > 60) - return (1); - else if ($pnt == 60) - return (0); - else - return (-1); - } - else { - if ($pnt >= $asta_pnt) - return (1); - else - return (-1); - } -} - -function multoval($mult) -{ - if ($mult == 2) - return ("doppio"); - else if ($mult == 4) - return ("quadruplo"); - else - return (sprintf("%d-plo", $mult)); -} - -function show_table_info(&$room, &$table, $table_pos) -{ - $ret = ""; - $user = &$room->user[$table->player[$table_pos]]; - - $pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS; - $noty = sprintf(''); - - // Names. - for ($i = 0 ; $i < PLAYERS_N ; $i++) - $noty .= sprintf('', xcape($room->user[$table->player[$i]]->name)); - $noty .= sprintf(""); - - // Points. - log_main("show_table_info", "pnt_min: ".$pnt_min." Points_n: ".$table->points_n); - - for ($i = $pnt_min ; $i < $table->points_n ; $i++) { - $noty .= sprintf('', $i+1); - for ($e = 0 ; $e < PLAYERS_N ; $e++) - $noty .= sprintf('', $table->points[$i % MAX_POINTS][$e]); - $noty .= ""; - } - - // Total points. - $noty .= ''; - for ($e = 0 ; $e < PLAYERS_N ; $e++) - $noty .= sprintf('', $table->total[$e]); - $noty .= "
%s
%d%d
Tot.%d
"; - - if ($table->old_reason != "") { - $noty .= sprintf("
%s
", xcape($table->old_reason)); - } - - if ($table->old_win != -1) { - $win = $table->player[$table->old_win]; - $fri = $table->player[$table->old_friend]; - - $wol = game_result($table->old_asta_pnt, $table->old_pnt); - - if ($win != $fri) { - $noty .= sprintf("
Nell'ultima mano ha chiamato %s, il socio era %s,
", - xcape($room->user[$win]->name), - xcape($room->user[$fri]->name)); - if ($table->old_pnt == 120) { - $noty .= sprintf("hanno fatto cappotto EBBRAVI!.
"); - } - else { - $noty .= sprintf("dovevano fare %s punti e ne hanno fatti %d: hanno %s.
", - ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt : - 'più di 60'), $table->old_pnt, - ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso"))); - } - } - else { - $noty .= sprintf("
Nell'ultima mano %s si è chiamato in mano,
", - xcape($room->user[$win]->name)); - if ($table->old_pnt == 120) { - $noty .= sprintf("ha fatto cappotto EBBRAVO!.
"); - } - else { - $noty .= sprintf("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"))); - } - } - } - if ($table->mazzo == $table_pos) - $noty .= "Fai tu il mazzo,"; - else { - $unam = xcape($room->user[$table->player[$table->mazzo]]->name); - $noty .= "Il mazzo a $unam,"; - } - - if ($user->subst == 'asta') { - if ($table->asta_win == -1) // auction case - $curplayer = $table->gstart % PLAYERS_N; - else - $curplayer = $table->asta_win; - } - else if ($user->subst == 'game') { - $curplayer = ($table->gstart + $table->turn) % PLAYERS_N; - } - - - if ($curplayer == $table_pos) { - $noty .= " tocca a te giocare."; - } - else { - $unam = xcape($room->user[$table->player[$curplayer]]->name); - $noty .= " tocca a $unam giocare."; - } - - if ($table->mult > 1) { - $noty .= sprintf(" La partita vale %s.", multoval($table->mult)); - } - $noty .= "

"; - - $ret .= show_notify($noty, 3000, "torna alla partita", 500, 400); - - return ($ret); -} - -function root_wellcome($user) -{ - GLOBAL $root_wellarr; - $ret = ""; - - for ($i = 0 ; $i < count($root_wellarr) ; $i++) - $ret .= sprintf('chatt_sub("ChanServ: ","%s");', str_replace('"', '\"', $root_wellarr[$i])); - - return ($ret); -} - -function table_wellcome($user) -{ - GLOBAL $table_wellarr; - $ret = ""; - - for ($i = 0 ; $i < count($table_wellarr) ; $i++) - $ret .= sprintf('chatt_sub("ChanServ: ","%s");', str_replace('"', '\"', $table_wellarr[$i])); - - return ($ret); -} - -function show_room(&$room, &$user) -{ - $ret = sprintf('gst.st = %d;', $user->step); - $ret .= sprintf('stat = "%s";', $user->stat); - - $ret .= root_wellcome($user); - $ret .= sprintf('subst = "%s";', $user->subst); - $ret .= sprintf('$("myname").innerHTML = "%s";', xcape($user->name,ENT_COMPAT,"UTF-8")); - for ($i = 0 ; $i < TABLES_N ; $i++) { - $ret .= table_content($room, $user, $i); - $act_content = table_act_content(($user->subst == 'standup'), - $room->table[$i]->player_n, $i, $user->table); - $ret .= sprintf('$("table_act%d").innerHTML = "%s";', $i, $act_content); - } - $ret .= standup_content($room, $user); - - return ($ret); -} - - - -/* show table -is_transition (is from room to table ?) -is_again (is another game) - -Examples of $is_transition, $is_again: - from reload of the page: FALSE, FALSE - from sitdown in room: TRUE, FALSE - from table: asta cmd e tutti passano: TRUE, TRUE - from table: fine partita: TRUE, TRUE - */ -function show_table(&$room, &$user, $sendstep, $is_transition, $is_again) -{ - $table_idx = $user->table; - $table = &$room->table[$table_idx]; - $table_pos = $user->table_pos; - - $ret = "table_init();"; - $ret .= $table->exitlock_show(&$room->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); - /* BACKGROUND */ - $ret .= "background_set();"; - - /* USERS INFO */ - $ret .= sprintf('$("myname").innerHTML = "%s";', xcape($user->name,ENT_COMPAT,"UTF-8")); - $ret .= sprintf('set_names(" %s", " %s", " %s", " %s", " %s"); ', - xcape($room->user[$table->player[($table_pos)%PLAYERS_N]]->name), - xcape($room->user[$table->player[($table_pos+1)%PLAYERS_N]]->name), - xcape($room->user[$table->player[($table_pos+2)%PLAYERS_N]]->name), - (PLAYERS_N == 3 ? "" : xcape($room->user[$table->player[($table_pos+3)%PLAYERS_N]]->name)), - (PLAYERS_N == 3 ? "" : xcape($room->user[$table->player[($table_pos+4)%PLAYERS_N]]->name))); - } - /* NOTIFY FOR THE CARD MAKER */ - if ($is_transition) { // && $user->subst == "asta" superfluo - $ret .= show_table_info(&$room, &$table, $table_pos); - } - if (!$is_again) - $ret .= table_wellcome($user); - - if ($is_transition && !$is_again) { // appena seduti al tavolo, play della mucca - $ret .= playsound("cow.mp3"); - } - - - /* CARDS */ - if ($is_transition) { // && $user->subst == "asta" superfluo - $ret .= "|"; - - for ($i = 0 ; $i < 8 ; $i++) { - for ($e = 0 ; $e < PLAYERS_N ; $e++) { - $ct = 0; - for ($o = 0 ; $o < 40 && $ct < $i+1 ; $o++) { - if ($table->card[$o]->owner == (($e + $table->gstart) % PLAYERS_N)) { - $ct++; - if ($ct == $i+1) - break; - } - } - log_rd($user->sess, "O ".$o." VAL ".$table->card[$o]->value." Owner: ".$table->card[$o]->owner); - - $ret .= sprintf( ' card_send(%d,%d,%d,%8.2f,%d);|', ($table->gstart + $e) % PLAYERS_N, - $i, ((($e + PLAYERS_N - $table_pos + $table->gstart) % PLAYERS_N) == 0 ? - $table->card[$o]->value : -1), - ($i == 7 && $e == (PLAYERS_N - 1) ? 1 : 0.5),$i+1); - } - } - } - else { - $taked = array(0,0,0,0,0); - $inhand = array(0,0,0,0,0); - $ontabl = array(-1,-1,-1,-1,-1); - $cards = array(); - - for ($i = 0 ; $i < 40 ; $i++) { - if ($table->card[$i]->stat == 'hand') { - if ($table->card[$i]->owner == $table_pos) { - $cards[$inhand[$table->card[$i]->owner]] = $table->card[$i]->value; - } - $inhand[$table->card[$i]->owner]++; - } - else if ($table->card[$i]->stat == 'take') { - log_main("Card taked:", $table->card[$i]->value."OWN: ".$table->card[$i]->owner); - $taked[$table->card[$i]->owner]++; - } - else if ($table->card[$i]->stat == 'table') { - $ontabl[$table->card[$i]->owner] = $i; - } - } - $logg = "\n"; - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $logg .= sprintf("INHAND: %d IN TABLE %d TAKED %d\n", $inhand[$i], $ontabl[$i], $taked[$i]); - } - log_main("Stat table:", $logg); - - /* Set ours cards. */ - $oursarg = ""; - for ($i = 0 ; $i < $inhand[$table_pos] ; $i++) - $oursarg .= ($i == 0 ? "" : ", ").$cards[$i]; - for ($i = $inhand[$table_pos] ; $i < 8 ; $i++) - $oursarg .= ($i == 0 ? "" : ", ")."-1"; - $ret .= sprintf('card_setours(%s);', $oursarg); - - /* Dispose all cards */ - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - /* Qui sotto al posto di + 1 c'era + ->gstart ... credo in modo errato */ - $ret .= sprintf('cards_dispose(%d,%d,%d);', $i, - $inhand[$i], $taked[$i]); - - if ($ontabl[$i] != -1) { - $ret .= sprintf('card_place(%d,%d,%d,%d,%d);',$i, $inhand[$i], - $table->card[$ontabl[$i]]->value, - $table->card[$ontabl[$i]]->x, $table->card[$ontabl[$i]]->y); - } - } - } - - /* Show auction */ - if ($user->subst == 'asta') { - - /* show users auction status */ - $showst = ""; - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $user_cur = &$room->user[$table->player[$i]]; - $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), - ($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt)); - } - if (PLAYERS_N == 3) - $showst .= ",-2,-2"; - $ret .= sprintf('show_astat(%s);', $showst); - - if ($table->asta_win != -1 && $table->asta_win == $table_pos) { - /* show card chooser */ - $ret .= sprintf('choose_seed(%s); $("astalascio").style.visibility = ""; $("asta").style.visibility = "hidden";', - $table->asta_card); - } - else { - /* show auction */ - if ($table_pos == ($table->gstart % PLAYERS_N) && - $table->asta_win == -1) - $ret .= sprintf('dispose_asta(%d,%d, %s);', - $table->asta_card + 1, $table->asta_pnt+1, ($user->handpt <= 2 ? "true" : "false")); - else - $ret .= sprintf('dispose_asta(%d,%d, %s);', - $table->asta_card + 1, -($table->asta_pnt+1), ($user->handpt <= 2 ? "true" : "false")); - } - - /* Remark */ - if ($table->asta_win == -1) { // auction case - if ($table_pos == ($table->gstart % PLAYERS_N)) - $ret .= "remark_on();"; - else - $ret .= "remark_off();"; - } - else { // chooseed case - if ($table_pos == $table->asta_win) - $ret .= "remark_on();"; - else - $ret .= "remark_off();"; - } - } - else if ($user->subst == 'game') { - /* HIGHLIGHT */ - if (($table->gstart + $table->turn) % PLAYERS_N == $table_pos) - $ret .= "is_my_time = true; remark_on();"; - else - $ret .= "remark_off();"; - - /* WHO CALL AND WATH */ - $ret .= briscola_show($room, $table, $user); - - } - return ($ret); - } - -function calculate_winner(&$table) -{ - $briontab = FALSE; - $ontab = array(); - $ontid = array(); - $cur_win = -1; - $cur_val = 100; - $cur_seed = $table->briscola - ($table->briscola % 10); - - for ($i = 0 ; $i < 40 ; $i++) { - if ($table->card[$i]->stat != "table") - continue; - - log_wr($sess, sprintf("Card On table: [%d]", $i)); - - $v = $table->card[$i]->value; - $ontab[$table->card[$i]->owner] = $v; - $ontid[$table->card[$i]->owner] = $i; - /* se briscola setto il flag */ - if (($v - ($v % 10)) == $cur_seed) - $briontab = TRUE; - } - - if ($briontab == FALSE) { - $cur_win = $table->gstart; - $cur_val = $ontab[$cur_win]; - $cur_seed = $cur_val - ($cur_val % 10); - } - - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - if (($ontab[$i] - ($ontab[$i] % 10)) == $cur_seed) { - if ($ontab[$i] < $cur_val) { - $cur_val = $ontab[$i]; - $cur_win = $i; - } - } - } - - for ($i = 0 ; $i < PLAYERS_N ; $i++) { - $table->card[$ontid[$i]]->owner = $cur_win; - $table->card[$ontid[$i]]->stat = "take"; // Card stat - } - return ($cur_win); -} - -function calculate_points(&$table) -{ - GLOBAL $G_all_points; - - $pro = 0; - - if ($table->asta_pnt == 60) - $table->asta_pnt = 61; - - $table->old_reason = ""; - $table->old_win = $table->asta_win; - $table->old_friend = $table->friend; - $table->old_asta_pnt = $table->asta_pnt; - - for ($i = 0 ; $i < 40 ; $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("XXX", sprintf("PRO: [%d]", $pro)); - - - if ($table->asta_pnt == 61 && $pro == 60) { // PATTA ! - $table->points[$table->points_n % MAX_POINTS] = array(); - for ($i = 0 ; $i < PLAYERS_N ; $i++) - $table->points[$table->points_n % MAX_POINTS][$i] = 0; - $table->points_n++; - $table->old_pnt = $pro; - $table->mult *= 2; - - return; - } - - if ($pro >= $table->asta_pnt) - $sig = 1; - else - $sig = -1; - - $table->points[$table->points_n % MAX_POINTS] = array(); - for ($i = 0 ; $i < 5 ; $i++) { - if ($i == $table->asta_win) - $pt = ($i == $table->friend ? 4 : 2); - else if ($i == $table->friend) - $pt = 1; - else - $pt = -1; - - log_wr("XXX", sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pt)); - - $pt = $pt * $sig * $table->mult * ($pro == 120 ? 2 : 1); - - log_wr("XXX", sprintf("PRO:[%d][%d][%d]", $sig, $table->mult, ($pro == 120 ? 2 : 1))); - - $table->points[$table->points_n % MAX_POINTS][$i] = $pt; - $table->total[$i] += $pt; - } - $table->points_n++; - $table->old_pnt = $pro; - $table->mult = 1; -} - -function validate_sess($sess) -{ - if (strlen($sess) == SESS_LEN) - return (TRUE); - else - return (FALSE); -} - -function validate_name($name) -{ - $name_new = str_replace(' ', '_', substr(trim($name),0,12)); - - for ($i = 0 ; $i < strlen($name_new) ; $i++) { - $c = $name_new[$i]; - if (($c >= "a" && $c <= "z") || ($c >= "A" && $c <= "Z") || ($c >= "0" && $c <= "9")) - return ($name_new); - } - - return (FALSE); -} - -function playsound($filename) -{ - return (sprintf('playsound("flasou", "%s");', $filename)); -} - -function secstoword($secs) -{ - $mins = floor($secs / 60); - $secs = $secs % 60; - if ($mins > 0) - $ret = sprintf("%d minut%s%s", $mins, ($mins > 1 ? "i" : "o"), ($secs > 0 ? " e " : "")); - - if ($secs > 0) - $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "i" : "o")); - - return ($ret); -} - -?> -- 2.17.1