brokenlegs.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. class BrokenLegsMdfr: ModifierBase
  2. {
  3. private const float HEALTHY_LEG = 100; //Health at which legs are no longer considered broken
  4. private int currentState = -1; //Current broken leg state used upon reconnect
  5. private const float TIME_TO_UPDATE = 0.5;
  6. private float elapsedTime = TIME_TO_UPDATE + 1;
  7. #ifdef DEVELOPER
  8. ref static Timer timer;
  9. #endif
  10. override void Init()
  11. {
  12. m_TrackActivatedTime = false;
  13. m_AnalyticsStatsEnabled = true;
  14. m_ID = eModifiers.MDF_BROKEN_LEGS;
  15. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  16. m_TickIntervalActive = 0.5;
  17. m_ActivationType = EActivationType.TRIGGER_EVENT_ON_ACTIVATION;
  18. m_IsPersistent = true;
  19. }
  20. override void OnActivate(PlayerBase player)
  21. {
  22. //Print("------------> OnActivate - BrokenLegsMdfr");
  23. player.SetBrokenLegs(-eBrokenLegs.BROKEN_LEGS);//note the negative sign
  24. player.GetNotifiersManager().ActivateByType(eNotifiers.NTF_FRACTURE);
  25. }
  26. override void OnReconnect(PlayerBase player)
  27. {
  28. //Print("------------> OnReconnect - BrokenLegsMdfr");
  29. player.SetBrokenLegs(player.GetBrokenLegs());
  30. player.GetNotifiersManager().ActivateByType(eNotifiers.NTF_FRACTURE);
  31. }
  32. override void OnDeactivate(PlayerBase player)
  33. {
  34. player.UpdateBrokenLegs(eBrokenLegs.NO_BROKEN_LEGS);
  35. if ( player.IsWearingSplint() )
  36. {
  37. MiscGameplayFunctions.RemoveSplint(player); //Remove splint when leg is healed
  38. }
  39. player.SetBrokenLegs(eBrokenLegs.NO_BROKEN_LEGS);
  40. player.GetNotifiersManager().DeactivateByType(eNotifiers.NTF_FRACTURE);
  41. }
  42. override bool DeactivateCondition(PlayerBase player)
  43. {
  44. if ( player.GetHealth("RightLeg", "Health") >= HEALTHY_LEG && player.GetHealth("LeftLeg", "Health") >= HEALTHY_LEG )
  45. {
  46. return true;
  47. }
  48. else
  49. {
  50. return false;
  51. }
  52. }
  53. override void OnTick(PlayerBase player, float deltaT)
  54. {
  55. player.UpdateBrokenLegs(/*legacy param - value not used*/0);
  56. }
  57. #ifdef DEVELOPER
  58. static void DelayedRequest(PlayerBase player, bool state)
  59. {
  60. timer = new Timer( CALL_CATEGORY_SYSTEM );
  61. if(state)
  62. timer.Run( 10 , player.GetModifiersManager().GetModifier(eModifiers.MDF_BROKEN_LEGS), "Delayed", new Param1<bool>(state));
  63. else
  64. BrokenLegsMdfr.Cast(player.GetModifiersManager().GetModifier(eModifiers.MDF_BROKEN_LEGS)).Delayed(false);
  65. }
  66. void Delayed(bool state)
  67. {
  68. m_Player.GetModifiersManager().ActivateModifier(eModifiers.MDF_BROKEN_LEGS);
  69. }
  70. #endif
  71. };