Setmoney Tutorial

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
  • Hier mein erstes Tutorial für Einsteiger von einem Einsteiger.


    Für die Ausführung des Befehles habe ich die Includes OCMD, DINI und SSCANF verwendet. Downloadlinks am Ende des Tutorials.
    Beginnend fange ich bei mir mit den Grundgerüsten an und baue darin hinnein die Funktionen und Variabeln die ich benötige.
    In meinem Befehl sind verschiedene Abfragen zwecks Userlevel usw. Dies lasse ich an dieser Stelle aus, da diese sehr differenziert sind.


    Das würde bei mir erstmal so anfangen:


    ocmd:setmoney(playerid,params[])
    {
    new sID,Betrag;
    if(sscanf(params,"ui",sID,Betrag)) return SendClientMessage(playerid, COLOR_YELLOW,"Benutze: /setmoney [SpielerID][Betrag]");
    return 1;
    }


    Zur Erklärung: Befehle in OCMD verwenden nur die Definierung wie eben beschrieben, anders als wie in z.B. DCMD. Der Befehl an sich kann ganz am Ende vom Script stehen.
    Um ein Befehl einzugeben der Parameter beinhalten soll kann man z.B. SSCANF benutzen.
    In der Defininitionszeile geben wir die Parameter mittels Platzhalter an. In diesem Fall wollen wir 2 Integer (Ganzzahlen) übertragen.
    Es werden hier verschiedene Platzhalter verwendet. Direkt auf Anhieb fallen mir diese ein:


    "i" für Integer
    "u" für SpielerIDs oder Namen
    "s" für Strings
    "f" für floats.


    Da wir eine UserID und einen Integer übertragen wollen, verwenden wir also "ui" als Platzhalter.


    An der Stelle weiss das Script um was für Parameter es sich handelt. Die Platzhalter benötigen jedoch genau wie beim Formatieren einer Zeichenkette noch Variablen.


    Diese heissen sID und Betrag. sID steht für Spieler ID. Schreibt man den Befehl ohne Parameter wird eine SendClientMessage ausgegeben mit der richtigen Befehlsverwendung.


    ocmd:setmoney(playerid,params[])
    {
    new sID,Betrag; // Erstellt unsere benötigten Variablen
    if(sscanf(params,"ui",sID,Betrag)) return SendClientMessage(playerid, COLOR_YELLOW,"Benutze: /setmoney [SpielerID][Betrag]"); // Erstellt unsere Parameter und Sendet bei falscher Benutzung eine Message
    {
    SetPlayerMoney(sID,Betrag); // Ruft den Stock auf der unten nun Definiert ist/wird. Die Reihenfolge ist Identisch wie oben bei der Parameter Erstellung.
    }
    return 1;
    }
    }


    SetPlayerMoney ist keine Funktion von SAMP sondern ein ersteller Stock (Funktion), doch dazu gleich mehr. Die Variabeln sind nun mit den Integern gefüllt und der Betrag des Spielers wurde angepasst.
    In meinem Befehl lasse ich nun noch den neuen Betrag auch gleich mitspeichern. Ausserdem sende ich dem entsprechenden Spieler und auch mir eine SendClientMessage um Verwechslungen oder Zahlendreher auszuschliessen.
    Betrachtet man das ganze als Rohmaterial, würde der Befehl nun auch so funktionieren.


    Nun zum Stock. Ein Stock ist quasi eine eigens geschriebene Funktion die man natürlich auch aufrufen kann. Dieser Stock Resettet das Geld des Spielers und passt es um dem eingegeben Betrag an.


    stock SetPlayerMoney(playerid, cash)
    {
    ResetPlayerMoney(playerid); // Resett das Geld des Spielers und
    return GivePlayerMoney(playerid, cash); //gibt hier dem Spieler wieder Geld
    }


    Da dies mein erstes Tutorial ist, wäre es fein wenn ihr nicht zu hart bewertet. Sollte ich was vergessen haben oder es nicht richtig Erklärt ist, sagt es mir ruhig.


    Downloads:


    OCMD
    DINI
    SSCANF


    Edit: Korrekturen

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

    3 Mal editiert, zuletzt von Addickted ()

  • ich habe es mal getestet gibt es auch ne möglichkeit das wenn man z.b 1200 hat und ihm noch 1800 geben will das man nur die 1800 eingeben muss und nicht 3000?

  • if(sscanf(params,"ii",sID,Betrag)
    Das ist ziehmlich blödsinnig, du solltest hier lieber "ui" nutzen, statt "ii"

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • ich habe es mal getestet gibt es auch ne möglichkeit das wenn man z.b 1200 hat und ihm noch 1800 geben will das man nur die 1800 eingeben muss und nicht 3000?


    Gibt es, wäre dann aber nicht mehr in dem Sinne des Befehls. Diesen habe ich erstellt um Beträge direkt anzupassen.


    if(sscanf(params,"ii",sID,Betrag)
    Das ist ziehmlich blödsinnig, du solltest hier lieber "ui" nutzen, statt "ii"


    Da hast du Recht, denn der Platzhalter steht ja unter anderem auch für eine UserID. Für die Funktionalität an sich spielt das keine Rolle.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • doch schon, wenn du z.B.
    /setmoney Add 5000
    machst wird das bei dir nicht funktionieren.


    bei dir muss man die ID angeben

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski