Tutorial zu easy_ini

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

  • Vorwort:

    • Ich habe mir mal gedacht das wenn man schon mal eine Vereinfachung Für die Speicherung von Accs macht das man die dann auch vorstellen / Erklären muss.

    Die Funktionen:

    • Funktionen bei 0.2
      native PwWrong(file[],Key[],&savepasswort[],passwort[]);//key = Key1
      native ClosePw();
      native ReadFilePw();
      native ..
      native WriteFile(file[]);
      native StopWrite();
      native ReadFile(file[]);
      native StopRead();
      native ..
      native Save(Key[],params);//key = Key2
      native SaveInt(Key[],initger);//key = Key1
      native SaveFloat(Key[],Float);//key = Key1
      native SaveString(Key[],string[]);//key = Key1
      native ..
      native LoadInt(Key[],Int);//key = Key1
      native LoadFloat(Key[],Float);//key = Key1
      native LoadString(Key[],String[]);//key = Key1


      file[] = Fileadresse die man Öffnen will zB: "user/USERNAME.ini"
      Key1 = wie bei dini auch der Key zB: "Geld"
      Key2 = wie bei dem Herkömmlichen GF Speichersystem zB: "Geld=%d\n" oder "Passwort=%s\n" oder "Spawnx=%.1f\n"
      params[] = die variable die man einspeichern will.(aber immer mit der richtigen Key2 verwenden!!)
      &savepasswort[] = die variable in der man das Userpasswort speichern will.
      passwort[] = die variable die der User eingegeben hat um sich Einzuloggen.

    Anwendungsbeispiel:

    • Beispiel Für OnPlayerLogin(playerid,password[]):

      public OnPlayerLogin(playerid,passwort[])
      {
      new file[60];
      format(file,60,"%s.ini",PlayerName(playerid));
      PwWrong(file,"PW",PlayerInfo[playerid][pPasswort],passwort);//Hiermit list man das Passwort, schreibt es in einen String und Überprüft ob es richtig ist.
      {//In diese Klammern kommt dann das rein Was passieren soll wen das Passwort falsch ist.
      Kick(playerid);
      return 1;
      }
      ReadFilePw();//Dies Funktion kann man nur benutzten wenn man vorher PwWrong(); benutzt hat!!!! (man öffnet wie bei ReadFile(file[]); den file.)
      {
      key = ini_GetKey(Data);//<------Wichtig!! (ansonsten wird nichts gelesen.)
      LoadString("PW", PlayerInfo[playerid][pPasswort]);//man läd einen String in PlayerInfo[playerid][pPasswort](kann natürlich beliebig geändert werden!!)
      LoadFloat("Spawnx", PlayerInfo[playerid][pSpawnx]);//man läd eine Float(Kommazahl) in PlayerInfo[playerid][pSpawnx](kann natürlich beliebig geändert werden!!)
      LoadInt("Level", PlayerInfo[playerid][pLevel]);//man läd einen Int(Zahl) in PlayerInfo[playerid][pLevel](kann natürlich beliebig geändert
      }
      StopRead();//schlisst den File wieder!!
      return 1;
      }


    • Beispiel Für OnPlayerRegister(playerid,password[])oder auch PlayerUpdate(playerid):

      public PlayerUpdate(playerid)
      {
      new file[60];
      format(file,60,"%s.ini",PlayerName(playerid));
      WriteFile(file);//Öffnet den File zum reinschreiben!
      {
      SaveString("PW", password);//<------ wichtig bei OnPlayerRegister!
      SaveString("PW", PlayerInfo[playerid][pPasswort]);//Speichert den Variablen String PlayerInfo[playerid][pPasswort] in den File.
      SaveFloat("Spawnx", PlayerInfo[playerid][pSpawnx]);//Speichert die Variable Float PlayerInfo[playerid][pSpawnx] in den File.
      SaveInt("Level", PlayerInfo[playerid][pLevel]);//Speichert die Variable Float PlayerInfo[playerid][pSpawnx] in den File.
      // oder:
      Save("PW=%s\n", PlayerInfo[playerid][pPasswort]);//wichtig bei Save(); ist das der Key mit "=%* \n" geschriben wird!! * = je nach dem welche Variable man einspeichern will.
      Save("Spawnx=%.1f\n", PlayerInfo[playerid][pSpawnx]);
      Save("Level=%d", PlayerInfo[playerid][pLevel]);
      //oder auch mixen ist egal
      }
      StopWrite();//schlisst den File wieder!!
      return 1;
      }



    Bitte beachtet das man nicht OnPlayerUpdate benutzt um Acc's zu Speichern!!
    Hier ein Post dazu: Godfather - onplayerupdate - massiv Performance steigern! unbedingt LESEN !



    easy_ini hat folgende vorteile:

    • easy_ini ist genauso schnell in der Ausführung wie das herkömmliche(GF) Speichern in ini
    • esay_ini ist einfach und schnell Einsetzbar. (Man muss nur einmal file einsetzen.)


    easy_ini hat folgende nachteile: man hat die gleichen nachteile wie bei einem herkömlichen Speicher system(bei GF)

    • Man muss immer alle gleichzeitig einspeichern


    Download:


    Die Funktion PlayerName(playerid); :

    Spoiler anzeigen

    stock PlayerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
    }

    Fragen Anregungen?? bitte per PN an mich.

    I'm Sorry For Your Mistake!
    but it's yours

    6 Mal editiert, zuletzt von mari0_DE ()

  • Nur als Tipp, eine Referenz bei einem String ist unnötig.
    &a[] ist das selbe wie a[]
    Beide sind beschreibbar (und keine Kopie)
    Bei strings, welche wirklich unveränderlich sein sollen, sollte man deswegen const nutzen.

  • format(file,60,"23.ini");


    Wozu wenn ich fragen darf ? Kann man die Dateiangabe nicht Direkt tätigen ?


    Der Code ist mit Fehlern übersät wenn ich ehrlich bin :/


    Code
    WriteFile(file);
    {


    :huh:


    Viel einfacher ist es eigentlich auch nicht & ziemlich unlogisch zusammengesetzt , die formatierung

    Code
    Schlüssel=Wert


    sollte der Code selber übernehmen, gehört eigentlich dazu

    Mfg. BlackFoX_UD_ alias [BFX]Explosion



  • ????



    Das erste ja ist mir garnicht aufgefallen das hatte ich noch vom Testen so drin danke
    format(file,60,"%s.ini",PlayerName(playerid));

    Zitat


    Viel einfacher ist es eigentlich auch nicht & ziemlich unlogisch zusammengesetzt , die formatierung

    Schlüssel=Wert


    sollte der Code selber übernehmen, gehört eigentlich dazu


    Wenn man das macht wäre das ganz auch nicht so schnell!! und das soll easy_ini eigentlich sein.!!

    I'm Sorry For Your Mistake!
    but it's yours

    Einmal editiert, zuletzt von mari0_DE ()

  • Schnell ist es auch so nicht sprich schneller, lässt sich höchstens besser tippen aber ein Dateizugriff erfolgt bei jedem Vorgang so wie es aussieht, gerade dieser Zugriff macht das ganze immer langsamer als es wirklich ist also müsstest du alles in einen Zwischenspeicher ins Skript laden & von dort alles für den Vorgang steuern somit bleibt der ständige Dateizugriff erspart & der Vorgang findet somit auch schneller statt am Ende kann die Datei dann vom Zwischenspeicher Direkt komplett abgespeichert werden.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Welche Vorteile bietet es zu DINI oder ähnlichem? Bitte nicht einfach sagen, schneller, besser etc. sondern belegen.



    Das Godfather Speichersystem ist lame. Vorteile 2 und 3 bitte belegen.

  • dini Öffnet den File list solange drin rum bis es den Key gefunden hat und schlisst ihn wieder.wenn man dan nochmal dini_ ... macht öffnet er es list und schlisst wieder usw...
    easy_ini macht es wie in fast jedem GF er Öffnet list alles raus und schlisst ihn weider.

    I'm Sorry For Your Mistake!
    but it's yours

  • Beim GF wird alles gelesen da alles in einem Durchlauf erfolgt klar aber ein System dieser Art kann nicht voraussehen was du als nächstes laden & speichern willst & mit wie vielen Werten so
    muss der Zugriff einzeln erfolgen außer man nutzt ein System das auf dieser Methode arbeitet einmal lesen & dann die Werte bestimmen oder Lesen , danach wieder alles verwerfen aber vorher den
    Inhalt komplett speichern , je nach dem.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Es ist auf jedenfall schneller Als Dini aber obs schneller als was anderes ist da kann man sich drüber streiten.


    Ich finde es ist einfacher als GF.


    wiso sollte dini schneller sein??

    I'm Sorry For Your Mistake!
    but it's yours

  • Es ist sicher nicht schneller als DINI, wenn es, wie du sagst, genauso schnell wie GF ist. Im sa-mp.com Forum hat jemand schon die Runtime des Scriptes gemessen, d.h. wie lange das Script gebraucht hat, eine Datei auszulesen. Und Dini war um Längen schneller.

  • Makros machen es ja nicht lagern sich in die Skript Cache ab somit wird das Skript immer ein Stück größer.
    Große Unterschiede gibt es da nicht ^^


    Zudem ist es ja nicht schlecht geworden jeder fängt mal irgendwo an.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion