#include <colour.h>
#include <clubs.h>
inherit COMMAND_BASE;
private string* _colours;
void create() {
::create();
_colours = ({
"BOLD",
"BLACK",
"RED",
"BLUE",
"CYAN",
"MAGENTA",
"ORANGE",
"YELLOW",
"GREEN",
"WHITE",
"B_RED",
"B_ORANGE",
"B_YELLOW",
"B_BLACK",
"B_CYAN",
"B_WHITE",
"B_GREEN",
"B_MAGENTA" });
} /* create() */
/** @ignore yes */
int is_valid_colour( string name ) {
return member_array( name, _colours) != -1;
} /* is_valid_colour() */
/** @ignore yes */
string* query_colour_list( int inform ) {
string* colour_list;
switch( inform ) {
case 0:
colour_list = USER_COLOUR_LIST;
break;
case 1 :
colour_list = TP->query_inform_types();
break;
case 2 :
colour_list = map( TP->query_player_clubs(), (: "club_" + $1 :) );
break;
case 3 :
colour_list = TP->query_channels();
break;
}
return asort( colour_list );
} /* query_colour_list() */
/** @ignore yes */
mixed set_colours( int inform, string event_type, string colour, int force ) {
mapping my_colours;
string *colour_list, *bad, tmp, name;
colour_list = query_colour_list(inform);
if( inform == 2 ) {
name = CLUB_HANDLER->query_club_name(event_type);
event_type = "club_" + event_type;
} else {
name = event_type;
}
if( member_array( event_type, colour_list ) == -1 ) {
add_failed_mess("No such type.\n");
return 0;
}
my_colours = TP->query_my_colours();
if( colour == "default" ) {
TP->set_my_colours( event_type, colour );
write( name + " colour set to default.\n");
} else if( colour == "none" ) {
TP->set_my_colours( event_type, colour );
write( name + " colour set to none.\n");
} else {
colour_list = map( explode( colour, " "), (: upper_case($1) :) );
bad = filter( colour_list, (: !is_valid_colour($1) :) );
if( sizeof(bad) && !force ) {
if( sizeof(bad) > 1 ) {
add_failed_mess("The colours "+
query_multiple_short(bad)+" are not valid, valid colours "
"are: "+query_multiple_short(_colours)+".\n");
} else {
add_failed_mess("The colour "+
query_multiple_short(bad)+" is not valid, valid colours "
"are: "+query_multiple_short(_colours) + ".\n");
}
return 0;
}
tmp = "%^"+implode( colour_list, (: $1 + "%^ %^" + $2 :) ) + "%^";
TP->set_my_colours( event_type, tmp );
write( name+" colour set to "+tmp+"["+colour+"]%^RESET%^.\n");
}
return 1;
} /* set_colours() */
/** @ignore yes */
private int show_colours( int inform ) {
string *colour_list, event, name;
mapping my_colours;
colour_list = query_colour_list(inform);
my_colours = TP->query_my_colours();
if( !inform ) {
write( sprintf("%-20s %s\n", "Clubs", "<list>") );
write( sprintf("%-20s %s\n", "Informs", "<list>") );
write( sprintf("%-20s %s\n", "Channels", "<list>") );
}
foreach( event in colour_list ) {
if( inform == 2 )
name = CLUB_HANDLER->query_club_name(event[5..]);
else
name = event;
if( my_colours[event] ) {
if( my_colours[event] != "" )
write(sprintf("%-20s %s\n", name, my_colours[event]+"["+
replace( my_colours[event], "%^", "")+"]%^RESET%^") );
else
write( sprintf("%-20s %s\n", name, "[none]") );
} else {
write( sprintf("%-20s %s\n", name, "[default]") );
}
}
return 1;
} /* show_colours() */
/** @ignore yes */
mixed query_patterns() {
return ({ "<word'event type'> <string'colour'>",
(: set_colours(0, $4[0], $4[1], 0) :),
"force <word'event type'> <string'colour'>",
(: set_colours(0, $4[0], $4[1], 1) :),
"", (: show_colours(0) :),
"inform <word'inform type'> <string'colour'>",
(: set_colours(1, $4[0], $4[1], 0) :),
"inform force <word'inform type'> <string'colour'>",
(: set_colours(1, $4[0], $4[1], 1) :),
"club <string:quoted'club name'> <string'colour'>",
(: set_colours(2, $4[0], $4[1], 0) :),
"club force <string:quoted'club name'> <string'colour'>",
(: set_colours(2, $4[0], $4[1], 1) :),
"channel <word'channel name'> <string'colour'>",
(: set_colours(3, $4[0], $4[1], 0) :),
"channel force <word'channel name'> <string'colour'>",
(: set_colours(3, $4[0], $4[1], 1) :),
"inform", (: show_colours(1) :),
"clubs", (: show_colours(2) :),
"channels", (: show_colours(3) :) });
} /* query_patterns() */