Beiträge von mari0_DE

    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??

    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.


    ????



    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.!!

    du fägst ja :
    if(GetPlayerScore(playerid)==20){GivePlayerMoney(playerid,700); GameTextForPlayer(playerid, "~r~+700$", 3000, 4); return 1;}
    aber wenn du nicht nur ==20 haben willst dann musst du so machen:
    if(GetPlayerScore(playerid)<30){GivePlayerMoney(playerid,700); GameTextForPlayer(playerid, "~r~+700$", 3000, 4); return 1;} //um level 20-29 abzuprüfen

    du hast das so:
    if(GetPlayerScore(playerid)==20)return GivePlayerMoney(playerid,700); GameTextForPlayer(playerid, "~r~+700$", 3000, 4);

    Aber richtig ist das so:
    if(GetPlayerScore(playerid)==20){GivePlayerMoney(playerid,700); GameTextForPlayer(playerid, "~r~+700$", 3000, 4); return 1;}


    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.


    new string[256];
    format(string, sizeof(string), "Innenraum %d: %d$\nInnenraum %d: %d$\nInnenraum %d: %d$\nInnenraum %d: %d$\nInnenraum %d: %d$\nInnenraum %d: %d$\n", Interiors[0][IDs], Interiors[0][Kaufpreis],Interiors[1][IDs], Interiors[1][Kaufpreis],Interiors[2][IDs], Interiors[2][Kaufpreis],Interiors[3][IDs], Interiors[3][Kaufpreis],Interiors[4][IDs], Interiors[4][Kaufpreis],Interiors[5][IDs], Interiors[5][Kaufpreis],);
    ShowPlayerDialog(playerid, DialogInt, DIALOG_STYLE_LIST, "Innenraum Ansicht", string, "Ansehen", "Abbrechen");

    das waren jetzt nur 6 aber man kann erweitern auf 13 oder mehr musst nur sehen das string[] groß genug ist!