Im SQL Statement hast du die Spalte "Leben" , in der Tabellenstruktur aber nicht.In der Funktion mysql_format hast du 6 Platzhalter ( %e ) aber gibst nur 3 zusätzliche Parameter an.
Einfacher fände ich es, manuell format zu nutzen für das SQL Kommando und dieses mal per print auszugeben. Dann kann man besser nachvollziehen,was im Hintergrund passiert.
Das %e als Platzhalter macht ja auch nichts anderes,als an diesem Parameter zuvor mysql_real_escape_string durchzuführen.Austauschen sollte daher kein Problem sein.
Beiträge von Goldkiller
-
-
[Plugin] [REL] Execute
Da der Autor gesperrt ist und das Plugin schon in die Jahre gekommen ist, kann es gut sein,dass das Plugin nicht mehr funktioniert. -
Das Foto kann ich nicht sehen. Besser wäre es auch,wenn du das dazugehörige SQL Statement postest.
Ich denke aber,dass du eine Spalte "count" genannt hast. Das Wort "count" ist aber eine Funktion in SQL.
Damit es nicht als Funktion erkannt wird sondern als Spalten, müsstest du es mit ` markieren.
zB. -
Von mir auch paar Screenshots:
Ihr solltet euch vllt mal ansehen,was für Möglichkeiten es damals gab.
Changelog#Version_0.1ba_samp.inc
Davon haben nicht mal alle Funktionen korrekt funktioniert .0.1b \o/
-
Kein Scherz !
-
Jack Gerilla hat die Lösung genannt. Es ist nämlich das "return 0",weshalb es nicht funktioniert.
Deine Aussage "Es geht immer noch nicht :(" ist nicht Hilfreich,da keiner weiss wie es denn jetzt im Script aussieht.
Das return 0 muss kommen,wenn das Schimpfwort definitiv gefunden wurde. -
Zitat
stock AutosLaden()
{
for(new i=0; i<MAX_VEHICLES; i++)
{
format(AutoDaten[i][aBesitzer],64,mysql_GetString("grra", "Besitzer", "Besitzer", AutoDaten[i][aBesitzer]));
// usw
}
return 1;
}
Macht ja natürlich Sinn,den aBesitzer auszulesen in dem man in der Datenbank nach dem aBesitzer sucht den wir bereits im Script kennen .
Spoiler anzeigen Natürlich nicht
Vorausgesetzt du kennst den aBesitzer noch nicht bei AutosLaden() ( davon gehe ich aus, sonst macht es noch weniger Sinn ), dann wird dort der Wert hinter der Variable <LEER> sein.
Jetzt den Besitzer mit dem Namen <LEER> ( Also nichts ) zu suchen wird nicht funktionieren und somit alles weitere auch nicht.Hättest besser mal mit der ID gearbeitet. Je nachdem wie du das Ganze aufgezogen hast,gibt es aber auch keine ID.
eVasi0n Vorschlag ist da definitiv besser.
-
Mit sscanf kannst du nicht MySQL auslesen oder " Daten mit Sscanf laden" . Die Dinge hängen nicht miteinander zusammen.
Falls du mehr über sscanf wissen willst, hier. -
Du bist dir aber sicher,dass das überhaupt funktioniert ?
Zitatvehs[i][model] = mysql_GetInt("autos","model", "ID", "i");
Wieso hast denn als 4. Parameter "i" ?ZitatKann ich das ganze irgendwie verkürzen, indem ich das alles in einen Query oder so mache?
Wäre gut.
Das Stichwort dazu wäre SELECT. Google hilft dir da sicherlich. -
99999999 hat aber auch 8 Stellen, würde aber in Beiden Fällen ( 1. & 2. ) nicht zugelassen werden.
http://wiki.sa-mp.com/wiki/Random
ZitatReturns A random number ranging from 0 to max-1.
Spoiler anzeigen random(90000000) + 10000000;ZitatMuesste ich dann nicht dann iwie ne andere zahl also es soll in etwa so stehen 46347768
Und nicht 12345678
Eine Zahl zwischen "10000000 <= X <= 99999999" wird dir ausgegeben. Doppelte können natürlich eintreten. -
Man brauch hier auch ganz klar kein sizeof. Wozu brauchst du denn die Größe ? Du willst doch den Wert der sich hinter "Pizzen" bei "sachen" befindet.
Spoiler anzeigen random(sachen[Pizzen]) // 0 - 999, wenn dort wirklich 1000 sein sollten -
Was genau schaffst du denn nicht.
Du lässt den Textdraw unter OnPlayerConnect erstellen ( Hast du ja bereits bei OnGameModeInit nur musst du die Schleife entfernen ) und zerstörst es unter OnPlayerDisconnect.
Wenn du sagst wo du Probleme hast,bekommst du sicherlich Hilfe. Einen fertigen Code werde ich dir aber nicht posten ;). -
Zitat
Diese sollen mit einem Komma getrennt in die cfg-geschrieben werden.
Zitatsplit(strFromFile2, arrCoords, '|');
Ist mMn schon ein widerspruch.Falls das nicht das Problem ist,so lass dir doch mal beim auslesen die Variablen strFromFile2,arrCoords[0] und arrCoords[1] via print/printf ausgeben.
-
Das Problem dürfte bei dir der Code unter OnPlayerSpawn sein.
Wieso zeigst du dort in einer Schleife dem Spieler ( einem Spieler (!) ) alle Textdraws im Array Ort an ?
Es reicht doch,nur das extra Textdraw für den Spieler anzuzeigen.Spoiler anzeigen TextDrawShowForPlayer(playerid,Ort[playerid]);Übrigens würde ich an deiner Stelle nicht die 500 Textdraws ( falls MAX_PLAYERS nicht re-definiert wurde ) beim Scriptstart erstellen, sondern unter
OnPlayerConnect. Heißt also,nur nach Bedarf.Verlässt der Spieler den Server wieder, löschst du diesen wieder unter OnPlayerDisconnect.
Es wird nämlich sicherlich der Fall sein,dass du nicht alle Textdraws gleichzeitig benötigst da vllt nur 3 Spieler auf deinem Server sind. Wozu dann also
direkt 500 erstellen ? Das ist nur unnötig erstelltes Zeug ;). -
Zitat
format(CarInfo[playerid][cSchild],128,"%s",mysql_GetString("Autos", "Schild", "Besitzer", CarInfo[playerid][cBesitzer]);
Zähl mal nach, wie oft du einen Funktionaufruf öffnest "(" und wie oft die eine Funktionaufruf schließt ")".
Besagt aber auch die ursprüngliche Fehlermeldung halbwegs. -
Warum greifst du nicht direkt auf das 5. Bit zu ?
Ich gehe mal davon aus,dass du sscanf besitzt.
Dann ließ doch den String mit sscanf aus als Typ b ( binary ). Dann bekommst die Streng der eine Zahl im Binärsystem repräsentiert korrekt umgewandelt in eine Zahl.
Denn 0b1011011101 ist nicht das gleiche wie 1011011101.
Danach kannst du mit & den Wert prüfen.new bin;
sscanf("01101110101111011","b",bin);
if( bin & 0b10000) {
// An 5. Stelle ist eine 1.
}//Edit:
Zusatzinfo -
Dazu hast du auch noch den Query falsch.
SQL$query = "SELECT * FROM account WEHRE User-ID = '$UserIDs' AND User-PW = '$UserPWs' LIMIT = '1'";
Zu:
SQL$query = "SELECT * FROM `account` WHERE User-ID = '$UserIDs' AND User-PW = '$UserPWs' LIMIT = '1'";
4 Fehler in einem 12 Zeilen code, respekt.
Du meinst, die Tabelle ohne ` zu markieren ist ein Fehler ? Definitiv nicht.Das Problem ist das MINUS in den Spaltennamen.
Daher probier es mal aus, die Spalte mit ` zu markieren ( Ich weiss den Fachbegriff gerade nicht ).Notfalls gib den String per echo aus und probier es manuell an der Datenbank aus.
//Edit:
Siehe hier. -
Würde schon etwas ressourcendsparender sein, denn sizeof() ist ein bisschen langsamer, als die Stringgröße direkt anzugeben.
Den Beweis würde ich mal gerne sehen.
Spoiler anzeigen Was du schreibst ist nämlich totaler Blödsinn und nicht wahr.
Du hast damit leider ein Beispiel dafür geliefert, wie sinnfrei dieses ganze "Ressourcenschonender" Thema sein kann. Anstatt bei den großen Problemen anzusetzen, versuchst du hier an einem extrem kleinem Problem anzusetzen und dann auch noch falsch . -
Das du auch alles in einem Rutsch machen könntest,ist dir sicherlich bewusst.
Dennoch, im 2. SQL Kommando hast du keine WHERE Bedingung. Eventuell meinst du ja das mit "da der query2 nicht gespeichert wird". Denn vom Prinzip ist ein UPDATE auch ohne WHERE möglich.
Sonst gibt es immernoch ein Log,die den Fehler ausspuchen müsste. Notfalls gibst du per print() den String aus und probierst es manuell an der MySQL Datenbank aus.Spoiler anzeigen Die Strings würde ich auch außerhalb der while-Schleife erstellen. -
Die Nutzung von "else if" ist hier das Problem.
Denn nur eines der Fälle wird durchgeführt,sofern die Bedingung wahr ist.
Da du bei Level 5 die erste Bedingung ( if(SpielerInfo[playerid][pAdmin] >= 1) ) erfüllst , werden alle anderen nicht mehr geprüft.Am einfachsten wäre es,das "else" aus dem "else if" zu entfernen. Die Lösung von Scott_Mitchell würde aber auch funktionieren.