DIFF

Drowning.c

class DrowningMdfr: ModifierBase
{
	static const float STAMINA_RECOVERY_MULTIPLIER = 0;

	const int 	TICK_FREQUENCY = 1;
	
	override void Init()
	{
		m_TrackActivatedTime 	= false;
		m_ID 					= eModifiers.MDF_DROWNING;
		m_TickIntervalInactive 	= DEFAULT_TICK_TIME_INACTIVE;
		m_TickIntervalActive 	= TICK_FREQUENCY;
		m_SyncID				= eModifierSyncIDs.MODIFIER_SYNC_DROWNING;
	}	

	bool CheckIsDrowning(PlayerBase player)
	{
		return player.GetDrowningWaterLevelCheck();
	}
	
	override bool ActivateCondition(PlayerBase player)
	{
		return CheckIsDrowning(player);
	}

	override bool DeactivateCondition(PlayerBase player)
	{
		return !CheckIsDrowning(player);
	}

	override void OnTick(PlayerBase player, float deltaT)
	{	
		if (player.GetStaminaHandler().GetStamina() <= 0)
		{
			player.AddHealth("","",deltaT * -CfgGameplayHandler.GetHealthDepletionSpeed());
			player.AddHealth("","Shock",deltaT * -CfgGameplayHandler.GetShockDepletionSpeed());
			player.RequestSoundEventEx(EPlayerSoundEventID.DROWNING_PAIN, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
		}
	}
	
	override void OnReconnect(PlayerBase player)
	{
		OnActivate(player);
	}
	
	override void OnActivate(PlayerBase player)
	{
		player.SetDrowning(true);
		player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.DROWNING);
		player.RequestSoundEventEx(EPlayerSoundEventID.DROWNING_BREATH, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
		g_Game.GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( PlayDrowningSound, 3000 ,false, 1);
	}
	
	
	void PlayDrowningSound(int index)
	{
		if (m_Player.m_IsDrowning)//check if we are still drowning after the delay
		{
			if (index == 0)
			{
				m_Player.RequestSoundEventEx(EPlayerSoundEventID.EXHAUSTED_BREATH, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
			}
			else if (index == 1)
			{
				m_Player.RequestSoundEventEx(EPlayerSoundEventID.DROWNING_BREATH, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
			}
		}
	}
		
	override void OnDeactivate(PlayerBase player)
	{
		player.SetDrowning(false);
		player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.DROWNING);
	}
};