Variablen verändern ihren Wert ungewollt

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
  • Ich habe nun mein Autosystem fertig, funktionirt super bis auf ein kleiner Fehler zwischen 2 Variablen


    Ich gebe CreateCar mit allen dazugehörigen Parametern ein aber die Variable nextcarID nimmt automatisch den Wert von model an wiso?
    dcmd_createcar(playerid , params[])
    {
    new extraini[50];
    format(extraini,50,"/extra.txt");
    nextcarID = dini_Int(extraini,"GesamtCars");//nextcarID ist gleich 0 soll nach dem erstellen auf 1 erhöht werden jenachdem wie viele Autos es gibt
    new model,color1,color2,nummernschild;// die parameter wobei model automatischt nextcarID ist WISO?
    if(sscanf(params, "dddd", model, color1, color2, nummernschild))//hier wird model z.b. auf 555 gesetzt das auto mit der modelid 555 wird erfolgreich erstellt
    {
    return SendClientMessage(playerid,COLOR_RED, "Nutze: /createcar [model] [color1] [color2] [nummerschild]");
    }
    else
    {
    new Float:x,Float:y,Float:z;
    new Autodatei[50];
    format(Autodatei,50,"/Autos/%s.txt",nextcarID);
    GetPlayerPos(playerid,x,y,z);
    CreateVehicle(model, x, y, z, 0, color1, color2, -1);//funktionirt
    dini_Create(Autodatei);//autodatei wird erstellt es wird alles eingetragen ALLERDINGS hat diese datei keinen namen
    dini_IntSet(Autodatei,"modelid",model);
    [...]//geht alles
    dini_IntSet(Autodatei,"VentRight",GetVehicleComponentInSlot(nextcarID,12));
    dini_IntSet(Autodatei,"VentLeft",GetVehicleComponentInSlot(nextcarID,13));
    SetVehicleNumberPlate(nextcarID,dini_Get(Autodatei,"Nummernschild"));//nummernschild wird nicht gesetzt wiso nicht
    Vehicle[nextcarID][modelid] = dini_Int(Autodatei,"modelid");
    Vehicle[nextcarID][HP] = dini_Int(Autodatei,"HP");
    Vehicle[nextcarID][Farbe1] = dini_Int(Autodatei,"Farbe1");
    Vehicle[nextcarID][Farbe2] = dini_Int(Autodatei,"Farbe2");
    Vehicle[nextcarID][Paintjob] = dini_Int(Autodatei,"Paintjob");
    Vehicle[nextcarID][Nummernschild] = dini_Int(Autodatei,"Nummernschild");
    Vehicle[nextcarID][posx] = dini_Int(Autodatei,"posx");
    Vehicle[nextcarID][posy] = dini_Int(Autodatei,"posy");
    Vehicle[nextcarID][posz] = dini_Int(Autodatei,"posz");
    Vehicle[nextcarID][posa] = dini_Int(Autodatei,"posa");
    Vehicle[nextcarID][Abgeschlossen] = dini_Int(Autodatei,"Abgeschlossen");
    Vehicle[nextcarID][Spoiler] = dini_Int(Autodatei,"Spoiler");
    Vehicle[nextcarID][Wheels] = dini_Int(Autodatei,"Wheels");
    Vehicle[nextcarID][Nitro] = dini_Int(Autodatei,"Nitro");
    Vehicle[nextcarID][Roof] = dini_Int(Autodatei,"Roof");
    Vehicle[nextcarID][Hood] = dini_Int(Autodatei,"Hood");
    Vehicle[nextcarID][Sideskirt] = dini_Int(Autodatei,"Sideskirt");
    Vehicle[nextcarID][Lamps] = dini_Int(Autodatei,"Lamps");
    Vehicle[nextcarID][Exhaust] = dini_Int(Autodatei,"Exhaust");
    Vehicle[nextcarID][Stereo] = dini_Int(Autodatei,"Stereo");
    Vehicle[nextcarID][Hydraulics] = dini_Int(Autodatei,"Hydraulics");
    Vehicle[nextcarID][VentRight] = dini_Int(Autodatei,"VentRight");
    Vehicle[nextcarID][VentLeft] = dini_Int(Autodatei,"VentLeft");
    Vehicle[nextcarID][FrontBumper] = dini_Int(Autodatei,"FrontBumper");
    Vehicle[nextcarID][RearBumper] = dini_Int(Autodatei,"RearBumper");
    nextcarID ++;//nextcarid wird einfach um 1 erhöhr allerdings ist nextcarid == modelid und wird auf 556 erhöht
    dini_IntSet(extraini,"GesamtCars",nextcarID);
    }
    else
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin, du darfst das nicht!");
    return 1;
    }
    meine frage wär nun
    1.Wiso ist nextcarID automatisch die zahl der modelid [ich habe nirgendwo nextcarID = model; stehen]
    2.Wiso wird das nummernschild nicht angezeigt
    3.Wiso wird der name der datei Autodatei nicht eingegeben//EDIT: Das sollte gelöst sein hab statt %d beim erstellen der datei %s geschrieben und nextcarid ist ein Intger
    Das schreckliche einrücken stammt nicht von mir es passirte automatisch

    Einmal editiert, zuletzt von carlos1710 ()

  • 1.Wiso ist nextcarID automatisch die zahl der modelid [ich habe nirgendwo nextcarID = model; stehen]


    Ich denk mal, da bei jedem Start "GesamtCars" erhöht wird, wird es bis ins Unendliche steigen. Musst du beim Scriptneustart auf 0 setzen.


    2.Wiso wird das nummernschild nicht angezeigt

    SetVehicleNumberPlate(nextcarID,dini_Get(Autodatei,"Nummernschild"));//nummernschild wird nicht gesetzt wiso nicht
    Wahrscheinlich ist der String dini_Get(Autodatei,"Nummernschild") leer.


    3.Wiso wird der name der datei Autodatei nicht eingegeben

    format(Autodatei,50,"/Autos/%s.txt",nextcarID);
    nextcarID ist eine Zahl, du verwendest aber %s. Du musst %d nehmen.

    2 Mal editiert, zuletzt von Meta ()

  • das mit der datei hatt ich schon das mim nummernschild auch danke hab gesehen das nummernschild ans intger gespeichert wird aber als string aufgerufen.
    nun nur noch der hauptfehler mit den variablen
    //Edit, das nummernschilf wird immernoch nicht angezeigt der intger ist aber nicht leer es steht wie eingegeben 1234 drinne
    nun wird das auto gespeichert mit dem dateinamen 0 wie gewollt und dannach wird nextcarID irgendwo mit model gleich gesetzt

    Einmal editiert, zuletzt von carlos1710 ()

  • gesamtcars soll aber die zahl der autos + 1 speichern somit geb ich jedem fahrzeig eine eigene id
    in der ini steht das gesamtcar 0 ist, nach dem erstellen eines autos wird diese variable immer erhöht damit es kein überlappen dieser id´s gibt
    und wenn das script unterbricht soll gesamtcars nicht wieder 0 sein darum hab ich die 0 manuell hinein geschrieben

    Einmal editiert, zuletzt von carlos1710 ()

  • Hab das mal gedebugt und mir die Zahl anzeigen lassen, nun weis ich wo nextcarID umgestellt wird, weis aber immernoch nicht wiso.
    printf("8%d", nextcarID);//Zahl stimmt
    SetVehicleNumberPlate(nextcarID,dini_Get(Autodatei,"Nummernschild"));
    printf("9%d", nextcarID);//zahl stimmt
    Vehicle[nextcarID][modelid] = dini_Int(Autodatei,"modelid");
    printf("%d", nextcarID);//Zahl wird auf modelid gesetzt
    Vehicle[nextcarID][HP] = dini_Int(Autodatei,"HP");
    printf("%d", nextcarID);// das bleibt dann bis zum ende, dann wird die Zahl nochmal erhöht von modelid auf modelid +1 und so abgespeichert
    Vehicle[nextcarID][Farbe1] = dini_Int(Autodatei,"Farbe1");
    Vehicle[nextcarID][Farbe2] = dini_Int(Autodatei,"Farbe2");
    Vehicle[nextcarID][Paintjob] = dini_Int(Autodatei,"Paintjob");
    Wiso wird zwischen den Zeilen die Variable verändert?
    //EDIT verbessert

  • Also mir kommts ein bisschen so vor, als wär Vehicle[][] per #define gesetzt. Stimmt das?
    Ist nämlich sehr merkwürdig, das gerade beiVehicle[nextcarID][modelid]wo die beiden "Variablen" newcarID und modelid zusammenstehen sich das ändern soll.


    Ist für mich im Moment das einzige halbwegs logische. Ich denke nicht, dass es am dini System liegt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ich habs mit new definirt
    new Vehicle[][vehicle_daten];
    das feld in der mitte ist leer da ich keine maxcar anzahl festlegen kann da dich die immer erhöhrt wenn ein auto erstellt wird
    ich weis nicht obs am dinisystemligt beim letzten server hatte ich einige probleme weil dini meine daten nicht gespeichert hat obwohl ich die neuste version drinne hab

  • enum vehicle_daten
    {
    modelid,
    Float:HP,
    Nummernschild
    Float:posx,
    Float:posy,
    Float:posz,
    Float:posa,
    Abgeschlossen,
    Farbe1,
    Farbe2,
    Paintjob,
    Spoiler,
    Hood,
    Roof,
    Sideskirt,
    Lamps,
    Nitro,
    Exhaust,
    Wheels,
    Stereo,
    Hydraulics,
    FrontBumper,
    RearBumper,
    VentRight,
    VentLeft
    }
    bitteschön

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen