Gangfight Teil II - Speicherung

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

  • Gangfight Teil II - Speicherung

    [Blockierte Grafik: http://www.abload.de/img/tutorial15wqub.png]
    Tutorial von Vincent P. für easy-scripting.net & sa-mp.de
    Nummer 2 - Speichern & Laden
    Hallo,
    im heutigen Tutorial, sprich Tutorial Nummer 2, nach diesem hier: forum.sa-mp.de/san-andreas-mul…system-mit-textdraw-s-co/ bzw. easy-scripting.net/index.php?page=Thread&threadID=194 möchte ich euch heute zeigen, wie es möglich ist das ganze zu speichern im DINI-Format.

    Step 1 - was brauchen wir?
    • Zeit, Geduld, Lust, Spaß, gute Laune
    • Das Tutorial Nummero 1 eventuell auch
    Step 2 - was wollen wir erreichen?
    Wir möchten den Punktestand des Gangfightsystem von Tutorial Nummero 1 speichern und dementsprechend auch die GangZone's anzeigen lassen sowie die Textdraws.

    Step 3 - Der Scriptstart, das Enum
    Um uns die Speicherung zu ermöglichen benötigen wir ein Enum in welchem wir die Sachen, die gespeichert werden sollen sprich z.B. "Geld" ect. speichern, in unserem Fall:
    • PunkteTeamEins
    • PunkteTeamZwei
    Das schaut wie folgt aus:
    [pwn]enum Gangfightspeicherung {
    PunkteTeamEins,
    PunkteTeamZwei
    }[/pwn]
    Und das ganze um es auch anwenden zu können müssen wir den Enum definieren, was eine Definierung ist, sollten wir wissen, darauf gehe ich nicht weiter ein:
    [pwn]new Gangfight[Gangfightspeicherung];[/pwn]

    Wir könnten nun also z.B.:
    [pwn]Gangfight[PunteTeamEins][/pwn]
    erhöhen, setzen, runterschrauben, abfragen - alles. :)

    Step 4 - Stock schreiben zum laden
    Ein Stock ist: "stock is used to declare variables and functions which may not be used but which you don't want to generate unused warnings for. With variables stock is like const in that it is a modifier, not a full declaration", nachzulesen: wiki.sa-mp.com/wiki/Stock#stock
    Also ein Stock, ich beschreibe es mal mit eigenen Worten, ist eine Art "Funktion" welche man überall einsetzen bzw. aufrufen kann. Sprich man bastelt sich z.B. ein zweites OnPlayerDisconnect mit einem Stock und führt/ruft den Stock dann bei OnPlayerDisconnect auf, wie es auch bei vielen GF's der Fall ist.

    [pwn]stock GangfightLoad()
    {
    new filename[100];
    format(filename, sizeof filename, "Gangfights.ini");
    if(dini_Exists(filename))
    {
    //something here
    }
    return 1;
    }[/pwn]
    Bis hierher. Bisher machen wir nicht viel. Wir legen den Namen der Gangfightdatei, aus der wir lesen wollen, fest und fragen ab mit "dini_Exists" ob die Datei überhaupt vorhanden ist, wenn ja, würde bisher nichts passieren. Doch kommen wir nun zu dem, was passieren soll.

    Wir nutzen in diesem Fall die, im Enum verwendeten Begriffe, sprich: "PunkteTeamEins", "PunkteTeamZwei" und entfernen dafür die Variablen "CopCount" und "GangsterCount" und nennen alles was so lautet in:
    "Gangfightspeicherung[PunkteTeamEins" für Cops
    und:
    "Gangfightspeicherung[PunkteTeamEins" für Gangster
    ein.

    [pwn]stock GangfightLoad()
    {
    new filename[100];
    format(filename, sizeof filename, "Gangfights.ini");
    if(dini_Exists(filename))
    {
    Gangfightspeicherung[PunkteTeamEins] = dini_Int(filename, "PunkteTeamEins");
    Gangfightspeicherung[PunkteTeamZwei] = dini_Int(filename, "PunkteTeamZwei");
    }
    return 1;
    }[/pwn]
    Wir haben jetzt den Inhalt, sprich den Spielstand aus der Datei geholt und diesen an die Variablen übergeben, auch das sollte klar sein.
    Es gibt im übrigen noch anderes als "dini_Int", wie z.B. "dini_Get", aber das ist ein anderes Thema - weiter geht's!
    [pwn]stock GangfightLoad()
    {
    new filename[100];
    format(filename, sizeof filename, "Gangfights.ini");
    if(dini_Exists(filename))
    {
    new str[10];
    Gangfightspeicherung[PunkteTeamEins] = dini_Int(filename, "PunkteTeamEins");
    Gangfightspeicherung[PunkteTeamZwei] = dini_Int(filename, "PunkteTeamZwei");
    format(str,sizeof(str), "~b~%d", CopCount);//Textdraw formatieren
    TextDrawSetString(Cops[1], str);//Textdraw updaten
    format(str,sizeof(str), "~b~%d", GangsterCount);//Textdraw formatieren
    TextDrawSetString(Gangster[1], str);//Textdraw updaten
    }
    else
    {
    printf("%s exisitert nicht!", filename);
    }
    return 1;
    }[/pwn]
    Wir sagen ihm also direkt er soll den Textdraw(s) updaten und wenn die Datei NICHT vorhanden ist soll er in den Chatlog schreiben, das es diese nicht gibt, fertig. Wir können ja beim laden schlecht eine erstellen, bringt ja nichts... ;)

    Step 5 - Stock schreiben zum Speichern
    Relativ das gleiche machen wir auch jetzt, ich nehme mir einfach mal den Code, da ich ihn oben schon erklärt habe und erkläre nur wenig:
    [pwn]stock GangfightSave()
    {
    new filename[100];
    format(filename, sizeof filename, "Gangfights.ini");
    if(dini_Exists(filename))
    {
    dini_IntSet(filename, "PunkteTeamEins", Gangfightspeicherung[PunkteTeamEins]);
    dini_IntSet(filename, "PunkteTeamZwei", Gangfightspeicherung[PunkteTeamZwei]);
    }
    else
    {
    dini_Create(filename);
    dini_IntSet(filename, "PunkteTeamEins", Gangfightspeicherung[PunkteTeamEins]);
    dini_IntSet(filename, "PunkteTeamZwei", Gangfightspeicherung[PunkteTeamZwei] );
    printf("%s wurde erstellt & gespeichert!", filename);
    }
    return 1;
    }[/pwn]
    Diesmal speichere ich das ganze nur mit dem Command "dini_IntSet", sollte keine GangfightDatei vorhanden so wird eine erstellt & dann gespeichert. Fertig währen wir, das war's - NEIN natürlich nicht! Scherzchen beim scripten muss immer sein. :P

    Step 6 - Stock's anwenden
    Wir gehen nun unter die Callback's, am besten eines nach dem anderen & nicht gleichzeitig: OnGameModeInit & OnGameModeExit.
    Wir fügen nun beim "OnGameModeInit" folgendes ein:
    GangfightSave();
    Und beim "OnGameModeExit":
    GangfightLoad();

    Und wenn man mitgemacht hätte, würde man sehen das es falsch ist, nämlich genau andersrum, aber das lass ich mal stehen, man soll ja schließlich nicht nur C&P'n.

    Step 7 - See the result
    Herzlichen Glückwunsch, ihr habt es geschafft, bei erfolgreichem "gescripte" sollte folgendes in der .ini-Datei erscheinen:

    Quellcode

    1. PunkteTeamEins=43
    2. PunkteTeamZwei=23

    Die Zahlen sind nur ausgedacht, je nach Spielstand.

    ==================================================================================================================================

    Das Tutorial wurde im Forum verfasst, daher gibt's keine Einrückungen. Ich hoffe trotzdem ich habe euch geholfen!

    MfG.
    Vincent.
    "Das müsste jetzt funktionieren..."

    ---
    Mit freundlichen Grüßen,
    Vincent Petritz