G_false reference and all explicit pass by references removed
[brisk.git] / web / briskin5 / Obj / briskin5.phh
index 28a502c..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,20 +31,31 @@ 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>%s</b> giocare.',
@@ -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 &myclone(&$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()
@@ -416,11 +432,9 @@ class User_briskin5 extends 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;
@@ -449,12 +463,10 @@ class User_briskin5 extends User {
   }
 
   /* CLONE NOT USED
-  function &myclone(&$from)
+  function myclone(&$from)
   {
-    GLOBAL $G_false;
-    
     if (($thiz =& new User()) == FALSE)
-      return ($G_false);
+      return (FALSE);
 
     $thiz->copy($from);
 
@@ -462,12 +474,12 @@ class User_briskin5 extends User {
   } 
   */
   
-  function &spawn(&$from, $table, $table_pos)
+  function spawn(&$from, $table, $table_pos)
   {
-    GLOBAL $G_false, $CO_bin5_pref_ring_endauct;
+    GLOBAL $CO_bin5_pref_ring_endauct;
     
     if (($thiz =& new User_briskin5()) == FALSE)
-      return ($G_false);
+      return (FALSE);
     
     $thiz->parentcopy($from);
 
@@ -536,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++) {
@@ -557,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();
@@ -591,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);
          }
        }
@@ -610,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;
@@ -656,7 +678,7 @@ class Briskin5 {
     if ($doexit)
       exit();
     
-    return ($G_false);
+    return (FALSE);
   }
   
 
@@ -958,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)
 {
@@ -973,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++) {
@@ -993,7 +1032,7 @@ function calculate_points(&$table)
     }
     $table->points_n++;
     $table->old_pnt = $pro;
-    $table->mult *= 2;
+    $table->mult += 1;
 
     return($ret);
   }
@@ -1003,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) 
@@ -1011,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)));
     
@@ -1216,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);
     
   }
@@ -1329,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) 
@@ -1369,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);
@@ -1415,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);
@@ -1447,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);
+  }
+}
+
 ?>