/**
* Check command
* @author Drakkos
* @started 18/07/2002 01:56
*
*/
inherit "/cmds/base";
#include <playtesters.h>
string query_applicant_text();
string pt_protected();
varargs int cmd(string check, string name) {
object ob = environment (this_player());
int min, max;
mixed *chats;
mixed *chatsd, *chatsn;
string day, night;
string ret = "";
int count;
mixed *args, *args1;
if (ob->query_property ("restrict check")) {
this_player()->add_failed_mess (this_object(), "The use of the check "
"command in this room has been restricted.\n", ({ }));
return 0;
}
switch (check) {
case "chats":
args= ob->query_room_chats();
chatsd = ob->query_room_day_chats();
chatsn = ob->query_room_night_chats();
if (!args && !sizeof (chatsd) && !sizeof (chatsn)) {
tell_object (this_player(), "There are no chats defined here.\n");
return 1;
}
if (args) {
min = args[0];
max = args[1];
if (!arrayp(args[2])) {
ret += "%^BOLD%^%^RED%^Error in the room chats!%^RESET%^\n";
chats = ({ });
} else {
chats = args[2];
}
} else {
chats = ({ });
}
if (sizeof (chats)) {
ret = "This room has the following chats, set to occur "
"at the rate of one every " + min + " to " + max + " seconds:\n\n";
for (int i = 0; i < sizeof (chats); i++) {
if (!stringp(chats[i])) {
ret += "%^BOLD%^%^RED%^Broken chat setup in room.%^RESET%^\n";
break;
}
ret += (i + 1) + ". " + chats[i];
ret += "\n";
}
}
if (sizeof (chatsd)) {
min = chatsd[0];
max = chatsd[1];
if (!arrayp(chatsd[2])) {
ret += "%^BOLD%^%^RED%^Error in the room day chats!%^RESET%^\n";
chats = ({ });
} else {
chats = chatsd[2];
}
ret += "\n\nThis room has the following day chats, set to occur "
"at the rate of one every " + min + " to " + max + " seconds:\n\n";
for (int i = 0; i < sizeof (chats); i++) {
ret += (i + 1) + ". " + chats[i];
ret += "\n";
}
}
if (sizeof (chatsn)) {
min = chatsn[0];
max = chatsn[1];
if (!arrayp(chatsd[2])) {
ret += "%^BOLD%^%^RED%^Error in the room night chats!%^RESET%^\n";
chats = ({ });
} else {
chats = chatsn[2];
}
ret += "\n\nThis room has the following night chats, set to occur "
"at the rate of one every " + min + " to " + max + " seconds:\n\n";
for (int i = 0; i < sizeof (chats); i++) {
ret += (i + 1) + ". " + chats[i];
ret += "\n";
}
}
break;
case "long":
day = ob->query_day_long();
night = ob->query_night_long();
ret = "Day long description:\n\n" + day;
ret += "\n\nNight long description:\n\n" + night;
break;
case "items":
ob = ob->query_item();
if (!ob) {
ret = "%^CYAN%^There are no add_items defined in this room.%^RESET%^\n";
}
else {
args = ob->query_shrt();
args1 = ob->query_lng();
count = sizeof (args);
ret += "%^YELLOW%^Main items:%^RESET%^\n";
for (int i = 0; i < count; i++) {
if (!sizeof (args[i])) {
continue;
}
ret += "%^BOLD%^" + args[i] + "%^RESET%^: " + (functionp (args1[i]) ? ("*" + evaluate (args1[i]) + "*") : args1[i]);
ret += "\n\n";
}
args = ob->query_day_items();
if (!sizeof(args)) {
ret += "%^CYAN%^There are no day items defined in this room.%^RESET%^\n";
} else {
ret += "%^YELLOW%^Day Items:%^RESET%^\n";
for (int i = 0; i < sizeof (args) ; i=i+2) {
ret += "%^BOLD%^" + args[i] + "%^RESET%^: " + (functionp (args[i+1]) ?
("*" + evaluate (args[i+1]) + "*") : args[i+1]);
ret += "\n\n";
}
}
args = ob->query_night_items();
if (!sizeof(args)) {
ret += "%^CYAN%^There are no night items defined in this room.%^RESET%^\n";
} else {
ret += "%^YELLOW%^Night Items:%^RESET%^\n";
for (int i = 0; i < sizeof (args) ; i=i+2) {
ret += "%^BOLD%^" + args[i] + "%^RESET%^: " + (functionp (args[i+1]) ?
("*" + evaluate (args[i+1]) + "*") : args[i+1]);
ret += "\n\n";
}
}
}
break;
case "day items":
args = ob->query_day_items();
if (!sizeof (args)) {
ret += "There are no day items defined here.\n";
}
else {
for (int i = 0; i < sizeof (args) ; i=i+2) {
ret += args[i] + ": " + (functionp (args[i+1]) ?
("*" + evaluate (args[i+1]) + "*") : args[i+1]);
ret += "\n\n";
}
}
break;
case "night items":
args = ob->query_night_items();
if (!sizeof (args)) {
ret += "There are no night items defined here.\n";
}
else {
for (int i = 0; i < sizeof (args) ; i=i+2) {
ret += args[i] + ": " + (functionp (args[i+1]) ?
("*" + evaluate (args[i+1]) + "*") : args[i+1]);
ret += "\n\n";
}
}
break;
case "protected":
if (!PLAYTESTER_HAND->query_exec_access(this_player()->query_name())) {
this_player()->add_failed_mess (this_object(), "This facility is "
"available only to PT Executives.\n", ({ }));
return 0;
}
else {
ret = pt_protected();
}
break;
}
write("$P$Items$P$" + ret);
return 1;
} /* cmd() */
private string time_string( int time_elapsed ) {
string retval = "";
int sec = time_elapsed % 60;
int min = ( time_elapsed / 60 ) % 60;
int hour = time_elapsed / 3600;
if ( hour > 0 )
retval += hour + "h";
if ( min > 0 )
retval += min + "m";
if ( sec > 0 )
retval += sec + "s";
if ( sizeof( retval ) == 0 )
return "0s";
return retval;
} /* time_string() */
int do_check_quota() {
string* bits;
string shortdate;
int* spam;
int reports;
int age;
int curage;
mapping spamtoo;
// see adjust_quota() in /obj/handlers/playtesters.c
bits = explode( ctime( time() ), " " ) - ({ "" });
shortdate = bits[ 1 ] + " " + bits[ 4 ];
spamtoo = PLAYTESTER_HAND->
query_bugs( this_player()->query_name() );
if ( mapp( spamtoo ) ) {
spam = spamtoo[ shortdate ];
if ( arrayp( spam ) ) {
reports = spam[ 0 ];
age = spam[ 1 ];
curage = PLAYTESTER_HAND->get_age_uncached(this_player()->query_name());
age += curage - spam[2];
tell_object( this_player(), "This month (" + shortdate + "), you "
"have made " + reports + " report" +
( ( reports == 1 ) ? "" : "s" ) + " in " +
time_string( age ) + " online.\n" );
//tell_object( this_player(), quota_message( reports, age ) );
return 1;
} else {
tell_object( this_player(), "You cannot check your playtester "
"quota.\n" );
return 1;
}
} else {
tell_object( this_player(), "You cannot check your playtester "
"quota.\n" );
return 1;
}
}
int cmd_chats(object* obs) {
mixed* chats;
string ret;
int i;
object ob;
// Find item and npc chats.
ret = "";
foreach (ob in obs) {
ret += "$I$0=%^YELLOW%^$C$" + ob->the_short() + "%^RESET%^:\n";
chats = ob->query_chat_string();
if (sizeof(chats)) {
ret += "$I$0= %^BOLD%^Chats:%^RESET%^ (Chance: " + chats[0] + ")\n";
chats = chats[1];
for (i = 0; i < sizeof(chats); i += 2) {
if (stringp(chats[i + 1])) {
ret += "$I$6= (Weight " + chats[i] + "): " + chats[i + 1] + "\n";
} else if (arrayp(chats[i + 1])) {
ret += "$I$6= (Weight " + chats[i] + ") Story:\n ";
foreach (string story in chats[i + 1]) {
ret += story + "\n";
}
} else {
ret += "%^BOLD%^%^RED%^Bad chat type%^RESET%^";
}
}
}
chats = ob->query_achat_string();
if (sizeof(chats)) {
ret += "$I$0= %^BOLD%^Attack Chats:%^RESET%^ (Chance: " + chats[0] + ")\n";
chats = chats[1];
for (i = 0; i < sizeof(chats); i += 2) {
if (stringp(chats[i + 1])) {
ret += "$I$6= (Weight " + chats[i] + "): " + chats[i + 1] + "\n";
} else if (arrayp(chats[i + 1])) {
ret += "$I$6= (Weight " + chats[i] + ") Story:\n ";
foreach (string story in chats[i + 1]) {
ret += story + "\n";
}
} else {
ret += "%^BOLD%^%^RED%^Bad chat type%^RESET%^";
}
}
}
chats = ob->query_chats();
if (sizeof(chats)) {
ret += "$I$0= %^BOLD%^Item Chats:%^RESET%^ (Min time " + chats[0] + ", "
"Max time " + chats[1] + ")\n";
foreach (string story in chats[2]) {
ret += "$I$6= " + story + "\n";
}
}
}
write("$P$Npc/Item chats$P$" + ret);
return 1;
}
mixed *query_patterns() {
mixed *patterns =
({
"{chats|long|items|day items|night items|"
"protected}", (: cmd($4[0]) :),
"chats <indirect:object>",
(: cmd_chats :),
"quota", (: do_check_quota :),
});
return patterns;
} /* query_patterns() */
string pt_protected() {
object *obs = filter (users(), (: $1->query_playtester() :));
string ret = "";
obs = filter (obs, (: $1->query_pt_protection() :));
if (!sizeof(obs)) {
tell_object (this_player(), "No-one is currently using PT Protection.\n");
}
else {
ret += "The following people have PT protection enabled:\n\n";
foreach (object ob in obs) {
ret += sprintf ("%s: %s (%s).\n\n", ob->query_name(),
environment(ob)->query_short(), base_name (environment (ob)));
}
}
return ret;
}