DayZ 1.30
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() && !targetParent.CanUseConstruction()) || ((targetParent && !targetItem.CanDetachAttachment(targetParent)) || (targetParent && !targetParent.CanReleaseAttachment(targetItem))))
39 return false;
40
42 DigitalCodeLock codeLock = DigitalCodeLock.Cast(targetItem);
43 if (codeLock && !codeLock.CanDetachCodeLock(player, target.GetComponentIndex()))
44 return false;
45
46 return player.GetInventory().CanAddEntityIntoHands(targetItem);
47 }
48
49 override bool CanContinue(ActionData action_data)
50 {
51 return true;
52 }
53
54 override void OnEndServer(ActionData action_data)
55 {
56 super.OnEndServer(action_data);
57
58 EntityAI takenEntity = EntityAI.Cast(action_data.m_Target.GetObject());
59 if (takenEntity && takenEntity.GetCompEM() && takenEntity.IsElectricAppliance())
60 takenEntity.GetCompEM().UnplugThis();
61 }
62
63 override void OnExecute(ActionData action_data)
64 {
65 if (g_Game.IsDedicatedServer())
66 {
67 ClearActionJuncture(action_data);
68 return;
69 }
70
71 ItemBase ntarget = ItemBase.Cast(action_data.m_Target.GetObject());
72 ClearInventoryReservationEx(action_data);
73
74 float stackable = ntarget.GetTargetQuantityMax(-1);
75
76 if (stackable == 0 || stackable >= ntarget.GetQuantity())
77 {
78 action_data.m_Player.PredictiveTakeEntityToHands(ntarget);
79 }
80 else
81 {
83 il.SetHands(action_data.m_Player, ntarget);
84 ntarget.SplitIntoStackMaxToInventoryLocationClient(il);
85 }
86 }
87
88 override void CreateAndSetupActionCallback(ActionData action_data)
89 {
90 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
91 if (!target)
92 return;
93
94 ActionBaseCB callback;
95
96 if (target.IsHeavyBehaviour())
97 {
98 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(), DayZPlayerConstants.STANCEMASK_ERECT));
99 }
100 else
101 {
102 if (action_data.m_Player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
103 {
104 Class.CastTo(callback, action_data.m_Player.AddCommandModifier_Action(m_CommandUID,GetCallbackClassTypename()));
105 }
106 else
107 {
108 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(m_CommandUIDProne,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_PRONE));
109 }
110 }
111
112 callback.SetActionData(action_data);
113 callback.InitActionComponent();
114 action_data.m_Callback = callback;
115 }
116
117
118 override bool CanBeUsedOnBack()
119 {
120 return true;
121 }
122}
123
124class ActionSwapItemToHands: ActionTakeItemToHands
125{
127
128 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
129 {
130 ItemBase targetItem = ItemBase.Cast(target.GetObject());
131 if (!targetItem || !targetItem.IsTakeable() || targetItem.IsBeingPlaced())
132 return false;
133
134 return player.GetInventory().CanSwapEntitiesEx(targetItem,item);
135 }
136
137 override bool UseMainItem()
138 {
139 return true;
140 }
141
142 override bool MainItemAlwaysInHands()
143 {
144 return true;
145 }
146
147 override void CreateAndSetupActionCallback(ActionData action_data)
148 {
149 EntityAI target = EntityAI.Cast(action_data.m_Target.GetObject());
150 if (!target)
151 return;
152
153 ActionBaseCB callback;
154
155 if (target.IsHeavyBehaviour())
156 {
157 Class.CastTo(callback, action_data.m_Player.StartCommand_Action(DayZPlayerConstants.CMD_ACTIONFB_PICKUP_HEAVY,GetCallbackClassTypename(),DayZPlayerConstants.STANCEMASK_ERECT));
158 }
159 else
160 {
161 return;
162 }
163
164 callback.SetActionData(action_data);
165 callback.InitActionComponent();
166 action_data.m_Callback = callback;
167 }
168
169 override void Start(ActionData action_data)
170 {
171 super.Start(action_data);
172
173 bool b1 = action_data.m_MainItem.ConfigGetString("physLayer") == "item_large";
174 action_data.m_MainItem.m_ThrowItemOnDrop = b1;
175
176 EntityAI object = EntityAI.Cast(action_data.m_Target.GetObject());
177 if (!object || !object.IsHeavyBehaviour())
178 {
179 action_data.m_Player.GetActionManager().InterruptNoSync();
180 }
181 else
182 m_Executable = true;
183 }
184
185 override void OnExecute(ActionData action_data)
186 {
187 if (!m_Executable)
188 return;
189
190 if (g_Game.IsDedicatedServer())
191 {
192 ClearActionJuncture(action_data);
193 return;
194 }
195
196 PerformSwap(action_data);
197 }
198
199 override void OnEnd(ActionData action_data)
200 {
201 super.OnEnd(action_data);
202
203 if (m_Executable)
204 {
205 m_Executable = false;
206 return;
207 }
208
209 if (g_Game.IsDedicatedServer())
210 {
211 ClearActionJuncture(action_data);
212 return;
213 }
214
215 PerformSwap(action_data);
216 }
217
218 void PerformSwap( ActionData action_data )
219 {
220 ClearInventoryReservationEx(action_data);
221
222 EntityAI ntarget = EntityAI.Cast(action_data.m_Target.GetObject());
223 if (action_data.m_Player)
224 {
225 InventoryMode invMode = InventoryMode.PREDICTIVE;
226 if (!g_Game.IsMultiplayer())
227 invMode = InventoryMode.LOCAL;
228 else if (action_data.m_Player.NeedInventoryJunctureFromServer(ntarget, ntarget.GetHierarchyParent(), action_data.m_Player))
229 invMode = InventoryMode.JUNCTURE;
230
231 action_data.m_Player.TakeEntityToHandsImpl(invMode, ntarget);
232 }
233 }
234}
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
string m_Text
Определения ActionBase.c:57
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
void ClearInventoryReservationEx(ActionData action_data)
Определения ActionBase.c:1120
void ClearActionJuncture(ActionData action_data)
Определения ActionBase.c:1207
ActionTakeItemToHands m_Executable
void PerformSwap(ActionData action_data)
Определения ActionTakeItemToHands.c:218
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
DayZGame g_Game
Определения DayZGame.c:4074
void Start()
Plays all elements this effects consists of.
Определения Effect.c:157
override bool IsHeavyBehaviour()
Определения ItemBase.c:4324
void InitActionComponent()
Определения AnimatedActionBase.c:68
void SetActionData(ActionData action_data)
Определения AnimatedActionBase.c:113
Определения AnimatedActionBase.c:2
PlayerBase m_Player
Определения ActionBase.c:40
ActionBaseCB m_Callback
Определения ActionBase.c:36
ref ActionTarget m_Target
Определения ActionBase.c:39
ItemBase m_MainItem
Определения ActionBase.c:35
Определения ActionBase.c:22
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:118
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:54
override bool CanContinue(ActionData action_data)
Определения ActionTakeItemToHands.c:49
override void OnExecute(ActionData action_data)
Определения ActionTakeItemToHands.c:63
void ActionTakeItemToHands()
Определения ActionTakeItemToHands.c:3
override bool HasProgress()
Определения ActionTakeItemToHands.c:26
override void CreateAndSetupActionCallback(ActionData action_data)
Определения ActionTakeItemToHands.c:88
int m_CommandUID
Определения AnimatedActionBase.c:147
GetCallbackClassTypename()
Определения AnimatedActionBase.c:319
int m_CommandUIDProne
Определения AnimatedActionBase.c:148
Определения CCINone.c:2
Определения CCTObject.c:2
Super root of all classes in Enforce script.
Определения EnScript.c:11
bool CanDetachCodeLock(notnull PlayerBase player, int componentIndex)
Condition check called from ActionTakeItem and ActionTakeItemToHands.
Определения CodeLock.c:216
Определения CodeLock.c:2
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
InventoryLocation.
Определения InventoryLocation.c:30
override bool CanDetachAttachment(EntityAI parent)
Определения GardenLime.c:42
override bool IsTakeable()
Определения BaseBuildingBase.c:909
Определения PlayerBaseClient.c:2
const float DEFAULT
Определения ActionConstants.c:114
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
void OnEnd()
Определения Sound.c:226