blob: 3b6734f37228b369940eba57cc25d0c5d795a89a [file] [log] [blame]
Zesstrad59c3892019-11-28 20:53:39 +01001SYNOPSIS
MG Mud User88f12472016-06-24 23:31:02 +02002 object clone_object(string name)
Zesstrad59c3892019-11-28 20:53:39 +01003 object clone_object(object template)
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstrad59c3892019-11-28 20:53:39 +01005BESCHREIBUNG
6 Clont ein neues Objekt aus der Definiton <name> oder alternativ aus
7 dem Objekt <template>. In beiden Faellen wird dem Clon ein
8 individueller Name zugeordnet, dann wird der Clon zurueck gegeben.
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstrad59c3892019-11-28 20:53:39 +010010 Das Original, Blueprint genannt, wird nur fuer das Clonen verwendet
11 und sollte deshalb nicht im Spiel genutzt werden. Die geclonten
12 Objekte enthalten nur Daten, der Blueprint hingegen auch den
13 Funktionscode.
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstrad59c3892019-11-28 20:53:39 +010015 Den Blueprint erkennt man daran, dass er keine Nummer im Objektnamen
16 traegt. clone_object() liefert niemals einen Blueprint zurueck.
17
18 Wenn der Blueprint existiert und einen heart_beat() aufweist, schaltet
19 clone_object() diesen aus.
20
21 Die Pfadangabe muss komplett sein. Relative Pfade sind nicht gestattet.
22 Wenn strikte EUIDs gefordert werden, muss das clonende Objekt eine
23 EUID != 0 haben.
24
25
26 -- Variablen Initialisierung --
27
28 Allgemein werden die Variablen in Blueprints und Clones gleichermassen
29 durch Aufruf der internen lfun __INIT() initialisiert.
30
31 Ist allerdings das #pragma share_variables in Effekt (entweder
32 explizit im Objekt angegeben, oder als allgemeine Laufzeitoption),
33 werden die Werte fuer die Klonvariable aus den _aktuellen_ Variablen
34 der Blueprint kopiert.
35
36 Variablen ohne explizite Initialisierung sind hiervon unbetroffen und
37 werden stets auf 0 gesetzt.
38
39
40BEISPIELE
41 // Clone eine Fackel (Name des Files nicht im Compat Format)
42 object fackel;
43 fackel = clone_object("/obj/fackel");
44
45 // Clone zwei Schluessel (Name des Files im Compat Format)
46 object key1, key2;
47 key1 = clone_object(load_object("obj/key"));
48 key2 = clone_object(key1);
49
50 // Create a specialized weapons blueprint.
51 --- std/weapon.c: ---
52 #pragma share_variables
53 int weapon_class = 1;
54
55 --- broadsword.c: ---
56 inherit "/std/weapon";
57
58 int create() {
59 weapon_class = 2;
60 replace_program("/std/weapon");
61 }
62
63
64GESCHICHTE
65 Modifiziert in LDMud 3.2.6: es werden auch Objekte als Argument
66 akzeptiert.
67 LDMud 3.3.378 fuehrte das pragma share_variables ein.
68
69SIEHE AUCH
70 blueprint(E), clonep(E), destruct(E), clones(E), load_name(E),
71 load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC)