Ganz so einfach ist es nicht.
Du hast natürlich Recht, man splittet den NPC Baum sozusagen in zwei Teile auf.
Auf der einen Seite KI gesteuert, wie gehabt, auf der anderen Seite über TCP/IP oder UDP oder wie man es eben haben will.
Man muss Dialoge, Handel und die komplette Interaktion mit der Spielwelt für den per Netzwerk gesteuerten Charakter neu schreiben.
Zumal ich dir schonmal viel Spaß dabei wünsche einen TCP/IP Client und Server Architektur zu schreiben die einen NPC in einer komplexen Welt wie Oblivion steuern kann.
Da müssen abartig viele Daten hin und her gejagt werden. Es ist ja nicht damit getan einfach Positionsvariabeln hin und her zu schicken. Questfortschritt, , alle Änderungen an der Welt die andere Spieler vornehmen müssen gesendet werden. Sobald ein anderer Spieler in dem Modus eine Vase umwirft muss das dein Client registrieren.
Oder ein anderer Client erledigt eine Quest. Das muss dein Client auch registrieren, damit du den nicht mehr erledigen kannst.
Das ist ein If-Baum mit zehntausenden von Zeilen ( mindestens ). Die vielen Quests, Gegenstände, die einer der Clients verändern kann und diese Änderungen müssen bei bis zu 3 anderen Clients so gut wie zeitgleich ankommen.
Außerdem wird das ganze der Performance den Rest geben. Ein komplett neuer Thread für die Netzwerkübertragung da würde ich von einem nicht geringen FPS Verlust ausgehen.
Wenn man soetwas einbauen will, dann muss es von Anfang an eingeplant sein damit die restlichen Module und Programmteile schon von Anfang an darauf ausgelegt sind, man muss bei anderen Dingen wie Grafik Ressourcen schonen damit das von der Performance her reinpasst etc.
Diese Netzwerkmodule werden rießig. Das ist eine gigantische Datenmenge die bei einer solch komplexen Spielwelt wie Oblivion übertragen werden muss. So ein Coop Modus ist mit Sicherheit netzwerktechnisch schwieriger zu implementieren als der Netzwerkteil von Counterstrike!
Im Grunde muss dann nur eine Funktion mit rein, die die Daten im RAM mit den Daten von der TCP/IP-Schnittstelle aktualisiert.
Wie stellst du dir das vor?
pro Frame müsste das komplett abgeglichen werden. Du kannst nicht in einer Sekunde 60mal 5mb über TCP/IP an 3 Clients blasen. Da hast du hinterher 0,000000001FPS.
Wenn du das nicht für jeden Frame einmal machst kommen aber Änderungen verspätet an, die ein anderer Spieler an der Welt vornimmt.
Beides sind keine aktzeptable Lösungen.
Da muss man sich eine andere Lösung einfallen lassen.
Auch wenn nur du TheProgrammer heißt, ich bin (auch) einer
Ist ja auch der coolste Beruf
Auch wenn ich noch 5h auf der programmieren darf/muss *grml*