Auto abspeichern Problem

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
  • Hallo,


    Ich hab ein kleines Problem. Ich hab einen Befehl geschrieben mitdem man die Position eines Autos abspeichert und dann beim Serverstart die Datei lädt. Läuft alles per Dini. Aufjedenfall hab ich ein Problem. Und zwar wenn ich z. B. ein Turismo die Position abspeichere, und dann nochmal einen Turismo nehme und wieder die Position abspeichere überschreibt er die Datei des alten Turismos. Ich weiß nicht wie ich das beheben kann.


    Hier der Befehl:


    ocmd:sveh(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,3))return 1;
    new Autodatei[64];
    new Float:x,Float:y,Float:z,Float:rotation;
    new vehicle=GetPlayerVehicleID(playerid);
    new vehicleid=GetVehicleModel(vehicle);
    GetPlayerPos(playerid,x,y,z);
    GetVehicleZAngle(vehicle,rotation);
    format(Autodatei,sizeof(Autodatei),"/Autos/%d.dat",vehicleid);
    if(dini_Exists(Autodatei))
    {
    dini_IntSet(Autodatei,"Modelid",vehicleid);
    dini_FloatSet(Autodatei,"x_pos",x);
    dini_FloatSet(Autodatei,"y_pos",y);
    dini_FloatSet(Autodatei,"z_pos",z);
    dini_FloatSet(Autodatei,"Rotation",rotation);
    }
    else
    {
    dini_Create(Autodatei);
    dini_IntSet(Autodatei,"Modelid",vehicleid);
    dini_FloatSet(Autodatei,"x_pos",x);
    dini_FloatSet(Autodatei,"y_pos",y);
    dini_FloatSet(Autodatei,"z_pos",z);
    dini_FloatSet(Autodatei,"Rotation",rotation);
    }
    SendClientMessage(playerid,-1,"Auto erfolgreich gespeichert");
    return 1;
    }
    Stock:
    stock AutoLaden()
    {
    new Autodatei[64];
    for(new i=0;i<612;i++)
    {
    new Float:X, Float:Y, Float:Z,Float:R;
    format(Autodatei,sizeof(Autodatei),"/Autos/%d.dat",i);
    dini_Int(Autodatei,"Modelid");
    X=dini_Float(Autodatei,"x_pos");
    Y=dini_Float(Autodatei,"y_pos");
    Z=dini_Float(Autodatei,"z_pos");
    R=dini_Float(Autodatei,"Rotation");
    CreateVehicle(i,X,Y,Z,R,-1,-1,-1);
    }
    return 1;
    }

  • Also ich kann dir aufjedenfall sagen warum der Turismo überschrieben wird aber eine nunja effektive Lösung fällt mir nicht ein^^


    schau dir mal den Code an
    new vehicle=GetPlayerVehicleID(playerid);
    new vehicleid=GetVehicleModel(vehicle);
    GetPlayerPos(playerid,x,y,z);
    GetVehicleZAngle(vehicle,rotation);
    format(Autodatei,sizeof(Autodatei),"/Autos/%d.dat",vehicleid);
    if(dini_Exists(Autodatei))
    {
    dini_IntSet(Autodatei,"Modelid",vehicleid);
    dini_FloatSet(Autodatei,"x_pos",x);
    dini_FloatSet(Autodatei,"y_pos",y);
    dini_FloatSet(Autodatei,"z_pos",z);
    dini_FloatSet(Autodatei,"Rotation",rotation);
    }
    Du bekommst damit die die ModelID des Autos das du speicherst heraus und ein Turismo hat immer die gleiche ModelID
    nämlich die 451.
    Diese ID speicherst du in den formatierten Pfad und da ist das Problem es besteht ja schon ein Turismo
    Und mit der Abfrage danach(if(dini_Exists(...))) also wenn die Datei existiert wird sie überschrieben


    Ich hoffe ich habs nicht zu umständlich erklärt :D


    Asl Lösung würde mir höchstens einfallen, dass in den Ordner nicht die ModelID speichern lässt sondern z.B den Namen
    des Spielers der diesen Command ausführt aber dann könnte auch jeder nur ein Auto haben^^