diff -i smaug14/src/act_wiz.c smaug18/src/act_wiz.c
8c8
<  * Tricops and Fireblade                                      |             *
---
>  * Tricops, Fireblade, Edmond, Conran                         |             *
33a34
> 
36c37
<       "empty", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24",
---
>       "empty", "tmpsave", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24",
58a60,62
> /* from clans.c */
> void remove_member args( ( char *clanname, char *membername ) );
> 
70a75,76
> void sort_noauctions args( ( NOAUCTION_DATA * pNoauc ) );
> 
162,164c168,170
< /*
<  * Clear watch file
<  */
---
>       /*
>        * Clear watch file
>        */
170c176
<               if ( 0 == remove( fname ) )
---
>               if ( !remove( fname ) )
179,181c185,187
< /*
<  * Display size of watch file
<  */
---
>       /*
>        * Display size of watch file
>        */
189d194
< 
207,209c212,214
< /*
<  * Print watch file
<  */
---
>       /*
>        * Print watch file
>        */
251,254c256,259
< /*
<  * Display all watches
<  * Only IMP+ can see all the watches. The rest can just see their own.
<  */
---
>       /*
>        * Display all watches
>        * Only IMP+ can see all the watches. The rest can just see their own.
>        */
267,269c272,274
< /*
<  * Display only those watches belonging to the requesting imm 
<  */
---
>       /*
>        * Display only those watches belonging to the requesting imm 
>        */
284,286c289,291
< /*
<  * Delete a watch belonging to the requesting imm
<  */
---
>       /*
>        * Delete a watch belonging to the requesting imm
>        */
321,323c326,328
< /*
<  * Watch a specific player
<  */
---
>       /*
>        * Watch a specific player
>        */
372,374c377,379
< /*
<  * Watch a specific site
<  */
---
>       /*
>        * Watch a specific site
>        */
415,417c420,422
< /*
<  * Watch a specific command - FB
<  */
---
>       /*
>        * Watch a specific command - FB
>        */
478a484,585
> void do_setvault( CHAR_DATA * ch, char *argument )
> {
>       VAULT_DATA *vault;
>       int rnum;
>       char arg1[MAX_INPUT_LENGTH];
>       char arg2[MAX_INPUT_LENGTH];
> 
>       argument = one_argument( argument, arg1 );
>       argument = one_argument( argument, arg2 );
> 
>       if ( !str_cmp( arg1, "show" ) )
>       {
>               ROOM_INDEX_DATA *room;
> 
>               pager_printf_color( ch, "&W%6s | %-40.40s | Area name\n\r", "VNUM", "Room Name" );
>               for ( vault = first_vault; vault; vault = vault->next )
>               {
>                       if ( ( room = get_room_index( vault->vnum ) ) == NULL )
>                               continue;
>                       pager_printf_color( ch, "&c%6d | &C%-40.40s | %s\n\r", vault->vnum, room->name, room->area->filename );
>               }
>               return;
>       }
> 
>       if ( !str_cmp( arg1, "save" ) && get_trust( ch ) > LEVEL_GREATER )
>       {
>               save_vault_list(  );
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
> 
>       if ( is_number( arg1 ) && ( arg2[0] != '\0' ) )
>       {
>               rnum = atoi( arg1 );
> 
>               if ( get_room_index( rnum ) != NULL )
>               {
>                       if ( !str_cmp( arg2, "create" ) )
>                       {
>                               CREATE( vault, VAULT_DATA, 1 );
>                               vault->vnum = rnum;
>                               sort_vaults( vault );
>                               ch_printf( ch, "Donation room created.\n\r" );
>                               return;
>                       }
>                       if ( !str_cmp( arg2, "delete" ) )
>                       {
>                               for ( vault = first_vault; vault; vault = vault->next )
>                                       if ( vault->vnum == rnum )
>                                       {
>                                               UNLINK( vault, first_vault, last_vault, next, prev );
>                                               DISPOSE( vault );
>                                               send_to_char( "Deleting that vnum...\n\r", ch );
>                                               return;
>                                       }
>                       }
>                       else
>                               send_to_char( "Not currently a donation vnum.\n\r", ch );
>               }
>               else
>               {
>                       send_to_char( "Invalid vnum argument", ch );
>                       return;
>               }
>       }
> 
>       set_char_color( AT_IMMORT, ch );
>       ch_printf( ch, "Syntax:\n\r" );
>       ch_printf( ch, "  setvault show - lists the rooms currently set to save donations\n\r" );
>       ch_printf( ch, "  setvault <vnum> create - adds a vnum to the list of rooms to save\n\r" );
>       ch_printf( ch, "  setvault <vnum> delete - removes a vnum from the list of rooms to save\n\r\n\r" );
>       if ( get_trust( ch ) > LEVEL_GREATER )
>               ch_printf( ch, "  setvault save - saves the vault list\n\r" );
>       ch_printf( ch, "    Remember, rooms set as storage on clans or councils will need to be\n\r" );
>       ch_printf( ch, "    removed in both clan/council file and the vault list.\n\r" );
>       return;
> }
> 
> 
> /* Old Wizhelp
> void do_wizhelp( CHAR_DATA *ch, char *argument )
> {
>     CMDTYPE * cmd;
>     int col, hash;
> 
>     col = 0;
>     set_pager_color( AT_PLAIN, ch );
>     for ( hash = 0; hash < 126; hash++ )
>       for ( cmd = command_hash[hash]; cmd; cmd = cmd->next )
>           if ( cmd->level >= LEVEL_HERO
>           &&   cmd->level <= get_trust( ch ) )
>           {
>               pager_printf( ch, "%-12s", cmd->name );
>               if ( ++col % 6 == 0 )
>                   send_to_pager( "\n\r", ch );
>           }
> 
>     if ( col % 6 != 0 )
>       send_to_pager( "\n\r", ch );
>     return;
> }
> */
483a591
>       int curr_lvl;
486,494d593
<       set_pager_color( AT_PLAIN, ch );
<       for ( hash = 0; hash < 126; hash++ )
<               for ( cmd = command_hash[hash]; cmd; cmd = cmd->next )
<                       if ( cmd->level >= LEVEL_HERO && cmd->level <= get_trust( ch ) )
<                       {
<                               pager_printf( ch, "%-12s", cmd->name );
<                               if ( ++col % 6 == 0 )
<                                       send_to_pager( "\n\r", ch );
<                       }
495a595,610
>       for ( curr_lvl = LEVEL_AVATAR; curr_lvl <= get_trust( ch ); curr_lvl++ )
>       {
>               set_pager_color( AT_WHITE, ch );
>               send_to_pager( "\n\r\n\r", ch );
>               col = 1;
>               pager_printf( ch, "[LEVEL %-2d]  \n\r", curr_lvl );
>               set_pager_color( AT_GREEN, ch );
>               for ( hash = 0; hash < 126; hash++ )
>                       for ( cmd = command_hash[hash]; cmd; cmd = cmd->next )
>                               if ( ( cmd->level == curr_lvl ) && cmd->level <= get_trust( ch ) )
>                               {
>                                       pager_printf( ch, "%-12s", cmd->name );
>                                       if ( ++col % 6 == 0 )
>                                               send_to_pager( "\n\r", ch );
>                               }
>       }
497a613
>       set_pager_color( AT_PLAIN, ch );
500a617
> 
649,650c766,768
<               send_to_char_color( "&RThe name you have chosen is too similar to that of a current immortal. \n\r"
<                       "We ask you to please choose another name using the name command.\n\r", victim );
---
>               send_to_char_color( "&RThe name you have chosen is too similar to that of an Immortal.\n\r"
>                       "We ask you to please choose another name using the 'name' command.\n\r"
>                       " (Type HELP NAME or HELP NAMING)\n\r", victim );
661,664c779,782
<               send_to_char_color( "&RThe name you have chosen is too similar to that of certain\n\r"
<                       "monsters in the game, in the long run this could cause problems\n\r"
<                       "and therefore we are unable to authorize them.  Please choose\n\r"
<                       "another name using the name command.\n\r", victim );
---
>               send_to_char_color( "&RThe name you have chosen is similar to that of a particular\n\r"
>                       "creature in the game, in the long run this could cause problems\n\r"
>                       "and therefore we are unable to authorize it.  Please choose\n\r"
>                       "another name using the 'name' command.\n\r" " (Type HELP NAME or HELP NAMING)\n\r", victim );
675,676c793,794
<               send_to_char_color( "&RWe will not authorize names containing swear words, in any language.\n\r"
<                       "Please choose another name using the name command.\n\r", victim );
---
>               send_to_char_color( "&RWe will not authorize names containing profanity, in any language.\n\r"
>                       "Please choose another name using the 'name' command.\n\r" " (Type HELP NAME or HELP NAMING)\n\r", victim );
688c806,807
<                       "medieval in nature.  Please choose another name using the name\n\r" "command.\n\r", victim );
---
>                       "medieval in nature.  Please choose another name using the 'name'\n\r"
>                       "command.\n\r" " (Type HELP NAME or HELP NAMING)\n\r", victim );
700c819,820
<                       "Please choose another name using the name\n\r" "command.\n\r", victim );
---
>                       "Please choose another name using the 'name'\n\r"
>                       "command.\n\r" " (Type HELP NAME or HELP NAMING)", victim );
709,710c829,830
<                       "We ask you to discontinue such behaviour, or suffer possible banishmemt\n\r"
<                       "from this mud.\n\r", victim );
---
>                       "We ask you to discontinue such behaviour, or suffer possible banishment\n\r"
>                       "from the game.\n\r", victim );
713a834,835
>               if ( victim->fighting )
>                       stop_fighting( victim, TRUE );
725,726d846
<                       "You may choose a new name when you reach "
<                       "the end of this area.\n\r"
728c848
<                       "No titles, descriptive words, or names close to any existing " "Immortal's name.\n\r", victim->name );
---
>                       " (Type HELP NAME or HELP NAMING)\n\r", victim->name );
815c935
<       if ( victim->level < LEVEL_SAVIOR )
---
>       if ( !IS_RETIRED( victim ) && victim->level < LEVEL_SAVIOR )
827a948
>               do_mortalize( ch, victim->name );
926a1048
>       act( AT_BLOOD, "$n denies access to $N.", ch, NULL, victim, TO_ROOM );
1128a1251,1252
>                       else if ( tar == ECHOTAR_PK && !IS_PKILL( d->character ) )
>                               continue;
1142a1267,1293
> void do_aecho( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *vch;
>       CHAR_DATA *vch_next;
>       sh_int color;
> 
>       if ( ( color = get_color( argument ) ) )
>               argument = one_argument( argument, arg );
>       if ( argument[0] == '\0' )
>       {
>               send_to_char( "Aecho what?\n\r", ch );
>               return;
>       }
>       for ( vch = first_char; vch; vch = vch_next )
>       {
>               vch_next = vch->next;
>               if ( vch->in_room->area == ch->in_room->area )
>               {
>                       if ( color )
>                               set_char_color( color, vch ), send_to_char( argument, vch ), send_to_char( "\n\r", vch );
>                       else
>                               set_char_color( AT_IMMORT, vch ), send_to_char( argument, vch ), send_to_char( "\n\r", vch );
>               }
>       }
> }
> 
1180a1332,1337
>       if ( !str_cmp( arg, "Thoric" )
>               || !str_cmp( arg, "Blodkai" ) || !str_cmp( arg, "Kali" ) || !str_cmp( arg, "Nivek" ) )
>       {
>               ch_printf( ch, "I don't think %s would like that!\n\r", arg );
>               return;
>       }
1214a1372,1378
>       if ( !str_cmp( arg, "Thoric" )
>               || !str_cmp( arg, "Circe" )
>               || !str_cmp( arg, "Haus" ) || !str_cmp( arg, "Scryn" ) || !str_cmp( arg, "Blodkai" ) )
>       {
>               ch_printf( ch, "I don't think %s would like that!\n\r", arg );
>               return;
>       }
1324,1325c1488,1489
<               pager_printf( ch, "Sorry. %s does not wish to be disturbed.\n\r", victim->name );
<               pager_printf( victim, "Your DND flag just foiled %s's transfer command.\n\r", ch->name );
---
>               ch_printf( ch, "Sorry. %s does not wish to be disturbed.\n\r", victim->name );
>               ch_printf( victim, "Your DND flag just foiled %s's transfer command.\n\r", ch->name );
1424,1425c1588,1589
<               pager_printf( ch, "Sorry. %s does not wish to be disturbed.\n\r", wch->name );
<               pager_printf( wch, "Your DND flag just foiled %s's at command.\n\r", ch->name );
---
>               ch_printf( ch, "Sorry. %s does not wish to be disturbed.\n\r", wch->name );
>               ch_printf( wch, "Your DND flag just foiled %s's at command.\n\r", ch->name );
1446,1447c1610,1611
<               pager_printf( ch, "That room is \"do not disturb\" right now.\n\r" );
<               pager_printf( victim, "Your DND flag just foiled %s's atmob command\n\r", ch->name );
---
>               ch_printf( ch, "That room is \"do not disturb\" right now.\n\r" );
>               ch_printf( victim, "Your DND flag just foiled %s's atmob command\n\r", ch->name );
1501,1502c1665,1666
<               pager_printf( ch, "That room is \"do not disturb\" right now.\n\r" );
<               pager_printf( victim, "Your DND flag just foiled %s's atobj command\n\r", ch->name );
---
>               ch_printf( ch, "That room is \"do not disturb\" right now.\n\r" );
>               ch_printf( victim, "Your DND flag just foiled %s's atobj command\n\r", ch->name );
1540c1704
<       if ( Start < 1 || End < Start || Start > End || Start == End || End > 32767 )
---
>       if ( Start < 1 || End < Start || Start > End || Start == End || End > MAX_VNUM )
1679a1844
>       ch_printf_color( ch, "&cRoom Weight: &W%d   &cRoom Max Weight: &R%d\n\r", location->weight, location->max_weight );
1682c1847
<       ch_printf_color( ch, "&cRoom flags: &w%s\n\r", flag_string( location->room_flags, r_flags ) );
---
>       ch_printf_color( ch, "&cRoom flags: &w%s\n\r", ext_flag_string( &location->room_flags, r_flags ) );
1693c1858
<                               send_to_char( " ", ch );
---
>                               send_to_char( ", ", ch );
1764a1930,1931
>       if ( obj->owner[0] != '\0' )
>               ch_printf_color( ch, "&cOwner: &Y%s\n\r", obj->owner );
1781c1948,1949
<       ch_printf_color( ch, "&cLevel: &P%d\n\r", obj->level );
---
>       ch_printf_color( ch, "&cLevel: &P%d    ", obj->level );
>       ch_printf_color( ch, "&cIndex level: &P%d\n\r", obj->pIndexData->level );
1799c1967
<                               send_to_char( " ", ch );
---
>                               send_to_char( ", ", ch );
1801c1969
<               send_to_char( "'.\n\r", ch );
---
>               send_to_char( "'\n\r", ch );
1812c1980
<                               send_to_char( " ", ch );
---
>                               send_to_char( ", ", ch );
1814c1982
<               send_to_char( "'.\n\r", ch );
---
>               send_to_char( "'\n\r", ch );
1822a1991,2074
> void do_vstat( CHAR_DATA * ch, char *argument )
> {
>       VARIABLE_DATA *vd;
>       CHAR_DATA *victim;
> 
>       if ( argument[0] == '\0' )
>       {
>               send_to_pager( "Vstat whom?\n\r", ch );
>               return;
>       }
> 
>       if ( ( victim = get_char_world( ch, argument ) ) == NULL )
>       {
>               send_to_char( "They aren't here.\n\r", ch );
>               return;
>       }
> 
>       if ( get_trust( ch ) < get_trust( victim ) )
>       {
>               send_to_char( "Their godly glow prevents you from getting a good look.\n\r", ch );
>               return;
>       }
> 
>       if ( !victim->variables )
>       {
>               send_to_char( "They have no variables currently assigned to them.\n\r", ch );
>               return;
>       }
> 
>       pager_printf_color( ch, "\n\r&cName: &C%-20s &cRoom : &w%-10d", victim->name,
>               victim->in_room == NULL ? 0 : victim->in_room->vnum );
>       pager_printf_color( ch, "\n\r&cVariables:\n\r" );
> 
> /*
> Variables:
> Vnum:           Tag:                 Type:     Timer:
>    Flags:
>    Data:
> */
>       for ( vd = victim->variables; vd; vd = vd->next )
>       {
>               pager_printf_color( ch, "  &cVnum: &W%-10d &cTag: &W%-15s &cTimer: &W%d\n\r", vd->vnum, vd->tag, vd->timer );
>               pager_printf_color( ch, "  &cType: " );
>               if ( vd->data )
>                       switch ( vd->type )
>                       {
>                               case vtSTR:
>                                       if ( vd->data )
>                                               pager_printf_color( ch, "&CString     &cData: &W%s", vd->data );
>                                       break;
>                               case vtINT:
>                                       if ( vd->data )
>                                               pager_printf_color( ch, "&CInteger    &cData: &W%d", ( int ) vd->data );
>                                       break;
>                               case vtXBIT:
>                                       if ( vd->data )
>                                       {
>                                               char buf[MAX_STRING_LENGTH];
>                                               int started = 0;
>                                               int x;
> 
>                                               buf[0] = '\0';
>                                               for ( x = MAX_BITS; x > 0; --x )
>                                               {
>                                                       if ( !started && xIS_SET( *( EXT_BV * ) vd->data, x ) )
>                                                               started = x;
>                                               }
>                                               for ( x = 1; x <= started; x++ )
>                                                       strcat( buf, xIS_SET( *( EXT_BV * ) vd->data, x ) ? "1 " : "0 " );
> 
>                                               if ( buf[0] != '\0' )
>                                                       buf[strlen( buf ) - 1] = '\0';
>                                               pager_printf_color( ch, "&CXBIT       &cData: &w[&W%s&w]", buf );
>                                       }
>                                       break;
>                       }
>               else
>                       pager_printf_color( ch, "&CNo Data" );
> 
>               send_to_pager( "\n\r\n\r", ch );
>       }
>       return;
> }
> 
1831a2084
>       VARIABLE_DATA *vd;
1835a2089
> 
1875,1877c2129,2140
<               pager_printf_color( ch, "&cUser: &w%s@%s   Descriptor: %d  &cTrust: &w%d  &cAuthBy: &w%s\n\r",
<                       victim->desc->user, victim->desc->host, victim->desc->descriptor,
<                       victim->trust, victim->pcdata->authed_by[0] != '\0' ? victim->pcdata->authed_by : "(unknown)" );
---
>               pager_printf_color( ch, "&cUser: &w%-19s Descriptor: %d  &cTrust: &w%d  &cAuthBy: &w%s\n\r",
>                       victim->desc->user, victim->desc->descriptor, victim->trust,
>                       victim->pcdata->authed_by[0] != '\0' ? victim->pcdata->authed_by : "(unknown)" );
>       if ( !IS_NPC( victim ) )
>       {
>               pager_printf_color( ch, "&cRecent IP: &w%-15s", victim->pcdata->recent_site ?
>                       victim->pcdata->recent_site : "Unknown" );
>               pager_printf_color( ch, "&cPrevious IP: &w%-15s", victim->pcdata->prev_site ?
>                       victim->pcdata->prev_site : "Unknown" );
>               pager_printf_color( ch, "&cRank: &w%s\n\r",
>                       str_cmp( victim->pcdata->rank, "" ) ? victim->pcdata->rank : "(default)" );
>       }
1892c2155,2159
<       pager_printf_color( ch, "&cLevel   : &P%-2d              ", victim->level );
---
>       pager_printf_color( ch, "&cLevel   : &P%-2d ", victim->level );
>       if ( IS_NPC( victim ) )
>               pager_printf_color( ch, "&c(&w%-2.2d&c)         ", victim->pIndexData->level );
>       else
>               pager_printf_color( ch, "             " );
1930,1932c2197,2200
<               pager_printf_color( ch, "&cDeity   : &w%-13s&w   &cFavor  : &w%-5d           &cGlory     : &w%-d (%d)\n\r",
<                       victim->pcdata->deity ? victim->pcdata->deity->name : "(none)",
<                       victim->pcdata->favor, victim->pcdata->quest_curr, victim->pcdata->quest_accum );
---
>               pager_printf_color( ch,
>                       "&cDeity   : &w%-13s&w   &cFavor  : &w%-5d &cGlory : &w%-3d (%-3d)     &cHonour : &w%-3d\n\r",
>                       victim->pcdata->deity ? victim->pcdata->deity->name : "(none)", victim->pcdata->favor,
>                       victim->pcdata->quest_curr, victim->pcdata->quest_accum, victim->pcdata->honour );
1984a2253,2256
> /*
>     pager_printf_color( ch, "&cSpeaks: &w%d   &cSpeaking: &w%d   &cExperience: &w%d",
>       victim->speaks, victim->speaking, victim->exp );
> */
1986c2258,2262
<               victim->speaks, victim->speaking, victim->exp );
---
>               victim->speaks, victim->speaking,
>               IS_NPC( victim ) ?
>               get_exp_worth( victim ) < MAX_EXP_WORTH ? get_exp_worth( victim ) : MAX_EXP_WORTH : victim->exp );
> 
> 
2035a2312,2333
> #ifdef SHADDAI
>               if ( xIS_SET( victim->act, ACT_PROTOTYPE ) )
>                       pager_printf_color( ch, "&cDefault Stance: &w%s\n\r", get_stance_name( victim->pIndexData->stances[0] ) );
> #endif
>       }
> #ifdef SHADDAI
>       pager_printf_color( ch, "&cStances   : " );
>       {
>               int i, j = 1;
> 
>               for ( i = ( STANCE_NORMAL + 1 ); i < MAX_STANCE; i++, j++ )
>               {
>                       if ( IS_NPC( victim ) )
>                               pager_printf_color( ch, "&w%10s: %3d ", get_stance_name( i ), victim->pIndexData->stances[i] );
>                       else
>                               pager_printf_color( ch, "&w%10s: %3d ", get_stance_name( i ), victim->pcdata->stances[i] );
>                       if ( j == 4 )
>                       {
>                               j = 0;
>                               send_to_char( "\n\r            ", ch );
>                       }
>               }
2036a2335,2337
> #endif
>       send_to_char( "\n\r", ch );
> 
2045c2346,2409
<               send_to_char( "\n\r", ch );
---
>               send_to_pager( "\n\r", ch );
>       }
> /* pre variables update
>     if ( ch->variables )
>     {
>       pager_printf_color( ch, "&cVariables  : &w" );
>       for ( vd = victim->variables; vd; vd = vd->next )
>       {
>           pager_printf_color( ch, "%s:%d", vd->tag, vd->vnum );
>           switch(vd->type)
>           {
>               case vtSTR:
>                   if ( vd->data )
>                       pager_printf_color( ch, "=%s", vd->data );
>                   break;
>               case vtINT:
>                   if ( vd->data )
>                       pager_printf_color( ch, "=%d", (int)vd->data );
>                   break;
>               case vtXBIT:
>           }
> pre variables update end */
> /* post variables update */
>       if ( victim->variables )
>       {
>               pager_printf_color( ch, "&cVariables  : &w" );
>               for ( vd = victim->variables; vd; vd = vd->next )
>               {
>                       pager_printf_color( ch, "%s:%d", vd->tag, vd->vnum );
>                       switch ( vd->type )
>                       {
>                               case vtSTR:
>                                       if ( vd->data )
>                                               pager_printf_color( ch, "=%s", vd->data );
>                                       break;
>                               case vtINT:
>                                       if ( vd->data )
>                                               pager_printf_color( ch, "=%d", ( int ) vd->data );
>                                       break;
>                               case vtXBIT:
>                                       if ( vd->data )
>                                       {
>                                               char buf[MAX_STRING_LENGTH];
>                                               int started = 0;
> 
>                                               buf[0] = '\0';
>                                               for ( x = MAX_BITS; x > 0; --x )
>                                               {
>                                                       if ( !started && xIS_SET( *( EXT_BV * ) vd->data, x ) )
>                                                               started = x;
>                                               }
>                                               for ( x = 1; x <= started; x++ )
>                                                       strcat( buf, xIS_SET( *( EXT_BV * ) vd->data, x ) ? "1 " : "0 " );
> 
>                                               if ( buf[0] != '\0' )
>                                                       buf[strlen( buf ) - 1] = '\0';
>                                               pager_printf_color( ch, "=[%s]", buf );
>                                       }
>                       }
> /* post variables update end */
>                       if ( vd->next )
>                               send_to_pager( "  ", ch );
>               }
>               send_to_pager( "\n\r", ch );
2160c2524,2527
<               if ( IS_NPC( victim ) && victim->in_room && nifty_is_name( arg, victim->name ) )
---
>               if ( IS_NPC( victim )
>                       && victim->in_room
>                       && ( nifty_is_name( arg, victim->name )
>                               || victim->pIndexData->vnum == ( is_number( arg ) ? atoi( arg ) : 0 ) ) )
2163c2530
<                       pager_printf( ch, "[%5d] %-28s [%5d] %s\n\r",
---
>                       pager_printf_color( ch, "[%5d] %-28s [%5d] %s\n\r",
2247a2615
> 
2436a2805,2807
>       if ( IS_NPC( ch ) )
>               return;
> 
2443a2815,2820
>       if ( IS_SET( ch->pcdata->flags, PCFLAG_PAGERON ) )
>       {
>               send_to_char( "The 'owhere' command temporarily  not be used in conjunction with the pager.\n\r", ch );
>               return;
>       }
> 
2501c2878
<               send_to_pager( buf, ch );
---
>               send_to_char( buf, ch );
2505a2883
> 
2512,2516d2889
< void do_reboo( CHAR_DATA * ch, char *argument )
< {
<       send_to_char_color( "&YIf you want to REBOOT, spell it out.\n\r", ch );
<       return;
< }
2518c2891,2896
< void do_reboot( CHAR_DATA * ch, char *argument )
---
> /*
>  * "Claim" an object.  Will allow an immortal to "grab" an object no matter
>  * where it is hiding.  ie: from a player's inventory, from deep inside
>  * a container, from a mobile, from anywhere.                 -Thoric
>  */
> void do_oclaim( CHAR_DATA * ch, char *argument )
2520,2522c2898,2900
<       char buf[MAX_STRING_LENGTH];
<       extern bool mud_down;
<       CHAR_DATA *vch;
---
>       char arg[MAX_INPUT_LENGTH];
>       char arg1[MAX_INPUT_LENGTH];
>       char arg2[MAX_INPUT_LENGTH];
2524c2902,2913
<       set_char_color( AT_IMMORT, ch );
---
>       char arg3[MAX_INPUT_LENGTH];
>       char *who = NULL;
>       CHAR_DATA *vch = NULL;
>       OBJ_DATA *obj;
>       bool silently = FALSE, found = FALSE;
>       int number, count, vnum;
> 
>       number = number_argument( argument, arg );
>       argument = arg;
>       argument = one_argument( argument, arg1 );
>       argument = one_argument( argument, arg2 );
>       argument = one_argument( argument, arg3 );
2526,2527c2915
<       if ( str_cmp( argument, "mud now" )
<               && str_cmp( argument, "nosave" ) && str_cmp( argument, "and sort skill table" ) )
---
>       if ( arg1[0] == '\0' )
2529c2917
<               send_to_char( "Syntax:  'reboot mud now' or 'reboot nosave'\n\r", ch );
---
>               send_to_char( "Syntax: oclaim <object> [from who] [+silent]\r\n", ch );
2532,2538c2920
< 
<       if ( auction->item )
<               do_auction( ch, "stop" );
<       sprintf( buf, "Reboot by %s.", ch->name );
<       do_echo( ch, buf );
< 
<       if ( !str_cmp( argument, "and sort skill table" ) )
---
>       if ( arg3[0] == '\0' )
2540,2541c2922,2934
<               sort_skill_table(  );
<               save_skill_table(  );
---
>               if ( arg2[0] != '\0' )
>               {
>                       if ( !str_cmp( arg2, "+silent" ) )
>                               silently = TRUE;
>                       else
>                               who = arg2;
>               }
>       }
>       else
>       {
>               who = arg2;
>               if ( !str_cmp( arg3, "+silent" ) )
>                       silently = TRUE;
2544,2549c2937,3081
<       /*
<        * Save all characters before booting. 
<        */
<       if ( str_cmp( argument, "nosave" ) )
<               for ( vch = first_char; vch; vch = vch->next )
<                       if ( !IS_NPC( vch ) )
---
>       if ( who )
>       {
>               if ( ( vch = get_char_world( ch, who ) ) == NULL )
>               {
>                       send_to_pager( "They aren't here.\n\r", ch );
>                       return;
>               }
>               if ( get_trust( ch ) < get_trust( vch ) && !IS_NPC( vch ) )
>               {
>                       act( AT_TELL, "$n tells you, 'Keep your hands to yourself!'", vch, NULL, ch, TO_VICT );
>                       return;
>               }
>       }
> 
>       if ( is_number( arg1 ) )
>               vnum = atoi( arg1 );
>       else
>               vnum = -1;
> 
>       count = 0;
>       for ( obj = first_object; obj; obj = obj->next )
>       {
>               if ( can_see_obj( ch, obj )
>                       && ( obj->pIndexData->vnum == vnum || nifty_is_name( arg1, obj->name ) )
>                       && ( !vch || vch == carried_by( obj ) ) )
>                       if ( ( count += obj->count ) >= number )
>                       {
>                               found = TRUE;
>                               break;
>                       }
>       }
>       if ( !found && vnum != -1 )
>       {
>               send_to_char( "You can't find that.\r\n", ch );
>               return;
>       }
> 
>       count = 0;
>       for ( obj = first_object; obj; obj = obj->next )
>       {
>               if ( can_see_obj( ch, obj )
>                       && ( obj->pIndexData->vnum == vnum || nifty_is_name_prefix( arg1, obj->name ) )
>                       && ( !vch || vch == carried_by( obj ) ) )
>                       if ( ( count += obj->count ) >= number )
>                       {
>                               found = TRUE;
>                               break;
>                       }
>       }
> 
>       if ( !found )
>       {
>               send_to_char( "You can't find that.\r\n", ch );
>               return;
>       }
> 
>       if ( !vch && ( vch = carried_by( obj ) ) != NULL )
>       {
>               if ( get_trust( ch ) < get_trust( vch ) && !IS_NPC( vch ) )
>               {
>                       act( AT_TELL, "$n tells you, 'Keep your hands off $p!  It's mine.'", vch, obj, ch, TO_VICT );
>                       act( AT_IMMORT, "$n tried to lay claim to $p from your possession!", vch, obj, ch, TO_CHAR );
>                       return;
>               }
>       }
> 
>       separate_obj( obj );
>       if ( obj->item_type == ITEM_PORTAL )
>               remove_portal( obj );
> 
>       if ( obj->carried_by )
>               obj_from_char( obj );
>       else if ( obj->in_room )
>               obj_from_room( obj );
>       else if ( obj->in_obj )
>               obj_from_obj( obj );
> 
>       obj_to_char( obj, ch );
>       if ( vch )
>       {
>               if ( !silently )
>               {
>                       act( AT_IMMORT, "$n claims $p from you!", ch, obj, vch, TO_VICT );
>                       act( AT_IMMORT, "$n claims $p from $N!", ch, obj, vch, TO_NOTVICT );
>                       act( AT_IMMORT, "You claim $p from $N!", ch, obj, vch, TO_CHAR );
>               }
>               else
>                       act( AT_IMMORT, "You silently claim $p from $N.", ch, obj, vch, TO_CHAR );
>       }
>       else
>       {
>               if ( !silently )
>               {
>                       /*
>                        * notify people in the room... (not done yet) 
>                        */
>                       act( AT_IMMORT, "You claim $p!", ch, obj, NULL, TO_CHAR );
>               }
>               else
>                       act( AT_IMMORT, "You silently claim $p.", ch, obj, NULL, TO_CHAR );
>       }
> }
> 
> void do_reboo( CHAR_DATA * ch, char *argument )
> {
>       send_to_char_color( "&YIf you want to REBOOT, spell it out.\n\r", ch );
>       return;
> }
> 
> void do_reboot( CHAR_DATA * ch, char *argument )
> {
>       char buf[MAX_STRING_LENGTH];
>       char buf2[MAX_STRING_LENGTH];
>       extern bool mud_down;
>       CHAR_DATA *vch;
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       sprintf( buf, "%s now", sysdata.port_name );
>       sprintf( buf2, "%s nosave", sysdata.port_name );
> 
>       if ( str_cmp( argument, buf ) && str_cmp( argument, buf2 ) && str_cmp( argument, "and sort skill table" ) )
>       {
>               send_to_char( "Syntax:  'reboot <port_name> now' or 'reboot <port_name> nosave'\n\r", ch );
>               return;
>       }
> 
>       if ( auction->item )
>               do_auction( ch, "stop" );
> 
>       sprintf( buf, "Reboot by %s.", ch->name );
>       do_echo( ch, buf );
> 
>       if ( !str_cmp( argument, "and sort skill table" ) )
>       {
>               sort_skill_table(  );
>               save_skill_table(  );
>       }
> 
>       /*
>        * Save all characters before booting. 
>        */
>       if ( str_cmp( argument, "nosave" ) )
>               for ( vch = first_char; vch; vch = vch->next )
>                       if ( !IS_NPC( vch ) )
2564a3097
>       char buf2[MAX_STRING_LENGTH];
2570c3103,3106
<       if ( str_cmp( argument, "mud now" ) && str_cmp( argument, "nosave" ) )
---
>       sprintf( buf, "%s now", sysdata.port_name );
>       sprintf( buf2, "%s nosave", sysdata.port_name );
> 
>       if ( str_cmp( argument, buf ) && str_cmp( argument, buf2 ) )
2572c3108
<               send_to_char( "Syntax:  'shutdown mud now' or 'shutdown nosave'\n\r", ch );
---
>               send_to_char( "Syntax:  'shutdown <port_name> now' or 'shutdown <port_name> nosave'\n\r", ch );
2778d3313
<       set_char_color( AT_IMMORT, ch );
2783a3319
>               set_char_color( AT_IMMORT, ch );
2788d3323
<       send_to_char( "You return to your original body.\n\r", ch );
2800a3336,3337
>       set_char_color( AT_IMMORT, ch );
>       send_to_char( "You return to your original body.\n\r", ch );
2809c3346
<       sh_int vnum;
---
>       int vnum;
2881,2882c3418,3421
<       char arg1[MAX_INPUT_LENGTH];
<       char arg2[MAX_INPUT_LENGTH];
---
>       char arg1[MAX_INPUT_LENGTH];    /* Vnum/keyword */
>       char arg2[MAX_INPUT_LENGTH];    /* Level */
>       char arg3[MAX_INPUT_LENGTH];    /* Quantity */
> 
2885c3424
<       sh_int vnum;
---
>       int vnum;
2886a3426
>       int quantity = 1;
2891a3432,3433
>       argument = one_argument( argument, arg3 );
> 
2894c3436
<               send_to_char( "Syntax: oinvoke <vnum> <level>.\n\r", ch );
---
>               send_to_char( "Syntax: oinvoke <vnum> <level> <quantity>.\n\r", ch );
2914a3457,3473
>       if ( arg3[0] != '\0' )
>       {
>               if ( !is_number( arg3 ) )
>               {
>                       send_to_char( "Syntax:  oinvoke <vnum> <level> <quantity>\n\r", ch );
>                       return;
>               }
> 
>               quantity = atoi( arg3 );
> 
>               if ( quantity < 1 || quantity > MAX_OINVOKE_QUANTITY )
>               {
>                       ch_printf( ch, "You must oinvoke between 1 and %d items.\n\r", MAX_OINVOKE_QUANTITY );
>                       return;
>               }
>       }
> 
2977a3537,3545
> 
>       if ( quantity > 1 && ( !xIS_SET( obj->extra_flags, ITEM_MULTI_INVOKE ) ) )
>       {
>               send_to_char( "This item can not be invoked in quantities greater than 1.\n\r", ch );
>               return;
>       }
>       else
>               obj->count = quantity;
> 
2986a3555
> 
2990,2991c3559,3566
<       ch_printf_color( ch, "&YYou invoke %s (&W#%d &Y- &W%s &Y- &Wlvl %d&Y)\n\r",
<               pObjIndex->short_descr, pObjIndex->vnum, pObjIndex->name, obj->level );
---
>       ch_printf_color( ch, "&YYou invoke %s (&W#%d &Y- &W%s &Y- &Wlvl %d &Y- &Wqty %d&Y)\n\r",
>               pObjIndex->short_descr, pObjIndex->vnum, pObjIndex->name, obj->level, quantity );
>       sprintf( log_buf, "%s invoked %s (vnum %d - %s - level %d - quantity %d)",
>               ch->name, pObjIndex->short_descr, pObjIndex->vnum, pObjIndex->name, obj->level, quantity );
>       log_string_plus( log_buf, LOG_ALL, 62 );
>       sprintf( log_buf, "%s (v%d / %s / l%d / q%d)",
>               pObjIndex->short_descr, pObjIndex->vnum, pObjIndex->name, obj->level, quantity );
>       append_file( ch, OINVOKE_FILE, log_buf );
3026a3602,3618
>               save_house_by_vnum( ch->in_room->vnum );        /* Prevent House Object Duplication */
>               /*
>                * Clan storeroom check 
>                */
>               if ( xIS_SET( ch->in_room->room_flags, ROOM_CLANSTOREROOM ) )
>               {
>                       VAULT_DATA *vault;
>                       char buf[20];
> 
>                       for ( vault = first_vault; vault; vault = vault->next )
>                               if ( vault->vnum == ch->in_room->vnum )
>                               {
>                                       sprintf( buf, "%d", vault->vnum );
>                                       save_storeroom( ch, buf );
>                               }
> 
>               }
3048a3641,3642
>               int vnum = ( obj->in_room ? obj->in_room->vnum : ROOM_VNUM_LIMBO );
> 
3052a3647,3660
>               save_house_by_vnum( vnum );     /* Prevent House Object Duplication */
>               if ( xIS_SET( ch->in_room->room_flags, ROOM_CLANSTOREROOM ) )
>               {
>                       VAULT_DATA *vault;
>                       char buf[20];
> 
>                       for ( vault = first_vault; vault; vault = vault->next )
>                               if ( vault->vnum == ch->in_room->vnum )
>                               {
>                                       sprintf( buf, "%d", vault->vnum );
>                                       save_storeroom( ch, buf );
>                               }
> 
>               }
3073a3682,3751
> 
> /* Sunangel
>    LOOP <command> [start] [end] [params] */
> void do_loop( CHAR_DATA * ch, char *argument )
> {
>       char arg1[MAX_INPUT_LENGTH];
>       char arg2[MAX_INPUT_LENGTH];
>       char arg3[MAX_INPUT_LENGTH];
>       char buf[MAX_STRING_LENGTH];
>       int startvnum, endvnum, i;
> 
>       argument = one_argument( argument, arg1 );
>       argument = one_argument( argument, arg2 );
>       argument = one_argument( argument, arg3 );
> 
>       if ( arg1[0] == '\0' )
>       {
>               send_to_char( "Syntax: loop <command> <start#> <end#> <params>\n\r", ch );
>               send_to_char( "  Where <command> is a valid command to execute,\n\r", ch );
>               send_to_char( "  <start#> and <end#> are numbers/vnums,\n\r", ch );
>               send_to_char( "  and <params> is a parameter list for <command>.\n\r", ch );
>               send_to_char( "EXAMPLE: LOOP MSET 22000 22100 FLAGS PROTOTYPE&C&w\n\r", ch );
>               return;
>       }
> 
>       if ( arg2[0] == '\0' )
>       {
>               send_to_char( "You must specify a start number/vnum.\n\r", ch );
>               return;
>       }
> 
>       if ( arg3[0] == '\0' )
>       {
>               send_to_char( "You must specify an end number/vnum.\n\r", ch );
>               return;
>       }
> 
>       startvnum = ( is_number( arg2 ) ? atoi( arg2 ) : 1 );
>       endvnum = ( is_number( arg3 ) ? atoi( arg3 ) : 1 );
> 
>       if ( endvnum < 0 )
>               endvnum = 1;
> 
>       if ( startvnum < 0 )
>               startvnum = 1;
> 
>       if ( startvnum > endvnum )
>       {
>               i = endvnum;
>               endvnum = startvnum;
>               startvnum = i;
>       }
> 
>       sprintf( buf, "Beginning loop for %s command, vnums %d to %d (%s).\n\r", arg1, startvnum, endvnum, argument );
> 
>       send_to_char( buf, ch );
> 
>       for ( i = startvnum; i <= endvnum; i++ )
>       {
>               sprintf( buf, "%s %d %s", arg1, i,
>                       ( !str_cmp( arg1, "mstat" ) || !str_cmp( arg1, "ostat" ) ) ? "\b" : argument );
>               interpret( ch, buf );
>       }
> 
>       send_to_char( "Done.\n\r", ch );
> 
>       return;
> }
> 
> 
3102a3781,3794
>               save_house_by_vnum( ch->in_room->vnum );        /* Prevent House Object Duplication */
>               if ( xIS_SET( ch->in_room->room_flags, ROOM_CLANSTOREROOM ) )
>               {
>                       VAULT_DATA *vault;
>                       char buf[20];
> 
>                       for ( vault = first_vault; vault; vault = vault->next )
>                               if ( vault->vnum == ch->in_room->vnum )
>                               {
>                                       sprintf( buf, "%d", vault->vnum );
>                                       save_storeroom( ch, buf );
>                               }
> 
>               }
3123a3816
> 
3459a4153,4169
> void do_imm_news( CHAR_DATA * ch, char *argument )
> {
> 
>       if ( IS_NPC( ch ) )
>               return;
> 
>       if ( !IS_IMMORTAL( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
> 
>       send_to_char_color( "\n\r&G&cImmortal news of the Realms ...\n\r", ch );
>       show_file( ch, IMMNEWS_FILE );
>       return;
> }
> 
3520a4231
>               remove_member( victim->pcdata->clan_name, victim->name );
3552a4264,4330
> void do_mobinvade( CHAR_DATA * ch, char *argument )
> {
>       char arg1[MAX_INPUT_LENGTH];
>       char arg2[MAX_INPUT_LENGTH];
>       char arg3[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
>       AREA_DATA *tarea;
>       int count, created;
>       bool found = FALSE;
>       MOB_INDEX_DATA *pMobIndex;
>       ROOM_INDEX_DATA *location;
> 
>       argument = one_argument( argument, arg1 );
>       argument = one_argument( argument, arg2 );
>       argument = one_argument( argument, arg3 );
>       count = atoi( arg2 );
>       set_char_color( AT_GREEN, ch );
>       if ( arg1[0] == '\0' || arg2[0] == '\0' )
>       {
>               send_to_char( "Invade <area> <# of invaders> <mob vnum>\n\r", ch );
>               return;
>       }
>       for ( tarea = first_area; tarea; tarea = tarea->next )
>               if ( !str_cmp( tarea->filename, arg1 ) )
>               {
>                       found = TRUE;
>                       break;
>               }
>       if ( !found )
>       {
>               send_to_char( "Area not found.\n\r", ch );
>               return;
>       }
>       if ( count > 300 )
>       {
>               send_to_char( "Whoa...Less than 300 please.\n\r", ch );
>               return;
>       }
>       if ( ( pMobIndex = get_mob_index( atoi( arg3 ) ) ) == NULL )
>       {
>               send_to_char( "No mobile has that vnum.\n\r", ch );
>               return;
>       }
> 
>       for ( created = 0; created < count; created++ )
>       {
>               if ( ( location = get_room_index( number_range( tarea->low_r_vnum, tarea->hi_r_vnum ) ) ) == NULL )
>               {
>                       --created;
>                       continue;
>               }
>               if ( xIS_SET( location->room_flags, ROOM_SAFE ) )
>               {
>                       --created;
>                       continue;
>               }
>               victim = create_mobile( pMobIndex );
>               char_to_room( victim, location );
>               act( AT_IMMORT, "$N appears as part of an invasion force!", ch, NULL, victim, TO_ROOM );
>       }
>       send_to_char( "The invasion was successful!\n\r", ch );
> 
>       return;
> }
> 
> 
> 
3627c4405
<               pRoomIndex = get_room_index( number_range( 0, 32767 ) );
---
>               pRoomIndex = get_room_index( number_range( 0, MAX_VNUM ) );
3629,3632c4407,4410
<                       if ( !IS_SET( pRoomIndex->room_flags, ROOM_PRIVATE )
<                               && !IS_SET( pRoomIndex->room_flags, ROOM_SOLITARY )
<                               && !IS_SET( pRoomIndex->room_flags, ROOM_NO_ASTRAL )
<                               && !IS_SET( pRoomIndex->room_flags, ROOM_PROTOTYPE ) )
---
>                       if ( !xIS_SET( pRoomIndex->room_flags, ROOM_PRIVATE )
>                               && !xIS_SET( pRoomIndex->room_flags, ROOM_SOLITARY )
>                               && !xIS_SET( pRoomIndex->room_flags, ROOM_NO_ASTRAL )
>                               && !xIS_SET( pRoomIndex->room_flags, ROOM_PROTOTYPE ) )
3696c4474
<               pRoomIndex = get_room_index( number_range( 0, 32767 ) );
---
>               pRoomIndex = get_room_index( number_range( 0, MAX_VNUM ) );
3698,3701c4476,4479
<                       if ( !IS_SET( pRoomIndex->room_flags, ROOM_PRIVATE )
<                               && !IS_SET( pRoomIndex->room_flags, ROOM_SOLITARY )
<                               && !IS_SET( pRoomIndex->room_flags, ROOM_NO_ASTRAL )
<                               && !IS_SET( pRoomIndex->room_flags, ROOM_PROTOTYPE ) )
---
>                       if ( !xIS_SET( pRoomIndex->room_flags, ROOM_PRIVATE )
>                               && !xIS_SET( pRoomIndex->room_flags, ROOM_SOLITARY )
>                               && !xIS_SET( pRoomIndex->room_flags, ROOM_NO_ASTRAL )
>                               && !xIS_SET( pRoomIndex->room_flags, ROOM_PROTOTYPE ) )
3768a4547,4548
>       bool supah_boost = FALSE;
>       DEITY_DATA *deity = NULL;
3777a4558,4567
>       // Restore-by-deity. -- Alty
>       if ( !str_cmp( arg, "deity" ) )
>       {
>               argument = one_argument( argument, arg );
>               if ( !( deity = get_deity( arg ) ) )
>               {
>                       send_to_char( "No such deity holds weight on this world.\n\r", ch );
>                       return;
>               }
>       }
3780a4571,4574
>               if ( !str_cmp( ch->name, "Blodkai" ) )
>                       supah_boost = TRUE;
>               else
>                       boost = TRUE;
3782d4575
<               boost = TRUE;
3784c4577
<       if ( !str_cmp( arg, "all" ) )
---
>       if ( deity || !str_cmp( arg, "all" ) )
3822c4615,4619
<                               if ( boost )
---
>                               if ( deity && ch->pcdata->deity != deity )
>                                       continue;
>                               if ( supah_boost )
>                                       vch->hit = vch->max_hit * 2.2;
>                               else if ( boost )
3826c4623,4626
<                               vch->mana = vch->max_mana;
---
>                               if ( supah_boost )
>                                       vch->mana = vch->max_mana * 2.2;
>                               else
>                                       vch->mana = vch->max_mana;
3838c4638,4851
<               CHAR_DATA *victim;
---
>               CHAR_DATA *victim;
> 
>               if ( ( victim = get_char_world( ch, arg ) ) == NULL )
>               {
>                       send_to_char( "They aren't here.\n\r", ch );
>                       return;
>               }
> 
>               if ( get_trust( ch ) < LEVEL_LESSER
>                       && victim != ch && !( IS_NPC( victim ) && xIS_SET( victim->act, ACT_PROTOTYPE ) ) )
>               {
>                       send_to_char( "You can't do that.\n\r", ch );
>                       return;
>               }
> 
>               if ( boost )
>                       victim->hit = victim->max_hit * 1.5;
>               else
>                       victim->hit = victim->max_hit;
>               victim->mana = victim->max_mana;
>               victim->move = victim->max_move;
>               if ( victim->pcdata )
>                       victim->pcdata->condition[COND_BLOODTHIRST] = ( 10 + victim->level );
>               update_pos( victim );
>               if ( ch != victim )
>                       act( AT_IMMORT, "$n has restored you.", ch, NULL, victim, TO_VICT );
>               send_to_char( "Restored.\n\r", ch );
>               return;
>       }
> }
> 
> void do_restoretime( CHAR_DATA * ch, char *argument )
> {
>       long int time_passed;
>       int hour, minute;
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       if ( !last_restore_all_time )
>               ch_printf( ch, "There has been no restore all since reboot.\n\r" );
>       else
>       {
>               time_passed = current_time - last_restore_all_time;
>               hour = ( int ) ( time_passed / 3600 );
>               minute = ( int ) ( ( time_passed - ( hour * 3600 ) ) / 60 );
>               ch_printf( ch, "The  last restore all was %d hours and %d minutes ago.\n\r", hour, minute );
>       }
> 
>       if ( !ch->pcdata )
>               return;
> 
>       if ( !ch->pcdata->restore_time )
>       {
>               send_to_char( "You have never done a restore all.\n\r", ch );
>               return;
>       }
> 
>       time_passed = current_time - ch->pcdata->restore_time;
>       hour = ( int ) ( time_passed / 3600 );
>       minute = ( int ) ( ( time_passed - ( hour * 3600 ) ) / 60 );
>       ch_printf( ch, "Your last restore all was %d hours and %d minutes ago.\n\r", hour, minute );
>       return;
> }
> 
> void do_nohomepage( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       one_argument( argument, arg );
>       if ( arg[0] == '\0' )
>       {
>               send_to_char( "Nohomepage whom?\n\r", ch );
>               return;
>       }
>       if ( ( victim = get_char_world( ch, arg ) ) == NULL )
>       {
>               send_to_char( "They aren't here.\n\r", ch );
>               return;
>       }
>       if ( IS_NPC( victim ) )
>       {
>               send_to_char( "Not on NPC's.\n\r", ch );
>               return;
>       }
>       if ( get_trust( victim ) >= get_trust( ch ) )
>       {
>               send_to_char( "You failed.\n\r", ch );
>               return;
>       }
>       set_char_color( AT_IMMORT, victim );
>       if ( xIS_SET( victim->act, PLR_NOHOMEPAGE ) )
>       {
>               xREMOVE_BIT( victim->act, PLR_NOHOMEPAGE );
>               send_to_char( "You can set your own homepage again.\n\r", victim );
>               ch_printf( ch, "NOHOMEPAGE removed from %s.\n\r", victim->name );
>       }
>       else
>       {
>               xSET_BIT( victim->act, PLR_NOHOMEPAGE );
>               STRFREE( victim->pcdata->homepage );
>               victim->pcdata->homepage = STRALLOC( "" );
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 12, NULL );
>               else
>                       send_to_char( "You can't set your own homepage!\n\r", victim );
>               ch_printf( ch, "NOHOMEPAGE set on %s.\n\r", victim->name );
>       }
>       return;
> }
> 
> /*
>  * Prevent a player from creating a desc and clear offending desc -Shaddai
>  */
> void do_nodesc( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       one_argument( argument, arg );
>       if ( arg[0] == '\0' )
>       {
>               send_to_char( "Nodesc whom?\n\r", ch );
>               return;
>       }
>       if ( ( victim = get_char_world( ch, arg ) ) == NULL )
>       {
>               send_to_char( "They aren't here.\n\r", ch );
>               return;
>       }
>       if ( IS_NPC( victim ) )
>       {
>               send_to_char( "Not on NPC's.\n\r", ch );
>               return;
>       }
>       if ( get_trust( victim ) >= get_trust( ch ) )
>       {
>               send_to_char( "You failed.\n\r", ch );
>               return;
>       }
>       set_char_color( AT_IMMORT, victim );
>       if ( IS_SET( victim->pcdata->flags, PCFLAG_NODESC ) )
>       {
>               REMOVE_BIT( victim->pcdata->flags, PCFLAG_NODESC );
>               send_to_char( "You can set your own description again.\n\r", victim );
>               ch_printf( ch, "NODESC removed from %s.\n\r", victim->name );
>       }
>       else
>       {
>               SET_BIT( victim->pcdata->flags, PCFLAG_NODESC );
>               STRFREE( victim->description );
>               victim->description = STRALLOC( "" );
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 11, NULL );
>               else
>                       send_to_char( "You can't set your own description!\n\r", victim );
>               ch_printf( ch, "NODESC set on %s.\n\r", victim->name );
>       }
>       return;
> }
> 
> void do_nohttp( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       one_argument( argument, arg );
>       if ( arg[0] == '\0' )
>       {
>               send_to_char( "Nohttp whom?\n\r", ch );
>               return;
>       }
>       if ( ( victim = get_char_world( ch, arg ) ) == NULL )
>       {
>               send_to_char( "They aren't here.\n\r", ch );
>               return;
>       }
>       if ( IS_NPC( victim ) )
>       {
>               send_to_char( "Not on NPC's.\n\r", ch );
>               return;
>       }
>       if ( get_trust( victim ) >= get_trust( ch ) )
>       {
>               send_to_char( "You failed.\n\r", ch );
>               return;
>       }
>       set_char_color( AT_IMMORT, victim );
>       if ( IS_SET( victim->pcdata->flags, PCFLAG_NOHTTP ) )
>       {
>               REMOVE_BIT( victim->pcdata->flags, PCFLAG_NOHTTP );
>               send_to_char( "You can set your own home page again.\n\r", victim );
>               ch_printf( ch, "NOHTTP removed from %s.\n\r", victim->name );
>       }
>       else
>       {
>               SET_BIT( victim->pcdata->flags, PCFLAG_NOHTTP );
>               STRFREE( victim->pcdata->homepage );
>               victim->pcdata->homepage = STRALLOC( "" );
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 12, NULL );
>               else
>                       send_to_char( "You can't set your own home page!\n\r", victim );
>               ch_printf( ch, "NOHTTP set on %s.\n\r", victim->name );
>       }
>       return;
> }
> 
3840,3844c4853,4859
<               if ( ( victim = get_char_world( ch, arg ) ) == NULL )
<               {
<                       send_to_char( "They aren't here.\n\r", ch );
<                       return;
<               }
---
> /*
>  * Prevent a player from creating a bio and clear offending bio -Shaddai
>  */
> void do_nobio( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
3846,3851c4861
<               if ( get_trust( ch ) < LEVEL_LESSER
<                       && victim != ch && !( IS_NPC( victim ) && xIS_SET( victim->act, ACT_PROTOTYPE ) ) )
<               {
<                       send_to_char( "You can't do that.\n\r", ch );
<                       return;
<               }
---
>       set_char_color( AT_IMMORT, ch );
3853,3864c4863,4881
<               if ( boost )
<                       victim->hit = victim->max_hit * 1.5;
<               else
<                       victim->hit = victim->max_hit;
<               victim->mana = victim->max_mana;
<               victim->move = victim->max_move;
<               if ( victim->pcdata )
<                       victim->pcdata->condition[COND_BLOODTHIRST] = ( 10 + victim->level );
<               update_pos( victim );
<               if ( ch != victim )
<                       act( AT_IMMORT, "$n has restored you.", ch, NULL, victim, TO_VICT );
<               send_to_char( "Restored.\n\r", ch );
---
>       one_argument( argument, arg );
>       if ( arg[0] == '\0' )
>       {
>               send_to_char( "Nobio whom?\n\r", ch );
>               return;
>       }
>       if ( ( victim = get_char_world( ch, arg ) ) == NULL )
>       {
>               send_to_char( "They aren't here.\n\r", ch );
>               return;
>       }
>       if ( IS_NPC( victim ) )
>       {
>               send_to_char( "Not on NPC's.\n\r", ch );
>               return;
>       }
>       if ( get_trust( victim ) >= get_trust( ch ) )
>       {
>               send_to_char( "You failed.\n\r", ch );
3866a4884,4902
>       set_char_color( AT_IMMORT, victim );
>       if ( IS_SET( victim->pcdata->flags, PCFLAG_NOBIO ) )
>       {
>               REMOVE_BIT( victim->pcdata->flags, PCFLAG_NOBIO );
>               send_to_char( "You can set your own bio again.\n\r", victim );
>               ch_printf( ch, "NOBIO removed from %s.\n\r", victim->name );
>       }
>       else
>       {
>               SET_BIT( victim->pcdata->flags, PCFLAG_NOBIO );
>               STRFREE( victim->pcdata->bio );
>               victim->pcdata->bio = STRALLOC( "" );
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 9, NULL );
>               else
>                       send_to_char( "You can't set your own bio!\n\r", victim );
>               ch_printf( ch, "NOBIO set on %s.\n\r", victim->name );
>       }
>       return;
3869c4905,4907
< void do_restoretime( CHAR_DATA * ch, char *argument )
---
> 
> /* Guess I should have added this to begin with, huh? - Blod, 12/2000 */
> void do_nobeckon( CHAR_DATA * ch, char *argument )
3871,3872c4909,4910
<       long int time_passed;
<       int hour, minute;
---
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
3876,3878c4914,4915
<       if ( !last_restore_all_time )
<               ch_printf( ch, "There has been no restore all since reboot.\n\r" );
<       else
---
>       one_argument( argument, arg );
>       if ( arg[0] == '\0' )
3880,3883c4917,4918
<               time_passed = current_time - last_restore_all_time;
<               hour = ( int ) ( time_passed / 3600 );
<               minute = ( int ) ( ( time_passed - ( hour * 3600 ) ) / 60 );
<               ch_printf( ch, "The  last restore all was %d hours and %d minutes ago.\n\r", hour, minute );
---
>               send_to_char( "Use nobeckon on who?\n\r", ch );
>               return;
3885,3886c4920,4922
< 
<       if ( !ch->pcdata )
---
>       if ( ( victim = get_char_world( ch, arg ) ) == NULL )
>       {
>               send_to_char( "They aren't here.\n\r", ch );
3888,3889c4924,4925
< 
<       if ( !ch->pcdata->restore_time )
---
>       }
>       if ( IS_NPC( victim ) )
3891c4927
<               send_to_char( "You have never done a restore all.\n\r", ch );
---
>               send_to_char( "Not on NPC's.\n\r", ch );
3894,3898c4930,4951
< 
<       time_passed = current_time - ch->pcdata->restore_time;
<       hour = ( int ) ( time_passed / 3600 );
<       minute = ( int ) ( ( time_passed - ( hour * 3600 ) ) / 60 );
<       ch_printf( ch, "Your last restore all was %d hours and %d minutes ago.\n\r", hour, minute );
---
>       set_char_color( AT_IMMORT, victim );
>       if ( get_trust( victim ) >= get_trust( ch ) )
>       {
>               send_to_char( "Their godly glow prevents you from getting close enough.\n\r", ch );
>               return;
>       }
>       if ( IS_SET( victim->pcdata->flags, PCFLAG_NOBECKON ) )
>       {
>               REMOVE_BIT( victim->pcdata->flags, PCFLAG_NOBECKON );
>               send_to_char( "The gods return your ability to beckon.\n\r", victim );
>               ch_printf( ch, "%s can again beckon.\n\r", victim->name );
>       }
>       else
>       {
>               SET_BIT( victim->pcdata->flags, PCFLAG_NOBECKON );
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 13, NULL );
>               else
>                       send_to_char( "The gods have removed your ability to beckon.\n\r", victim );
>               ch_printf( ch, "You have removed beckon from %s.\n\r", victim->name );
>       }
>       save_char_obj( victim );
3941c4994,4997
<               send_to_char( "A godly force turns your body to ice!\n\r", victim );
---
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 15, NULL );
>               else
>                       send_to_char( "A godly force turns your body to ice!\n\r", victim );
4087c5143,5146
<               send_to_char( "You can't emote!\n\r", victim );
---
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 16, NULL );
>               else
>                       send_to_char( "You can't emote!\n\r", victim );
4103c5162
<               send_to_char( "Notell whom?", ch );
---
>               send_to_char( "Notell whom?\n\r", ch );
4131c5190,5193
<               send_to_char( "You can't use tells!\n\r", victim );
---
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 14, NULL );
>               else
>                       send_to_char( "You can't use tells!\n\r", victim );
4178c5240,5243
<               send_to_char( "You can't set your own title!\n\r", victim );
---
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 8, NULL );
>               else
>                       send_to_char( "You can't set your own title!\n\r", victim );
4220c5285,5288
<               send_to_char( "You can't use channels!\n\r", victim );
---
>               if ( !victim->desc )
>                       add_loginmsg( victim->name, 7, NULL );
>               else
>                       send_to_char( "You can't use channels!\n\r", victim );
4576a5645,5667
> /*
>  * Make yourself visible to people in the same room as you    -Thoric
>  */
> void do_roomvis( CHAR_DATA * ch, char *argument )
> {
>       set_char_color( AT_IMMORT, ch );
> 
>       if ( IS_NPC( ch ) )
>               return;
> 
>       if ( xIS_SET( ch->act, PLR_ROOMVIS ) )
>       {
>               xREMOVE_BIT( ch->act, PLR_ROOMVIS );
>               send_to_char( "You are no longer visible to people in the same room as you.\n\r", ch );
>       }
>       else
>       {
>               xSET_BIT( ch->act, PLR_ROOMVIS );
>               send_to_char( "You are now visible to people who are in the same room as you.\n\r", ch );
>       }
>       return;
> }
> 
4582c5673
<       sh_int r_lo, r_hi;
---
>       int r_lo, r_hi;
4646c5737
<       sh_int o_lo, o_hi;
---
>       int o_lo, o_hi;
4691c5782
<       sh_int m_lo, m_hi;
---
>       int m_lo, m_hi;
4780c5871
<       bool loaded;
---
>       bool loaded = FALSE;
4782c5873
<       int old_room_vnum;
---
>       int old_room_vnum, test = 0;
4785c5876
<       CHAR_DATA *victim;
---
>       CHAR_DATA *victim = NULL;
4798,4800c5889
<       name[0] = UPPER( name[0] );
<       sprintf( fname, "%s%c/%s", PLAYER_DIR, tolower( name[0] ), capitalize( name ) );
<       if ( stat( fname, &fst ) != -1 )
---
>       for ( victim = first_char; victim; victim = victim->next )
4802,4807c5891,5895
<               CREATE( d, DESCRIPTOR_DATA, 1 );
<               d->next = NULL;
<               d->prev = NULL;
<               d->connected = CON_GET_NAME;
<               d->outsize = 2000;
<               CREATE( d->outbuf, char, d->outsize );
---
>               if ( IS_NPC( victim ) )
>                       continue;
>               if ( !str_cmp( name, victim->name ) )
>                       break;
>       }
4809,4816c5897,5922
<               loaded = load_char_obj( d, name, FALSE );
<               add_char( d->character );
<               old_room_vnum = d->character->in_room->vnum;
<               char_to_room( d->character, ch->in_room );
<               if ( get_trust( d->character ) >= get_trust( ch ) )
<               {
<                       do_say( d->character, "Do *NOT* disturb me again!" );
<                       send_to_char( "I think you'd better leave that player alone!\n\r", ch );
---
>       if ( !victim )
>       {
>               name[0] = UPPER( name[0] );
>               sprintf( fname, "%s%c/%s", PLAYER_DIR, tolower( name[0] ), capitalize( name ) );
>               if ( ( test = stat( fname, &fst ) ) )
>               {
>                       CREATE( d, DESCRIPTOR_DATA, 1 );
>                       d->next = NULL;
>                       d->prev = NULL;
>                       d->connected = CON_GET_NAME;
>                       d->outsize = 2000;
>                       CREATE( d->outbuf, char, d->outsize );
> 
>                       loaded = load_char_obj( d, name, FALSE );
>                       add_char( d->character );
>                       old_room_vnum = d->character->in_room->vnum;
>                       char_to_room( d->character, ch->in_room );
>                       if ( get_trust( d->character ) >= get_trust( ch ) )
>                       {
>                               do_say( d->character, "Do *NOT* disturb me again!" );
>                               send_to_char( "I think you'd better leave that player alone!\n\r", ch );
>                               d->character->desc = NULL;
>                               if ( loaded )
>                                       do_quit( d->character, "" );
>                               return;
>                       }
4818c5924,5936
<                       do_quit( d->character, "" );
---
>                       victim = d->character;
>                       d->character = NULL;
>                       DISPOSE( d->outbuf );
>                       DISPOSE( d );
>               }
>       }
>       if ( test != -1 && victim )
>       {
>               if ( get_trust( victim ) >= get_trust( ch ) )
>               {
>                       send_to_char( "You failed!\n\r", ch );
>                       if ( loaded )
>                               do_quit( victim, "" );
4821,4825d5938
<               d->character->desc = NULL;
<               victim = d->character;
<               d->character = NULL;
<               DISPOSE( d->outbuf );
<               DISPOSE( d );
4877d5989
<               make_wizlist(  );
4880c5992,5998
<               do_quit( victim, "" );
---
>               if ( loaded )
>                       do_quit( victim, "" );
>               else
>                       save_char_obj( victim );
>               make_wizlist(  );
>               make_adminlist(  );
>               make_retiredlist(  );
4896c6014
<       bool loaded;
---
>       bool loaded = FALSE;
4942c6060,6061
<                       do_quit( d->character, "" );
---
>                       if ( loaded )
>                               do_quit( d->character, "" );
5747c6866
<       name = capitalize( arg );
---
>       name = str_dup( capitalize( arg ) );
5755a6875,6884
>               sprintf( buf, "%s%s", HOUSE_DIR, name );
>               if ( !remove( buf ) )
>                       send_to_char( "Player's housing data destroyed.\n\r", ch );
>               else if ( errno != ENOENT )
>               {
>                       ch_printf( ch, "Unknown error #%d - %s (housing data)."
>                               "  Report to Coder.\n\r", errno, strerror( errno ) );
>                       sprintf( buf2, "%s destroying %s", ch->name, buf );
>                       perror( buf2 );
>               }
5799a6929
>       DISPOSE( name );
6058a7189
>               pager_printf_color( ch, "\n\r&WPort_name: %s", sysdata.port_name );
6066,6067c7197,7199
<               pager_printf_color( ch, "&WBuilding:\n\r  &wPrototype modification: &W%d  &wPlayer msetting: &W%d\n\r",
<                       sysdata.level_modify_proto, sysdata.level_mset_player );
---
>               pager_printf_color( ch,
>                       "&WBuilding:\n\r  &wPrototype modification: &W%d  &wPlayer msetting: &W%d  &wArea Save version: &W%d\n\r",
>                       sysdata.level_modify_proto, sysdata.level_mset_player, sysdata.save_version );
6073,6074c7205,7207
<               pager_printf_color( ch, "&WDefenses:\n\r  &wDodge_mod: &W%d    &wParry_mod: &W%d    &wTumble_mod: &W%d\n\r",
<                       sysdata.dodge_mod, sysdata.parry_mod, sysdata.tumble_mod );
---
>               pager_printf_color( ch,
>                       "&WDefenses:\n\r  &wDodge_mod: &W%d    &wParry_mod: &W%d    &wTumble_mod: &W%d    &wTumble_pk:  &W%d\n\r",
>                       sysdata.dodge_mod, sysdata.parry_mod, sysdata.tumble_mod, sysdata.tumble_pk );
6086a7220,7221
>               pager_printf_color( ch, "  &wPercent damage nonav vs. mob: &W%-7d", sysdata.dam_nonav_vs_mob );
>               pager_printf_color( ch, "&wPercent damage mob vs. nonav:  &W%-3d\n\r", sysdata.dam_mob_vs_nonav );
6094c7229,7234
<               pager_printf_color( ch, "  &wPkill looting is:             &W%s\n\r", ( sysdata.pk_loot ) ? "ON" : "off" );
---
>               pager_printf_color( ch, "  &wPkill looting is:             &W%-7s", ( sysdata.pk_loot ) ? "ON" : "off" );
>               pager_printf_color( ch, "&wPkill_channels are:            &W%s\n\r", ( sysdata.pk_channels ) ? "ON" : "off" );
>               pager_printf_color( ch, "  &wPeaceful exp mod:             &W%-7d", sysdata.peaceful_exp_mod );
>               pager_printf_color( ch, "&wPkill_silence is:              &W%s\n\r", ( sysdata.pk_silence ) ? "ON" : "off" );
>               pager_printf_color( ch, "  &wDeadly exp mod:               &W%-7d", sysdata.deadly_exp_mod );
>               pager_printf_color( ch, "&wWizlock after reboot:          &W%s\n\r", ( sysdata.wizlock ) ? "ON" : "off" );
6096a7237,7238
>               pager_printf_color( ch, "  &wMax HTML news: %d&W\n\r  &wHTML news path: %s&W\n\r", sysdata.max_html_news,
>                       sysdata.news_html_path );
6115a7258,7296
>       if ( !str_cmp( arg, "saveversion" ) )
>       {
>               sysdata.save_version = UMAX( MIN_SAVE_VERSION, ( ( sh_int ) atoi( argument ) ) );
>               send_to_char( "Save version set.\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( arg, "wizlock" ) )
>       {
>               set_char_color( AT_DANGER, ch );
> 
>               sysdata.wizlock = !sysdata.wizlock;
>               ch_printf( ch, "Wizlocked at reboot is %s.\n\r", sysdata.wizlock ? "ON" : "OFF" );
>               return;
>       }
> 
>       /*
>        * 3/29/02 - for extended news - Nopey 
>        */
>       if ( !str_cmp( arg, "newspath" ) )
>       {
>               if ( argument[0] == '\0' )
>               {
>                       pager_printf_color( ch, "News path now set to nothing.  HTML writing disabled" );
>                       sysdata.news_html_path[0] = '\0';
>                       return;
>               }
>               sysdata.news_html_path = STRALLOC( argument );
>               pager_printf_color( ch, "News path set to: %snews.txt\n\r", argument );
>               return;
>       }
> 
>       if ( !str_cmp( arg, "maxnews" ) )
>       {
>               sysdata.max_html_news = atoi( argument );
>               pager_printf_color( ch, "Max HTML news now set to: %d\n\r", sysdata.max_html_news );
>               return;
>       }
> 
6121c7302,7311
<               send_to_char( "Name set.\n\r", ch );
---
>               send_to_char( "Mud name set.\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( arg, "portname" ) )
>       {
>               if ( sysdata.port_name )
>                       DISPOSE( sysdata.port_name );
>               sysdata.port_name = str_dup( argument );
>               send_to_char( "Port name set.\n\r", ch );
6138a7329,7336
>       if ( !str_prefix( arg, "magichell" ) )
>       {
>               sysdata.magichell = !sysdata.magichell;
>               ch_printf_color( ch, "&BMagic hell is %s.\n\r", sysdata.magichell ? "ON" : "OFF" );
>               send_to_char( "Ok.\n\r", ch );
>               return;
>       }
> 
6223a7422,7428
>       if ( !str_cmp( arg, "tumble_pk" ) )
>       {
>               sysdata.tumble_pk = level > 0 ? level : 1;
>               send_to_char( "Tumble_pk mod set.\n\r", ch );
>               return;
>       }
> 
6237a7443,7456
>       if ( !str_cmp( arg, "deadly_exp" ) )
>       {
>               sysdata.deadly_exp_mod = level;
>               send_to_char( "Deadly experience multiplier modified.\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( arg, "peaceful_exp" ) )
>       {
>               sysdata.peaceful_exp_mod = level;
>               send_to_char( "Peaceful experience multiplier modified.\n\r", ch );
>               return;
>       }
> 
6251a7471,7484
>       if ( !str_cmp( arg, "dam_navm" ) )
>       {
>               sysdata.dam_nonav_vs_mob = level;
>               send_to_char( "Non-avatar damage vs mobile set.\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( arg, "dam_mvna" ) )
>       {
>               sysdata.dam_mob_vs_nonav = level;
>               send_to_char( "Mobile damage vs non-avatar set.\n\r", ch );
>               return;
>       }
> 
6333c7566,7592
<                       sysdata.save_pets = FALSE;
---
>                       sysdata.save_pets = FALSE;
>       }
>       else if ( !str_cmp( arg, "pk_silence" ) )
>       {
>               if ( level )
>               {
>                       send_to_char( "Pkill silence is enabled.\n\r", ch );
>                       sysdata.pk_silence = TRUE;
>               }
>               else
>               {
>                       send_to_char( "Pkill silence is disabled.  (use cset pk_silence 1 to enable.)\n\r", ch );
>                       sysdata.pk_silence = FALSE;
>               }
>       }
>       else if ( !str_cmp( arg, "pk_channels" ) )
>       {
>               if ( level )
>               {
>                       send_to_char( "Pkill channels are enabled.\n\r", ch );
>                       sysdata.pk_channels = TRUE;
>               }
>               else
>               {
>                       send_to_char( "Pkill channels are disabled.  (use cset pk_channels 1 to enable)\n\r", ch );
>                       sysdata.pk_channels = FALSE;
>               }
6458,6459c7717,7721
<       ch_printf( victim, "The immortals are not pleased with your actions.\n\r"
<               "You shall remain in hell for %d %s%s.\n\r", time, ( h_d ? "hour" : "day" ), ( time == 1 ? "" : "s" ) );
---
>       if ( !victim->desc )
>               add_loginmsg( victim->name, 10, NULL );
>       else
>               ch_printf( victim, "The immortals are not pleased with your actions.\n\r"
>                       "You shall remain in hell for %d %s%s.\n\r", time, ( h_d ? "hour" : "day" ), ( time == 1 ? "" : "s" ) );
6522a7785,7955
> /* Consolidated *assign function. 
>  * Assigns room/obj/mob ranges and initializes new zone - Samson 2-12-99 
>  */
> /* Bugfix: Vnum range would not be saved properly without placeholders at
> both ends - Samson 1-6-00 */
> void do_vassign( CHAR_DATA * ch, char *argument )
> {
>       char arg1[MAX_INPUT_LENGTH];
>       char arg2[MAX_INPUT_LENGTH];
>       char arg3[MAX_INPUT_LENGTH];
>       int lo, hi;
>       CHAR_DATA *victim, *mob;
>       ROOM_INDEX_DATA *room;
>       MOB_INDEX_DATA *pMobIndex;
>       OBJ_INDEX_DATA *pObjIndex;
>       OBJ_DATA *obj;
>       AREA_DATA *tarea;
>       char filename[256];
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       argument = one_argument( argument, arg1 );
>       argument = one_argument( argument, arg2 );
>       argument = one_argument( argument, arg3 );
>       lo = atoi( arg2 );
>       hi = atoi( arg3 );
> 
>       if ( arg1[0] == '\0' || lo < 0 || hi < 0 )
>       {
>               send_to_char( "Syntax: vassign <who> <low> <high>\n\r", ch );
>               return;
>       }
>       if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
>       {
>               send_to_char( "They don't seem to be around.\n\r", ch );
>               return;
>       }
>       if ( IS_NPC( victim ) || get_trust( victim ) < LEVEL_CREATOR )
>       {
>               send_to_char( "They wouldn't know what to do with a vnum range.\n\r", ch );
>               return;
>       }
>       if ( victim->pcdata->area && lo != 0 )
>       {
>               send_to_char( "You cannot assign them a range, they already have one!\n\r", ch );
>               return;
>       }
>       if ( lo > hi )
>       {
>               send_to_char( "Unacceptable vnum range.\n\r", ch );
>               return;
>       }
>       if ( lo == 0 )
>               hi = 0;
>       victim->pcdata->r_range_lo = lo;
>       victim->pcdata->r_range_hi = hi;
>       victim->pcdata->o_range_lo = lo;
>       victim->pcdata->o_range_hi = hi;
>       victim->pcdata->m_range_lo = lo;
>       victim->pcdata->m_range_hi = hi;
>       assign_area( victim );
>       send_to_char( "Done.\n\r", ch );
>       ch_printf( victim, "%s has assigned you the vnum range %d - %d.\n\r", ch->name, lo, hi );
>       assign_area( victim );  /* Put back by Thoric on 02/07/96 */
> 
>       if ( !victim->pcdata->area )
>       {
>               bug( "vassign: assign_area failed", 0 );
>               return;
>       }
> 
>       tarea = victim->pcdata->area;
> 
>       if ( lo == 0 )  /* Scryn 8/12/95 */
>       {
>               REMOVE_BIT( tarea->status, AREA_LOADED );
>               SET_BIT( tarea->status, AREA_DELETED );
>       }
>       else
>       {
>               SET_BIT( tarea->status, AREA_LOADED );
>               REMOVE_BIT( tarea->status, AREA_DELETED );
>       }
> 
>       /*
>        * Initialize first and last rooms in range 
>        */
>       room = make_room( lo );
>       if ( !room )
>       {
>               bug( "do_vassign: make_room failed to initialize first room.", 0 );
>               return;
>       }
>       room->area = tarea;
> 
>       room = make_room( hi );
>       if ( !room )
>       {
>               bug( "do_vassign: make_room failed to initialize last room.", 0 );
>               return;
>       }
>       room->area = tarea;
> 
>       /*
>        * Initialize first mob in range 
>        */
>       pMobIndex = make_mobile( lo, 0, "first mob" );
>       if ( !pMobIndex )
>       {
>               log_string( "do_vassign: make_mobile failed to initialize first mob." );
>               return;
>       }
>       mob = create_mobile( pMobIndex );
>       char_to_room( mob, room );
> 
>       /*
>        * Initialize last mob in range 
>        */
>       pMobIndex = make_mobile( hi, 0, "last mob" );
>       if ( !pMobIndex )
>       {
>               log_string( "do_vassign: make_mobile failed to initialize last mob." );
>               return;
>       }
>       mob = create_mobile( pMobIndex );
>       char_to_room( mob, room );
> 
>       /*
>        * Initialize first obj in range 
>        */
>       pObjIndex = make_object( lo, 0, "first obj" );
>       if ( !pObjIndex )
>       {
>               log_string( "do_vassign: make_object failed to initialize first obj." );
>               return;
>       }
>       obj = create_object( pObjIndex, 0 );
>       obj_to_room( obj, room );
> 
>       /*
>        * Initialize last obj in range 
>        */
>       pObjIndex = make_object( hi, 0, "last obj" );
>       if ( !pObjIndex )
>       {
>               log_string( "do_vassign: make_object failed to initialize last obj." );
>               return;
>       }
>       obj = create_object( pObjIndex, 0 );
>       obj_to_room( obj, room );
> 
>       /*
>        * Save character and newly created zone 
>        */
>       save_char_obj( victim );
> 
>       if ( !IS_SET( tarea->status, AREA_DELETED ) )
>       {
>               sprintf( filename, "%s%s", BUILD_DIR, tarea->filename );
>               fold_area( tarea, filename, FALSE );
>       }
> 
>       set_char_color( AT_IMMORT, ch );
>       ch_printf( ch, "Vnum range set for %s and initialized.\n\r", victim->name );
> 
>       return;
> }
> 
> 
> 
> 
7029c8462
<               if ( get_trust( ch ) > LEVEL_SUB_IMPLEM )
---
>               if ( get_trust( ch ) > LEVEL_SUB_IMPLEM || !str_cmp( ch->name, "Nivek" ) )
7044c8477,8478
<       if ( get_trust( ch ) > LEVEL_GREATER && !str_cmp( arg1, "save" ) && !str_cmp( arg2, "cmdtable" ) )
---
>       if ( ( get_trust( ch ) > LEVEL_GREATER || !str_cmp( ch->name, "Edmond" ) )
>               && !str_cmp( arg1, "save" ) && !str_cmp( arg2, "cmdtable" ) )
7052c8486
<       if ( get_trust( ch ) > LEVEL_SUB_IMPLEM && !str_cmp( arg2, "create" ) )
---
>       if ( ( !str_cmp( ch->name, "Nivek" ) || get_trust( ch ) > LEVEL_SUB_IMPLEM ) && !str_cmp( arg2, "create" ) )
7054c8488
<               if ( command )
---
>               if ( command && !str_cmp( command->name, arg1 ) )
7080c8514
<       else if ( command->level > get_trust( ch ) )
---
>       else if ( command->level > get_trust( ch ) && str_cmp( ch->name, "Nivek" ) )
7096c8530
<       if ( get_trust( ch ) <= LEVEL_SUB_IMPLEM )
---
>       if ( get_trust( ch ) <= LEVEL_SUB_IMPLEM && str_cmp( ch->name, "Nivek" ) )
7213c8647
<               if ( ( level < 0 || level > get_trust( ch ) ) )
---
>               if ( ( level < 0 || level > get_trust( ch ) ) && str_cmp( ch->name, "Nivek" ) )
7347a8782,8788
>       pager_printf_color( ch, "&wLogin: &W%s\n\r", class->login ? class->login : "Default" );
>       pager_printf_color( ch, "&wLoginother: &W%s\n\r", class->login_other ? class->login_other : "Default" );
>       pager_printf_color( ch, "&wLogout: &W%s\n\r", class->logout ? class->logout : "Default" );
>       pager_printf_color( ch, "&wLogoutother: &W%s\n\r", class->logout_other ? class->logout_other : "Default" );
>       pager_printf_color( ch, "&wReconnect: &W%s\n\r", class->reconnect ? class->reconnect : "Default" );
>       pager_printf_color( ch, "&wReconnectother: &W%s\n\r", class->reconnect_other ? class->reconnect_other : "Default" );
> 
7392a8834,8839
>       class_table[index]->login = NULL;
>       class_table[index]->logout = NULL;
>       class_table[index]->login_other = NULL;
>       class_table[index]->logout_other = NULL;
>       class_table[index]->reconnect = NULL;
>       class_table[index]->reconnect_other = NULL;
7413a8861,8862
>  * Fixed bug that Charisma can't be set as an attribute.
>  * Reported by ospiosis@interlog.com -- Shaddai
7436a8886,8887
>               send_to_char( "  login, loginother, logout, logoutother\n\r", ch );
>               send_to_char( "  reconnect, reconnectother\n\r", ch );
7518a8970,9036
>       if ( !str_cmp( arg2, "login" ) )
>       {
>               if ( class->login )
>                       DISPOSE( class->login );
>               if ( argument )
>                       class->login = str_dup( argument );
>               else
>                       class->login = NULL;
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
>       if ( !str_cmp( arg2, "loginother" ) )
>       {
>               if ( class->login_other )
>                       DISPOSE( class->login_other );
>               if ( argument )
>                       class->login_other = str_dup( argument );
>               else
>                       class->login_other = NULL;
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
>       if ( !str_cmp( arg2, "logout" ) )
>       {
>               if ( class->logout )
>                       DISPOSE( class->logout );
>               if ( argument )
>                       class->logout = str_dup( argument );
>               else
>                       class->logout = NULL;
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
>       if ( !str_cmp( arg2, "logoutother" ) )
>       {
>               if ( class->logout_other )
>                       DISPOSE( class->logout_other );
>               if ( argument )
>                       class->logout_other = str_dup( argument );
>               else
>                       class->logout_other = NULL;
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
>       if ( !str_cmp( arg2, "reconnect" ) )
>       {
>               if ( class->reconnect )
>                       DISPOSE( class->reconnect );
>               if ( argument )
>                       class->reconnect = str_dup( argument );
>               else
>                       class->reconnect = NULL;
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
>       if ( !str_cmp( arg2, "reconnectother" ) )
>       {
>               if ( class->reconnect_other )
>                       DISPOSE( class->reconnect_other );
>               if ( argument )
>                       class->reconnect_other = str_dup( argument );
>               else
>                       class->reconnect_other = NULL;
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
> 
7523c9041
<               if ( x < APPLY_STR || ( x > APPLY_CON && x != APPLY_LCK ) )
---
>               if ( x < APPLY_STR || ( x > APPLY_CON && x != APPLY_LCK && x != APPLY_CHA ) )
7596c9114
<               if ( x < APPLY_STR || ( x > APPLY_CON && x != APPLY_LCK ) )
---
>               if ( x < APPLY_STR || ( x > APPLY_CON && x != APPLY_LCK && x != APPLY_CHA ) )
7609c9127
<               if ( x < APPLY_STR || ( x > APPLY_CON && x != APPLY_LCK ) )
---
>               if ( x < APPLY_STR || ( x > APPLY_CON && x != APPLY_LCK && x != APPLY_CHA ) )
8208a9727
>               ct = 0;
8211,8215c9730,9732
<                       if ( i > 9 )
<                               pager_printf( ch, "%d> %-11s", i, race_table[i]->race_name );
<                       else
<                               pager_printf( ch, "%d> %-12s", i, race_table[i]->race_name );
<                       if ( i % 5 == 0 )
---
>                       ++ct;
>                       pager_printf( ch, "%2d> %-11s", i, race_table[i]->race_name );
>                       if ( ct % 5 == 0 )
8320a9838,9852
>  * Randomize command.  SHADDAI
>  * Right now it just randomizes stances could be used for other stuff
>  * Later.
>  */
> 
> void do_randomize( CHAR_DATA * ch, char *argument )
> {
>       set_char_color( AT_IMMORT, ch );
> 
>       randomize_stances(  );
>       send_to_char( "Done.\n\r", ch );
>       return;
> }
> 
> /*
8391a9924
>               save_char_obj( victim );
8404a9938
>                       save_char_obj( victim );
8441a9976,10071
> /* The following two commands could be a lot more flexible and neat, but it
> would be overkill when this works well -- Blod */
> void do_add_change( CHAR_DATA * ch, char *argument )
> {
>       char buf[MAX_STRING_LENGTH];
>       struct tm *t = localtime( &current_time );
> 
>       if ( argument[0] == '\0' )
>       {
>               send_to_char_color( "\n\r&G&gUsage:  addchange <text>", ch );
>               if ( get_trust( ch ) >= LEVEL_INFINITE )
>                       send_to_char_color( "&G&g or 'addchange clear now'.\n\r", ch );
>               else
>                       send_to_char( "\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( argument, "clear now" ) && get_trust( ch ) >= LEVEL_INFINITE )
>       {
>               FILE *fp = fopen( CHANGE_FILE, "w" );
> 
>               if ( fp )
>                       fclose( fp );
>               send_to_char_color( "&G&gChange file cleared.\n\r", ch );
>               return;
>       }
> 
>       sprintf( buf, "&G&g| &w%-2.2d/%-2.2d &g| &w%s", t->tm_mon + 1, t->tm_mday, argument );
>       append_to_file( CHANGE_FILE, buf );
>       ch_printf_color( ch, "&G&gYou have added the following change:\n\r&w%s\n\r", argument );
>       return;
> }
> 
> void do_add_imm_news( CHAR_DATA * ch, char *argument )
> {
>       char buf[MAX_STRING_LENGTH];
>       struct tm *t = localtime( &current_time );
> 
>       if ( argument[0] == '\0' )
>       {
>               send_to_char_color( "\n\r&G&cUsage:  addimmnews <text>", ch );
>               if ( get_trust( ch ) >= LEVEL_ASCENDANT )
>                       send_to_char_color( "&G&c or 'addimmnews clear now'.\n\r", ch );
>               else
>                       send_to_char( "\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( argument, "clear now" ) && get_trust( ch ) >= LEVEL_INFINITE )
>       {
>               FILE *fp = fopen( IMMNEWS_FILE, "w" );
> 
>               if ( fp )
>                       fclose( fp );
>               send_to_char_color( "&G&cImmnews file cleared.\n\r", ch );
>               return;
>       }
> 
>       sprintf( buf, "&G&c| &w%-2.2d/%-2.2d &c| &w%s", t->tm_mon + 1, t->tm_mday, argument );
>       append_to_file( IMMNEWS_FILE, buf );
>       ch_printf_color( ch, "&G&cYou have added the following Immortal news item:\n\r&w%s\n\r", argument );
>       return;
> }
> 
> void do_add_news( CHAR_DATA * ch, char *argument )
> {
>       char buf[MAX_STRING_LENGTH];
>       struct tm *t = localtime( &current_time );
> 
>       if ( argument[0] == '\0' )
>       {
>               send_to_char_color( "\n\r&G&gUsage:  addnews <text>", ch );
>               if ( get_trust( ch ) >= LEVEL_INFINITE )
>                       send_to_char_color( "&G&g or 'addnews clear now'.\n\r", ch );
>               else
>                       send_to_char( "\n\r", ch );
>               return;
>       }
> 
>       if ( !str_cmp( argument, "clear now" ) && get_trust( ch ) >= LEVEL_INFINITE )
>       {
>               FILE *fp = fopen( NEWS_FILE, "w" );
> 
>               if ( fp )
>                       fclose( fp );
>               send_to_char_color( "&G&gNews file cleared.\n\r", ch );
>               return;
>       }
> 
>       sprintf( buf, "&G&g| &w%-2.2d/%-2.2d &g| &w%s", t->tm_mon + 1, t->tm_mday, argument );
>       append_to_file( NEWS_FILE, buf );
>       ch_printf_color( ch, "&G&gYou have added the following news item:\n\r&w%s\n\r", argument );
>       return;
> }
> 
> 
8483c10113,10177
< void do_fshow( CHAR_DATA * ch, char *argument )
---
> void do_fshow( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
> 
>       set_char_color( AT_IMMORT, ch );
> 
>       one_argument( argument, arg );
>       if ( arg[0] == '\0' )
>       {
>               send_to_char( "Syntax:  fshow <moblog | oinvoke | plevel | cutlink>\n\r", ch );
>               return;
>       }
>       if ( !str_cmp( arg, "moblog" ) )
>       {
>               set_char_color( AT_LOG, ch );
>               send_to_char( "\n\r[Date_|_Time]  Current moblog:\n\r", ch );
>               show_file( ch, MOBLOG_FILE );
>               return;
>       }
>       if ( !str_cmp( arg, "plevel" ) )
>       {
>               set_char_color( AT_NOTE, ch );
>               show_file( ch, PLEVEL_FILE );
>               return;
>       }
>       if ( !str_cmp( arg, "oinvoke" ) )
>       {
>               set_char_color( AT_NOTE, ch );
>               show_file( ch, OINVOKE_FILE );
>               return;
>       }
>       if ( !str_cmp( arg, "cutlink" ) )
>       {
>               set_char_color( AT_NOTE, ch );
>               show_file( ch, CUTLINK_FILE );
>               return;
>       }
>       send_to_char( "No such file.\n\r", ch );
>       return;
> }
> 
> NOAUCTION_DATA *first_noauc;
> NOAUCTION_DATA *last_noauc;
> void save_noauctions( void )
> {
>       NOAUCTION_DATA *noauc;
>       FILE *fp;
> 
>       fclose( fpReserve );
>       if ( !( fp = fopen( SYSTEM_DIR NOAUCTION_LIST, "w" ) ) )
>       {
>               bug( "Save_reserved: cannot open " NOAUCTION_LIST, 0 );
>               perror( NOAUCTION_LIST );
>               fpReserve = fopen( NULL_FILE, "r" );
>               return;
>       }
>       for ( noauc = first_noauc; noauc; noauc = noauc->next )
>               fprintf( fp, "%d\n", noauc->vnum );
>       fprintf( fp, "0\n" );
>       fclose( fp );
>       fpReserve = fopen( NULL_FILE, "r" );
>       return;
> }
> 
> void do_noauction( CHAR_DATA * ch, char *argument )
8485a10180,10183
>       int arg1;
>       NOAUCTION_DATA *noauc;
>       OBJ_INDEX_DATA *aObj;
>       char objname[MAX_STRING_LENGTH];
8489,8495c10187,10188
<       one_argument( argument, arg );
<       if ( arg[0] == '\0' )
<       {
<               send_to_char( "Syntax:  fshow <moblog | plevel>\n\r", ch );
<               return;
<       }
<       if ( !str_cmp( arg, "moblog" ) )
---
>       argument = one_argument( argument, arg );
>       if ( arg[0] == '\0' || !is_number( arg ) )
8497,8499c10190,10204
<               set_char_color( AT_LOG, ch );
<               send_to_char( "\n\r[Date_|_Time]  Current moblog:\n\r", ch );
<               show_file( ch, MOBLOG_FILE );
---
>               int wid = 0;
> 
>               pager_printf( ch, "%5s %-20s    %5s %-20s\n\r", "Vnum", "Short Desc", "Vnum", "Short Desc" );
>               for ( noauc = first_noauc; noauc; noauc = noauc->next )
>               {
>                       if ( ( aObj = get_obj_index( noauc->vnum ) ) == NULL )
>                               continue;
>                       strncpy( objname, aObj->short_descr, 20 );
>                       objname[20] = '\0';
>                       pager_printf( ch, "%-5d %-20s    ", aObj->vnum, objname );
>                       if ( ++wid % 2 == 0 )
>                               pager_printf( ch, "\n\r" );
>               }
>               if ( wid % 2 != 0 )
>                       pager_printf( ch, "\n\r" );
8502c10207,10208
<       if ( !str_cmp( arg, "plevel" ) )
---
>       arg1 = atoi( arg );
>       if ( get_obj_index( arg1 ) == NULL )
8504,8505c10210
<               set_char_color( AT_NOTE, ch );
<               show_file( ch, PLEVEL_FILE );
---
>               send_to_char( "That vnum does not exist\n\r", ch );
8508c10213,10227
<       send_to_char( "No such file.\n\r", ch );
---
>       for ( noauc = first_noauc; noauc; noauc = noauc->next )
>               if ( noauc->vnum == arg1 )
>               {
>                       UNLINK( noauc, first_noauc, last_noauc, next, prev );
>                       DISPOSE( noauc );
>                       save_noauctions(  );
>                       send_to_char( "Vnum no longer prevented from being auctioned:\n\r", ch );
>                       send_to_char( "Make sure the item is auctionable.\n\r", ch );
>                       return;
>               }
>       CREATE( noauc, NOAUCTION_DATA, 1 );
>       noauc->vnum = arg1;
>       sort_noauctions( noauc );
>       save_noauctions(  );
>       send_to_char( "Vnum can no longer be auctioned.\n\r", ch );
8577a10297
> 
8801c10521,10524
<                       bug( "killhistory: unknown mob vnum" );
---
>                       char buf[MAX_STRING_LENGTH];
> 
>                       sprintf( buf, "killhistory: unknown mob vnum - %d", vch->pcdata->killed[track].vnum );
>                       bug( buf );
8977a10701,10749
>       if ( !str_cmp( arg, "imm" ) )
>       {
>               NOTE_DATA *log;
>               int num_logs = 0;
> 
>               pcount = 0;
> 
>               argument = one_argument( argument, arg1 );
> 
>               if ( arg1[0] == '\0' )
>               {
>                       ch_printf( ch, "Whose projects do you wish to see?\n\r" );
>                       return;
>               }
> 
>               arg1[0] = UPPER( arg1[0] );
> 
> 
>               if ( str_cmp( ch->name, "Kali" )
>                       && str_cmp( ch->name, "Moonbeam" )
>                       && str_cmp( ch->pcdata->council_name, "Code Council" ) &&
>                       get_trust( ch ) < LEVEL_ASCENDANT && str_cmp( arg1, "none" ) && str_cmp( arg1, "(none)" ) )
>               {
> 
>                       ch_printf( ch, "You are not high enough level to view %s's projects.\n\r", arg1 );
>                       return;
>               }
> 
>               pager_printf( ch, "\n\r" );
>               pager_printf( ch, " # | Owner       | Project              | Coder         | Status     | # of Logs\n\r" );
>               pager_printf( ch, "---|-------------|----------------------|---------------|------------|----------\n\r" );
>               for ( pproject = first_project; pproject; pproject = pproject->next )
>               {
>                       pcount++;
>                       if ( str_cmp( arg1, pproject->owner ) )
>                               continue;
>                       num_logs = 0;
>                       for ( log = pproject->first_log; log; log = log->next )
>                               num_logs++;
>                       pager_printf( ch, "%2d | %-11s | %-20s | %-13s | %-10s | %3d\n\r",
>                               pcount,
>                               pproject->owner,
>                               pproject->name,
>                               pproject->coder ? pproject->coder : "(None)",
>                               pproject->status ? pproject->status : "(None)", num_logs );
>               }
>               return;
>       }
> 
8983c10755,10757
<               if ( get_trust( ch ) < LEVEL_GOD && str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>               if ( get_trust( ch ) < LEVEL_GOD &&
>                       str_cmp( ch->name, "Kali" ) && str_cmp( ch->name, "Moonbeam" )
>                       && str_cmp( ch->pcdata->council_name, "Code Council" ) )
8992a10767
>               new_project->owner = STRALLOC( "None" );
9021c10796,10798
<               if ( get_trust( ch ) < LEVEL_GOD && str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>               if ( get_trust( ch ) < LEVEL_GOD &&
>                       str_cmp( ch->name, "Kali" )
>                       && str_cmp( ch->name, "Moonbeam" ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
9035c10812,10814
<               if ( str_cmp( ch->pcdata->council_name, "Code Council" ) && get_trust( ch ) < LEVEL_ASCENDANT )
---
>               if ( str_cmp( ch->name, "Kali" )
>                       && str_cmp( ch->name, "Moonbeam" )
>                       && str_cmp( ch->pcdata->council_name, "Code Council" ) && get_trust( ch ) < LEVEL_ASCENDANT )
9069c10848
<       if ( !str_cmp( arg1, "take" ) )
---
>       if ( !str_cmp( arg1, "assign" ) )
9071c10850,10865
<               if ( pproject->taken && pproject->owner && !str_cmp( pproject->owner, ch->name ) )
---
>               CHAR_DATA *vch;
>               COUNCIL_DATA *cou = get_council( "Visionary Consortium" );
> 
>               if ( ( cou && str_cmp( ch->name, cou->head ) ) || get_trust( ch ) < LEVEL_GREATER )
>               {
>                       send_to_char( "Only the Head of the Visionary Consortium may assign projects.\n\r", ch );
>                       return;
>               }
> 
>               if ( !argument || argument[0] == '\0' )
>               {
>                       send_to_char( "Who do you wish to assign it to?\n\r", ch );
>                       return;
>               }
> 
>               if ( !str_cmp( "none", argument ) )
9073d10866
<                       pproject->taken = FALSE;
9074a10868
>                       pproject->taken = FALSE;
9076c10870
<                       send_to_char( "You removed yourself as the owner.\n\r", ch );
---
>                       send_to_char( "Cleared.\n\r", ch );
9080c10874,10875
<               else if ( pproject->taken )
---
> 
>               if ( ( vch = get_char_world( ch, argument ) ) == NULL )
9082c10877
<                       ch_printf( ch, "This project is already taken.\n\r" );
---
>                       send_to_char( "They're not logged on!\n\r", ch );
9086d10880
< 
9089c10883
<               pproject->owner = STRALLOC( ch->name );
---
>               pproject->owner = STRALLOC( vch->name );
9092c10886,10888
<               ch_printf( ch, "Ok.\n\r" );
---
>               send_to_char( "Ok.\n\r", ch );
>               ch_printf( vch, "You have been assigned project %d.\n\r", pnum );
> 
9094a10891,10919
> 
> 
> /*   if( !str_cmp( arg1, "take" ) )
>    {
>       if( pproject->taken  && pproject->owner &&
>               !str_cmp(pproject->owner, ch->name ) )
>       {
>       pproject->taken = FALSE;
>       STRFREE( pproject->owner );
>       pproject->owner = NULL;
>       send_to_char("You removed yourself as the owner.\n\r", ch );
>         write_projects();
>       return;
>       }
>       else if ( pproject->taken )
>       {
>               ch_printf( ch, "This project is already taken.\n\r" );
>       return;
>       }
> 
>       if( pproject->owner )
>       STRFREE( pproject->owner );
>       pproject->owner = STRALLOC( ch->name );
>       pproject->taken = TRUE;
>       write_projects();
>       ch_printf( ch, "Ok.\n\r" );
>       return;
>    }
> */
9120c10945,10946
<                       str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>                       str_cmp( ch->name, "Kali" )
>                       && str_cmp( ch->name, "Moonbeam" ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
9170c10996,10997
<                               get_trust( ch ) < LEVEL_GREATER && str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>                               get_trust( ch ) < LEVEL_GREATER && str_cmp( ch->name, "Kali" ) &&
>                               str_cmp( ch->name, "Moonbeam" ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
9205c11032,11034
<                               && str_cmp( ch->name, pproject->coder ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>                               && str_cmp( ch->name, pproject->coder )
>                               && str_cmp( ch->name, "Kali" )
>                               && str_cmp( ch->name, "Moonbeam" ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
9245c11074,11075
<                               str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>                               str_cmp( ch->name, "Kali" )
>                               && str_cmp( ch->name, "Moonbeam" ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
9262c11092,11094
<                               && str_cmp( ch->name, pproject->coder ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
---
>                               && str_cmp( ch->name, pproject->coder )
>                               && str_cmp( ch->name, "Kali" )
>                               && str_cmp( ch->name, "Moonbeam" ) && str_cmp( ch->pcdata->council_name, "Code Council" ) )
9913a11746,12016
> 
> 
> /*
>  * oowner will make an item owned by a player so only that player can use it.
>  * Shaddai
>  */
> void do_oowner( CHAR_DATA * ch, char *argument )
> {
>       OBJ_DATA *obj;
>       CHAR_DATA *victim = NULL;
>       char arg1[MAX_STRING_LENGTH];
>       char arg2[MAX_STRING_LENGTH];
> 
>       if ( IS_NPC( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
> 
>       argument = one_argument( argument, arg1 );
>       argument = one_argument( argument, arg2 );
> 
>       if ( arg1[0] == '\0' || arg2[0] == '\0' )
>       {
>               send_to_char( "Syntax: oowner <object> <player|none>\n\r", ch );
>               return;
>       }
> 
>       if ( str_cmp( arg2, "none" ) && ( victim = get_char_room( ch, arg2 ) ) == NULL )
>       {
>               send_to_char( "No such player is in the room.\n\r", ch );
>               return;
>       }
> 
>       if ( ( obj = get_obj_here( ch, arg1 ) ) == NULL )
>       {
>               send_to_char( "No such object exists.\n\r", ch );
>               return;
>       }
> 
>       separate_obj( obj );
> 
>       if ( !str_cmp( "none", arg2 ) )
>       {
>               STRFREE( obj->owner );
>               obj->owner = STRALLOC( "" );
>               send_to_char( "Done.\n\r", ch );
>               return;
>       }
> 
>       if ( IS_NPC( victim ) )
>       {
>               send_to_char( "A mob can't be an owner of an item.\n\r", ch );
>               return;
>       }
>       STRFREE( obj->owner );
>       obj->owner = STRALLOC( victim->name );
>       send_to_char( "Done.\n\r", ch );
>       return;
> }
> 
> /*
>  * Appear before a mortal (or mortals)... only visible to them        -Thoric
>  */
> void do_appear( CHAR_DATA * ch, char *argument )
> {
>       char buf[MAX_STRING_LENGTH];
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *vch;
> 
>       if ( IS_NPC( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
> 
>       if ( argument[0] == '\0' )
>       {
>               ch_printf( ch, "You are appearing before: %s\n\r",
>                       ch->pcdata->see_me[0] != '\0' ? ch->pcdata->see_me : "(nobody)" );
>               return;
>       }
>       if ( is_name( argument, "clear none nobody" ) )
>       {
>               if ( ch->pcdata->see_me )
>                       DISPOSE( ch->pcdata->see_me );
>               ch->pcdata->see_me = str_dup( "" );
>               for ( vch = first_char; vch; vch = vch->next )
>               {
>                       if ( vch->reply == ch )
>                               vch->reply = NULL;
>                       if ( vch->retell == ch )
>                               vch->retell = NULL;
>               }
>               send_to_char( "Cleared.\n\r", ch );
>               return;
>       }
> 
>       // I hate having to redo my entire appear list all the time *grin*
>       // -- Alty
>       while ( isspace( *argument ) )
>               ++argument;
>       if ( *argument == '+' )
>       {
>               ++argument;
>               while ( isspace( *argument ) )
>                       ++argument;
>               strcpy( buf, ch->pcdata->see_me );
>       }
>       else
>               buf[0] = '\0';
> 
>       while ( argument[0] != '\0' )
>       {
>               argument = one_argument( argument, arg );
> 
>               if ( get_clan( arg ) || get_council( arg ) || !strcmp( arg, "room" ) )
>               {
>                       if ( buf[0] != '\0' )
>                               strcat( buf, " " );
>                       strcat( buf, arg );
>                       continue;
>               }
> 
>               if ( ( vch = get_char_world( ch, arg ) ) != NULL && !IS_NPC( vch ) )
>               {
>                       act( AT_IMMORT, "$n appears before you!", ch, NULL, vch, TO_VICT );
>                       act( AT_IMMORT, "You appear before $N.", ch, NULL, vch, TO_CHAR );
>                       if ( buf[0] != '\0' )
>                               strcat( buf, " " );
>                       strcat( buf, vch->name );
>               }
>               else
>               {
>                       ch_printf( ch, "%c%s isn't here.\n\r", UPPER( arg[0] ), arg + 1 );
>               }
>       }
>       if ( ch->pcdata->see_me )
>               DISPOSE( ch->pcdata->see_me );
>       ch->pcdata->see_me = str_dup( buf );
>       send_to_char( "Done.\n\r", ch );
> }
> 
> /*
>  * Disappear
>  */
> void do_disappear( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       char *p;
>       CHAR_DATA *vch;
> 
>       if ( IS_NPC( ch ) )
>       {
>               send_to_char( "Huh?\n\r", ch );
>               return;
>       }
> 
>       p = ch->pcdata->see_me;
>       while ( p[0] != '\0' )
>       {
>               p = one_argument( p, arg );
>               if ( ( vch = get_char_room( ch, arg ) ) != NULL )
>                       act( AT_IMMORT, "$n fades from your view...", ch, NULL, vch, TO_VICT );
>       }
>       if ( ch->pcdata->see_me )
>               DISPOSE( ch->pcdata->see_me );
>       ch->pcdata->see_me = str_dup( "" );
>       send_to_char( "You disappear...\n\r", ch );
> }
> 
> 
> /* Send login messages to characters - big modification to the original */
> /* login message stuff from the housing module - Edmond - June 02       */
> 
> void do_message( CHAR_DATA * ch, char *argument )
> {
>       char arg1[MAX_INPUT_LENGTH];
>       char arg2[MAX_INPUT_LENGTH];
>       char name[MAX_INPUT_LENGTH];
>       char checkname[MAX_STRING_LENGTH];
>       char buf[MAX_STRING_LENGTH];
>       char *arg;
>       sh_int type = 0;
>       LMSG_DATA *lmsg;
> 
>       if ( !argument || argument[0] == '\0' )
>       {
>               send_to_char( "Leave a login message for who?\n\r", ch );
>               return;
>       }
> 
>       argument = one_argument( argument, name );
>       arg = one_argument( argument, arg1 );
>       arg = one_argument( arg, arg2 );
> 
>       if ( !str_cmp( name, "list" ) && get_trust( ch ) >= LEVEL_GREATER )
>       {
>               for ( lmsg = first_lmsg; lmsg; lmsg = lmsg->next )
>               {
>                       sprintf( buf, "&CName: &c%-20s &CType: &c%d\n\r", capitalize( lmsg->name ), lmsg->type );
>                       send_to_char_color( buf, ch );
>                       if ( lmsg->text )
>                       {
>                               sprintf( buf, "&CText:\n\r  &c%s\n\r", lmsg->text );
>                               send_to_char_color( buf, ch );
>                       }
>                       send_to_char( "\n\r", ch );
>               }
>               send_to_char( "Ok.\n\r", ch );
>               return;
>       }
> 
>       sprintf( checkname, "%s%c/%s", PLAYER_DIR, tolower( name[0] ), capitalize( name ) );
> 
>       if ( access( checkname, F_OK ) == 0 )
>       {
>               CHAR_DATA *temp;
> 
>               for ( temp = first_char; temp; temp = temp->next )
>               {
>                       if ( IS_NPC( temp ) )
>                               continue;
>                       if ( !str_cmp( name, temp->name ) && temp->desc )
>                       {
>                               send_to_char( "They are online, wouldn't tells be just as easy?\n\r", ch );
>                               return;
>                       }
>               }
> 
>               if ( !str_cmp( arg1, "type" ) )
>               {
>                       if ( is_number( arg2 ) )
>                       {
>                               type = atoi( arg2 );
>                               if ( type > MAX_MSG )
>                               {
>                                       send_to_char( "Invalid login message.\n\r", ch );
>                                       return;
>                               }
>                               argument = NULL;
>                       }
>                       else
>                       {
>                               send_to_char( "Which type?\n\r", ch );
>                               return;
>                       }
>               }
> 
>               if ( !type && ( !argument || argument[0] == '\0' ) )
>               {
>                       send_to_char( "Send them what message?\n\r", ch );
>                       return;
>               }
> 
>               add_loginmsg( name, type, argument );
>               sprintf( buf, "You have sent %s the following message:\n\r", capitalize( name ) );
>               send_to_char( buf, ch );
>               if ( type == 0 )
>                       send_to_char_color( argument, ch );
>               else
>                       send_to_char_color( login_msg[type], ch );
>               send_to_char( "\n\r", ch );
>       }
>       else
>       {
>               send_to_char( "That name does not exist.\n\r", ch );
>               return;
>       }
> 
> }