Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
hand_events.c
Go to the documentation of this file.
1
2
26
34
38class HandEventBase
39{
40 int m_EventID = 0;
41 int m_AnimationID = -1;
44
51
52 void HandEventBase (Man p = null, InventoryLocation src = null) { Class.CastTo(m_Player, p); m_Src = src; }
54
56 {
57 return m_Player && (m_Player.GetInstanceType() != DayZPlayerInstanceType.INSTANCETYPE_CLIENT && m_Player.GetInstanceType() != DayZPlayerInstanceType.INSTANCETYPE_REMOTE);
58 }
59
60 bool IsOwner()
61 {
62 return m_Player && (m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT || m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_AI_SERVER || m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_AI_SINGLEPLAYER);
63 }
64
65 bool IsProxy()
66 {
67 return m_Player && (m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_REMOTE || m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_AI_REMOTE);
68 }
69
70 void ReadFromContext (ParamsReadContext ctx) { } // actual read is in CreateHandEventFromContext
71
72 void WriteToContext (ParamsWriteContext ctx)
73 {
74 ctx.Write(m_EventID);
75 ctx.Write(m_Player);
77 ctx.Write(m_AnimationID);
78 }
79
82 {
83 if (m_Src)
84 return m_Src.GetItem();
85 return null;
86 }
87 EntityAI GetSecondSrcEntity () { return null; }
88 InventoryLocation GetDst () { return null; }
89 int GetAnimationID () { return m_AnimationID; }
90 bool AcquireInventoryJunctureFromServer (notnull Man player) { return false; }
91 bool CheckRequest () { return true; }
93 {
97 if (validation.m_IsRemote || validation.m_IsJuncture)
98 return true;
99
100 return CheckRequest();
101 }
102 bool CanPerformEvent () { return true; }
103 bool CanPerformEventEx (InventoryValidation validation) { return CanPerformEvent(); }
104 bool CheckRequestSrc () { return true; }
105 bool IsServerSideOnly () { return false; }
106
107 static HandEventBase HandEventFactory (HandEventID id, Man p = null, InventoryLocation src = null)
108 {
109 switch (id)
110 {
111 case HandEventID.UNKNOWN: return null;
112 case HandEventID.TAKE: return new HandEventTake(p, src);
113 case HandEventID.MOVETO: return new HandEventMoveTo(p, src);
114 case HandEventID.DROP: return new HandEventDrop(p, src);
115 case HandEventID.THROW: return new HandEventThrow(p, src);
116 case HandEventID.SWAP: return new HandEventSwap(p, src);
117 case HandEventID.FORCESWAP: return new HandEventForceSwap(p, src);
118 case HandEventID.DESTROY: return new HandEventDestroy(p, src);
119 case HandEventID.CREATED: return new HandEventCreated(p, src);
120 case HandEventID.DESTROYED: return new HandEventDestroyed(p, src);
121 case HandEventID.REPLACE: return new HandEventDestroyAndReplaceWithNew(p, src);
122 case HandEventID.REPLACE2: return new HandEventDestroyAndReplaceWithNewElsewhere(p, src);
123 case HandEventID.REPLACE3: return new HandEventDestroyElsewhereAndReplaceWithNewInHands(p, src);
124 case HandEventID.REPLACED: return new HandEventReplaced(p, src);
125 case HandEventID.ANIMEVENT_CHANGE_HIDE: return HandAnimEventChanged(p, src);
126 case HandEventID.HUMANCOMMAND_ACTION_FINISHED : return HandEventHumanCommandActionFinished(p, src);
127 case HandEventID.HUMANCOMMAND_ACTION_ABORTED : return HandEventHumanCommandActionAborted(p, src);
128 }
129 Error("[hndfsm] HandEventFactory - unregistered hand event with id=" + id);
130 return null;
131 }
132
133 static HandEventBase CreateHandEventFromContext (ParamsReadContext ctx)
134 {
135 int eventID = -1;
136 if (!ctx.Read(eventID))
137 {
138 Error("[hndfsm] CreateHandEventFromContext - cannot read eventID");
139 return null;
140 }
141 Man player;
142 if (!ctx.Read(player))
143 {
144 Error("[hndfsm] CreateHandEventFromContext - cannot read player");
145 return null;
146 }
149
150 int animID = -1;
151 if (!ctx.Read(animID))
152 {
153 Error("[hndfsm] CreateHandEventFromContext - cannot read animID");
154 return null;
155 }
156 HandEventBase b = HandEventFactory(eventID, player, src);
157 if (b)
158 {
159 b.m_AnimationID = animID;
160 b.ReadFromContext(ctx);
161 }
162 return b;
163 }
164
165 string DumpToString ()
166 {
167 string res = "{ HandEv id=" + typename.EnumToString(HandEventID, GetEventID());
168 res = res + " pl=" + Object.GetDebugName(m_Player);
169 res = res + " src=" + InventoryLocation.DumpToStringNullSafe(m_Src);
170 res = res + " }";
171 return res;
172 }
173
174 bool ReserveInventory()
175 {
176 InventoryLocation il = GetDst();
177 if (!il)
178 {
179 il = GetSrc();
180 }
181
182 if (il && !m_Player.GetHumanInventory().HasInventoryReservation(il.GetItem(),il))
183 {
184 if (m_Player.GetHumanInventory().AddInventoryReservationEx(il.GetItem(), il, GameInventory.c_InventoryReservationTimeoutShortMS))
185 {
186 return true;
187 }
188 }
189
190 return false;
191 }
192
193 void ClearInventoryReservation()
194 {
195 InventoryLocation il = GetDst();
196 if (il)
197 {
198 il = GetSrc();
199 }
200
201 if (il)
202 {
203 m_Player.GetHumanInventory().ClearInventoryReservationEx(il.GetItem(), il);
204 }
205 }
206};
207
208class HandEventTake extends HandEventBase
209{
210 void HandEventTake (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.TAKE; }
211
212 override InventoryLocation GetDst ()
213 {
215 dst.SetHands(m_Player, GetSrcEntity());
216 return dst;
217 }
218
219 override bool CheckRequestSrc ()
220 {
222 {
223 Debug.InventoryHFSMLog("CANNOT perform", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CheckRequestSrc", m_Player.ToString() );
224 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(m_Player) + " failed src1 check with cmd=" + typename.EnumToString(HandEventID, GetEventID()) + " src1=" + InventoryLocation.DumpToStringNullSafe(GetSrc()));
225 return false; // stale packet
226 }
227 return true;
228 }
229
230 override bool CheckRequest ()
231 {
233 }
234
235 override bool CanPerformEventEx(InventoryValidation validation)
236 {
237 if (validation.m_IsJuncture)
238 {
239 return true;
240 }
241
243 {
244 #ifdef ENABLE_LOGGING
245 if ( LogManager.IsInventoryHFSMLogEnable() )
246 {
247 Debug.InventoryHFSMLog("CANNOT perform", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
248 }
249 #endif
250 //if (LogManager.IsInventoryHFSMLogEnable()) hndDebugPrint("[desync] HandleInputData man=" + Object.GetDebugName(m_Player) + " CANNOT perform ev=" + DumpToString());
251 return false;
252 }
253
254 return super.CanPerformEventEx(validation);
255 }
256
257 override bool AcquireInventoryJunctureFromServer (notnull Man player)
258 {
261 if (src && dst)
262 {
263 return TryAcquireInventoryJunctureFromServer(player, src, dst);
264 }
265 Error("[hndfsm] HandEventTake. AcquireInventoryJunctureFromServer: no src or dst for ev=" + DumpToString());
266 return JunctureRequestResult.ERROR;
267 }
268};
269
270class HandEventMoveTo extends HandEventBase
271{
272 ref InventoryLocation m_Dst;
273
274 void HandEventMoveTo (Man p = null, InventoryLocation src = null, InventoryLocation dst = null) { m_EventID = HandEventID.MOVETO; m_Dst = dst; }
275
276 override void ReadFromContext (ParamsReadContext ctx)
277 {
278 m_Dst = new InventoryLocation;
279 super.ReadFromContext(ctx);
280 m_Dst.ReadFromContext(ctx);
281 }
282 override void WriteToContext (ParamsWriteContext ctx)
283 {
284 super.WriteToContext(ctx);
285 m_Dst.WriteToContext(ctx);
286 }
287
288 override InventoryLocation GetDst () { return m_Dst; }
289
290 override bool CheckRequestSrc ()
291 {
293 {
294 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(m_Player) + " failed src1 check with cmd=" + typename.EnumToString(HandEventID, GetEventID()) + " src1=" + InventoryLocation.DumpToStringNullSafe(GetSrc()));
295 return false; // stale packet
296 }
297 return true;
298 }
299
300 override bool CheckRequest ()
301 {
303 }
304
305 override bool CanPerformEvent ()
306 {
308 {
309 #ifdef ENABLE_LOGGING
310 if ( LogManager.IsInventoryHFSMLogEnable() )
311 {
312 Debug.InventoryHFSMLog("CANNOT perform", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
313 }
314 #endif
315 return false;
316 }
317 return true;
318 }
319
320 override bool AcquireInventoryJunctureFromServer (notnull Man player)
321 {
324 if (src && dst)
325 {
326 return TryAcquireInventoryJunctureFromServer(player, src, dst);
327 }
328 Error("[hndfsm] HandEventMoveTo. AcquireInventoryJunctureFromServer: no src or dst for ev=" + DumpToString());
329 return JunctureRequestResult.ERROR;
330 }
331
332 override string DumpToString ()
333 {
334 string res = "{ HandEventMoveTo id=" + typename.EnumToString(HandEventID, GetEventID()) + " pl=" + Object.GetDebugName(m_Player) + " src=" + InventoryLocation.DumpToStringNullSafe(m_Src) + " dst=" + InventoryLocation.DumpToStringNullSafe(m_Dst) + " }";
335 return res;
336 }
337};
338
340class HandEventRemove extends HandEventBase
341{
342 override InventoryLocation GetDst ()
343 {
344 return m_Dst;
345 }
346
347 override bool CheckRequestSrc ()
348 {
350 {
351 #ifdef ENABLE_LOGGING
352 if ( LogManager.IsInventoryHFSMLogEnable() )
353 {
354 Debug.InventoryHFSMLog("Check src - failed, src = " + InventoryLocation.DumpToStringNullSafe(GetSrc()), typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CheckRequestSrc", m_Player.ToString() );
355 }
356 #endif
357 return false; // stale packet
358 }
359 return true;
360 }
361
362 override bool CheckRequest ()
363 {
365 }
366
367 override bool CanPerformEvent ()
368 {
371
372 if (!dst)
373 {
374 #ifdef ENABLE_LOGGING
375 if ( LogManager.IsInventoryHFSMLogEnable() )
376 {
377 Debug.InventoryHFSMLog("CANNOT perform. Dst location is NULL!", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
378 }
379 #endif
380 return false;
381 }
382
383 if (dst.GetType() == InventoryLocationType.UNKNOWN)
384 {
385 #ifdef ENABLE_LOGGING
386 if ( LogManager.IsInventoryHFSMLogEnable() )
387 {
388 Debug.InventoryHFSMLog("CANNOT perform. Dst location type is UNKNOWN!", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
389 }
390 #endif
391 return false;
392 }
393
395 {
396 #ifdef ENABLE_LOGGING
397 if ( LogManager.IsInventoryHFSMLogEnable() )
398 {
399 Debug.InventoryHFSMLog("CANNOT perform", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
400 }
401 #endif
402 return false;
403 }
404 return true;
405 }
406
407 override bool AcquireInventoryJunctureFromServer (notnull Man player)
408 {
411 if (src && dst)
412 {
413 return TryAcquireInventoryJunctureFromServer(player, src, dst);
414 }
415 Error("[hndfsm] HandEventThrow. AcquireInventoryJunctureFromServer: no src or dst for ev=" + DumpToString());
416 return JunctureRequestResult.ERROR;
417 }
418
419 ref InventoryLocation m_Dst;
420};
421
422class HandEventDrop extends HandEventRemove
423{
424 void HandEventDrop (Man p = null, InventoryLocation src = null)
425 {
426 m_EventID = HandEventID.DROP;
427 m_CanPerformDrop = true;
428 }
429
430 override void ReadFromContext(ParamsReadContext ctx)
431 {
432 super.ReadFromContext(ctx);
433
434 if (!m_Dst)
435 {
436 m_Dst = new InventoryLocation();
437 }
438
439 ctx.Read(m_CanPerformDrop);
441 }
442
443 override void WriteToContext(ParamsWriteContext ctx)
444 {
445 super.WriteToContext(ctx);
446
447 ctx.Write(m_CanPerformDrop);
449 }
450
451 override bool CheckRequestEx(InventoryValidation validation)
452 {
454 if (!validation.m_IsJuncture && IsAuthoritative())
455 {
456 m_CanPerformDrop = GameInventory.SetGroundPosByOwner(m_Player, GetSrcEntity(), m_Dst);
457 }
458
459 if (!m_CanPerformDrop)
460 {
461 validation.m_Reason = InventoryValidationReason.DROP_PREVENTED;
462 return false;
463 }
464
465 return super.CheckRequestEx(validation);
466 }
467
468 override bool CanPerformEventEx(InventoryValidation validation)
469 {
470 if (!m_CanPerformDrop)
471 {
472 return false;
473 }
474
476 if (!validation.m_IsJuncture && !validation.m_IsRemote && !GetDst() && (GetGame().IsMultiplayer() && GetGame().IsClient()))
477 {
478 return true;
479 }
480
482 if (!validation.m_IsRemote && !GetDst())
483 {
484 m_Dst = new InventoryLocation();
485 m_CanPerformDrop = GameInventory.SetGroundPosByOwner(m_Player, GetSrcEntity(), m_Dst);
486
487 if (!m_CanPerformDrop)
488 {
489 validation.m_Reason = InventoryValidationReason.DROP_PREVENTED;
490 return false;
491 }
492 }
493
494 return super.CanPerformEventEx(validation);
495 }
496
497 bool m_CanPerformDrop;
498};
499
500class HandEventThrow extends HandEventRemove
501{
502 void HandEventThrow (Man p = null, InventoryLocation src = null)
503 {
504 m_EventID = HandEventID.THROW;
505 if( src )
506 {
507 vector mat[4];
508 EntityAI entity = GetSrcEntity();
509 if (entity)
510 {
511 m_Dst = new InventoryLocation;
512 entity.GetTransform(mat);
513 m_Dst.SetGround(entity, mat);
514 }
515 else
516 {
517 Error("[hndfsm] HandEventThrow src entity null!");
518 }
519 }
520 }
521
522 override void ReadFromContext (ParamsReadContext ctx)
523 {
524 super.ReadFromContext(ctx);
525
526 m_Dst = new InventoryLocation;
527 m_Dst.ReadFromContext(ctx);
528
529 float x, y, z;
530 ctx.Read(x);
531 ctx.Read(y);
532 ctx.Read(z);
533 m_Force[0] = x;
534 m_Force[1] = y;
535 m_Force[2] = z;
536 }
537
538 override void WriteToContext (ParamsWriteContext ctx)
539 {
540 super.WriteToContext(ctx);
541
542 m_Dst.WriteToContext(ctx);
543
544 ctx.Write(m_Force[0]);
545 ctx.Write(m_Force[1]);
546 ctx.Write(m_Force[2]);
547 }
548
549 void SetForce(vector force) { m_Force = force; }
550 vector GetForce() { return m_Force; }
551
552 vector m_Force;
553};
554
555class HandEventSwap extends HandEventBase
556{
557 // super.m_Src == src location of new item (that will be taken)
558 ref InventoryLocation m_Dst;
559 ref InventoryLocation m_Src2;
560 ref InventoryLocation m_Dst2;
561 int m_Animation2ID = -1;
562
563 void HandEventSwap (Man p = null, InventoryLocation src = null, InventoryLocation src2 = null, InventoryLocation dst = null, InventoryLocation dst2 = null)
564 {
565 m_EventID = HandEventID.SWAP;
566 m_Dst = dst;
567 m_Src2 = src2;
568 m_Dst2 = dst2;
569 }
570
571 override void ReadFromContext (ParamsReadContext ctx)
572 {
573 super.ReadFromContext(ctx);
574
575 m_Src2 = new InventoryLocation;
576 m_Dst = new InventoryLocation;
577 m_Dst2 = new InventoryLocation;
578
579 m_Src2.ReadFromContext(ctx);
580 m_Dst.ReadFromContext(ctx);
581 m_Dst2.ReadFromContext(ctx);
582 ctx.Read(m_Animation2ID);
583 }
584
585 override void WriteToContext (ParamsWriteContext ctx)
586 {
587 super.WriteToContext(ctx);
588
589 m_Src2.WriteToContext(ctx);
590 m_Dst.WriteToContext(ctx);
591 m_Dst2.WriteToContext(ctx);
592 ctx.Write(m_Animation2ID);
593 }
594
595 override InventoryLocation GetDst ()
596 {
597 return m_Dst;
598 }
599
601 {
602 return m_Src2.GetItem();
603 }
604
605 override bool CheckRequestSrc ()
606 {
607 //return false;
608
610 {
611 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(m_Player) + " failed src1 check with cmd=" + typename.EnumToString(HandEventID, GetEventID()) + " src1=" + InventoryLocation.DumpToStringNullSafe(GetSrc()));
612 return false; // stale packet
613 }
615 {
616 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(m_Player) + " failed src2 check with cmd=" + typename.EnumToString(HandEventID, GetEventID()) + " src2=" + InventoryLocation.DumpToStringNullSafe(m_Src2));
617 return false; // stale packet
618 }
619 return true;
620 }
621
622 override bool CheckRequest ()
623 {
625 {
626 #ifdef ENABLE_LOGGING
627 if ( LogManager.IsInventoryHFSMLogEnable() )
628 {
629 Debug.InventoryHFSMLog("CheckSwapItemsRequest - failed", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CheckRequest", m_Player.ToString() );
630 }
631 #endif
632 }
633 else if (!m_Player.GetHumanInventory().CanAddSwappedEntity(m_Src, m_Src2, m_Dst, m_Dst2))
634 {
635 #ifdef ENABLE_LOGGING
636 if ( LogManager.IsInventoryHFSMLogEnable() )
637 {
638 Debug.InventoryHFSMLog("CanAddSwappedEntity - failed", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CheckRequest", m_Player.ToString() );
639 }
640 #endif
641 }
642 else
643 return true;
644
645 return false;
646 }
647
648 override bool CanPerformEvent ()
649 {
650 if (GameInventory.CanForceSwapEntitiesEx(GetSrc().GetItem(), m_Dst, m_Src2.GetItem(), m_Dst2))
651 return true;
652
653 #ifdef ENABLE_LOGGING
654 if ( LogManager.IsInventoryHFSMLogEnable() )
655 {
656 Debug.InventoryHFSMLog("CANNOT perform", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
657 }
658 #endif
659 return false;
660 }
661
662 override bool AcquireInventoryJunctureFromServer (notnull Man player)
663 {
664 return TryAcquireTwoInventoryJuncturesFromServer(player, m_Src, m_Src2, m_Dst, m_Dst2);
665 }
666
667 override string DumpToString ()
668 {
669 return "{ HandEventSwap id=" + typename.EnumToString(HandEventID, GetEventID()) + " pl=" + Object.GetDebugName(m_Player) + " src1=" + InventoryLocation.DumpToStringNullSafe(m_Src) + " src2=" + InventoryLocation.DumpToStringNullSafe(m_Src2) + " dst1=" + InventoryLocation.DumpToStringNullSafe(m_Dst) + " dst2=" + InventoryLocation.DumpToStringNullSafe(m_Dst2) + " }";
670 }
671
672 void CheckAndExecuteForceStandUp()
673 {
674 DayZPlayer player = DayZPlayer.Cast(m_Player);
675 player.ForceStandUpForHeavyItemsSwap( m_Src.GetItem(), m_Src2.GetItem() );
676 }
677
678 override bool ReserveInventory()
679 {
680 if (!m_Player.GetHumanInventory().HasInventoryReservation(m_Dst.GetItem(), m_Dst) && !m_Player.GetHumanInventory().HasInventoryReservation(m_Dst2.GetItem(), m_Dst2))
681 {
682 if (m_Player.GetHumanInventory().AddInventoryReservationEx(m_Dst.GetItem(), m_Dst, GameInventory.c_InventoryReservationTimeoutShortMS))
683 {
684 if (m_Player.GetHumanInventory().AddInventoryReservationEx(m_Dst2.GetItem(), m_Dst2, GameInventory.c_InventoryReservationTimeoutShortMS))
685 {
686 return true;
687 }
688 else
689 {
690 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst.GetItem(), m_Dst);
691 }
692 }
693 }
694 return false;
695 }
696
697 override void ClearInventoryReservation()
698 {
699 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst.GetItem(), m_Dst);
700 m_Player.GetHumanInventory().ClearInventoryReservationEx(m_Dst2.GetItem(), m_Dst2);
701 }
702};
703
704class HandEventForceSwap extends HandEventSwap
705{
706 void HandEventForceSwap (Man p = null, InventoryLocation src = null, InventoryLocation src2 = null, InventoryLocation dst = null, InventoryLocation dst2 = null) { m_EventID = HandEventID.FORCESWAP; }
707
708 override bool CheckRequest ()
709 {
710 bool test1 = false;
711 EntityAI inHands = m_Player.GetHumanInventory().GetEntityInHands();
712 if (GetSrcEntity() && inHands && m_Dst && m_Dst.IsValid())
713 {
715 #ifdef ENABLE_LOGGING
716 if ( LogManager.IsInventoryHFSMLogEnable() )
717 {
718 if (!test1)
719 Debug.InventoryHFSMLog("CheckSwapItemsRequest failed", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CheckRequest", m_Player.ToString() );
720 }
721 #endif
722 }
723 return test1;
724 }
725
726 override bool CanPerformEvent ()
727 {
728 bool test2 = GameInventory.CanForceSwapEntitiesEx(m_Src.GetItem(), m_Dst, m_Src2.GetItem(), m_Dst2); // null here means 'do not search for dst2' (already have valid one from constructor)
729 #ifdef ENABLE_LOGGING
730 if ( LogManager.IsInventoryHFSMLogEnable() )
731 {
732 if (!test2)
733 Debug.InventoryHFSMLog("CanForceSwapEntitiesEx failed", typename.EnumToString(HandEventID, GetEventID()) , "n/a", "CanPerformEvent", m_Player.ToString() );
734 }
735 #endif
736 return test2;
737 }
738};
739
740class HandEventDestroy extends HandEventBase
741{
742 void HandEventDestroy (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.DESTROY; }
743
744 override bool IsServerSideOnly () { return true; }
745};
746
747class HandEventCreated extends HandEventBase
748{
749 void HandEventCreated (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.CREATED; }
750};
751
752class HandEventDestroyed extends HandEventBase
753{
754 void HandEventDestroyed (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.DESTROYED; }
755};
756
758{
759 string m_Type;
760 ref ReplaceItemWithNewLambdaBase m_Lambda;
761
762 void HandEvengReplaceWithNewBase (Man p = null, InventoryLocation src = null, ReplaceItemWithNewLambdaBase lambda = NULL) { m_EventID = HandEventID.REPLACE; m_Lambda = lambda; }
763
764 override void ReadFromContext (ParamsReadContext ctx)
765 {
766 super.ReadFromContext(ctx);
767 ctx.Read(m_Type);
768 Error("[hndfsm] HandEventDestroyAndReplaceWithNew - Cannot serialize lambda (read)");
769 }
770 override void WriteToContext (ParamsWriteContext ctx)
771 {
772 super.WriteToContext(ctx);
773 ctx.Write(m_Type);
774 Error("[hndfsm] HandEventDestroyAndReplaceWithNew - Cannot serialize lambda (write)");
775 }
776
777 override bool IsServerSideOnly () { return true; }
778
779 override InventoryLocation GetDst ()
780 {
782 dst.SetHands(m_Player, GetSrcEntity());
783 return dst;
784 }
785
786 override string DumpToString ()
787 {
788 string res = "{ HandEvenReplaceWithNewBase id=" + typename.EnumToString(HandEventID, GetEventID()) + " pl=" + Object.GetDebugName(m_Player) + " src=" + InventoryLocation.DumpToStringNullSafe(GetSrc()) + " lambda=" + m_Lambda + " dst=" + InventoryLocation.DumpToStringNullSafe(GetDst()) + " }";
789 return res;
790 }
791};
792
794{
795 void HandEventDestroyAndReplaceWithNew (Man p = null, InventoryLocation src = null, ReplaceItemWithNewLambdaBase lambda = NULL) { m_EventID = HandEventID.REPLACE; m_Lambda = lambda; }
796};
797
798class HandEventDestroyAndReplaceWithNewElsewhere extends HandEventDestroyAndReplaceWithNew
799{
800 void HandEventDestroyAndReplaceWithNewElsewhere (Man p = null, InventoryLocation src = null, ReplaceItemWithNewLambdaBase lambda = NULL) { m_EventID = HandEventID.REPLACE3; m_Lambda = lambda; }
801};
802
803class HandEventDestroyElsewhereAndReplaceWithNewInHands extends HandEventReplaceWithNewBase
804{
805 void HandEventDestroyElsewhereAndReplaceWithNewInHands (Man p = null, InventoryLocation src = null, ReplaceItemWithNewLambdaBase lambda = NULL) { m_EventID = HandEventID.REPLACE3; m_Lambda = lambda; }
806};
807
808class HandEventReplaced extends HandEventBase
809{
810 void HandEventReplaced (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.REPLACED; }
811};
812
813// anim events
814
815class HandAnimEventChanged extends HandEventBase
816{
817 void HandAnimEventChanged (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.ANIMEVENT_CHANGE_HIDE; }
818};
819
820HandEventBase HandAnimEventFactory (WeaponEvents type, Man p = null, InventoryLocation src = null)
821{
822 switch (type)
823 {
824 case WeaponEvents.CHANGE_HIDE: return new HandAnimEventChanged(p, src);
825 case WeaponEvents.CHANGE_SHOW: return new HandAnimEventChanged(p, src);
826 }
827 return null;
828}
829
832class HandEventHumanCommandActionFinished extends HandEventBase
833{
834 void HandEventHumanCommandActionFinished (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.HUMANCOMMAND_ACTION_FINISHED; }
835};
838class HandEventHumanCommandActionAborted extends HandEventBase
839{
840 void HandEventHumanCommandActionAborted (Man p = null, InventoryLocation src = null) { m_EventID = HandEventID.HUMANCOMMAND_ACTION_ABORTED; }
841};
842
844
void syncDebugPrint(string s)
Definition debug.c:1
InventoryValidationReason
Definition inventory.c:37
eBleedingSourceType m_Type
Super root of all classes in Enforce script.
Definition enscript.c:11
Definition debug.c:2
script counterpart to engine's class Inventory
Definition inventory.c:79
const int c_InventoryReservationTimeoutShortMS
Definition inventory.c:713
static proto native bool LocationCanMoveEntity(notnull InventoryLocation src, notnull InventoryLocation dst)
queries if the entity contained in inv_loc.m_item can be moved to another location This is a shorthan...
static bool SetGroundPosByOwner(EntityAI owner, notnull EntityAI item, out InventoryLocation ground)
Definition inventory.c:1255
static bool CanForceSwapEntitiesEx(notnull EntityAI item1, InventoryLocation item1_dst, notnull EntityAI item2, out InventoryLocation item2_dst)
Definition inventory.c:664
const float c_MaxItemDistanceRadius
anti-cheats
Definition inventory.c:813
static proto native bool CheckSwapItemsRequest(notnull Man requestingPlayer, notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2, float radius)
static proto native bool CheckMoveToDstRequest(notnull Man requestingPlayer, notnull InventoryLocation src, notnull InventoryLocation dst, float radius)
static proto native bool CheckRequestSrc(notnull Man requestingPlayer, notnull InventoryLocation src, float radius)
Abstracted event, not to be used, only inherited.
InventoryLocation.
base class for transformation operations (creating one item from another)
Serialization general interface. Serializer API works with:
Definition serializer.c:56
DayZPlayerInstanceType
defined in C++
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Definition endebug.c:90
DayZPlayer m_Player
Definition hand_events.c:42
bool CheckRequestSrc()
bool m_IsRemote
Definition hand_events.c:50
JUNCTURE_ACQUIRED
Definition hand_events.c:30
EntityAI GetSecondSrcEntity()
Definition hand_events.c:87
bool CanPerformEvent()
ERROR
Definition hand_events.c:32
int GetAnimationID()
Definition hand_events.c:89
bool IsAuthoritative()
Definition hand_events.c:55
InventoryLocation GetSrc()
Definition hand_events.c:80
bool ReserveInventory()
bool CheckRequest()
Definition hand_events.c:91
ref InventoryLocation m_Src
Definition hand_events.c:43
bool m_IsJuncture
Definition hand_events.c:49
HandEventBase HandAnimEventFactory(WeaponEvents type, Man p=null, InventoryLocation src=null)
void ReadFromContext(ParamsReadContext ctx)
Definition hand_events.c:70
JUNCTURE_DENIED
Definition hand_events.c:31
bool CanPerformEventEx(InventoryValidation validation)
JunctureRequestResult
Definition hand_events.c:28
bool IsServerSideOnly()
JUNCTURE_NOT_REQUIRED
Definition hand_events.c:29
m_EventID
void WriteToContext(ParamsWriteContext ctx)
Definition hand_events.c:72
bool CheckRequestEx(InventoryValidation validation)
Definition hand_events.c:92
HandEventID GetEventID()
Definition hand_events.c:53
HandEventID
events
Definition hand_events.c:7
@ FORCESWAP
Definition hand_events.c:14
@ HUMANCOMMAND_ACTION_FINISHED
Definition hand_events.c:22
@ DESTROYED
Definition hand_events.c:17
@ DESTROY
Definition hand_events.c:15
@ MOVETO
Definition hand_events.c:10
@ UNKNOWN
Definition hand_events.c:8
@ TAKE
Definition hand_events.c:9
@ REPLACE
Definition hand_events.c:18
@ DROP
Definition hand_events.c:11
@ REPLACED
Definition hand_events.c:21
@ REPLACE2
Definition hand_events.c:19
@ REPLACE3
Definition hand_events.c:20
@ ANIMEVENT_CHANGE_HIDE
Definition hand_events.c:24
@ CREATED
Definition hand_events.c:16
@ THROW
Definition hand_events.c:12
@ HUMANCOMMAND_ACTION_ABORTED
Definition hand_events.c:23
@ SWAP
swapping from ground
Definition hand_events.c:13
int m_AnimationID
Definition hand_events.c:41
bool IsOwner()
Definition hand_events.c:60
void HandEventBase(Man p=null, InventoryLocation src=null)
Definition hand_events.c:52
bool AcquireInventoryJunctureFromServer(notnull Man player)
Definition hand_events.c:90
string DumpToString()
EntityAI GetSrcEntity()
Definition hand_events.c:81
InventoryLocation GetDst()
Definition hand_events.c:88
void ClearInventoryReservation()
bool IsProxy()
Definition hand_events.c:65
Icon x
Icon y
bool OptionalLocationReadFromContext(out InventoryLocation loc, notnull ParamsReadContext ctx)
InventoryLocationType
types of Inventory Location
bool OptionalLocationWriteToContext(InventoryLocation loc, notnull ParamsWriteContext ctx)
bool TryAcquireInventoryJunctureFromServer(notnull Man player, notnull InventoryLocation src, notnull InventoryLocation dst)
Definition junctures.c:2
bool TryAcquireTwoInventoryJuncturesFromServer(notnull Man player, notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2)
Definition junctures.c:35
EntityAI GetItem()