actionrepositionpluggeditem.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. class ActionRepositionPluggedItem : ActionInteractBase
  2. {
  3. // Through this action players can reposition already placed electric devices without unplugging them from the power source.
  4. void ActionRepositionPluggedItem()
  5. {
  6. m_CallbackClass = ActionInteractBaseCB;
  7. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
  8. m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
  9. m_Text = "#reposition";
  10. }
  11. override typename GetInputType()
  12. {
  13. return ContinuousInteractActionInput;
  14. }
  15. override bool HasProgress()
  16. {
  17. return false;
  18. }
  19. override bool CanBeUsedOnBack()
  20. {
  21. return false;
  22. }
  23. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  24. {
  25. ItemBase targetItem = ItemBase.Cast(target.GetObject());
  26. EntityAI targetParent = EntityAI.Cast(targetItem.GetHierarchyParent());
  27. if (!targetItem || !targetItem.IsTakeable() || targetItem.IsBeingPlaced() || (targetItem.GetCompEM() && !targetItem.GetCompEM().IsPlugged()) || ( targetItem.GetHierarchyParent() && !BaseBuildingBase.Cast(targetItem.GetHierarchyParent()) ) || ((targetParent && !targetItem.CanDetachAttachment(targetParent)) || (targetParent && !targetParent.CanReleaseAttachment(targetItem))))
  28. return false;
  29. if (targetItem.HasEnergyManager() && targetItem.GetCompEM().IsPlugged())
  30. return player.GetInventory().CanAddEntityIntoHands(targetItem);
  31. return false;
  32. }
  33. override bool CanContinue(ActionData action_data)
  34. {
  35. EntityAI ent = EntityAI.Cast(action_data.m_Target.GetObject());
  36. return ent && ent.GetCompEM().GetCordLength() > 0;
  37. }
  38. override void Start(ActionData action_data)
  39. {
  40. super.Start(action_data);
  41. ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
  42. if (GetGame().IsMultiplayer() && GetGame().IsServer())
  43. action_data.m_Player.PlacingStartServer(ntarget);
  44. else
  45. action_data.m_Player.PlacingStartLocal(ntarget);
  46. }
  47. override void OnExecuteServer(ActionData action_data)
  48. {
  49. ClearActionJuncture(action_data);
  50. if (GetGame().IsMultiplayer())
  51. return;
  52. InventoryLocation il = new InventoryLocation();
  53. ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
  54. ClearInventoryReservationEx(action_data);
  55. action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
  56. }
  57. override void OnExecuteClient(ActionData action_data)
  58. {
  59. InventoryLocation il = new InventoryLocation();
  60. ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
  61. ClearInventoryReservationEx(action_data);
  62. action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
  63. }
  64. override void CreateAndSetupActionCallback(ActionData action_data)
  65. {
  66. EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
  67. ActionBaseCB callback;
  68. if (!target)
  69. return;
  70. if (target.IsHeavyBehaviour())
  71. {
  72. Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
  73. }
  74. else
  75. {
  76. Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename()));
  77. }
  78. callback.SetActionData(action_data);
  79. callback.InitActionComponent();
  80. action_data.m_Callback = callback;
  81. }
  82. //! DEPRECATED
  83. protected ItemBase m_SourceForReplug;
  84. }