Beiträge von Sharpadox

    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

    Medl dih bai mir, wärde dir nur für ein aboo gernä HelLen. (Abo kostet 19,99€/Monat, es läuft ein ganzes Jahr)



    Wänn möchtest, mahe ih es per TV für ungefär 5€ PSC


    What the.. ?
    1. Schaut dir deine Rechtschreibung an
    2. Dafür verlangst du noch Geld?
    Darüber kann ich nur lachen...


    B2T:
    Ich rate ebenfalls, lieber die Wiki durchzulesen, oder die Tutorials hier in Breadfish ;)..
    Und wenn du Hilfe brauchst, versuch es allein zu lösen, und wenns garnicht geht, dann
    kann man ja immer in Breadfish fragen :D

    weil das hinten beim Stromkabel eingang steht.


    Am Stromkabel steht für gewöhnlich immer 230V, aber das ist nur die Spannung die der PC braucht. Und die Spannung eines Haushaltes hat meistens 230V.
    Wie start dein Netzteil ist, steht auf dem Netzteil drauf, dafür müsstest du wahrscheinlich dein Gehäuse öffnen, da es meistens drinnen steht.

    Kommt da noch ein Update? wenn nicht wäre ich für einen Close.


    Ist doch unnötig ? o.o
    Warum soll dieses Thema geclosed werden und angepinnt wird es sicher auch nicht, weil sonst wäre meins auch schon lange angepinnt xD
    Wenn man etwas wegen "unaktualität" closen würde, müsste man ja 100e Threads closen.

    Wobei ich das eher so machen würde.


    Count(const input[])
    {
    new count,tmp=0;
    for(new i=0;i<strlen(input);i++){
    if((input[i] != ' ' || input[i] != '.' || input[i] != ',' || input[i] != '?' || input[i] != '!') && tmp==0){
    count++;
    tmp++;
    }
    if(tmp && (input[i] == ' ' || input[i] == '.' || input[i] == ',' || input[i] == '?' || input[i] == '!')) tmp--;
    }
    return count;
    }


    Für die Helden, die nach einen Punkt (.), Komma (,) oder was auch immer kein Leerzeichen lassen.
    countWords("Hallo Welt.Wie gehts?"); // Das wären sonst nun 3 Wörter

    Naja eigentlich sind keine Visual *blabla* sprachen zu empfehlen.
    Denn diese sind leicht zu decompilieren.


    Nicht wenn man einen ordentlichen Obfuscator benutzt und dann
    noch MySQL Daten usw. über PHP abfragt ;)


    PS: Ist zwar immernoch nicht 100% sicher aber deutlich sicherer als vorher.

    Ca. 2 Monate, dann konnte ich die Grundlagen und so. Jedoch braucht man noch etwas Feinschliff im Bereich, dass man auch eigenes Umsetzen kann ganz spontan.
    Daher habe ich dann ca. 8-10 Monate gebraucht.


    Beigebracht per:

    • Grundlagen = MrMonat/Nemesus
    • Da die doof waren, habe ich dann Breadfish Tutorials angeschaut