Ja, Iblis erklärt das super gut!

Vielleicht noch ein paar prinzipielle und nützliche Ergänzungen.



Die Abbildung oben veranschaulicht das Konzept der Server/Client-Topographie, die in A6 implementiert ist.

Das Server/Client Konzept besteht aus individuellen Clients (=Spieler, hier vier Stück), die mit dem Server verbunden sind (falls am Server ebenfalls jemand spielt, haben wir dann im Ganzen 5 Spieler). Das Ganze muss nun so gemanagt werden, dass einzig und allein das Spiel auf dem Server für das eigentliche Spiel relevant ist. Man muss das Spiel so managen, dass die Clients das Serverspiel möglichst aktuell zu Gesicht bekommen.

Wenn ein Client seinen Player vorwärts laufen lassen möchte, muss er dies mit einer SEND_ Funtion dem Server mitteilen ("Client 1 hat Pfeil nach oben Taste gedrückt und möchte somit vorwärts laufen"). Sobald diese Mitteilung beim Server eintrifft, lässt dieser die Aktion ablaufen und meldet das Vorhaben allen andern Spielen (Clients), inklusive dem Spieler, der die Aktion wünscht (im MP gibt es also immer eine kleine Verzögerung). Damit die Leitung zwischen den PSs nicht übermässig belastet werden, muss man sich ein Konzept erarbeiten, damit nicht alle Daten x Mal pro Sekunde (bei jedem Frame) durch den Äther gesendet werden müssen.

Nehmen wir an, unser Player läuft vorwärts die Treppe hoch. Jetzt müssen wir nicht ständig die Leitungen zumüllen, indem wir währen jedem Frame allen Clients erzählen, dass sich der Player zu diesem Zeitpunkt am Punkt xyz befindet, mit dem linken Auge zwinkert und den Fuss mit dem 3. Zehe auf die Textur "wood" setzt. Dies ist absolut irrelevant, denn wenn wir allen Clients mitgeteilt haben, dass der Player von Client 1 vom Punkt 6/5/5 in Richtung 45° zu diesem und diesem Zeitpunkt vorwärts laufen soll, dann macht er dies auf allen Clients und er macht dies, bis auf dem Server etwas wichtiges passiert (zum Beispiel, dass der Client jetzt rückwärts laufen möchte oder dass die Figur von einem anderen Client abgeschossen wurde).

Natürlich kann es zu kleinen Unstimmigkeiten kommen. So kann es sein, dass wir einen Feind abschiessen wollen, den wir exakt im Visir haben, und wir teilen dies dem Server mit. Falls nun aber der Feind auf dem Server in der Zwischenzeit einen Meter weitergelaufen ist, so hat unser Player den Feind effektiv verfehlt (denn nur das Spiel auf dem Server ist relevant!!). In diesem Fall lebt der Feind putzmunter weiter und wir ärgern uns. Handkehrum dürfen problemlos ein paar irrelevante Effekte auf den Clients abgespielt werden, die auf allen Clients und auf dem Server nicht absolut gleich laufen müssen. So könnte es egal sein, dass auf einem Client 2 Sterne am Himmel zu sehen sind und auf einem anderen Client 7 Sterne. Dies zu managen, ist die Kunst des MP Spiels. Mit den beiden Möglichkeiten, (1) ein Spiel mehrmals auf einem PC starten und (2) Effekte/Entities nur lokal auf einem Client oder Server erschaffen zu lassen, hat Conitec das MP feature gewaltig vereinfacht.

Für die MP Spiel Programmierung und die richtige Kommunikation zwischen den PC müssen wir auf folgende 5 Programmier Funktionen ein spezielles Auge werfen:

1. LEVEL_LOAD
2. Die ENT_CREATE()/ENT_CREATELOCAL() Funktionen
3. Die verschiedenen SEND_ Funktionen (SEND_SKILL, SEND_VAR, SEND_STRING usw.)
4. Die von uns definierte ON_SERVER Funktion
5. Die von uns definierte ON_CLIENT Funktion

Bei einer LEVEL_LOAD Funktion auf dem Client werden sämtliche Entities vom Server auf den Client geupdated (macht A6 automatisch).

ENT_CREATE und ENT_CREATELOCAL() Funtionen werden von A6 gemanagt. Mit ENT_CREATE erschaffene Entities (und natürlich auch im Level gezeichnete Entities) werden auf alle Clients übertragen - lokal erschaffene Entities werden nicht übertragen resp. geupdatet.

Die SEND_SKILL Anweisungen werden automatisch auf dem Server und auf dem Client ausgeführt. Die SEND_VAR und SEND_STRING Anweisungen müssen mit den ON_SERVER und ON_CLIENT definierten Funktionen separat abgearbeitet verarbeitet werden (von uns programmiert werden).

Es ist alles eine Frage des Verständnissen und des richtigen Gamemanagements. Im MP Modus wird alles viel schwieriger und bedarf einer übersichtlichen Planung und Mehrinvestition an Zeit vor dem Drauflosprogrammieren als bei der Programmierung eines Einzelplatzspiels. Wenn man das Prinzip einmal richtig kapiert, wird's richtig geil!! Wer das Ganze nicht in den Schädel rein kriegt, soll nicht aufgeben und ein paar Tage darüber schlafen - dann fällt der Cent halt im Schlaf!


Don't take the cake to the party.