actiondetach.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. class DetachActionData : ActionData
  2. {
  3. int m_AttSlot;
  4. }
  5. class ActionDetach: ActionInteractBase
  6. {
  7. string m_ItemName = "";
  8. void ActionDetach()
  9. {
  10. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
  11. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS;
  12. m_Text = "#take_to_hands";
  13. }
  14. override void CreateConditionComponents()
  15. {
  16. m_ConditionItem = new CCINone;
  17. m_ConditionTarget = new CCTCursorNoRuinCheck();
  18. }
  19. override bool HasProneException()
  20. {
  21. return true;
  22. }
  23. override typename GetInputType()
  24. {
  25. return ContinuousInteractActionInput;
  26. }
  27. override bool HasProgress()
  28. {
  29. return false;
  30. }
  31. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  32. {
  33. ItemBase tgt_item = ItemBase.Cast( target.GetObject() );
  34. EntityAI tgt_parent = EntityAI.Cast( target.GetParent() );
  35. EntityAI tgt_entity = EntityAI.Cast( target.GetObject() );
  36. if ( !tgt_item || !tgt_entity || !tgt_parent )
  37. return false;
  38. if ( !tgt_parent || !tgt_item.IsItemBase() || !tgt_item.IsTakeable() || tgt_item.IsBeingPlaced() )
  39. return false;
  40. if ( player.GetCommand_Vehicle() )
  41. return false;
  42. if ( player.GetInventory().CanAddEntityIntoHands(tgt_entity) ) //&& !player.GetInventory().CanAddEntityIntoInventory(tgt_entity) )
  43. {
  44. if ( tgt_entity.GetHierarchyRootPlayer() != player )
  45. {
  46. if ( tgt_entity.CanDetachAttachment( tgt_parent ) && tgt_parent.CanReleaseAttachment( tgt_entity ) )
  47. return true;
  48. }
  49. }
  50. return false;
  51. }
  52. override void OnExecute( ActionData action_data )
  53. {
  54. if (GetGame().IsDedicatedServer())
  55. {
  56. ClearActionJuncture(action_data);
  57. return;
  58. }
  59. ActionManagerClient am = ActionManagerClient.Cast(action_data.m_Player.GetActionManager());
  60. am.UnlockInventory(action_data);
  61. EntityAI ntarget = EntityAI.Cast(action_data.m_Target.GetObject());
  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. if( action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT) )
  77. {
  78. Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename()));
  79. }
  80. else
  81. {
  82. Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
  83. }
  84. }
  85. callback.SetActionData(action_data);
  86. callback.InitActionComponent();
  87. action_data.m_Callback = callback;
  88. }
  89. };