/* Do not remove the headers from this file! see /USAGE for more info. */
// Folded out from DOOR. --OH.
private string our_ident;
private function sibling_room;
private object cached_sibling;
// DEPRECATED
void setup_sibling(string ident, mixed room) {
if(ident)
our_ident = ident;
if (stringp(room))
sibling_room = (:absolute_path($(room), environment()):);
else
sibling_room = room;
cached_sibling = 0;
}
void set_sibling_ident(string ident) {
if(ident)
our_ident = ident;
cached_sibling = 0;
}
void set_sibling_room(mixed room) {
if (stringp(room))
sibling_room = (:absolute_path($(room), environment()):);
else
sibling_room = room;
cached_sibling = 0;
}
int respond_to_sibling_ident(string id) {
return our_ident == id;
}
object get_sibling() {
if(!environment()) { ZABUG("ENV 0"); return 0; }
if (!cached_sibling) {
object ob;
if(!sibling_room || !evaluate(sibling_room))
return 0;
ob = load_object(evaluate(sibling_room));
if(!ob) { TBUG("NO LOAD"); return 0; }
foreach (object ob2 in all_inventory(ob)) {
if (ob2->respond_to_sibling_ident(our_ident)) {
cached_sibling = ob2;
break;
}
}
}
return cached_sibling;
}
void update_sibling() {
object ob;
if (ob = get_sibling())
ob->update_state( this_object() );
}
void update_state(object ob) {
// Insert stuff to sync
}
private void initial_move() {
object ob;
// when we initially get moved to a room, check if our sibling already
// exits, and if so, get it's state.
if (ob = get_sibling())
update_state(ob);
}
/*
* This is here to properly setup the sibling room. If it's done in setup()
* or mudlib_create() etc, it is called before the door is moved into its
* environment which makes things work 'not quite right'
*/
/*** Deprecated by change to funptr for sibling_room -- Marroc
varargs void on_clone(string direction,string room, mixed rest...)
{
setup_sibling(0,room);
}
***/