| SYNOPSIS |
| object clone_object(string name, ...) |
| object clone_object(object template, ...) |
| |
| DESCRIPTION |
| Clone a new object from definition <name>, or alternatively from |
| the object <template>. In both cases, the new object is given |
| an unique name and returned. |
| |
| The original used for cloning, called blueprint, should not be |
| used in the system, just for cloning. The cloned objects |
| contain only the data but the blueprint also the function code. |
| The blueprint is the one without a unique number at the end of |
| the object's name. The clone_object() function never |
| returns a blue print. |
| |
| If the <name> or <template> designates a cloned object itself, |
| the system looks up the blueprint object _by name_. |
| |
| Any further arguments will be passed to the H_CREATE_CLONE |
| hook to initialize the cloned object. |
| |
| If the blueprint exists and has a heart_beat(), clone_object() |
| turns it off. |
| |
| Note that the pathname must be complete, which means there are no |
| relative paths allowed. |
| |
| If strict euids are enforced, the cloning object must have |
| a non-zero euid. |
| |
| |
| -- Variable Initialization -- |
| |
| In general, variables are initialized for blueprints and clones alike |
| with a call to the internal lfun __INIT(). |
| |
| However, if #pragma share_variables is in effect (either explicitely |
| given in the source or implicitly as runtime option), the values for |
| a clone's uninitialized variables are taken from the _current_ |
| variables of the object's blueprint. |
| |
| In the absence of share_variables, variables without explicit |
| initializers are initialized to 0. |
| |
| |
| EXAMPLES |
| // Clone a torch (filename in non-compat format) |
| object torch; |
| torch = clone_object("/obj/torch"); |
| |
| // Clone two keys (filename in 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"); |
| } |
| |
| |
| HISTORY |
| Modified in LDMud 3.2.6 to take an object as argument. |
| LDMud 3.3.378 consolidated the variable initialization with the |
| share_variables pragma. |
| |
| SEE ALSO |
| blueprint(E), clonep(E), destruct(E), clones(E), load_name(E), |
| load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC) |