/* /secure/daemon/shutdown.c * from Nightmare 3.3 * the daemon which handles all shutdown nonsense * created by Descartes of Borg 940924 */ #include <std.h> #include <rooms.h> #include <commands.h> #include <objects.h> #include "shutdown.h" inherit DAEMON; static private object *__Notify; void create() { daemon::create(); __Notify = ({}); } void reboot_mud(int x) { if(x < 2) return; if(!((int)master()->valid_apply(({}))) && file_name(previous_object(0)) != CMD_END) return; catch(new(OB_SHUT)->move(ROOM_START)); call_out("countdown", 60, x-1); message("broadcast", "Armageddon shouts: I am annoyed! " "Reboot in "+x+" minutes!", users()); } static void countdown(int x) { if(x == 1) call_out("final_warning", 50); else call_out("countdown", 60, x-1); message("broadcast", "Armageddon shouts: Reboot in "+ consolidate(x, "a minute")+"!", users()); if(x == 3) message("broadcast", "Tell me if you need a trip to the shop!", this_player()); notify_listeners(x); } static void final_warning() { call_out("reboot", 10); message("broadcast", "Armageddon shouts: Final warning! Reboot " "in 10 seconds!", users()); notify_listeners(0); } static void reboot() { catch(users()->force_me("quit")); shutdown(); } static private void notify_listeners(int x) { catch(__Notify->call_end(x*60)); } void notify_armageddon(object ob) { __Notify = distinct_array(({ ob }) + __Notify) - ({ 0 }); }