Wer wie wo MMO?

String

Erfahrenes Mitglied
Hallo zusammen,

ich bin Hobbygamer und leidenschaftlicher Programmierer.

Und je mehr ich mich intensiv mit dem Thema MMO befasse, desto weniger verstehe ich wie so etwas funktionieren kann.

Nehmen wir das extreme Beispiel WoW.
Einige 1.000 oder gar 10.000 Spieler spielen zusammen auf einem Server.
Ein einziger davon haut gerade einen Gegner kaputt und bei allen anderen muss dieser auch sterben. Alleine bei 1.000 Spieler sind das gigantische Mengen die da durch die Leitungen rein kommen (am Server).

Jetzt kann ich mir aber kaum vorstellen, dass der Server jedem Clienten sendet, dass 500 km entfernt gerade ein Bär umgehauen wurde.

Und genau jetzt kommen wir dazu, was ich alles nicht mehr verstehe.
-> Woher weiß der Spieler, dann das dieser Bär tot ist?
-> Wie verwaltet ein Server solch gigantische Massen?
-> Hat der Server quasi die "Welt" gespeichert und speichert zusätzlich deren "Einstellungen"?
-> Also speichert der Server wirklich ALLE Gegenstände/Objekte..?
-> Woher weiß wer wie die Gegner laufen?
-> Wie oder besser Wer belebt den Gegner wieder? Speichert der Server einen Timer, der dann alle "Toten" Gegner oder aufgehobenen Gegenstände wieder erscheinen lässt?

Ach, ich verstehe es einfach nicht.. :(
Ich kann mir absolut nicht vorstellen wie so ein Server / Client beim MMO funktioniert.
Bei nem "normalen" Online-Spiel sendet der Server einfach zu allen das gesamte geschehen, was ich ja noch verstehe... hm...

Vielleicht kann mir da ja jemand ein wenig auf die Sprünge helfen, damit ich mir beim nächsten mal nicht nur frage "Wie funktioniert das?", sondern weiß wie es geht, wenn ich einen Gegner töte und es quasi "alle" sehen ;)

paD
 
Hallo ich Versuche mal ein Paar Fragen von dir zu beantworten.

-> Woher weiß der Spieler, dann das dieser Bär tot ist?


Der Server sendet dem Spieler die Antwort Bär ist nun tot.
Dies sendet er aber nicht an alle Spieler die auf dem Server sind sondern nur Spieler die den Bär in "Sichtweite" haben.

So geschieht das mit allen "Objekten".

Wie ist das schöne Sprichwort noch so schön.
"Wenn im Wald ein Baum umkippt und keiner ist da um es zu hören ist er dann umgekippt" (oder so ähnlich).

-> Wie verwaltet ein Server solch gigantische Massen?

Meist ist es mehr als nur ein Server sondern eine ganze Server Farm und jeder Server ist für einen bestimmten "Cluster" zuständig.

-> Hat der Server quasi die "Welt" gespeichert und speichert zusätzlich deren "Einstellungen"?
-> Also speichert der Server wirklich ALLE Gegenstände/Objekte..?

Ja der Server hat die "Welt" in einer Datenbank gespeichert wo alle Interactiven Objekte gespeichert sind.

-> Woher weiß wer wie die Gegner laufen?
-> Wie oder besser Wer belebt den Gegner wieder? Speichert der Server einen Timer, der dann alle "Toten" Gegner oder aufgehobenen Gegenstände wieder erscheinen lässt?

Die Spieler erfahren vom Server das die Gegner laufen und hier gilt wieder die Regel nur der auch in der "Sichtweite" des Gegners ist bekommt die Infos.
Sollte ein Gegner ausserhalb der Sichtweite von allen Spielern sein wird er meist vom Server nicht erstellt bzw. bewegt um Ressourchen zu sparen.

Der Server belebt den Gegner wieder, in der Datenbank ist ein "Respawn" timer hinterlegt der sagt ab wann der Gegner respawnt.

Hoffe konnte ein paar Fragen beantworten.
Ob alle Antworten 100% Korrekt sind kann ich nicht garantieren ich spreche hier nur aus Persönlicher erfahrung.
 

Lime

frisch fruchtig
Für gewöhnlich setzt sich ein Server natürlich aus mehreren Hardware-Geräten zusammen, je nach Spiel. Ich kenne mich jetzt persönlich eher bei Metin2 aus und weniger bei WoW, wobei ich dort zumindest ein paar Fakten weiß.

Punkt 1:
Maps sind getrennt. Somit bekommt Spieler 2 einen Kill von Spieler1 nur mit, wenn er auf derselben Map ist (und in Sichtweite + Puffer-Zone, die ein Spieler durchlaufen könnte in naher Zeit).
Oftmals haben Maps unterschiedliche Hardware (nicht so bei Metin2). Meistens hat jede Map auch ihren eigenen Port, damit keine Kommunikationsprobleme aufkommen.
Betrifft z.B. eine Syntax wie: KILL player1 mob273 127 231
bedeutet soviel wie: <befehl> <player> <mob> <x-koordinate> <y-koordinate> (z-koordinate wird aus der Map berechnet... nehm ich mal an)
Wären alle Maps auf demselben Channel, würde es zu Kollisionen kommen.

Punkt 2:
Mobs. Normalerweise gibt es Tabellen in einer zentralen Game-Datenbank, wo alle Mobs + Spawnorte eingetragen sind, genauso wie die respawntime. Dasselbe logischerweise für NPCs. Weil Metin ein so schönes, veraltetes MMORPG ist, werden diese Spawns in einer Text-File gespeichert. Nicht gerade schlau, aber nun ja.
Die aktuell auf den Maps geladenen Mobs/NPCs sind - denk ich mal - im Arbeitsspeicher/SWAP hinterlegt. Begründung: Die Mobs bewegen sich -> ständige DB-Aktualisierung -> zu langsam/zu viel Traffic.
Bei WoW ist es meines Wissens nach so, dass jedes Mob sogar noch eine "Route" oder einen Bereich hat, die es abläuft. Wie das gehandhabt wird, weiß ich allerdings nicht wirklich genau...

Punkt 3:
- woher weiß Spieler2, dass Spieler1 den Bär gekillt hat.
Ganz einfach. Spieler 1 attackiert den Bär (Befehl: ATTACK player1 mob237). Bär stirbt, Server macht eine Rundsendung an alle Spieler im Radius: DEATH mob237
Wenn sich der Bär bewegt, werden auch Rundsendungen gemacht, an alle Spieler im Sichtradius:
WALK mob237 291 230
befehl mob x y
Der Bär wird gleichzeitig im RAM als "tot" markiert. Kommt nun ein Spieler in den Sichtradius, wird er den Bären direkt als tot sehen.

Punkt 4:
- Wie verwaltet ein Server solch gigantische Massen?
Gute Frage, weiß ich nicht. Ich denk mal mit guter Hardware. :D

Punkt 5, gleichzeitig der Letzte:
Thema Timer und Respawn.
Gibt da mehrere Möglichkeiten, wie das aufgebaut ist.
1. Mob spawnt alle 5 Minuten: Mob ist tot, Mob spawnt. Wird es innerhalb von 5Min gekillt, spawnt es 5Minuten nach dem letzten Spawn erneut. Wird es nicht gekillt, bleibt es. Es wird also alle 5Min gecheckt, ob es noch lebt und dementsprechend gespawnt oder eben nicht.
2. Mob spawnt 5Minuten nach dem Tod: Eigentlich selbsterklärend. Das Mob spawnt 5Minuten, nach dem es getötet wurde. -> Zum Teil viel längere Wartezeiten als bei Variante 1.

Technische Umsetzung:
1. Server wird um 11Uhr on gelegt, somit wird für ein Mob, das gespawnt wird (mit 5Min respawntime), der Timestamp, der in 5Min erreicht wird, irgendwo hinterlegt. Ein regelmäßiger Timer überprüft dann, ob der Timestamp erreicht ist und führt den Spawn erneut aus.
2. Ungefähr dasselbe... Mob stirbt -> Timer wird aktiviert -> ausgeführt.

Ich hoffe, es ist ein bisschen aufschlussreich...

Edit:
Vielleicht noch Interessant:
Damit der Traffic minimiert wird, werden kurze! Befehle verwendet.
Statt der Syntax KILL z.b. nur K
Wenn ein Mob erstmalig angegriffen wird, dann (für ATTACK ein A): A player mob
Wird ein Mob mehrmals in Folge angegriffen, kann man sich viel Sparen. Dann gehts eigentlich auch nur noch so: A mob
Player ist klar, wegen der IP und der dauerhaften Verbindung... Mob ist eigentlich auch klar, weil es eben angegriffen wurde. Wird ein neues attackiert, kann man ja den Befehl von vorne komplett ausführen. Somit würde für einen erneuten Angriff an das gleiche Mob sowas reichen: RA für REATTACK

lg, Lime
 
Zuletzt bearbeitet:
zu Punkt 2:
Bei WOW gibt es den SpawntPoint und eine Walking Mast mit mehrer Punkt in der DB.
d.H. "Bär" Spawnt bei Map,x,y,z und dann wird geprüft ob er eine Walkmap hat die aus verschiedenen Punkten besteht.
Ist die Walkmap da wird gesagt "Bär" lauf/fliege zu Map,x1,y1,z1 warte oder mach was und dann lauf entweder zurück oder lauf nach Map,x2,y2,z2.

Wenn kleine Walkmap vorhanden ist wird der "Bär" random bewegt. Die NPCs werden aber auch im RAM / SWAP abgelegt.

So wird es jedenfalls bei dem Emus gemacht ob Blizzard das auch so macht gute frage.
 

Lime

frisch fruchtig
Jub, genau das meinte ich. Bei WoW gibts eben so Wegpunkte, die abgelaufen werden. Das mit dem Random-Bewegen ist mir zwar neu, aber nicht gerade verwunderlich. Weil jedem einzelnen (unwichtigen) Mob eine Walkmap zu schreiben, scheint mir zu viel Aufwand. Das dürfte vor allem für wichtige Mobs/Bosse interessant sein.

Bei Metin2 weiß ich, dass es nicht so ist. Dort ist es 100% random, wobei der Random glaub ich durch irgendetwas beeinflusst wird. Denn zum Teil laufen die Mobs stark in Richtung von Spielern, obwohl es nicht sein müsste... Natürlich nur seeeeeehr langsam
 
Naja auf dem Offi Server haben sie sich schon immer Random bewegt ( +5 - 10, + 5 - 10) in die jeweiligen richtungen vom Spawn Point.

Bei den P-Servern kam es erst später :D.

Die Wegpunkte waren wie du sagtest den Bossen vorbehalten bzw. ein paar Trashmobs in den Instanzen durften auch gezielte Routen laufen.

Aber ich glaube der Thread Ersteller liest hier eh nicht mehr mit. Hatte bei meiner ersten Antwort auch nicht auf das Datum geachtet.
 

Lime

frisch fruchtig
Achja, naja ich habs nur aufgegriffen weils eben in der Top5 der neuen Posts war... :D
Vielleicht kriegt er ja doch eine Mail und liest mit - wobei ich das aktiviert hatte und nach keinen 20 Mails hat mein Provider das als Spam eingestuft. ^^