DayZ 1.24
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
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
45 {
46 return true;
47 }
48
50 {
51 super.OnEndServer(action_data);
52
53 EntityAI takenEntity = EntityAI.Cast(action_data.m_Target.GetObject());
54 if (takenEntity && takenEntity.GetCompEM() && takenEntity.IsElectricAppliance())
55 takenEntity.GetCompEM().UnplugThis();
56 }
57
59 {
60 if (GetGame().IsDedicatedServer())
61 return;
62
63 ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
65
66 float stackable = ntarget.GetTargetQuantityMax(-1);
67
68 if (stackable == 0 || stackable >= ntarget.GetQuantity())
69 action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
70 else
71 {
73 il.SetHands(action_data.m_Player, ntarget);
74 ntarget.SplitIntoStackMaxToInventoryLocationClient(il);
75 }
76 }
77
79 {
80 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
81 if (!target)
82 return;
83
85
86 if (target.IsHeavyBehaviour())
87 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY, GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
88 else
89 {
90 if (action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
91 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(m_CommandUID, GetCallbackClassTypename()));
92 else
93 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(m_CommandUIDProne, GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_PRONE));
94 }
95
96 callback.SetActionData(action_data);
97 callback.InitActionComponent();
98 action_data.m_Callback = callback;
99 }
100
101
102 override bool CanBeUsedOnBack()
103 {
104 return true;
105 }
106}
107
109{
111
112 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
113 {
114 ItemBase targetItem = ItemBase.Cast(target.GetObject());
115 if (!targetItem || !targetItem.IsTakeable() || targetItem.IsBeingPlaced())
116 return false;
117
118 return player.GetInventory().CanSwapEntitiesEx(targetItem, item);
119 }
120
121 override bool UseMainItem()
122 {
123 return true;
124 }
125
126 override bool MainItemAlwaysInHands()
127 {
128 return true;
129 }
130
132 {
133 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
134 if (!target)
135 return;
136
138
139 if (target.IsHeavyBehaviour())
140 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY, GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
141 else
142 return;
143
144 callback.SetActionData(action_data);
145 callback.InitActionComponent();
146 action_data.m_Callback = callback;
147 }
148
150 {
151 super.Start(action_data);
152
153 bool b1 = action_data.m_MainItem.ConfigGetString("physLayer") == "item_large";
154 action_data.m_MainItem.m_ThrowItemOnDrop = b1;
155
156 EntityAI object = EntityAI.Cast(action_data.m_Target.GetObject());
157 if (!object || !object.IsHeavyBehaviour())
158 action_data.m_Player.GetActionManager().Interrupt();
159 else
160 m_Executable = true;
161 }
162
164 {
165 if (!m_Executable)
166 return;
167
168 if (GetGame().IsMultiplayer())
169 return;
170
172 }
173
175 {
176 if (!m_Executable)
177 return;
178
180 }
181
183 {
184 if (m_Executable)
185 {
186 m_Executable = false;
187 return;
188 }
189
190 if (GetGame().IsMultiplayer())
191 return;
192
194 }
195
197 {
198 if (m_Executable)
199 {
200 m_Executable = false;
201 return;
202 }
203
205 }
206
208 {
209 EntityAI ntarget = EntityAI.Cast(action_data.m_Target.GetObject());
210 if (action_data.m_Player)
211 {
213 if (action_data.m_Player.NeedInventoryJunctureFromServer(ntarget, ntarget.GetHierarchyParent(), action_data.m_Player))
214 invMode = InventoryMode.JUNCTURE;
215
216 action_data.m_Player.TakeEntityToHandsImpl(invMode, ntarget);
217 }
218 }
219}
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
Definition Inventory.c:22
string m_Text
Definition ActionBase.c:49
void OnEndServer(ActionData action_data)
Definition ActionBase.c:962
bool MainItemAlwaysInHands()
Definition ActionBase.c:340
ref CCIBase m_ConditionItem
Definition ActionBase.c:55
ref CCTBase m_ConditionTarget
Definition ActionBase.c:56
void ClearInventoryReservationEx(ActionData action_data)
Definition ActionBase.c:790
bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Definition ActionBase.c:350
bool UseMainItem()
Definition ActionBase.c:335
void OnEndClient(ActionData action_data)
Definition ActionBase.c:959
override void OnExecuteServer(ActionData action_data)
override void OnExecuteClient(ActionData action_data)
ActionTakeItemToHands m_Executable
void PerformSwap(ActionData action_data)
void CreateAndSetupActionCallback(ActionData action_data)
void Start()
Plays all elements this effects consists of.
Definition Effect.c:149
override bool IsHeavyBehaviour()
Definition ItemBase.c:8861
override void CreateConditionComponents()
override bool HasProneException()
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
override void OnEndServer(ActionData action_data)
override bool CanContinue(ActionData action_data)
override void OnExecute(ActionData action_data)
override void CreateAndSetupActionCallback(ActionData action_data)
Super root of all classes in Enforce script.
Definition EnScript.c:11
InventoryLocation.
const float DEFAULT
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:597
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.