Nahe der Verzweiflung !!!
Pudding
- datenbank
Hallo,
ich verstehe gar nix mehr. Mein Script funzt bis zu einer bestimmten Grenze an Date. Im Moment spiele ich das ganze mit 77 Datensätzen durch und manchmal gehts und manchmal nicht. Ich habe scohn versucht die Zeit die der Server für die Skripte zur verfügung stellt, zu verändern aber das hat nich funktioniert, da der server im safe modus läuft. kurz zur info, folgendermaßen sollte es laufen. Alle Spieler in der db werden geladen und es werden deren Angriffswerte bestimmt. Als nächste wird nach der Angriffststärke sortiert und es soll jeder Spieler in der DB einmal angreifen. Dann wird wieder neu ausgewürfelt, die Angriffstärke ermittelt und es geht weiter. Solange bis nur ein spieler übrig ist. Ich poste mal das Skript, vielleicht kann mir einer sagen wie ich es besser machen kann oder was ich verändern kann das es läuft. ich bin VERZWEIFELT !!!!!
Skript: function ligaSpielStarten($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password){
$abfrage = "UPDATE $tableName SET fight=0 WHERE fight=1 "; $erg = mysql_db_query($database,$abfrage,$verbindung); $abfrage = "SELECT count(id) FROM $tableName"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($anzahlVerbleibende)=mysql_fetch_row($erg); if ($anzahlVerbleibende > 1){ $Text = "<tr><td colspan=2 class="main"><br>Runde $round<hr></td></tr>"; SetHTMLText($Text,$database,$verbindung); $Text = ligaEineRunden($tableName,$tableName2,$round,$htmlText,$verbindung,$database,$password); SetHTMLText($Text,$database,$verbindung); $round = $round + 1; ligaSpielStarten($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password); } else { $abfrage = "SELECT User,id FROM $tableName"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($User,$Playerid)=mysql_fetch_row($erg); $Text = "<tr><td colspan=2 class="main"><br><br><hr>Spiel Beendet - Gewinner ist $User</td></tr>"; SetHTMLText($Text,$database,$verbindung); $abfrage = "UPDATE $tableName2 SET Runde = $round WHERE id = $Playerid"; $erg = mysql_db_query($database,$abfrage,$verbindung); } }
//--Funktion--eine Rund berechnen---------------------------------------------------------------// function ligaEineRunden($tableName,$tableName2,$round,$htmlText,$verbindung,$database,$password){
$abfrage = "SELECT id FROM $tableName WHERE fight != 1 ORDER BY agr DESC"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($id) = mysql_fetch_row($erg);
$abfrage = "SELECT count(id) FROM $tableName WHERE fight != 1 AND hitpoints >= 0 ORDER BY agr DESC"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($anzahlVerbleibende) = mysql_fetch_row($erg);
$abfrage = "SELECT count(id) FROM $tableName ORDER BY agr DESC"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($UserAnzahl) = mysql_fetch_row($erg);
//-check ob noch Player da sind die noch nicht angegriffen haben if($anzahlVerbleibende>=1){ kampfBerechnen($id,$UserAnzahl,$tableName,$tableName2,$round,$htmlText,$verbindung,$database,$password); SetHTMLText($Text,$database,$verbindung); updateAgr($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password); ligaEineRunden($tableName,$tableName2,$round,$htmlText,$verbindung,$database,$password); } } //--Funktion--eine Rund berechnen------------------------------------------ende-----------------//
//--Funktion--Kampf berechnen-------------------------------------------------------------------// function kampfBerechnen($id,$UserAnzahl,$tableName,$tableName2,$round,$htmlText,$verbindung,$database,$password){
//-Angreifer Eigenschaften einlesen $abfrage = "SELECT id,User,agr,hitpoints FROM $tableName WHERE id = $id"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($idp1,$Userp1,$agrp1,$hitpointsp1) = mysql_fetch_row($erg);
$abfrage = "SELECT MechID,PilotID FROM mmw_members WHERE id=$idp1"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($midp1,$pidp1) = mysql_fetch_row($erg); $Text = "<tr><td class="main">" . $Userp1 ."</td>"; SetHTMLText($Text,$database,$verbindung);
$abfrage = "SELECT mstaerke,mgeschw,mbeweg,mzielv,mkonst, mspezat,mresfeu,mresplas,mresene,mresstra,mresexp,pintel,preakt,prefle,praeum,ptecver,pkonz FROM mmw_pilot,mmw_mech WHERE mid=$midp1 AND pid=$pidp1"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($mstaerkep1,$mgeschwp1,$mbewegp1,$mzielvp1,$mkonstp1,$mspezatp1,$mresfeup1,$mresplasp1,$mresenep1,$mresstrap1,$mresexpp1,$pintelp1,$preaktp1,$preflep1,$praeump1,$ptecverp1,$pkonzp1) = mysql_fetch_row($erg);
//-Angreifer fight=1 $abfrage = "UPDATE $tableName SET fight=1 WHERE id=$idp1"; $erg = mysql_db_query($database,$abfrage,$verbindung);
$abfrage = "SELECT count(id) FROM $tableName WHERE hitpoints >=0 AND fight != 1 ORDER BY agr DESC"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($userMitAngriff) = mysql_fetch_row($erg); $angreiferID = $UserAnzahl - $userMitAngriff;
//-Gegner bestimmen und Eigenschaften einlesen $zz = zzGen($UserAnzahl,$angreiferID)-1; $abfrage = "SELECT id,User,agr,hitpoints FROM $tableName WHERE hitpoints >=0 ORDER BY agr DESC LIMIT $zz,1"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($idp2,$Userp2,$agrp2,$hitpointsp2) = mysql_fetch_row($erg);
$abfrage = "SELECT MechID,PilotID FROM mmw_members WHERE id=$idp2"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($midp2,$pidp2) = mysql_fetch_row($erg); $Text = "<td class="main">" . $Userp2 ."</td>"; SetHTMLText($Text,$database,$verbindung); $abfrage = "SELECT mstaerke,mgeschw,mbeweg,mzielv,mkonst, mspezat,mresfeu,mresplas,mresene,mresstra,mresexp,pintel,preakt,prefle,praeum,ptecver,pkonz FROM mmw_pilot,mmw_mech WHERE mid=$midp2 AND pid=$pidp2"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($mstaerkep2,$mgeschwp2,$mbewegp2,$mzielvp2,$mkonstp2,$mspezatp2,$mresfeup2,$mresplasp2,$mresenep2,$mresstrap2,$mresexpp2,$pintelp2,$preaktp2,$preflep2,$praeump2,$ptecverp2,$pkonzp2) = mysql_fetch_row($erg);
$agrproz = (100*$agrp1)/(($agrp1+$agrp2)+1); $zz = zzGen(100,$agrproz);
if($zz>$agrproz){ $angriff =$Userp2; $zz = rand(0,100); $wat = ((-4000/(($pkonzp2+$mzielvp2)+40))+100) - $zz*(((-4000/(($pkonzp2+$mzielvp2)+40))+100)/4); $zz = rand(0,100); if ($zz<=$wat){ $zz = rand(0,100); $wab = ((-4000/(($pkonzp1+$mzielvp1+$mbewegp1)+40))+100) - $zz*(((-4000/(($pkonzp1+$mzielvp1+$mbewegp1)+40))+100)/4); $schaden = round(($mstaerkep2 + $praeump2)-(($mstaerkep2 + $praeump2*$wab)/100)); $hitpoints = $hitpointsp1 - $schaden;
//-hitpoints berechnen
$abfrage = "UPDATE $tableName SET hitpoints=$hitpoints WHERE id = $idp1"; $erg = mysql_db_query($database,$abfrage,$verbindung);
//-verteilterSchaden berechnen
$abfrage = "UPDATE $tableName2 SET verteilterSchaden=verteilterSchaden+$schaden WHERE id = $idp2"; $erg = mysql_db_query($database,$abfrage,$verbindung);
//-empfangenerSchaden berechnen
$abfrage = "UPDATE $tableName2 SET empfangenerSchaden=empfangenerSchaden+$schaden WHERE id = $idp1"; $erg = mysql_db_query($database,$abfrage,$verbindung); $schaden=$schaden; } else{ $schaden="daneben"; }
} else { $angriff =$Userp1; $zz = rand(0,100); $wat = ((-4000/(($pkonzp1+$mzielvp1)+40))+100) - $zz*(((-4000/(($pkonzp1+$mzielvp1)+40))+100)/4); $zz = rand(0,100); if ($zz<=abs($wat)){ $zz = rand(0,100); $wab = ((-4000/(($pkonzp2+$mzielvp2+$mbewegp2)+40))+100) - $zz*(((-4000/(($pkonzp2+$mzielvp2+$mbewegp2)+40))+100)/4);
//-hitpoints berechnen $schaden = round(($mstaerkep1 + $praeump1)-(($mstaerkep1 + $praeump1*$wab)/100)); $hitpoints = $hitpointsp2 - $schaden; $abfrage = "UPDATE $tableName SET hitpoints=$hitpoints WHERE id = $idp2"; $erg = mysql_db_query($database,$abfrage,$verbindung);
//-verteilterSchaden berechnen $abfrage = "UPDATE $tableName2 SET verteilterSchaden=verteilterSchaden+$schaden WHERE id = $idp1"; $erg = mysql_db_query($database,$abfrage,$verbindung);
//-empfangenerSchaden berechnen $abfrage = "UPDATE $tableName2 SET empfangenerSchaden=$empfangenerSchaden+$schaden WHERE id = $idp2"; $erg = mysql_db_query($database,$abfrage,$verbindung); } else{ $schaden="daneben"; } }
$Text = "<td class="main">$angriff: $schaden</td></tr>"; SetHTMLText($Text,$database,$verbindung); removePlayer($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password);
}
//--Funktion--Kampf berechnen-----------------------------------------------ende-----------------//
//--Funktion--removePlayer --die Spieler entfernen die keine hitpoints mehr haben--------------// function removePlayer($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password){
$abfrage = "SELECT count(User) FROM $tableName WHERE hitpoints < 0"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($anzahlToter)=mysql_fetch_row($erg);
for ($i=0;$i<$anzahlToter;$i=$i+1){
$abfrage = "SELECT id FROM $tableName WHERE hitpoints < 0 LIMIT $i,1"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($Playerid)=mysql_fetch_row($erg);
$abfrage = "SELECT User,hitpoints FROM $tableName WHERE id = $Playerid"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($User,$hitpoints)=mysql_fetch_row($erg);
$Text = "<tr><td colspan=2 class="main"><br>$User ist rausgeflogen mit $hitpoints<br></td></tr>"; SetHTMLText($Text,$database,$verbindung);
$abfrage = "UPDATE $tableName2 SET Runde = $round WHERE id = $Playerid"; $erg = mysql_db_query($database,$abfrage,$verbindung);
$abfrage = "DELETE FROM $tableName WHERE id = $Playerid"; $erg = mysql_db_query($database,$abfrage,$verbindung); } }
//--Funktion--die Spieler entfernen die keine hitpoints mehr haben---------ende---------------//
//--Funktion--agr wird neu berechnet---------------------------------------------------------// function updateAgr($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password){
$abfrage = "SELECT count(id) FROM $tableName"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($anzahl)=mysql_fetch_row($erg); for ($i=0;$i<$anzahl;$i=$i+1){
$abfrage = "SELECT id,User FROM $tableName LIMIT $i,1"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($Playerid,$User) = mysql_fetch_row($erg);
$abfrage = "SELECT MechID,PilotID FROM mmw_members WHERE id = $Playerid"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($mid,$pid) = mysql_fetch_row($erg);
$abfrage = "SELECT mstaerke,mgeschw,mbeweg,mzielv,mkonst, mspezat,mresfeu,mresplas,mresene,mresstra,mresexp,pintel,preakt,prefle,praeum,ptecver,pkonz FROM mmw_pilot,mmw_mech WHERE mid=$mid AND pid=$pid"; $erg = mysql_db_query($database,$abfrage,$verbindung); list($mstaerke,$mgeschw,$mbeweg,$mzielv,$mkonst,$mspezat,$mresfeu,$mresplas,$mresene,$mresstra,$mresexp,$pintel,$preakt,$prefle,$praeum,$ptecver,$pkonz) = mysql_fetch_row($erg);
//AGR bestimmen $agr=$mgeschw+$preakt; $zz =rand(0,1); $agr = ($agr)- ($zz*($agr/4));
$abfrage = "UPDATE $tableName SET agr = $agr WHERE id = $Playerid"; $erg = mysql_db_query($database,$abfrage,$verbindung);
}
}
//--Funktion--agr wird neu berechnet-------------------------------------ende-----------------//
//---Funktion-----------Zufallszahl berechnen zwischen 0 und $anzahl(exklusiv $doNotUse)-----// function zzGen($anzahl,$doNotUse){ $zzReturn = rand(0,$anzahl); if ($zzReturn==$doNotUse OR $zzReturn==""){ return zzGen($anzahl,$doNotUse); } else { return $zzReturn; } } //---Funktion-----------Zufallszahl berechnen-----//
function SetHTMLText($Text,$database,$verbindung){ $datum=date(dmy); $abfrage = "UPDATE mmw_liga_stats SET htmlText= CONCAT(htmlText,' ','$Text') WHERE datum=$datum"; $erg = mysql_db_query($database,$abfrage,$verbindung); }
ligaSpielStarten($tableName,$round,$tableName2,$htmlText,$verbindung,$database,$password);
Ich bin für alle Anregungen mehr als Dankbar !!!!!!!! Pudding
Hi,
wie wärs mal mit Ausschlachten?
Nur noch das übrig lassen, was unbedingt nötig ist und dann wieder langsam einfügen?
Andreas
Hi,
Das Skript an sich funktioniert ja, nur nicht ab einer bestimmten datenmenge....pudding
Hi,
ich würde dir gern helfen, jedoch bin ich nicht der Fachmann für diese Syntax.
Aber ... du könntest evt. mal beschreiben was "funktioniert nicht mehr" genau bedeutet ...
anders gefragt, was ist das Ergebnis wenn du den Prozess startest
[ ] bleibt stehen (weißer Bilschirm, nix passiert mehr, der Prozess läuft sich evt. tot)
[ ] bricht ab (Fehlermeldung ??? könnte auf einen Scriptfehler deuten)
[ ] startet nicht (Fehlermeldung ??? könnte auf einen Scriptfehler deuten)
Generell kann man aber sagen, wenn die Semantik des Prozesses stimmt, dann ist es egal ob 1 Datensatz oder 1,5Mio. -> Dein Prozess hat irgendwo eine Schwachstelle.
Gruß, Frank