ActionTakeMaterialToHands.c
//!DEPRECATED
class ActionTakeMaterialToHands: ActionInteractBase
{
void ActionTakeMaterialToHands()
{
m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS;
m_Text = "#take";
}
override void CreateConditionComponents()
{
m_ConditionItem = new CCINotPresent;
m_ConditionTarget = new CCTCursor;
}
override bool HasProneException()
{
return true;
}
override void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
{
ConstructionActionData construction_action_data = player.GetConstructionActionData();
EntityAI attachment = construction_action_data.GetActualAttachmentToDetach();
if ( attachment )
{
m_Text = "#take " + attachment.GetDisplayName();
}
}
override typename GetInputType()
{
return ContinuousInteractActionInput;
}
override bool HasProgress()
{
return false;
}
override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
{
EntityAI target_entity = EntityAI.Cast( target.GetObject() );
if ( target_entity && target_entity.CanUseConstruction() )
{
BaseBuildingBase base_building = BaseBuildingBase.Cast( target_entity );
if(!base_building.IsPlayerInside(player,""))
return false;
ConstructionActionData construction_action_data = player.GetConstructionActionData();
string main_part_name = target_entity.GetActionComponentName( target.GetComponentIndex() );
//Print(main_part_name);
if ( g_Game.IsMultiplayer() || g_Game.IsServer() )
{
construction_action_data.RefreshAttachmentsToDetach( target_entity, main_part_name );
}
EntityAI attachment = construction_action_data.GetActualAttachmentToDetach();
if ( attachment && player.GetInventory().CanAddEntityIntoHands( attachment ) && attachment.GetHierarchyRootPlayer() != player )
{
return true;
}
}
return false;
}
override bool CanContinue( ActionData action_data )
{
return true;
}
override void OnExecute( ActionData action_data )
{
if (g_Game.IsDedicatedServer())
{
ClearActionJuncture(action_data);
return;
}
OnExecuteImpl(action_data);
}
protected void OnExecuteImpl( ActionData action_data )
{
ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
ItemBase item_target = ItemBase.Cast( construction_action_data.GetActualAttachmentToDetach() );
if( item_target )
{
float stackable = item_target.GetTargetQuantityMax();
if( stackable == 0 || stackable >= item_target.GetQuantity() )
{
//take to hands
action_data.m_Player.PredictiveTakeEntityToHands( item_target );
}
else if( stackable != 0 && stackable < item_target.GetQuantity() )
{
//split and take to hands
item_target.SplitIntoStackMaxHandsClient( action_data.m_Player );
}
}
}
override void CreateAndSetupActionCallback( ActionData action_data )
{
ConstructionActionData construction_action_data = action_data.m_Player.GetConstructionActionData();
EntityAI target = construction_action_data.GetActualAttachmentToDetach();
bool heavy_item = false;
ActionBaseCB callback;
if ( target && target.ConfigIsExisting("heavyItem") && target.ConfigGetBool("heavyItem") )
{
heavy_item = true;
}
if( heavy_item )
{
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;
}
}