.ini mit dini_Remove löschen??

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 habe jetzt unter OnPlayerDisconect einen Befehl, um Score und Geld zu speichern:




    new name[100];
    new form[100];
    GetPlayerName(playerid,name,sizeof name);
    format(form,sizeof form,"%s.ini",name); // Eine Variable für den Namen
    if(!dini_Exists(form))
    {
    dini_Create(form);
    }
    dini_IntSet(form,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(form,"Punkte",GetPlayerScore(playerid));
    SetTimer("DINIloeschen",1000*10,0);




    Damit aber nach einer bestimmten Zeit alles zurückgestzt wird, habe ich unten den Timer DINIloeschen eingebaut.


    public DINIloeschen(playerid)
    {
    new name[100];
    new form[100];
    GetPlayerName(playerid,name,sizeof name);
    format(form,sizeof form,"%s.ini",name);
    if(dini_Exists(form))
    {
    dini_Remove(form);
    }


    }


    Allerdings glaube ich selber nicht, dass es so geht, denn es passiert nichts und ob man das über playerid machen kann, geht wahrscheinlich nicht, denn er ist dann schon wieder off.


    Kann mir jemand zeigen, wie man die Datei nach einer bestimmten Zeit gelöscht kriegt? Danke!

  • Leider weiß ich das auch nicht genau,aber werde mir was einfallen lassen ;) .


    Doch:
    SetTimer("DINIloeschen",1000*10,0); muss zu SetTimerEx("DINIloeschen",1000*10,0,"i",playerid); ,da SetTimer für den gesamten Server gilt und Funktionen,die jeden Spieler einzeln betreffen,wie SetPlayerHealth(playerid, health );, dann nur für ID 0 wiedergeben würde; für alle User bräuchtest du eine for-Schleife.Da es aber nur für einen User speziel ist, brauchst du SetTimerEx.


    Edit: Teste mal den Namen in einer Datei zu speichern,nach gewisser Zeit wieder aufzurufen, überprüfen , ob eine dini - datei existiert und dann ggf. löschen...ein Denkansatz.Werde es selbst testen

    Suche Scriptlehrer :rolleyes:

  • Ich habe den Timer


    SetTimerEx("DINIloeschen",1000*10,0,"i",playerid);


    mal unter OnPlayerConnect geschrieben und 10sek nach dem einloggen ist die Datei verschwunden, so wie es soll! Ich denke, dass es an der Playerid liegt, da sie ja nicht mehr da ist, wenn der Spieler off ist und der Timer den Befehl ausführen soll.


    Vielleicht muss man vorher schon, wenn der Spieler offline geht, über die ID den Spieler Namen benutzen, den der Timer auch benutzt. Ich hoffe ihr versteht, was ich meine ^^


    EDIT: Es ist ja logisch, warum es nicht funktioniert


    public DINIloeschen(playerid)
    {
    new name[100];
    new form[100];
    GetPlayerName(playerid,name,sizeof name);
    format(form,sizeof form,"%s.ini",name);
    if(dini_Exists(form))
    {
    dini_Remove(form);
    }
    }


    Denn bei GetPlayerName wird der Name ja neu angefordert, der Spieler ist zu dem Zeitpunkt aber schon nicht mehr da, also bekommt man da keinen Namen. Ich probier schon immer aus, den Namen zu bekommen, wenn der Spieler off geht und ihn dann zu verwenden, aber dann habe ich immer undefierte Sachen drin ... :wacko: weiß jemand wie man sowas macht?

    Einmal editiert, zuletzt von Sim ()

  • Probier mal mit:

    //Unter GetPlayerName bei OnPlayerDisconnect
    SetTimerEx("DINIloesche",1000,0,"s",name);
    //
    forward DINIloesche(name[]);
    //
    public DINIloesche(name[])
    {
    new lol[100];
    format(lol,sizeof lol,"%s.ini",name);
    if(dini_Exists(lol))
    {
    dini_Remove(lol);
    }
    return 1;
    }

    Edit: Getest und geht ;)

    Suche Scriptlehrer :rolleyes:

    Einmal editiert, zuletzt von Kayer ()

  • :thumbup: :D DANKE! Du bist echt mein Held! :thumbup: Endlich läufts so, wie ichs mir gedacht habe! Nur noch ne klitze kleine Frage: :rolleyes: ist es auch möglich, Waffen, Munition und Gesundheit mit DINIs zu speichern?


    EDIT: :( Ich hab gerade einen Haken entdeckt. Ich habe den Timer auf 1Min gestellt und mich mit 2 Spielern eingeloggt, Sim und Pupu. Ich bin zuerst mit Sim off und 15 sek später mit Pupu. Dann eine Minute nach Sim wurde Pupu´s Einstellung gelöscht und danach garkeine mehr.

    Einmal editiert, zuletzt von Sim ()


  • new Flaot: h;
    GetPlayerHealth(playerid,h);
    dini_FloatSet(lol,"Gesundheit",h);


    dini_IntSet(lol,"Handwaffe",GetPlayerWeapon(playerid));
    // => die waffe,die er gezückt hat !


    //für Alle waffen bräuchtest du
    new weapons,ammo;
    GetPlayerWeaponData(playerid, 1, weapons, ammo);
    dini_IntSet(lol,"Waffe1",weapons);
    dini_IntSet(lol,"Ammo1","ammo");




    new weapons2,ammo2;
    GetPlayerWeaponData(playerid,2,weapons2,ammo2);
    dini_IntSet(lol,"Waffe2",weapons2);
    // .......

    Das ginge so bis 12.Dann würdest du alle möglichen (!) Waffen gespeichert haben, doch du kannst auch nur die Slots von den wichtigen nehmen,wie MG´s,MP´s,Pistol´s,Shotgun´s.

    Suche Scriptlehrer :rolleyes:

    Einmal editiert, zuletzt von Kayer ()

  • Danke! Jetzt gibts nur noch das Porblem, dass wenn sich einen ausloggt und der Timer startet und sich dann noch einer ausloggt, wenn der Timer noch läuft, Fehler passieren. Der Timer löscht die Datei, wenn er abläuft, vom den zuletzt ausgeloggten Spieler.


    Ich habe den Timer auf 1Min gestellt und mich mit 2 Spielern eingeloggt, Sim und Pupu. Ich bin zuerst mit Sim off und 15 sek später mit Pupu. Dann eine Minute nach Sim wurde Pupu´s Einstellung gelöscht und danach garkeine mehr.