/* dupdate command by wodan */ inherit COMMAND_BASE; #include <creator.h> string other; int do_it( string str ) { object ob, *obs, env; string *all, *dil, file, fnob; mixed static_arg, dynamic_arg; int clone; obs = WIZ_PRESENT->wiz_present( str, TP ); if( !sizeof(obs) ) return 0; foreach( ob in obs ) { env = ENV(ob); if( clone = clonep(ob) ) { static_arg = ob->query_static_auto_load(); dynamic_arg = ob->query_dynamic_auto_load(); } fnob = ( clone ? base_name(ob) : file_name(ob) ); all = inherit_list(ob); foreach( file in all ) { if( other ) { dil = deep_inherit_list( find_object( file ) ); if( !( ( member_array( other, dil ) != -1 ) || other == file ) ) continue; } do_it( file ); } ob->dest_me(); if( ob ) ob->dwep(); if( ob ) destruct(ob); ob = ( clone ? clone_object(fnob) : load_object(fnob) ); if( !ob ) { printf("Could not load "+fnob+".\n"); return 1; } if( static_arg ) ob->init_static_arg( static_arg ); if( dynamic_arg ) ob->init_dynamic_arg( dynamic_arg ); if( env ) ob->move(env); printf("Updated %s.\n", WIZ_PRESENT->desc_f_object( ob ) ); } return 1; } /* do_it() */ int cmd( string str ) { object *tmp; other = 0; notify_fail("usage: dupdate <object> [<object>]\n"); if( !str ) return 0; sscanf( str, "%s %s", str, other ); if( other ) { tmp = WIZ_PRESENT->wiz_present( other, TP ); if( sizeof(tmp) ) other = file_name( tmp[0] )+".c"; else return 0; } return do_it(str); } /* cmd() */