inherit "std/object"; int our_offset, their_offset, last_time, cur_alarm, offset_alarm, alarm; string alarms, alarm_write, alarm_name; object our_player; string get_time(); setup() { set_name("watch"); add_adjective("demonic"); add_alias("watch"); set_main_plural("demonic watches"); set_short("demonic watch"); set_long("A small wrist attackable living quaters for a demon "+ "the demon looks pretty harried about giveing out the "+ "time all the time, and the pay is lousy. PS try \"use\" "+ "watch.\n"); our_offset = -4; their_offset = 8; last_time = time(); call_out("check_alarm",60); alarms = ({ }); } long() { if (our_offset == their_offset) return ::long()+".\n"+get_time()+".\n"; else return ::long()+"\n"+get_time()+"\nMud time: "+ctime(time())+".\n"; } string query_read() { if (our_offset == their_offset) return get_time()+".\n"; else return get_time()+"\nMud time: "+ctime(time())+".\n"; } init() { add_action("do_time","time"); add_action("set_gmt","gmt"); add_action("use","use"); this_player()->add_command("read", this_object()); } use(arg) { if (!alarms) alarms = ({ }); if (member_array(this_object(),find_match(arg,environment())) == -1) return 0; printf("%-=80s","You look into the watch and fiddle with several buttons, "+ "Finally a light lights up in the top corner say you have "+ "the security clearance to modify the settings.\n"+ "You can \"set\" an alarm \"remove\" an alarm \"list\" the "+ "set alarms. You can \"quit\" also.\n"); write("What do you wish to do ? "); input_to("the_command"); return 1; } the_command(arg) { string s1; int i; if (arg == "quit") { write("Thank you for using this wonderful watch.\n"); return 1; } if (sscanf(arg,"set%s",s1)) { int hour, min; string name, bing; if (sscanf(s1," %s %d:%d%s",name,hour,min,s1)!=4) write("Usage: set <name> <hour>:<min> [+]\n"); else { if ((i=member_array(name,alarms))<0) alarms += ({ name, hour, min, 0 }); else if (i%4) write("Oooooopps, you cannot use that name as an alarm\n"); else { alarms[i+1] = hour; alarms[i+2] = min; } if (s1 == " +") { if (i==-1) i = sizeof(alarms)-4; cur_alarm = i; get_text(); return 1; } } } if (sscanf(arg,"remove%s",s1)) { string frog; if (sscanf(s1," %s",frog)!=1) write("Usage: remove <name>\n"); else if ((i=member_array(frog,alarms))<0) write("You must remove an existing alarm\n"); else if (i%4) write("Ohhh dear.\n"); else { alarms = delete(alarms,i); alarms = delete(alarms,i); alarms = delete(alarms,i); alarms = delete(alarms,i); } } if (sscanf(arg,"list%s",s1)) { string chicken; if (sscanf(s1," %s",chicken)!=1) { for (i=0;i<sizeof(alarms);i+=4) { write("Alarm "+alarms[i]+" is set for "+alarms[i+1]+":"+alarms[i+2]+"\n"); } } else { if ((i=member_array(chicken,alarms))<0) write("That alarm does not exist.\n"); else if (i%4) write("Bing basicly"); else write("You have set alarm "+chicken+" to go off at "+alarms[i+1]+":"+ alarms[i+2]+"\n"); } } if (sscanf(arg,"time%s",s1)==1) { write(get_time()+"\n"); } if (sscanf(arg,"gmt%s",s1)==2) { } write("What do you wish to do ? "); input_to("the_command"); return 1; } int do_read() { if (query_read_mess() && !::do_read()) return 0; write(get_time()+"\n"); return 1; } set_gmt(string arg){ if (!arg) { notify_fail("You must give a GMT to set to.\n"); return 0; } if (arg[0] == '+') sscanf(arg,"+%d",their_offset); else sscanf(arg,"%d",their_offset); write("Ok your GMT offset is now set to "); if (their_offset>=0) write("+"+their_offset+".\n"); else write(their_offset+".\n"); return 1; } do_time() { write(get_time()+"\n"); write("Mud time: "+ctime(time())+".\n"); return 1; } get_time() { string the_time; the_time = ""; the_time = ctime(time()-(our_offset-their_offset)*3600); return the_time; } string text; get_text(line) { if (!line) { text = ""; write(sprintf("%-=80s","Please enter the text you wish to be displayed "+ "when the alarm goes off (. to finish)")); } else if (line==".") { alarms[cur_alarm+3] = text+"\n"; write("What do you wish to do ? "); input_to("the_command"); return 1; } else text += line+"\n"; write("] "); input_to("get_text"); return 1; } query_auto_load() { mixed ret; int i; if (!alarms) alarms = ({ }); ret = ({ their_offset, alarms }); return ret; } init_arg(arg) { string bits,name,text; int i,hour,min; their_offset = arg[0]; alarms = arg[1]; if (!alarms) alarms = ({ }); } check_alarm() { int the_time, offset, i; the_time = time(); offset = (the_time/(3600*24))*3600*24 - our_offset*3600; for (i=0;i<sizeof(alarms);i+=4) { int tmp; tmp = offset + (alarms[i+1]-our_offset+their_offset)*3600 + alarms[i+2]*60; if (the_time>tmp && tmp>last_time) { /* we go off. bounce */ alarm = 6; alarm_name = alarms[i]; if (alarms[i+3]) alarm_write = explode(alarms[i+3],"\n"); else alarm_write = ({ "Beep Beep Beep, Your "+alarms[i]+" alarm has gone off.\n", "Beep Beep Beep, Your "+alarms[i]+" alarm has gone off.\n", "Beep Beep Beep, Your "+alarms[i]+" alarm has gone off.\n", "Beep Beep Beep, Your "+alarms[i]+" alarm has gone off.\n", "Beep Beep Beep, Your "+alarms[i]+" alarm has gone off.\n", "Beep Beep Beep, Your "+alarms[i]+" alarm has gone off.\n", }); offset_alarm = 0; set_heart_beat(1); } } last_time = the_time; call_out("check_alarm",60); } heart_beat() { if (our_player) our_player->event_say(this_object(), "The watch goes: "+ alarm_write[offset_alarm++]+"\n"); if (offset_alarm>sizeof(alarm_write)) set_heart_beat(0); } move(ob) { int i; i = ::move(ob); our_player = environment(); return i; }