Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 1 | SYNOPSIS |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 2 | object clone_object(string name) |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 3 | object clone_object(object template) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 4 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 5 | BESCHREIBUNG |
| 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 9 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 10 | 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 14 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 15 | 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 | |
| 40 | BEISPIELE |
| 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 | |
| 64 | GESCHICHTE |
| 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 | |
| 69 | SIEHE 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) |