ActionTakeHybridAttachment.c
//!DEPRECATED
class ActionTakeHybridAttachment: ActionInteractBase
{
string m_ItemName = "";
void ActionTakeHybridAttachment()
{
m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_INVENTORY;
m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_INVENTORY;
m_Text = "#take";
}
override void CreateConditionComponents()
{
m_ConditionItem = new CCINone;
m_ConditionTarget = new CCTCursor;
}
override bool HasProneException()
{
return true;
}
override bool ActionConditionContinue( ActionData action_data )
{
return true;
}
override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
{
EntityAI tgt_entity = EntityAI.Cast( target.GetObject() );
if ( tgt_entity && BaseBuildingBase.Cast(tgt_entity) &&!tgt_entity.IsBeingPlaced() )
{
string component_name = tgt_entity.GetActionComponentName( target.GetComponentIndex() );
/*if (!tgt_entity.GetInventory().HasInventorySlot(InventorySlots.GetSlotIdFromString(component_name)))
return false;*/
ItemBase attachment = ItemBase.Cast(tgt_entity.FindAttachmentBySlotName(component_name));
if ( attachment && player.GetInventory().CanAddEntityIntoInventory(attachment) && attachment.IsTakeable() )
{
return true;
}
}
return false;
}
override bool CanBeUsedOnBack()
{
return true;
}
override bool InventoryReservation(ActionData action_data)
{
bool success = true;
InventoryLocation il = new InventoryLocation;
EntityAI tgt_entity = EntityAI.Cast( action_data.m_Target.GetObject() );
string component_name = tgt_entity.GetActionComponentName( action_data.m_Target.GetComponentIndex() );
ItemBase attachment;
if ( tgt_entity && ItemBase.CastTo(attachment, tgt_entity.FindAttachmentBySlotName(component_name)) )
{
action_data.m_Player.GetInventory().FindFreeLocationFor( attachment , FindInventoryLocationType.ANY, il );
if ( action_data.m_Player.GetInventory().HasInventoryReservation( attachment, il) )
{
success = false;
}
else
{
action_data.m_Player.GetInventory().AddInventoryReservationEx( attachment, il, GameInventory.c_InventoryReservationTimeoutMS);
}
}
if ( success )
{
if( il )
action_data.m_ReservedInventoryLocations.Insert(il);
}
return success;
}
override void OnExecute( ActionData action_data )
{
if (g_Game.IsDedicatedServer())
{
ClearActionJuncture(action_data);
return;
}
//Debug.Log("[Action DEBUG] Start time stamp: " + action_data.m_Player.GetSimulationTimeStamp());
EntityAI tgt_entity = EntityAI.Cast( action_data.m_Target.GetObject() );
string component_name = tgt_entity.GetActionComponentName( action_data.m_Target.GetComponentIndex() );
ItemBase attachment;
if ( tgt_entity && ItemBase.CastTo(attachment, tgt_entity.FindAttachmentBySlotName(component_name)) )
{
InventoryLocation il = action_data.m_ReservedInventoryLocations.Get(0);
InventoryLocation targetInventoryLocation = new InventoryLocation;
attachment.GetInventory().GetCurrentInventoryLocation(targetInventoryLocation);
ClearInventoryReservationEx(action_data);
//SplitItemUtils.TakeOrSplitToInventoryLocation( action_data.m_Player, il );
float stackable = attachment.GetTargetQuantityMax(il.GetSlot());
if( stackable == 0 || stackable >= attachment.GetQuantity() )
{
action_data.m_Player.PredictiveTakeToDst(targetInventoryLocation, il);
}
else
{
attachment.SplitIntoStackMaxToInventoryLocationClient( il );
}
}
//action_data.m_Player.PredictiveTakeToDst(targetInventoryLocation, il);
}
};