/**
* This is the method for forcing someone to have a title of some sort.
* It allows a range of different titles to be chosen from.
* This punihshment needs to
* be inherited to work correctly.
* @author Pinkfish
* @started Thu Jun 26 14:46:36 PDT 2003
*/
#include <money.h>
#include <nomic_system.h>
#include <player_handler.h>
#include <player.h>
inherit "/std/room/inherit/punishment_inherit";
private nosave string* _titles;
void create() {
_titles = ({ });
set_description_file(NOMIC_PUNISHMENT_DOCS_DIR + "title");
set_short("title");
::create();
} /* create() */
/**
* This method sets the allowable list of titles used for this area.
* @param titles the list of titles to use
*/
void set_titles(string* titles) {
_titles = titles;
}
/**
* This method returns the list of allowable titles to use for this
* area.
* @return the list of allowable titles
*/
string* query_titles() {
return _titles;
}
//
// The punishment handle area
//
/**
* @ignore yes
*/
void start_punishment(string area,
class nomic_case the_case,
string type,
function finish) {
int i;
for (i = 0; i < sizeof(_titles); i++) {
write(sprintf("%c) %s\n", i + 'A', _titles[i]));
}
write("Which title do you wish " +
query_multiple_short(the_case->people) + " to have? ");
input_to("choose_title", 0, area, the_case, type, finish);
} /* start_punishment() */
/** @ignore yes */
string query_short(string area,
class nomic_case the_case,
string type,
mixed data) {
return "set to a title of " + data[0] + " for " + data[1] + " hours";
} /* query_short() */
/**
* @ignore yes
*/
void choose_title(string title, string area, class nomic_case the_case,
string type, function finish) {
int i;
int pos;
if (!strlen(title) || title[0] == 'q') {
write("Aborting the title setting.\n");
return ;
}
title = lower_case(title);
if (strlen(title) == 1) {
pos = title[0] = 'a';
if (pos >= 0 && pos < sizeof(_titles)) {
title = _titles[pos];
}
}
if (member_array(title, _titles) == -1) {
write("You did not specify a valid title.\n");
for (i = 0; i < sizeof(_titles); i++) {
write(sprintf("%c) %s\n", i + 'A', _titles[i]));
}
write("What title do you want to give " +
query_multiple_short(the_case->people) + "? ");
input_to("choose_title", 0, area, the_case, type, finish);
return ;
}
write("How long do you wish " +
query_multiple_short(the_case->people) + " to keep the title " +
title +
"(this is in hours and is online time, not real time)? ");
input_to("choose_timeout", 0, area, the_case, type, finish, title);
} /* fine_amount() */
void choose_timeout(string str, string area, class nomic_case the_case,
string type, function finish, string title) {
int timeout;
if (!strlen(str) || str[0] == 'q') {
write("Aborting the title setting.\n");
return ;
}
timeout = to_int(str);
if (timeout <= 0) {
write("The timeout must be greator than 0 hours.\n");
write("How long do you wish " +
query_multiple_short(the_case->people) + " to keep the title " +
title + "?");
input_to("choose_timeout", 0, area, the_case, type, finish, title);
return ;
}
if (timeout > 30) {
write("The timeout must be less than 30 hours.\n");
write("How long do you wish " +
query_multiple_short(the_case->people) + " to keep the title " +
title + "?");
input_to("choose_timeout", 0, area, the_case, type, finish, title);
return ;
}
evaluate(finish, the_case, type, ({ title, timeout }));
}
/**
* @ignore yes
*/
void complete_punishment(string area,
class nomic_case the_case,
string type,
mixed data) {
string person;
foreach (person in the_case->people) {
PLAYER_TITLE_HANDLER->set_forced_title_on_player(person, data[0], data[1] * (60 * 60));
}
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) {
PLAYER_TITLE_HANDLER->remove_forced_title(person, data[0]);
}
return ;
} /* suspend_punishment() */