vomitstate.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. private float m_VomitContentPercentage;
  8. override void OnInit()
  9. {
  10. m_SymptomType = SymptomTypes.PRIMARY;
  11. m_Priority = 100;
  12. m_ID = SymptomIDs.SYMPTOM_VOMIT;
  13. m_DestroyOnAnimFinish = true;
  14. m_SyncToClient = false;
  15. m_Duration = 5;
  16. m_MaxCount = 1;
  17. }
  18. bool IsContaminationActive()
  19. {
  20. return m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_CONTAMINATION2) || m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_CONTAMINATION3);
  21. }
  22. override void SetParam(Param p)
  23. {
  24. Param1<float> p1 = Param1<float>.Cast(p);
  25. if ( p1 )
  26. {
  27. m_VomitContentPercentage = p1.param1;
  28. }
  29. }
  30. override void OnAnimationStart()
  31. {
  32. if (m_Player)
  33. {
  34. m_Player.GetStatToxicity().Set(0);
  35. if (m_Player.m_PlayerStomach)
  36. m_Player.m_PlayerStomach.ReduceContents(m_VomitContentPercentage);
  37. if (IsContaminationActive())
  38. m_Player.AddHealth("","Blood", -BLOOD_LOSS);
  39. }
  40. }
  41. override void OnAnimationFinish()
  42. {
  43. //! deplete stamina
  44. m_Player.GetStaminaHandler().DepleteStamina(EStaminaModifiers.OVERALL_DRAIN);
  45. if (IsContaminationActive())
  46. {
  47. PluginLifespan module_lifespan = PluginLifespan.Cast( GetPlugin( PluginLifespan ) );
  48. module_lifespan.UpdateBloodyHandsVisibilityEx( m_Player, eBloodyHandsTypes.JUST_BLOOD );
  49. }
  50. }
  51. override bool CanActivate()
  52. {
  53. return ( m_Manager.GetCurrentCommandID() == DayZPlayerConstants.COMMANDID_MOVE || m_Manager.GetCurrentCommandID() == DayZPlayerConstants.COMMANDID_ACTION );
  54. }
  55. //!gets called once on an Symptom which is being activated
  56. override void OnGetActivatedServer(PlayerBase player)
  57. {
  58. PlayAnimationFB(DayZPlayerConstants.CMD_ACTIONFB_VOMIT,DayZPlayerConstants.STANCEMASK_CROUCH, GetDuration() );
  59. }
  60. override SmptAnimMetaBase SpawnAnimMetaObject()
  61. {
  62. return new SmptAnimMetaFB();
  63. }
  64. override bool IsSyncToRemotes()
  65. {
  66. return true;
  67. }
  68. }