Replication

  • Hallöle,

    leute ich raffe einfach nicht was ich hier falsch mache. Mein Event Spawn Trap wird vom Server Perfekt gespawnt und auf dem Client gereplicated. Nur das vom Client platzierte wird ums verrecken nicht an den Server weiter geleitet. Ich dachte schon ich wäre ganz schlau und lasse einfach ein Event "RunOnServer" laufen vom Client aus...Aber nööö :D

    Habe schon so viele Varianten ausprobiert...

    Ich denke was ich brauche ist ein "RunOnServer" und das wiederum muss der Server auch Spawnen (So denke ich das verstanden zu haben)


  • Was dein Problem sein wird, ist, dass du bei den Events direkt noch die Daten mit schicken musst, sonst passiert da nicht viel ^^


    So hab ich es beim Gebäude-Bau gemacht:


    Wenn du das nicht machst, könnt ich mir gut vorstellen, dass deine "Trap" einfach nur bei 0,0,0 spawnt ^^



    Evtl. brauchst du vorher auch noch das:


    Frag mich aber nicht, wieso man das mal braucht und mal nicht, hab ich noch nicht rausgefunden...


    Bei True kommt der Call zum Multicast- und bei False, der Call zum Server-Event

  • Hallo zusammen


    Du kannst kein Multicast effektiv vom Client her aufrufen. Wenn du das tust, wird es nur lokal auf dem Client ausgeführt. Um es auszuführen brauchst du Authority. Deswegen nutzt Geloscht auch das Gate.

    Wenn du aber einen Actor replicaten willst brauchst du aber ohnehin kein Multicast. Du musst lediglich den Actor auf replicated setzen und die Spawn Methode auf dem Server von einem Actor mit Owning Connection her aufrufen. Das Objekt wird dann auf dem Server gespawnt und an alle Client replicated.


    Gruss

  • Also der Client kann ohne Probleme mit der "Has Authority" Node meine Traps Spawnen, der Server übrigens kann es auch ohne Probleme. Nur werden die Aktionen vom Client nicht auf dem Server Hochgeladen. Ich kann Spawnen was ich will, der Server sieht es nicht. Was der Server Spawnt kann der Client ohne Probleme sehen.



    Das BP steht selbstverständlich auf "Component Replicates".


  • Du vergisst diesmal aber auch komplett das Replication...


    Was der Server sieht, sieht logischerweise auch der Client (sofern der Actor replicated ist), was der Client sieht, sieht jedoch nur der Client, wenn es nur beim Client gespawnt wird, da es nie aufm Server landet ^^

  • Zunächst mal musst du das machen mit dem Argument von Geloscht sonst weiss der Server nicht wohin.

    Weiter kann der Client nichts auf den Server "hochladen". Es ist eher so, dass der Client den Server bittet irgendetwas zu tun.

    Das ist aus Cheatprotection Gründen so. Du brauchst weder den Mutlicast, noch den Authorithy switch und auch component replicates brauchst du vermutlich nicht. Im Grunde ist es realtiv einfach.

    Lediglich Replicates muss beim Actor gesetzt sein, und das hast du ja richtig aktiviert.

    Jetzt brauchst du nur noch ein Event RunOnServer mit einem Location Argument welches dann dein Objekt spawnt.


    Gruss

  • Du vergisst diesmal aber auch komplett das Replication...


    Was der Server sieht, sieht logischerweise auch der Client (sofern der Actor replicated ist), was der Client sieht, sieht jedoch nur der Client, wenn es nur beim Client gespawnt wird, da es nie aufm Server landet ^^

    Ich dachte mit "RunOnServer" gebe ich dem bescheid das der Server meine Trap Spawnen soll



    Jetzt brauchst du nur noch ein Event RunOnServer mit einem Location Argument welches dann dein Objekt spawnt.

    Das mit dem Location Argument geht mir nicht so ganz herein^^ Wie bzw wo er Spawnen soll setzte ich in der function.



    Finde diese ganze Multiplayer Geschichte wirklich merkwürdig. Nun kann mein Client nicht mal ein Widget ein / aus schalten mittels "Set Visibility" (Was der Server natürlich kann) Hoffe sehr das ganze bald zu verstehen


    Hier nochmal ein Screen mit meinem Verständnis der Replication




    Nicht verzweifeln Jungs. Ihr Helft mir hier unheimlich weiter. Bald haben wir es^^

    • Hilfreich

    "1" Brauchst nicht (und selbst wenn du es brauchen solltest, muss es hinterm Server-Event liegen und somit vom Server "gecalled" werden).

    "2" Gibt die Location weiter, es bringt nichts, wenn die Location erst in 3 liegt, denn dann hat der Server keine Ahnung davon ^^


    "3" Die Function musst vor dem Server Event ausführen, da der Server ja bereits wissen muss wo gespawnt werden soll und nicht auf Basis seiner eigenen Variablen, das ganze durchrechnen darf.


    Beispiel: In der Function wird die Location zum spawnen, per Actor-Location berechnet, dann nimmt der Server seine eigene Actor-Location und spawnt das Zeug...

    Du willst aber, dass der Server das Zeug auf Basis der Actor-Location des Clients spawnt.




    Machs mal so:

    Alle Variablen die du zum spawnen brauchst, gehören in das Server-Event und müssen so weiter gegeben werden ^^


    "4" Da soll besser Phoenix-100 antworten, der hat scheinbar mehr Ahnung als ich.

  • Ich danke euch beiden so sehr :D

    Habe es nun endlich geschafft dank euer Hilfe. Habe es nun wie Geloscht gesagt hat gemacht. Ich Übermittel dem Server direkt was er machen soll und nicht erst in der function. Habe zuerst nicht verstanden wieso das so gemacht wird/gemacht werden muss. Jetzt gebe ich meinem Custom Event "ServerSpawnTrap" direkt die richtigen Informationen mit. Eigentlich total logisch so ^^



    KussAufDieNuss Jungs^^ Danke

  • Eigentlich total logisch so ^^

    Hat bei mir am Anfang auch ne Weile gedauert und einige Stunden an Tests verschlungen, bis ich das endlich kapiert hab...

    Aber wenn man es dann endlich raus hat, fühlt man sich fast unsterblich und dass man alles hin kriegt ^^

    Multiplayer war für mich so ziemlich das schwierigste, was ich mir vorstellen konnte, hehe