actionstopengine.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. class ActionStopEngine: ActionSingleUseBase
  2. {
  3. void ActionStopEngine()
  4. {
  5. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_STOPENGINE;
  6. m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
  7. m_Text = "#stop_engine";
  8. }
  9. override void CreateConditionComponents()
  10. {
  11. m_ConditionItem = new CCINone;
  12. m_ConditionTarget = new CCTNone;
  13. }
  14. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  15. {
  16. HumanCommandVehicle vehCommand = player.GetCommand_Vehicle();
  17. if (!vehCommand)
  18. return false;
  19. auto vehicle = CarScript.Cast(vehCommand.GetTransport());
  20. if (!vehicle)
  21. return false;
  22. if (!vehicle.EngineIsOn())
  23. return false;
  24. if (vehicle.GetSpeedometerAbsolute() > 8)
  25. return false;
  26. return vehicle.CrewDriver() == player;
  27. }
  28. override void OnExecute(ActionData action_data)
  29. {
  30. HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
  31. if (!vehCommand)
  32. return;
  33. auto vehicle = CarScript.Cast(vehCommand.GetTransport());
  34. if (!vehicle)
  35. return;
  36. if (vehicle.GetNetworkMoveStrategy() == NetworkMoveStrategy.PHYSICS)
  37. {
  38. // Only perform on clients (or robos), validation is performed in C++
  39. if (action_data.m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
  40. {
  41. return;
  42. }
  43. }
  44. else
  45. {
  46. if (g_Game.IsClient())
  47. return;
  48. }
  49. vehicle.EngineStop();
  50. }
  51. override bool CanBeUsedInVehicle()
  52. {
  53. return true;
  54. }
  55. override bool UseMainItem()
  56. {
  57. return false;
  58. }
  59. override bool HasTarget()
  60. {
  61. return false;
  62. }
  63. }