DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
HandAnimatedForceSwapping.c
См. документацию.
1// When editing this, take a look at HandAnimatedMoveToDst_W4T_Basic as well
2// They can not be inherited from each other because of different inheritance
3class HandAnimatedMoveToDst_W4T_Basic extends HandStateBase
4{
6
7 override void OnEntry(HandEventBase e)
8 {
9 Man player = e.m_Player;
10 if (m_Dst && m_Dst.IsValid())
11 {
12 EntityAI item = m_Dst.GetItem();
14 if (item.GetInventory().GetCurrentInventoryLocation(src))
15 {
17 {
18 player.OnItemInHandsChanged();
19 }
20 else
21 {
22 #ifdef ENABLE_LOGGING
24 {
25 Debug.InventoryHFSMLog("[hndfsm] HandAnimatedMoveToDst_W4T_Basic - not allowed");
26 }
27 #endif
28 }
29 }
30 else
31 Error("[hndfsm] " + Object.GetDebugName(e.m_Player) + " STS = " + e.m_Player.GetSimulationTimeStamp() + " HandAnimatedMoveToDst_W4T_Basic - item " + item + " has no Inventory or Location, inv=" + item.GetInventory());
32 }
33 else
34 Error("[hndfsm] HandAnimatedMoveToDst_W4T_Basic - event has no valid m_Dst");
35
36 super.OnEntry(e);
37 }
38
39 override void OnAbort(HandEventBase e)
40 {
41 m_Dst = null;
42 super.OnAbort(e);
43 }
44
45 override void OnExit(HandEventBase e)
46 {
47 m_Dst = null;
48 super.OnExit(e);
49 }
50
51 override bool IsWaitingForActionFinish() { return true; }
52};
53
55{
60
61 void HandForceSwapingAnimated_Show(Man player = null, HandStateBase parent = null, WeaponActions action = WeaponActions.NONE, int actionType = -1) { }
62
63 override void OnEntry(HandEventBase e)
64 {
65 if (m_Src1 && m_Src2 && m_Dst1 && m_Dst2)
66 {
67 if (!GetGame().IsMultiplayer())
68 {
69 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst1.GetItem(), m_Dst1);
70 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
72 {
74 e.m_Player.OnItemInHandsChanged();
75 }
76 }
77 else
78 {
79 if (!GetGame().IsDedicatedServer())
80 {
81 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst1.GetItem(), m_Dst1);
82 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
83
84 m_Player.GetHumanInventory().PostDeferredForceSwapEntities(InventoryMode.JUNCTURE, m_Dst1.GetItem(), m_Dst2.GetItem(), m_Dst1, m_Dst2);
85 }
86 else
87 {
90 }
91 }
92 }
93 else
94 Error("[hndfsm] HandForceSwappingAnimated_Show is not properly configured!");
95
96 super.OnEntry(e);
97 }
98
99 override void OnAbort(HandEventBase e)
100 {
101 m_Src1 = null;
102 m_Src2 = null;
103 m_Dst1 = null;
104 m_Dst2 = null;
105 super.OnAbort(e);
106 }
107
108 override void OnExit(HandEventBase e)
109 {
110 m_Src1 = null;
111 m_Src2 = null;
112 m_Dst1 = null;
113 m_Dst2 = null;
114 super.OnExit(e);
115 }
116
117 override bool IsWaitingForActionFinish() { return true; }
118};
119
120
121class HandAnimatedForceSwapping extends HandStateBase
122{
127
128 ref HandStartHidingAnimated m_Start;
129 ref HandAnimatedMoveToDst_W4T m_Show;
130 ref HandAnimatedMoveToDst_W4T_Basic m_Hide;
131
132 void HandAnimatedForceSwapping(Man player = null, HandStateBase parent = null)
133 {
134 // setup nested state machine
135 m_Start = new HandStartHidingAnimated(player, this, WeaponActions.HIDE, -1);
136 m_Show = new HandAnimatedMoveToDst_W4T(player, this, WeaponActions.SHOW, -1);
137 m_Hide = new HandAnimatedMoveToDst_W4T_Basic(player, this);
138
139 // events:
140 HandEventBase _fin_ = new HandEventHumanCommandActionFinished;
141 HandEventBase _AEh_ = new HandAnimEventChanged;
142 HandEventBase __Xd_ = new HandEventDestroyed;
143
144 m_FSM = new HandFSM(this); // @NOTE: set owner of the submachine fsm
145
146 m_FSM.AddTransition(new HandTransition( m_Start, _AEh_, m_Hide ));
147 m_FSM.AddTransition(new HandTransition( m_Hide, _AEh_, m_Show )); // no animation in Hide step
148 m_FSM.AddTransition(new HandTransition( m_Show, _fin_, null ));
149 m_FSM.AddTransition(new HandTransition( m_Hide, _fin_, null ));
150 m_FSM.AddTransition(new HandTransition( m_Show, __Xd_, null ));
151 m_FSM.AddTransition(new HandTransition( m_Hide, __Xd_, null ));
152
153 m_FSM.SetInitialState(m_Start);
154 }
155
156 override void OnEntry(HandEventBase e)
157 {
158 HandEventForceSwap efs = HandEventForceSwap.Cast(e);
159 if (efs)
160 {
161 if ( efs.GetSrc().GetType() == InventoryLocationType.HANDS )
162 {
163 m_Start.m_ActionType = efs.m_AnimationID;
164
165 m_Src1 = efs.m_Src2;
166 m_Src2 = efs.GetSrc();
167 m_Dst1 = efs.m_Dst2;
168 m_Dst2 = efs.GetDst();
169
170
171 m_Show.m_ActionType = efs.m_Animation2ID;
172 }
173 else
174 {
175 m_Start.m_ActionType = efs.m_Animation2ID;
176
177 m_Src1 = efs.GetSrc();
178 m_Src2 = efs.m_Src2;
179 m_Dst1 = efs.GetDst();
180 m_Dst2 = efs.m_Dst2;
181
182 m_Show.m_ActionType = efs.m_AnimationID;
183 }
184
185 m_Show.m_Dst = m_Dst1;
186 m_Hide.m_Dst = m_Dst2;
187
188
189 if (!GetGame().IsDedicatedServer())
190 {
191 e.m_Player.GetHumanInventory().AddInventoryReservationEx(m_Dst1.GetItem(), m_Dst1, GameInventory.c_InventoryReservationTimeoutShortMS);
192 e.m_Player.GetHumanInventory().AddInventoryReservationEx(m_Dst2.GetItem(), m_Dst2, GameInventory.c_InventoryReservationTimeoutShortMS);
193 }
194 }
195
196 super.OnEntry(e); // @NOTE: super at the end (prevent override from submachine start)
197 }
198
199 override void OnAbort(HandEventBase e)
200 {
201 if ( !GetGame().IsDedicatedServer())
202 {
203 if (m_Dst1)
204 {
205 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst1.GetItem(), m_Dst1);
206 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
207 }
208 }
209 else
210 {
211 if (m_Dst1)
212 {
215 }
216 }
217
218 m_Src1 = null;
219 m_Src2 = null;
220 m_Dst1 = null;
221 m_Dst2 = null;
222
223 super.OnAbort(e);
224 }
225
226 override void OnExit(HandEventBase e)
227 {
228 if ( !GetGame().IsDedicatedServer())
229 {
230 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst1.GetItem(), m_Dst1);
231 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
232 }
233 else
234 {
237 }
238
239 m_Src1 = null;
240 m_Src2 = null;
241 m_Dst1 = null;
242 m_Dst2 = null;
243
244 super.OnExit(e);
245 }
246};
247
248class HandAnimatedForceSwapping_Inst extends HandStateBase
249{
250 ref InventoryLocation m_Src1 = null;
251 ref InventoryLocation m_Src2 = null;
252 ref InventoryLocation m_Dst1 = null;
253 ref InventoryLocation m_Dst2 = null;
254
255 ref HandStartHidingAnimated m_Start;
257
258 void HandAnimatedForceSwapping_Inst(Man player = null, HandStateBase parent = null)
259 {
260 // setup nested state machine
261 m_Start = new HandStartHidingAnimated(player, this, WeaponActions.HIDE, -1);
262 m_Swap = new HandForceSwappingAnimated_Show(player, this, WeaponActions.SHOW, -1);
263
264 // events:
265 HandEventBase _fin_ = new HandEventHumanCommandActionFinished;
266 HandEventBase _AEh_ = new HandAnimEventChanged;
267 HandEventBase __Xd_ = new HandEventDestroyed;
268
269 m_FSM = new HandFSM(this); // @NOTE: set owner of the submachine fsm
270
271 m_FSM.AddTransition(new HandTransition( m_Start, _AEh_, m_Swap ));
272 m_FSM.AddTransition(new HandTransition( m_Swap, _fin_, null ));
273 m_FSM.AddTransition(new HandTransition( m_Swap, __Xd_, null ));
274
275 m_FSM.SetInitialState(m_Start);
276 }
277
278 override void OnEntry(HandEventBase e)
279 {
280 HandEventForceSwap efs = HandEventForceSwap.Cast(e);
281 if (efs)
282 {
283 if ( efs.GetSrc().GetType() == InventoryLocationType.HANDS )
284 {
285 m_Start.m_ActionType = efs.m_AnimationID;
286
287 m_Src1 = efs.m_Src2;
288 m_Src2 = efs.GetSrc();
289 m_Dst1 = efs.m_Dst2;
290 m_Dst2 = efs.GetDst();
291
292 m_Swap.m_ActionType = efs.m_Animation2ID;
293 }
294 else
295 {
296 m_Start.m_ActionType = efs.m_Animation2ID;
297
298 m_Src1 = efs.GetSrc();
299 m_Src2 = efs.m_Src2;
300 m_Dst1 = efs.GetDst();
301 m_Dst2 = efs.m_Dst2;
302
303 m_Swap.m_ActionType = efs.m_AnimationID;
304 }
305
306 m_Swap.m_Src1 = m_Src1;
307 m_Swap.m_Dst1 = m_Dst1;
308 m_Swap.m_Src2 = m_Src2;
309 m_Swap.m_Dst2 = m_Dst2;
310
311 if (!GetGame().IsDedicatedServer())
312 {
313 m_Player.GetHumanInventory().AddInventoryReservationEx(m_Dst1.GetItem(), m_Dst1, GameInventory.c_InventoryReservationTimeoutShortMS);
314 m_Player.GetHumanInventory().AddInventoryReservationEx(m_Dst2.GetItem(), m_Dst2, GameInventory.c_InventoryReservationTimeoutShortMS);
315 }
316 }
317
318 super.OnEntry(e); // @NOTE: super at the end (prevent override from submachine start)
319 }
320
321 override void OnAbort(HandEventBase e)
322 {
323 if ( !GetGame().IsDedicatedServer())
324 {
325 if (m_Dst1)
326 {
327 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst1.GetItem(), m_Dst1);
328 }
329 if (m_Dst2)
330 {
331 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
332 }
333 }
334 else
335 {
336 if (m_Dst1)
337 {
339 }
340 if (m_Dst2)
341 {
343 }
344 }
345
346 m_Src1 = null;
347 m_Src2 = null;
348 m_Dst1 = null;
349 m_Dst2 = null;
350
351 super.OnAbort(e);
352 }
353
354 override void OnExit(HandEventBase e)
355 {
356 if ( !GetGame().IsDedicatedServer())
357 {
358 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst1.GetItem(), m_Dst1);
359 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
360 }
361 else
362 {
365 }
366
367 m_Src1 = null;
368 m_Src2 = null;
369 m_Dst1 = null;
370 m_Dst2 = null;
371
372 super.OnExit(e);
373 }
374};
375
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
Определения Inventory.c:22
DayZPlayer m_Player
Определения Hand_Events.c:42
FSMTransition< HandStateBase, HandEventBase, HandActionBase, HandGuardBase > HandTransition
Определения HandFSM.c:28
InventoryLocationType
types of Inventory Location
Определения InventoryLocation.c:4
bool ClearJunctureEx(Man player, notnull EntityAI item)
Определения Game.c:762
static void InventoryHFSMLog(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Определения Debug.c:147
Определения Debug.c:2
Определения Building.c:6
static proto native bool LocationSyncMoveEntity(notnull InventoryLocation src_loc, notnull InventoryLocation dst_loc)
synchronously removes item from current inventory location and adds it to destination no anims involv...
const int c_InventoryReservationTimeoutShortMS
Определения Inventory.c:713
static proto native bool LocationSwap(notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2)
swaps two entities
static bool CanForceSwapEntitiesEx(notnull EntityAI item1, InventoryLocation item1_dst, notnull EntityAI item2, out InventoryLocation item2_dst)
Определения Inventory.c:664
script counterpart to engine's class Inventory
Определения Inventory.c:79
Abstracted event, not to be used, only inherited.
Определения Hand_Events.c:209
Hand finite state machine.
override bool IsWaitingForActionFinish()
Определения HandAnimatedForceSwapping.c:117
void HandForceSwapingAnimated_Show(Man player=null, HandStateBase parent=null, WeaponActions action=WeaponActions.NONE, int actionType=-1)
Определения HandAnimatedForceSwapping.c:61
override void OnAbort(HandEventBase e)
Определения HandAnimatedForceSwapping.c:99
ref InventoryLocation m_Src2
Определения HandAnimatedForceSwapping.c:57
ref InventoryLocation m_Dst2
Определения HandAnimatedForceSwapping.c:59
override void OnEntry(HandEventBase e)
Определения HandAnimatedForceSwapping.c:63
ref InventoryLocation m_Dst1
Определения HandAnimatedForceSwapping.c:58
ref InventoryLocation m_Src1
Определения HandAnimatedForceSwapping.c:56
override void OnExit(HandEventBase e)
Определения HandAnimatedForceSwapping.c:108
simple class starting animation action specified by m_action and m_actionType
Определения HandAnimatedForceSwapping.c:55
override void OnExit(HandEventBase e)
Определения HandAnimatedForceSwapping.c:45
ref InventoryLocation m_Dst
Определения HandAnimatedForceSwapping.c:5
void HandStateBase(Man player=NULL, HandStateBase parent=NULL)
nested state machine (or null)
Определения HandStateBase.c:11
override void OnEntry(HandEventBase e)
Определения HandAnimatedForceSwapping.c:7
Man m_Player
Определения HandStateBase.c:8
ref InventoryLocation m_Dst1
Определения HandAnimatedForceSwapping.c:125
ref InventoryLocation m_Src1
Определения HandAnimatedForceSwapping.c:123
ref HandFSM m_FSM
hierarchical parent state of this state (or null)
Определения HandStateBase.c:10
void HandAnimatedForceSwapping_Inst(Man player=null, HandStateBase parent=null)
Определения HandAnimatedForceSwapping.c:258
ref HandAnimatedMoveToDst_W4T_Basic m_Hide
Определения HandAnimatedForceSwapping.c:130
ref HandForceSwappingAnimated_Show m_Swap
Определения HandAnimatedForceSwapping.c:256
ref HandAnimatedMoveToDst_W4T m_Show
Определения HandAnimatedForceSwapping.c:129
override void OnAbort(HandEventBase e)
Определения HandAnimatedForceSwapping.c:39
ref HandStartHidingAnimated m_Start
Определения HandAnimatedForceSwapping.c:128
ref InventoryLocation m_Dst2
Определения HandAnimatedForceSwapping.c:126
override bool IsWaitingForActionFinish()
waiting for active animation action/actionType finish
Определения HandAnimatedForceSwapping.c:51
void HandAnimatedForceSwapping(Man player=null, HandStateBase parent=null)
Определения HandAnimatedForceSwapping.c:132
ref InventoryLocation m_Src2
Определения HandAnimatedForceSwapping.c:124
represent hand state base
Определения HandAnimatedForceSwapping.c:4
InventoryLocation.
Определения InventoryLocation.c:29
static bool IsInventoryHFSMLogEnable()
Определения Debug.c:668
Определения Debug.c:594
Определения ObjectTyped.c:2
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
WeaponActions
actions
Определения human.c:816