actiontakehybridattachmenttohands.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. //!DEPRECATED
  2. class ActionTakeHybridAttachmentToHands: ActionInteractBase
  3. {
  4. void ActionTakeHybridAttachmentToHands()
  5. {
  6. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
  7. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS;
  8. m_Text = "#take_to_hands";
  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 typename GetInputType()
  20. {
  21. return ContinuousInteractActionInput;
  22. }
  23. override bool HasProgress()
  24. {
  25. return false;
  26. }
  27. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  28. {
  29. EntityAI tgt_entity = EntityAI.Cast( target.GetObject() );
  30. if ( tgt_entity && BaseBuildingBase.Cast(tgt_entity) &&!tgt_entity.IsBeingPlaced() /*&& BaseBuildingBase.Cast(tgt_entity).IsPlayerInside(player,"")*/ )
  31. {
  32. string component_name = tgt_entity.GetActionComponentName( target.GetComponentIndex() );
  33. ItemBase attachment = ItemBase.Cast(tgt_entity.FindAttachmentBySlotName(component_name));
  34. if ( attachment && player.GetInventory().CanAddEntityIntoHands(attachment) && attachment.IsTakeable() )
  35. {
  36. return true;
  37. }
  38. }
  39. return false;
  40. }
  41. override bool CanContinue( ActionData action_data )
  42. {
  43. return true;
  44. }
  45. override void OnExecute( ActionData action_data )
  46. {
  47. if (GetGame().IsDedicatedServer())
  48. {
  49. ClearActionJuncture(action_data);
  50. return;
  51. }
  52. OnExecuteImpl(action_data);
  53. }
  54. protected void OnExecuteImpl( ActionData action_data )
  55. {
  56. EntityAI tgt_entity = EntityAI.Cast( action_data.m_Target.GetObject() );
  57. string component_name = tgt_entity.GetActionComponentName( action_data.m_Target.GetComponentIndex() );
  58. ItemBase attachment;
  59. if ( tgt_entity && ItemBase.CastTo(attachment, tgt_entity.FindAttachmentBySlotName(component_name)) )
  60. {
  61. ClearInventoryReservationEx(action_data);
  62. float stackable = attachment.GetTargetQuantityMax(-1);
  63. if( stackable == 0 || stackable >= attachment.GetQuantity() )
  64. {
  65. //take to hands
  66. action_data.m_Player.PredictiveTakeEntityToHands( attachment );
  67. }
  68. else if( stackable != 0 && stackable < attachment.GetQuantity() )
  69. {
  70. //split and take to hands
  71. attachment.SplitIntoStackMaxHandsClient( action_data.m_Player );
  72. }
  73. }
  74. }
  75. override void CreateAndSetupActionCallback( ActionData action_data )
  76. {
  77. EntityAI tgt_entity = EntityAI.Cast( action_data.m_Target.GetObject() );
  78. string component_name = tgt_entity.GetActionComponentName( action_data.m_Target.GetComponentIndex() );
  79. ItemBase attachment;
  80. bool heavy_item = false;
  81. if ( tgt_entity && ItemBase.CastTo(attachment, tgt_entity.FindAttachmentBySlotName(component_name)) )
  82. {
  83. ActionBaseCB callback;
  84. if ( attachment && attachment.ConfigIsExisting("heavyItem") && attachment.ConfigGetBool("heavyItem") )
  85. {
  86. heavy_item = true;
  87. }
  88. }
  89. if( heavy_item )
  90. {
  91. Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT));
  92. }
  93. else
  94. {
  95. if( action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT) )
  96. {
  97. Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename()));
  98. }
  99. else
  100. {
  101. Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
  102. }
  103. }
  104. callback.SetActionData(action_data);
  105. callback.InitActionComponent();
  106. action_data.m_Callback = callback;
  107. }
  108. }