melville/
melville/cmds/
melville/cmds/admin/
melville/data/
melville/data/mail/
melville/data/player/
melville/data/system/
melville/data/user/
melville/doc/functions/
melville/doc/help/
melville/inherit/
melville/log/
melville/obj/
melville/system/auto/
melville/system/player/
melville/system/user/
melville/users/
melville/users/mobydick/
melville/world/
/* The shutdown command.
   Mobydick, 5-26-94.
   Moby secured it to admins and had it force users to quit. 7-9-94.
*/

#include <config.h>
#include <options.h>

int do_command (string str) {

    object *goons ;
    object body ;
    int i ;

    if (previous_object()->query_privileges()!="admin") return 1 ;
    if (!str) {
        write ("You must supply a shutdown reason.\n") ;
	return 1 ;
    }

    write ("Yes, my master.\n") ;
    log_file (SHUTDOWN_LOG,this_user()->query_cap_name()+" shut down the "+
	      "game at "+ctime(time())+" because:\n    "+str+"\n") ;
    goons = USERS_D->query_users() ;
    for (i=0;i<sizeof(goons);i++) {
	goons[i]->catch_tell("Shutting down!\n") ;
	if (body=goons[i]->query_player()) {
	    catch(body->quit()) ;
	} else {
	    catch(goons[i]->quit()) ;
	}
    }
#ifdef DUMP_STATE_AT_SHUTDOWN
    dump_state() ;
#endif
    shutdown() ;
    return 1 ;
}