DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
DayZPlayerImplement.c
См. документацию.
1/*
2DayZPlayerImplement
3
4this file is implemenation of dayzPlayer in script
5- logic of movement
6- camera switching logic
7
8*/
9
11{
12 //----------------------------------
13 // callbacks
14
15 override void OnSimulationEnd()
16 {
17 if (LogManager.IsSyncLogEnable()) syncDebugPrint("DZPI::OnSimulationEnd - trying to drop item");
18
19 if (GetGame().IsServer())
20 {
21 EntityAI itemInHands = m_pPlayer.GetHumanInventory().GetEntityInHands();
22 if (itemInHands)
23 {
24 int boneIndex = m_pPlayer.GetBoneIndexByName("RightHand_Dummy");
25
26 vector m4[4];
27 m_pPlayer.GetBoneTransformWS(boneIndex, m4);
28
29 m_pPlayer.GetInventory().DropEntityWithTransform(InventoryMode.SERVER, m_pPlayer, itemInHands, m4);
30
31 if (GetCEApi())
32 {
33 int deadBodyLifetime = GetCEApi().GetCEGlobalInt("CleanupLifetimeDeadPlayer");
34 if (deadBodyLifetime <= 0)
35 {
36 deadBodyLifetime = 3600;
37 }
38 itemInHands.SetLifetime(deadBodyLifetime);
39 }
40 }
41 }
42 }
43
45 {
46 return m_pPlayer.m_WasInVehicle == false;
47 }
48
50}
51
52class DayZPlayerVehicleCommandDeathCallback : HumanCommandDeathCallback
53{
54 override void OnSimulationEnd()
55 {
56 m_pPlayer.PhysicsEnableGravity(true);
57 }
58
59 PlayerBase m_pPlayer;
60}
61
62class DeathEffectTimer extends Timer
63{
64 override void Stop()
65 {
66 super.Stop();
67
68 PPERequesterBank.GetRequester(PPERequester_DeathDarkening).Stop();
69 }
70};
71
72#ifdef FEATURE_NETWORK_RECONCILIATION
73
74class DayZPlayerImplementOwnerState : DayZPlayerOwnerState
75{
76 float m_fLastHeadingDiff;
77
78 protected override event void Write(PawnStateWriter ctx)
79 {
80 super.Write(ctx);
81
82 ctx.Write(m_fLastHeadingDiff);
83 }
84
85 protected override event void Read(PawnStateReader ctx)
86 {
87 super.Read(ctx);
88
89 ctx.Read(m_fLastHeadingDiff);
90 }
91};
93class DayZPlayerImplementMove : DayZPlayerMove
94{
95 protected override event void Write(PawnMoveWriter ctx, PawnMove prev)
96 {
97 super.Write(ctx, prev);
98
99 }
100
101 protected override event void Read(PawnMoveReader ctx, PawnMove prev)
102 {
103 super.Read(ctx, prev);
104
105 }
106};
107
108#endif
109
111{
112 static const float DEFAULT_DYING_TIME = 2.5;
113 static const float DYING_PROGRESSION_TIME = 0.05;
114
115
127 protected float m_FallYDiff;
128 protected float m_SprintedTime;
130 protected bool m_SprintFull;
131 protected bool m_IsRaised;
132 protected bool m_ShouldReload;
133 protected bool m_Camera3rdPerson;
134 protected bool m_CameraZoomToggle;
135 protected bool m_bADS;
136 private float m_WeaponRaiseTime;
139 protected bool m_CameraIronsight; // Ironsight NOW!
140 protected bool m_CameraOptics; // Optics NOW!
141 protected bool m_CameraOpticsAimOverride; // for tracking if aim limit is currently overriden by optics
142
144 protected bool m_IsTryingHoldBreath;
146 protected bool m_PlayerSelected;
147 protected bool m_Suicide;
148 protected bool m_IsUnconscious;
149 protected bool m_ShouldBeUnconscious;
154 ref DeathEffectTimer m_DeathEffectTimer;
158 protected bool m_LiftWeapon_player;
159 protected float m_ObstructWeapon_player;
160 protected bool m_ProcessLiftWeapon;
162 protected float m_ProcessObstructWeapon;
165 protected string m_ClimbingLadderType;
167 protected bool m_HandheldOpticsInUse;
168 protected bool m_ResetADS;
169 protected bool m_ProcessResetADS;
170 protected int m_StepCounter;
171 protected int m_NextVoNNoiseTime;
174
175 // aiming model helpers
176 protected bool m_RaiseStarted = false;
177 protected bool m_AimingFinisherStarted = false;
178 protected bool m_IsWeapon;
179
180 private float m_CurrentWaterLevel;
181
187
188 protected float m_dT;
189
190 protected float m_fObstructionSmooth;
192
195 {
196 SetEventMask(EntityEvent.CONTACT);
197
198 m_SprintFull = false;
199 m_SprintedTime = 0;
209 m_bADS = false;
211 SetOptics(false);
215 #ifdef PLATFORM_CONSOLE
217 #endif
218 m_LastSurfaceUnderHash = ("cp_gravel").Hash();
224
225 RegisterNetSyncVariableBoolSignal("m_TriggerPullPlayerOutOfVehicleSynch");
226 }
227
228#ifdef FEATURE_NETWORK_RECONCILIATION
229 protected override event typename GetOwnerStateType()
230 {
231 return DayZPlayerImplementOwnerState;
232 }
233
234 protected override event typename GetMoveType()
235 {
236 return DayZPlayerImplementMove;
237 }
238
239 protected override event void ObtainState(/*inout*/ PawnOwnerState pState)
240 {
241 super.ObtainState(pState);
242
243 DayZPlayerImplementOwnerState state = DayZPlayerImplementOwnerState.Cast(pState);
244
245 state.m_fLastHeadingDiff = m_fLastHeadingDiff;
246 }
247
248 protected override event void RewindState(PawnOwnerState pState, /*inout*/ PawnMove pMove, inout NetworkRewindType pRewindType)
249 {
250 super.RewindState(pState, pMove, pRewindType);
251
252 DayZPlayerImplementOwnerState state = DayZPlayerImplementOwnerState.Cast(pState);
253
254 if (pRewindType != NetworkRewindType.ADDITIVE)
255 {
256 m_fLastHeadingDiff = state.m_fLastHeadingDiff;
257 }
258 }
259#endif
260
265
270
275
280
285
287 {
288 }
289
291 override bool IsEyeZoom()
292 {
293 return GetEyeZoomLevel() > 0;
294 }
295
296 override int GetEyeZoomLevel()
297 {
299 }
300
301 override bool IsShootingFromCamera()
302 {
304 }
305
306 void OverrideShootFromCamera(bool pState)
307 {
308 m_IsShootingFromCamera = pState;
309 }
310
312 {
313 return m_CameraIronsight;
314 }
315
317 {
318 return m_CameraOptics;
319 }
320
321 override bool IsInThirdPerson()
322 {
323 return m_Camera3rdPerson;
324 }
325
326 void SetIsInThirdPerson(bool state)
327 {
328 m_Camera3rdPerson = state;
329 }
330
332 {
333 GetMovementState(m_MovementState);
334 if (m_MovementState)
335 return m_MovementState.IsRaised();
336
337 return false;
338 }
339
341 {
343 }
344
346 {
347 return m_SprintFull;
348 }
349
350 void ShowWeaponDebug(bool show)
351 {
352 if (show)
353 {
355 }
356 else
357 {
358 m_WeaponDebug = null;
359 }
360 }
361
363 {
364 return m_WeaponDebug != null;
365 }
366
367 void SetFallYDiff(float value)
368 {
369 m_FallYDiff = value;
370 }
371
372 override float GetCurrentWaterLevel()
373 {
374 return m_CurrentWaterLevel;
375 }
376
377 override void SetCurrentWaterLevel(float pWaterLevel)
378 {
379 m_CurrentWaterLevel = pWaterLevel;
380 }
381
382 void SetIronsights(bool value)
383 {
384 Weapon_Base weapon = Weapon_Base.Cast(GetHumanInventory().GetEntityInHands());
385 if (weapon)
386 weapon.SetWasIronSight(m_CameraIronsight);
387
388 m_CameraIronsight = value;
389
390 if (value)
391 {
392 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
393 if (hcw)
394 hcw.SetADS(true);
395
396 HumanInputController hic = GetInputController();
397 if (hic)
399 }
400 }
401
402 void SetOptics(bool value)
403 {
404 m_CameraOptics = value;
405
406 if (value)
407 {
408 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
409 if (hcw)
411
412 HumanInputController hic = GetInputController();
413 if (hic)
415 }
416 }
417
419 {
420 ItemOptics optics = null;
421 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
422 Weapon weapon = Weapon.Cast(entityInHands);
423 if (weapon)
424 {
425 optics = weapon.GetAttachedOptics();
426 }
427 else
428 {
429 optics = ItemOptics.Cast(entityInHands);
430 }
431
432 SetIronsights(false);
433 SetOptics(false);
434
435 if (optics)
436 {
437 SwitchOptics(optics,false);
438 }
439
440 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
441 if (hcw)
442 {
443 hcw.SetADS(false);
444 }
445 }
446
447 void SwitchOptics(ItemOptics optic, bool state)
448 {
449 if (optic && !optic.IsSightOnly())
450 {
451 if (state)
452 {
453 if (optic.HasEnergyManager())
454 optic.GetCompEM().SwitchOn();
455
456 optic.EnterOptics();
457 optic.OnOpticEnter();
458 }
459 else
460 {
461 optic.ExitOptics();
462 optic.OnOpticExit();
463 if (optic.HasEnergyManager())
464 optic.GetCompEM().SwitchOff();
465 }
466 }
467
468 if (m_CameraOptics != state)
469 {
470 SetOptics(state);
471 }
472 }
473
474 void SetClimbingLadderType(string value)
475 {
476 m_ClimbingLadderType = value;
477 }
478
482 void DepleteStaminaEx(EStaminaModifiers modifier, float dT = -1, float coef = 1.0) {};
483
485 {
486 return m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_VEHICLE || (GetParent() != null && GetParent().IsInherited(Transport));
487 }
488
490 {
491 return m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_SWIM;
492 }
493
495 {
496 return m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_LADDER;
497 }
498
500 bool PlaySoundEventType(ESoundEventType soundType, int soundEventID, int param = 0) {};
501 bool PlaySoundEvent(EPlayerSoundEventID id, bool from_anim_system = false, bool is_from_server = false) {};
502 bool PlaySoundEventEx(EPlayerSoundEventID id, bool from_anim_system = false, bool is_from_server = false, int param = 0) {};
503
505 {
507 }
508
509 float GetDeltaT()
510 {
511 return m_dT;
512 }
513
514 //-------------------------------------------------------------
518
520 float m_DeathHitDir = 0;
521 bool m_DeathJuctureSent = false;
522
528
529 override string GetDebugText()
530 {
531 string text = super.GetDebugText();
532 text += "Parent: " + Object.GetDebugName(Object.Cast(GetParent())) + "\n";//keep
533 text += "IsSimulationDisabled: " + GetIsSimulationDisabled() + "\n";//keep
534 /*
535 text += "DamageDestroyed: " + IsDamageDestroyed() + "\n";
536 text += "DeathProcessed: " + IsDeathProcessed() + "\n";
537 text += "DeathConditionMet: " + IsDeathConditionMet() + "\n";
538 text += "PullOutOfVehicleState: " + m_PullPlayerOutOfVehicleState + "\n";
539 text += "PullOutOfVehicleSynch: " + m_TriggerPullPlayerOutOfVehicleSynch + "\n";
540 text += "Position: " + GetPosition() + "\n";*/
541 return text;
542 }
543
545 {
546 if (!GetGame().IsServer())
547 {
548 return;
549 }
550
551 Transport transport;
552 if (!Class.CastTo(transport, GetParent()))
553 {
554 return;
555 }
556
557 int crewIdx = -1;
558 for (int i = 0; i < transport.CrewSize(); ++i)
559 {
560 if (transport.CrewMember(i) == this)
561 {
562 crewIdx = i;
563 break;
564 }
565 }
566
567 if (crewIdx == -1)
568 {
569 return;
570 }
571
572 transport.CrewGetOut(crewIdx);
574
575 if (crewIdx == DayZPlayerConstants.VEHICLESEAT_DRIVER)
576 {
578
579#ifdef FEATURE_NETWORK_RECONCILIATION
580 PlayerIdentity identity = GetIdentity();
581
582 if (identity)
583 {
585 identity.Possess(this);
586 }
587#endif
588 }
589
590 SetSynchDirty();
591 }
592
594 {
597
599 DisableSimulation(false);
600
601 switch (GetInstanceType())
602 {
603 case DayZPlayerInstanceType.INSTANCETYPE_SERVER:
604 case DayZPlayerInstanceType.INSTANCETYPE_CLIENT:
605 case DayZPlayerInstanceType.INSTANCETYPE_AI_SERVER:
606 case DayZPlayerInstanceType.INSTANCETYPE_AI_SINGLEPLAYER:
609 break;
610 }
611 }
612
614 {
615 if (m_TriggerPullPlayerOutOfVehicleSynch && !GetGame().IsDedicatedServer())
616 {
618 }
619
620 super.OnVariablesSynchronized();
621 }
622
623 bool HandleDeath(int pCurrentCommandID)
624 {
625 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_DEATH)
626 {
628 {
629 case -1:
630 break;
631 case 0:
633
634 PhysicsSetSolid(true);
635
637 DayZPlayerVehicleCommandDeathCallback callbackVeh;
638 Class.CastTo(callbackVeh, StartCommand_Death(DayZPlayerConstants.DEATH_PULL_OUT_TRANSPORT, 0, DayZPlayerVehicleCommandDeathCallback, m_PullPlayerOutOfVehicleKeepsInLocalSpace));
639 Class.CastTo(callbackVeh.m_pPlayer, this);
640 break;
641 }
642
643 return true;
644 }
645
646 if (m_DeathAnimType != -2 && g_Game.GetMissionState() == g_Game.MISSION_STATE_GAME)
647 {
648 if (!CommitedSuicide())
649 {
650 int type = m_DeathAnimType;
651 if (type == DayZPlayerConstants.DEATH_DEFAULT)
652 type = GetTypeOfDeath(pCurrentCommandID);
653
654 m_WasInVehicle = false;
655 HumanCommandVehicle hcv = GetCommand_Vehicle();
656 if (hcv)
657 {
659 m_WasInVehicle = !hcv.IsGettingIn() && !hcv.IsGettingOut();
660 }
661
662 int seatIndex = -1;
664 {
665 seatIndex = m_TransportCache.CrewMemberIndex(this);
666 }
667
669 m_ShouldBeUnconscious = false;
670
671 bool keepInLocalSpace = m_PullPlayerOutOfVehicleKeepsInLocalSpace;
673 {
674 if (IsUnconscious() || m_WasInVehicle)
675 {
676 keepInLocalSpace = true;
677 m_TransportCache.CrewDeath(seatIndex);
678 }
679 else
680 {
681 m_TransportCache.CrewGetOut(seatIndex);
682 }
683
684 m_TransportCache.MarkCrewMemberDead(seatIndex);
685
686 if (seatIndex == DayZPlayerConstants.VEHICLESEAT_DRIVER)
687 {
689
690#ifdef FEATURE_NETWORK_RECONCILIATION
691 PlayerIdentity identity = GetIdentity();
692
693 if (identity)
694 {
696 identity.Possess(this);
697 }
698#endif
699 }
700 }
701
702 DisableSimulation(false);
703 GetItemAccessor().HideItemInHands(false);
704 m_TransportCache = null;
705
707 Class.CastTo(callback, StartCommand_Death(type, m_DeathHitDir, DayZPlayerCommandDeathCallback, keepInLocalSpace));
708 Class.CastTo(callback.m_pPlayer, this);
709 }
710 else
711 {
712 PhysicsSetRagdoll(true);
713 }
714
715 // disable voice communication
716 GetGame().GetWorld().SetVoiceOn(false, false);
717
718 return true;
719 }
720
721 return false;
722 }
723
725 {
727 }
728
729 int GetTypeOfDeath(int pCurrentCommandID)
730 {
731 switch (pCurrentCommandID)
732 {
733 case DayZPlayerConstants.COMMANDID_SWIM:
734 return DayZPlayerConstants.DEATH_WATER;
735 case DayZPlayerConstants.COMMANDID_FALL:
736 return DayZPlayerConstants.DEATH_FALL;
737 case DayZPlayerConstants.COMMANDID_UNCONSCIOUS:
738 HumanCommandUnconscious hcu = GetCommand_Unconscious();
739 if (hcu)
740 {
741 if (hcu.IsOnLand())
742 return DayZPlayerConstants.DEATH_UNCON_ON_LAND;
743 if (hcu.IsInWater())
744 return DayZPlayerConstants.DEATH_UNCON_IN_WATER;
745 }
746
747 break;
748 }
749
750 return DayZPlayerConstants.DEATH_BODY;
751 }
752
753 void SendDeathJuncture(int pAnimTypeDeath, float pAnimHitDirDeath)
754 {
756 return;
757
758 DayZPlayerSyncJunctures.SendDeath(this, pAnimTypeDeath, pAnimHitDirDeath);
759 m_DeathJuctureSent = true;
760 }
761
762 override void EEKilled(Object killer)
763 {
764 SendDeathJuncture(-1, 0);
765
766 super.EEKilled(killer);
767 }
768
769 void ShowDeadScreen(bool show, float duration)
770 {
771 #ifndef NO_GUI
772 if (show && IsPlayerSelected())
773 {
774 #ifdef PLATFORM_PS4
776 #endif
777
778 string message = "";
779 if (!GetGame().GetMission().IsPlayerRespawning())
780 {
781 message = "#dayz_implement_dead";
782 }
783
784 #ifdef PLATFORM_CONSOLE
785 GetGame().GetUIManager().ScreenFadeIn(duration, message, FadeColors.DARK_RED, FadeColors.WHITE);
786 #else
787 GetGame().GetUIManager().ScreenFadeIn(duration, message, FadeColors.BLACK, FadeColors.WHITE);
788 #endif
789 }
790 else
791 {
792 GetGame().GetUIManager().ScreenFadeOut(duration);
793
794 if (duration > 0)
796 else
798 }
799 #endif
800 }
801
803 {
804 if (m_DeathEffectTimer && m_DeathEffectTimer.IsRunning())
805 {
806 m_DeathEffectTimer.Stop();
807 m_DeathEffectTimer = null;
808 }
809 }
810
811 void SimulateDeath(bool state)
812 {
813 if (g_Game.GetMissionState() != DayZGame.MISSION_STATE_GAME)
814 return;
815
816 LockControls(state);
817
818 if (state)
819 {
820 float duration = DEFAULT_DYING_TIME;
821 if (m_KilledByHeadshot)
822 {
823 duration = 0;
824 }
825
826 if (duration > DYING_PROGRESSION_TIME && !m_IsUnconscious)
827 {
829 m_DeathEffectTimer = new DeathEffectTimer();
830
832 m_DeathEffectTimer.Run(DYING_PROGRESSION_TIME, this, "SetDeathDarknessLevel", par, true);
833 }
834
835 ShowDeadScreen(state, duration);
836
842 }
843 else
844 {
846 ShowDeadScreen(state, 0);
847 }
848 }
849
850 void LockControls(bool state)
851 {
852 if (state == true)
853 {
857
858 if (GetGame().GetUIManager())
859 {
861 if (GetGame().GetUIManager().IsDialogVisible())
863 }
864 }
865 else
866 {
870
871 if (GetGame().GetUIManager())
872 {
873 if (GetGame().GetUIManager().GetMenu())
874 {
876 }
877 else
878 {
880 }
881 }
882 }
883 }
884
885 void SetDeathDarknessLevel(float duration, float tick_time);
886
888 {
891 HumanInputController hic = GetInputController();
892 if (hic)
894 }
895
897 {
900 }
901
903 {
905 }
906
908 {
909 DayZPlayerInventory inv = DayZPlayerInventory.Cast(GetInventory());
910 return inv;
911 }
912
914 {
915 int userDataType = 0;
916 if (!ctx.Read(userDataType))
917 {
918 Error("DayZPlayer: OnInputForRemote - cannot read input type");
919 return;
920 }
921
922 switch (userDataType)
923 {
925 GetDayZPlayerInventory().OnEventForRemoteWeapon(ctx);
926 break;
928 GetDayZPlayerInventory().OnHandEventForRemote(ctx);
929 break;
931 GetDayZPlayerInventory().OnInputUserDataForRemote(ctx);
932 break;
933 default:
934 Error("OnInputForRemote - unknown userDataType=" + userDataType);
935 break;
936 }
937 }
938
940 {
941 int userDataType = 0;
942 if (!ctx.Read(userDataType))
943 {
944 Error("DayZPlayer: OnInputFromServer - cannot read input type");
945 return;
946 }
947
948 switch (userDataType)
949 {
951 GetDayZPlayerInventory().OnServerInventoryCommand(ctx);
952 break;
953 default:
954 Error("OnInputFromServer - unknown userDataType=" + userDataType);
955 break;
956 }
957 }
958 void RequestSoundEvent(EPlayerSoundEventID id, bool from_server_and_client = false);
959 void RequestSoundEventEx(EPlayerSoundEventID id, bool from_server_and_client = false, int param = 0);
961 protected void SendSoundEventEx(EPlayerSoundEventID id, int param = 0);
962
963 override void OnItemInHandsChanged()
964 {
965 //Print("inv: DayZPlayerImplement::OnItemInHandsChanged: "/* + GetHumanInventory().GetEntityInHands()*/);
967 GetItemAccessor().OnItemInHandsChanged();
968
969 if (!IsAlive())
970 {
971 //Print("inv: DayZPlayerImplement::OnItemInHandsChanged - human not alive! calling ResetWeaponInHands");
972 GetItemAccessor().ResetWeaponInHands();
973 }
974
975 HumanInventoryWithFSM.Cast(GetHumanInventory()).CheckFSMState();
976 }
977
979
980 //-------------------------------------------------------------
984 void HandleWeapons(float pDt, Entity pInHands, HumanInputController pInputs, out bool pExitIronSights)
985 {
986 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
987 GetDayZPlayerInventory().HandleWeaponEvents(pDt, pExitIronSights);
988
989 Weapon_Base weapon;
990 Class.CastTo(weapon, pInHands);
991 ItemOptics optic = weapon.GetAttachedOptics();
992
995
996 GetMovementState(m_MovementState);
997
998 // obstruction
999 bool wantedLift = m_LiftWeapon_player;
1000 bool currentLift = hcw.IsWeaponLifted();
1001 if (wantedLift != currentLift)
1002 {
1003 hcw.LiftWeapon(wantedLift);
1004 // Reset the velocity, cause at this point we might need to start moving in the opposite direction rather rapidly,
1005 // to prevent the obstruction from smashing the player's head while lifting
1007 }
1008
1009 float wantedObstruction = m_ObstructWeapon_player;
1010 float currentObstruction = hcw.GetWeaponObstruction();
1011 if (wantedObstruction != currentObstruction)
1012 {
1013 // The following times are times chosen by observation; the following values produced
1014 // consistent and relatively nicely looking results and were OK'd by the animators.
1015 const float outTime = 0.150; // duration when smoothing hi -> lo
1016 const float inTime = 0.010; // duration when smoothing lo -> hi
1017 const float inTimeLift = 0.100; // duration when smoothing in during lift
1018
1019 float smoothTime;
1020 if (wantedLift) // When lifting always transition rather quickly
1021 {
1022 wantedObstruction = 0.0;
1023 smoothTime = inTimeLift;
1024 }
1025 else // Otherwise we can take our time based on the delta
1026 {
1027 float t = Math.Clamp(Math.AbsFloat(wantedObstruction-currentObstruction), 0, 1);
1028 smoothTime = Math.Lerp(outTime, inTime, t);
1029 }
1030
1031 // Do the interpolation and clamp to wanted value if the change is below certain threshold, to prevent uneccessary interpolation
1032 m_fObstructionSmooth = Math.SmoothCD(m_fObstructionSmooth, wantedObstruction, m_fObstructionSmoothVelocity, smoothTime, 6.0, pDt);
1033 if (Math.AbsFloat(m_fObstructionSmooth-wantedObstruction) < 0.0001)
1034 {
1035 m_fObstructionSmooth = wantedObstruction;
1036 }
1037
1038 #ifdef DIAG_DEVELOPER
1039 if (DiagMenu.GetValue(DiagMenuIDs.WEAPON_DISABLE_OBSTRUCTION_INTERPOLATION))
1040 m_fObstructionSmooth = wantedObstruction;
1041 #endif
1042
1044
1045 #ifndef SERVER
1046 #ifdef DIAG_DEVELOPER
1047 PluginDiagMenuClient.GetWeaponLiftDiag().Data().SetInterpolation( inTime, inTimeLift, outTime, smoothTime, m_fObstructionSmooth, currentObstruction, wantedObstruction );
1048 #endif
1049 #endif
1050 }
1051 // !obstruction
1052
1053 // hold breath
1054 if (pInputs.IsHoldBreath() && m_MovementState.IsRaised() && (IsInIronsights() || IsInOptics()))
1055 {
1056 m_IsTryingHoldBreath = true;
1057 }
1058 else
1059 {
1060 m_IsTryingHoldBreath = false;
1061 }
1062
1063 if (pInputs.IsFireModeChange())
1064 {
1065 GetWeaponManager().SetNextMuzzleMode();
1066 }
1067 if (pInputs.IsZeroingUp())
1068 {
1069 if (optic && (optic.IsInOptics() || optic.IsUsingWeaponIronsightsOverride()))
1070 {
1071 optic.StepZeroingUp();
1072 }
1073 else
1074 {
1075 weapon.StepZeroingUpAllMuzzles();
1076 }
1077 }
1078 if (pInputs.IsZeroingDown())
1079 {
1080 if (optic && (optic.IsInOptics() || optic.IsUsingWeaponIronsightsOverride()))
1081 {
1082 optic.StepZeroingDown();
1083 }
1084 else
1085 {
1086 weapon.StepZeroingDownAllMuzzles();
1087 }
1088 }
1089
1090 if (!m_LiftWeapon_player && (m_CameraIronsight || !weapon.CanEnterIronsights() || m_CameraOptics/*m_ForceHandleOptics*/)) // HACK straight to optics, if ironsights not allowed
1091 {
1092 if (optic)
1093 HandleOptic(optic, false, pInputs, pExitIronSights);
1094 }
1095
1096 if (!m_MovementState.IsRaised())
1097 {
1098 m_IsFireWeaponRaised = false; //legacy reasons
1099 if (weapon && weapon.IsInOptics())
1100 {
1101 weapon.ExitOptics();
1102 }
1103
1105
1106 return; // if not raised => return
1107 }
1108 else
1109 {
1110 m_IsFireWeaponRaised = true; //legacy reasons
1112 {
1113 m_WeaponRaiseTime += pDt;
1114 }
1115
1117 {
1119 }
1120 }
1121
1123 if (GetWeaponManager().CanFire(weapon))
1124 {
1125 bool autofire = weapon.GetCurrentModeAutoFire(weapon.GetCurrentMuzzle()) && weapon.IsChamberEjectable(weapon.GetCurrentMuzzle());
1126 int burst = weapon.GetCurrentModeBurstSize(weapon.GetCurrentMuzzle());
1127 int burst_count = weapon.GetBurstCount();
1128 if (!autofire && (burst < 2 || burst_count < 1))
1129 {
1130 if (pInputs.IsAttackButtonDown() && GetInputInterface().SyncedValue("UAWeaponMeleeAttack") == 0 && GetInputInterface().SyncedValue("UAHeavyMeleeAttack") == 0)
1131 {
1132 GetWeaponManager().Fire(weapon);
1133 }
1134 }
1135 else if (autofire || burst > 1)
1136 {
1137#ifdef DIAG_DEVELOPER
1138 int burst_option = GetWeaponManager().GetBurstOption();
1139 if (burst_option == 0)
1140 {
1141#endif
1142 if (pInputs.IsAttackButton() && GetInputInterface().SyncedValue("UAWeaponMeleeAttack") == 0 && GetInputInterface().SyncedValue("UAHeavyMeleeAttack") == 0)
1143 {
1144 if (autofire || burst_count < burst)
1145 {
1146 GetWeaponManager().Fire(weapon);
1147 }
1148 }
1149 else
1150 {
1151 weapon.ResetBurstCount();
1152 }
1153#ifdef DIAG_DEVELOPER
1154 }
1155 else if (burst_option == 1)
1156 {
1157 if (burst > 1 && burst_count == burst)
1158 {
1159 weapon.ResetBurstCount();
1160 }
1161 else if (burst > 1 && burst_count < burst)
1162 {
1163 GetWeaponManager().Fire(weapon);
1164 }
1165 else
1166 {
1167 //Autofire
1168 if (pInputs.IsAttackButton())
1169 {
1170 GetWeaponManager().Fire(weapon);
1171 }
1172 }
1173 }
1174#endif
1175 }
1176 }
1177
1178 #ifdef PLATFORM_CONSOLE
1179 if (GetGame().GetInput().LocalRelease("UAFire", false) || m_ShouldReload)
1180 {
1181 if (!weapon.IsWaitingForActionFinish() && !IsFighting())
1182 {
1183 int muzzle_index = weapon.GetCurrentMuzzle();
1184
1185 if (weapon.IsChamberFiredOut(muzzle_index))
1186 {
1187 if (weapon.CanProcessWeaponEvents())
1188 {
1189 if (GetWeaponManager().CanEjectBullet(weapon))
1190 {
1191 GetWeaponManager().EjectBullet();
1192 pExitIronSights = true;
1193 m_ShouldReload = false;
1194 }
1195 }
1196 }
1197 }
1198 else
1199 {
1200 m_ShouldReload = true;
1201 }
1202 }
1203 #endif
1204 }
1205
1206 void HandleOptic(notnull ItemOptics optic, bool inHands, HumanInputController pInputs, out bool pExitOptics)
1207 {
1208 UAInterface input = GetInputInterface();
1209 if (!input)
1210 {
1211 return;
1212 }
1213
1214 Weapon_Base weapon;
1215 int FOVcount;
1216 bool controllerPressIn;
1217 bool controllerPressOut;
1218
1219 if (input.SyncedPress_ID(UAZoomInOptics))
1220 {
1221 weapon = Weapon_Base.Cast(optic.GetHierarchyParent());
1222 FOVcount = optic.GetStepFOVCount();
1223 controllerPressIn = input.SyncedPress_ID(UAZoomInOpticsControllerHelper);
1224
1225 if (weapon && m_CameraIronsight && !m_CameraOptics)
1226 {
1227 SetIronsights(false);
1228 SwitchOptics(optic,true);
1229 optic.SetStepFOVIndex(0);
1230 }
1231 else if (m_CameraOptics)
1232 {
1233 if (controllerPressIn) //controller
1234 {
1235 if (!optic.StepFOVUp())
1236 {
1237 if (FOVcount > 0)
1238 {
1239 optic.SetStepFOVIndex(0); //loop to minimum magnification
1240 }
1241
1242 if (weapon && weapon.CanEnterIronsights()) //loop into ironsights
1243 {
1244 SwitchOptics(optic,false);
1245 SetIronsights(true);
1246 }
1247 }
1248 }
1249 else //m&k
1250 {
1251 optic.StepFOVUp();
1252 }
1253 }
1254 }
1255
1256 if (input.SyncedPress_ID(UAZoomOutOptics))
1257 {
1258 weapon = Weapon_Base.Cast(optic.GetHierarchyParent());
1259 FOVcount = optic.GetStepFOVCount();
1260 controllerPressOut = input.SyncedPress_ID(UAZoomOutOpticsControllerHelper);
1261 if (m_CameraOptics)
1262 {
1263 if (!optic.StepFOVDown())
1264 {
1265 if (controllerPressOut)
1266 {
1267 if (FOVcount > 0 && (!weapon || !weapon.CanEnterIronsights()))
1268 {
1269 optic.SetStepFOVIndex(FOVcount - 1); //loop to maximum magnification
1270 }
1271 }
1272
1273 if (weapon && weapon.CanEnterIronsights())
1274 {
1275 SwitchOptics(optic,false);
1276 SetIronsights(true);
1277 }
1278 }
1279 }
1280 else if (controllerPressOut && weapon && m_CameraIronsight)
1281 {
1282 SwitchOptics(optic,true);
1283 if (FOVcount > 0)
1284 {
1285 optic.SetStepFOVIndex(FOVcount - 1); //loop to maximum magnification
1286 }
1287 }
1288 }
1289 }
1290
1291 //-------------------------------------------------------------
1295
1298 float m_DamageHitDir = 0.0;
1299 float m_DamageHealth = 0.0;
1300
1301 const float HIT_INTERVAL_MIN = 0.3; // Minimum time in seconds before a COMMANDID_HIT to COMMANDID_HIT transition is allowed
1303
1305 {
1306 return (m_DamageHitFullbody && m_DamageHitAnimType != -1) || GetCommand_Damage() != null;
1307 }
1308
1310 void EvaluateDamageHit(int pCurrentCommandID)
1311 {
1314
1315 if (!m_SyncedHitDataArray || m_SyncedHitDataArray.Count() == 0)
1316 {
1317 return;
1318 }
1319
1320 //evaluate all hit data
1321 SyncHitInfo data;
1322 SyncHitInfo greatest_hit;
1323 for (int i = 0; i < m_SyncedHitDataArray.Count(); i++)
1324 {
1325 data = m_SyncedHitDataArray[i];
1326 m_DamageHitDir = data.m_HitDir;
1327
1328 //client-side effects
1329 #ifndef SERVER
1330 if (IsAlive() && !IsUnconscious() && data.m_HasSource && GetGame().GetMission().GetHud() && GetGame().GetPlayer() == this) //only for controlled players
1331 {
1332 m_DamageHealth = data.m_HealthDamage;
1333 if (m_DamageHealth > 0.0)
1334 {
1335 float rel = m_DamageHealth / (GetMaxHealth("","Health") * PlayerConstants.HEAVY_HIT_THRESHOLD);
1337 }
1338 }
1339 #endif
1340
1341 if (!greatest_hit)
1342 {
1343 greatest_hit = data;
1344 }
1345 //else if (data.m_HealthDamage > greatest_hit.m_HealthDamage || (data.m_Fullbody && !greatest_hit.m_Fullbody)) //TODO - revisit cumulative calculation for animation evaluation purposes (stagger on shotgun to the chest)
1346 else if (data.m_Fullbody) //temporary solution; last fullbody hit is used for animation purposes, some light hit otherwise
1347 {
1348 greatest_hit = data;
1349 }
1350 }
1351
1352 m_SyncedHitDataArray.Clear();
1353 m_DamageHealth = 0.0;
1354
1356 if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_PRONE || m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE || IsUnconscious())
1357 {
1358 return;
1359 }
1360
1361 //general effects
1362 m_DamageHitFullbody = greatest_hit.m_Fullbody;
1363 m_DamageHitAnimType = greatest_hit.m_AnimType;
1364 m_DamageHitDir = greatest_hit.m_HitDir;
1365 }
1366
1367 bool HandleDamageHit(int pCurrentCommandID)
1368 {
1369 // Update elapsed time since hit first
1370 if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_DAMAGE )
1371 {
1372 // Throttle heavy hit command up to a fixed rate
1374 {
1376 ResetDamageHitState(false);
1377 return false;
1378 }
1379 }
1380
1381 // If transportcache is not null, player is unconscious inside of a car and should not head into a damage command
1382 if (m_DamageHitAnimType != -1 && m_TransportCache == null && !CommitedSuicide())
1383 {
1384 HumanCommandVehicle vehCommand = GetCommand_Vehicle();
1385 if (m_DamageHitFullbody && (!vehCommand || vehCommand.IsGettingIn() || vehCommand.IsGettingOut()))
1386 {
1387 StartCommand_Damage(m_DamageHitAnimType, m_DamageHitDir);
1388 ResetDamageHitState(true);
1389 return true;
1390 }
1391 else
1392 {
1393 AddCommandModifier_Damage(m_DamageHitAnimType, m_DamageHitDir);
1394 ResetDamageHitState(false);
1395 return false;
1396 }
1397 }
1398
1399 return pCurrentCommandID == DayZPlayerConstants.COMMANDID_DAMAGE;
1400 }
1401
1402 void ResetDamageHitState(bool resetTimer)
1403 {
1405 m_DamageHitFullbody = false;
1406
1407 if (resetTimer)
1408 {
1409 m_HitElapsedTime = 0;
1410 }
1411 }
1412
1414 bool EvaluateDeathAnimation(int pDamageType, EntityAI pSource, string pAmmoType, out int pAnimType, out float pAnimHitDir)
1415 {
1416 bool doPhxImpulse = GetGame().ConfigGetInt("cfgAmmo " + pAmmoType + " doPhxImpulse") > 0;
1417
1418 pAnimType = DayZPlayerConstants.DEATH_DEFAULT;
1419 if (doPhxImpulse)
1420 pAnimType = DayZPlayerConstants.DEATH_FAST;
1421
1423 vector targetDirection = GetDirection();
1424 vector toSourceDirection = (pSource.GetPosition() - GetPosition());
1425
1426 targetDirection[1] = 0;
1427 toSourceDirection[1] = 0;
1428
1429 targetDirection.Normalize();
1430 toSourceDirection.Normalize();
1431
1432 float cosFi = vector.Dot(targetDirection, toSourceDirection);
1433 vector cross = targetDirection * toSourceDirection;
1434
1435 pAnimHitDir = Math.Acos(cosFi) * Math.RAD2DEG;
1436 if (cross[1] < 0)
1437 pAnimHitDir = -pAnimHitDir;
1438
1439 return true;
1440 }
1441
1443 bool EvaluateDamageHitAnimation(TotalDamageResult pDamageResult, int pDamageType, EntityAI pSource, string pComponent, string pAmmoType, vector pModelPos, out int pAnimType, out float pAnimHitDir, out bool pAnimHitFullbody)
1444 {
1445 int invertHitDir = 0; //Used to flip the heavy hit animation direction
1446
1447 pAnimType = 0;
1448 pAnimHitFullbody = false; // additive anm
1449 GetMovementState(m_MovementState);
1450
1451 switch (pDamageType)
1452 {
1453 case DamageType.CLOSE_COMBAT:
1455 if (pSource.IsInherited(DayZInfected))
1456 break;
1457
1458 pAnimType = GetGame().ConfigGetInt("cfgAmmo " + pAmmoType + " hitAnimation");
1459 invertHitDir = GetGame().ConfigGetInt("cfgAmmo " + pAmmoType + " invertHitDir");
1460 if (!IsUnconscious() && pAnimType == 1 && !m_MeleeFightLogic.IsInBlock())
1461 pAnimHitFullbody = true;
1462 break;
1463
1464 case DamageType.FIRE_ARM:
1465 int impactBehaviour = 0;
1466
1467 if (!IsUnconscious() && GetHealth("", "Shock") > 25)
1468 {
1470 if (pComponent == "Torso" || pComponent == "Head")
1471 {
1472 impactBehaviour = GetGame().ConfigGetInt("cfgAmmo " + pAmmoType + " impactBehaviour");
1473 float fireDamage = pDamageResult.GetHighestDamage("Health");
1474 float shockDamage = pDamageResult.GetHighestDamage("Shock");
1475 if ((fireDamage > 80.0 || shockDamage > 40.0) && impactBehaviour == 1)
1476 pAnimHitFullbody = true;
1477 }
1478 }
1479
1480 break;
1481
1482 case DamageType.EXPLOSION:
1483 break;
1484
1485 case DamageType.CUSTOM:
1486 pAnimType = GetGame().ConfigGetInt("cfgAmmo " + pAmmoType + " hitAnimation");
1487 if (pAnimType == 1)
1488 pAnimHitFullbody = true;
1489 else if (pAmmoType != "HeatDamage" || IsSwimming() || IsInVehicle())
1490 return false;
1491
1492 break;
1493 }
1494
1496 vector targetDirection = GetDirection();
1497 vector toSourceDirection = (pSource.GetPosition() - GetPosition());
1498
1499 targetDirection[1] = 0;
1500 toSourceDirection[1] = 0;
1501
1502 targetDirection.Normalize();
1503 toSourceDirection.Normalize();
1504
1505 float cosFi = vector.Dot(targetDirection, toSourceDirection);
1506 vector cross = targetDirection * toSourceDirection;
1507
1508 pAnimHitDir = Math.Acos(cosFi) * Math.RAD2DEG;
1509
1510 // We will invert direction of the hit
1511 if (invertHitDir > 0)
1512 pAnimHitDir -= 180;
1513
1514 if (cross[1] < 0)
1515 pAnimHitDir = -pAnimHitDir;
1516
1517 return true;
1518 }
1519
1521 override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
1522 {
1523 super.EEHitBy(damageResult, damageType, source, component, dmgZone, ammo, modelPos, speedCoef);
1524
1525 m_TransportHitRegistered = false;
1526
1527 if (!IsAlive())
1528 {
1529 int animTypeDeath;
1530 float animHitDirDeath;
1531 if (EvaluateDeathAnimation(damageType, source, ammo, animTypeDeath, animHitDirDeath))
1532 {
1533 SendDeathJuncture(animTypeDeath, animHitDirDeath);
1534 }
1535
1536 if (!m_DeathSyncSent) //checked until the death is evaluated by 'OnCommandHandlerTick' higher up the road
1537 {
1538 Man killer = source.GetHierarchyRootPlayer();
1539
1540 if (!m_KillerData) //only one player is considered killer in the event of crossfire
1541 {
1542 m_KillerData = new KillerData();
1543 m_KillerData.m_Killer = killer;
1544 m_KillerData.m_MurderWeapon = source;
1545 }
1546
1547 if (killer && killer.IsPlayer())
1548 {
1549 // was player killed by headshot?
1550 if (dmgZone == "Brain")
1551 {
1552 m_KilledByHeadshot = true;
1553 if (m_KillerData.m_Killer == killer)
1554 m_KillerData.m_KillerHiTheBrain = true;
1555 }
1556 }
1557 }
1558 }
1559 else
1560 {
1561 int animType;
1562 float animHitDir;
1563 bool animHitFullbody;
1564 if (EvaluateDamageHitAnimation(damageResult, damageType, source, dmgZone, ammo, modelPos, animType, animHitDir, animHitFullbody))
1565 DayZPlayerSyncJunctures.SendDamageHitEx(this, animType, animHitDir, animHitFullbody, damageResult, damageType, source, dmgZone, ammo, modelPos);
1566 else
1567 {
1568 bool skipSoundRequest = false;
1569 if (damageType == DamageType.CUSTOM && GetCommand_Fall())
1570 skipSoundRequest = GetFallDamage().GetLandType() < HumanCommandFall.LANDTYPE_MEDIUM;
1571
1572 if (!skipSoundRequest)
1573 RequestSoundEvent(EPlayerSoundEventID.TAKING_DMG_LIGHT);
1574 }
1575 }
1576
1577 // interupt melee for non-blocked hit or heavy hit
1578 if (animHitFullbody)
1579 {
1580 HumanCommandMelee2 hcm = GetCommand_Melee2();
1581 if (hcm)
1582 hcm.Cancel();
1583 }
1584 }
1585
1586 //-------------------------------------------------------------
1591
1593 override bool HeadingModel(float pDt, SDayZPlayerHeadingModel pModel)
1594 {
1595 if (!IsAlive())
1596 {
1597 return false;
1598 }
1599
1600 GetMovementState(m_MovementState);
1601
1603 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_LADDER)
1604 {
1606 return false;
1607 }
1608 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_VEHICLE)
1609 {
1610 HumanCommandVehicle hmv = GetCommand_Vehicle();
1611 if (hmv.IsGettingOut() || hmv.IsGettingIn())
1612 {
1614 }
1615
1617 return false;
1618 }
1619 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
1620 {
1621 HumanCommandUnconscious hcu = GetCommand_Unconscious();
1622 if (!hcu.IsWakingUp())
1623 {
1625 //pModel.m_iCamMode = DayZPlayerConstants.CAMERAMODE_HEAD;
1626 return false;
1627 }
1628 }
1629
1630 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_CLIMB)
1631 {
1633 return false;
1634 }
1635
1636#ifdef DEVELOPER
1637 int actMenuValue = DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_TURNSLIDE);
1638 if (actMenuValue != 0)
1639 {
1642 }
1643#endif
1644
1645 if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
1646 {
1648 return false;
1649 }
1650
1652 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_MOVE)
1653 {
1654 HumanCommandMove hcm = GetCommand_Move();
1655 if (hcm.IsStandingFromBack())
1656 {
1658 return false;
1659 }
1660 }
1661
1662 HumanItemAccessor hia = GetItemAccessor();
1663 HumanItemBehaviorCfg hibcfg = hia.GetItemInHandsBehaviourCfg();
1664 if (hibcfg && hibcfg.m_StanceRotation[m_MovementState.m_iStanceIdx] == DayZPlayerConstants.ROTATION_DISABLE)
1665 {
1667 }
1668 if (IsUnconscious() || (GetCommand_Move() && GetCommand_Move().IsLeavingUncon()))
1669 {
1671 }
1672
1674 }
1675
1676
1677 //-------------------------------------------------------------
1681 override bool AimingModel(float pDt, SDayZPlayerAimingModel pModel)
1682 {
1683 GetMovementState(m_MovementState);
1684 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_MELEE2)
1685 {
1686 HumanCommandMelee2 hcm = GetCommand_Melee2();
1687 if (hcm.IsFinisher())
1688 {
1690 {
1691 m_AimingModel.OnFinisherBegin(pModel.m_fCurrentAimY);
1693 }
1694 m_AimingModel.ProcessStealthFilters(pDt, pModel);
1695 }
1696
1697 return true;
1698 }
1699
1700 if (m_MovementState.IsRaised())
1701 {
1702 if (!m_RaiseStarted)
1703 {
1704 m_AimingModel.OnRaiseBegin(this);
1705 m_RaiseStarted = true;
1706 }
1707 m_AimingModel.ProcessAimFilters(pDt, pModel, m_MovementState.m_iStanceIdx);
1708
1709 return true;
1710 }
1711
1712 m_RaiseStarted = false;
1714
1715 return true;
1716 }
1717
1718 //-------------------------------------------------------------
1722
1724 bool ProcessJumpOrClimb(float pDt, int pCurrentCommandID)
1725 {
1726 HumanInputController hic = GetInputController();
1727 if (!hic || !hic.IsJumpClimb())
1728 {
1729 return false;
1730 }
1731
1732 m_JumpClimb.JumpOrClimb();
1733
1734 if (!m_JumpClimb.WasSuccessful())
1735 {
1736 return false;
1737 }
1738
1739 return true;
1740 }
1741
1743 bool CanJump()
1744 {
1745 if (IsFBSymptomPlaying() || IsRestrained() || IsUnconscious() || IsInFBEmoteState())
1746 return false;
1747
1748 if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_PRONE || m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
1749 return false;
1750
1751 if (IsRaised() && GetInputInterface().SyncedPress("UAGetOverControllerHelper")) //no raised jump on cotroller
1752 {
1753 return false;
1754 }
1755
1756 HumanItemBehaviorCfg hibcfg = GetItemAccessor().GetItemInHandsBehaviourCfg();
1757 if (!hibcfg.m_bJumpAllowed)
1758 return false;
1759
1760 if (!DayZPlayerUtils.PlayerCanChangeStance(this, DayZPlayerConstants.STANCEIDX_ERECT) || !DayZPlayerUtils.PlayerCanChangeStance(this, DayZPlayerConstants.STANCEIDX_RAISEDERECT))
1761 return false;
1762
1763 HumanCommandMove hcm = GetCommand_Move();
1764 if (hcm)
1765 {
1766 if (hcm.IsChangingStance())
1767 return false;
1768 }
1769
1770 HumanCommandSwim hcs = GetCommand_Swim();
1771 if (hcs)
1772 {
1773 return false;
1774 }
1775
1776 return true;
1777 }
1778
1779 bool CanClimb(int climbType, SHumanCommandClimbResult climbRes)
1780 {
1781 if (IsFBSymptomPlaying() || IsRestrained() || IsUnconscious() || IsInFBEmoteState())
1782 return false;
1783
1784 if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_PRONE || m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
1785 return false;
1786
1787 if (IsRaised() && GetInputInterface().SyncedPress("UAGetOverControllerHelper")) //no raised climb on cotroller
1788 {
1789 return false;
1790 }
1791
1792 HumanItemBehaviorCfg hibcfg = GetItemAccessor().GetItemInHandsBehaviourCfg();
1793 if (!hibcfg.m_bJumpAllowed)
1794 return false;
1795
1796 if (climbRes)
1797 {
1798 EntityAI entity;
1799 if (Class.CastTo(entity,climbRes.m_GrabPointParent) && entity.IsHologram())
1800 return false;
1801 if (Class.CastTo(entity,climbRes.m_ClimbStandPointParent) && entity.IsHologram())
1802 return false;
1803 if (Class.CastTo(entity,climbRes.m_ClimbOverStandPointParent) && entity.IsHologram())
1804 return false;
1805 }
1806
1807 return true;
1808 }
1809
1810
1812 {
1813 }
1814
1815 void OnJumpEnd(int pLandType = 0)
1816 {
1817 }
1818
1820 {
1821 GetDayZPlayerInventory().CancelHandEvent();
1822 }
1823
1825 {
1826 GetDayZPlayerInventory().CancelWeaponEvent();
1827 }
1828
1830 {
1831 GetDayZPlayerInventory().AbortWeaponEvent();
1832 }
1833
1834 //-------------------------------------------------------------
1839 {
1840 if (!IsAlive())
1841 {
1843 {
1844 ExitSights();
1845 }
1846 return;
1847 }
1848
1849 bool bADSToggle = false;
1850 bool exitSights = false;
1851 HumanInputController hic = GetInputController();
1852 HumanItemAccessor hia = GetItemAccessor();
1853 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
1854 PlayerBase playerPB = PlayerBase.Cast(this);
1855 GetMovementState(m_MovementState);
1856
1857 if (playerPB.IsRolling())
1858 {
1859 exitSights = true;
1860 }
1861
1862 if (m_ResetADS || (!hia.IsItemInHandsWeapon() && hic.WeaponADS()))
1863 {
1864 hic.ResetADS();
1865 m_ResetADS = false;
1866 }
1867
1868 if (!m_MovementState.IsRaised() || m_LiftWeapon_player)
1869 {
1871 exitSights = true;
1872 }
1873 else
1874 {
1875 if (m_bADS != hic.WeaponADS())
1876 {
1877 m_bADS = hic.WeaponADS();
1878 bADSToggle = true;
1879 }
1880
1882 {
1885 {
1886 bADSToggle = false;
1887 exitSights = true;
1888 }
1889 else
1890 {
1891 bADSToggle = true;
1892 }
1893 }
1894 }
1895
1896 if (bADSToggle && !GetCommand_Melee2() && !GetThrowing().IsThrowingModeEnabled())
1897 {
1898 if (hia.IsItemInHandsWeapon() && playerPB.GetItemInHands() && playerPB.GetItemInHands().IsWeapon() && playerPB.GetWeaponManager() && !playerPB.GetWeaponManager().IsRunning())
1899 {
1900 Weapon_Base weapon = Weapon_Base.Cast(GetHumanInventory().GetEntityInHands());
1901 ItemOptics optic = weapon.GetAttachedOptics();
1902 bool switchToADS = false;
1903 bool canUseIronsights = weapon.CanEnterIronsights();
1904 bool canUseOptics = optic != NULL;
1905
1906 if (canUseIronsights || canUseOptics)
1907 switchToADS = m_bADS;
1908
1909 // go to ironsights - disable ironsights when
1912 if (!m_MovementState.IsRaised() || m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
1913 {
1914 switchToADS = false;
1915 }
1916
1917 // fixes camera switching during item transitions
1919 {
1920 exitSights = true;
1921 }
1922 else if (switchToADS) // enter ironsights or optics
1923 {
1924 // filter by usability
1925 if (weapon.GetWasIronSight() && !canUseIronsights)
1926 {
1927 weapon.SetWasIronSight(false);
1928 }
1929 else if (!weapon.GetWasIronSight() && !canUseOptics)
1930 {
1931 weapon.SetWasIronSight(true);
1932 }
1933
1934 if (weapon.GetWasIronSight())
1935 {
1936 SwitchOptics(optic,false);
1937 SetIronsights(true);
1938 }
1939 else if (!weapon.GetWasIronSight() || (!canUseIronsights && canUseOptics))
1940 {
1941 SetIronsights(false);
1942 SwitchOptics(optic,true);
1943 }
1944 else
1945 {
1946 exitSights = true;
1947 }
1948
1949 if (hcw && (m_CameraOptics/* || m_CameraIronsight*/))
1950 {
1951 hcw.SetADS(true);
1952 }
1953 }
1954 else
1955 {
1956 exitSights = true;
1957 }
1958 }
1959 }
1960
1961 // leave ironsight and/ or optics
1962 if (exitSights && !IsHandheldOpticsInUse() && (m_CameraIronsight || m_CameraOptics) || GetCommand_Melee2())
1963 {
1964 ExitSights();
1965 }
1966 }
1967
1969 {
1970 if (!IsAlive())
1971 {
1973 {
1974 ExitSights();
1975 }
1976 return;
1977 }
1978
1979 HumanInputController hic = GetInputController();
1980
1981 bool camChange = hic.CameraViewChanged();
1982
1983 if (IsRaised())
1984 {
1985 if (m_IsWeapon)
1986 {
1987 camChange = false;
1988 }
1989 }
1990
1992 if (GetGame().GetWorld().Is3rdPersonDisabled())
1993 {
1994 m_Camera3rdPerson = false;
1995 }
1996 else if (camChange)
1997 {
1999 }
2000
2001 // exits optics completely, comment to return to ADS
2003 ExitSights();
2004
2005 if (IsPlayerInStance(DayZPlayerConstants.STANCEMASK_RAISEDPRONE) && (m_CameraOptics || m_CameraIronsight))
2006 {
2007 SetVerticalMinimumAimLimit(DayZPlayerCameraIronsights.CONST_UD_MIN_BACK);
2009 }
2011 {
2012 SetVerticalMinimumAimLimit(DayZPlayerCameraIronsights.CONST_UD_MIN);
2014 }
2015
2016 if (hic.IsZoomToggle() && !m_MovementState.IsRaised())
2017 {
2019 if ((IsClimbingLadder() && Math.AbsInt(m_MovementState.m_iMovement) == 2) || (IsSwimming() && m_MovementState.m_iMovement == 3))
2020 {
2022 }
2023 else if (!IsClimbingLadder() && !IsSwimming() && !IsInVehicle())
2024 {
2025 float pSpeed;
2026 vector pLocalDirection;
2027 hic.GetMovement(pSpeed ,pLocalDirection);
2028
2029 if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_ERECT && pSpeed == 3)
2030 {
2032 }
2033 }
2034 }
2035 else
2036 {
2038 }
2039
2040 if (m_MovementState.IsRaisedInProne())
2041 {
2042 float headingAngle = MiscGameplayFunctions.GetHeadingAngle(this);
2043 float headingAngleDiffBlock = Math.AbsFloat(m_LastHeadingAngleBlock - headingAngle);
2044 float headingAngleDiffBlock2 = Math.AbsFloat(m_LastHeadingAngleBlock2 - headingAngle);
2045 float headingAngleDiff = 0.0;
2046
2047 if (m_LastHeadingAngle * headingAngle < 0.0)
2048 {
2049 headingAngleDiff = Math.AbsFloat(m_LastHeadingAngle + headingAngle);
2050 }
2051 else
2052 {
2053 headingAngleDiff = Math.AbsFloat(m_LastHeadingAngle - headingAngle);
2054 }
2055
2056 if (headingAngleDiff > 0.2)
2057 {
2058 int time = GetGame().GetTime();
2059
2060 float timefilterconstant = 400 - (headingAngleDiff * 100);
2061
2062 if (headingAngleDiffBlock > 0.8 && time - m_LastBackSoundTime > timefilterconstant)
2063 {
2064 float volume = headingAngleDiff / 0.5;
2065 if (volume > 1)
2066 {
2067 volume = 1;
2068 }
2069 if (volume < 0.25)
2070 {
2071 volume = 0.25;
2072 }
2073
2074 m_SoundOffset = headingAngleDiff / 2;
2075 if (m_SoundOffset > 0.25)
2076 {
2077 m_SoundOffset = 0.25;
2078 }
2079
2080 string soundSetName = "Cloth_Body_longmove_TShirt_Soundset";
2081
2082 string bodyClothName = "";
2083 EntityAI attachment = GetInventory().FindAttachment(InventorySlots.BODY);
2084 if (attachment)
2085 {
2086 bodyClothName = attachment.GetAttachmentSoundType();
2087 }
2088
2089 if (bodyClothName != "")
2090 {
2091 string path = "CfgSoundTables CfgAttachmentSoundTables Cloth_Body_Longmove_LookupTable";
2092 int soundCount = GetGame().ConfigGetChildrenCount(path);
2093
2094 for (int i = 0; i < soundCount; i++)
2095 {
2096 string name = "";
2098
2099 if (name == bodyClothName)
2100 {
2101 TStringArray stringArray = new TStringArray();
2102 GetGame().ConfigGetTextArray(path + " " + name + " soundSets", stringArray);
2103 soundSetName = stringArray.Get(0);
2104
2105 delete stringArray;
2106 }
2107 }
2108 }
2109
2110 SoundParams soundParams = new SoundParams(soundSetName);
2111 SoundObjectBuilder soundObjectBuilder = new SoundObjectBuilder(soundParams);
2112
2113 if (soundObjectBuilder != NULL)
2114 {
2115 SoundObject soundObject = soundObjectBuilder.BuildSoundObject();
2116
2117 if (soundObject != NULL)
2118 {
2119 soundObject.SetPosition(GetPosition());
2120
2121 AbstractWave wave = GetGame().GetSoundScene().Play3D(soundObject, soundObjectBuilder);
2122 wave.SetStartOffset(m_SoundOffset);
2123 wave.SetVolumeRelative(volume);
2124
2126 m_LastHeadingAngleBlock = headingAngle;
2127 }
2128 }
2129 }
2130
2131 if (headingAngleDiffBlock2 > 1.5 && time - m_LastBackSoundTime2 > (timefilterconstant * 2))
2132 {
2133 float volume2 = headingAngleDiff * 2;
2134 if (volume2 > 1)
2135 {
2136 volume2 = 1;
2137 }
2138
2139 m_SoundOffset = headingAngleDiff / 1.8;
2140 if (m_SoundOffset < 0.1)
2141 {
2142 m_SoundOffset = 0.1;
2143 }
2144 if (m_SoundOffset > 0.3)
2145 {
2146 m_SoundOffset = 0.3;
2147 }
2148
2149 string soundSetName2 = "walkProne_noHS_asphalt_ext_Char_SoundSet";
2150 string surfaceType = GetSurfaceType();
2151
2152 if (surfaceType != "")
2153 {
2154 string movementSurfaceType = "walkProne_" + surfaceType;
2155
2156 string path2 = "CfgSoundTables CfgStepSoundTables walkProne_noHS_Char_LookupTable";
2157 int soundCount2 = GetGame().ConfigGetChildrenCount(path2);
2158
2159 for (int i2 = 0; i2 < soundCount2; i2++)
2160 {
2161 string name2 = "";
2162 GetGame().ConfigGetChildName(path2, i2, name2);
2163
2164 if (name2 == movementSurfaceType)
2165 {
2166 TStringArray stringArray2 = new TStringArray();
2167 GetGame().ConfigGetTextArray(path2 + " " + name2 + " soundSets", stringArray2);
2168 soundSetName2 = stringArray2.Get(0);
2169
2170 delete stringArray2;
2171 }
2172 }
2173 }
2174
2175 SoundParams soundParams2 = new SoundParams(soundSetName2);
2176 SoundObjectBuilder soundObjectBuilder2 = new SoundObjectBuilder(soundParams2);
2177
2178 if (soundObjectBuilder2 != NULL)
2179 {
2180 SoundObject soundObject2 = soundObjectBuilder2.BuildSoundObject();
2181
2182 if (soundObject2 != NULL)
2183 {
2184 soundObject2.SetPosition(GetPosition());
2185
2186 AbstractWave wave2 = GetGame().GetSoundScene().Play3D(soundObject2, soundObjectBuilder2);
2187 wave2.SetStartOffset(m_SoundOffset);
2188 wave2.SetVolumeRelative(volume2);
2189
2191 m_LastHeadingAngleBlock2 = headingAngle;
2192 }
2193 }
2194 }
2195
2196 m_LastHeadingAngle = headingAngle;
2197 }
2198 }
2199 }
2200
2207
2208
2209 //-------------------------------------------------------------
2213 // these functions are for modded overide in script command mods
2214
2215 bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
2216 {
2217 return false;
2218 }
2219
2220 bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
2221 {
2222 return false;
2223 }
2224
2225 bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
2226 {
2227 return false;
2228 }
2229
2230 //-------------------------------------------------------------
2234
2235
2237 override void CommandHandler(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
2238 {
2239 m_dT = pDt;
2240
2241 vector playerPosition = PhysicsGetPositionWS();
2242
2243 GetDayZPlayerInventory().HandleInventory(pDt);
2244 GetHumanInventory().Update(pDt);
2245
2246 if (ModCommandHandlerBefore(pDt, pCurrentCommandID, pCurrentCommandFinished))
2247 {
2248 return;
2249 }
2250
2251 HumanInputController hic = GetInputController();
2252 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
2253 GetMovementState(m_MovementState);
2254
2255 bool isRaisedNow = m_MovementState.IsRaised();
2256 bool isWeapon = entityInHands && entityInHands.IsInherited(Weapon);
2257
2258 bool updateAimingMdfr = false;
2259 if (isWeapon != m_IsWeapon)
2260 {
2261 m_IsWeapon = isWeapon;
2262 updateAimingMdfr = true;
2263 }
2264
2265 if (isRaisedNow != m_IsRaised)
2266 {
2267 updateAimingMdfr = true;
2268 m_IsRaised = m_MovementState.IsRaised();
2269 }
2270
2271 if (updateAimingMdfr)
2272 {
2273 if (isRaisedNow && isWeapon)
2274 GetUApi().ActivateModificator("aiming");
2275 else
2276 GetUApi().DeactivateModificator("aiming");
2277 }
2278
2279 // handle ADS ironsights/optics transition logic
2280 HandleADS();
2281
2282 // handle weapons
2283 if (hic)
2284 {
2285 ItemOptics opticInHands = ItemOptics.Cast(entityInHands);
2286 if (isWeapon && (!m_ProcessFirearmMeleeHit || !m_ContinueFirearmMelee))
2287 {
2289 bool exitIronSights = false;
2290 HandleWeapons(pDt, entityInHands, hic, exitIronSights);
2291 }
2292 else if (IsHandheldOpticsInUse() && m_CameraOptics && opticInHands)
2293 {
2294 bool exitOptic = false;
2295 HandleOptic(opticInHands, true, hic, exitOptic);
2296 }
2297 }
2298
2300 HandleView();
2301
2302 if (m_MovementState.m_iMovement != m_MovementState.m_LocalMovement)
2303 {
2305 m_MovementState.m_LocalMovement = m_MovementState.m_iMovement;
2306 }
2307
2309 if (HandleDeath(pCurrentCommandID))
2310 {
2311 return;
2312 }
2313
2316 if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE )
2317 {
2318 HumanCommandVehicle cmdVehicle = GetCommand_Vehicle();
2319 if ( cmdVehicle && cmdVehicle.IsGettingOut() )
2320 {
2321 vector waterLevel;
2322 if ( m_Swimming.CheckSwimmingStart( waterLevel ) )
2323 {
2324 // not all the events may have been called as getting out could have occurred while under water
2325 cmdVehicle.ProcessLeaveEvents();
2326
2327 StartCommand_Swim();
2328 return;
2329 }
2330 }
2331 }
2332
2334 if (pCurrentCommandFinished)
2335 {
2336 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
2337 {
2338 if ((m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE) && (m_TransportCache != null))
2339 {
2340 int crew_index = m_TransportCache.CrewMemberIndex(this);
2341 int seat = m_TransportCache.GetSeatAnimationType(crew_index);
2342 StartCommand_Vehicle(m_TransportCache, crew_index, seat, true);
2343 m_TransportCache = null;
2344 return;
2345 }
2346 }
2347 // start moving
2348
2349 // start falling ? (could happen after climbing)
2350 if (PhysicsIsFalling(true))
2351 {
2352 StartCommand_Fall(0);
2353 SetFallYDiff(playerPosition[1]);
2354 return;
2355 }
2356
2358 if (m_Swimming.m_bWasSwimming)
2359 {
2360 StartCommand_Swim();
2361 return;
2362 }
2363
2364 StartCommand_Move();
2365
2366 if (GetHumanInventory().GetEntityInHands())
2367 ForceStandUpForHeavyItems(GetHumanInventory().GetEntityInHands());
2368
2369 return;
2370 }
2371
2372
2373 //--------------------------------------------
2375
2376 if (ModCommandHandlerInside(pDt, pCurrentCommandID, pCurrentCommandFinished))
2377 {
2378 return;
2379 }
2380
2381
2382 //--------------------------------------------
2383 // vehicle handling
2384 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE)
2385 {
2386 HumanCommandVehicle hcv = GetCommand_Vehicle();
2387 if (hcv.WasGearChange())
2388 {
2389 GearChangeActionCallback cb = GearChangeActionCallback.Cast(AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_SHIFTGEAR, GearChangeActionCallback));
2390 cb.SetVehicleCommand(hcv);
2391 }
2392
2393 return;
2394 }
2395
2397 //--------------------------------------------
2398 HumanCommandMove hcm = GetCommand_Move();
2399 if (hcm && hcm.GetCurrentMovementSpeed() > 2.99 && m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
2400 {
2401 m_SprintedTime += pDt;
2403 {
2404 m_SprintFull = true;
2406 }
2407 else
2408 m_SprintFull = false;
2409 }
2410 else
2411 {
2412 m_SprintedTime = 0.0;
2413 m_SprintFull = false;
2414 }
2415
2416 //--------------------------------------------
2417 // swimming handling
2418 if (m_Swimming.HandleSwimming(pCurrentCommandID, hcm, m_MovementState))
2419 {
2420 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2421 {
2422 return;
2423 }
2424
2425 m_JumpClimb.CheckAndFinishJump();
2426 return;
2427 }
2428
2429 //--------------------------------------------
2430 // ladder handling
2431 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_LADDER)
2432 {
2434 return;
2435 }
2436
2437 //--------------------------------------------
2438 // climb handling
2439 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_CLIMB)
2440 {
2441 return;
2442 }
2443
2444 //--------------------------------------------
2445 // fall handling
2446
2447 if (IsAlreadyInFallingCommand(pCurrentCommandID))
2448 {
2449 if (IsLanded(pCurrentCommandID))
2450 {
2452 NoiseParams npar;
2453
2454 FallDamageData fallDamageData = new FallDamageData();
2455 fallDamageData.m_Height = m_FallYDiff - playerPosition[1];
2456
2457 // land
2458 if (fallDamageData.m_Height < 0.5)
2459 {
2460 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2461 OnLand(pCurrentCommandID, fallDamageData);
2462 npar = type.GetNoiseParamsLandLight();
2463 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2464 }
2465 else if (fallDamageData.m_Height < 3.0)
2466 {
2467 if (m_MovementState.IsInProne() || m_MovementState.IsInRaisedProne())
2468 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2469 else
2470 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_LIGHT;
2471
2472 OnLand(pCurrentCommandID, fallDamageData);
2473 npar = type.GetNoiseParamsLandLight();
2474 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2475 }
2476 else if (fallDamageData.m_Height < 5.0)
2477 {
2478 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_MEDIUM;
2479 OnLand(pCurrentCommandID, fallDamageData);
2480 npar = type.GetNoiseParamsLandHeavy();
2481 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2482 }
2483 else
2484 {
2485 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_HEAVY;
2486 OnLand(pCurrentCommandID, fallDamageData);
2487 npar = type.GetNoiseParamsLandHeavy();
2488 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2489 }
2490
2491 if (fallDamageData.m_Height >= DayZPlayerImplementFallDamage.HEALTH_HEIGHT_LOW && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2492 {
2493 OnPlayerRecievedHit();
2494 }
2495
2496 m_FallDamage.HandleFallDamage(fallDamageData);
2497 m_JumpClimb.CheckAndFinishJump(fallDamageData.m_LandType);
2498 }
2499
2501 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
2502 {
2503 return;
2504 }
2505 }
2506 else if (PhysicsIsFalling(false))
2507 {
2508 // Not in a falling command but the controller is falling, start default fall
2509 StartCommand_Fall(0);
2510 SetFallYDiff(playerPosition[1]);
2511 return;
2512 }
2513
2514 //--------------------------------------------
2515 // handle jumping
2516
2517#ifndef NO_GUI
2518#ifdef DEVELOPER
2520
2521 if (DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLEJUMP))
2522 {
2523 SHumanCommandClimbSettings hcls = GetDayZPlayerType().CommandClimbSettingsW();
2524
2525 if (m_MovementState.m_iMovement != DayZPlayerConstants.MOVEMENTIDX_IDLE)
2526 hcls.m_fFwMaxDistance = 3;
2527 else
2528 hcls.m_fFwMaxDistance = 1.2;
2529
2530 SHumanCommandClimbResult ret;
2531
2533 HumanCommandClimb.DoClimbTest(this, ret, 0x3);
2534 }
2535
2536#endif
2537#endif
2538
2539 // start jump
2540 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2541 {
2542 return;
2543 }
2544
2545 HumanCommandAdditives ad = GetCommandModifier_Additives();
2546
2547 bool force = false;
2548#ifndef NO_GUI
2549#ifdef DEVELOPER
2551 force = DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLETALKING);
2552#endif
2553#endif
2554 float amplitude = IsPlayerSpeaking();
2555
2556 if (amplitude > 0.1 || force)
2557 {
2558 if (ad)
2559 ad.SetTalking(true);
2560
2561 // add noises on server
2562 if (GetGame().IsServer())
2563 {
2564 int now = GetGame().GetTime();
2565 if (now >= m_NextVoNNoiseTime)
2566 {
2567 m_NextVoNNoiseTime = now + 1000;
2568
2569 int voiceLevel = GetGame().GetVoiceLevel(this);
2571
2572 // add noise every second while talking
2573 NoiseParams vonpar;
2574 switch (voiceLevel)
2575 {
2576 case VoiceLevelWhisper:
2577 vonpar = pt.GetNoiseParamsWhisper();
2578 break;
2579 case VoiceLevelTalk:
2580 vonpar = pt.GetNoiseParamsTalk();
2581 break;
2582 case VoiceLevelShout:
2583 vonpar = pt.GetNoiseParamsShout();
2584 break;
2585 }
2586 AddNoise(vonpar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2587 }
2588 }
2589 }
2590 else
2591 {
2592 if (ad)
2593 ad.SetTalking(false);
2594 }
2595
2596 //--------------------------------------------
2597 // anything whats handled by InputController
2598
2600
2601 if (hic)
2602 {
2604 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
2605 m_Throwing.HandleThrowing(hic, hcw, entityInHands, pDt);
2606
2608 if (m_MeleeFightLogic.CanFight())
2609 {
2610 if (m_MeleeFightLogic.HandleFightLogic(pCurrentCommandID, hic, entityInHands, m_MovementState, m_ContinueFirearmMelee))
2611 {
2613 return;
2614 }
2615 }
2616 }
2617
2618
2620 if (ModCommandHandlerAfter(pDt, pCurrentCommandID, pCurrentCommandFinished))
2621 {
2622 return;
2623 }
2624 }
2625
2626 void HideClothing(ItemOptics optic, bool state) {}
2627
2628 //-------------------------------------------------------------
2632
2635 bool m_DebugTypeVal = false;
2636
2640
2642 void CommandHandlerDebug(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
2643 {
2644 if (GetPluginManager())
2645 {
2647 if (playerDebug)
2648 {
2649 playerDebug.CommandHandler();
2650
2652 if (m_DebugWeaponChangeStage == 0)
2653 {
2654
2655 // debug weapon change
2656 int hideSlot;
2657
2658 if (playerDebug.IsWeaponChange(m_DebugWeaponChangeItem, hideSlot, m_DebugWeaponChangeShowSlot))
2659 {
2660 //Print("Change Weapon started: " + m_DebugWeaponChangeItem + "," + hideSlot.ToString() + "," + m_DebugWeaponChangeShowSlot.ToString());
2661
2662 HumanCommandWeapons w = GetCommandModifier_Weapons();
2663 w.StartAction(WeaponActions.HIDE, hideSlot);
2664
2666 }
2667 }
2668 else if (m_DebugWeaponChangeStage == 1)
2669 {
2670 // wait for weapon hide to meet event
2671 HumanCommandWeapons w2 = GetCommandModifier_Weapons();
2672 if (w2 && w2.GetRunningAction() == WeaponActions.HIDE)
2673 {
2674 if (w2.IsEvent() == WeaponEvents.CHANGE_HIDE)
2675 {
2677 //Print("Change Weapon - hidden: ");
2678
2680 PlayerBase player = PlayerBase.Cast(this);
2681 EntityAI item_in_hands = player.GetHumanInventory().GetEntityInHands();
2682 if (item_in_hands != NULL && player.CanDropEntity(item_in_hands) && GetGame().GetPlayer().GetHumanInventory().CanRemoveEntityInHands())
2683 {
2684 player.PredictiveDropEntity(item_in_hands);
2685 }
2686
2687 if (m_DebugWeaponChangeItem != "")
2688 {
2690 dst.SetHands(this, NULL);
2692 }
2693
2695 w2.StartAction(WeaponActions.SHOW, 3);
2696
2698 }
2699 }
2700 }
2701 else if (m_DebugWeaponChangeStage == 2)
2702 {
2703 HumanCommandWeapons w3 = GetCommandModifier_Weapons();
2704 if (w3 && w3.IsActionFinished())
2705 {
2707 }
2708 }
2709 }
2710 }
2711
2712
2714 if (m_TestDamageCounter >= 0)
2715 {
2716 if (m_TestDamageCounter > 3)
2717 {
2720
2721 if (m_DebugDirectionVal > 90)
2722 {
2723 m_DebugDirectionVal = -180;
2725 }
2726
2727 if (m_DebugTypeVal)
2728 {
2729 AddCommandModifier_Damage(0, m_DebugDirectionVal); // starts light
2730 }
2731 else
2732 {
2733 StartCommand_Damage(0, m_DebugDirectionVal); // starts heavy (full body)
2734 }
2735 // 0.. types
2736 // from: -180 back, -90 left, 0 front, 90 right, 180 back
2737 //AddCommandModifier_Damage(0, directionVal); // starts light
2738 //StartCommand_Damage(0, 0); // starts heavy (full body)
2739 }
2740
2741 m_TestDamageCounter += pDt;
2742 }
2743
2744
2745#ifndef NO_GUI
2746#ifdef DEVELOPER
2747
2748 // injury / exhaustion
2749 {
2750 HumanCommandAdditives ad = GetCommandModifier_Additives();
2751
2753 float v = DiagMenu.GetEngineRangeValue(DayZPlayerConstants.DEBUG_SHOWINJURY);
2754 if (v > 0)
2755 {
2756 ad.SetInjured(v, true);
2757 }
2758
2760 v = DiagMenu.GetEngineRangeValue(DayZPlayerConstants.DEBUG_SHOWEXHAUSTION);
2761 if (v > 0)
2762 {
2763 ad.SetExhaustion(v, true);
2764 }
2765 }
2766#endif
2767#endif
2768
2769 }
2770
2771
2772
2773 //-------------------------------------------------------------
2777 override int CameraHandler(int pCameraMode)
2778 {
2781 {
2782 ItemOptics optics = null;
2783 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
2784 Weapon weapon = Weapon.Cast(entityInHands);
2785 if (weapon)
2786 optics = weapon.GetAttachedOptics();
2787 else if (entityInHands)
2788 Class.CastTo(optics,entityInHands);
2789
2790 if (m_CameraOptics && optics)
2791 {
2793 }
2794 else if (m_CameraIronsight && weapon)
2795 {
2797 }
2798 }
2799
2800 // If the logic above doesn't reach optics nor ironsights camera,
2801 // yet weapon is still raised and ads is wanted, enforce 1pv camera
2802 // as this will reduce erratic behaviour of camera switching in 3pv
2803 HumanInputController hic = GetInputController();
2804 if (m_Camera3rdPerson && m_IsWeapon && m_IsRaised && hic && hic.WeaponADS())
2805 {
2807 }
2808
2809 //uncon
2810 if ( GetCurrentCommandID() == DayZPlayerConstants.COMMANDID_UNCONSCIOUS )
2811 {
2813 }
2814
2815 HumanCommandVehicle vehicleCommand = GetCommand_Vehicle();
2816
2817 if (!m_Camera3rdPerson)
2818 {
2819 if (vehicleCommand)
2820 {
2822 }
2823
2825 }
2826 else
2827 {
2828 if (vehicleCommand)
2829 {
2830 Transport transport = vehicleCommand.GetTransport();
2831 if (transport && GetParent())
2832 {
2833 return transport.Get3rdPersonCameraType();
2834 }
2835 }
2836
2838 GetMovementState(m_MovementState);
2839
2843
2845
2847
2848 if (m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_CLIMB)
2849 {
2851 }
2852
2853 if (m_JumpClimb.m_bIsJumpInProgress)
2854 {
2856 }
2857
2858 int targetStanceIndex = m_MovementState.m_iStanceIdx;
2859
2861 HumanCommandMove commandMove = GetCommand_Move();
2862 if (commandMove && commandMove.IsChangingStance() && m_MovementState.IsRaised())
2863 {
2864 targetStanceIndex = m_MovementState.m_iStanceIdx - DayZPlayerConstants.STANCEIDX_RAISED;
2865 }
2866
2867 //
2868 // normal movement cameras
2869 if (targetStanceIndex == DayZPlayerConstants.STANCEIDX_CROUCH)
2870 {
2872 }
2873 else if (targetStanceIndex == DayZPlayerConstants.STANCEIDX_RAISEDCROUCH)
2874 {
2876 }
2877 else if (targetStanceIndex == DayZPlayerConstants.STANCEIDX_PRONE)
2878 {
2880 }
2881 else if (targetStanceIndex == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
2882 {
2884 }
2885
2886 if (targetStanceIndex == DayZPlayerConstants.STANCEIDX_RAISEDERECT)
2887 {
2888 if (m_IsWeapon)
2889 {
2891 }
2892 else
2893 {
2895 }
2896 }
2897 else if (targetStanceIndex == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
2898 {
2900 }
2901
2902 // DayZPlayerConstants.STANCEIDX_ERECT
2904 }
2905
2907 }
2908
2910 void OnMovementChanged()//(int state_old, int state_new)
2911 {
2912 switch (m_MovementState.m_LocalMovement)
2913 {
2914 case DayZPlayerConstants.MOVEMENTIDX_CROUCH_RUN:
2915 {
2916 //OnCrouchRunEnd();
2917 break;
2918 }
2919 case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
2920 {
2921 OnSprintEnd();
2922 break;
2923 }
2924 case DayZPlayerConstants.MOVEMENTIDX_RUN:
2925 {
2926 //OnRunEnd();
2927 break;
2928 }
2929 case DayZPlayerConstants.MOVEMENTIDX_WALK:
2930 {
2931 //OnWalkEnd();
2932 break;
2933 }
2934 case DayZPlayerConstants.MOVEMENTIDX_IDLE:
2935 {
2936 //OnIdleEnd();
2937 break;
2938 }
2939 case DayZPlayerConstants.MOVEMENTIDX_SLIDE:
2940 {
2941 //OnSlideEnd();
2942 break;
2943 }
2944 }
2945
2946 switch (m_MovementState.m_iMovement)
2947 {
2948 case DayZPlayerConstants.MOVEMENTIDX_CROUCH_RUN:
2949 {
2950 //OnCrouchRunStart();
2951 break;
2952 }
2953 case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
2954 {
2955 OnSprintStart();
2956 break;
2957 }
2958 case DayZPlayerConstants.MOVEMENTIDX_RUN:
2959 {
2960 //OnRunStart();
2961 break;
2962 }
2963 case DayZPlayerConstants.MOVEMENTIDX_WALK:
2964 {
2965 //OnWalkStart();
2966 break;
2967 }
2968 case DayZPlayerConstants.MOVEMENTIDX_IDLE:
2969 {
2970 //OnIdleStart();
2971 break;
2972 }
2973 case DayZPlayerConstants.MOVEMENTIDX_SLIDE:
2974 {
2975 //OnSlideStart();
2976 break;
2977 }
2978 }
2979 }
2980
2982 {
2983 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2984 {
2985 GetUApi().GetInputByID(UALeanLeft).Lock();
2986 GetUApi().GetInputByID(UALeanRight).Lock();
2987 }
2988 }
2989
2991 {
2992 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2993 {
2994 #ifdef PLATFORM_CONSOLE
2995 if (GetUApi().GetInputByID(UAVoiceModifierHelper).LocalValue() == 0)
2996 #endif
2997 {
2998 GetUApi().GetInputByID(UALeanLeft).Unlock();
2999 GetUApi().GetInputByID(UALeanRight).Unlock();
3000 }
3001 }
3002 }
3003 //-------------------------------------------------------------
3007
3009 {
3010 int userDataTypeParam = 0;
3011 if (!ctx.Read(userDataTypeParam))
3012 {
3013 Error("DayZPlayerImplement: cannot read input type");
3014 return;
3015 }
3016
3017 OnInputUserDataProcess(userDataTypeParam, ctx);
3018 }
3019
3020 bool OnInputUserDataProcess(int userDataType, ParamsReadContext ctx)
3021 {
3022 m_MeleeCombat.SetTargetObject(null);
3023 m_MeleeCombat.SetHitPos(vector.Zero);
3024 m_MeleeCombat.SetHitZoneIdx(-1);
3025 m_MeleeCombat.SetFinisherType(-1);
3026
3027 if (userDataType == INPUT_UDT_MELEE_TARGET)
3028 {
3029 EntityAI target = null;
3030 if (ctx.Read(target))
3031 {
3032 m_MeleeCombat.SetTargetObject(target);
3033 }
3034
3035 vector hitPos = vector.Zero;
3036 if (ctx.Read(hitPos))
3037 {
3038 m_MeleeCombat.SetHitPos(hitPos);
3039 }
3040
3041 int hitZoneIdx = -1;
3042 if (ctx.Read(hitZoneIdx))
3043 {
3044 m_MeleeCombat.SetHitZoneIdx(hitZoneIdx);
3045 }
3046
3047 int finisherType = -1;
3048 if (ctx.Read(finisherType))
3049 {
3050 m_MeleeCombat.SetFinisherType(finisherType);
3051 }
3052
3053 return true;
3054 }
3055
3056 return false;
3057 }
3058
3059 //-------------------------------------------------------------
3063 void OnSyncJuncture(int pJunctureID, ParamsReadContext pCtx)
3064 {
3065 switch (pJunctureID)
3066 {
3068 if (m_DeathAnimType == -2)
3070 break;
3071
3073 SyncHitInfo data = new SyncHitInfo;
3074 if (DayZPlayerSyncJunctures.ReadDamageHitParamsEx(pCtx, data) && data != null)
3075 {
3076 m_SyncedHitDataArray.Insert(data);
3077 }
3078 break;
3079 }
3080 }
3081
3083 {
3084 EntityAI boots = GetInventory().FindAttachment(InventorySlots.FEET);
3085 if (boots)
3086 {
3087 switch (boots.GetAttachmentSoundType())
3088 {
3089 case "Sneakers":
3090 return AnimBootsType.Sneakers;
3091 case "Boots":
3092 return AnimBootsType.Boots;
3093 }
3094 }
3095
3096 return AnimBootsType.None;
3097 }
3098
3099 //Get top body clothes
3100 AnimUpperBodyType GetBodyAttachmentType()
3101 {
3102 EntityAI attachment = GetInventory().FindAttachment(InventorySlots.BODY);
3103 if (attachment)
3104 {
3105 switch (attachment.GetAttachmentSoundType())
3106 {
3107 case "NylonJacket":
3108 return AnimUpperBodyType.NylonJacket;
3109 case "TShirt":
3110 return AnimUpperBodyType.TShirt;
3111 case "WoolShirt":
3112 return AnimUpperBodyType.WoolShirt;
3113 case "HeavyJacket":
3114 return AnimUpperBodyType.HeavyJacket;
3115 case "LeatherJacket":
3116 return AnimUpperBodyType.LeatherJacket;
3117 case "Coat":
3118 return AnimUpperBodyType.Coat;
3119 case "ChemlonDress":
3120 return AnimUpperBodyType.ChemlonDress;
3121 case "Ghillie":
3122 return AnimUpperBodyType.Ghillie;
3123 case "Chainmail":
3124 return AnimUpperBodyType.Chainmail;
3125 }
3126 }
3127
3128 return AnimUpperBodyType.None;
3129 }
3130
3132 {
3133 EntityAI back = GetInventory().FindAttachment(InventorySlots.BACK);
3134 if (back)
3135 {
3136 switch (back.GetAttachmentSoundType())
3137 {
3138 case "Small":
3139 return AnimBackType.Small;
3140 case "Military":
3141 return AnimBackType.Military;
3142 case "Outdoor":
3143 return AnimBackType.Outdoor;
3144 case "Ghillie":
3145 return AnimBackType.Ghillie;
3146 }
3147 }
3148
3149 return AnimBackType.None;
3150 }
3151
3152 //Get weapon on back
3153 AnimRangedWeaponType GetShoulderAttachmentType()
3154 {
3155 EntityAI shoulderAttachment = GetInventory().FindAttachment(InventorySlots.SHOULDER);
3156 EntityAI meleeAttachment = GetInventory().FindAttachment(InventorySlots.MELEE);
3157
3158 AnimRangedWeaponType shoulderAttType = AnimRangedWeaponType.None;
3159 AnimRangedWeaponType meleeAttType = AnimRangedWeaponType.None;
3160
3161 if (shoulderAttachment)
3162 {
3163 switch (shoulderAttachment.GetAttachmentSoundType())
3164 {
3165 case "Shotgun":
3166 {
3167 shoulderAttType = AnimRangedWeaponType.Shotgun;
3168 break;
3169 }
3170 case "Rifle":
3171 {
3172 shoulderAttType = AnimRangedWeaponType.Rifle;
3173 break;
3174 }
3175 }
3176 }
3177 if (meleeAttachment)
3178 {
3179 switch (meleeAttachment.GetAttachmentSoundType())
3180 {
3181 case "Shotgun":
3182 {
3183 meleeAttType = AnimRangedWeaponType.Shotgun;
3184 break;
3185 }
3186 case "Rifle":
3187 {
3188 meleeAttType = AnimRangedWeaponType.Rifle;
3189 break;
3190 }
3191 }
3192 }
3193
3194 if (shoulderAttType == AnimRangedWeaponType.Shotgun || meleeAttType == AnimRangedWeaponType.Shotgun)
3195 return AnimRangedWeaponType.Shotgun;
3196
3197 if (shoulderAttType == AnimRangedWeaponType.Rifle || meleeAttType == AnimRangedWeaponType.Rifle)
3198 return AnimRangedWeaponType.Rifle;
3199
3200 return AnimRangedWeaponType.None;
3201 }
3202
3203 string GetSurfaceType(SurfaceAnimationBone limbType)
3204 {
3205 string surfaceType;
3206 int liquidType;
3207
3208 g_Game.SurfaceUnderObjectByBoneCorrectedLiquid(this, limbType, surfaceType, liquidType);
3209
3210 return surfaceType;
3211 }
3212
3213 //-------------------------------------------------------------
3217
3219 {
3220 if (so == null)
3221 return null;
3222
3224 AbstractWave wave = GetGame().GetSoundScene().Play3D(so, sob);
3225 return wave;
3226 }
3227
3228 void AddNoise(NoiseParams noisePar, float noiseMultiplier = 1.0)
3229 {
3230 if (noisePar != null)
3231 GetGame().GetNoiseSystem().AddNoise(this, noisePar, noiseMultiplier);
3232 }
3233
3234 //-------------------------------------------------------------
3238
3239 void OnStepEvent(string pEventType, string pUserString, int pUserInt)
3240 {
3241 vector orientation;
3244 GetMovementState(state);
3245
3246 #ifndef SERVER
3247 DayZPlayerTypeStepSoundLookupTable table = type.GetStepSoundLookupTable();
3248 SoundObjectBuilder soundBuilder = NULL;
3249 if (pUserInt < 100)
3250 {
3251 string surface;
3252 if (pUserInt % 2 == 1)
3253 {
3254 surface = GetSurfaceType(SurfaceAnimationBone.LeftBackLimb);
3255 if (surface.Length() == 0)//if no surface found, try other leg
3256 surface = GetSurfaceType(SurfaceAnimationBone.RightBackLimb);
3257 }
3258 else
3259 {
3260 surface = GetSurfaceType(SurfaceAnimationBone.RightBackLimb);
3261 if (surface.Length() == 0)//if no surface found, try other leg
3262 surface = GetSurfaceType(SurfaceAnimationBone.LeftBackLimb);
3263 }
3264
3265 if (surface.Length() != 0)
3266 m_LastSurfaceUnderHash = surface.Hash();
3267
3268 if (state.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
3269 {
3270 orientation = GetOrientation() * (-1);
3271 int stepParticleID = Surface.GetStepsParticleID(surface);
3272
3273 if (stepParticleID > 0)
3274 {
3275 ParticleManager.GetInstance().PlayInWorldEx(stepParticleID, null, GetPosition(), orientation);
3276 }
3277 }
3278
3279 soundBuilder = table.GetSoundBuilder(pUserInt, state.m_iMovement, m_LastSurfaceUnderHash, GetBootsType());
3280 }
3281 else
3282 {
3283 string surface2 = GetSurfaceType();
3284 if (surface2.Length() != 0)
3285 m_LastSurfaceUnderHash = surface2.Hash();
3286
3287 soundBuilder = table.GetSoundBuilder(pUserInt, state.m_iMovement, m_LastSurfaceUnderHash, GetBootsType());
3288 }
3289
3290 if (soundBuilder != NULL && GetGame().GetPlayer())
3291 {
3292 orientation = Vector(0, 0, 0);
3293 vector edgeLength = Vector(1.5, 3.0, 1.5);
3294 array<Object> excludedObjects = new array<Object>;
3295 excludedObjects.Insert(this);
3296 array<Object> collidedObjects = new array<Object>;
3297
3298 if (GetGame().IsBoxCollidingGeometry(GetPosition(), orientation, edgeLength, ObjIntersectView, ObjIntersectNone, excludedObjects, collidedObjects))
3299 {
3300 for (int i = 0; i < collidedObjects.Count(); ++i)
3301 {
3302 WoodBase colObject = WoodBase.Cast(collidedObjects.Get(i));
3303 if (colObject && colObject.HasPlayerCollisionParticle() && state.m_iMovement > DayZPlayerConstants.MOVEMENTIDX_WALK)
3305
3306 if (colObject && colObject.HasPlayerCollisionSound())
3307 {
3308 for (int j = 0; j < type.GetVegetationSounds().Count(); ++j)
3309 {
3310 VegetationSound vegetationSound = type.GetVegetationSounds().Get(j);
3311
3312 if (vegetationSound.GetAnimEventIds().Find(pUserInt) >= 0)
3313 {
3314 SoundObjectBuilder vegSoundObjectBuilder = vegetationSound.GetSoundObjectBuilder();
3315 SoundObject vegSoundObject = vegetationSound.GetSoundObjectBuilder().BuildSoundObject();
3316
3317 if (vegSoundObject != NULL)
3318 {
3319 AttenuateSoundIfNecessary(vegSoundObject);
3320 PlaySound(vegSoundObject, vegSoundObjectBuilder);
3321 }
3322
3323 break;
3324 }
3325 }
3326
3327 break;
3328 }
3329 }
3330 }
3331
3332 SoundObject soundObject = soundBuilder.BuildSoundObject();
3333 if (soundObject != NULL)
3334 {
3335 AttenuateSoundIfNecessary(soundObject);
3336 PlaySound(soundObject, soundBuilder);
3337 }
3338 }
3339 #endif
3340
3341 if (GetGame().IsServer())
3342 {
3343 m_StepCounter++;//move outside of server condition if needed on client as well
3344
3345 float noiseMultiplier = 0;
3346
3347 NoiseParams noiseParams;
3348 if (state.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_ERECT || state.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT)
3349 noiseParams = type.GetNoiseParamsStand();
3350 else if (state.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_CROUCH || state.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDCROUCH)
3351 noiseParams = type.GetNoiseParamsCrouch();
3352 else if (state.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_PRONE || state.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
3353 noiseParams = type.GetNoiseParamsProne();
3354 else
3355 {
3356 Debug.Log(string.Format("Wrong stance, id: %1 using backup with stand stance (id: 0)", state.m_iStanceIdx));
3357 noiseParams = type.GetNoiseParamsStand();
3358 }
3359
3360 noiseMultiplier = NoiseAIEvaluate.GetNoiseMultiplier(this) * NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather());
3361
3362 AddNoise(noiseParams, noiseMultiplier);
3363
3365 {
3366 ProcessFeetDamageServer(pUserInt);
3367 }
3368 }
3369 }
3370
3371 void OnSoundEvent(string pEventType, string pUserString, int pUserInt)
3372 {
3373 int eventReplaceID;
3374
3375 if (pEventType == "Sound")
3376 {
3377 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT || GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_REMOTE)
3378 {
3379 eventReplaceID = m_ReplaceSoundEventHandler.GetSoundEventID(pUserInt, ESoundEventType.SOUND_COMMON);
3380 if (eventReplaceID > 0)
3381 {
3382 PlaySoundEventType(ESoundEventType.SOUND_COMMON, eventReplaceID);
3383 return;
3384 }
3385 }
3386
3387 ProcessSoundEvent(pEventType, pUserString, pUserInt);
3388 }
3389 else if (pEventType == "SoundWeapon")
3390 {
3391 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT || GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_REMOTE)
3392 {
3393 eventReplaceID = m_ReplaceSoundEventHandler.GetSoundEventID(pUserInt, ESoundEventType.SOUND_WEAPON);
3394 if (eventReplaceID > 0)
3395 {
3396 PlaySoundEventType(ESoundEventType.SOUND_WEAPON, eventReplaceID);
3397 return;
3398 }
3399 }
3400
3401 ProcessWeaponEvent(pEventType, pUserString, pUserInt);
3402 }
3403 else if (pEventType == "SoundAttachment")
3404 {
3405 ProcessAttachmentEvent(pEventType, pUserString, pUserInt);
3406 }
3407 else if (pEventType == "SoundVoice")
3408 {
3409 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT || GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_REMOTE)
3410 {
3411 int event_id = m_PlayerSoundEventHandler.ConvertAnimIDtoEventID(pUserInt);
3412 if (event_id > 0)
3413 {
3414 PlaySoundEvent(event_id);
3415 return;
3416 }
3417 }
3418 ProcessVoiceEvent(pEventType, pUserString, pUserInt);
3419 }
3420 else
3421 {
3422 Debug.Log("OnSoundEvent: Unknown sound event \"" + pEventType + "\"");
3423 }
3424 }
3425
3426 void OnParticleEvent(string pEventType, string pUserString, int pUserInt)
3427 {
3428
3429 }
3430
3431
3432 void ProcessWeaponEvent(string pEventType, string pUserString, int pUserInt)
3433 {
3435 AnimSoundEvent soundEvent = null;
3436
3437 float quantity = 0;
3438
3439 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
3440 if (entityInHands && entityInHands.IsInherited(ItemBase))
3441 {
3442 ItemBase item;
3443 Class.CastTo(item, entityInHands);
3444 if (item.HasQuantity())
3445 quantity = (float)item.GetQuantity() / (item.GetQuantityMax() - item.GetQuantityMin());
3446 InventoryItemType invItemType = item.GetInventoryItemType();
3447 soundEvent = invItemType.GetSoundEvent(pUserInt);
3448 }
3449
3450 if (soundEvent == null)
3451 {
3452 quantity = 0;
3453 soundEvent = type.GetSoundWeaponEvent(pUserInt);
3454 }
3455
3456 if (soundEvent != null)
3457 {
3458 if (!GetGame().IsDedicatedServer())
3459 {
3460 SoundObjectBuilder builder = soundEvent.GetSoundBuilderEx(m_ActionSoundCategoryHash);
3461 if (builder)
3462 {
3463 builder.AddVariable("quantity", quantity);
3464 builder.AddVariable("interior", IsSoundInsideBuilding());
3465
3466 SoundObject soundObject = builder.BuildSoundObject();
3467 if (soundObject != NULL)
3468 {
3469 AttenuateSoundIfNecessary(soundObject);
3470 AbstractWave sound = PlaySound(soundObject, builder);
3471
3472 if (pUserString == "StopOnAnimEnd")
3473 m_PerformedActionSounds.Insert(sound);
3474 }
3475 }
3476 else
3477 {
3478 //TODO:Userful error message
3479 }
3480 }
3481
3482 if (GetGame().IsServer())
3483 {
3484 AddNoise(soundEvent.m_NoiseParams, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
3485 }
3486 }
3487 }
3488
3489 void ProcessAttachmentEvent(string pEventType, string pUserString, int pUserInt)
3490 {
3492 DayZPlayerTypeAttachmentSoundLookupTable table = type.GetAttachmentSoundLookupTable();
3493
3494 array<string> attachments = new array<string>();
3495 pUserString.Split(",", attachments);
3496 for (int i = 0; i < attachments.Count(); i++)
3497 {
3498 int attachmentHash = -1;
3499 if (attachments[i] == "shoulder")
3500 attachmentHash = GetShoulderAttachmentType();
3501 else if (attachments[i] == "body")
3502 attachmentHash = GetBodyAttachmentType();
3503 else if (attachments[i] == "back")
3504 attachmentHash = GetBackAttachmentType();
3505
3506 SoundObjectBuilder soundBuilder = table.GetSoundBuilder(pUserInt, attachments[i], attachmentHash);
3507
3508 if (soundBuilder != NULL)
3509 {
3510 SoundObject soundObject = soundBuilder.BuildSoundObject();
3511 if (soundObject != NULL)
3512 {
3513 AttenuateSoundIfNecessary(soundObject);
3514 PlaySound(soundObject, soundBuilder);
3515 }
3516 }
3517 }
3518 }
3519
3521 {
3522 if (m_ClimbingLadderType == "wood")
3523 {
3524 soundObjectBuilder.AddVariable("laddertype", 1);
3525 }
3526 else
3527 {
3528 soundObjectBuilder.AddVariable("laddertype", 0);
3529 }
3530
3531 AnimBootsType pBoots = GetBootsType();
3532
3533 if (pBoots == AnimBootsType.None)
3534 {
3535 soundObjectBuilder.AddVariable("bare", 1);
3536 soundObjectBuilder.AddVariable("sneakers", 0);
3537 soundObjectBuilder.AddVariable("boots", 0);
3538 }
3539 else if (pBoots == AnimBootsType.Sneakers)
3540 {
3541 soundObjectBuilder.AddVariable("bare", 0);
3542 soundObjectBuilder.AddVariable("sneakers", 1);
3543 soundObjectBuilder.AddVariable("boots", 0);
3544 }
3545 else if (pBoots == AnimBootsType.Boots)
3546 {
3547 soundObjectBuilder.AddVariable("bare", 0);
3548 soundObjectBuilder.AddVariable("sneakers", 0);
3549 soundObjectBuilder.AddVariable("boots", 1);
3550 }
3551 }
3552
3553 void ProcessSoundEvent(string pEventType, string pUserString, int pUserInt)
3554 {
3556 DayZPlayerTypeAnimTable table = type.GetSoundTable();
3557 AnimSoundEvent soundEvent;
3558 if (table)
3559 {
3560 soundEvent = table.GetSoundEvent(pUserInt);
3561 }
3562
3563 if (soundEvent != NULL)
3564 {
3565 if (!GetGame().IsDedicatedServer())
3566 {
3567 SoundObjectBuilder objectBuilder = soundEvent.GetSoundBuilder();
3568 if (GetCommand_Ladder())
3569 {
3571 }
3572 objectBuilder.AddEnvSoundVariables(GetPosition());
3573
3574 SoundObject soundObject = objectBuilder.BuildSoundObject();
3575 if (soundObject != NULL)
3576 {
3577 AttenuateSoundIfNecessary(soundObject);
3578 AbstractWave sound = PlaySound(soundObject, objectBuilder);
3579
3580 if (pUserString == "StopOnAnimEnd")
3581 m_PerformedActionSounds.Insert(sound);
3582 }
3583 }
3584
3585 if (GetGame().IsServer())
3586 {
3587 if (soundEvent.m_NoiseParams != NULL)
3588 GetGame().GetNoiseSystem().AddNoise(this, soundEvent.m_NoiseParams, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
3589 }
3590 }
3591 }
3592
3593
3594
3595 AbstractWave ProcessVoiceEvent(string pEventType, string pUserString, int pUserInt)
3596 {
3597 #ifdef SERVER//none of this code needs to run on server, ifdef put here rather than before the method call to maintain mod compatibility
3598 return null;
3599 #endif
3601 DayZPlayerTypeVoiceSoundLookupTable table = type.GetVoiceSoundLookupTable();
3602 if (!table)
3603 return null;
3604 AbstractWave wave;
3605 EntityAI mask = GetInventory().FindAttachment(InventorySlots.MASK);
3606 EntityAI head_gear = GetInventory().FindAttachment(InventorySlots.HEADGEAR);
3607
3608 string category;
3609 if (mask || head_gear)
3610 {
3611 string category_mask;
3612 string category_headgear;
3613
3614 int priority_mask;
3615 int priority_headgear;
3616
3617 if (mask)
3618 {
3619 category_mask = mask.ConfigGetString("soundVoiceType");
3620 priority_mask = mask.ConfigGetInt("soundVoicePriority");
3621 }
3622 if (head_gear)
3623 {
3624 category_headgear = head_gear.ConfigGetString("soundVoiceType");
3625 priority_headgear = head_gear.ConfigGetInt("soundVoicePriority");
3626 }
3627
3628 if (priority_headgear >= priority_mask && category_headgear != "")
3629 {
3630 category = category_headgear;
3631 }
3632 else
3633 {
3634 category = category_mask;
3635 }
3636 }
3637
3638 if (category == "")
3639 {
3640 category = "none";
3641 }
3642
3643 SoundObjectBuilder soundBuilder = table.GetSoundBuilder(pUserInt, category.Hash());
3644
3645 if (soundBuilder)
3646 {
3647 PlayerBase player = PlayerBase.Cast(this);
3648 //this code block looks super shady, but it's the only way the sounds play correctly, god knows what's going on on c++ side
3649 int maleVoiceType = 0;
3650 int femaleVoiceType = 0;
3651 if (player.IsMale())
3652 {
3653 maleVoiceType = player.GetVoiceType();
3654 }
3655 else
3656 {
3657 femaleVoiceType = player.GetVoiceType();
3658 }
3659
3660 soundBuilder.AddVariable("male", maleVoiceType);
3661 soundBuilder.AddVariable("female", femaleVoiceType);
3662
3663 // end of weirdness
3664 SoundObject soundObject = soundBuilder.BuildSoundObject();
3665 if (soundObject != NULL)
3666 {
3667 AttenuateSoundIfNecessary(soundObject);
3668 wave = PlaySound(soundObject, soundBuilder);
3669 }
3670
3671 }
3672
3673 return wave;
3674 }
3675
3676 void ProcessFeetDamageServer(int pUserInt);
3677
3678
3679 //-------------------------------------------------------------
3683
3685 {
3686 bool restrained = IsRestrained(); // IsRestrained()
3687 bool unconscious = IsUnconscious(); // IsRestrained()
3688
3689 ItemBase ib = ItemBase.Cast(item);
3690 if (ib && (PlayerBase.DEBUG_INVENTORY_ACCESS || !IsAlive() || restrained || unconscious || ib.CanBeMovedOverride()))
3691 return true;
3692 return false;
3693 }
3694
3696 {
3697 /*
3698 bool restrained = IsRestrained(); // IsRestrained()
3699 bool unconscious = IsUnconscious(); // IsRestrained()
3700
3701 ItemBase ib = ItemBase.Cast(item);
3702 if (!IsAlive() || restrained || unconscious || ib.CanBeMovedOverride())
3703 return true;
3704 return false;
3705 */
3706 return CheckForTakeItem(item); //the two functions are currently identical
3707 }
3708
3709 //-------------------------------------------------------------
3714 {
3715 PlayerBase player = PlayerBase.Cast(this);
3716 if (!player)
3717 return true;
3718
3719 if (!IsAlive() || player.IsUnconscious())
3720 return true;
3721 return false;
3722 }
3723
3724#ifdef DEVELOPER
3725
3726 // -------------------------------------------------------------------------
3727 override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
3728 {
3729 super.OnRPC(sender, rpc_type, ctx);
3730
3731 if (rpc_type == ERPCs.RPC_DAYZPLAYER_DEBUGSERVERWALK)
3732 {
3733 Print("ERPCs.RPC_DAYZPLAYER_DEBUGSERVERWALK");
3734
3735 Param1<bool> rp = new Param1<bool>(false);
3736 ctx.Read(rp);
3737
3738 GetInputController().OverrideMovementSpeed(rp.param1, 1);
3739 GetInputController().OverrideAimChangeX(rp.param1, 0.01);
3740
3741 }
3742 }
3743
3744#endif
3745
3746 bool IsLanded(int pCurrentCommandID)
3747 {
3748 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
3749 {
3750 HumanCommandFall fall = GetCommand_Fall();
3751
3752 if (fall)
3753 {
3754 return fall.PhysicsLanded();
3755 }
3756 }
3757
3758 return false;
3759 }
3760
3761 bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
3762 {
3763 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
3764 {
3765 HumanCommandFall fall = GetCommand_Fall();
3766
3767 if (fall)
3768 {
3769 fall.Land(fallDamageData.m_LandType);
3770 return true;
3771 }
3772 }
3773
3774 return false;
3775 }
3776
3777 bool IsAlreadyInFallingCommand(int pCurrentCommandID)
3778 {
3779 return pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL;
3780 }
3781
3783 void OverrideSlidePoseAngle(float value)
3784 {
3785 if (!m_MoveSettings)
3786 m_MoveSettings = GetDayZPlayerType().CommandMoveSettingsW();
3787 if (m_MoveSettings.m_fSlidingPoseAngle != value)
3788 {
3789 m_MoveSettings.m_fSlidingPoseAngle = value;
3790 StartCommand_Move(); //nescessary, re-initializes with adjusted values
3791 }
3792 }
3793
3795 {
3796 return GetDayZPlayerType().CommandMoveSettingsW().m_fSlidingPoseAngle;
3797 }
3798
3800 {
3801 }
3802
3804 {
3805 return m_PlayerSelected;
3806 }
3807
3809
3812
3813 void SetSuicide(bool state)
3814 {
3815 m_Suicide = state;
3816 }
3817
3819 {
3820 return m_Suicide;
3821 }
3822
3824 void OnLadder(float delta_time, HumanMovementState pState);
3825
3826 //-------------------------------------------------------------
3830
3831 override protected void EOnContact(IEntity other, Contact extra)
3832 {
3833 if (!IsAlive())
3834 return;
3835
3836 if (GetParent() == other)
3837 return;
3838
3839 Transport transport = Transport.Cast(other);
3840 if (transport)
3841 {
3842 if (GetGame().IsServer())
3843 {
3844 RegisterTransportHit(transport);
3845 }
3846 }
3847 }
3848
3849 protected void AttenuateSoundIfNecessary(SoundObject soundObject)
3850 {
3851 if (GetGame().GetPlayer() != NULL && (IsSoundInsideBuilding() != GetGame().GetPlayer().IsSoundInsideBuilding() || IsCameraInsideVehicle() != GetGame().GetPlayer().IsCameraInsideVehicle()))
3852 {
3853 soundObject.SetKind(WaveKind.WAVEATTALWAYS);
3854 }
3855 else
3856 {
3857 soundObject.SetKind(WaveKind.WAVEEFFECTEX);
3858 }
3859 }
3860
3863
3864 void SetHandheldOpticsInUse(bool state)
3865 {
3866 m_HandheldOpticsInUse = state;
3867 }
3868
3870 {
3871 return m_HandheldOpticsInUse;
3872 }
3873
3877
3879 {
3880 return m_IsRaised;
3881 }
3882
3884
3886 // Will return true when the item is not heavy as well
3887 bool CanPickupHeavyItem(notnull EntityAI item)
3888 {
3889 return !item.IsHeavyBehaviour() || (item.IsHeavyBehaviour() && DayZPlayerUtils.PlayerCanChangeStance(this, DayZPlayerConstants.STANCEIDX_ERECT));
3890 }
3891
3892 bool CanPickupHeavyItemSwap(notnull EntityAI item1, notnull EntityAI item2)
3893 {
3894 return CanPickupHeavyItem(item1) && CanPickupHeavyItem(item2);
3895 }
3896
3904 {
3905 array<InventoryItem> optics;
3906
3907 // Find preferred optics, i.e. active on in hands (if any are held) or the ones attached to weapon (if any is held)
3908 ItemOptics preferredOptics;
3909 {
3910 HumanInventory inventory = GetHumanInventory();
3911 EntityAI itemInHands = inventory.GetEntityInHands();
3912
3913 ItemOptics opticsInHands = ItemOptics.Cast(itemInHands);
3914 if (opticsInHands)
3915 {
3916 preferredOptics = opticsInHands;
3917 }
3918 else
3919 {
3920 Weapon_Base weaponInHands = Weapon_Base.Cast(itemInHands);
3921 if (weaponInHands)
3922 {
3923 preferredOptics = weaponInHands.GetAttachedOptics();
3924 }
3925 }
3926 }
3927
3928 // Draw selected optics when the player is viewing through them
3929 if (preferredOptics && preferredOptics.IsInOptics() && preferredOptics.IsUsingOptics2DModel())
3930 {
3931 optics = {}; // only allocate the array when necessary
3932 optics.Insert(preferredOptics);
3933 }
3934
3935 // Draw equipped NVGs; employ better finding!
3936 EntityAI nvAttachment = GetNVEntityAttached();
3937 if (nvAttachment)
3938 {
3939 bool blockedByOptics = preferredOptics && preferredOptics.IsInOptics() && !preferredOptics.IsUsingOptics2DModel();
3940 if (!blockedByOptics && PlayerBase.Cast(this).IsNVGWorking())
3941 {
3942 NVGoggles nvg = NVGoggles.Cast(nvAttachment);
3943 if (nvg)
3944 {
3945 if (!optics)
3946 optics = {};
3947
3948 optics.Insert(nvg);
3949 }
3950 }
3951 }
3952
3953 return optics;
3954 }
3955
3960 {
3961 EntityAI entity;
3962
3963 if (FindAttachmentBySlotName("Eyewear") && FindAttachmentBySlotName("Eyewear").FindAttachmentBySlotName("NVG"))
3964 {
3965 entity = FindAttachmentBySlotName("Eyewear").FindAttachmentBySlotName("NVG");
3966 }
3967 else if (FindAttachmentBySlotName("Headgear") && FindAttachmentBySlotName("Headgear").FindAttachmentBySlotName("NVG"))
3968 {
3969 entity = FindAttachmentBySlotName("Headgear").FindAttachmentBySlotName("NVG");
3970 }
3971
3972 return entity;
3973 }
3974
3975#ifdef DIAG_DEVELOPER
3976 Weapon_Base SpawnWeaponInHands(string type)
3977 {
3978 return Weapon_Base.Cast(GetHumanInventory().CreateInHands(type));
3979 }
3980#endif
3981
3983//Obsolete stuff below this point//
3985
3986 static const int DEAD_SCREEN_DELAY = 1000;
3987 protected bool m_CameraEyeZoom; //DEPRECATED
3988 ref Timer m_ADSAutomationTimer; //DEPRECATED
3989 protected bool m_ADSTimerLaunched; //DEPRECATED
3990 protected bool m_ProcessWeaponRaiseCompleted; //DEPRECATED
3991 protected bool m_IsFireWeaponRaised; //DEPRECATED, value still set for legacy reasons
3992 protected bool m_WasIronSight; // moved from player to weapon
3993 void SetReturnToOptics(bool state); //DEPRECATED
3994 void RunADSTimer(); //DEPRECATED
3995 void StopADSTimer(); //DEPRECATED
3997 void DepleteStamina(EStaminaModifiers modifier, float dT = -1) {};
3998}
void syncDebugPrint(string s)
Определения 3_Game/Systems/Inventory/Debug.c:1
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
const int INPUT_UDT_MELEE_TARGET
const int INPUT_UDT_INVENTORY
const int INPUT_UDT_WEAPON_REMOTE_EVENT
const int INPUT_UDT_HAND_REMOTE_EVENT
vector GetOrientation()
Определения AreaDamageManager.c:306
override event void Read(PawnStateReader ctx)
Определения CarScript.c:144
override event void Write(PawnStateWriter ctx)
Определения CarScript.c:139
proto native CEApi GetCEApi()
Get the CE API.
proto native void SpawnEntity(string sClassName, vector vPos, float fRange, int iCount)
Spawn an entity through CE.
const int ECE_IN_INVENTORY
Определения CentralEconomy.c:36
const int RF_DEFAULT
Определения CentralEconomy.c:65
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
DamageType
exposed from C++ (do not change)
Определения DamageSystem.c:11
AnimBootsType
Определения DayZAnimEvents.c:98
bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZAnimal.c:178
proto native void ResetDeathCooldown()
bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZAnimal.c:173
bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZAnimal.c:183
DayZGame g_Game
Определения DayZGame.c:3868
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
Определения DayZPlayerImplementFallDamage.c:73
void DayZPlayerImplementMeleeCombat(DayZPlayerImplement player)
void DayZPlayerMeleeFightLogic_LightHeavy(DayZPlayerImplement player)
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
ECameraZoomType
Определения ECameraZoomType.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
ERPCs
Определения ERPCs.c:2
EStaminaConsumers
Определения EStaminaConsumers.c:2
EStaminaModifiers
Определения EStaminaModifiers.c:2
bool OnInputUserDataProcess(int userDataType, ParamsReadContext ctx)
Определения EmoteManager.c:502
bool IsProcessing()
returns true when FP is heating or cooling
Определения FireplaceBase.c:1645
void PlaySound()
Определения HungerSoundHandler.c:38
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
PlayerBase GetPlayer()
Определения ModifierBase.c:51
proto void AddNoise(EntityAI source_entity, NoiseParams noise_params, float external_strenght_multiplier=1.0)
class NoiseSystem NoiseParams()
Определения Noise.c:15
string path
Определения OptionSelectorMultistate.c:142
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Определения ParticleManager.c:88
void PlayerSoundEventHandler(PlayerBase player)
Определения PlayerSoundEventHandler.c:54
EPlayerSoundEventID
Определения PlayerSoundEventHandler.c:3
override void OnRPC(ParamsReadContext ctx)
Определения PlayerStatBase.c:69
void PluginDayzPlayerDebug()
Определения PluginDayzPlayerDebug.c:275
PluginManager GetPluginManager()
Returns registred plugin by class type, better is to use global funtion GetPlugin(typename plugin_typ...
Определения PluginManager.c:274
@ Count
Определения RandomGeneratorSyncManager.c:8
void ReplaceSoundEventHandler(PlayerBase player)
Определения ReplaceSoundEventHandler.c:25
ESoundEventType
Определения ReplaceSoundEventHandler.c:2
WaveKind
Определения Sound.c:2
proto native UAInputAPI GetUApi()
void WoodBase()
Определения WoodBase.c:30
proto native UIManager GetUIManager()
proto bool ConfigGetChildName(string path, int index, out string name)
Get name of subclass in config class on path.
proto native NoiseSystem GetNoiseSystem()
proto native World GetWorld()
override ScriptCallQueue GetCallQueue(int call_category)
Определения DayZGame.c:1187
proto native AbstractSoundScene GetSoundScene()
proto native int ConfigGetInt(string path)
Get int value from config on path.
proto native void ConfigGetTextArray(string path, out TStringArray values)
Get array of strings from config on path.
proto native int GetVoiceLevel(Object player=null)
Get voice level of VoN (on both client and server) (VoiceLevelWhisper = 0, VoiceLevelNormal = 1,...
proto int GetTime()
returns mission time in milliseconds
proto native int ConfigGetChildrenCount(string path)
Get count of subclasses in config class on path.
proto native Input GetInput()
proto native Mission GetMission()
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения EnPhysics.c:326
Определения ZombieBase.c:2
int m_DamageHitAnimType
Определения DayZPlayerImplement.c:1297
void ProcessSoundEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3553
void DepleteStamina(EStaminaModifiers modifier, float dT=-1)
Определения DayZPlayerImplement.c:3997
void ProcessLiftWeapon()
bool IsWeaponDebugEnabled()
Определения DayZPlayerImplement.c:362
EntityAI GetNVEntityAttached()
Определения DayZPlayerImplement.c:3959
bool m_RaiseStarted
Определения DayZPlayerImplement.c:176
void ResetWeaponRaiseProgress()
Определения DayZPlayerImplement.c:896
void SendSoundEventEx(EPlayerSoundEventID id, int param=0)
DayZPlayerImplementThrowing GetThrowing()
Определения DayZPlayerImplement.c:276
void LockControls(bool state)
Определения DayZPlayerImplement.c:850
override void StopDeathDarkeningEffect()
Определения DayZPlayerImplement.c:802
override bool IsShootingFromCamera()
Определения DayZPlayerImplement.c:301
bool m_IsUnconsciousFalling
Определения DayZPlayerImplement.c:150
bool m_HandheldOpticsInUse
Определения DayZPlayerImplement.c:167
float m_SprintedTime
Определения DayZPlayerImplement.c:128
int m_NextVoNNoiseTime
Определения DayZPlayerImplement.c:171
ref PlayerSoundEventHandler m_PlayerSoundEventHandler
Определения DayZPlayerImplement.c:124
void OverrideShootFromCamera(bool pState)
Определения DayZPlayerImplement.c:306
float m_DamageHitDir
Определения DayZPlayerImplement.c:1298
WeaponManager GetWeaponManager()
Определения DayZPlayerImplement.c:978
void SendCompleteWeaponRaiseJuncture()
bool m_Suicide
Определения DayZPlayerImplement.c:147
AnimBackType GetBackAttachmentType()
Определения DayZPlayerImplement.c:3131
void ShowDeadScreen(bool show, float duration)
Определения DayZPlayerImplement.c:769
void OverrideSlidePoseAngle(float value)
movement sliding override, originally for FB gestures
Определения DayZPlayerImplement.c:3783
float m_WeaponRaiseTime
Определения DayZPlayerImplement.c:136
void StopHandEvent()
Определения DayZPlayerImplement.c:1819
bool IsWeaponRaiseCompleted()
Определения DayZPlayerImplement.c:902
ref DayZPlayerImplementJumpClimb m_JumpClimb
Определения DayZPlayerImplement.c:122
bool m_Camera3rdPerson
Определения DayZPlayerImplement.c:133
bool m_WeaponRaiseCompleted
measures time from the weapon raise start to complete raise (once per)
Определения DayZPlayerImplement.c:137
bool IsTryingHoldBreath()
Определения DayZPlayerImplement.c:340
void ResetDamageHitState(bool resetTimer)
Определения DayZPlayerImplement.c:1402
void SetFallYDiff(float value)
Определения DayZPlayerImplement.c:367
bool IsLanded(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3746
void CompleteWeaponRaise()
Определения DayZPlayerImplement.c:887
float m_SprintedTimePerStanceMin
Определения DayZPlayerImplement.c:129
void OnSoundEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3371
void ShowWeaponDebug(bool show)
Определения DayZPlayerImplement.c:350
float m_FallYDiff
Определения DayZPlayerImplement.c:127
bool m_ShouldBeUnconscious
Определения DayZPlayerImplement.c:149
void SetIronsights(bool value)
Определения DayZPlayerImplement.c:382
ref array< AbstractWave > m_PerformedActionSounds
Определения DayZPlayerImplement.c:173
void TriggerPullPlayerOutOfVehicle()
Определения DayZPlayerImplement.c:544
ref Timer m_ADSAutomationTimer
Определения DayZPlayerImplement.c:3988
bool IsFBSymptomPlaying()
Определения DayZPlayerImplement.c:504
AbstractWave ProcessVoiceEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3595
bool CheckForRespawn(EntityAI item)
Определения DayZPlayerImplement.c:3713
override bool IsEyeZoom()
Legacy.
Определения DayZPlayerImplement.c:291
bool IsLiftWeapon()
bool m_IsShootingFromCamera
Определения DayZPlayerImplement.c:145
bool m_CameraIronsight
Определения DayZPlayerImplement.c:139
void ProcessAttachmentEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3489
void RequestSoundEventEx(EPlayerSoundEventID id, bool from_server_and_client=false, int param=0)
float GetSlidePoseAngle()
Определения DayZPlayerImplement.c:3794
bool CommitedSuicide()
Определения DayZPlayerImplement.c:3818
void OnParticleEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3426
void ~DayZPlayerImplement()
Определения DayZPlayerImplement.c:286
bool HandleDamageHit(int pCurrentCommandID)
Определения DayZPlayerImplement.c:1367
override array< InventoryItem > OnDrawOptics2D()
Определения DayZPlayerImplement.c:3903
void SetIsInThirdPerson(bool state)
Определения DayZPlayerImplement.c:326
bool OnInputUserDataProcess(int userDataType, ParamsReadContext ctx)
Определения DayZPlayerImplement.c:3020
void SetSuicide(bool state)
Определения DayZPlayerImplement.c:3813
bool m_CameraOpticsAimOverride
Определения DayZPlayerImplement.c:141
bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2215
void StopADSTimer()
void HandleWeapons(float pDt, Entity pInHands, HumanInputController pInputs, out bool pExitIronSights)
Определения DayZPlayerImplement.c:984
bool m_IsUnconscious
Определения DayZPlayerImplement.c:148
bool m_ProcessLiftWeapon
Определения DayZPlayerImplement.c:160
ref DayZPlayerMeleeFightLogic_LightHeavy m_MeleeFightLogic
Определения DayZPlayerImplement.c:119
void EOnContact(IEntity other, Contact extra)
Определения DayZPlayerImplement.c:3831
void CheckAnimationOverrides()
Определения DayZPlayerImplement.c:3799
void OnSprintEnd()
Определения DayZPlayerImplement.c:2990
AbstractWave PlaySound(SoundObject so, SoundObjectBuilder sob)
Определения DayZPlayerImplement.c:3218
bool m_ProcessResetADS
Определения DayZPlayerImplement.c:169
bool IsWeaponObstructionBlockingADS()
bool m_CameraZoomToggle
Определения DayZPlayerImplement.c:134
bool ProcessJumpOrClimb(float pDt, int pCurrentCommandID)
Определения DayZPlayerImplement.c:1724
bool m_IsFireWeaponRaised
Определения DayZPlayerImplement.c:3991
ref DayZPlayerImplementAiming m_AimingModel
Определения DayZPlayerImplement.c:117
void RequestSoundEvent(EPlayerSoundEventID id, bool from_server_and_client=false)
bool m_ProcessLiftWeaponState
Определения DayZPlayerImplement.c:161
string GetSurfaceType(SurfaceAnimationBone limbType)
Определения DayZPlayerImplement.c:3203
ref DeathEffectTimer m_DeathEffectTimer
Определения DayZPlayerImplement.c:154
void OnSprintStart()
Определения DayZPlayerImplement.c:2981
void SetClimbingLadderType(string value)
Определения DayZPlayerImplement.c:474
static const float DEFAULT_DYING_TIME
Определения DayZPlayerImplement.c:112
ref DayZPlayerImplementThrowing m_Throwing
Определения DayZPlayerImplement.c:121
override float GetCurrentWaterLevel()
Определения DayZPlayerImplement.c:372
bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2225
void HideClothing(ItemOptics optic, bool state)
Определения DayZPlayerImplement.c:2626
bool CanPickupHeavyItemSwap(notnull EntityAI item1, notnull EntityAI item2)
Определения DayZPlayerImplement.c:3892
override void SetCurrentWaterLevel(float pWaterLevel)
Определения DayZPlayerImplement.c:377
void TriggerPullPlayerOutOfVehicleImpl()
Определения DayZPlayerImplement.c:593
bool m_ContinueFirearmMelee
Определения DayZPlayerImplement.c:157
float m_fObstructionSmooth
Определения DayZPlayerImplement.c:190
bool m_TriggerPullPlayerOutOfVehicleSynch
Определения DayZPlayerImplement.c:183
int m_DeathAnimType
Определения DayZPlayerImplement.c:519
bool IsAlreadyInFallingCommand(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3777
int m_LastCommandBeforeUnconscious
Определения DayZPlayerImplement.c:152
bool IsInFBEmoteState()
Checks if fullbody animation or specific locked state is active in emote manager.
bool CanConsumeStamina(EStaminaConsumers consumer)
Implementations only! - used on PlayerBase.
Определения DayZPlayerImplement.c:480
bool m_DeathJuctureSent
Определения DayZPlayerImplement.c:521
bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
Определения DayZPlayerImplement.c:3761
float m_TestDamageCounter
Определения DayZPlayerImplement.c:2633
bool m_PlayerSelected
Определения DayZPlayerImplement.c:146
override void OnItemInHandsChanged()
Определения DayZPlayerImplement.c:963
static const int DEAD_SCREEN_DELAY
Определения DayZPlayerImplement.c:3986
ref DayZPlayerImplementMeleeCombat m_MeleeCombat
Определения DayZPlayerImplement.c:118
override int CameraHandler(int pCameraMode)
Определения DayZPlayerImplement.c:2777
float m_LastHeadingAngle
Определения DayZPlayerImplement.c:2203
int m_DebugWeaponChangeShowSlot
Определения DayZPlayerImplement.c:2639
override int GetEyeZoomLevel()
Определения DayZPlayerImplement.c:296
Transport GetTransportCache()
Get the transport that was cached when entering unconsciousness.
Определения DayZPlayerImplement.c:524
string m_DebugWeaponChangeItem
Определения DayZPlayerImplement.c:2638
bool CanStartConsumingStamina(EStaminaConsumers consumer)
Определения DayZPlayerImplement.c:481
bool PlaySoundEvent(EPlayerSoundEventID id, bool from_anim_system=false, bool is_from_server=false)
Определения DayZPlayerImplement.c:501
bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2220
bool IsInIronsights()
Определения DayZPlayerImplement.c:311
override bool IsInThirdPerson()
Определения DayZPlayerImplement.c:321
void ProcessFeetDamageServer(int pUserInt)
bool m_IsWeapon
Определения DayZPlayerImplement.c:178
int m_PullPlayerOutOfVehicleState
Определения DayZPlayerImplement.c:185
void SetVariablesLadderSoundObjectBuilder(SoundObjectBuilder soundObjectBuilder)
Определения DayZPlayerImplement.c:3520
DayZPlayerImplementMeleeCombat GetMeleeCombat()
Определения DayZPlayerImplement.c:266
bool m_DebugTypeVal
Определения DayZPlayerImplement.c:2635
bool IsClimbingLadder()
Определения DayZPlayerImplement.c:494
void SetHandheldOpticsInUse(bool state)
Определения DayZPlayerImplement.c:3864
ref array< ref SyncHitInfo > m_SyncedHitDataArray
Определения DayZPlayerImplement.c:172
void OnSyncJuncture(int pJunctureID, ParamsReadContext pCtx)
Определения DayZPlayerImplement.c:3063
DayZPlayerImplementFallDamage GetFallDamage()
Определения DayZPlayerImplement.c:281
ref WeaponDebug m_WeaponDebug
Определения DayZPlayerImplement.c:153
bool m_bADS
Определения DayZPlayerImplement.c:135
float m_LastHeadingAngleBlock
Определения DayZPlayerImplement.c:2201
void OnLadder(float delta_time, HumanMovementState pState)
called every command handler tick when player is on ladder
bool IsSwimming()
Определения DayZPlayerImplement.c:489
void AttenuateSoundIfNecessary(SoundObject soundObject)
Определения DayZPlayerImplement.c:3849
bool m_ProcessWeaponRaiseCompleted
Определения DayZPlayerImplement.c:3990
void EvaluateDamageHit(int pCurrentCommandID)
Must be ran at the start of CommandHandler before Jump is triggered.
Определения DayZPlayerImplement.c:1310
void OnMovementChanged()
Event, called when HumanMovementState.m_iMovement changes...walk, run, sprint, etc....
Определения DayZPlayerImplement.c:2910
bool CanClimb(int climbType, SHumanCommandClimbResult climbRes)
Определения DayZPlayerImplement.c:1779
bool m_PullPlayerOutOfVehicleKeepsInLocalSpace
Определения DayZPlayerImplement.c:184
override bool HeadingModel(float pDt, SDayZPlayerHeadingModel pModel)
is replayed after correction when 'NetworkRewindType.REPLAY' is used
Определения DayZPlayerImplement.c:1593
bool m_CameraOptics
Определения DayZPlayerImplement.c:140
void OnJumpStart()
Определения DayZPlayerImplement.c:1811
void SetOptics(bool value)
Определения DayZPlayerImplement.c:402
bool IsFighting()
void ExitSights()
Определения DayZPlayerImplement.c:418
int m_DebugWeaponChangeStage
Определения DayZPlayerImplement.c:2637
bool IsInFullbodyDamageAnimation()
Определения DayZPlayerImplement.c:1304
bool IsPlayerSelected()
Определения DayZPlayerImplement.c:3803
void SetReturnToOptics(bool state)
ref Timer m_FightEndBlendTimer
Определения DayZPlayerImplement.c:155
bool IsSprintFull()
Определения DayZPlayerImplement.c:345
bool PlaySoundEventType(ESoundEventType soundType, int soundEventID, int param=0)
Handle sound event by respective sound handler based on its type.
Определения DayZPlayerImplement.c:500
float m_LastHeadingAngleBlock2
Определения DayZPlayerImplement.c:2202
bool m_isFBsymptomPlaying
Определения DayZPlayerImplement.c:166
bool CanJump()
Определения DayZPlayerImplement.c:1743
bool m_WasInVehicle
Определения DayZPlayerImplement.c:182
override void OnInputForRemote(ParamsReadContext ctx)
Определения DayZPlayerImplement.c:913
override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
event from damage system
Определения DayZPlayerImplement.c:1521
bool m_WasIronSight
Определения DayZPlayerImplement.c:3992
override void EEKilled(Object killer)
Определения DayZPlayerImplement.c:762
bool m_ResetADS
Определения DayZPlayerImplement.c:168
string m_ClimbingLadderType
Определения DayZPlayerImplement.c:165
float m_ProcessObstructWeapon
Определения DayZPlayerImplement.c:162
float m_DebugDirectionVal
VKOSTIK - tady dat 0 misto -1.
Определения DayZPlayerImplement.c:2634
AnimRangedWeaponType GetShoulderAttachmentType()
Определения DayZPlayerImplement.c:3153
bool m_AimingFinisherStarted
Определения DayZPlayerImplement.c:177
bool IsInVehicle()
Определения DayZPlayerImplement.c:484
void CommandHandlerDebug(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2642
void HandleADS()
Определения DayZPlayerImplement.c:1838
int GetTypeOfDeath(int pCurrentCommandID)
Определения DayZPlayerImplement.c:729
int m_StepCounter
Определения DayZPlayerImplement.c:170
ref HumanMovementState m_MovementState
time step for gradual update of dead screen visibilibty up to full visbility [s]
Определения DayZPlayerImplement.c:116
ref DayZPlayerImplementFallDamage m_FallDamage
Определения DayZPlayerImplement.c:123
int m_ActionSoundCategoryHash
Определения DayZPlayerImplement.c:186
int m_LastBackSoundTime
Определения DayZPlayerImplement.c:2204
void SendDeathJuncture(int pAnimTypeDeath, float pAnimHitDirDeath)
Определения DayZPlayerImplement.c:753
bool IsHandheldOpticsInUse()
Определения DayZPlayerImplement.c:3869
bool m_CameraEyeZoom
DEPRECATED.
Определения DayZPlayerImplement.c:3987
override void OnVariablesSynchronized()
Определения DayZPlayerImplement.c:613
int m_LastSurfaceUnderHash
Определения DayZPlayerImplement.c:163
AnimBootsType GetBootsType()
Определения DayZPlayerImplement.c:3082
float GetWeaponObstruction()
bool IsInOptics()
Определения DayZPlayerImplement.c:316
bool m_IsTryingHoldBreath
Определения DayZPlayerImplement.c:144
bool m_LiftWeapon_player
Определения DayZPlayerImplement.c:158
void SimulateDeath(bool state)
Определения DayZPlayerImplement.c:811
DayZPlayerInventory GetDayZPlayerInventory()
Определения DayZPlayerImplement.c:907
bool EvaluateDamageHitAnimation(TotalDamageResult pDamageResult, int pDamageType, EntityAI pSource, string pComponent, string pAmmoType, vector pModelPos, out int pAnimType, out float pAnimHitDir, out bool pAnimHitFullbody)
selects animation type and direction based on damage system data
Определения DayZPlayerImplement.c:1443
static const float DYING_PROGRESSION_TIME
how long does it take to full death screen [s]
Определения DayZPlayerImplement.c:113
bool IsFireWeaponRaised()
Определения DayZPlayerImplement.c:331
bool HandleDeath(int pCurrentCommandID)
Определения DayZPlayerImplement.c:623
float m_ObstructWeapon_player
Определения DayZPlayerImplement.c:159
const float HIT_INTERVAL_MIN
Определения DayZPlayerImplement.c:1301
bool IsRestrained()
void DayZPlayerImplement()
constructor
Определения DayZPlayerImplement.c:194
bool m_IsRaised
Определения DayZPlayerImplement.c:131
float m_fLastHeadingDiff
Определения DayZPlayerImplement.c:1590
bool m_DamageHitFullbody
Определения DayZPlayerImplement.c:1296
float m_dT
Определения DayZPlayerImplement.c:188
bool CheckForTakeItem(EntityAI item)
Определения DayZPlayerImplement.c:3684
override string GetDebugText()
Определения DayZPlayerImplement.c:529
AnimUpperBodyType GetBodyAttachmentType()
Определения DayZPlayerImplement.c:3100
float m_DamageHealth
Определения DayZPlayerImplement.c:1299
void ProcessWeaponEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3432
bool CanPickupHeavyItem(notnull EntityAI item)
-------------— Checks if player can pick up heavy item ----------------------—
Определения DayZPlayerImplement.c:3887
bool m_ProcessFirearmMeleeHit
Определения DayZPlayerImplement.c:156
SHumanCommandMoveSettings m_MoveSettings
Определения DayZPlayerImplement.c:126
void OnJumpEnd(int pLandType=0)
Определения DayZPlayerImplement.c:1815
void AddNoise(NoiseParams noisePar, float noiseMultiplier=1.0)
Определения DayZPlayerImplement.c:3228
DayZPlayerImplementAiming GetAimingModel()
Определения DayZPlayerImplement.c:261
int m_LastBackSoundTime2
Определения DayZPlayerImplement.c:2205
void CheckLiftWeapon()
float m_DeathDarkeningCurrentTime
Определения DayZPlayerImplement.c:143
bool PlaySoundEventEx(EPlayerSoundEventID id, bool from_anim_system=false, bool is_from_server=false, int param=0)
Определения DayZPlayerImplement.c:502
bool CheckForDropItem(EntityAI item)
Определения DayZPlayerImplement.c:3695
bool m_SprintFull
Определения DayZPlayerImplement.c:130
void HandleOptic(notnull ItemOptics optic, bool inHands, HumanInputController pInputs, out bool pExitOptics)
Определения DayZPlayerImplement.c:1206
bool EvaluateDeathAnimation(int pDamageType, EntityAI pSource, string pAmmoType, out int pAnimType, out float pAnimHitDir)
selects animation type and direction based on damage system data
Определения DayZPlayerImplement.c:1414
void RunADSTimer()
void StopWeaponEvent()
Определения DayZPlayerImplement.c:1824
float m_CurrentWaterLevel
Определения DayZPlayerImplement.c:180
void OnStepEvent(string pEventType, string pUserString, int pUserInt)
Определения DayZPlayerImplement.c:3239
void ResetDeathStartTime()
Определения DayZPlayerImplement.c:724
override bool AimingModel(float pDt, SDayZPlayerAimingModel pModel)
Определения DayZPlayerImplement.c:1681
ref ReplaceSoundEventHandler m_ReplaceSoundEventHandler
Определения DayZPlayerImplement.c:125
DayZPlayerMeleeFightLogic_LightHeavy GetMeleeFightLogic()
Определения DayZPlayerImplement.c:271
void SendSoundEvent(EPlayerSoundEventID id)
float m_fObstructionSmoothVelocity[1]
Определения DayZPlayerImplement.c:191
bool m_ADSTimerLaunched
Определения DayZPlayerImplement.c:3989
void SwitchOptics(ItemOptics optic, bool state)
Определения DayZPlayerImplement.c:447
float GetDeltaT()
Определения DayZPlayerImplement.c:509
void OnInputUserDataReceived(ParamsReadContext ctx)
Определения DayZPlayerImplement.c:3008
override void CommandHandler(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2237
override void OnInputFromServer(ParamsReadContext ctx)
Определения DayZPlayerImplement.c:939
bool IsRaised()
Определения DayZPlayerImplement.c:3878
float m_SoundOffset
Определения DayZPlayerImplement.c:2206
ref DayZPlayerImplementSwimming m_Swimming
Определения DayZPlayerImplement.c:120
bool m_ShouldReload
Определения DayZPlayerImplement.c:132
void SetDeathDarknessLevel(float duration, float tick_time)
void AbortWeaponEvent()
Определения DayZPlayerImplement.c:1829
void DepleteStaminaEx(EStaminaModifiers modifier, float dT=-1, float coef=1.0)
Определения DayZPlayerImplement.c:482
void HandleView()
Определения DayZPlayerImplement.c:1968
ECameraZoomType m_CameraEyeZoomLevel
Определения DayZPlayerImplement.c:138
float m_DeathHitDir
Определения DayZPlayerImplement.c:520
float m_HitElapsedTime
Определения DayZPlayerImplement.c:1302
bool m_UnconsciousDebug
Определения DayZPlayerImplement.c:151
Transport m_TransportCache
Определения DayZPlayerImplement.c:164
static const int DAYZCAMERA_OPTICS
optics
Определения DayZPlayerCameras.c:13
static const int DAYZCAMERA_1ST
1st person camera
Определения DayZPlayerCameras.c:3
static const int DAYZCAMERA_3RD_PRO_RAISED
3rd - laying raised
Определения DayZPlayerCameras.c:10
static const int DAYZCAMERA_3RD_CLIMB
climb / vault
Определения DayZPlayerCameras.c:16
static const int DAYZCAMERA_3RD_CRO_RAISED
3rd - crouch
Определения DayZPlayerCameras.c:8
static const int DAYZCAMERA_3RD_ERC_SPR
3rd - standing sprint
Определения DayZPlayerCameras.c:5
static const int DAYZCAMERA_3RD_PRO
3rd - laying
Определения DayZPlayerCameras.c:9
static const int DAYZCAMERA_3RD_ERC
3rd - standing
Определения DayZPlayerCameras.c:4
static const int DAYZCAMERA_IRONSIGHTS
ironsights camera
Определения DayZPlayerCameras.c:12
static const int DAYZCAMERA_3RD_CRO
3rd - crouch
Определения DayZPlayerCameras.c:7
static const int DAYZCAMERA_3RD_ERC_RAISED
3rd - standing raised
Определения DayZPlayerCameras.c:6
static const int DAYZCAMERA_1ST_UNCONSCIOUS
unconscious
Определения DayZPlayerCameras.c:14
static const int DAYZCAMERA_3RD_ERC_RAISED_MELEE
3rd - laying raised
Определения DayZPlayerCameras.c:11
static const int DAYZCAMERA_1ST_VEHICLE
vehicle 1st person
Определения DayZPlayerCameras.c:18
static const int DAYZCAMERA_3RD_JUMP
jump
Определения DayZPlayerCameras.c:15
override void OnSimulationEnd()
Определения DayZPlayerImplement.c:15
override bool ShouldSimulationBeDisabled()
Определения DayZPlayerImplement.c:44
at which point does the stabilization start to get affected
Определения DayZPlayerImplementAiming.c:33
static bool NoHeading(float pDt, SDayZPlayerHeadingModel pModel, out float pLastHeadingDiff)
Определения DayZPlayerImplementHeading.c:187
static bool RotateOrient(float pDt, SDayZPlayerHeadingModel pModel, out float pLastHeadingDiff)
Определения DayZPlayerImplementHeading.c:67
static bool ClampHeading(float pDt, SDayZPlayerHeadingModel pModel, out float pLastHeadingDiff)
Определения DayZPlayerImplementHeading.c:19
static void SendDamageHitEx(DayZPlayer pPlayer, int pType, float pHitDir, bool pFullbody, TotalDamageResult pDamageResult, int pDamageType, EntityAI pSource, string pComponent, string pAmmoType, vector pModelPos)
Определения DayZPlayerSyncJunctures.c:99
static const int SJ_DEATH
Определения DayZPlayerSyncJunctures.c:18
static bool ReadDamageHitParamsEx(ParamsReadContext pCtx, out SyncHitInfo pData)
Определения DayZPlayerSyncJunctures.c:132
static void SendDeath(DayZPlayer pPlayer, int pType, float pHitDir)
Определения DayZPlayerSyncJunctures.c:65
static const int SJ_DAMAGE_HIT
Определения DayZPlayerSyncJunctures.c:6
static bool ReadDeathParams(ParamsReadContext pCtx, out int pType, out float pHitDir)
Определения DayZPlayerSyncJunctures.c:74
SoundObjectBuilder GetSoundBuilder(int eventId, string slotName, int attachmentHash)
Определения dayzplayer.c:172
SoundObjectBuilder GetSoundBuilder(int eventId, int pMovement, int pSurfaceHash, AnimBootsType pBoots)
Определения dayzplayer.c:148
override SoundObjectBuilder GetSoundBuilder(int eventId, int parameterHash)
Определения DayZPlayerCfgSounds.c:211
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения 3_Game/tools/Debug.c:122
Определения 3_Game/tools/Debug.c:2
Определения EnDebug.c:241
Определения Camera.c:2
void SetVehicleCommand(HumanCommandVehicle hcv)
Определения DayZPlayerImplementVehicle.c:6
void SpawnHitDirEffect(DayZPlayer player, float hit_direction, float intensity_max)
proto static native bool DoClimbTest(Human pHuman, SHumanCommandClimbResult pResult, int pDebugDrawLevel)
command itself
Определения human.c:773
void OnSimulationEnd()
Определения human.c:600
proto native bool IsFinisher()
proto native void Cancel()
cancels command melee and goes to HumanCommandMove
Определения human.c:537
proto native float GetCurrentMovementSpeed()
0,1,2..3 idle, walk, run, sprint
proto native bool IsStandingFromBack()
return true if prone on back is chaning to crounch/stand
proto native bool IsChangingStance()
returns true if character is changing stance
Определения human.c:434
proto native bool IsWakingUp()
proto native bool IsInWater()
proto native bool IsOnLand()
Определения human.c:620
proto native Transport GetTransport()
proto native bool IsGettingIn()
proto native void ProcessLeaveEvents()
proto native bool WasGearChange()
proto native bool IsGettingOut()
Определения human.c:690
proto native bool IsActionFinished()
proto native int GetRunningAction()
returns -1 when no action is running or RELOAD,MECHANISM, ....
proto native void LiftWeapon(bool pState)
command for lifting weapon near obstacles (works only when weapon is raised)
proto native void ObstructWeapon(float pState01)
command for obstruction weapon near obstacles
proto native float GetWeaponObstruction()
return obstruction value
proto native bool IsWeaponLifted()
return if lifting weapon is active
proto native bool StartAction(WeaponActions pAction, int pActionType)
start reload,mechanism,chambering,unjam ...
proto native void SetADS(bool pState)
sets head tilt to optics
proto native int IsEvent()
return -1 when there is no event, otherwise it returns pId of event from animation
Определения human.c:998
proto native bool WeaponADS()
returns true if weapon ADS mode
proto native bool IsZeroingDown()
zeroing down
proto void GetMovement(out float pSpeed, out vector pLocalDirection)
returns pSpeed 0,1..2..3 (idle, walk, run, sprint), local normalized direction vector
proto native void ResetFreeLookToggle()
reset freelook toggle
proto native bool IsAttackButton()
returns true if 'UAFire' button is pressed (== true for multiple ticks). Synced.
proto native bool IsHoldBreath()
holding breath
proto native bool CameraViewChanged()
1st/3rd person camera view
proto native bool IsFireModeChange()
fire mode has changed
proto native bool IsZoomToggle()
zooming toggle
proto native bool IsMeleeWeaponAttack()
return weapon melee attack modifier
proto native bool IsJumpClimb()
jump/climb action was pressed
proto native void ResetADS()
resets ADS mode to default
proto native bool IsZeroingUp()
zeroing up
proto native bool IsAttackButtonDown()
returns true if 'UAFire' button has just been pressed (== true for 1 tick only). Synced.
Определения human.c:18
proto native EntityAI GetEntityInHands()
inventory for plain man/human
Определения HumanInventory.c:10
void CheckFSMState()
Определения HumanInventoryWithFSM.c:134
HumanInventory... with FSM (synchronous, no anims)
Определения HumanInventoryWithFSM.c:6
bool m_bJumpAllowed
default false
Определения humanitems.c:39
int m_StanceRotation[6]
6 stances -> all has movement mask, STANCEIDX_ ... is index
Определения humanitems.c:19
Определения humanitems.c:6
int m_iMovement
current stance (DayZPlayerConstants.STANCEIDX_ERECT, ...), only if the command has a stance
Определения human.c:1155
int m_iStanceIdx
current command's id
Определения human.c:1154
Определения human.c:1152
Определения EnEntity.c:165
proto native void ChangeGameFocus(int add, int input_device=-1)
Change game focus number.
AnimSoundEvent GetSoundEvent(int event_id)
Определения 3_Game/InventoryItemType.c:50
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
InventoryLocation.
Определения InventoryLocation.c:29
provides access to slot configuration
Определения InventorySlots.c:6
proto native bool StepZeroingUp()
sets zeroing to next defined (respective to current) value in zeroing config array
proto native bool ExitOptics()
switches out of optics mode (if possible)
bool IsUsingOptics2DModel()
Returns whether this ItemOptics uses the 2D optics model.
Определения ItemOptics.c:207
void OnOpticExit()
Определения ItemOptics.c:535
proto native bool IsInOptics()
is weapon in optics mode or not
proto native bool IsUsingWeaponIronsightsOverride()
is optics using ironsights override settings or not
void OnOpticEnter()
Определения ItemOptics.c:528
proto native bool EnterOptics()
switches to optics mode if possible
bool IsSightOnly()
Определения ItemOptics.c:213
proto native bool StepZeroingDown()
sets zeroing to previous (respective to current) defined value in zeroing config array
Определения ItemOptics.c:2
Определения KillerData.c:2
static bool IsSyncLogEnable()
Определения 3_Game/tools/Debug.c:678
Определения 3_Game/tools/Debug.c:594
Определения EnMath.c:7
static void PlayVegetationCollideParticles(Object object, DayZPlayerImplement player)
Определения MiscEffects.c:7
Определения MiscEffects.c:2
Hud GetHud()
Определения gameplay.c:721
static float GetNoiseMultiplier(DayZPlayerImplement playerImplement)
Определения SensesAIEvaluate.c:5
static float GetNoiseReduction(Weather weather)
Определения SensesAIEvaluate.c:18
proto void AddNoise(EntityAI source_entity, NoiseParams noise_params, float external_strenght_multiplier=1.0)
Определения ObjectTyped.c:2
static void SetMultiplayState(bool state)
Определения OnlineServices.c:517
Определения OnlineServices.c:2
Определения PPEConstants.c:68
Определения PlayerBaseClient.c:2
static const float WEAPON_RAISE_BLEND_DELAY
Определения PlayerConstants.c:3
static const float FULL_SPRINT_DELAY_DEFAULT
Определения PlayerConstants.c:7
static const float HEAVY_HIT_THRESHOLD
Определения PlayerConstants.c:5
static const int CHECK_EVERY_N_STEP
Определения PlayerConstants.c:21
Определения PlayerConstants.c:2
The class that will be instanced (moddable)
Определения gameplay.c:389
float m_fCurrentAimY
Определения dayzplayer.c:1102
proto void Call(func fn, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
proto void CallLater(func fn, int delay=0, bool repeat=false, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
proto bool Read(void value_in)
Определения Sound.c:112
static int GetStepsParticleID(string surface_name)
Определения Surface.c:3
Определения Surface.c:2
Определения SyncedValue.c:2
override void Stop()
Определения DayZPlayerImplement.c:64
Определения DayZPlayerImplement.c:63
proto native float GetHighestDamage(string healthType)
Определения DamageSystem.c:2
Native class for boats - handles physics simulation.
Определения Boat.c:28
proto native void Unlock()
proto native UAInput GetInputByID(int iID)
returns list of all bindable (i.e. visible) inputs from the active group ('core' by default)
proto native void ActivateModificator(string sModName)
proto native void DeactivateModificator(string sModName)
proto native void Lock()
proto native bool SyncedPress_ID(int action, bool check_focus=true)
Returns true just in frame, when action was invoked (button was pressed)
Определения UAInput.c:97
proto native void ScreenFadeOut(float duration)
void ShowUICursor(bool visible)
Определения UIManager.c:244
proto native void CloseDialog()
proto native void ScreenFadeIn(float duration, string text, int backgroundColor, int textColor)
SoundObjectBuilder GetSoundObjectBuilder()
Определения dayzplayer.c:201
TIntArray GetAnimEventIds()
Определения dayzplayer.c:206
Определения dayzplayer.c:191
shorthand
Определения BoltActionRifle_Base.c:6
Определения WeaponDebug.c:12
script counterpart to engine's class Weapon
Определения WeaponManager.c:2
proto native bool Is3rdPersonDisabled()
proto void SetVoiceOn(bool listening, bool toggled=false)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:97
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
Определения EnConvert.c:271
static const vector Zero
Определения EnConvert.c:110
proto float Normalize()
Normalizes vector. Returns length.
Определения EnConvert.c:106
void DayZPlayerType()
Определения dayzplayer.c:512
proto native void SetVerticalMinimumAimLimit(float value)
sets vertical minimum aim limit for a player
void SDayZPlayerHeadingModel()
cannot be created from script
Определения dayzplayer.c:1089
void ForceStandUpForHeavyItems(notnull EntityAI item)
-------------— Forces player to stand up when swapping to heavy item ----------------------—
Определения dayzplayer.c:1353
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1068
proto native DayZPlayerType GetDayZPlayerType()
returns appropriate DayZPlayerType
proto native DayZPlayerInstanceType GetInstanceType()
proto native float IsPlayerSpeaking()
-------------— speaking anim ----------------------—
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
DayZPlayer m_pPlayer
data
Определения dayzplayer.c:135
int GetEyeZoomLevel()
returns eye zoom level, uses ECameraZoomType values
proto native bool IsPlayerInStance(int pStanceMask)
-------------— camera additiona functions ----------------------—
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
proto void Print(void var)
Prints content of variable to console/log.
static proto int GetEngineValue(int id)
Get value at the given engine id.
static proto int GetValue(int id)
Get value as int from the given script id.
static proto float GetEngineRangeValue(int id)
Get range value at the given engine id.
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
array< string > TStringArray
Определения EnScript.c:709
EntityEvent
Entity events for event-mask, or throwing event from code.
Определения EnEntity.c:45
const int INPUT_DEVICE_MOUSE
Определения 1_Core/constants.c:24
const int INPUT_DEVICE_GAMEPAD
Определения 1_Core/constants.c:28
const int INPUT_DEVICE_KEYBOARD
Определения 1_Core/constants.c:23
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto float Acos(float c)
Returns angle in radians from cosinus.
static proto int AbsInt(int i)
Returns absolute value.
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static const float RAD2DEG
Определения EnMath.c:16
static proto float AbsFloat(float f)
Returns absolute value.
static proto float SmoothCD(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
Does the CD smoothing function - easy in | easy out / S shaped smoothing.
proto native AbstractWave Play3D(SoundObject soundObject, SoundObjectBuilder soundBuilder)
proto native void SetSoundVolume(float vol, float time)
class AbstractSoundScene SoundObjectBuilder(SoundParams soundParams)
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9
void AbstractWave()
Определения Sound.c:167
class SoundObject SoundParams(string name)
proto native void SetSpeechExVolume(float vol, float time)
proto native void SetPosition(vector position)
Note: Sets the position locally if parented, retrieves globally with the sound offset.
proto native void SetVOIPVolume(float vol, float time)
proto native void SetKind(WaveKind kind)
proto native void SetRadioVolume(float vol, float time)
proto native void SetMusicVolume(float vol, float time)
proto native int Length()
Returns length of string.
proto native int Hash()
Returns hash of string.
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Определения EnString.c:396
const int CALL_CATEGORY_GUI
Определения 3_Game/tools/tools.c:9
proto native Widget GetParent()
Get parent of the Effect.
Определения Effect.c:422
class HumanCommandLadder HumanCommandSwim()
Определения human.c:673
WeaponActions
actions
Определения human.c:816
WeaponEvents
events
Определения human.c:967
class HumanCommandMelee2 HumanCommandFall()
Определения human.c:574
proto native bool IsLeavingUncon()
return true if character transitions out of uncon
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1125
void HumanItemAccessor()
Определения humanitems.c:141
class SHumanGlobalSettings SHumanCommandMoveSettings()
Определения humansettings.c:12
class SHumanCommandSwimSettings SHumanCommandClimbSettings()
Определения humansettings.c:74