// /std/player.c -- Vincent's Hollow Project. #include <daemons.h> #include <wizlev.h> #include <files.h> #include "/std/player/eval.h" #include "/std/logic/status.h" /* should be errors.h ? */ #define LOGIN "/etc/news/login/" #define START "/room/inns/inn" inherit "/std/living"; inherit "/std/prop/2player"; inherit "/std/player/alias"; inherit "/std/player/announce"; inherit "/std/player/ask_for_money"; inherit "/std/player/autoload"; inherit "/std/player/half_skills"; inherit "/std/player/hours"; inherit "/std/player/more"; inherit "/std/player/save"; inherit "/std/player/showsc"; inherit "/std/player/title"; inherit "/std/player/zaway"; static string *login_news_files; static int size, count; static int autosave,idlewarn; static int reallyon; string value_real_name; void setup_cont(); void init_weight(); // // Let us create the player object! // void create() { int i; object *list; living::create(); if(file_name(this_object()) == "/std/player") set_prop("!cleanup"); // Actions defined in player.c (not handled by bin daemon). add_action("quit","quit"); } // // Functions called from setup_ob & etc. Put before the function so that // as little prototypings need to be done. // void heart_beat() { living::heart_beat(); if(!interactive(this_object())) { stop_heart_beat(); master()->add_netdead(query_real_name()); } if(interactive() && !query_wiz() && query_idle(this_object())>500) { if(!idlewarn) { tell_object(this_object(), "IDLE WARNING: You may be kicked off for idling.\n"); idlewarn=1; } if(query_idle(this_object())>600) { if(idlewarn<2) { tell_object(this_object(), "IDLE WARNING: No action for last 10 min.\n"+ "IDLE WARNING: At 15 min. you may be kicked off.\n"); idlewarn=2; } if(query_idle(this_object())>900) { tell_object(this_object(), "The Gamedriver forces you to quit 'cuz of idling.\n"); force_me("save"); force_me("quit"); } } } if(this_object()->query_wiz()) return; autosave++; if(autosave>900) { tell_object(this_object(), "The Gamedriver autosaves your present state of mind.\n"); force_me("save"); autosave=0; } } /************************************************************************* * * Initialization routines */ void init_wiz() { string dir; set_wiz((int)MOIRA->init_user(query_real_name(),"level")); if(!query_wiz()) return; enable_wizard(); set_sponsor((string)MOIRA->init_user(query_real_name(),"sponsor")); dir = "/w/"+query_real_name(); if(file_size(dir)!=-2) dir = "/open"; set_path(dir); if(!query_env("HOME")) set_env("HOME",dir); } string query_mvis() { return ""; } void init_env() { if(!query_min()) set_env("MIN", "arrives"); if(!query_mout()) set_env("MOUT", "leaves"); if(!query_mmin()) set_env("MMIN", "steps out of a sudden break in space"); if(!query_mmout()) set_env("MMOUT", "steps through a sudden break in space"); if(!query_mvis()) set_env("MVIS", "appears in a puff of smoke.\n"); } void goto_start() { string file; if(this_player()->query_tot_exp() < 1) { move("/room/special/giverace"); return; } if("/room/jail/jail"->check_in_jail(this_player()->query_real_name())) { move("/room/jail/jail"); return; } if(this_player()->query_dead()) { move("/room/death/boatto"); return; } if(query_login_point()) { file = query_login_point(); } else { if(query_wiz()) { file = "/w/"+query_real_name()+"/workroom.c"; if(file_size(file) <= 0) file = START; } else { if(!query_class()) file = "/room/special/givestat"; else file = START; } } move(file); } void get_start_objects() { object ob; } void start_actions() { force_me("look"); } // // Called from /bin/adm/login.c object. // void setup_ob() { set_heart_beat(1); set_name((string)KERBEROS_D->query_name(this_object())); value_real_name=query_name(); if(!query_short()) set_short(capitalize(query_real_name())); init_env(); init_aliases(); init_weight(); init_wiz(); set_lit(time()); set_ip(query_ip_name(this_object())); write("\n"); get_start_objects(); load_aloads(); /* A little Post-setup ensurances - Sunnywiz */ update_stat_mod(); update_realm_mod(); goto_start(); say(query_cap_name()+" appears in a sudden whirlwind.\n"); start_actions(); } // // Actions defined for player.c object. // int quit() { string file; save_aloads(); /* no! no! no! */ save_player(query_real_name()); write("A sudden gale sweeps you back into reality.\n"); say("A sudden gale swept "+query_cap_name()+" back into reality.\n"); if (reallyon) announce(1); call_out("remove",1); return 1; } // // Misc. util functions. // string process_input(string arg) { return arg; } // User-definable prompt. void catch_tell(string str) { receive(str); } int query_ghost() { return query_dead(); } string query_long() { return query_title_name()+"\n"+living::query_long(); } int query_player() { return 1; } status id(string s) { if(s == query_name()) return 1; return 0; } void init_weight() { int i, tot; for(i = 0; i < sizeof(val_coins); i++) tot += val_coins[i]; add_weight(tot); } int switchdevel() { "/bin/adm/switchdevel"->switchdevel_request(this_object()); return 1; } void write_prompt() { object env; if(!query_prompt()) if(query_wiz()) set_prompt("> "); else set_prompt("=> "); switch (query_prompt()) { case "generic": write("> "); return; case "path": write(query_path()+" > "); return; case "time": write(extract(ctime(time()),11,18)+" > "); return; case "environment": env = environment(this_player()); if(!env) write("no env > "); else write(file_name(env)+" > "); return; } write(query_prompt()+" "); } // EOF.