/* login.c */ #include <sys.h> #include <secure.h> static init() { check_secure(SECURE_BOOTOBJ,NULL); set_interactive(); if (!prototype(this_object())) return; add_xverb("","do_huh"); add_verb("connect","do_connect"); add_verb("create","do_create"); add_verb("help","do_help"); add_verb("quit","do_quit"); add_verb("QUIT","do_quit"); } static disconnect() { destruct(this_object()); } connect() { if (connected(this_object())) alarm(0,"welcome"); } listen(arg) { send_device(arg); } static welcome() { cat("/login_banner"); } static do_huh(arg) { write(HUH_STRING); return 1; } static do_help(arg) { write("\nLogin Help:\n"); write("-----------\n"); write("create <name> <password>\n"); write("connect <name> <password>\n"); write("quit\n"); write("\n"); return 1; } static do_create(arg) { string name,password; int pos; object new_player; pos=instr(arg,1," "); name=leftstr(arg,pos-1); password=rightstr(arg,strlen(arg)-pos); if ((!name) || (!password)) return 0; if (!is_legal(name)) { write("Illegal name.\n"); return 1; } if (find_player(name)) { write("That player already exists.\n"); return 1; } if (find_wiz(name)) { write("That player already exists.\n"); return 1; } new_player=clone_object("/obj/player"); call_other(new_player,"set_secure"); call_other(new_player,"set_name",name); call_other(new_player,"set_password",password); move_object(new_player,atoo("/obj/room")); if (reconnect_device(new_player)) send_device("Reconnect to "+otoa(new_player)+" failed.\n"); else call_other(new_player,"connect"); self_destruct(); return 1; } static self_destruct() { alarm(1,"do_self_destruct"); } static do_self_destruct() { destruct(this_object()); } static do_connect(arg) { string name,password; int pos; object player; pos=instr(arg,1," "); name=leftstr(arg,pos-1); password=rightstr(arg,strlen(arg)-pos); if (!name) return 0; if (!(player=find_player(name))) { if (player=find_wiz(name)) return do_wiz(arg); write("That player does not exist.\n"); return 1; } if (!call_other(player,"check_password",password)) { write("Wrong password.\n"); return 1; } if (connected(player)) call_other(player,"force_disconnect"); if (reconnect_device(player)) send_device("Reconnect to "+otoa(player)+" failed.\n"); else call_other(player,"connect"); self_destruct(); return 1; } static do_wiz(arg) { string name,password; int pos; object wizard; pos=instr(arg,1," "); name=leftstr(arg,pos-1); password=rightstr(arg,strlen(arg)-pos); if (!name) return 0; if (!(wizard=find_wiz(name))) { write("That wizard does not exist.\n"); return 1; } if (!call_other(wizard,"check_password",password)) { write("Wrong password.\n"); return 1; } if (connected(wizard)) call_other(wizard,"force_disconnect"); if (reconnect_device(wizard)) send_device("Reconnect to "+otoa(wizard)+" failed.\n"); else call_other(wizard,"connect"); self_destruct(); return 1; } static do_quit(arg) { disconnect_device(); destruct(this_object()); return 1; }