Fehler im Einheitenbauscript

shampoo

Grünschnabel
Code:
$startzeit = $anfang;		# Zeit 'startzeit' aus DB
$aktuellezeit = time();		# aktuellezeit = time();

$baudauer = $dauer;		# Zeit 'baudauer' aus DB
$bauanzahl = $anzahl;		# Anzahl aus DB

$eta_bauende = $baudauer*$bauanzahl+$startzeit;

	if($aktuellezeit < $eta_bauende) {

		$differenz = $aktuellezeit-$startzeit;

			for($x=0;$x<$bauanzahl;$x++) {
				if($differenz >= $baudauer) {
					$differenz = $differenz-$baudauer;
					$z++;
				}
			}

		$neue_startzeit = ($z*$baudauer) + $startzeit;
		$neue_bauanzahl = $bauanzahl-$z;

Da das für alle Spieler gleichzeitig ausgewertet wird, befindet sich dieser Schnipsel
in einer Schleife. Nach dem Schnipsel folgt die Speicherung in der DB.

Nun zum Problem: Es kommt vor das auf einmal Minus Einheiten gespeichert werden,
was natürlich nicht sein kann, manchmal auch die Zeit. Leider haben bislang alle
Problemlösungsversuche nicht gewirkt.

Hat jemand nen Verbesserungsvorschlag?
 
Hi,

gibt es einen driftigen Grund warum du so komisch einrückst :suspekt:

Naja ich sehe nicht keinen Sinn in deinem Programm, kannst du es vll. einmal erläutern was da eigentlich geschehen soll?
 
Das soll ein Einheitenausbildungsscript sein.
Funktion ist folgende: es wird geguckt wieviel
einheiten bis zum derzeitigen stand ausgebildet
wurden.

beispiel:

Spieler A gibt 10 einheiten in auftrag. 10 sek hat eine
einheit an baudauer, d.h. nach 100 sek wären alle
einheiten fertig. d.h. auch das nach 50 sek erst 5 einheiten
fertig sind. wenn wir allerdings erst sek 45 haben dann sind
4 gebaut worden, die 5te einheit wird aber erst bei 50 sek gut
geschrieben.

ich hoffe das war verständlich, ansonsten frag nochmal *g*
 
achso.. ja mit so einer Erklärung ists gleich viel logischer wast willst ;)

Du musst das ganze nicht mit einer for Schleife durchgehen, für was gibts denn den Modula (in C,C++ und C# ists das "%" Zeichen ich glaub in php auch) Operator?

Mein Ansatz wäre:

PHP:
$zeitVergangen = $aktuellezeit - $startZeit;
if ($zeitVergangen > 0)
{
  $anzBisJetztFertig = $zeitVergangen % $bauAnzahl;
  $neue_bauanzahl = $bauAnzahl - $anzBisJetztFertig;
  $neue_startZeit = ($anzBisJetztFertig * $bauDauer) + $startZeit;
}

Ich habs aber jetzt nur mal so hingeschrieben, noch nicht getestet, kann sein dass noch was nicht geht, aber Grundsätzlich ist die Lösung doch viel Ökönomischer *g*

Lg, Yanick
 
Zurück