| SYNOPSIS |
| object clone_object(string name) |
| object clone_object(object template) |
| |
| BESCHREIBUNG |
| Clont ein neues Objekt aus der Definiton <name> oder alternativ aus |
| dem Objekt <template>. In beiden Faellen wird dem Clon ein |
| individueller Name zugeordnet, dann wird der Clon zurueck gegeben. |
| |
| Das Original, Blueprint genannt, wird nur fuer das Clonen verwendet |
| und sollte deshalb nicht im Spiel genutzt werden. Die geclonten |
| Objekte enthalten nur Daten, der Blueprint hingegen auch den |
| Funktionscode. |
| |
| Den Blueprint erkennt man daran, dass er keine Nummer im Objektnamen |
| traegt. clone_object() liefert niemals einen Blueprint zurueck. |
| |
| Wenn der Blueprint existiert und einen heart_beat() aufweist, schaltet |
| clone_object() diesen aus. |
| |
| Die Pfadangabe muss komplett sein. Relative Pfade sind nicht gestattet. |
| Wenn strikte EUIDs gefordert werden, muss das clonende Objekt eine |
| EUID != 0 haben. |
| |
| |
| -- Variablen Initialisierung -- |
| |
| Allgemein werden die Variablen in Blueprints und Clones gleichermassen |
| durch Aufruf der internen lfun __INIT() initialisiert. |
| |
| Ist allerdings das #pragma share_variables in Effekt (entweder |
| explizit im Objekt angegeben, oder als allgemeine Laufzeitoption), |
| werden die Werte fuer die Klonvariable aus den _aktuellen_ Variablen |
| der Blueprint kopiert. |
| |
| Variablen ohne explizite Initialisierung sind hiervon unbetroffen und |
| werden stets auf 0 gesetzt. |
| |
| |
| BEISPIELE |
| // Clone eine Fackel (Name des Files nicht im Compat Format) |
| object fackel; |
| fackel = clone_object("/obj/fackel"); |
| |
| // Clone zwei Schluessel (Name des Files im Compat Format) |
| object key1, key2; |
| key1 = clone_object(load_object("obj/key")); |
| key2 = clone_object(key1); |
| |
| // Create a specialized weapons blueprint. |
| --- std/weapon.c: --- |
| #pragma share_variables |
| int weapon_class = 1; |
| |
| --- broadsword.c: --- |
| inherit "/std/weapon"; |
| |
| int create() { |
| weapon_class = 2; |
| replace_program("/std/weapon"); |
| } |
| |
| |
| GESCHICHTE |
| Modifiziert in LDMud 3.2.6: es werden auch Objekte als Argument |
| akzeptiert. |
| LDMud 3.3.378 fuehrte das pragma share_variables ein. |
| |
| SIEHE AUCH |
| blueprint(E), clonep(E), destruct(E), clones(E), load_name(E), |
| load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC) |