Easy Saving

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Guten Nachmittag Liebe Brotfische :)

      Ich stelle euch nun mal ein System vor, mit dem es extrem einfach ist Daten zu speichern und zu laden.

      Also, das alles basiert einfach auf einem Enumerator:

      PAWN-Quellcode

      1. enum p_DATA
      2. {
      3. pMoney,
      4. pLevel,
      5. Float:pX,
      6. Float:pY,
      7. Float:pZ,
      8. pName[MAX_PLAYER_NAME]
      9. };
      10. new SpielerInfo[MAX_PLAYERS][p_DATA];

      Also in diesen Enumerator, packen wir alle SpielerDaten die wir für den Spieler speichern wollen :)

      So und sagen wir, wir geben dem jetzt mal paar Werte, wenn der Spieler connected:

      PAWN-Quellcode

      1. SpielerInfo[playerid][pMoney] = 5000;
      2. SpielerInfo[playerid][pLevel] = 5;
      3. SpielerInfo[playerid][pX] = 300.5;
      4. SpielerInfo[playerid][pY] = 6000.3;
      5. SpielerInfo[playerid][pZ] = 1002.94;
      6. format(SpielerInfo[playerid][pName],MAX_PLAYER_NAME,"Kaliber");


      Und wenn wir diese unter OnPlayerDisconnect speichern wollen, einfach folgende Zeile:

      PAWN-Quellcode

      1. Save(playerid,p_DATA,SpielerInfo[playerid]);

      Das wars, diese eine Zeile, speichert alles was in diesem Enumerator ist :)

      Ich hoffe es wird klar, wieso das Easy Save heißt ^^

      Und zum Laden einfach folgende Zeile:

      PAWN-Quellcode

      1. Load(playerid,p_DATA,SpielerInfo[playerid]);


      Also, damit sollte es nun wirklich jeder hinbekommen Variablen zu sichern :D

      Editierung:
      Angenommen, ein Spieler ist nicht gerade online und man will einen Wert editieren, nehmen wir jetzt mal im oberen Beispiel das Geld, dann macht man folgendes:

      PAWN-Quellcode

      1. Edit("Kaliber.txt",1,10000);
      2. /*
      3. Kaliber.txt = Der Pfad von der Spielerdatei
      4. 1 = Die erste Variable im Enum, also das Geld
      5. 10000 = Der neue Geldwert, den der Spieler haben soll
      6. */


      Um Offline Daten von einem Spieler Abzufragen, das geht leider nur mit Floats und Integern.
      Strings kann man wegen dieser Methode leider nicht auslesen:

      PAWN-Quellcode

      1. new kaliber_geld = strval(Get("Kaliber.txt",1)); //Hat jetzt einen Wert von 5000 (wegen oben)


      Zusatz-Informationen:
      Angenommen wir Speichern die Werte, die ich oben angegeben habe, dann sieht unsere Datei so aus:

      Quellcode

      1. 5000|5|300.5000|6000.2998|1002.9400|75|97|108|105|98|101|114|

      Nicht wundern, dass ist alles richtig so :D

      Wenn ihr das printet, kommt schon am Ende Kaliber wieder beim Namen raus, nur ich zerlege die chars in zahlen von der Ascii-Tabelle :)
      Aber das setzt sich alles wieder richtig zusammen :)

      Speedtest:
      Also, leider kann man hier keinen guten Speedtest zum speichern machen, aber zum Laden, ich denke die Werte sind ziemlich ähnlich:

      Quellcode

      1. 10.000x Loaded in 60ms
      2. 100.000x Loaded in 300ms


      Pfad Speicherung:
      Also, das hier ist ein Spieler-Daten Speicherungssystem :)

      Ihr könnt den Pfad selbst festlegen und auch welche Endung die Datei haben soll:

      PAWN-Quellcode

      1. #define PATH "/Accounts/%s.ini"
      2. #include <k_save>

      Jetzt würde das zum Beispiel im Ordner Accounts als .ini Datei gespeichert werden.
      Wenn ihr aber dieses define nicht setzt, wird einfach der Name.txt in den scriptfiles gespeichert :)

      Download:
      Pastebin: pastebin.com/nnLN10Z2
      Mediafire: mediafire.com/?tory1a375eeqsr0

      Viel Spaß damit, ich würde mich über ein kleines Feedback freuen :)

      mfg. :thumbup:

      //Edit: Editierung
      //Edit²: Fehler im in der Editierung gewesen
      //Edit³: Informationen zu MAX_VARS
      //Edit4: Get Methode
      //Edit5: MAX_VARS verbessert einfach enum namen eingeben oder sizeof(SpielerInfo[])
      //Edit6: Neue Downloadlinks & Anpassung der Path Größe vom Array
      //Edit7: fclose bei der Load Methode vergessen
      //Edit8: Kleiner Fehler mit dem NUL Terminator


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/

      Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von Kaliber ()

    • Ist ja cool, aber gibt es auch die Möglichkeit dann die Werte offline mit einem Befehl zu editieren?

      ✔ Scripting (Pawn) SA:MP
      ✔ Managment Server
      ✔ Managment Forum

      ** Vertauenswürdiger Handelspartner, dies ist durch mehrere Leute bestätigt! **


      ⊗ MySQL für SA:MP (bringt Server zum Abstürzen, funktioniert meist nicht, Aufwand zu Groß)

      PAWN-Quellcode

      1. public OnPlayerConnect(playerid)
      2. {
      3. Ban(playerid);
      4. return 1;
      5. }


      chefskypist
      Leider kommt es immer wieder vor, dass ich Kontaktanfragen von Leuten wo ich nicht weiß wer die sind bekomme,
      darum sofern ihr mich über Skype kontaktieren wollt bitte euern Forum Namen in der Kontaktanfrage mit übermitteln.
      Sofern der Name nicht mit angegeben ist, nehme ich die Anfrage nicht an!

    • #Reverse schrieb:

      Ist ja cool, aber gibt es auch die Möglichkeit dann die Werte offline mit einem Befehl zu editieren?

      Oh stimmt, daran habe ich noch gar nicht gedacht :D

      Ich editiere mal den Thread, habe gerade eine Funktion dafür geschrieben ;)

      Danke für die Information :)

      SynonymousZ schrieb:

      Wenn das Ding funktioniert, ist es sehr nützlich

      Tut es..habe es ja schließlich getestet :rolleyes:

      mfg. :thumbup:


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
    • BlackAce schrieb:

      Lass doch lieber die Größe des Arrays bzw die Enum Größe übergeben.

      //Edit:
      Aber...dann müsste man immer einen parameter noch mitgeben nämlich p_DATA

      oder hast du eine Idee...wie man auf den Namen vom Enumerator schließen kann oder anders die Größe abfragen kann? :huh:


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kaliber ()

    • Eine Funktion für das offline Abfragen der Spieler Daten fehlt vlt. noch.
      Beispielsweise man ist als Admin Online und man will den Banngrund eines Spielers herausfinden.

      ✔ Scripting (Pawn) SA:MP
      ✔ Managment Server
      ✔ Managment Forum

      ** Vertauenswürdiger Handelspartner, dies ist durch mehrere Leute bestätigt! **


      ⊗ MySQL für SA:MP (bringt Server zum Abstürzen, funktioniert meist nicht, Aufwand zu Groß)

      PAWN-Quellcode

      1. public OnPlayerConnect(playerid)
      2. {
      3. Ban(playerid);
      4. return 1;
      5. }


      chefskypist
      Leider kommt es immer wieder vor, dass ich Kontaktanfragen von Leuten wo ich nicht weiß wer die sind bekomme,
      darum sofern ihr mich über Skype kontaktieren wollt bitte euern Forum Namen in der Kontaktanfrage mit übermitteln.
      Sofern der Name nicht mit angegeben ist, nehme ich die Anfrage nicht an!


    • #Reverse schrieb:

      Eine Funktion für das offline Abfragen der Spieler Daten fehlt vlt. noch.
      Beispielsweise man ist als Admin Online und man will den Banngrund eines Spielers herausfinden.

      Ouh ja, stimmt gute Idee ^^

      Allerdings tut es mir Leid, Banngründe o.ä. solltest du seperat Speichern.

      Also für Strings ist diese Speicherungs-methode eigentlich nicht so ausgelegt. Denn 1. Verbrauchen sie sehr viele Zellen und zum 2. Kann ich da ich das alles in Zahlen Konvertiere, nicht direkt den ganzen String auslesen...müsste dafür dann noch extra start oder endbytes machen...aber das würde sich nicht lohnen.

      Habe dir eine Methode gemacht, damit kannst du z.B. das Geld oder die Koordinaten auslesen, aber leider keine Strings.

      Wie gesagt, speicher das einfach seperat und dann passt das ^^

      mfg. :thumbup:


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
    • Kaliber schrieb:

      #Reverse schrieb:

      Eine Funktion für das offline Abfragen der Spieler Daten fehlt vlt. noch.
      Beispielsweise man ist als Admin Online und man will den Banngrund eines Spielers herausfinden.

      Ouh ja, stimmt gute Idee ^^

      Allerdings tut es mir Leid, Banngründe o.ä. solltest du seperat Speichern.

      Also für Strings ist diese Speicherungs-methode eigentlich nicht so ausgelegt. Denn 1. Verbrauchen sie sehr viele Zellen und zum 2. Kann ich da ich das alles in Zahlen Konvertiere, nicht direkt den ganzen String auslesen...müsste dafür dann noch extra start oder endbytes machen...aber das würde sich nicht lohnen.

      Habe dir eine Methode gemacht, damit kannst du z.B. das Geld oder die Koordinaten auslesen, aber leider keine Strings.

      Wie gesagt, speicher das einfach seperat und dann passt das ^^

      mfg. :thumbup:
      Wie ist es denn mit dem Account - Passwort ?

      ✔ Scripting (Pawn) SA:MP
      ✔ Managment Server
      ✔ Managment Forum

      ** Vertauenswürdiger Handelspartner, dies ist durch mehrere Leute bestätigt! **


      ⊗ MySQL für SA:MP (bringt Server zum Abstürzen, funktioniert meist nicht, Aufwand zu Groß)

      PAWN-Quellcode

      1. public OnPlayerConnect(playerid)
      2. {
      3. Ban(playerid);
      4. return 1;
      5. }


      chefskypist
      Leider kommt es immer wieder vor, dass ich Kontaktanfragen von Leuten wo ich nicht weiß wer die sind bekomme,
      darum sofern ihr mich über Skype kontaktieren wollt bitte euern Forum Namen in der Kontaktanfrage mit übermitteln.
      Sofern der Name nicht mit angegeben ist, nehme ich die Anfrage nicht an!

    • BlackAce schrieb:

      Einfach numargs - 1 ?

      Nein, das geht leider nicht, da bekommt man wirklich nur die Anzahl der Argumente und das zählt nur als 1 :/

      BlackAce schrieb:

      Oder man muss einfach sizeof(Spieler[]) angeben

      //Edit: Joa...wäre selbiges wie wenn ich den Namen vom enumerator übergeben würde...hmmm

      mfg. :thumbup:


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kaliber ()

    • Kaliber schrieb:

      Nein, sizeof(Spieler[]) kann man nicht machen...sizeof funktioniert nur bei 1 Dimensionalen Arrays :S

      Diese Aussage ist aber mal sowas von falsch :D

      PAWN-Quellcode

      1. sizeof(Spieler[playerid])
      funktioniert nicht, das ist richtig

      PAWN-Quellcode

      1. sizeof(Spieler[])
      funktioniert einwandfrei
      Da du im Prinzip einen Array übergibst, sollte das eigentlich auch so gehen

      PAWN-Quellcode

      1. printf("sizeof: %d", sizeof(Spieler[]));

      Ergibt nach deinem Schema 29 30
      "Bevor ich mir Informationen aus der "Bild" hole,
      werde ich anfangen, Wahlergebnisse danach vorauszusagen,
      neben welchen Busch unsere Katze gepinkelt hat."
      Margarete Stokowski
    • So jetzt brauch man dieses Define nicht mehr und man kann so viele Variablen jetzt speichern wie man will :)

      Jetzt muss man den Enumerator Namen angeben oder mit sizeof(SpielerInfo[]) die Größe :)

      mfg. :thumbup:


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/