Wichtig: Wir unterstützen kein Ingame-Verkäufer und versuchen ihre Werbung herauszufiltern!
 
aktuelles

 

forum

 

allgemein

 

everquest 2

 

Wüste d. Flammen

 

Kingdom of Sky

 

Echoes of Faydwer

 

spielhilfen

 

FAQ

 

media

 

gemeinde

 


MMORPG Allgemein
Veröffentlicht von: Gryphus am 09. 2003 um 16:16 Uhr  

Grundlegende Informationen über MMORPGs Everquest 2 und auch andere Spiele, wie Star Wars Galaxies, Ultima Online, Final Fantasy XI gehören zum Genre der MMORPG. Das heisst verkürzt Massively Multiplayer Online Role Play Game und bedeutet alleine vom Namen her 3 Dinge: Das Spiel ist ein Rollenspiel, das ausschliesslich online gespielt wird und zwar mit vielen Leuten. Im Gegensatz zu Offline Rollenspielen, wie Morrowind, Gothic 2, Neverwinter Night oder Baldurs Gate 2 oder Online Multplayer Spielen wie Unreal Tournament 2003, Counter Strike, Warcraft 3, entwickelt sich die Welt weiter, auch wenn der Spieler nicht im Spiel eingeklinkt ist („persistente Welt“). Das bedeutet auch, dass sich die Geschichte, die Geschehnisse, die Inhalte, usw. weiterentwickeln, z.b. neue Quests oder neue Mobs oder einmalige Events implementiert werden. Dies wird durch ein sogenanntes Live Team ermöglicht. Das Spiel ist auch weit riesiger, es gibt nicht nur Städte, Wälder, weite Gebirge, sondern auch Kontinente, manchmal kann man auch auf anderen Planeten oder Dimensionen oder auf einem Mond spielen. Ausserdem ist es möglich, dass Tausende von Spielern gleichzeitig auf dem Realm (also auf den Servern, die die Spielwelt simulieren) sind und zusammen spielen können Der Service ist auch bemerkenswert, es ist im Spiel möglich eine Anfrage zu starten, z.b. wegen eines möglichen Bugs und es wird wirklich schnell geantwortet (bei EQ1 meist innerhalb von 15 Minuten). Da also die Programmierfirma wegen der Bereitstellung der Server, der Implementierung neuer Inhalte, der hohen Komplexität eines MMORPGs laufend Bugs beseitigt, des hohen Service auch hohe Kosten hat, muss man pro Monat einen gewissen Beitrag zahlen um das Spiel weiter zu spielen. Dieser beträgt meist zwischen 10-15 Euro im Monat. Nachdem man sich aber das Spiel gekauft hat (zu normalen Preisen, also 40-45 Euro), ist ein Monat gratis enthalten. Detaillierte Informationen über MMORPGs 1.Prinzip: Heartbeat/ Tick Der Kern eines MMORPGs ist der Heartbeat, Spieler nennen es meist "Ticks", das ist tatsächlich sowas wie ein "Herzschlag". Bei EQ schlägt der Heartbeat alle 3 Sekunden (wenn ich mich richtig erinnere). Ein "Tick" ist also 3 Sekunden. Dieser Herzschlag löst alle Events im Spiel aus. Z.B. wird man bei jedem Tick ein wenig regenerieren. Ist man vergiftet wird man mit jedem Tick Schaden nehmen. Ein leichtes Gift könnte definiert sein 20 Ticks lang zu wirken. Ebenso tauschen Server und Client mit jedem Tick Positionsmeldungen aus. Der Client meldet dem Server wo der Spieler gerade steht, in welche Richtung er schaut und mit welcher Geschwindigkeit er in welche Richtung wie schnell läuft. Ändert sich daran etwas weil der Spieler z.B. plötzlich stehen bleibt geht wieder eine neue Nachricht an den Server. Der Server erhält diese Meldungen von allen Spielern und berechnet selber solche Daten von allen Objekten im Spiel die er kontrolliert (z.B. NPCs, mobs oder Vehikel). Dann erhält jeder Client alle Informationen die er braucht um die Umgebung für den Spieler darstellen zu können. Dieses System hat sowohl Vor- als auch Nachteile. Der größte Vorteil ist das der Client komplett frei in seinen Bewegungen ist und somit unabhänging vom Ping jeder Spieler die gleiche Bewegungsfreiheit hat. Der Nachteil wird in der Darstellung deutlich. Kommt etwa ein Spieler auf mich zugerannt und bleibt dann plötzlich stehen, so sehe ich erst das er stehen bleibt wenn diese Information meinen Client erreicht. In der Zwischenzeit sehe ich ihn weiter laufen weil das die letzte Information ist, die mein Client zur Berechnung meiner Umgebung hat. Das führt bei einem Lag dazu das mich der Spieler erst über den haufen rennt um dann abrupt wieder vor mir auf zu tauchen. Nämlich dann wenn das Lag vorbei ist und seine tatsächliche Position meinem Client gemeldet wird. 2.Prinzip: Objekt Ein zweites grundlegendes Prinzip sind die Objekte. Wirklich alles was in irgendeiner Form interagieren kann ist ein Objekt. Ein Ganzer Planet ist ein Objekt und ein Sandkorn das ich in mein Inventar nehmen kann ist ebenfalls ein Objekt. Ein Spieler ist ein Objekt, ein NPC ist ein Objekt, auch ein Raum ist voller Objekte. Die Eigenschaften eines Objektes definieren sich über viele Tabellen mit Informationen wie die Größe des Objektes, das Gewicht, ist es Essbar?, ist es vergiftet?, mit welchem Gift? was soll passieren wenn es gegessen wird? usw. Wenn es ein vergiftetes Objekt ist und ich esse es, so ist das Gift selber auch wieder ein Objekt. Das Objekt das ich gegessen habe ist nun vermutlich aus meinem Inventar verschwunden oder ein "Teller Gemüsesuppe" durch das Objekt "schmutziger Teller" ersetzt worden. Gleichzeitig habe ich in einem unsichtbaren Inventar das Objekt "Gift" erhalten das mich nun mit jedem Tick vergiftet bis es sich selbst löscht oder dadurch das ich das Objekt Gegengift trinke von diesem gelöscht wird. Mit diesem Wissen lassen sich sehr viele "Fehler" in einem MMORPG erklären. Etwa warum man einen Muffin nicht essen kann (der Programmierer hat versehentlich die Eigenschaft "Essbar" vergessen). Auch das Crafting System lässt sich einfacher verstehen. Wenn man 5 Objekte in ein sechstes Objekt legt und dann "Kombinieren" klickt, entscheidet das sechste Objekt ob diese 5 Objekte kombiniert werden können, in welcher Form und was mit diesen 5 Objekten dann geschieht und welches neue Objekt dann erscheint. Leichte Nachlässigkeiten in der Programmierung führen dann dazu, dass man sich aus "a egg" und anderen Zutaten ein Omlette kochen kann. "An egg" (Schreibweise beachten!) dazu aber nicht verwendet werden kann. Ein Programmierer hat halt eine bestimmte, wichtige Eigenschaft bei "an egg" vergessen. Das Crafting System soll ja dynamisch sein. Das wird vermutlich bedeuten jedes Objekt hat noch eine Tabelle mit Haufenweise "Crafting Eigenschaften". Blei könnte etwa die Information beinhalten sich mit Zink als Energiequelle zu eignen. Jeweils mit einer Information darüber wie Hochwertig eine solche Kombination mit diesem Objekt werden kann. Das Objekt "Energiequelle" könnte sich dann mit Objekten, die etwa die Ausprägungen "Waffengehäuse" und "Lasergenerator" besitzen, zu einer Laserpistole kombinieren lassen, vorausgesetzt die Qualität und die Größe stimmen. Wie diese Laserpistole aussieht, welche Farbe die Teile haben, wie gut man damit Zielen kann und wie schwer die Treffer sind definiert sich in dem neuen Objekt durch die Eigenschaften der Objekte aus dem es entstanden ist. Prinzipien der Programmierung und der Abläufe Die 4 Elemente eines MMORPG sind 1.) Der Server-Core. Programmiert in C/C++ bringt er, wie schon beschrieben, einen Interpreter für eine objektorientierte Programmiersprache mit und sorgt für den HeartBeat. 2.) Die Library. Das ist das Juwel eines jeden MMORPG, die Bibliothek von Objekten und Funktionen auf denen das Spiel basiert. Sie ist die größte Investition bei der Erschaffung eines neuen MMORPGs und wird in der Script-Sprache erstellt. 3.) Die Objekte. Das eigentliche Spiel, ebenfalls in der Script-Sprache. 4.) Der Client. Sorgt für die visuelle Darstellung des Spiels. In etwa programmiert wie ein Shooter auch. Ist der einzige Teil der beim Spieler liegt. Der Punkt der das eigentliche Spiel ausmacht sind die Objekte. Die grundlegende Struktur eines Objektes wird in der Library definiert. Ein Programmierer "holt" sich aus der Library ein Ausgangsobjekt und modelliert es nach seinen Wünschen um das zu erhalten was er möchte. Beispiel Wasser Als Beispiel könnten wir mal einen einfachen Gegenstand produzieren, sagen wir eine Flasche mit Wasser: Als erstes holen wir uns dazu aus der Bibliothek das Objekt "eatable". Darauf basieren alle "Gegenstände" die irgendwie essbar oder trinkbar sind, also z.B. Fleisch, Zucker oder halt auch eine Flasche Wasser. Jetzt Modellieren wir diesen einfachsten aller Gegenstände zu einer Flasche. Zunächst nennen wir das "eatable" mal in "Flasche" um. Wir weisen dem Gegenstand eine 3D Grafik für die Spielewelt zu und eine 2D Grafik die ihn im Inventory repräsentiert. Dann legen wir verschiedene Objekteigenschaften fest: ------------------------------------------------------------------------- Flasche.Gewicht = 100 g Flasche.Breite = 6 cm Flasche.Tiefe = 6 cm Flasche.Höhe = 15 cm Flasche.Farbe = transparent Flasche.Material = Glas Flasche.Verkäuflich = Ja Flasche.Tauschbar = Ja Flasche.Ablegbar = Ja Flasche.Qualität = 50 Flasche.Decay = 10000 Flasche.Inhalt = Wasser Flasche.Essbar = Ja -------------------------------------------------------------------------------- Wir haben also festgelegt wie Groß und Schwer unsere Flasche ist, aus welchem Material und Farbe, daß man sie an NPCs verkaufen kann, sie mit anderen Spielern tauschen kann und auch einfach ablegen kann. Die Qualität ist 50 und alle 10.000 Ticks wird von der Qualität eins abgezogen bis sie bei 0 unbrauchbar wird. Zuletzt haben wir der Flasche einen noch Wasser als Inhalt gegeben und sie als Essbar bzw. Trinkbar definiert. Jetzt muß tatsächlich ein wenig programmiert werden. Jedes Objekt "eatable" hat bestimmte Grundfunktionen. Versucht ein Spieler ein solches Objekt zu essen wird in dem Objekt eine Funktion "Spieler_will_es_essen()" aufgerufen. Ist diese Funktion nicht da wird das Objekt ganz einfach gegessen und ist dann weg. In unserem Fall möchten wir aber nicht das die Flasche gegessen wird sondern nur das Wasser in ihr getrunken wird. Also müssen wir an dieser Stelle eingreifen um unsere Flasche zu retten Ich versuchs mal so gut es geht mit einer Pseudo-Programmiersprache damit es für jeden verständlich bleibt. ------------------------------------------------------------------------------ Function Spieler_will_es_essen() { Flasche.Inhalt = leer Flasche.Essbar = nein Flasche.2D-Bild = leere_flasche.jpg Spieler.Durst += 100 return (NICHT_ZERSTÖREN) } -------------------------------------------------------------------------------- Der Inhalt der Flasche ist also nun leer. Es ist nicht mehr Essbar und bekommt ein neues 2D Bild das eine leere Flasche zeigt. Der Spieler bekommt 100 Punkte auf seinen Durst gutgeschrieben weil er etwas getrunken hat und schliesslich geben wir an das Objekt die Information zurück, dass es jetzt nicht zerstört werden soll. Die Flasche bleibt also nach dem trinken noch erhalten. In dieser Art gibt es noch viele weitere Funktionen bei denen wir eingreifen könnten. Etwa könnte aus der Flasche ein "Haufen Glas" werden wenn ihre Qualität 0 wird. Dazu könnten wir eine Funktion "Gegenstand_Qualität_abgelaufen()" schreiben die in jedem Objekt immer aufgerufen wird wenn die Qualität auf 0 sinkt. Wenn es sie nicht gibt geht das Objekt halt kaput und verliert jegliche Funktion. Wenn wir eine eigene schreiben könnten wir damit das Objekt durch ein Objekt "Haufen Glas" ersetzen. Weitere mögliche Eigenschaften In dieser Art funktionieren alle Objekte in einem MMORPG. Hier mal eine paar interessante Funktion, die ein Objekt haben KANN (es muß nicht, aber wir könnten dort halt eingreifen und etwas „passieren lassen“: heartbeat() wird im Objekt mit jedem HeartBeat, also alle 3 Sekunden, aufgerufen. Ein Gift-Objekt könnte das nutzen um dem Spieler alle 3 Sekunden Schaden zuzufügen und sich nach 20 Ticks selbst zu löschen. Objekt_wird_angegriffen() wird aufgerufen wenn das Objekt von einem Anderen angegriffen wird. Ein NPC Objekt würde hier reagieren aber auch ein Objekt wie Sprengstoff könnte "angreiffbar" sein. Objekt_stirbt() in einem NPC wird das aufgerufen wenn seine Gesundheit auf 0 sinkt. Normalerweise wird ein NPC einfach durch ein default Objekt "Leiche" ersetzt die dann mit dem im Objekt definierten Loot ausgestattet sein kann. Es wäre aber vorher z.B. noch ein besonderer Todesschrei möglich. Objekt_halb_tod() wird aufgerufen wenn ein NPC nur noch die hälfte seiner Energie hat. Evtl. möchte er dann seine Kampftaktik ändern? Objekt_fast_tod() wird aufgerufen wenn ein NPC nur noch 20% seiner Energie hat. Vielleicht flüchtet er dann oder er ruft um Hilfe. Spieler_will_es_anziehen() wird aufgerufen wenn ein Spieler versucht sich das Objekt anzuziehen. Evtl. ist es ja gefährlich dieses Objekt anzuziehen und der Spieler bekommt einen elekrischen schlag. Oder das Objekt hat besondere Fähigkeiten und erzeugt z.B. ein Energiefeld um den Spieler herum. Man sieht, es gibt nahezu unendlich viele Möglichkeiten wie Objekte auf ihre Umgebung und auf die Spieler reagieren könnten. Und zum Mob des Grauens Naja, in Objekt_stirbt() kann ich natürlich auch den Mob einfach "verschwinden" lassen und durch eine Version des gleichen Mobs ersetzen, die es als Geist repräsentiert und weiter kämpft. Für den Spieler stellt es sich so dar als wäre der Mob nun zum Geist geworden. Es wurde auch mal gefragt wie es möglich ist das man Darth Vader nicht töten kann. In Objekt_halb_tod() könnte eine Horde Wachen aus einem Nachbarraum kommen und Vader Helfen. In Objekt_fast_tod() könnte Vader die Flucht antreten und durch eine Türe verschwinden die er hinter sich zusperrt. So gibt es noch viele weitere Objektarten im Spiel. Offensichtliche, wie einzelne Gegenstände oder mobs, und weniger offensichtliche wie etwa einzelne Missionen oder Buffs. P.S.: In Wahrheit funktioniert es natürlich doch noch etwas anders aber das Prinzip ist schon sehr ähnlich.

Druckansicht  Seitenanfang

galerie

     

    UserCP
    Nicht angemeldet...
     
    [Login] [Registrieren]

       

      webmail



         

        bibliothek



           

          umfragen
          Nutzt ihr das PvP?

          Antwort Prozent
          0% ()
          Duelle und Arena. 19% (301)
          Nur die Duelle. 10% (160)
          Weder noch. 58% (938)
           

             

            serverstatus
                Innovation
                Talendor
                Valor

            19.05.17 - 00:33

               

              features

                   

                  statistiken
                    : 138
                    : 159
                    : 55
                    : 110

                     

                    partner
                    Link us


                    Partner


                    Vanguard : Saga of Heroes