Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.07.2012, 10:42

Multiplayer und Network ablauf, wie?

Hallo,

in letzter Zeit beschäftige ich mich mit damit ein Multiplayer einzubauen. Dazu habe ich natürlich Tutorials angeschaut. Aber ich habe bemerkt, dass die meisten Daten aber Clientseitig ablaufen. Also wie soll ich erklären.

Zum Beispiel: Die Animationen werden vom Client bestimmt, aber auch an Server gesendet der wiederum die Animation an andere Clients sendet, damit sie die Animation ausführen können. Das heißt doch, dass die Animation manipuliert werden könnten und dann wirds ganz anders gesendet als es sollte.

Beispiel zwei. Bei Unity 3D Engine gibt es ein Multiplayerbeispiel. Dort beim Probieren tritt plötzlich ein Spieler ein, da der Masterserver mein Server in die Liste hinzugefügt hat. Er hatte aber sein Multiplayerbeispiel bearbeitet und zwar seine Map wurde vergrößert. Ich konnte daher sehen dass er außerhalb des eigentlichen Maps rumfuhr (War ein Autogame beispiel). Das heißt, dass der Client die Position und Geschwindigkeit bestimmt.

Ich weiß, dass ich eine Mapversion kontrolle hinzufügen kann, aber ich bin selbst einer, der Programme manipulieren kann und Bots geschrieben hat und daher kenn ich die Gefahr und mache mir sorgen, dass einige irgendwie Bugusing anwenden könnte, wenn mein Spiel natürlich erfolgreich wird :P

Vielleicht mache ich mir auch zu große sorgen??
Nichts ist unmöglich.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

03.07.2012, 11:19

wichtig bei der Netzwerkkommunikation zu beachten sind unter anderem folgende Dinge:
  • man kann innerhalb einer bestimmten Zeit nur ein begrenztes Maß an Informationen übetragen werden
    • man kann nicht alles über das Netzwerk transportieren (es sei denn, es ist eine einmalige Übertragung)
  • bei jeder Übertragung vergeht ein wenig Zeit zwischen dem Absenden und Empfangen auf der anderen Seite, unabhängig von der Menge der Informationen
    • man kann nicht alles auf Serverseite auswerten, da sonst mit Verzögerungen gespielt werden müsste
(diese Liste ist nicht als vollständig anzusehen)

wie du bei deinem eigenen spiel vor gehst ist vollkommen dir überlassen
zudem kommt es auch auf das Spiel an, wie viel übertragen werden kann/muss und wo die Schwerpunkte liegen
bei einem Ego-Shooter mit enormen Geschwindigkeiten gelten andere Kriterien, als bei einem Rundenbasierten Strategiespiel
während bei dem ersten pro Sekunde mehrere Events bei jedem Spiel ausgelöst werden (können), welche von den anderen Spielern nach Möglichkeit noch im gleichen Moment wahrgenommen werden sollen, können bei einem Rundenbasierten Spiel alle Informationen auch bis zum Rundenende gesammelt und dann gesendet werden
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

03.07.2012, 12:38

Tja, vertraue nie einem Client. Daher wird Clientseitig so getan als ob alle Informationen korrekt sind und versucht die zukünftigen Positionen und Aktionen vorher zu sagen (client side prediction). Andererseits überprüft bzw führt der Server oft alle Aktionen und Positionen und schickt an die Client seinen aktuellen Status und/oder eben die Nachrichten mit einem Zeitstempel. So können die Clients überprüfen ob ihre Vorhersagen korrekt waren oder ob der Spielzustand auf Clientseite korrigiert werden muss.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

4

03.07.2012, 13:09

Ja an sowas hab ich acuh gedacht Nox. Das erinnert mich nämlich an Minecraft Anticheat-Addon. Allerdings hat es nach vordefinierte Geschwindigkeit überprüft. War es überschritten wurde es als "cheat" erkannt und wurde dann immer auf die alte Position zurückgesetzt. Eventuell mach ich sowas in der art.

Ich mache ein kleines Spiel, eine Stadt, wo man herumfahren kann oder herumlaufen kann. Da Unity3d version 4 DirectX 11 haben wird werde ich dort alles machen sonst werde ich mit sowas nie weit kommen :pillepalle:. Naja, auf jeden Fall ist das eher ein langsames Spiel.

EDIT:
Wie ist das mit Kollisionen. Ich weiß nicht genau, ob der Server die Kollisionen der Spieler kontrollieren soll. Ich müsste ja quasi für jedes Spieler und ingame Objekte kontrollieren.

EDIT2: Sry ich poste immer viel zu schnell ohne Kontrolle auf Rechtschreibung und so. Ich editiere es nachträglich :P
Nichts ist unmöglich.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MaZy« (03.07.2012, 13:15)


FSA

Community-Fossil

  • Private Nachricht senden

5

03.07.2012, 13:30

Kommt drauf an wie die Kollision ablaufen soll. Am besten Server und Client ausrechnen lassen und dann vergleichen. Wenn was anderes als Ergebnis kommt, hat jemand gecheatet :ninja:

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

03.07.2012, 13:35

All incoming data is evil.
In diesem Sinn verschicken Clients nur Anfragen an den Server, der Server berechnet daraufhin die auszuführende Aktion (z.B. gehe von X nach Y mit Z Geschwindigkeit) und verschickt sie an alle relevanten Clients. Der Client ermittelt daraus dann wiederum eigenständig die zu verwendende graphische Darstellung oder Animation. Animationen an den Server zu senden, damit dieser sie an die anderen Clients schickt, das ist eine ganz ganz ganz schlechte Idee. Erstens kann man damit (wie schon gemerkt) nicht nur wunderbar cheaten, sondern zweitens weiß der Server da auch Dinge, die für ihn völlig unnötig sind, denn von Animationen braucht er nichts zu wissen, nur von logisch/abstrakten Aktionen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

03.07.2012, 13:41

@FSA:
es könnte ja zu Paketverlusten kommen, die Position eines anderen Spielers wurde nicht richtig aktualisiert und so kommt es eventuell zu verschiedenen Ergebnissen
es ist also nicht davon auszugehen, dass es cheaten sein muss

@BlueCobold:
oder es war einfach nur schlecht formuliert ;)
aber du hast damit recht, dass der Server rein gar nichts in Bezug auf Visualisierung zu unternehmen hat
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

FSA

Community-Fossil

  • Private Nachricht senden

8

03.07.2012, 19:09

Zitat von »Sacaldur«

@FSA:
es könnte ja zu Paketverlusten kommen, die Position eines anderen Spielers wurde nicht richtig aktualisiert und so kommt es eventuell zu verschiedenen Ergebnissen
es ist also nicht davon auszugehen, dass es cheaten sein muss

Das habe ich natürlich gewusst :thumbsup:
Nein im Ernst: Darüber hab eich nicht nachgedacht, aber da man sowieso keine Datan an den Server senden soll, ist das auch hinfällig ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

10

04.07.2012, 16:18

Oh der Link war wunderbar. Sehr gut erklärt und sogar mit ein paar Code Beispiele. Wie es aussieht werden die physkalischen dinge wirklich per Server verarbeitet. Sogar die Eingaben der Clients soll man sogar per Server ansteuern. (Erinnert mich an verzögertes Lenken bei dem Game APB:Reloaded)

Ich habe jetzt den genannten Unity Network Beispiel mal genau angeschaut. Wie es aussieht haben sie dort auch ein Client Side Prediction drauf. Aber nicht bei dem Autogame sondern Dedicated Server (Dort sind Beispiele in 4 mini Games (bzw. auch maps) unterteilt). Da sieht man per Server die map auch und wie alle rumlaufen und die Kollision wo der Spieler sein soll wird vom Server gesendet. Doch hier war ein (beabsichtlicher??) Fehler in Script, was mich ganze Zeit irritert hatte. Wenn ein Spieler mal laggt (in dem das Fenster in Verschiebemodus setze :P und das Spiel zum einfriere bringe) sieht man wie der Charakter auf dem Serverbildschirm weiterläuft, aber nach dem entfreezen ist der client falsch gesetzt. Er wurde nicht zurück gesetzt. Das lag daran, dass im Code ab bestimmten Distance nicht mehr zurück gesetzt wird. Find ich zwar komisch warum das so gemacht wurde aber nun ist es besser.

Zu Animation. Ihr habt schon recht, aber wenn ich überlege wie sollen denn die anderen Clients entnehmen, dass eine abgespielt werden soll. Ich mein Ok bei Charakter könnte man es gerade noch so hinkriegen z. B. bei Geschwindigkeit von 1 "walk" animation, bei über 1 run.. aber nehmen wir mal ein Fahrzeug. Es hat Sounds es hoch und runtergepitcht wird, die räder müssen rotiert werden und andere viele krams.
Nichts ist unmöglich.

Werbeanzeige