actionstartengine.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. class ActionStartCarCB : ActionContinuousBaseCB
  2. {
  3. override void CreateActionComponent()
  4. {
  5. m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.START_ENGINE);
  6. }
  7. }
  8. class ActionStartEngine : ActionContinuousBase
  9. {
  10. private const int SOUND_IGNITION_DELAY = 700; // ms, delay for ignition sound to match animation of hand touching the key
  11. private const float ROUGH_SPECIALTY_WEIGHT = 0.5;
  12. static const float MINIMUM_BATTERY_ENERGY = 5.0; //! DEPRECATED
  13. bool m_BatteryCon = false; //! DEPRECATED
  14. bool m_SparkCon = false; //! DEPRECATED
  15. bool m_BeltCon = false; //! DEPRECATED
  16. bool m_FuelCon = false; //! DEPRECATED
  17. void ActionStartEngine()
  18. {
  19. m_CallbackClass = ActionStartCarCB;
  20. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_STARTENGINE;
  21. m_StanceMask = DayZPlayerConstants.STANCEMASK_ALL;
  22. m_SpecialtyWeight = ROUGH_SPECIALTY_WEIGHT;
  23. m_LockTargetOnUse = false;
  24. m_Text = "#start_the_car";
  25. }
  26. override void CreateConditionComponents()
  27. {
  28. m_ConditionTarget = new CCTNone();
  29. m_ConditionItem = new CCINone();
  30. }
  31. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  32. {
  33. HumanCommandVehicle vehCommand = player.GetCommand_Vehicle();
  34. if (vehCommand)
  35. {
  36. Transport trans = vehCommand.GetTransport();
  37. if (trans)
  38. {
  39. Car car;
  40. if (Class.CastTo(car, trans) && !car.EngineIsOn())
  41. {
  42. if (car.GetHealthLevel("Engine") >= GameConstants.STATE_RUINED)
  43. {
  44. return false;
  45. }
  46. return car.CrewMemberIndex(player) == DayZPlayerConstants.VEHICLESEAT_DRIVER);
  47. }
  48. }
  49. }
  50. return false;
  51. }
  52. override void OnStartServer(ActionData action_data)
  53. {
  54. super.OnStartServer(action_data);
  55. HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
  56. if (!vehCommand)
  57. return;
  58. CarScript car = CarScript.Cast(vehCommand.GetTransport());
  59. if (!car)
  60. return;
  61. if (car.CheckOperationalState())
  62. GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(car.SetCarEngineSoundState, SOUND_IGNITION_DELAY, false, CarEngineSoundState.STARTING);
  63. }
  64. override void OnEndServer(ActionData action_data)
  65. {
  66. super.OnEndServer(action_data);
  67. HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
  68. if (!vehCommand)
  69. return;
  70. Transport trans = vehCommand.GetTransport();
  71. if (!trans)
  72. return;
  73. CarScript car;
  74. if (Class.CastTo(car, trans))
  75. car.SetCarEngineSoundState(CarEngineSoundState.NONE);
  76. }
  77. override void OnFinishProgressServer(ActionData action_data)
  78. {
  79. HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
  80. if (vehCommand)
  81. {
  82. Transport trans = vehCommand.GetTransport();
  83. if (trans)
  84. {
  85. CarScript car;
  86. if (Class.CastTo(car, trans))
  87. {
  88. car.EngineStart();
  89. }
  90. }
  91. }
  92. }
  93. override void OnExecuteServer(ActionData action_data)
  94. {
  95. HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
  96. if (vehCommand)
  97. {
  98. Transport trans = vehCommand.GetTransport();
  99. if (trans)
  100. {
  101. CarScript car;
  102. if (Class.CastTo(car, trans))
  103. {
  104. car.OnBeforeEngineStart();
  105. }
  106. }
  107. }
  108. }
  109. override bool CanBeUsedInVehicle()
  110. {
  111. return true;
  112. }
  113. override bool HasTarget()
  114. {
  115. return false;
  116. }
  117. }