Probleme mit einigen Scripten

SantaCruze

Erfahrenes Mitglied
Ich hoffe hier kann mir jmd weiterhelfen, komme irgendwie nicht weiter und finde die Fehler nicht.

Das erste ist ein kleines Java Script was die Zeit runterzählt,

PHP:
 function t()
        {
          n=new Date();
          s={/literal}{$building.resttime}{literal}-Math.round((n.getTime()-v.getTime())/1000.);
          m=0;
          h=0;
          if(s<0)
          {
            bx.innerHTML="Abgeschlossen<br><a href='konstruktion.php'>weiter</a>"
          }
          else
          {
            if(s>59)
            {
              m=Math.floor(s/60);
              s=s-m*60;
            }
            if(m>59)
            {
              h=Math.floor(m/60);
              m=m-h*60;
            }
            if(s<10)
            {
              s="0"+s
            }
            if(m<10)
            {
              m="0"+m
            }
            bx.innerHTML=h+":"+m+":"+s+"<br><a href=konstruktion.php?s={/literal}{$building.id}{literal}>Abbrechen</a>";
          }
          window.setTimeout("t();",999)
         }
         window.onload=t;
        </script>
        {/literal}

dieses ist bei mir in ein php Script eingebunden. Problem ist nur, da ich kein CSS verwende kann ich den Style der Zeitangabe nicht ändern. Sobald ich die Zeile <br><a href=konstruktion.php?s={/literal}{$building.id}{literal}>Abbrechen</a>"; entsprechend modifiziere , sprich den HTML Tag für Font und Farbe einsetze stoppt der Zähler augenblicklich und funktioniert nicht mehr. Muss ich da wirklich mit CSS arbeiten um das Problem zu umgehen?


Das 2. problem ist ein Rechenfehler (den ich aber nicht finde). Bei folgendem Script

PHP:
    function ships_build_refresh($coords) 
    {
        $gal = $coords['gal'];
        $sys = $coords['sys'];
        $plan = $coords['plan'];
        
        $this->query("SELECT * FROM ship_build WHERE gal=$gal AND sys=$sys AND plan=$plan ORDER BY `order` ASC;");
        $this->err();
        
        $own_db = new cl_extended_database;
        
        $nr1 = 1;
        $lref = 0;
        $tv = 0;
        
        $level_sf = $own_db->planets_building_level($coords, 12); //Schiffsfabrik: Level
        
        while ($row = $this->fetch())
        {
            // echo "DBUG in ships_build_refresh: fetching...<br>";
            $tobuild = 0;
            
            $own_db->reinit();
            
            $ship_select1 = $own_db->ships_select($row['shiptype']);
            $shiptype_rtime = $own_db->formula_shiptime($ship_select1['time'], $level_sf); 

            if ($nr1 == 1)
            {
                $nr1 = 0;
                $lref = $row['lastact'];
                $now = time();
                $tv = $now - $lref; 
                // echo "<b>DEBUG:</b> Zeit vergangen:$tv<br>";
            } 

            $rtime = $row['resttime'];
            
            if ($rtime > $tv)
            {
                $new_rt = $rtime - $tv; 
                // echo "<b>MySQL:</b>Setze resttime to auf $new_rt und exit...<br>";
                
                $own_db->query("UPDATE ship_build SET resttime='$new_rt', lastact='$now' WHERE buildid='" . $row['buildid'] . "';");
                $own_db->err();
                
                $own_db->dbclose();
                return;
            }
            else
            {
                $tv -= $rtime;
                $rtime = $shiptype_rtime; //full time; 
                // $cnt = 1;
                // echo "<b>MySQL:</b> Baue 1 schiff<br>";
                $tobuild += 1;
            } 
            
            if ($rtime > $tv)
            {
                $new_rt = $rtime - $tv; 
                // echo "<b>MySQL:</b>Setze resttime to auf $new_rt und exit...<br>";
                
                if ($row['count'] <= 1)
                {
                    $own_db->query("DELETE FROM ship_build WHERE buildid='" . $row['buildid'] . "';");
                    $own_db->err(); 
                    // echo "<b>MYSQL:</b> Loesche Thread, keine Schiffe vorhanden...'<br>";
                }
                else
                {
                    $own_db->query("UPDATE ship_build SET resttime='$new_rt', lastact='$now', count=count-1 WHERE buildid='" . $row['buildid'] . "';");
                    $own_db->err();
                } 
                
                $own_db->refresh_lastact($coords);
                $own_db->ship_insert($coords, $tobuild, $row['shiptype']);
                
                $own_db->dbclose();
                
                return;
            } 
            
            if ($tv > 0)
            {
                // echo "TV: $tv, rt: $rtime<br>";
                $cnt = @floor($tv / $rtime);
                
                if ($rtime == 0)
                {
                    $cnt += 1;
                } 
                
                if ($cnt == 0)
                {
                    // echo "soll 0 schiffe bauen -> nix da->exit!<br>";
                    return;
                } 
                
                if ($cnt > $row['count'])
                {
                    $cnt = $row['count'];
                }
                
                $rtime = $shiptype_rtime; // full time
                $tv -= $cnt * $rtime;
                $rtime = $tv;
                $row['count'] -= $cnt; 
                $tobuild += $cnt;
                
                if ($row['count'] <= 0)
                {
                    $own_db->query("DELETE FROM ship_build WHERE buildid='" . $row['buildid'] . "';");
                    $own_db->err(); 
                    // echo "<b>MYSQL:</b> Loesche Thread, keine Schiffe vorhanden...'<br>";
                }
                else
                {
                    $cnt = $row['count'];
                    $own_db->query("UPDATE ship_build SET count='$cnt', resttime='$rtime', lastact='$now' WHERE buildid='" . $row['buildid'] . "';");
                    $own_db->err(); 
                    // echo "<b>MYSQL:</b> Set Thread auf: count->$cnt, resttime->$rtime'<br>";
                } 

                $own_db->refresh_lastact($coords);
                $own_db->ship_insert($coords, $tobuild, $row['shiptype']);
                
                if ($tv <= $shiptype_rtime)
                { // full time
                        // echo "Nothing more to build->exit<bR>";
                        $own_db->dbclose();

                        return;
                }
                else
                {
                    // echo "Time left: $tv secounds, starting next thread<bR>";
                } 
            } 
        } 
    }



Das nächste Problem ist, das eine Menge X als Grundmenge erhalten bleiben soll, daher diese nicht verändert werden kann. Aber irgendwie werden doch werte abgezogen. Script lautet wie folgt:

PHP:
   if ($load > 0)
                {
                    $raided['fe'] = min($load, $tores['fe']);
                    $load -= $raided['fe'];
                }
                else
                {
                    $raided['fe'] = 0;
                }
                 
                if ($load > 0)
                {
                    $raided['lut'] = min($load, $tores['lut']);
                    $load -= $tores['lut'];
                }
                else
                {
                    $raided['lut'] = 0;
                }
                 
                if ($load > 0)
                {
                    $raided['h2'] = min($load, $tores['h2']);
                    $load -= $tores['h2'];
                }
                else
                {
                    $raided['h2'] = 0;
                } 

                if ($load > 0)
                {
                    $raided['h2o'] = min($load, $tores['h2o']);
                    $load -= $tores['h2o'];
                }
                else
                {
                    $raided['h2o'] = 0;
                } 
                
                //print_r($raided);
                
                // echo "raided!:<br>";
                // to Fix: min. Bestand
                $raided['fe'] = floor($raided['fe']);
                $raided['lut'] = floor($raided['lut']);
                $raided['h2o'] = floor($raided['h2o']);
                $raided['h2'] = floor($raided['h2']);

                $tores['fe'] -= $raided['fe']; //Spy report uses $tores['x'], this makes correct values
                $tores['lut'] -= $raided['lut'];
                $tores['h2o'] -= $raided['h2o'];
                $tores['h2'] -= $raided['h2'];

                $str_res_raided = $raided['fe'] . "x" . $raided['lut'] . "x" . $raided['h2o'] . "x" . $raided['h2'];

                $owndb->fleet_put_res($fid, $raided);
                $nraided = $owndb->var_res_negate($raided);
                $owndb->res_add($tcoords, $nraided);
                //echo "res_add-Position";
 
Zuletzt bearbeitet:
Hallo!

.....und nicht zu vergessen die Zeilen übersichtlich einzurücken. ;)

Gruss Dr Dau
 
Es liegt daran das du einen grossen Batzen Code presentierst ohne das du den Fehler schon eingegrenzt hast.

Denn wenn ich jetzt den Fehler suchen will müsste ich das Script so erstmal bei mir Installieren und selber aufrufen, den Fehler eingrenzen usw.

Der Zeitaufwand ist ziemlich gross dafür. Und das wir oft und gerne helfen heisst nicht das wir auch immer bereit sind einen grossen Zeitaufwand dafür zu erbringen.

Wenn du Hilfe willst, dann grenze den Fehler soweit ein das mann dir auch helfen kann.
 
  1. Sobald ich die Zeile <br><a href=konstruktion.php?s={/literal}{$building.id}{literal}>Abbrechen</a>"; entsprechend modifiziere , sprich den HTML Tag für Font und Farbe einsetze stoppt der Zähler augenblicklich und funktioniert nicht mehr.
    Zeig doch mal ein Beispiel...wie du es modifizierst.
    Warum kannst du da eigentlich kein CSS verwenden?


  2. siehe Christians Antwort...wie soll man da einen Fehler finden, wenn man weder die Daten aus der DB kennt, und nichtmal weiss, was falsch berechnet wird. So lässt sich dies Problem kaum nachvollziehen


  3. Das nächste Problem ist, das eine Menge X als Grundmenge erhalten bleiben soll, daher diese nicht verändert werden kann. Aber irgendwie werden doch werte abgezogen. Script lautet wie folgt:
    Welche Menge X ist gemeint?
    Ich sehe da nur, dass du da alle Variablen direkt veränderst. Wenn du die Ausgangsvariablen nicht verändern willst, dann musst du die Sachen in neuen Variablen speichern.
 
Zurück