Client führt nur letzte Action aus

  • moin,


    habe ein Problem wo ich verwirrt bin.



    In meinem Beispiel Bild seht ihr auf den Feldern 3 Farbige Vierecke.

    Rechts der Listen Server[Host], links der Client[Join].


    Das Viereck in der Mitte Rechts und in der Mitte ganz oben waren beide Blau, beim platzieren der Pinken Karte sollten beide blauen auch Pink werden.

    Der Listen Server macht das auch. Der Client macht nur eine.


    Hier ein Stückl vom Blueprint wo die Farbe geändert wird.




    Aus irgendeinem Grund wird nur die zweite Sequence vom Client ausgeführt.

    Die Mechanik an sich funktioniert.

    Habe auch schon andere plätze ausprobiert um zu schauen ob es vielleicht an dem Platz liegt, aber es ist immer so das nur der letzte zweig der Sequence gemacht wird.



    Habe schon folgende Sachen ausgeschlossen:

    Fehlende Daten, wie das Material, Integer, etc.

    Das die "Flip or not Flip" Node nicht abgerufen wird für den ersten Eintrag.

    Die Sequence entfernt und die Nodes hintereinander gesetzt.

    RPC Fehler, Replication Fehler.



    Was ich halt nicht verstehe ist das es ja scheinbar funktioniert aber der Client eben nur den letzten macht.

    Was ich auch nicht verstehe ist, das wenn ich schaue welche Materialen die Vierecke haben, nachdem sie eigentlich gewechselt sind, haben sie auch die richtige Material, es wird scheinbar nur nicht angezeigt.

  • Meinst du mit dem letzten Satz, dass der Client eigentlich die richtigen Informationen erhalten hat? Kannst du das vielleicht mal beim debugen oder auch Print oder so, verifizieren, wann der Client dann die Daten bekommt, bzw. was er danach damit macht?


    Hast du etwas weiter unten vielleicht noch Events, die ausgeführt werden müssen? Da hilft dir dann vielleicht die Node "Flush Events" weiter. Ein Flush Events verhindert, dass Events im Cashe landen und führt diese dann sofort aus.


    Ich bin zwar noch nicht so weit mit meinen Projekten, dass ich da auch Multiplayer gehen kann, aber ich weiß, dass ganz früher, als ich mal C gelernt habe, beim Senden von Daten, zum Beispiel an einen Drucker usw., das Flush ein ganz wichtiger Bestandteil des Codes war, damit die Daten nicht im Zwischenspeicher hängen blieben und eventuell von der nächsten Anweisung überschrieben wurden, bevor sie gesendet waren.

  • Sind alle Inputs der Funktion valid?
    Ist das GetOverlappingActors->Get(0) wirklich der Actor, den du erwartest?

    Dieser Code ist ziemlich fehleranfällig, und könnte nichtmehr funktionieren wenn du keine Ahnung... einen Baum mit Kollision irgendwo plazierst oder ein character über das Feld läuft <_<

    Ich denke mal in "FlipOrNotFlip" wird die Farbe geändert? Warum rufst du diese funktion zweimal auf? Bezieht es sich auf zwei unterschiedliche overlapping actors / Felder ?

    Ich würde dafür sorgen, das garkeine Fehler passieren können. Schon das benutzen des Klassenfilters by GetOverlappingActors würde es um 50% verbessern ^^

  • Meinst du mit dem letzten Satz, dass der Client eigentlich die richtigen Informationen erhalten hat? Kannst du das vielleicht mal beim debugen oder auch Print oder so, verifizieren, wann der Client dann die Daten bekommt, bzw. was er danach damit macht?


    Hast du etwas weiter unten vielleicht noch Events, die ausgeführt werden müssen? Da hilft dir dann vielleicht die Node "Flush Events" weiter. Ein Flush Events verhindert, dass Events im Cashe landen und führt diese dann sofort aus.


    Ich bin zwar noch nicht so weit mit meinen Projekten, dass ich da auch Multiplayer gehen kann, aber ich weiß, dass ganz früher, als ich mal C gelernt habe, beim Senden von Daten, zum Beispiel an einen Drucker usw., das Flush ein ganz wichtiger Bestandteil des Codes war, damit die Daten nicht im Zwischenspeicher hängen blieben und eventuell von der nächsten Anweisung überschrieben wurden, bevor sie gesendet waren.


    Ja er bekommt die richtigen Daten, beim letzten Event in "Flip or not Flip" sind beide Variablen die ich brauche vorhanden, nur wird "Set Material" nicht ausgeführt.


    Hab das mit dem Flush probiert, aber das hat auch nichts geändert.




    Ja sie sind alle Valid und es ist das was ich erwarte, hab ich beides extra nochmal nachgeschaut.
    Da es auch funktioniert wenn ich nur das eine Feld ändere das vom Client nicht geändert wird, kann da eigentlich auch kein Fehler vorliegen.


    Sowas wie Bäume oder Leute die darüber "Laufen" kann nicht vorkommen da es sowas nicht geben wird. Das einzige was damit in Berührung kommen kann sind die Karten. Habe aber dennoch mal den Class Filter belegt.


    Ja es bezieht sich auf unterschiedliche Felder.
    Der Obere bezieht sich auf das mittlere Oben und der darunter auf das Mittlere rechts. (Ist nicht das was auf dem ersten Bild angezeigt wird, aber die sind alle gleich aufgebaut. (Bis auf die Werte halt, die sind schon angepasst) :D






    Das ist genau das was ich halt so gar nicht verstehe, die Daten sind alle da. Sie werden richtig angegeben. Will ich nur ein Feld wechseln, funktioniert alles, sind es mehrere, immer nur der letzte. Richtig seltsam.

    Falls jemand Interesse hat dann kann er sich das auch gerne mal per Discord oder Teamviewer anschauen.

    Das mein Code nicht der beste ist und sicher einfacher und besser gemacht werden kann, ist mir klar, aber ich bin halt noch am lernen.

  • Habe grade nochmal einen anderen Test probiert.


    Habe nach der letzten Node in "Flip or not Flip" einen Int eingeführt der immer um 1 erhöht wird wenn er ausgeführt wird und den Int dann als Print String ausgegeben.


    Siehe da, der Server gibt einmal 1 und 2 aus, der Client nur 1.

    Also wird es für den Client nur 1 mal ausgeführt.

  • Habe nun eine komplett anderen Weg genommen, neue Triggerboxen, über die Karten anstat über die Felder, komplett andere Code der sogar kürzer und einfacher ist und es passiert genau das selbe wie beim anderen.


    Dieses mal habe ich sowas wie eine Sequence nicht einmal drin.


    Es werden 2 oder mehr Trigger ausgelöst und es wird immer nur einer ausgelöst vom Client...

  • Schwierig zu sagen. Wie gesagt, in anderen Programmiersprachen, außerhalb einer Engine, würde ich halt einfach mal behaupten, dass der Server nur das Endergebnis vor dem Senden abwartet, oder umgekehrt, der Client auf das Ende der Übertragung wartet, wobei dann die erste Information überschrieben übermittelt oder empfangen wird.


    Vielleicht bei jeder Auslösung einfach mal ein Event benutzen, oder einfach mal testweise eine kurze Unterbrechung mit Delay einbauen. Nur um zu testen halt.