/*
* This is a shut down deamon, that will take care of shutting down
* the game.
* Call the function "shut" with a number of seconds as an
* argument.
* Don't clone this object.
*/
#include <mudlib.h>
inherit MONSTER;
#ifdef NATIVE_MODE
void create() {
::create();
#else
reset(arg) {
::reset(arg);
if (arg)
return;
#endif /* native */
set_name("armageddon");
set_level(19);
set_wc(40);
set_ac(20);
set_short("Armageddon the game crasher");
set_long("He looks like he enjoys to stop the game.\n");
set_alias("shut");
set_magic_resist(100);
mmsgin = "Arrives in a puff of smoke";
move_player("in a puff of smoke#room/city/square");
}
shut(int seconds) {
int i;
if(!"obj/master"->valid_player_call(previous_object())) {
write("Use: shutdown <reason>\n");
return 1;
}
if(!seconds) {
write("No time given\n");
return;
}
set_long("He is firmly concentrated on counting.\n");
i = remove_call_out("cont_shutting");
if (i > 0) {
i = (i + 10) * 4;
if (i < seconds) {
write("There was already a shutdown in process, " + i +
" seconds.\n");
seconds = i;
}
}
call_out("cont_shutting", 0, seconds * 60);
}
int transport_offer;
cont_shutting(int seconds) {
string delay;
int new_delay;
if (seconds <= 0) {
shout(query_name() + " shouts: I will reboot now.\n");
shutdown();
return;
}
if (seconds <= 240 && !transport_offer) {
shout(query_name() +
" shouts: Tell me if you want a trip to the shop !\n");
transport_offer = 1;
}
new_delay = seconds * 3 / 4 - 10;
call_out("cont_shutting", seconds - new_delay, new_delay);
delay = "";
if (seconds > 59) {
delay = seconds / 60 + " minutes ";
seconds = seconds % 60;
}
if (seconds != 0)
delay += seconds + " seconds";
shout(query_name() + " shouts: Game reboot in " + delay + ".\n");
}
catch_tell(str) {
string who, what;
object ob;
if (!transport_offer)
return;
if (sscanf(str, "%s tells you: %s", who, what) != 2)
return;
this_player()->move_player("X#room/shop");
}
shouting(string str) {
object obj;
int j;
obj = users();
for(j=0; j<sizeof(obj); j++) {
if(!obj[j] -> query_edit())
tell_object(obj[j], str);
}
}