/* base_scout.c by malik May 97 */ /* modded a bit. Malik, sept 97 */ inherit "/obj/monster.c"; #define ME "/obj/chars/scout.c" object *people = ({}); object *rep_list = ({}); object *rep_list_temp = ({}); object *tar_list = ({}); object hide; int hb, i,j,k,l; string *my_friends, mssg, tar; mixed *watch_list; void set_my_friends(string str, string str2){ my_friends = ({str, str2}); } void set_watch_list(string str, string *list){ watch_list = ({str, list}); } object *query_target_list(){ tar_list = ({}); people = users(); tar = my_friends[0]; for(i=0;i<sizeof(people);i++){ switch(tar){ case "group": if(people[i]->query_group_name()==my_friends[1]) tar_list += ({people[i]}); break; case "race_group": if(people[i]->query_race_group_name()==my_friends[1]) tar_list += ({people[i]}); break; case "guild": if(people[i]->query_guild_name()==my_friends[1]) tar_list += ({people[i]}); break; } } return(tar_list); } void init(){ ::init(); add_attack_spell(50, "panic attack", ({ME,"panic_attack",0})); if(sneaky){ hide = clone_object("/std/commands/shadows/hide.c"); hide->setup_shadow(this_object()); } } void event_enter(object guest, string mess){ if(guest->query_creator()) return; if(guest->query_dead()) return; if(guest->query_hidden()&&random(guest->query_level())>= random(this_object()->query_level())/4) return; /* exclude my employers */ if(my_friends[0]=="group" && guest->query_group_name()==my_friends[1]) return; if(my_friends[0]=="race_group" && guest->query_group_name()==my_friends[1]) return; if(my_friends[0]=="guild" && guest->query_group_name()==my_friends[1]) return; if(watch_list[0]=="race"){ if(member_array(guest->query_race_name(),watch_list[1])==-1) return; if(member_array(guest,rep_list)==-1) rep_list += ({guest}); } } void do_messaging(string mssg,object *tar_list){ for(j=0;j<sizeof(tar_list);j++){ tell_object(tar_list[j],"%^YELLOW%^"+mssg+"%^RESET%^"); } } void heart_beat(){ ::heart_beat(); if(sizeof(rep_list)){ rep_list_temp = rep_list; for(l=0;l<sizeof(rep_list);l++){ if(!rep_list[l]) rep_list_temp -= ({rep_list[l]}); } rep_list = rep_list_temp; } if(!sizeof(rep_list)){ hb = 0; return; } if(sizeof(query_attacker_list())){ hb = 0; return; } if(this_object()->query_silence_spell()){ hb = 0; return; } hb++; if(hb<=6) return; mssg = "["+this_object()->query_cap_name()+ ": "+environment(this_object())->query_short()+ "] reports :"; for(k=0;k<sizeof(rep_list);k++){ mssg+= " " +(member_array(explode(rep_list[k]->query_race_name(),"")[0], ({"a","e","i","o","u"}))==-1?"a ":"an ") +rep_list[k]->query_race_name() +(k<=sizeof(rep_list)-2?", ":"")+ (k>0&&k==sizeof(rep_list)-2?"and":""); } mssg+= " passed by me.\n\n"; do_messaging(mssg,query_target_list()); rep_list = ({}); hb = 0; } void missing(string mssg, object *tar_list){ call_out("do_messaging",15,mssg,tar_list); } void do_death(object doer){ object *killers; int a; string logmssg; mssg = "\n[Contact has been lost with " +this_object()->query_cap_name()+ " from "+ETO->query_short()+".\n\n"; call_other(ME,"missing",mssg,query_target_list()); logmssg = file_name(this_object())+"(" +this_object()->query_level()+") was slain by: "; killers = this_object()->query_attacker_list(); if(!sizeof(killers)&&doer){killers = doer->query_name();} for(a=0;a<sizeof(killers);a++){ logmssg += killers[a]->query_name()+" "; } logmssg += ctime(time())+"\n"; log_file("scout_log",logmssg); ::do_death(doer); } void panic_attack(string str, object ob, int q){ call_out("panic_recover",5,ob,ob->query_wimpy()); ob->set_wimpy(99); } void panic_recover(object ob, int num){ ob->set_wimpy(num); } void setup_scout(){ TO->set_guild_ob("/std/guilds/warriors/fighter.c"); TO->set_level(15+random(15)); TO->set_max_gp(query_max_gp()*2); TO->set_gp(query_max_gp()); TO->set_str(15+random(14)); TO->set_con(10+random(9)); TO->set_dex(17+random(2)); TO->set_int(15+random(4)); TO->set_wis(15+random(4)); TO->set_cha(10+random(9)); TO->set_wimpy(50+random(50)); TO->set_aggressive(0); set_kill_xp(query_kill_xp()/4); tar_list = ({}); rep_list = ({}); set_my_friends("group","Nerdinators"); set_watch_list("race",({"nerd"})); add_timed_property("sense_life", random(2), 20000); }