Beiträge von Jeffry

    Den gleichen Code brauchst du natürlich nicht posten, das macht ja keinen Sinn.


    Dass es nicht geht ist mir auch klar, allerdings wäre eine Information hilfreich, wie zum Beispiel, der Code wird überhaupt aufgerufen, es gibt Fehler im Log, etc. Setze doch mal ein paar prints und prüfe ob diese überhaupt aufgerufen werden. Prüfe auch, ob dir crashdetect irgendwelche Fehler ausgibt.


    Danach postest du den Code mit den prints und den Server Log, mit den Ausgaben der prints. Oder du siehst den Fehler schon selbst.

    Ja, das passt so.


    Nein, das sind unterschiedliche Werte, die darfst du nicht gegeneinander überschreiben.


    Nochmal:
    Die dbCarID ist die carid aus der Datenbank, die muss doch aber nicht gleich mit der vehicleid (VCarID) sein, die CreateVehicle zurück gibt. Das sind zwei völlig verschiedene Dinge. Somit musst du auch beides separat behandeln.


    Angenommen die carid im Datensatz ist 3, und du lädst dieses Fahrzeug jetzt, dann wird die 3 in dbCarID geschrieben. Anschließend wird das Fahrzeug mit CreateVehicle erstellt. Wenn du auf deinem Server davor schon 10 Fahrzeuge erstellt hast, dann erhält dies die vehicleid 11, damit ist dbCarID 3 und VCarID 11.

    Was funktioniert nicht?


    Was weißt du nicht, wie du es machen sollst?




    Mehr Informationen, wie jedes Mal. Warum muss ich dir das jedes Mal aufs neue sagen? Mit "Funktioniert nicht" fange ich genau so viel an, wie du, wenn ich dir darauf "Ok" antworte, nämlich gar nichts.

    Nein, die vehicleid musst du nicht speichern, die brauchst du ja nur zur Laufzeit im Array. In der Datenbank bringt die dir nichts, die ist ja nach dem Neustart wieder anders, die kommt ja immer aus CreateVehicle zurück.

    dbCarID = Zugriff auf den Datensatz
    VCarID = Zugriff auf die vehicleid


    Ja, du brauchst beides. Deine Abfragen können so bleiben.


    dbCarID musst du aus der Datenbank lesen, VCarID erhälst du aus CreateVehicle.

    if(dialogid == DIALOG_FAHRZEUG2)
    {
    if(response)
    {
    switch(listitem)
    {
    case 0: //Eigene Fahrzeugschlüssel
    {
    new string[300], name;
    for(new i = 0; i < sizeof(PCar[]); i++)
    {
    name = PCar[playerid][i][P_MID] - 400;
    if(name < 0 || name >= sizeof(carNames)) format(string,sizeof(string),"%s{FFFFFF}<Leer>\t<Leer>\n", string);
    else format(string,sizeof(string),"%s{FFFFFF}%s\tSF-1337\n", string, carNames[name]);
    }
    ShowPlayerDialog(playerid, DIALOG_FAHRZEUG3, DIALOG_STYLE_LIST, "{FFFFFF}schlüssel\tNummernschild\tAusgewählt", string, "Auswählen","Zurück");
    }
    case 1: //Andere Fahrzeugschlüssel
    {


    }
    }
    }
    else
    {
    //Wenn er wieder zurück ins Hautpmenü will
    }
    return 1;
    }
    Versuche es so.


    Was verstehst du an Punkt 4 nicht?

    1.
    if(!strcmp(cInfo[i][besitzer], name, false)) continue;
    zu:
    if(strcmp(cInfo[i][besitzer], name, false)) continue;


    2.
    Deine VCarID nutzt du doppelt, das ist falsch.
    Einmal nutzt du diese als Wert für die carid in der Datenbank und einmal für die vehicleid, die CreateVehicle zurück gibt.
    Teile das auf. Der Wert aus CreateVehicle (beim Erstellen und Laden) muss in eine andere Variable, als das was carid aus der Datenbank zurück gibt.


    Außerdem musst du die carid bei OnVehicleCreated auch in das Array weg speichern, sonst bringt es nichts.


    Sprich, du brauchst im Array einmal ein "dbCarID" und einmal dein "VCarID".
    VCarID nutzt du für alles was CreateVehicle, GetVehiclePos etc ist, und dbCarID nutzt du in den MySQL Funktionen, z.B. beim WHERE Statement. Damit greifst du auf den Datensatz des Fahrzeugs zu.

    Ich habe in meinem Enum für cInfo bei kmstand ein Float: vor geschrieben. Nun lasse ich die Werte auch als Float in die Datenbank speichern und nun funktioniert auch das Addieren.

    Ok, gut dass du es selbst lösen konntest! Meine Annahme, dass es ein Integer ist, war falsch, sorry dafür. Das ist allerdings in der Include auch schlecht bzw. falsch gemacht, denn die Variable ist ein Integer, die Funktion wird ebenfalls im native als Integer angegeben, im Makro allerdings wird der Wert *0.001 genommen, was es ein Float macht.


    Am besten du schreibst der Vollständigkeit halber in der Include, bei den natives (im Kommentar ganz oben) GetKilometers und GetMiles noch "Float:" davor. Dann ist es klar.


    Dass in der Include aber aus einem Float erst ein Integer gemacht wird, und anschließend wieder in ein Float umgewandelt wird, ist ungeschickt. Funktioniert zwar, ist aber nicht schön (kannst du aber natürlich nichts dafür).

    Wie gesagt, alles was nach dem mysql_pquery kommt, muss in das Callback, heißt auch die Prüfung ob eine Versicherung existiert oder nicht. Die Werte werden erst im Callback geladen, diese stehen direkt nach mysql_pquery noch nicht zur Verfügung, deshalb wird dir immer gesagt, dass du keine Versicherung hast.


    Also: Alles aus obigem Code, was nach mysql_pquery steht, muss ins Callback.

    Alles was nach dem mysql_pquery bezüglich der Versicherung kommt, muss in das Callback OnHouseLoad.
    Erst dort hast du die Werte aus der Datenbank zur Verfügung.

    Float wert

    Die Include arbeitet nicht mit Floats, nur mit ganzen Zahlen.
    Lass dir mal mit %i den Wert von GetKilometers direkt printen.


    Was mir noch aufgefallen ist: Ich sitze im Spiel im Fahrzeug mit der ID: 5 ... Ich lasse ja cInfo[vID][id_x] printen und vID ... cInfo[vID][id_x] gibt in der Konsole eine 5 aus ... vID jedoch gibt eine 3 aus... Woran liegt das ?

    Das ist richtig so. Dein vID ist in dem Fall ja der Index, mit dem auf cInfo zugegriffen wird, um auf die richtige vehicleid zu kommen.

    mysql_format(handle, query, sizeof(query), "SELECT * FROM Houses WHERE owner = '%e'", SpielerName(playerid));
    mysql_pquery(handle, query, "OnHouseLoad", "d", playerid);


    In OnHouseLoad kannst du dann alles für das Haus des Spielers abarbeiten.
    Sprich:
    cache_get_value_name_int(0, "shopid", OwnedShop[playerid]);
    cache_get_value_name_int(0, "insuranced", ShopInfo[OwnedShop[playerid]][insuranced]);
    cache_get_value_name_int(0, "insurancetime", bisversichert);
    (oder anstatt der 0 eine Schleife mit "i", allerdings habe ich es so verstanden, dass der Spieler nur ein Haus haben kann, daher reicht 0, die erste Zeile des Results.)