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