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