Autos in Dini Datei abspeichern & laden lassen

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
  • Edit: Es klappt, für alle anderen Leute hier ein kleines erklärer Tutorial
    Edit2: Schaut erst das Tutorial an eh ihr weiter macht:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
    (darauf basiert das kleine Mini TuT hier)


    Vorwort
    Ich erstelle dies hier aus 2 Gründen.
    1. für Leute die mit der MySQL Datenbank nicht zurecht kommen (so wie ich)
    2. um anderen Leuten zu helfen, die das selbe woll(t)en wie ich.


    .ini (.txt) erstellen
    Mit kleinen Grundkentnissen kann man das ganze schon anfangen zu starten. Sobald man den Stock Register gesehen hat, weiß man auch wie das mit einer anderen .txt datei funktioniert. Nungut. Geht zu OnDialogResponse und schaut wo steht "dialogid == AUTOHAUS" Habt ihr gefunden? Okay! Schaut nun wo ihr eine Message an den Playerid gesendet habt die so heißen könnte: "Herzlichen Glückwunsch du hast ein neues Auto!"
    Auch gefunden? Denn dahin muss nun das was wir einfügen!



    Als erstes müssen wir 2 neue Variablen deklarieren
    new ASpieler[64];
    new ASname[MAX_PLAYER_NAME];

    Wenn ich ehrlich sein soll, weiß ich nicht wofür das "Spieler" bzw in dem Fall "ASpieler" stehen soll, ich denke das ist die Länge des Maximalen Namens.
    ASName steht für die Anzahl aller Namen. *berichtigt mich wenn ich was Falsches schreibe*


    Die nächsten 3 Zeilen sollten sich relativ selbst erklären
    GetPlayerName(playerid,ASname,sizeof(ASname));
    format(ASpieler,sizeof(ASpieler),"/Autos/Autos_von_%s.txt",ASname); //%s = Name
    dini_Create(ASpieler);
    GetPlayerName - findet den Namen der playerid heraus und speichert den Namen in die Variable "ASname"
    format(ASpieler........) - erstellt eine .txt Datei die heißt "Autos_von_%s" dabei ist %s der Spielername den man InGame Sieht
    dini_Create(ASpieler); - hier wird aus den gegebenen Informationen nun die .txt erstellt


    Das ist aber noch längst nicht alles! Wir müssen auch bestimmte Werte in der .txt eintragen lassen!
    new vID = GetPlayerVehicleID(playerid); // bekommt die VehicleID raus (NICHT die ModelID!)
    new gVM = GetVehicleModel(vID); //hier wird die ModelID herausbekommen (z.B. 550 - Sultan)
    new Float:pc_x; // Float Variable
    new Float:pc_y; // Float Variable
    new Float:pc_z; // Float Variable - eine Float Variable kann negative, positive und Komma Zahlen speichern (pc steht für private car)
    GetVehiclePos(vID,pc_x,pc_y,pc_z); // hier wird die VehiclePos rausbekommen und in allen Variablen gespeichert
    dini_IntSet(ASpieler,"FahrzeugID",gVM); //FahrzeugID wird abgespeichert "INT" - Integer - Rundezahlen
    dini_FloatSet(ASpieler,"SpawnX",pc_x); // X Koordinate - Float weil eine Float Variable negative, positive und Komma Zahlen speichern kann
    dini_FloatSet(ASpieler,"SpawnY",pc_y); // Y Koordinate
    dini_FloatSet(ASpieler,"SpawnZ",pc_z); // Z Koordinate - dies wird alles in der .txt abgespeichert sein


    Alle wichtigen Sachen sind nun als Kommentar dazu geschrieben worden.



    Nun muss aber noch das Auto geladen werden!
    Dies tun wir bei "OnPlayerConnect" und fügt folgenden Code ein (wichtiges ist in Klammern geschrieben):

    new ASpieler[64];
    new ASname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,ASname,sizeof(ASname));
    format(ASpieler,sizeof(ASpieler),"/Autos/Autos_von_%s.txt",ASname); //%s = Name
    if(dini_Exists(ASpieler)) //wenn die Datei existiert dann soll das ausgeführt werden
    {
    new modelid = dini_Int(ASpieler,"FahrzeugID"); //eine neue Variable namens "modelid" wird festgelegt, diese zieht sich ihren Wert aus der FahrzeugID (dini_Int - benutzt man für Integer Zahlen)
    new Float:x = Float:dini_Float(ASpieler,"SpawnX"); //eine neue Variable namens "Float:x" wird festgelegt, hier allerdings muss man Float:dini_Float schreiben, ansonsten kommt es zu Warnings oder es geht ganz einfach nicht da die X-Y-Z Werte keine Integer Werte sind!
    new Float:y = Float:dini_Float(ASpieler,"SpawnY");
    new Float:z = Float:dini_Float(ASpieler,"SpawnZ");
    CreateVehicle(modelid,x,y,z,0.0,-1,-1,0,0); //ein Auto wird erstellt
    SendClientMessage(playerid,gelb,"Auto wurde geladen!"); //eine Nachricht wird ausgegeben
    }


    Und unter OnPlayerDisconnect kann man das Fahrzeug zerstören (allerdings weiß ich nicht ob das wirklich geschieht)
    new ASpieler[64];
    new ASname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,ASname,sizeof(ASname));
    format(ASpieler,sizeof(ASpieler),"/Autos/Autos_von_%s.txt",ASname); //%s = Name
    if(dini_Exists(ASpieler)
    {
    new modelid = dini_Int(ASpieler,"FahrzeugID");
    new Float:x = Float:dini_Float(ASpieler,"SpawnX");
    new Float:y = Float:dini_Float(ASpieler,"SpawnY");
    new Float:z = Float:dini_Float(ASpieler,"SpawnZ");
    new vID = CreateVehicle(modelid,x,y,z,0.0,-1,-1,0,0); //das habe ich hingeschrieben weil ich denke das bei CreateVehicle ein Wert ausgegeben wird, dieser soll in die Variable vID gespeichert werden
    DestroyVehicle(vID); // das Auto wird zerstört print("Auto wurde ERFOLGREICH zerstört!"); //eine Nachricht in der Konsole wird ausgegeben
    }


    Ich hoffe ich konnte euch helfen! :)