inherit "obj/treasure"; int oldhp, oldsp; int mon_on; int prompt_on; object owner; 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; prompt_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" + "Type \"monprompt\" to turn the info-prompt 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"); add_action("monprompt","monprompt"); 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"); return 1; } mon_on=1; write("Monitor on\n"); return 1; } monprompt() { set_owner(); if(prompt_on) { prompt_on=0; owner->prompt_hook(owner,">"); write("Info-Prompt off\n"); return 1; } prompt_on=1; newprompt(); write("Info-Prompt on\n"); return 1; } newprompt() { owner->prompt_hook(owner,"HP: "+owner->query_hp()+"/"+owner->query_max_hp()+" SP: "+owner->query_sp()+"/"+owner->query_max_sp()+">"); } heart_beat() { int hpdiff, spdiff; if (!owner) return; if ((!prompt_on) && (!mon_on)) return; hpdiff=oldhp-owner->query_hp(); spdiff=oldsp-owner->query_sp(); if((prompt_on) && ((hpdiff) || (spdiff))) newprompt(); if(!mon_on) return; 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))) ) { tell_object(owner,"HP: "+owner->query_hp()+"/"+owner->query_max_hp()+" SP: "+owner->query_sp()+"/"+owner->query_max_sp()+"\n"); command("ss",owner); oldhp=owner->query_hp(); oldsp=owner->query_sp(); } } drop() { return 1; } query_auto_load() { return "/players/jubal/obj/monprompt:"; }