/* command, trial out by Turrican for a commands daemon. */ #include <player.h> inherit COMMAND_BASE; /* inherit "/cmds/speech"; */ #define BEEP sprintf("%c",7) #define CHAN_OK 1 #define CHAN_FORCED 2 #define CHAN_EMOTED 4 #define CHAN_QUERY 8 string _channel; /** * This method sets the name of the channel this command is for. * @param name the name of the channel * @see query_channel() */ protected void set_channel(string name) { _channel = name; } /* set_channel() */ /** * This method returns the name of the channel the command is currently * set for. * @return the name of the channel * @see set_channel() */ string query_channel() { return _channel; } /* query_channel() */ /** * This method handles the command line and returns the type of command that * is represented by the command line. * @param mess the message to parse * @return the flags to determine what sort of message it is */ protected int handle_command_line(string mess) { int retval; function map_func; string channel; notify_fail("Syntax: "+query_channel()+"[@|?] [text]\n"); if (!mess) { return 0; } switch (mess[0]) { case '!' : retval |= CHAN_FORCED; break; case '@' : retval |= CHAN_EMOTED; break; case '?' : if (mess == "?") { int i; object *people, *off_line; people = users(); off_line = ({ }); for (i=0;i<sizeof(people);i++) { switch (query_channel()) { case "cre?": case "cre": case "intercre": case "intergossip": case "dwcre": case "dwchat": if (!creatorp(people[i]) || !people[i]->query_visible(this_player())) { people = delete(people, i, 1); i--; } break; case "lord": if (!master()->query_lord( (string)people[i]->query_name() )) { people = delete(people, i, 1); i--; } break; default: break; } if (i >= 0) { switch(query_channel()) { case "cre": case "lord": if (people[i]->check_earmuffs(query_channel()) /* || sizeof(people[i]->query_ignoring(({this_player()}))) */) { off_line += ({ people[i] }); people = delete(people, i, 1); i--; } break; default: if (people[i]->check_earmuffs("intermud-all")) { off_line += ({ people[i] }); people = delete(people, i, 1); i--; } break; } } else if (i >= 0 && people[i]->check_earmuffs(query_channel())) { off_line += ({ people[i] }); people = delete(people, i, 1); i--; } } people = sort_array(people, (: strcmp($1->query_name(), $2->query_name()) :) ); off_line = sort_array(off_line, (: strcmp($1->query_name(), $2->query_name()) :) ); map_func = function (object ob) { string str; if (ob->query_invis()) { if (ob->query_invis() == 2) { str = "({" + $1->query_cap_name() + "})"; } else { str = "(" + $1->query_cap_name() + ")"; } } else { str = $1->query_cap_name(); } if (query_idle(ob) > 120) { int hours, mins, secs; secs = query_idle(ob); mins = secs / 60; secs %= 60; hours = mins / 60; mins %= 60; if ( !hours ) { str += sprintf(" [%02dm]", mins); } else { str += sprintf(" [%02dh:%02dm]", hours, mins); } } return str; }; people = map(people, map_func); off_line = map(off_line, map_func); if (sizeof(people)) { write(sprintf( "On line: %-=" + (this_player()->query_cols() - 10) + "s", query_multiple_short( people ) +".\n")); } if (sizeof(off_line)) { write(sprintf( "Off line: %-=" + (this_player()->query_cols() - 11) + "s", query_multiple_short( off_line ) +".\n")); } retval |= CHAN_QUERY; } break; default : return CHAN_OK; break; } return retval; } /* handler_command_line() */