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