class DetachActionData : ActionData { int m_AttSlot; } class ActionDetach: ActionInteractBase { string m_ItemName = ""; void ActionDetach() { m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS; m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS; m_Text = "#take_to_hands"; } override void CreateConditionComponents() { m_ConditionItem = new CCINone; m_ConditionTarget = new CCTCursorNoRuinCheck(); } override bool HasProneException() { return true; } override typename GetInputType() { return ContinuousInteractActionInput; } override bool HasProgress() { return false; } override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item ) { ItemBase tgt_item = ItemBase.Cast( target.GetObject() ); EntityAI tgt_parent = EntityAI.Cast( target.GetParent() ); EntityAI tgt_entity = EntityAI.Cast( target.GetObject() ); if ( !tgt_item || !tgt_entity || !tgt_parent ) return false; if ( !tgt_parent || !tgt_item.IsItemBase() || !tgt_item.IsTakeable() || tgt_item.IsBeingPlaced() ) return false; if ( player.GetCommand_Vehicle() ) return false; if ( player.GetInventory().CanAddEntityIntoHands(tgt_entity) ) //&& !player.GetInventory().CanAddEntityIntoInventory(tgt_entity) ) { if ( tgt_entity.GetHierarchyRootPlayer() != player ) { if ( tgt_entity.CanDetachAttachment( tgt_parent ) && tgt_parent.CanReleaseAttachment( tgt_entity ) ) return true; } } return false; } override void OnExecute( ActionData action_data ) { if (GetGame().IsDedicatedServer()) { ClearActionJuncture(action_data); return; } ActionManagerClient am = ActionManagerClient.Cast(action_data.m_Player.GetActionManager()); am.UnlockInventory(action_data); EntityAI ntarget = EntityAI.Cast(action_data.m_Target.GetObject()); action_data.m_Player.PredictiveTakeEntityToHands(ntarget); } override void CreateAndSetupActionCallback( ActionData action_data ) { EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject()); ActionBaseCB callback; if (!target) return; if (target.IsHeavyBehaviour()) { Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT)); } else { if( action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT) ) { Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename())); } else { Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE)); } } callback.SetActionData(action_data); callback.InitActionComponent(); action_data.m_Callback = callback; } };