Den selben fehler hatte ich auch schonmal.
Öffne in der Neuz folgende Funktion in der
TerrainMng.ccp
Code:
BOOL CTerrainMng::LoadScript( LPCTSTR lpszFileName )
Und ersetze die gesammte Funktion hiermit:
Code:
BOOL CTerrainMng::LoadScript( LPCTSTR lpszFileName )
{
CScanner scanner;
if(scanner.Load(lpszFileName, FALSE )==FALSE)
return FALSE;
LPTERRAIN lpTerrain;
//m_nSize = 0;
int nBrace = 1;
scanner.SetMark();
int i = scanner.GetNumber(); // folder or id
// ÇöÀç´Â ¹°¸¸ ÀÌ·± ÇüÅÂÀÇ ÇÁ·¹ÀÓÀ» »ç¿ëÇÒ °ÍÀ̶ó´Â ÀüÁ¦ÇÏ¿¡
// Çϳª¸¸ µÇ¾î ÀÖÁö¸¸ ¿©·¯°³¸¦ »ç¿ëÇÒ¶§´Â ÀÌ ºÎºÐÀ» ±¸Á¶Ã¼³ª
// Ŭ·¡½º·Î ¹Ù²Ù¾î¼* ´Ù½Ã ¸¸µé¾î¾ß ÇÒ°ÍÀÌ´Ù.
int FrameCnt = 0, ImageCnt = 0, IdCnt = 0;
FrameCnt = scanner.GetNumber();
if ( nBrace == 1 && FrameCnt )
{
m_nWaterFrame = FrameCnt;
m_pWaterIndexList = new WaterTexList[ m_nWaterFrame ];
ZeroMemory( m_pWaterIndexList, m_nWaterFrame * sizeof( WaterTexList ) );
}
while( nBrace )
{
if( *scanner.token == '}' || scanner.tok == FINISHED )
{
nBrace--;
if( nBrace > 0 )
{
scanner.SetMark();
i = scanner.GetNumber(); // folder or id
//if( i > m_nSize ) m_nSize = i;
FrameCnt = scanner.GetNumber();
IdCnt = 0;
if ( nBrace == 1 && FrameCnt )
{
m_nWaterFrame = FrameCnt;
m_pWaterIndexList = new WaterTexList[ m_nWaterFrame ];
ZeroMemory( m_pWaterIndexList, m_nWaterFrame * sizeof( WaterTexList ) );
ImageCnt = 0;
}
else if ( nBrace == 2 && FrameCnt )
{
m_pWaterIndexList[ImageCnt].ListCnt = FrameCnt;
#if __VER >= 14 // __WATER_EXT
m_pWaterIndexList[ImageCnt].fWaterFrame = 0.15f;
#endif //__WATER_EXT
m_pWaterIndexList[ImageCnt].pList = new int[ FrameCnt ];
ZeroMemory( m_pWaterIndexList[ImageCnt].pList, FrameCnt * sizeof(int) );
ImageCnt++;
}
continue;
}
if( nBrace == 0 )
continue;
}
//i = _ttoi( scanner.token );
scanner.GetToken(); // { or filename
if( *scanner.token == '{' )
{
nBrace++;
scanner.SetMark();
i = scanner.GetNumber(); // id
// ¿©±â¼* Ãß°¡ÇÏ´Â ¹æ¹ýÀÌ °ýÈ£ÈÄ¿¡ ¹Ù·Î ¹®ÀÚ¿*ÀÌ ¿ÀÁö ¸øÇÏ°Ô ÇÏ´Â °Í »ÓÀεíÇÏ´Ù.
// ¸¶Ä§ µðÆúÆ®´Â °ýÈ£ ´ÙÀ½¿¡ ¿À´Â °ÍÀÌ ¾Æ´Ñ »óÅÂÀ̱⠶§¹®¿¡ °¡´ÉÇÏ´Ù.
FrameCnt = scanner.GetNumber(); // Count
if ( i == 0 )
{
if ( nBrace == 2 && FrameCnt )
{
m_pWaterIndexList[ImageCnt].ListCnt = FrameCnt;
#if __VER >= 14 // __WATER_EXT
m_pWaterIndexList[ImageCnt].fWaterFrame = 0.15f;
#endif //__WATER_EXT
m_pWaterIndexList[ImageCnt].pList = new int[ FrameCnt ];
ImageCnt++;
}
}
//if( i > m_nSize ) m_nSize = i;
continue;
}
else
{
scanner.GoMark();
i = scanner.GetNumber(); // id
//if( i > m_nSize ) m_nSize = i;
FrameCnt = scanner.GetNumber(); // Count
if ( nBrace == 3 )
{
m_pWaterIndexList[ImageCnt - 1].pList[IdCnt] = i;
IdCnt++;
}
}
lpTerrain = &m_aTerrain[ i ];
lpTerrain->m_dwId = i;
scanner.GetToken(); // texture fileName
strcpy( lpTerrain->m_szTextureFileName, scanner.token );
lpTerrain->m_bBlock = scanner.GetNumber(); // block
scanner.GetToken(); // sound
strcpy( lpTerrain->m_szSoundFileName, scanner.token );
scanner.SetMark();
i = scanner.GetNumber(); // texture fileName
//if( i > m_nSize ) m_nSize = i;
}
/*
int i = scanner.GetNumber( TRUE ); // id
while( scanner.tok != FINISHED )
{
lpTerrain = &m_aTerrain[ i ];
lpTerrain->m_dwId = i;
scanner.GetToken( TRUE ); // texture fileName
strcpy( lpTerrain->m_szTextureFileName, scanner.token );
lpTerrain->m_bBlock = scanner.GetNumber( TRUE ); // block
scanner.GetToken( TRUE ); // sound
strcpy( lpTerrain->m_szSoundFileName, scanner.token );
i = scanner.GetNumber( TRUE ); // texture fileName
if( i > m_nSize ) m_nSize = i;
}
*/
//m_nSize++;
return TRUE;
}
Das hat nichts mit fehlenden Terrain zu tun, irgendwie spackt der Loader einfach nur.