Aller au contenu

Photo

Force update for SetNWN2Fog?


  • Veuillez vous connecter pour répondre
2 réponses à ce sujet

#1
rjshae

rjshae
  • Members
  • 4 485 messages
The only way I seem to be able to get SetNWN2Fog to work properly is if I set it, then exit the area and re-enter. If I just set it nothing happens, even if I let the game time cycle through 24 hours. Does anybody know if there is a function that will force a refresh to the new fog state?

Thank you. B)

#2
painofdungeoneternal

painofdungeoneternal
  • Members
  • 1 799 messages
I don't have a problem with fog, it's in my codebase for weather, and i use a combination of SEF emitters as well as the fog which together end up making a good effect. However you might not be setting it for all the time periods you need to, this is the code i am using...



/**  
* Description
* @author
* @param 
* @see 
* @return 
*/
void CSLSetNWN2Fog( object oTarget, int nColor, float fFogStart, float fFogEnd)
{
	SetNWN2Fog( oTarget, FOG_TYPE_NWN2_SUNRISE, nColor, fFogStart, fFogEnd );
	SetNWN2Fog( oTarget, FOG_TYPE_NWN2_DAYTIME, nColor, fFogStart, fFogEnd );
	SetNWN2Fog( oTarget, FOG_TYPE_NWN2_SUNSET, nColor, fFogStart, fFogEnd );
	SetNWN2Fog( oTarget, FOG_TYPE_NWN2_MOONRISE, nColor, fFogStart, fFogEnd );
	SetNWN2Fog( oTarget, FOG_TYPE_NWN2_NIGHTTIME, nColor, fFogStart, fFogEnd );
	SetNWN2Fog( oTarget, FOG_TYPE_NWN2_MOONSET, nColor, fFogStart, fFogEnd );
}


/**  
* Description
* @author
* @param 
* @see 
* @return 
*/
void CSLResetNWN2Fog(object oTarget )
{
	ResetNWN2Fog( oTarget, FOG_TYPE_NWN2_SUNRISE);
	ResetNWN2Fog( oTarget, FOG_TYPE_NWN2_DAYTIME);
	ResetNWN2Fog( oTarget, FOG_TYPE_NWN2_SUNSET);
	ResetNWN2Fog( oTarget, FOG_TYPE_NWN2_MOONRISE);
	ResetNWN2Fog( oTarget, FOG_TYPE_NWN2_NIGHTTIME);
	ResetNWN2Fog( oTarget, FOG_TYPE_NWN2_MOONSET);
}

/// then this is an excerpt of how i set the actual fog
if ( iWeatherState & CSL_WEATHER_ATMOS_HAZE )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to haze" ); }
			CSLSetNWN2Fog( oArea, COLOR_WHITE, 35.0f-(iWeatherPower*3.0f), 180.0f-(iWeatherPower*16.0f) );
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_WHITEHAZE, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_ATMOS_FOG )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to fog" ); }
			CSLSetNWN2Fog( oArea,  COLOR_WHITE, 30.0f-(iWeatherPower*4.0f), 125.0f-(iWeatherPower*5.0f));
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_WHITEFOG, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_ATMOS_SMOKE )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to smoke" ); }
			CSLSetNWN2Fog( oArea,  COLOR_GREY, 35.0f-(iWeatherPower*2.0f), 160.0f-(iWeatherPower*5.0f));
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_SMOKE, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_ATMOS_BLACK )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to black" ); }
			CSLSetNWN2Fog( oArea,  COLOR_BLACK, 40.0f-(iWeatherPower*2.0f), 160.0f-(iWeatherPower*5.0f));
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_BLACKFOG, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_ATMOS_FIERY )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to fiery" ); }
			CSLSetNWN2Fog( oArea,  COLOR_RED, 40.0f-(iWeatherPower*2.0f), 160.0f-(iWeatherPower*5.0f));
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_REDFOG, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_ATMOS_ACIDIC )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to acidic" ); }
			CSLSetNWN2Fog( oArea,  COLOR_GREEN, 40.0f-(iWeatherPower*2.0f), 160.0f-(iWeatherPower*5.0f));
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_GREENFOG, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_ATMOS_SAND )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to sand" ); }
			CSLSetNWN2Fog( oArea,  COLOR_BROWN, 15.0f-(iWeatherPower*3.0f), 100.0f-(iWeatherPower*15.0f));
			//DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_ORANGEFOG, 0.0f, bRemovePreviousEfectFill ) );
			
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_SANDSTORM, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else if ( iWeatherState & CSL_WEATHER_TYPE_SNOW )
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather fog  set to snow" ); }
			CSLSetNWN2Fog( oArea,  COLOR_WHITE, 30.0f-(iWeatherPower*5.0f), 120.0f-(iWeatherPower*15.0f));
			DelayCommand( 1.0f, CSLEnviroAreaEffectsFill( oArea, ENVIRO_SEF_ORANGEFOG, 0.0f, bRemovePreviousEfectFill ) );
			bRemovePreviousEfectFill = FALSE;
		}
		else
		{
			if (DEBUGGING >= 8) { SendMessageToPC( GetFirstPC(), "CSLEnviroSetWeather weather  set to no visual effects" ); }
			CSLResetNWN2Fog(oArea);
			if (  bRemovePreviousEfectFill )
			{
				DelayCommand( 0.5f, CSLEnviroAreaEffectsRemove( oArea ) );
			}
		}




#3
rjshae

rjshae
  • Members
  • 4 485 messages
Actually I did set it for all time periods, so I don't believe that's the problem. Maybe there's a patch fix for it then? Dunno. Thanks for the response.