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