/* read vendor from file */
CHAR_DATA * fread_vendor( FILE *fp )
{
CHAR_DATA *mob = NULL;
char *word;
bool fMatch;
int inroom = 0;
ROOM_INDEX_DATA *pRoomIndex = NULL;
CHAR_DATA *victim;
CHAR_DATA *vnext;
char buf [MAX_INPUT_LENGTH];
char vnum1 [MAX_INPUT_LENGTH];
word = feof( fp ) ? "Endvendor" : fread_word( fp );
if ( !strcmp(word, "Vnum") )
{
int vnum;
vnum = fread_number( fp );
mob = create_mobile( get_mob_index(vnum));
if ( !mob )
{
for ( ; ; )
{
word = feof( fp ) ? "Endvendor" : fread_word( fp );
if ( !strcmp( word, "Endvendor" ) )
break;
}
bug("Fread_mobile: No index data for vnum %d", vnum );
return NULL;
}
}
else
{
for ( ; ; )
{
word = feof( fp ) ? "Endvendor" : fread_word( fp );
if ( !strcmp( word, "Endvendor" ) )
break;
}
extract_char(mob, TRUE);
bug("Fread_vendor: Vnum not found", 0 );
return NULL;
}
for ( ; ;)
{
word = feof( fp ) ? "Endvendor" : fread_word( fp );
fMatch = FALSE;
switch ( UPPER(word[0]) )
{
case '*':
fMatch = TRUE;
fread_to_eol( fp );
break;
case '#':
if ( !strcmp( word, "#OBJECT" ) )
{
fread_obj ( mob, fp, OS_CARRY );
}
break;
case 'D':
KEY( "Description", mob->description, fread_string(fp));
break;
case 'E':
if ( !strcmp( word, "Endvendor" ) )
{
if ( inroom == 0 )
inroom = ROOM_VNUM_VENSTOR;
mob->home = get_room_index(inroom);
pRoomIndex = get_room_index( inroom );
if ( !pRoomIndex )
{
pRoomIndex = get_room_index( ROOM_VNUM_VENSTOR );
mob->home = get_room_index( ROOM_VNUM_VENSTOR );
}
mob->in_room = pRoomIndex;
/* the following code is to make sure no more then one player owned vendor
is in the room - meckteck */
for ( victim = mob->in_room->first_person; victim; victim = vnext )
{
vnext = victim->next_in_room;
if (victim->home != NULL)
{
extract_char( victim, TRUE);
break;
}
}
char_to_room(mob, pRoomIndex);
sprintf(vnum1,"%d", mob->pIndexData->vnum);
do_makeshop (mob, vnum1 );
sprintf (buf, mob->long_descr, mob->owner);
mob->long_descr = STRALLOC( buf );
mob->hit = 10000;
mob->max_hit = 10000;
return mob;
}
break;
case 'F':
KEY( "Flags", mob->act, fread_bitvector(fp));
break;
case 'G':
KEY("Gold", mob->gold, fread_number(fp));
break;
case 'H':
KEY("Home", inroom, fread_number(fp) );
break;
case 'L':
KEY( "Long", mob->long_descr, fread_string(fp ) );
break;
case 'O':
KEY ("Owner", mob->owner, fread_string (fp) );
break;
case 'P':
KEY( "Position", mob->position, fread_number( fp ) );
break;
case 'S':
KEY( "Short", mob->short_descr, fread_string(fp));
break;
}
if ( !fMatch )
{
bug ( "Fread_mobile: no match.", 0 );
bug ( word, 0 );
}
}
return NULL;
}
Here's fread_vendor if needed.
Toy |