Dedicated Server Character

  • Hallo Schwarm :)


    Ich arbeite nun schon eine Weile mit der UE4-Engine und bin immer wieder von den Möglichkeiten beeindruckt. Nun habe ich erfolgreich einen Dedicated-Server aufgesetzt. Dazu habe ich noch eine MySQL-Datenbank angeknüpft und ein Quick-and-Dirty-Login programmiert. Soweit, so gut. Nun bin ich aber echt überfragt. Wenn ich nach meinem Login in meine "GameWorld" komme, spawnt immer ein der Default-Character. Und den kann ich nicht kontrollieren. Meine Idee war erst, dass ich den Player-Controller abfangen muss und auf einen meiner Chars umbiegen kann, aber das hat alles nicht geklappt. Ich würde gern folgende Ziele erreichen:

    • Kein Default-Char-Spawn mehr!
    • Ein "Eigener" Character inkl. Animation per Tastatur in 3-Person-Mode kontrollieren.

    Wenn mir da jemand ein paar Tipps geben kann, wie ich das mit Blueprints erreiche, wäre das super. Vielen Dank vorab!


    MFG Hyde

  • Moin,


    wenn du unterschiedliche Chars spawnen möchtest kannst du das Spawnverhalten über den Game Mode steuern. Es gibt dort das Event "OnPostLogin", dabei wird der Player Controller des Spielers übergeben der gerade dem Spiel beigetreten ist. Jetzt kann man einen neuen Actor spawnen und diesen mit dem Player Controller "übernehmen". Bei dieser Methode muss der Spawnpunkt festgelegt werden und es kann sein das der Spieler als Spectator starten muss, da bin ich mir aber nicht sicher ("Start Players as Spectators") in den Game Mode Optionen. Auf dem Bild siehst du ein vereinfachtes Beispiel.


    Grüße, Thies


  • Hallo Thies,


    vielen Dank - das hat erstmal geklappt. Problem ist nur, dass keine Keyboard- oder Mouse-Events im neuen Level ankommen. Müssen die Player-Controller dem neuen Level "übergeben" werden? Ich kann nicht mal Tasten-Events abfangen und diese als Print String ausgeben lassen. Es scheint, als würde das geladenen Level keine Inputs verstehen.


    Danke vorab!

  • Hallo vthyde,


    hast du für den Player Controller ein eigenes Blueprint und da kommen die Tasten Events nicht an? Bzw. ist sichergestellt das der gewünschte Player Controller auch aktiv ist? Vielleicht ist der auch in der Map überschrieben?


    Map:


    Gamemode:

  • Hi Thies,
    vielen Dank für deine Hifle! Tatsächlich gab es dort auch ein Problem. Aber viel schlimmer war folgender: Ich hatte in meinem Menue-Widget den Input natürlich auf "Set Input Mode UI Only" - das kann ja nix werden ;). Nun passt alles - die Events des Controllers kommen an, alles super! Vielen Dank für den tollen Support :)!

  • Heho,
    ein neues Problem ist aufgetreten - hoffentlich das Letzte bei den Schlüsselqualifikationen. Beim Test des Servers konnte ich mit den 3-Person-Vorlagen mit mehreren Spielern durch die "Welt" laufen. Nun habe ich meine eigene Chars eingefügt und animiert - aber diese tauchen nicht auf! Login läuft, nur die Charaktere der anderen Spieler sind nicht sichtbar. Die Option "Set Only Owner See" ist auf false im BluePrint des Spawn-Charakters. Hast du da vielleicht auch eine Idee ;) ?


    Danke vorab!

  • Hey,


    das hört sich für mich an als wenn die Charaktere nicht repliziert werden, vielleicht als erstes im Char mal den Haken dafür setzen. Hier ist das ein bisschen ausführlicher erklärt:


    Netzwerk Replikation :)

  • Hi Thies,


    ich habe nun endlich wieder Zeit gehabt ein wenig weiterzuarbeiten, konnte noch viele andere Infos abgrasen und habe ein recht schickes Menü-Widget mit Map im Hintergrund und sich drehender Kamera gebaut - toll :). Nun ging es aber nochmal von vorne los, da ich viel importiert hatte und das Projekt nochmal aufgeräumt starten wollte. Mein Problem ist jetzt sehr komisch: Nachdem ich die Dedicated-Server-Geschichte durch hatte, Login-Map vorbereitet und ein erstes Level einfügt werden mein "Clients" immer als "Server" angezeigt. Das habe ich mit "Has authority" gecheckt. Daraus folgt, dass immer nur ein Character Spawnt (den ich nicht steuern kann trotz Player-Controller). Woran könnte das liegen denn meiner Meinung nach sollte doch jeder Client auch als Client fungieren und entsprechend nur per "Remote" bei "Has authority" agieren - oder? Zudem läuft die ganze Sache einwandfrei, wenn ich im Editor unter "Play" den "Dedicated Server" aktiviere. Dort zeigen die Clients an, dass sie Clients sind, ich kann den Char steuern und sie werden richtige repliziert.
    Danke vorab für die Hilfe!

  • ich habe nun endlich wieder Zeit gehabt ein wenig weiterzuarbeiten, konnte noch viele andere Infos abgrasen und habe ein recht schickes Menü-Widget mit Map im Hintergrund und sich drehender Kamera gebaut - toll :)

    Das klingt doch toll und schreit nach einem kleinen Preview Video. ;)


    Zu deinem Problem.
    Wie joinen denn die CLients auf den Server? Hast du eine Lobby gebaut und nutzt das Standard Subsystem der Sessions mit der Option "LAN" oder nutzt du was anderes wie Steam oder joinst du via IP connect Befehl?



    Nachdem ich die Dedicated-Server-Geschichte durch hatte, Login-Map vorbereitet und ein erstes Level einfügt werden mein "Clients" immer als "Server" angezeigt. Das habe ich mit "Has authority" gecheckt.

    Zeig uns bitte dringend mal Screenshots zu den BPs/C++ Code.

  • Hi Darkentik,
    vielen Dank für deine Hilfe. Es hat bei mir dazu geführt, dass ich nochmal die Struktur geprüft habe. Ich habe - wirklich dummerweise - immer einen neuen Server gestartet und nicht einen Server und Clients. Dann klappt auch das Darstellen der Characters! Danke für den Denkanstoß, dass hatte ich echt übersehen. Irritierend dabei ist aber, dass in der Konsole des Sever-Logs immer ein neuer Login eines Clients verzeichnet wird. Das klappt auf jedenfall.
    Leider werden meine Chars nicht im eigentlichen Game-Level gespawnt. Der Ablauf soll wie folgt sein:


    Login auf eine Login-Map. Dort werden (später...) Username und Password eingegeben und mit einer Datenbank verglichen (das klappt in einem andere Projekt einwandfrei). Passt das, soll das Eintrittslevel geöffnet werden, in dem auch andere Spieler sein dürfen. Meine Charaktere Spawnen aber nur im Game-Level wenn ich im Projekt Default Pawn auf den Standard-Third-Char setze und ich die "Login-Map" überspringe. Hier mein BP für das Spawnen im Game-Level, welcher nicht funktioniert:


    Wenn ihr da noch eine Info hättet wäre das super. Ansonsten klappt auch das replizieren und "Has authority" auf Client und Server...vielen dank vorab!


    Ncahtrag: Ich habe den BP mal rausgeworfen und lasse sozusagen den Default-Pawn den Third-Person-Char spawnen. Das klappt auch, aber eben NUR in der normalen Game-Map. Ich will aber in der Login-Map keinen Player Spawn, ergo Default-Pawn auf None. Dann soll - nach dem der Login verifiziert ist - ein eigener Player an einer bestimmten Pos spawnen, und das klappt nicht :(.

  • Hi, schön, dass ich dich in die richtige Richtung lenken konnte.



    Meine Charaktere Spawnen aber nur im Game-Level wenn ich im Projekt Default Pawn auf den Standard-Third-Char setze und ich die "Login-Map" überspringe.

    Ich habe jetzt leider keine Bilder, da ich arbeiten bin. Aber wir haben das bei uns z.B. so, dass im Level BP, wo der Player auch einen sog. "Pawn" bekommen soll, der Pawn erst von uns gesetzt wird. Vorher ist er im GameMode auch auf None. Wenn ich die Tage Zeit finde, mache ich dir mal Screenshots von unserem Projekt damit du siehst wie wir das machen.
    Aber grundlegend sind die Einstellungen so:
    * GameMode: DefaultPawn = None
    * LevelBlueprint: OnPostLogin (oder eben Begin Play oder was in deinen Prozess besser passt) -> SpawnActorFromClass: Klasse = variable in unserer GameInstance, die wir vordefinieren. (Ich hoffe ich bringe jetzt nix durcheinander @Harlyk)


    Aber vielleicht kann dir das der @MAXX weiterhelfen. Er hat mir nämlich auch Tipps gegeben. :thumbup:

  • Ich nochmal :)


    Die Situation ist nun wie folgt (von dem ganzen hin und her hatte ich die Übersicht verloren - daher hier ein Update des Ist-Zustandes):


    1. Der Dedicated-Server läuft mit Clients, Authority-Test usw.
    2. Der Input läuft so wie ich ihn haben will.
    3. Der Default-Pawn muss auf "Third-Character" stehen, sonst werden keine Chars gespawnt (auch nicht mit "Spawn ThirdPerson.... from Class" so wie oben gezeigt).


    Wie es sein soll: In der "Login-Map" sind Charaktere entsprechend der Anzahl der Clients zu sehen, aber nicht steuerbar (wegen Input-Mode only UI - alles gut!). Wenn ich dann in mein "Game-Level" wechsle wird ein neuer Char gespawnt, welchen ich auch korrekt kontrollieren kann. Nun möchte ich aber natürlich verhindern, dass in der "Login-Map" jemand spawnt, sondern erst im "Game-Level", und das alles mit BluePrints. Da muss es doch einen recht einfachen Weg gehen, denn ich finde viele Games mit Menü und anschließendem "Login"...?


    Danke für die Hilfe!