ActionRepositionPluggedItem.c
class ActionRepositionPluggedItem : ActionInteractBase
{
// Through this action players can reposition already placed electric devices without unplugging them from the power source.
void ActionRepositionPluggedItem()
{
m_CallbackClass = ActionInteractBaseCB;
m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
m_Text = "#reposition";
}
override typename GetInputType()
{
return ContinuousInteractActionInput;
}
override bool HasProgress()
{
return false;
}
override bool CanBeUsedOnBack()
{
return false;
}
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
{
ItemBase targetItem = ItemBase.Cast(target.GetObject());
EntityAI targetParent = EntityAI.Cast(targetItem.GetHierarchyParent());
if (!targetItem || !targetItem.IsTakeable() || targetItem.IsBeingPlaced() || (targetItem.GetCompEM() && !targetItem.GetCompEM().IsPlugged()) || ( targetItem.GetHierarchyParent() && !BaseBuildingBase.Cast(targetItem.GetHierarchyParent()) ) || ((targetParent && !targetItem.CanDetachAttachment(targetParent)) || (targetParent && !targetParent.CanReleaseAttachment(targetItem))))
return false;
if (targetItem.HasEnergyManager() && targetItem.GetCompEM().IsPlugged())
return player.GetInventory().CanAddEntityIntoHands(targetItem);
return false;
}
override bool CanContinue(ActionData action_data)
{
EntityAI ent = EntityAI.Cast(action_data.m_Target.GetObject());
return ent && ent.GetCompEM().GetCordLength() > 0;
}
override void Start(ActionData action_data)
{
super.Start(action_data);
ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
if (g_Game.IsMultiplayer() && g_Game.IsServer())
action_data.m_Player.PlacingStartServer(ntarget);
else
action_data.m_Player.PlacingStartLocal(ntarget);
}
override void OnExecuteServer(ActionData action_data)
{
ClearActionJuncture(action_data);
if (g_Game.IsMultiplayer())
return;
InventoryLocation il = new InventoryLocation();
ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
ClearInventoryReservationEx(action_data);
action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
}
override void OnExecuteClient(ActionData action_data)
{
InventoryLocation il = new InventoryLocation();
ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
ClearInventoryReservationEx(action_data);
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
{
Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename()));
}
callback.SetActionData(action_data);
callback.InitActionComponent();
action_data.m_Callback = callback;
}
//! DEPRECATED
protected ItemBase m_SourceForReplug;
}