G_false reference and all explicit pass by references removed
[brisk.git] / web / briskin5 / Obj / briskin5.phh
index 25b9d03..0c36306 100644 (file)
@@ -2,7 +2,7 @@
 /*
  *  brisk - briskin5.phh
  *
- *  Copyright (C) 2006-2009 Matteo Nastasi
+ *  Copyright (C) 2006-2011 Matteo Nastasi
  *                          mailto: nastasi@alternativeoutput.it 
  *                                  matteo.nastasi@milug.org
  *                          web: http://www.alternativeoutput.it
@@ -20,8 +20,6 @@
  * not, write to the Free Software Foundation, Inc, 59 Temple Place -
  * Suite 330, Boston, MA 02111-1307, USA.
  *
- * $Id$
- *
  */
 define(BRISKIN5_PLAYERS_N, 3);
 define(BRISKIN5_MAX_PLAYERS, BRISKIN5_PLAYERS_N);
@@ -33,23 +31,34 @@ define(BRISKIN5_SHM_DLT, 32768);
 $mlang_bin5_bin5 = array( 
                          'info_part' => array( 'it' => '<hr>Nell\'ultima mano ha chiamato <b>%s</b>, il socio era <b>%s</b>,<br>',
                                                'en' => '<hr>In the last hand the declarer was <b>%s</b>, the partner was <b>%s</b>,<br>'),
-                         'info_capp' => array( 'it' => 'hanno fatto <b>cappotto</b> EBBRAVI!.<hr>',
-                                               'en' => 'and he made <b>capot</b> WELL DONE!.<hr>'),
-                         'info_pnt'  => array( 'it' => 'dovevano fare <b>%s</b> punti e ne hanno fatti <b>%d</b>: %s.<hr>',
-                                               'en' => 'they had to do <b>%s</b> points and they had made <b>%d</b>: %s.<hr>'),
+                         'info_capp' => array( 'it' => 'hanno fatto <b>cappotto</b> EBBRAVI!.<br>',
+                                               'en' => 'and they made <b>capot</b> WELL DONE!.<br>'),
+                         'info_pnt'  => array( 'it' => 'dovevano fare <b>%s</b> punti e ne hanno fatti <b>%d</b>: hanno %s.<br>',
+                                               'en' => 'they had to do <b>%s</b> points and they had made <b>%d</b>: they have %s.<br>'),
                          'info_alea' => array( 'it' => 'almeno ',
                                                'en' => 'at least '),
                          'info_more' => array( 'it' => 'pi&ugrave; di 60',
                                                'en' => 'over 60'),
-                         'info_win'  => array( 'it' => 'hanno <b>vinto</b>',
-                                               'en' => 'they have <b>win</b>'),
-                         'info_peer' => array( 'it' => 'hanno <b>pareggiato</b>',
-                                               'en' => 'they have <b>drew</b>'),
-                         'info_lost' => array( 'it' => 'hanno <b>perso</b>',
-                                               'en' => 'they have <b>lost</b>'),
+                         'info_win'  => array( 'it' => '<b>vinto</b>',
+                                               'en' => '<b>win</b>'),
+                         'info_peer' => array( 'it' => '<b>pareggiato</b>',
+                                               'en' => '<b>drew</b>'),
+                         'info_lost' => array( 'it' => '<b>perso</b>',
+                                               'en' => '<b>lost</b>'),
+
+                         'info_alon' => array( 'it' => '<hr>Nell\'ultima partita <b>%s</b> si &egrave; chiamato in mano,<br>',
+                                               'en' => '<hr>In the last hand <b>%s</b> play alone against each other,<br>'),
+                         'info_apnt' => array( 'it' => 'doveva fare <b>%s</b> punti e ne ha fatti <b>%d</b>: ha %s.<br>',
+                                               'en' => 'he/she had to do <b>%s</b> points and they had made <b>%d</b>: he/she had %s.<br>'),
+                         'info_acap' => array( 'it' => 'ha fatto <b>cappotto</b> EBBRAVO!.<hr>',
+                                               'en' => 'and he/she made <b>capot</b> WELL DONE!.<hr>'),
+                         
+                         'info_omul' => array( 'it' => ' La partita valeva <b>%s</b>.',
+                                               'en' => ' EN: The game was worth <b>%s</b>.' ),
+
                          'info_yturn'=> array( 'it' => ' tocca a <b>te</b> giocare.',
                                                'en' => ' it\'s <b>your</b> turn.'),
-                         'info_turn' => array( 'it' => 'tocca a <b>$unam</b> giocare.',
+                         'info_turn' => array( 'it' => 'tocca a <b>%s</b> giocare.',
                                                'en' => 'it\'s the <b>%s</b>\'s turn.'),
                          'info_mult' => array( 'it' => ' La partita vale <b>%s</b>.',
                                                'en' => ' The game worth <b>%s</b>.' ),
@@ -150,6 +159,7 @@ class Table_briskin5 extends Table {
   
   var $old_reason;
   var $old_asta_pnt;
+  var $old_mult;
   var $old_pnt;
   var $old_win;
   var $old_friend;
@@ -160,12 +170,10 @@ class Table_briskin5 extends Table {
 
 
   /* CREATE() NOT USED
-  function &create($idx) 
+  function create($idx) 
   {
-    GLOBAL $G_false;
-
     if (($thiz =& new Table_briskin5()) == FALSE)
-      return ($G_false);
+      return (FALSE);
 
     $thiz->create($idx);
 
@@ -186,6 +194,7 @@ class Table_briskin5 extends Table {
 
     $thiz->old_reason   = "";
     $thiz->old_asta_pnt = -1;
+    $thiz->old_mult     = -1;
     $thiz->old_pnt      = -1;
     $thiz->old_win      = -1;
     $thiz->old_friend   = -1;
@@ -195,12 +204,10 @@ class Table_briskin5 extends Table {
   */
 
   /* CLONE() NOT USED
-  function &clone(&$from)
+  function myclone(&$from)
   {
-    GLOBAL $G_false;
-    
     if (($thiz =& new Table_briskin5()) == FALSE)
-      return ($G_false);
+      return (FALSE);
     
     parent::copy($from);
 
@@ -225,6 +232,7 @@ class Table_briskin5 extends Table {
     
     $thiz->old_reason = $from->old_reason;
     $thiz->old_asta_pnt = $from->old_asta_pnt;
+    $thiz->old_mult = $from->mult;
     $thiz->old_pnt = $from->old_pnt;
     $thiz->old_win = $from->old_win;
     $thiz->old_friend = $from->old_friend;
@@ -238,18 +246,17 @@ class Table_briskin5 extends Table {
     parent::copy($from);
   }
 
-  function &spawn(&$from)
+  function spawn(&$from)
   {
-    GLOBAL $G_false;
-    
     if (($thiz =& new Table_briskin5()) == FALSE)
-      return ($G_false);
+      return (FALSE);
     
     $thiz->parentcopy($from);
 
     log_main("PLAYER_N - spawn.".$thiz->player_n);
 
-    $thiz->card = &$thiz->bunch_create();
+    $thiz->card = array();
+    $thiz->bunch_create();
     $thiz->mazzo    = rand(0,PLAYERS_N-1);
     $thiz->points_n = 0;
     $thiz->mult     = 1;
@@ -267,17 +274,26 @@ class Table_briskin5 extends Table {
   }
 
 
-  function &bunch_create()
+  //   function bunch_create_old() function AND 
+  //   {
+  //     $ret = array();
+  // 
+  //     for ($i = 0 ; $i < (BRISKIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+  //       // for ($i = 0 ; $i < 40 ; $i++) {
+  //       $ret[$i] =& new Card($i, 'bunch', 'no_owner');
+  //     }
+  // 
+  //     $oret = &$ret;
+  //     return ($oret);
+  //   }
+
+  function bunch_create()
   {
-    $ret = array();
-
-    for ($i = 0 ; $i < (BRISKIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
-      // for ($i = 0 ; $i < 40 ; $i++) {
-      $ret[$i] =& new Card($i, 'bunch', 'no_owner');
-    }
-
-    $oret = &$ret;
-    return ($oret);
+      $ret = array();
+      
+      for ($i = 0 ; $i < (BRISKIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
+          $this->card[$i] = new Card($i, 'bunch', 'no_owner');
+      }
   }
 
   function bunch_make()
@@ -403,28 +419,28 @@ class Table_briskin5 extends Table {
 
 
 
-
+define(BIN5_USER_FLAG_RING_ENDAUCT, 0x01);
 
 class User_briskin5 extends User {
   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 $privflags;  // Flags for briskin5 only 
 
   function User() {
   }
 
   /* CREATE NOT USED
-  function &create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
-    GLOBAL $G_false;
-
+  function create($name, $sess, $stat = "", $subst = "", $table = -1, $ip="0.0.0.0") {
     if (($thiz =& new User()) == FALSE)
-      return ($G_false);
+      return (FALSE);
 
     $thiz->asta_card = -2;
     $thiz->asta_pnt  = -1;
     $thiz->handpt = -1;
     $thiz->exitislock = TRUE;
+    $thiz->privflags = 0;
 
     return ($thiz);
   }
@@ -443,15 +459,14 @@ class User_briskin5 extends User {
     $this->asta_pnt   = $from->asta_pnt;
     $this->handpt     = $from->handpt;
     $this->exitislock = $from->exitislock;
+    $this->privflags  = $from->privflags;
   }
 
   /* CLONE NOT USED
-  function &clone(&$from)
+  function myclone(&$from)
   {
-    GLOBAL $G_false;
-    
     if (($thiz =& new User()) == FALSE)
-      return ($G_false);
+      return (FALSE);
 
     $thiz->copy($from);
 
@@ -459,12 +474,12 @@ class User_briskin5 extends User {
   } 
   */
   
-  function &spawn(&$from, $table, $table_pos)
+  function spawn(&$from, $table, $table_pos)
   {
-    GLOBAL $G_false;
+    GLOBAL $CO_bin5_pref_ring_endauct;
     
     if (($thiz =& new User_briskin5()) == FALSE)
-      return ($G_false);
+      return (FALSE);
     
     $thiz->parentcopy($from);
 
@@ -473,6 +488,10 @@ class User_briskin5 extends User {
     $thiz->handpt = -1;
     $thiz->exitislock = TRUE;
 
+    log_wr("Briskin5 constructor");
+
+    $this->privflags  = ($CO_bin5_pref_ring_endauct == "true" ? BIN5_USER_FLAG_RING_ENDAUCT : 0) | 0;
+
     $thiz->table_orig = $table;
     $thiz->table      = 0;
     $thiz->table_pos  = $table_pos;
@@ -529,9 +548,9 @@ class Briskin5 {
   }
 
 
-  function &get_user($sess, &$idx)
+  function get_user($sess, &$idx)
   {
-    GLOBAL $PHP_SELF, $G_false;
+    GLOBAL $PHP_SELF;
 
     if (validate_sess($sess)) {
       for ($i = 0 ; $i < BRISKIN5_MAX_PLAYERS ; $i++) {
@@ -550,13 +569,14 @@ class Briskin5 {
       log_main(sprintf("get_user: Wrong strlen [%s]",$sess));
     }
 
-    return ($G_false);
+    return (FALSE);
   }
 
 
   function garbage_manager($force)
   {
-    
+    GLOBAL $G_base;
+
     /* Garbage collector degli utenti in timeout */
     $ismod = FALSE;
     $curtime = time();
@@ -584,6 +604,15 @@ class Briskin5 {
            
             */
 
+            /* se gli altri utenti non erano d'accordo questo utente viene bannato */
+            $remcalc = $this->table[0]->exitlock_calc(&$this->user, $user_cur->table_pos);
+            if ($remcalc < 3) {
+                require_once("${G_base}Obj/hardban.phh");
+                Hardbans::add(($user_cur->flags & USER_FLAG_AUTH ? $user_cur->name : FALSE),
+                              $user_cur->ip, $user_cur->sess, $user_cur->laccwr + BAN_TIME);
+            }
+            //      $user->bantime = $user->laccwr + BAN_TIME;
+
            $this->table_wakeup(&$user_cur);
          }
        }
@@ -603,7 +632,7 @@ class Briskin5 {
   //
   //  static functions
   //
-  function &load_data($table_idx, $table_token = "") 
+  function load_data($table_idx, $table_token = "") 
   {
     GLOBAL $G_false, $sess;
     $doexit = FALSE;
@@ -649,7 +678,7 @@ class Briskin5 {
     if ($doexit)
       exit();
     
-    return ($G_false);
+    return (FALSE);
   }
   
 
@@ -951,6 +980,22 @@ function locshm_exists($tok)
     
 }
 
+function asta2mult($asta_pnt)
+{ 
+  if ($asta_pnt > 110) 
+    return (5);
+  else if ($asta_pnt > 100) 
+    return (4);
+  else if ($asta_pnt > 90) 
+    return (3);
+  else if ($asta_pnt > 80) 
+    return (2);
+  else if ($asta_pnt > 70) 
+    return (1);
+  else
+    return (0);
+}
+
 // rendiamo qui l'elenco dei punti come return della func
 function calculate_points(&$table)
 {
@@ -966,6 +1011,7 @@ function calculate_points(&$table)
   $table->old_win = $table->asta_win;
   $table->old_friend = $table->friend;
   $table->old_asta_pnt = $table->asta_pnt;
+  $table->old_mult = $table->mult;
 
   for ($i = 0 ; $i < (BRISKIN5_PLAYERS_N == 5 ? 40 : 24) ; $i++) {
     // for ($i = 0 ; $i < 40 ; $i++) {
@@ -980,13 +1026,15 @@ function calculate_points(&$table)
   
   if ($table->asta_pnt == 61 && $pro == 60) { // PATTA !
     $table->points[$table->points_n % MAX_POINTS] = array();
-    for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) 
+    for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
       $table->points[$table->points_n % MAX_POINTS][$i] = 0;
+      $ret[$i] = 0;
+    }
     $table->points_n++;
     $table->old_pnt = $pro;
-    $table->mult *= 2;
+    $table->mult += 1;
 
-    return;
+    return($ret);
   }
 
   if ($pro >= $table->asta_pnt) 
@@ -994,6 +1042,8 @@ function calculate_points(&$table)
   else
     $sig = -1;
 
+  $gamult = asta2mult($table->asta_pnt);
+  
   $table->points[$table->points_n % MAX_POINTS] = array();
   for ($i = 0 ; $i < BRISKIN5_PLAYERS_N ; $i++) {
     if ($i == $table->asta_win) 
@@ -1002,10 +1052,12 @@ function calculate_points(&$table)
       $pt = 1;
     else
       $pt = -1;
+    
+    
 
     log_wr(sprintf("PRO: pt[%d][%d] = %d", $table->points_n % MAX_POINTS, $i, $pt));
 
-    $pt = $pt * $sig * $table->mult * ($pro == 120 ? 2 : 1);
+    $pt = $pt * $sig * ($gamult + $table->mult) * ($pro == 120 ? 2 : 1);
 
     log_wr(sprintf("PRO:[%d][%d][%d]", $sig, $table->mult, ($pro == 120 ? 2 : 1)));
     
@@ -1167,6 +1219,7 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
     }
     if (BRISKIN5_PLAYERS_N == 3)
        $showst .= ",-2,-2";
+    $ret .= sprintf('document.title = "Brisk - Tavolo %d (asta)";', $user->table_orig);
     $ret .= sprintf('show_astat(%s);', $showst);
 
     if ($table->asta_win != -1 && $table->asta_win == $table_pos) {
@@ -1206,7 +1259,7 @@ function show_table(&$room, &$user, $sendstep, $is_transition, $is_again)
     else
       $ret .= "remark_off();";
     
-    /* WHO CALL AND WATH */
+    /* WHO CALL AND WHAT */
     $ret .= briscola_show($room, $table, $user);
     
   }
@@ -1319,18 +1372,24 @@ function show_table_info(&$room, &$table, $table_pos)
       }
     }
     else {
-      $noty .= sprintf("<hr>Nell'ultima mano <b>%s</b> si &egrave; chiamato in mano,<br>", 
+      $noty .= sprintf($mlang_bin5_bin5['info_alon'][$G_lang],
                       xcape($room->user[$win]->name));
       if ($table->old_pnt == 120) {
-       $noty .= sprintf("ha fatto <b>cappotto</b> EBBRAVO!.<hr>");
+       $noty .= sprintf($mlang_bin5_bin5['info_acap'][$G_lang]);
       }
       else {
-       $noty .= sprintf("doveva fare <b>%s</b> punti e ne ha fatti <b>%d</b>: ha <b>%s</b>.<hr>",
-                        ($table->old_asta_pnt > 61 ? "almeno ".$table->old_asta_pnt :
-                         'pi&ugrave; di 60'), $table->old_pnt,
-                        ($wol == 1 ? "vinto" : ($wol == 0 ? "pareggiato" : "perso")));
+       $noty .= sprintf($mlang_bin5_bin5['info_apnt'][$G_lang],
+
+                        ($table->old_asta_pnt > 61 ? $mlang_bin5_bin5['info_alea'][$G_lang].$table->old_asta_pnt :
+                         $mlang_bin5_bin5['info_more'][$G_lang]), $table->old_pnt,
+
+                        ($wol == 1 ? $mlang_bin5_bin5['info_win'][$G_lang] : ($wol == 0 ? $mlang_bin5_bin5['info_peer'][$G_lang] : $mlang_bin5_bin5['info_lost'][$G_lang])));
       }
     }
+    if (($table->old_mult + asta2mult($table->old_asta_pnt)) > 1) {
+      $noty .= sprintf($mlang_bin5_bin5['info_omul'][$G_lang], multoval($table->old_mult + asta2mult($table->old_asta_pnt)));
+    }
+    $noty .= "<hr><br>";
   }
   /* MLANG: "Fai <b>tu</b> il mazzo,", "Il mazzo a <b>$unam</b>," */
   if ($table->mazzo == $table_pos) 
@@ -1359,8 +1418,8 @@ function show_table_info(&$room, &$table, $table_pos)
     $noty .= sprintf($mlang_bin5_bin5['info_turn'][$G_lang], $unam);
   }
   
-  if ($table->mult > 1) {
-    $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($table->mult));
+  if (($table->mult + asta2mult($table->asta_pnt)) > 1) {
+    $noty .= sprintf($mlang_bin5_bin5['info_mult'][$G_lang], multoval($table->mult + asta2mult($table->asta_pnt)));
   }
   $noty .= "<hr><br>";
   $ret .= show_notify($noty, 3000, $mlang_bin5_bin5['btn_bkgame'][$G_lang], 500, 400);
@@ -1405,6 +1464,7 @@ function briscola_show($room, $table, $user)
     $ret .= sprintf($prestr, 
                    xcape($room->user[$table->player[$table->asta_win]]->name), $ptnadd);
   }
+  $ret .= sprintf('set_iscalling(%d);', ($table->asta_win - $user->table_pos + BRISKIN5_PLAYERS_N) % BRISKIN5_PLAYERS_N);
 
   $ret .= sprintf('$("caller").style.backgroundImage = \'url("img/brisk_caller_sand%d.png")\';',
                  $table->asta_win);
@@ -1437,4 +1497,17 @@ function game_result($asta_pnt, $pnt)
   }
 }
 
+function log_points($curtime, &$user, $where, $mesg) 
+{
+  GLOBAL $_SERVER;
+
+  if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) {
+    /* Unix time | session | nickname | IP | where was | mesg */
+    fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess,
+                        ($user->flags & USER_FLAG_AUTH ? 'A' : 'N'),
+                        $user->name, $_SERVER['REMOTE_ADDR'], $where , $mesg));
+    fclose($fp);
+  }
+}
+
 ?>