Waffen-Speicherung

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
  • Hallo liebe Breadfish User,


    da mich einige danach gefragt haben , möchte ich euch heute zeigen , wie man ganz simple Waffen speichert und beim Login wieder ausliest.
    Es sind 4 ganz simple Schritte, die jeder kann..
    Für dieses Tutorial ist es nötig, dass ihr die Include 'dudb' habt und sie oben im Script mit '#include <dudb>' ladet.


    Schritt 1(Waffen laden lassen)


    Um eure Waffen zu laden benötigt ihr folgenden Code. Diesen Code müsst ihr einfach am Ende des Scriptes erstellen.


    stock LadeWaffen(playerid)
    {
    new pname[MAX_PLAYER_NAME];
    if(!GetPlayerName(playerid, pname, MAX_PLAYER_NAME)) return false; // liest den Namen des Spielers aus
    if(!udb_Exists(pname)) udb_Create(pname, ""); //Erstellt, falls nicht vorhanden , die benötigte Datei zum Speichern
    for(new wep[8], amm[6], i; i < 13; i++) //Definiert die Waffen und Munitions Slot auf der Variable 'i'
    {
    format(amm, sizeof amm, "Munition%d", i);// Liest die Waffen ...
    format(wep, sizeof wep, "Waffe%d", i);//... und die Munition aus der Datei ...
    GivePlayerWeapon(playerid, dUserINT(pname).(wep), dUserINT(pname).(amm)); // und gibt sie dem Spieler
    }
    return true;
    }

    Schritt 2(Waffen speichern lassen)


    Damit die Waffen gespeichert werden müsst ihr den folgenden Code erstellen.


    stock SpeicherWaffen(playerid)
    {
    new pname[MAX_PLAYER_NAME];
    if(!GetPlayerName(playerid, pname, MAX_PLAYER_NAME)) return false; // Liest den Namen aus.
    if(!udb_Exists(pname)) udb_Create(pname, ""); // Prüft , ob Datei vorhanden , falls nicht, wird sie hierdurch erstellt
    for(new wep[8], amm[6], i, cwep, camm; i < 13; i++) // hier sieht man wieder die Variable für die Slots der Waffen und Munition.
    {
    format(amm, sizeof amm, "Munition%d", i);// Speichert die Waffen...
    format(wep, sizeof wep, "Waffe%d", i);// ...und Munition in einem String
    GetPlayerWeaponData(playerid, i, cwep, camm); // Läd alle Slots von Munition und Waffen des Spielers und speichert sie in den Variablen
    dUserSetINT(pname).(amm, camm); // hier werden Munition...
    dUserSetINT(pname).(wep, cwep);// und Waffen in der Datei gespeichert
    }
    return true;
    }

    Schritt 3


    Im Schritt 3 müssen die Waffen beim einloggen geladen und vergeben werden. Dazu einfach dort am besten unter OnPlayerSpawn(playerid) LadeWaffen(playerid); schreiben. Dies befehligt das Script den 'stock LadeWaffen(playerid)' auszuführen.



    Schritt 4


    Als letzten Schritt müsst ihr nur noch irgendwie das Script dazu bringen , die Waffen beim ausloggen des Spielers zu speichern.
    Dies tut ihr unter 'OnPlayerDisconnect(playerid, reason)' mit SpeicherWaffen(playerid);
    ______________________________________________________________________________________________________



    Das war es auch schon.
    Schon werden eure Waffen gespeichert.
    Support gibts wie immer bei mir per ICQ;)

    Einmal editiert, zuletzt von Scriptor ()

  • Also jetzt mal ne Frage, was soll
    if(!GetPlayerName(playerid, pname, MAX_PLAYER_NAME)) return false;

    bringen?:D
    Außerdem, woher sollen Anfänger wissen, wo sie die Funktion udb_Create usw. herbekommen sollen? Da musste nochmal nachbessern ;)
    LG :thumbup:

  • Die Funktion wird abgebrochen, wenn die GetPlayerName-Funktion 0 returnt. Und das macht sie nur, wenn der Spieler offline ist. Somit hat man eine Abfrage, ob der Spieler online ist und gleichzeitig den Namen herausgefunden.


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Die Funktion wird abgebrochen, wenn die GetPlayerName-Funktion 0 returnt. Und das macht sie nur, wenn der Spieler offline ist. Somit hat man eine Abfrage, ob der Spieler online ist und gleichzeitig den Namen herausgefunden.


    Ah, danke fürs erklären :) - aber macht das Sinn, wenn die Waffen gespeichert werden ist irgendwie klar dass der User online ist :D bzw. beim Laden auch.
    Da keine Loops verwendet werden ist das doch eigentlich eher unnütz und kostet Zeit, oder seh ich das falsch?