Script "Optimieren"

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 und willkommen zu meinem zweiten Tutorial nachdem mein erstes ([ SCRIPTING ] Simples Premiumsystem mit Sternen) doch relativ gut ankamen.
    Diesmal vieleicht nicht so schön bebildert, und auch ein wenig kürzer aber was solls ;)


    Und zwar geht es heute darum wie ihr euren Code Verkleinern/Optimieren verschönern könnt.
    Ich werde dabei einige Methoden zusammenfassen.


    Fangen wir doch mal an...



    Abfragen ob eine Variable auf 0 oder höher als 0 ist
    Wir haben eine Variable/PVar oder wir fragen ganz einfach was aus ner Datenbank ab.
    Wollen wir nun überprüfen ob diese Variable auf 0 ist würden wir das ganze so abfragen:


    if(Variable[Blubb] == 0)


    Doch das geht auch kürzer:


    if(!Variable[Blubb])
    Dies bedeutet ganz einfach: Wenn die variable nicht (Dafür das Ausrufezeichen) höher als 0 ist.
    Doch wie wenn wir abfragen wollen ob sie 1 oder höher ist?
    Normalerweise würden wir das so tun:


    if(Variable[Blubb] == 1)


    Doch auch das geht kürzer, einfach das Ausrufezeichen weglassen:
    if(Variable[Blubb])
    {
    }
    Und schon weiss das Script -> Ist die variable 1 oder höher, soll ich das ausführen was in den Klammern steht.
    Wait... Klammern? Wer brauch die schon! Wobei wir beim nächsten Thema wären.


    Keine Klammern bei if benötigt wenns nur eine Anweisung gibt


    Selbst wenn nur eine Anweisung nach einem if kommt würden einige das so schreiben:
    if(Health => 50.0)
    {
    SendClientMessage(playerid, color, "Du hast mehr als 50 Hp!");
    }


    Da wir aber wie gesagt nur eine Anweisung haben gehts auch wesentlich einfacher...
    Nämlich:
    if(Health => 50.0)
    SendClientMessage(playerid, color, "Du hast mehr als 50 Hp!");
    Einrücken ist natürlich von Vorteil!


    Da es aber nur für eine Anweisung gilt, klappt das ganz gut, mit mehreren allerdings nicht (Danke nochmal an den lieben BlackAce für die Erläuterung!)



    sizeof Blubb statt sizeof(blubb)
    Zwar was ganz kleines aber, meiner Meinung nach trotzdem übersichtlicheres.


    Anstatt beispielsweise
    format(str, sizeof(str), "%s", GetPlayerArmour(playerid));
    können wir auch ganz einfach folgendes schreiben:
    format(str, sizeof str, "%s", GetPlayerArmour(playerid));
    Meiner Meinung nach übersichtlicher (Besonders bei Stellen an denen ihr ne Menge Klammern benutzt).



    Ein Clear Befehl? 100x mit Messages zuspammen? nene!


    Was bei vielen Anfängern ein Fehler ist (Wars auch bei mir), ist dass ihr Script relativ viel Leistung auf nem Server zieht.
    Dies kann unter anderem an solch unsauberen Codes liegen.
    Angenommen ihr wollt einen Clear Befehl um den Chat zu "reinigen".
    Man denkt jetzt man sollte einfach 100x SendClientMessageToAll's reinballern.
    Doch erstens zieht das ne Menge Leistung, und auch Platz in eurem Script.


    Man würde jetzt so schreiben:
    ocmd:clear(playerid, params[])
    {
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");
    SendClientMessageToAlL(farbe, "");


    //und immer so weiter


    return 1;
    }


    Auch das geht einfacher und übersichtlicher.
    Ihr erstellt innerhalb einer For Schleife eine Variable die auf 0 ist. Mit jedes Mal Befehl ausführen, ändert sich die variable um 1.
    Wenn die Variable eure maximale Zahl erreicht hat hört die Schleife auf.


    Das sähe dann so aus:
    for(new i=0; //eine Variable wird erstellt die auf 0 ist
    for(new i=0; i < 100; //wird wiederholen den befehl der anschliessend noch kommt sooft bis variable i auf 100 ist (also 100 mal)
    for(new i=0; i < 100; i++) //ii wird jedes mal erhöht bis i auf 100 ist


    //Das hier wäre dann unsere Grundschleife:
    for(new i=0; i < 100; i++)


    //doch nun kommt hintendran bzw untendrunter der Befehl der 100x ausgeführt werden soll bspw:


    for(new i=0; i < 100; i++)
    SendClientMessageToAll(farbe, "");


    Auch hier gilt: Nur eine Anweisung = Keine Klammern benötigt.


    Nun wird SendClientMessageToAll(farbe, ""); 100 mal ausgeführt.
    Eine immense Platzeinsparung, und einen Freudengrund für euren Server.



    Ich hoffe ich konnte euch ein bisschen helfen, und wenn ihr noch weitere Möglichkeiten kennt das Script zu verkleinern/optimieren, immer her damit.


    Mit freundlichen Grüssen.
    PoTTii

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • if(Health => 50.0) return SendClientMessage(playerid, color, "Du hast mehr als 50 Hp!");


    Wenn das jetzt aber in einem Befehl ist und SendClientMessage failt, erscheint dann Server: Unkown Command

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

    Margarete Stokowski


  • Genauso hab ichs ja auch geschrieben, nur mit nem Zeilenumbruch...

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?