/**
* Lockout - lets a player suspend themselves from the MUD.
* @author Ceres
*/
#include <player_handler.h>
#include <playerinfo.h>
inherit "/cmds/base";
nosave mapping info = ([ ]);
private int cmd(int tim, string type, string reason, int use_alts) {
string p1;
string* alts;
if (this_player() != this_player(1))
return 0;
if(type[<1] != 's')
type += "s";
switch (type) {
case "days":
tim *= 24;
break;
case "weeks":
tim *= 24 * 7;
break;
case "hours":
tim = tim;
break;
default:
return notify_fail("Invalid time.\n");
}
if (tim > 24 * 31) {
return notify_fail( "You can't lock yourself out for more than "
"one month!\n" );
}
if(sizeof(reason) > 80) {
return notify_fail("Reason cannot be more than 80 characters.\n");
}
if (use_alts) {
p1 = PLAYERINFO_HANDLER->query_alt_of(this_player()->query_name());
alts = (string*)PLAYERINFO_HANDLER->query_alts(this_player()->query_name()) |
(string*)PLAYERINFO_HANDLER->query_alts(p1) |
({ this_player()->query_name() });
} else {
alts = ({ this_player()->query_name() });
}
info[this_player()->query_name()] = ({ tim, reason, alts });
write("This will lockout " + query_multiple_short(alts) + ".\n");
write("Enter your password: ");
input_to("get_pw", 1, this_player());
return 1;
}
int get_pw(string pass, object player) {
int tim;
if (!PLAYER_HANDLER->test_password(player->query_name(), pass)) {
write("\nSorry, incorrect password.\n");
return 0;
}
if(!info[player->query_name()]) {
write("\nSomething went wrong, please try again.\n");
return 0;
}
tim = info[player->query_name()][0];
if (tim < 24) {
write("\nYour lockout will last " + tim + " hour" +
(tim == 1 ? "" : "s" ) + ". It cannot be " +
"undone. Are you completely sure you wish to continue?\n");
} else {
write("\nYour lockout will last " + tim / 24 + " day" +
((tim / 24) == 1 ? "" : "s" ) + ". It cannot be " +
"undone. Are you completely sure you wish to continue?\n");
}
input_to("confirm", 0, this_player());
return 1;
}
int confirm(string yesno, object player) {
int tim;
string reason;
string* alts;
string name;
if (yesno[0] != 'y') {
write("Ok, cancelling lockout...\n");
write("Lockout cancelled.\n");
return 1;
}
if(!info[player->query_name()]) {
write("Something went wrong, please try again.\n");
return 0;
}
tim = info[player->query_name()][0];
reason = info[player->query_name()][1];
alts = info[player->query_name()][2];
foreach (name in alts) {
if (!"/secure/bastards"->lockout_person(name,
tim*60*60, reason)) {
write("Sorry, we failed.\n");
return 0;
}
}
write("Ok, you are now locked out. Quit when ready.\n");
return 1;
}
// Answer the command patterns
mixed *query_patterns() {
return ({ "<number'number of'> "
"<word'days|weeks|hours'> <string'reason'>",
(: cmd($4[0], $4[1], implode($4[2..], " "), 0 ) :),
"alts <number'number of'> "
"<word'days|weeks|hours'> <string'reason'>",
(: cmd($4[0], $4[1], implode($4[2..], " "), 1 ) :) });
}