drowning.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. class DrowningMdfr: ModifierBase
  2. {
  3. static const float STAMINA_RECOVERY_MULTIPLIER = 0;
  4. const int TICK_FREQUENCY = 1;
  5. override void Init()
  6. {
  7. m_TrackActivatedTime = false;
  8. m_ID = eModifiers.MDF_DROWNING;
  9. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  10. m_TickIntervalActive = TICK_FREQUENCY;
  11. m_SyncID = eModifierSyncIDs.MODIFIER_SYNC_DROWNING;
  12. }
  13. bool CheckIsDrowning(PlayerBase player)
  14. {
  15. return player.GetDrowningWaterLevelCheck();
  16. }
  17. override bool ActivateCondition(PlayerBase player)
  18. {
  19. return CheckIsDrowning(player);
  20. }
  21. override bool DeactivateCondition(PlayerBase player)
  22. {
  23. return !CheckIsDrowning(player);
  24. }
  25. override void OnTick(PlayerBase player, float deltaT)
  26. {
  27. if (player.GetStaminaHandler().GetStamina() <= 0)
  28. {
  29. player.AddHealth("","",deltaT * -CfgGameplayHandler.GetHealthDepletionSpeed());
  30. player.AddHealth("","Shock",deltaT * -CfgGameplayHandler.GetShockDepletionSpeed());
  31. player.RequestSoundEventEx(EPlayerSoundEventID.DROWNING_PAIN, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
  32. }
  33. }
  34. override void OnReconnect(PlayerBase player)
  35. {
  36. OnActivate(player);
  37. }
  38. override void OnActivate(PlayerBase player)
  39. {
  40. player.SetDrowning(true);
  41. player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.DROWNING);
  42. player.RequestSoundEventEx(EPlayerSoundEventID.DROWNING_BREATH, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
  43. GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( PlayDrowningSound, 3000 ,false, 1);
  44. }
  45. void PlayDrowningSound(int index)
  46. {
  47. if (m_Player.m_IsDrowning)//check if we are still drowning after the delay
  48. {
  49. if (index == 0)
  50. {
  51. m_Player.RequestSoundEventEx(EPlayerSoundEventID.EXHAUSTED_BREATH, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
  52. }
  53. else if (index == 1)
  54. {
  55. m_Player.RequestSoundEventEx(EPlayerSoundEventID.DROWNING_BREATH, false, EPlayerSoundEventParam.HIGHEST_PRIORITY);
  56. }
  57. }
  58. }
  59. override void OnDeactivate(PlayerBase player)
  60. {
  61. player.SetDrowning(false);
  62. player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.DROWNING);
  63. }
  64. };