inherit "obj/treasure"; int oldhp, oldsp; int mon_on; object owner; query_name() { return "monitor"; } id(str) { return str=="monitor" || str=="crystal"; } reset(arg) { if (arg) return; set_weight(0); set_value(0); set_heart_beat(1); mon_on=0; } short() { return owner_name()+"'s Monitoring Crystal"; } long() { write (owner_name()+"'s Monitoring Crystal.\n" + "This crystal puts you in touch with changes to your hit points and\n" + "spell points every few seconds.\n" + "Type \"mon\" or \"monitor\" to turn the monitor on and off.\n" + "The frequency of the inform will increase as you get closer to death.\n" + " Mail Jubal with any suggestions.\n" ); } init() { set_owner(); if(this_player()!=owner) return; add_action("monitor","monitor"); add_action("monitor","mon"); if(owner) { oldhp=owner->query_hp(); oldsp=owner->query_sp(); monitor(); } } set_owner() { if ((!owner) || (!present(this_object(),owner))) { if (present(this_object(),this_player())) owner=this_player(); else owner=0; } } owner_name() { set_owner(); if(owner) return owner->query_name(); return "No-one"; } monitor() { if(mon_on) { mon_on=0; write("Monitor off\n"); set_heart_beat(0); return 1; } mon_on=1; set_heart_beat(1); write("Monitor on\n"); return 1; } heart_beat() { int hpdiff, spdiff; if ((!mon_on) || (!owner)) return; hpdiff=oldhp-owner->query_hp(); spdiff=oldsp-owner->query_sp(); if(((hpdiff>3)|| (hpdiff<-2)) ||((owner->query_hp()<(owner->query_max_hp()/5))&&((hpdiff>1)||(hpdiff<-1))) ||((owner->query_hp()<(owner->query_max_hp()/10))&&((hpdiff>0)||(hpdiff<0))) ||((spdiff>3)|| (spdiff<-2)) ||((owner->query_sp()<(owner->query_max_sp()/5))&&((spdiff>1)||(spdiff<-1))) ||((owner->query_sp()<(owner->query_max_sp()/10))&&((spdiff>0)||(spdiff<0))) ) { command("ss",owner); oldhp=owner->query_hp(); oldsp=owner->query_sp(); } } drop() { return 1; } query_auto_load() { return "/players/jubal/obj/monitor:"; }