Probleme bei GUI aktualisierung!

  • Also ich habe schon seit einiger Zeit das Problem dass, wenn ich z.B ein Atm-System mache wo man seinen Kontostand sehen kann, und 2 Spieler dieses Atm Gui geöffnet haben, und ein Spieler was einzahlt oder abhebt.
    Denn soll ja der Kontostand aktualisiert werden und auf den richtigen wert gebracht werden.
    Aber bei mir ist es immer so das sich nun der Kontostand(Wert) für beide Spieler ändert :(
    Also Spieler 1 hat 100$ und Spieler 2 hat 200$ wenn jetzt beide das Gui geöffnet haben und Spieler 1, 100$ abhebt, hat Spieler 1 einen Kontostand von 0$ aber jetzt das Problem Spieler 2 hat nun ebenfalls 0$ bis er das Gui schließt und wieder öffnet denn hat er wieder 200$.


    Also ich hoffe das reicht, hab versucht mein Problem so genau wie möglich zu schildern aber das ist schwer zu erklären.
    Wenn nicht versuch ich es mit Code und Bildern.
    Also wäre wie immer dankbar für Hilfe! :D

  • Also ich glaube hier hätte ich das Problem aber ich weiß es nicht, habe keinen zweiten Spieler.



    Lua: test_server.lua
    addCommandHandler("konto", function(playerSource)
    	local testPlayerMoney = getPlayerMoney(playerSource)
    	triggerClientEvent(playerSource, "openGui", getRootElement(), testPlayerMoney)
    end)
  • Hier passiert nichts mit abheben oder einzahlen, falscher oder unvollständiger Code.


    Ich bin mir aber schon recht sicher, was passiert:
    Das Element, was du als 1. Argument in triggerClientEvent benutzt, ist nil.
    Daher wird (weil es der Standard-Wert ist) root genutzt, also an alle gesendet.
    Wahrscheinlich denkst du der Spieler wird automatisch als 1. Argument (o.ä.) gesendet (wie bei addCommandHandler), was aber nicht der Fall ist.
    Stattdessen musst du client nutzen.

  • Mhm das oben genannte Atm-System war nur ein Bsp.
    Ich habe das Script nicht mehr, deswegen hab ich schnell was leichtes und ähnliches gemacht.
    Und ich weiß nicht ob ich dich falsch verstehe oder einfach zu dumm dafür bin aber playerSource ist doch im diesen fall nicht nil, es ist das Player-Element welches den Command ausgeführt hat oder nicht ?

  • Mhm das oben genannte Atm-System war nur ein Bsp.
    Ich habe das Script nicht mehr, deswegen hab ich schnell was leichtes und ähnliches gemacht.
    Und ich weiß nicht ob ich dich falsch verstehe oder einfach zu dumm dafür bin aber playerSource ist doch im diesen fall nicht nil, es ist das Player-Element welches den Command ausgeführt hat oder nicht ?

    Beispiel hat aber nichts mit dem Fehler-Script zu tun ...


    Ich habe nicht von addCommandHandler geredet, sondern triggerServerEvent und addEventHandler (@server).
    Mit sehr hoher Wahrscheinlichkeit tritt eben das Problem ein, dass du nil als 1. Argument in triggerClientEvent (mit dem Event zum Aktualisieren) nutzt.
    Dabei ist die Ursache mit hoher Wahrscheinlichkeit, dass du ein Denkfehler bei triggerServerEvent hast und serverseitig statt client irgendwie versuchst einen nicht mitgegebenen Parameter zu nutzen, sodass da nil benutzt wird und daher automatisch root genutzt wird.


    Rede aber nur von Wahrscheinlichkeiten, weil ich eben den Code nicht kenne.
    Poste also den passenden Code zum Fehler, ansonsten kann man dir keine zu 100% sichere Antwort geben.

  • Nein das erste Argument bei triggerClientEvent ist nicht nil, das habe ich mit outputChatBox überprüft es ist das PlayerElement von demjenigen der den Command benutzt hat.
    Und ich glaube du verstehst mich falsch das Problem ist nicht irgendein Script es ist ein Fehler den ich immer und immer wieder mache und bei dem ich nicht begreife wie ich diesen umgehe.
    Und ich hab auch kein Script.
    Ich nenne einfach mal ein weiteres Bsp.
    Weil ich das Gefühl habe ich werde missverstanden, tut mir leid wenn das nicht der Fall ist.
    Also ich habe ein LoginPanel welches nach dem Login geschlossen wird.
    Spieler1 und 2 joinen dem Server und wollen sich einloggen.
    Spieler1 ist schneller als Spieler2.
    Das Loginfenster schließt sich für beide, obwohl Spieler2 noch gar nicht eingeloggt ist.
    Währendessen kann Spieler1 draus los spielen, und Spieler2 sitzt mit nem Blackscreen das weil er sich nicht einloggen konnte da das Fenster vorher verschwunden ist.

  • Nein, DU verstehst mich nicht.
    Ich verstehe ganz genau, was du meinst, brauchst es nicht zig mal zu wiederholen.


    "Ich habe nicht von addCommandHandler geredet, sondern triggerServerEvent und addEventHandler (@server)."
    Was bedeutet das für dich?
    Willst du nicht verstehen, dass es NICHT um deinen Command von oben geht?


    Alle Beispiele, die du genannt hast (ohne Code, eben nur Beispiele), sind:
    triggerServerEvent -> triggerClientEvent | client -> server -> client
    Und ich bin mir zu 99% sicher, dass es daran liegt, dass du da bei triggerServerEvent und addEventHandler (@server) einen Denkfehler hast und bei diesem triggerClientEvent als 1. Argument eine nicht existierende Variable/leere Variable, also nil, verwendest.
    Daher wird das Event an ALLE Spieler gesendet.


    Also zeige ein Beispiel-Code, wo dieser Fehler passiert.
    Dann kann ich dir am Code zeigen, wie der Fehler zustande kommt, denn anscheinend wirst du das aus meinen Texten nicht verstehen können.

  • Ich habe mein AtmScript wiedergefunden.
    Also wie gesagt, es tut mir leid wenn ich das echt nicht verstehe, ich gebe mein bestes auch wenn das nicht viel sein mag.


  • Ist ja kein Problem, nur am besten immer Code mit posten.


    Also ich hatte zu 99% mit einem Denkfehler gerechnet, aber die 1% Wahrscheinlichkeit ist einfach aufgetreten.
    Nach deinem ersten Code-Beispiel, wo du "playerSource" als 1. Argument genutzt hast, hätte ich kaum erwartet, dass du triggerClientEvent ohne Element als 1. Argument nutzt.
    Dann ist es doch kein Wunder, dass das Event an alle gesendet wird.


    Lua
    --[[ hat geklappt ]]
    triggerClientEvent(playerSource, "openGui", getRootElement(), testPlayerMoney)
    
    
    --[[ hat nicht geklappt ]]
    triggerClientEvent("refreshKontostand", getRootElement(), newKontostand)

    Schon sehr eigenartig, dass du das nicht bemerkt hast.
    Der zweite triggerClientEvent sendet "refreshKontostand" mit dem Geld an alle Spieler.

Jetzt mitmachen!

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