DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ActionTakeItemToHands.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 ItemBase targetItem = ItemBase.Cast(target.GetObject());
34 if (!targetItem)
35 return false;
36
37 EntityAI targetParent = EntityAI.Cast(targetItem.GetHierarchyParent());
38 if (!targetItem.IsTakeable() || targetItem.IsBeingPlaced() || targetItem.IsSetForDeletion() || ( targetItem.GetHierarchyParent() && !BaseBuildingBase.Cast(targetParent) ) || ((targetParent && !targetItem.CanDetachAttachment(targetParent)) || (targetParent && !targetParent.CanReleaseAttachment(targetItem))))
39 return false;
40
41 return player.GetInventory().CanAddEntityIntoHands(targetItem);
42 }
43
44 override bool CanContinue(ActionData action_data)
45 {
46 return true;
47 }
48
49 override void OnExecute(ActionData action_data)
50 {
51 if (GetGame().IsMultiplayer() && GetGame().IsServer())
52 return;
53
54 ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
55 ClearInventoryReservationEx(action_data);
56
57 float stackable = ntarget.GetTargetQuantityMax(-1);
58
59 if (stackable == 0 || stackable >= ntarget.GetQuantity())
60 {
61 action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
62 }
63 else
64 {
66 il.SetHands(action_data.m_Player, ntarget);
67 ntarget.SplitIntoStackMaxToInventoryLocationClient(il);
68 }
69 }
70
71 override void CreateAndSetupActionCallback(ActionData action_data)
72 {
73 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
74 if (!target)
75 return;
76
77 ActionBaseCB callback;
78
79 if (target.IsHeavyBehaviour())
80 {
81 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
82 }
83 else
84 {
85 if (action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
86 {
87 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(m_CommandUID,GetCallbackClassTypename()));
88 }
89 else
90 {
91 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(m_CommandUIDProne,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
92 }
93 }
94
95 callback.SetActionData(action_data);
96 callback.InitActionComponent();
97 action_data.m_Callback = callback;
98 }
99
100
101 override bool CanBeUsedOnBack()
102 {
103 return true;
104 }
105}
106
107class ActionSwapItemToHands: ActionTakeItemToHands
108{
110
111 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
112 {
113 ItemBase targetItem = ItemBase.Cast(target.GetObject());
114 if (!targetItem || !targetItem.IsTakeable() || targetItem.IsBeingPlaced())
115 return false;
116
117 return player.GetInventory().CanSwapEntitiesEx(targetItem,item);
118 }
119
120 override bool UseMainItem()
121 {
122 return true;
123 }
124
125 override bool MainItemAlwaysInHands()
126 {
127 return true;
128 }
129
130 override void CreateAndSetupActionCallback(ActionData action_data)
131 {
132 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
133 if (!target)
134 return;
135
136 ActionBaseCB callback;
137
138 if (target.IsHeavyBehaviour())
139 {
140 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT));
141 }
142 else
143 {
144 return;
145 }
146
147 callback.SetActionData(action_data);
148 callback.InitActionComponent();
149 action_data.m_Callback = callback;
150 }
151
152 override void Start(ActionData action_data)
153 {
154 super.Start(action_data);
155
156 bool b1 = action_data.m_MainItem.ConfigGetString("physLayer") == "item_large";
157 action_data.m_MainItem.m_ThrowItemOnDrop = b1;
158
159 EntityAI object = EntityAI.Cast(action_data.m_Target.GetObject());
160 if (!object || !object.IsHeavyBehaviour())
161 {
162 action_data.m_Player.GetActionManager().Interrupt();
163 }
164 else
165 m_Executable = true;
166 }
167
168 override void OnExecuteServer(ActionData action_data)
169 {
170 if (!m_Executable)
171 return;
172
173 if (GetGame().IsMultiplayer())
174 return;
175
176 PerformSwap(action_data);
177 }
178
179 override void OnExecuteClient( ActionData action_data )
180 {
181 if (!m_Executable)
182 return;
183
184 PerformSwap(action_data);
185 }
186
187 override void OnEndServer( ActionData action_data )
188 {
189 if (m_Executable)
190 {
191 m_Executable = false;
192 return;
193 }
194
195 if (GetGame().IsMultiplayer())
196 return;
197
198 PerformSwap(action_data);
199 }
200
201 override void OnEndClient( ActionData action_data )
202 {
203 if (m_Executable)
204 {
205 m_Executable = false;
206 return;
207 }
208
209 PerformSwap(action_data);
210 }
211
212 void PerformSwap( ActionData action_data )
213 {
214 EntityAI ntarget = EntityAI.Cast(action_data.m_Target.GetObject());
215 if (action_data.m_Player)
216 {
217 InventoryMode invMode = InventoryMode.PREDICTIVE;
218 if (action_data.m_Player.NeedInventoryJunctureFromServer(ntarget, ntarget.GetHierarchyParent(), action_data.m_Player))
219 invMode = InventoryMode.JUNCTURE;
220
221 action_data.m_Player.TakeEntityToHandsImpl(invMode, ntarget);
222 }
223 }
224}
InventoryMode
Definition Inventory.c:20
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
override void OnExecuteServer(ActionData action_data)
override void OnEndServer(ActionData action_data)
ActionTakeItemToHands m_Executable
override void OnExecuteClient(ActionData action_data)
override void OnEndClient(ActionData action_data)
void PerformSwap(ActionData action_data)
class ActionTargets ActionTarget
void Start()
Plays all elements this effects consists of.
Definition Effect.c:153
override bool IsHeavyBehaviour()
Definition ItemBase.c:8799
void SetActionData(ActionData action_data)
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ActionBaseCB m_Callback
Definition ActionBase.c:29
ref ActionTarget m_Target
Definition ActionBase.c:32
override bool MainItemAlwaysInHands()
override bool UseMainItem()
override bool CanContinue(ActionData action_data)
override void CreateConditionComponents()
override void OnExecute(ActionData action_data)
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void CreateAndSetupActionCallback(ActionData action_data)
override bool HasProneException()
protected int m_CommandUIDProne
protected GetCallbackClassTypename()
Super root of all classes in Enforce script.
Definition EnScript.c:11
InventoryLocation.
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
override bool IsTakeable()
override bool CanDetachAttachment(EntityAI parent)
Definition GardenLime.c:42
const float DEFAULT
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.