Exemple #1
0
void load_songs(void)
{
    FILE *fp;
    int count = 0, lines, i;
    char letter;

    /* reset global */
    for (i = 0; i <= MAX_GLOBAL; i++)
	channel_songs[i] = -1;

    if ((fp = fopen(MUSIC_FILE,"r")) == NULL)
    {
	bug("Couldn't open music file, no songs available.",0);
	fclose(fp);
	return;
    }

    for (count = 0; count < MAX_SONGS; count++)
    {
        letter = fread_letter(fp);
        if (letter == '#')
        {
            if (count < MAX_SONGS)
                song_table[count].name = NULL;
            fclose(fp);
            return;
        }
  	else
	    ungetc(letter,fp);

	song_table[count].group = fread_string(fp);
	song_table[count].name 	= fread_string(fp);

	/* read lyrics */
	lines = 0;

	for ( ; ;)
	{
	    letter = fread_letter(fp);

	    if (letter == '~')
	    {
		song_table[count].lines = lines;
		break;
	    }
	    else
		ungetc(letter,fp);
		
	    if (lines >= MAX_LINES)
   	    {
		bug("Too many lines in a song -- limit is  %d.",MAX_LINES);
		break;
	    }

	    song_table[count].lyrics[lines] = fread_string_eol(fp);
	    lines++;
	}
    }
}
Exemple #2
0
void read_exits( FILE* fp, room_data* room, int vnum )
{
  exit_data*    exit;
  char        letter;

  for( ; ; ) {
    if( ( letter = fread_letter( fp ) ) != 'D' )
      break;

    exit = add_exit( room, fread_number( fp ) );

    exit->name        = fread_string( fp, MEM_EXIT );
    exit->keywords    = fread_string( fp, MEM_EXIT );
    exit->exit_info   = fread_number( fp );
    exit->key         = fread_number( fp );
    exit->to_room     = (room_data*) fread_number( fp );
    exit->strength    = fread_number( fp );
    exit->light       = fread_number( fp );
    exit->size        = fread_number( fp );

    if( exit->direction < 0 || exit->direction > 6 ) 
      panic( "Fread_rooms: vnum %d has bad door number.", vnum );
    }

  ungetc( letter, fp );
}
Exemple #3
0
void load_illegal()
{
    FILE *fp;
    ILLEGAL_DATA *p;
    char kar;

    illegal_first = NULL;

    fclose(fpReserve);
    fp = fopen(NAME_FILE, "r");

    if (!fp)
	return;

    do {
	kar = fread_letter(fp);

	if (kar == EOF)
	    break;

	if (kar == '#' || kar == '$' || kar == '@') {
	    p = alloc_mem(sizeof(ILLEGAL_DATA));
	    p->mode = kar;
	    p->word = str_dup(fread_word(fp));
	    p->next = illegal_first;
	    illegal_first = p;
	}
    }
    while (kar != EOF);

    fclose(fp);
    fpReserve = fopen(NULL_FILE, "r");
}
Exemple #4
0
/*
 * Snarf spec proc declarations.
 */
void load_specials( FILE *fp )
{
    for ( ; ; )
    {
	MOB_INDEX_DATA *pMobIndex;
	char letter;

	switch ( letter = fread_letter( fp ) )
	{
	default:
	    bug( "Load_specials: letter '%c' not *MS.", letter );
	    exit( 1 );

	case 'S':
	    return;

	case '*':
	    break;

	case 'M':
	    pMobIndex		= get_mob_index	( fread_number ( fp ) );
	    pMobIndex->spec_fun	= spec_lookup	( fread_word   ( fp ) );
	    if ( pMobIndex->spec_fun == 0 )
	    {
		bug( "Load_specials: 'M': vnum %d.", pMobIndex->vnum );
		exit( 1 );
	    }
	    break;
	}

	fread_to_eol( fp );
    }
}
Exemple #5
0
/*
 * Load a realm file
 */
bool load_realm_file( const char *realmfile )
{
   char filename[256];
   realm_data *realm;
   FILE *fp;
   bool found;

   realm = new realm_data;

   clean_realm( realm );  /* Default settings so we don't get wierd ass stuff */

   found = false;
   snprintf( filename, 256, "%s%s", REALM_DIR, realmfile );

   if( ( fp = fopen( filename, "r" ) ) != nullptr )
   {
      found = true;
      for( ;; )
      {
         char letter;
         char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "%s: # not found.", __func__ );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "REALM" ) )
            fread_realm( realm, fp );
         else if( !str_cmp( word, "ROSTER" ) )
            fread_realm_memberlist( realm, fp );
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "%s: bad section: %s.", __func__, word );
            break;
         }
      }
      FCLOSE( fp );
   }

   if( found )
      realmlist.push_back( realm );
   else
      deleteptr( realm );

   return found;
}
Exemple #6
0
/* Snarf a MOBprogram section from the area file.
 */
bool load_mobprogs( FILE *fp )
{
    MOB_INDEX_DATA *iMob;
    MPROG_DATA     *original;
    MPROG_DATA     *working;
    char            letter;
    int             value;
    int		  stat;
    bool            koniec = FALSE;

    while ( !koniec )
    {
	letter = fread_letter( fp );
	switch ( letter )
	{
	    default:
		cbug( "Load_mobprogs: bad command '%c'.", letter );
		return TRUE;
	    case 'S':
	    case 's':
		fread_to_eol( fp );
		koniec = TRUE;
		break;
	    case '*':
		fread_to_eol( fp );
		break;
	    case 'M':
	    case 'm':
		value = fread_number( fp, &stat );
		if ( ( iMob = get_mob_index( value ) ) == NULL )
		{
		    cbug( "Load_mobprogs: vnum %d doesnt exist", value );
		    return TRUE;
		}

		/* Go to the end of the prog command list if other commands
		   exist */
		if ( ( original = iMob->mobprogs ) )
		    for ( ; original->next != NULL; original = original->next )
			;

		working = new_mprog( );
		if ( original )
		    original->next = working;
		else
		    iMob->mobprogs = working;
		working = mprog_file_read( fread_word( fp, &stat, TRUE ), working, iMob, 0 );
		if ( !working )
		    return TRUE;
		working->next = NULL;
		fread_to_eol( fp );
		break;
	}
    }

    return FALSE;
}
Exemple #7
0
void load_herb_table(  )
{
   FILE *fp;

   if( ( fp = fopen( HERB_FILE, "r" ) ) != NULL )
   {
      top_herb = 0;
      for( ;; )
      {
         char letter;
         const char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "Load_herb_table: # not found.", 0 );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "HERB" ) )
         {
            if( top_herb >= MAX_HERB )
            {
               bug( "load_herb_table: more herbs than MAX_HERB %d", MAX_HERB );
               fclose( fp );
               return;
            }
            herb_table[top_herb++] = fread_skill( fp, FALSE );
            if( herb_table[top_herb - 1]->slot == 0 )
               herb_table[top_herb - 1]->slot = top_herb - 1;
            continue;
         }
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "Load_herb_table: bad section.", 0 );
            continue;
         }
      }
      fclose( fp );
   }
   else
   {
      bug( "Cannot open herbs.dat", 0 );
      exit( 0 );
   }
}
Exemple #8
0
void load_socials( void )
{
    FILE *fp;
    int   stat;
    char  strsave [ MAX_INPUT_LENGTH ];

    fclose( fpReserve );

    sprintf( strsave, "%s%s", SYSTEM_DIR, SOCIAL_FILE );

    if ( !( fp = fopen( strsave, "r" ) ) )
    {
	bug( "Cannot open SOCIALS.TXT", 0 );
	exit( 0 );
    }

    for ( ; ; )
    {
	int   letter;
	char *word;

	letter = fread_letter( fp );

	if ( letter == '*' )
	{
	    fread_to_eol( fp );
	    continue;
	}

	if ( letter != '#' )
	{
	    bug( "Load_socials: # not found.", 0 );
	    break;
	}

	word = fread_word( fp, &stat );
	if ( !str_cmp( word, "SOCIAL" ) )
	{
	    fread_social( fp );
	    continue;
	}
	else
	if ( !str_cmp( word, "END" ) )
	    break;
	else
	{
	    bug( "Load_socials: bad section.", 0 );
	    continue;
	}
    }
    
    fclose( fp );
    fpReserve = fopen( NULL_FILE, "r" );
    return;
}
Exemple #9
0
void load_disciplines(  )
{
   FILE *fp;

   if( ( fp = fopen( DISCIPLINE_FILE, "r" ) ) != NULL )
   {
      for( ;; )
      {
         char letter;
         const char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "Load_disciplines: # not found.", 0 );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "DISCIPLINE" ) )
         {
            DISC_DATA *discipline;
            if( ( discipline = fread_discipline( fp ) ) == NULL )
            {
               bug( "Huge error loading disciplines.", 0 );
               fclose( fp );
               return;
            }
            LINK( discipline, first_discipline, last_discipline, next, prev );
            continue;
         }
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "Load_disciplines: bad section.", 0 );
            continue;
         }
      }
      fclose( fp );
   }
   else
   {
      bug( "Cannot open discipline.dat", 0 );
      exit( 0 );
   }
   return;
}
area_data *fread_smaugfuss_area( FILE * fp )
{
   area_data *tarea = nullptr;

   for( ;; )
   {
      char letter;
      const char *word;

      letter = fread_letter( fp );
      if( letter == '*' )
      {
         fread_to_eol( fp );
         continue;
      }

      if( letter != '#' )
      {
         bug( "%s: # not found. Invalid format.", __func__ );
         if( fBootDb )
            exit( 1 );
         break;
      }

      word = ( feof( fp ) ? "ENDAREA" : fread_word( fp ) );

      if( word[0] == '\0' )
      {
         bug( "%s: EOF encountered reading file!", __func__ );
         word = "ENDAREA";
      }

      if( !str_cmp( word, "AREADATA" ) )
      {
         tarea = create_area(  );
         tarea->filename = str_dup( strArea );
         fread_fuss_areadata( fp, tarea );
      }
      else if( !str_cmp( word, "MOBILE" ) )
         fread_fuss_mobile( fp, tarea );
      else if( !str_cmp( word, "OBJECT" ) )
         fread_fuss_object( fp, tarea );
      else if( !str_cmp( word, "ROOM" ) )
         fread_fuss_room( fp, tarea );
      else if( !str_cmp( word, "ENDAREA" ) )
         break;
      else
      {
         bug( "%s: Bad section header: %s", __func__, word );
         fread_to_eol( fp );
      }
   }
   return tarea;
}
Exemple #11
0
void load_skill_table(  )
{
   FILE *fp;

   if( ( fp = fopen( SKILL_FILE, "r" ) ) != NULL )
   {
      top_sn = 0;
      for( ;; )
      {
         char letter;
         const char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "Load_skill_table: # not found.", 0 );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "SKILL" ) )
         {
            if( top_sn >= MAX_SKILL )
            {
               bug( "load_skill_table: more skills than MAX_SKILL %d", MAX_SKILL );
               fclose( fp );
               return;
            }
            skill_table[top_sn++] = fread_skill( fp, FALSE );
            continue;
         }
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "Load_skill_table: bad section.", 0 );
            continue;
         }
      }
      fclose( fp );
   }
   else
   {
      bug( "Cannot open skills.dat", 0 );
      exit( 0 );
   }
}
Exemple #12
0
/* Load time information from saved file - Samson 1-21-99 */
bool load_timedata( void )
{
   char filename[256];
   FILE *fp;
   bool found;

   found = FALSE;
   snprintf( filename, 256, "%stime.dat", SYSTEM_DIR );

   if( ( fp = fopen( filename, "r" ) ) != NULL )
   {

      found = TRUE;
      for( ;; )
      {
         char letter = '\0';
         char *word = NULL;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "%s", "Load_timedata: # not found." );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "TIME" ) )
         {
            fread_timedata( fp );
            break;
         }
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "Load_timedata: bad section - %s.", word );
            break;
         }
      }
      fclose( fp );
   }

   return found;
}
Exemple #13
0
void load_news(  )
{
    FILE                   *fpin = FileOpen( NEWS_FILE, "r" );

    if ( fpin == NULL ) {
        bug( "Cannot open news.dat for reading." );
        perror( NEWS_FILE );
        return;
    }

    for ( ;; ) {
        char                    letter;
        char                   *word;
        NEWS_DATA              *news;

        letter = fread_letter( fpin );

        if ( letter == '*' ) {
            fread_to_eol( fpin );
            continue;
        }

        if ( letter != '#' ) {
            bug( "Load_news: # not found." );
            break;
        }

        word = ( feof( fpin ) ? ( char * ) "End" : fread_word( fpin ) );

        if ( !str_cmp( word, "News" ) ) {
            news = fread_news( fpin );

            if ( news != NULL )
                LINK( news, first_news, last_news, next, prev );
        }
        else if ( !str_cmp( word, "HTML" ) ) {
            USE_HTML_NEWS = fread_number( fpin ) == 1 ? TRUE : FALSE;
        }
        else if ( !str_cmp( word, "End" ) ) {
            FileClose( fpin );
            break;
        }
        else {
            bug( "Load_news: bad section encountered." );
            break;
        }
    }
}
Exemple #14
0
void load_quest_list( void )
{
    FILE                   *fp;

    if ( ( fp = FileOpen( QUESTS_FILE, "r" ) ) != NULL ) {

        for ( ;; ) {
            char                    letter;
            char                   *word;
            int                     x;

            letter = fread_letter( fp );
            if ( letter == '*' ) {
                fread_to_eol( fp );
                continue;
            }

            if ( letter != '#' ) {
                bug( "%s", "Load_quest_list: # not found." );
                break;
            }

            word = fread_word( fp );

            if ( !str_cmp( word, "QUEST" ) ) {
                fread_quest( FALSE, fp );
                continue;
            }
            else if ( !str_cmp( word, "NQUEST" ) ) {
                fread_quest( TRUE, fp );
                continue;
            }
            else if ( !str_cmp( word, "END" ) )
                break;
            else {
                bug( "%s", "Load_quest_list: bad section." );
                continue;
            }
        }
        FileClose( fp );
    }
    else {
        perror( QUESTS_FILE );
        bug( "%s", "Cannot open quests.dat" );
        exit( 0 );
    }
}
Exemple #15
0
void load_commands(  )
{
   FILE *fp;

   if( ( fp = fopen( COMMAND_FILE, "r" ) ) != NULL )
   {
      for( ;; )
      {
         char letter;
         const char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "Load_commands: # not found.", 0 );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "COMMAND" ) )
         {
            fread_command( fp );
            continue;
         }
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "Load_commands: bad section.", 0 );
            continue;
         }
      }
      fclose( fp );
   }
   else
   {
      bug( "Cannot open commands.dat", 0 );
      exit( 0 );
   }

}
Exemple #16
0
/*
 * Load the MSSP data file
 */
bool load_mssp_data( void )
{
    char                    filename[MAX_INPUT_LENGTH];
    FILE                   *fp;
    bool                    found;

    CREATE( mssp_info, struct mssp_info, 1 );

    found = FALSE;
    sprintf( filename, "%s", MSSP_FILE );

    if ( ( fp = FileOpen( filename, "r" ) ) != NULL ) {
        found = TRUE;

        for ( ;; ) {
            char                    letter;
            char                   *word;

            letter = fread_letter( fp );
            if ( letter == '*' ) {
                fread_to_eol( fp );
                continue;
            }

            if ( letter != '#' ) {
                bug( "%s: # not found.", __FUNCTION__ );
                break;
            }

            word = fread_word( fp );
            if ( !str_cmp( word, "MSSP_INFO" ) ) {
                fread_mssp_info( fp );
                break;
            }
            else if ( !str_cmp( word, "END" ) )
                break;
            else {
                bug( "%s: bad section.", __FUNCTION__ );
                break;
            }
        }
        FileClose( fp );
    }

    return found;
}
int main(int argc, char** argv) {

  if(sqlite3_open("murk.db", &database)) {
    std::cerr << "Can't open database: " << sqlite3_errmsg(database) << std::endl;
    sqlite3_close(database);
    return 1;
  }
  std::ifstream fp;
  fp.open (strArea.c_str(), std::ifstream::in | std::ifstream::binary);
  if (!fp.is_open()) {
    std::cerr << "Can't find " << strArea << std::endl;
  }
  for (;;) {
    if (fread_letter (fp) != '#') {
      std::cerr << "# not found." << std::endl;
    }
    std::string word = fread_word (fp);
    if (word[0] == '$')
      break;
    else if (word == "HELPS") {
      for (;;) {
        int level = fread_number (fp);
        std::string keyword = fread_string (fp);
        if (keyword[0] == '$')
          break;
        std::string text = fread_string (fp);
        char * z;
        if (text[0] == '.')
          z = sqlite3_mprintf("INSERT INTO 'helps' VALUES(%d,'%q','%q')",
            level, keyword.c_str(), text.substr(1).c_str());
        else
          z = sqlite3_mprintf("INSERT INTO 'helps' VALUES(%d,'%q','%q')",
            level, keyword.c_str(), text.c_str());
        sqlite3_exec(database, z, 0, 0, 0);
        sqlite3_free(z);
      }
    } else {
      std::cerr << "Load helps: bad section name." << std::endl;
    }
  }
  fp.close();
  sqlite3_close(database);
  return 0;
}
Exemple #18
0
void read_pfile( char *dirname, char *filename, bool count )
{
   FILE *fp;
   char fname[256];
   struct stat fst;
   time_t tdiff;

   now_time = time( 0 );

   snprintf( fname, 256, "%s/%s", dirname, filename );

   if( stat( fname, &fst ) != -1 )
   {
      tdiff = ( now_time - fst.st_mtime ) / 86400;

      if( ( fp = fopen( fname, "r" ) ) != NULL )
      {
         for( ;; )
         {
            char letter;
            const char *word;

            letter = fread_letter( fp );

            if( ( letter != '#' ) && ( !feof( fp ) ) )
               continue;

            word = feof( fp ) ? "End" : fread_word( fp );

            if( !str_cmp( word, "End" ) )
               break;

            if( !str_cmp( word, "PLAYER" ) )
               fread_pfile( fp, tdiff, fname, count );
            else if( !str_cmp( word, "END" ) )  /* Done */
               break;
         }
         fclose( fp );
         fp = NULL;
      }
   }
   return;
}
Exemple #19
0
void read_fpfile( CHAR_DATA * ch, char *dirname, char *filename )
{
  FILE *fp;
  char fname[MSL];
  struct stat fst;

  sprintf( fname, "%s/%s", dirname, filename );

  if( !str_suffix(".home1", filename) || !str_suffix(".home2", filename) || !str_suffix(".home3", filename) || !str_suffix(".clone", filename) )
    return;


  if ( stat( fname, &fst ) != -1 )
  {

    if ( ( fp = fopen ( fname, "r" ) ) != NULL )
    {
      for ( ; ; )
	{
	    char letter;
	    char *word;

	    letter = fread_letter( fp );
	    
	    if ( ( letter != '#' ) && ( !feof( fp ) ) )
             continue;

	    word = feof( fp ) ? "End" : fread_word( fp );

            if ( !str_cmp( word, "End" ) )
		break;

	    if ( !str_cmp( word, "PLAYER" ) )
	    	fread_fpfile( ch, fp, fname );
	    else
	    if ( !str_cmp( word, "END" ) )	/* Done		*/
		break;
	}
	FCLOSE( fp );
    }
  }
  return;
}
Exemple #20
0
/*
 * Snarf a shop section.
 */
void load_shops_circle( FILE *fp ) {
  SHOP_DATA *pShop;

  log_stringf(" SHOPS");
  bool OLD = TRUE;
  for ( ; ; ) {
    MOB_INDEX_DATA *pMobIndex;
    int iTrade = 0;

    pShop = new_shop();

    //    log_stringf("====START");

    bool stop = FALSE;
    while (1) {
      char c = fread_letter(fp);
      //      log_stringf("=>[%c]", c );
      if ( c == '0' ) { // If shopvnum is 0: end of shop section
	stop = TRUE;
	break;
      }
      else if ( c == '#' ) {
	const char *s = fread_string(fp);
	//	log_stringf("->[%s]", s );
	break;
      }
      else if ( c < '0' || c > '9' ) { // File starts with a string
	ungetc(c,fp);
	const char *s = fread_string(fp);
	if ( !str_prefix("CircleMUD v3.0 Shop File",s) )
	  OLD = FALSE;
	log_stringf("))[%s]  [%d]", s, !str_prefix( "CircleMUD v3.0 Shop File", s ) );
      }
      else {
	int x = fread_number(fp); // should never happens
	//	log_stringf(">>>[%d]", x );
	break;
      }
    }
    if (stop)
      break;
    log_stringf("OLD: %s", OLD?"yes":"no");
    // Skips infinite obj vnum
    int count = 0;
    while (1) {
      int tmp = fread_number(fp);
      if ( tmp == -1 )
	break;
      count++;
      if ( count >= 5 && OLD )
	break;
    }

    pShop->profit_buy	= (int)(fread_float( fp )*100.0);
    pShop->profit_sell	= (int)(fread_float( fp )*100.0);

    // Read item type
    while (1) {
      //int tmp = fread_number(fp); fread_to_eol(fp); // skips end of line (special ShopV3 format)
      int tmp = 0;
      char letter = fread_letter(fp);
      if ( ( letter >= '0' && letter <= '9' ) || letter == '-' ) { // if we read a number -> item_type
	ungetc(letter,fp);
	tmp = fread_number(fp);
      }
      else                                    // else -> skips
	fread_to_eol(fp);
      if ( tmp == -1 )
	break;
      if ( iTrade < MAX_TRADE )
	pShop->buy_type[iTrade++]	= item_type_circle(tmp);
      else
	log_stringf("Too many item type, [%d] not stored", tmp );
      if ( iTrade >= 5 && OLD )
	break;
    }
    
    // Skips 7 string
    for ( int i = 0; i < 7; i++ ) {
      const char *s = fread_string(fp);
    }

    fread_number(fp); // skips temper
    fread_number(fp); // skips shop bitvector
    pShop->keeper		= fread_number( fp ); // get shop mob vnum
    fread_number(fp); // skips with who bitvector
    // skips shop room vnum
    while (1) {
      int tmp = fread_number(fp);
      if ( tmp == -1 )
	break;
      if ( OLD ) // only one shop vnum for OLD format
	break;
    }
    pShop->open_hour	= URANGE(0,fread_number( fp ),23); // get opening hour
    pShop->close_hour	= URANGE(0,fread_number( fp ),23);
    fread_number(fp); // skips second opening hour
    fread_number(fp); //  "

    pMobIndex		= get_mob_index( pShop->keeper );
    pMobIndex->pShop	= pShop;

    if ( shop_first == NULL )
      shop_first = pShop;
    if ( shop_last  != NULL )
      shop_last->next = pShop;

    shop_last	= pShop;
    pShop->next	= NULL;
  }

  return;
}
Exemple #21
0
void read_obj_file( char *dirname, char *filename )
{
   ROOM_INDEX_DATA *room;
   FILE *fp;
   char fname[256];
   int vnum;

   vnum = atoi( filename );

   if( ( room = get_room_index( vnum ) ) == NULL )
   {
      bug( "read_obj_file: ARGH! Missing room index for %d!", vnum );
      return;
   }

   snprintf( fname, 256, "%s%s", dirname, filename );
   if( ( fp = fopen( fname, "r" ) ) != NULL )
   {
      short iNest;
      bool found;
      OBJ_DATA *tobj, *tobj_next;

      rset_supermob( room );
      for( iNest = 0; iNest < MAX_NEST; iNest++ )
         rgObjNest[iNest] = NULL;

      found = TRUE;
      for( ;; )
      {
         char letter;
         const char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "%s", "read_obj_file: # not found." );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "OBJECT" ) ) /* Objects  */
            fread_obj( supermob, fp, OS_CARRY );
         else if( !str_cmp( word, "END" ) )  /* Done     */
            break;
         else
         {
            bug( "read_obj_file: bad section: %s", word );
            break;
         }
      }
      FCLOSE( fp );
      unlink( fname );
      for( tobj = supermob->first_carrying; tobj; tobj = tobj_next )
      {
         tobj_next = tobj->next_content;
#ifdef OVERLANDCODE
         if( IS_OBJ_STAT( tobj, ITEM_ONMAP ) )
         {
            SET_ACT_FLAG( supermob, ACT_ONMAP );
            supermob->map = tobj->map;
            supermob->x = tobj->x;
            supermob->y = tobj->y;
         }
#endif
         obj_from_char( tobj );
#ifndef OVERLANDCODE
         obj_to_room( tobj, room );
#else
         obj_to_room( tobj, room, supermob );
         REMOVE_ACT_FLAG( supermob, ACT_ONMAP );
         supermob->map = -1;
         supermob->x = -1;
         supermob->y = -1;
#endif
      }
      release_supermob(  );
   }
   else
      log_string( "Cannot open obj file" );

   return;
}
Exemple #22
0
/* Load the slay file */
void load_slays( void )
{
   char filename[256];
   SLAY_DATA *slay;
   FILE *fp;
   int slaycount;

   first_slay = NULL;
   last_slay = NULL;

   snprintf( filename, 256, "%s%s", SYSTEM_DIR, SLAY_FILE );

   if( ( fp = fopen( filename, "r" ) ) != NULL )
   {
      slaycount = 0;
      for( ;; )
      {
         char letter;
         char *word;

         letter = fread_letter( fp );
         if( letter == '*' )
         {
            fread_to_eol( fp );
            continue;
         }

         if( letter != '#' )
         {
            bug( "%s", "Load_slay_file: # not found." );
            break;
         }

         word = fread_word( fp );
         if( !str_cmp( word, "SLAY" ) )
         {
            if( slaycount >= MAX_SLAY_TYPES )
            {
               bug( "load_slays: more slaytypes than MAX_SLAY_TYPES %d", MAX_SLAY_TYPES );
               fclose( fp );
               fp = NULL;
               return;
            }
            CREATE( slay, SLAY_DATA, 1 );
            fread_slay( slay, fp );
            slaycount++;
            LINK( slay, first_slay, last_slay, next, prev );
            continue;
         }
         else if( !str_cmp( word, "END" ) )
            break;
         else
         {
            bug( "Load_slay_file: bad section: %s", word );
            continue;
         }
      }
      fclose( fp );
      fp = NULL;
   }
   return;
}
Exemple #23
0
void load_objects( void )
{
  FILE*                 fp;
  obj_clss_data*  obj_clss;
  oprog_data*        oprog;
  char              letter;
  int                    i;
  int                 vnum;

  echo( "Loading Objects ...\r\n" );
  vzero( obj_index_list, MAX_OBJ_INDEX );

  fp = open_file( AREA_DIR, OBJECT_FILE, "r", TRUE );

  if( strcmp( fread_word( fp ), "#OBJECTS" ) ) 
    panic( "Load_objects: header not found" );

  for( ; ; ) {
    letter = fread_letter( fp );

    if( letter != '#' ) 
      panic( "Load_objects: # not found." );

    if( ( vnum = fread_number( fp ) ) == 0 )
      break;
   
    if( vnum < 0 || vnum >= MAX_OBJ_INDEX ) 
      panic( "Load_objects: vnum out of range." );

    if( obj_index_list[vnum] != NULL ) 
      panic( "Load_objects: vnum %d duplicated.", vnum );

    obj_clss = new obj_clss_data;
 
    obj_index_list[vnum]  = obj_clss;
    obj_clss->vnum        = vnum;
    obj_clss->fakes       = vnum;

    obj_clss->singular         = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->plural           = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->before           = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->after            = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->long_s           = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->long_p           = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->prefix_singular  = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->prefix_plural    = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->creator          = fread_string( fp, MEM_OBJ_CLSS );
    obj_clss->last_mod         = fread_string( fp, MEM_OBJ_CLSS );      

    obj_clss->item_type       = fread_number( fp );
    obj_clss->fakes           = fread_number( fp );
    obj_clss->extra_flags[0]  = fread_number( fp );
    obj_clss->extra_flags[1]  = fread_number( fp );
    obj_clss->wear_flags      = fread_number( fp );
    obj_clss->anti_flags      = fread_number( fp );
    obj_clss->restrictions    = fread_number( fp );
    obj_clss->size_flags      = fread_number( fp );
    obj_clss->materials       = fread_number( fp );

    obj_clss->affect_flags[0] = fread_number( fp );
    obj_clss->affect_flags[1] = fread_number( fp );
    obj_clss->affect_flags[2] = fread_number( fp );
    obj_clss->layer_flags     = fread_number( fp );

    obj_clss->value[0]      = fread_number( fp );
    obj_clss->value[1]      = fread_number( fp );
    obj_clss->value[2]      = fread_number( fp );
    obj_clss->value[3]      = fread_number( fp );

    obj_clss->weight        = fread_number( fp );
    obj_clss->cost          = fread_number( fp );
    obj_clss->level         = fread_number( fp );
    obj_clss->limit         = fread_number( fp );
    obj_clss->repair        = fread_number( fp );
    obj_clss->durability    = fread_number( fp );
    obj_clss->blocks        = fread_number( fp );
    obj_clss->light         = fread_number( fp );

    obj_clss->date          = fread_number( fp );

    read_affects( fp, obj_clss ); 
    read_extra( fp, obj_clss->extra_descr );

    fread_letter( fp );

    for( ; ; ) {
      int number = fread_number( fp );

      if( number == -1 )
        break;

      oprog = new oprog_data;
      append( obj_clss->oprog, oprog );

      oprog->trigger  = number;
      oprog->obj_vnum = fread_number( fp );
      oprog->command  = fread_string( fp, MEM_OPROG );
      oprog->target   = fread_string( fp, MEM_OPROG );
      oprog->code     = fread_string( fp, MEM_OPROG );

      read_extra( fp, oprog->data );
      }       

    fix( obj_clss );
    }

  fclose( fp );

  for( i = 0; i < MAX_OBJ_INDEX; i++ ) 
    if( obj_index_list[i] != NULL )
      for( oprog = obj_index_list[i]->oprog; oprog != NULL;
        oprog = oprog->next )
        if( oprog->obj_vnum > 0 )
          oprog->obj_act = get_obj_index( oprog->obj_vnum );
 
  return;
}
Exemple #24
0
// Added by SinaC 2003 for  Circle style
void load_room_circle( FILE *fp ) {
  ROOM_INDEX_DATA *pRoomIndex;

  log_stringf(" ROOMS");

  if ( area_last == NULL ) {
    bug( "Load_room_circle: no #AREA seen yet.");
    exit( 1 );
  }

  for ( ; ; ) {
    int vnum;
    char letter;
    int door;
    int iHash;
    char *ln;
    int x1, x2, x3, x4, x5, x6;

    letter				= fread_letter( fp );
    if ( letter != '#' ) {
      bug( "Load_room_circle: # not found.");
      exit( 1 );
    }

    vnum				= fread_number( fp );
    if ( vnum == 0 )
      break;

    fBootDb = FALSE;
    if ( get_room_index( vnum ) != NULL ) {
      bug( "Load_room_circle: vnum %d duplicated.", vnum );
      exit( 1 );
    }
    fBootDb = TRUE;

    //    pRoomIndex			= (ROOM_INDEX_DATA *) alloc_perm( sizeof(*pRoomIndex) );
    pRoomIndex = new_room_index();
    pRoomIndex->guild		= 0; /* Not a guild */
    pRoomIndex->owner		= str_dup("");
    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 );

    pRoomIndex->bstat(flags)		= fread_flag_circle(fp);
    pRoomIndex->bstat(sector)		= fread_number(fp);
    pRoomIndex->bstat(maxsize)		= SIZE_NOSIZE;

    pRoomIndex->bstat(light)		= 0;
    for ( door = 0; door < MAX_DIR; door++ ) // Modified by SinaC 2003
      pRoomIndex->exit[door] = NULL;

    // Modified by SinaC 2003
    /* defaults */
    pRoomIndex->bstat(healrate) = 100;
    pRoomIndex->bstat(manarate) = 100;
    // Added by SinaC 2003 for mental user
    pRoomIndex->bstat(psprate) = 100;

    for ( ; ; ) {
      EXIT_DATA *pexit;
      int locks;
      EXTRA_DESCR_DATA *ed;
    
      letter = fread_letter( fp );

      if ( letter == 'S' )
	break;
	    
      switch ( letter ) {
      case 'D' : 
	door = fread_number( fp );
	if ( door < 0 || door >= MAX_DIR ) { // Modified by SinaC 2003
	  bug( "Load_room_circle: vnum %d has bad door number.", vnum );
	  exit( 1 );
	}

	if ( door == DIR_SPECIAL )
	  log_stringf("DIR_SPECIAL found for room vnum: %d.", vnum );

	//	pexit			= (EXIT_DATA *) alloc_perm( sizeof(*pexit) );
	pexit = new_exit();
	pexit->description	= fread_string( fp );
	pexit->keyword		= fread_string( fp );
	pexit->exit_info	= 0;
	pexit->rs_flags         = 0;                    /* OLC */
	locks			= fread_number(fp);
	pexit->key		= fread_number(fp);
	pexit->u1.vnum		= fread_number(fp);
	pexit->orig_door	= door;			/* OLC */

	switch ( locks ) {
	case 1: pexit->exit_info = pexit->rs_flags = EX_ISDOOR; break;
	case 2: pexit->exit_info = pexit->rs_flags = EX_ISDOOR | EX_PICKPROOF; break;
	default: pexit->exit_info = pexit->rs_flags = locks;
	  break;
	}

	convert_exit_circle(pexit);
	// SinaC 2003
	if ( IS_SET( pexit->exit_info, EX_CLIMB ) )
	  log_stringf("Room [%d], exit [%d] has CLIMB flag.",
		      vnum, door );

	pRoomIndex->exit[door]	= pexit;
	pRoomIndex->old_exit[door] = pexit;
	break;

      case 'E' :
	//	ed			= (EXTRA_DESCR_DATA *) alloc_perm( sizeof(*ed) );
	ed = new_extra_descr();
	ed->keyword		= fread_string( fp );
	ed->description		= fread_string( fp );
	ed->next		= pRoomIndex->extra_descr;
	pRoomIndex->extra_descr	= ed;
	break;

      default :	    
	bug( "Load_room_circle: vnum %d has unknown flag.", vnum );
	exit( 1 );
      }
    }

    while (1) {
      letter = fread_letter( fp );
      if ( letter == 'T' ) { // Script
	int scriptVnum = fread_number( fp );
	char buf[MAX_STRING_LENGTH];
	sprintf( buf, "room%d", scriptVnum );
	pRoomIndex->program = hash_get_prog(buf);
	if (!pRoomIndex->program)
	  bug("Can't find program for room vnum %d.", pRoomIndex->vnum);
	else {
	  if ( get_root_class( pRoomIndex->program ) != default_room_class ) {
	    bug("program for mob vnum %d is not a room program.", pRoomIndex->vnum);
	    pRoomIndex->program = NULL;
	  }
	  else
	    if ( pRoomIndex->program->isAbstract )
	      bug("program for room vnum %d is an ABSTRACT class.", pRoomIndex->vnum );
	}
      }
      else {
	ungetc(letter,fp);
	break;
      }
    }

    convert_room_circle(pRoomIndex);

    iHash			= vnum % MAX_KEY_HASH;
    pRoomIndex->next	= room_index_hash[iHash];
    room_index_hash[iHash]	= pRoomIndex;
    top_vnum_room = top_vnum_room < vnum ? vnum : top_vnum_room; /* OLC */
    assign_area_vnum( vnum );                                    /* OLC */
  }

  return;
}
Exemple #25
0
// Added by SinaC 2003 for  Circle style
void load_reset_circle( FILE *fp ) {
  RESET_DATA *pReset;
  int         iLastRoom = 0;
  int         iLastObj  = 0;
  int         iLastObj2  = 0;

  log_stringf(" RESETS");

  if ( !area_last ) {
    bug( "Load_reset_circle: no #AREA seen yet.");
    exit( 1 );
  }

  for ( ; ; ) {
    ROOM_INDEX_DATA *pRoomIndex;
    char letter;
    OBJ_INDEX_DATA *temp_index;
    /* int temp; */

    if ( ( letter = fread_letter( fp ) ) == 'S' )
      break;

    if ( letter == '*' ) {
      fread_to_eol( fp );
      continue;
    }
	
    //    pReset		= (RESET_DATA *) alloc_perm( sizeof(*pReset) );
    pReset = new_reset_data();
    pReset->command	= letter;

           fread_number( fp ); // not used
    pReset->arg1	= fread_number( fp );
    pReset->arg2	= fread_number( fp );
    pReset->arg3	= (letter == 'G' || letter == 'R') ? 0 : fread_number( fp );
    fread_to_eol( fp );
    pReset->arg4 = pReset->arg2;
    
    /*
     * Validate parameters.
     * We're calling the index functions for the side effect.
     */
    switch ( letter ) {
    default:
      bug( "Load_reset_circle: bad command '%c'.", letter );
      exit( 1 );
      break;

    case 'M':
      //get_mob_index  ( pReset->arg1 );  Circle areas may use mob from areas which will be read later
      /*	    get_room_index ( pReset->arg3 ); */
      // fix added by SinaC 2003
      if ( pReset->arg2 == 0 || pReset->arg4 == 0 )
	bug("reset M has arg2 equals to 0 (room: %d)", pReset->arg3);

      if ( ( pRoomIndex = get_room_index ( pReset->arg3 ) ) ) {
	new_reset( pRoomIndex, pReset );
	iLastRoom = pReset->arg3;
      }
      break;

    case 'O':
      //temp_index = get_obj_index ( pReset->arg1 ); // same for obj
      //temp_index->reset_num++; 
      if ( ( pRoomIndex = get_room_index ( pReset->arg3 ) ) ) {
	new_reset( pRoomIndex, pReset );
	iLastObj = pReset->arg3;
	iLastObj2 = pReset->arg1;
      }
      break;

    case 'P':
      //temp_index = get_obj_index  ( pReset->arg1 ); // same for obj
      //temp_index->reset_num++;
      //get_obj_index  ( pReset->arg1 );
      if ( pReset->arg3 == 0 ) {
	log_stringf("reset P has arg3 equals to 0, fixing to: %d", iLastObj2 );
	pReset->arg3 = iLastObj2;
      }
      if ( pReset->arg2 == 0 || pReset->arg4 == 0 )
	bug("reset P has arg2 equals to 0 (room: %d)", iLastObj);

      if ( ( pRoomIndex = get_room_index ( iLastObj ) ) ) {
	new_reset( pRoomIndex, pReset );
      }
      break;

    case 'G':
    case 'E':
      //temp_index = get_obj_index  ( pReset->arg1 ); // same for obj
      //temp_index->reset_num++; 
      if ( ( pRoomIndex = get_room_index ( iLastRoom ) ) ) {
	new_reset( pRoomIndex, pReset );
	iLastObj = iLastRoom;
	iLastObj2 = pReset->arg1;
      }
      break;

    case 'D': {
      pRoomIndex = get_room_index( pReset->arg1 );
      EXIT_DATA *pexit = NULL;

      if ( pReset->arg2 < 0
	   ||   pReset->arg2 >= MAX_DIR // > (MAX_DIR - 1)  SinaC 2003
	   || !pRoomIndex
	   || !( pexit = pRoomIndex->exit[pReset->arg2] )
	   || !IS_SET( pexit->rs_flags, EX_ISDOOR ) ) {
	if ( pexit == NULL ) {
	  bug("Load_reset_circle: 'D': exit from room [%d] not found", pReset->arg1 );
	  exit(1);
	}
	else
	  bug( "Load_reset_circle: 'D': exit %d not door.", pReset->arg2 );
	break;
	//exit( 1 );
      }

      switch ( pReset->arg3 ) {
      default:
	bug( "Load_reset_circle: 'D': bad 'locks': %d." , pReset->arg3);
      case 0: break;
      case 1:
	SET_BIT( pexit->rs_flags, EX_CLOSED );
	SET_BIT( pexit->exit_info, EX_CLOSED ); break;
      case 2:
	SET_BIT( pexit->rs_flags, EX_CLOSED | EX_LOCKED );
	SET_BIT( pexit->exit_info, EX_CLOSED | EX_LOCKED ); break;
      }

      break;
    }
    case 'R':
      break;
    }
  }
  
  return;
}
Exemple #26
0
// Added by SinaC 2003 for  Circle style
void load_mob_circle( FILE *fp ) {
  MOB_INDEX_DATA *pMobIndex;
 
  log_stringf(" MOBILES");

  if ( !area_last ) {   /* OLC */
    bug( "Load_mob_circle: no #AREA seen yet.");
    exit( 1 );
  }

  for ( ; ; ) {
    int vnum;
    char letter;
    int iHash;
 
    letter                          = fread_letter( fp );
    if ( letter != '#' ) {
      bug( "Load_mob_circle: # not found.");
      exit( 1 );
    }
 
    vnum                            = fread_number( fp );
    if ( vnum == 0 )
      break;
 
    fBootDb = FALSE;
    if ( get_mob_index( vnum ) != NULL ) {
      bug( "Load_mob_circle: vnum %d duplicated.", vnum );
      exit( 1 );
    }
    fBootDb = TRUE;
 
    //    pMobIndex                       = (MOB_INDEX_DATA*) alloc_perm( sizeof(*pMobIndex) );
    pMobIndex = new_mob_index();
    pMobIndex->vnum                 = vnum;

    pMobIndex->area                 = area_last;               /* OLC */
    pMobIndex->new_format		= TRUE;
    newmobs++;
    pMobIndex->player_name          = fread_string( fp );
    pMobIndex->short_descr          = fread_string( fp );
    pMobIndex->long_descr           = fread_string_upper( fp );
    pMobIndex->description          = fread_string_upper( fp );

    // Added by SinaC 2003
    pMobIndex->classes              = 0;

    pMobIndex->act                  = fread_flag_circle( fp );
    pMobIndex->affected_by          = fread_flag_circle( fp );
    // Added by SinaC 2003
    pMobIndex->affected2_by          = 0;

    pMobIndex->pShop                = NULL;
    // Added by SinaC 2003
    pMobIndex->align.etho           = 0;
    pMobIndex->align.alignment       = fread_number( fp );

    letter = fread_letter( fp ); // mobile type S or E

    pMobIndex->group                = 0;

    pMobIndex->level                = fread_number( fp );

    // Added by SinaC 2003
    if ( pMobIndex->level < pMobIndex->area->low_range )
      pMobIndex->area->low_range = pMobIndex->level;
    if ( pMobIndex->level > pMobIndex->area->high_range )
      pMobIndex->area->high_range = pMobIndex->level;


           fread_number( fp );   // thac0  not used
    pMobIndex->ac[AC_PIERCE] = fread_number( fp ); // ac
    pMobIndex->ac[AC_BASH]   = pMobIndex->ac[AC_PIERCE];
    pMobIndex->ac[AC_SLASH]  = pMobIndex->ac[AC_PIERCE];
    pMobIndex->ac[AC_EXOTIC] = pMobIndex->ac[AC_PIERCE];

    /* read hit dice */
    pMobIndex->hit[DICE_NUMBER]     = fread_number( fp );  
    /* 'd'          */                fread_letter( fp ); 
    pMobIndex->hit[DICE_TYPE]       = fread_number( fp );
    /* '+'          */                fread_letter( fp );   
    pMobIndex->hit[DICE_BONUS]      = fread_number( fp ); 

    pMobIndex->mana[DICE_NUMBER]= 0;
    pMobIndex->mana[DICE_TYPE]	= 0;
    pMobIndex->mana[DICE_BONUS]	= 0;

    pMobIndex->psp[DICE_NUMBER]	= 0;
    pMobIndex->psp[DICE_TYPE]	= 0;
    pMobIndex->psp[DICE_BONUS]	= 0;

    /* read damage dice */
    pMobIndex->damage[DICE_NUMBER]	= fread_number( fp );
    fread_letter( fp );
    pMobIndex->damage[DICE_TYPE]	= fread_number( fp );
    fread_letter( fp );
    pMobIndex->damage[DICE_BONUS]	= fread_number( fp );

    //pMobIndex->wealth		= fread_number( fp ) * 100;  *100 was not needed
    pMobIndex->wealth		= fread_number( fp );
          fread_number(fp);  // Xp not used

    pMobIndex->start_pos		= fread_number(fp);
    pMobIndex->default_pos		= fread_number(fp);
    pMobIndex->sex			= fread_number(fp);
    
    if ( letter != 'S' && letter != 'E' ) {
      bug("Invalid letter (%c) for mob (%d), valid letter are S or E", letter, pMobIndex->vnum );
      exit(-1);
    }

    pMobIndex->race = 0;
    pMobIndex->hitroll = 0;
    pMobIndex->res_flags = 0;
    pMobIndex->imm_flags = 0;
    pMobIndex->vuln_flags = 0;
    if ( letter == 'E' ) { // complex mob
      while(1) {
	char *ln = fread_line( fp );
	if ( ln[0] == 'E' )
	  break;
      }
    }

    while(1) {
      letter = fread_letter( fp );
      if ( letter == 'T' ) { // Script
	int scriptVnum = fread_number( fp );
	char buf[MAX_STRING_LENGTH];
	sprintf( buf, "mob%d", vnum );
	pMobIndex->program = hash_get_prog(buf);
	if (!pMobIndex->program)
	  bug("Can't find program for mob vnum %d.", pMobIndex->vnum);
	else {
	  if ( get_root_class( pMobIndex->program ) != default_mob_class ) {
	    bug("program for mob vnum %d is not a mob program.", pMobIndex->vnum);
	    pMobIndex->program = NULL;
	  }
	  else
	    if ( pMobIndex->program->isAbstract )
	      bug("program for mob vnum %d is an ABSTRACT class.", pMobIndex->vnum );
	}
      }
      else {
	ungetc(letter,fp);
	break;
      }
    }

    convert_mob_circle( pMobIndex );

    iHash                   = vnum % MAX_KEY_HASH;
    pMobIndex->next         = mob_index_hash[iHash];
    mob_index_hash[iHash]   = pMobIndex;
    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++;
  }
 
  return;
}
Exemple #27
0
/*
 * Snarf a room section.
 */
void load_rooms( FILE *fp )
{
    ROOM_INDEX_DATA *pRoomIndex;

    if ( area_last == NULL )
    {
	bug( "Load_resets: no #AREA seen yet.", 0 );
	exit( 1 );
    }

    for ( ; ; )
    {
	sh_int vnum;
	char letter;
	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 ) != NULL )
	{
	    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 );
	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' )
		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 );
		pexit->exit_info	= 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;
		}

		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++;
    }

    return;
}
Exemple #28
0
/*
 * Snarf an obj section.  old style 
 */
void load_obj_circle( FILE *fp ) {
  OBJ_INDEX_DATA *pObjIndex;
  char *word;

  log_stringf(" OBJECTS");

  if ( !area_last ) {  /* OLC */
    bug( "Load_obj_circle: no #AREA seen yet.");
    exit( 1 );
  }

  for ( ; ; ) {
    int vnum;
    char letter;
    int iHash;
    int x1, x2, x3, x4, x5, x6;

    letter				= fread_letter( fp );
    if ( letter != '#' ) {
      bug( "Load_obj_circle: # not found.");
      exit( 1 );
    }

    vnum				= fread_number( fp );
    if ( vnum == 0 )
      break;

    fBootDb = FALSE;
    if ( get_obj_index( vnum ) != NULL ) {
      bug( "Load_obj_circle: vnum %d duplicated.", vnum );
      exit( 1 );
    }
    fBootDb = TRUE;

    pObjIndex = new_obj_index();
    pObjIndex->vnum			= vnum;
    pObjIndex->area                 = area_last;            /* OLC */
    pObjIndex->new_format		= FALSE;
    pObjIndex->reset_num	 	= 0;
    newobjs++;
    pObjIndex->name			= fread_string( fp );
    pObjIndex->short_descr		= fread_string_lower( fp );
    pObjIndex->description		= fread_string_upper( fp );
    fread_string( fp ); // unused:  action desc

    pObjIndex->material = 0;

    pObjIndex->item_type		= fread_number( fp );
    pObjIndex->extra_flags		= fread_flag_circle( fp );
    pObjIndex->wear_flags		= fread_flag_circle( fp );
    fread_flag_circle(fp); // unused ?

    pObjIndex->size = SIZE_NOSIZE;
    
    pObjIndex->value[0]		= fread_number(fp);
    pObjIndex->value[1]		= fread_number(fp);
    pObjIndex->value[2]		= fread_number(fp);
    pObjIndex->value[3]		= fread_number(fp);

    pObjIndex->weight		= UMAX( 1, fread_number( fp ) );
    pObjIndex->cost			= fread_number( fp );
    fread_number( fp ); // unused:  rent/day
    fread_number(fp); // unused ?

    pObjIndex->condition = 100;
    pObjIndex->level = 1;

    for ( ; ; ) {
      letter = fread_letter( fp );

      if ( letter == 'A' ) {
	AFFECT_DATA *paf;
	
	paf = new_affect();
	createaff(*paf,-1,20,-1,0,AFFECT_INHERENT);
	addaff2(*paf,AFTO_CHAR,fread_number( fp ),AFOP_ADD,fread_number( fp ));
	//paf->where              = AFTO_CHAR;
	//paf->op                 = AFOP_ADD;
	//paf->type		= -1;
	//paf->level		= 20; /* RT temp fix */
	//paf->duration		= -1;
	//paf->location         = fread_number( fp );
	//paf->modifier		= fread_number( fp );

	convert_af_circle( paf );
	
	paf->next		= pObjIndex->affected;
	pObjIndex->affected	= paf;
      }
      else if ( letter == 'E' )	{
	EXTRA_DESCR_DATA *ed;
	
	//	ed			= (EXTRA_DESCR_DATA *) alloc_perm( sizeof(*ed) );
	ed = new_extra_descr();
	ed->keyword		= fread_string( fp );
	ed->description		= fread_string( fp );
	ed->next		= pObjIndex->extra_descr;
	pObjIndex->extra_descr	= ed;
      }
      else if ( letter == 'T' ) { // script
	int scriptVnum = fread_number( fp );
	char buf[MAX_STRING_LENGTH];
	sprintf( buf, "obj%d", scriptVnum );
	pObjIndex->program = hash_get_prog(buf);
	if (!pObjIndex->program)
	  bug("Can't find program for obj vnum %d.", pObjIndex->vnum);
	else {
	  if ( get_root_class( pObjIndex->program ) != default_obj_class ) {
	    bug("program for obj vnum %d is not a mob program." ,pObjIndex->vnum);
	    pObjIndex->program = NULL;
	  }
	  else
	    if ( pObjIndex->program->isAbstract )
	      bug("program for Obj vnum %d is an ABSTRACT class.", pObjIndex->vnum );
	}
      }
      else {
	ungetc( letter, fp );
	break;
      }
    }

    switch ( pObjIndex->item_type ) {
    case CIRCLE_ITEM_POTION:
    case CIRCLE_ITEM_SCROLL:
      pObjIndex->value[1] = slot_lookup( pObjIndex->value[1] );
      pObjIndex->value[2] = slot_lookup( pObjIndex->value[2] );
      pObjIndex->value[3] = slot_lookup( pObjIndex->value[3] );
      break;
      
    case CIRCLE_ITEM_STAFF:
    case CIRCLE_ITEM_WAND:
      pObjIndex->value[3] = slot_lookup( pObjIndex->value[3] );
      break;
    }

    convert_obj_circle( pObjIndex );

    iHash			= vnum % MAX_KEY_HASH;
    pObjIndex->next		= obj_index_hash[iHash];
    obj_index_hash[iHash]	= pObjIndex;
    top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj;   /* OLC */
    assign_area_vnum( vnum );                                   /* OLC */
  }

  return;
}
Exemple #29
0
void do_finger( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    CHAR_DATA *victim;
    FILE *fp;
    bool fOld;

    one_argument( argument, arg );

    if ( arg[0] == '\0' )
    {
	send_to_char( "Finger whom?\n\r", ch );
	return;
    }

    if ( ( victim = get_char_world( ch, arg ) ) != NULL)
    {
	if (!IS_NPC(victim))
	{
	    act( "$N is on right now!", ch, NULL, victim, TO_CHAR );
	    return;
	}
    }

    victim = new_char();
    victim->pcdata = new_pcdata();
    fOld = FALSE;
    
    sprintf( buf, "%s%s", PLAYER_DIR, capitalize( arg ) );
    if ( ( fp = fopen( buf, "r" ) ) != NULL )
    {
	int iNest;

	for ( iNest = 0; iNest < MAX_NEST; iNest++ )
	    rgObjNest[iNest] = NULL;

	fOld = TRUE;
	for ( ; ; )
	{
	    char letter;
	    char *word;

	    letter = fread_letter( fp );
	    if ( letter == '*' )
	    {
		fread_to_eol( fp );
		continue;
	    }

	    if ( letter != '#' )
	    {
		bug( "Load_char_obj: # not found.", 0 );
		break;
	    }

	    word = fread_word( fp );
	    if      ( !str_cmp( word, "PLAYER" ) ) fread_char( victim, fp );
	    else if ( !str_cmp( word, "OBJECT" ) ) break;
	    else if ( !str_cmp( word, "O"      ) ) break;
	    else if ( !str_cmp( word, "PET"    ) ) break;
	    else if ( !str_cmp( word, "END"    ) ) break;
	    else
	    {
		bug( "Load_char_obj: bad section.", 0 );
		break;
	    }
	}
	fclose( fp );
    }
    if ( !fOld )
    {
	send_to_char("No player by that name exists.\n\r",ch);
	free_pcdata(victim->pcdata);
	free_char(victim);
	return;
    }
    if ( (victim->level > LEVEL_HERO) && (victim->level > ch->level) )
    {
	send_to_char("The gods wouldn't like that.\n\r",ch);
	free_pcdata(victim->pcdata);
	free_char(victim);
	return;
    }
    sprintf(buf,"%s last logged off on %s",
	victim->name, (char *) ctime(&victim->llogoff));
    send_to_char(buf,ch);
    free_pcdata(victim->pcdata);
    free_char(victim);
    return;
}
Exemple #30
0
/* load the linked list from disk */
void load_news( void )
{
   FILE *fp = NULL;
   char filename[256];

   sprintf( filename, "%s%s", SYSTEM_DIR, NEWS_FILE );
   if( ( fp = fopen( filename, "r" ) ) == NULL )
   {
      perror( "load_news(): cannot open file" );
      return;
   }

   for( ;; )
   {
      NEWS_TYPE *type = NULL;
      NEWS *news = NULL;
      char *word;
      char letter;

      letter = fread_letter( fp );

      if( letter == '*' )
      {
         fread_to_eol( fp );
         continue;
      }

      if( letter != '#' )
      {
         bug( "load_news(): # not found" );
         break;
      }

      word = fread_word( fp );

      if( !str_cmp( word, "NEWS" ) )
      {
         CREATE( news, NEWS, 1 );
         news->type = -1;

         fread_news( news, fp );
         link_news_to_type( news );
         continue;
      }
      /*
       * added for new indexing - 5/5/02 
       */
      else if( !str_cmp( word, "NEWSTYPE" ) )
      {
         CREATE( type, NEWS_TYPE, 1 );

         fread_news_type( type, fp );
         LINK( type, first_news_type, last_news_type, next, prev );
         continue;
      }
      if( !str_cmp( word, "END" ) )
         break;
      else
      {
         bug( "load_news(): unknown section %s", word );
         continue;
      }
   }
   fclose( fp );
   fp = NULL;
   renumber_news(  );
   return;
}