Fahrzeuge speichern

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
  • Hey Leute,
    ich arbeite momentan an einem System, dass wenn ich ein Auto Spawne, dieses dann auch speichert.


    Das Problem:
    Meine Schleife ergibt keinen Sinn und ich hab ka wie ich das lösen soll.
    Meine Idee war, ich lasse die Schleife zählen, biss er die FahrzeugID erreicht hat, die zuletzt existiert (x) und als neue ID dann quasi x+1 einträgt.


    Für mich klingt meine Schleife nun aber so, dass er nicht nur i erhöht, sondern auch das Ziehl, die Fahrzeugdatei einfach +1 setzt und ich mich in ner Endlosschleife befinde :x


    for(new i=0; i < !dini_Exists(fahrzeugdatei); i++)
    {
    carid++;
    format(fahrzeugdatei, sizeof(fahrzeugdatei), "/Cars/%i.ini", carid);
    }

  • for(new i; i != MAX_VEHICLES; ++i){
    format(fahrzeugdatei, sizeof(fahrzeugdatei), "/Cars/%i.ini", i);
    if(dini_Exists(fahrzeugdatei))continue;

    printf("Freier Slot id %d",i);
    return 1;


    }


    Dein Code funktioniert so nicht der müsste eigentlich sofort abbrechen aufgrund des < Operators. dini_Exists gibt 0 beziehungsweise 1 zurück.
    1 fürexistiert schon und 0 für existiert nicht.


    carid benötigst du nicht extra für was hast du deine schleife.
    ich hab dir mal oben die schleife richtig gestellt MAX_VEHICLES ist das Limit für die Fahrzeuge die du erstellen kannst.
    sollte die datei existieren so wird mit continue direkt der nächste durchlauf eingeleitet anstatt den Anweisungsblock weiter durchzugehen.
    Sollte der wert nicht existieren wird dir die id ausgegeben in der Serverlog und die funktion mit dem return 1; abgebrochen an dem Punkt.

  • Danke für die Hilfe, ich hab das ganze aber nun etwas anders gelöst.
    Hab mir von nem Programmierer helfen lassen, der mit PAWN eig nix zu tun hat und auch nicht kennt :D


    for(new i=0; dini_Exists(fahrzeugdatei); i++)
    {
    format(fahrzeugdatei, sizeof(fahrzeugdatei), "/Cars/%i.ini", i);
    i=carid;
    }
    Ich lasse also das i meine FahrzeugID sein und geb die dann später einfach an die Variable weiter, die ich ohnehin zum Fahrzeug speichern nutze, um nicht meinen ganzen Code umschreiben zu müssen...
    Funktioniert wie von mir erwünscht.


    Dennoch danke für die Hilfe, weiß ich zu schätzen. Ich merk mir die Tipps und Erklärungen dann besser auch mal :)


    edit: Und im Nachhinein bemerke ich: Ich nutze deine Funktion in kürzer D: :D


  • Ja klar deine funktion kannst du auch nutzen nur solltest du halt schauen das du nicht über 2000 Fahrzeuge kommst :D weil mehr kannst du ohne einen streamer nicht erstellen

  • Ja klar deine funktion kannst du auch nutzen nur solltest du halt schauen das du nicht über 2000 Fahrzeuge kommst :D weil mehr kannst du ohne einen streamer nicht erstellen


    Ach sollte ich das Script letzendlich jemals online bekommen bekomm ich eh nicht genug Spieler um auf 2k Fahrzeuge zu kommen ^^
    Und wenn kann ich die Autos ja immer noch mit Streamer spawnen/despawnen lassen oder so.


    Edit...
    Ok ich war etwas zu vorfreudig. Also ich kann nun lustigerweise 2 Fahrzeuge spawnen lassen. Noch lustiger ist, dass diese nicht die von mir gewählte Farbe bekommen, sondern immer so ein komisch Flieder...
    Ich hab mir mal das ganze Protokollieren lassen. Der beginnt beim 3. Auto ne Schleife die er nie beendet: i=0 sagt er mir endlos an...


    for(new i=0; dini_Exists(fahrzeugdatei); i++)
    {
    format(fahrzeugdatei, sizeof(fahrzeugdatei), "/Cars/%i.ini", i);
    i=carid;
    printf("Zählvorgang: %i",i);
    }
    Und noch einmal die Stelle mit dem Fahrzeug, vllt erkennt ihr, wieso er diese fliederfarbe verteilt:
    if(sscanf(params, "uiii", user, vehid, color, color2)) return SendClientMessage(playerid, rot, "Richtige Anwendung: /addveh [Besitzer] [Fahrzeug] [Farbe] [Farbe]");
    CreateVehicle(vehid, xx, yy, zz, rr, color, color2, 0);
    Die getesteten Farben waren: 0, 33, 54, 77


    edit2: Oberer Fehler gefunden: i=carid; war falsch, ich musste es umdrehen... ich hab in der Schleife einfach i auf 0 zurückgesetzt und somit die Schleife auf den Punkt davor gebracht, und zwar, dass er wieder bei i=0 zählt...


    Aber die Sache mit der Fahrzeugfarbe irritiert mich trotzdem sehr muss ich sagen. 0 = schwarz, nicht Flieder.
    Edit3: Die Gespeicherten Daten geben an, dass er 10 und 11 als color und color2 speichert. Aber die Farben hab ich nicht einmal angegeben :/


  • #include dini
    new Datei[128];



    ocmd:veh(playerid,params[])
    {
    new vehid,color1,color2,Float:X,Float:Y,Float:Z,Float:A,Float:a,name[24];
    GetPlayerName(playerid,name,24);
    if(sscanf(params,"iii",vehid,color1,color2))return SendClientMessage(playerid,-1,"Benutzung : /veh [vehicleid] [Farbe1] [Farbe2]");
    carid++;
    format(Datei,128,"/Cars/%i.ini",carid);
    dini_Create(Datei);
    GetPlayerPos(playerid,X,Y,Z);
    CreateVehicle(vehid,X,Y,Z,GetPlayerFacingAngle(playerid,A),color1,color2,-1);
    a=GetPlayerFacingAngle(playerid,A);
    dini_Int(Datei,"CreateBy",name);
    dini_Int(Datei,"Fahrzeugid",carid);
    dini_FloatSet(Datei,"X",X);
    dini_FloatSet(Datei,"Y",Y);
    dini_FloatSet(Datei,"Z",Z);
    dini_FloatSet(Datei,"A",A);
    return 1;
    }


    public OnGameModeInit()
    {
    format(Datei,128,"/Cars/%i.ini",carid);
    CreateVehicle(dini_Int(Datei,"Fahrzeugid"),dini_Float(Datei,"X"),dini_Float(Dateim"Y"),dini_Float(Datei,"Z"),dini_Float(Datei,"A"),15+random(43),19+random(55),-1);
    return 1;
    }