diff -u -p stock/Makefile src/Makefile
--- stock/Makefile Tue Dec 26 23:17:54 1995
+++ src/Makefile Sun May 11 19:26:12 1997
@@ -10,11 +10,12 @@ C_FLAGS = $(O_FLAGS) -Wall $(DEBUG) $(PR
L_FLAGS = $(O_FLAGS) $(PROF)
O_FILES = act_comm.o act_info.o act_move.o act_obj.o act_wiz.o comm.o const.o \
- db.o fight.o handler.o interp.o magic.o save.o special.o update.o
+ db.o fight.o handler.o interp.o magic.o save.o special.o update.o \
+ bit.o mem.o olc.o olc_act.o olc_save.o string.o
-envy: $(O_FILES)
- rm -f envy
- $(CC) $(L_FLAGS) -o envy $(O_FILES)
+envy2: $(O_FILES)
+ rm -f envy2
+ $(CC) $(L_FLAGS) -o envy2 $(O_FILES)
.c.o: merc.h
$(CC) -c $(C_FLAGS) $<
diff -u -p stock/act_comm.c src/act_comm.c
--- stock/act_comm.c Tue Dec 26 23:17:54 1995
+++ src/act_comm.c Wed May 28 15:31:16 1997
@@ -515,7 +515,8 @@ void talk_channel( CHAR_DATA *ch, char *
}
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
@@ -551,7 +552,8 @@ void talk_channel( CHAR_DATA *ch, char *
if ( d->connected == CON_PLAYING
&& vch != ch
&& !IS_SET( och->deaf, channel )
- && !IS_SET( och->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ && !IS_SET( och->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ && !IS_SET( och->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
if ( channel == CHANNEL_IMMTALK && !IS_HERO( och ) )
continue;
@@ -656,7 +658,8 @@ void do_say( CHAR_DATA *ch, char *argume
}
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
@@ -676,7 +679,8 @@ void do_tell( CHAR_DATA *ch, char *argum
int position;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
@@ -697,7 +701,8 @@ void do_tell( CHAR_DATA *ch, char *argum
if ( ( !IS_NPC( ch ) && ( IS_SET( ch->act, PLR_SILENCE )
|| IS_SET( ch->act, PLR_NO_TELL ) ) )
- || IS_SET( victim->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "Your message didn't get through.\n\r", ch );
return;
@@ -738,7 +743,8 @@ void do_reply( CHAR_DATA *ch, char *argu
int position;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
@@ -752,7 +758,8 @@ void do_reply( CHAR_DATA *ch, char *argu
if ( ( !IS_NPC( ch ) && ( IS_SET( ch->act, PLR_SILENCE )
|| IS_SET( ch->act, PLR_NO_TELL ) ) )
- || IS_SET( victim->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "Your message didn't get through.\n\r", ch );
return;
@@ -1615,7 +1622,8 @@ void do_gtell( CHAR_DATA *ch, char *argu
}
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
@@ -1635,6 +1643,7 @@ void do_gtell( CHAR_DATA *ch, char *argu
{
if ( is_same_group( gch, ch )
&& !IS_SET( gch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ && !IS_SET( gch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE )
&& !IS_AFFECTED( gch, AFF_MUTE ) )
send_to_char( buf, gch );
}
diff -u -p stock/act_info.c src/act_info.c
--- stock/act_info.c Tue Dec 26 23:17:54 1995
+++ src/act_info.c Wed May 28 15:32:39 1997
@@ -490,7 +490,8 @@ void do_look( CHAR_DATA *ch, char *argum
|| ( !IS_NPC( ch ) && !IS_SET( ch->act, PLR_BRIEF ) ) )
send_to_char( ch->in_room->description, ch );
- if ( IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ if ( IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
send_to_char( "It seems eerily quiet.\n\r", ch );
show_list_to_char( ch->in_room->contents, ch, FALSE, FALSE );
diff -u -p stock/act_move.c src/act_move.c
--- stock/act_move.c Tue Dec 26 23:17:54 1995
+++ src/act_move.c Wed May 28 15:33:02 1997
@@ -1666,7 +1666,8 @@ void do_bet( CHAR_DATA *ch, char *argume
CHAR_DATA *croupier;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
diff -u -p stock/act_obj.c src/act_obj.c
--- stock/act_obj.c Tue Dec 26 23:17:54 1995
+++ src/act_obj.c Wed May 28 15:33:24 1997
@@ -1507,7 +1507,8 @@ void do_recite( CHAR_DATA *ch, char *arg
}
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
send_to_char( "You can't seem to break the silence.\n\r", ch );
return;
diff -u -p stock/act_wiz.c src/act_wiz.c
--- stock/act_wiz.c Tue Dec 26 23:17:54 1995
+++ src/act_wiz.c Wed May 28 15:11:21 1997
@@ -896,6 +896,12 @@ void do_mstat( CHAR_DATA *ch, char *argu
affect_bit_name( victim->affected_by ) );
strcat( buf1, buf );
+ if ( !IS_NPC( victim ) ) /* OLC */
+ {
+ sprintf( buf, "Security: %d.\n\r", victim->pcdata->security );
+ strcat( buf1, buf );
+ }
+
sprintf( buf, "Short description: %s.\n\rLong description: %s",
victim->short_descr,
victim->long_descr[0] != '\0' ? victim->long_descr
@@ -2341,7 +2347,7 @@ void do_mset( CHAR_DATA *ch, char *argum
send_to_char( "Field being one of:\n\r", ch );
send_to_char( " str int wis dex con class sex race level\n\r", ch );
send_to_char( " gold hp mana move practice align\n\r", ch );
- send_to_char( " thirst drunk full", ch );
+ send_to_char( " thirst drunk full security", ch );
send_to_char( "\n\r", ch );
send_to_char( "String being one of:\n\r", ch );
send_to_char( " name short long title spec\n\r", ch );
@@ -2787,6 +2793,32 @@ void do_mset( CHAR_DATA *ch, char *argum
}
return;
+ }
+
+ if ( !str_cmp( arg2, "security" ) ) /* OLC */
+ {
+ if ( IS_NPC( victim ) )
+ {
+ send_to_char( "Not on NPC's.\n\r", ch );
+ return;
+ }
+
+ if ( value > ch->pcdata->security || value < 0 )
+ {
+ if ( ch->pcdata->security != 0 )
+ {
+ sprintf( buf, "Valid security is 0-%d.\n\r",
+ ch->pcdata->security );
+ send_to_char( buf, ch );
+ }
+ else
+ {
+ send_to_char( "Valid security is 0 only.\n\r", ch );
+ }
+ return;
+ }
+ victim->pcdata->security = value;
+ return;
}
/*
Only in src: bit.c
diff -u -p stock/comm.c src/comm.c
--- stock/comm.c Sat Apr 12 20:37:04 1997
+++ src/comm.c Wed May 28 15:10:56 1997
@@ -512,6 +512,9 @@ void game_loop_mac_msdos( void )
dcon.outbuf = alloc_mem( dcon.outsize );
dcon.showstr_head = str_dup( "" );
dcon.showstr_point = 0;
+ dcon.pEdit = NULL; /* OLC */
+ dcon.pString = NULL; /* OLC */
+ dcon.editor = 0; /* OLC */
dcon.next = descriptor_list;
descriptor_list = &dcon;
@@ -567,16 +570,23 @@ void game_loop_mac_msdos( void )
d->fcommand = TRUE;
stop_idling( d->character );
- if ( d->connected == CON_PLAYING )
- if ( d->showstr_point )
- show_string( d, d->incomm );
- else
- interpret( d->character, d->incomm );
- else
- nanny( d, d->incomm );
+ /* OLC */
+ if ( d->connected == CON_PLAYING )
+ {
+ if ( d->showstr_point )
+ show_string( d, d->incomm );
+ else
+ if ( d->pString )
+ string_add( d->character, d->incomm );
+ else
+ if ( !run_olc_editor( d ) )
+ interpret( d->character, d->incomm );
+ }
+ else
+ nanny( d, d->incomm );
- d->incomm[0] = '\0';
- }
+ d->incomm[0] = '\0';
+ }
}
@@ -756,15 +766,22 @@ void game_loop_unix( int control )
d->fcommand = TRUE;
stop_idling( d->character );
- if ( d->connected == CON_PLAYING )
- if ( d->showstr_point )
- show_string( d, d->incomm );
- else
- interpret( d->character, d->incomm );
- else
- nanny( d, d->incomm );
+ /* OLC */
+ if ( d->connected == CON_PLAYING )
+ {
+ if ( d->showstr_point )
+ show_string( d, d->incomm );
+ else
+ if ( d->pString )
+ string_add( d->character, d->incomm );
+ else
+ if ( !run_olc_editor( d ) )
+ interpret( d->character, d->incomm );
+ }
+ else
+ nanny( d, d->incomm );
- d->incomm[0] = '\0';
+ d->incomm[0] = '\0';
}
}
@@ -904,6 +921,9 @@ void new_descriptor( int control )
dnew->connected = CON_GET_NAME;
dnew->showstr_head = str_dup( "" );
dnew->showstr_point = 0;
+ dnew->pEdit = NULL; /* OLC */
+ dnew->pString = NULL; /* OLC */
+ dnew->editor = 0; /* OLC */
dnew->outsize = 2000;
dnew->outbuf = alloc_mem( dnew->outsize );
@@ -1239,7 +1259,9 @@ bool process_output( DESCRIPTOR_DATA *d,
write_to_buffer( d,
"[Please type (c)ontinue, (r)efresh, (b)ack, (q)uit, or RETURN]: ", 0 );
}
- else
+ if ( d->pString != NULL ) /* OLC */
+ write_to_buffer( d, "> ", 2 );
+ else
{
CHAR_DATA *ch;
@@ -1321,6 +1343,12 @@ void bust_a_prompt( DESCRIPTOR_DATA *d )
{
default :
i = " "; break;
+ case 'c' : /* OLC */
+ i = olc_ed_name( d->character );
+ break;
+ case 'C' : /* OLC */
+ i = olc_ed_vnum( d->character );
+ break;
case 'h' :
sprintf( buf2, "%d", ch->hit );
i = buf2; break;
@@ -1959,7 +1987,7 @@ bool check_parse_name( char *name )
/*
* Reserved words.
*/
- if ( is_name( name, "all auto imm immortal self someone" ) )
+ if ( is_name( name, "all auto imm immortal self someone none" ) )
return FALSE;
/*
Only in src: core
diff -u -p stock/db.c src/db.c
--- stock/db.c Tue Dec 26 23:17:55 1995
+++ src/db.c Sun May 11 19:14:48 1997
@@ -151,6 +151,10 @@ int top_obj_index;
int top_reset;
int top_room;
int top_shop;
+int top_vnum_room; /* OLC */
+int top_vnum_mob; /* OLC */
+int top_vnum_obj; /* OLC */
+
/*
* Memory management.
@@ -216,6 +220,12 @@ void fix_exits args( ( void ) );
void reset_area args( ( AREA_DATA * pArea ) );
+/*
+ * Non-Envy Loading procedures.
+ * Put any new loading function in this section.
+ */
+void new_load_area args( ( FILE *fp ) ); /* OLC */
+void new_load_rooms args( ( FILE *fp ) ); /* OLC 1.1b */
/*
@@ -354,6 +364,10 @@ void boot_db( void )
load_shops ( fpArea );
else if ( !str_cmp( word, "SPECIALS" ) )
load_specials( fpArea );
+ else if ( !str_cmp( word, "AREADATA" ) ) /* OLC */
+ new_load_area( fpArea );
+ else if ( !str_cmp( word, "ROOMDATA" ) ) /* OLC 1.1b */
+ new_load_rooms( fpArea );
else
{
bug( "Boot_db: bad section name.", 0 );
@@ -395,26 +409,151 @@ void load_area( FILE *fp )
{
AREA_DATA *pArea;
- pArea = alloc_perm( sizeof( *pArea ) );
- pArea->reset_first = NULL;
- pArea->reset_last = NULL;
- pArea->name = fread_string( fp );
+ pArea = alloc_perm( sizeof( *pArea ) ); /*
+ pArea->reset_first = NULL; * OLC-Removed
+ pArea->reset_last = NULL; */
+ pArea->name = fread_string( fp );
pArea->recall = ROOM_VNUM_TEMPLE;
- pArea->age = 15;
- pArea->nplayer = 0;
+ pArea->area_flags = AREA_LOADING; /* OLC */
+ pArea->security = 1; /* OLC */
+ pArea->builders = str_dup( "None" ); /* OLC */
+ pArea->lvnum = 0; /* OLC */
+ pArea->uvnum = 0; /* OLC */
+ pArea->vnum = top_area; /* OLC */
+ pArea->filename = str_dup( strArea ); /* OLC */
+ pArea->age = 15;
+ pArea->nplayer = 0;
if ( !area_first )
- area_first = pArea;
+ area_first = pArea;
if ( area_last )
- area_last->next = pArea;
- area_last = pArea;
- pArea->next = NULL;
+ {
+ area_last->next = pArea;
+ REMOVE_BIT(area_last->area_flags, AREA_LOADING); /* OLC */
+ }
+ area_last = pArea;
+ pArea->next = NULL;
top_area++;
return;
}
+/*
+ * OLC
+ * Use these macros to load any new area formats that you choose to
+ * support on your MUD. See the new_load_area format below for
+ * a short example.
+ */
+#if defined(KEY)
+#undef KEY
+#endif
+
+#define KEY( literal, field, value ) \
+ if ( !str_cmp( word, literal ) ) \
+ { \
+ field = value; \
+ fMatch = TRUE; \
+ break; \
+ }
+
+#define SKEY( string, field ) \
+ if ( !str_cmp( word, string ) ) \
+ { \
+ free_string( field ); \
+ field = fread_string( fp ); \
+ fMatch = TRUE; \
+ break; \
+ }
+
+/* OLC
+ * Snarf an 'area' header line. Check this format. MUCH better. Add fields
+ * too.
+ *
+ * #AREAFILE
+ * Name { All } Locke Newbie School~
+ * Repop A teacher pops in the room and says, 'Repop coming!'~
+ * Recall 3001
+ * End
+ */
+void new_load_area( FILE *fp )
+{
+ AREA_DATA *pArea;
+ char *word;
+ bool fMatch;
+
+ pArea = alloc_perm( sizeof(*pArea) );
+ pArea->age = 15;
+ pArea->nplayer = 0;
+ pArea->filename = str_dup( strArea );
+ pArea->vnum = top_area;
+ pArea->name = str_dup( "New Area" );
+ pArea->builders = str_dup( "" );
+ pArea->security = 1;
+ pArea->lvnum = 0;
+ pArea->area_flags = 0;
+ pArea->recall = ROOM_VNUM_TEMPLE;
+
+ for ( ; ; )
+ {
+ word = feof( fp ) ? "End" : fread_word( fp );
+ fMatch = FALSE;
+
+ switch ( UPPER(word[0]) )
+ {
+ case 'N':
+ SKEY( "Name", pArea->name );
+ break;
+ case 'S':
+ KEY( "Security", pArea->security, fread_number( fp ) );
+ break;
+ case 'V':
+ if ( !str_cmp( word, "VNUMs" ) )
+ {
+ pArea->lvnum = fread_number( fp );
+ pArea->uvnum = fread_number( fp );
+ }
+ break;
+ case 'E':
+ if ( !str_cmp( word, "End" ) )
+ {
+ fMatch = TRUE;
+ if ( area_first == NULL )
+ area_first = pArea;
+ if ( area_last != NULL )
+ area_last->next = pArea;
+ area_last = pArea;
+ pArea->next = NULL;
+ top_area++;
+ return;
+ }
+ break;
+ case 'B':
+ SKEY( "Builders", pArea->builders );
+ break;
+ case 'R':
+ KEY( "Recall", pArea->recall, fread_number( fp ) );
+ break;
+ }
+ }
+}
+
+
+/*
+ * Sets vnum range for area using OLC protection features.
+ */
+void assign_area_vnum( int vnum )
+{
+ if ( area_last->lvnum == 0 || area_last->uvnum == 0 )
+ area_last->lvnum = area_last->uvnum = vnum;
+ if ( vnum != URANGE( area_last->lvnum, vnum, area_last->uvnum ) )
+ if ( vnum < area_last->lvnum )
+ area_last->lvnum = vnum;
+ else
+ area_last->uvnum = vnum;
+ return;
+}
+
/*
* Snarf a help section.
@@ -485,6 +624,12 @@ void load_mobiles( FILE *fp )
{
MOB_INDEX_DATA *pMobIndex;
+ if ( !area_last ) /* OLC */
+ {
+ bug( "Load_mobiles: no #AREA seen yet.", 0 );
+ exit( 1 );
+ }
+
for ( ; ; )
{
char *race;
@@ -513,6 +658,7 @@ void load_mobiles( FILE *fp )
pMobIndex = alloc_perm( sizeof( *pMobIndex ) );
pMobIndex->vnum = vnum;
+ pMobIndex->area = area_last; /* OLC */
pMobIndex->player_name = fread_string( fp );
pMobIndex->short_descr = fread_string( fp );
pMobIndex->long_descr = fread_string( fp );
@@ -526,7 +672,9 @@ void load_mobiles( FILE *fp )
pMobIndex->pShop = NULL;
pMobIndex->alignment = fread_number( fp );
letter = fread_letter( fp );
- pMobIndex->level = number_fuzzy( fread_number( fp ) );
+ pMobIndex->level = fread_number( fp );
+ /* Took number_fuzzy out of above line to store mob levels
+ at a constant due to OLC resaving areas --Stoked */
/*
* The unused stuff is for imps who want to use the old-style
@@ -567,6 +715,8 @@ void load_mobiles( FILE *fp )
pMobIndex->next = mob_index_hash[iHash];
mob_index_hash[iHash] = pMobIndex;
top_mob_index++;
+ top_vnum_mob = top_vnum_mob < vnum ? vnum : top_vnum_mob; /* OLC */
+ assign_area_vnum( vnum ); /* OLC */
kill_table[URANGE( 0, pMobIndex->level, MAX_LEVEL-1 )].number++;
}
@@ -582,6 +732,12 @@ void load_objects( FILE *fp )
{
OBJ_INDEX_DATA *pObjIndex;
+ if ( !area_last ) /* OLC */
+ {
+ bug( "Load_objects: no #AREA seen yet.", 0 );
+ exit( 1 );
+ }
+
for ( ; ; )
{
char *value [ 4 ];
@@ -610,6 +766,7 @@ void load_objects( FILE *fp )
pObjIndex = alloc_perm( sizeof( *pObjIndex ) );
pObjIndex->vnum = vnum;
+ pObjIndex->area = area_last; /* OLC */
pObjIndex->name = fread_string( fp );
pObjIndex->short_descr = fread_string( fp );
pObjIndex->description = fread_string( fp );
@@ -715,12 +872,43 @@ void load_objects( FILE *fp )
pObjIndex->next = obj_index_hash[iHash];
obj_index_hash[iHash] = pObjIndex;
top_obj_index++;
+ top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */
+ assign_area_vnum( vnum ); /* OLC */
}
return;
}
+/*
+ * Adds a reset to a room. OLC
+ * Similar to add_reset in olc.c
+ */
+void new_reset( ROOM_INDEX_DATA *pR, RESET_DATA *pReset )
+{
+ RESET_DATA *pr;
+
+ if ( !pR )
+ return;
+
+ pr = pR->reset_last;
+
+ if ( !pr )
+ {
+ pR->reset_first = pReset;
+ pR->reset_last = pReset;
+ }
+ else
+ {
+ pR->reset_last->next = pReset;
+ pR->reset_last = pReset;
+ pR->reset_last->next = NULL;
+ }
+
+ top_reset++;
+ return;
+}
+
/*
* Snarf a reset section.
@@ -728,6 +916,8 @@ void load_objects( FILE *fp )
void load_resets( FILE *fp )
{
RESET_DATA *pReset;
+ int iLastRoom = 0;
+ int iLastObj = 0;
if ( !area_last )
{
@@ -770,66 +960,80 @@ void load_resets( FILE *fp )
exit( 1 );
break;
- case 'M':
- get_mob_index ( pReset->arg1 );
- get_room_index ( pReset->arg3 );
- break;
-
- case 'O':
- get_obj_index ( pReset->arg1 );
- get_room_index ( pReset->arg3 );
- break;
-
- case 'P':
- get_obj_index ( pReset->arg1 );
- get_obj_index ( pReset->arg3 );
- break;
-
- case 'G':
- case 'E':
- get_obj_index ( pReset->arg1 );
- break;
-
- case 'D':
- pRoomIndex = get_room_index( pReset->arg1 );
-
- if ( pReset->arg2 < 0
- || pReset->arg2 > 5
- || !( pexit = pRoomIndex->exit[pReset->arg2] )
- || !IS_SET( pexit->exit_info, EX_ISDOOR ) )
- {
- bug( "Load_resets: 'D': exit %d not door.", pReset->arg2 );
- exit( 1 );
- }
-
- if ( pReset->arg3 < 0 || pReset->arg3 > 2 )
- {
- bug( "Load_resets: 'D': bad 'locks': %d.", pReset->arg3 );
- exit( 1 );
- }
+ case 'M':
+ get_mob_index ( pReset->arg1 );
+ if ( ( pRoomIndex = get_room_index ( pReset->arg3 ) ) )
+ {
+ new_reset( pRoomIndex, pReset );
+ iLastRoom = pReset->arg3;
+ }
+ break;
+
+ case 'O':
+ get_obj_index ( pReset->arg1 );
+ if ( ( pRoomIndex = get_room_index ( pReset->arg3 ) ) )
+ {
+ new_reset( pRoomIndex, pReset );
+ iLastObj = pReset->arg3;
+ }
+ break;
+
+ case 'P':
+ get_obj_index ( pReset->arg1 );
+ if ( ( pRoomIndex = get_room_index ( iLastObj ) ) )
+ {
+ new_reset( pRoomIndex, pReset );
+ }
+ break;
+
+ case 'G':
+ case 'E':
+ get_obj_index ( pReset->arg1 );
+ if ( ( pRoomIndex = get_room_index ( iLastRoom ) ) )
+ {
+ new_reset( pRoomIndex, pReset );
+ iLastObj = iLastRoom;
+ }
+ break;
+
+ case 'D':
+ pRoomIndex = get_room_index( pReset->arg1 );
+
+ if ( pReset->arg2 < 0
+ || pReset->arg2 > 5
+ || !pRoomIndex
+ || !( pexit = pRoomIndex->exit[pReset->arg2] )
+ || !IS_SET( pexit->rs_flags, EX_ISDOOR ) )
+ {
+ bug( "Load_resets: 'D': exit %d not door.", pReset->arg2 );
+ exit( 1 );
+ }
+
+ switch ( pReset->arg3 ) /* OLC 1.1b */
+ {
+ default:
+ bug( "Load_resets: 'D': bad 'locks': %d." , pReset->arg3);
+ case 0:
+ break;
+ case 1: SET_BIT( pexit->rs_flags, EX_CLOSED );
+ break;
+ case 2: SET_BIT( pexit->rs_flags, EX_CLOSED | EX_LOCKED );
+ break;
+ }
+ break;
- break;
+ case 'R':
+ if ( pReset->arg2 < 0 || pReset->arg2 > 6 ) /* Last Door. */
+ {
+ bug( "Load_resets: 'R': bad exit %d.", pReset->arg2 );
+ exit( 1 );
+ }
- case 'R':
- pRoomIndex = get_room_index( pReset->arg1 );
+ if ( ( pRoomIndex = get_room_index( pReset->arg1 ) ) )
+ new_reset( pRoomIndex, pReset );
- if ( pReset->arg2 < 0 || pReset->arg2 > 6 )
- {
- bug( "Load_resets: 'R': bad exit %d.", pReset->arg2 );
- exit( 1 );
- }
-
- break;
+ break;
}
-
- if ( !area_last->reset_first )
- area_last->reset_first = pReset;
- if ( area_last->reset_last )
- area_last->reset_last->next = pReset;
-
- area_last->reset_last = pReset;
- pReset->next = NULL;
- top_reset++;
}
return;
@@ -918,25 +1122,26 @@ void load_rooms( FILE *fp )
pexit->description = fread_string( fp );
pexit->keyword = fread_string( fp );
pexit->exit_info = 0;
+ pexit->rs_flags = 0;
locks = fread_number( fp );
pexit->key = fread_number( fp );
pexit->vnum = fread_number( fp );
- switch ( locks )
- {
- case 1: pexit->exit_info = EX_ISDOOR; break;
- case 2: pexit->exit_info = EX_ISDOOR | EX_PICKPROOF; break;
- case 3: pexit->exit_info = EX_ISDOOR | EX_BASHPROOF; break;
- case 4: pexit->exit_info = EX_ISDOOR | EX_PICKPROOF
- | EX_BASHPROOF; break;
- case 5: pexit->exit_info = EX_ISDOOR | EX_PASSPROOF; break;
- case 6: pexit->exit_info = EX_ISDOOR | EX_PICKPROOF
- | EX_PASSPROOF; break;
- case 7: pexit->exit_info = EX_ISDOOR | EX_BASHPROOF
- | EX_PASSPROOF; break;
- case 8: pexit->exit_info = EX_ISDOOR | EX_PICKPROOF
- | EX_BASHPROOF | EX_PASSPROOF; break;
- }
+ switch ( locks ) /* OLC exit_info to rs_flags. */
+ {
+ case 1: pexit->rs_flags = EX_ISDOOR; break;
+ case 2: pexit->rs_flags = EX_ISDOOR | EX_PICKPROOF; break;
+ case 3: pexit->rs_flags = EX_ISDOOR | EX_BASHPROOF; break;
+ case 4: pexit->rs_flags = EX_ISDOOR | EX_PICKPROOF
+ | EX_BASHPROOF; break;
+ case 5: pexit->rs_flags = EX_ISDOOR | EX_PASSPROOF; break;
+ case 6: pexit->rs_flags = EX_ISDOOR | EX_PICKPROOF
+ | EX_PASSPROOF; break;
+ case 7: pexit->rs_flags = EX_ISDOOR | EX_BASHPROOF
+ | EX_PASSPROOF; break;
+ case 8: pexit->rs_flags = EX_ISDOOR | EX_PICKPROOF
+ | EX_BASHPROOF | EX_PASSPROOF; break;
+ }
pRoomIndex->exit[door] = pexit;
top_exit++;
@@ -963,12 +1168,131 @@ void load_rooms( FILE *fp )
pRoomIndex->next = room_index_hash[iHash];
room_index_hash[iHash] = pRoomIndex;
top_room++;
+ top_vnum_room = top_vnum_room < vnum ? vnum : top_vnum_room; /* OLC */
+ assign_area_vnum( vnum ); /* OLC */
}
return;
}
+/* OLC 1.1b */
+void new_load_rooms( FILE *fp )
+{
+ ROOM_INDEX_DATA *pRoomIndex;
+
+ if ( !area_last )
+ {
+ bug( "Load_rooms: no #AREA seen yet.", 0 );
+ exit( 1 );
+ }
+
+ for ( ; ; )
+ {
+ char letter;
+ int vnum;
+ int door;
+ int iHash;
+
+ letter = fread_letter( fp );
+ if ( letter != '#' )
+ {
+ bug( "Load_rooms: # not found.", 0 );
+ exit( 1 );
+ }
+
+ vnum = fread_number( fp );
+ if ( vnum == 0 )
+ break;
+
+ fBootDb = FALSE;
+ if ( get_room_index( vnum ) )
+ {
+ bug( "Load_rooms: vnum %d duplicated.", vnum );
+ exit( 1 );
+ }
+ fBootDb = TRUE;
+
+ pRoomIndex = alloc_perm( sizeof( *pRoomIndex ) );
+ pRoomIndex->people = NULL;
+ pRoomIndex->contents = NULL;
+ pRoomIndex->extra_descr = NULL;
+ pRoomIndex->area = area_last;
+ pRoomIndex->vnum = vnum;
+ pRoomIndex->name = fread_string( fp );
+ pRoomIndex->description = fread_string( fp );
+ /* Area number */ fread_number( fp ); /* Unused */
+ pRoomIndex->room_flags = fread_number( fp );
+ pRoomIndex->sector_type = fread_number( fp );
+ pRoomIndex->light = 0;
+ for ( door = 0; door <= 5; door++ )
+ pRoomIndex->exit[door] = NULL;
+
+ for ( ; ; )
+ {
+ letter = fread_letter( fp );
+
+ if ( letter == 'S' || letter == 's' )
+ {
+ if ( letter == 's' )
+ bug( "Load_rooms: vnum %d has lowercase 's'", vnum );
+ break;
+ }
+
+ if ( letter == 'D' )
+ {
+ EXIT_DATA *pexit;
+ int locks;
+
+ door = fread_number( fp );
+ if ( door < 0 || door > 5 )
+ {
+ bug( "Fread_rooms: vnum %d has bad door number.", vnum );
+ exit( 1 );
+ }
+
+ pexit = alloc_perm( sizeof( *pexit ) );
+ pexit->description = fread_string( fp );
+ pexit->keyword = fread_string( fp );
+ locks = fread_number( fp );
+ pexit->exit_info = locks;
+ pexit->rs_flags = locks;
+ pexit->key = fread_number( fp );
+ pexit->vnum = fread_number( fp );
+
+
+ pRoomIndex->exit[door] = pexit;
+ top_exit++;
+ }
+ else if ( letter == 'E' )
+ {
+ EXTRA_DESCR_DATA *ed;
+
+ ed = alloc_perm( sizeof( *ed ) );
+ ed->keyword = fread_string( fp );
+ ed->description = fread_string( fp );
+ ed->next = pRoomIndex->extra_descr;
+ pRoomIndex->extra_descr = ed;
+ top_ed++;
+ }
+ else
+ {
+ bug( "Load_rooms: vnum %d has flag not 'DES'.", vnum );
+ exit( 1 );
+ }
+ }
+
+ iHash = vnum % MAX_KEY_HASH;
+ pRoomIndex->next = room_index_hash[iHash];
+ room_index_hash[iHash] = pRoomIndex;
+ top_room++;
+ top_vnum_room = top_vnum_room < vnum ? vnum : top_vnum_room;
+ assign_area_vnum( vnum );
+ }
+
+ return;
+}
+
/*
* Snarf a shop section.
@@ -1303,6 +1627,254 @@ void fix_exits( void )
}
+/* OLC
+ * Reset one room. Called by reset_area and olc.
+ */
+void reset_room( ROOM_INDEX_DATA *pRoom )
+{
+ RESET_DATA *pReset;
+ CHAR_DATA *pMob;
+ CHAR_DATA *LastMob = NULL;
+ int iExit;
+ int level = 0;
+ bool last;
+
+ if ( !pRoom )
+ return;
+
+ pMob = NULL;
+ last = TRUE;
+
+ for ( iExit = 0; iExit < MAX_DIR; iExit++ )
+ {
+ EXIT_DATA *pExit;
+ if ( ( pExit = pRoom->exit[iExit] )
+ && !IS_SET( pExit->exit_info, EX_BASHED ) ) /* Skip Bashed. */
+ {
+ pExit->exit_info = pExit->rs_flags;
+ if ( ( pExit->to_room != NULL )
+ && ( ( pExit = pExit->to_room->exit[rev_dir[iExit]] ) ) )
+ {
+ /* nail the other side */
+ pExit->exit_info = pExit->rs_flags;
+ }
+ }
+ }
+
+ for ( pReset = pRoom->reset_first; pReset; pReset = pReset->next )
+ {
+ OBJ_DATA *pObj;
+ OBJ_DATA *LastObj;
+ MOB_INDEX_DATA *pMobIndex;
+ OBJ_INDEX_DATA *pObjIndex;
+ OBJ_INDEX_DATA *pObjToIndex;
+ ROOM_INDEX_DATA *pRoomIndex;
+
+ switch ( pReset->command )
+ {
+ default:
+ bug( "Reset_room: bad command %c.", pReset->command );
+ break;
+ case 'M':
+ if ( !( pMobIndex = get_mob_index( pReset->arg1 ) ) )
+ {
+ bug( "Reset_room: 'M': bad vnum %d.", pReset->arg1 );
+ continue;
+ }
+
+ if ( !( pRoomIndex = get_room_index( pReset->arg3 ) ) )
+ {
+ bug( "Reset_area: 'R': bad vnum %d.", pReset->arg3 );
+ continue;
+ }
+
+ if ( ( pMobIndex->spec_fun == spec_lookup( "spec_cast_ghost" )
+ && ( weather_info.sunlight != SUN_DARK ) ) )
+ {
+ last = FALSE;
+ continue;
+ }
+
+ level = URANGE( 0, pMobIndex->level - 2, LEVEL_HERO );
+
+ /* If sentinel, then maximum number indicates in room instead
+ of in world. -Kahn */
+ /* Midgaard mayor is special case as it has a spec proc which
+ moves it. Dislike such specific coding. Shrug. -Kahn */
+ if ( IS_SET( pMobIndex->act, ACT_SENTINEL )
+ && pMobIndex->vnum != MOB_VNUM_MIDGAARD_MAYOR )
+ {
+ CHAR_DATA *ch;
+ int count = 0;
+
+ for ( ch = pRoomIndex->people; ch; ch = ch->next_in_room )
+ if ( IS_NPC( ch ) && ch->pIndexData == pMobIndex )
+ count++;
+ if ( count >= pReset->arg2 )
+ {
+ last = FALSE;
+ break;
+ }
+ }
+ else
+ if ( pMobIndex->count >= pReset->arg2 )
+
+ {
+ last = FALSE;
+ break;
+ }
+ pMob = create_mobile( pMobIndex );
+
+ /*
+ * Check for pet shop.
+ */
+ {
+ ROOM_INDEX_DATA *pRoomIndexPrev;
+
+ pRoomIndexPrev = get_room_index( pRoomIndex->vnum - 1 );
+ if ( pRoomIndexPrev
+ && IS_SET( pRoomIndexPrev->room_flags, ROOM_PET_SHOP ) )
+ SET_BIT( pMob->act, ACT_PET);
+ }
+
+ if ( room_is_dark( pRoomIndex ) )
+ SET_BIT( pMob->affected_by, AFF_INFRARED );
+
+ LastMob = pMob;
+ char_to_room( pMob, pRoomIndex );
+ level = URANGE( 0, pMob->level - 2, LEVEL_HERO );
+ last = TRUE;
+ break;
+
+ case 'O':
+ if ( !( pObjIndex = get_obj_index( pReset->arg1 ) ) )
+ {
+ bug( "Reset_room: 'O': bad vnum %d.", pReset->arg1 );
+ continue;
+ }
+
+ if ( !( pRoomIndex = get_room_index( pReset->arg3 ) ) )
+ {
+ bug( "Reset_room: 'O': bad vnum %d.", pReset->arg3 );
+ continue;
+ }
+
+ if ( pRoom->area->nplayer > 0
+ || count_obj_list( pObjIndex, pRoomIndex->contents ) > 0 )
+ {
+ last = FALSE;
+ break;
+ }
+
+ pObj = create_object( pObjIndex, number_fuzzy( level ) );
+ pObj->cost = 0;
+ obj_to_room( pObj, pRoom );
+ last = TRUE;
+ break;
+
+ case 'P':
+ if ( !( pObjIndex = get_obj_index( pReset->arg1 ) ) )
+ {
+ bug( "Reset_room: 'P': bad vnum %d.", pReset->arg1 );
+ continue;
+ }
+
+ if ( !( pObjToIndex = get_obj_index( pReset->arg3 ) ) )
+ {
+ bug( "Reset_room: 'P': bad vnum %d.", pReset->arg3 );
+ continue;
+ }
+
+ if ( pRoom->area->nplayer > 0
+ || !( LastObj = get_obj_type( pObjToIndex ) )
+ || count_obj_list( pObjIndex, LastObj->contains ) > 0 )
+ {
+ last = FALSE;
+ break;
+ }
+
+ pObj = create_object( pObjIndex, number_fuzzy( LastObj->level ) );
+ obj_to_obj( pObj, LastObj );
+ last = TRUE;
+
+ /*
+ * Ensure that the container gets reset. OLC 1.1b
+ */
+ if ( LastObj->item_type == ITEM_CONTAINER )
+ {
+ LastObj->value[1] = LastObj->pIndexData->value[1];
+ }
+ else
+ {
+ /* THIS SPACE INTENTIONALLY LEFT BLANK */
+ }
+ break;
+
+ case 'G':
+ case 'E':
+ if ( !( pObjIndex = get_obj_index( pReset->arg1 ) ) )
+ {
+ bug( "Reset_room: 'E' or 'G': bad vnum %d.", pReset->arg1 );
+ continue;
+ }
+
+ if ( !last )
+ break;
+
+ if ( !LastMob )
+ {
+ bug( "Reset_room: 'E' or 'G': null mob for vnum %d.",
+ pReset->arg1 );
+ last = FALSE;
+ break;
+ }
+
+ if ( LastMob->pIndexData->pShop ) /* Shop-keeper? */
+ {
+ int olevel;
+
+ switch ( pObjIndex->item_type )
+ {
+ default: olevel = 0; break;
+ case ITEM_PILL: olevel = number_range( 0, 10 ); break;
+ case ITEM_POTION: olevel = number_range( 0, 10 ); break;
+ case ITEM_SCROLL: olevel = number_range( 5, 15 ); break;
+ case ITEM_WAND: olevel = number_range( 10, 20 ); break;
+ case ITEM_STAFF: olevel = number_range( 15, 25 ); break;
+ case ITEM_ARMOR: olevel = number_range( 5, 15 ); break;
+ case ITEM_WEAPON: if ( pReset->command == 'G' )
+ olevel = number_range( 5, 15 );
+ else
+ olevel = number_fuzzy( level );
+ break;
+ }
+
+ pObj = create_object( pObjIndex, olevel );
+ if ( pReset->command == 'G' )
+ SET_BIT( pObj->extra_flags, ITEM_INVENTORY );
+ }
+ else
+ {
+ pObj = create_object( pObjIndex, number_fuzzy( level ) );
+ }
+ obj_to_char( pObj, LastMob );
+ if ( pReset->command == 'E' )
+ equip_char( LastMob, pObj, pReset->arg3 );
+ last = TRUE;
+ break;
+
+ case 'D':
+ break;
+
+ case 'R':
+ break;
+ }
+ }
+
+ return;
+}
+
+
/*
* Repopulate areas periodically.
@@ -1357,265 +1929,18 @@ void area_update( void )
-/*
+/* OLC
* Reset one area.
*/
void reset_area( AREA_DATA *pArea )
{
- CHAR_DATA *mob;
- RESET_DATA *pReset;
- int level;
- bool last;
+ ROOM_INDEX_DATA *pRoom;
+ int vnum;
- mob = NULL;
- last = TRUE;
- level = 0;
- for ( pReset = pArea->reset_first; pReset; pReset = pReset->next )
+ for ( vnum = pArea->lvnum; vnum <= pArea->uvnum; vnum++ )
{
- OBJ_DATA *obj;
- OBJ_DATA *obj_to;
- EXIT_DATA *pexit;
- MOB_INDEX_DATA *pMobIndex;
- OBJ_INDEX_DATA *pObjIndex;
- OBJ_INDEX_DATA *pObjToIndex;
- ROOM_INDEX_DATA *pRoomIndex;
-
- switch ( pReset->command )
- {
- default:
- bug( "Reset_area: bad command %c.", pReset->command );
- break;
-
- case 'M':
- if ( !( pMobIndex = get_mob_index( pReset->arg1 ) ) )
- {
- bug( "Reset_area: 'M': bad vnum %d.", pReset->arg1 );
- continue;
- }
-
- if ( !( pRoomIndex = get_room_index( pReset->arg3 ) ) )
- {
- bug( "Reset_area: 'R': bad vnum %d.", pReset->arg3 );
- continue;
- }
-
- if ( ( pMobIndex->spec_fun == spec_lookup( "spec_cast_ghost" )
- && ( weather_info.sunlight != SUN_DARK ) ) )
- {
- last = FALSE;
- continue;
- }
-
- level = URANGE( 0, pMobIndex->level - 2, LEVEL_HERO );
-
- /* If sentinel, then maximum number indicates in room instead
- of in world. -Kahn */
- /* Midgaard mayor is special case as it has a spec proc which
- moves it. Dislike such specific coding. Shrug. -Kahn */
- if ( IS_SET( pMobIndex->act, ACT_SENTINEL )
- && pMobIndex->vnum != MOB_VNUM_MIDGAARD_MAYOR )
- {
- CHAR_DATA *ch;
- int count = 0;
-
- for ( ch = pRoomIndex->people; ch; ch = ch->next_in_room )
- if ( IS_NPC( ch ) && ch->pIndexData == pMobIndex )
- count++;
- if ( count >= pReset->arg2 )
- {
- last = FALSE;
- break;
- }
- }
- else
- if ( pMobIndex->count >= pReset->arg2 )
- {
- last = FALSE;
- break;
- }
-
- mob = create_mobile( pMobIndex );
-
- /*
- * Check for pet shop.
- */
- {
- ROOM_INDEX_DATA *pRoomIndexPrev;
-
- pRoomIndexPrev = get_room_index( pRoomIndex->vnum - 1 );
- if ( pRoomIndexPrev
- && IS_SET( pRoomIndexPrev->room_flags, ROOM_PET_SHOP ) )
- SET_BIT( mob->act, ACT_PET);
- }
-
- if ( room_is_dark( pRoomIndex ) )
- SET_BIT( mob->affected_by, AFF_INFRARED );
-
- char_to_room( mob, pRoomIndex );
- level = URANGE( 0, mob->level - 2, LEVEL_HERO );
- last = TRUE;
- break;
-
- case 'O':
- if ( !( pObjIndex = get_obj_index( pReset->arg1 ) ) )
- {
- bug( "Reset_area: 'O': bad vnum %d.", pReset->arg1 );
- continue;
- }
-
- if ( !( pRoomIndex = get_room_index( pReset->arg3 ) ) )
- {
- bug( "Reset_area: 'R': bad vnum %d.", pReset->arg3 );
- continue;
- }
-
- if ( pArea->nplayer > 0
- || count_obj_list( pObjIndex, pRoomIndex->contents ) > 0 )
- {
- last = FALSE;
- break;
- }
-
- obj = create_object( pObjIndex, number_fuzzy( level ) );
- obj->cost = 0;
- obj_to_room( obj, pRoomIndex );
- last = TRUE;
- break;
-
- case 'P':
- if ( !( pObjIndex = get_obj_index( pReset->arg1 ) ) )
- {
- bug( "Reset_area: 'P': bad vnum %d.", pReset->arg1 );
- continue;
- }
-
- if ( !( pObjToIndex = get_obj_index( pReset->arg3 ) ) )
- {
- bug( "Reset_area: 'P': bad vnum %d.", pReset->arg3 );
- continue;
- }
-
- if ( pArea->nplayer > 0
- || !( obj_to = get_obj_type( pObjToIndex ) )
- || count_obj_list( pObjIndex, obj_to->contains ) > 0 )
- {
- last = FALSE;
- break;
- }
-
- obj = create_object( pObjIndex, number_fuzzy( obj_to->level ) );
- obj_to_obj( obj, obj_to );
- last = TRUE;
- break;
-
- case 'G':
- case 'E':
- if ( !( pObjIndex = get_obj_index( pReset->arg1 ) ) )
- {
- bug( "Reset_area: 'E' or 'G': bad vnum %d.", pReset->arg1 );
- continue;
- }
-
- if ( !last )
- break;
-
- if ( !mob )
- {
- bug( "Reset_area: 'E' or 'G': null mob for vnum %d.",
- pReset->arg1 );
- last = FALSE;
- break;
- }
-
- if ( mob->pIndexData->pShop )
- {
- int olevel;
-
- switch ( pObjIndex->item_type )
- {
- default: olevel = 0; break;
- case ITEM_PILL: olevel = number_range( 0, 10 ); break;
- case ITEM_POTION: olevel = number_range( 0, 10 ); break;
- case ITEM_SCROLL: olevel = number_range( 5, 15 ); break;
- case ITEM_WAND: olevel = number_range( 10, 20 ); break;
- case ITEM_STAFF: olevel = number_range( 15, 25 ); break;
- case ITEM_ARMOR: olevel = number_range( 5, 15 ); break;
- case ITEM_FURNITURE: olevel = number_range( 5, 15 ); break;
- case ITEM_WEAPON: if ( pReset->command == 'G' )
- olevel = number_range( 5, 15 );
- else
- olevel = number_fuzzy( level );
- break;
- }
-
- obj = create_object( pObjIndex, olevel );
- if ( pReset->command == 'G' )
- SET_BIT( obj->extra_flags, ITEM_INVENTORY );
- }
- else
- {
- obj = create_object( pObjIndex, number_fuzzy( level ) );
- }
- obj_to_char( obj, mob );
- if ( pReset->command == 'E' )
- equip_char( mob, obj, pReset->arg3 );
- last = TRUE;
- break;
-
- case 'D':
- if ( !( pRoomIndex = get_room_index( pReset->arg1 ) ) )
- {
- bug( "Reset_area: 'D': bad vnum %d.", pReset->arg1 );
- continue;
- }
-
- if ( !( pexit = pRoomIndex->exit[pReset->arg2] ) )
- break;
-
- /* Bashed doors persist across resets */
- if ( !IS_SET( pexit->exit_info, EX_BASHED ) )
- switch ( pReset->arg3 )
- {
- case 0:
- REMOVE_BIT( pexit->exit_info, EX_CLOSED );
- REMOVE_BIT( pexit->exit_info, EX_LOCKED );
- break;
-
- case 1:
- SET_BIT( pexit->exit_info, EX_CLOSED );
- REMOVE_BIT( pexit->exit_info, EX_LOCKED );
- break;
-
- case 2:
- SET_BIT( pexit->exit_info, EX_CLOSED );
- SET_BIT( pexit->exit_info, EX_LOCKED );
- break;
- }
-
- last = TRUE;
- break;
-
- case 'R':
- if ( !( pRoomIndex = get_room_index( pReset->arg1 ) ) )
- {
- bug( "Reset_area: 'R': bad vnum %d.", pReset->arg1 );
- continue;
- }
-
- {
- int d0;
- int d1;
-
- for ( d0 = 0; d0 < pReset->arg2 - 1; d0++ )
- {
- d1 = number_range( d0, pReset->arg2-1 );
- pexit = pRoomIndex->exit[d0];
- pRoomIndex->exit[d0] = pRoomIndex->exit[d1];
- pRoomIndex->exit[d1] = pexit;
- }
- }
- break;
- }
+ if ( ( pRoom = get_room_index(vnum) ) )
+ reset_room(pRoom);
}
return;
@@ -1649,10 +1974,10 @@ CHAR_DATA *create_mobile( MOB_INDEX_DATA
clear_char( mob );
mob->pIndexData = pMobIndex;
- mob->name = pMobIndex->player_name;
- mob->short_descr = pMobIndex->short_descr;
- mob->long_descr = pMobIndex->long_descr;
- mob->description = pMobIndex->description;
+ mob->name = str_dup( pMobIndex->player_name );
+ mob->short_descr = str_dup( pMobIndex->short_descr );
+ mob->long_descr = str_dup( pMobIndex->long_descr );
+ mob->description = str_dup( pMobIndex->description );
mob->spec_fun = pMobIndex->spec_fun;
mob->level = number_fuzzy( pMobIndex->level );
@@ -1713,9 +2038,9 @@ OBJ_DATA *create_object( OBJ_INDEX_DATA
obj->level = level;
obj->wear_loc = -1;
- obj->name = pObjIndex->name;
- obj->short_descr = pObjIndex->short_descr;
- obj->description = pObjIndex->description;
+ obj->name = str_dup( pObjIndex->name );
+ obj->short_descr = str_dup( pObjIndex->short_descr );
+ obj->description = str_dup( pObjIndex->description );
obj->item_type = pObjIndex->item_type;
obj->extra_flags = pObjIndex->extra_flags;
obj->wear_flags = pObjIndex->wear_flags;
diff -u -p stock/handler.c src/handler.c
--- stock/handler.c Tue Dec 26 23:17:55 1995
+++ src/handler.c Wed May 28 16:09:33 1997
@@ -1829,6 +1829,18 @@ int race_lookup( const char *race )
}
+int race_full_lookup( const char *race )
+{
+ int index;
+
+ for ( index = 0; index < MAX_RACE; index++ )
+ if ( !str_cmp( race, race_table[index].name ) )
+ return index;
+
+ return NO_FLAG;
+
+}
+
int affect_lookup( const char *affectname )
{
int index;
diff -u -p stock/interp.c src/interp.c
--- stock/interp.c Tue Dec 26 23:17:55 1995
+++ src/interp.c Sun May 11 16:05:52 1997
@@ -304,6 +304,18 @@ const struct cmd_type cmd_table [ ] =
{ ":", do_immtalk, POS_DEAD, L_HER, LOG_NORMAL },
+ /*
+ * OLC 1.1b
+ * Change L_HER to your minimum builder level
+ */
+ { "aedit", do_aedit, POS_DEAD, L_HER, LOG_NORMAL },
+ { "redit", do_redit, POS_DEAD, L_HER, LOG_NORMAL },
+ { "oedit", do_oedit, POS_DEAD, L_HER, LOG_NORMAL },
+ { "medit", do_medit, POS_DEAD, L_HER, LOG_NORMAL },
+ { "asave", do_asave, POS_DEAD, L_HER, LOG_NORMAL },
+ { "alist", do_alist, POS_DEAD, L_HER, LOG_NORMAL },
+ { "resets", do_resets, POS_DEAD, L_HER, LOG_NORMAL },
+
/*
* End of list.
*/
diff -u -p stock/magic.c src/magic.c
--- stock/magic.c Tue Dec 26 23:17:55 1995
+++ src/magic.c Wed May 28 15:37:16 1997
@@ -210,7 +210,8 @@ void do_cast( CHAR_DATA *ch, char *argum
return;
}
- if ( IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ if ( IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
{
send_to_char( "You can't...you are in a Cone of Silence!\n\r", ch );
return;
@@ -806,9 +807,9 @@ void spell_cone_of_silence( int sn, int
return;
}
- if ( !IS_SET( pRoomIndex->room_flags, ROOM_CONE_OF_SILENCE ) )
+ if ( !IS_SET( pRoomIndex->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
- SET_BIT( pRoomIndex->room_flags, ROOM_CONE_OF_SILENCE );
+ SET_BIT( pRoomIndex->room_flags, ROOM_TEMP_CONE_OF_SILENCE );
send_to_char( "You have created a cone of silence!\n\r", ch );
act( "$n has created a cone of silence!", ch, NULL, NULL, TO_ROOM );
}
@@ -2306,9 +2307,9 @@ void spell_remove_silence( int sn, int l
pRoomIndex = ch->in_room;
DidSomething = FALSE;
- if ( IS_SET( pRoomIndex->room_flags, ROOM_CONE_OF_SILENCE ) )
+ if ( IS_SET( pRoomIndex->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
{
- REMOVE_BIT( pRoomIndex->room_flags, ROOM_CONE_OF_SILENCE );
+ REMOVE_BIT( pRoomIndex->room_flags, ROOM_TEMP_CONE_OF_SILENCE );
send_to_char( "You have lifted the cone of silence!\n\r", ch );
act( "$n has lifted the cone of silence!",
ch, NULL, NULL, TO_ROOM );
Only in src: mem.c
diff -u -p stock/merc.h src/merc.h
--- stock/merc.h Tue Dec 26 23:17:56 1995
+++ src/merc.h Wed May 28 16:03:08 1997
@@ -132,7 +132,7 @@ typedef void GAME_FUN
#define PULSE_MOBILE ( 5 * PULSE_PER_SECOND )
#define PULSE_TICK ( 30 * PULSE_PER_SECOND )
#define PULSE_AREA ( 60 * PULSE_PER_SECOND )
-
+#define PULSE_DB_DUMP (1800* PULSE_PER_SECOND ) /* 30 minutes */
/*
@@ -250,6 +250,9 @@ struct descriptor_data
char * outbuf;
int outsize;
int outtop;
+ void * pEdit; /* OLC */
+ char ** pString; /* OLC */
+ int editor; /* OLC */
};
@@ -307,6 +310,7 @@ struct help_data
int level;
char * keyword;
char * text;
+ AREA_DATA * area;
};
@@ -647,6 +651,7 @@ struct kill_data
#define ROOM_PET_SHOP 4096
#define ROOM_NO_RECALL 8192
#define ROOM_CONE_OF_SILENCE 16384
+#define ROOM_TEMP_CONE_OF_SILENCE 32768 /* So spell doesn't save into areas */
/*
@@ -835,6 +840,7 @@ struct mob_index_data
int damplus; /* Unused */
int gold; /* Unused */
int race;
+ AREA_DATA * area; /* OLC */
};
@@ -926,6 +932,7 @@ struct pc_data
int pagelen;
int learned [ MAX_SKILL ];
bool switched;
+ int security; /* OLC - Builder security */
};
/*
@@ -975,6 +982,7 @@ struct obj_index_data
int weight;
int cost; /* Unused */
int value [ 4 ];
+ AREA_DATA * area; /* OLC */
};
@@ -1021,6 +1029,9 @@ struct exit_data
int key;
char * keyword;
char * description;
+ EXIT_DATA * next; /* OLC */
+ int rs_flags; /* OLC */
+ int orig_door; /* OLC */
};
@@ -1064,6 +1075,13 @@ struct area_data
int recall;
int age;
int nplayer;
+ char * filename; /* OLC */
+ char * builders; /* OLC - Listing of builders */
+ int security; /* OLC - Value 0-infinity */
+ int lvnum; /* OLC - Lower vnum */
+ int uvnum; /* OLC - Upper vnum */
+ int vnum; /* OLC - Area vnum */
+ int area_flags; /* OLC */
};
@@ -1085,6 +1103,8 @@ struct room_index_data
int room_flags;
int light;
int sector_type;
+ RESET_DATA * reset_first; /* OLC */
+ RESET_DATA * reset_last; /* OLC */
};
@@ -1666,6 +1686,150 @@ DECLARE_SPELL_FUN( spell_thought_sh
DECLARE_SPELL_FUN( spell_ultrablast );
+/*****************************************************************************
+ * OLC *
+ *****************************************************************************/
+
+/*
+ * This structure is used in special.c to lookup spec funcs and
+ * also in olc_act.c to display listings of spec funcs.
+ */
+struct spec_type
+{
+ char * spec_name;
+ SPEC_FUN * spec_fun;
+};
+
+
+
+/*
+ * This structure is used in bit.c to lookup flags and stats.
+ */
+struct flag_type
+{
+ char * name;
+ int bit;
+ bool settable;
+};
+
+
+
+
+
+/*
+ * Area flags.
+ */
+#define AREA_NONE 0
+#define AREA_CHANGED 1 /* Area has been modified. */
+#define AREA_ADDED 2 /* Area has been added to. */
+#define AREA_LOADING 4 /* Used for counting in db.c */
+#define AREA_VERBOSE 8 /* OLC */
+
+
+
+#define MAX_DIR 6
+#define NO_FLAG -99 /* Must not be used in flags or stats. */
+
+
+
+/*
+ * Interp.c
+ */
+DECLARE_DO_FUN( do_aedit ); /* OLC 1.1b */
+DECLARE_DO_FUN( do_redit ); /* OLC 1.1b */
+DECLARE_DO_FUN( do_oedit ); /* OLC 1.1b */
+DECLARE_DO_FUN( do_medit ); /* OLC 1.1b */
+DECLARE_DO_FUN( do_asave );
+DECLARE_DO_FUN( do_alist );
+DECLARE_DO_FUN( do_resets );
+
+
+/*
+ * Global Constants
+ */
+extern char * const dir_name [];
+extern const int rev_dir [];
+extern const struct spec_type spec_table [];
+
+
+
+/*
+ * Global variables
+ */
+extern AREA_DATA * area_first;
+extern AREA_DATA * area_last;
+extern SHOP_DATA * shop_last;
+
+extern int top_affect;
+extern int top_area;
+extern int top_ed;
+extern int top_exit;
+extern int top_help;
+extern int top_mob_index;
+extern int top_obj_index;
+extern int top_reset;
+extern int top_room;
+extern int top_shop;
+
+extern int top_vnum_mob;
+extern int top_vnum_obj;
+extern int top_vnum_room;
+
+extern char str_empty [1];
+
+extern MOB_INDEX_DATA * mob_index_hash [MAX_KEY_HASH];
+extern OBJ_INDEX_DATA * obj_index_hash [MAX_KEY_HASH];
+extern ROOM_INDEX_DATA * room_index_hash [MAX_KEY_HASH];
+
+
+/* db.c */
+void reset_area args( ( AREA_DATA * pArea ) );
+void reset_room args( ( ROOM_INDEX_DATA *pRoom ) );
+void do_abort args( ( void ) );
+
+/* string.c */
+void string_edit args( ( CHAR_DATA *ch, char **pString ) );
+void string_append args( ( CHAR_DATA *ch, char **pString ) );
+char * string_replace args( ( char * orig, char * old, char * new ) );
+void string_add args( ( CHAR_DATA *ch, char *argument ) );
+char * format_string args( ( char *oldstring /*, bool fSpace */ ) );
+char * first_arg args( ( char *argument, char *arg_first, bool fCase ) );
+char * string_unpad args( ( char * argument ) );
+char * string_proper args( ( char * argument ) );
+char * all_capitalize args( ( const char * argument ) );
+
+/* olc.c */
+bool run_olc_editor args( ( DESCRIPTOR_DATA *d ) );
+char *olc_ed_name args( ( CHAR_DATA *ch ) );
+char *olc_ed_vnum args( ( CHAR_DATA *ch ) );
+
+/* special.c */
+char * spec_string args( ( SPEC_FUN *fun ) ); /* OLC */
+
+/* bit.c */
+extern const struct flag_type area_flags[];
+extern const struct flag_type sex_flags[];
+extern const struct flag_type exit_flags[];
+extern const struct flag_type door_resets[];
+extern const struct flag_type room_flags[];
+extern const struct flag_type sector_flags[];
+extern const struct flag_type type_flags[];
+extern const struct flag_type extra_flags[];
+extern const struct flag_type wear_flags[];
+extern const struct flag_type act_flags[];
+extern const struct flag_type affect_flags[];
+extern const struct flag_type apply_flags[];
+extern const struct flag_type wear_loc_strings[];
+extern const struct flag_type wear_loc_flags[];
+extern const struct flag_type weapon_flags[];
+extern const struct flag_type container_flags[];
+extern const struct flag_type liquid_flags[];
+
+/*****************************************************************************
+ * END OF OLC *
+ *****************************************************************************/
+
+
/*
* OS-dependent declarations.
* These are all very standard library functions,
@@ -1957,6 +2121,7 @@ bool longstring args( ( CHAR_DAT
bool authorized args( ( CHAR_DATA *ch, char *skllnm ) );
void end_of_game args( ( void ) );
int race_lookup args( ( const char *race ) );
+int race_full_lookup args( ( const char *race ) );
int affect_lookup args( ( const char *race ) );
/* interp.c */
Only in src: olc.c
Only in src: olc.h
Only in src: olc_act.c
Only in src: olc_save.c
diff -u -p stock/save.c src/save.c
--- stock/save.c Tue Dec 26 23:17:55 1995
+++ src/save.c Wed May 28 16:00:55 1997
@@ -139,6 +139,7 @@ void fwrite_char( CHAR_DATA *ch, FILE *f
fprintf( fp, "Lvl %d\n", ch->level );
fprintf( fp, "Trst %d\n", ch->trust );
+ fprintf( fp, "Security %d\n", ch->pcdata->security ); /* OLC */
fprintf( fp, "Playd %d\n",
ch->played + (int) ( current_time - ch->logon ) );
fprintf( fp, "Note %ld\n", (unsigned long)ch->last_note );
@@ -388,6 +389,7 @@ bool load_char_obj( DESCRIPTOR_DATA *d,
ch->pcdata->condition[COND_THIRST] = 48;
ch->pcdata->condition[COND_FULL] = 48;
ch->pcdata->pagelen = 20;
+ ch->pcdata->security = 0; /* OLC */
ch->pcdata->switched = FALSE;
@@ -661,6 +663,7 @@ void fread_char( CHAR_DATA *ch, FILE *fp
KEY( "SavThr", ch->saving_throw, fread_number( fp ) );
KEY( "Sx", ch->sex, fread_number( fp ) );
KEY( "ShtDsc", ch->short_descr, fread_string( fp ) );
+ KEY( "Security", ch->pcdata->security, fread_number( fp ) );
if ( !str_cmp( word, "Skll" ) )
{
diff -u -p stock/special.c src/special.c
--- stock/special.c Tue Dec 26 23:17:55 1995
+++ src/special.c Wed May 28 15:34:39 1997
@@ -63,36 +63,76 @@ DECLARE_SPEC_FUN( spec_thief );
/*
* Given a name, return the appropriate spec fun.
+ * Name: spec_lookup
+ * Purpose: Given a name, return the appropriate spec fun.
+ * Called by: do_mset(act_wiz.c) load_specials,reset_area(db.c)
*/
-SPEC_FUN *spec_lookup( const char *name )
+SPEC_FUN *spec_lookup( const char *name ) /* OLC */
{
- if ( !str_cmp( name, "spec_breath_any" ) ) return spec_breath_any;
- if ( !str_cmp( name, "spec_breath_acid" ) ) return spec_breath_acid;
- if ( !str_cmp( name, "spec_breath_fire" ) ) return spec_breath_fire;
- if ( !str_cmp( name, "spec_breath_frost" ) ) return spec_breath_frost;
- if ( !str_cmp( name, "spec_breath_gas" ) ) return spec_breath_gas;
- if ( !str_cmp( name, "spec_breath_lightning" ) ) return
- spec_breath_lightning;
- if ( !str_cmp( name, "spec_cast_adept" ) ) return spec_cast_adept;
- if ( !str_cmp( name, "spec_cast_cleric" ) ) return spec_cast_cleric;
- if ( !str_cmp( name, "spec_cast_ghost" ) ) return spec_cast_ghost;
- if ( !str_cmp( name, "spec_cast_judge" ) ) return spec_cast_judge;
- if ( !str_cmp( name, "spec_cast_mage" ) ) return spec_cast_mage;
- if ( !str_cmp( name, "spec_cast_psionicist" ) ) return
- spec_cast_psionicist;
- if ( !str_cmp( name, "spec_cast_undead" ) ) return spec_cast_undead;
- if ( !str_cmp( name, "spec_executioner" ) ) return spec_executioner;
- if ( !str_cmp( name, "spec_fido" ) ) return spec_fido;
- if ( !str_cmp( name, "spec_guard" ) ) return spec_guard;
- if ( !str_cmp( name, "spec_janitor" ) ) return spec_janitor;
- if ( !str_cmp( name, "spec_mayor" ) ) return spec_mayor;
- if ( !str_cmp( name, "spec_poison" ) ) return spec_poison;
- if ( !str_cmp( name, "spec_repairman" ) ) return spec_repairman;
- if ( !str_cmp( name, "spec_thief" ) ) return spec_thief;
+ int cmd;
+
+ for ( cmd = 0; *spec_table[cmd].spec_name; cmd++ ) /* OLC 1.1b */
+ if ( !str_cmp( name, spec_table[cmd].spec_name ) )
+ return spec_table[cmd].spec_fun;
+
return 0;
}
+/*****************************************************************************
+ Name: spec_string
+ Purpose: Given a function, return the appropriate name.
+ Called by: <???>
+ ****************************************************************************/
+char *spec_string( SPEC_FUN *fun ) /* OLC */
+{
+ int cmd;
+
+ for ( cmd = 0; *spec_table[cmd].spec_fun; cmd++ ) /* OLC 1.1b */
+ if ( fun == spec_table[cmd].spec_fun )
+ return spec_table[cmd].spec_name;
+
+ return 0;
+}
+
+/*
+ * Special Functions Table. OLC
+ * Add any new spec_funs here
+ */
+const struct spec_type spec_table [ ] =
+{
+ /*
+ * Special function commands.
+ */
+ { "spec_breath_any", spec_breath_any },
+ { "spec_breath_acid", spec_breath_acid },
+ { "spec_breath_fire", spec_breath_fire },
+ { "spec_breath_frost", spec_breath_frost },
+ { "spec_breath_gas", spec_breath_gas },
+ { "spec_breath_lightning", spec_breath_lightning },
+ { "spec_cast_adept", spec_cast_adept },
+ { "spec_cast_cleric", spec_cast_cleric },
+ { "spec_cast_ghost", spec_cast_ghost },
+ { "spec_cast_judge", spec_cast_judge },
+ { "spec_cast_mage", spec_cast_mage },
+ { "spec_cast_psionicist", spec_cast_psionicist },
+ { "spec_cast_undead", spec_cast_undead },
+ { "spec_executioner", spec_executioner },
+ { "spec_fido", spec_fido },
+ { "spec_guard", spec_guard },
+ { "spec_janitor", spec_janitor },
+ { "spec_mayor", spec_mayor },
+ { "spec_poison", spec_poison },
+ { "spec_repairman", spec_repairman },
+ { "spec_thief", spec_thief },
+
+ /*
+ * End of list.
+ */
+ { "", 0 }
+};
+
+
/*
* Core procedure for dragons.
@@ -200,7 +240,8 @@ bool spec_cast_adept( CHAR_DATA *ch )
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
@@ -274,7 +315,8 @@ bool spec_cast_cleric( CHAR_DATA *ch )
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
@@ -329,7 +371,8 @@ bool spec_cast_judge( CHAR_DATA *ch )
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
@@ -361,7 +404,8 @@ bool spec_cast_mage( CHAR_DATA *ch )
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
@@ -417,7 +461,8 @@ bool spec_cast_undead( CHAR_DATA *ch )
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
@@ -798,7 +843,8 @@ bool spec_cast_psionicist( CHAR_DATA *ch
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
@@ -873,7 +919,8 @@ bool spec_cast_ghost( CHAR_DATA *ch )
return FALSE;
if ( IS_AFFECTED( ch, AFF_MUTE )
- || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
+ || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE )
+ || IS_SET( ch->in_room->room_flags, ROOM_TEMP_CONE_OF_SILENCE ) )
return FALSE;
for ( victim = ch->in_room->people; victim; victim = victim->next_in_room )
diff -u -p stock/start src/start
--- stock/start Tue Dec 26 23:17:56 1995
+++ src/start Sun May 11 19:26:41 1997
@@ -1,3 +1,3 @@
#! /bin/csh -f
-nohup /EnvyMud/src/startup 1234 >! /EnvyMud/log/errors.out &
+nohup ../src/startup 1234 >! ../log/errors.out &
diff -u -p stock/startup src/startup
--- stock/startup Tue Dec 26 23:17:56 1995
+++ src/startup Sun May 11 19:26:01 1997
@@ -8,7 +8,7 @@ set port = 4000
if ( "$1" != "" ) set port="$1"
# Change to area directory.
-cd /EnvyMud/area
+cd ../area
# Set limits.
nohup
diff -u -p stock/startupSH src/startupSH
--- stock/startupSH Tue Dec 26 23:17:56 1995
+++ src/startupSH Sun May 11 19:27:07 1997
@@ -53,7 +53,7 @@ do
# Run envy.
# Thanks to Alan and Grodyn for their help on the redirecting stuff - Loki
- ../src/envy $port >$logfile 2>&1
+ ../src/envy2 $port >$logfile 2>&1
if [ -r core ]
then
Only in src: string.c
diff -u -p stock/update.c src/update.c
--- stock/update.c Tue Dec 26 23:17:56 1995
+++ src/update.c Sun May 11 19:04:40 1997
@@ -1061,6 +1061,7 @@ void time_update( void )
}
if ( current_time > down_time )
{
+ do_asave( NULL, "" ); /* OLC */
sprintf( buf, "%s by system.\n\r", Reboot ? "Reboot" : "Shutdown" );
send_to_all_char( buf );
log_string( buf );
@@ -1319,6 +1320,14 @@ void update_handler( void )
static int pulse_mobile;
static int pulse_violence;
static int pulse_point;
+ static int pulse_db_dump; /* OLC 1.1b */
+
+ /* OLC 1.1b */
+ if ( --pulse_db_dump <= 0 )
+ {
+ pulse_db_dump = PULSE_DB_DUMP;
+ do_asave( NULL, "" );
+ }
if ( --pulse_area <= 0 )
{