DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
FirearmActionDetachMagazine.c
См. документацию.
1
2class DetachMagActionReciveData : ActionReciveData
3{
5}
6
8class DetachMagActionData : ActionData
9{
11}
12
13[Obsolete("1.30: Use class FirearmActionDetachMagazine instead")];
15{
19
20 override bool HasTarget()
21 {
22 return true;
23 }
24
25 override typename GetInputType()
26 {
28 }
29
31 {
32 return true;
33 }
34
36 {
39 }
40
41 override bool HasProgress()
42 {
43 return false;
44 }
45
46 override bool InventoryReservation( ActionData action_data)
47 {
48 Magazine mag = Magazine.Cast(action_data.m_Target.GetObject());
50 if( !action_data.m_Player.GetInventory().FindFreeLocationFor(mag, FindInventoryLocationType.ANY_CARGO, il) )
51 return false;
52
53 if( !super.InventoryReservation( action_data) )
54 return false;
55
56 DetachMagActionData action_data_dm = DetachMagActionData.Cast(action_data);
57 if( !action_data.m_Player.GetInventory().AddInventoryReservationEx(mag,il,10000) )
58 return false;
59
60 action_data_dm.m_ReservedInventoryLocations.Insert(il);
61 action_data_dm.m_ilMagazine = il;
62
63 return true;
64 }
65
67 {
68 ActionData action_data = new DetachMagActionData;
69 return action_data;
70 }
71
72 override void WriteToContext (ParamsWriteContext ctx, ActionData action_data)
73 {
74 super.WriteToContext(ctx, action_data);
75
76 DetachMagActionData action_data_dm;
77 DetachMagActionData.CastTo(action_data_dm, action_data);
78
79 action_data_dm.m_ilMagazine.WriteToContext(ctx);
80 }
81
82 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
83 {
84 if(!action_recive_data)
85 {
86 action_recive_data = new DetachMagActionReciveData;
87 }
88
89 if(!super.ReadFromContext( ctx, action_recive_data ))
90 return false;
91
92 DetachMagActionReciveData recive_data_dm;
93 recive_data_dm = DetachMagActionReciveData.Cast( action_recive_data );
94
95 recive_data_dm.m_ilMagazine = new InventoryLocation;
96
97 if(!recive_data_dm.m_ilMagazine.ReadFromContext(ctx))
98 return false;
99
100 return true;
101 }
102
103 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
104 {
105 super.HandleReciveData(action_recive_data, action_data);
106
107 DetachMagActionReciveData recive_data_dm = DetachMagActionReciveData.Cast(action_recive_data);
108 DetachMagActionData action_data_dm = DetachMagActionData.Cast(action_data);
109
110 action_data_dm.m_ilMagazine = recive_data_dm.m_ilMagazine;
111 }
112
113
114 override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item ) //condition for action
115 {
116 if (!super.ActionCondition( player, target, item ))
117 return false;
118
119 Magazine mag = Magazine.Cast(target.GetObject());
120 Weapon_Base wpn = Weapon_Base.Cast(item);
121 return mag && player.GetWeaponManager().CanDetachMagazine(wpn,mag);
122 }
123
124 override bool ActionConditionContinue( ActionData action_data)
125 {
126 return true;
127 }
128
129 override void Start( ActionData action_data )
130 {
131 super.Start( action_data );
132 DetachMagActionData action_data_dm = DetachMagActionData.Cast(action_data);
133
134 Weapon_Base wpn = Weapon_Base.Cast( action_data.m_MainItem );
135
136 action_data.m_Player.GetWeaponManager().DetachMagazine(action_data_dm.m_ilMagazine,this);
137 }
138};
139
145class AdvDetachMagActionData : SequentialActionData
146{
149}
150
151class FirearmActionDetachMagazine : ActionSequentialBase
152{
154 {
155 ActionData action_data = new AdvDetachMagActionData;
156 return action_data;
157 }
158
159 override bool InventoryReservation(ActionData action_data)
160 {
161 Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
162 Magazine mag = Magazine.Cast(action_data.m_Target.GetObject());
163
166
167 int ur_index = action_data.m_Player.GetHumanInventory().FindUserReservedLocationIndex(wpn);
168 if(ur_index > -1)
169 {
170 action_data.m_Player.GetHumanInventory().GetUserReservedLocation(ur_index,ilWpn);
171 }
172 else
173 {
174 action_data.m_Player.GetInventory().FindFreeLocationFor(wpn, FindInventoryLocationType.ANY_CARGO | FindInventoryLocationType.ATTACHMENT, ilWpn);
175 }
176
177 if(!action_data.m_Player.GetInventory().FindFreeLocationFor(mag, FindInventoryLocationType.ANY_CARGO, ilMag))
178 return false;
179
180 if(!super.InventoryReservation(action_data))
181 return false;
182
183 AdvDetachMagActionData action_data_dm = AdvDetachMagActionData.Cast(action_data);
184 if(!action_data.m_Player.GetInventory().AddInventoryReservationEx(wpn,ilWpn,10000))
185 return false;
186
187 if(!action_data.m_Player.GetInventory().AddInventoryReservationEx(mag,ilMag,10000))
188 return false;
189
190 action_data_dm.m_ReservedInventoryLocations.Insert(ilWpn);
191 action_data_dm.m_ReservedInventoryLocations.Insert(ilMag);
192 action_data_dm.m_ilWeapon = ilWpn;
193 action_data_dm.m_ilMagazine = ilMag;
194
195 return true;
196 }
197
198 override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
199 {
200 super.WriteToContext(ctx, action_data);
201
202 AdvDetachMagActionData action_data_dm;
203 AdvDetachMagActionData.CastTo(action_data_dm, action_data);
204
205 action_data_dm.m_ilWeapon.WriteToContext(ctx);
206 action_data_dm.m_ilMagazine.WriteToContext(ctx);
207 }
208
209 override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
210 {
211 if(!action_recive_data)
212 {
213 action_recive_data = new AdvDetachMagActionReciveData;
214 }
215
216 if(!super.ReadFromContext( ctx, action_recive_data ))
217 return false;
218
219 AdvDetachMagActionReciveData recive_data_dm;
220 recive_data_dm = AdvDetachMagActionReciveData.Cast(action_recive_data);
221
222 recive_data_dm.m_ilWeapon = new InventoryLocation;
223 recive_data_dm.m_ilMagazine = new InventoryLocation;
224
225 if(!recive_data_dm.m_ilWeapon.ReadFromContext(ctx))
226 return false;
227
228 if(!recive_data_dm.m_ilMagazine.ReadFromContext(ctx))
229 return false;
230
231 return true;
232 }
233
234 override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
235 {
236 super.HandleReciveData(action_recive_data, action_data);
237
238 AdvDetachMagActionReciveData recive_data_dm = AdvDetachMagActionReciveData.Cast(action_recive_data);
239 AdvDetachMagActionData action_data_dm = AdvDetachMagActionData.Cast(action_data);
240
241 action_data_dm.m_ilWeapon.Copy(recive_data_dm.m_ilWeapon);
242 action_data_dm.m_ilMagazine.Copy(recive_data_dm.m_ilMagazine);
243 }
244
245
246 override typename GetInputType()
247 {
249 }
250
251 override void CreateConditionComponents() //Instantiates components, called once from ActionManager on actions construction
252 {
255 }
256
258 {
259 return true;
260 }
261
263 {
264 return true;
265 }
266
267 override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
268 {
269 if (!super.ActionCondition(player, target, item))
270 return false;
271
272 Weapon_Base wpn = Weapon_Base.Cast(item);
273 int mi = wpn.GetCurrentMuzzle();
274 return wpn && wpn.GetMagazine(mi) == target.GetObject();
275 }
276
277 override bool ActionConditionContinue( ActionData action_data )
278 {
279 return true;
280 }
281
282 override void OnStageStart(SequentialActionData action_data)
283 {
284 if(action_data.m_ReciveEndInput)
285 {
286 End(action_data);
287 return;
288 }
289
290 super.OnStageStart(action_data);
291
292 AdvDetachMagActionData action_data_dm = AdvDetachMagActionData.Cast(action_data);
293
294 switch (action_data.m_Stage)
295 {
296 case 0:
297 action_data.m_Player.GetWeaponManager().DetachMagazine(action_data_dm.m_ilMagazine,this);
298 break;
299
300 case 1:
301 if (!action_data_dm.m_ilWeapon.IsValid())
302 {
303 End(action_data);
304 break;
305 }
306
307 Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
308 Magazine mag = Magazine.Cast(action_data.m_Target.GetObject());
309
310 if (!g_Game.IsDedicatedServer() && !mag.GetHierarchyParent())
311 {
312 InventoryMode invMode = InventoryMode.PREDICTIVE;
313
314 if (action_data.m_Player.NeedInventoryJunctureFromServer(mag, action_data.m_Player, action_data.m_Player) || action_data.m_Player.NeedInventoryJunctureFromServer(wpn, action_data.m_Player, action_data.m_Player))
315 invMode = InventoryMode.JUNCTURE;
316
317 action_data.m_Player.GetInventory().ForceSwapEntities(invMode, mag, wpn, action_data_dm.m_ilWeapon);
318 }
319
320 End(action_data);
321 break;
322 default:
323 End(action_data);
324 break;
325 }
326 }
327
328 override void OnUpdate(ActionData action_data)
329 {
330 super.OnUpdate(action_data);
331
332 SequentialActionData ad = SequentialActionData.Cast(action_data);
333 if(ad)
334 {
335 switch (ad.m_Stage)
336 {
337 case 0:
338 Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
339 if ((!wpn || ad.m_Player.GetItemInHands() != wpn || !ad.m_Player.GetWeaponManager().IsRunning()) && !ad.m_Player.IsJumpInProgress())
340 {
341 SetStage(1, ad);
342 }
343 break;
344 default:
345 break;
346 }
347 }
348 }
349
350 override void OnStartServer(ActionData action_data)
351 {
352 super.OnStartServer(action_data);
353
354 AdvDetachMagActionData action_data_dm = AdvDetachMagActionData.Cast(action_data);
355 g_Game.AddInventoryJunctureEx(action_data.m_Player, EntityAI.Cast(action_data.m_Target.GetObject()),action_data_dm.m_ilMagazine, true, 10000);
356 }
357
358 override void OnEndServer(ActionData action_data)
359 {
360 super.OnEndServer(action_data);
361
362 g_Game.ClearJuncture(action_data.m_Player, EntityAI.Cast(action_data.m_Target.GetObject()));
363 }
364}
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
ref CCIBase m_ConditionItem
Определения ActionBase.c:63
ref CCTBase m_ConditionTarget
Определения ActionBase.c:64
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
void SetStage(CodeLockStage stage)
Определения CodeLockComponent.c:76
DayZGame g_Game
Определения DayZGame.c:4074
DetachMagActionReciveData m_ilMagazine
OBSOLETE: Should be removed once we remove the whole FirearmActionDetachMagazine_Old class.
Определения FirearmActionDetachMagazine.c:148
AdvDetachMagActionReciveData m_ilWeapon
FindInventoryLocationType
flags for searching locations in inventory
Определения InventoryLocation.c:18
proto static native void End()
Finalizes the testing process.
PlayerBase m_Player
Определения ActionBase.c:40
ref ActionTarget m_Target
Определения ActionBase.c:39
bool m_ReciveEndInput
Определения ActionBase.c:48
ItemBase m_MainItem
Определения ActionBase.c:35
Определения ActionBase.c:22
ref InventoryLocation m_ilWeapon
Определения FirearmActionDetachMagazine.c:142
ref InventoryLocation m_ilMagazine
Определения FirearmActionDetachMagazine.c:143
Определения CCIDummy.c:2
Определения CCINonRuined.c:2
Определения CCTNone.c:2
Определения CCTSelf.c:2
ref InventoryLocation m_ilMagazine
Определения FirearmActionDetachMagazine.c:4
OBSOLETE: Should be removed once we remove the whole FirearmActionDetachMagazine_Old class.
Определения FirearmActionDetachMagazine.c:3
void FirearmActionBase()
override bool ActionConditionContinue(ActionData action_data)
Определения FirearmActionDetachMagazine.c:124
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения FirearmActionDetachMagazine.c:82
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения FirearmActionDetachMagazine.c:72
override bool CanBePerformedFromQuickbar()
Определения FirearmActionDetachMagazine.c:30
override ActionData CreateActionData()
Определения FirearmActionDetachMagazine.c:66
override bool InventoryReservation(ActionData action_data)
Определения FirearmActionDetachMagazine.c:46
override void Start(ActionData action_data)
Определения FirearmActionDetachMagazine.c:129
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения FirearmActionDetachMagazine.c:114
override void CreateConditionComponents()
Определения FirearmActionDetachMagazine.c:35
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения FirearmActionDetachMagazine.c:103
override void OnEndServer(ActionData action_data)
Определения FirearmActionDetachMagazine.c:358
override void OnUpdate(ActionData action_data)
Определения FirearmActionDetachMagazine.c:328
override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения FirearmActionDetachMagazine.c:198
override void OnStartServer(ActionData action_data)
Определения FirearmActionDetachMagazine.c:350
override bool ActionConditionContinue(ActionData action_data)
Определения FirearmActionDetachMagazine.c:277
override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения FirearmActionDetachMagazine.c:234
override ActionData CreateActionData()
Определения FirearmActionDetachMagazine.c:153
override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения FirearmActionDetachMagazine.c:267
override bool InventoryReservation(ActionData action_data)
Определения FirearmActionDetachMagazine.c:159
override bool CanBePerformedFromQuickbar()
Определения FirearmActionDetachMagazine.c:257
override void CreateConditionComponents()
Определения FirearmActionDetachMagazine.c:251
override bool CanBePerformedFromInventory()
Определения FirearmActionDetachMagazine.c:262
override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения FirearmActionDetachMagazine.c:209
override void OnStageStart(SequentialActionData action_data)
Определения FirearmActionDetachMagazine.c:282
bool ReadFromContext(ParamsReadContext ctx)
Определения InventoryLocation.c:310
InventoryLocation.
Определения InventoryLocation.c:30
Определения PlayerBaseClient.c:2
shorthand
Определения BoltActionRifle_Base.c:6
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16
void Obsolete(string msg="")
Определения EnScript.c:371