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