Beiträge von Phoenix-100

    Gut, mal eine vorläufige Lösung bevor wir zur richtigen kommen.



    Also, das ist der PlayerController. Wenn ich X drücke soll die Türe geöffnet werden. Vorläufig soll einfach die eine Tür in der Scene geöffnet werden (schau das du nur eine in der Scene hast oder wähle sie per Tag aus).
    Das Event habe ich Server genannt. Es ist On Server. Tür öffnen ist mein Event im Tür Blueprint, also das Event das du vorhin dort erstellt hast und auf nicht repliacted gesetzt hast.

    Also den Fehler den ich meine ist no owning Connection. Wir müssen das also so definieren, das ein Actor mit owning Connection das Event auf dem Server ausführt.
    Jetzt können wir einfach "Set Owner" machen bei der Tür. Macht aber wenig Sinn, die Türe gehört ja nicht einem Spieler.


    Jetzt könnten wir das Problem auch einfach lösen indem wir das Event, dass du in der Türe hast auf not Repliacted setzen und dieses Event von ausserhalb, dem PlayerController aufrufen.
    Damit das funktioniert müssen wir einen PlayerController erstellen, weisst du wie das geht bzw. hast du schon einen eigenen erstellt?

    Hallo
    Ich vermute den Grund für dieses Verhalten darin, dass du bei Client1, bei ListenServer als Server spielst.


    Etwas genauer:
    Der Server behält sich die Autorität über die Replicated Objekte. Das bedeutet, wenn du nun die Replicated Türe auf dem Server bewegst, bewegt Sie sich auch entsprechend auf den Clients, wie du es beschreibst funktioniert das ja.
    Wenn du das aber auf Client 2+ machst, geht das nicht mehr, weil er nur der Client ist somit nur die lokale Kopie bewegt. Du musst die Türe also auf dem Server bewegen, der das "echte" Objekt besitzt, nicht auf dem Client.
    Wie machst du das?
    Du erstellst ein Custom Event. Bei diesem kannst du einstellen wo es ausgeführt wird. Du willst hier "Run on Server", damit es auf dem Server ausgeführt wird.


    Gruss

    Hallo Timer


    ApplyDamage dient wirklich nur, nunja, um Schaden zuzufügen. Was das genau heisst musst du selbst definieren. Meiner Meinung brauchst du immernoch eine Variable mit Leben. Meinst du bei Fragen 1. ein komplettes System oder wie?


    Zu Frage 1.
    Alles was von der Actor Klasse erbt hat das Damage System integriert. Meiner Meinung nach gibt es nichts wie Tode oder sowas wie du es beschreibst, also built in. Also diese Variablen musst du schon selber definieren.
    Also nun zu ApplyDamage. Das wird von irgendetwas ausgelöst das, nunja, Schaden verursacht. Es löst auf der anderen Seite dann ein DamageEvent aus.
    Es gibt verschiedene Nodes um Damage zu verrusachen und verschiedene Events um darauf zu reagieren.
    Hier ganz kurz.
    Point Damage: Spezifische Point kriegt Schaden. Die Node im BP nennt sich ApplyPointDamage.
    RadialDamage: Punktschaden mit Umkreis. Gibt es auch mit Falloff. ApplyRadialDamge und ApplyRadialDamagewithFalloff.



    Die Events um darauf zu reagieren heissen entsprechend.



    Sagen wir jetzt einmal irgendeine Gewehrkugel führt ApplyPointDamage aus nachdem Sie einen Character getroffen hat.
    Beim getroffen Character wird nun u.A. das Event "PointDamage" ausgelöst. Nun kannst du entscheiden wie du darauf reagierst. Zum Beispiel in dem du den Schaden der hier übergeben wird von dem Leben vom Character subtrahierst.


    Das reicht je nachdem natürlich nicht für die Schadensunterscheidung. Du kannst bei ApplyDamage noch den DamageTyp definieren, wie auch immer du es zur Unterscheidung brauchst.



    Gruss

    Hallo zusammen


    So einfach lässt sich das gar nicht beantworten - zuerst gibt es noch andere Fragen zu berücksichtigen.
    Es gibt einerseits Listen Server, einfach gesagt, "spielt" hier der Host auch als lokaler Spieler mit.
    Das andere ist der Dedicated Server, er bietet üblicherweise Performance Vorteile, weil er nicht alles ausrendern muss, auch kein Audio etc., daher er nicht als lokaler Spieler mitspielt ist das nicht nötig, einfach gesagt.
    Listen Server bietet oftmals Kostenvorteile und je nachdem ist er einfacher Skalierbar, weil die Clients selber hosten können. Beim Dedicated Server musst du dann üblicherweise Server hinzuschalten um Spitzlast zu überbrücken. Das ist je nachdem nicht ganz so einfach, als Tipp hier Cloud Computing. Es gibt auch Architekturen die auf beides zurückgreifen.


    Für den Spielmodus wird üblicherweise der GameMode benutzt.
    Was genau mit den Räumen meinst du, levels? Level Transition kannst du auch im GameMode regeln.


    Jetzt wie startest du die Server?
    Die UE4 hat das Built in bereits dabei, ja, wirklich!
    Du kannst ihn einfach per Command Line starten. Aber es geht sogar in der Engine unter Play kannst du mehrere Spieler automatisch verbinden oder sogar ein Test Dedicated Server per Checkbox starten.


    Gruss

    Nun mit den neueren Versionen der Engines kannst du wenn du ein Objekt aus einem Array entnimmst, vereinfacht gesagt, entweder eine Kopie davon haben oder eine Referenz.
    Du scheinst eine Kopie davon zu nehmen. Wenn du ein original Blatt kopierst und die Kopie veränderst, ist das Original noch immer identisch wie zuvor.
    Deswegen musst du das Objekt Referenzieren, wir wollen ja schliesslich das original verändern, richtig?
    Also wenn du dein Array als eine Variable im Vieport hast und dann Get eintippst, erhälst du zwei Obtionen:


    1. Get a Copy
    2. Get a Reference


    Wir wollen eine Referenz.
    Falls du eine neuere Engine Version nutzt, hast du eine Kopie genutzt in deinem ersten Screenshot beim Get vom Array. Verstehst du?
    Also was du austauschen solltst ist die Get Node im ersten Screenshot durch Get (a ref)

    Ich bin gerade etwas verwirrt, wieso sind bei deinem Feuerball zwei Vectoren gelistet, ist es nicht immer null?
    Als erstes kommt mir in den Sinn, hast du dein Get auch als Referenz und nicht als Copie genommen, bei deinem Get oben wo das anvisierte Ziel definierst, scheint nämlich so als machst du da eine Kopie, dann funktioniert das nicht.
    Nochmals die Frage ist es ein Multiplayer Spiel?

    Könntest du mal die Position vom Capsule Component ausgeben lassen, ich vermute das da einfach FVector (0,0,0) ist.
    Falls die Position in diesem Blueprint, von dem du die Screenshots gepostest hast korrekt ist, vermute ich das nächste Problem im Feuerball selbst.
    Es ist keine Multiplayer bzw. dedicated Server oder?


    Gruss

    Hey


    Du kannst wieder Draw Debug Type aktivieren und dein Out Hit mal mit Print String ausgeben lassen, so siehst du was getroffen wird.
    Nicht der Cast ist das Problem, sondern das einfach etwas anderes getroffen wird, etwas das nicht von deinem Objekt erbt in das du du Casten willst => Cast failed.
    Du benutzt ein SingleLineTraceByChannel, was bedeutet das wirklich nur der erste Hit zählt.
    Also einfach anzeigen lassen, ausgeben lassen und dann debuggen.


    Gruss

    Hallo zusammen
    Ich will dich eigentlich nicht nochmal damit langweilen, aber diese Regeln gehören meines Erachtens in den GameMode und nicht in die Gameinstance.
    Ehrlich gesagt weis ich auch nicht ganz was du da vor hast. Aber ich behaupte, dass der Grund das dein Klick event nicht funktioniert, ist das es schon nicht mehr im Speicher ist, also dass das Objekt das du bei "Round1" übergibst nullptr, also sozusagen leer ist.
    Um das zu reparieren musst du es in einer Variablen speichern. Also einfach Rechtsklick auf den return Wert vom Construct und to Variable klicken. Diese kannst du nun verwenden für das "Round1" Übergabe Event.


    Wie @Darkentik schon erwähnt hat, gibt es viele, viele verschiedene Wege um dein Spiel umzusetzen, also vom Aufbau her.
    Hier mal mein Vorschlag.
    1. Erstelle ein Hauptmenu Widget mit Buttons zu den verschiedenen Tischen.
    2. Adde dieses Widget im Levelblueprint von deiner Hauptmenu map.
    3. Erstelle für jeden Tische eine Map.
    4. Verknüpfe diese Maps mit dem Hauptmenu, also per Button sollte jeder Tisch / Map geöffnet werden.
    5. Erstelle einen GameMode in dem die Turnorder geregelt wird, also wer wann dran ist.
    6. Erstelle einen PlayerController in dem du die möglichen Aktionen vom Spieler definierst.


    Wie gesagt kann man über die Architektur immer streiten - oftmals auch zurecht :D