DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionTakeItemToHands.c
См. документацию.
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
44 override bool CanContinue(ActionData action_data)
45 {
46 return true;
47 }
48
49 override void OnEndServer(ActionData action_data)
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
58 override void OnExecute(ActionData action_data)
59 {
60 if (GetGame().IsDedicatedServer())
61 {
62 ClearActionJuncture(action_data);
63 return;
64 }
65
66 ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
67 ClearInventoryReservationEx(action_data);
68
69 float stackable = ntarget.GetTargetQuantityMax(-1);
70
71 if (stackable == 0 || stackable >= ntarget.GetQuantity())
72 {
73 action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
74 }
75 else
76 {
78 il.SetHands(action_data.m_Player, ntarget);
79 ntarget.SplitIntoStackMaxToInventoryLocationClient(il);
80 }
81 }
82
83 override void CreateAndSetupActionCallback(ActionData action_data)
84 {
85 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
86 if (!target)
87 return;
88
89 ActionBaseCB callback;
90
91 if (target.IsHeavyBehaviour())
92 {
93 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
94 }
95 else
96 {
97 if (action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
98 {
99 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(m_CommandUID,GetCallbackClassTypename()));
100 }
101 else
102 {
103 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(m_CommandUIDProne,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
104 }
105 }
106
107 callback.SetActionData(action_data);
108 callback.InitActionComponent();
109 action_data.m_Callback = callback;
110 }
111
112
113 override bool CanBeUsedOnBack()
114 {
115 return true;
116 }
117}
118
119class ActionSwapItemToHands: ActionTakeItemToHands
120{
122
123 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
124 {
125 ItemBase targetItem = ItemBase.Cast(target.GetObject());
126 if (!targetItem || !targetItem.IsTakeable() || targetItem.IsBeingPlaced())
127 return false;
128
129 return player.GetInventory().CanSwapEntitiesEx(targetItem,item);
130 }
131
132 override bool UseMainItem()
133 {
134 return true;
135 }
136
137 override bool MainItemAlwaysInHands()
138 {
139 return true;
140 }
141
142 override void CreateAndSetupActionCallback(ActionData action_data)
143 {
144 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
145 if (!target)
146 return;
147
148 ActionBaseCB callback;
149
150 if (target.IsHeavyBehaviour())
151 {
152 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT));
153 }
154 else
155 {
156 return;
157 }
158
159 callback.SetActionData(action_data);
160 callback.InitActionComponent();
161 action_data.m_Callback = callback;
162 }
163
164 override void Start(ActionData action_data)
165 {
166 super.Start(action_data);
167
168 bool b1 = action_data.m_MainItem.ConfigGetString("physLayer") == "item_large";
169 action_data.m_MainItem.m_ThrowItemOnDrop = b1;
170
171 EntityAI object = EntityAI.Cast(action_data.m_Target.GetObject());
172 if (!object || !object.IsHeavyBehaviour())
173 {
174 action_data.m_Player.GetActionManager().InterruptNoSync();
175 }
176 else
177 m_Executable = true;
178 }
179
180 override void OnExecute(ActionData action_data)
181 {
182 if (!m_Executable)
183 return;
184
185 if (GetGame().IsDedicatedServer())
186 {
187 ClearActionJuncture(action_data);
188 return;
189 }
190
191 PerformSwap(action_data);
192 }
193
194 override void OnEnd(ActionData action_data)
195 {
196 super.OnEnd(action_data);
197
198 if (m_Executable)
199 {
200 m_Executable = false;
201 return;
202 }
203
204 if (GetGame().IsDedicatedServer())
205 {
206 ClearActionJuncture(action_data);
207 return;
208 }
209
210 PerformSwap(action_data);
211 }
212
213 void PerformSwap( ActionData action_data )
214 {
215 ClearInventoryReservationEx(action_data);
216
217 EntityAI ntarget = EntityAI.Cast(action_data.m_Target.GetObject());
218 if (action_data.m_Player)
219 {
220 InventoryMode invMode = InventoryMode.PREDICTIVE;
221 if (!GetGame().IsMultiplayer())
222 invMode = InventoryMode.LOCAL;
223 else if (action_data.m_Player.NeedInventoryJunctureFromServer(ntarget, ntarget.GetHierarchyParent(), action_data.m_Player))
224 invMode = InventoryMode.JUNCTURE;
225
226 action_data.m_Player.TakeEntityToHandsImpl(invMode, ntarget);
227 }
228 }
229}
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
Определения Inventory.c:22
ActionBase ActionData
Определения ActionBase.c:30
ActionTakeItemToHands m_Executable
void PerformSwap(ActionData action_data)
Определения ActionTakeItemToHands.c:213
class ActionTargets ActionTarget
void Start()
Plays all elements this effects consists of.
Определения Effect.c:155
override bool IsHeavyBehaviour()
Определения ItemBase.c:8998
void ClearActionJuncture(ActionData action_data)
Определения ActionBase.c:1083
string m_Text
Определения ActionBase.c:58
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
void ClearInventoryReservationEx(ActionData action_data)
Определения ActionBase.c:1025
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
void InitActionComponent()
Определения AnimatedActionBase.c:66
void SetActionData(ActionData action_data)
Определения AnimatedActionBase.c:109
Определения AnimatedActionBase.c:2
override bool MainItemAlwaysInHands()
Определения ActionInteractBase.c:76
void ActionInteractBase()
Определения ActionInteractBase.c:43
override bool UseMainItem()
Определения ActionInteractBase.c:71
override void CreateConditionComponents()
Определения ActionTakeItemToHands.c:10
override bool CanBeUsedOnBack()
Определения ActionTakeItemToHands.c:113
override bool HasProneException()
Определения ActionTakeItemToHands.c:16
override GetInputType()
Определения ActionTakeItemToHands.c:21
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionTakeItemToHands.c:31
override void OnEndServer(ActionData action_data)
Определения ActionTakeItemToHands.c:49
override bool CanContinue(ActionData action_data)
Определения ActionTakeItemToHands.c:44
override void OnExecute(ActionData action_data)
Определения ActionTakeItemToHands.c:58
void ActionTakeItemToHands()
Определения ActionTakeItemToHands.c:3
override bool HasProgress()
Определения ActionTakeItemToHands.c:26
override void CreateAndSetupActionCallback(ActionData action_data)
Определения ActionTakeItemToHands.c:83
int m_CommandUID
Определения AnimatedActionBase.c:143
GetCallbackClassTypename()
Определения AnimatedActionBase.c:312
int m_CommandUIDProne
Определения AnimatedActionBase.c:144
Определения Fence.c:2
Определения CCINone.c:2
Определения CCTObject.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения Building.c:6
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
InventoryLocation.
Определения InventoryLocation.c:29
override bool CanDetachAttachment(EntityAI parent)
Определения GardenLime.c:42
override bool IsTakeable()
Определения BaseBuildingBase.c:988
Определения InventoryItem.c:731
Определения PlayerBaseClient.c:2
const float DEFAULT
Определения ActionConstants.c:112
DayZPlayerConstants
defined in C++
Определения 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.
void OnEnd()
Определения Sound.c:226