/* Do not remove the headers from this file! see /USAGE for more info. */ // More Crypic #@$t from Belboz // //:PLAYERCOMMAND //USAGE: groups [-a | -d] [groupname] [name 1] [name 2] ... // //The groups command allows you to add personal groups that may //be used to alias a group of people, generally for sending mail. // //No flag: Shows the mud's standard groups and your private groups. // // -a : Adds a group to your groups info, along with a list of // at least 1 name, all separated by spaces. // -d : Deletes a group, or if you give a list of names, deletes // that list from the specified personal group. inherit CMD; #define SYNTAX "Usage: groups [-a | -d] [groupname] [name 1] [name 2] ... \n" private string banner = "==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==\n"; private nomask void print_groups(mapping groups); private void main( string arg ) { mapping groups; string this_group; mixed valid; mixed not; string * arglist; groups = this_body()->query_perm( "groups" ); if(!groups) groups = ([]); if( !arg || arg == "" ) { out( banner ); outf( "Groups of %s, and their members:\n\n",mud_name() ); print_groups(GROUP_D->get_group_data()); out( banner ); if( !mapp( groups ) || !sizeof( groups ) ) { out( "You have no groups defined.\n" ); return; } outf( "%s, your personal groups are:\n\n", this_body()->query_name() ); print_groups(groups); out(banner); return; } arglist = explode( arg, " " ); if( sizeof(arglist) <2 || (arglist[0] != "-a" && arglist[0] != "-d") ) { out( SYNTAX ); return; } this_group = arglist[1]; if( arglist[0] == "-a" ) { if( sizeof(arglist) <3 ) out(SYNTAX); arglist = filter_array(arglist[2..], function(string x, string this_group, string *grp_members) { if ( arrayp(grp_members) && member_array(grp_members, x) != -1 ) { outf("%s is already in group %s.\n", x, this_group); return; } else { outf("%s added to group %s.\n", x, this_group); return 1; } }, this_group); arglist = clean_array( arglist ); this_body()->set_perm( "groups", groups + ([ this_group : arglist ? (mixed)arglist : (mixed)(([]) + groups[this_group]) ]) ); return; } if( sizeof(arglist) == 2 ) { if(groups[arglist[1]]) { map_delete(groups,arglist[1]); outf("Group %s nuked.\n", arglist[1]); return; } outf("You have no defined group called '%s'!\n", arglist[1]); return; } arglist = arglist[2..]; valid = filter_array(arglist, (: member_array($(groups[this_group]), $1) != -1 :)); not = clean_array( arglist - valid ); valid = clean_array( valid ); if( sizeof( not ) ) out(sprintf("Unable to remove: %s.\n", implode( not, ", "))); if( sizeof( valid ) ) { out(sprintf("Removed: %s.\n", implode( valid, ", " ))); groups[this_group] -= valid; if( !sizeof( groups[this_group] ) ) map_delete(groups, this_group); this_body()->set_perm( "groups", groups ); } return; } private nomask void print_groups(mapping groups) { map_array(sort_array(keys(groups), 1), (: out(sprintf("%s: %s\n", $1, implode(map_array(sort_array($2[$1], 1), (: capitalize :)), ", "))) :), groups); out("\n"); }