rifattorizzata gestione table e inseriti uscita condivisa e abbandono della mano
authorMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Sun, 18 Feb 2007 15:26:48 +0000 (15:26 +0000)
committerMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Sun, 18 Feb 2007 15:26:48 +0000 (15:26 +0000)
web/brisk.phh
web/index_wr.php

index 11f44d2..868c538 100644 (file)
@@ -35,6 +35,7 @@ define(NICKSERV, "<i>SERVER</i>");
 define(BRISK_DEBUG, FALSE);
 // define(DEBUGGING, "local");
 
+$G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
 $G_brisk_version = "0.4.6";
 
 $root_wellarr = Array ( 'Benvenuto in brisk (Ver. '.$G_brisk_version.').',
@@ -145,6 +146,7 @@ class Table {
   var $briscola;
   var $friend;
   
+  var $old_reason;
   var $old_asta_pnt;
   var $old_pnt;
   var $old_win;
@@ -167,6 +169,7 @@ class Table {
     $this->briscola  =  -1;
     $this->friend    =  -1;
     $this->turn      =   0;
+    $this->old_reason = "";
     $this->old_asta_pnt = -1;
     $this->old_pnt      = -1;
     $this->old_win   =  -1;
@@ -210,20 +213,23 @@ class Table {
     }
   }
 
-  function init()
+  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(&$bri)
+  function game_init(&$userarr)
   {
     log_rd2($sess,"GSTART 4");
 
@@ -241,10 +247,12 @@ class Table {
     
     for ($i = 0 ; $i < PLAYERS_N ; $i++) {
       $this->asta_pla[$i] = TRUE;
-      $user_cur = &$bri->user[$this->player[$i]];
+      $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)
     }
   }
 
@@ -291,6 +299,43 @@ class 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 {
@@ -305,7 +350,8 @@ class User {
   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
 
@@ -321,6 +367,8 @@ class User {
     $this->comm  = array();
     $this->asta_card = -2;
     $this->asta_pnt  = -1;
+    $this->handpt = -1;
+    $this->exitislock = TRUE;
 
     $this->table = $table;
   }
@@ -368,7 +416,8 @@ class brisco {
            
            log_rd2($user_cur->sess, "AUTO LOGOUT.");
            if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table')
-             $this->room_wakeup(&$user_cur);
+             $this->room_wakeu
+p(&$user_cur);
            else if ($user_cur->subst == 'standup')
              $this->room_outstandup(&$user_cur);
            else
@@ -404,6 +453,12 @@ class brisco {
     $from_table = ($user->stat == "table");
     if ($from_table) {
       log_main("WAKEUP", "from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
+      $lockcalc = $table->exitlock_calc(&$this->user, $table_pos);
+      if ($lockcalc < 3) {
+       // BAN TEMP!
+asdasdasdas
+      }
+
       for ($i = 0 ; $i < $table->player_n ; $i++) {
        $user_cur = &$this->user[$table->player[$i]];
        log_main("PREIMPOST", "INLOOP name: ".$user_cur->name);
@@ -1037,6 +1092,7 @@ function briscola_show($bri, $table, $user)
   $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);');
   
@@ -1100,6 +1156,10 @@ function show_table_info(&$bri, &$table, $table_pos)
     $noty .= sprintf('<td class=\"td_points\">%d</td>', $table->total[$e]);
   $noty .= "</tr></table>";
 
+  if ($table->old_reason != "") {
+    $noty .= sprintf("<hr><b>%s</b><br>", xcape($table->old_reason));
+  }
+
   if ($table->old_win != -1) {
     $win = $table->player[$table->old_win];
     $fri = $table->player[$table->old_friend];
@@ -1215,50 +1275,39 @@ function show_room(&$bri, &$user)
 is_transition (is from room to table ?)
 is_again      (is another game)
 
-Examles of $is_transition, $is_again:
+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
+  from sitdown in room:                  TRUE, FALSE
+  from table: asta cmd e tutti passano:  TRUE, TRUE
+  from table: fine partita:              TRUE, TRUE
  */
 function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
 {
   $table_idx = $user->table;
   $table = &$bri->table[$table_idx];
-
-  /****************
-   FOR RELOAD:
-     DONE - user names
-     handed cards
-     tabled cards
-     taked  cards
-     remark on/off
-     cards dnd (and gameable card if its turn)
-     who call and what
-  ****************/
+  $table_pos = $user->table_pos;
 
   $ret = "table_init();";
-  
+  $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, $user->table_pos);
+                    $sendstep, $user->stat, $user->subst, $table_pos);
     /* BACKGROUND */
     $ret .= "background_set();";
     
     /* USERS INFO */
     $ret .= sprintf('$("myname").innerHTML = "<b>%s</b>";', xcape($user->name,ENT_COMPAT,"UTF-8"));
     $ret .= sprintf('set_names(" %s", " %s", " %s", " %s", " %s"); ',
-                   xcape($bri->user[$table->player[($user->table_pos)%PLAYERS_N]]->name),
-                   xcape($bri->user[$table->player[($user->table_pos+1)%PLAYERS_N]]->name),
-                   xcape($bri->user[$table->player[($user->table_pos+2)%PLAYERS_N]]->name),
-                   (PLAYERS_N == 3 ? "" :  xcape($bri->user[$table->player[($user->table_pos+3)%PLAYERS_N]]->name)),
-                   (PLAYERS_N == 3 ? "" :  xcape($bri->user[$table->player[($user->table_pos+4)%PLAYERS_N]]->name)));
+                   xcape($bri->user[$table->player[($table_pos)%PLAYERS_N]]->name),
+                   xcape($bri->user[$table->player[($table_pos+1)%PLAYERS_N]]->name),
+                   xcape($bri->user[$table->player[($table_pos+2)%PLAYERS_N]]->name),
+                   (PLAYERS_N == 3 ? "" :  xcape($bri->user[$table->player[($table_pos+3)%PLAYERS_N]]->name)),
+                   (PLAYERS_N == 3 ? "" :  xcape($bri->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(&$bri, &$table, $user->table_pos);
+    $ret .= show_table_info(&$bri, &$table, $table_pos);
   }
   if (!$is_again) 
     $ret .= table_wellcome($user);
@@ -1285,7 +1334,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
        log_rd($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 - $user->table_pos + $table->gstart) % PLAYERS_N) == 0 ?
+                        $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);
       }
@@ -1299,7 +1348,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
 
     for ($i = 0 ; $i < 40 ; $i++) {
       if ($table->card[$i]->stat == 'hand') {
-       if ($table->card[$i]->owner == $user->table_pos) {
+       if ($table->card[$i]->owner == $table_pos) {
          $cards[$inhand[$table->card[$i]->owner]] = $table->card[$i]->value;
        }
        $inhand[$table->card[$i]->owner]++;
@@ -1320,9 +1369,9 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
 
     /* Set ours cards. */
     $oursarg = "";
-    for ($i = 0 ; $i < $inhand[$user->table_pos] ; $i++) 
+    for ($i = 0 ; $i < $inhand[$table_pos] ; $i++) 
       $oursarg .= ($i == 0 ? "" : ", ").$cards[$i];
-    for ($i = $inhand[$user->table_pos] ; $i < 8 ; $i++) 
+    for ($i = $inhand[$table_pos] ; $i < 8 ; $i++) 
       $oursarg .= ($i == 0 ? "" : ", ")."-1";
     $ret .= sprintf('card_setours(%s);', $oursarg);
 
@@ -1354,31 +1403,31 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
        $showst .= ",-2,-2";
     $ret .= sprintf('show_astat(%s);', $showst);
 
-    if ($table->asta_win != -1 && $table->asta_win == $user->table_pos) {
+    if ($table->asta_win != -1 && $table->asta_win == $table_pos) {
       /* show card chooser */
-      $ret .= sprintf('choose_seed(%s); $("asta").style.visibility = "hidden";',
+      $ret .= sprintf('choose_seed(%s); $("astalascio").style.visibility = ""; $("asta").style.visibility = "hidden";',
                      $table->asta_card);
     }
     else {
       /* show auction */
-      if ($user->table_pos == ($table->gstart % PLAYERS_N) &&
+      if ($table_pos == ($table->gstart % PLAYERS_N) &&
          $table->asta_win == -1) 
-       $ret .= sprintf('dispose_asta(%d,%d);', 
-                       $table->asta_card + 1, $table->asta_pnt+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);',
-                       $table->asta_card + 1, -($table->asta_pnt+1));
+       $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 ($user->table_pos == ($table->gstart % PLAYERS_N)) 
+      if ($table_pos == ($table->gstart % PLAYERS_N)) 
        $ret .= "remark_on();";
       else
        $ret .= "remark_off();";
     }
     else { // chooseed case
-      if ($user->table_pos == $table->asta_win) 
+      if ($table_pos == $table->asta_win) 
        $ret .= "remark_on();";
       else
        $ret .= "remark_off();";
@@ -1386,7 +1435,7 @@ function show_table(&$bri, &$user, $sendstep, $is_transition, $is_again)
   }
   else if ($user->subst == 'game') {
     /* HIGHLIGHT */
-    if (($table->gstart + $table->turn) % PLAYERS_N == $user->table_pos) 
+    if (($table->gstart + $table->turn) % PLAYERS_N == $table_pos) 
       $ret .= "is_my_time = true; remark_on();";
     else
       $ret .= "remark_off();";
@@ -1445,13 +1494,14 @@ function calculate_winner(&$table)
 
 function calculate_points(&$table)
 {
-  $all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
+  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;
@@ -1460,7 +1510,7 @@ function calculate_points(&$table)
     $ctt = $table->card[$i]->value % 10;
     $own = $table->card[$i]->owner;
     if ($own == $table->asta_win || $own == $table->friend) 
-      $pro += $all_points[$ctt];
+      $pro += $G_all_points[$ctt];
   }
 
   log_wr("XXX", sprintf("PRO: [%d]", $pro));
index 7fbf6a3..8a59ec5 100644 (file)
@@ -113,8 +113,8 @@ else if ($user->stat == 'room') {
       // Start game for this table.
       log_wr($sess, "Start game!");
       
-      $table->init();
-      $table->game_init(&$bri);
+      $table->init(&$bri->user);
+      $table->game_init(&$bri->user);
       $curtime = time();
 
       for ($i = 0 ; $i < $table->player_n ; $i++) {
@@ -159,17 +159,11 @@ else if ($user->stat == 'room') {
  *    TABLE    *
  *             *
  ***************/
-else if ($user->stat == 'table' && $user->subst == 'asta') {
+else if ($user->stat == 'table') {
   $user->laccwr = time();
   $table = &$bri->table[$user->table];
 
-  if ($argz[0] == 'logout') {
-
-    //   document.location.assign("index.php");
-
-    $bri->room_wakeup(&$user);
-  }
-  else if ($argz[0] == 'tableinfo') {
+  if ($argz[0] == 'tableinfo') {
     log_wr($sess, "PER DI TABLEINFO");
     $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
     $user->comm[$user->step % COMM_N] .= show_table_info(&$bri, &$table, $user->table_pos);
@@ -179,339 +173,361 @@ else if ($user->stat == 'table' && $user->subst == 'asta') {
   else if ($argz[0] == 'chatt') {
     $bri->chatt_send(&$user,$mesg);
   }
-  else if ($argz[0] == 'asta') {
-    $again = TRUE;
+  else if ($argz[0] == 'logout') {
+    $bri->room_wakeup(&$user);
+  }
+  else if ($argz[0] == 'exitlock') {
+    $user->exitislock = ($user->exitislock == TRUE ? FALSE : TRUE);
+    for ($ct = 0, $i = 0 ; $i < PLAYERS_N ; $i++) {    
+      $user_cur[$i] = &$bri->user[$table->player[$i]];
+      if ($user_cur[$i]->exitislock == FALSE)
+       $ct++;
+    }
+    for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+      $ret = sprintf('gst.st = %d;', $user_cur[$i]->step+1);
+      $ret = sprintf('exitlock_show(%d, %s);', $ct, 
+                    ($user_cur[$i]->exitislock ? 'true' : 'false'));
+      $user_cur[$i]->comm[$user_cur[$i]->step % COMM_N] = $ret;
+      log_wr($sess, $user_cur[$i]->comm[$user_cur[$i]->step % COMM_N]);
+      $user_cur[$i]->step++;
+    }
+  }
+  else if ($user->subst == 'asta') {
+    if ($argz[0] == 'lascio' && $user->handpt <= 2) {
+      $index_cur = $table->gstart % PLAYERS_N;
     
-    $index_cur = $table->gstart % PLAYERS_N;
-    if ($user->table_pos == $index_cur &&
-       $table->asta_pla[$index_cur]) {
-      $a_card = $argz[1];
-      $a_pnt  = $argz[2];
+      log_wr($sess, sprintf("GIOCO FINITO !!!"));
+    
+      $table->mult *= 2; 
+      $table->old_reason = sprintf("Ha lasciato %s perche` aveva al massimo 2 punti.", $user->name);
+
+      $table->game_next();
+      $table->game_init(&$bri->user);
+    
+      for ($i = 0 ; $i < PLAYERS_N ; $i++) {   
+       $user_cur = &$bri->user[$table->player[$i]];
+
+       $ret = sprintf('gst.st = %d;', $user_cur->step+1);
+       $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
+       $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+       $user_cur->step++;          
+      }
+    }
+    else if ($argz[0] == 'asta') {
+      $again = TRUE;
+    
+      $index_cur = $table->gstart % PLAYERS_N;
+      if ($user->table_pos == $index_cur &&
+         $table->asta_pla[$index_cur]) {
+       $a_card = $argz[1];
+       $a_pnt  = $argz[2];
       
-      log_wr($sess, "CI SIAMO  a_card ".$a_card."  asta_card ".$table->asta_card);
+       log_wr($sess, "CI SIAMO  a_card ".$a_card."  asta_card ".$table->asta_card);
       
-      // Abbandono dell'asta
-      if ($a_card <= -1) {
-       log_wr($sess, "Abbandona l'asta.");
-       $table->asta_pla[$index_cur] = FALSE;
-       $user->asta_card  = -1;
-       $table->asta_pla_n--;
-       $again = FALSE;
-      }
-      else if ($a_card <= 9) {
-       if ($table->asta_card == 9) {
-         if ($a_card == 9 && $a_pnt <= 120 && $a_pnt > $table->asta_pnt)
-           $again = FALSE;
-       }
-       else {
-         if ($a_card >= 0 && $a_card <= 9 && $a_card > $table->asta_card)
-           $again = FALSE;
+       // Abbandono dell'asta
+       if ($a_card <= -1) {
+         log_wr($sess, "Abbandona l'asta.");
+         $table->asta_pla[$index_cur] = FALSE;
+         $user->asta_card  = -1;
+         $table->asta_pla_n--;
+         $again = FALSE;
        }
+       else if ($a_card <= 9) {
+         if ($table->asta_card == 9) {
+           if ($a_card == 9 && $a_pnt <= 120 && $a_pnt > $table->asta_pnt)
+             $again = FALSE;
+         }
+         else {
+           if ($a_card >= 0 && $a_card <= 9 && $a_card > $table->asta_card)
+             $again = FALSE;
+         }
 
-       if ($again == FALSE) {
-         log_wr($sess, "NUOVI ORZI.");
-         $user->asta_card  = $a_card;
-         $table->asta_card = $a_card;
-         if ($a_card == 9) {
-           $user->asta_pnt   = $a_pnt;
-           $table->asta_pnt  = $a_pnt;
+         if ($again == FALSE) {
+           log_wr($sess, "NUOVI ORZI.");
+           $user->asta_card  = $a_card;
+           $table->asta_card = $a_card;
+           if ($a_card == 9) {
+             $user->asta_pnt   = $a_pnt;
+             $table->asta_pnt  = $a_pnt;
+           }
          }
        }
-      }
       
       
       
-      if ($again) { // Qualcosa non andato bene, rifare
-       log_wr($sess, "Ripetere.");
-      }
-      else {
-       /* next step */
-       $showst = "show_astat("; 
-       for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-         $user_cur = &$bri->user[$table->player[$i]];
-         $showst .= sprintf("%s%d", ($i == 0 ? "" : ", "), 
-                            ($user_cur->asta_card < 9 ? $user_cur->asta_card : $user_cur->asta_pnt));
+       if ($again) { // Qualcosa non andato bene, rifare
+         log_wr($sess, "Ripetere.");
        }
-       if (PLAYERS_N == 3)
-         $showst .= ",-2,-2";
-       $showst .= ");";
+       else {
+         /* next step */
+         $showst = "show_astat("; 
+         for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+           $user_cur = &$bri->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";
+         $showst .= ");";
 
-       $maxcard = -2;
-       for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-         $user_cur = &$bri->user[$table->player[$i]];
-         if ($maxcard < $user_cur->asta_card)
-           $maxcard = $user_cur->asta_card;
-       }
+         $maxcard = -2;
+         for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+           $user_cur = &$bri->user[$table->player[$i]];
+           if ($maxcard < $user_cur->asta_card)
+             $maxcard = $user_cur->asta_card;
+         }
 
-       if (($table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
-           !($table->asta_card == 9 && $table->asta_pnt == 120)) {
-         log_wr($sess,"ALLOPPA QUI");
-         for ($i = 1 ; $i < PLAYERS_N ; $i++) {
-           $index_next = ($table->gstart + $i) % PLAYERS_N;
-           if ($table->asta_pla[$index_next]) {
-             log_wr($sess,"GSTART 1");
-             $table->gstart += $i;
-             break;
+         if (($table->asta_pla_n > ($maxcard > -1 ? 1 : 0)) &&
+             !($table->asta_card == 9 && $table->asta_pnt == 120)) {
+           log_wr($sess,"ALLOPPA QUI");
+           for ($i = 1 ; $i < PLAYERS_N ; $i++) {
+             $index_next = ($table->gstart + $i) % PLAYERS_N;
+             if ($table->asta_pla[$index_next]) {
+               log_wr($sess,"GSTART 1");
+               $table->gstart += $i;
+               break;
+             }
            }
-         }
          
          
-         for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-           $user_cur = &$bri->user[$table->player[$i]];
-           $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst);
-           if ($user_cur->table_pos == ($table->gstart % PLAYERS_N)) 
-             $ret .= sprintf('dispose_asta(%d,%d); remark_on();', 
-                             $table->asta_card + 1, $table->asta_pnt+1);
-           else
-             $ret .= sprintf('dispose_asta(%d,%d); remark_off();',
-                             $table->asta_card + 1, -($table->asta_pnt+1));
-           $user_cur->comm[$user_cur->step % COMM_N] = $ret;
-           $user_cur->step++;
+           for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+             $user_cur = &$bri->user[$table->player[$i]];
+             $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst);
+             if ($user_cur->table_pos == ($table->gstart % PLAYERS_N)) 
+               $ret .= sprintf('dispose_asta(%d,%d, %s); remark_on();', 
+                               $table->asta_card + 1, $table->asta_pnt+1, ($user_cur->handpt <= 2 ? "true" : "false"));
+             else
+               $ret .= sprintf('dispose_asta(%d,%d, %s); remark_off();',
+                               $table->asta_card + 1, -($table->asta_pnt+1), ($user_cur->handpt <= 2 ? "true" : "false"));
+             $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+             $user_cur->step++;
+           }
          }
-       }
-       else if ($table->asta_pla_n == 0) {
-         log_wr($sess, "MOLLANO TUTTI!");
+         else if ($table->asta_pla_n == 0) {
+           log_wr($sess, "PASSANO TUTTI!");
 
-         log_wr($sess, sprintf("GIOCO FINITO !!!"));
+           log_wr($sess, sprintf("GIOCO FINITO !!!"));
          
-         $table->mult *= 2; 
+           $table->old_reason = "Hanno passato tutti.";
+           $table->mult *= 2; 
 
-         $table->game_next();
-         $table->game_init(&$bri);
+           $table->game_next();
+           $table->game_init(&$bri->user);
          
-         for ($i = 0 ; $i < PLAYERS_N ; $i++) {        
-           $user_cur = &$bri->user[$table->player[$i]];
+           for ($i = 0 ; $i < PLAYERS_N ; $i++) {      
+             $user_cur = &$bri->user[$table->player[$i]];
 
-           $ret = sprintf('gst.st = %d;', $user_cur->step+1);
-           $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
-           $user_cur->comm[$user_cur->step % COMM_N] = $ret;
-           $user_cur->step++;      
-         }
-       }
-       else {
-         log_wr($sess, "FINITA !");
-         // if a_pnt == 120 supergame ! else abbandono
-         if ($a_pnt == 120 || $user->asta_card != -1) {
-           $chooser = $index_cur;
-           for ($i = 1 ; $i < PLAYERS_N ; $i++) 
-             if ($i != $chooser)
-               $table->asta_pla[$i] = FALSE;
+             $ret = sprintf('gst.st = %d;', $user_cur->step+1);
+             $ret .= show_table(&$bri,&$user_cur,$user_cur->step+1, TRUE, TRUE);
+             $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+             $user_cur->step++;            
+           }
          }
          else {
-           $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; dispose_asta(".($table->asta_card + 1).",".-($table->asta_pnt)."); remark_off();";
-           $user->step++;
-           for ($i = 1 ; $i < PLAYERS_N ; $i++) {
-             $chooser = ($table->gstart + $i) % PLAYERS_N;
-             if ($table->asta_pla[$chooser]) {
-               break;
+           log_wr($sess, "FINITA !");
+           // if a_pnt == 120 supergame ! else abbandono
+           if ($a_pnt == 120 || $user->asta_card != -1) {
+             $chooser = $index_cur;
+             for ($i = 1 ; $i < PLAYERS_N ; $i++) 
+               if ($i != $chooser)
+                 $table->asta_pla[$i] = FALSE;
+           }
+           else {
+             //"gst.st = ".($user->step+1)."; dispose_asta(".($table->asta_card + 1).",".-($table->asta_pnt).", true); remark_off();";
+             $user->comm[$user->step % COMM_N] = sprintf( "gst.st = %d; dispose_asta(%d, %d, false); remark_off();", $user->step+1, $table->asta_card + 1,-($table->asta_pnt));
+             $user->step++;
+             for ($i = 1 ; $i < PLAYERS_N ; $i++) {
+               $chooser = ($table->gstart + $i) % PLAYERS_N;
+               if ($table->asta_pla[$chooser]) {
+                 break;
+               }
              }
            }
-         }
-         $table->asta_win = $chooser;
+           $table->asta_win = $chooser;
 
-         for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-           $user_cur = &$bri->user[$table->player[$i]];
-           $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst);
+           for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+             $user_cur = &$bri->user[$table->player[$i]];
+             $ret = sprintf('gst.st = %d; %s', $user_cur->step+1, $showst);
 
-           if ($i == $chooser) {
-             $ret .= "choose_seed(". $table->asta_card."); \$(\"asta\").style.visibility = \"hidden\"; remark_on();";
-           }
-           else {
-             $ret .= "remark_off();";
-           }
+             if ($i == $chooser) {
+               $ret .= "choose_seed(". $table->asta_card."); \$(\"asta\").style.visibility = \"hidden\"; remark_on();";
+             }
+             else {
+               $ret .= "remark_off();";
+             }
 
-           $user_cur->comm[$user_cur->step % COMM_N] = $ret;
-           $user_cur->step++;      
+             $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+             $user_cur->step++;            
+           }
          }
        }
       }
+      else {
+       log_wr($sess, "NON CI SIAMO");
+      }
     }
-    else {
-      log_wr($sess, "NON CI SIAMO");
-    }
-  }
-  /*  asta::choose */
-  else if ($argz[0] == 'choose') {
-    if ($table->asta_win > -1 && 
-       $user->table_pos == $table->asta_win) {
-      $a_brisco = $argz[1];
-      if ($a_brisco >= 0 && $a_brisco < 40) {
-       $table->briscola = $a_brisco;
-       $table->friend   = $table->card[$a_brisco]->owner;
-       log_wr($sess,"GSTART 2");
-       $table->gstart = ($table->mazzo+1) % PLAYERS_N;
-       log_wr($sess, "Setta la briscola a ".$a_brisco);
-
-       $chooser = $table->asta_win;
-       $user_chooser = &$bri->user[$table->player[$chooser]];
-       for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-         $user_cur = &$bri->user[$table->player[$i]];
-         $user_cur->subst = 'game';
-         $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1);
+    /*  asta::choose */
+    else if ($argz[0] == 'choose') {
+      if ($table->asta_win > -1 && 
+         $user->table_pos == $table->asta_win) {
+       $a_brisco = $argz[1];
+       if ($a_brisco >= 0 && $a_brisco < 40) {
+         $table->briscola = $a_brisco;
+         $table->friend   = $table->card[$a_brisco]->owner;
+         log_wr($sess,"GSTART 2");
+         $table->gstart = ($table->mazzo+1) % PLAYERS_N;
+         log_wr($sess, "Setta la briscola a ".$a_brisco);
+
+         $chooser = $table->asta_win;
+         $user_chooser = &$bri->user[$table->player[$chooser]];
+         for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+           $user_cur = &$bri->user[$table->player[$i]];
+           $user_cur->subst = 'game';
+           $ret = sprintf('gst.st = %d; subst = "game";', $user_cur->step+1);
          
 
-         /* bg of caller cell */
-         $ret .= briscola_show($bri, $table, $user_cur);
+           /* bg of caller cell */
+           $ret .= briscola_show($bri, $table, $user_cur);
 
-         /* first gamer */
-         if ($i == ($table->gstart % PLAYERS_N))
-           $ret .= "is_my_time = true; remark_on();";
-         else
-           $ret .= "is_my_time = false; remark_off();";
+           /* first gamer */
+           if ($i == ($table->gstart % 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++;        
-       }
-       /*
+           $user_cur->comm[$user_cur->step % COMM_N] = $ret;
+           $user_cur->step++;      
+         }
+         /*
             TUTTE LE VARIABILI DI STATO PER PASSARE A GIOCARE E LE
             VAR PER PASSARE ALLA FASE DI GIOCO
-       */
+         */
        
+       }
       }
     }
   }
-}
-else if ($user->stat == 'table' && $user->subst == 'game') {
-  $table = &$bri->table[$user->table];
-
-  $retar = array();
-
-  log_wr($sess, "state: table::game".$argz[0]);
-
-  if ($argz[0] == 'logout') {
-    $bri->room_wakeup(&$user);
-  }
-  else if ($argz[0] == 'tableinfo') {
-    log_wr($sess, "PER DI TABLEINFO");
-    $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
-    $user->comm[$user->step % COMM_N] .= show_table_info(&$bri, &$table, $user->table_pos);
-
-    log_wr($sess, $user->comm[$user->step % COMM_N]);
+  else if ($user->subst == 'game') {
+    log_wr($sess, "state: table::game".$argz[0]);
+
+    if ($argz[0] == 'play') {
+      $a_play = $argz[1];
+      $a_x =    $argz[2];
+      $a_y =    $argz[3];
+
+      if (strpos($a_x, "px") != FALSE)
+       $a_x = substr($a_x,0,-2);
+      if (strpos($a_y, "px") != FALSE)
+       $a_y = substr($a_y,0,-2);
+
+      $loggo = sprintf("A_play %s, table_pos %d == %d, mazzo %d, gstart %d, card_stat %d, card_own %d",
+                      $a_play, $user->table_pos, ($table->gstart % PLAYERS_N),
+                      $table->mazzo, $table->gstart,
+                      $table->card[$a_play]->stat, $table->card[$a_play]->owner);
+      log_wr($sess, "CIC".$loggo);
+                         
+      /* se era il suo turno e la carta era sua ed era in mano */
+      if ($a_play >=0 && $a_play < 40 &&
+         ($user->table_pos == (($table->gstart + $table->turn) % PLAYERS_N)) &&
+         $table->card[$a_play]->stat == 'hand' &&
+         $table->card[$a_play]->owner == $user->table_pos) {
+       log_wr($sess, sprintf("User: %s Play: %d",$user->name, $a_play));
 
+       /* Change the card status. */
+       $table->card[$a_play]->play($a_x, $a_y);
 
-    $user->step++;
-  }
-  else if ($argz[0] == 'chatt') {
-    $bri->chatt_send(&$user,$mesg);
-  }
-  else if ($argz[0] == 'play') {
-    $a_play = $argz[1];
-    $a_x =    $argz[2];
-    $a_y =    $argz[3];
-
-    if (strpos($a_x, "px") != FALSE)
-      $a_x = substr($a_x,0,-2);
-    if (strpos($a_y, "px") != FALSE)
-      $a_y = substr($a_y,0,-2);
-
-    $loggo = sprintf("A_play %s, table_pos %d == %d, mazzo %d, gstart %d, card_stat %d, card_own %d",
-                    $a_play, $user->table_pos, ($table->gstart % PLAYERS_N),
-                    $table->mazzo, $table->gstart,
-                    $table->card[$a_play]->stat, $table->card[$a_play]->owner);
-    log_wr($sess, "CIC".$loggo);
-                         
-    /* se era il suo turno e la carta era sua ed era in mano */
-    if ($a_play >=0 && $a_play < 40 &&
-       ($user->table_pos == (($table->gstart + $table->turn) % PLAYERS_N)) &&
-       $table->card[$a_play]->stat == 'hand' &&
-       $table->card[$a_play]->owner == $user->table_pos) {
-      log_wr($sess, sprintf("User: %s Play: %d",$user->name, $a_play));
-
-      /* Change the card status. */
-      $table->card[$a_play]->play($a_x, $a_y);
-
-      /*
-       *  !!!! TURN INCREMENTED BEFORE !!!!
-       */
-      $turn_cur = ($table->gstart + $table->turn) % PLAYERS_N;
-      $table->turn++;
-
-      $card_play = sprintf("card_play(%d,%d,%d,%d);|",
-                          $user->table_pos, $a_play, $a_x, $a_y);
-      if (($table->turn % PLAYERS_N) != 0) {     /* manche not finished */
-       $turn_nex = ($table->gstart + $table->turn) % PLAYERS_N;
-
-       $player_cur = "remark_off();";
-       $player_nex = $card_play . "is_my_time = true; remark_on();";
-       $player_oth = $card_play;
-      }
-      else if ($table->turn <= (PLAYERS_N * 8)) { /* manche finished */
-       $winner = calculate_winner($table);
-       log_wr($sess,"GSTART 3");
-       $table->gstart = $winner;
-       $turn_nex = ($table->gstart + $table->turn) % PLAYERS_N;
-
-       log_wr($sess, sprintf("The winner is: [%d] [%s]", $winner, $bri->user[$table->player[$winner]]->name));
-       $card_take = sprintf("sleep(gst,2000);|cards_take(%d);|cards_hidetake($d);",
-                                                         $winner, $winner);
-       $player_cur = "remark_off();" . $card_take . "|"; 
-       if ($turn_cur != $turn_nex)
-         $player_nex = $card_play . $card_take . "|";
-       else
-         $player_nex = "";
-       if ($table->turn < (PLAYERS_N * 8))  /* game NOT finished */
-         $player_nex .= "is_my_time = true; remark_on();";
-       $player_oth = $card_play . $card_take;
-      }
+       /*
+        *  !!!! TURN INCREMENTED BEFORE !!!!
+        */
+       $turn_cur = ($table->gstart + $table->turn) % PLAYERS_N;
+       $table->turn++;
+
+       $card_play = sprintf("card_play(%d,%d,%d,%d);|",
+                            $user->table_pos, $a_play, $a_x, $a_y);
+       if (($table->turn % PLAYERS_N) != 0) {     /* manche not finished */
+         $turn_nex = ($table->gstart + $table->turn) % PLAYERS_N;
+
+         $player_cur = "remark_off();";
+         $player_nex = $card_play . "is_my_time = true; remark_on();";
+         $player_oth = $card_play;
+       }
+       else if ($table->turn <= (PLAYERS_N * 8)) { /* manche finished */
+         $winner = calculate_winner($table);
+         log_wr($sess,"GSTART 3");
+         $table->gstart = $winner;
+         $turn_nex = ($table->gstart + $table->turn) % PLAYERS_N;
+
+         log_wr($sess, sprintf("The winner is: [%d] [%s]", $winner, $bri->user[$table->player[$winner]]->name));
+         $card_take = sprintf("sleep(gst,2000);|cards_take(%d);|cards_hidetake($d);",
+                              $winner, $winner);
+         $player_cur = "remark_off();" . $card_take . "|"; 
+         if ($turn_cur != $turn_nex)
+           $player_nex = $card_play . $card_take . "|";
+         else
+           $player_nex = "";
+         if ($table->turn < (PLAYERS_N * 8))  /* game NOT finished */
+           $player_nex .= "is_my_time = true; remark_on();";
+         $player_oth = $card_play . $card_take;
+       }
 
-      log_wr($sess, sprintf("Turn Cur %d Turn Nex %d",$turn_cur, $turn_nex));
-      for ($i = 0 ; $i < PLAYERS_N ; $i++) {   
-       $user_cur = &$bri->user[$table->player[$i]];
+       log_wr($sess, sprintf("Turn Cur %d Turn Nex %d",$turn_cur, $turn_nex));
+       for ($i = 0 ; $i < PLAYERS_N ; $i++) {  
+         $user_cur = &$bri->user[$table->player[$i]];
 
-       $ret = sprintf('gst.st = %d; ', $user_cur->step+1);
+         $ret = sprintf('gst.st = %d; ', $user_cur->step+1);
 
        
-       if ($i == $turn_cur) {
-         $ret .= $player_cur;    
-       }
-       if ($i == $turn_nex) {
-         $ret .= $player_nex;    
-       }
-       if ($i != $turn_cur && $i != $turn_nex) {
-         $ret .= $player_oth;
-       }
+         if ($i == $turn_cur) {
+           $ret .= $player_cur;          
+         }
+         if ($i == $turn_nex) {
+           $ret .= $player_nex;          
+         }
+         if ($i != $turn_cur && $i != $turn_nex) {
+           $ret .= $player_oth;
+         }
 
-       $retar[$i] = $ret;
-      }
+         $retar[$i] = $ret;
+       }
 
 
 
 
-      if ($table->turn == (PLAYERS_N * 8)) { /* game finished */
-       log_wr($sess, sprintf("GIOCO FINITO !!!"));
+       if ($table->turn == (PLAYERS_N * 8)) { /* game finished */
+         log_wr($sess, sprintf("GIOCO FINITO !!!"));
 
-       /* ************************************************ */
-       /*    PRIMA LA PARTE PER LO SHOW DI CHI HA VINTO    */
-       /* ************************************************ */
-       calculate_points(&$table);
+         /* ************************************************ */
+         /*    PRIMA LA PARTE PER LO SHOW DI CHI HA VINTO    */
+         /* ************************************************ */
+         calculate_points(&$table);
 
-       $table->game_next();
-       $table->game_init(&$bri);
+         $table->game_next();
+         $table->game_init(&$bri->user);
          
-       for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-         $user_cur = &$bri->user[$table->player[$i]];
-         $retar[$i] .= show_table(&$bri,&$user_cur,$user_cur->step+1,TRUE, TRUE);
+         for ($i = 0 ; $i < PLAYERS_N ; $i++) {
+           $user_cur = &$bri->user[$table->player[$i]];
+           $retar[$i] .= show_table(&$bri,&$user_cur,$user_cur->step+1,TRUE, TRUE);
+         }
        }
-      }
 
 
-      for ($i = 0 ; $i < PLAYERS_N ; $i++) {   
-       $user_cur = &$bri->user[$table->player[$i]];
+       for ($i = 0 ; $i < PLAYERS_N ; $i++) {  
+         $user_cur = &$bri->user[$table->player[$i]];
        
-       $user_cur->comm[$user_cur->step % COMM_N] = $retar[$i];
-       $user_cur->step++;          
-      }
+         $user_cur->comm[$user_cur->step % COMM_N] = $retar[$i];
+         $user_cur->step++;        
+       }
 
-      log_wr($sess, sprintf("TURN: %d",$table->turn));
-      /* Have played all the players ? */
-      /* NO:  switch the focus and enable the next player to play. */
+       log_wr($sess, sprintf("TURN: %d",$table->turn));
+       /* Have played all the players ? */
+       /* NO:  switch the focus and enable the next player to play. */
       
-      /* YES: calculate who win and go to the next turn. */
+       /* YES: calculate who win and go to the next turn. */
+      }
     }
-  }
-  else
+    else
       log_wr($sess, "NOSENSE");
-
+  }
 }
 log_wr($sess, "before save data");
 save_data($bri);