missing check on abandon and persistent abandon button fixed
[brisk.git] / web / briskin5 / Obj / briskin5.phh
index 64c100f..e247e93 100644 (file)
@@ -339,11 +339,9 @@ class Bin5_table extends Table {
     function multer($is_new)
     {
         if ($is_new) {
-            // return (pow(2, $this->mult) * $this->asta2mult($this->asta_pnt));
             return (static::s_multer($this->mult, $this->asta_pnt));
         }
         else {
-            // return (pow(2, $this->old_mult) * $this->asta2mult($this->old_asta_pnt));
             return (static::s_multer($this->old_mult, $this->old_asta_pnt));
         }
     }
@@ -353,6 +351,11 @@ class Bin5_table extends Table {
         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 bunch_create_old() function AND
     //   {
     //     $ret = array();
@@ -509,15 +512,15 @@ class Bin5_table extends Table {
     {
         GLOBAL $G_all_points, $G_dbasetype;
 
-        $pts = array();
+        $pnts_sav = array();
 
-        $this->old_act = $action;
         if ($action == BIN5_RULES_ALLPASS) { // return TRUE if all correct
+            $this->old_act = $action;
             $this->old_asta_win = -1;
             $this->old_pnt = 0;
             $this->mult_inc(1);
             for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-                $pts[$i] = 0;
+                $pnts_sav[$i] = 0;
             }
 
             $game_delta = 1;
@@ -525,13 +528,17 @@ class Bin5_table extends Table {
             $this->game_init(&$bri->user);
         }
         else if ($action == BIN5_RULES_ABANDON) { // return TRUE if all correct
+            if (!($user->handpt <= 2)) {
+                return (FALSE);
+            }
+            $this->old_act = $action;
             log_wr(sprintf("GIOCO FINITO !!!"));
             $this->old_asta_win = $user->table_pos;
             $this->old_pnt = 0;
             $this->mult_inc(1);
 
             for ($i = 0 ; $i < PLAYERS_N ; $i++) {
-                $pts[$i] = 0;
+                $pnts_sav[$i] = 0;
             }
 
             // Non si cambia mazzo se si abbandona la partita
@@ -540,6 +547,7 @@ class Bin5_table extends Table {
             $this->game_init(&$bri->user);
         }
         else if ($action == BIN5_RULES_FINISH) { // return TRUE if all correct
+            $this->old_act = $action;
             do {
                 $pro = 0;
 
@@ -563,13 +571,12 @@ class Bin5_table extends Table {
                     $this->points[$this->points_n % MAX_POINTS] = array();
                     for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
                         $this->points[$this->points_n % MAX_POINTS][$i] = 0;
-                        $pts[$i] = 0;
+                        $pnts_sav[$i] = 0;
                     }
                     $this->points_n++;
                     $this->old_pnt = $pro;
                     $this->mult_inc(1);
 
-                    // return($pts);
                     break;
                 }
 
@@ -578,31 +585,29 @@ class Bin5_table extends Table {
                 else
                     $sig = -1;
 
+                // TAG: POINTS_MANAGEMENT
                 $this->points[$this->points_n % MAX_POINTS] = array();
                 for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
                     if ($i == $this->asta_win)
-                        $pt = ($i == $this->friend ? 4 : 2);
+                        $pnt = ($i == $this->friend ? 4 : 2);
                     else if ($i == $this->friend)
-                        $pt = 1;
+                        $pnt = 1;
                     else
-                        $pt = -1;
+                        $pnt = -1;
 
-                    log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pt));
+                    log_wr(sprintf("PRO: pt[%d][%d] = %d", $this->points_n % MAX_POINTS, $i, $pnt));
 
-                    $pt = $pt * $sig * $this->multer(TRUE) * ($pro == 120 ? 2 : 1);
+                    $pnt_sav = static::s_point_calc($pnt * $sig,           0, $this->asta_pnt, ($pro == 120));
+                    $pnt_tab = static::s_point_calc($pnt * $sig, $this->mult, $this->asta_pnt, ($pro == 120));
 
-                    log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $this->multer(TRUE), ($pro == 120 ? 2 : 1)));
-
-                    $this->points[$this->points_n % MAX_POINTS][$i] = $pt;
-                    $this->total[$i] += $pt;
-                    $pts[$i] = $pt;
+                    $this->points[$this->points_n % MAX_POINTS][$i] = $pnt_tab;
+                    $this->total[$i] += $pnt_tab;
+                    $pnts_sav[$i] = $pnt_sav;
                 }
                 $this->points_n++;
                 $this->old_pnt = $pro;
                 $this->old_asta_win = $this->asta_win;
                 $this->mult_set(0);
-
-                // return($pts);
             } while (0);
             $game_delta = 1;
         }
@@ -621,7 +626,7 @@ class Bin5_table extends Table {
             $ucodes[$i] = $user_cur->code_get();
 
             /* pro log */
-            $plist .= '|'.xcapelt($user_cur->name).'|'.$pts[$i];
+            $plist .= '|'.xcapelt($user_cur->name).'|'.$pnts_sav[$i];
             $codes .= '|'.xcapelt($user_cur->code_get());
         }
         $plist .= $codes;
@@ -646,7 +651,7 @@ class Bin5_table extends Table {
             require_once("../Obj/dbase_".$G_dbasetype.".phh");
 
             if (($bdb = BriskDB::create()) != FALSE) {
-                $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pts);
+                $bdb->bin5_points_save($curtime, $this, $user->table_orig, $action, $ucodes, $pnts_sav);
                 unset($bdb);
             }
             else {
@@ -1010,13 +1015,11 @@ class Bin5_user extends User {
         return (sprintf('xstm.stop(); window.onbeforeunload = null; window.onunload = null; document.location.assign("%s");', $page));
     }
 
-    protected function maincheck($cur_stat, $cur_subst, $cur_step, &$new_stat, &$new_subst, &$new_step, $splashdate, $table_idx, $table_token)
+    protected function maincheck($get, $post, $cookie)
     {
-        GLOBAL $G_lang, $mlang_indrd;
+        GLOBAL $G_lang;
         GLOBAL $G_with_splash, $G_splash_content, $G_splash_interval, $G_splash_idx;
         GLOBAL $G_splash_w, $G_splash_h, $G_splash_timeout;
-        $CO_splashdate = "CO_splashdate".$G_splash_idx;
-        $$CO_splashdate = $splashdate;
 
         GLOBAL $S_load_stat;
 
@@ -1026,14 +1029,14 @@ class Bin5_user extends User {
         $curtime = time();
 
       /* Nothing changed, return. */
-      if ($cur_step == $this->step)
+      if ($this->rd_step == $this->step)
           return (FALSE);
 
-      log_rd2("do other cur_stat[".$cur_stat."] user->stat[".$this->stat."] cur_step[".$cur_step."] user_step[".$this->step."]");
+      log_rd2("do other cur_stat[".$this->rd_stat."] user->stat[".$this->stat."] cur_step[".$this->rd_step."] user_step[".$this->step."]");
 
-      if ($cur_step == -1) {
+      if ($this->rd_step == -1) {
           /*
-           *  if $cur_step == -1 load the current state from the main struct
+           *  if $this->rd_step == -1 load the current state from the main struct
            */
 
           $S_load_stat['wR_minusone']++;
@@ -1044,7 +1047,7 @@ class Bin5_user extends User {
 
           if ($this->trans_step != -1) {
               log_rd2("TRANS USATO ".$this->trans_step);
-              $cur_step = $this->trans_step;
+              $this->rd_step = $this->trans_step;
               $this->trans_step = -1;
           }
           else {
@@ -1054,7 +1057,7 @@ class Bin5_user extends User {
 
 
       /* this part I suppose is read only on $this->room structure */
-      if ($cur_step == -1) {
+      if ($this->rd_step == -1) {
           log_rd2("PRE-NEWSTAT");
 
           /***************
@@ -1070,33 +1073,33 @@ class Bin5_user extends User {
           }
           log_rd2("NEWSTAT: ".$this->stat);
 
-          $new_stat =  $this->stat;
-          $new_subst = $this->subst;
-          $new_step =  $this->step;
-      } /* if ($cur_step == -1) { */
+          $this->rd_stat  = $this->stat;
+          $this->rd_subst = $this->subst;
+          $this->rd_step  = $this->step;
+      } /* if ($this->rd_step == -1) { */
       else {
-          /* $sem = Room::lock_data(FALSE); */
+          /* $sem = Brisk::lock_data(FALSE); */
           $S_load_stat['rU_heavy']++;
 
-          if ($cur_step < $this->step) {
+          if ($this->rd_step < $this->step) {
               do {
-                  if ($cur_step + COMM_N < $this->step) {
-                      if (($cur_stat != $this->stat)) {
+                  if ($this->rd_step + COMM_N < $this->step) {
+                      if ($this->rd_stat != $this->stat) {
                           $to_stat = $this->stat;
-                          /* Room::unlock_data($sem); */
+                          /* Brisk::unlock_data($sem); */
                           log_load("RESYNC");
                           printf("xXx BIN5_USER::MAINCHECK\n");
                           return ($this->page_sync($this->sess, ($to_stat == "table" ? "index.php" : "../index.php"), $this->table, $this->table_token));
                       }
                       log_rd2("lost history, refresh from scratch");
                       printf("xXx LOST HISTORY!\n");
-                      $new_step = -1;
+                      $this->rd_step = -1;
                       break;
                   }
-                  for ($i = $cur_step ; $i < $this->step ; $i++) {
+                  for ($i = $this->rd_step ; $i < $this->step ; $i++) {
                       $ii = $i % COMM_N;
                       if ($this->comm[$ii] == "") {
-                          if ($i == $cur_step)
+                          if ($i == $this->rd_step)
                               continue;
                           else
                               break;
@@ -1104,9 +1107,9 @@ class Bin5_user extends User {
                       log_rd2("ADDED TO THE STREAM: ".$this->comm[$ii]);
                       $ret .= $this->comm[$ii];
                   }
-                  $new_stat =  $this->stat;
-                  $new_subst = $this->subst;
-                  $new_step =  $this->step;
+                  $this->rd_stat  = $this->stat;
+                  $this->rd_subst = $this->subst;
+                  $this->rd_step  = $this->step;
               } while (0);
 
               log_rd2($this->step, 'index_rd.php: after ret set');
@@ -1130,14 +1133,14 @@ class Bin5_user extends User {
 
                   } /* if ($this->the_end == TRUE) { ... */
               } /* if ($this->the_end == TRUE) { ... */
-          } /* if ($cur_step < $this->step) { */
+          } /* if ($this->rd_step < $this->step) { */
 
-          /* Room::unlock_data($sem); */
-      }  /* else of if ($cur_step == -1) { */
+          /* Brisk::unlock_data($sem); */
+      }  /* else of if ($this->rd_step == -1) { */
 
 
       return ($ret);
-    }  //   function maincheck (...
+    }  //   function maincheck(...
 
     function continue_set($match_code)
     {
@@ -1153,6 +1156,7 @@ class Bin5_user extends User {
 
 class Bin5 {
     static $delta_t = array();
+    var $brisk;// room object reference
 
     var $user;
     var $table;
@@ -1169,7 +1173,7 @@ class Bin5 {
 
     var $delay_mgr;
 
-    function Bin5 ($room, $table_idx, $table_token, $get, $post, $cookie) {
+    function Bin5($brisk, $table_idx, $table_token, $get, $post, $cookie) {
         $this->user = array();
         $this->table = array();
 
@@ -1180,9 +1184,9 @@ class Bin5 {
             exit;
         }
 
-        $user  = $room->user;
-        $table = $room->table[$table_idx];
-
+        $this->brisk = $brisk;
+        $user  = $brisk->user;
+        $table = $brisk->table[$table_idx];
         log_wr("Bin5 constructor");
 
         for ($i = 0 ; $i < $table->player_n ; $i++) {
@@ -1485,7 +1489,6 @@ class Bin5 {
 
         break;
         case "index_wr.php":
-            // FIXME $content can be unset
             if (isset($table_idx) && isset($table_token)) {
                 if (($bri = $s_a_p->app->match_get($table_idx, $table_token)) != FALSE) {
                     ob_start();
@@ -1523,6 +1526,8 @@ class Bin5 {
                     return TRUE;
                     break;
                 }
+                $bri->brisk->sess_cur_set($user->sess);
+
                 // close a previous opened index_read_ifra socket, if exists
                 if (($prev = $user->rd_socket_get()) != NULL) {
                     $s_a_p->socks_unset($user->rd_socket_get());
@@ -1841,6 +1846,7 @@ function show_table_info(&$bri, &$table, $table_pos)
     $ret = "";
     $user = $bri->user[$table->player[$table_pos]];
 
+    // TAG: POINTS_MANAGEMENT
     $pnt_min = $table->points_n - MAX_POINTS < 0 ? 0 : $table->points_n - MAX_POINTS;
     $noty = sprintf('<table class=\"points\"><tr><th></th>');