Autohaus, Auto soll erstellt werden

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Irgendwas stimmt nicht richtig.


    Er lädt das Fahrzeug nach dem Login nicht, es wird einfach nicht erstellt.



    Nach Disconnect wird das hier aufgerufen, funktioniert auch nicht obwohl das Fahrzeug auf diesen "Namen" erstellt wird.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Er lädt das Fahrzeug nach dem Login nicht, es wird einfach nicht erstellt.

    Dann stimmt irgendwo etwas nicht.




  • Ich dachte man scrollt hoch und schaut sich dann den letzten LoadPlayerCars Code an damit ich nicht so Spam.
    Da ich auch nicht weiß woran es liegt und mir nichts ausgeben ist das auch schwer. Daten sind alle in der Datenbank nur wird es nicht geladen.



    Hat bestimmt was hiermit zu tun. entweder kann er die Daten nicht richtig auslesen sonst hätte ich nichts im Kopf.


    Nachdem ich das Fahrzeug gekauft habe und disconnecte verschwindet es auch nicht.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Ich dachte man scrollt hoch und schaut sich dann den letzten LoadPlayerCars Code an damit ich nicht so Spam.

    Du könntest den Code ja inzwischen geändert haben, daher mache ich das nicht. Sonst könnte es sein, wir überschreiben uns gegenseitig, oder erst durch eine Änderung tritt der Fehler auf. :)



    Bitte poste auch die Screenshots aus der Datenbank (User und Fahrzeuge) und nenne die IDs, die geladen werden sollen.
    Außerdem prüfe den MySQL Log, ob dort Meldungen drin sind (vorher leeren).


    Achte auch darauf, nicht immer nur die Hälfte zu machen, die ich dir sage. Das verzögert den Prozess nur unnötig.

  • Code
    query: SELECT * FROM personalcars WHERE P_uID = '32'

    Habe mir das printen lassen, also da steht ja Where P_uID = 32 das stimmt aber nicht.
    in der Tabelle ist die P_uID wieder -1 warum?




    Muss ich den public LoadPlayerCars nach dem Login auch aufrufen oder wird das schon automatisch gemacht mit mysql_pquery

    Zitat von Jeffry

    Achte auch darauf, nicht immer nur die Hälfte zu machen, die ich dir sage. Das verzögert den Prozess nur unnötig.

    Tut mir leid, manchmal will ich es machen dann kommt was dazwischen und später denke ich, das ich es gemacht habe.


    Im normalen MYSQL-Log steht nichts.
    Im Server-Log auch nicht.


    Irgendwie hab ich gestern etwas nicht gespeichert und habe heute gemerkt das noch Variablen da sind die gestern weg wahren, habe alles so gut wieder entfernt und verbessert nach meinem Auge.
    Ich habe was übersehen aber ich weiß nicht was.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • Zitat von Jeffry

    den ganzen Befehl.

    Du meinst den ganzen Code oder?



    Wie ich schon gesagt habe, habe ich nur Probleme mit der Variable P_uID.
    Jetzt gerade festgestellt das nur die floats von X-R gespeichert werden der Rest nicht.


    Das Fahrzeug wird jetzt auch nicht mehr erstellt

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Alles klar, danke.


    Dann ändere jetzt bitte folgendes am Code, der das Fahrzeug erstellt:
    PCar[playerid][d][P_uID] = cache_insert_id();
    zu:
    PCar[playerid][d][P_uID] = pInfo[playerid][db_id];
    Der Grund für diese Anpassung:
    Die P_uID ist die Datenbank-ID des Besitzers des Fahrzeugs. Darüber stellst du die Verbindung zwischen Besitzer und Fahrzeug her.
    Dies brauchst du, wenn du die Fahrzeuge aus der Datenbank laden willst. Dort musst du ja prüfen, welche Fahrzeuge für welchen Spieler geladen werden sollen.



    Ändere außerdem folgendes:
    mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_VID, dbID, P_uID) VALUES ('%f','%f','%f','%f','%d','%d','%d','%d','%d')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R],PCar[playerid][d][P_C1],PCar[playerid][d][P_C2],PCar[playerid][d][P_MID],PCar[playerid][d][P_VID],PCar[playerid][d][P_dbID],PCar[playerid][d][P_uID]);
    zu:
    mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_uID) VALUES ('%f','%f','%f','%f','%d','%d','%d','%d')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R],PCar[playerid][d][P_C1],PCar[playerid][d][P_C2],PCar[playerid][d][P_MID],PCar[playerid][d][P_uID]);
    Dort habe ich zum einen die dbID und die P_VID aus dem Query entfernt, sowie die P_VID aus den Parametern hinten, die dbID war dort nicht drin.
    Dies hat dazu geführt, dass du einen Fehler im MySQL Log erhalten haben solltest, da die Anzahl der Parameter nicht mit den erwarteten Werten übereinstimmt.
    So passt es jetzt.


    Es werden gespeichert:
    Koordinaten (X, Y, Z, R)
    Farben (C1, C2)
    Model (MID)
    Besitzer (uID)



    Nach der Anpassung dieser beiden Code-Stellen mache bitte folgendes:
    Beende den Server.
    Lösche alle Fahrzeuge aus der Datenbank, da diese zum Teil falsche Werte haben.
    Starte den Server wieder.
    Kaufe dir jetzt ein Fahrzeug.
    Prüfe anschließend, ohne weitere Aktionen im Server, ob der Eintrag in der Datenbank korrekt ist.


    Ist dieser korrekt?
    Wenn ja: Poste bitte den Code, mit dem du die Fahrzeuge aus der Datenbank beim Server-Start lädst (Query UND Callback).
    Wenn nein: Poste bitte einen Screenshot des Datenbankeintrags des neuen Fahrzeugs und erkläre, was falsch ist.



    Bitte mache nur die genannten Punkte, nichts anderes und lasse auch nichts aus. Das ist wichtig.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Also ist es richtig das es dbID nicht mehr da ist heißt soll ich sie löschen?



    In der Datenbank wird nichts eingetragen, habe auch nur das gemacht was du mir gesagt hast. Muss diese dementsprechend auch anpassen.
    http://prntscr.com/kynu63



    Code
    [21:16:19] [plugins/mysql] error #1062 while executing query "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_uID) VALUES ('758.116394','-1371.883789','13.420600','270.124512','11','11','402','32')": Duplicate entry '0' for key 'PRIMARY'
    [21:24:05] [plugins/mysql] cache_get_row_count: no active cache

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Also ist es richtig das es dbID nicht mehr da ist heißt soll ich sie löschen?

    Ja, das ist richtig. Lösche sie aber nicht aus der Datenbank, diese soll von der Tabelle automatisch vergeben werden.



    Duplicate entry '0' for key 'PRIMARY'

    Hast du die Auto-Einträge aus der Tabelle alle gelöscht?
    Wenn ja, prüfe, ob die Spalte "dbID" die Eigenschaft "AUTO_INCREMENT" hat und aktiviere diese, falls sie es nicht hat.


    Somit:
    dbID muss AUTO_INCREMENT sein.
    Alle Fahrzeuge müssen aus der Tabelle gelöscht werden.


    Anschließend kannst du obige Test-Schritte nochmal durchführen.

  • P_VID kann ich dann auch aus der Datenbank raus nehmen, alles wird gespeichert. Lag an Auto increment, hätte ich mir denken können...


    Zitat von Jeffry

    Server-Start

    Du meinst Login oder?


    Wenn Passwort richtig ist, ist nicht bei OnPlayerConnect da man dann auch Sachen ausnutzen könnten im späteren System, sollte nach der Anmeldung passieren.

    Code
    mysql_format(db, query, sizeof(query), "SELECT * FROM personalcars WHERE P_uID = '%d'", pInfo[playerid][db_id]);
    		mysql_pquery(db, query, "LoadPlayerCars", "d", playerid);

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • P_VID kann ich dann auch aus der Datenbank raus nehmen

    Ja, das kannst du jetzt machen.



    Du meinst Login oder?

    Ah, ja! Das meinte ich.


    Also, das SELECT Query passt.
    Du musst nur darauf achten, dass du dies nach dem Auslesen der db_id des Spielers ausführst, sonst steht dort ja noch kein Wert drin.


    Zum Callback:
    Das sieht auch gut aus. Füge dort aber noch folgende zwei Zeilen mit dazu ein:
    cache_get_value_name_int(i,"P_uID",PCar[playerid][i][P_uID]);
    cache_get_value_name_int(i,"dbID",PCar[playerid][i][dbID]);
    Wenn das Fahrzeug geladen wird, muss auch die Verbindung zwischen Eintrag in der Datenbank (dbID) und dem Besitzer (uID) wieder hergestellt werden.



    Teste anschließend, ob ein von dir erstelltes Fahrzeug nach dem Login korrekt geladen wird.
    Folgende Schritte:
    Erstelle ein Fahrzeug.
    Verlasse den Server.
    Starte den Server neu (wichtig, da wir das Löschen erst später machen).
    Logge dich ein.
    Prüfe ob das Fahrzeug korrekt da ist.


    Ist das Fahrzeug korrekt da?
    Wenn ja, poste bitte den Code, der beim OnPlayerDisconnect die Fahrzeuge aus dem Server entfernen (und speichern?) soll.
    Wenn nein, erkläre bitte das Problem.

  • Fahrzeug spawnt nur irgendwie ist die zrotation falsch die geht nämlich - oder + 90°
    Hat das was mit dem Dezimalwert in der Datenbank zu tun der ist auf 4 gestellt


    Also gespawnt ist es normal nach dem Kauf nach dem Login aber Abweichungen von 90°



    irgendwas hiermit zutun? Weil davor geht ja alles

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Du hast die Anpassung im Code LoadPlayerCars noch nicht gemacht. Mache das, das ist unbedingt notwendig.
    Wenn wir das jetzt schon Schritt für Schritt machen, musst du auch alles machen, sonst geht es am Ende erst nicht, und keiner weiß warum.



    Zur Rotation:
    Erstelle ein neues Fahrzeug und prüfe anschließend direkt den Wert der Rotation in der Datenbank. Verlasse dann den Server und prüfe die Rotation erneut. Hat sie sich verändert?

  • Ich hab sie gemacht, hab den jetzigen Code nur davor rein geschickt das war nicht so schlau.
    Ich kam gestern erst um 21:30 nach Hause, war kaputt deswegen erst mal sorry.


    Hab mich mal jetzt wirklich mal bisschen dran gesetzt und habe den Fehler gefunden, dazu habe ich selber hinbekommen, dass das Fahrzeug entfernt wird.
    Parken funktioniert dementsprechend auch :)


    Code
    new vehicleid=GetPlayerVehicleID(playerid);
        vehData[vehicleid][e_fuel] = 20;


    So gebe ich ja einem Fahrzeug 20 Liter.
    Wie gebe ich dem Fahrzeug seine Liter und wie speicher ich das, und wie lade ich das?
    Dazu noch wie gebe ich nach dem Kauf dann auch diesem Fahrzeug den vollen Tank?







    So wird geladen


    jetzt müssen wir nur noch ein neuen Public erstellen für SavePlayerCars
    Hier wird aber nur der Tank gespeichert, später dann auch Kilometerstand, Ölstand usw.



    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Beim Laden - nach CreateVehicle (wichtig):
    cache_get_value_name_int(i,"P_fuel",vehData[PCar[playerid][i][P_VID]][e_fuel]);



    jetzt müssen wir nur noch ein neuen Public erstellen für SavePlayerCars

    forward SavePlayerCars(playerid);
    public SavePlayerCars(playerid)
    {
    new query[512];
    for(new i = 0; i < sizeof(PCar[]); i++)
    {
    if(PCar[playerid][i][P_MID] == 0) continue;
    mysql_format(handle, query, sizeof(query), "UPDATE playercars SET P_fuel = '%d' WHERE P_dbID = '%d'", vehData[PCar[playerid][i][P_VID]][e_fuel], PCar[playerid][i][P_dbID]);
    mysql_pquery(handle, query);
    }
    return 1;
    }
    Weiter würde es dann so aussehen:
    forward SavePlayerCars(playerid);
    public SavePlayerCars(playerid)
    {
    new query[512];
    for(new i = 0; i < sizeof(PCar[]); i++)
    {
    if(PCar[playerid][i][P_MID] == 0) continue;
    mysql_format(handle, query, sizeof(query), "UPDATE playercars SET P_fuel = '%d', P_kilometer = '%d', P_oel = '%d' WHERE P_dbID = '%d'", vehData[PCar[playerid][i][P_VID]][e_fuel], variable_fuer_km, variable_fuer_oel, PCar[playerid][i][P_dbID]);
    mysql_pquery(handle, query);
    }
    return 1;
    }


    Ändere %d zu %f, falls die Fuel-Variable ein Float ist.

  • Klappt! Habe die UPDATE auch den richtigen Variablen angepasst,


    Was ich jetzt machen will, dass ich mehrere Fahrzeuge besitzen kann und ein Auto dann irgendwie die Variable [tt][P_Current/tt] bekommt.
    Das bringt das Fahrzeug dazu, dass ich mit dem Befehl Beispiel: /autoauf genau das jetzige Fahrzeug aufschließe. Das ganze kann man dann über ein Dialog auswählen.
    Später kann man auch das Fahrzeug parken wenn man den richtigen "Schlüssel" ausgewählt hat.


    Wie soll ich anfangen?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Ich beschreibe es dir mal in Stichpunkten, schaue ob du damit einen Code zusammen bekommst:

    • Schleife durch die Fahrzeuge des Spielers (wie beim Speichern)
    • Existentes Fahrzeug in String aufnehmen, pro Zeile (\n) eines
    • Dialog anzeigen
    • Bei Dialog-Klick: Nochmal Schleife durch die Fahrzeuge und counter so lange hochzählen lassen, bis identisch zu listitem (das listitem kann unter Umständen falsch sein, wenn in der Mitte ein Fahrzeug nicht existiert).
    • Den index aus der Schleife in P_Current setzen.


    Versuche, ob du das so umsetzen kannst. Den Code, bis dahin wo du ihn hast, falls es nicht vollständig klappt, kannst du dann natürlich posten.