diff -i smaug14/src/act_comm.c smaug18/src/act_comm.c
8c8
<  * Tricops and Fireblade                                      |             *
---
>  * Tricops, Fireblade, Edmond, Conran                         |             *
24,27d23
< #ifdef REGEX
< #include <regex.h>
< #endif
< 
30d25
< #include <regex.h>
35,37d29
< #ifdef REGEX
< extern int re_exec _RE_ARGS( ( const char * ) );
< #endif
411,415c403,442
<               if ( !IS_IMMORTAL( ch ) )
<               {
<                       send_to_char( "Peacefuls have no need to use wartalk.\n\r", ch );
<                       return;
<               }
---
>               send_to_char( "Peacefuls have no need to use wartalk.\n\r", ch );
>               return;
>       }
> 
> /*
>     if ( sysdata.pk_silence
>     &&   IS_PKILL( ch )
>     &&  !IS_IMMORTAL( ch )
>     &&   channel != CHANNEL_NEWBIE )
>     {
>       send_to_char( "Deadlies cannot use that channel right now.\n\r", ch );
>       return;
>     }
> */
> 
> /*
>     if ( !sysdata.pk_channels
>     &&    IS_PKILL( ch )
>     &&   !IS_IMMORTAL( ch )
>     &&   channel != CHANNEL_NEWBIE 
>     &&   channel != CHANNEL_WARTALK
>     &&   channel != CHANNEL_CLAN
>     &&   channel != CHANNEL_COUNCIL )
>     {
>       send_to_char( "Deadlies cannot use that channel right now.\n\r", ch );
>       return;
>     }
> */
> 
>       if ( !sysdata.pk_channels && IS_PKILL( ch ) && !IS_IMMORTAL( ch ) && channel == CHANNEL_AVTALK )
>       {
>               send_to_char( "Deadlies cannot use that channel.\n\r", ch );
>               return;
>       }
> 
> 
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
>       {
>               send_to_char( "You can't do that here.\n\r", ch );
>               return;
418c445
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SILENCE ) )
---
>       if ( channel == CHANNEL_YELL && xIS_SET( ch->in_room->room_flags, ROOM_NOYELL ) )
445c472,515
<       REMOVE_BIT( ch->deaf, channel );
---
>       if ( xIS_SET( ch->deaf, channel ) && ( channel != CHANNEL_WARTALK || channel != CHANNEL_YELL ) )
>       {
>               ch_printf( ch, "You don't have the %s channel turned on. To turn it on, use the Channels command.\n\r", verb );
>               return;
>       }
>       xREMOVE_BIT( ch->deaf, channel );
> 
>       /*
>        * Added showing wizinvis level to imms preceding all channel talk to
>        * let them know that they are invis and talking on that channel as such
>        * -- Raltaris
>        */
> 
>       if ( IS_IMMORTAL( ch ) && xIS_SET( ch->act, PLR_WIZINVIS ) )
>       {
>               switch ( channel )
>               {
>                       default:
>                               set_char_color( AT_GOSSIP, ch );
>                               ch_printf( ch, "(%d) ", ( !IS_NPC( ch ) ) ? ch->pcdata->wizinvis : ch->mobinvis );
>                               break;
>                       case CHANNEL_RACETALK:
>                               set_char_color( AT_RACETALK, ch );
>                               ch_printf( ch, "(%d) ", ( !IS_NPC( ch ) ) ? ch->pcdata->wizinvis : ch->mobinvis );
>                               break;
>                       case CHANNEL_WARTALK:
>                               set_char_color( AT_WARTALK, ch );
>                               ch_printf( ch, "(%d) ", ( !IS_NPC( ch ) ) ? ch->pcdata->wizinvis : ch->mobinvis );
>                               break;
>                       case CHANNEL_TRAFFIC:
>                               set_char_color( AT_GOSSIP, ch );
>                               ch_printf( ch, "(%d) ", ( !IS_NPC( ch ) ) ? ch->pcdata->wizinvis : ch->mobinvis );
>                               break;
>                       case CHANNEL_IMMTALK:
>                               set_char_color( AT_IMMORT, ch );
>                               ch_printf( ch, "(%d) ", ( !IS_NPC( ch ) ) ? ch->pcdata->wizinvis : ch->mobinvis );
>                               break;
>                       case CHANNEL_AVTALK:
>                               set_char_color( AT_AVATAR, ch );
>                               ch_printf( ch, "(%d) ", ( !IS_NPC( ch ) ) ? ch->pcdata->wizinvis : ch->mobinvis );
>                               break;
>               }
>       }
> 
453a524,528
>               case CHANNEL_MUSIC:
>                       set_char_color( AT_MUSIC, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
470,471c545,552
<               case CHANNEL_AVTALK:
<                       sprintf( buf, "$n%c $t", channel == CHANNEL_IMMTALK ? '>' : ':' );
---
> /*    set_char_color( AT_IMMORT, ch );
>       ch_printf_color( ch, "&Y%s&G>&Y %s\n\r",
>         capitalize(ch->name),
>         argument );
>         sprintf( buf, "&Y%s&G> &Y", capitalize(ch->name) );
>       sprintf( buf3, argument );*/
> 
>                       sprintf( buf, "$n%c $t", '>' );
476a558,594
>               case CHANNEL_AVTALK:
>                       sprintf( buf, "$n%c $t", ':' );
>                       position = ch->position;
>                       ch->position = POS_STANDING;
>                       act( AT_AVATAR, buf, ch, argument, NULL, TO_CHAR );
>                       ch->position = position;
>                       break;
>               case CHANNEL_HIGHGOD:
>                       set_char_color( AT_MUSE, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
>               case CHANNEL_SHOUT:
>                       set_char_color( AT_SHOUT, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
>               case CHANNEL_YELL:
>                       set_char_color( AT_YELL, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
>               case CHANNEL_QUEST:
>                       set_char_color( AT_QUEST, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
>               case CHANNEL_ASK:
>                       set_char_color( AT_ASK, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
>               case CHANNEL_HIGH:
>                       set_char_color( AT_THINK, ch );
>                       ch_printf( ch, "You %s '%s'\n\r", verb, argument );
>                       sprintf( buf, "$n %ss '$t'", verb );
>                       break;
479c597
<       if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
518c636
<               if ( d->connected == CON_PLAYING && vch != ch && !IS_SET( och->deaf, channel ) )
---
>               if ( d->connected == CON_PLAYING && vch != ch && !xIS_SET( och->deaf, channel ) )
534a653,654
>                       if ( channel == CHANNEL_WARTALK && !IS_PKILL( och ) )
>                               continue;
541c661,663
< 
---
>                       if ( channel == CHANNEL_RETIRED && !IS_IMMORTAL( och ) &&
>                               ( !IS_NPC( och ) && !IS_SET( och->pcdata->flags, PCFLAG_RETIRED ) ) )
>                               continue;
555c677,678
<                       if ( IS_SET( vch->in_room->room_flags, ROOM_SILENCE ) )
---
>                       if ( xIS_SET( vch->in_room->room_flags, ROOM_SILENCE )
>                               || IS_SET( vch->in_room->area->flags, AFLAG_SILENCE ) )
557c680,684
<                       if ( channel == CHANNEL_YELL && vch->in_room->area != ch->in_room->area )
---
>                       if ( channel == CHANNEL_YELL
>                               && ( vch->in_room->area != ch->in_room->area
>                                       || xIS_SET( vch->in_room->room_flags, ROOM_NOYELL )
>                                       || ( ( xIS_SET( vch->in_room->room_flags, ROOM_HOUSE )
>                                                       || xIS_SET( och->in_room->room_flags, ROOM_HOUSE ) ) && !in_same_house( ch, vch ) ) ) )
563a691
> 
565a694
> 
622c751,752
<                       if ( channel == CHANNEL_IMMTALK || channel == CHANNEL_AVTALK )
---
>                       if ( channel == CHANNEL_IMMTALK )
>                       {
623a754,764
> 
>                               // Hrm whats this for?  Do we care that much about a green > or will
>                               // having a seperate AT_ color for avatar do the job..? :P.. -- Alty
> /*        set_char_color(AT_IMMORT, ch);
>           if ( can_see( vch, ch ) )
>               ch_printf_color( vch, "&Y%s%s%s\n\r", lbuf, buf, buf3 );
>           else
>               ch_printf_color( vch, "&YSomeone&G> &Y%s\n\r", buf3 );*/
>                       }
>                       else if ( channel == CHANNEL_AVTALK )
>                               act( AT_AVATAR, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
627a769,782
>                       else if ( channel == CHANNEL_SHOUT )
>                               act( AT_SHOUT, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
>                       else if ( channel == CHANNEL_HIGHGOD )
>                               act( AT_MUSE, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
>                       else if ( channel == CHANNEL_YELL )
>                               act( AT_YELL, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
>                       else if ( channel == CHANNEL_QUEST )
>                               act( AT_QUEST, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
>                       else if ( channel == CHANNEL_ASK )
>                               act( AT_ASK, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
>                       else if ( channel == CHANNEL_MUSIC )
>                               act( AT_MUSIC, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
>                       else if ( channel == CHANNEL_HIGH )
>                               act( AT_THINK, strcat( lbuf, buf ), ch, sbuf, vch, TO_VICT );
628a784,787
> /*
>               ch_printf_color( vch, "&W%s", nbuf );
>               ch_printf( vch, "%s", mbuf );
> */
640c799,800
<       if ( ( ch->level < 51 ) && ( channel != CHANNEL_WARTALK ) && ( channel != CHANNEL_CLAN ) )
---
>       if ( ( ch->level < LEVEL_IMMORTAL )
>               && ( channel != CHANNEL_YELL ) && ( channel != CHANNEL_WARTALK ) && ( channel != CHANNEL_CLAN ) )
667a828
>                       || ( get_trust( vch ) < 57 && channel == CHANNEL_BUG )
673c834
<               if ( d->connected == CON_PLAYING && !IS_SET( och->deaf, channel ) && get_trust( vch ) >= level )
---
>               if ( d->connected == CON_PLAYING && !xIS_SET( och->deaf, channel ) && get_trust( vch ) >= level )
830a992,1208
> /*
>  * Just pop this into act_comm.c somewhere. (Or anywhere else)
>  * It's pretty much say except modified to take args.
>  *
>  * Written by Kratas (moon@deathmoon.com)
>  * Fixed up for Smaug 1.4a+ by Blodkai, 9/2000
>  */
> 
> void do_say_to( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH], last_char;
>       char buf[MAX_STRING_LENGTH];
>       CHAR_DATA *vch;
>       CHAR_DATA *victim;
>       EXT_BV actflags;
>       int arglen;
> 
> #ifndef SCRAMBLE
>       int speaking = -1, lang;
> 
>       for ( lang = 0; lang_array[lang] != LANG_UNKNOWN; lang++ )
>               if ( ch->speaking & lang_array[lang] )
>               {
>                       speaking = lang;
>                       break;
>               }
> #endif
> 
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
>       {
>               ch_printf( ch, "You can't do that here.\n\r" );
>               return;
>       }
> 
>       argument = one_argument( argument, arg );
> 
>       if ( arg[0] == '\0' || argument[0] == '\0' )
>       {
>               ch_printf( ch, "What do you want to say, and to whom?\n\r" );
>               return;
>       }
> 
>       if ( ( victim = get_char_room( ch, arg ) ) == NULL )
>       {
>               ch_printf( ch, "They don't seem to be around.\n\r" );
>               return;
>       }
> 
>       if ( ch == victim )
>       {
>               ch_printf( ch, "How do I do?  Nice to meet me...\n\r", ch );
>               return;
>       }
> 
>       if ( !IS_NPC( victim ) && ( victim->switched ) && !IS_AFFECTED( victim->switched, AFF_POSSESS ) )
>       {
>               ch_printf( ch, "That player is switched.\n\r", ch );
>               return;
>       }
>       else if ( !IS_NPC( victim ) && ( !victim->desc ) )
>       {
>               ch_printf( ch, "That player is link-dead.\n\r" );
>               return;
>       }
> 
>       if ( !IS_NPC( victim ) && xIS_SET( victim->act, PLR_AFK ) )
>       {
>               if ( IS_IMMORTAL( ch ) )
>                       ch_printf( ch, "That player is AFK, but will recieve your message.\n\r" );
>               else
>               {
>                       send_to_char( "That player is afk.\n\r", ch );
>                       return;
>               }
>       }
> 
>       if ( victim->desc && victim->desc->connected == CON_EDITING )
>       {
>               ch_printf( ch, "That player is currently in a writing buffer.\n\r" );
>               return;
>       }
> 
>       /*
>        * Stopping people from sending tells whispers etc to people on their ignore list. -Leart
>        */
>       if ( is_ignoring( ch, victim ) )
>       {
>               /*
>                * If the sender is an imm then they can bypass this check 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "You are currently ignoring %s.\n\r"
>                               "Please type 'ignore %s' to stop ignoring them, then try sending your tell to them again.\n\r",
>                               victim->name, victim->name );
>                       return;
>               }
>       }
> 
>       /*
>        * Check to see if target of tell is ignoring the sender 
>        */
>       if ( is_ignoring( victim, ch ) )
>       {
>               /*
>                * If the sender is an imm then they cannot be ignored 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "%s is ignoring you.\n\r", victim->name );
>                       return;
>               }
>               else
>               {
>                       set_char_color( AT_IGNORE, victim );
>                       ch_printf( victim, "You attempt to ignore %s, but "
>                               "are unable to do so.\n\r", !can_see( victim, ch ) ? "Someone" : ch->name );
>               }
>       }
> 
>       arglen = strlen( argument ) - 1;
> 
>       /*
>        * Remove whitespace and tabs. 
>        */
>       while ( argument[arglen] == ' ' || argument[arglen] == '\t' )
>               --arglen;
>       last_char = argument[arglen];
> 
>       actflags = ch->act;
> 
>       if ( IS_NPC( ch ) )
>               xREMOVE_BIT( ch->act, ACT_SECRETIVE );
> 
>       for ( vch = ch->in_room->first_person; vch; vch = vch->next_in_room )
>       {
>               char *sbuf = argument;
> 
>               if ( vch == ch )
>                       continue;
> 
>               if ( is_ignoring( vch, ch ) )
>               {
>                       if ( !IS_IMMORTAL( ch ) || get_trust( vch ) > get_trust( ch ) )
>                               continue;
>                       else
>                       {
>                               set_char_color( AT_IGNORE, vch );
>                               ch_printf( vch, "You attempt to ignore %s, but are unable to do so.\n\r", !can_see( vch,
>                                               ch ) ? "Someone" : ch->name );
>                       }
>               }
> 
> #ifndef SCRAMBLE
>               if ( speaking != -1 && ( !IS_NPC( ch ) || ch->speaking ) )
>               {
>                       int speakswell = UMIN( knows_language( vch, ch->speaking, ch ),
>                               knows_language( ch, ch->speaking, vch ) );
> 
>                       if ( speakswell < 75 )
>                               sbuf = translate( speakswell, argument, lang_names[speaking] );
>               }
> #else
>               if ( !knows_language( vch, ch->speaking, ch ) && ( !IS_NPC( ch ) || ch->speaking != 0 ) )
>                       sbuf = scramble( argument, ch->speaking );
> #endif
>               sbuf = drunk_speech( sbuf, ch );
> 
>               MOBtrigger = FALSE;
>       }
> 
>       ch->act = actflags;
>       MOBtrigger = FALSE;
> 
>       switch ( last_char )
>       {
>               case '?':
>                       act( AT_SAY, "You ask $N, '$t'", ch, drunk_speech( argument, ch ), victim, TO_CHAR );
>                       act( AT_SAY, "$n asks $N, '$t'", ch, drunk_speech( argument, ch ), victim, TO_NOTVICT );
>                       act( AT_SAY, "$n asks you, '$t'", ch, drunk_speech( argument, ch ), victim, TO_VICT );
>                       break;
> 
>               case '!':
>                       act( AT_SAY, "You exclaim to $N, '$t'", ch, drunk_speech( argument, ch ), victim, TO_CHAR );
>                       act( AT_SAY, "$n exclaims to $N, '$t'", ch, drunk_speech( argument, ch ), victim, TO_NOTVICT );
>                       act( AT_SAY, "$n exclaims to you, '$t'", ch, drunk_speech( argument, ch ), victim, TO_VICT );
>                       break;
> 
>               default:
>                       act( AT_SAY, "You say to $N, '$t'", ch, drunk_speech( argument, ch ), victim, TO_CHAR );
>                       act( AT_SAY, "$n says to $N, '$t'", ch, drunk_speech( argument, ch ), victim, TO_NOTVICT );
>                       act( AT_SAY, "$n says to you, '$t'", ch, drunk_speech( argument, ch ), victim, TO_VICT );
>                       break;
>       }
> 
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
>       {
>               sprintf( buf, "%s: %s", IS_NPC( ch ) ? ch->short_descr : ch->name, argument );
>               append_to_file( LOG_FILE, buf );
>       }
>       mprog_speech_trigger( argument, ch );
>       if ( char_died( ch ) )
>               return;
> 
> /* I don't particularly want to risk this one -- Blodkai
> 
>     oprog_speech_trigger( argument, ch );
>     if ( char_died(ch) )
>         return;
> */
>       rprog_speech_trigger( argument, ch );
>       return;
> }
> 
> 
881a1260,1274
> void do_retiredtalk( CHAR_DATA * ch, char *argument )
> {
>       if ( NOT_AUTHED( ch ) || IS_NPC( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
>       if ( !IS_IMMORTAL( ch ) && !IS_SET( ch->pcdata->flags, PCFLAG_RETIRED ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
>       talk_channel( ch, argument, CHANNEL_RETIRED, "retired" );
>       return;
> }
910c1303
<       char buf[MAX_STRING_LENGTH];
---
>       char buf[MAX_STRING_LENGTH], last_char;
915a1309
>       int arglen;
931c1325,1334
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SILENCE ) )
---
>       arglen = strlen( argument ) - 1;
> 
>       /*
>        * Remove whitespace and tabs. 
>        */
>       while ( argument[arglen] == ' ' || argument[arglen] == '\t' )
>               --arglen;
>       last_char = argument[arglen];
> 
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
960c1363,1364
<                               ch_printf( vch, "You attempt to ignore %s, but" " are unable to do so.\n\r", ch->name );
---
>                               ch_printf( vch, "You attempt to ignore %s, but"
>                                       " are unable to do so.\n\r", !can_see( vch, ch ) ? "Someone" : ch->name );
980c1384,1395
<               act( AT_SAY, "$n says '$t'", ch, sbuf, vch, TO_VICT );
---
>               switch ( last_char )
>               {
>                       case '?':
>                               act( AT_SAY, "$n wonders '$t'", ch, sbuf, vch, TO_VICT );
>                               break;
>                       case '!':
>                               act( AT_SAY, "$n exclaims '$t'", ch, sbuf, vch, TO_VICT );
>                               break;
>                       default:
>                               act( AT_SAY, "$n says '$t'", ch, sbuf, vch, TO_VICT );
>                               break;
>               }
986,987c1401,1412
<       act( AT_SAY, "You say '$T'", ch, NULL, drunk_speech( argument, ch ), TO_CHAR );
<       if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
>       switch ( last_char )
>       {
>               case '?':
>                       act( AT_SAY, "You ask, '$T'", ch, NULL, drunk_speech( argument, ch ), TO_CHAR );
>                       break;
>               case '!':
>                       act( AT_SAY, "You exclaim '$T'", ch, NULL, drunk_speech( argument, ch ), TO_CHAR );
>                       break;
>               default:
>                       act( AT_SAY, "You say '$T'", ch, NULL, drunk_speech( argument, ch ), TO_CHAR );
>       }
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
1021c1446,1452
<       REMOVE_BIT( ch->deaf, CHANNEL_WHISPER );
---
>       xREMOVE_BIT( ch->deaf, CHANNEL_WHISPER );
> 
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
>       {
>               send_to_char( "You can't do that here.\n\r", ch );
>               return;
>       }
1059c1490
<       if ( IS_SET( victim->deaf, CHANNEL_WHISPER )
---
>       if ( xIS_SET( victim->deaf, CHANNEL_WHISPER )
1076a1508,1525
>        * Stopping people from sending tells whispers etc to people on their ignore list. -Leart
>        */
>       if ( is_ignoring( ch, victim ) )
>       {
>               /*
>                * If the sender is an imm then they can bypass this check 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "You are currently ignoring %s.\n\r"
>                               "Please type 'ignore %s' to stop ignoring them, then try whispering to them again.\n\r",
>                               victim->name, victim->name );
>                       return;
>               }
>       }
> 
>       /*
1093c1542,1543
<                       ch_printf( victim, "You attempt to ignore %s, but " "are unable to do so.\n\r", ch->name );
---
>                       ch_printf( victim, "You attempt to ignore %s, but "
>                               "are unable to do so.\n\r", !can_see( victim, ch ) ? "Someone" : ch->name );
1096a1547
>       MOBtrigger = FALSE;
1121c1572,1574
< if ( !IS_SET( ch->in_room->room_flags, ROOM_SILENCE ) )
---
> MOBtrigger = TRUE;
> if ( !xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) && !IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
> {
1122a1576
> }
1125c1579
< if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
> if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
1132c1586
< mprog_speech_trigger( argument, ch );
---
> mprog_tell_trigger( argument, ch );
1135a1590,1653
> 
> void do_beckon( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
> 
>       if ( IS_NPC( ch ) )
>               return;
> 
>       argument = one_argument( argument, arg );
> 
>       set_char_color( AT_ACTION, ch );
> 
>       if ( IS_SET( ch->pcdata->flags, PCFLAG_NOBECKON ) )
>       {
>               ch_printf( ch, "The gods forbid you this action.\n\r" );
>               return;
>       }
> 
>       if ( !*arg || !( victim = get_char_world( ch, arg ) ) )
>       {
>               ch_printf( ch, "Who do you wish to beckon?\n\r" );
>               return;
>       }
> 
>       if ( IS_NPC( victim ) )
>       {
>               ch_printf( ch, "Who do you wish to beckon?\n\r" );
>               return;
>       }
> 
>       if ( victim == ch )
>       {
>               ch_printf( ch, "Lonely?\n\r\a" );
>               return;
>       }
> 
>       if ( NOT_AUTHED( victim ) && !IS_IMMORTAL( ch ) )
>       {
>               ch_printf( ch, "They are not yet authorized.\n\r" );
>               return;
>       }
> 
>       if ( !IS_SET( victim->pcdata->flags, PCFLAG_BECKON ) && !IS_IMMORTAL( ch ) )
>       {
>               ch_printf( ch, "%s is deaf to beckoning.\n\r", victim->name );
>               return;
>       }
> 
>       if ( is_ignoring( victim, ch ) && !IS_IMMORTAL( ch ) )
>       {
>               ch_printf( ch, "%s is ignoring you.\n\r", victim->name );
>               return;
>       }
> 
>       if ( !IS_IMMORTAL( ch ) )
>               WAIT_STATE( ch, 1 * PULSE_VIOLENCE );
>       set_char_color( AT_ACTION, victim );
>       ch_printf( ch, "You beckon to %s...\n\r", PERS( victim, ch ) );
>       ch_printf( victim, "%s beckons you...\n\r\a", capitalize( PERS( ch, victim ) ) );
>       return;
> }
> 
> 
1155,1156c1673,1674
<       REMOVE_BIT( ch->deaf, CHANNEL_TELLS );
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SILENCE ) )
---
>       xREMOVE_BIT( ch->deaf, CHANNEL_TELLS );
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
1214,1215c1732,1738
<               send_to_char( "That player is afk.\n\r", ch );
<               return;
---
>               if ( IS_IMMORTAL( ch ) )
>                       send_to_char( "That player is AFK, but will receive your message.\n\r", ch );
>               else
>               {
>                       send_to_char( "That player is afk.\n\r", ch );
>                       return;
>               }
1218c1741
<       if ( IS_SET( victim->deaf, CHANNEL_TELLS ) && ( !IS_IMMORTAL( ch ) || ( get_trust( ch ) < get_trust( victim ) ) ) )
---
>       if ( xIS_SET( victim->deaf, CHANNEL_TELLS ) && ( !IS_IMMORTAL( ch ) || ( get_trust( ch ) < get_trust( victim ) ) ) )
1233c1756,1758
<       if ( !IS_NPC( victim ) && IS_SET( victim->in_room->room_flags, ROOM_SILENCE ) )
---
>       if ( !IS_NPC( victim )
>               && ( xIS_SET( victim->in_room->room_flags, ROOM_SILENCE )
>                       || IS_SET( victim->in_room->area->flags, AFLAG_SILENCE ) ) )
1235,1236c1760,1766
<               act( AT_PLAIN, "A magic force prevents your message from being heard.", ch, 0, victim, TO_CHAR );
<               return;
---
>               if ( IS_IMMORTAL( ch ) )
>                       send_to_char( "That player is in a silent room, but will receive your message.\n\r", ch );
>               else
>               {
>                       act( AT_PLAIN, "A magical force prevents your message from being heard.", ch, 0, victim, TO_CHAR );
>                       return;
>               }
1247a1778,1795
>        * Stopping people from sending tells whispers etc to people on their ignore list. -Leart
>        */
>       if ( is_ignoring( ch, victim ) )
>       {
>               /*
>                * If the sender is an imm then they can bypass this check 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "You are currently ignoring %s.\n\r"
>                               "Please type 'ignore %s' to stop ignoring them, then try sending your tell to them again.\n\r",
>                               victim->name, victim->name );
>                       return;
>               }
>       }
> 
>       /*
1264c1812,1813
<                       ch_printf( victim, "You attempt to ignore %s, but " "are unable to do so.\n\r", ch->name );
---
>                       ch_printf( victim, "You attempt to ignore %s, but "
>                               "are unable to do so.\n\r", !can_see( victim, ch ) ? "Someone" : ch->name );
1294c1843
< 
---
>       MOBtrigger = FALSE;
1297a1847
>       MOBtrigger = FALSE;
1311a1862
>       MOBtrigger = TRUE;
1314c1865
<       if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
1322c1873
<       mprog_speech_trigger( argument, ch );
---
>       mprog_tell_trigger( argument, ch );
1346,1347c1897,1898
<       REMOVE_BIT( ch->deaf, CHANNEL_TELLS );
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SILENCE ) )
---
>       xREMOVE_BIT( ch->deaf, CHANNEL_TELLS );
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
1382c1933
<       if ( IS_SET( victim->deaf, CHANNEL_TELLS ) && ( !IS_IMMORTAL( ch ) || ( get_trust( ch ) < get_trust( victim ) ) ) )
---
>       if ( xIS_SET( victim->deaf, CHANNEL_TELLS ) && ( !IS_IMMORTAL( ch ) || ( get_trust( ch ) < get_trust( victim ) ) ) )
1388,1389c1939,1943
<       if ( ( !IS_IMMORTAL( ch ) && !IS_AWAKE( victim ) )
<               || ( !IS_NPC( victim ) && IS_SET( victim->in_room->room_flags, ROOM_SILENCE ) ) )
---
>       if ( ( !IS_IMMORTAL( ch )
>                       && !IS_AWAKE( victim ) )
>               || ( !IS_NPC( victim )
>                       && xIS_SET( victim->in_room->room_flags, ROOM_SILENCE ) )
>               || ( !IS_NPC( victim ) && IS_SET( victim->in_room->area->flags, AFLAG_SILENCE ) ) )
1403a1958,1975
>        * Stopping people from sending tells whispers etc to people on their ignore list. -Leart
>        */
>       if ( is_ignoring( ch, victim ) )
>       {
>               /*
>                * If the sender is an imm then they can bypass this check 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "You are currently ignoring %s.\n\r"
>                               "Please type 'ignore %s' to stop ignoring them, then try sending your reply to them again.\n\r",
>                               victim->name, victim->name );
>                       return;
>               }
>       }
> 
>       /*
1420c1992,1993
<                       ch_printf( victim, "You attempt to ignore %s, but " "are unable to do so.\n\r", ch->name );
---
>                       ch_printf( victim, "You attempt to ignore %s, but "
>                               "are unable to do so.\n\r", !can_see( victim, ch ) ? "Someone" : ch->name );
1423a1997
>       MOBtrigger = FALSE;
1426a2001
>       MOBtrigger = FALSE;
1450c2025,2026
<       if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
>       MOBtrigger = TRUE;
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
1479a2056
>       mprog_tell_trigger( argument, ch );
1500,1501c2077,2078
<       REMOVE_BIT( ch->deaf, CHANNEL_TELLS );
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SILENCE ) )
---
>       xREMOVE_BIT( ch->deaf, CHANNEL_TELLS );
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SILENCE ) || IS_SET( ch->in_room->area->flags, AFLAG_SILENCE ) )
1549c2126
<       if ( IS_SET( victim->deaf, CHANNEL_TELLS ) && ( !IS_IMMORTAL( ch ) || ( get_trust( ch ) < get_trust( victim ) ) ) )
---
>       if ( xIS_SET( victim->deaf, CHANNEL_TELLS ) && ( !IS_IMMORTAL( ch ) || ( get_trust( ch ) < get_trust( victim ) ) ) )
1558,1559c2135,2139
<       if ( ( !IS_IMMORTAL( ch ) && !IS_AWAKE( victim ) ) ||
<               ( !IS_NPC( victim ) && IS_SET( victim->in_room->room_flags, ROOM_SILENCE ) ) )
---
>       if ( ( !IS_IMMORTAL( ch )
>                       && !IS_AWAKE( victim ) )
>               || ( !IS_NPC( victim )
>                       && xIS_SET( victim->in_room->room_flags, ROOM_SILENCE ) )
>               || ( !IS_NPC( victim ) && IS_SET( victim->in_room->area->flags, AFLAG_SILENCE ) ) )
1572a2153,2170
>        * Stopping people from sending tells whispers etc to people on their ignore list. -Leart
>        */
>       if ( is_ignoring( ch, victim ) )
>       {
>               /*
>                * If the sender is an imm then they can bypass this check 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "You are currently ignoring %s.\n\r"
>                               "Please type 'ignore %s' to stop ignoring them, then try sending your retell to them again.\n\r",
>                               victim->name, victim->name );
>                       return;
>               }
>       }
> 
>       /*
1589c2187,2188
<                       ch_printf( victim, "You attempy to ignore %s, but " "are unable to do so.\n\r", ch->name );
---
>                       ch_printf( victim, "You attempt to ignore %s, but "
>                               "are unable to do so.\n\r", !can_see( victim, ch ) ? "Someone" : ch->name );
1620a2220
>       MOBtrigger = FALSE;
1623a2224
>       MOBtrigger = FALSE;
1650c2251,2252
<       if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
>       MOBtrigger = TRUE;
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
1658c2260
<       mprog_speech_trigger( argument, ch );
---
>       mprog_tell_trigger( argument, ch );
1689c2291,2294
<               ch_printf( ch, ch->pcdata->tell_history[index] );
---
>               /*
>                * Caught by Robert Haas, Smaug mailing list 
>                */
>               send_to_char( ch->pcdata->tell_history[index], ch );
1756c2361,2362
<                               ch_printf( vch, "You attempt to ignore %s, but" " are unable to do so.\n\r", ch->name );
---
>                               ch_printf( vch, "You attempt to ignore %s, but"
>                                       " are unable to do so.\n\r", !can_see( vch, ch ) ? "Someone" : ch->name );
1773c2379,2382
<               act( AT_ACTION, "$n $t", ch, sbuf, vch, ( vch == ch ? TO_CHAR : TO_VICT ) );
---
>               if ( argument[0] == '\'' || argument[0] == '-' || argument[0] == ',' )
>                       act( AT_ACTION, "$n$t", ch, sbuf, vch, ( vch == ch ? TO_CHAR : TO_VICT ) );
>               else
>                       act( AT_ACTION, "$n $t", ch, sbuf, vch, ( vch == ch ? TO_CHAR : TO_VICT ) );
1780c2389
<       if ( IS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_LOGSPEECH ) )
1782c2391,2394
<               sprintf( buf, "%s %s (emote)", IS_NPC( ch ) ? ch->short_descr : ch->name, argument );
---
>               if ( argument[0] == '\'' || argument[0] == '-' || argument[0] == ',' )
>                       sprintf( buf, "%s%s (emote)", IS_NPC( ch ) ? ch->short_descr : ch->name, argument );
>               else
>                       sprintf( buf, "%s %s (emote)", IS_NPC( ch ) ? ch->short_descr : ch->name, argument );
1792a2405,2406
>       char arg[MAX_INPUT_LENGTH];
>       char *p;
1799a2414,2449
> 
>       p = one_argument( argument, arg );
>       if ( !str_cmp( arg, "clear" ) && get_trust( ch ) >= LEVEL_ASCENDANT )
>       {
>               p = one_argument( p, arg );
>               if ( str_cmp( arg, "now" ) )
>                       send_to_char( "Must specify 'clear now' to clear bug file.\n\r", ch );
>               else
>               {
>                       FILE *fp = fopen( PBUG_FILE, "w" );
> 
>                       if ( fp )
>                               fclose( fp );
>                       send_to_char( "Bug file cleared.\n\r", ch );
>                       return;
>               }
>       }
> 
>       if ( !str_cmp( arg, "list" ) &&
>               ( get_trust( ch ) >= LEVEL_ASCENDANT || is_name( "bug", ch->pcdata->bestowments ) ) )
>       {
>               int lo = -1, hi = -1;
> 
>               p = one_argument( p, arg );
>               if ( is_number( arg ) )
>               {
>                       lo = atoi( arg );
>                       p = one_argument( p, arg );
>                       if ( is_number( arg ) )
>                               hi = atoi( arg );
>               }
>               send_to_pager( "\n\r VNUM \n\r.......\n\r", ch );
>               show_file_vnum( ch, PBUG_FILE, lo, hi );
>               return;
>       }
> 
1815a2466,2468
>       char arg[MAX_INPUT_LENGTH];
>       char *p;
> 
1821a2475,2509
>       p = one_argument( argument, arg );
>       if ( !str_cmp( arg, "clear" ) && get_trust( ch ) >= LEVEL_ASCENDANT )
>       {
>               p = one_argument( p, arg );
>               if ( str_cmp( arg, "now" ) )
>                       send_to_char( "Must specify 'clear now' to clear idea file.\n\r", ch );
>               else
>               {
>                       FILE *fp = fopen( IDEA_FILE, "w" );
> 
>                       if ( fp )
>                               fclose( fp );
>                       send_to_char( "Idea file cleared.\n\r", ch );
>                       return;
>               }
>       }
> 
>       if ( !str_cmp( arg, "list" ) &&
>               ( get_trust( ch ) >= LEVEL_ASCENDANT || is_name( "idea", ch->pcdata->bestowments ) ) )
>       {
>               int lo = -1, hi = -1;
> 
>               p = one_argument( p, arg );
>               if ( is_number( arg ) )
>               {
>                       lo = atoi( arg );
>                       p = one_argument( p, arg );
>                       if ( is_number( arg ) )
>                               hi = atoi( arg );
>               }
>               send_to_pager( "\n\r VNUM \n\r.......\n\r", ch );
>               show_file_vnum( ch, IDEA_FILE, lo, hi );
>               return;
>       }
> 
1826a2515,2581
> void do_hintsubmit( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       char *p;
> 
>       if ( IS_NPC( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
>       set_char_color( AT_PLAIN, ch );
>       if ( argument[0] == '\0' )
>       {
>               send_to_char( "\n\rUsage:  'hintsubmit <message>'\n\r", ch );
>               if ( get_trust( ch ) >= LEVEL_DEMI )
>                       send_to_char( "Usage:  'hintsubmit list' or 'hintsubmit clear now'\n\r", ch );
>               return;
>       }
>       p = one_argument( argument, arg );
>       if ( !str_cmp( arg, "clear" ) && get_trust( ch ) >= LEVEL_DEMI )
>       {
>               p = one_argument( p, arg );
>               if ( str_cmp( arg, "now" ) )
>                       send_to_char( "Must specify 'clear now' to clear hint submission file.\n\r", ch );
>               else
>               {
>                       FILE *fp = fopen( HINTSUB_FILE, "w" );
> 
>                       if ( fp )
>                               fclose( fp );
>                       send_to_char( "Hint submission file cleared.\n\r", ch );
>                       return;
>               }
>       }
> 
>       if ( !str_cmp( arg, "list" ) &&
>               ( get_trust( ch ) >= LEVEL_DEMI || is_name( "hintsubmit", ch->pcdata->bestowments ) ) )
>       {
>               int lo = -1, hi = -1;
> 
>               p = one_argument( p, arg );
>               if ( is_number( arg ) )
>               {
>                       lo = atoi( arg );
>                       p = one_argument( p, arg );
>                       if ( is_number( arg ) )
>                               hi = atoi( arg );
>               }
>               send_to_pager( "\n\r VNUM \n\r.......\n\r", ch );
>               show_file_vnum( ch, HINTSUB_FILE, lo, hi );
>               return;
>       }
> 
>       append_file( ch, HINTSUB_FILE, argument );
>       send_to_char( "Thanks, your hint submission has been recorded.\n\r", ch );
>       return;
> }
> 
> void do_typ( CHAR_DATA * ch, char *argument )
> {
>       set_char_color( AT_PLAIN, ch );
>       send_to_char( "\n\rIf you want to submit a typo, type 'typo <message>'.\n\r", ch );
>       send_to_char( "If you want to change styles, type 'style <style name>'.\n\r", ch );
>       return;
> }
> 
> 
1828a2584,2586
>       char arg[MAX_INPUT_LENGTH];
>       char *p;
> 
1837c2595,2596
<       if ( !str_cmp( argument, "clear now" ) && get_trust( ch ) >= LEVEL_ASCENDANT )
---
>       p = one_argument( argument, arg );
>       if ( !str_cmp( arg, "clear" ) && get_trust( ch ) >= LEVEL_ASCENDANT )
1839c2598,2603
<               FILE *fp = fopen( TYPO_FILE, "w" );
---
>               p = one_argument( p, arg );
>               if ( str_cmp( arg, "now" ) )
>                       send_to_char( "Must specify 'clear now' to clear the typo file.\n\r", ch );
>               else
>               {
>                       FILE *fp = fopen( TYPO_FILE, "w" );
1841,1849c2605,2609
<               if ( fp )
<                       fclose( fp );
<               send_to_char( "Typo file cleared.\n\r", ch );
<               return;
<       }
<       if ( !str_cmp( argument, "list" ) && get_trust( ch ) >= LEVEL_ASCENDANT )
<       {
<               send_to_char( "\n\r VNUM \n\r.......\n\r", ch );
<               show_file( ch, TYPO_FILE );
---
>                       if ( fp )
>                               fclose( fp );
>                       send_to_char( "Typo file cleared.\n\r", ch );
>                       return;
>               }
1851c2611,2613
<       else
---
> 
>       if ( !str_cmp( arg, "list" ) &&
>               ( get_trust( ch ) >= LEVEL_ASCENDANT || is_name( "typo", ch->pcdata->bestowments ) ) )
1853,1854c2615,2627
<               append_file( ch, TYPO_FILE, argument );
<               send_to_char( "Thanks, your typo notice has been recorded.\n\r", ch );
---
>               int lo = -1, hi = -1;
> 
>               p = one_argument( p, arg );
>               if ( is_number( arg ) )
>               {
>                       lo = atoi( arg );
>                       p = one_argument( p, arg );
>                       if ( is_number( arg ) )
>                               hi = atoi( arg );
>               }
>               send_to_pager( "\n\r VNUM \n\r.......\n\r", ch );
>               show_file_vnum( ch, TYPO_FILE, lo, hi );
>               return;
1855a2629,2631
> 
>       append_file( ch, TYPO_FILE, argument );
>       send_to_char( "Thanks, your typo notice has been recorded.\n\r", ch );
1915a2692,2697
>       if ( !IS_IMMORTAL( ch ) && xIS_SET( ch->in_room->room_flags, ROOM_NOQUIT ) )
>       {
>               send_to_char_color( "You cannot QUIT here.\n\r", ch );
>               return;
>       }
> 
1927,1929c2709,2714
<       send_to_char
<               ( "Your surroundings begin to fade as a mystical swirling vortex of colors\n\renvelops your body... When you come to, things are not as they were.\n\r\n\r",
<               ch );
---
>       if ( class_table[ch->class]->logout )
>               ch_printf( ch, "%s\n\r", class_table[ch->class]->logout );
>       else
>               send_to_char
>                       ( "Your surroundings begin to fade as a mystical swirling vortex of colors\n\renvelops your body... When you come to, things are not as they were.\n\r\n\r",
>                       ch );
1931c2716,2719
<       act( AT_BYE, "$n has left the game.", ch, NULL, NULL, TO_CANSEE );
---
>       if ( class_table[ch->class]->logout_other )
>               act( AT_BYE, class_table[ch->class]->logout_other, ch, NULL, NULL, TO_CANSEE );
>       else
>               act( AT_BYE, "$n has left the game.", ch, NULL, NULL, TO_CANSEE );
1934c2722
<       sprintf( log_buf, "%s has quit (Room %d).", ch->name, ( ch->in_room ? ch->in_room->vnum : -1 ) );
---
>       sprintf( log_buf, "%s has quit. (INRoom %d)", ch->name, ( ch->in_room ? ch->in_room->vnum : -1 ) );
1935a2724,2726
>       update_member( ch );
>       if ( ch->level >= 50 && !ch->pcdata->pet )      /* Pet crash fix */
>               xREMOVE_BIT( ch->act, PLR_BOUGHT_PET );
1947a2739
>       {
1948a2741
>       }
2192c2985
< void do_ansi( CHAR_DATA * ch, char *argument )
---
> void do_hints( CHAR_DATA * ch, char *argument )
2195a2989,2994
>       if ( IS_NPC( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
> 
2200c2999,3022
<               send_to_char( "ANSI ON or OFF?\n\r", ch );
---
>               if ( IS_SET( ch->pcdata->flags, PCFLAG_HINTS ) )
>               {
>                       REMOVE_BIT( ch->pcdata->flags, PCFLAG_HINTS );
>                       send_to_char_color( "&CHints are now disabled.\n\r", ch );
>                       return;
>               }
>               else
>               {
>                       SET_BIT( ch->pcdata->flags, PCFLAG_HINTS );
>                       send_to_char_color( "&CHints are now enabled.\n\r", ch );
>                       return;
>               }
>       }
>       if ( ( strcmp( arg, "on" ) == 0 ) || ( strcmp( arg, "ON" ) == 0 ) )
>       {
>               SET_BIT( ch->pcdata->flags, PCFLAG_HINTS );
>               send_to_char_color( "&CHints are now enabled.\n\r", ch );
>               return;
>       }
> 
>       if ( ( strcmp( arg, "off" ) == 0 ) || ( strcmp( arg, "OFF" ) == 0 ) )
>       {
>               REMOVE_BIT( ch->pcdata->flags, PCFLAG_HINTS );
>               send_to_char_color( "&CHints are now disabled.\n\r", ch );
2202a3025,3047
> }
> 
> void do_ansi( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
> 
>       one_argument( argument, arg );
> 
>       if ( arg[0] == '\0' )
>       {
>               if ( xIS_SET( ch->act, PLR_ANSI ) )
>               {
>                       xREMOVE_BIT( ch->act, PLR_ANSI );
>                       send_to_char( "ANSI color is now OFF.\n\r", ch );
>                       return;
>               }
>               else
>               {
>                       xSET_BIT( ch->act, PLR_ANSI );
>                       send_to_char_color( "&GANSI color is now &YON&G!\n\r", ch );
>                       return;
>               }
>       }
2206,2207c3051
<               set_char_color( AT_WHITE + AT_BLINK, ch );
<               send_to_char( "ANSI ON!!!\n\r", ch );
---
>               send_to_char_color( "&GANSI color is now &YON&G!\n\r", ch );
2210d3053
< 
2214c3057
<               send_to_char( "Okay... ANSI support is now off\n\r", ch );
---
>               send_to_char( "ANSI color is now OFF.\n\r", ch );
2223,2227c3066
<       if ( ch->level < 2 )
<       {
<               send_to_char_color( "&BYou must be at least second level to save.\n\r", ch );
<               return;
<       }
---
> 
2289a3129,3200
> void do_lead( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim, *gch;
> 
>       one_argument( argument, arg );
> 
>       if ( IS_NPC( ch ) )
>               return;
> 
>       if ( !ch->pcdata->council )
>       {
>               ch_printf( ch, "Huh?" );
>               return;
>       }
> 
>       if ( str_cmp( ch->pcdata->council->name, "Newbie Council" ) )
>       {
>               ch_printf( ch, "Huh?\n\r" );
>               return;
>       }
> 
>       set_char_color( AT_LBLUE, ch );
> 
>       if ( arg[0] == '\0' )
>       {
>               ch_printf( ch, "Who do you want to lead?\n\r" );
>               return;
>       }
> 
>       if ( ( victim = get_char_room( ch, arg ) ) == NULL )
>       {
>               ch_printf( ch, "They aren't here.\n\r" );
>               return;
>       }
> 
>       if ( IS_NPC( victim ) )
>       {
>               ch_printf( ch, "You cannot lead mobiles.\n\r" );
>               return;
>       }
> 
>       if ( victim == ch )
>       {
>               for ( gch = first_char; gch; gch = gch->next )
>                       if ( gch->master == ch && gch != ch )
>                               stop_follower( gch );
>               return;
>       }
> 
> /*
>     if ( victim->master && victim->master == ch )
>     {
>       stop_follower( victim );
>       return;
>     }
> */
> 
>       if ( victim->level > 25 )
>       {
>               ch_printf( ch, "You cannot lead characters over level 25.\n\r", ch );
>               return;
>       }
> 
>       if ( victim->master )
>               stop_follower( victim );
>       ch_printf( victim, "%s beckons to you...\n\r", ch->name );
>       add_follower( victim, ch );
>       return;
> }
> 
> 
2339a3251,3267
>       /*
>        * Check to see if the victim a player is trying to follow is ignoring them.
>        * If so, they aren't permitted to follow. -Leart
>        */
>       if ( is_ignoring( victim, ch ) )
>       {
>               /*
>                * If the person trying to follow is an imm, then they can still follow 
>                */
>               if ( !IS_IMMORTAL( ch ) || get_trust( victim ) > get_trust( ch ) )
>               {
>                       set_char_color( AT_IGNORE, ch );
>                       ch_printf( ch, "%s is ignoring you.\n\r", victim->name );
>                       return;
>               }
>       }
> 
2377a3306,3311
> 
> /*
>     char buf[MAX_STRING_LENGTH];
>     CHAR_DATA *victim;
> */
> 
2383a3318,3327
> /*
>     sprintf( buf, "%s", ch->master->name );
> 
>     if ( ( victim = get_char_world( ch, buf ) ) == NULL )
>     {
>       bug( "Stop_follower:  ch->master fails get_char_world. (%s)", ch );
>       return;
>     }
> */
> 
2446a3391,3396
>       if ( get_timer( ch, TIMER_PKILLED ) > 0 )
>       {
>               send_to_char( "You have been killed in the past five minutes.\n\r", ch );
>               return;
>       }
> 
2533c3483
<                       PERS( leader, ch ), ch->level < 50 ? " [to lvl]" : "" );
---
>                       PERS( leader, ch ), ch->level < LEVEL_AVATAR ? " [to lvl]" : "" );
2614c3564
<                               if ( gch->level < 50 )
---
>                               if ( gch->level < LEVEL_AVATAR )
2661a3612
>                               && !is_same_group( rch, ch )
2665c3616
<                               && abs( ch->level - rch->level ) < 9 && !is_same_group( rch, ch ) && IS_PKILL( ch ) == IS_PKILL( rch ) )
---
>                               && ( ( abs( ch->level - rch->level ) < 9 && IS_PKILL( ch ) == IS_PKILL( rch ) ) || IS_IMMORTAL( ch ) ) )
2715c3666,3667
<       if ( ch->level - victim->level < -8 || ch->level - victim->level > 8 || ( IS_PKILL( ch ) != IS_PKILL( victim ) ) )
---
>       if ( ( ch->level - victim->level < -8
>                       || ch->level - victim->level > 8 || ( IS_PKILL( ch ) != IS_PKILL( victim ) ) ) && !IS_IMMORTAL( ch ) )
2850c3802
< /*    sprintf( buf, "%s tells the group '%s'.\n\r", ch->name, argument );*/
---
> /*    sprintf( buf, "%s tells the group '%s'\n\r", ch->name, argument );*/
2867c3819
<                                       ch_printf( gch, "%s tells the group '%s'.\n\r", ch->name, translate( speakswell, argument,
---
>                                       ch_printf( gch, "%s tells the group '%s'\n\r", ch->name, translate( speakswell, argument,
2870c3822
<                                       ch_printf( gch, "%s tells the group '%s'.\n\r", ch->name, argument );
---
>                                       ch_printf( gch, "%s tells the group '%s'\n\r", ch->name, argument );
2873c3825
<                               ch_printf( gch, "%s tells the group '%s'.\n\r", ch->name, argument );
---
>                               ch_printf( gch, "%s tells the group '%s'\n\r", ch->name, argument );
2876c3828
<                               ch_printf( gch, "%s tells the group '%s'.\n\r", ch->name, argument );
---
>                               ch_printf( gch, "%s tells the group '%s'\n\r", ch->name, argument );
2878c3830
<                               ch_printf( gch, "%s tells the group '%s'.\n\r", ch->name, scramble( argument, ch->speaking ) );
---
>                               ch_printf( gch, "%s tells the group '%s'\n\r", ch->name, scramble( argument, ch->speaking ) );
2918,2919c3870,3872
<               if ( ( d->connected == CON_PLAYING ) && !IS_SET( original->deaf, CHANNEL_AUCTION )
<                       && !IS_SET( original->in_room->room_flags, ROOM_SILENCE ) && !NOT_AUTHED( original ) )
---
>               if ( ( d->connected == CON_PLAYING ) && !xIS_SET( original->deaf, CHANNEL_AUCTION )
>                       && get_trust( original ) >= 5 && ( !xIS_SET( original->in_room->room_flags, ROOM_SILENCE )
>                               || !IS_SET( original->in_room->area->flags, AFLAG_SILENCE ) ) && !NOT_AUTHED( original ) )
2935a3889,3890
>       return 100;
> 
2953a3909,3910
>               if ( IS_IMMORTAL( ch ) )
>                       return 100;
3016c3973
<       LANG_CLAN, LANG_GITH, LANG_UNKNOWN
---
>       LANG_CLAN, LANG_GITH, LANG_GNOME, LANG_UNKNOWN
3024c3981
<       "halfling", "clan", "gith", ""
---
>       "halfling", "clan", "gith", "gnomish", ""