PDA

View Full Version : [Wissen] NetCode / Multiplayer Netzwerk... wie geht das?



Satty
03-01-06, 23:39
Ok, gleich zuerst... ich bin kein Fachmann und habe mich die Tage auch nur da rein gelesen und mir etwas Basiswissen angeschafft. Das könnte aber reichen und etwas mehr Licht in das Mysterium zu bringen.

Ein MMOG (Massive Multiplayer Online Game) ist ein Zusammenspiel von Clientrechnern (die Spieler) und dem Worldserver (meist ein Cluster aus mehreren Rechnern).

Was ist die Aufgabe des Worldservers?

Er simuliert permanent die Welt anhand einer Vielzahl von eintreffenden Daten und übermittelt diese Daten an die angeschlossenen Client-Rechner. Diese Simulation läuft mit einer festen Rate ab. D.h. der Worldserver berechnet typisch 20x Pro Sekunde (= 50er Ping) die Welt neu. Geht auch schneller, aber das ist mal so ein Richtwert.

Die Daten, die der Worldserver dazu bekommt sind sehr vielfältig. Zum einen sind es die Aktionen der Spieler. Spieler bewegen sich, treiben Handel, bekämpfen irgendetwas, NPC bewegen sich durch das Spiel usw. Zusätzlich generiert er Missionen, wenn man eine Quest auswählt, steuert die KI der Mobs, wenn diese angegriffen werden oder einen Runner in Reichweite "sehen".

Der Server muss auch entscheiden, welche Daten der einzelne Client bekommt. Er übermittelt einem Runner an Plaza 1 nur Informationen die dieser Spieler auch braucht und versorgt ihn natürlich nicht mit Daten von Techhaven (als Beispiel).

Diese Aufgaben werden meisten logisch auf verschiedene Rechner verteilt. So übernehmen einige Rechner verschiedene unabhängige Sektoren, ein anderer Rechner steuert die NPCs/Mobs (die oft beim Server wie einzelne Spieler eingeloggt sind), ein anderer Rechner liest Inventar-Listen aus einer Datenbank oder generiert dynamische Quests. Eine saubere Verteilung ist wichtig... ein überlasteter Rechner im Server-Verbund kann den Fluß im ganzen Spiel stören.

Die Aufgabe des Client-Rechners?

Der Client berechnet die von Runner einsehbare Welt anhand der Daten auf der Festplatte (Grafik/Sound etc.) und den Daten von Server (andere Spieler, dynamische Objekte, Schadensanzeigen usw.). Der Kraftakt des Client-Rechners liegt also hauptsächlich darin, die Grafik zu rendern.

Damit die Welt aber bei Verbingungsproblem nicht "ruckelt", übernimmt der Client auch "Annahmen". Also wenn sich ein Runner z.B. heilt und der Server diesen Prozess nicht gleich bestätigt, dann heilt der Client den Runner mit der gleichen Rate weiter. Das kann manchmal seltsame Effekte haben, wenn dann der Server plötzlich mit dem tatsächlichen Wert ankommt (Die Lebensenergie springt plötzlich wieder runter oder hoch).

Genauso interpoliert der Client die Bewegungen anderer Spieler, d.h. er nimmt einen weiteren Weg eines anderen Spielers an, wenn von diesem plötzlich Positionsdaten nicht ankommen. Das kann z.B. den Effekt haben, das ein Runner plötzlich wieder nach hinten oder zur Seite gesetzt wird (wenn die Daten wieder fließen) oder wenn die Interpolation nicht ausreichend war, sieht man den anderen Runner "warpen".

Wie sieht eine einfache Aufgabe im Detail aus?

Nehmen wir eine einfache Welt an (ein Dreieck), belebt mit zwei Spielern im Besitz einer Waffe und einem Monster, das Feuer spucken kann. Als Startposition hat jedes Wesen eine Ecke des Dreieckes. Die Welt ist so klein, das sich alle Beteiligten immer sehen.

Zuerst loggt der KI-Server das Monster ein, der Mainserver nimmt dieses in die Spielewelt auf und berücksichtigt es nun als Element des Spiels. Das gleiche passiert mit den beiden Spielern, die sich via Client in das Spiel einloggen (sagen wir Runner A und B).

Der Mainserver prüft/übermittelt nun ständig die Positionen der einzelnen Spieler und des Monsters an alle (auch an den KI-Server, der muss ja entscheiden, ob das Monster wartet oder angreift). Wenn Runner A auf das Monster zu läuft, kommt er diesem irgendwann zu Nahe. Der KI-Server entscheidet nun, das das Monster Feuer auf Runner A spucken soll. Runner A ist natürlich auf die Beute aus und feuert gleichermaßen seine Waffe auf das Monster ab.

Jetzt wird es hektisch für den Worldserver. Er übermittelt nun nicht nur Positionsdaten der Wesen, sondern auch die der fliegenden Projektile/Feuerbälle. Er berechnet ob einer der Waffen getroffen hat, wobei er die Verzögerung bei der Datenübermittlung berücksichtigen muss (die Spieler haben sich ja in der Simulation weiterbewegt). Welche Wirkung dieser Treffer auf den Getroffenen hat. Dazu muss er aus einer Datenbank die Rüstungs und Schadenswerte hernehmen. Er übermitteln neue Health-Werte und fragt weiter die folgenden Aktionen von Spieler und Monster ab und mit der Berechnung der Simulation weiterzumachen. Inzwischen bewegt sich auch Runner B auf das Monster zu (das via KI-Server nun entscheiden muss, welchen Runner es bevorzugt angreift).

Runner A hat es geschafft und dem Monster alle Lebensenergie entzogen. Der Worldserver berechnet jetzt anhand der Ränge, welchen Loot er in das Monster legt.

Nicht vergessen, so eine Simulation aus Daten der Clienten, Generatoren, Itemdatenbanken, KI-Server usw. soll auf dem Server mindestens 20x pro Sekunde ablaufen. Alle gewonnen Daten aus der Simulation müssen sinnvoll an die angeschlossenen Clienten verteilt werden.

Voila

Das ganze beschreibt jetzt nur einen Teil der vorhandenen Aufgaben, aber zeigt doch schon deutlich welcher Aufwand nötig ist, wenn sich 200+ Spieler in einer Welt mit noch mehr NPCs/Monster aufhalten. Besonders wenn diese sehr aktiv sind.

Wen alle beteiligten Komponenten gut zusammenarbeiten, haben wir eine flüssig ablaufende Weltsimulation, ein MMOG. Es reicht oft schon ein Teil (eine Routine, ein Server im Verbund), der mit der aktuellen Aufgabe überfordert ist, um die ganze Welt ins stocken zu bringen.

***

Das ganze ist keine Bewertung des Netcode/Systemes von Neocron, sondern ein Versuch, solch ein System ganz einfach zu beschreiben.

Ihr könnt gerne logische Fehler korrigieren oder eigenes Wissen zum Erweitern der Beschreibung hier mit einbringen :)

Chipmonk
04-01-06, 02:18
Es ist schon interessant mal so darüber nachzudenken wie viel solch ein Server doch leisten muss und wie viele Dinge dauernd abgefragt und somit aktualisiert werden müssen. Dabei sollte man fast meinen, dass bei den heutigen Prozessoren und Systemen das ganze eigentlich ziemlich schnell und reibungslos funktionieren sollte.

Nevs
04-01-06, 02:31
Das ist doch der Inhalt den du gestern noch in nem thread verlinkt hast oder (nur drübergeflogen)

Satty
04-01-06, 02:38
Das ist doch der Inhalt den du gestern noch in nem thread verlinkt hast oder (nur drübergeflogen)
Nur gleiches Thema... ich hab' hier nur sehr vereinfacht das gesammelte Wissen wiedergegeben.

Der Link befasst sich mehr mit Details wie Ping1/6, UnLagged Berechnungen und sonstigen Statistik-Kram, den hier wenige Lust haben würden zu lesen.

digitalfreak
04-01-06, 02:43
Klingt für mich alles logisch.
Bis auf die Sache mit den Projektielen. Ich glaube die fliegen nur wirklich auf den Clients. Deren Position wird vileicht nicht ständig neu berechnet. Ich denke eher wenn überhaupt dann wird nur Startzeit, Flugvektor und Kollisionszeit übermittelt. Die Frage ob man mit einem Schuss Schaden an einem Runner verursacht wird sicher aus anderen Faktoren berechnet (Entfernung zum Ziel, Ziel geaimt oder nicht, Restgrösse des Aimkreises bringt eine Basis für einen Wahrscheinlichkeitsberechnung) dabei ist es bestimmt total wurscht ob das Projektiel wirklich im Ziel auftrifft oder knapp dran vorbei geht... ich kann mich auch irren.
Die einzelnen Zonen werden ja auch einzeln berechnet, sodas über zonen hinweg eigentlich nur der Chat übertragen werden muss, so kann man dann rein theoretisch die Zonen auf mehrere Computer aufteilen, welche natürlich trotzdem alle miteinader reden.

so long.. ich geh pennen, n8

Satty
04-01-06, 03:45
Dabei sollte man fast meinen, dass bei den heutigen Prozessoren und Systemen das ganze eigentlich ziemlich schnell und reibungslos funktionieren sollte.
Ich denke die Engstelle sind die Datenbanken.

Es scheint ja so zu sein, das die Status-Daten der Spieler ständig gespeichert werden (um bei Fatal oder schnellem ausloggen wieder passend reinzukommen).

Also Position, aktiver Slot, Synaptic, Healt usw.

Wenn das bei jeden Tick, gemacht wird (also 20/Sek), dann wären das bei 200 Runnern schon 4000 Datenbankzugriffe/Sekunde. Wird wohl nicht jede Sekunde gemacht und es gibt auch Puffertechniken, aber ist ja auch nicht das einzige was gespeichert wird. Mobs/Npc-Positionen, Items die bewegt werden.

Denke die Herausforderung bei einem MMOG liegt bei der Datenbanktechnik.

Dem entgegen die Source Engine (der Bericht aus dem Link). Die legt mehr Wert auf möglichst präzise Positionierung und Berechnung der Schüsse, Ausgleich von Lag usw. Was ja bei einem Shooter eher wichtig ist.

Bis auf die Sache mit den Projektielen. Ich glaube die fliegen nur wirklich auf den Clients. Deren Position wird vileicht nicht ständig neu berechnet. Ich denke eher wenn überhaupt dann wird nur Startzeit, Flugvektor und Kollisionszeit übermittelt.
Deshalb wohl auch Feuerbälle vom Persi, die einen "Knick" machen, wenn man ausweichen will (der Client hat den Befehl mit dem Teil zu treffen)

Die ganze Abschätzung/Berechnung ob aber geroffen wird trifft nur der Server (Clientseitig wäre zu leicht manipulierbar). Das sind sicher auch einige komplexe Formeln.

<- Auf die Uhr schaut... verdammt.. ja sollte auch mal ins Bett ;)

angakok
04-01-06, 12:17
Wie schon Nevs schrieb, dein Post ist eine gekürzte Kopie einer anderen Webseite. Beim nächsten Mal vergiss die Quellenangaben nicht, solltest du doch im Studium gelernt haben... du hast doch studiert oder? Auch wenns nicht immer leicht fällt, zeige etwas respekt vor dem geistigen eigentum anderer und erwähne den Autor!

done.

Robert [GS]
04-01-06, 12:50
Sehr schön zusammengefasst Satty :)
Lässt sich so um einiges besser lesen ...

Endlich mal wieder ein sehr guter und Inhaltlich sehr Informationsreicher Thread.


angakok, wie wäre es denn einfach mal mit klappe halten? vbmenu_register("postmenu_1931171", true);

Hicks(DerEchte)
04-01-06, 12:51
es klingt zwar viel wenn man so einen prozess auseinander nimmt sieht man sich aber die übertragenen datenmängen pro sekunde an ist es lachhaft was an daten vom client weggeht und vom server ankommt... Und man sollte keinen 386er prozessor im server haben :lol: auch soll gute software die die daten besser verarbeiten kann einen vorteil haben sowie sehr gute datenbank strukturen... Unteranderem kann es auch am eigenen ISP liegen ein Tracert kann da sicherheit schaffen

Also gibt es wirklich viele faktoren die auf nen mmo einwirken können sodas es nicht richtig funktioniert, aber alle diese faktoren können umgangen oder geändert werden vorausgesetzt man will das auch :rolleyes:

mfg
Hicks

angakok
04-01-06, 13:01
']angakok, wie wäre es denn einfach mal mit klappe halten?

...hast du dir die schon mal selber gestellt, mister "ich treib meinen post-counter mit spam hoch" GS... :lol:

Hazuki
04-01-06, 13:04
schöner thread, gibt etwas einblick in die mechanik.

muss aber auch angakok zustimmen, die quellenangabe anzugeben wäre ein mehr als feiner zug.

Satty
04-01-06, 13:14
warum postest du hier sachen, die überhaupt nicht von dir sind?
Falls die Fragezeichen in Deinem Post auch wirklich auf eine Frage hindeuten sollten...

Wie im ersten Satz im ersten Post geschrieben:

In die Materie eingelesen und das gesammelte Wissen wiedergegeben. In eigenen Worten und aus der Erinnerung heraus. Nichts abgeschrieben oder per Copy&Paste übernommen.

Du solltest Du aber auch erkannt haben, das der Bericht im Link und mein Post bis auf wenige Details nichts gemeinsam haben.

Womit Dein Post für mich eigendlich gegenstandslos ist :p

***

@Rest: Jeder hier schreibt etwas nieder, das er irgendwo gelesen, gelernt oder beigebracht bekommen hat. Wenn man sich daraus sein eigenes Bild macht und dieses niederschreibt, ist dann die komplette Angabe aller Quellen nötig?

Falls ihr denkt ja, dann OK... ist mir in Zukunft zuviel Aufwand... die Verlage meiner Schulbücher kenne ich auch nicht mehr alle auswendig.

Dann beschränke ich mich in Zukunft wieder auf Kommentare, die einigen hier scheinbar noch weniger passen, aber wenigstens keine Quellenangabe benötigen.

angakok
04-01-06, 13:20
Wie gesagt, wenn ich irgendwo Wissen entnehme, auch wenn ich es mit eigenen Worten wiedergebe, bleibt es fremdes Wissen. Da finde ich eine Quellenangabe ist nicht zu viel verlangt.

Ich behaupte ja auch nicht E=mc² ist von mir, weil ich in der Lage bin, das Theorem mit eigenen Worten zu beschreiben. :D

Satty
04-01-06, 13:29
Wie gesagt, wenn ich irgendwo Wissen entnehme, auch wenn ich es mit eigenen Worten wiedergebe, bleibt es fremdes Wissen. Da finde ich eine Quellenangabe ist nicht zu viel verlangt.
Selbst jeder Buchstabe den Du setzt ist fremdes Wissen... :p

Diskutiert hier das Thema oder ob es wichtig ist zum Ausgangspost Quellenangaben zu machen... ich hab' verstanden was man mir sagen wollte und werde mich zukünftig darauf einstellen. (Keine Post mehr von mir, mit erlerntem Wissen)

Satei_Harakiri
04-01-06, 13:31
Ich denke die Engstelle sind die Datenbanken.

Es scheint ja so zu sein, das die Status-Daten der Spieler ständig gespeichert werden (um bei Fatal oder schnellem ausloggen wieder passend reinzukommen).

Also Position, aktiver Slot, Synaptic, Healt usw.

Wenn das bei jeden Tick, gemacht wird (also 20/Sek), dann wären das bei 200 Runnern schon 4000 Datenbankzugriffe/Sekunde. Wird wohl nicht jede Sekunde gemacht und es gibt auch Puffertechniken, aber ist ja auch nicht das einzige was gespeichert wird. Mobs/Npc-Positionen, Items die bewegt werden.

Denke die Herausforderung bei einem MMOG liegt bei der Datenbanktechnik.
...
Da bin ich mir nicht sicher, ob wirklich jeder mist sofort in die Datenbank geschrieben wird.
Ich glaube eher das wird eher per Zone gemacht und in der Zone nur zb 1x pro Minute in die Datenbank gespeichert.
Denn was passiert denn wenn du zb einen Fatal hast. Teilweise kommst du ganz woanderst raus also du vorher warst. Wenn das jetzt schon in der Datenbank wäre müsstest du ja immer da rauskommen wo du laut dem Eintrag in der Datenbank stehst.
Daher glaube ich eher das solche Dinge auf dem "Worldserver" zwischengespeichert werden.

Chipmonk
04-01-06, 14:29
Selbst jeder Buchstabe den Du setzt ist fremdes Wissen... :p

Diskutiert hier das Thema oder ob es wichtig ist zum Ausgangspost Quellenangaben zu machen... ich hab' verstanden was man mir sagen wollte und werde mich zukünftig darauf einstellen. (Keine Post mehr von mir, mit erlerntem Wissen)
Ja, wenn man immer die Zitierregeln befolgt, dann müsste man sehr viel zitieren, selbst diese Sätze müsste ich vielleicht zitieren, da ich das von einem Blatt im Deutschunterricht habe. Grundsätzlich müsste man alles was jemand anderes geschrieben hat zitieren, egal ob man es nun wortwörtlich, in einer eigenen Meinung oder in einem in eigener Sprache geschriebenen Werk wiedergibt. Man sagt sogar, dass wissenschaftliche Arbeiten teils nur aus Zitaten bestehen und deren Zusammenhang dann eine neue Idee oder einen neuen Denkansatz bilden.
Naja, aber grundsätzlich würde ich zu solch einer Diskussion einfach nur den Götz von Berlichingen zitieren. *g*

Anmerkung: angakok hat als Beispiel in seinem ersten Posting auch nicht zitiert, obwohl er sich dabei eindeutig auf das Posting von Nevs bezog. Zwar ist die Quellenangabe (Nevs) drin, aber nicht richtig als Zitat angegeben mit Fußnote, etc. Sprich was ich damit sagen will: Beim Zitieren kann man sich wegen viel streiten wegen wie und ob und was. Von daher würde ich das ganze jetzt mal nicht so eng sehen. ;) :angel:



Zur Datenbank:
Mich würde jetzt mal interessieren wie kann man denn so eine Datenbank letztendlich optimieren?

fschepper
04-01-06, 14:41
Da bin ich mir nicht sicher, ob wirklich jeder mist sofort in die Datenbank geschrieben wird.
Ich glaube eher das wird eher per Zone gemacht und in der Zone nur zb 1x pro Minute in die Datenbank gespeichert.
Denn was passiert denn wenn du zb einen Fatal hast. Teilweise kommst du ganz woanderst raus also du vorher warst. Wenn das jetzt schon in der Datenbank wäre müsstest du ja immer da rauskommen wo du laut dem Eintrag in der Datenbank stehst.
Daher glaube ich eher das solche Dinge auf dem "Worldserver" zwischengespeichert werden.
Dass man bei Fatals woanders rauskommt kenn ich nur wenn man während nem Zonenwechsel-Sync rausfliegt, sprich: einer neuen Zone schon zugeordnet wurde, aber in dieser noch keine Position hat.. Dann wird man auf nen allgemein festgelegten Punkt gesetzt..
Ansonsten erscheint man eigentlich immer da wieder, wo man vorher stand, +- max 5 Meter..

Ich bin auch der Meinung, dass alles was mit Itemverschiebung etc zu tun hat on demand funktioniert, d.h. nicht jede Sekunde soundso oft abgeglichen wird, welche Items der Spieler am Körper trägt, sondern beim Wechseln eines solchen wird ein Befehl an die Datenbank geschickt und diese muss erst bestätigen.. Wer mal das Tutorial gespielt hat, weiß wieviel schneller sich Items wechseln, verschieben etc lassen..

commerzgandalf
04-01-06, 14:42
wenn man alle normalformen beachtet sollte man eine echt optimale Datenabnk haben

Chipmonk
04-01-06, 14:48
wenn man alle normalformen beachtet sollte man eine echt optimale Datenabnk haben
Was versteht man unter den Normalformen?

Satei_Harakiri
04-01-06, 14:54
...
Zur Datenbank:
Mich würde jetzt mal interessieren wie kann man denn so eine Datenbank letztendlich optimieren?
Kommt ja ganz drauf an was man letztendlich mit der Datenbank machen will.
Aber Punkte sind auf jedenfall:

Die Abfragen selber minimieren
Cachewerte der Datenbank an die Abfragen anpassen
Hardware entsprechend kaufen und auch einstellen.
Vorallem der letzte Punkt ist halt sehr weitläufig.


Dass man bei Fatals woanders rauskommt kenn ich nur wenn man während nem Zonenwechsel-Sync rausfliegt, sprich: einer neuen Zone schon zugeordnet wurde, aber in dieser noch keine Position hat.. Dann wird man auf nen allgemein festgelegten Punkt gesetzt..
Ansonsten erscheint man eigentlich immer da wieder, wo man vorher stand, +- max 5 Meter..
...
Ja bei den meisten schon, aber ich hatte auch schon welche wo man dann innerhalb der Zone woanderst rauskommt und nicht nur 5m.
Beim Zonenwechsel ist ja die Position genau am anderen ende der Zone beliebt.

commerzgandalf
04-01-06, 15:02
Es gibt 3 normalformen in der Datenbank programierung aus dem kopf weiss ich noch
- Keine Redundante Speicherung der Daten
- nur atomare felder dürfen Primäreschlüssel sein
und nich ein paar kleinigkeiten

mein sql unterricht ist schon zu lange her
aber wenn man das alles beachtet was jeder Progamierer lernt in sachen SQL oder was man auch immer benutzt
dann hat man eine schnelle Datenbank
(ich gebe keine garantie für die richtigkeit der Normalformen bei mir is das zu lange her)
mal satty fragen der weiss das sicher

hajoan
04-01-06, 15:15
Erste Normalform: Attribute sollen atomar sein, wiederholende Gruppen sind auszulagern
Zweite Normalform - volle funktionale Abhängigkeit der Attribute vom Primärschlüssel
Dritte Normalform - ein Nicht-Schlüssel-Attribut darf nicht von einem Schlüssel und einem anderen Nicht-Schlüssel abhängen


Im übrigen gebe ich die Notwendigkeit von Clusterung zur Sicherheit der Daten zu bedenken. Journaling ist auch was feines um die Sicherheit der Daten zu gewährleisten. Ein nettes Stichwort noch hierzu: Hochverfügbarkeit.
Geschwindigkeit ist vieles, aber nicht alles!

commerzgandalf
04-01-06, 15:18
genau so wars :lol:
omg da seh ich mal wieder wie schlecht ich in SQL wa ^^
naja ne 5 in der abschlussprüfung hat mir das auch schon gesagt aber egal :)

hajoan
04-01-06, 15:22
Abfragenminimierung erhalte ich z. B. indem ich Daten redundant halte.
Wiederspricht der 1. Regel der Normalisierung.
Theorie und Praxis sind halt Gegensätze :lol:

Auch der Aufbau von sogenannten views (kann nicht jede Datenbank) ist eine Möglichkeit.
Eine DB2 oder eine Oracle schlucken nicht umsonst soviel Hauptspeicher :p

Die Datenbank könnte ausserdem stark entlastet werden, wenn nicht notwendige Datensätze ausgelagert würden.
So könnte man inaktive Accounts wegsichern und auf der Produktivmaschine löschen.

Übrigens: Daten die im Hauptspeicher sind, müssen nicht von eine lahmen Platte geladen werden :p

commerzgandalf
04-01-06, 15:27
Naja theorie und praxis waren schon immer 2 unterschiedliche sachen

Ich arbeite nu auch als Fachinformatiker auch wenn sql verkackt war
aber schon cool das satty da mal was zusammengestellt hat
liest sich gut und einfach

THX

heute wieder mal gesehen "man lernt nie aus" (keine ahnung von wem das ist also ohne quellenangabe /zietirung)

Mighty Max
04-01-06, 15:32
Najo,

naja die Verwirrung beginnt ja schon mit dem Begriff "atomar". Wichtig dabei ist nicht wirklich, dass der Datentyp atomar ist, sondern seine Behandlung.

Wenn ich einen String (der durchaus als ordinal betrachtet werden kann, da mindestens eine bijektive Abbildung auf N existiert) in einem Schritt bearbeiten kann ohne, dass diese Bearbeitung von einem anderen Zugriff unterbrochen werden kann (er also unteilbar = atomar) ist, so hat er keine Einschränkung die ihn zu einem schlechten Primärschlüssel macht.

Im Prinzip sollte eine Datenbank nur Atomare Zugriffe erlauben. Dies widerspricht jedoch dem SQL Prinzip (bei dem komplexe Operationen in kleinere Teile zerlegt werden) und daher kommt die Diskrepanz zwischen Theorie und Praxis.

angakok
04-01-06, 15:36
gibts hier noch 'nen sinvollen zusammenhang zum spiel oder wollen wir uns gegenseitig lehrbücher vorlesen? sry, aber irgendwie vermisse ich grad die relevanz fürs spiel.

Chipmonk
04-01-06, 15:39
gibts hier noch 'nen sinvollen zusammenhang zum spiel oder wollen wir uns gegenseitig lehrbücher vorlesen? sry, aber irgendwie vermisse ich grad die relevanz fürs spiel.
Naja, ist die Relevanz nicht die, dass man mal ein wenig einen Einblick in das Geschehen hinter den Kulissen bekommt? Also ich finde es sehr interessant, auch wenn ich vielleicht nicht alles verstehe.

hajoan
04-01-06, 15:43
Die 1. Regel der Normalisierung besagt lediglich, das die Daten nur einmal in den Tabellen vorkommen dürfen. Mit den Abfragen hat das direkt nichts zu tun (klar ändert diese Datenhaltung die Abfragen).
Jetzt will ich den sehen, der so Wahnsinnig ist z. B. für Postleitzahlen eine eigene Tablelle mit Primärschlüssel anzulegen.
So einen Mist verzapfen nur Professoren an der Uni, weil sie unbedingt eine perfekte Normalisierung wollen.
Andererseits muss man gerade bei der 1. Normalisierungsstufe Menschenverstand walten lassen.
So erhöht ein halten von redundanten Daten zwar die Lesegeschwindigkeit, führt aber zwangsläufig (gilt nicht für Postleitzahlenbeispiel) zu einer langsameren Schreibgeschwindigkeit, da man die Daten ja mehrmals wegschreiben muss.
Und wehe man vergisst was wegzuschreiben, dann hat man nicht konsistente Daten.

Wenn man von den Daten weggeht ist es heutzutage ja so, das man alles in Teilprozesse zerlegt. Das ist bei Objektprogrammierung ganz extrem. Bei Eiffel etwas mehr als bei Java oder C++
:rolleyes:

Hm... mehr besser nicht dazu, ich fühle mich so weit weg vom Thema.

Achja: Je mehr Daten vom Client verarbeitet werden können, um so flüssiger das ganze. Leider lässt der Character (Ehrlichkeit) es heutzutage immer weniger zu, das Clients in Spielen etwas berechnen. Crahn sei Dank ist der Tod ja Serverseitig.

commerzgandalf
04-01-06, 15:48
wie gesagt
Praxis nicht gleich Theorie

hajoan
04-01-06, 15:53
Und Neocron <> Counterstrike.
Wer da mal auf den mikrigen Karten mit 16 Mann vor lauter Lags nicht mehr wusste wo der Gegner ist, sollte keine Vergleich mit NC anstellen.

Wer es dennoch macht, vergleicht fast immer mit click and pray Spielen, wo man ohne Probleme 2000 Runner in einer Zone halten kann.

Wer sich etwas mit der Materie beschäftigt, frägt sich schon wie das Reakktor eigendlich gelöst hat.

Satty
04-01-06, 16:08
mal satty fragen der weiss das sicher
Der Thread hat mein Wissen zum Thema schon überflügelt ;)

Wer sich etwas mit der Materie beschäftigt, frägt sich schon wie das Reakktor eigendlich gelöst hat.
Ich bin ja gespannt auf Twilight War. Das Spiel sollte technisch ähnliche Ansprüche an das Netzwerk stellen (auch wenn es weniger MMOG sein soll als NC).

Nur der Vergleich wird noch ziemlich lange auf sich warten lassen. Die haben Mitte 2005 mit der Netzwerk/Multiplayer Fähigkeit angefangen (stand bei denen im Forum) und die erste Beta scheinbar schon auf 2007 verschoben (stand vor kurzem hier). Fragt mich aber blos nicht wo genau... ich bin alt und muss mir merken wo ich wohne ;)

commerzgandalf
04-01-06, 16:13
mein gesamter exclan wartet auf TW :(
armen schweine
naja vielleicht kommen sie ja dann zu nc zurück ^^

Satei_Harakiri
04-01-06, 16:30
gibts hier noch 'nen sinvollen zusammenhang zum spiel oder wollen wir uns gegenseitig lehrbücher vorlesen? sry, aber irgendwie vermisse ich grad die relevanz fürs spiel.
Klugscheisser wa?
Ein wirklich sinnvoller Zusammenhang wird sowieso nicht existieren, es seiden KK legt uns die komplette HW/SW Config von NC und dem Cluster offen.
Vorher ist alles andere reine Spekulation und nichts anderes.
Eben wie stand es da so schön? Theorie :D

fschepper
04-01-06, 16:47
Ich bin ja gespannt auf Twilight War. Das Spiel sollte technisch ähnliche Ansprüche an das Netzwerk stellen (auch wenn es weniger MMOG sein soll als NC).

Nur der Vergleich wird noch ziemlich lange auf sich warten lassen. Die haben Mitte 2005 mit der Netzwerk/Multiplayer Fähigkeit angefangen (stand bei denen im Forum) und die erste Beta scheinbar schon auf 2007 verschoben (stand vor kurzem hier). Fragt mich aber blos nicht wo genau... ich bin alt und muss mir merken wo ich wohne ;)
TW wurde eingestellt:
http://neocron.jafc.de/showthread.php?t=131423

RipperFox
04-01-06, 20:50
Ich denke die Engstelle sind die Datenbanken.

Es scheint ja so zu sein, das die Status-Daten der Spieler ständig gespeichert werden (um bei Fatal oder schnellem ausloggen wieder passend reinzukommen).



Nope, nein, nada, auf keinen Fall..

Warum sollte ich das nich im Speicher halten?

Ich tippe bei NC mal, eine Zone ist ein Prozeß auf einem (physikalischen) Server.

Die Daten eines Player-Objekts muss ich nur aus der DB abfragen/zurückschreiben wenn ich die Zone betrete oder verlasse, bzw. wenn ein Player ausloggt (auch nach timeout)..



Denke die Herausforderung bei einem MMOG liegt bei der Datenbanktechnik.

Dem entgegen die Source Engine (der Bericht aus dem Link). Die legt mehr Wert auf möglichst präzise Positionierung und Berechnung der Schüsse, Ausgleich von Lag usw. Was ja bei einem Shooter eher wichtig ist.

Deshalb wohl auch Feuerbälle vom Persi, die einen "Knick" machen, wenn man ausweichen will (der Client hat den Befehl mit dem Teil zu treffen)



mh.. Datenbank is nich so tragisch (wenn man "Eventualitäten" wie Dupes & Crashes vorbeugt - immerhin gabs schon länger kein Rollback bei NC :).

Bei der Source-Engine wurde viel auf "Feeling" optimiert. Das hat Valve ne Stange Arbeit/Geld gekostet. NC macht es halt MMORPG like mit Fire&Forget (alle waffen, selbst Sniper-Gewehre schiessen krumm und das Projektil verfolgt das Ziel :)




Die ganze Abschätzung/Berechnung ob aber geroffen wird trifft nur der Server (Clientseitig wäre zu leicht manipulierbar). Das sind sicher auch einige komplexe Formeln.


och.. nen 3D-Ball ohne Hilfe von Libs in Formeln zu packen is auch nich soo einfach.. Deswegen besteht ein Informatikstudium zum vorwiegenden Teil aus Mathe, ne?

Der Client berechnet übrigens schon das meiste selbst, der Server rechnet wohl mit geringerer Frequenz "mit" - hat allerdings im Zweifel recht :) - das wiederum führt bei Asynchronität zu HLT-Sprüngen, Insta-Death, etc..

Und soooo unterschiedlich sind Source-Engine und NC nun auch nich. Allerdings liegen die Schwerpunkte (Augenweide vs. Playerzahl), Entwicklungsaufwand ("fast alles neu & selbstgemacht" vs. "bohren wir das billige Ding mal auf soweit wir können") und -kosten ("money like shit" vs. "Cheffe hat nen Porsche! Lyncht ihn!") um Welten auseinander..

Das NC massive Probleme im Netzwerkbereich hat ist bekannt. Andere Spiele mit hoher Playerzahl z.B. das alte Tribes hatten mit 64 Playern in Sicht keine derartigen Probleme (pro Zone wohlgemerkt).. Wobei die Sichtweite bei NC ja bei weitem nicht so groß ist wie bei Tribes - man merkt das schön beim Buffern auf Plaza1 - "huh, wo kommen die Leute her?" :)

Ich wär schon dafür, dass die unsere NC Progger mal was abguc... ahh.. sich inspirieren lassen (eben von z.B. http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking )

Aber es gilt wie immer: You always get what you pay for, ne?

Mighty Max
04-01-06, 22:15
Nunja die mathematische Grundlage für die Kollisionsberechnung oder Darstellung deines 3d-Balls ist nicht wirklich schwierig im Mathematischen Verständniss.

Das ist erstsemester Stoff. Und dafür existieren mathematische Algorithmen die so einfach sind, dass sie ein Schüler der 7/8ten Klasse mit Leichtigkeit und einem Taschenrechner lösen könnte. (Gauss und einfache Trigometrische Funktionen) [Dabei ist es weitaus schwieriger - und man verbringt damit die Vorlesungen - deren Ursprung und Korrektheit zu beweisen]

Das Problem bei Kollisionen besteht eher in der Ordnungsklasse des Algorithmus und die Anzahl dieser Berechnungen.

Vor Optimisierungen muss man davon ausgehen, dass jedes Elemnt mit jedem anderen Kollidieren kann. Es wären also n-Fakultät Berechnungen. Das kann kein Supercomputer der Welt.

Daher werden Kollisionen in allen Spielen sehr stark vereinfacht, sowohl die eigentliche Berechnung (die nur konstant viel aufwand [dimensionen^3]) benötigen werden wenn möglich linearisiert (sphärisches kollisions modell), die Anzahl der möglichen Kollisionselemente werden durch Vereinfachung der Modelle (z.b. kubische Annäherungen) reduziert, Elemente gefiltert (BSP), durch Modellgruppierungen reduziert oder sogar einfach ignoriert, weil sie für das Problem irrelevant oder vom Effekt zu geringwertig sind.