[MTA] Variablen

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
  • Guten Tag.




    Ich habe folgendes Loginsystem erstellt:











    Jetzt nehmen wir mal als Beispiel die lokale variable PlayerMoney, die ja beim einloggen aus der Datenbank ausgelesen wird.




    Folgende Situtation:




    Spieler1 hat 1000$ in der Datenbank gespeichert. Er loggt sich ein, die Variable "PlayerMoney" hat jetzt den wert 1000, da dieser aus der datenbank ausgelsen wurde.


    Nun loggt sich Spieler2 ein. Spieler2 hat 1500$ in der Datenbank gespeichert. Die Variable PlayerMoney hat jetzt den wert 1500 (oder?), also wurde ja der wert von Spieler 1 Überschrieben.


    So war es aufjedenfall bei SAMP, dort musste man ja mit Arrays arbeiten, z.b. PlayerMoney[MAX_PLAYERS] etc.




    Ich wollte jetzt einfach nur wissen, ob das bei MTA anders ist, ob die Variable "PlayerMoney" wieder überschrieben wird wenn sich ein neuer Spieler einloggt.


    Wenn die Variable überschrieben wird, wir kann ich die Variablen einzigartig für jeden Spieler erstellen?
    Ich weis ist nur eine kleine Frage, aber sehr entscheident für mich. Umsomehr würde es mich freuen wenn ihr antwortet ^^




    MfG

    2 Mal editiert, zuletzt von DexoTronic ()

  • account = getPlayerAccount ( source )


    die beiden spieler loggen sich ja unter einem anderen account ein was die funktion eines arrays gleicht
    sprich quasi schleppt jeder spieler seine eigenen variablen mit sich herum

    you have been Traceured.


  • Nein irgendwie stimmt das nicht so :(


    Ich hatte 650$ Geld, als ich mich eingeloggt hatte.
    Jetzt hatte sich jmd anderes eingeloggt der 800$ hatte, und mein geld war dann auch aufeinmal 800$ :thumbdown:


    Wie mach ich das denn jetzt in MTA? Kann ihr wirklich keiner helfen? ;(
    ich bin echt langsam kurz davor bei MTA aufzugeben :(

  • Da gibt es in MTA eine sehr gute Möglichkeit, soetwas zu speichern:
    Die Element Data.


    Damit kannst du in einem Spieler ( oder Auto / Objekt oder sonst was ) einzelne Daten
    speichern -
    z.b. würde folgender Code im Spieler den Geldbetrag speichern:

    Code
    account = getPlayerAccount ( source ) 
    PlayerMoney = getAccountData ( account, "Money" ) 
    setElementData ( source, "money", PlayerMoney )


    Abgerufen werden könnte es dann mit folgendem:

    Code
    PlayerMoney = getElementData ( player, "money" )
    -- Beispiel: outputChatBox ( "Du hast "..PlayerMoney.." $ Bargeld!", player )


    Dabei ist folgendes zu beachten:
    -Beim Disconnecten eines Spielers wird die ElementData nicht gelöscht -
    d.h. man kann z.b. bei onPlayerQuit noch nachträglich über getElementData
    das Geld des Spielers auslesen und dann speichern.
    -Alle Variabeltypen können gespeichert werden - dabei ist es egal,
    ob String / Int / Float usw.
    -Für weiteres, s.h. MTA-Wiki:
    http://wiki.multitheftauto.com/wiki/SetElementData
    http://wiki.multitheftauto.com/wiki/GetElementData


    Und bevor wieder jemand meint: "Ah das geht doch auch in einer Zeile / Man kann die Variabeln
    doch auch lokal definieren " etc: Das hier soll nur das Prinzip veranschaulichen!!!

    EDIT:


    Achja und es gäbe noch eine zweite ( nicht so einfache Variante :(
    Die _G-Methode, bei der Quasi eine Variabel aus Strings erstellt wird
    ( z.b. die Variabel ZipperMoney, unter der mein Geld gespeichert würde).


    Sähe dann so aus:

    Code
    account = getPlayerAccount ( source ) 
    PlayerMoney = getAccountData ( account, "Money" ) 
    pname = getPlayerName ( source )
    _G[pname.."Money"] = PlayerMoney


    Würde dann aus dem String pname ( der in meinem Fall "Zipper" ( String ) und dem String "Money" eine
    Variabel erstellen und sie mit dem Wert PlayerMoney belegen.


    Und ließe sich wie eine normale Variabel verwenden.