/* Do not remove the headers from this file! see /USAGE for more info. */ /* ** chanlist.c -- print available channels ** ** Print out the available channels in the system/intermud. Note that ** the system allows any number of channels, so this will only print ** out some "suggested" channels. This command is most effective for ** printing out a list of available Intermud channels. ** ** 950629, Deathblade: Created. */ //:PLAYERCOMMAND //$$ see: channels, gossip, newbie, chan //USAGE: chanlist // //Shows currently existing channels available to you. #include <channel.h> inherit CMD; private nomask string fmt_imud_channel(string channel_name, mixed * channel_data) { string owner = channel_data[0]; string type = ({ "unrestricted", "restricted", "filtered" })[channel_data[1]]; if ( owner == "*" ) owner = "no owner"; return sprintf("%-20s Intermud: %s, %s\n", channel_name, owner, type); } private void main(string arg) { string s; mapping chanlist; string * all_chan = CHANNEL_D->query_channels(); string * wiz_chan = filter(all_chan, (: CHANNEL_D->query_flags($1) & CHANNEL_WIZ_ONLY :) ); string * admin_chan = filter(all_chan, (: CHANNEL_D->query_flags($1) & CHANNEL_ADMIN_ONLY :) ); string * imud_chan = filter(all_chan, (: $1[0..4] == "imud_" :) ); string * player_chan = all_chan - wiz_chan - admin_chan - imud_chan; s = "Listing of available channels\n-----------------------------\n"; foreach(string chan in player_chan) s+= sprintf("%-20s Local\n", chan); if ( wizardp(this_user()) ) { foreach(string chan in wiz_chan) s+= sprintf("%-20s Wizard\n", chan); } if ( adminp(this_user()) ) foreach(string chan in admin_chan) s+= sprintf("%-20s Admin\n", chan); // if ( wizardp(this_user()) ) // { // foreach(string chan in imud_chan) // s+= sprintf("%-20s Intermud\n", chan[5..]); // } if (wizardp(this_user()) ) { if(find_object(IMUD_D)) { catch(chanlist = IMUD_D->query_chanlist()); s+= "Other subscribable intermud channels :\n"; s += implode(({ "" }) + sort_array(keys(chanlist)-imud_chan, 1), (: $1 + fmt_imud_channel($2, $(chanlist)[$2]) :)); } else { s += "No intermud channels currently available\n"; } } out(s); }