/** * Nothing in this shadow should be modified directly. The shadow * should do it all for us. */ #include <move_failures.h> inherit "/std/effect_shadow"; int _keep; string _identifier; object _owner; int query_keep() { return _keep; } void set_keep_value(int keep) { _keep = keep; } void set_keep() { _keep = 1; } void reset_keep() { _keep = 0; } string query_identifier() { return _identifier; } void set_identifier( string word ) { _identifier = word; } void set_identity_hold_owner(object ob) { _owner = ob; } /* set_identity_hold_owner() */ object query_identity_hold_owner() { return _owner; } /* query_identity_hold_owner() */ string *parse_command_id_list() { string *words; words = (string *)player->parse_command_id_list(); if( TP == _owner && stringp( _identifier ) && !sizeof( filter( previous_object( -1 ), (: $1->ignore_identifier() :) ) ) ) { words += ({ _identifier }); } return words; } /* parse_command_id_list() */ varargs int move( mixed dest, string messin, string messout ) { int flag; object ob; if( !ENV(player) ) return player->move( dest, messin, messout ); flag = player->move( dest, messin, messout ); if( flag == MOVE_OK && objectp( dest ) ) { ob = ENV(player); while( ob && ob != _owner ) ob = ENV(ob); if( ob != _owner ) remove_this_effect(); } return flag; } /* move() */