DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionBase.c
См. документацию.
15class ActionReciveData
16{
19}
20
27
28class ActionData
29{
30 void ActionData()
31 {
33 }
34
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
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
226 {
227 return new ActionData;
228 }
229
230 void CreateConditionComponents() //Instantiates components, called once from ActionManager on actions construction
231 {
234 }
235
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
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
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
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 {
959 return m_VariantManager.GetActionsCount();
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
991 {
992 if ( !m_VariantManager )
994 return m_VariantManager;
995 }
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
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
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
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
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
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
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
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
ActionConditionMask
Определения ActionBase.c:2
@ ACM_THROWING
Определения ActionBase.c:10
@ ACM_NO_EXEPTION
Определения ActionBase.c:3
@ ACM_ON_LADDER
Определения ActionBase.c:5
@ ACM_SWIMMING
Определения ActionBase.c:6
@ ACM_RAISED
Определения ActionBase.c:8
@ ACM_LEANING
Определения ActionBase.c:11
@ ACM_IN_VEHICLE
Определения ActionBase.c:4
@ ACM_RESTRAIN
Определения ActionBase.c:7
@ ACM_ON_BACK
Определения ActionBase.c:9
@ ACM_BROKEN_LEGS
Определения ActionBase.c:12
@ ACM_IN_FREELOOK
Определения ActionBase.c:13
int m_PossibleStanceMask
Определения ActionBase.c:42
bool m_ReciveEndInput
Определения ActionBase.c:49
int m_RefreshReservationTimer
Определения ActionBase.c:44
ref ActionBase m_Action
Определения ActionBase.c:35
bool m_WasActionStarted
Определения ActionBase.c:48
bool m_WasExecuted
Определения ActionBase.c:47
int m_DelayedAnimationEventID
Определения ActionBase.c:46
ref array< ref InventoryLocation > m_ReservedInventoryLocations
Определения ActionBase.c:43
int m_RefreshJunctureTimer
Определения ActionBase.c:45
ref CABase m_ActionComponent
Определения ActionBase.c:38
ref ActionTarget m_Target
Определения ActionBase.c:18
ActionBase ActionData
Определения ActionBase.c:30
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:121
class BaitData m_MainItem
Определения ActionBase.c:36
DayZGame g_Game
Определения DayZGame.c:3868
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
eBrokenLegs
Определения EBrokenLegs.c:2
ERPCs
Определения ERPCs.c:2
EmoteCB m_Callback
Определения EmoteManager.c:111
class GP5GasMask extends MaskBase ItemBase
DayZPlayer m_Player
Определения Hand_Events.c:42
string Type
Определения JsonDataContaminatedArea.c:11
enum EObjectTemperatureState m_State
bool IsFullBody()
Определения PluginDayzPlayerDebug.c:71
int GetStanceMask()
Определения PluginDayzPlayerDebug.c:76
SurfaceDetectionType
Определения SurfaceInfo.c:66
UseObjectsMode
Определения SurfaceInfo.c:54
proto static native void End()
Finalizes the testing process.
float GetProgressWidgetMultiplier(ActionData action_data)
Определения ActionBase.c:1345
void OnEndClient(ActionData action_data)
Определения ActionBase.c:1315
bool CanBeUsedRaised()
Определения ActionBase.c:354
bool CanBeUsedSwimming()
Определения ActionBase.c:344
bool IsShaveSelf()
Определения ActionBase.c:293
bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:409
void SendMessageToClient(Object reciever, string message)
Определения ActionBase.c:1170
int GetVariants(out array< ref ActionBase > variants)
Определения ActionBase.c:964
float m_SpecialtyWeight
Определения ActionBase.c:77
ActionData CreateActionData()
Определения ActionBase.c:225
void ClearActionJuncture(ActionData action_data)
Определения ActionBase.c:1122
void RefreshActionJuncture(ActionData action_data)
Определения ActionBase.c:1144
bool CanTargetBeInVehicle()
Определения ActionBase.c:334
int m_RefreshReservationTimerValue
Определения ActionBase.c:55
void ApplyModifiers(ActionData action_data)
bool DisplayTargetInActionText()
Определения ActionBase.c:399
Object GetDisplayInteractObject(PlayerBase player, ActionTarget target)
Определения ActionBase.c:236
int GetClosestPossibleStance(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:636
bool IsEat()
Определения ActionBase.c:283
int m_ActionID
Определения ActionBase.c:67
int GetID()
Определения ActionBase.c:1360
bool HasProgress()
For UI: hiding of progress bar.
Определения ActionBase.c:250
string m_Sound
Определения ActionBase.c:57
bool HasVariants()
Определения ActionBase.c:951
void End(ActionData action_data)
Определения ActionBase.c:788
void OnEndRequest(ActionData action_data)
Определения ActionBase.c:821
bool RemoveForceTargetAfterUse()
Определения ActionBase.c:273
string GetAdminLogMessage(ActionData action_data)
Определения ActionBase.c:1365
int GetState(ActionData action_data)
Определения ActionBase.c:1335
void OnEnd(ActionData action_data)
Определения ActionBase.c:1310
int m_StanceMask
Определения ActionBase.c:62
bool IsDamageDestroyed(ActionTarget target)
Определения ActionBase.c:1182
bool CanBeUsedInVehicle()
Определения ActionBase.c:329
ref ActionVariantManager m_VariantManager
Определения ActionBase.c:70
void UpdateVariants(Object item, Object target, int componet_index)
Определения ActionBase.c:982
bool CanBePerformedWhileChangingStance()
Condition used in PlayerBase::CanChangeStance to check if stance can be changed while action is perfo...
Определения ActionBase.c:314
bool CanBePerformedFromInventory()
Определения ActionBase.c:308
bool IsDrink()
Определения ActionBase.c:288
int GetStanceMaskEx(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:617
void OnUpdateServer(ActionData action_data)
Определения ActionBase.c:1283
bool HasTarget()
Определения ActionBase.c:244
bool InventoryReservation(ActionData action_data)
Определения ActionBase.c:1003
void OnItemLocationChanged(ItemBase item)
Определения ActionBase.c:998
void Start(ActionData action_data)
Определения ActionBase.c:761
string GetSoundCategory(ActionData action_data)
Определения ActionBase.c:1258
void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:1253
void ActionBase()
Определения ActionBase.c:82
bool IsInReach(PlayerBase player, ActionTarget target, float maxDistance=1.0)
Определения ActionBase.c:1197
bool CanBePerformedFromQuickbar()
Определения ActionBase.c:303
bool IsLockTargetOnUse()
Определения ActionBase.c:99
void EndInput(ActionData action_data)
Определения ActionBase.c:815
void OnUpdateClient(ActionData action_data)
Определения ActionBase.c:1267
bool Can(PlayerBase player, ActionTarget target, ItemBase item, int condition_mask)
Определения ActionBase.c:897
bool CanBeUsedInRestrain()
Определения ActionBase.c:324
string GetTargetName(PlayerBase player, ActionTarget target)
Определения ActionBase.c:420
int GetRefreshReservationTimerValue()
Определения ActionBase.c:427
bool CanBeUsedInFreelook()
Определения ActionBase.c:374
bool IsTransport(ActionTarget target)
Определения ActionBase.c:1192
bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data=NULL)
Определения ActionBase.c:156
string m_Text
Определения ActionBase.c:58
bool UseAcknowledgment()
Определения ActionBase.c:1162
bool CanBeUsedOnBack()
Определения ActionBase.c:339
int m_VariantID
Определения ActionBase.c:68
ref CCIBase m_ConditionItem
Определения ActionBase.c:64
ref TStringArray m_Sounds
Определения ActionBase.c:63
int GetStanceMask(PlayerBase player)
Определения ActionBase.c:622
bool Can(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:936
void OnUpdate(ActionData action_data)
Определения ActionBase.c:1264
bool AddActionJuncture(ActionData action_data)
Определения ActionBase.c:1093
int GetVariantsCount()
Определения ActionBase.c:956
void RefreshReservations(ActionData action_data)
Определения ActionBase.c:1079
void ActionCleanup(ActionData action_data)
Определения ActionBase.c:212
bool CanBeUsedOnLadder()
Определения ActionBase.c:349
int GetActionCategory()
Определения ActionBase.c:278
float GetProgress(ActionData action_data)
Определения ActionBase.c:1340
bool IsBuilding(ActionTarget target)
Определения ActionBase.c:1187
SurfaceInfo GetTargetSurfaceInfo(vector cursorHitPos)
Определения ActionBase.c:576
bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
Определения ActionBase.c:493
bool IsFullBodyEx(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:739
void OnStartClient(ActionData action_data)
Определения ActionBase.c:1302
void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
Определения ActionBase.c:432
int m_ConditionMask
Определения ActionBase.c:69
void OnStartServer(ActionData action_data)
Определения ActionBase.c:1305
ActionVariantManager GetVariantManager()
Определения ActionBase.c:990
bool HasProneException()
Определения ActionBase.c:754
ActionInput m_Input
Определения ActionBase.c:66
bool IsInstant()
Определения ActionBase.c:262
bool CanBeUsedThrowing()
Определения ActionBase.c:359
bool Post_SetupAction(ActionData action_data)
Определения ActionBase.c:207
bool IsDeploymentAction()
Is an action directly related to deployment/advanced placing.
Определения ActionBase.c:380
bool ActionConditionContinue(ActionData action_data)
Определения ActionBase.c:404
void SetID(int actionId)
Определения ActionBase.c:1355
void EndRequest(ActionData action_data)
Определения ActionBase.c:824
void ClearInventoryReservationEx(ActionData action_data)
Определения ActionBase.c:1061
bool UseMainItem()
Определения ActionBase.c:385
bool CanBeSetFromInventory()
Определения ActionBase.c:319
SoundOnVehicle PlayActionSound(PlayerBase player)
Определения ActionBase.c:1235
void InformPlayers(PlayerBase player, ActionTarget target, int state)
DEPRECATED delivers message ids to clients based on given context.
void OnStart(ActionData action_data)
Определения ActionBase.c:1296
GetInputType()
Определения ActionBase.c:215
bool IsUsingProxies()
not using plane object - it's using multiple proxies
Определения ActionBase.c:268
ActionInput GetInput()
Определения ActionBase.c:1350
void SetInput(ActionInput ai)
Определения ActionBase.c:220
int GetVariantID()
Определения ActionBase.c:977
bool CanReceiveAction(ActionTarget target)
Определения ActionBase.c:829
void OnEndInput(ActionData action_data)
Определения ActionBase.c:812
void CreateConditionComponents()
Определения ActionBase.c:230
float GetSpecialtyWeight()
Определения ActionBase.c:1323
bool m_LockTargetOnUse
Определения ActionBase.c:60
void Interrupt(ActionData action_data)
Определения ActionBase.c:807
void SetVariantID(int ID)
Определения ActionBase.c:972
void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
Определения ActionBase.c:595
bool IsFullBody(PlayerBase player)
Определения ActionBase.c:744
bool MainItemAlwaysInHands()
Определения ActionBase.c:390
void InitConditionMask()
Определения ActionBase.c:104
bool m_FullBody
Определения ActionBase.c:61
ref CCTBase m_ConditionTarget
Определения ActionBase.c:65
ref Param1< string > m_MessageParam
Определения ActionBase.c:73
bool CanContinue(ActionData action_data)
Определения ActionBase.c:943
string GetText()
Определения ActionBase.c:298
bool CanBeUsedWithBrokenLegs()
Определения ActionBase.c:369
bool CanBeUsedLeaning()
Определения ActionBase.c:364
void OnEndServer(ActionData action_data)
Определения ActionBase.c:1318
bool IsLocal()
Определения ActionBase.c:256
static int ComputeConditionMask(PlayerBase player, ActionTarget target, ItemBase item)
Определения ActionBase.c:843
Определения AnimatedActionBase.c:2
Определения ActionBase.c:53
Определения ActionInput.c:20
int m_StanceMask
Определения ActionBase.c:25
int m_CommandUIDProne
Определения ActionBase.c:24
int m_CommandUID
Определения ActionBase.c:23
Определения ActionBase.c:22
Определения CABase.c:2
Определения CCIBase.c:2
Определения CCIDummy.c:2
Определения CCTBase.c:2
Определения CCTDummy.c:2
proto native void RPCSingleParam(Object target, int rpc_type, Param param, bool guaranteed, PlayerIdentity recipient=null)
see CGame.RPC
bool ClearJunctureEx(Man player, notnull EntityAI item)
Определения Global/game.c:762
proto native SoundOnVehicle CreateSoundOnObject(Object source, string sound_name, float distance, bool looped, bool create_local=false)
proto native bool ExtendActionJuncture(Man player, notnull EntityAI item, int timeout_ms)
Super root of all classes in Enforce script.
Определения EnScript.c:11
static void ActionLog(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Определения 3_Game/tools/Debug.c:127
Определения 3_Game/tools/Debug.c:2
Определения Camera.c:2
const int c_InventoryReservationTimeoutMS
reservations
script counterpart to engine's class Inventory
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
static string DumpToStringNullSafe(InventoryLocation loc)
Определения InventoryLocation.c:226
proto native EntityAI GetItem()
returns item of current inventory location
InventoryLocation.
Определения InventoryLocation.c:29
static bool IsActionLogEnable()
Определения 3_Game/tools/Debug.c:638
Определения 3_Game/tools/Debug.c:594
TODO doc.
Определения EnScript.c:118
Определения EnMath.c:7
Определения ObjectTyped.c:2
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
bool includeWater
Include water in the surface detection, will return the water if it is higher than the surface.
Определения SurfaceInfo.c:83
SurfaceDetectionType type
Type of surface to detect.
Определения SurfaceInfo.c:77
RoadSurfaceDetection rsd
See RoadSurfaceDetection, SurfaceTraceType.Roadway only.
Определения SurfaceInfo.c:92
vector position
3D position to trace the surface from
Определения SurfaceInfo.c:80
UseObjectsMode syncMode
See UseObjectsMode, SurfaceTraceType.Roadway only.
Определения SurfaceInfo.c:86
SurfaceInfo surface
Returned SurfaceInfo, plain pointer.
Определения SurfaceInfo.c:114
Определения SurfaceInfo.c:9
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
static const vector Zero
Определения EnConvert.c:110
Определения EnConvert.c:106
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1068
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
array< string > TStringArray
Определения EnScript.c:709
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
void OnEnd()
Определения Sound.c:226
static proto string ToString(void var, bool type=false, bool name=false, bool quotes=true)
Return string representation of variable.
proto native int Hash()
Returns hash of string.
static const string Empty
Определения EnString.c:7
const int UA_START
Определения 3_Game/constants.c:469
const int UA_NONE
Определения 3_Game/constants.c:462