actiontakematerialtohands.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. //!DEPRECATED
  2. class ActionTakeMaterialToHands: ActionInteractBase
  3. {
  4. void ActionTakeMaterialToHands()
  5. {
  6. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
  7. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS;
  8. m_Text = "#take";
  9. }
  10. override void CreateConditionComponents()
  11. {
  12. m_ConditionItem = new CCINotPresent;
  13. m_ConditionTarget = new CCTCursor;
  14. }
  15. override bool HasProneException()
  16. {
  17. return true;
  18. }
  19. override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
  20. {
  21. ConstructionActionData construction_action_data = player.GetConstructionActionData();
  22. EntityAI attachment = construction_action_data.GetActualAttachmentToDetach();
  23. if ( attachment )
  24. {
  25. m_Text = "#take " + attachment.GetDisplayName();
  26. }
  27. }
  28. override typename GetInputType()
  29. {
  30. return ContinuousInteractActionInput;
  31. }
  32. override bool HasProgress()
  33. {
  34. return false;
  35. }
  36. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  37. {
  38. EntityAI target_entity = EntityAI.Cast( target.GetObject() );
  39. if ( target_entity && target_entity.CanUseConstruction() )
  40. {
  41. BaseBuildingBase base_building = BaseBuildingBase.Cast( target_entity );
  42. if(!base_building.IsPlayerInside(player,""))
  43. return false;
  44. ConstructionActionData construction_action_data = player.GetConstructionActionData();
  45. string main_part_name = target_entity.GetActionComponentName( target.GetComponentIndex() );
  46. //Print(main_part_name);
  47. if ( GetGame().IsMultiplayer() || GetGame().IsServer() )
  48. {
  49. construction_action_data.RefreshAttachmentsToDetach( target_entity, main_part_name );
  50. }
  51. EntityAI attachment = construction_action_data.GetActualAttachmentToDetach();
  52. if ( attachment && player.GetInventory().CanAddEntityIntoHands( attachment ) && attachment.GetHierarchyRootPlayer() != player )
  53. {
  54. return true;
  55. }
  56. }
  57. return false;
  58. }
  59. override bool CanContinue( ActionData action_data )
  60. {
  61. return true;
  62. }
  63. override void OnExecute( ActionData action_data )
  64. {
  65. if (GetGame().IsDedicatedServer())
  66. {
  67. ClearActionJuncture(action_data);
  68. return;
  69. }
  70. OnExecuteImpl(action_data);
  71. }
  72. protected void OnExecuteImpl( ActionData action_data )
  73. {
  74. ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
  75. ItemBase item_target = ItemBase.Cast( construction_action_data.GetActualAttachmentToDetach() );
  76. if( item_target )
  77. {
  78. float stackable = item_target.GetTargetQuantityMax();
  79. if( stackable == 0 || stackable >= item_target.GetQuantity() )
  80. {
  81. //take to hands
  82. action_data.m_Player.PredictiveTakeEntityToHands( item_target );
  83. }
  84. else if( stackable != 0 && stackable < item_target.GetQuantity() )
  85. {
  86. //split and take to hands
  87. item_target.SplitIntoStackMaxHandsClient( action_data.m_Player );
  88. }
  89. }
  90. }
  91. override void CreateAndSetupActionCallback( ActionData action_data )
  92. {
  93. ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
  94. EntityAI target = construction_action_data.GetActualAttachmentToDetach();
  95. bool heavy_item = false;
  96. ActionBaseCB callback;
  97. if ( target && target.ConfigIsExisting("heavyItem") && target.ConfigGetBool("heavyItem") )
  98. {
  99. heavy_item = true;
  100. }
  101. if( heavy_item )
  102. {
  103. Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT));
  104. }
  105. else
  106. {
  107. if( action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT) )
  108. {
  109. Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename()));
  110. }
  111. else
  112. {
  113. Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
  114. }
  115. }
  116. callback.SetActionData(action_data);
  117. callback.InitActionComponent();
  118. action_data.m_Callback = callback;
  119. }
  120. }