[Tutorial][Beispiel]Wie umgehe ich set / getElementData?

  • Hallo,

    Ich habe in meinem Script nun das Thema durch wie ich am besten Spielerdaten zwischenspeichere ohne diese
    per set und getElementData zu setzen.

    Hierzu gibt es natürlich viele möglichkeiten und die Meinungen werden natürlich auch in verschiedenen Richtungen gehen.

    Die Schwierigkeit dieses Tutorials ist je nach wissensstand einzuteilen.
    Anfänger sollten villeicht die Finger hiervon lassen.

    Inhalt:

    • Was nutze ich?
    • Vor / Nachteile von set / getElementData und warum ich diese vermeiden sollte.
    • Vor / Nachteile meines Systems.
    • Struktur
    • Arbeitsweise

    Was nutze ich:

    - Ich nutze einen zwischen und einen entgültigen Speicher, der entgültige Speicher wäre meine Mysql Datenbank.
    Der zwischenspeicher wäre eine Serverseitige Tabelle.
    - Einen Mta-Server.
    - Einen belieben Code Editor.

    Vor / Nachteile von set / getElementData und warum ich diese vermeiden sollte:

    Vorteile:
    - Daten werden nicht mit dem Clienten Syncronisiert (Verhindert das ändern der ElementData per Modified Clients)

    Nachteile:
    - Daten vom Spieler können nur Serverseitig verwendet werden.

    Warum vermeiden:
    - Wie schon erwähnt wird set / getElementData Client sowie Serverseitig Syncronisiert und somit sind diese Manipulierbar.
    genauere Infos zu dem gibt es in einem beitrag von: @Zipper Hier

    Struktur:

    1. Sobald der Spieler sich registriert oder Einloggt, werden alle Daten vom Spieler aus der Datenbank gezogen.

    Diese setze ich dann mit einer Vorschleife in meine Globale Serverseitige Tabelle.

    Das kann wie folgt aussehen:


    in meinem fall habe ich 2 Tabellen aus der Mysql in einem Query zusammengeführt, das Ergebniss wurde dann mit einer Vorschleife
    in meine Tabelle gespeichert.

    Als Key habe ich den Spielernamen genommen.

    die Tabellenstruktur würde dann wie folgt aussehen:

    Code
    playerDataStorage = {
    	["Spieler1"] = {Geld=5000, admin=1, polizist=1},
    	["Spieler2"] = {Geld=15000, admin=0, polizist=1},
    }


    jenachdem was in euren Tabellen drin steht kann sich das natürlich ändern!

    Arbeitsweise:

    jetzt habe ich die möglichkeit die Daten vom Spieler Serverseitig abzufragen oder eben zu ändern.
    Nehmen wir mal das Beispiel von Oben.

    Folgendes Szenario: Der Spieler gibt den Behfel: /admin ein um das Adminfenster zu öffnen.
    Jetzt wollen wir natürlich wissen ob dieser Spieler wirklich ein Admin ist.

    Das sieht dann ungefair so aus:

    Clientseitig:

    Lua
    addCommandHandler("admin", function()
    	triggerServerEvent("check:Adminstatus", localPlayer, localPlayer)
    end)


    Der Spieler führt wie ich schon sagte den Befehl /admin aus, somit wird nun ein Event zum Server Getriggert.

    Server:


    Sollte der Spieler nun den Admin status 1 haben wird das Admin menü geöffnet, in dem fall sollte man beim triggern vom client Event nicht source verwenden sondern
    client, weswegen das so ist steht im Wiki.

    Das wäre der Ablauf um daten zu checken, wollt ihr nun etwas ändern müsstest ihr

    playerDataStorage[playername].admin == 1

    zu dem ändern:

    playerDataStorage[playername].admin = 0

    sollte der Spieler nun vom Server gehen wollen wir ihn nicht mehr in der Tabelle haben und somit machen wir dann das:

    playerDataStorage[playername] = nil

    Fazit:

    solang ihr keinerlei Daten aus der Tabelle mit dem Clienten Syncronisiert sollte da keiner was manipulieren können.

    Credits:

    SQL Syntax zur zusammenführung der beiden tabellen ist durch @Bonus und durch @Jusonex enstanden.
    Die vorschleife um die Tabelle zu befüllen ist durch @Bonus enstanden.

    Ich hoffe das ich hiermit etwas helfen konnte.

    //EDIT:

    Danke @XeroX

    Habe clientseitig den Spieler übertragen und server seitig den Spielernamen und die Serial mit dem Eintrag in der Tabelle verglichen um sicher zu gehen das es auch wirklich der Spieler ist.

    Github: Github

    Einmal editiert, zuletzt von Zuck3rFr3i (17. September 2016 um 15:25)

  • Dieses Thema enthält 16 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!