vomitstate.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. class VomitSymptom : SymptomBase
  2. {
  3. static const float STAMINA_DEPLETION_MULTIPLIER = 1.3;
  4. static const float STAMINA_RECOVERY_MULTIPLIER = 0.5;
  5. //just for the Symptom parameters set-up and gets called even if the Symptom doesn't execute, don't put any gameplay code in here
  6. const int BLOOD_LOSS = 250;
  7. const int STOMACH_CONTENT_PERCENTAGE_DEFAULT = 5; //per second
  8. private float m_VomitContentPercentage = -1; //considered unspecified at -1
  9. override void OnInit()
  10. {
  11. m_SymptomType = SymptomTypes.PRIMARY;
  12. m_Priority = 100;
  13. m_ID = SymptomIDs.SYMPTOM_VOMIT;
  14. m_DestroyOnAnimFinish = true;
  15. m_SyncToClient = false;
  16. m_Duration = 5;
  17. m_MaxCount = 1;
  18. m_VomitContentPercentage = -1;
  19. }
  20. bool IsContaminationActive()
  21. {
  22. return m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_CONTAMINATION2) || m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_CONTAMINATION3);
  23. }
  24. override void SetParam(Param p)
  25. {
  26. Param1<float> p1 = Param1<float>.Cast(p);
  27. if ( p1 )
  28. {
  29. m_VomitContentPercentage = p1.param1;
  30. }
  31. }
  32. override void OnAnimationStart()
  33. {
  34. if (m_Player)
  35. {
  36. m_Player.GetStatToxicity().Set(0);
  37. if (m_Player.m_PlayerStomach)
  38. {
  39. if (m_VomitContentPercentage < 0) //unspecified, calculate from duration
  40. {
  41. float contentLoss = STOMACH_CONTENT_PERCENTAGE_DEFAULT * m_Duration;
  42. m_Player.m_PlayerStomach.ReduceContents(contentLoss);
  43. }
  44. else
  45. m_Player.m_PlayerStomach.ReduceContents(m_VomitContentPercentage);
  46. }
  47. if (IsContaminationActive())
  48. m_Player.AddHealth("","Blood", -BLOOD_LOSS);
  49. }
  50. }
  51. override void OnAnimationFinish()
  52. {
  53. //! deplete stamina
  54. m_Player.GetStaminaHandler().DepleteStamina(EStaminaModifiers.OVERALL_DRAIN);
  55. if (IsContaminationActive())
  56. {
  57. PluginLifespan module_lifespan = PluginLifespan.Cast( GetPlugin( PluginLifespan ) );
  58. module_lifespan.UpdateBloodyHandsVisibilityEx( m_Player, eBloodyHandsTypes.JUST_BLOOD );
  59. }
  60. }
  61. override bool CanActivate()
  62. {
  63. return ( m_Manager.GetCurrentCommandID() == DayZPlayerConstants.COMMANDID_MOVE || m_Manager.GetCurrentCommandID() == DayZPlayerConstants.COMMANDID_ACTION );
  64. }
  65. //!gets called once on an Symptom which is being activated
  66. override void OnGetActivatedServer(PlayerBase player)
  67. {
  68. PlayAnimationFB(DayZPlayerConstants.CMD_ACTIONFB_VOMIT,DayZPlayerConstants.STANCEMASK_CROUCH, GetDuration() );
  69. }
  70. override SmptAnimMetaBase SpawnAnimMetaObject()
  71. {
  72. return new SmptAnimMetaFB();
  73. }
  74. override bool IsSyncToRemotes()
  75. {
  76. return true;
  77. }
  78. }