/*
* Inventory checker made by Funtime to periodically check players inventories
* 5/5/1994
* rewritten a bit and added playtesting stuff Shaydz 5/06/2001 8:58PM
* heavily rewritten by Olorin to actually remove the illegal objects
* Modified so it runs independantly, starting the inv checking process in create() and calling itself out
* Terano, 18/1/98
*/
int do_seek();
string to_log;
void dest_me() {
destruct( TO );
} /* dest_me() */
void create() {
seteuid( "Admin" );
do_seek();
} /* create() */
void log_it() {
if( sizeof( to_log ) > 0 ) {
log_file( "ILLEGAL_OBJECT",
"Illegal objects removed %s\n%s\n", ctime( time() ), to_log );
}
} /* log_it() */
void check_sub_inv( object *things, string owner, object owner_ob ) {
string *pre_filename, filename, *switcher;
object *obs, thing;
obs = ({ });
foreach( thing in things ) {
if( thing->query_property( "virtual name" ) ) {
filename = thing->query_property( "virtual name" );
} else {
pre_filename = explode( file_name( thing ),"#" );
filename = pre_filename[ 0 ];
}
switcher = explode( filename, "/" );
if( switcher[0] == "w") {
to_log += sprintf("%s in %s, cloned by %s\n",
filename, owner, (string)thing->query_cloned_by() );
obs += ({ thing });
}
if( switcher[0] == "d" ) {
if( switcher[1] == "qc" && !playtesterp( owner ) ) {
to_log += sprintf("%s in %s, cloned by %s\n",
filename, owner, (string)thing->query_cloned_by() );
obs += ({ thing });
} else if( switcher[1] == "qc" && !file_exists(filename) &&
!file_exists(filename+".c") ) {
to_log += sprintf("%s in %s, cloned by %s\n",
filename, owner, (string)thing->query_cloned_by() );
obs += ({ thing });
}
if( switcher[1] == "playtesters" && !playtesterp( owner ) ) {
to_log += sprintf("%s in %s, cloned by %s\n",
filename, owner, (string)thing->query_cloned_by() );
obs += ({ thing });
}
}
if( sizeof( switcher ) > 2 && switcher[ 0 ] == "obj" &&
switcher[ 1 ] == "misc" ) {
switch( switcher[2] ) {
case "mailer_ob":
if( !playtesterp( owner ) &&
!owner->query_property("allowed mailer") ) {
to_log += sprintf("%s in %s, cloned by %s\n",
filename, owner, (string)thing->query_cloned_by() );
obs += ({ thing });
}
break;
case "board_mas":
to_log += sprintf("%s in %s, cloned by %s\n",
filename, owner, (string)thing->query_cloned_by() );
obs += ({ thing });
break;
}
}
}
if( sizeof( obs ) ) {
tell_object( owner_ob, "A small official looking dwarf walks up to "
"you and says, \"In accordance with paragraph 5, sub-paragraph "
"7 of the Domestic & Domesticated Animals (Care & Protection) "
"Act, 1673, I hereby remove from you: "+
(string)query_multiple_short( obs, "one" )+"\"\n"
"He scribbles something on a clipboard, then walks away.\n");
obs->move("/room/rubbish");
/* dest them soonest */
call_out("check_obs", 7, obs );
}
} /* check_sub_inv() */
void check_obs( object *obs ) {
object thing;
foreach( thing in obs )
if( thing )
thing->dest_me();
} /* check_obs() */
void check_inv( object player ) {
object *things;
things = deep_inventory( player );
check_sub_inv( things, (string)player->query_name(), player );
} /* check_inv() */
int do_seek() {
object user;
to_log = "";
foreach( user in users() ) {
if( !user->query_property( "guest" ) &&
!user->query_property( "no score" ) && !creatorp(user) )
check_inv( user );
}
log_it();
call_out( "do_seek", 300 ); // Every 5 minutes
return 1;
} /* do_seek() */
int query_theft_command() { return -1; }