SYNOPSIS void set_this_object(object|lwobject object_to_pretend_to_be) DESCRIPTION This is a privileged function, only to be used in the master object or in the simul_efun object. It changes the result of this_object() in the using function, and the result of previous_object() in functions called in other objects by call_other()/apply()/funcall(). Its effect will remain till there is a return of an external function call, or another call of set_this_object(). While executing code in the master object's program or the primary simul_efun object's program, set_this_object() is granted even if this_object() is altered by set_this_object(). This does not apply to functions inherited from other programs. Use it with extreme care to avoid inconsistencies. After a call of set_this_object(), some LPC-constructs might behave in an odd manner, or even crash the system. In particular, using global variables or calling local functions (except by call_other) is illegal and actively prevented. Allowed are call_other(), map functions, access of local variables (which might hold array pointers to a global array), simple arithmetic and the assignment operators. BUGS It is currently not possible to directly restore the original current object. So instead of writing object me = this_object(); set_this_object(that); set_this_object(me); one has to use a workaround: private void doit (object that) { set_this_object(that); } funcall(#'doit, that); Some people would consider this a feature. HISTORY LDMud 3.2.10 actively prevents references to global variables and function calls by address while set_this_object() is in effect. SEE ALSO this_object(E), set_this_player(E)