/* The first attempt on a Retire command. * It will make the players able to delete their own charachters. * Baldrick march '94 * Put it in /secure/master and add it to master.c (#include). Add an add_action and a call in player.c (test on force!) */ #define MAX_RETRYS 1 #define BANK_HANDLER "/obj/handlers/bank_handler" #define POSTAL_D "/obj/handlers/postal_d" string password; int no_times; static int put_password(string str); int do_retirejob(mixed name); int try_retire() { if(this_player()->query_creator()) { notify_fail("You are a creator, you can not retire this way. Ask a God.\n"); return 0; } write("This removes the character you are playing. Be sure you know what " + "you do. Just don't enter the password if you regret.\n\n"); write("Enter your password: "); input_to("put_password"); } /* logon() */ int test_password(string name, string pass) { string tmp; if (!stringp(name) || strlen(name) < 2 || sscanf(name, "%s %s", tmp, tmp) || name[0] == '.' || sscanf(name, "%s..%s", tmp,tmp)) return 0; if(!restore_object("/players/"+name[0..0]+"/"+name,1)) return 0; return crypt(pass, password) == password; } /* test_password() */ static int put_password(mixed str) { string playername; playername = this_player(1)->query_name(); write("\n"); if (!str) { write("No password, no retire!\n"); return 0; } /* if str == "" */ if (!test_password(playername, str)) { write("Wrong password, no retire.\n"); return 0; } /* if (password .. */ do_retirejob(playername); return 1; } /* put_password() */ /* The deleting of the player. */ /* have to get root access to be able to do the RM of the file. */ /* Done by putting the whole thingie in the master. */ /* * Made this puppy static before someone else finds it! * -- Wahooka */ static int do_retirejob(string name) { // write ("You made it !" + name + "\n"); this_player()->add_property("guest",1); rm ("/players/" + name[0..0] + "/" + name + ".o"); /* remove the mails */ /* May make problem if the player don't have a mail.o file.. */ // rm ("/save/post/" + name + ".o"); // Maybe THIS will work, and actually free the disk space - Radix POSTAL_D->retire_user(name); /* Hmm.. should add a delete of bank accounts, think i have some code. */ /* WHY does the BANK_HANDLER thingie work here and not in bank.c ? */ // BANK_HANDLER->refresh_account(name); write ("You are now a Guest. Quit to get rid of the character for good.\n"); /* Wonerflug1997, adding a log til someone fixes the bug */ log_file("RETIRE", this_player()->query_cap_name()+" retired.\n"); return 0; } /* do_retire */ int query_prevent_shadow() { return 1; }