ActionDetach.c
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 (g_Game.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;
}
};