Ejemplo n.º 1
0
/// @todo Repair major memory leaks when returning FALSE
sint32 UnitSpriteGroup::Parse(uint16 id, GROUPTYPE type)
{
	MBCHAR			scriptName[k_MAX_NAME_LENGTH];

	MBCHAR			*facedImageNames[k_NUM_FACINGS][k_MAX_NAMES];
	MBCHAR			*facedShadowNames[k_NUM_FACINGS][k_MAX_NAMES];

	MBCHAR			*imageNames[k_MAX_NAMES];
	MBCHAR			*shadowNames[k_MAX_NAMES];

	size_t			i;
    size_t          j;

	char			prefixStr[80];

	
	for (j=0; j<k_NUM_FACINGS; j++) 
	{
		for (i=0; i<k_MAX_NAMES; i++) 
		{
			facedImageNames[j][i] =  new MBCHAR[2 * k_MAX_NAME_LENGTH];
			facedShadowNames[j][i] = new MBCHAR[2 * k_MAX_NAME_LENGTH];
		}
	}

	for (i=0; i<k_MAX_NAMES; i++) 
	{
		imageNames[i] =  new MBCHAR[2 * k_MAX_NAME_LENGTH];
		shadowNames[i] = new MBCHAR[2 * k_MAX_NAME_LENGTH];
	}

	sprintf(prefixStr, ".%s%d%s", FILE_SEP, id, FILE_SEP);

	if (type == GROUPTYPE_UNIT)
	{
		sprintf(scriptName, "GU%.3d.txt", id);

		
		if (!c3files_PathIsValid(scriptName))
			sprintf(scriptName, "GU%.2d.txt", id);
	}
	else 
		sprintf(scriptName, "GC%.3d.txt", id);

	printf("Processing '%s'\n", scriptName);

	Token	* theToken = new Token(scriptName, C3DIR_SPRITES); 
	Assert(theToken); 
	if (!theToken) return FALSE; 
	
	sint32 tmp; 

	if (!token_ParseKeywordNext(theToken, TOKEN_UNIT_SPRITE)) return FALSE; 

	if (!token_ParseAnOpenBraceNext(theToken)) return FALSE; 

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_MOVE, tmp)) return FALSE;    
	
	if (tmp) 
	{
		Assert(type == GROUPTYPE_UNIT);
		
		if (type != GROUPTYPE_UNIT) 
		{
			printf("\n Illegal unit action (Move) for a city sprite.\n");
			return FALSE;
		}

		
		FacedSprite *moveSprite = new FacedSprite;
		
		
		moveSprite->ParseFromTokens(theToken);

		printf(" [Move");
		for (j=0; j<k_NUM_FACINGS; j++) 
		{
			for (size_t k = 0; k < moveSprite->GetNumFrames(); ++k) 
			{
				if (!GetImageFileName(facedShadowNames[j][k],"%sGU%#.3dMS%d.%d", prefixStr,  id, j+1, k+moveSprite->GetFirstFrame()))
					GetImageFileName(facedShadowNames[j][k] ,"%sGU%#.2dMS%d.%d", prefixStr,  id, j+1, k+moveSprite->GetFirstFrame());
				
				if (!GetImageFileName(facedImageNames[j][k], "%sGU%#.3dMA%d.%d", prefixStr, id,  j+1, k+moveSprite->GetFirstFrame()))
					GetImageFileName(facedImageNames[j][k] , "%sGU%#.2dMA%d.%d", prefixStr, id,  j+1, k+moveSprite->GetFirstFrame());
			}
		}

		
		moveSprite->Import(moveSprite->GetNumFrames(), facedImageNames, facedShadowNames);

		delete m_sprites[UNITACTION_MOVE];
		m_sprites[UNITACTION_MOVE] = moveSprite;
		printf("]\n");

		Anim *moveAnim = new Anim;

		moveAnim->ParseFromTokens(theToken);
		delete m_anims[UNITACTION_MOVE];
		m_anims[UNITACTION_MOVE] = moveAnim;
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_ATTACK, tmp)) return FALSE;    
	if (tmp) 
	{
		Assert(type == GROUPTYPE_UNIT);
		
		if (type != GROUPTYPE_UNIT) 
		{
			printf("\n Illegal unit action (Attack) for a city sprite.\n");
			return FALSE;
		}
		
		if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_ATTACK_IS_DIRECTIONAL, tmp)) return FALSE;
		if (tmp) 
			m_hasDirectional = TRUE;
		else 
			m_hasDirectional = FALSE;

		
		FacedSprite *attackSprite = new FacedSprite;
		
		
		attackSprite->ParseFromTokens(theToken);

		printf(" [Attack");
		for (j=0; j<k_NUM_FACINGS; j++) 
		{
			for(i=0; i<attackSprite->GetNumFrames(); i++) 
			{
				if (!GetImageFileName(facedShadowNames[j][i],"%sGU%#.3dAS%d.%d", prefixStr, id, j+1, i+attackSprite->GetFirstFrame()))
					GetImageFileName (facedShadowNames[j][i],"%sGU%#.2dAS%d.%d", prefixStr, id, j+1, i+attackSprite->GetFirstFrame());
				
				if (!GetImageFileName(facedImageNames [j][i],"%sGU%#.3dAA%d.%d", prefixStr, id, j+1, i+attackSprite->GetFirstFrame()))
					GetImageFileName (facedImageNames [j][i],"%sGU%#.2dAA%d.%d", prefixStr, id, j+1, i+attackSprite->GetFirstFrame());
			}
		}

		
		attackSprite->Import(attackSprite->GetNumFrames(), facedImageNames, facedShadowNames);

		delete m_sprites[UNITACTION_ATTACK];
		m_sprites[UNITACTION_ATTACK] = attackSprite;
		printf("]\n");

		Anim *attackAnim = new Anim;

		attackAnim->ParseFromTokens(theToken);
		delete m_anims[UNITACTION_ATTACK];
		m_anims[UNITACTION_ATTACK] = attackAnim;
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_IDLE, tmp)) return FALSE;    
	if (tmp) 
	{
		Sprite *idleSprite = new Sprite;
		idleSprite->ParseFromTokens(theToken);

		if (type == GROUPTYPE_UNIT) 
		{
			printf(" [Idle");
		  
			for (size_t n = 0; n < idleSprite->GetNumFrames(); ++n) 
			{
				if (!GetImageFileName(imageNames[n] ,"%sGU%#.3dIA%d.%d", prefixStr, id, 4, n + idleSprite->GetFirstFrame()))
					GetImageFileName (imageNames[n] ,"%sGU%#.2dIA%d.%d", prefixStr, id, 4, n + idleSprite->GetFirstFrame());
				if (!GetImageFileName(shadowNames[n],"%sGU%#.3dIS%d.%d", prefixStr, id, 4, n + idleSprite->GetFirstFrame()))
					GetImageFileName (shadowNames[n],"%sGU%#.2dIS%d.%d", prefixStr, id, 4, n + idleSprite->GetFirstFrame());
			}
		} 
		else if (type == GROUPTYPE_CITY) 
		{
			printf(" [City");

			for (size_t n = 0; n < idleSprite->GetNumFrames(); ++n) 
			{
				GetImageFileName(shadowNames[n], "%sGC%#.3dS.%d", prefixStr, id, n + idleSprite->GetFirstFrame());
				GetImageFileName(imageNames[n] , "%sGC%#.3dA.%d", prefixStr, id, n + idleSprite->GetFirstFrame());
			}
		} 
		else 
		{
			Assert(FALSE);
		}

		idleSprite->Import(idleSprite->GetNumFrames(), imageNames, shadowNames);
		delete m_sprites[UNITACTION_IDLE];
		m_sprites[UNITACTION_IDLE] = idleSprite;
		printf("]\n");

		Anim *idleAnim = new Anim;

		idleAnim->ParseFromTokens(theToken);
		delete m_anims[UNITACTION_IDLE];
		m_anims[UNITACTION_IDLE] = idleAnim;
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_VICTORY, tmp)) return FALSE;    
	if (tmp) 
	{
		Assert(type == GROUPTYPE_UNIT);
		
		if (type != GROUPTYPE_UNIT) 
		{
			printf("\n Illegal unit action (Victory) for a city sprite.\n");
			return FALSE;
		}

		Sprite *victorySprite = new Sprite;

		if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_IS_DEATH, tmp)) return FALSE;
		SetHasDeath(0 != tmp);

		victorySprite->ParseFromTokens(theToken);

		printf(" [Victory");
		for(size_t n = 0; n < victorySprite->GetNumFrames(); ++n) 
		{			
			if (!GetImageFileName(shadowNames[n],"%sGU%#.3dVS%d.%d", prefixStr, id, 4, n + victorySprite->GetFirstFrame()))
				GetImageFileName (shadowNames[n],"%sGU%#.2dVS%d.%d", prefixStr, id, 4, n + victorySprite->GetFirstFrame());
			if (!GetImageFileName(imageNames[n], "%sGU%#.3dVA%d.%d", prefixStr, id, 4, n + victorySprite->GetFirstFrame()))
				GetImageFileName (imageNames[n], "%sGU%#.2dVA%d.%d", prefixStr, id, 4, n + victorySprite->GetFirstFrame());
		}

		victorySprite->Import(victorySprite->GetNumFrames(), imageNames, shadowNames);
		delete m_sprites[UNITACTION_VICTORY];
		m_sprites[UNITACTION_VICTORY] = victorySprite;
		printf("]\n");

		Anim *victoryAnim = new Anim;

		victoryAnim->ParseFromTokens(theToken);
		delete m_anims[UNITACTION_VICTORY];
		m_anims[UNITACTION_VICTORY] = victoryAnim;
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_WORK, tmp)) return FALSE;    
	if (tmp) 
	{
		Assert(type == GROUPTYPE_UNIT);
		if (type != GROUPTYPE_UNIT) 
		{
			printf("\n Illegal unit action (Work) for a city sprite.\n");
			return FALSE;
		}

		
		FacedSprite *workSprite = new FacedSprite;
		
		
		workSprite->ParseFromTokens(theToken);

		printf(" [Work/A2");
		for (j=0; j<k_NUM_FACINGS; j++) 
		{
			for(size_t n = 0; n < workSprite->GetNumFrames(); ++n) 
			{
				if (!GetImageFileName(facedShadowNames[j][n],"%sGU%#.3dWS%d.%d", prefixStr, id, j+1, n+workSprite->GetFirstFrame()))
					GetImageFileName (facedShadowNames[j][n],"%sGU%#.2dWS%d.%d", prefixStr, id, j+1, n+workSprite->GetFirstFrame());
				if (!GetImageFileName(facedImageNames[j][n] ,"%sGU%#.3dWA%d.%d", prefixStr, id, j+1, n+workSprite->GetFirstFrame()))
					GetImageFileName (facedImageNames[j][n] ,"%sGU%#.2dWA%d.%d", prefixStr, id, j+1, n+workSprite->GetFirstFrame());
			}
		}


		
		workSprite->Import(workSprite->GetNumFrames(), facedImageNames, facedShadowNames);

		delete m_sprites[UNITACTION_WORK];
		m_sprites[UNITACTION_WORK] = workSprite;
		printf("]\n");

		Anim *workAnim = new Anim;
		workAnim->ParseFromTokens(theToken);
		delete m_anims[UNITACTION_WORK];
		m_anims[UNITACTION_WORK] = workAnim;
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_FIREPOINTS, tmp)) return FALSE;    
	
	if (tmp) 
	{
		
	

		for (sint32 j=0; j<tmp; j++) {
			if (!token_ParseAnOpenBraceNext(theToken)) return FALSE;
			for (i=0; i<k_NUM_FACINGS; i++) {
			    token_ParsePoint(theToken);
			}
			if (!token_ParseAnCloseBraceNext(theToken)) return FALSE;
		}
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_FIREPOINTS_WORK, tmp)) return FALSE;    
	if (tmp) {
		
		m_numFirePointsWork = (uint16)tmp;

		for (sint32 j=0; j<tmp; j++) {
			if (!token_ParseAnOpenBraceNext(theToken)) return FALSE;
			for (i=0; i<k_NUM_FACINGS; i++) {
			   token_ParsePoint(theToken);
			}
			if (!token_ParseAnCloseBraceNext(theToken)) return FALSE;
		}
	}


	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_MOVEOFFSETS, tmp)) return FALSE;    
	if (tmp) {
		if (!token_ParseAnOpenBraceNext(theToken)) return FALSE;
		for (i=0; i<k_NUM_FACINGS; i++) {
			m_moveOffsets[i] = token_ParsePoint(theToken);
		}
		if (!token_ParseAnCloseBraceNext(theToken)) return FALSE;
	}

	if (!token_ParseValNext(theToken, TOKEN_UNIT_SPRITE_SHIELDPOINTS, tmp)) return FALSE;    
	if (tmp) {
		
		if (!token_ParseAnOpenBraceNext(theToken)) return FALSE;

		if (!token_ParseKeywordNext(theToken, TOKEN_UNIT_SPRITE_SHIELDPOINTS_MOVE)) return FALSE;    
		if (tmp) {
			for (i=0; i<k_NUM_FACINGS; i++) {
				m_shieldPoints[UNITACTION_MOVE][i] = token_ParsePoint(theToken);
			}
		}
		if (!token_ParseKeywordNext(theToken, TOKEN_UNIT_SPRITE_SHIELDPOINTS_ATTACK)) return FALSE;    
		if (tmp) {
			for (i=0; i<k_NUM_FACINGS; i++) {
				m_shieldPoints[UNITACTION_ATTACK][i] = token_ParsePoint(theToken);
			}
		}
		if (!token_ParseKeywordNext(theToken, TOKEN_UNIT_SPRITE_SHIELDPOINTS_IDLE)) return FALSE;    
		if (tmp) {
			for (i=0; i<k_NUM_FACINGS; i++) {
				m_shieldPoints[UNITACTION_IDLE][i] = token_ParsePoint(theToken);
			}
		}
		if (!token_ParseKeywordNext(theToken, TOKEN_UNIT_SPRITE_SHIELDPOINTS_VICTORY)) return FALSE;    
		if (tmp) {
			for (i=0; i<k_NUM_FACINGS; i++) {
				m_shieldPoints[UNITACTION_VICTORY][i] = token_ParsePoint(theToken);
			}
		}
		if (!token_ParseKeywordNext(theToken, TOKEN_UNIT_SPRITE_SHIELDPOINTS_WORK)) return FALSE;    
		if (tmp) {
			for (i=0; i<k_NUM_FACINGS; i++) {
				m_shieldPoints[UNITACTION_WORK][i] = token_ParsePoint(theToken);
			}
		}
		
		if (!token_ParseAnCloseBraceNext(theToken)) return FALSE;
	}

	

	

	delete theToken;

	for (j=0; j<k_NUM_FACINGS; j++) 
    {
		for (i=0; i<k_MAX_NAMES; i++) 
		{
			delete [] facedImageNames[j][i];
			delete [] facedShadowNames[j][i];
		}
	}

	for (i = 0; i < k_MAX_NAMES; i++) 
    {
		delete [] imageNames[i];
		delete [] shadowNames[i];
	}

	return TRUE;
}
Ejemplo n.º 2
0
sint32 OzoneDatabase::ParseUVDeadTilesRecord(Token *uvToken)
	{
	if (!token_ParseAnOpenBraceNext(uvToken))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_DESERT)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead desert tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_DESERT], m_dead_shield[DEAD_TILE_TYPE_DESERT], m_dead_trade[DEAD_TILE_TYPE_DESERT]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_FORESTS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead forests tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_FORESTS], m_dead_shield[DEAD_TILE_TYPE_FORESTS], m_dead_trade[DEAD_TILE_TYPE_FORESTS]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_GRASSLANDS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead grasslands tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_GRASSLANDS], m_dead_shield[DEAD_TILE_TYPE_GRASSLANDS], m_dead_trade[DEAD_TILE_TYPE_GRASSLANDS]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_HILLS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead hills tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_HILLS], m_dead_shield[DEAD_TILE_TYPE_HILLS], m_dead_trade[DEAD_TILE_TYPE_HILLS]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_MOUNTAINS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead mountains tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_MOUNTAINS], m_dead_shield[DEAD_TILE_TYPE_MOUNTAINS], m_dead_trade[DEAD_TILE_TYPE_MOUNTAINS]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_PLAINS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead plains tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_PLAINS], m_dead_shield[DEAD_TILE_TYPE_PLAINS], m_dead_trade[DEAD_TILE_TYPE_PLAINS]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_SWAMPS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead swamps tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_SWAMPS], m_dead_shield[DEAD_TILE_TYPE_SWAMPS], m_dead_trade[DEAD_TILE_TYPE_SWAMPS]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_TUNDRA)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead tundra tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_TUNDRA], m_dead_shield[DEAD_TILE_TYPE_TUNDRA], m_dead_trade[DEAD_TILE_TYPE_TUNDRA]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_TILE_CONTINENTAL_SHELF)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead continental shelf tile production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadTileNumbers(uvToken, m_dead_food[DEAD_TILE_TYPE_CONTINENTAL_SHELF], m_dead_shield[DEAD_TILE_TYPE_CONTINENTAL_SHELF], m_dead_trade[DEAD_TILE_TYPE_CONTINENTAL_SHELF]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_CLOSE_BRACE)
		return (FALSE) ;

	return (TRUE) ;
	}
Ejemplo n.º 3
0
sint32 OzoneDatabase::ParseUVDeadResourcesRecord(Token *uvToken)
	{
	sint32	i = 0 ;

	if (!token_ParseAnOpenBraceNext(uvToken))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_PALM_OIL)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead palm oil resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_OIL)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead oil resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_PHEASANT)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead pheasant resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_SILK)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead silk resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_SPICE)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead spice resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_TUSKS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead tusks resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_BLUBBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead blubber resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_ALIEN_CORPSES)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead alien corpses resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_CLAY)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead clay resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_TOBACCO)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead tobacco resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_COTTON)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead cotton resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_COAL)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead coal resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_GRAPES)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead grapes oil resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_GRANITE)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead granite oil resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_BANANAS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead bananas resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_JADE)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead jade resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_HARDWOOD)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead hardwood resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_IRON)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead iron resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_GOLD)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead gold resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_SILVER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead silver resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_BUFFALO)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead buffalo resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_WHEAT)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead wheat resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_CORN)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead corn resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_PEAT)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead peat resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_MANGROVE)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead mangrove resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_MINK)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead mink resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_CARIBOU)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead caribou resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_FISH)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead fish resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_WHALES)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead whales resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_CRABS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead crabs resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_DIAMONDS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead diamonds resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_MAGNESIUM_NODULE)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead magnesium nodule resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_PHOSPHORUS)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead phosphorus resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_PLANKTON_UPWELLING)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead plankton upwelling resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_GIANT_CLAM)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead giant clam resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	i++ ;

	if (uvToken->Next() != TOKEN_UV_DEAD_RESOURCE_GIANT_SQUID)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected dead giant squid `resource production not found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (!ParseDeadResourceNumbers(uvToken, m_dead_food[i], m_dead_shield[i], m_dead_trade[i], m_dead_gold[i]))
		return (FALSE) ;

	if (uvToken->Next() != TOKEN_CLOSE_BRACE)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "missing closing brace") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	return (TRUE) ;
	}
Ejemplo n.º 4
0
sint32 OzoneDatabase::ParseUVTriggerRecord(Token *uvToken)
	{
	double	tmp ;

	if (!token_ParseAnOpenBraceNext(uvToken))
		return (FALSE) ;


	if (uvToken->Next() != TOKEN_UV_NORTH_POLAR_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected north polar region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected north polar region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_NORTH_POLAR] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected north polar region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_NORTH_POLAR] = tmp * 0.01f ;


	if (uvToken->Next() != TOKEN_UV_UPPER_NORTH_MERIDIAN_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected upper north meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected upper north meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_UPPER_NORTH_MERIDIAN] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected upper north meridian region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_UPPER_NORTH_MERIDIAN] = tmp * 0.01f ;


	if (uvToken->Next() != TOKEN_UV_LOWER_NORTH_MERIDIAN_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected lower north meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected lower north meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_LOWER_NORTH_MERIDIAN] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected lower north meridian region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_LOWER_NORTH_MERIDIAN] = tmp * 0.01f ;


	if (uvToken->Next() != TOKEN_UV_EQUATORIAL_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected equatorial region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected equatorial region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_EQUATORIAL] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected equatorial region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_EQUATORIAL] = tmp * 0.01f ;


	if (uvToken->Next() != TOKEN_UV_UPPER_SOUTH_MERIDIAN_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected upper south meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected upper south meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_UPPER_SOUTH_MERIDIAN] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected upper south meridian region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_UPPER_SOUTH_MERIDIAN] = tmp * 0.01f ;




	if (uvToken->Next() != TOKEN_UV_LOWER_SOUTH_MERIDIAN_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected lower south meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected lower south meridian region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_LOWER_SOUTH_MERIDIAN] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected lower south meridian region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_LOWER_SOUTH_MERIDIAN] = tmp * 0.01f ;


	if (uvToken->Next() != TOKEN_UV_SOUTH_POLAR_PROB)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected south polar region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected south polar region probability found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_prob[REGION_TYPE_SOUTH_POLAR] = tmp * 0.01f ;

	if (uvToken->Next() != TOKEN_NUMBER)
		{
		c3errors_ErrorDialog (uvToken->ErrStr(), "expected south polar region phase bonus found") ;
		g_parse_uv_abort = TRUE ;

		return (FALSE) ;
		}

	uvToken->GetFloat(tmp) ;
	m_meridian_phase_bonus[REGION_TYPE_SOUTH_POLAR] = tmp * 0.01f ;





































	if (uvToken->Next() != TOKEN_CLOSE_BRACE)
		return (FALSE) ;

	return (TRUE) ;
	}