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       );