/* -*- LPC -*- */
/*
* $Locker: $
* $Id: suspend.c,v 1.10 2002/03/11 01:45:26 pinkfish Exp $
*
*/
#include <parser.h>
#include <access.h>
inherit "/cmds/base";
// #define SUSPEND_MULTI 1
#define MULTI_SUSPEND 28*24 // Two weeks.
#define LIAISON "/d/liaison/master"
private int do_suspend(string, int, string);
// The lord version of suspend.
private int cmd(string name, int tim, string type, string reason) {
if (this_player() != this_player(1)) {
return 0;
}
if (!master()->query_lord(geteuid(previous_object())) &&
!LIAISON->query_deputy(geteuid(previous_object()))) {
return notify_fail("You must be a lord or liaison deputy to suspend "
"someone.");
}
if ( type[<1] != 's' ) {
type += "s";
}
switch (type) {
case "days":
tim *= 24;
break;
case "weeks":
tim *= 24 * 7;
break;
case "months":
tim *= 24 * 7 * 4;
break;
case "years":
tim *= 24 * 365;
break;
case "hours":
// Do nothing.
break;
default:
// add_failed_mess( "You must give a reason.\n" );
// return -1;
}
if (!master()->query_lord (geteuid(previous_object()))
&& LIAISON->query_deputy(geteuid(previous_object()))
&& tim > MULTI_SUSPEND) {
return notify_fail ("You can only suspend for a maximum of " +
query_num (MULTI_SUSPEND) + " hours.");
}
return do_suspend(name, tim, reason);
}
// The normal creator suspend
private int suspend(string who, string reason) {
if(this_player() != this_player(1))
return 0;
if (!master()->query_lord(geteuid(previous_object())) &&
!master()->query_senior(geteuid(previous_object())) &&
!LIAISON->query_member(geteuid(previous_object()))) {
return notify_fail("Only liaisons or seniors can do that.\n");
}
return do_suspend(who, 2, reason);
}
#ifdef SUSPEND_MULTI
// The liaison multiplayer suspend
private int suspend_multi(string who) {
if(this_player() != this_player(1))
return 0;
if (!"/secure/master"->query_lord(geteuid(previous_object())) &&
!LIAISON->query_deputy(geteuid(previous_object()))) {
return notify_fail("You must be a lord or liaison deputy to suspend "
"someone for multiplaying.");
}
return do_suspend(who, MULTI_SUSPEND, "Multiplaying");
}
#endif
private int do_suspend(string name, int tim, string reason) {
notify_fail("We failed!\n");
if (!"/secure/bastards"->suspend_person(name, tim*60*60, reason)) {
return 0;
}
write(name+" suspended until "+ctime(time()+tim*60*60)+"\n");
return 1;
}
int help() {
if(!"/secure/master"->query_lord(geteuid(previous_object())) &&
!LIAISON->query_member(this_player()->query_name()))
return notify_fail("You cannot use suspend.\n");
if(this_player()->query_lord() ||
master()->query_senior(geteuid(previous_object())) ||
LIAISON->query_member(geteuid(previous_object())))
write("suspend <name> <reason> -- will suspend a player for 2 hours.\n");
#ifdef SUSPEND_MULTI
if(this_player()->query_lord() ||
LIAISON->query_deputy(geteuid(this_player())))
write("suspend <name> multiplaying -- will suspend a multiplayer for "
"2 weeks.\n");
#endif
if (LIAISON->query_deputy(geteuid(this_player()))) {
write("suspend <name> <time> <reason> where time is in hours.\n");
write ("You may suspend people for a maximum of "
+ query_num (MULTI_SUSPEND) + " hours as a liaison deputy.\n");
}
if ("/secure/master"->query_lord(geteuid(this_player()))) {
write("suspend <name> <time> <reason> where time is in hours.\n");
write("suspend <name> <time> <hours|days|weeks|months|years> <reason> "
"where time is in the units specified in the command.\n");
}
return 1;
}
public mixed *query_patterns() {
mixed retval;
retval = ({ "help", (: help() :) });
if( master()->query_lord(geteuid(this_player())) ||
master()->query_senior(geteuid(previous_object())) ||
LIAISON->query_member(geteuid(previous_object())))
retval += ({ "<word'player'> <string'reason'>",
(: suspend($4[0], implode($4[1..], " ")) :) });
#ifdef SUSPEND_MULTI
if(this_player()->query_lord() ||
LIAISON->query_deputy(geteuid(this_player())))
retval += ({ "<word'player'> multiplaying",
(: suspend_multi($4[0]) :) });
#endif
if( master()->query_lord(geteuid(this_player())) ||
LIAISON->query_deputy(geteuid(this_player()))) {
retval += ({ "<word'player'> <number'time'> <string'reason'>",
(: cmd($4[0], $4[1], "hours", implode($4[2..], " ") ) :) });
retval += ({ "<word'player'> <number'time'> "
"<word'hours|days|weeks|months|years'> <string'reason'>",
(: cmd($4[0], $4[1], $4[2], implode($4[3..], " ") ) :) });
}
return retval;
} /* query_patterns() */