/** @ignore yes */
void crash( string crash_mess, object command_giver, object current_object ) {
object thing, *things;
string str;
if( PO && sizeof( call_stack() ) > 1 ) {
write("Sorry, crash() can only be called by the driver.\n");
return;
}
reset_eval_cost();
str = "\n"+ ctime( time() ) +":\n";
if( current_object )
str += "current object: "+file_name( current_object )+" ("+
(string)current_object->query_name()+")\n";
if( command_giver )
str += "command giver: "+file_name( command_giver )+" ("+
(string)command_giver->query_name()+")\n";
if( query_verb() )
str += "command given: "+query_verb()+"\n";
str += "crash reason: "+crash_mess+"\n";
things = efun::users();
str += "["+implode( things->query_name(), ", ")+"]\n";
unguarded( (: write_file, "/log/CRASH", str :) );
foreach( thing in things ) {
efun::tell_object( thing, "MudOS shouts: Oh no! I have to crash "+
"the driver now!\n("+crash_mess+")\n");
catch( thing->quit() );
}
} /* crash() */