blob: ac8ec3da93578ae26d46fe485da0ab87003fc73a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001Was sind 'virtuelle Objekte'?
2=============================
3Virtuelle Objekte sind Objekte fuer die es keine explizite Quelldatei gibt.
4Ansonsten sind die Objekte (fast) genauso wie alle anderen auch.
5
6Was macht ein Virtual Compiler?
7===============================
8Wenn der Driver ein Objekt "/pfad/objekt" laden soll, guckt er erstmal nach,
9ob es so ein File (/pfad/objekt.c) auf der Platte gibt. Wenn ja, laedt er es
10ganz normal. Wenn nicht, passiert folgendes:
11
121. Der Driver fragt den Master der Mudlib nach dem Objekt.
132. Der Master guckt im Verzeichnis "/pfad/" nach, ob es ein virtual_compiler.c
14 dort gibt. Wenn ja, wird dieses virtual_compiler.c gefragt, ob es sich
15 dafuer zustaendig fuehlt, ein Objekt mit dem Namen "/pfad/objekt" zu
16 erzeugen.
173. Wenn sich der VC fuer zustaendig fuehlt, clont er ein Objekt (z.B. sein
18 Standardobjekt, "stdob.c"), konfiguriert es evtl. noch ein bisschen und
19 gibt es an den Master zurueck. Das erzeugte Objekt heisst an dieser Stelle
20 z.B. "/pfad/stdob#42" (weil es ein Clon von "/pfad/stdob" ist).
214. Der Master gibt dieses erzeugte Objekt an den Driver zurueck.
225. Der Driver benennt das vom Master erhaltene Objekt "/pfad/stdob#42" um in
23 das gewuenschte Objekt "/pfad/objekt". Von diesem Moment an ist es, als ob
24 es ein File "/pfad/objekt.c" gaebe, was dieses Objekt definiert.
25
26Das ist grundsaetzlich das, was ein VC macht.
27
28Was macht der VC in /std/?
29==========================
30Erstmal das oben beschriebene. Fuer welchen Pfad sich dieser VC zustaendig
31fuehlt und welches Objekt er jeweils clonen soll, wird per P_COMPILER_PATH und
32P_STD_OBJECT konfiguriert.
33Zusaetzlich fuehrt er besagte Liste seiner erzeugten Objekte, damit bei einem
34'ls' auf das Verzeichnis diese Objekte mit angezeigt werden.
35Weiterhin zerstoert er alle diese Objekte in seinem eigenen Remove.
36Ausserdem hat er 2 Funktionen, mit denen er entscheiden kann, ob er fuer ein
37bestimmtes angefragtes Objekt zustaendig ist, Validate() und
38QueryValidObject() und eine Funktion CustomizeObject(), die einem frisch
39geclonten Objekt sagen kann, welchen Namen es spaeter einmal haben soll (s.
40jeweilige Manapages).
41
42Wie baut man sich seinen eigenen VC?
43====================================
44Sagen wir, ihr wollt einen VC bauen, der jedem Spieler seinen eigenen Raum
45gibt, damit jeder Spieler in diesem Raum ein Monster allein erlegen muss,
46ohne dass andere Spieler mit drin sind.
47Dann braucht ihr zuerst mal einen Raum, der die Vorlage fuer alle VC-Raeume
48sein soll, z.B. std_arena.c. Diesen legt ihr in das Verzeichnis, wo der VC hin
49soll, z.B. /d/region/magier/vc/.
50In diesem Verzeichnis legt ihr nun ein File virtual_compiler.c an, welches
51/std/virtual/v_compiler erbt.
52Im create() setzt ihr nun P_COMPILER_PATH auf "/d/region/magier/vc/" und
53P_STD_OBJECT auf "/d/region/magier/vc/std_arena".
54Soll euer VC keine Para-Raeume erzeugen, setzt ihr P_PARA auf ({}).
55Sodann muesst ihr ein Validate() formulieren (s. Manpage), welches prueft, ob
56ein spaeter gewuenschtes Objekt den richtigen Namen (ohne Pfad) hat, z.B.
57'arena|spielername' und in diesem Fall genau diesen Namen zurueckliefert und
58in anderen Faellen 0.
59Das wars. Zumindest in diesem einfachen Fall seid ihr im wesentlichen fertig.
60Ihr koennt einen Spieler nun mit
61 pl->move("/d/region/magier/vc/arena|spielername",M_GO)
62in 'seinen' persoenlichen Raum bewegen.
63
64Bitte beachtet allerdings noch die Hinweise und Beschreibungen in den Manpages
65zu den einzelnen Funktionen und Properties.
66
67
68Beispiele:
69==========
701. /doc/beispiele/virtual/zesstra/virtual_compiler.c
71 VC, der jedem Spieler einen eigenen Raum gibt. Da hier der Inhalt aller
72 Raeume gleich ist (alle Spieler sollen gleiche Bedingungen haben), ist
73 keine Konfigurierung mit Hilfe von CustomizeObject() noetig.
74
752. /doc/beispiele/virtual/hate/vr_compiler.c
76 Dies ist ein Beispiel fuer einen sehr allgemeinen VC, der es
77 erlaubt anzugeben in welchem Bereich sich die x und y Koordinaten befinden
78 und dann Raeume erzeugt, welche Ausgaenge in alle vier Himmelsrichtungen
79 haben.
80
81-----------------------------------------------------------------------------
8227.10.2007, Zesstra