Here's a little thing I wrote up cause I was tired of being invis and wanting to talk to other immorts with looser morts hearing. This works the same way wizi and incog work, only it does it with channels. This enables the user to gossip or use any channels (except emote) without people below his/her speech level hearing it the same way wizi prevents the user from being seen. If you have color, I recommend you use it for telling the user when they are using speech. If you use this, just mail me and tell me so I can know how many people out there use it. If you have any comments or suggestions just let me know. -Ashley Wright almighty@lostwaves.op.net Eternal Flames mud at mud.op.net 5000 void do_speech( CHAR_DATA *ch, char *argument ) { int level; char arg[MAX_STRING_LENGTH]; /* RT code for taking a level argument */ one_argument( argument, arg ); if ( arg[0] == '\0' ) /* take the default path */ if ( ch->chan_level) { ch->chan_level = 0; act( "$n begins to enunciate.", ch, NULL, NULL, TO_ROOM); send_to_char( "You are once again audible.\n\r", ch ); } else { ch->chan_level = get_trust(ch); act( "$n speaks quietly.", ch, NULL, NULL, TO_ROOM); send_to_char( "You speak softly with your big sticked self.\n\r", ch ); } else /* do the level thing */ { level = atoi(arg); if (level < 2 || level > get_trust(ch)) { send_to_char("Channel level must be between 2 and your level.\n\r",ch); return; } else { ch->reply = NULL; ch->chan_level = level; act( "$n speaks quietly.", ch, NULL, NULL, TO_ROOM); send_to_char( "You speak softly with your big sticked self.\n\r", ch ); } } return; } ----save.c---- if (ch->chan_level) fprintf( fp, "Sayl %d\n", ch->chan_level ); /*put this near or next to the ones for incog and wizi*/ KEY( "Sayl", ch->chan_level, fread_number( fp ) ); /*put that under Case S*/ ----act_info.c---- /*under void do_score put this after wizi and incog lines*/ if (ch->chan_level) { sprintf( buf, " Channels: level %d", ch->chan_level); send_to_char(buf,ch); } ----act_comm.c---- /*in every channel function you'll see something saying if !NO_GOSSIP*/ /*so when you see that put something like this*/ !IS_SET(victim->comm,COMM_QUIET) && ( get_trust(d->character) >= ch->chan_level)) { if (ch->chan_level && IS_IMMORTAL(d->character)) act_new( "$n gossips '^NR$t^NW'", ch, argument, d->character,TO_VICT,POS_SLEEPING ); else act_new( "$n gossips '^NC$t^NW'", ch,argument, d->character, TO_VICT,POS_SLEEPING ); /*Two notes, the ^NR codes are for color, these are great to have*/ /*because it lets the listener know if the person is using speech*/ /*you can do the same thing so the user will know by what i'll do */ /*below. Also note number 2, the !IS_SETblahblah,COMM_QUIET is already*/ /*there, that's just a reference point. This below is the color code*/ /*to tell the user that they're using speech*/ if (ch->chan_level) sprintf( buf, "You gossip '^NR%s^NW'\n\r", argument ); else sprintf( buf, "You gossip '^NC%s^NW'\n\r", argument ); send_to_char( buf, ch ); /*now to get this to work right you have to rewrite the say command.*/ /*Replace the for loop with this*/ for ( d = descriptor_list; d != NULL; d = d->next ) { CHAR_DATA *victim; victim = d->original ? d->original : d->character; if ( d->connected == CON_PLAYING && d->character != ch && (d->character->in_room == ch->in_room) && ( get_trust(d->character) >= ch->chan_level)) { if (ch->chan_level && IS_IMMORTAL(d->character)) act( "$n says '^NR$t^NW'", ch, argument, d->character, TO_VICT); else act( "$n says '^BP$t^NW'", ch,argument, d->character, TO_VICT ); } } if (ch->chan_level) act( "You say '^BR$T^NW'", ch, NULL, argument, TO_CHAR ); else act( "You say '^BP$T^NW'", ch, NULL, argument, TO_CHAR ); /*then the rest of what was here*/ ----merc.h---- sh_int chan_level; ----interp.c----- { "speech", do_speech, POS_DEAD, IM, LOG_NORMAL, 1 }, ----interp.h---- DECLARE_DO_FUN( do_speech );