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
  • Hallöchen Breadfish-User,


    heute wollte ich mal ein kleineres Tutorial machen, über das setzen und getten von Properties in SAMP.
    Ich habe mich nicht wirklich lange damit befasst, also könnte es sein, dass es ein wenig schlecht erklärt
    ist, da ich ja generell nicht erklären kann :D .. Und falls etwas falsch ist, bitte ich darum, dass ihr mir das
    sagt, damit ich es verbessern kann.


    Also erstmal: Wofür kann man Properties nutzen?
    Damit kann man eigentlich so ziemlich das selbe machen, wie das eher bekannte GVar Plugin, und arbeitet
    übrigens auch ähnlich wie dieses Plugin. Aber sogesehen könnten die Properties besser sein, da man dazu
    nicht extra ein Plugin braucht. Zu der Frage, wozu man Properties nutzen kann:
    Man kann damit Integer und Strings auf der Virtuellen Maschine des Servers abspeichern, die man dann von
    jedem Script aus wieder abrufen kann, wodurch man z.B. Daten aus einem Filterscript zum Gamemode, oder
    vom Gamemode zum Filterscript schicken kann, wodurch man eine bessere Zusammenarbeit der Scripts
    schaffen kann.
    Die Parameter sind übrigens alle optionale, was evtl. beim ersten Blick für Verwirrung sorgen kann (zumindest
    war es bei mir so xD), aber davon sollte man nicht abgeschreckt werden.


    Funktionen:
    #========================================================================#
    #========================================================================#

    setproperty
    (Um eine Property zu setzen)
    Mit setproperty kann man einen Integer oder einen String auf der Virtuellen Maschine des Servers abspeichern.
    Die Parameter lauten wie folgt:
    (id=0, const name[]="", value=cellmin, const string[]="")


    Parameter-Erklärung:
    [table='2']
    [*]Parameter[*]Beschreibung
    [*]id[*]Die Virtuelle Maschine, welche zum Speichern verwendet werden soll (Sollte man immer auf 0 lassen).
    [*]const name[][*]Wird eigentlich nur gebraucht, wenn man Integer (Zahlen) abspeichern will, ansonsten am besten leer lassen.
    [*]value[*]Hier konnt der Integer rein, der gespeichert werden soll, oder die Property-ID, wenn ein String gespeichert wird.
    [*]const string[][*]Der String, der gespeichert werden soll. Wenn ein Integer gespeichert wird, diesen Parameter bitte weglassen.
    [/table]


    Code-Beispiel:

    // String speichern
    setproperty(0, "", 0, "Test"); // Der String "test" wird mit der Property-ID 0 gespeichert. Die Property-ID brauche wir, damit wir es später wieder "getten" können.
    // Integer abspeichern
    setproperty(0, "TestZahl", 45); // Der Integer 45 wird unter dem Namen "TestZahl" abgespeichert.


    #========================================================================#
    #========================================================================#

    getproperty (Um eine Property zu getten)
    Mit dieser Funktion können wir die Strings / Integer abfragen, die wir in der Virtuellen Maschine gespeichert haben.
    Jedoch ist der String anders formatiert und muss "encodet" werden. Dafür nutzen wir die Funktion Strunpack.
    Die Parameter sind:
    (id=0, const name[]="", value=cellmin, string[]="")


    Parameter-Erklärung:
    [table='2']
    [*]Parameter[*]Beschreibung
    [*]id[*]Die Virtuelle Maschine, welche zum Speichern verwendet werden soll (Sollte man immer auf 0 lassen).
    [*]const name[][*]Der Property-Name, unter der ihr ggf. einen Integer abgespeichert habt.
    [*]value[*]Die Property-ID, unter der ihr ggf. einen String abgespeichert habt.
    [*]&string[][*]Der String der mit dem Inhalt 'überschrieben' wird.
    [/table]


    Code-Beispiel:

    new output[10], var;
    // String abfragen
    getproperty(0, "", 0, output); // Der String aus der Property-ID 0 wird in den "output" (Erstellter String) geschrieben.
    // Integer Abfragen
    var = getproperty(0, "TestZahl"); // Der Integer aus der Property "TestZahl" wird in in die Variable 'var' (Erstellter Integer) gesetzt.
    // Nun wird der String in den richtigen Format gebracht
    strunpack(output, output); // Wenn es nicht auf den richtigen Format gebracht wird, dann wird kein String ausgegeben.


    #========================================================================#
    #========================================================================#
    deleteproperty
    (Zur Löschung einer Property)
    Mit deleteproperty kann man eine Property löschen, die man zuvor erstellt hat.
    Parameter:
    (id=0, const name[]="", value=cellmin)


    [table='2']
    [*]Parameter[*]Beschreibung
    [*]id[*]Die Virtuelle Maschine, welche zum Speichern verwendet werden soll (Sollte man immer auf 0 lassen).
    [*]const name[][*]Der Property-Name, unter der ihr ggf. einen Integer abgespeichert habt.
    [*]value[*]Die Property-ID, unter der ihr ggf. einen String abgespeichert habt.
    [/table]


    Code-Beispiel:

    // String löschen
    deleteproperty(0, "", 0); // Löscht den oben gespeicherten String
    // Integer löschen
    deleteproperty(0, "TestZahl"); // Löscht den oben gespeicherten Integer


    #========================================================================#
    #========================================================================#
    existproperty
    (Checkt, ob eine Property bereits besteht)
    Mit existproperty kann man abfragen, ob eine Property bereits besteht, oder nicht. Ausgegeben wird
    dabei entweder true (wenn es existiert) oder false (wenn es nicht existiert).
    Parameter:
    (id=0, const name[]="", value=cellmin)


    [table='2']
    [*]Parameter[*]Beschreibung
    [*]id[*]Die Virtuelle Maschine, welche zum Speichern verwendet werden soll (Sollte man immer auf 0 lassen).
    [*]const name[][*]Der Property-Name, unter der ihr ggf. einen Integer abgespeichert habt.
    [*]value[*]Die Property-ID, unter der ihr ggf. einen String abgespeichert habt.
    [/table]


    Code-Beispiel:

    new bool:check = existproperty(0, "", 0);
    if(check == true){
    SendClientMessage(playerid,-1,"Die Property existiert bereits.");
    }
    else if(check == false){
    SendClientMessage(playerid,-1,"Die Property existiert nicht.");
    }
    // Zum Checken des Integers wäre es dann: existproperty(0, "TestZahl);


    #========================================================================#
    #========================================================================#


    So, das wars dann mit den Property-Funktionen. Nun noch ein Hinweis:
    Da diese Funktion nur optionale Parameter enthält, muss man nicht alle Angabe angeben, sondern
    kann diese alle einzeln angeben, indem man ein Punkt (".") verwendet und dann den zu setzenden
    Parameter dahinter angibt.
    Beispiel:

    // Setzen eines Integers
    setproperty(.name = "TestZahl", .value = 45);
    // Getten der Zahl
    new val = getproperty(.name = "TestZahl");
    // Löschen der Zahl
    deleteproperty(.name = "TestZahl");

    Ich hoffe, es ist jedem klar was damit gemeint ist. Wenn man nur diese einzelnen Parameter angeben kann,
    ist es sicher auch nicht umbedingt so verwirren, ist jedoch ansichstsache.
    Mit Strings geht es natürlich genauso:
    setproperty(.value = 0, .string = "Test");


    Damit ist das Tutorial nun zuende. Ich hoffe, es war nicht allzu sch* erklärt. Wenn ihr fragen habt, könnt ihr mich fragen.
    Ich hoffe ich habe auch nichts falsch erklärt oder so, und hoffe dass alle (incl. @BlackAce: ) es verstanden haben.


    Mit freundlichen Grüßen,
    Sharpadox aka Sh13

    2 Mal editiert, zuletzt von Sharpadox ()

  • Mal als kleine Anmerkung wenn man strings via setproperty speichert, so werden diese gepackt. Daher um diese erneut zu nutzen muss man den
    string nach dem auslesen entpacken mit strunpack.


    //edit Rechtschreibung


    Wie jetzt? xd
    Mit getproperty bekommt man den, und mit setproperty setzt man den.
    (Mit setproperty wird die Property überschrieben, bzw. erstellt, wenn er noch nicht vorhanden ist)

  • Super Sache, sowas hab ich letztes mal gesucht.


    Ich glaube er meint, dass die Strings in ein anderes Format gebracht werden, wenn du sie als propertie speicherst. Wenn du einen solchen String dann wieder ausließt, wird er nicht ins gewöhnliche Format zurückkonvertiert. Deswegen muss man ihn zuerst mit der Funktion strungpack(...) zurückkonvertieren...


    kA ob das stimmt, aber so habe ich das verstanden.


  • Wie jetzt? xd
    Mit getproperty bekommt man den, und mit setproperty setzt man den.
    (Mit setproperty wird die Property überschrieben, bzw. erstellt, wenn er noch nicht vorhanden ist)


    Ich meine es so wie ich es geschrieben habe das der string den du mit setproperty temporär speicherst gepackt wird.


    Ich hab dir mal ein Code geschrieben das du dies nicht nur plastisch vor deinen Augen hast.



    setproperty(0,"",1,"Hallo");
    new str[20];
    getproperty(0,"",1,str);
    printf("%s", str);
    strunpack(str, str);
    printf("%s", str);


    //edit


    Es bedeutet ganz einfach um Memory zu sparen werden so viele Zeichen wie möglich in eine Zelle gepackt resultat der string ist dadurch gepackt (komprimiert).

  • Super Sache, sowas hab ich letztes mal gesucht.


    Ich glaube er meint, dass die Strings in ein anderes Format gebracht werden, wenn du sie als propertie speicherst. Wenn du einen solchen String dann wieder ausließt, wird er nicht ins gewöhnliche Format zurückkonvertiert. Deswegen muss man ihn zuerst mit der Funktion strungpack(...) zurückkonvertieren...


    kA ob das stimmt, aber so habe ich das verstanden.


    Jetzt wo du es sagtst.. Stimmt.. habe ich voll vergessen, dass der String garnicht richtig formatiert ist.
    Danke IPrototypeI:, ich muss das dann wohl in meinem Tutorial einfügen ^^


  • Jetzt wo du es sagtst.. Stimmt.. habe ich voll vergessen, dass der String garnicht richtig formatiert ist.
    Danke IPrototypeI:, ich muss das dann wohl in meinem Tutorial einfügen ^^


    Wenn es dich noch zusätzlich interessiert was man damit auch machen kann dann ist dies ein guten Beispiel:


    http://forum.sa-mp.com/showthread.php?t=235398


    Da du hier auf den Speicher dynamisch zurück greifen kannst.