Multiplayer



  • Hey, ich habe vor in meinem jetzigen Projekt auch einen Mulitplayermodus einzuabueen!
    Ich wollte dies folgendermaßen machen (zu sagen ist, dass die Framerate fest ist):
    Einer der Spieler ist der Host, und wartet in jedem Frame auf die die Benutzereingaben (Mausposition, gedrückte Tasten, ...). Dieser leitete diese (und seine eigenen) dann an alle weiter. Jeder Spieler updated nun anhand dieser Daten "seine" Spieler lokal.
    Dadurch wäre das Spiel ja sogar sehr cheatsicher!?
    Was haltet ihr davon? MfG



  • Was für eine Art Spiel ist das denn ?



  • RTS



  • Lager den Networkpart in einen seperaten Thread aus.
    Fuehre zu einem definierten Zeitpunkt die Physik, Logik... aus.

    Wie stellst du dir genau das System vor?
    Eventbasiert?
    Oder per Tick?

    Eventbasiert funktioniert bei RTS recht gut, denn da kannst du z.B. die Waypoints vorberechnen auf Client/Serverseite und dann abgleichen, und brauchst dich nicht mehr Netzwerktechnisch in jedem Tick darum kuemmern.

    Zum Thema Cheatsicherheit:
    Das einzige was einigermassen sicher ist, sind Client/Server Systeme - aber auch nur, wenn der Server fast alles Kontrolliert.
    Wenn ich deinen Ansatz richtig verstehe, willst du ein P2P Game aufbauen, du darfst mich aber gerne berichtigen, wenn nicht 😉



  • Hey Pinsch,
    ich schreibe auch gerade ein RTS (Kannst dir näheres auf meiner Seite ansehen, falls es dich interessiert). Ich bin von Seiten der Engine-Programmierung zwar noch nicht an dem Punkt wo ich Multiplayer einbauen könnte (Weil der SinglePlayer Modus noch nicht mal fertig ist 😉 ) , aber würde mich sehr interessieren wie du das jetzt löst.
    Ich hab auch schon etwas darüber nachgedacht. Ich hatte vor, Main-Loops zu messen und über den Server zu synchronisieren. Events würde ich erst an den Server schicken und dann zurück an alle Clients, die das Geschehen dann interpretieren. Dabei muss man aber auch immer aufpassen, das von der Loop-Anzahl niemand zu weit ist.



  • Cheatsicher auch nur soweit, dass jeder für sich nicht betrogen werden kann, da eben nur der userinput übertragen wird (z.b. Spieler X hat in dem jetzigen Frame die Maustasten 1 und 3 gedrückt, seine Maus befindet sich an der Stelle x,y etc.).
    Es kann also durchaus sein, dass (durch Hacken des Programms) ein Spieler sich selber einen Vorteil verschafft und die Spiele asyncron werden, dies ist aber so gesehen nicht weiter schlimm, da ja, wie gesagt, jeder Client anhand der Daten ein eigenes Spiel berechnet. So gesehen fungieren die anderen Spieler mehr oder weniger wie eine KI. Natürlich eignet sich sich das System nicht um die Spielergebnisse nachher public zu speichern und z.B. Ranglisten aufzusetzen, dies ist allerdings auch gar nicht beabsichtigt (das Spiel soll eben nur rein aus Spaß über das Netzwerk gespielt werden, so dass Cheaten eigentlich eh ausgeschlossen sein sollte).
    Noch einmal zum System:
    1. ist zu sagen, dass eine feste Framerate vorliegt, da ich dies deutlich praktischer finde und auch einige Berechnungen gespart werden.
    Die momentanen Benutzereingaben werden in jedem Frame upgedated und mit Hilfe dieser die Befehle/Markierungen/Kamerabewegungen ausgeführt. Allerdings wird auch dafür gesorgt, dass jeder Spieler die Benutzereingaben aller anderen Spieler bekommt und so auch die Befehle/Markierungen/Kamerabewegungen dieser Spieler berechnet werden können. Erst wenn alle Spieler hiermit fertig sind, wird zum nächsten Frame gewechselt. Wie der Austausch der Daten nun genau von statten geht, ist eigentlich egal, ohne mich wirklich damit auszukennen, würde ich eine Client - Host Methode für angemessen halten.



  • Ja, könnte man so machen.

    Bye, TGGC (Ein Jahr Helden)



  • Alles klar! 😋


Anmelden zum Antworten