/**
* This is the standard punishment file for banishing someone from a
* city.
* @author Pinkfish
* @started Tue Sep 19 14:37:28 PDT 2000
*/
#include <nomic_system.h>
inherit "/std/room/inherit/punishment_inherit";
private nosave string _banish_handler;
void create() {
set_short("banishment");
set_description_file(NOMIC_PUNISHMENT_DOCS_DIR + "banishment");
::create();
} /* setup() */
/**
* This method sets the banish handler. The banish handler will be called
* with two methods, one is:<br>
* banish_person(string name, int days)<br>
* banish_person_suspend(string name)
* @param handler the banish handler
*/
void set_banish_handler(string hand) {
_banish_handler = hand;
} /* set_banish_handler() */
/**
* This method returns the banish handler.
* @return the banish handler
*/
string query_banish_handler() {
return _banish_handler;
} /* query_banish_handler() */
/** @ignore yes */
string query_short(string area, class nomic_case the_case, string type, mixed data) {
return ::query_short() + " for " + data + " days";
} /* query_short() */
/**
* @ignore yes
*/
void start_punishment(string area,
class nomic_case the_case,
string type,
function finish) {
if (sizeof(filter(the_case->people,
(: NOMIC_HANDLER->is_magistrate_of($2, $1) :), area))) {
write("You cannot banish a magistrate.\n");
return ;
}
write("How long do you want the person banished from the city for (in "
"days, 0 means forever)? ");
input_to("days_of_banishment", 0, area, the_case, type, finish);
} /* start_punishment() */
/** @ignore yes */
void days_of_banishment(string input,
string area,
class nomic_case the_case,
string type,
function finish) {
int num;
input = lower_case(input);
if (input == "" || input[0] == 'q') {
write("Aborting banishment.\n");
return ;
}
if (input[0] >= '0' && input[0] <= '9') {
if (sscanf(input, "%d", num) == 1) {
evaluate(finish, the_case, type, num);
return ;
}
}
write("Invalid input.\n");
write("How long do you want the person banished from the city for (in "
"days, 0 means forever)? ");
input_to("days_of_banishment", 0, area, the_case, type, finish);
} /* days_of_banishment() */
/**
* @ignore yes
*/
void complete_punishment(string area,
class nomic_case the_case,
string type,
mixed data) {
string person;
foreach (person in the_case->people) {
_banish_handler->banish_person(person, data);
}
return ;
} /* complete_punishment() */
/**
* @ignore yes
*/
void suspend_punishment(string area,
class nomic_case the_case,
string type,
mixed data) {
string person;
foreach (person in the_case->people) {
_banish_handler->banish_person_suspend(person);
}
return ;
} /* suspend_punishment() */