Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
actionbase.c
Go to the documentation of this file.
15class ActionReciveData
16{
18 ref ActionTarget m_Target;
19}
20
22{
23 int m_CommandUID = -1;
24 int m_CommandUIDProne = -1;
25 int m_StanceMask = -1;
26}
27
28class ActionData
29{
30 void ActionData()
31 {
33 }
34
40 ref ActionTarget m_Target;
50}
51
53{
54 //STATIC DATA
55 protected int m_RefreshReservationTimerValue = 140;
56 // Configurable action parameters
57 protected string m_Sound; //sound played at the beggining of action
58 protected string m_Text;
59
60 protected bool m_LockTargetOnUse; //this parameter sets wheter player can perform actions on target while other player is already performing action on it. defaulted as true
61 protected bool m_FullBody; //tells whether action is full body or additive
62 protected int m_StanceMask;
63 protected ref TStringArray m_Sounds; //User action sound is picked from this array randomly
64 ref CCIBase m_ConditionItem; //Condition Component
65 ref CCTBase m_ConditionTarget; //Condition Component
67 protected int m_ActionID;
68 protected int m_VariantID;
71
72 //RUNTIME DATA
73 protected ref Param1<string> m_MessageParam; //used for passing messages from server to client
74 //protected ref Param2<int,int> m_MessagesParam;
75
76 //SOFT SKILLS
77 protected float m_SpecialtyWeight;
78
79 //-----------------------------------------------------
80 // Action events and methods
81 //-----------------------------------------------------
82 void ActionBase()
83 {
84 // definable
85 m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_PRONE;
86 m_FullBody = false;
87 m_Sound = "";
88 m_Text = "default action text";
90 // dont override
91 m_MessageParam = new Param1<string>("");
92 //m_MessagesParam = new Param2<int,int>(0,0);
94 m_Input = null;
95 m_ActionID = 0;
97 }
98
100 {
101 return m_LockTargetOnUse;
102 }
103
105 {
106 m_ConditionMask = ActionConditionMask.ACM_NO_EXEPTION;
107 if (CanBeUsedInVehicle())
108 {
109 m_ConditionMask |= ActionConditionMask.ACM_IN_VEHICLE;
110 }
111
112 if (CanBeUsedOnLadder())
113 {
114 m_ConditionMask |= ActionConditionMask.ACM_ON_LADDER;
115 }
116
117 if (CanBeUsedSwimming())
118 {
119 m_ConditionMask |= ActionConditionMask.ACM_SWIMMING;
120 }
121
123 {
124 m_ConditionMask |= ActionConditionMask.ACM_RESTRAIN;
125 }
126
127 if (CanBeUsedRaised())
128 {
130 }
131
132 if (CanBeUsedOnBack())
133 {
135 }
136
137 if (CanBeUsedThrowing())
138 {
139 m_ConditionMask |= ActionConditionMask.ACM_THROWING;
140 }
141
142 if (CanBeUsedLeaning())
143 {
145 }
146
148 {
149 m_ConditionMask |= ActionConditionMask.ACM_BROKEN_LEGS;
150 }
151
153 m_ConditionMask |= ActionConditionMask.ACM_IN_FREELOOK;
154 }
155
156 bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
157 {
158 action_data = CreateActionData();
159 action_data.m_Action = this;
160 action_data.m_Player = player;
161 action_data.m_Target = target;
162 action_data.m_MainItem = item;
163 action_data.m_PossibleStanceMask = GetStanceMask(player);
164 action_data.m_ReservedInventoryLocations = new array<ref InventoryLocation>;
165 action_data.m_RefreshReservationTimer = m_RefreshReservationTimerValue;
166 action_data.m_WasExecuted = false;
167 action_data.m_WasActionStarted = false;
168 action_data.m_ReciveEndInput = false;
169
170 ActionReciveData action_recive_data = player.GetActionManager().GetReciveData();
171 if ( action_recive_data )
172 {
173 HandleReciveData(action_recive_data,action_data);
174
176 {
177 if ( player.GetItemInHands() != action_data.m_MainItem )
178 {
179 return false;
180 }
181 }
182 }
183
184 if ( !Post_SetupAction( action_data ) )
185 return false;
186
187 if ( (!GetGame().IsDedicatedServer()) && !IsInstant() )
188 {
189 if (!InventoryReservation(action_data))
190 {
191 ClearInventoryReservationEx(action_data);
192 return false;
193 }
194
195 if ( LogManager.IsActionLogEnable() )
196 {
197 for ( int i = 0; i < action_data.m_ReservedInventoryLocations.Count(); i++)
198 {
199 Debug.ActionLog( InventoryLocation.DumpToStringNullSafe( action_data.m_ReservedInventoryLocations[i] ), action_data.m_Action.ToString() , "n/a", "LockInventoryList", action_data.m_Player.ToString() );
200 }
201 }
202 }
203
204 return true;
205 }
206
207 bool Post_SetupAction( ActionData action_data )
208 {
209 return true;
210 }
211
212 void ActionCleanup( ActionData action_data )
213 {}
214
215 typename GetInputType()
216 {
217 return DefaultActionInput;
218 }
219
221 {
222 m_Input = ai;
223 }
224
225 ActionData CreateActionData()
226 {
227 return new ActionData;
228 }
229
230 void CreateConditionComponents() //Instantiates components, called once from ActionManager on actions construction
231 {
234 }
235
236 Object GetDisplayInteractObject(PlayerBase player, ActionTarget target)
237 {
238 return null;
239 }
240
245 {
246 return true;
247 }
248
251 {
252 return true;
253 }
254
255 //Action isn't synchronize to server
256 bool IsLocal()
257 {
258 return false;
259 }
260
261 //Action not using animation/callback action are executed instantly (OnStart)
263 {
264 return false;
265 }
266
269 {
270 return false;
271 }
272
274 {
275 return true;
276 }
277
279 {
280 return AC_UNCATEGORIZED;
281 }
282
283 bool IsEat()
284 {
285 return false;
286 }
287
288 bool IsDrink()
289 {
290 return false;
291 }
292
294 {
295 return false;
296 }
297
298 string GetText() //text game displays in HUD hint
299 {
300 return m_Text;
301 }
302
304 {
305 return false;
306 }
307
309 {
310 return false;
311 }
312
315 {
316 return true;
317 }
318
320 {
322 }
323
325 {
326 return false;
327 }
328
330 {
331 return false;
332 }
333
335 {
336 return false;
337 }
338
340 {
341 return false;
342 }
343
345 {
346 return false;
347 }
348
350 {
351 return false;
352 }
353
355 {
356 return false;
357 }
358
360 {
361 return false;
362 }
363
365 {
366 return true;
367 }
368
370 {
371 return true;
372 }
373
375 {
376 return true;
377 }
378
381 {
382 return false;
383 }
384
386 {
387 return true;
388 }
389
391 {
392 return true;
393 }
394
400 {
401 return false;
402 }
403
404 protected bool ActionConditionContinue(ActionData action_data) //condition for action
405 {
406 return ActionCondition(action_data.m_Player,action_data.m_Target,action_data.m_MainItem);
407 }
408
409 protected bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item) //condition for action
410 {
411 return true;
412 }
413
420 string GetTargetName(PlayerBase player, ActionTarget target)
421 {
422 return string.Empty;
423 }
424
425 void ApplyModifiers(ActionData action_data);
426
431
432 void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
433 {
434 int componentIndex = -1;
435 int proxyBoneIdx = -1;
436 vector cursorHitPos = vector.Zero;
437
438 array<string> selectionNames = new array<string>();
439
440 Object targetObject = null;
441 Object targetParent = null;
442 string surfaceName;
443
444 if (UseMainItem())
445 {
446 ctx.Write(action_data.m_MainItem);
447 }
448
449 if (HasTarget() && !IsUsingProxies())
450 {
451 // callback data
452 targetObject = action_data.m_Target.GetObject();
453 ctx.Write(targetObject);
454 targetParent = action_data.m_Target.GetParent();
455 ctx.Write(targetParent);
456 componentIndex = action_data.m_Target.GetComponentIndex();
457 ctx.Write(componentIndex);
458 cursorHitPos = action_data.m_Target.GetCursorHitPos();
459 ctx.Write(cursorHitPos);
460 surfaceName = action_data.m_Target.GetSurfaceName();
461 ctx.Write(surfaceName);
462 }
463 else if (HasTarget() && IsUsingProxies())
464 {
467 Entity entParent = Entity.Cast(action_data.m_Target.GetParent());
468 if (entParent)
469 {
470 action_data.m_Target.GetObject().GetActionComponentNameList(action_data.m_Target.GetComponentIndex(), selectionNames);
471 for (int s = 0; s < selectionNames.Count(); s++)
472 {
473 proxyBoneIdx = entParent.GetBoneIndex(selectionNames[s]);
474 if( proxyBoneIdx > -1 )
475 {
476 break;
477 }
478 }
479 }
480
481 ctx.Write(proxyBoneIdx);
482 targetParent = action_data.m_Target.GetParent();
483 ctx.Write(targetParent);
484 componentIndex = action_data.m_Target.GetComponentIndex();
485 ctx.Write(componentIndex);
486 cursorHitPos = action_data.m_Target.GetCursorHitPos();
487 ctx.Write(cursorHitPos);
488 surfaceName = action_data.m_Target.GetSurfaceName();
489 ctx.Write(surfaceName);
490 }
491 }
492
493 bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
494 {
495 if (!action_recive_data)
496 action_recive_data = new ActionReciveData;
497
498 Object actionTargetObject = null;
499 Object actionTargetParent = null;
500 int componentIndex = -1;
501 int proxyBoneIdx = -1;
502 vector cursorHitPos = vector.Zero;
503 ItemBase mainItem = null;
504
505 ActionTarget target;
506 string surfaceName;
507
508 if (UseMainItem())
509 {
510 if (!ctx.Read(mainItem))
511 return false;
512 }
513
514 if (HasTarget() && !IsUsingProxies())
515 {
516 if (!ctx.Read(actionTargetObject))
517 return false;
518
519 if (!ctx.Read(actionTargetParent))
520 return false;
521
522 if (!ctx.Read(componentIndex))
523 return false;
524
525 if (!ctx.Read(cursorHitPos))
526 return false;
527
528 if (!ctx.Read(surfaceName))
529 return false;
530
531 target = new ActionTarget(actionTargetObject, actionTargetParent, componentIndex, cursorHitPos, 0, surfaceName);
532
533 action_recive_data.m_Target = target;
534 }
535 else if (HasTarget() && IsUsingProxies())
536 {
537 if (!ctx.Read(proxyBoneIdx))
538 return false;
539
540 if (!ctx.Read(actionTargetParent))
541 return false;
542
543 if (!ctx.Read(componentIndex))
544 return false;
545
546 if (!ctx.Read(cursorHitPos))
547 return false;
548
549 if (!ctx.Read(surfaceName))
550 return false;
551
553 if (proxyBoneIdx > -1)
554 {
555 Entity entParent = Entity.Cast(actionTargetParent);
556
557 if (entParent)
558 {
559 actionTargetObject = entParent.GetBoneObject(proxyBoneIdx);
560 }
561 }
562 else
563 {
564 return false;
565 }
566
567 target = new ActionTarget(actionTargetObject, actionTargetParent, componentIndex, cursorHitPos, 0, surfaceName);
568
569 action_recive_data.m_Target = target;
570 }
571
572 action_recive_data.m_MainItem = mainItem;
573 return true;
574 }
575
577 {
578 SurfaceInfo surfaceInfo;
580 surfaceParams.type = SurfaceDetectionType.Roadway;
581 surfaceParams.position = cursorHitPos;
582 surfaceParams.includeWater = true;
583 surfaceParams.syncMode = UseObjectsMode.NoWait;
584 surfaceParams.rsd = RoadSurfaceDetection.ABOVE;
585
587 if (g_Game.GetSurface(surfaceParams, surfaceResult) && surfaceResult.surface)
588 {
589 surfaceInfo = surfaceResult.surface;
590 }
591
592 return surfaceInfo;
593 }
594
595 void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
596 {
597 action_data.m_MainItem = action_recive_data.m_MainItem;
598
599 if(HasTarget())
600 {
601 if (action_recive_data.m_Target)
602 {
603 action_data.m_Target = action_recive_data.m_Target;
604 }
605 else
606 {
607 Error("Action target not created.");
608 action_data.m_Target = new ActionTarget(NULL, NULL, -1, vector.Zero, 0);
609 }
610 }
611 }
612
613 //----------------------------------------------------------------------------------------------
614 // Core methods don't override unless you know what you are doing
615 //----------------------------------------------------------------------------------------------
616 // COMMANDS -----------------------------------------------------------------------
617 protected int GetStanceMaskEx(PlayerBase player, ActionTarget target, ItemBase item)
618 {
619 return GetStanceMask(player);
620 }
621
622 protected int GetStanceMask(PlayerBase player)
623 {
624 if ( HasProneException() )
625 {
626 if ( player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_RAISEDERECT | DayZPlayerConstants.STANCEMASK_RAISEDCROUCH | DayZPlayerConstants.STANCEMASK_RAISEDPRONE))
627 return -1;
628 else if ( player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT))
629 return DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT;
630 else
631 return DayZPlayerConstants.STANCEMASK_PRONE;
632 }
633 return m_StanceMask;
634 }
635
636 protected int GetClosestPossibleStance(PlayerBase player, ActionTarget target, ItemBase item)
637 {
638 int stanceMask = GetStanceMaskEx(player, target, item);
639
640 if (player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_ERECT))
641 {
642 if (stanceMask & DayZPlayerConstants.STANCEMASK_ERECT)
643 return DayZPlayerConstants.STANCEMASK_ERECT;
644 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDERECT)
645 return DayZPlayerConstants.STANCEMASK_RAISEDERECT;
646 else if (stanceMask & DayZPlayerConstants.STANCEMASK_CROUCH)
647 return DayZPlayerConstants.STANCEMASK_CROUCH;
648 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDCROUCH)
649 return DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
650 else if (stanceMask & DayZPlayerConstants.STANCEMASK_PRONE)
651 return DayZPlayerConstants.STANCEMASK_PRONE;
652 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDPRONE)
653 return DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
654 }
655
656 if (player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_RAISEDERECT))
657 {
658 if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDERECT)
659 return DayZPlayerConstants.STANCEMASK_RAISEDERECT;
660 else if (stanceMask & DayZPlayerConstants.STANCEMASK_ERECT)
661 return DayZPlayerConstants.STANCEMASK_ERECT;
662 else if (stanceMask & DayZPlayerConstants.STANCEMASK_CROUCH)
663 return DayZPlayerConstants.STANCEMASK_CROUCH;
664 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDCROUCH)
665 return DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
666 else if (stanceMask & DayZPlayerConstants.STANCEMASK_PRONE)
667 return DayZPlayerConstants.STANCEMASK_PRONE;
668 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDPRONE)
669 return DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
670 }
671
672 if (player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH))
673 {
674 if (stanceMask & DayZPlayerConstants.STANCEMASK_CROUCH)
675 return DayZPlayerConstants.STANCEMASK_CROUCH;
676 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDCROUCH)
677 return DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
678 else if (stanceMask & DayZPlayerConstants.STANCEMASK_ERECT)
679 return DayZPlayerConstants.STANCEMASK_ERECT;
680 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDERECT)
681 return DayZPlayerConstants.STANCEMASK_RAISEDERECT;
682 else if (stanceMask & DayZPlayerConstants.STANCEMASK_PRONE)
683 return DayZPlayerConstants.STANCEMASK_PRONE;
684 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDPRONE)
685 return DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
686 }
687
688 if (player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_RAISEDCROUCH))
689 {
690 if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDCROUCH)
691 return DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
692 else if (stanceMask & DayZPlayerConstants.STANCEMASK_CROUCH)
693 return DayZPlayerConstants.STANCEMASK_CROUCH;
694 else if (stanceMask & DayZPlayerConstants.STANCEMASK_ERECT)
695 return DayZPlayerConstants.STANCEMASK_ERECT;
696 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDERECT)
697 return DayZPlayerConstants.STANCEMASK_RAISEDERECT;
698 else if (stanceMask & DayZPlayerConstants.STANCEMASK_PRONE)
699 return DayZPlayerConstants.STANCEMASK_PRONE;
700 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDPRONE)
701 return DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
702 }
703
704 if (player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_PRONE))
705 {
706 if (stanceMask & DayZPlayerConstants.STANCEMASK_PRONE)
707 return DayZPlayerConstants.STANCEMASK_PRONE;
708 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDPRONE)
709 return DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
710 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDCROUCH)
711 return DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
712 else if (stanceMask & DayZPlayerConstants.STANCEMASK_CROUCH)
713 return DayZPlayerConstants.STANCEMASK_CROUCH;
714 else if (stanceMask & DayZPlayerConstants.STANCEMASK_ERECT)
715 return DayZPlayerConstants.STANCEMASK_ERECT;
716 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDERECT)
717 return DayZPlayerConstants.STANCEMASK_RAISEDERECT;
718 }
719
720 if (player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_RAISEDPRONE))
721 {
722 if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDPRONE)
723 return DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
724 else if (stanceMask & DayZPlayerConstants.STANCEMASK_PRONE)
725 return DayZPlayerConstants.STANCEMASK_PRONE;
726 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDCROUCH)
727 return DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
728 else if (stanceMask & DayZPlayerConstants.STANCEMASK_CROUCH)
729 return DayZPlayerConstants.STANCEMASK_CROUCH;
730 else if (stanceMask & DayZPlayerConstants.STANCEMASK_ERECT)
731 return DayZPlayerConstants.STANCEMASK_ERECT;
732 else if (stanceMask & DayZPlayerConstants.STANCEMASK_RAISEDERECT)
733 return DayZPlayerConstants.STANCEMASK_RAISEDERECT;
734 }
735
736 return -1;
737 }
738
739 protected bool IsFullBodyEx(PlayerBase player, ActionTarget target, ItemBase item)
740 {
741 return IsFullBody(player);
742 }
743
745 {
746 if ( HasProneException() )
747 {
748 return !( player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_ERECT) );
749 }
750 return m_FullBody;
751 }
752
753 // if it is set to true if action have special fullbody animation for prone and additive for crouch and erect
754 protected bool HasProneException()
755 {
756 return false;
757 }
758
759 // ACTION LOGIC -------------------------------------------------------------------
760 // called from actionmanager.c
761 void Start( ActionData action_data ) //Setup on start of action
762 {
763 action_data.m_State = UA_START;
764
765 if ( LogManager.IsActionLogEnable() )
766 {
767 Debug.ActionLog("Time stamp: " + action_data.m_Player.GetSimulationTimeStamp(), this.ToString() , "n/a", "OnStart", action_data.m_Player.ToString() );
768 }
769
770 OnStart(action_data);
771
772 if ( GetGame().IsServer() )
773 {
774 OnStartServer(action_data);
775
776 string soundCat = GetSoundCategory(action_data);
777 if (soundCat)
778 action_data.m_Player.SetSoundCategoryHash(soundCat.Hash());
779 }
780 else
781 {
782 OnStartClient(action_data);
783 }
784
785 InformPlayers(action_data.m_Player,action_data.m_Target,UA_START);
786 }
787
788 void End( ActionData action_data )
789 {
790 if ( action_data.m_Player )
791 {
792 OnEnd(action_data);
793
794 if ( GetGame().IsServer() )
795 {
796 OnEndServer(action_data);
797 }
798 else
799 {
800 OnEndClient(action_data);
801 }
802
803 action_data.m_Player.GetActionManager().OnActionEnd();
804 }
805 }
806
807 void Interrupt(ActionData action_data)
808 {
809 End(action_data);
810 }
811
812 void OnEndInput(ActionData action_data)
813 {}
814
815 void EndInput(ActionData action_data)
816 {
817 action_data.m_ReciveEndInput = true;
818 OnEndInput(action_data);
819 }
820
821 void OnEndRequest(ActionData action_data)
822 {}
823
824 void EndRequest(ActionData action_data)
825 {
826 OnEndRequest(action_data);
827 }
828
829 bool CanReceiveAction(ActionTarget target)
830 {
831 bool result = true;
832 PlayerBase target_player = PlayerBase.Cast(target.GetObject());
833
834 if (target_player)
835 {
836 result = !target_player.IsJumpInProgress();
837 result = result && !(target_player.GetCommand_Ladder() || (target_player.GetCommand_Vehicle() && !CanTargetBeInVehicle()) || target_player.GetCommand_Swim());
838 }
839
840 return result;
841 }
842
843 static int ComputeConditionMask( PlayerBase player, ActionTarget target, ItemBase item )
844 {
845 int mask = 0;
846 if ( player.GetCommand_Vehicle() )
847 {
848 mask |= ActionConditionMask.ACM_IN_VEHICLE;
849 }
850
851 if ( player.GetCommand_Ladder() )
852 {
853 mask |= ActionConditionMask.ACM_ON_LADDER;
854 }
855
856 if ( player.IsRestrained() )
857 {
858 mask |= ActionConditionMask.ACM_RESTRAIN;
859 }
860
861 if ( player.GetCommand_Swim() )
862 {
863 mask |= ActionConditionMask.ACM_SWIMMING;
864 }
865
866 if ( player.IsRaised() )
867 {
868 mask |= ActionConditionMask.ACM_RAISED;
869 }
870
871 if ( player.GetCommand_Move() && player.GetCommand_Move().IsOnBack() )
872 {
873 mask |= ActionConditionMask.ACM_ON_BACK;
874 }
875
876 if ( player.GetThrowing().IsThrowingModeEnabled())
877 {
878 mask |= ActionConditionMask.ACM_THROWING;
879 }
880
881 if (player.IsLeaning())
882 {
883 mask |= ActionConditionMask.ACM_LEANING;
884 }
885
886 if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
887 {
888 mask |= ActionConditionMask.ACM_BROKEN_LEGS;
889 }
890
891 if (player.GetInputController() && player.GetInputController().CameraIsFreeLook())
892 mask |= ActionConditionMask.ACM_IN_FREELOOK;
893
894 return mask;
895 }
896
897 bool Can( PlayerBase player, ActionTarget target, ItemBase item, int condition_mask )
898 {
899 if (( (condition_mask & m_ConditionMask) != condition_mask ) || ( !IsFullBodyEx(player, target, item) && !player.IsPlayerInStance(GetStanceMaskEx(player, target, item)) ) || player.IsRolling())
900 return false;
901
902 if (HasTarget())
903 {
904 if (!FirearmActionBase.Cast(this))
905 {
906 EntityAI entity = EntityAI.Cast(target.GetObject());
907 if (entity && !target.GetObject().IsMan())
908 {
909 Man man = entity.GetHierarchyRootPlayer();
910 if (man && man != player)
911 return false;
912 }
913 }
914
915 if (m_ConditionTarget && !m_ConditionTarget.Can(player, target))
916 return false;
917 }
918
919 if (m_ConditionItem && !m_ConditionItem.Can(player, item))
920 return false;
921
922 if (!ActionCondition(player, target, item))
923 return false;
924
925 if (IsFullBodyEx(player, target, item))
926 {
927 int nextStance = GetClosestPossibleStance(player, target, item);
928 int stanceIdx = DayZPlayerUtils.ConvertStanceMaskToStanceIdx(nextStance);
929 if (stanceIdx != -1 && !DayZPlayerUtils.PlayerCanChangeStance(player, stanceIdx ))
930 return false;
931 }
932
933 return true;
934 }
935
936 bool Can(PlayerBase player, ActionTarget target, ItemBase item)
937 {
938 int condition_mask = ComputeConditionMask(player, target, item);
939
940 return Can( player, target, item, condition_mask);
941 }
942
943 protected bool CanContinue( ActionData action_data )
944 {
945 if (!action_data.m_Player.IsPlayerInStance(action_data.m_PossibleStanceMask) || !m_ConditionItem || !m_ConditionItem.CanContinue(action_data.m_Player,action_data.m_MainItem) || !m_ConditionTarget || !m_ConditionTarget.CanContinue(action_data.m_Player,action_data.m_Target))
946 return false;
947
948 return ActionConditionContinue(action_data);
949 }
950
952 {
953 return m_VariantManager != null;
954 }
955
957 {
960
961 return 0;
962 }
963
965 {
967 return m_VariantManager.GetActions(variants);
968
969 return 0;
970 }
971
972 void SetVariantID(int ID)
973 {
974 m_VariantID = ID;
975 }
976
978 {
979 return m_VariantID;
980 }
981
982 void UpdateVariants(Object item, Object target, int componet_index)
983 {
984 if ( m_VariantManager )
985 {
986 m_VariantManager.UpdateVariants(item, target, componet_index);
987 }
988 }
989
996
997 // Called when item changes location during performed action
1000
1001 // call only on client side for lock inventory before action
1002 // return if has successfuly reserved inventory
1003 bool InventoryReservation(ActionData action_data)
1004 {
1005 if ((IsLocal() || !UseAcknowledgment()) && IsInstant())
1006 return true;
1007
1008 //action_data.m_ReservedInventoryLocations = new array<ref InventoryLocation>;
1009 bool success = true;
1010 InventoryLocation targetInventoryLocation = NULL;
1011 InventoryLocation handInventoryLocation = NULL;
1012
1013 // lock target if it has target
1014 if (HasTarget())
1015 {
1016 ItemBase targetItem;
1017 if ( ItemBase.CastTo(targetItem,action_data.m_Target.GetObject()) )
1018 {
1019 targetInventoryLocation = new InventoryLocation;
1020 targetItem.GetInventory().GetCurrentInventoryLocation(targetInventoryLocation);
1021 if ( action_data.m_Player.GetInventory().HasInventoryReservation( targetItem, targetInventoryLocation) )
1022 {
1023 success = false;
1024 }
1025 else
1026 {
1027 action_data.m_Player.GetInventory().AddInventoryReservationEx( targetItem, targetInventoryLocation, GameInventory.c_InventoryReservationTimeoutMS);
1028 }
1029 }
1030 }
1031
1032 handInventoryLocation = new InventoryLocation;
1033 handInventoryLocation.SetHands(action_data.m_Player,action_data.m_Player.GetItemInHands());
1034
1035 if (action_data.m_Player.GetInventory().HasInventoryReservation( action_data.m_Player.GetItemInHands(), handInventoryLocation))
1036 {
1037 if (HasTarget())
1038 {
1039 action_data.m_Player.GetInventory().ClearInventoryReservation(targetItem, targetInventoryLocation);
1040 }
1041
1042 success = false;
1043 }
1044 else
1045 {
1046 action_data.m_Player.GetInventory().AddInventoryReservationEx( action_data.m_Player.GetItemInHands(), handInventoryLocation, GameInventory.c_InventoryReservationTimeoutMS);
1047 }
1048
1049 if (success)
1050 {
1051 if (targetInventoryLocation)
1052 action_data.m_ReservedInventoryLocations.Insert(targetInventoryLocation);
1053
1054 if (handInventoryLocation)
1055 action_data.m_ReservedInventoryLocations.Insert(handInventoryLocation);
1056 }
1057
1058 return success;
1059 }
1060
1061 void ClearInventoryReservationEx(ActionData action_data)
1062 {
1063 if (action_data.m_Player.GetInstanceType() != DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1064 {
1065 if (action_data.m_ReservedInventoryLocations)
1066 {
1068 for ( int i = 0; i < action_data.m_ReservedInventoryLocations.Count(); i++)
1069 {
1070 il = action_data.m_ReservedInventoryLocations.Get(i);
1071 action_data.m_Player.GetInventory().ClearInventoryReservationEx( il.GetItem() , il );
1072 }
1073
1074 action_data.m_ReservedInventoryLocations.Clear();
1075 }
1076 }
1077 }
1078
1079 void RefreshReservations(ActionData action_data)
1080 {
1081 if (action_data.m_ReservedInventoryLocations)
1082 {
1084 for (int i = 0; i < action_data.m_ReservedInventoryLocations.Count(); i++)
1085 {
1086 il = action_data.m_ReservedInventoryLocations.Get(i);
1087 EntityAI entity = il.GetItem();
1088 action_data.m_Player.GetInventory().ExtendInventoryReservationEx(il.GetItem() , il, 10000);
1089 }
1090 }
1091 }
1092
1093 bool AddActionJuncture(ActionData action_data)
1094 {
1095 bool accepted = true;
1096 if (action_data.m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1097 {
1098 if (HasTarget() && IsLockTargetOnUse() && action_data.m_Target)
1099 {
1100 EntityAI targetEntity;
1101 if (EntityAI.CastTo(targetEntity, action_data.m_Target.GetObject()))
1102 {
1103 InventoryLocation targetIl = new InventoryLocation();
1104 targetEntity.GetInventory().GetCurrentInventoryLocation(targetIl);
1105
1106 //Lock target
1107 if (!GetGame().AddInventoryJunctureEx(action_data.m_Player, targetEntity, targetIl, true, 10000))
1108 {
1109 accepted = false;
1110 }
1111 else
1112 {
1113 action_data.m_ReservedInventoryLocations.Insert(targetIl);
1114 }
1115 }
1116 }
1117 }
1118
1119 return accepted;
1120 }
1121
1122 void ClearActionJuncture(ActionData action_data)
1123 {
1124 if (action_data.m_Player.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1125 {
1126 if (action_data.m_ReservedInventoryLocations)
1127 {
1129 for ( int i = 0; i < action_data.m_ReservedInventoryLocations.Count(); i++)
1130 {
1131 il = action_data.m_ReservedInventoryLocations.Get(i);
1132 EntityAI entity = il.GetItem();
1133 if (entity)
1134 {
1135 GetGame().ClearJunctureEx(action_data.m_Player, entity);
1136 }
1137 }
1138
1139 action_data.m_ReservedInventoryLocations.Clear();
1140 }
1141 }
1142 }
1143
1144 void RefreshActionJuncture(ActionData action_data)
1145 {
1146 if (action_data.m_ReservedInventoryLocations)
1147 {
1149 for (int i = 0; i < action_data.m_ReservedInventoryLocations.Count(); i++)
1150 {
1151 il = action_data.m_ReservedInventoryLocations.Get(i);
1152 EntityAI entity = il.GetItem();
1153 if (entity)
1154 {
1155 GetGame().ExtendActionJuncture(action_data.m_Player, entity, 10000);
1156 }
1157 }
1158 }
1159 }
1160
1161 // action need first have permission from server before can start
1163 {
1164 return true;
1165 }
1166
1168 protected void InformPlayers( PlayerBase player, ActionTarget target, int state );
1169
1170 void SendMessageToClient( Object reciever, string message ) //sends given string to client, don't use if not nescessary
1171 {
1172 PlayerBase man;
1173 if (GetGame().IsServer() && Class.CastTo(man, reciever) && m_MessageParam && reciever.IsAlive() && message != "")
1174 {
1175 m_MessageParam.param1 = message;
1176 GetGame().RPCSingleParam(man, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, man.GetIdentity());
1177 }
1178 }
1179
1180 // ActionCondition Rules
1181 // ------------------------------------------------------
1182 protected bool IsDamageDestroyed(ActionTarget target)
1183 {
1184 return target.GetObject() && target.GetObject().IsDamageDestroyed();
1185 }
1186
1187 protected bool IsBuilding(ActionTarget target)
1188 {
1189 return target.GetObject() && target.GetObject().IsBuilding();
1190 }
1191
1192 protected bool IsTransport(ActionTarget target)
1193 {
1194 return target.GetObject() && target.GetObject().IsTransport();
1195 }
1196
1197 protected bool IsInReach(PlayerBase player, ActionTarget target, float maxDistance = 1.0)
1198 {
1199 Object obj = target.GetObject();
1200 if (!obj)
1201 return false;
1202
1203 float distanceRoot, distanceHead;
1204 vector modelPos, worldPos, playerHeadPos;
1205
1206 // we're using sq distance in comparison
1207 maxDistance = maxDistance * maxDistance;
1208
1209 // get position of Head bone
1210 MiscGameplayFunctions.GetHeadBonePos(player, playerHeadPos);
1211
1212 array<string> componentNames = new array<string>();
1213 obj.GetActionComponentNameList(target.GetComponentIndex(), componentNames);
1214 foreach (string componentName : componentNames)
1215 {
1216 if (componentName.Contains("doorstwin"))
1217 continue;
1218
1219 modelPos = obj.GetSelectionPositionMS(componentName);
1220 worldPos = obj.ModelToWorld(modelPos);
1221
1222 break;
1223 }
1224
1225 distanceRoot = vector.DistanceSq(worldPos, player.GetPosition());
1226 distanceHead = vector.DistanceSq(worldPos, playerHeadPos);
1227
1228 return distanceRoot <= maxDistance || distanceHead <= maxDistance;
1229 }
1230 // ------------------------------------------------------
1231
1232
1233
1234 // SOUNDS ------------------------------------------------------
1235 SoundOnVehicle PlayActionSound( PlayerBase player )
1236 {
1237 if ( GetGame().IsServer() && player )
1238 {
1239 if ( m_Sound != "" )
1240 {
1241 return GetGame().CreateSoundOnObject(player, m_Sound, 6, false);
1242 }
1243 else if ( m_Sounds && m_Sounds.Count() > 0 )
1244 {
1245 int rand_num = Math.RandomInt(0, m_Sounds.Count());
1246 return GetGame().CreateSoundOnObject(player, m_Sounds.Get(rand_num), 6, false);
1247 }
1248 }
1249
1250 return NULL;
1251 }
1252
1253 void OnActionInfoUpdate( PlayerBase player, ActionTarget target, ItemBase item )
1254 {
1255 }
1256
1257 //sound category matches with a soundtable category in config, selects correct soundset
1258 string GetSoundCategory(ActionData action_data)
1259 {
1260 return "";
1261 }
1262
1263 // EVENTS ------------------------------------------------
1264 void OnUpdate(ActionData action_data)
1265 {}
1266
1267 void OnUpdateClient(ActionData action_data)
1268 {
1269 if ( !GetGame().IsDedicatedServer() )
1270 {
1271 if (action_data.m_RefreshReservationTimer > 0)
1272 {
1273 action_data.m_RefreshReservationTimer--;
1274 }
1275 else
1276 {
1277 action_data.m_RefreshReservationTimer = m_RefreshReservationTimerValue;
1278 RefreshReservations(action_data);
1279 }
1280 }
1281 }
1282
1283 void OnUpdateServer(ActionData action_data)
1284 {
1285 if (action_data.m_RefreshJunctureTimer > 0)
1286 {
1287 action_data.m_RefreshJunctureTimer--;
1288 }
1289 else
1290 {
1291 action_data.m_RefreshJunctureTimer = m_RefreshReservationTimerValue;
1292 RefreshActionJuncture(action_data);
1293 }
1294 }
1295
1296 void OnStart(ActionData action_data)
1297 {
1298 if (action_data.m_Player != NULL && action_data.m_Player.IsPlacingLocal() && !IsDeploymentAction())
1299 action_data.m_Player.PlacingCancelLocal();
1300 }
1301
1302 void OnStartClient(ActionData action_data)
1303 {}
1304
1305 void OnStartServer(ActionData action_data)
1306 {
1307
1308 }
1309
1310 void OnEnd(ActionData action_data)
1311 {
1312
1313 }
1314
1315 void OnEndClient(ActionData action_data)
1316 {}
1317
1318 void OnEndServer(ActionData action_data)
1319 {
1320 }
1321
1322 // SOFT SKILLS ------------------------------------------------
1324 {
1325 if(m_SpecialtyWeight == 0)
1326 {
1327#ifdef DEVELOPER
1328 //Print("UserAction does not use SoftSkills");
1329#endif
1330 }
1331
1332 return m_SpecialtyWeight;
1333 }
1334
1335 int GetState( ActionData action_data )
1336 {
1337 return action_data.m_State;
1338 }
1339
1340 float GetProgress( ActionData action_data )
1341 {
1342 return -1;
1343 }
1344
1345 float GetProgressWidgetMultiplier( ActionData action_data ) // override when action length is not supposed to be the same length as progress widget
1346 {
1347 return 1;
1348 }
1349
1351 {
1352 return m_Input;
1353 }
1354
1355 void SetID(int actionId)
1356 {
1357 m_ActionID = actionId;
1358 }
1359
1360 int GetID()
1361 {
1362 return m_ActionID;
1363 }
1364
1365 string GetAdminLogMessage(ActionData action_data)
1366 {
1367 return "";
1368 }
1369};
const int AC_UNCATEGORIZED
Definition _constants.c:1
ActionConditionMask
Definition actionbase.c:2
@ ACM_THROWING
Definition actionbase.c:10
@ ACM_NO_EXEPTION
Definition actionbase.c:3
@ ACM_ON_LADDER
Definition actionbase.c:5
@ ACM_SWIMMING
Definition actionbase.c:6
@ ACM_RAISED
Definition actionbase.c:8
@ ACM_LEANING
Definition actionbase.c:11
@ ACM_IN_VEHICLE
Definition actionbase.c:4
@ ACM_RESTRAIN
Definition actionbase.c:7
@ ACM_ON_BACK
Definition actionbase.c:9
@ ACM_BROKEN_LEGS
Definition actionbase.c:12
@ ACM_IN_FREELOOK
Definition actionbase.c:13
int m_PossibleStanceMask
Definition actionbase.c:42
bool m_ReciveEndInput
Definition actionbase.c:49
int m_RefreshReservationTimer
Definition actionbase.c:44
ref ActionBase m_Action
Definition actionbase.c:35
bool m_WasActionStarted
Definition actionbase.c:48
bool m_WasExecuted
Definition actionbase.c:47
int m_DelayedAnimationEventID
Definition actionbase.c:46
ref array< ref InventoryLocation > m_ReservedInventoryLocations
Definition actionbase.c:43
int m_RefreshJunctureTimer
Definition actionbase.c:45
ref CABase m_ActionComponent
Definition actionbase.c:38
ref ActionTarget m_Target
Definition actionbase.c:18
ActionBase ActionData
Definition actionbase.c:30
class BaitData m_MainItem
Definition actionbase.c:36
float GetProgressWidgetMultiplier(ActionData action_data)
void OnEndClient(ActionData action_data)
bool CanBeUsedRaised()
Definition actionbase.c:354
bool CanBeUsedSwimming()
Definition actionbase.c:344
bool IsShaveSelf()
Definition actionbase.c:293
bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:409
void SendMessageToClient(Object reciever, string message)
int GetVariants(out array< ref ActionBase > variants)
Definition actionbase.c:964
float m_SpecialtyWeight
Definition actionbase.c:77
ActionData CreateActionData()
Definition actionbase.c:225
void ClearActionJuncture(ActionData action_data)
void RefreshActionJuncture(ActionData action_data)
bool CanTargetBeInVehicle()
Definition actionbase.c:334
int m_RefreshReservationTimerValue
Definition actionbase.c:55
void ApplyModifiers(ActionData action_data)
bool DisplayTargetInActionText()
Definition actionbase.c:399
Object GetDisplayInteractObject(PlayerBase player, ActionTarget target)
Definition actionbase.c:236
int GetClosestPossibleStance(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:636
bool IsEat()
Definition actionbase.c:283
int m_ActionID
Definition actionbase.c:67
bool HasProgress()
For UI: hiding of progress bar.
Definition actionbase.c:250
string m_Sound
Definition actionbase.c:57
bool HasVariants()
Definition actionbase.c:951
void End(ActionData action_data)
Definition actionbase.c:788
void OnEndRequest(ActionData action_data)
Definition actionbase.c:821
bool RemoveForceTargetAfterUse()
Definition actionbase.c:273
string GetAdminLogMessage(ActionData action_data)
int GetState(ActionData action_data)
void OnEnd(ActionData action_data)
int m_StanceMask
Definition actionbase.c:62
bool IsDamageDestroyed(ActionTarget target)
bool CanBeUsedInVehicle()
Definition actionbase.c:329
ref ActionVariantManager m_VariantManager
Definition actionbase.c:70
void UpdateVariants(Object item, Object target, int componet_index)
Definition actionbase.c:982
bool CanBePerformedWhileChangingStance()
Condition used in PlayerBase::CanChangeStance to check if stance can be changed while action is perfo...
Definition actionbase.c:314
bool CanBePerformedFromInventory()
Definition actionbase.c:308
bool IsDrink()
Definition actionbase.c:288
int GetStanceMaskEx(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:617
void OnUpdateServer(ActionData action_data)
bool HasTarget()
Definition actionbase.c:244
bool InventoryReservation(ActionData action_data)
void OnItemLocationChanged(ItemBase item)
Definition actionbase.c:998
void Start(ActionData action_data)
Definition actionbase.c:761
string GetSoundCategory(ActionData action_data)
void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
void ActionBase()
Definition actionbase.c:82
bool IsInReach(PlayerBase player, ActionTarget target, float maxDistance=1.0)
bool CanBePerformedFromQuickbar()
Definition actionbase.c:303
bool IsLockTargetOnUse()
Definition actionbase.c:99
void EndInput(ActionData action_data)
Definition actionbase.c:815
void OnUpdateClient(ActionData action_data)
bool Can(PlayerBase player, ActionTarget target, ItemBase item, int condition_mask)
Definition actionbase.c:897
bool CanBeUsedInRestrain()
Definition actionbase.c:324
string GetTargetName(PlayerBase player, ActionTarget target)
Definition actionbase.c:420
int GetRefreshReservationTimerValue()
Definition actionbase.c:427
bool CanBeUsedInFreelook()
Definition actionbase.c:374
bool IsTransport(ActionTarget target)
bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Definition actionbase.c:156
string m_Text
Definition actionbase.c:58
bool UseAcknowledgment()
bool CanBeUsedOnBack()
Definition actionbase.c:339
int m_VariantID
Definition actionbase.c:68
ref CCIBase m_ConditionItem
Definition actionbase.c:64
ref TStringArray m_Sounds
Definition actionbase.c:63
int GetStanceMask(PlayerBase player)
Definition actionbase.c:622
bool Can(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:936
void OnUpdate(ActionData action_data)
bool AddActionJuncture(ActionData action_data)
int GetVariantsCount()
Definition actionbase.c:956
void RefreshReservations(ActionData action_data)
void ActionCleanup(ActionData action_data)
Definition actionbase.c:212
bool CanBeUsedOnLadder()
Definition actionbase.c:349
int GetActionCategory()
Definition actionbase.c:278
float GetProgress(ActionData action_data)
bool IsBuilding(ActionTarget target)
SurfaceInfo GetTargetSurfaceInfo(vector cursorHitPos)
Definition actionbase.c:576
bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Definition actionbase.c:493
bool IsFullBodyEx(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:739
void OnStartClient(ActionData action_data)
void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Definition actionbase.c:432
int m_ConditionMask
Definition actionbase.c:69
void OnStartServer(ActionData action_data)
ActionVariantManager GetVariantManager()
Definition actionbase.c:990
bool HasProneException()
Definition actionbase.c:754
ActionInput m_Input
Definition actionbase.c:66
bool IsInstant()
Definition actionbase.c:262
bool CanBeUsedThrowing()
Definition actionbase.c:359
bool Post_SetupAction(ActionData action_data)
Definition actionbase.c:207
bool IsDeploymentAction()
Is an action directly related to deployment/advanced placing.
Definition actionbase.c:380
bool ActionConditionContinue(ActionData action_data)
Definition actionbase.c:404
void SetID(int actionId)
void EndRequest(ActionData action_data)
Definition actionbase.c:824
void ClearInventoryReservationEx(ActionData action_data)
bool UseMainItem()
Definition actionbase.c:385
bool CanBeSetFromInventory()
Definition actionbase.c:319
SoundOnVehicle PlayActionSound(PlayerBase player)
void InformPlayers(PlayerBase player, ActionTarget target, int state)
DEPRECATED delivers message ids to clients based on given context.
void OnStart(ActionData action_data)
bool IsUsingProxies()
not using plane object - it's using multiple proxies
Definition actionbase.c:268
ActionInput GetInput()
void SetInput(ActionInput ai)
Definition actionbase.c:220
int GetVariantID()
Definition actionbase.c:977
bool CanReceiveAction(ActionTarget target)
Definition actionbase.c:829
void OnEndInput(ActionData action_data)
Definition actionbase.c:812
void CreateConditionComponents()
Definition actionbase.c:230
float GetSpecialtyWeight()
bool m_LockTargetOnUse
Definition actionbase.c:60
void Interrupt(ActionData action_data)
Definition actionbase.c:807
void SetVariantID(int ID)
Definition actionbase.c:972
void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Definition actionbase.c:595
bool IsFullBody(PlayerBase player)
Definition actionbase.c:744
bool MainItemAlwaysInHands()
Definition actionbase.c:390
void InitConditionMask()
Definition actionbase.c:104
bool m_FullBody
Definition actionbase.c:61
ref CCTBase m_ConditionTarget
Definition actionbase.c:65
ref Param1< string > m_MessageParam
Definition actionbase.c:73
bool CanContinue(ActionData action_data)
Definition actionbase.c:943
string GetText()
Definition actionbase.c:298
bool CanBeUsedWithBrokenLegs()
Definition actionbase.c:369
bool CanBeUsedLeaning()
Definition actionbase.c:364
void OnEndServer(ActionData action_data)
bool IsLocal()
Definition actionbase.c:256
static int ComputeConditionMask(PlayerBase player, ActionTarget target, ItemBase item)
Definition actionbase.c:843
void UpdateVariants(Object item, Object target, int componet_index)
int GetActions(out array< ref ActionBase > variants_action)
Definition cabase.c:2
Super root of all classes in Enforce script.
Definition enscript.c:11
Definition debug.c:2
Definition camera.c:2
script counterpart to engine's class Inventory
Definition inventory.c:79
const int c_InventoryReservationTimeoutMS
reservations
Definition inventory.c:712
InventoryLocation.
TODO doc.
Definition enscript.c:118
Definition enmath.c:7
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
Serialization general interface. Serializer API works with:
Definition serializer.c:56
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZGame g_Game
Definition dayzgame.c:3868
DayZPlayerInstanceType
defined in C++
DayZPlayerConstants
defined in C++
Definition dayzplayer.c:602
eBrokenLegs
Definition ebrokenlegs.c:2
EmoteCB m_Callback
ERPCs
Definition erpcs.c:2
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Definition endebug.c:90
array< string > TStringArray
Definition enscript.c:709
void OnEnd()
Definition sound.c:226
const int UA_START
Definition constants.c:469
const int UA_NONE
Definition constants.c:462
DayZPlayer m_Player
Definition hand_events.c:42
string Type
enum EObjectTemperatureState m_State
bool IsFullBody()
int GetStanceMask()
SurfaceDetectionType
Definition surfaceinfo.c:66
UseObjectsMode
Definition surfaceinfo.c:54