Dateiensystem dini - Dateien erstellen, löschen, speichern, laden

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
  • Allerdings sollte man lieber djson nutzen, da es mit SQL cahced.
    Man kann soviel an seinem Code optimieren wie man will, aber Dateizugriffe sind das langsamste was es gibt.
    Meist reicht es schon, wenn man nur selten das Dateisystem bemüht, um sein Script um bis zu 70% schneller zu machen.
    Der andere Optimierkram ist eher nebensächlich. (Den unterschied wird kein User merken)

  • trotz des fexist funktioniert es immernoch nicht.
    Habe keine Veränderung vorgenommen. die passenden includes hab ich auch. komisch
    So hier mal mein komplettes gescriptetes
    public OnPlayerConnect(playerid)
    {
    new Cname[MAX_PLAYER_NAME], string[56];



    SendClientMessage(playerid, Orange, "~~Willkommen auf meinem Server~~");
    GetPlayerName(playerid,Cname,16);
    new filename[56];
    format(filename, sizeof(filename), "%s.ini", Cname);


    if(dini_Exists(filename)) //existierender Spieler
    {
    format(string, sizeof(string), "Hallo %s!Willkommen zurück!", Cname);
    SendClientMessage(playerid, gruen, string);



    new loginmoney = dini_Int(filename, "Geld");


    GivePlayerMoney(playerid,loginmoney);
    }


    else //Neuer Spieler
    {
    format(string, sizeof(string), "Hallo %s!Du scheinst neu zu sein!", Cname);
    SendClientMessage(playerid, falschrot, string);


    format(string, sizeof(string), "%s.ini", Cname);
    dini_Create(string);
    dini_Set(string,"Geld", "0");
    GivePlayerMoney(playerid,1500);


    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    new Spielername[MAX_PLAYER_NAME], string[56];
    new Geld = GetPlayerMoney(playerid);


    format(string, sizeof(string), "%s.ini", Spielername);
    if(!fexist(string))dini_Create(string);
    dini_IntSet( string, "Geld", Geld);
    return 1;
    }


    Nebenbei:
    Ich würde mich sehr freuen, wenn jemand ein ausführliches Tutorial für Parameter ohne dcmd hcanf oder wie die ganzen includes auch alle heißen. Ich komm mit dem Tut über dcmd nicht klar und möchte erstmal probieren(und ich denke ich spreche auch für viele andere Neueinsteiger) mich mit der normalen Version zurecht zu finden. Besonders schwer fällt mir das verstehen von dem Scripten der Cmds mit 2 Parametern. Wäre super, wenn mir da jemand hilft.
    Aber das ist auch nur nebensache. Das obere ist für mich erstmal wichtiger :)

    2 Mal editiert, zuletzt von strothy ()

  • Ich bin mir nicht sicher ob es funktioniert und ich habs auch nicht getestet aber vielleicht gehts ja:
    public OnPlayerDisconnect(playerid, reason)
    {
    new Spielername[MAX_PLAYER_NAME], string[56];
    new Geld = GetPlayerMoney(playerid);


    GetPlayerName(playerid,Spieldername,sizeof(Spielername));


    format(string,sizeof(string),"/%s.ini",Spielername);


    if(!dini_Exists(string))
    {
    dini_Create(string);
    dini_Set(string, "Geld", Geld);
    }
    else
    {
    dini_Set(string, "Geld", Geld);
    }
    return 1;
    }

  • Hallo,
    wie kann ich es einstellen, dass der Wert sich beispielsweise durch einen Timer erhöht?
    Also dass ein Timer nach einer bestimmten Zeit ein Public aufruft, welches
    dini_IntSet(save, "Zeit", +1);
    bewirkt. Mit dem +1 bekomme ich ein Error, wie erstelle ich es richtig?


    Mit freundlichen Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • new gTemp = dini_Int(save, "Zeit");
    gTemp ++;
    dini_IntSet(save, "Zeit", gTemp);

  • Sprich bei dini kann ich irgendein Wert in einer Datei abfragen ohne eine While schleife?


    Man kann auch irgendein ein Wert einfach ersetzen mit einem anderen ohne die anderen nochmals abspeichern zu lassen?


    Ich meine wenn man bsp ein Wert nur ändern wollte bei F-Dateisystem musste man ja komplett alles abfragen und dann erneut draufspielen um ein Wert bsp zu ändern, bzw halt alles neu draufspeichern lassen.


    Lieg ich da richtig? Oder ist das genauso hier?

  • So Leute =) hab mal wieder nen Problem ^^


    Ich nutze dcmd und dini. Das compilen funzt, nur speichert er das Passwort nicht. der Rest funktioniert. Muss ich hier sscanf nutzen oder warum geht das nicht^^


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(register,8,cmdtext);
    return 0;
    }


    dcmd_register(playerid,params[]) {
    new filename[20];
    new Spielername[MAX_PLAYER_NAME];


    GetPlayerName(playerid,Spielername,sizeof(Spielername));
    format(filename, sizeof(filename), "%s.ini", Spielername);


    new Registriert = dini_Int(filename, "registriert");


    if(Registriert == 0)
    {
    if(!strlen(params)) {
    return SendClientMessage(playerid,falschrot,"Bitte gib /register [Passwort]ein.");
    }
    new Passwort=strval(params);
    new PWstring[20];
    format(PWstring, sizeof(PWstring), "%s", Passwort);
    dini_Set(filename, "Passwort", PWstring);
    dini_IntSet(filename, "registriert", 1);
    SpawnPlayer(playerid);



    return 1;
    }
    else return 0;
    }


    Würde mich über Hilfe freuen :)

  • Ist es auch möglich einfach nru so etwas in einer Datei zu schreiben ?
    ich würde gerne eine Art notizbuch machen in dem sollte es etwa so aussehen :


    Zitat

    Spieler1: Autos explodieren immer ohne grund (22:01)
    Spieler1: Autos gehen immer noch ohne Grund kaputt -.- (23:45)
    Spieler2: Spieler1 Mobbt mich immer ;(
    Spieler1: ist gar nicht wahr

    und so weiter

  • ja so könnte ich das auch nur ich hätte die Zeit gerne hinten...


    Momentan schaffe ich es so :

    Zitat

    Spieler1=Blablalbalblbalablablabl (22:45)

    wenn spieler1 aber wieder etwas schreibt und ich mit Dini_set es speicher wird das erste überschrieben

  • Also ich habe in meinem Server ein Arbeitsamt => Man muss als Job Busfahrer auswählen um Busse fahren zu können...
    Jetzt möchte ich das folgende Variable auch beim Ausloggen gespeichert wird:


    new busfahrer[MAX_PLAYERS];


    Also 1 für "ist Busfahrer"
    und 0 für "ist kein Busfahrer"


    Könnte mir jemand sagen wie man das speichert... ?(
    Mfg Peter_Party

    Bone Country TDM [Coming in Summer 2010]


    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    Closed Beta

  • Wie kann man machen das die Account Daten zwischendrin und bei einem GMX gespeichert werden?

  • Also meine Variante funktioniert nicht richtig.
    Ich wollte das anstatt "forums" ein immer wechselner betrag da hinkommt. Also wenn man ein befehle benutzt das es gleich aktualisiert wird und der neue Wert eingetragen wird

    dini_Set(filename[], key[], value[])
    Speichert eine String unter key in eine Datei
    dini_Set("/folder/file.ini", "samp", "forums");
    // In "file.ini" im Ordner "folder" stände jetzt:
    // "samp=forums"

  • also ich will ein tüv system machen und will das der einen namen eingeben muss und es dann so geschpeichert wird: LS-der name-01 dann immer +1 dazu
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext,"/tüv",true)==0)
    {


    if(dtc_PlayerCar[CarModel] > 0)
    {
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_LIST,"TÜV","Bitte gebe den Namen für das Kennzeichen ein:","Ok","Abbrechen");
    new name[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(name,sizeof(name),"kennzeichen_%s",name);
    dini_Set("/Autos/.ini", "kennzeichen_%s","text");
    }
    }
    }


    Also er soll es halt in der datei speichern damit er es später laden kann