Advanced Mulitplayermode

Hast du eine Idee zur Verbesserung der Steuerung, so poste sie hier
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
phpbb forum styles
Registriert: Montag 13. November 2006, 15:16

Beitrag von Malle »

Klar da gäbe es natürlich massive Crashgefahr. Die Spieler müssten sich wirklich sehr streng an gewisse selbstgesteckte Regeln halten. Aber das wär ja nicht unser Problem als Progger/meinereiner oder?

Vorschlag zum Netcode:

Im unlösbaren Konfliktfall: a) Übernahme der Masterentscheidungen ohne Nachfrage mit Textmsg in der nächsten Runde
b) Ausgabe des folgenden Textes: Unauflösbare Konfliktfälle entdeckt. Runde beenden nicht möglich. Überprüfen sie folgende Angaben:... (letzteres nur im fortgeschrittenen Stadium ;))

Was ist ein unlösbarer Konfliktfall? Ganz einfach, zum Prinzip:

Genommen wird erstmal der Masterplan sozusagen, also alles was der Master unternommen hat.
Dazu kommen die Veränderungen (!Ganz wichtig, denn der Rest interessiert nicht / ist bei allen gleich geblieben!) der einzelnen Mitspieler im Vergleich zum Ausgangszustand (nicht zum Master!). Schneiden die sich nicht irgendwo mit dem Master, ist alles ok und sie werden einfach gemergt. Bei Konflikten mit Masterentscheidungen wird einfach der Master als überstimmend angenommen. Bei Konflikten unter den Slaves (hm, da kommt mir doch gleich die Tatsache, dass damit auch Zuschauer, die einfach nur mitgucken, was der andere so macht, möglich sind..schöne Sache) ja, bei solchen Konflikten, da wirds halt problematisch. Denkbar wäre auch hier ne Order wie Slave 1,2,3,4 usw.
Der Master würde sich die dann einzeln nacheinander vorknöpfen und "einverleiben".
Ich denke so ein Algo wäre weitgehend crash- und konfliktfrei und dazu noch relativ (!) einfach einzubauen. Weniger wohl bei Asynchronisationen im Netzwerkverkehr und lags, will sagen, was passiert wenn sich mal ein Slave ausgerechnet beim Rundebeenden verabschiedet bewusst oder unbewusst und nur teilweise seine Rundenentscheidungen übertragen werden. Würd dann einfach behaupten, die nach ihm folgenden Slaves rücken alle ne Nummer rauf und seine (verstümmelte) Runde wird einfach verworfen. Ne Nachricht an alle anderen, damit die überhaupt Bescheid wissen, dass da einer fehlt, dessen Aufgaben die jetzt neu verteilen müssen, wäre dann ratsam.
Zuletzt geändert von Malle am Dienstag 21. November 2006, 14:12, insgesamt 3-mal geändert.
Benutzeravatar
Sir Pustekuchen
Administrator
Administrator
Beiträge: 4183
Registriert: Dienstag 10. Januar 2006, 16:46
Kontaktdaten:

Beitrag von Sir Pustekuchen »

Bevor wir soweit denken sollte erstmal der normale Netzcode funktionieren. Das ist viel wichtiger. Zum Advanced Multiplayer Modus kann CBot vlt. noch ein klein wenig mehr sagen. Generell müsste man aber die Sachen mergen, außer CBot fällt da noch was anderes ein. Also abwarten...
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Beitrag von Malle »

..und Tee trinken *schlürf*
Ares
Offizier
Offizier
Beiträge: 123
Registriert: Samstag 25. März 2006, 13:59

Beitrag von Ares »

ok, das ist ein hoffnungszweig an dem ich mich wieder festklammern kann ich frag dann wieder mal in 8 Monaten nach ^^
Benutzeravatar
CBot
Supporting Programmer
Supporting Programmer
Beiträge: 54
Registriert: Dienstag 29. August 2006, 14:01

Beitrag von CBot »

Nun, ..., vom Algorithmus her einfacher wäre ein Team-Edit-Modus: ein Client ändert etwas, das bei den anderen Clients desselben Volkes sofort sichtbar wird. Das würde allerdings den Kommunikationsaufwand extrem erhöhen, so dass man viel (nicht vorhandene) Zeit in eine solche Lösung investieren müsste.

Aus Kommunikationssicht besser ist da schon die Merge-Variante mit Prioritäten für die Clients. Jedoch ist dann der Algorithmus nicht ganz so einfach. Nur ein kleines Beispiel zur Verdeutlichung: Der Spieler mit Priorität 1 lässt ein Schiff absichtlich stehen, der Spieler mit Prio 2 gibt ihm einen Befehl. Wertet der Server die Änderungen aus, wird er den Befehl vom Spieler mit Prio 2 übernehmen. Um dies zu verhindern, müsste das Schiff vom Spieler mit Prio 1 einen "Stehenbleiben"-Befehl bekommen.

Analog dazu gibt es sehr viele weitere Elemente, die zusätzliche Befehle benötigen würden, was die Oberfläche und Implementierung von BotE _sehr viel_ komplexer macht und damit einen unheimlichen Aufwand bedeutet.

Abgesehen davon geben der aktuelle Netzwerkcode und unsere Zeit beides nicht her.
Benutzeravatar
Malle
Großadmiral
Großadmiral
Beiträge: 6948
Registriert: Montag 13. November 2006, 15:16

Beitrag von Malle »

EDIT: Neufassung.

Ich war ein wenig direkt bei der Sache im letzten Post, also erstmal: Respekt für die ganze Arbeit, CBot, ohne dich würden wir hier praktisch alle Gedankenhalma spielen, also großes Danke vorweg.

Zu der Idee: Da wir hier ein Ideenthread sind, denk ich, ist erstmal alles erlaubt (gut, ich würd mir auch nicht alles durchlesen, aber es rentiert sich denk ich).

So, um das Prioritätenproblem und alle weiteren Beispiele der Art zu umgehen, gibt es nur eine wie ich finde elegante Lösung: Man schiebt es auf den Master ab.

Das wirft ne Reihe Probleme auf, deswegen hast du ja auch richtigerweise daran gedacht, dass man da extra auf den Master zugeschnittene Befehle braucht, damit der sich durchsetzen kann. Die Teamedit-Sache ist wirklich zu komplex, aber schön als Fiktion. Außerdem hätte sie auch den Nachteil, dass man als Master wiederum geneigt wäre in jeder Runde doch wieder beim andern einzugreifen (was man für sinnvoll oder nicht erachten kann) und so evtl. Streit vom Zaun brechen. Besser ist es dass er das gar nicht so merkt. Ein gutes Team kommt auch so durch.

Ok zu den Problemen:

Problem 1: Ein Mitspieler spielt verrückt und zerstört alle Gebäude etc. Lösung: Autosave, Neu laden, Kicken und Bannen im Sinne von ohne ihn weiterspielen. Hier kann man dann Listen von vertrauenswürdigen Leuten führen, aber das ist alles privat und hat nix mit dem Code zu tun.

Problem 2: Andere überschreiben den absichtlichen Willen des Masters, die Flotte nicht zu bewegen oder keine Veränderung am Gebäudebau vorzunehmen. Lösung: Master schlachtet Mitspieler mit Metzgermesser.
Ernsthaft: Vorher Bereiche genau (fern-)mündlich trennen und verteilen. Kommt Müll raus, kann der Master ja immer neuladen. Irgendwann schnallt eine Gruppe dann wie es geht und dann kanns richtig losgehen. Ist einer dabei, der zu blöd is, raus mit ihm.

Problem 3: Master hat keine Lust mehr und will zwischendurch mal was mit seiner Freundin unternehmen (gleiches gilt auch natürlich für die anderen Teilnehmer, falls die mal kurzfristig im LAN nimmer wollen). Lösung: Per ICQ oder ingame-messaging-system kurz Nachricht zukommenlassen, der andere/nächste in der Reihe übernimmt, da der Master keine Veränderungen mehr vornimmt, automatisch, sobald er Bescheid weiß.
Hier kommt die einzige kleine Änderung ins Spiel, nämlich ein Auto-Rundebeenden aka Abwesenheitsmodus, den jeder Spieler im grafikunabhängigen Optionenmenü anklicken kann.

Das System ist extrem flexibel und je länger ich darüber so nachdenke, desto geiler find ich sowas. Das wär dann sowas wie interaktives Counterstrike-TV im Netz, nur halt bei Rundenspielen.

Problem 4: Einer der Mitspieler fällt aus dem Game raus weil Verbindung abgebrochen. Lösung: Autosave, neu laden oder einfach ohne ihn weitermachen weil der Algo seine eher weniger wichtigen Veränderungen anstandslos verworfen hat und nicht abgestürzt ist.

Also ich seh kaum noch zusätzlichen Handlungsbedarf was Befehle und Grafik anbelangt, zusätzlich zum sicher großen Aufwand, das zu programmieren (irgendwie muss man ja auch ne Max-Grenze setzen und je mehr da mitdoktern, desto größer wird ja auch der Traffic, der da im Netz rumschwirren muss, spätestens ab Runde 2000 wird Schluss sein mit lustig. Da könnte man sich als Lösung eine Meldung vom algo vorstellen, der sagt Feierabend Leute, ab jetzt gehts nur noch im 1:1-Modus weiter).

Ganz wichtig noch, generell im Multiplayer sollte der autosave kumulativ sein, d.h. jede Runde in einer separaten Datei abgespeichert sein, denn wenn diese Idee oben verwirklicht wird, kann ein fieser Mitspieler seine Sabotagetaktiken über viele Runden ausdehnen und so ein Spiel, unbemerkt für lange Zeit, kaputtmachen. Außerdem ist ein kumulativer Save an sich ne schöne Sache (außer im SP wegen der Cheatgefahr natürlich).

Klingt doch schön, aber da ich vom Netzwerken ungefähr soviel verstehe wie vom gimpen vor 3 Wochen denk ich mal, bin ich und ist auch sonst niemand hier böse, wenn die Idee nicht umgesetzt wird. Das ist, denk ich, sowieso Konsens hier. Kein Druck, alles freiwillig.

So genug gelabert ;)

Hier unten nochmal mein Schnellschusspost vom Anfang:
Das war die Bemerkung mit den exakt an vorher ausgemachte Regeln halten. Der Spieler mit Prio 2 darf dann halt keine Sachen anfassen, die ihn nix angehen, also z.B. nur Veränderungen an einem Planetensystem durchführen, so könnte man die Systemverwaltung auf mehrere Leute abschieben. Will der Master, dass niemand der anderen ihm reinpfuscht, muss er die halt in reallife auf die Finger kloppen. Das ist dann nicht unser Problem.

Klar dass nicht jeder Spieler einfach so in der Schiffsbewegung mit rumspielen darf, das darf nur einer, der auch ein echter Master ist.
Ich denke, so oder so ähnlich hat Ares das auch gedacht. Es ist ja auch mehr ein "Visitor"-Modus, also zum gucken, wie die Sache so läuft.

Bei LANs kann man ja auch im Spiel die Aufgaben neu verteilen. Der Algo mergt einfach alle Veränderungen, fertig.


A propos Prioritäten, ich weiß natürlich, wir haben nicht unbegrenzt Zeit für alles, ich versuch nur diese Idee irgendwie einbaubar zu machen in vernünftigem Rahmen.
Antworten

Zurück zu „Spielsteuerung“