DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionTakeHybridAttachmentToHands.c
Go to the documentation of this file.
2{
4 {
5 m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS;
6 m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS;
7 m_Text = "#take_to_hands";
8 }
9
11 {
14 }
15
16 override bool HasProneException()
17 {
18 return true;
19 }
20
21 override typename GetInputType()
22 {
24 }
25
26 override bool HasProgress()
27 {
28 return false;
29 }
30
31 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
32 {
33 EntityAI tgt_entity = EntityAI.Cast( target.GetObject() );
34
35 if ( tgt_entity && BaseBuildingBase.Cast(tgt_entity) &&!tgt_entity.IsBeingPlaced() /*&& BaseBuildingBase.Cast(tgt_entity).IsPlayerInside(player,"")*/ )
36 {
37 string component_name = tgt_entity.GetActionComponentName( target.GetComponentIndex() );
38
39 ItemBase attachment = ItemBase.Cast(tgt_entity.FindAttachmentBySlotName(component_name));
40
41 if ( attachment && player.GetInventory().CanAddEntityIntoHands(attachment) && attachment.IsTakeable() )
42 {
43 return true;
44 }
45 }
46 return false;
47 }
48
49 override bool CanContinue( ActionData action_data )
50 {
51 return true;
52 }
53
54 override void OnExecuteClient( ActionData action_data )
55 {
56 OnExecuteImpl(action_data);
57 }
58
59 protected void OnExecuteImpl( ActionData action_data )
60 {
61 EntityAI tgt_entity = EntityAI.Cast( action_data.m_Target.GetObject() );
62 string component_name = tgt_entity.GetActionComponentName( action_data.m_Target.GetComponentIndex() );
63 ItemBase attachment;
64
65 if ( tgt_entity && ItemBase.CastTo(attachment, tgt_entity.FindAttachmentBySlotName(component_name)) )
66 {
67 ClearInventoryReservationEx(action_data);
68 float stackable = attachment.GetTargetQuantityMax(-1);
69
70 if( stackable == 0 || stackable >= attachment.GetQuantity() )
71 {
72 //take to hands
73 action_data.m_Player.PredictiveTakeEntityToHands( attachment );
74 }
75 else if( stackable != 0 && stackable < attachment.GetQuantity() )
76 {
77 //split and take to hands
78 attachment.SplitIntoStackMaxHandsClient( action_data.m_Player );
79 }
80 }
81 }
82
83 override void OnExecuteServer( ActionData action_data )
84 {
85 if (GetGame().IsMultiplayer())
86 return; // multiplayer handled on client side via OnExecuteClient
87 else
88 OnExecuteImpl(action_data); // single player
89 }
90
91 override void CreateAndSetupActionCallback( ActionData action_data )
92 {
93 EntityAI tgt_entity = EntityAI.Cast( action_data.m_Target.GetObject() );
94 string component_name = tgt_entity.GetActionComponentName( action_data.m_Target.GetComponentIndex() );
95 ItemBase attachment;
96 bool heavy_item = false;
97
98 if ( tgt_entity && ItemBase.CastTo(attachment, tgt_entity.FindAttachmentBySlotName(component_name)) )
99 {
100 ActionBaseCB callback;
101 if ( attachment && attachment.ConfigIsExisting("heavyItem") && attachment.ConfigGetBool("heavyItem") )
102 {
103 heavy_item = true;
104 }
105 }
106
107 if( heavy_item )
108 {
109 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT));
110 }
111 else
112 {
113 if( action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT) )
114 {
115 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_PICKUP_HANDS,GetCallbackClassTypename()));
116 }
117 else
118 {
119 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HANDS,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
120 }
121 }
122 callback.SetActionData(action_data);
123 callback.InitActionComponent();
124 action_data.m_Callback = callback;
125 }
126}
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
void ClearInventoryReservationEx(ActionData action_data)
Definition ActionBase.c:861
protected string m_Text
Definition ActionBase.c:49
class ActionTargets ActionTarget
PlayerBase m_Player
Definition ActionBase.c:33
ActionBaseCB m_Callback
Definition ActionBase.c:29
ref ActionTarget m_Target
Definition ActionBase.c:32
override void OnExecuteServer(ActionData action_data)
override bool CanContinue(ActionData action_data)
protected void OnExecuteImpl(ActionData action_data)
override void OnExecuteClient(ActionData action_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void CreateAndSetupActionCallback(ActionData action_data)
protected int m_CommandUIDProne
protected GetCallbackClassTypename()
Super root of all classes in Enforce script.
Definition EnScript.c:11
override bool IsTakeable()
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.