Beiträge von Str1ker

    Hallo,


    in den letzten Wochen ist mir immer mehr aufgefallen, wie kompliziert einige Forumnutzer ihren Code schreiben, obwohl es auch leichter und schneller geht.

    Sicherlich wird es in diesem Forum einige geben, welche von diesen Shortcuts noch nichts wussten, zumindest denke ich so. Daher wird dies euch von Vorteil sein.

    Außerdem wird auch noch über die ressourcensparende Tipps und Tricks am Ende gesprochen, welche nützlich und interessant sein dürften.


    Ignorieren von Klammern

    Ein kleiner Trick, welcher euch 2 Zeichen sparen kann. Sicherlich ist dieser relativ vielen unbekannt und man wird es kaum glauben - aber es funktioniert.

    Dabei muss beachtet werden, dass der Trick vorausgesetzt nur dann angewendet werden kann, wenn die Anzahl der übergebenen Argumente < 1 ist und es sich um eine Tabelle (array) oder Zeichenkette (string) handelt.


    Aus folgendem Snippet

    Lua: Example 1
    function greet_client(name)
        if (type(name) == "string") then print(name) end
    end
    greet_client("User_14513")

    wird dementsprechend

    Lua: Example 2
    function greet_client(name)
        if (type(name) == "string") then print(name) end
    end
    greet_client"User_14513" -- Bitte genauer darauf achten - das ist kein Tippfehler.


    Singuläre Checks

    Als "Singuläre Checks" (auf Englisch: "Singular Checks") bezeichnet man in der Programmierung das Verkürzen von einer gesamten Abfrage in einen einzeiligen Code.

    Sobald die Bedingung bzw. der "Check" wahr ist, wird der Wert von someVar dem zugewiesen, was auch immer der Wert nach dem and-Operator ist.

    Wenn dieser dann falsch bzw. = null ist, wird der Wert nach dem or-Operator zugewiesen.


    Aus folgendem Snippet

    Lua: Example 1
    local condition = "true"
    local var = "Check steht aus"
    if (condition == "true") then
        var = "Erfolg"
    else
        var = "Fehlgeschlagen"
    end

    wird dementsprechend

    Lua: Example 2
    local condition = "true"
    local var = (condition == "true") and "Erfolg" or "Fehlgeschlagen"


    Named Arguments

    Folgendes Beispiel ist vielen Anfängern aber auch Fortgeschrittenen unbekannt.

    Als "Named Arguments" bezeichnet man eine Möglichkeit, bei der die Funktion statt individuellen und separaten Argumenten, "abgespeicherte" Argumente verwendet.

    Ein guter Weg, um unwichtige Parameter nicht übergeben zu müssen und sie auszulassen. Außerdem spart es wieder Code.

    Lua: Example 1
    function print_specs(computer)
        print(computer.Name)
        print(computer.RAM)
        print(computer.Age)
    end
    print_specs{Name = "Computer-41451", RAM = "8 GB", Age = 2}

    Snippet 2 zeigt, dass man Parameter, welche mittendrin eigentlich gesetzt werden müssten, ausgelassen werden.

    Lua: Example 2
    function print_specs(computer)
        print(computer.Name)
        print(computer.RAM)
        print(computer.Age)
    end
    print_specs{Name = "Computer-41451", Age = 2}

    statt

    Lua: Example 3
    function print_specs(name, ram, age)
        print(name)
        print(ram)
        print(age)
    end
    print_specs("Computer-41451", nil, 2)


    Save performance and localize!

    Wer im letzten Abschnitt "Named Arguments" richtig auf den Code geachtet hat, sollte bemerkt haben, dass bei Example 1 & 2 auch der Teil von "Ignorieren von Klammern" (auf Englisch: "Ignore Parenthesis") verwendet wurde.

    Es sollte für die meisten im Eigentlichen nicht allzu schwer sein, Locals zu nutzen. more characters !== less speed - das sollte damit klar gestellt werden.

    Vielleicht mag es extrem dargestellt sein, wenn man sagt, dass man es darauf anlegen möchte, den Computer oder Server völlig auf seine Grenzen zu bringen.

    Da die folgenden Tests sich nur auf mathematische Funktionen beziehen, ist mir aktuell unklar, ob das nur auf diese und nicht andere zutreffend ist.

    Allerdings ist das auch erwähnenswert, daher seht ihr nun ein Beispiel, in der ungefähr ~30% der Geschwindigkeit durch diese Kleinigkeit gespart wird.

    Lua: Example 1
    for i = 1, 1000000 do
        local x = math.sin(i)
    end

    ist deutlich langsamer (~30%) als

    Lua: Example 2
    local sin = math.sin
    for i = 1, 1000000 do
        local x = sin(i)
    end


    Save performance - Tabelleneinträge hinzufügen - table.insert() vs. [ ]

    Lua: Example 1
    local tinsert = table.insert
    for i = 1, 1000000 do
    tinsert(a, i)
    end
    Lua: Example 2
    for i = 1, 1000000 do
        a[i] = i
    end
    Lua: Example 3
    for i = 1, 1000000 do
        a[#a+1] = i
    end
    Lua: Example 4
    local count = 1
    for i = 1, 1000000 do
        d[count] = i
        count = count+1
    end


    Resultate:

    table.insert: 1.250 (727%)

    a[i]: 0.172 (100%)

    a[#a+1] = x: 0.453 (263%)

    a[count++] = x: 0.203 (118%)


    Schlussfolgerung:

    table.insert ist sehr langsam (!) und sollte im besten Fall nicht verwendet werden. Es bietet sich stattdessen an, an einer anderen Stelle abzuspeichern und dann a[count+1] = x zu nutzen.



    Selbstverständlich hoffe ich, dass dieses Tutorial einigen Forumnutzern die Möglichkeiten im Bezug zu "Ease your code" näher gebracht hat.

    Der performance-technische Teil wird höchstwahrscheinlich die wenigsten interessiert haben, allerdings ist dieser trotzdem interessant, wenn man seinen Code möglichst ressourcensparend halten möchte.

    Bezüglich des Tutorials wird in naher Zukunft eventuell noch mehr hinzugefügt, dennoch sollten sich unter den Lesern einige finden, bei welchen die gezeigten Tricks direkt Anklang gefunden haben.

    Falls Grammatik-, Tipp & Text- oder Logikfehler zu finden sind, kann man diese mir gerne melden.


    Vielen Dank für eure Aufmerksamkeit und nehmt davon etwas mit,

    - Str1ker

    hm...


    mit dem Namen Gast und deiner Schreibweise hast du dich offiziell self-busted

    Warum bemerkt keiner hier, dass getLocalPlayer !== getLocalPlayer() ist?

    Lua
    function isPedAiming ( ped )
    if getLocalPlayer() then
    return getPedControlState ( ped, "aim_weapon" )
    else
    return getPedControlState ( ped, "aim_weapon" )
    end
    return false
    end

    So ist es richtig.

    Was hat das denn mit Reue zutun, wenn du mir hier was versuchst unter zuschieben was ich gar nicht gemacht habe und mein Post Bezüglich Sli sollte man nicht so ernst nehmen.
    Dann könnte man jeden hier für irgendeine Scheiße dran kriegen. Wenn ich ernst fronte, dann nicht öffentlich. Gerade du solltest das wissen lieber Final

    Es ist faktisch gesehen klar, dass du lügst, selbst dennis hat das bereits bewiesen. Der Post gegenüber Sli war sehr wohl ernst genommen - und falls nicht, solltest du darauf achten, wie du etwas rüber bringst. Du hast dich in letzter Zeit hier wirklich unbeliebt gemacht, das scheint dir nicht aufzufallen. Das ist das, worauf ich dich hinweisen möchte. Zudem sollte klar erkennbar sein, dass das Wort Reue ironisch verwendet wurde. Ich meine - wer schreibt denn sowas ernst gemeint?


    Lern daraus oder bleib halt in deiner Fantasiewelt.


    /EDIT MegaThorx


    Der Haken bei "Editierhinweis anzeigen" ist by default nicht gesetzt. "Es gibt ältere Vesrionen dieses Beitrags" ist nur für Moderatoren sichtbar.

    Komm jetzt schiebt hier mal nicht die Welle als hätte ich hier jemanden umgelegt. Wollte der Com nur nen gefallen tun, das Lars das irgendwo gesnackt hat kann ich ja nicht riechen.
    Is jut jetz

    Wieso lügst du mit dem Edithinweis z.B?

    Ouh... ein Moderator der ein "Selfmade" mit der unbefugten Verwendung der vRP Basis releast, dafür die Lobe abdankt für die GUI Class, Beiträge für Offtopic anderer löscht, aber sich nicht an die eigene Nase fässt, im Smalltalk lügt, nicht argumentativ vorangehen kann und Behauptungen wie "Ich hab recht und Schluss damit" macht. Beiträge editiert nachdem ihm diese zu peinlich wurden und seine eigenen Rechte in Frage stellt und zu aller letzt User belügt um dann auch noch von Doneasty nach meiner These den Gnadenstoß zu bekommen.


    Das MTA Forum in seiner reinsten Form, 2020.

    Explizit geht es hier darum, dass die Klasse sehr der von vRP ähnelt und hier der Lob abgedankt wird von jemandem, der nicht der Contributor ist.
    Offensichtlich müsste, falls es stimmen sollte, dass du die Klasse von Lars erhalten hast, Lars den Code von jemandem aus dem vRP Team bekommen haben, insofern er selbst nie an vRP beteiligt war.


    Strobe müsste dir eigentlich schon genug Material vorgezeigt haben, um beweisen zu können, dass der Ursprung davon vRP ist. Eine Erwähnung wäre daher denke ich ganz angebracht.


    Allerdings ist das ganze nun aber auch halb so schlimm, die Beteiligten sollten alt genug sein, um die Verwendung der Klasse als eine Art Kompliment zu sehen.



    Das geilste Login Panel evar - kann mich gar nicht einloggen da ich mein Passwort nicht eingeben kann.

    Hauptsache bei der Registration nicht nach der Passwort-Länge abfragen, aber beim Login. :D


    Keine 10 Sekunden Recherche und einem fällt auf, dass die Servervorstellung von Vio Reallife geklaut ist. Mal an euch die Frage gestellt, wen wollt ihr hier vorstellen? Euch, oder doch Vio?


    Zudem denke ich, dass die Aussage, "eXos behinderter Sohn" von unserem Ganglead d3nNizZ eigentlich sogar ziemlich zutreffend wirkt, nach all dem, was wir hier lesen mussten.


    Egal ob Berichte schreiben, Events veranstalten oder Hochzeiten planen - die Liberty Tree Redaktion, kurz LTR, übernimmt den Journalismus auf ganz eTo Reallife. Gemeinsam im Team werden sowohl große Events als auch kleine Events geplant und anschließend für die Userschaft auf Vio Reallife gehalten.


    Denke, das hat sich somit bestätigt.

    Drama as usual. Irgendwas passiert und es wird mit gerichtsklagen gedroht. Ernsthaft, wer vor gericht geht und damit auch durchkommt/gewinnt, thumbs up. Dann hat derjenige mein respekt. Bezweifel aber dass unsere gerichte sich mit so einem "quatsch" abfinden werden.

    Als Quatsch würde ich das an der Stelle nicht abstempeln. Uns geht es eher um die zahlreichen Spieler, welche eventuell auch auf anderen Servern gespielt haben. Eventuell knackt der ein oder andere das Passwort von einem Spieler, was absolut nicht schwer sein sollte, da wir eine sicherere Passwortverschlüsselungsmethode erst einige Tage nach Release eingefügt haben.


    Da nicht gerade wenige Spieler in unserer Database existieren, ist es wahrscheinlich, dass irgendjemand auf die Idee kommt und so sich bei vielen Leuten Zugang auf deren Email bei selbigen Passwörtern verschafft. Das könnte im schlimmsten Fall so enden, dass man Zugriff auf alle Medien und Konten verliert.


    Vor Gericht würde es sowieso nicht interessieren, um was für ein Projekt es geht. Im Gerichtsverfahren geht es nur um den Tatbestand, der daraus besteht, dass private Daten, mit denen man eigentlich ziemlich viel Schaden anrichten kann, published wurden.


    Gerade Server wie eXo und Vio können in nächster Zeit von Accountdiebstahl oder Hacking, wenn man das so nennen kann, betroffen sein.


    Abschließend kann man sagen, dass wir uns auch schon mit einer Person aus dem eXo Team zusammengefunden haben, der das dann zu einer Teambesprechung bei ihnen dort anspricht. Welch ein Ergebnis das dann mit sich führt, wird sich zeigen.


    Ansonsten wird Xendom auch noch mit einem Global Ban rechnen können. Der Kontakt zu MTA Developern wird eventuell heute noch aufgebaut.

    In unseren Reihen wurde bereits ausdiskutiert, ob man das nicht vor Gericht bringen sollte. Gestern hatten wir mitten in der Nacht eine spontane Communitysitzung um kurz alle aufzuklären. In dieser wurde gefragt, ob jemand gerne vor Gericht gehen möchte oder nicht. Die wenigsten fanden das zwar wirklich schlimm, dennoch wird mit hoher Wahrscheinlichkeit heute dagegen gewirkt mit einer Anzeige seitens der Projektleitung, da dies ein sehr starker Verstoß gegen die DSGVO ist und er sich somit strafbar gemacht hat.


    In erster Linie wollen wir es erstmal ohne einer NDA versuchen, weil wir eigentlich alle sehr gut zusammen arbeiten können. Anhand von sehr guten Servern wie eXo Reallife sieht man auch, dass es dort ohne solch eines Vertrags funktioniert. Das weiß ich, weil ich einen guten Bezug zu zwei Developern dort habe. Daran möchten wir uns ein Beispiel nehmen.