DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
PlayerBase.c
См. документацию.
1class PlayerBase extends ManBase
2{
3 const int SIMPLIFIED_SHOCK_CAP = 63;
4 const int SHAKE_LEVEL_MAX = 7;
5 private int m_LifeSpanState;
6 private int m_LastShavedSeconds;
7 private int m_BloodType;
9 private bool m_LiquidTendencyDrain; //client-side only - Obsolete
12
13 protected bool m_HasHeatBuffer;
14 protected int m_HeatBufferStage;
15 protected float m_HeatBufferDynamicMax;
16
17 protected bool m_IsInColdArea;
18 protected bool m_PlayerLoaded;
20 protected bool m_ProcessUIWarning;
22 protected int m_RefreshAnimStateIdx;
23 private int m_StoreLoadVersion;
25 protected int m_LifespanLevelLocal; //control variable for change calls
26 protected int m_AnimCommandStarting; //signals the command that is about to start the next frame (e.g. Swim, Fall...)
28
29 private PluginPlayerStatus m_ModulePlayerStatus;
30 PluginConfigEmotesProfile m_ConfigEmotesProfile;
33
37 PluginRecipesManager m_ModuleRecipesManager;
38 ref BleedingSourcesManagerServer m_BleedingManagerServer;
39 ref BleedingSourcesManagerRemote m_BleedingManagerRemote;
40
52 ref ShockHandler m_ShockHandler; //New shock handler
55 ref TransferValues m_TrasferValues;
57 const int OVERLOAD_LIMIT = 30000;
68 ref Param1<string> m_UAParamMessage;
69 ref Param1<float> m_UnconParam;
70 ref Param1<float> m_DeathDarkeningParam;
76 ref TInputActionMap m_InputActionMap; // Backwards compatibility
80 //ref CraftingMeta m_CraftingMeta;
87 ref PlayerSoundManagerServer m_PlayerSoundManagerServer;
92 bool m_QuickBarFT = false;
94 protected int m_RecipePick;
95 protected bool m_IsHoldingBreath;
96 protected bool m_IsInWater;
98 //AbstractWave m_SaySoundWave;
102 protected int m_CorpseStateLocal;
103 protected bool m_IsHeadingRestricted;
104 protected ref HeadingRestrictData m_HeadingRestrictData;
105
110 float m_CurrentShock; //Used to synchronize shock between server and client
117 bool m_AreHandsLocked; //Currently only used to block quickbar usage after canceling placement
127 protected bool m_AllowQuickRestrain;
128 protected bool m_AllowQuickFishing;
129 protected int m_Shakes;
130 protected int m_ShakesForced;
138 Head_Default m_CharactersHead;
145 int m_BrokenLegState = eBrokenLegs.NO_BROKEN_LEGS; //Describe the current leg state, can go bellow 0, cannot be used directly to obtain broken legs state, use GetBrokenLegs() instead
146 int m_LocalBrokenState = eBrokenLegs.NO_BROKEN_LEGS;
149 const string SOUND_BREAK_LEG = "broken_leg_SoundSet";
150 bool m_CanPlayBrokenLegSound; //Used to check if sound has already been played
151 static bool DEBUG_INVENTORY_ACCESS = false;
152 static ref array<string> m_BleedingSourcesLow; //Stores all LOWER body part bleeding sources
153 static ref array<string> m_BleedingSourcesUp; //Stores all UPPER body part bleeding sources EXCLUDING HEAD
156
157
158 // CONTAMINATED AREA RELATED
160 const string CONTAMINATED_AREA_AMBIENT = "ContaminatedArea_SoundSet";//obsolete, use EffectTrigger::GetAmbientSoundsetName() instead
163 protected int m_EffectAreaCount;
164 protected bool m_InsideEffectArea;
167
168 // effect areas
169 protected EEffectAreaType m_InEffectAreaType; // flags for identifying which area the player is in, synchronized by EffectTriggers
170 protected ref map<EEffectAreaType, int> m_EffectAreaOverlap = new map<EEffectAreaType, int>(); // type -> how many of such areas is player currently in
171 protected ref map<EEffectAreaType, float> m_EffectAreaTimeToTick = new map<EEffectAreaType, float>(); // type -> how long has player spent in an area since last effect tick
174
175 protected string m_CachedPlayerName;//cached from player identity
176 protected string m_CachedPlayerID;//cached from player identity
177
178 #ifdef DIAG_DEVELOPER
179 int m_IsInsideTrigger;
180 bool m_CanBeTargetedDebug; //server-side only
181 ref array<EntityAI> m_PresetItems = new array<EntityAI>;
182 bool m_PresetSpawned;
183 ref CameraToolsMenuClient m_CameraToolsMenuClient;
184 protected PluginTargetTemperature m_TargetTemperatureDiag;
185 #endif
186
187 #ifdef DEVELOPER
188 Transport m_GetInVehicleTransportDebug;
189 #endif
190
191 #ifdef DIAG_DEVELOPER
192 ref Bot m_Bot;
193 #endif
194
195 //Temp QuickBar load
197
198 //hologram
203
204 //Sheduler
205 float m_LastTick = -1;
207 //crafting start
208 int m_RecipeID = -1;
215 //crafting end
220 //input control
222
223 //Action data for base building actions
225 //Action data for fireplace (indoor)
229
231 bool m_IsFighting = false;
232 bool m_IsDrowning;//Set only via the setter SetDrowning
233
234 // debug monitor
236
237 //map
240 bool m_MapCloseRequestProcessed; //DEPRECATED
241 protected bool m_MapClosingSyncSent;
242 protected float m_LastMapScale = -1.0;
245
246 //inventory soft locking
247 protected bool m_InventorySoftLocked; //obsolete, count should be checked instead. Left in here for legacy's sake.
248 protected int m_InventorySoftLockCount = 0;
250
251 //Analytics
254
256 protected bool m_MeleeDebug;
257 //protected bool m_CheckMeleeItem;
259
261 protected string m_UALastMessage;
263 protected int m_PerformedAnimActionID = -1; // animated action being performed, -1 if none
264 protected int m_ActivePrimarySymptomID = 0; // active primary symptom, 0 if none, symptom has to be overriden to allow sync
265
266 bool m_WorkingNVGHeadset; //Deprecated
269 //bool m_PreviousNVGState;
272 PluginAdminLog m_AdminLog;
274
277
283 protected PlayerStat<int> m_StatWet
284 protected PlayerStat<int> m_StatBloodType
285 protected PlayerStat<float> m_StatDiet
286 protected PlayerStat<float> m_StatStamina
287 protected PlayerStat<float> m_StatSpecialty
288 protected PlayerStat<float> m_StatHeatBuffer
289
294
295 //postprocess processing
298
300
304
306
308 {
309 Init();
310 }
311
312 void Init()
313 {
314 SetEventMask(EntityEvent.INIT|EntityEvent.POSTFRAME|EntityEvent.FRAME);
316 m_IsCraftingReady = false;
317 m_Recipes = new array<int>;
319 m_BloodType = 0;
320 m_HasBloodTypeVisible = false;
321 m_LifeSpanState = 0;
323 m_CorpseState = 0;
326 m_PlayerLoaded = false;
327 m_PlayerSelected = false;
328 m_ProcessUIWarning = false;
330 m_LiquidTendencyDrain = false;
331 m_UAParamMessage = new Param1<string>("");
332 m_UnconParam = new Param1<float>(0);
333 m_DeathDarkeningParam = new Param1<float>(0);
334 m_UAParam = new Param2<int,int>(0,0);
336 m_QuickBarBase = new QuickBarBase(this);
337 m_QuickBarBonus = Math.Max(ConfigGetInt("quickBarBonus"), 0);
338 m_CargoLoad = 0;
339 m_VisibilityCoef = 1.0;
341 m_RecipePick = 0;
342 m_ActionQBControl = false;
343 m_QuickBarHold = false;
344 m_HideHairAnimated = true;
345 m_WorkingNVGHeadset = false;
346 m_LoweredNVGHeadset = false;
347 m_AreHandsLocked = false;
349 m_AnimCommandStarting = HumanMoveCommandID.None;
350 m_EmptyGloves = new HiddenSelectionsData(ConfigGetString("emptyGloves"));
352 m_HeadingRestrictData = new HeadingRestrictData();
353
354 #ifdef DIAG_DEVELOPER
355 m_CanBeTargetedDebug = true;
356 //RegisterNetSyncVariableBool("m_CanBeTargetedDebug");
357 #endif
358
360
361 m_StaminaHandler = new StaminaHandler(this);//current stamina calculation
363 m_ShockHandler = new ShockHandler(this); //New shock handler
365 m_PlayerStats = new PlayerStats(this);//player stats
367
368 if (GetGame().IsServer())
369 {
370 m_PlayerStomach = new PlayerStomach(this);
371 m_NotifiersManager = new NotifiersManager(this); // player notifiers
372 m_AgentPool = new PlayerAgentPool(this); // agent pool manager
373 m_BleedingManagerServer = new BleedingSourcesManagerServer(this);
374 m_Environment = new Environment(this);//environment effects on player
375
376 m_ModifiersManager = new ModifiersManager(this); // player modifiers
377 m_PlayerSoundManagerServer = new PlayerSoundManagerServer(this);
378 m_VirtualHud = new VirtualHud(this);
379
380 m_AdminLog = PluginAdminLog.Cast(GetPlugin(PluginAdminLog));
381 }
382
383 m_SymptomManager = new SymptomManager(this); // state manager
384 m_ModuleRecipesManager = PluginRecipesManager.Cast(GetPlugin(PluginRecipesManager));
385
386 m_TrasferValues = new TransferValues(this);
387 m_EmoteManager = new EmoteManager(this);
388 m_SoftSkillsManager = new SoftSkillsManager(this);//Soft Skills calculation
389
390 m_WeaponManager = new WeaponManager(this);
393
394 if (!GetGame().IsDedicatedServer())
395 {
396 m_MeleeDebug = false;
397 m_UALastMessage = "";
400 m_BleedingManagerRemote = new BleedingSourcesManagerRemote(this);
403 m_ActionsInitialize = false;
405
411 }
412
413 m_ActionManager = NULL;
414
415 m_ConfigEmotesProfile = PluginConfigEmotesProfile.Cast(GetPlugin(PluginConfigEmotesProfile));
416
417 if (GetDayZGame().IsDebug())
418 {
419 PluginConfigDebugProfileFixed m_ConfigDebugProfileFixed = PluginConfigDebugProfileFixed.Cast(GetPlugin(PluginConfigDebugProfileFixed));
421 PluginDeveloper m_Developer = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
422
423 PlayerBase player = this;
424
426 {
427 string default_preset = m_ConfigDebugProfile.GetDefaultPreset();
428 if (player && default_preset != "")
429 {
430 TStringArray preset_array = new TStringArray;
431 m_ConfigDebugProfileFixed.GetPresetItems(default_preset, preset_array);
432
433 bool is_preset_fixed = true;
434 if (preset_array.Count() == 0)
435 {
436 m_ConfigDebugProfile.GetPresetItems(default_preset, preset_array);
437 is_preset_fixed = false;
438 }
439
440 if (preset_array.Count() > 0)
441 {
442 m_Developer.ClearInventory(player);
443
444 for (int i = 0; i < preset_array.Count(); i++)
445 {
446 float health = -1;
447 int quantity = -1;
448 if (is_preset_fixed)
449 {
450 health = m_ConfigDebugProfileFixed.GetItemHealth(default_preset, i);
451 quantity = m_ConfigDebugProfileFixed.GetItemQuantity(default_preset, i);
452 }
453 else
454 {
455 health = m_ConfigDebugProfile.GetItemHealth(default_preset, i);
456 quantity = m_ConfigDebugProfile.GetItemQuantity(default_preset, i);
457 }
458 m_Developer.SpawnEntityInPlayerInventory(player, preset_array.Get(i), health, quantity);
459 }
460 }
461 }
462 }
463 }
464
466
468
469 m_ModulePlayerStatus = PluginPlayerStatus.Cast(GetPlugin(PluginPlayerStatus));
471
473 m_BleedingSourcesLow.Insert("RightToeBase");
474 m_BleedingSourcesLow.Insert("RightFoot");
475 m_BleedingSourcesLow.Insert("LeftToeBase");
476 m_BleedingSourcesLow.Insert("LeftFoot");
477 m_BleedingSourcesLow.Insert("RightUpLegRoll");
478 m_BleedingSourcesLow.Insert("RightUpLeg");
479 m_BleedingSourcesLow.Insert("RightLegRoll");
480 m_BleedingSourcesLow.Insert("RightLeg");
481 m_BleedingSourcesLow.Insert("LeftUpLegRoll");
482 m_BleedingSourcesLow.Insert("LeftUpLeg");
483 m_BleedingSourcesLow.Insert("LeftLegRoll");
484 m_BleedingSourcesLow.Insert("LeftLeg");
485
487 m_BleedingSourcesUp.Insert("RightForeArmRoll");
488 m_BleedingSourcesUp.Insert("LeftForeArmRoll");
489 m_BleedingSourcesUp.Insert("RightForeArm");
490 m_BleedingSourcesUp.Insert("RightArmRoll");
491 m_BleedingSourcesUp.Insert("RightArm");
492 m_BleedingSourcesUp.Insert("RightShoulder");
493 m_BleedingSourcesUp.Insert("LeftForeArm");
494 m_BleedingSourcesUp.Insert("LeftArmRoll");
495 m_BleedingSourcesUp.Insert("LeftArm");
496 m_BleedingSourcesUp.Insert("LeftShoulder");
497 m_BleedingSourcesUp.Insert("Spine3");
498 m_BleedingSourcesUp.Insert("Spine2");
499 m_BleedingSourcesUp.Insert("Spine1");
500 m_BleedingSourcesUp.Insert("Spine");
501 m_BleedingSourcesUp.Insert("Pelvis");
502 m_BleedingSourcesUp.Insert("Neck");
503
504 RegisterNetSyncVariableInt("m_PersistentFlags", 0, 1<<(EnumTools.GetEnumSize(PersistentFlag) + 1));
505 RegisterNetSyncVariableInt("m_LifeSpanState", LifeSpanState.BEARD_NONE, LifeSpanState.COUNT);
506 RegisterNetSyncVariableInt("m_BloodType", 0, 128);
507 RegisterNetSyncVariableInt("m_ShockSimplified",0, SIMPLIFIED_SHOCK_CAP);
508 RegisterNetSyncVariableInt("m_SoundEvent",0, EPlayerSoundEventID.ENUM_COUNT - 1);
509 RegisterNetSyncVariableInt("m_SoundEventParam", 0, ((EPlayerSoundEventParam.ENUM_COUNT - 1) * 2) - 1);
510 RegisterNetSyncVariableInt("m_StaminaState",0, eStaminaState.COUNT - 1);
511 RegisterNetSyncVariableInt("m_BleedingBits");
512 RegisterNetSyncVariableInt("m_Shakes", 0, SHAKE_LEVEL_MAX);
513 RegisterNetSyncVariableInt("m_BreathVapour", 0, BREATH_VAPOUR_LEVEL_MAX);
514 RegisterNetSyncVariableInt("m_HealthLevel", eInjuryHandlerLevels.PRISTINE, eInjuryHandlerLevels.RUINED);
515 RegisterNetSyncVariableInt("m_MixedSoundStates", 0, eMixedSoundStates.COUNT - 1);
516 RegisterNetSyncVariableInt("m_CorpseState",-PlayerConstants.CORPSE_STATE_DECAYED,PlayerConstants.CORPSE_STATE_DECAYED);//do note the negative min, negative sign denotes a special meaning
517 RegisterNetSyncVariableInt("m_RefreshAnimStateIdx",0,3);
518 RegisterNetSyncVariableInt("m_BrokenLegState", -eBrokenLegs.BROKEN_LEGS_SPLINT, eBrokenLegs.BROKEN_LEGS_SPLINT);
519 RegisterNetSyncVariableInt("m_SyncedModifiers", 0, ((eModifierSyncIDs.LAST_INDEX - 1) * 2) - 1);
520 RegisterNetSyncVariableInt("m_HasBloodyHandsVisible", 0, eBloodyHandsTypes.LAST_INDEX - 1);
521 RegisterNetSyncVariableInt("m_ActionSoundCategoryHash");
522 RegisterNetSyncVariableInt("m_PerformedAnimActionID", -1, 2048); // generous upper limit for modding reasons
523 RegisterNetSyncVariableInt("m_ActivePrimarySymptomID", 0, SymptomIDs.LAST_INDEX);
524
525 RegisterNetSyncVariableInt("m_HeatBufferStage", 0, HeatBufferMdfr.NUMBER_OF_STAGES - 1);
526 RegisterNetSyncVariableFloat("m_HeatBufferDynamicMax", 0.0, 1.0, 2);
527
528 RegisterNetSyncVariableBool("m_IsUnconscious");
529 RegisterNetSyncVariableBool("m_IsRestrained");
530 RegisterNetSyncVariableBool("m_IsInWater");
531 RegisterNetSyncVariableBool("m_InsideEffectArea");
532
533 RegisterNetSyncVariableBool("m_HasBloodTypeVisible");
534 RegisterNetSyncVariableBool("m_IsRestrainStarted");
535 RegisterNetSyncVariableBool("m_IsRestrainPrelocked");
536 RegisterNetSyncVariableBool("m_HasHeatBuffer");
537 RegisterNetSyncVariableBool("m_IsInColdArea");
538
539 RegisterNetSyncVariableFloat("m_CurrentShock"); //Register shock synchronized variable
540
541 m_OriginalSlidePoseAngle = GetSlidePoseAngle();
542
545
546 m_DecayedTexture = ConfigGetString("decayedTexture");
547 m_FliesIndex = -1;
548
550
552 }
553
561
569
571 {
572 if ((m_MedicalDrugsActive & drugType) != drugType)
574 }
575
577 {
578 if ((m_MedicalDrugsActive & drugType) == drugType)
579 m_MedicalDrugsActive &= ~drugType;
580 }
581
583 {
584 return (m_MedicalDrugsActive & EMedicalDrugsType.CHELATION) == EMedicalDrugsType.CHELATION;
585 }
586
588 {
589 return (m_MedicalDrugsActive & EMedicalDrugsType.ANTIBIOTICS) == EMedicalDrugsType.ANTIBIOTICS;
590 }
591
592 void SetSoundCategoryHash(int hash)
593 {
594 m_ActionSoundCategoryHash = hash;
595 SetSynchDirty();
596 }
597
599 {
601 SetSynchDirty();
602 }
603
605 {
607 }
608
609 void SetActivePrimarySymptomID(SymptomIDs id)
610 {
612 SetSynchDirty();
613 }
614
616 {
618 }
619
620 void RequestTriggerEffect(EffectTrigger trigger, int ppeIdx = -1, int aroundId = ParticleList.CONTAMINATED_AREA_GAS_AROUND, int tinyId = ParticleList.CONTAMINATED_AREA_GAS_TINY, string soundset = "", bool partDynaUpdate = false, int newBirthRate = 0, bool forceUpdate = false)
621 {
622 //do note multiple triggers can be calling this method within a single frame depending on the contaminated area setup and dynamic gameplay events(such as gas grenades being deployed)
623
625 return;
626 bool allow = false;
628 {
629 allow = true;
630 }
631 else if (trigger == m_CurrentEffectTrigger && forceUpdate)
632 {
633 allow = true;
634 //Print("ON Enabling effect FORCED " + trigger);
635 }
636 else if (trigger.GetEffectsPriority() > m_CurrentEffectTrigger.GetEffectsPriority())
637 {
639 allow = true;
640 }
641 if (allow)
642 {
643 /*
644 Print("--------------------------------------------------");
645 Print("ON Enabling effect " + trigger);
646 Print("------------> soundset " + soundset);
647 Print("--------------------------------------------------");
648 */
649 m_CurrentEffectTrigger = trigger;
650 SetContaminatedEffectEx( true, ppeIdx, aroundId, tinyId, soundset,partDynaUpdate, newBirthRate );
651 }
652 }
653
654
656 {
658 {
659 /*
660 Print("--------------------------------------------------");
661 Print("OFF Disabling effect");
662 Print("--------------------------------------------------");
663 */
664 SetContaminatedEffectEx( false, m_CurrentEffectTrigger.m_PPERequester );
666 }
667 }
668
675
686 {
687 if (m_EffectAreaCount == 0)
688 {
689 m_InsideEffectArea = true;
690 SetSynchDirty();
692 }
694 }
695
697 {
699 if (m_EffectAreaCount <= 0)
700 {
702 m_InsideEffectArea = false;
703 SetSynchDirty();
705 }
706 }
707
708 void SetInEffectAreaTypeFlag(EEffectAreaType flag)
709 {
710 int areaCount = m_EffectAreaOverlap.Get(flag);
711
712 if (areaCount > 0)
713 m_EffectAreaOverlap.Set(flag, m_EffectAreaOverlap.Get(flag) + 1);
714 else
715 m_EffectAreaOverlap.Set(flag, 1);
716
717 m_InEffectAreaType |= flag;
718 }
719
720 void UnsetInEffectAreaTypeFlag(EEffectAreaType flag)
721 {
722 int areaCount = m_EffectAreaOverlap.Get(flag);
723
724 if (areaCount > 1)
725 m_EffectAreaOverlap.Set(flag, m_EffectAreaOverlap.Get(flag) - 1);
726 else
727 {
728 m_EffectAreaOverlap.Set(flag, 0);
729 m_InEffectAreaType &= ~flag;
730 }
731 }
732
733 bool IsInEffectArea(EEffectAreaType area)
734 {
735 if (m_InEffectAreaType & area)
736 return true;
737
738 return false;
739 }
740
741 // Server side update when player is present in any effect area
742 protected void OnUpdateEffectAreaServer(float timeSlice)
743 {
744 float timeSpent;
745
746 if (IsInEffectArea(EEffectAreaType.HOT_SPRING))
747 {
748 float waterLevel = GetCurrentWaterLevel();
749 if (waterLevel > 0.5)
750 {
751 timeSpent = m_EffectAreaTimeToTick.Get(EEffectAreaType.HOT_SPRING);
752 timeSpent += timeSlice;
754 {
755 m_EffectAreaTimeToTick.Set(EEffectAreaType.HOT_SPRING, 0);
757 }
758 else
759 m_EffectAreaTimeToTick.Set(EEffectAreaType.HOT_SPRING, timeSpent);
760 }
761 }
762
763 if (IsInEffectArea(EEffectAreaType.VOLCANIC))
764 {
765 timeSpent = m_EffectAreaTimeToTick.Get(EEffectAreaType.VOLCANIC);
766 timeSpent += timeSlice;
768 {
769 m_EffectAreaTimeToTick.Set(EEffectAreaType.VOLCANIC, 0);
771 }
772 else
773 m_EffectAreaTimeToTick.Set(EEffectAreaType.VOLCANIC, timeSpent);
774 }
775 }
776
778 {
779 GetModifiersManager().ActivateModifier( eModifiers.MDF_AREAEXPOSURE );
780 //Print("Contaminated ENTERED <------------------------------------------------------------- FINAL");
781 }
782
784 {
785 GetModifiersManager().DeactivateModifier( eModifiers.MDF_AREAEXPOSURE );
786 //Print("Contaminated LEFT <------------------------------------------------------------- FINAL");
787 }
788
790 {
791 //Print("ANY EFFECT AREA ENTERED <------------------------------------------------------------- FINAL");
792 }
793
795 {
796 //Print("ANY EFFECT AREA LEFT <------------------------------------------------------------- FINAL");
797 }
798
800 {
801 //Print("ANY EFFECT AREA ENTERED CLIENT <------------------------------------------------------------- FINAL");
802 }
803
805 {
807 //Print("ANY EFFECT AREA LEFT CLIENT <------------------------------------------------------------- FINAL");
808 }
809
811 ItemBase GetItemOnSlot(string slot_type)
812 {
813 int slot_id = InventorySlots.GetSlotIdFromString(slot_type);
814 EntityAI item_EAI = this.GetInventory().FindAttachment(slot_id);
815 ItemBase item_IB = ItemBase.Cast(item_EAI);
816
817 if (item_EAI && !item_IB)
818 {
819 string str = "Warning! GetItemOnSlot() >> found item on slot " + slot_type + " can't be cast to ItemBase! Found item is " + item_EAI.GetType() + " and the player is " + GetType() + "!";
820 Error(str);
821 return null;
822 }
823
824 return item_IB;
825 }
826
829 {
830 return GetItemOnSlot("Headgear");
831 }
832
833 override int GetQuickBarBonus()
834 {
835 return m_QuickBarBonus;
836 }
837
838 //--------------------------------------------------------------------------
839 // Inventory overrides
840 //--------------------------------------------------------------------------
841 override bool CanDropEntity (notnull EntityAI item)
842 {
843 if (GetInventory().HasInventoryReservation(item, null))
844 {
845 return false;
846 }
847
848 if (IsRestrained())
849 {
850 if (GetHumanInventory().GetEntityInHands() == item)
851 return false;
852 }
853
854 return true;
855 }
856
857 //--------------------------------------------------------------------------
858 // PLAYER DAMAGE EVENT HANDLING
859 //--------------------------------------------------------------------------
860
862 {
863 return m_BreathVapour;
864 }
865
866 // adds state to and syncs sound states variable which is used to generate sound client-side
868 {
869 int bit_mask_remove = ~state;
870
871 eMixedSoundStates new_states = m_MixedSoundStates & bit_mask_remove;
872
873 if (new_states != m_MixedSoundStates)
874 {
875 m_MixedSoundStates = new_states;
876 SetSynchDirty();
877 }
878 }
879
880 // adds state to and syncs sound states variable which is used to generate sound client-side
882 {
883 eMixedSoundStates new_states = m_MixedSoundStates | state;
884
885 if (new_states != m_MixedSoundStates)
886 {
887 m_MixedSoundStates = new_states;
888 SetSynchDirty();
889 }
890 }
891
892 override bool IsPlayer()
893 {
894 return true;
895 }
896
898 {
899 return (m_BleedingBits != 0);
900 }
901
902 void SetBleedingBits(int bits)
903 {
904 if (m_BleedingBits != bits)
905 {
906 if (m_BleedingBits == 0)
907 {
909 }
910 else if (bits == 0)
911 {
913 }
914 }
915 m_BleedingBits = bits;
916 SetSynchDirty();
917 }
918
920 {
921 return m_BleedingBits;
922 }
923
925 {
927 }
928
930 {
932 }
933
935 {
937 }
938
940 {
942 }
943
944
946 {
947 return m_HealingsCount;//0 for no healings, 1+ for healings, gets truncated to 1
948 }
949
951 {
952 return m_DiseaseCount;//0 for no disease, 1+ for disease, gets truncated to 1
953 }
954
955
957 {
958 return m_PulseType;
959 }
960
961 void SetPulseType(EPulseType pulse_type)
962 {
963 m_PulseType = pulse_type;
964 }
965
967 {
968 m_ProcessAddEffectWidgets.InsertArray(effects);
969 }
970
972 {
973 m_ProcessRemoveEffectWidgets.InsertArray(effects);
974 }
975
977 {
979 }
980
982 {
984 }
985
990
992 {
994 {
995 delete m_DamageDealtEffect;
996 }
997
999 {
1001 }
1002 }
1003
1004 void SpawnDamageDealtEffect2(Param param1 = null, Param param2 = null)
1005 {
1006 if (m_EffectRadial)
1007 {
1008 delete m_EffectRadial;
1009 }
1010
1011 m_EffectRadial = new EffectRadial(param1,param2);
1012 }
1013
1018
1019 void SpawnFlashbangEffect(PlayerBase player, bool visual)
1020 {
1022 {
1023 m_FlashbangEffect.Stop();
1024 delete m_FlashbangEffect;
1025 }
1026
1027 m_FlashbangEffect = new FlashbangEffect(player, visual);
1028 }
1029
1034
1035 void SpawnShockEffect(float intensity_max)
1036 {
1038 {
1039 delete m_ShockDealtEffect;
1040 }
1041
1042 m_ShockDealtEffect = new ShockDealtEffect(intensity_max);
1043 }
1044
1045 override void EEKilled(Object killer)
1046 {
1047 //Print(Object.GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " event EEKilled, player has died at STS=" + GetSimulationTimeStamp());
1048
1049 if (m_AdminLog)
1050 {
1051 m_AdminLog.PlayerKilled(this, killer);
1052 }
1053
1055 delete GetBleedingManagerServer();
1056
1057 // kill character in database
1058 if (GetHive())
1059 {
1060 GetHive().CharacterKill(this);
1061 }
1062
1063 // disable voice communication
1064 GetGame().EnableVoN(this, false);
1065 if (!GetGame().IsDedicatedServer())
1067 GetSymptomManager().OnPlayerKilled();
1068
1069 if (GetEconomyProfile() && !m_CorpseProcessing && m_CorpseState == 0 && GetGame().GetMission().InsertCorpse(this))
1070 {
1071 m_CorpseProcessing = true;
1072 //Print("EEKilled - processing corpse");
1073 }
1074
1075 if (GetGame().IsMultiplayer() && GetGame().IsServer())
1076 {
1077 if (GetGame().GetMission())
1078 {
1079 GetGame().GetMission().SyncRespawnModeInfo(GetIdentity());
1080 }
1081 }
1082
1083 super.EEKilled(killer);
1084 }
1085
1086 override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
1087 {
1088 super.EEHitBy(damageResult, damageType, source, component, dmgZone, ammo, modelPos, speedCoef);
1089
1090 if (m_AdminLog)
1091 {
1092 m_AdminLog.PlayerHitBy(damageResult, damageType, this, source, component, dmgZone, ammo);
1093 }
1094
1095 if (damageResult != null && damageResult.GetDamage(dmgZone, "Shock") > 0)
1096 {
1098
1099 if (!IsUnconscious())
1100 {
1101 if (GetGame().ConfigIsExisting("cfgAmmo " + ammo + " unconRefillModifier"))
1102 {
1103 m_UnconRefillModifier = GetGame().ConfigGetInt("cfgAmmo " + ammo + " unconRefillModifier");
1104 }
1105 else
1106 {
1108 }
1109 }
1110 }
1111
1113 if (damageType == DamageType.EXPLOSION && ammo == "FlashGrenade_Ammo")
1114 {
1115 GetStaminaHandler().DepleteStamina(EStaminaModifiers.OVERALL_DRAIN);
1116 }
1117
1118 //new bleeding computation
1119 //---------------------------------------
1120 if (damageResult != null && GetBleedingManagerServer())
1121 {
1122 float dmg = damageResult.GetDamage(dmgZone, "Blood");
1123 GetBleedingManagerServer().ProcessHit(dmg, source, component, dmgZone, ammo, modelPos);
1124 }
1125 //---------------------------------------
1126
1127 #ifdef DIAG_DEVELOPER
1128 if (DiagMenu.GetBool(DiagMenuIDs.MELEE_DEBUG))
1129 Print("EEHitBy() | " + GetDisplayName() + " hit by " + source.GetDisplayName() + " to " + dmgZone);
1130
1131 PluginRemotePlayerDebugServer plugin_remote_server = PluginRemotePlayerDebugServer.Cast(GetPlugin(PluginRemotePlayerDebugServer));
1132 if (plugin_remote_server)
1133 {
1134 plugin_remote_server.OnDamageEvent(this, damageResult);
1135 }
1136 #endif
1137
1138 if (GetGame().IsDebugMonitor())
1139 m_DebugMonitorValues.SetLastDamage(source.GetDisplayName());
1140
1141 if (m_ActionManager)
1142 m_ActionManager.Interrupt();
1143
1144 int transferShockToDamageCoef = g_Game.ConfigGetInt(string.Format("%1 %2 DamageApplied transferShockToDamage", CFG_AMMO, ammo));
1145 if (transferShockToDamageCoef == 1)
1146 {
1147 //Print("PlayerBase | EEHitBy | nonlethal hit");
1148 AddHealth("", "Health", -ConvertNonlethalDamage(damageResult.GetDamage(dmgZone, "Shock"), damageType));
1149 if (dmgZone != "Head")
1150 AddHealth(dmgZone, "Health", -damageResult.GetDamage(dmgZone, "Shock")); //Also deal damage to zone health, no dmg reduction
1151 }
1152
1153 if (GetGame().IsServer())
1154 {
1155 if (GetHealth("RightLeg", "Health") <= 1 || GetHealth("LeftLeg", "Health") <= 1 || GetHealth("RightFoot", "Health") <= 1 || GetHealth("LeftFoot", "Health") <= 1)
1156 {
1157 if (GetModifiersManager().IsModifierActive(eModifiers.MDF_BROKEN_LEGS))//effectively resets the modifier
1158 {
1159 GetModifiersManager().DeactivateModifier(eModifiers.MDF_BROKEN_LEGS);
1160 }
1161 GetModifiersManager().ActivateModifier(eModifiers.MDF_BROKEN_LEGS);
1162 }
1163
1164 if (ammo == "Bullet_CupidsBolt" && IsAlive())
1165 {
1166 DamageSystem.ResetAllZones(this);
1167 m_ModifiersManager.ResetAll();
1168 m_ModifiersManager.ActivateModifier(eModifiers.MDF_IMMUNITYBOOST);
1169
1170 // bleeding sources
1172 m_BleedingManagerServer.RemoveAllSources();
1173
1174 // Stats
1175 if (GetPlayerStats())
1176 {
1177 int bloodType = GetStatBloodType().Get();
1178 float energyValue = GetStatEnergy().Get();
1179 float waterValue = GetStatWater().Get();
1180 float heatBuffer = GetStatHeatBuffer().Get();
1181 float heatComfort = GetStatHeatComfort().Get();
1182
1183 GetPlayerStats().ResetAllStats();
1184
1185 GetStatBloodType().Set(bloodType);
1186 GetStatWater().Set(waterValue);
1187 GetStatEnergy().Set(energyValue);
1188 GetStatHeatBuffer().Set(heatBuffer);
1189 GetStatHeatComfort().Set(heatComfort);
1190 }
1191
1192 // Agents
1193 if (m_AgentPool)
1194 m_AgentPool.RemoveAllAgents();
1195
1196 if (m_StaminaHandler)
1198
1199 // uncon
1200 if (IsUnconscious())
1202 }
1203 }
1204
1205 m_ShockHandler.CheckValue(true);
1206
1207 //analytics
1208 GetGame().GetAnalyticsServer().OnEntityHit(source, this);
1209 }
1210
1211 override void EEHitByRemote(int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos)
1212 {
1213 super.EEHitByRemote(damageType, source, component, dmgZone, ammo, modelPos);
1214
1215 if (m_MeleeFightLogic.IsInBlock())
1216 {
1217 EffectSound sound = SEffectManager.PlaySoundOnObject("BlockingAttack_SoundSet", this);
1218 sound.SetAutodestroy(true);
1219 }
1220 }
1221
1222 override void EEDelete(EntityAI parent)
1223 {
1225 StopSoundSet(m_SoundFliesEffect);
1226
1227 if (GetArrowManager())
1229 }
1230
1231 override protected float ConvertNonlethalDamage(float damage, DamageType damageType)
1232 {
1233 if (damageType == DamageType.FIRE_ARM)
1235
1236 return super.ConvertNonlethalDamage(damage, damageType);
1237 }
1238
1242 override void OnReceivedHit(ImpactEffectsData hitData)
1243 {
1244 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
1245 {
1246 float shakeStrength = Math.InverseLerp(0, 500, hitData.m_InSpeed.Length());
1247 GetCurrentCamera().SpawnCameraShake(shakeStrength);
1249 }
1250
1251 if (hitData.m_AmmoType == "Bullet_CupidsBolt")
1252 Ammo_CupidsBolt.PlayOnHitParticle(hitData.m_Position);
1253 }
1254
1255 // DEPRECATED by method OnReceivedHit
1256 override void OnPlayerRecievedHit()
1257 {
1258 #ifndef NO_GUI
1259 if (m_MeleeFightLogic.IsInBlock())
1260 {
1261 EffectSound sound = SEffectManager.PlaySoundOnObject("BlockingAttack_SoundSet", this);
1262 sound.SetAutodestroy(true);
1263 return;
1264 }
1265
1270
1271 CloseMapEx(true);
1272 #endif
1273 }
1274
1276 {
1277 SpawnFlashbangEffect(this, visual);
1278 }
1279
1281
1282 //--------------------------------------------------------------------------
1284 //--------------------------------------------------------------------------
1285
1287 override string GetHitComponentForAI()
1288 {
1289 return GetDayZPlayerType().GetHitComponentForAI();
1290 }
1291
1293 override string GetDefaultHitComponent()
1294 {
1295 return GetDayZPlayerType().GetDefaultHitComponent();
1296 }
1297
1299 {
1300 return m_DefaultHitPosition;
1301 }
1302
1305 {
1306 return GetDayZPlayerType().GetSuitableFinisherHitComponents();
1307 }
1308
1309 protected vector SetDefaultHitPosition(string pSelection)
1310 {
1311 return GetSelectionPositionMS(pSelection);
1312 }
1313
1314 //--------------------------------------------------------------------------
1320
1325 //--------------------------------------------------------------------------
1326 override void EEItemAttached(EntityAI item, string slot_name)
1327 {
1328 super.EEItemAttached(item, slot_name);
1329
1330 ItemBase itemIB = ItemBase.Cast(item);
1331 SwitchItemSelectionTexture(item, slot_name);
1332 Param1<PlayerBase> p = new Param1<PlayerBase>(this);
1333 item.SwitchItemSelectionTextureEx(EItemManipulationContext.ATTACHING, p);
1334 m_QuickBarBase.updateSlotsCount();
1336 UpdateShoulderProxyVisibility(item, slot_name);
1337
1338 HideHairSelections(itemIB,true);
1339
1341 Clothing clothing = Clothing.Cast(item);
1342 if (clothing)
1343 {
1344 if (!GetGame().IsDedicatedServer())
1345 {
1346 if (clothing.GetEffectWidgetTypes())
1347 {
1348 QueueAddEffectWidget(clothing.GetEffectWidgetTypes());
1349 }
1350
1351 if (clothing.GetGlassesEffectID() > -1)
1352 {
1353 QueueAddGlassesEffect(clothing.GetGlassesEffectID());
1354 }
1355
1356 GetGame().GetCallQueue(CALL_CATEGORY_GUI).CallLater(UpdateCorpseStateVisual, 200, false);//sometimes it takes a while to load in
1357 UpdateCorpseStateVisual();//....but if possible, we don't want a delay
1358 }
1359 else if (GetGame().IsServer())
1360 {
1361 if (clothing.IsGasMask())
1362 {
1363 GetModifiersManager().ActivateModifier(eModifiers.MDF_MASK);
1364 }
1365 }
1366
1367 clothing.UpdateNVGStatus(this,true);
1368 }
1369
1370 AdjustBandana(item,slot_name);
1371 AdjustShemag(item,slot_name);
1372 }
1373
1374 override void EEItemDetached(EntityAI item, string slot_name)
1375 {
1376 super.EEItemDetached(item, slot_name);
1377 ItemBase item_base = ItemBase.Cast(item);
1378 SwitchItemSelectionTexture(item, slot_name);
1379 item.SwitchItemSelectionTextureEx(EItemManipulationContext.DETACHING);
1380 m_QuickBarBase.updateSlotsCount();
1382
1383 HideHairSelections(item_base,false);
1384
1385 Clothing clothing = Clothing.Cast(item);
1386
1387 if (clothing)
1388 {
1389 if (!GetGame().IsDedicatedServer())
1390 {
1391 if (clothing.GetEffectWidgetTypes())
1392 {
1393 QueueRemoveEffectWidget(clothing.GetEffectWidgetTypes());
1394 }
1395
1396 if (clothing.GetGlassesEffectID() > -1)
1397 {
1398 QueueRemoveGlassesEffect(clothing.GetGlassesEffectID());
1399 }
1400 }
1401
1402 if (GetGame().IsServer())
1403 {
1404 if (clothing.IsGasMask())
1405 {
1406 GetModifiersManager().DeactivateModifier(eModifiers.MDF_MASK);
1407 }
1408 }
1409
1410 clothing.UpdateNVGStatus(this);
1411 GetGame().GetCallQueue(CALL_CATEGORY_GUI).CallLater(UpdateCorpseStateVisual, 200, false);//sometimes it takes a while to load in
1412 UpdateCorpseStateVisual();//....but if possible, we don't want a delay
1413 }
1414 }
1415
1416 void UpdateShoulderProxyVisibility(EntityAI item, string slot_name)
1417 {
1418 string slot = slot_name;
1419 bool boo;
1420 boo = item.IsWeapon();
1421
1422 if (slot == "Melee")
1423 {
1424 SetSimpleHiddenSelectionState(SIMPLE_SELECTION_MELEE_RIFLE,boo);
1425 SetSimpleHiddenSelectionState(SIMPLE_SELECTION_MELEE_MELEE,!boo);
1426 }
1427 else if (slot == "Shoulder")
1428 {
1429 SetSimpleHiddenSelectionState(SIMPLE_SELECTION_SHOULDER_RIFLE,boo);
1430 SetSimpleHiddenSelectionState(SIMPLE_SELECTION_SHOULDER_MELEE,!boo);
1431 }
1432 }
1433
1434 override void SwitchItemSelectionTexture(EntityAI item, string slot_name)
1435 {
1436 super.SwitchItemSelectionTexture(item,slot_name);
1437
1438 //shirt + armband
1439 EntityAI armband = FindAttachmentBySlotName("Armband");
1440 if (slot_name == "Body" && armband)
1441 {
1442 Param1<PlayerBase> p = new Param1<PlayerBase>(this);
1443 armband.SwitchItemSelectionTextureEx(EItemManipulationContext.UPDATE,p);
1444 }
1445 }
1446
1448 {
1449 array<EntityAI> itemsArray = new array<EntityAI>;
1450 ItemBase item;
1451 GetInventory().EnumerateInventory(InventoryTraversalType.PREORDER, itemsArray);
1452
1453 for (int i = 0; i < itemsArray.Count(); i++)
1454 {
1455 Class.CastTo(item, itemsArray.Get(i));
1456 if (item && !item.IsInherited(SurvivorBase)) GetInventory().LocalDestroyEntity(item);
1457 }
1458 }
1459
1461 {
1463 }
1464
1465 void SetHitPPEEnabled(bool enabled)
1466 {
1467 m_CanDisplayHitEffectPPE = enabled;
1468 }
1469
1470 bool IsMale()
1471 {
1472 if (ConfigGetBool("woman") != 1)
1473 {
1474 return true;
1475 }
1476 return false;
1477 }
1478
1480 {
1481 int voice_type = ConfigGetInt("voiceType");
1482
1483 if (voice_type == 0)
1484 {
1485 voice_type = 1;
1486 }
1487
1488 return voice_type;
1489 }
1490
1491 PlayerSoundManagerServer GetPlayerSoundManagerServer()
1492 {
1494 }
1495
1496
1498 {
1499 if (!m_UndergroundHandler && IsAlive())
1500 {
1502 }
1503
1504 return m_UndergroundHandler;
1505 }
1506
1516
1518 {
1519 m_UndergroundHandler = null;
1521 }
1522 // --------------------------------------------------
1523 // User Actions
1524 //---------------------------------------------------
1525 void SetActions(out TInputActionMap InputActionMap)
1526 {
1527 AddAction(ActionOpenDoors, InputActionMap);
1528 AddAction(ActionCloseDoors, InputActionMap);
1529 AddAction(ActionLockedDoors, InputActionMap);
1530 AddAction(ActionEnterLadder, InputActionMap);
1531 AddAction(ActionExitLadder, InputActionMap);
1532
1533 //-----------CheckIfCanMOveToTarget----------
1534 AddAction(ActionStartEngine, InputActionMap);
1535 AddAction(ActionStartEngineBoat, InputActionMap);
1536 AddAction(ActionStopEngine, InputActionMap);
1537 AddAction(ActionStopEngineBoat, InputActionMap);
1538 AddAction(ActionSwitchSeats, InputActionMap);
1539 AddAction(ActionOpenCarDoors,InputActionMap);
1540 AddAction(ActionCloseCarDoors,InputActionMap);
1541 AddAction(ActionUncoverHeadSelf, InputActionMap);
1542 AddAction(ActionDrinkPondContinuous, InputActionMap);
1543 AddAction(ActionEatSnowContinuous, InputActionMap);
1544
1545 AddAction(ActionIgniteFireplaceByAir, InputActionMap);
1546 AddAction(ActionMineBushByHand, InputActionMap);
1547
1548 AddAction(ActionUngagSelf, InputActionMap);
1549 AddAction(ActionWashHandsWater, InputActionMap);
1550 AddAction(ActionWashHandsSnow, InputActionMap);
1551 AddAction(ActionGetOutTransport, InputActionMap);
1552
1553 AddAction(ActionUnrestrainTargetHands, InputActionMap);
1554 AddAction(ActionTakeArrow, InputActionMap);
1555 AddAction(ActionTakeArrowToHands, InputActionMap);
1557 }
1558
1559 void SetActions() // Backwards compatibility, not recommended to use
1560 {
1561 }
1562
1564 {
1565 AddAction(ActionCPR, InputActionMap);
1566 AddAction(ActionUncoverHeadTarget, InputActionMap);
1567 AddAction(ActionUngagTarget, InputActionMap);
1568 AddAction(ActionPullBodyFromTransport, InputActionMap);
1569 AddAction(ActionCheckPulseTarget, InputActionMap);
1570 }
1571
1572 void SetActionsRemoteTarget() // Backwards compatibility, not recommended to use
1573 {
1574 }
1575
1577 {
1578 // Backwards compatibility
1579 if (IsControlledPlayer())
1580 {
1582 SetActions();
1583 }
1584 else
1585 {
1588 }
1590
1593
1596 }
1597
1598 override void GetActions(typename action_input_type, out array<ActionBase_Basic> actions)
1599 {
1601 {
1602 m_ActionsInitialize = true;
1604 }
1605
1606 // Backwards compatibility
1607 array<ActionBase_Basic> bcActions = m_InputActionMap.Get(action_input_type);
1608 if (!bcActions)
1609 {
1610 if (IsControlledPlayer())
1611 actions = m_InputActionMapControled.Get(action_input_type);
1612 else
1613 actions = m_InputActionMapAsTarget.Get(action_input_type);
1614 }
1615 else
1616 {
1617 if (!actions)
1618 actions = new array<ActionBase_Basic>();
1619
1620 if (IsControlledPlayer())
1621 actions.InsertAll(m_InputActionMapControled.Get(action_input_type));
1622 else
1623 actions.InsertAll(m_InputActionMapAsTarget.Get(action_input_type));
1624
1625 actions.InsertAll(bcActions);
1626 }
1627 }
1628
1629 void AddAction(typename actionName, out TInputActionMap InputActionMap)
1630 {
1631 ActionBase action = GetActionManager().GetAction(actionName);
1632
1633 typename ai = action.GetInputType();
1634 if (!ai)
1635 {
1636 m_ActionsInitialize = false;
1637 return;
1638 }
1639
1640 ref array<ActionBase_Basic> action_array = InputActionMap.Get(ai);
1641
1642 if (!action_array)
1643 {
1644 action_array = new array<ActionBase_Basic>;
1645 InputActionMap.Insert(ai, action_array);
1646 }
1647 action_array.Insert(action);
1648 }
1649
1650 void AddAction(typename actionName) // Backwards compatibility, not recommended to use
1651 {
1652 AddAction(actionName, m_InputActionMap);
1653 }
1654
1655 void RemoveAction(typename actionName, out TInputActionMap InputActionMap)
1656 {
1657 ActionBase action = GetActionManager().GetAction(actionName);
1658 typename ai = action.GetInputType();
1659 ref array<ActionBase_Basic> action_array = InputActionMap.Get(ai);
1660
1661 if (action_array)
1662 {
1663 for (int i = 0; i < action_array.Count(); i++)
1664 {
1665 if (action == action_array.Get(i))
1666 {
1667 action_array.Remove(i);
1668 }
1669 }
1670 action_array = new array<ActionBase_Basic>;
1671 InputActionMap.Insert(ai, action_array);
1672 }
1673 action_array.Insert(action);
1674 }
1675
1676 void RemoveAction(typename actionName) // Backwards compatibility, not recommended to use
1677 {
1678 RemoveAction(actionName, m_InputActionMap);
1679 }
1680
1682 {
1683 return m_RecipePick;
1684 }
1685
1687 {
1688 m_RecipePick++;
1689 }
1690
1692 {
1693 m_RecipePick = 0;
1694 }
1695
1696 //---------------------------------------------------
1697
1698
1703
1705 {
1706 return m_EmoteManager;
1707 }
1708
1713
1715 override void OnLadder(float delta_time, HumanMovementState pState)
1716 {
1717 ProcessHandDamage(delta_time, pState);
1718 }
1719
1720 void ProcessHandDamage(float delta_time, HumanMovementState pState)
1721 {
1722 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER || !GetGame().IsMultiplayer())
1723 {
1724 if (pState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SLIDE)
1725 {
1726 //Print("sliding down");
1727 EntityAI gloves = GetInventory().FindAttachment(InventorySlots.GLOVES);
1728
1729 if (gloves && gloves.GetHealthLevel() < 4)
1730 {
1731 gloves.AddHealth("","", PlayerConstants.GLOVES_DAMAGE_SLIDING_LADDER_PER_SEC * delta_time);
1732 return;
1733 }
1734
1736 {
1737 if (Math.RandomFloat01() < 0.5)
1738 {
1739 if (GetBleedingManagerServer().AttemptAddBleedingSourceBySelection("LeftForeArmRoll"))
1740 {
1741 SendSoundEvent(EPlayerSoundEventID.INJURED_LIGHT);
1742 }
1743 }
1744 else
1745 {
1746 if (GetBleedingManagerServer().AttemptAddBleedingSourceBySelection("RightForeArmRoll"))
1747 {
1748 SendSoundEvent(EPlayerSoundEventID.INJURED_LIGHT);
1749 }
1750 }
1751 }
1752
1753 }
1754 }
1755 }
1756
1757 override void ProcessFeetDamageServer(int pUserInt)
1758 {
1759 //InventorySlots.HEADGEAR
1760 EntityAI shoes = GetInventory().FindAttachment(InventorySlots.FEET);
1761
1762 string surface; int liquid;
1763 GetGame().SurfaceUnderObject(this, surface, liquid);
1764 float modifier_surface = Surface.GetParamFloat(surface, "footDamage");
1765
1766 if (shoes && shoes.GetHealthLevel() < 4)
1767 {
1768 shoes.AddHealth("", "", -1 * modifier_surface * PlayerConstants.SHOES_MOVEMENT_DAMAGE_PER_STEP * (float)PlayerConstants.CHECK_EVERY_N_STEP);
1769
1770 return;
1771 }
1772
1773 float rnd = Math.RandomFloat01();
1774 float modifier_movement = GetFeetDamageMoveModifier();
1775 float chance = modifier_movement * modifier_surface * PlayerConstants.BAREFOOT_MOVEMENT_BLEED_MODIFIER * (float)PlayerConstants.CHECK_EVERY_N_STEP;
1776 if (rnd < chance)
1777 {
1778 if (pUserInt % 2 == 0)
1779 {
1780 if (GetBleedingManagerServer().AttemptAddBleedingSourceBySelection("RightFoot"))
1781 SendSoundEvent(EPlayerSoundEventID.INJURED_LIGHT);
1782
1783 }
1784 else
1785 {
1786 if (GetBleedingManagerServer().AttemptAddBleedingSourceBySelection("LeftFoot"))
1787 SendSoundEvent(EPlayerSoundEventID.INJURED_LIGHT);
1788 }
1789 }
1790 }
1791
1793 {
1794 float modifier;
1795 switch(m_MovementState.m_iMovement)
1796 {
1797 case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
1798 modifier = 1;
1799 break
1800 case DayZPlayerConstants.MOVEMENTIDX_RUN:
1801 modifier = 0.5;
1802 break
1803 case DayZPlayerConstants.MOVEMENTIDX_WALK:
1804 modifier = 0;
1805 break
1806 }
1807 return modifier;
1808 }
1809
1810 void SetStamina(int value, int range)
1811 {
1813 m_ModulePlayerStatus.SetStamina(value, range);
1814 }
1815
1816 #ifdef DIAG_DEVELOPER
1817 void SetStaminaDisabled(bool value)
1818 {
1819 if (m_StaminaHandler)
1820 m_StaminaHandler.SetStaminaDisabled(value);
1821 }
1822 #endif
1823
1824 void SetQuickRestrain(bool enable)
1825 {
1826 m_AllowQuickRestrain = enable;
1827 }
1828
1829 void SetQuickFishing(bool enable)
1830 {
1831 m_AllowQuickFishing = enable;
1832 }
1833
1835 {
1836 return m_AllowQuickRestrain;
1837 }
1838
1840 {
1841 return m_AllowQuickFishing;
1842 }
1843
1845 {
1846 return m_PlayerStats;
1847 }
1848
1853
1858
1860 {
1861 return m_WeaponManager;
1862 }
1863
1865 {
1866 return m_ArrowManager;
1867 }
1868
1870 {
1871 if (IsInVehicle() || IsRaised() || IsSwimming() || IsClimbing() || IsClimbingLadder() || IsRestrained() || !GetWeaponManager() || GetWeaponManager().IsRunning() || !GetActionManager() || GetActionManager().GetRunningAction() != null || IsMapOpen())
1872 {
1873 return false;
1874 }
1875 if (GetThrowing() && GetThrowing().IsThrowingModeEnabled())
1876 {
1877 return false;
1878 }
1879 return true;
1880 }
1881
1882 void SetRestrainStarted(bool restrain_started)
1883 {
1884 m_IsRestrainStarted = restrain_started;
1885 SetSynchDirty();
1886 }
1887
1889 {
1890 return m_IsRestrainStarted;
1891 }
1892
1893 void SetRestrainPrelocked(bool restrain_prelock)
1894 {
1895 m_IsRestrainPrelocked = restrain_prelock;
1896 SetSynchDirty();
1897 }
1898
1900 {
1901 return m_IsRestrainPrelocked;
1902 }
1903
1904 void SetRestrained(bool is_restrained)
1905 {
1906 m_IsRestrained = is_restrained;
1907 SetSynchDirty();
1908 }
1909
1910 override bool IsRestrained()
1911 {
1912 return m_IsRestrained;
1913 }
1914
1916 {
1917 if (m_IsRestrainStarted && IsControlledPlayer())
1918 {
1919 if (GetGame().GetUIManager().IsMenuOpen(MENU_RADIAL_QUICKBAR))
1921 if (GetGame().GetUIManager().IsMenuOpen(MENU_INVENTORY))
1923 }
1924 }
1925
1927 {
1928 if (m_IsRestrained && IsControlledPlayer())
1929 {
1930 if (GetGame().GetUIManager().IsMenuOpen(MENU_RADIAL_QUICKBAR))
1932 if (GetGame().GetUIManager().IsMenuOpen(MENU_INVENTORY))
1934 }
1935 }
1936
1937 override bool IsInventoryVisible()
1938 {
1939 return true;
1940 }
1941
1943 {
1944 if (IsControlledPlayer())
1945 {
1947 }
1948 return true;
1949 }
1950
1951 override bool CanReleaseAttachment (EntityAI attachment)
1952 {
1953 return super.CanReleaseAttachment(attachment);
1954 }
1955
1956 override bool CanReleaseCargo (EntityAI cargo)
1957 {
1958 return super.CanReleaseCargo(cargo);
1959 }
1960
1962 {
1963 return super.CanReceiveItemIntoCargo(item);
1964 }
1965
1966 override bool CanSwapItemInCargo (EntityAI child_entity, EntityAI new_entity)
1967 {
1968 return super.CanSwapItemInCargo(child_entity, new_entity);
1969 }
1970
1971 override bool CanReceiveItemIntoHands(EntityAI item_to_hands)
1972 {
1973 if (IsInVehicle())
1974 return false;
1975
1976 if (!CanPickupHeavyItem(item_to_hands))
1977 return false;
1978
1979 return super.CanReceiveItemIntoHands(item_to_hands);
1980 }
1981
1982 override bool CanSaveItemInHands(EntityAI item_in_hands)
1983 {
1984 return super.CanSaveItemInHands(item_in_hands);
1985 }
1986
1987 override bool CanReleaseFromHands(EntityAI handheld)
1988 {
1989 return super.CanReleaseFromHands(handheld);
1990 }
1991
1993 {
1994 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
1995 {
1996 return GetCraftingManager().GetRecipeID();
1997 }
1998 else
1999 {
2000 return m_RecipeID;
2001 }
2002 }
2003
2004 void SetCraftingRecipeID(int recipeID)
2005 {
2006 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2007 {
2008 GetCraftingManager().SetRecipeID(recipeID);
2009 }
2010 else
2011 {
2012 m_RecipeID = recipeID;
2013 }
2014 }
2015
2016 // --------------------------------------------------
2017 // Action data for base building actions
2018 //---------------------------------------------------
2023
2025 {
2027 {
2028 m_ConstructionActionData.ResetActionIndexes();
2029 }
2030 }
2031
2032 // --------------------------------------------------
2033 // Action data for fireplace (indoor)
2034 //---------------------------------------------------
2036 {
2037 return m_LastFirePoint;
2038 }
2040 {
2041 return m_LastFirePointRot;
2042 }
2044 {
2045 return m_LastFirePointIndex;
2046 }
2047
2048 void SetLastFirePoint(vector last_fire_point)
2049 {
2050 m_LastFirePoint = last_fire_point;
2051 }
2052 void SetLastFirePointRot(float last_fire_point_rot)
2053 {
2054 m_LastFirePointRot = last_fire_point_rot;
2055 }
2056 void SetLastFirePointIndex(int last_fire_point_index)
2057 {
2058 m_LastFirePointIndex = last_fire_point_index;
2059 }
2060
2061 // --------------------------------------------------
2062 // QuickBar
2063 //---------------------------------------------------
2064
2066 {
2067 int index = m_QuickBarBase.FindEntityIndex(entity);
2068 if (index != -1)
2069 m_QuickBarBase.SetEntityShortcut(entity,-1);
2070 }
2071 //---------------------------------------------------
2073 {
2074 int index = m_QuickBarBase.FindEntityIndex(entity);
2075 if (index != -1)
2076 m_QuickBarBase.SetShotcutEnable(index,value);
2077
2078 }
2079 //---------------------------------------------------
2081 {
2082 int index;
2083 index = m_QuickBarBase.FindEntityIndex(entity);
2084
2085 if (m_QuickBarBase.GetEntity(index) == NULL)
2086 return -1;
2087
2088 return index;
2089 }
2090 //---------------------------------------------------
2091
2093 {
2094 return m_QuickBarBase.GetSize();
2095 }
2096 //---------------------------------------------------
2098 {
2099 return m_QuickBarBase.GetEntity(index);
2100 }
2101 //---------------------------------------------------
2103 {
2104 int i = FindQuickBarEntityIndex(entity);
2105 if (i >= 0)
2106 m_QuickBarBase.UpdateShotcutVisibility(i);
2107 }
2108 //---------------------------------------------------
2109 void SetQuickBarEntityShortcut(EntityAI entity, int index, bool force = false)
2110 {
2111 m_QuickBarBase.SetEntityShortcut(entity, index, force);
2112 }
2113 //---------------------------------------------------
2115 {
2116 m_QuickBarBase.OnSetEntityRequest(ctx);
2117 }
2118 //---------------------------------------------------
2119
2120 // Applies splint on all limbs.
2122 {
2123 float add_health_coef = 0.33;
2124 // The idea is to slightly increase health of broken limb so the player is still limping. Using more splints will help but each time less. 100% recovery can be achieved only through long term healing.
2125 if (GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
2126 {
2127 AddHealth("LeftLeg", "Health", (GetMaxHealth("LeftLeg", "Health") - GetHealth("LeftLeg", "Health") ) * add_health_coef );
2128 AddHealth("RightLeg", "Health", (GetMaxHealth("RightLeg", "Health") - GetHealth("RightLeg", "Health")) * add_health_coef );
2129 AddHealth("RightFoot", "Health", (GetMaxHealth("RightFoot", "Health") - GetHealth("RightFoot", "Health")) * add_health_coef );
2130 AddHealth("LeftFoot", "Health", (GetMaxHealth("LeftFoot", "Health") - GetHealth("LeftFoot", "Health")) * add_health_coef );
2131 }
2132 }
2133
2134 void ProcessDrowning(float dT)
2135 {
2136 GetStaminaHandler().DepleteStamina(EStaminaModifiers.DROWN,dT);
2137
2138 #ifndef SERVER
2139 //PP EFFECTS
2140 PPERequester_Drowning req = PPERequester_Drowning.Cast(PPERequesterBank.GetRequester(PPERequesterBank.REQ_DROWNING));
2141 req.SetStamina01(GetStaminaHandler().GetStaminaNormalized());
2142 #endif
2143 }
2144
2146 {
2148 return;
2150 int boneIdx = GetBoneIndexByName("Head");
2151
2152 if (boneIdx != -1)
2153 {
2154 Particle p = ParticleManager.GetInstance().PlayInWorld(ParticleList.DROWNING_BUBBLES, "-0.03 0.15 0");
2155 if (p)
2156 AddChild(p, boneIdx);
2158 }
2159 }
2160
2161 void ProcessHoldBreath(float dT)
2162 {
2163 if (IsTryingHoldBreath() && CanStartConsumingStamina(EStaminaConsumers.HOLD_BREATH))
2164 {
2165 if (!m_IsHoldingBreath)
2166 {
2168 m_IsHoldingBreath = true;
2169 }
2170 }
2171 else if (!IsTryingHoldBreath() || !CanConsumeStamina(EStaminaConsumers.HOLD_BREATH))
2172 {
2174 m_IsHoldingBreath = false;
2175 }
2176 }
2177
2179 {
2180 //SendSoundEvent(SoundSetMap.GetSoundSetID("holdBreath_male_Char_SoundSet"));
2181 RequestSoundEventEx(EPlayerSoundEventID.HOLD_BREATH, true, EPlayerSoundEventParam.SKIP_CONTROLLED_PLAYER);
2182 }
2183
2185 {
2186 RequestSoundEventEx(EPlayerSoundEventID.EXHAUSTED_BREATH, true, EPlayerSoundEventParam.SKIP_CONTROLLED_PLAYER);
2187 }
2188
2190 {
2191 //SendSoundEvent(SoundSetMap.GetSoundSetID("releaseBreath_male_Char_SoundSet"));
2192 RequestSoundEventEx(EPlayerSoundEventID.RELEASE_BREATH, true, EPlayerSoundEventParam.SKIP_CONTROLLED_PLAYER);
2193 }
2194
2195 override bool IsHoldingBreath()
2196 {
2197 return m_IsHoldingBreath;
2198 }
2199
2201 {
2202 return false;
2203 }
2204
2206 {
2207 return IsAlive();
2208 }
2209
2214
2229
2230 EntityAI FindCargoByBaseType(string searched_item)
2231 {
2232 EntityAI attachment;
2233 string item_name;
2234 int attcount = this.GetInventory().AttachmentCount();
2235
2236 for (int att = 0; att < attcount; att++)
2237 {
2238 attachment = GetInventory().GetAttachmentFromIndex(att);
2239 if (attachment.IsItemBase())
2240 {
2241 item_name = attachment.GetType();
2242 if (GetGame().IsKindOf(item_name, searched_item))
2243 {
2244 return attachment;
2245 }
2246 }
2247 }
2248 return NULL;
2249 }
2250
2252 {
2253 if (GetGame().IsDebug())
2254 {
2255 if (!GetGame().IsMultiplayer() && GetGame().GetPlayer() && GetGame().GetPlayer().GetID() == this.GetID())
2256 {
2257 PluginSceneManager scene_editor = PluginSceneManager.Cast(GetPlugin(PluginSceneManager));
2258 scene_editor.InitLoad();
2259 }
2260 }
2261 }
2262
2263 //---------------------------------------------------------------------------------------------------------------------------
2265 {
2266 InitEditor();
2267
2269 if (m_Environment)
2270 m_Environment.Init();
2271
2272 if (GetGame().IsMultiplayer() || GetGame().IsServer())
2273 {
2274 if (m_ModuleLifespan)
2275 {
2277 }
2278 }
2279
2280 if (IsControlledPlayer())//true only on client for the controlled character
2281 {
2282 if (!m_VirtualHud)
2283 m_VirtualHud = new VirtualHud(this);
2284 if (m_Hud)
2285 {
2286 m_Hud.UpdateBloodName();
2287 PPEManagerStatic.GetPPEManager().StopAllEffects(PPERequesterCategory.GAMEPLAY_EFFECTS);
2291
2292 m_Hud.ShowQuickbarUI(true);
2293 m_Hud.UpdateQuickbarGlobalVisibility();
2294 m_Hud.InitHeatBufferUI(this);
2295 m_Hud.OnPlayerLoaded();
2296 }
2298 }
2299 if (!GetGame().IsDedicatedServer())
2300 {
2301 GetGame().GetCallQueue(CALL_CATEGORY_GUI).CallLater(UpdateCorpseStateVisual, 2000, false);//sometimes it takes a while to load in
2302 m_PlayerSoundEventHandler = new PlayerSoundEventHandler(this);
2303 m_ReplaceSoundEventHandler = new ReplaceSoundEventHandler(this);
2304 }
2305 int slotId = InventorySlots.GetSlotIdFromString("Head");
2306 m_CharactersHead = Head_Default.Cast(GetInventory().FindPlaceholderForSlot(slotId));
2310
2312 if (wpn)
2313 {
2314 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_REMOTE)
2315 {
2316 wpn.DelayedValidateAndRepair();
2317 }
2318 else
2319 {
2320 wpn.ValidateAndRepair();
2321 }
2322 }
2323
2324 m_PlayerLoaded = true;
2325 }
2326
2327 void SetPlayerDisconnected(bool state)
2328 {
2330 }
2331
2333 {
2335 }
2336
2337 // --------------------------------------------------
2338 // Advanced placement
2339 //---------------------------------------------------
2340
2341 //get hologram
2343 {
2344 return m_HologramServer;
2345 }
2346
2348 {
2349 return m_HologramLocal;
2350 }
2351
2353 {
2354 if (item)
2355 {
2357 GetHologramServer().SetProjectionPosition(GetLocalProjectionPosition());
2358 GetHologramServer().SetProjectionOrientation(GetLocalProjectionOrientation());
2359 GetHologramServer().GetProjectionEntity().OnPlacementStarted(this);
2360 GetHologramServer().CheckPowerSource();
2361 GetHologramServer().RefreshVisual();
2362 }
2363 }
2364
2366 {
2367 if (GetGame().IsMultiplayer() && GetGame().IsServer())
2368 return;
2369
2370 if (item)
2371 {
2373 GetHologramLocal().GetProjectionEntity().OnPlacementStarted(this);
2374 }
2375 }
2376
2378 {
2379 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
2380
2381 if (IsPlacingServer())
2382 {
2383 GetHologramServer().CheckPowerSource();
2384 GetHologramServer().GetParentEntity().OnPlacementCancelled(this);
2385
2386 delete m_HologramServer;
2387
2388 return;
2389 }
2390 else if (entityInHands && entityInHands.HasEnergyManager())
2391 {
2392 if (entityInHands.GetCompEM().IsPlugged())
2393 entityInHands.OnPlacementCancelled(this);
2394 }
2395 }
2396
2397 //Called when item placement is canceled, will prevent quickbar usage until the item the player was placing is back in hands
2399 {
2400 m_AreHandsLocked = true;
2401 }
2402
2404 {
2405 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
2406 if (entityInHands && entityInHands.HasEnergyManager())
2407 {
2408 if (entityInHands.GetCompEM().IsPlugged())
2409 entityInHands.OnPlacementCancelled(this);
2410 }
2411
2412 delete m_HologramLocal;
2413 }
2414
2420
2426
2428 {
2429 if (m_HologramServer)
2430 return true;
2431
2432 return false;
2433 }
2434
2436 {
2437 if (m_HologramLocal)
2438 return true;
2439
2440 return false;
2441 }
2442
2443 void SetDrowning(bool enable)
2444 {
2445 if (enable != m_IsDrowning)
2446 {
2447 if (enable)
2449 else
2450 OnDrowningEnd();
2451 }
2452
2453 m_IsDrowning = enable;
2454 }
2455
2457 {
2458 #ifndef SERVER
2459 if (IsControlledPlayer())
2460 {
2461 PPERequester_Drowning req = PPERequester_Drowning.Cast(PPERequesterBank.GetRequester(PPERequesterBank.REQ_DROWNING));
2462 req.Start();
2463 }
2464 //Particles
2466 #endif
2467 }
2468
2470 {
2471 #ifndef SERVER
2472 if (IsControlledPlayer())
2473 {
2474 PPERequester_Drowning req = PPERequester_Drowning.Cast(PPERequesterBank.GetRequester(PPERequesterBank.REQ_DROWNING));
2475 req.Stop();
2476 }
2478 #endif
2479 }
2480
2481 bool TogglePlacingServer(int userDataType, ParamsReadContext ctx)
2482 {
2483 if (userDataType == INPUT_UDT_ADVANCED_PLACEMENT)
2484 {
2486 return true;
2487 }
2488
2489 return false;
2490 }
2491
2493 {
2494 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT && GetGame().IsMultiplayer())
2495 {
2496 m_ProcessResetADS = true;
2498 }
2499 else if (!GetGame().IsMultiplayer())
2500 {
2501 m_ResetADS = true;
2502 }
2503 }
2504
2506 {
2508 {
2511 ctx.Send();
2512
2513 m_ProcessResetADS = false;
2514 }
2515 }
2516
2518 bool ResetADSPlayerSync(int userDataType, ParamsReadContext ctx)
2519 {
2520 if (userDataType == INPUT_UDT_RESET_ADS)
2521 {
2524 return true;
2525 }
2526
2527 return false;
2528 }
2529
2530 override bool CanPlaceItem(EntityAI item)
2531 {
2533 {
2534 TStringSet disallowedUndergroundTypes = CfgGameplayHandler.GetDisallowedTypesInUnderground();
2535 foreach (string t: disallowedUndergroundTypes)
2536 {
2537 if (item.IsKindOf(t))
2538 return false;
2539 }
2540 }
2541 return true;
2542 }
2543
2545 {
2546 m_UndergroundPresence = presence;
2547 }
2548
2550 {
2551 if (IsPlacingLocal())
2552 {
2553 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT && GetGame().IsMultiplayer())
2554 {
2556 {
2559 ctx.Send();
2560
2562 }
2563 }
2564 }
2565 else if (!item)
2566 {
2568 }
2569 else
2570 {
2571 PlacingStartLocal(item);
2572 }
2573 }
2574
2576 {
2577 m_LocalProjectionPosition = local_position;
2578 }
2579
2581 {
2582 m_LocalProjectionOrientation = local_orientation;
2583 }
2584
2589
2594
2595 void SetInColdArea(bool state)
2596 {
2597 if (m_IsInColdArea != state)
2598 {
2599 m_IsInColdArea = state;
2600 SetSynchDirty();
2601 }
2602 }
2603
2605 {
2606 return m_IsInColdArea;
2607 }
2608
2609 // ------------------------------------------------------------------------
2610
2612 void SetInWater(bool pState)
2613 {
2614 m_IsInWater = pState;
2615 SetSynchDirty();
2616 }
2617
2619 {
2620 return m_IsInWater;
2621 }
2622
2623 // -------------------------------------------------------------------------
2625 {
2626 if (GetGame() && (!GetGame().IsDedicatedServer()))
2627 {
2630 }
2631
2633 StopSoundSet(m_SoundFliesEffect);
2634 }
2635
2637 {
2638 m_CameraSwayModifier = new_camera.GetWeaponSwayModifier();
2639 m_CurrentCamera = new_camera;
2640 }
2641
2646
2648 {
2649 if (!m_CurrentCamera)
2650 return false;
2651
2652 return m_CurrentCamera.GetCurrentPitch() < PlayerConstants.CAMERA_THRESHOLD_PITCH;
2653 }
2654
2655 BleedingSourcesManagerServer GetBleedingManagerServer()
2656 {
2658 }
2659
2660 BleedingSourcesManagerRemote GetBleedingManagerRemote()
2661 {
2663 }
2664
2670 {
2671 if (!m_VirtualHud)
2672 {
2673 m_VirtualHud = new VirtualHud(this);
2674 }
2675 return m_VirtualHud;
2676 }
2677
2678 TransferValues GetTransferValues()
2679 {
2680 return m_TrasferValues;
2681 }
2682
2687
2688 //--------------------------------------------------------------------------
2689 void OnScheduledTick(float deltaTime)
2690 {
2691 if (!IsPlayerSelected() || !IsAlive())
2692 return;
2694 m_ModifiersManager.OnScheduledTick(deltaTime);
2695 if (m_NotifiersManager)
2696 m_NotifiersManager.OnScheduledTick();
2697 if (m_TrasferValues)
2698 m_TrasferValues.OnScheduledTick(deltaTime);
2699 if (m_VirtualHud)
2700 m_VirtualHud.OnScheduledTick();
2702 GetBleedingManagerServer().OnTick(deltaTime);
2703 if (m_Environment)
2704 m_Environment.Update(deltaTime);
2705
2706 // Check if electric device needs to be unplugged
2707 ItemBase heldItem = GetItemInHands();
2708 if (heldItem && heldItem.HasEnergyManager() && heldItem.GetCompEM().IsPlugged())
2709 {
2710 // Now we know we are working with an electric device which is plugged into a power source.
2711 EntityAI placed_entity = heldItem;
2712
2713 // Unplug the device when the player is too far from the power source.
2714 placed_entity.GetCompEM().UpdatePlugState();
2715 }
2716 }
2717
2718 void OnCommandHandlerTick(float delta_time, int pCurrentCommandID)
2719 {
2720 if (!IsAlive())
2721 {
2722 if (!m_DeathSyncSent && m_KillerData)
2723 {
2724 SyncEvents.SendEntityKilled(this, m_KillerData.m_Killer, m_KillerData.m_MurderWeapon, m_KillerData.m_KillerHiTheBrain);
2725 m_DeathSyncSent = true;
2726 }
2727 return;
2728 }
2730 m_DebugMonitorValues.OnScheduledTick(delta_time);
2731 if (GetSymptomManager())
2732 GetSymptomManager().OnTick(delta_time, pCurrentCommandID, m_MovementState);//needs to stay in command handler tick as it's playing animations
2733 //if (GetBleedingManagerServer()) GetBleedingManagerServer().OnTick(delta_time);
2734
2736 if (instType == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2737 {
2738 if (m_PlayerSoundEventHandler)
2739 m_PlayerSoundEventHandler.OnTick(delta_time);
2740
2742 {
2743 m_EffectWidgets.RemoveActiveEffects(m_ProcessRemoveEffectWidgets);
2744 }
2745
2747 {
2749 }
2750
2752
2755
2756 #ifdef DIAG_DEVELOPER
2757 if (m_WeaponDebug)
2758 {
2759 m_WeaponDebug.OnCommandHandlerUpdate();
2760 }
2761 #endif
2762
2763 m_ProcessAddEffectWidgets.Clear(); //clears array for remotes as well
2764 m_ProcessRemoveEffectWidgets.Clear(); //clears array for remotes as well
2765 }
2766
2767 m_AnimCommandStarting = HumanMoveCommandID.None;
2768
2771
2772 if (m_ProcessResetADS)
2774 }
2775
2778 {
2779 HumanCommandMove hcm = GetCommand_Move();
2780 if (hcm)
2781 {
2782 float staminaPercentage = GetStaminaHandler().GetSyncedStaminaNormalized();
2783 hcm.SetTurnSpanSprintModifier(2 - staminaPercentage);
2784 hcm.SetRunSprintFilterModifier((2 - staminaPercentage) * 0.5);
2785 hcm.SetDirectionSprintFilterModifier(2 - staminaPercentage);
2786 }
2787 }
2788
2789 bool m_ShowDbgUI = true;
2791 float m_DbgSliderValue = 0.0;
2792 ref array<string> m_DbgOptions = {"jedna", "dva", "tri"};
2793
2798
2799 //--------------------------------------------------------------------------
2800 void OnTick()
2801 {
2802 float deltaT = (GetGame().GetTime() - m_LastTick) * 0.001;
2803 if (m_LastTick < 0)
2804 deltaT = 0; //first tick protection
2805
2807
2808 OnScheduledTick(deltaT);
2809 }
2810
2811 // -------------------------------------------------------------------------
2812 override void EEItemIntoHands(EntityAI item)
2813 {
2814 super.EEItemIntoHands(item);
2815
2816 if (item)
2817 {
2818 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(item, {Bolt_Base});
2819
2820 Weapon_Base w;
2821 if (Class.CastTo(w, item))
2822 {
2823 w.ResetWeaponAnimState();
2824
2825 HumanCommandMove cm = GetCommand_Move();
2826 if (cm)
2827 {
2828 cm.SetMeleeBlock(false);
2829 GetMeleeFightLogic().SetBlock(false);
2830 }
2831 }
2832
2834 if (item.IsHeavyBehaviour() && IsRaised())
2835 {
2836 HumanCommandMove cm2 = GetCommand_Move();
2837 if (cm2)
2838 {
2839 cm2.ForceStance(DayZPlayerConstants.STANCEIDX_ERECT);
2840 }
2841 }
2842
2844 }
2845 }
2846
2847 override void EEItemOutOfHands(EntityAI item)
2848 {
2849 super.EEItemOutOfHands(item);
2850
2851 if (IsPlacingLocal())
2852 {
2854 }
2855
2857 }
2858
2860 {
2861 return m_PlayerStomach;
2862 }
2863
2864 override void CommandHandler(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
2865 {
2866 EvaluateDamageHit(pCurrentCommandID);
2867
2868 // lower implement
2869 super.CommandHandler(pDt,pCurrentCommandID,pCurrentCommandFinished);
2870
2871 vector playerPosition = PhysicsGetPositionWS();
2872
2873 HumanInputController hic = GetInputController();
2874
2877
2879
2880 if (m_BrokenLegsJunctureReceived)//was there a change in broken legs state ?
2881 {
2883 bool initial = m_BrokenLegState < 0;//negative values indicate initial activation
2884
2885 if (GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
2886 {
2887 DropHeavyItem();
2888 if (initial)
2889 {
2891 hic.ResetADS();
2892 GetUApi().GetInputByID(UATempRaiseWeapon).Supress();
2893 ExitSights();
2894 }
2895 }
2896 }
2897
2898 GetDayZPlayerInventory().HandleInventory(pDt);
2899
2900 if (IsFireWeaponRaised() || m_IsHoldingBreath)
2901 {
2902 ProcessHoldBreath(pDt);
2903 }
2904
2906
2907 if (m_AreHandsLocked && GetHumanInventory().GetEntityInHands())
2908 {
2909 m_AreHandsLocked = false;
2910 }
2911
2912 // freelook camera memory for weapon raycast
2914 {
2916 }
2917 else if (!hic.CameraIsFreeLook() && m_DirectionToCursor != vector.Zero)
2918 {
2920 }
2921
2922 if (m_WeaponManager)
2923 {
2924 m_WeaponManager.Update(pDt);
2925 }
2926 if (m_EmoteManager && IsPlayerSelected())
2927 {
2928 m_EmoteManager.Update(pDt);
2929 }
2930 if (m_RGSManager)
2931 {
2932 m_RGSManager.Update();
2933 }
2934 if (m_StanceIndicator)
2935 {
2936 m_StanceIndicator.Update();
2937 }
2938 if (m_StaminaHandler)
2939 {
2940 m_StaminaHandler.Update(pDt, pCurrentCommandID);
2941 }
2942 if (m_InjuryHandler)
2943 {
2944 m_InjuryHandler.Update(pDt);
2945 }
2946 if (m_HCAnimHandler)
2947 {
2948 m_HCAnimHandler.Update(pDt, m_MovementState);
2949 }
2950 if (m_ShockHandler)
2951 {
2952 m_ShockHandler.Update(pDt);
2953 }
2954
2955 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER || !GetGame().IsMultiplayer())
2956 {
2957 GetPlayerSoundManagerServer().Update();
2958 ShockRefill(pDt);
2959 FreezeCheck();
2960 }
2961
2962 GetHumanInventory().Update(pDt);
2963 if (m_IsDrowning)
2964 {
2965 ProcessDrowning(pDt);
2966 }
2967 UpdateDelete();
2968
2969 HandleDamageHit(pCurrentCommandID);
2970
2971 if (mngr && hic)
2972 {
2973 mngr.Update(pCurrentCommandID);
2974
2975 HumanCommandUnconscious hcu = GetCommand_Unconscious();
2976 HumanCommandVehicle hcv = GetCommand_Vehicle();
2977
2978 if (!m_UnconsciousDebug)
2979 {
2981 if (m_ShouldBeUnconscious && m_IsUnconscious)
2982 {
2983 if (hcu)
2984 {
2986 m_Swimming.m_bWasSwimming |= hcu.IsInWater();
2987 }
2988
2989 if (m_Swimming.m_bWasSwimming)
2990 {
2991 m_LastCommandBeforeUnconscious = DayZPlayerConstants.COMMANDID_SWIM;
2992 }
2993
2994 OnUnconsciousUpdate(pDt, m_LastCommandBeforeUnconscious);
2995 }
2997 else if (m_ShouldBeUnconscious)
2998 {
3000 bool isTransitioning = hcv && (hcv.IsGettingIn() || hcv.IsGettingOut() || hcv.IsSwitchSeat());
3001
3002 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
3003 {
3004 OnUnconsciousUpdate(pDt, m_LastCommandBeforeUnconscious);
3005
3006 m_IsUnconscious = true;
3008 }
3012 else if (pCurrentCommandID != DayZPlayerConstants.COMMANDID_DEATH && pCurrentCommandID != DayZPlayerConstants.COMMANDID_FALL && !isTransitioning)
3013 {
3014 m_LastCommandBeforeUnconscious = pCurrentCommandID;
3015
3016 if (hcv)
3017 {
3018 m_TransportCache = hcv.GetTransport();
3019 }
3020 else
3021 {
3022 m_TransportCache = null;
3023 }
3024
3026 m_JumpClimb.CheckAndFinishJump();
3027 StartCommand_Unconscious(0);
3028 SetFallYDiff(playerPosition[1]);
3029 }
3030 }
3032 else if (m_IsUnconscious)
3033 {
3035 if (hcu && pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
3036 {
3037 OnUnconsciousUpdate(pDt, m_LastCommandBeforeUnconscious);
3038
3040 if (m_UnconsciousTime > 2)
3041 {
3042 int wakeUpStance = DayZPlayerConstants.STANCEIDX_PRONE;
3043
3045 if (m_Swimming.m_bWasSwimming || m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE)
3046 wakeUpStance = -1;
3047
3048 hcu.WakeUp(wakeUpStance);
3049
3050 m_IsUnconscious = false;
3051 OnUnconsciousStop(pCurrentCommandID);
3052 }
3053 }
3054 else
3055 {
3057 if (IsAlive())
3058 {
3059 m_IsUnconscious = false;
3060 OnUnconsciousStop(pCurrentCommandID);
3061 }
3062 }
3063 }
3064 }
3065
3066 // quickbar use
3067 int quickBarSlot = hic.IsQuickBarSlot();
3068 if (quickBarSlot && IsAlive())
3069 {
3070 if (hic.IsQuickBarSingleUse())
3071 {
3072 OnQuickBarSingleUse(quickBarSlot);
3073 //Print("PlayerBase.c IsQuickBarSingleUse - slot: " + quickBarSlot.ToString());
3074 }
3075 if (hic.IsQuickBarContinuousUseStart() && ((!GetGame().IsDedicatedServer()) && !GetGame().GetUIManager().GetMenu()))
3076 {
3077 OnQuickBarContinuousUseStart(quickBarSlot);
3078 //Print("PlayerBase.c IsQuickBarContinuousUseStart - slot: " + quickBarSlot.ToString());
3079 }
3080 if (hic.IsQuickBarContinuousUseEnd() && ((!GetGame().IsDedicatedServer())))
3081 {
3082 OnQuickBarContinuousUseEnd(quickBarSlot);
3083 //Print("PlayerBase.c IsQuickBarContinuousUseEnd - slot: " + quickBarSlot.ToString());
3084 }
3085 }
3086
3087 /*if ((pCurrentCommandID == DayZPlayerConstants.COMMANDID_ACTION || pCurrentCommandID == DayZPlayerConstants.COMMANDID_MOVE || pCurrentCommandID == DayZPlayerConstants.COMMANDID_LADDER || pCurrentCommandID == DayZPlayerConstants.COMMANDID_SWIM))
3088 {
3089 mngr.Update(); // checks for suitable action and sets it
3090 }*/
3091 }
3092
3093 if (m_StaminaHandler && hic)
3094 {
3095 HumanCommandMove hcm = GetCommand_Move();
3096 bool isSwimmingOrClimbing = GetCommand_Swim() || GetCommand_Climb() || GetCommand_Ladder();
3097 bool isStaminaLimitAppliable = hcm || isSwimmingOrClimbing;
3098
3099 if (isStaminaLimitAppliable)
3100 {
3101 bool isRunning = hcm && hcm.GetCurrentMovementSpeed() > 1.0;
3102
3104 if (isRunning || isSwimmingOrClimbing)
3105 {
3108 {
3109 hic.LimitsDisableSprint(false);
3110 }
3111 else
3112 {
3113 hic.LimitsDisableSprint(true);
3114 }
3115 }
3116 else
3117 {
3119 }
3120 }
3121 }
3122
3123 //map closing - feel free to move to different "update" if it does not belong here
3124 if (IsMapOpen())
3125 {
3126 if (!GetGame().IsDedicatedServer())
3127 {
3128 if (!CfgGameplayHandler.GetUse3DMap() && !GetGame().GetUIManager().IsMenuOpen(MENU_MAP))
3129 {
3130 CloseMapEx(false);
3131 }
3133 {
3135 {
3136 CloseMapEx(true);
3137 }
3138 else if (IsMapCallbackEndInput())
3139 {
3140 CloseMapEx(false);
3141 }
3142 }
3143 }
3144 }
3145
3146
3147 #ifdef DIAG_DEVELOPER
3148 if (m_Bot)
3149 m_Bot.OnUpdate(pDt);
3150 #endif
3151
3152 if (m_CheckMeleeItem && (!GetGame().IsDedicatedServer()))
3153 {
3156 }
3157
3158 #ifdef DEVELOPER
3159 TryGetInVehicleDebug();
3160 #endif
3161
3162 OnCommandHandlerTick(pDt, pCurrentCommandID);
3163 }
3164
3165 #ifdef DEVELOPER
3166 void SetGetInVehicleDebug(EntityAI ent)
3167 {
3168 m_GetInVehicleTransportDebug = Transport.Cast(ent);
3169 }
3170
3171 void TryGetInVehicleDebug()
3172 {
3173 if (m_GetInVehicleTransportDebug)
3174 {
3175 HumanCommandVehicle vehCommand = StartCommand_Vehicle(m_GetInVehicleTransportDebug, 0, 0);
3176 if (vehCommand)
3177 {
3178 vehCommand.SetVehicleType(m_GetInVehicleTransportDebug.GetAnimInstance());
3179 }
3180 m_GetInVehicleTransportDebug = null;
3181 }
3182 }
3183 #endif
3184
3185 //MAP handling
3188 {
3189 CloseMapEx(false);
3190 }
3191
3192 void CloseMapEx(bool cancelled)
3193 {
3194 if (m_hac && !GetMapClosingSyncSent())
3195 {
3197 {
3198 if (GetGame().IsMultiplayer() && GetGame().IsClient())
3199 {
3200 ActionManagerClient mngr_client;
3201 CastTo(mngr_client, GetActionManager());
3202
3203 if (cancelled)
3204 {
3205 mngr_client.RequestInterruptAction();
3206 }
3207 else
3208 {
3209 mngr_client.RequestEndAction();
3210 }
3211
3213 GetGame().GetMission().RemoveActiveInputRestriction(EInputRestrictors.MAP);
3214 }
3215 else if (!GetGame().IsMultiplayer())
3216 {
3217 int command_ID = DayZPlayerConstants.CMD_ACTIONINT_END;
3218 if (cancelled)
3219 {
3220 command_ID = DayZPlayerConstants.CMD_ACTIONINT_INTERRUPT;
3221 }
3222 m_hac.InternalCommand(command_ID);
3223 }
3225 }
3226 }
3227
3228 if (!GetGame().IsDedicatedServer())
3229 {
3230 if (GetGame().GetUIManager().IsMenuOpen(MENU_MAP))
3231 {
3233 if (m_Hud)
3234 {
3235 m_Hud.ShowQuickbarPlayer(true);
3236 }
3237
3239 GetGame().GetMission().RemoveActiveInputRestriction(EInputRestrictors.MAP);
3240 }
3241 }
3242 }
3243
3244 void SetMapOpen(bool state)
3245 {
3246 m_MapOpen = state;
3247 }
3248
3250 {
3251 return m_MapOpen;
3252 }
3253
3254 void SetMapClosingSyncSet(bool state)
3255 {
3256 m_MapClosingSyncSent = state;
3257 }
3258
3260 {
3261 return m_MapClosingSyncSent;
3262 }
3263
3265 {
3266 if (IsRaised())
3267 {
3268 return true;
3269 }
3270
3271 return false;
3272 }
3273
3275 {
3276 if (GetUApi().GetInputByID(UADefaultAction).LocalPress() || GetUApi().GetInputByID(UAUIMenu).LocalPress() || GetUApi().GetInputByID(UAGear).LocalPress())
3277 {
3278 return true;
3279 }
3280
3281 return false;
3282 }
3283
3288
3290 {
3292 {
3293 GetMapNavigationBehaviour().OnItemInPlayerPossession(item);
3294 }
3295 }
3296
3298 {
3300 {
3301 GetMapNavigationBehaviour().OnItemNotInPlayerPossession(item);
3302 }
3303 }
3304
3305 void SetCheckMeleeItem(ItemBase item = null)
3306 {
3307 m_CheckMeleeItem = item;
3308 }
3309
3310 void SetShakesForced(int value)
3311 {
3312 m_ShakesForced = value;
3313 }
3314
3316 {
3317 int level;
3318 if (m_ShakesForced > 0)
3319 {
3320 level = m_ShakesForced;
3321 }
3322 else
3323 {
3324 float heat_comfort = GetStatHeatComfort().Get();
3326 {
3328 level = Math.Lerp(1,7,value);
3329 level = Math.Clamp(value,1,7);
3330 /*
3331 value = Math.Clamp(value,0,1);
3332 level = Math.Round(value * SHAKE_LEVEL_MAX);//translate from normalized value to levels
3333 */
3334 }
3335 }
3336 if (level != m_Shakes)
3337 {
3338 m_Shakes = level;
3339 SetSynchDirty();
3340 }
3341 }
3342
3343 override bool IsLanded(int pCurrentCommandID)
3344 {
3345 if (super.IsLanded(pCurrentCommandID))
3346 {
3347 return true;
3348 }
3349
3351 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
3352 {
3353 bool wasFalling = m_IsUnconsciousFalling;
3354 m_IsUnconsciousFalling = PhysicsIsFalling(false);
3355 return wasFalling && !m_IsUnconsciousFalling;
3356 }
3357
3359
3360 return false;
3361 }
3362
3363 override bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
3364 {
3365 if (super.OnLand(pCurrentCommandID, fallDamageData))
3366 {
3367 return true;
3368 }
3369
3372
3373 return false;
3374 }
3375
3376 override bool IsAlreadyInFallingCommand(int pCurrentCommandID)
3377 {
3378 if (super.IsAlreadyInFallingCommand(pCurrentCommandID))
3379 {
3380 return true;
3381 }
3382
3385 return pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS || pCurrentCommandID == DayZPlayerConstants.COMMANDID_DAMAGE;
3386 }
3387
3389 {
3391
3392 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
3393 {
3394 GetGame().GetMission().GetHud().ShowHudUI(false);
3396 if (m_LastCommandBeforeUnconscious != DayZPlayerConstants.COMMANDID_VEHICLE)
3397 {
3398 EntityAI entity_in_hands = GetHumanInventory().GetEntityInHands();
3399 if (entity_in_hands && CanDropEntity(entity_in_hands) && !IsRestrained() && !IsSurrendered())
3400 {
3401 DropItem(ItemBase.Cast(entity_in_hands));
3402 }
3403 }
3405 m_EffectWidgets.AddSuspendRequest(EffectWidgetSuspends.UNCON);
3406 }
3407
3408 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER || (!GetGame().IsMultiplayer() && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT))
3409 {
3410 SetSynchDirty();
3411
3412 if (m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE)
3413 {
3414 if (m_TransportCache)
3415 m_TransportCache.MarkCrewMemberUnconscious(m_TransportCache.CrewMemberIndex(this));
3416 }
3417
3418 // disable voice communication
3419 GetGame().EnableVoN(this, false);
3420
3421 if (m_AdminLog)
3422 {
3423 m_AdminLog.UnconStart(this);
3424 }
3425
3426 // When we fall uncon we force out of block
3427 if (GetMeleeFightLogic())
3428 {
3429 GetMeleeFightLogic().SetBlock(false);
3430 }
3431 }
3432
3433 SetMasterAttenuation("UnconsciousAttenuation");
3434
3436 m_OnUnconsciousStart.Invoke(this);
3437 }
3438
3439 void OnUnconsciousStop(int pCurrentCommandID)
3440 {
3442 SetSynchDirty();
3445 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
3446 {
3447 GetGame().GetMission().GetHud().ShowHudUI(true);
3448 if (pCurrentCommandID != DayZPlayerConstants.COMMANDID_DEATH)
3449 {
3450 GetGame().GetSoundScene().SetSoundVolume(g_Game.m_volume_sound,1);
3451 PPERequesterBank.GetRequester(PPERequester_UnconEffects).Stop();
3453 if (GetGame().GetUIManager().IsDialogVisible())
3454 {
3456 }
3457 if (GetGame().GetUIManager().IsMenuOpen(MENU_RESPAWN_DIALOGUE))
3458 {
3460 }
3461 }
3462 SetInventorySoftLock(false);
3463 m_EffectWidgets.RemoveSuspendRequest(EffectWidgetSuspends.UNCON);
3464 }
3465 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
3466 {
3467 // enable voice communication
3468 if (IsAlive())
3469 GetGame().EnableVoN(this, true);
3470
3471 if (m_AdminLog)
3472 {
3473 m_AdminLog.UnconStop(this);
3474 }
3475 }
3476
3477 SetMasterAttenuation("");
3478
3480 m_OnUnconsciousStop.Invoke(this);
3481 }
3482
3483 void OnUnconsciousUpdate(float pDt, int last_command)
3484 {
3485 m_UnconsciousTime += pDt;
3486 if (GetGame().IsServer())
3487 {
3488 int shock_simplified = SimplifyShock();
3489
3490 if (m_ShockSimplified != shock_simplified)
3491 {
3492 m_ShockSimplified = shock_simplified;
3493 SetSynchDirty();
3494 }
3495
3497 {
3498 PluginAdminLog adm = PluginAdminLog.Cast(GetPlugin(PluginAdminLog));
3499 adm.PlayerKilledByDrowningUncon(this);
3500
3501 SetHealth("","",-100);
3502 }
3503 }
3504 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
3505 {
3507 if (GetPulseType() == EPulseType.REGULAR)
3508 {
3509 float shock_simple_normalized = GetSimplifiedShockNormalized();
3510
3511 float sin = Math.Sin(m_UnconsciousTime * 0.3);
3512 float sin_normalized = (sin + 1) / 2;
3513 if (sin_normalized < 0.05)
3514 {
3515 m_UnconsciousVignetteTarget = (1 - shock_simple_normalized / 3) * 2/*vignette max*/;
3516 }
3517 float vignette = Math.Lerp(2,m_UnconsciousVignetteTarget, sin_normalized);
3518 m_UnconParam.param1 = vignette;
3519 PPERequesterBank.GetRequester(PPERequester_UnconEffects).Start(m_UnconParam);
3520 }
3521 }
3522 }
3523
3525 {
3526 int shock = Math.Lerp(0, SIMPLIFIED_SHOCK_CAP, GetHealth("","Shock") / GetMaxHealth("","Shock"));
3527 shock = Math.Clamp(shock, 0, SIMPLIFIED_SHOCK_CAP);
3528 return shock;
3529 }
3530
3535
3536 override bool IsUnconscious()
3537 {
3538 return m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_UNCONSCIOUS || m_IsUnconscious;
3539 }
3540
3542 {
3543 return m_IsUnconscious;
3544 }
3545
3546 override bool CanBeTargetedByAI(EntityAI ai)
3547 {
3548 #ifdef DIAG_DEVELOPER
3549 if (!m_CanBeTargetedDebug)
3550 {
3551 return false;
3552 }
3553 #endif
3554
3555 return super.CanBeTargetedByAI(ai) && !IsUnconscious() && !IsInVehicle();
3556 }
3557
3558 void GiveShock(float shock)
3559 {
3560 AddHealth("","Shock",shock);
3561 }
3562
3563
3565 {
3567 GetGame().GetMission().RemoveActiveInputExcludes({"inventory"},true);
3568 GetGame().GetMission().RemoveActiveInputRestriction(EInputRestrictors.INVENTORY);
3569 }
3570
3572 void ShockRefill(float pDt);
3573
3574 //BrokenLegs
3575 // -----------------------
3576
3578 {
3579 return Math.AbsInt(m_BrokenLegState);//negative value denotes first time activation
3580 }
3581
3582 //Server side
3583 void SetBrokenLegs(int stateId)
3584 {
3585 m_BrokenLegState = stateId;
3586
3588 eBrokenLegs state = GetBrokenLegs();//m_BrokenLegState can go bellow 0, cannot be used directly
3589
3590 if (state == eBrokenLegs.NO_BROKEN_LEGS)
3591 {
3592 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.BROKEN_LEGS;
3593 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.BROKEN_LEGS_SPLINT;
3594 }
3595 else if (state == eBrokenLegs.BROKEN_LEGS)
3596 {
3597 SetLegHealth();
3598 }
3599 else if (state == eBrokenLegs.BROKEN_LEGS_SPLINT)
3600 {
3601 // handle splint here
3602 }
3603
3604 SetSynchDirty();
3605 }
3606
3607 //Update of state
3608 void UpdateBrokenLegs(int stateId)
3609 {
3610 eBrokenLegs state = GetBrokenLegs();
3611 //Raise broken legs flag and force to prone
3612 if (state != eBrokenLegs.NO_BROKEN_LEGS)
3613 {
3614 if (state == eBrokenLegs.BROKEN_LEGS_SPLINT)
3615 {
3616 if (m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_PRONE)
3617 {
3618 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.PRONE_ANIM_OVERRIDE;
3619 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.BROKEN_LEGS;
3620 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask | eInjuryOverrides.BROKEN_LEGS_SPLINT;
3621 }
3622 m_InjuryHandler.CheckValue(false);
3623
3624 }
3625 else if (state == eBrokenLegs.BROKEN_LEGS)
3626 {
3627
3628 if (m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_PRONE)
3629 {
3630 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.PRONE_ANIM_OVERRIDE;
3631 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.BROKEN_LEGS_SPLINT;
3632 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask | eInjuryOverrides.BROKEN_LEGS;
3633 }
3634
3636 m_InjuryHandler.CheckValue(false);
3637
3638 }
3639 }
3640 else if (state == eBrokenLegs.NO_BROKEN_LEGS)
3641 {
3642 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.BROKEN_LEGS;
3643 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.BROKEN_LEGS_SPLINT;
3644 }
3645
3646 }
3647
3649 {
3650 PlaySoundSet(m_BrokenLegSound, SOUND_BREAK_LEG, 0.1, 0.1);
3651 }
3652 void BrokenLegForceProne(bool forceOverride = false)
3653 {
3654 if (!IsInWater() && !IsSwimming() && !IsClimbingLadder() && !IsInVehicle() && !IsClimbing() && DayZPlayerUtils.PlayerCanChangeStance(this, DayZPlayerConstants.STANCEIDX_PRONE))
3655 {
3656 if (m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_PRONE && m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
3657 {
3658 EntityAI attachment;
3659 Class.CastTo(attachment, GetItemOnSlot("Splint_Right"));
3660 if (attachment && attachment.GetType() == "Splint_Applied")
3661 {
3662 attachment.Delete();
3663 }
3664
3666 m_ShockHandler.CheckValue(true);
3667
3668
3669 if (m_ShockHandler.GetCurrentShock() >= 25) //Prevent conflict with unconsciousness by not forcing prone when going uncon (25 shock or less left)
3670 {
3671
3672 //calcels user action
3673 HumanCommandActionCallback cmd = GetCommand_Action();
3674 if (cmd)
3675 {
3676 cmd.Cancel();
3677 }
3678
3679 StopHandEvent();
3680 //Get command move and verify not null
3681 HumanCommandMove hcm = StartCommand_Move();//not sure why this is here
3682 hcm = GetCommand_Move();
3683 if (hcm)
3684 {
3685 hcm.ForceStance(DayZPlayerConstants.STANCEIDX_PRONE);
3686 }
3687 }
3688 }
3689 }
3690
3691 m_JumpClimb.CheckAndFinishJump();
3692 }
3693
3694 //Used to inflict shock when player is walking (only inflicted on Update timer)
3696 {
3697 //No need to pursue here if player is prone as the following logic is not applied
3698 if (m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_PRONE && m_MovementState.m_iStanceIdx != DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
3699 {
3700 float avgLegHealth = GetHealth("RightLeg","") + GetHealth("LeftLeg","") + GetHealth("RightFoot","") + GetHealth("LeftFoot","");
3701 avgLegHealth *= 0.25; //divide by 4 to make the average leg health;
3702
3703 if (IsSwimming())
3704 {
3705 //swimming other than forward is not detectable in script other than through velocity check
3706 vector v;
3707 PhysicsGetVelocity(v);
3708
3709 if (v.LengthSq() > 0)
3710 {
3712 }
3713 }
3714 else if (m_MovementState.m_iMovement != 0)
3715 {
3716 if (IsClimbingLadder())
3717 {
3719 }
3720 else if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_ERECT || m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT)
3721 {
3722 if (m_MovementState.m_iMovement > 1)//only jog and faster
3723 {
3725 }
3726 }
3727 else if (m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_CROUCH || m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDCROUCH)
3728 {
3729 //any speed other than idle
3731 }
3732 }
3733 else
3734 {
3735 //Here apply shock if player is standing or crouched and STANDING STILL
3737 }
3738
3739 m_ShockHandler.CheckValue(true);
3740 }
3741 }
3742
3743 //Always use the same thresholds but allow passing of different shock values
3744 void MovingShock(float legHealth, float highShock, float midShock, float lowShock)
3745 {
3747 {
3748 //Inflict "high shock"
3749 m_ShockHandler.SetShock(highShock);
3750 }
3752 {
3753 //Inflict "low shock"
3754 m_ShockHandler.SetShock(lowShock);
3755 }
3756 else
3757 {
3758 //If neither high nore low, inflict "mid shock"
3759 m_ShockHandler.SetShock(midShock);
3760 }
3761 }
3762
3763 void DealShock(float dmg)
3764 {
3765 Param1<float> damage = new Param1<float>(0);
3766 damage.param1 = dmg;
3767 GetGame().RPCSingleParam(this, ERPCs.RPC_SHOCK, damage, true, GetIdentity());
3768 }
3769
3770 //Prevent player from picking up heavy items when legs are broken
3771 override bool CanPickupHeavyItem(notnull EntityAI item)
3772 {
3773 if (item.IsHeavyBehaviour() && (GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS || GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS_SPLINT))
3774 return false;
3775
3776 return super.CanPickupHeavyItem(item);
3777 }
3778
3779 //Set all leg zones' health to 0 in order to limit emergent behaviour and prevent confusion as to how broken legs really work
3781 {
3782 SetHealth("RightLeg", "", 0);
3783 SetHealth("RightFoot", "", 0);
3784 SetHealth("LeftLeg", "", 0);
3785 SetHealth("LeftFoot", "", 0);
3786 }
3787
3789 {
3790 ItemBase itemInHands = GetItemInHands();
3791 if (itemInHands && itemInHands.IsHeavyBehaviour())
3792 DropItem(itemInHands);
3793 }
3794
3796 {
3797 EntityAI attachment;
3798 Class.CastTo(attachment, GetItemOnSlot("Splint_Right"));
3799 if (attachment && attachment.GetType() == "Splint_Applied")
3800 {
3801 return true;
3802 }
3803 return false;
3804 }
3805
3806 // -----------------------
3807
3808
3809 override void OnCommandSwimStart()
3810 {
3811 ItemBase itemInHands = GetItemInHands();
3812 if (itemInHands)
3813 {
3814 if (itemInHands.IsHeavyBehaviour())
3815 {
3816 TryHideItemInHands(false);
3817 DropHeavyItem();
3818 }
3819 else
3820 {
3821 TryHideItemInHands(true);
3822 }
3823 itemInHands.OnItemInHandsPlayerSwimStart(this);
3824 }
3825 m_AnimCommandStarting = HumanMoveCommandID.CommandSwim;
3826
3827 if (GetInventory())
3828 GetInventory().LockInventory(LOCK_FROM_SCRIPT);
3829
3831 GetDayZGame().GetBacklit().OnSwimmingStart();
3832
3834 GetWeaponManager().DelayedRefreshAnimationState(10);
3836
3837 GetGame().GetMission().AddActiveInputExcludes({"swimming"});
3838 }
3839
3840 override void OnCommandSwimFinish()
3841 {
3842 TryHideItemInHands(false, true);
3843
3844 if (GetInventory())
3845 GetInventory().UnlockInventory(LOCK_FROM_SCRIPT);
3846
3847 GetDayZGame().GetBacklit().OnSwimmingStop();
3848
3849 GetWeaponManager().RefreshAnimationState();
3850
3852 }
3853
3854 override void OnCommandLadderStart()
3855 {
3856 m_AnimCommandStarting = HumanMoveCommandID.CommandLadder;
3857 TryHideItemInHands(true);
3858
3859 if (GetInventory())
3860 GetInventory().LockInventory(LOCK_FROM_SCRIPT);
3861
3863
3864 GetGame().GetMission().AddActiveInputExcludes({"ladderclimbing"});
3865 }
3866
3868 {
3869 TryHideItemInHands(false, true);
3870
3871 if (GetInventory())
3872 GetInventory().UnlockInventory(LOCK_FROM_SCRIPT);
3873
3874 GetGame().GetMission().RemoveActiveInputExcludes({"ladderclimbing"});
3875 }
3876
3877 override void OnCommandFallStart()
3878 {
3879 m_AnimCommandStarting = HumanMoveCommandID.CommandFall;
3880
3881 if (GetInventory())
3882 GetInventory().LockInventory(LOCK_FROM_SCRIPT);
3883
3885
3887 GetWeaponManager().DelayedRefreshAnimationState(10);
3889 }
3890
3891 override void OnCommandFallFinish()
3892 {
3893 if (GetInventory())
3894 GetInventory().UnlockInventory(LOCK_FROM_SCRIPT);
3895
3896 GetWeaponManager().RefreshAnimationState();
3897 }
3898
3899 override void OnCommandClimbStart()
3900 {
3901 m_AnimCommandStarting = HumanMoveCommandID.CommandClimb;
3902
3903 if (GetInventory())
3904 GetInventory().LockInventory(LOCK_FROM_SCRIPT);
3905
3907
3909 GetWeaponManager().DelayedRefreshAnimationState(10);
3911 }
3912
3913 override void OnCommandClimbFinish()
3914 {
3915 if (GetInventory())
3916 GetInventory().UnlockInventory(LOCK_FROM_SCRIPT);
3917
3918 GetWeaponManager().RefreshAnimationState();
3919 }
3920
3922 {
3923 m_AnimCommandStarting = HumanMoveCommandID.CommandVehicle;
3924
3925 if (GetInventory())
3926 GetInventory().LockInventory(LOCK_FROM_SCRIPT);
3927
3929
3930 ItemBase itemInHand = GetItemInHands();
3931 EntityAI itemOnHead = FindAttachmentBySlotName("Headgear");
3932
3933 if (itemInHand && itemInHand.GetCompEM())
3934 itemInHand.GetCompEM().SwitchOff();
3935
3936 TryHideItemInHands(true);
3937
3938 if (itemOnHead && itemOnHead.GetCompEM())
3939 itemOnHead.GetCompEM().SwitchOff();
3940
3941 GetGame().GetMission().AddActiveInputExcludes({"vehicledriving"});
3942 }
3943
3945 {
3946 if (GetInventory())
3947 GetInventory().UnlockInventory(LOCK_FROM_SCRIPT);
3948
3949 TryHideItemInHands(false, true);
3950
3951 GetGame().GetMission().RemoveActiveInputExcludes({"vehicledriving"});
3952 }
3953
3954 override void OnCommandMelee2Start()
3955 {
3956 m_AnimCommandStarting = HumanMoveCommandID.CommandMelee2;
3957 m_IsFighting = true;
3958
3960 GetWeaponManager().DelayedRefreshAnimationState(10);
3962 }
3963
3965 {
3967
3968 GetWeaponManager().RefreshAnimationState();
3969
3970 }
3971
3972 override void OnCommandDeathStart()
3973 {
3974 m_AnimCommandStarting = HumanMoveCommandID.CommandDeath;
3975
3977 GetWeaponManager().DelayedRefreshAnimationState(10);
3979
3980 super.OnCommandDeathStart();
3981 }
3982
3983 override void OnJumpStart()
3984 {
3985 m_ActionManager.OnJumpStart();
3986
3988 GetWeaponManager().DelayedRefreshAnimationState(10);
3990 CloseMapEx(true);
3991 }
3992
3993 override void OnJumpEnd(int pLandType = 0)
3994 {
3996 {
3997 switch (pLandType)
3998 {
3999 case HumanCommandFall.LANDTYPE_NONE:
4000 case HumanCommandFall.LANDTYPE_LIGHT:
4001 m_PresenceNotifier.ProcessEvent(EPresenceNotifierNoiseEventType.LAND_LIGHT);
4002 break;
4003 case HumanCommandFall.LANDTYPE_MEDIUM:
4004 case HumanCommandFall.LANDTYPE_HEAVY:
4005 m_PresenceNotifier.ProcessEvent(EPresenceNotifierNoiseEventType.LAND_HEAVY);
4006 break;
4007 }
4008 }
4009
4010 GetWeaponManager().RefreshAnimationState();
4011 }
4012
4013 bool IsStance(int stance, int stanceMask)
4014 {
4015 return ((1 << stance) & stanceMask) != 0;
4016 }
4017
4018 override void OnStanceChange(int previousStance, int newStance)
4019 {
4020 int prone = DayZPlayerConstants.STANCEMASK_PRONE | DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
4021 int notProne = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_RAISEDERECT | DayZPlayerConstants.STANCEMASK_RAISEDCROUCH;
4022
4023 if (IsStance(previousStance, DayZPlayerConstants.STANCEMASK_PRONE) && IsStance(newStance, DayZPlayerConstants.STANCEMASK_ERECT))
4024 m_SprintedTimePerStanceMin = PlayerConstants.FULL_SPRINT_DELAY_FROM_PRONE;
4025
4026 if (IsStance(previousStance, DayZPlayerConstants.STANCEMASK_PRONE) && IsStance(previousStance, DayZPlayerConstants.STANCEMASK_CROUCH) || (IsStance(previousStance, DayZPlayerConstants.STANCEMASK_CROUCH) && IsStance(newStance, DayZPlayerConstants.STANCEMASK_ERECT)))
4027 m_SprintedTimePerStanceMin = PlayerConstants.FULL_SPRINT_DELAY_FROM_CROUCH;
4028
4029 if ((IsStance(previousStance, prone) && IsStance(newStance, notProne)) || (IsStance(previousStance, notProne) && IsStance(newStance, prone)))
4030 {
4032 GetWeaponManager().RefreshAnimationState();
4033 }
4034 }
4035
4036 override bool CanChangeStance(int previousStance, int newStance)
4037 {
4038 // Check if the player is playing a throwing animation
4039 if (GetThrowing().IsThrowingAnimationPlaying())
4040 {
4041 return false;
4042 }
4043
4044 // don't allow base stance change, only raised hands change
4045 if (IsRolling())
4046 {
4047 if (Math.AbsInt(previousStance - newStance) == 3)
4048 return true;
4049
4050 return false;
4051 }
4052
4053 // Check if the player is going to crouch or raised crouch
4054 if (newStance == DayZPlayerConstants.STANCEIDX_CROUCH || newStance == DayZPlayerConstants.STANCEIDX_RAISEDCROUCH)
4055 {
4056 return GetCurrentWaterLevel() <= GetDayZPlayerType().CommandSwimSettingsW().m_fToErectLevel;
4057 }
4058
4059 // Check if the player is going to prone
4060 if (newStance == DayZPlayerConstants.STANCEIDX_PRONE || newStance == DayZPlayerConstants.STANCEIDX_RAISEDPRONE)
4061 {
4062 return GetCurrentWaterLevel() <= GetDayZPlayerType().CommandSwimSettingsW().m_fToCrouchLevel;
4063 }
4064
4065 // The player can change stance if none of the conditions above are met
4066 return true;
4067 }
4068
4069
4070 override void OnCommandMoveStart()
4071 {
4072 if (GetGame().IsServer())
4073 {
4074 //In case player changes stance through a different command, we refresh the anim overrides
4075 int prone = DayZPlayerConstants.STANCEMASK_PRONE | DayZPlayerConstants.STANCEMASK_RAISEDPRONE;
4076 if (!IsPlayerInStance(prone))
4077 {
4078 m_InjuryHandler.m_ForceInjuryAnimMask = m_InjuryHandler.m_ForceInjuryAnimMask & ~eInjuryOverrides.PRONE_ANIM_OVERRIDE;
4080 }
4081 }
4082 }
4083
4084 override bool CanRoll()
4085 {
4087 return false;
4088
4089 if (IsInFBEmoteState() || m_EmoteManager.m_MenuEmote)
4090 {
4091 return false;
4092 }
4093
4094 return IsPlayerInStance(DayZPlayerConstants.STANCEMASK_PRONE | DayZPlayerConstants.STANCEMASK_RAISEDPRONE) && GetCommand_Move() && !GetCommand_Move().IsOnBack();
4095 }
4096
4097 override void OnRollStart(bool isToTheRight)
4098 {
4100
4101 if (GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
4103 }
4104
4105 override void OnRollFinish()
4106 {
4107 }
4108
4109 void OnJumpOutVehicleFinish(float carSpeed)
4110 {
4111 string surfaceType;
4112 int liquidType;
4113 GetGame().SurfaceUnderObject(this, surfaceType, liquidType);
4114 }
4115
4116 void OnVehicleSwitchSeat(int seatIndex)
4117 {
4118 }
4119
4121 {
4122 m_IsVehicleSeatDriver = true;
4123 if (m_Hud)
4124 m_Hud.ShowVehicleInfo();
4125
4126#ifdef FEATURE_NETWORK_RECONCILIATION
4127 PlayerIdentity identity = GetIdentity();
4128 if (identity)
4129 {
4130 Pawn pawn = Pawn.Cast(GetParent());
4131
4133 identity.Possess(pawn);
4134 }
4135#endif
4136 }
4137
4139 {
4140#ifdef FEATURE_NETWORK_RECONCILIATION
4141 PlayerIdentity identity = GetIdentity();
4142
4144 if (identity && !m_ShouldBeUnconscious)
4145 {
4147 identity.Possess(this);
4148 }
4149#endif
4150
4151 m_IsVehicleSeatDriver = false;
4152 if (m_Hud)
4153 m_Hud.HideVehicleInfo();
4154 }
4155
4156 override void OnThrowingModeChange(bool change_to_enabled)
4157 {
4158 if (change_to_enabled)
4159 {
4162 }
4163 }
4164
4165 override void EOnFrame(IEntity other, float timeSlice)
4166 {
4167 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
4168 {
4169 #ifndef NO_GUI
4170 m_Hud.Update(timeSlice);
4171
4172 if (IsControlledPlayer() && m_EffectWidgets && m_EffectWidgets.IsAnyEffectRunning())
4173 {
4174 m_EffectWidgets.Update(timeSlice);
4175 }
4176 #endif
4177
4179 m_UndergroundHandler.Tick(timeSlice);
4180
4182 m_UndergroundBunkerHandler.Tick(timeSlice);
4183 }
4184
4185 if (m_InEffectAreaType != 0 && GetGame().IsServer())
4186 OnUpdateEffectAreaServer(timeSlice);
4187 }
4188
4189 override void EOnPostFrame(IEntity other, int extra)
4190 {
4191 float delta_time = (GetGame().GetTime() - m_LastPostFrameTickTime) / 1000;
4193 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
4194 {
4196 {
4197 if (IsAlive())
4198 GetDamageDealtEffect().Update(delta_time);
4199 else
4200 delete GetDamageDealtEffect();
4201 }
4202
4203 if (m_EffectRadial)
4204 {
4205 if (IsAlive())
4206 {
4207 m_EffectRadial.Update(delta_time);
4208 }
4209 else
4210 m_EffectRadial = null;
4211 }
4212
4213
4214 if (GetFlashbangEffect())
4215 {
4216 if (IsAlive())
4217 {
4218 GetFlashbangEffect().Update(delta_time);
4219 }
4220 else
4221 {
4222 GetFlashbangEffect().Stop();
4223 delete GetFlashbangEffect();
4224 }
4225 }
4226
4227 if (GetShockEffect())
4228 {
4229 if (IsAlive())
4230 GetShockEffect().Update(delta_time);
4231 else
4232 delete GetShockEffect();
4233 }
4234
4235 m_InventoryActionHandler.OnUpdate();
4236 }
4237
4238 #ifdef DIAG_DEVELOPER
4239 DiagOnPostFrame(other, extra);
4240 #endif
4241 }
4242
4243#ifdef DIAG_DEVELOPER
4244 protected void DiagOnPostFrame(IEntity other, int extra)
4245 {
4246 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
4247 {
4248 if (m_WeaponDebug)
4249 {
4250 m_WeaponDebug.OnPostFrameUpdate();
4251 }
4252
4253 if (GetBleedingManagerRemote())
4254 {
4255 GetBleedingManagerRemote().OnUpdate();
4256 }
4257
4258 if (m_MeleeCombat)
4259 {
4260 if (DiagMenu.GetBool(DiagMenuIDs.MELEE_DEBUG))
4261 {
4262 m_MeleeDebug = true;
4263 m_MeleeCombat.Debug(GetItemInHands(), m_MeleeCombat.GetHitType());
4264 }
4265 else if (!DiagMenu.GetBool(DiagMenuIDs.MELEE_DEBUG) && m_MeleeDebug)
4266 {
4267 m_MeleeDebug = false;
4268 m_MeleeCombat.Debug(GetItemInHands(), m_MeleeCombat.GetHitType());
4269 }
4270 }
4271
4272 if (DiagMenu.GetBool(DiagMenuIDs.SOUNDS_ITEM_IMPACT_SOUNDS))
4273 InventoryItem.DrawImpacts();
4274
4275 if (GetPluginManager())
4276 {
4277 PluginDrawCheckerboard drawCheckerboard = PluginDrawCheckerboard.Cast(GetPluginManager().GetPluginByType(PluginDrawCheckerboard));
4278 if (drawCheckerboard && !drawCheckerboard.IsActive())
4279 {
4280 drawCheckerboard.ShowWidgets(DiagMenu.GetBool(DiagMenuIDs.MISC_DRAW_CHECKERBOARD));
4281 }
4282 }
4283
4284 if (m_PresenceNotifier)
4285 {
4286 m_PresenceNotifier.EnableDebug(DiagMenu.GetBool(DiagMenuIDs.MISC_PRESENCE_NOTIFIER_DBG));
4287 }
4288
4289 if (m_TargetTemperatureDiag)
4290 {
4291 m_TargetTemperatureDiag.ShowDebug(DiagMenu.GetBool(DiagMenuIDs.MISC_TARGET_TEMPERATURE));
4292 }
4293
4294 if (DiagMenu.GetBool(DiagMenuIDs.TRIGGER_PLAYER_DEBUG))
4295 {
4296 vector minmax[2];
4297 GetCollisionBox(minmax);
4298
4299 int color = COLOR_RED_A;
4300 if (m_IsInsideTrigger)
4301 color = COLOR_GREEN_A;
4302
4303 Shape dbgShape = Debug.DrawBoxEx(minmax[0], minmax[1], color, ShapeFlags.TRANSP|ShapeFlags.NOZWRITE|ShapeFlags.ONCE);
4304
4305 vector mat[4];
4306 GetTransform(mat);
4307 dbgShape.CreateMatrix(mat);
4308 dbgShape.SetMatrix(mat);
4309 }
4310 }
4311
4312 if (m_Environment && m_Environment.m_Debug)
4313 {
4314 #ifdef SERVER
4315 EnvDebugData envDebugData = m_Environment.GetEnvDebugData();
4316 GetGame().RPCSingleParam(this, ERPCs.DIAG_MISC_ENVIRONMENT_DEBUG_DATA, envDebugData, false, GetIdentity());
4317 #else
4318 m_Environment.ShowEnvDebugPlayerInfo(DiagMenu.GetBool(DiagMenuIDs.MISC_ENVIRONMENT_DEBUG));
4319 #endif
4320 }
4321
4322 if (m_FallDamage && m_FallDamage.m_Debug)
4323 {
4324 #ifdef SERVER
4325 FallDamageDebugData fallDamageDebugData = m_FallDamage.GetFallDamageDebugData();
4326 GetGame().RPCSingleParam(this, ERPCs.DIAG_MISC_FALLDAMAGE_DEBUG_DATA, fallDamageDebugData, false, GetIdentity());
4327 #else
4328 m_FallDamage.ShowFallDamageDebugInfo(DiagMenu.GetBool(DiagMenuIDs.MISC_FALLDAMAGE_DEBUG));
4329 #endif
4330 }
4331 }
4332
4333 override void OnEnterTrigger(ScriptedEntity trigger)
4334 {
4335 super.OnEnterTrigger(trigger);
4336
4337 ++m_IsInsideTrigger;
4338 }
4339
4340 override void OnLeaveTrigger(ScriptedEntity trigger)
4341 {
4342 super.OnLeaveTrigger(trigger);
4343
4344 --m_IsInsideTrigger;
4345 }
4346#endif
4347
4348 void StaminaHUDNotifier(bool show)
4349 {
4350 if (m_Hud)
4351 m_Hud.SetStaminaBarVisibility(show);
4352 }
4353
4354 override void DepleteStamina(EStaminaModifiers modifier, float dT = -1)
4355 {
4356 if (GetStaminaHandler())
4357 GetStaminaHandler().DepleteStamina(modifier,dT);
4358 }
4359
4360 override bool CanConsumeStamina(EStaminaConsumers consumer)
4361 {
4362 if (!GetStaminaHandler())
4363 return false;
4364
4365 bool val = (GetStaminaHandler().HasEnoughStaminaFor(consumer) && !IsRestrained() && !IsInFBEmoteState());
4366
4367 if (!val)
4368 StaminaHUDNotifier(false);
4369
4370 return val;
4371 }
4372
4374 {
4375 if (!GetStaminaHandler())
4376 return false;
4377
4378 bool val = (GetStaminaHandler().HasEnoughStaminaToStart(consumer) && !IsRestrained() && !IsInFBEmoteState());
4379
4380 if (!val)
4381 StaminaHUDNotifier(false);
4382
4383 return val;
4384 }
4385
4386 override bool CanClimb(int climbType, SHumanCommandClimbResult climbRes)
4387 {
4388 if (GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
4389 return false;
4390
4391 if (climbType == 1 && !CanConsumeStamina(EStaminaConsumers.VAULT))
4392 return false;
4393
4395 if (IsSwimming())
4396 return true;
4397
4398 if (climbType == 2 && (!CanConsumeStamina(EStaminaConsumers.CLIMB) || GetBrokenLegs() != eBrokenLegs.NO_BROKEN_LEGS))
4399 return false;
4400
4401 if (climbType > 0 && m_InjuryHandler && m_InjuryHandler.GetInjuryAnimValue() >= InjuryAnimValues.LVL3)
4402 return false;
4403
4404 return super.CanClimb(climbType,climbRes);
4405 }
4406
4407 override bool CanJump()
4408 {
4409 if (GetBrokenLegs() != eBrokenLegs.NO_BROKEN_LEGS)
4410 {
4411 return false;
4412 }
4413
4415 return false;
4416
4418 if (m_InjuryHandler && m_InjuryHandler.GetInjuryAnimValue() >= InjuryAnimValues.LVL3)
4419 return false;
4420
4421 if (IsInFBEmoteState() || m_EmoteManager.m_MenuEmote)
4422 {
4423 return false;
4424 }
4425
4426 return super.CanJump();
4427 }
4428
4430 {
4431 return m_JumpClimb.m_bIsJumpInProgress;
4432 }
4433
4435 {
4436 array<vector> temp = new array<vector>;
4438 int count = temp.Count();
4439 if (count > 0)
4440 {
4441 vector pos = target.GetPosition();
4442 for (int i = 0; i < count; i++)
4443 {
4444 if (vector.Distance(pos,temp.Get(i)) < GameConstants.REFRESHER_RADIUS)
4445 return true;
4446 }
4447
4448 return false;
4449 }
4450 else
4451 {
4452 return false;
4453 }
4454 }
4455
4457 {
4458 if ((GetGame().IsMultiplayer() && GetGame().IsServer()))
4459 {
4461 if (m_RefreshAnimStateIdx > 3)
4463 SetSynchDirty();
4464 }
4465 }
4466
4467 void RefreshHandAnimationState(int delay = 0)
4468 {
4469 if (delay == 0)
4470 {
4471 GetItemAccessor().OnItemInHandsChanged(true);
4472 GetItemAccessor().ResetWeaponInHands();
4473 }
4474 else
4475 {
4477 }
4478 }
4479
4480 // -------------------------------------------------------------------------
4481 // USER ACTIONS
4482 // -------------------------------------------------------------------------
4483
4485 {
4486 vector pdir = GetDirection();
4487 vector ptv = target.GetPosition() - GetPosition();
4488 pdir.Normalize();
4489 ptv.Normalize();
4490
4491 if (Math.AbsFloat(pdir[0]-ptv[0]) < 0.5 && Math.AbsFloat(pdir[2]-ptv[2]) < 0.5)
4492 {
4493 return true;
4494 }
4495 return false;
4496 }
4497
4498 //---------------------------------------------------------
4499 void OnQuickBarSingleUse(int slotClicked)
4500 {
4501 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
4502 return;
4503
4504 if (m_AreHandsLocked)
4505 return; //Player is in the short window of time after interrupting placement of an item and before getting it back in hands
4506
4507 if (GetInventory().IsInventoryLocked() || IsEmotePlaying())
4508 return;
4509
4510 if (GetThrowing().IsThrowingModeEnabled() || GetThrowing().IsThrowingAnimationPlaying())
4511 return;
4512
4513 if (IsRaised() || GetCommand_Melee() || IsSwimming() || IsClimbingLadder() || IsClimbing() || IsRestrained() || IsRestrainPrelocked())
4514 return;
4515
4516 if (GetDayZPlayerInventory().IsProcessing() || IsItemsToDelete())
4517 return;
4518
4519 if (GetActionManager().GetRunningAction() != null)
4520 return;
4521
4523 return;
4524
4526 return;
4527
4528 //TODO MW change locking method
4529 //if (GetDayZPlayerInventory().HasLockedHands())
4530 // return;
4531
4532 EntityAI quickBarEntity = GetQuickBarEntity(slotClicked - 1);//GetEntityInQuickBar(slotClicked - 1);
4533
4534 if (!quickBarEntity)
4535 return;
4536
4537 Magazine mag;
4538 Weapon_Base wpn;
4539
4540 if (Class.CastTo(mag, quickBarEntity) && Class.CastTo(wpn, mag.GetHierarchyParent()))
4541 return;
4542
4543 EntityAI inHandEntity = GetHumanInventory().GetEntityInHands();
4544
4545 if (!GetDayZPlayerInventory().IsIdle())
4546 return; // player is already performing some animation
4547
4548 InventoryLocation handInventoryLocation = new InventoryLocation;
4549 handInventoryLocation.SetHands(this,quickBarEntity);
4550 if (this.GetInventory().HasInventoryReservation(quickBarEntity, handInventoryLocation))
4551 return;
4552
4553 if (inHandEntity == quickBarEntity)
4554 {
4555 if (GetHumanInventory().CanRemoveEntityInHands())
4556 {
4557 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[QB] Stash - PredictiveMoveItemFromHandsToInventory HND=" + Object.GetDebugName(inHandEntity));
4558 PredictiveMoveItemFromHandsToInventory();
4559 }
4560 }
4561 else
4562 {
4563 InventoryLocation invLocQBItem = new InventoryLocation;
4564 quickBarEntity.GetInventory().GetCurrentInventoryLocation(invLocQBItem);
4565 if (GetInventory().HasInventoryReservation(quickBarEntity,invLocQBItem))
4566 return;
4567
4568 if (inHandEntity)
4569 {
4570 InventoryLocation Reserved_Item_il = new InventoryLocation;
4571
4572 InventoryLocation inHandEntityFSwapDst = new InventoryLocation;
4573 inHandEntity.GetInventory().GetCurrentInventoryLocation(inHandEntityFSwapDst);
4574
4575 int index = GetHumanInventory().FindUserReservedLocationIndex(inHandEntity);
4576 if (index >= 0)
4577 GetHumanInventory().GetUserReservedLocation(index, Reserved_Item_il);
4578
4579 if (Reserved_Item_il)
4580 inHandEntityFSwapDst.CopyLocationFrom(Reserved_Item_il, true);
4581
4582 if (index < 0 && GameInventory.CanSwapEntitiesEx(quickBarEntity, inHandEntity))
4583 {
4584 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[QB] PredictiveSwapEntities QB=" + Object.GetDebugName(quickBarEntity) + " HND=" + Object.GetDebugName(inHandEntity));
4585 PredictiveSwapEntities(quickBarEntity, inHandEntity);
4586 }
4587 else if (GameInventory.CanForceSwapEntitiesEx(quickBarEntity, handInventoryLocation, inHandEntity, inHandEntityFSwapDst))
4588 {
4589 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[QB] Swap - PredictiveForceSwapEntities HND=" + Object.GetDebugName(inHandEntity) + " QB=" + Object.GetDebugName(quickBarEntity) + " fswap_dst=" + InventoryLocation.DumpToStringNullSafe(inHandEntityFSwapDst));
4590 PredictiveForceSwapEntities(quickBarEntity, inHandEntity, inHandEntityFSwapDst);
4591 }
4592 }
4593 else
4594 {
4595 if (GetInventory().HasInventoryReservation(quickBarEntity,handInventoryLocation))
4596 return;
4597
4598 if (GetInventory().CanAddEntityIntoHands(quickBarEntity))
4599 {
4600 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[QB] Stash - PredictiveTakeEntityToHands QB=" + Object.GetDebugName(quickBarEntity));
4601 PredictiveTakeEntityToHands(quickBarEntity);
4602 }
4603 }
4604 }
4605 }
4606 //---------------------------------------------------------
4607 void OnQuickBarContinuousUseStart(int slotClicked)
4608 {
4609 if (GetInventory().IsInventoryLocked())
4610 return;
4611
4612 if (IsSwimming() || IsClimbingLadder() || GetCommand_Melee() || IsClimbing() || IsRestrained() || IsRestrainPrelocked())
4613 return;
4614
4615 ItemBase quickBarItem = ItemBase.Cast(GetQuickBarEntity(slotClicked - 1));
4616
4617 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
4618 {
4619 ItemBase itemInHands = ItemBase.Cast(GetHumanInventory().GetEntityInHands());
4620
4621 if (itemInHands != quickBarItem)
4622 {
4624
4625 if (amc.CanPerformActionFromQuickbar(itemInHands, quickBarItem))
4626 {
4627 amc.PerformActionFromQuickbar(itemInHands, quickBarItem);
4628 }
4629 else
4630 {
4631 if (IsRaised() || GetCommand_Melee())
4632 return;
4633
4634 amc.ForceTarget(quickBarItem);
4635 m_QuickBarFT = true;
4636 }
4637 }
4638 }
4639 m_QuickBarHold = true;
4640 }
4641 //---------------------------------------------------------
4642 void OnQuickBarContinuousUseEnd(int slotClicked)
4643 {
4644 if (m_QuickBarHold)
4645 {
4646 if ( GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
4647 {
4649
4651 {
4652 ActionBase action = am.GetRunningAction();
4653 if (action)
4654 {
4655 if (!action.GetInput().IsActive())
4656 {
4657 am.EndActionInput();
4658 }
4659
4660 }
4661 }
4662
4663 if (m_QuickBarFT)
4664 {
4665 am.ClearForceTarget();
4666 m_QuickBarFT = false;
4667 }
4668 }
4669 }
4670 m_QuickBarHold = false;
4671 }
4673 {
4674 m_ActionQBControl = !action.GetInput().IsActive();
4675 }
4676
4678 {
4679 return m_ActionQBControl;
4680 }
4682 {
4683 m_ActionQBControl = false;
4684 }
4685
4686 //---------------------------------------------------------
4687 // RADIAL QUICKBAR AND RELOAD ACTIONS
4688 //---------------------------------------------------------
4689 //the same functionality as normal quick bar slot key press
4690 void RadialQuickBarSingleUse(int slotClicked)
4691 {
4692 OnQuickBarSingleUse(slotClicked);
4693 }
4694
4695 //removed the need for holding down quick bar slot key
4696 void RadialQuickBarCombine(int slotClicked)
4697 {
4698 EntityAI quickBarEntity = GetQuickBarEntity(slotClicked - 1);
4699 EntityAI entity_in_hands = GetHumanInventory().GetEntityInHands();
4700
4701 ReloadWeapon(entity_in_hands, quickBarEntity);
4702 }
4703
4704 //removed the need for holding down quick bar slot key
4706 {
4707 EntityAI magazine = GetMagazineToReload(weapon);
4708 ReloadWeapon(weapon, magazine);
4709 }
4710
4711 //Reload weapon with given magazine
4712 void ReloadWeapon(EntityAI weapon, EntityAI magazine)
4713 {
4714 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
4715 {
4716 ActionManagerClient mngr_client;
4717 CastTo(mngr_client, GetActionManager());
4718
4719 if (mngr_client && FirearmActionLoadMultiBulletRadial.Cast(mngr_client.GetRunningAction()))
4720 {
4721 mngr_client.Interrupt();
4722 }
4723 else if (GetHumanInventory().GetEntityInHands()!= magazine)
4724 {
4725 Weapon_Base wpn;
4726 Magazine mag;
4727 Class.CastTo(wpn, weapon);
4728 Class.CastTo(mag, magazine);
4729 if (GetWeaponManager().CanUnjam(wpn))
4730 {
4731 GetWeaponManager().Unjam();
4732 }
4733 else if (GetWeaponManager().CanAttachMagazine(wpn, mag))
4734 {
4735 GetWeaponManager().AttachMagazine(mag);
4736 }
4737 else if (GetWeaponManager().CanSwapMagazine(wpn, mag))
4738 {
4739 GetWeaponManager().SwapMagazine(mag);
4740 }
4741 else if (GetWeaponManager().CanLoadBullet(wpn, mag))
4742 {
4743 //GetWeaponManager().LoadMultiBullet(mag);
4744
4745 ActionTarget atrg = new ActionTarget(mag, this, -1, vector.Zero, -1.0);
4746 if (mngr_client && !mngr_client.GetRunningAction() && mngr_client.GetAction(FirearmActionLoadMultiBulletRadial).Can(this, atrg, wpn))
4747 mngr_client.PerformActionStart(mngr_client.GetAction(FirearmActionLoadMultiBulletRadial), atrg, wpn);
4748 }
4749 }
4750 }
4751 }
4752
4753 //returns compatible magazine from player inventory with highest ammo count
4755 {
4756 Weapon_Base weapon_base = Weapon_Base.Cast(weapon);
4757 WeaponManager weapon_manager = GetWeaponManager();
4758 EntityAI magazine_to_reload;
4759
4760 EntityAI ammo_magazine; //magazine
4761 int last_ammo_magazine_count;
4762 int ammo_magazine_count;
4763
4764 EntityAI ammo_pile; //ammo pile
4765 int last_ammo_pile_count;
4766 int ammo_pile_count;
4767
4768 //Get all magazines in (player) inventory
4769 for (int att_i = 0; att_i < GetInventory().AttachmentCount(); ++att_i)
4770 {
4771 EntityAI attachment = GetInventory().GetAttachmentFromIndex(att_i);
4772 ref CargoBase attachment_cargo = attachment.GetInventory().GetCargo();
4773
4774 if (attachment_cargo)
4775 {
4776 for (int cgo_i = 0; cgo_i < attachment_cargo.GetItemCount(); ++cgo_i)
4777 {
4778 EntityAI cargo_item = attachment_cargo.GetItem(cgo_i);
4779
4780 //check for proper magazine
4781 if (cargo_item.IsMagazine())
4782 {
4783 Magazine magazine = Magazine.Cast(cargo_item);
4784 ammo_pile_count = magazine.GetAmmoCount();
4785
4786 //magazines (get magazine with max ammo count)
4787 if (weapon_manager.CanAttachMagazine(weapon_base, magazine) || weapon_manager.CanSwapMagazine(weapon_base, magazine))
4788 {
4789 if (ammo_pile_count > 0)
4790 {
4791 if (last_ammo_magazine_count == 0)
4792 {
4793 ammo_magazine = magazine;
4794 last_ammo_magazine_count = ammo_pile_count;
4795 }
4796 else
4797 {
4798 if (last_ammo_magazine_count < ammo_pile_count)
4799 {
4800 ammo_magazine = magazine;
4801 last_ammo_magazine_count = ammo_pile_count;
4802 }
4803 }
4804 }
4805 }
4806 //bullets (get ammo pile with min ammo count)
4807 else if (weapon_manager.CanLoadBullet(weapon_base, magazine))
4808 {
4809 if (ammo_pile_count > 0)
4810 {
4811 if (last_ammo_pile_count == 0)
4812 {
4813 ammo_pile = magazine;
4814 last_ammo_pile_count = ammo_pile_count;
4815 }
4816 else
4817 {
4818 if (last_ammo_pile_count > ammo_pile_count)
4819 {
4820 ammo_pile = magazine;
4821 last_ammo_pile_count = ammo_pile_count;
4822 }
4823 }
4824 }
4825 }
4826 }
4827 }
4828 }
4829 }
4830
4831 //prioritize magazine
4832 if (ammo_magazine)
4833 {
4834 return ammo_magazine;
4835 }
4836
4837 return ammo_pile;
4838 }
4839 //---------------------------------------------------------
4840
4841
4842 //---------------------------------------------------------
4844 {
4845 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER || !GetGame().IsMultiplayer())
4846 {
4849 }
4850
4851#ifdef DIAG_DEVELOPER
4852 if (!m_Bot)
4853 {
4854 m_Bot = new Bot(this);
4855 m_Bot.Start();
4856 }
4857#endif
4858 }
4859
4860 //---------------------------------------------------------
4861 //Obsolete
4863 {
4864 return m_LiquidTendencyDrain;
4865 }
4866 //---------------------------------------------------------
4867 //Obsolete
4868 void SetLiquidTendencyDrain(bool state)
4869 {
4870 m_LiquidTendencyDrain = state;
4871 }
4872
4873 //---------------------------------------------------------
4876 {
4877 return m_FlagRaisingTendency;
4878 }
4879 //---------------------------------------------------------
4881 void SetFlagTendencyRaise(bool state)
4882 {
4883 m_FlagRaisingTendency = state;
4884 }
4885
4886 override SoundOnVehicle PlaySound(string sound_name, float range, bool create_local = false)
4887 {
4888 return BetaSound.SaySound(this, sound_name, range, false);
4889 }
4890
4892 {
4893 return GetWeightEx();
4894 }
4895
4897 {
4898 return GetWeightEx() >= OVERLOAD_LIMIT;
4899 }
4900
4901 void SetPlayerLoad(float load)//Deprecated
4902 {
4903 m_CargoLoad = load;
4904 //Print("m_CargoLoad: " + m_CargoLoad);
4905 //Log(ToString(this) + "'s load weight is " + ftoa(m_CargoLoad) + " g.", LogTemplates.TEMPLATE_PLAYER_WEIGHT);
4906 }
4907
4908 //Deprecated, will be overrid by other method calls (in order to ensure stamina calculation is properly set)
4909 void AddPlayerLoad(float addedload)//Deprecated
4910 {
4911 float newload = GetPlayerLoad() + addedload;
4912 SetPlayerLoad(newload);
4913
4914 // Do not need -> Log is in SetPlayerLoad
4915 //PrintString(ToString(this) + "'s load weight is " + ToString(m_CargoLoad) + " g.");
4916 }
4917
4919 {
4920 return GetInventory().HasEntityInInventory(entity);
4921 }
4922
4923 override bool NeedInventoryJunctureFromServer(notnull EntityAI item, EntityAI currParent, EntityAI newParent)
4924 {
4925 if (GetGame().IsMultiplayer())
4926 {
4928 switch (t)
4929 {
4930 case DayZPlayerInstanceType.INSTANCETYPE_AI_SINGLEPLAYER:
4931 return false;
4932 case DayZPlayerInstanceType.INSTANCETYPE_CLIENT:
4933 case DayZPlayerInstanceType.INSTANCETYPE_SERVER:
4934 case DayZPlayerInstanceType.INSTANCETYPE_AI_SERVER:
4935 case DayZPlayerInstanceType.INSTANCETYPE_AI_REMOTE:
4936 case DayZPlayerInstanceType.INSTANCETYPE_REMOTE:
4937 return true; // Might help mitigate "megabugged" (desync)
4938
4939 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[syncinv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " NeedInventoryJunctureFromServer item=" + Object.GetDebugName(item) + " currPar=" + currParent + " newPar=" + newParent);
4940
4941 bool i_owned = GetHumanInventory().HasEntityInInventory(item);
4942
4943 bool cp_owned = false;
4944 if (currParent)
4945 cp_owned = GetHumanInventory().HasEntityInInventory(currParent);
4946
4947 bool np_owned = false;
4948 if (newParent)
4949 np_owned = GetHumanInventory().HasEntityInInventory(newParent);
4950
4951 bool all_owned = i_owned && cp_owned && (np_owned || (newParent == null));
4952 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[syncinv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " NeedInventoryJunctureFromServer=" + !all_owned + " i_pwn=" + i_owned + " cp_pwn=" + cp_owned + " np_pwn=" + np_owned);
4953
4954 return !all_owned;
4955 default:
4956 Error("[syncinv] unsupported instance type t=" + t);
4957 break;
4958 }
4959 }
4960 return false;
4961 }
4962
4963
4964 override protected float GetWeightSpecialized(bool forceRecalc = false)
4965 {
4966 float totalWeight = super.GetWeightSpecialized(forceRecalc);
4967
4968 ItemBase itemHands = GetItemInHands();
4969 if (itemHands) // adds weight of item carried in hands
4970 {
4971 totalWeight += itemHands.GetWeightEx(forceRecalc);
4972 }
4973 #ifdef DEVELOPER
4974 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
4975 {
4976 float itemInHandsWeight = totalWeight - super.GetWeightSpecialized(forceRecalc);
4977 WeightDebugData dta = WeightDebug.GetWeightDebug(this);
4978 dta.SetCalcDetails("TMan: " + (super.GetWeightSpecialized(forceRecalc)+ itemInHandsWeight) +"(contents weight[includes item in hands])");
4979 }
4980 #endif
4981 return totalWeight;
4982 }
4983
4985 {
4986 const int VISIBILITY_SLOTS_COUNT = 10;
4987
4988 int attcount = GetInventory().AttachmentCount();
4989 float sumVisibility = 0;
4990 float countVisibility = 0;
4991 float visibilityMean = 0;
4992
4993 if (attcount > 0)
4994 {
4995 for (int att = 0; att < attcount; att++)
4996 {
4997 EntityAI attachment = GetInventory().GetAttachmentFromIndex(att);
4998 if (attachment.IsClothing())
4999 {
5000 ClothingBase clothing;
5001 Class.CastTo(clothing, attachment);
5002 sumVisibility += clothing.GetItemVisibility();
5003 countVisibility++;
5004 }
5005 }
5006
5007 visibilityMean = (sumVisibility + (VISIBILITY_SLOTS_COUNT - countVisibility)) / VISIBILITY_SLOTS_COUNT;
5008 SetVisibilityCoef(visibilityMean);
5009 }
5010 else
5011 {
5012 visibilityMean = 1;
5013 SetVisibilityCoef(visibilityMean);
5014 }
5015 }
5016
5017 void SetVisibilityCoef(float pVisibility)
5018 {
5019 m_VisibilityCoef = pVisibility;
5020 }
5021
5023 {
5024 return m_VisibilityCoef;
5025 }
5026
5027
5029 {
5030 return m_Shakes;
5031 }
5032
5033
5039
5045
5051
5057
5063
5071
5072 //-------------------------------------
5079
5080
5082 {
5083 float health = GetHealth("","");
5084 float health_max = GetMaxHealth("","");
5086 }
5087
5089 {
5090 float toxicity = GetStatToxicity().Get();
5091 float toxicity_max = GetStatToxicity().GetMax();
5093 }
5094
5096 {
5097 float blood = GetHealth("","Blood");
5098 float blood_max = GetMaxHealth("","Blood");
5100 }
5101
5103 {
5104 float energy = GetStatEnergy().Get();
5105 float energy_max = GetStatEnergy().GetMax();
5107 }
5108
5110 {
5111 float water = GetStatWater().Get();
5112 float water_max = GetStatWater().GetMax();
5114 }
5115
5116 //------------------------------------
5117
5118 float GetStatLevelBorders(float stat_value, float critical, float low, float normal, float high, float max)
5119 {
5120 if (stat_value <= critical)
5121 {
5122 return Math.InverseLerp(0, critical, stat_value);
5123 }
5124 if (stat_value <= low)
5125 {
5126 return Math.InverseLerp(critical, low, stat_value);
5127 }
5128 if (stat_value <= normal)
5129 {
5130 return Math.InverseLerp(low, normal, stat_value);
5131 }
5132 if (stat_value <= high)
5133 {
5134 return Math.InverseLerp(normal, high, stat_value);
5135 }
5136 return Math.InverseLerp(high, max, stat_value);
5137 }
5138
5139 EStatLevels GetStatLevel(float stat_value, float critical, float low, float normal, float high)
5140 {
5141 if (stat_value <= critical)
5142 {
5143 return EStatLevels.CRITICAL;
5144 }
5145 if (stat_value <= low)
5146 {
5147 return EStatLevels.LOW;
5148 }
5149 if (stat_value <= normal)
5150 {
5151 return EStatLevels.MEDIUM;
5152 }
5153 if (stat_value <= high)
5154 {
5155 return EStatLevels.HIGH;
5156 }
5157 return EStatLevels.GREAT;
5158 }
5159
5160 void SetImmunityBoosted(bool boosted)
5161 {
5162 m_ImmunityBoosted = boosted;
5163 }
5164
5165
5166
5169 {
5170 float immunity;
5171 if (GetPlayerStats())
5172 {
5173 float max_health = GetMaxHealth("GlobalHealth", "Health") + 0.01;//addition to prevent divisioin by zero in case of some messup
5174 float max_blood = GetMaxHealth("GlobalHealth", "Blood") + 0.01;//addition to prevent divisioin by zero in case of some messup
5175 float energy_normalized = GetStatEnergy().Get() / PlayerConstants.SL_ENERGY_MAX;
5176 float water_normalized = GetStatWater().Get() / PlayerConstants.SL_WATER_MAX;
5177 float health_normalized = GetHealth("GlobalHealth", "Health") / max_health;
5178 float blood_normalized = GetHealth("GlobalHealth", "Blood") / max_blood;
5179 immunity = energy_normalized + water_normalized + health_normalized + blood_normalized;
5180 immunity = immunity / 4;//avg
5181 immunity = Math.Clamp(immunity,0,1);
5182 }
5183 return immunity;
5184 }
5185
5187 {
5188 return m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENT_SPRINT);
5189 }
5190
5192 {
5193 ItemBase item = GetItemInHands();
5194 if (IsRaised() || (item && item.IsHeavyBehaviour()))
5195 return false;
5196
5197 if (item && GetThrowing() && GetThrowing().IsThrowingModeEnabled())
5198 return false;
5199
5200 if (GetBrokenLegs() != eBrokenLegs.NO_BROKEN_LEGS)
5201 return false;
5202
5203 return true;
5204 }
5205
5207 {
5208 return m_MovementState.IsInProne();
5209 }
5210
5212 {
5213 return m_MovementState.IsInRaisedProne();
5214 }
5215
5217 {
5218 return m_MovementState.IsLeaning();
5219 }
5220
5222 {
5223 return GetCommand_Move() && GetCommand_Move().IsInRoll());
5224 }
5225
5227 {
5228 return m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_CLIMB;
5229 }
5230
5232 {
5233 return m_MovementState.m_CommandTypeId == DayZPlayerConstants.COMMANDID_FALL;
5234 }
5235 override bool IsFighting()
5236 {
5237 return m_IsFighting;
5238 }
5239
5241 {
5242 return m_EmoteManager && m_EmoteManager.IsEmotePlaying();
5243 }
5244
5246 {
5247 return IsRuined();
5248 }
5249
5254 bool AnimCommandCheck(HumanMoveCommandID mask)
5255 {
5256 return m_AnimCommandStarting & mask;
5257 }
5258
5260 {
5261 if (!m_FightEndBlendTimer)
5262 m_FightEndBlendTimer = new Timer();
5263 if (!m_FightEndBlendTimer.IsRunning())
5264 {
5265 m_FightEndBlendTimer.Run(PlayerConstants.MELEE2_MOVEMENT_BLEND_DELAY,this,"EndFighting");
5266 }
5267 }
5268
5270 {
5271 m_IsFighting = false;
5272 }
5273
5275 {
5276 //on-hit drop of melee weapons
5277 //bayonets & buttstocks
5278 if (item && item.GetHierarchyParent() && item.GetHierarchyParent().IsWeapon() && item.IsRuined()/*&& item.FindAttachmentBySlotName()*/)
5279 {
5281 return DropItem(item);
5282 }
5283 //handheld items themselves
5284 if (item && item == GetItemInHands() && item.IsRuined())
5285 {
5286 return PredictiveDropEntity(item);
5287 }
5288 return false;
5289 }
5290
5292 {
5293 //TODO
5294 }
5295
5296 // -------------------------------------------------------------------------
5297 override void RPC(int rpc_type, array<ref Param> params, bool guaranteed, PlayerIdentity recipient = NULL)
5298 {
5299 super.RPC(rpc_type, params, guaranteed, recipient);
5300 }
5301
5302 // -------------------------------------------------------------------------
5303 override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
5304 {
5305 super.OnRPC(sender, rpc_type, ctx);
5306
5307 switch (rpc_type)
5308 {
5309 #ifndef SERVER
5310
5311 case ERPCs.RPC_PLAYER_STAT:
5312 if (GetPlayerStats())
5313 GetPlayerStats().OnRPC(ctx);
5314 break;
5315
5316 case ERPCs.RPC_SYNC_DISPLAY_STATUS:
5317 if (GetVirtualHud())
5318 {
5319 GetVirtualHud().OnRPC(ctx);
5320 }
5321 break;
5322
5323 case ERPCs.RPC_PLAYER_SYMPTOM_ON:
5324 if (GetSymptomManager())
5325 {
5326 GetSymptomManager().OnRPC(ERPCs.RPC_PLAYER_SYMPTOM_ON, ctx);
5327 }
5328 break;
5329
5330 case ERPCs.RPC_PLAYER_SYMPTOM_OFF:
5331 if (GetSymptomManager())
5332 {
5333 GetSymptomManager().OnRPC(ERPCs.RPC_PLAYER_SYMPTOM_OFF, ctx);
5334 }
5335 break;
5336
5337 case ERPCs.RPC_DAMAGE_VALUE_SYNC:
5338 if (m_TrasferValues)
5339 m_TrasferValues.OnRPC(ctx);
5340 break;
5341
5342 case ERPCs.RPC_USER_ACTION_MESSAGE:
5343 if (!GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
5344 {
5345 break;
5346 }
5347 if (ctx.Read(m_UAParamMessage))
5348 {
5349 string actiontext = m_UAParamMessage.param1;
5350 MessageAction(actiontext);
5351 }
5352 break;
5353
5354 case ERPCs.RPC_SOFT_SKILLS_SPECIALTY_SYNC:
5355 ref Param1<float> p_synch = new Param1<float>(0);
5356 ctx.Read(p_synch);
5357 float specialty_level = p_synch.param1;
5358 GetSoftSkillsManager().SetSpecialtyLevel(specialty_level);
5359 break;
5360
5361 case ERPCs.RPC_SOFT_SKILLS_STATS_SYNC:
5362 ref Param5<float, float, float, float, bool> p_debug_synch = new Param5<float, float ,float, float, bool>(0, 0, 0, 0, false);
5363 ctx.Read(p_debug_synch);
5364 float general_bonus_before = p_debug_synch.param1;
5365 float general_bonus_after = p_debug_synch.param2;
5366 float last_UA_value = p_debug_synch.param3;
5367 float cooldown_value = p_debug_synch.param4;
5368 float cooldown_active = p_debug_synch.param5;
5369 GetSoftSkillsManager().SetGeneralBonusBefore(general_bonus_before);
5370 GetSoftSkillsManager().SetGeneralBonusAfter(general_bonus_after);
5371 GetSoftSkillsManager().SetLastUAValue(last_UA_value);
5372 GetSoftSkillsManager().SetCoolDownValue(cooldown_value);
5373 GetSoftSkillsManager().SetCoolDown(cooldown_active);
5374 break;
5375
5376 case ERPCs.RPC_WARNING_ITEMDROP:
5377 {
5378 if (GetGame().IsClient() && GetGame().GetUIManager() && !GetGame().GetUIManager().FindMenu(MENU_WARNING_ITEMDROP))
5379 {
5380 GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Call(GetGame().GetUIManager().EnterScriptedMenu,MENU_WARNING_ITEMDROP,null);
5382 }
5383 break;
5384 }
5385
5386 case ERPCs.RPC_WARNING_TELEPORT:
5387 {
5388 if (GetGame().IsClient() && GetGame().GetUIManager() && !GetGame().GetUIManager().FindMenu(MENU_WARNING_TELEPORT))
5389 {
5390 GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Call(GetGame().GetUIManager().EnterScriptedMenu,MENU_WARNING_TELEPORT,null);
5392 }
5393 break;
5394 }
5395 case ERPCs.RPC_INIT_SET_QUICKBAR:
5396 ref Param1<int> count = new Param1<int>(0);
5397 if (ctx.Read(count));
5398 {
5399 for (int i = 0; i < count.param1 ; i++)
5400 {
5401 m_QuickBarBase.OnSetEntityRPC(ctx);
5402 }
5403 }
5404 break;
5405
5406 case ERPCs.RPC_SYNC_THERMOMETER:
5407 {
5408 float value;
5409 if (ctx.Read(value))
5410 m_Hud.SetTemperature(value.ToString() + "#degrees_celsius");
5411 break;
5412 }
5413
5414
5415 case ERPCs.RPC_CHECK_PULSE:
5417 EPulseType pulse;
5419 {
5420 pulse = EPulseType.REGULAR;
5421 }
5422 else
5423 {
5424 pulse = EPulseType.IRREGULAR;
5425 }
5426
5429 {
5430 m_CheckPulseLastTarget.SetLastUAMessage(ActionCheckPulse.GetPulseMessage(pulse, blood_level));
5431 }
5432 break;
5433
5435 //woodcutting
5436 case PlantType.TREE_HARD:
5437 SoundHardTreeFallingPlay();
5438 break;
5439
5440 case PlantType.TREE_SOFT:
5441 SoundSoftTreeFallingPlay();
5442 break;
5443
5444 case PlantType.BUSH_HARD:
5445 SoundHardBushFallingPlay();
5446 break;
5447
5448 case PlantType.BUSH_SOFT:
5449 SoundSoftBushFallingPlay();
5450 break;
5451
5452 case ERPCs.RPC_DEBUG_MONITOR_FLT:
5454 {
5455 m_DebugMonitorValues.OnRPCFloat(ctx);
5456 }
5457 break;
5458
5459 case ERPCs.RPC_DEBUG_MONITOR_STR:
5461 {
5462 m_DebugMonitorValues.OnRPCString(ctx);
5463 }
5464 break;
5465 #endif
5466
5467
5468 /*
5469 case ERPCs.RPC_CRAFTING_INVENTORY_INSTANT:
5470 ref Param3<int, ItemBase, ItemBase> craftParam = new Param3<int, ItemBase, ItemBase>(-1, NULL, NULL);
5471 if (ctx.Read(craftParam))
5472 {
5473 m_ModuleRecipesManager.PerformRecipeServer(craftParam.param1, craftParam.param2, craftParam.param3, this);
5474 }
5475 break;
5476 */
5477
5478
5479
5480 #ifdef DIAG_DEVELOPER
5481 case ERPCs.DEV_RPC_AGENT_RESET:
5482 {
5483 bool val;
5484 if (ctx.Read(val))
5485 m_AgentPool.RemoveAllAgents();
5486 break;
5487 }
5488
5489 case ERPCs.DEV_PLAYER_DEBUG_REQUEST:
5490 {
5491 PluginRemotePlayerDebugServer plugin_remote_server = PluginRemotePlayerDebugServer.Cast(GetPlugin(PluginRemotePlayerDebugServer));
5492 plugin_remote_server.OnRPC(ctx, this);
5493 break;
5494 }
5495
5496 case ERPCs.DEV_PLAYER_DEBUG_DATA:
5497 {
5498 PluginRemotePlayerDebugClient plugin_remote_client = PluginRemotePlayerDebugClient.Cast(GetPlugin(PluginRemotePlayerDebugClient));
5499 PluginDeveloper plugin_dev = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
5500 if (plugin_dev.m_ScriptConsole)
5501 plugin_dev.m_ScriptConsole.OnRPCEx(rpc_type, ctx);
5502 else
5503 plugin_remote_client.OnRPC(ctx);
5504 break;
5505 }
5506
5507 case ERPCs.DEV_AGENT_GROW:
5508 {
5509 m_AgentPool.RemoteGrowRequestDebug(ctx);
5510 break;
5511 }
5512
5513 case ERPCs.RPC_ITEM_DIAG_CLOSE:
5514 {
5516 mid.StopWatchRequest(this);
5517 break;
5518 }
5519
5521 case ERPCs.DEV_REQUEST_UTS_DEBUG:
5522 {
5523 PluginUniversalTemperatureSourceServer plugin_uts_server = PluginUniversalTemperatureSourceServer.Cast(GetPlugin(PluginUniversalTemperatureSourceServer));
5524 plugin_uts_server.OnRPC(ctx, this);
5525 break;
5526 }
5527
5528 case ERPCs.DEV_UTS_DEBUG_DATA:
5529 {
5530 PluginUniversalTemperatureSourceClient plugin_uts_client = PluginUniversalTemperatureSourceClient.Cast(GetPlugin(PluginUniversalTemperatureSourceClient));
5531 plugin_uts_client.OnRPC(ctx);
5532 break;
5533 }
5535 #endif
5536
5537 #ifdef DEVELOPER
5538 case ERPCs.DEV_RPC_SERVER_SCRIPT:
5539 {
5540 //PluginItemDiagnostic plugin = PluginItemDiagnostic.Cast(GetPlugin(PluginItemDiagnostic));
5541 //SetDebugDeveloper_item(plugin.GetWatchedItem(this));//!! needs to be inside DEVELOPER ifdef
5542
5544 {
5545 _player = this;
5546 string code = CachedObjectsParams.PARAM1_STRING.param1;
5547 bool success = GetGame().ExecuteEnforceScript("void scConsMain() \n{\n" + code + "\n}\n", "scConsMain");
5548 CachedObjectsParams.PARAM1_BOOL.param1 = success;
5549 RPCSingleParam(ERPCs.DEV_RPC_SERVER_SCRIPT_RESULT, CachedObjectsParams.PARAM1_BOOL,true, GetIdentity());
5550 }
5551 break;
5552 }
5553
5554 case ERPCs.DEV_RPC_SERVER_SCRIPT_RESULT:
5555 {
5556 PluginDeveloper dev = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
5557 if (dev.m_ScriptConsole)
5558 dev.m_ScriptConsole.OnRPCEx(rpc_type, ctx);
5559 break;
5560 }
5561
5562 case ERPCs.DEV_SET_DEV_ITEM:
5563 {
5564 Param1<EntityAI> ent = new Param1<EntityAI>(null);
5565 if (ctx.Read(ent) && ent.param1)
5566 {
5568 mid2.RegisterDebugItem(ent.param1, this);
5569 }
5570 //SetDebugDeveloper_item(this);
5571 break;
5572 }
5573
5574 case ERPCs.RPC_ITEM_DIAG:
5575 {
5576 Param1<EntityAI> p1 = new Param1<EntityAI>(null);
5577 if (ctx.Read(p1))
5578 {
5580 plgn.OnRPC(p1.param1, ctx);
5581 }
5582 break;
5583 }
5584 #endif
5585 }
5586
5587 #ifdef DIAG_DEVELOPER
5588 PluginDeveloper module_rc = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
5589 if (module_rc)
5590 module_rc.OnRPC(this, rpc_type, ctx);
5591
5592 PluginDeveloperSync module_rcs = PluginDeveloperSync.Cast(GetPlugin(PluginDeveloperSync));
5593 if (module_rcs)
5594 module_rcs.OnRPC(this, rpc_type, ctx);
5595
5596 #ifdef SERVER
5598 #else
5600 #endif
5601
5602 if (plugin_diag_menu)
5603 plugin_diag_menu.OnRPC(this, rpc_type, ctx);
5604 #endif
5605 }
5606
5615
5617 {
5619 if (mission)
5620 {
5621 WorldLighting wLighting = mission.GetWorldLighting();
5622 if (wLighting)
5624 }
5625 }
5626
5627 void SetContaminatedEffectEx(bool enable, int ppeIdx = -1, int aroundId = ParticleList.CONTAMINATED_AREA_GAS_AROUND, int tinyId = ParticleList.CONTAMINATED_AREA_GAS_TINY, string soundset = "", bool partDynaUpdate = false, int newBirthRate = 0)
5628 {
5629 if (enable) // enable
5630 {
5631 // We assume that if this is set to true the PPE is already active
5632 if (m_ContaminatedAreaEffectEnabled == enable)
5633 return;
5634
5635 if (aroundId !=0)
5636 {
5638 {
5639 m_ContaminatedAroundPlayer = ParticleManager.GetInstance().PlayInWorld(aroundId, GetPosition());
5640 }
5641 // First entry in an area with dynamic tweaks to particles
5642 if (partDynaUpdate)
5643 {
5644 m_ContaminatedAroundPlayer.SetParameter(0, EmitorParam.BIRTH_RATE, newBirthRate);
5645 }
5646 }
5647
5648 if (!m_ContaminatedAroundPlayerTiny && tinyId !=0)
5649 {
5650 m_ContaminatedAroundPlayerTiny = ParticleManager.GetInstance().PlayInWorld(tinyId, GetPosition());
5651 }
5652
5653 if (ppeIdx != -1)
5654 {
5655 PPERequesterBase ppeRequester;
5656 if (Class.CastTo(ppeRequester, PPERequesterBank.GetRequester(ppeIdx)))
5657 ppeRequester.Start();
5658 }
5659
5660 // We start playing the ambient sound
5661 if (!m_AmbientContamination && soundset != "")
5662 PlaySoundSetLoop(m_AmbientContamination, soundset, 0.1, 0.1);
5663
5664 }
5665 else // disable
5666 {
5668 {
5671 }
5672
5674 {
5677 }
5678 if (ppeIdx != -1)
5679 PPERequesterBank.GetRequester(ppeIdx).Stop(new Param1<bool>(true)); //fade out
5680
5681 // We stop the ambient sound
5683 StopSoundSet(m_AmbientContamination);
5684
5685 // We make sure to reset the state
5686 }
5688 }
5689
5690 void SetContaminatedEffect(bool enable, int ppeIdx = -1, int aroundId = ParticleList.CONTAMINATED_AREA_GAS_AROUND, int tinyId = ParticleList.CONTAMINATED_AREA_GAS_TINY, bool partDynaUpdate = false, int newBirthRate = 0)
5691 {
5692 SetContaminatedEffectEx(enable, ppeIdx, aroundId, tinyId, "", partDynaUpdate, newBirthRate);
5693 }
5694
5695 // -------------------------------------------------------------------------
5697 {
5699 if (m_CorpseState > 0 && !GetIsFrozen())
5701 else
5702 SetDecayEffects();//no params means remove the effects
5704 }
5705
5706 // -------------------------------------------------------------------------
5707 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
5708 {
5709 super.EEHealthLevelChanged(oldLevel, newLevel, zone);
5710 if (!GetGame().IsDedicatedServer())
5711 {
5712 if (newLevel == GameConstants.STATE_RUINED)
5713 {
5715 }
5716 if (m_CorpseState != 0)
5717 {
5719 }
5720 }
5721 }
5722
5723
5724 // -------------------------------------------------------------------------
5726 {
5727 super.OnVariablesSynchronized();
5728 if (m_ModuleLifespan)
5729 {
5731
5732 if (m_LifespanLevelLocal != m_LifeSpanState) //client solution, lifespan level changed
5733 {
5736 }
5737 }
5738
5741 {
5742 GetBleedingManagerRemote().OnVariablesSynchronized(GetBleedingBits());
5743 }
5744
5745 if (m_CorpseStateLocal != m_CorpseState && (IsPlayerLoaded() || IsControlledPlayer()))
5746 {
5748 }
5749
5751 {
5752 RefreshHandAnimationState(396); //mean animation blend time
5754 }
5756 {
5758 {
5760 }
5761 else
5762 {
5764 }
5766 }
5767
5768 //-------MODIFIERS START--------
5770 {
5771 int diff = (m_SyncedModifiers & ~m_SyncedModifiersPrev) | (~m_SyncedModifiers & m_SyncedModifiersPrev);//XOR gets us a mask for modifiers that changed by either deactivating, or activating
5772
5773 if (eModifierSyncIDs.MODIFIER_SYNC_DROWNING & diff)//has this modifier's status as active/inactive changed ?
5774 {
5775 if (eModifierSyncIDs.MODIFIER_SYNC_DROWNING & m_SyncedModifiers)//is this modifier currently active ? if so, it means it's been just activated
5776 {
5777 SetDrowning(true);
5778 }
5779 else
5780 {
5781 SetDrowning(false);
5782 }
5783
5784 }
5785
5787 }
5788 //-------MODIFIERS END--------
5789
5791
5793 ItemBase itemHands = GetItemInHands();
5794 if (itemHands)
5795 {
5796 RemotelyActivatedItemBehaviour raib = itemHands.GetRemotelyActivatedItemBehaviour();
5797 if (raib)
5799 }
5800
5801 //restrain events
5803 {
5806 }
5807
5809 {
5812 }
5813 }
5814
5820
5822 {
5824 {
5826 if (GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
5827 {
5828 if (m_BrokenLegState < 0)
5829 BreakLegSound();
5830 }
5831 }
5832 }
5833
5835 {
5836 array<EntityAI> items = new array<EntityAI>();
5837 GetInventory().EnumerateInventory(InventoryTraversalType.INORDER, items);
5838 foreach (EntityAI item : items)
5839 {
5840 item.SetHealthMax("", "");
5841 item.SetWet(item.GetWetInit());
5842 item.SetTemperatureDirect(GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE);
5843 item.SetFrozen(false);
5844 }
5845 }
5846
5849
5850 //--------------------------------------------------------------------------
5852 {
5853 //Print("PlayerBase | OnSelectPlayer()");
5854 m_PlayerSelected = true;
5855
5856 m_QuickBarBase.updateSlotsCount();
5857
5858 m_WeaponManager.SortMagazineAfterLoad();
5859
5860 PlayerIdentity identity = GetIdentity();
5861
5862#ifdef FEATURE_NETWORK_RECONCILIATION
5863 if (identity)
5864 {
5866 identity.Possess(this);
5867 }
5868#endif
5869
5870 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER || !GetGame().IsMultiplayer())
5871 {
5872 if (identity)
5873 {
5874 m_CachedPlayerID = identity.GetId();
5875 m_CachedPlayerName = identity.GetName();
5876 }
5877
5879 SetAITargetCallbacks(new AITargetCallbacksPlayer(this));
5880
5881 array<ref Param> params = new array<ref Param>;
5882 if (m_aQuickBarLoad)
5883 {
5884 int count = m_aQuickBarLoad.Count();
5885 Param1<int> paramCount = new Param1<int>(count);
5886 params.Insert(paramCount);
5887 for (int i = 0; i < count; i++)
5888 {
5889 m_QuickBarBase.OnSetEntityNoSync(m_aQuickBarLoad.Get(i).param1,m_aQuickBarLoad.Get(i).param2);
5890 params.Insert(m_aQuickBarLoad.Get(i));
5891 }
5892
5893 if (count > 0 && GetGame().IsMultiplayer())
5894 {
5895 GetGame().RPC(this, ERPCs.RPC_INIT_SET_QUICKBAR, params, true, identity);
5896 }
5897 m_aQuickBarLoad = NULL;
5898 }
5899
5900 GetSoftSkillsManager().InitSpecialty(GetStatSpecialty().Get());
5901 GetModifiersManager().SetModifiers(true);
5902
5903 SetSynchDirty();
5904
5905 if (GetGame().IsMultiplayer())
5906 {
5907 //Drop item warning
5909 {
5910 GetGame().RPCSingleParam(this, ERPCs.RPC_WARNING_ITEMDROP, null, true, identity);
5911 m_ProcessUIWarning = false;
5912 }
5913
5915 }
5916 }
5917
5918 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
5919 {
5922
5923 CheckForGag();
5924 }
5925 else if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
5926 {
5930
5931 }
5932 else if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_AI_SINGLEPLAYER)
5933 {
5935 }
5936
5937 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
5938 {
5939 if (GetGame().GetMission())
5940 {
5942 // force update player
5943 GetDayZGame().GetBacklit().UpdatePlayer(true);
5944 }
5945
5946 m_DeathCheckTimer = new Timer();
5947 m_DeathCheckTimer.Run(0.1, this, "CheckDeath", null, true);
5950
5951 int characterCount = GetGame().GetMenuData().GetCharactersCount() - 1;
5953 if (idx == GameConstants.DEFAULT_CHARACTER_MENU_ID || idx > characterCount)
5954 {
5956 }
5957
5959
5961 m_PresenceNotifier.Init(this);
5962 #ifdef DIAG_DEVELOPER
5963 m_TargetTemperatureDiag = PluginTargetTemperature.Cast(GetPlugin(PluginTargetTemperature));
5964 m_TargetTemperatureDiag.Init(this);
5965 #endif
5966 OnGameplayDataHandlerSync();//only here for legacy reasons
5967 }
5968
5969#ifdef BOT
5970 m_Bot = new Bot(this);
5971 m_Bot.Start(true, new MyBotTrigger(this));
5972#endif
5973 }
5974
5975 override void SimulateDeath(bool state)
5976 {
5977 super.SimulateDeath(state);
5978
5979 m_UndergroundHandler = null;
5981 if (m_EffectWidgets)
5982 {
5983 m_EffectWidgets.StopAllEffects();
5984 m_EffectWidgets.ClearSuspendRequests();
5985 }
5986 }
5987
5989 {
5990 g_Game.GetMenuData().SaveCharacter(false, true);
5991 g_Game.GetMenuData().SetCharacterName(g_Game.GetMenuData().GetLastPlayedCharacter(), g_Game.GetMenuDefaultCharacterData(false).GetCharacterName());
5992 g_Game.GetMenuData().SaveCharactersLocal();
5993 }
5994
5996 {
5997 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
5998 {
5999 BurlapSackCover attachment;
6000 Class.CastTo(attachment, GetInventory().FindAttachment(InventorySlots.HEADGEAR));
6001
6002 PPERequester_BurlapSackEffects req;
6003 if (Class.CastTo(req,PPERequesterBank.GetRequester(PPERequesterBank.REQ_BURLAPSACK)))
6004 {
6005 if (attachment)
6006 {
6007 req.Start();
6008 }
6009 else if (req.IsRequesterRunning())
6010 {
6011 PPERequesterBank.GetRequester(PPERequester_BurlapSackEffects).Stop();
6012 }
6013 }
6014 }
6015 }
6016
6018 {
6019 #ifdef SERVER
6020 Clothing item;
6021 Class.CastTo(item, GetInventory().FindAttachment(InventorySlots.MASK));
6022 if (!item)
6023 {
6024 Class.CastTo(item, GetInventory().FindAttachment(InventorySlots.HEADGEAR));
6025 }
6026
6027 if (item && item.IsObstructingVoice())
6028 {
6029 item.MutePlayer(this,true);
6030 }
6031 else //should probably check for relevant types before removing mumbling and obstruction specifically..
6032 {
6033 GetGame().SetVoiceEffect(this, VoiceEffectMumbling, false);
6034 GetGame().SetVoiceEffect(this, VoiceEffectObstruction, false);
6035 }
6036 #endif
6037 }
6038
6039 void UpdateMaskBreathWidget(notnull MaskBase mask, bool is_start = false)
6040 {
6041 if (is_start)
6042 m_EffectWidgets.ResetMaskUpdateCount();
6043 float resistance = 0;
6044 if (mask.HasIntegratedFilter() || mask.IsExternalFilterAttached())
6045 resistance = 1 - mask.GetFilterQuantity01();
6046
6047
6048 m_EffectWidgets.OnVoiceEvent(resistance);
6049 m_EffectWidgets.IncreaseMaskUpdateCount();
6050
6051 }
6052
6053
6054 // -------------------------------------------------------------------------
6056 {
6057 if (m_EffectWidgets)
6058 {
6059 MaskBase mask = MaskBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
6060 if (mask)
6061 {
6062 UpdateMaskBreathWidget(mask, true);
6063 //m_EffectWidgets.SetBreathIntensityStamina(GetStaminaHandler().GetStaminaCap(),GetStaminaHandler().GetStamina());
6064 }
6065 }
6066 }
6067
6068 // -------------------------------------------------------------------------
6070 void OnVoiceEventPlayback(PlayerSoundEventBase voice_event, AbstractWave callback, float playback_time)
6071 {
6072 if (m_EffectWidgets)
6073 {
6074 MaskBase mask = MaskBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
6075 if (mask)
6076 {
6077 if (m_EffectWidgets.m_MaskWidgetUpdateCount < 2 && callback.GetLength() > 2 && playback_time > 0.5 )
6079 }
6080 }
6081 }
6082
6083
6084 // -------------------------------------------------------------------------
6085 override bool OnInputUserDataProcess(int userDataType, ParamsReadContext ctx)
6086 {
6087 if (super.OnInputUserDataProcess(userDataType, ctx))
6088 return true;
6089
6090 if (m_QuickBarBase.OnInputUserDataProcess(userDataType, ctx))
6091 return true;
6092
6093 if (m_WeaponManager.OnInputUserDataProcess(userDataType, ctx))
6094 return true;
6095
6096 if (HandleRemoteItemManipulation(userDataType, ctx))
6097 return true;
6098
6099 if (userDataType == INPUT_UDT_INVENTORY && GetHumanInventory().OnInputUserDataProcess(ctx))
6100 return true;
6101
6102 if (TogglePlacingServer(userDataType, ctx))
6103 return true;
6104
6105 if (ResetADSPlayerSync(userDataType, ctx))
6106 return true;
6107
6108 string uid;
6109 bool mute;
6110 if (userDataType == INPUT_UDT_USER_MUTE_XBOX)
6111 {
6112 if (ctx.Read(uid) && ctx.Read(mute))
6113 {
6114 GetGame().MutePlayer(uid, GetIdentity().GetPlainId(), mute);
6115 // commented because plainID should not be present in logs
6116 //Print("Player: " + GetIdentity().GetId() + " set mute for " + uid + " to " + mute);
6117 }
6118 }
6119
6120 if (m_EmoteManager && userDataType == INPUT_UDT_GESTURE)
6121 return m_EmoteManager.OnInputUserDataProcess(userDataType, ctx);
6122
6123 if (userDataType == INPUT_UDT_WEAPON_LIFT_EVENT)
6124 return ReadLiftWeaponRequest(userDataType, ctx);
6125
6126 if (m_ActionManager)
6127 return m_ActionManager.OnInputUserDataProcess(userDataType, ctx);
6128 return false;
6129 }
6130
6132 {
6133 float blood = GetHealth("GlobalHealth", "Blood");
6134 float blood_scale_normalized = Math.InverseLerp(PlayerConstants.BLOOD_THRESHOLD_FATAL, GetMaxHealth("", "Blood"), blood);
6135 blood_scale_normalized = Math.Clamp(blood_scale_normalized,0,1);
6137 }
6138
6140 {
6141 if (userDataType == INPUT_UDT_ITEM_MANIPULATION)
6142 {
6143 int type = -1;
6144 ItemBase item1 = null;
6145 ItemBase item2 = null;
6146 bool use_stack_max = false;
6147 int slot_id = -1;
6148
6149 if (!ctx.Read(type))
6150 return false;
6151
6152 if (type == 4)
6153 {
6154 if (!ctx.Read(item1))
6155 return false;
6156
6158 if (item1 && dst.ReadFromContext(ctx))
6159 {
6160 //Print(InventoryLocation.DumpToStringNullSafe(dst));
6161 bool dummy;
6162 if (ctx.Read(dummy))
6163 item1.SplitItemToInventoryLocation(dst);
6164 else
6165 item1.SplitIntoStackMaxToInventoryLocation(dst);
6166 return true;
6167 }
6168 return false;
6169 }
6170
6171 if (!ctx.Read(item1))
6172 return false;
6173 if (!ctx.Read(item2))
6174 return false;
6175 if (!ctx.Read(use_stack_max))
6176 return false;
6177 if (!ctx.Read(slot_id))
6178 return false;
6179
6180 if (type == -1 && item1 && item2)//combine
6181 {
6182 item1.CombineItems(item2, use_stack_max);
6183 }
6184 else if (type == 1 && item1)
6185 {
6186 if (use_stack_max)
6187 item1.SplitIntoStackMax(item2, slot_id, this);
6188 else
6189 item1.SplitItem(this);
6190 }
6191 else if (type == 2 && item1)
6192 {
6193 int row, col;
6194 if (!ctx.Read(row))
6195 return false;
6196 if (!ctx.Read(col))
6197 return false;
6198 item1.SplitIntoStackMaxCargo(item2, slot_id, row, col);
6199 }
6200 else if (type == 3 && item1)
6201 {
6202 item1.SplitIntoStackMaxHands(this);
6203 }
6204 return true;
6205 }
6206 return false;
6207 }
6208
6209 // -------------------------------------------------------------------------
6211 {
6212 HumanInventory humanInventory = GetHumanInventory();
6213 if (humanInventory)
6214 return ItemBase.Cast(humanInventory.GetEntityInHands());
6215
6216 return null;
6217 }
6218
6219 //--------------------------------------------------------------------------
6220
6221
6222 override EntityAI SpawnEntityOnGroundPos(string object_name, vector pos)
6223 {
6224 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER || !GetGame().IsMultiplayer())
6225 {
6226 bool is_AI = GetGame().IsKindOf(object_name, "DZ_LightAI");
6227 if (is_AI)
6228 {
6229 return SpawnAI(object_name, pos);
6230 }
6231 else
6232 {
6234 vector mtx[4];
6236 mtx[3] = pos;
6237 inv_loc.SetGround(null, mtx);
6238
6239 int flags = ECE_PLACE_ON_SURFACE;
6240 #ifdef DEVELOPER
6241 if (g_Game.IsKindOf(object_name, "Boat"))
6242 flags = ECE_KEEPHEIGHT;
6243 #endif
6244
6245 return EntityAI.Cast(GetGame().CreateObjectEx(object_name, inv_loc.GetPos(), flags));
6246 }
6247 }
6248 return null;
6249 }
6250
6251 EntityAI SpawnEntityOnGroundRaycastDispersed(string object_name, float raycastDistance = DEFAULT_SPAWN_DISTANCE, float radius = UAItemsSpreadRadius.DEFAULT)
6252 {
6253 vector posRandom = MiscGameplayFunctions.GetRandomizedPositionVerifiedPlayer(this,raycastDistance,radius,this);
6254 return SpawnEntityOnGroundPos(object_name,posRandom);
6255 }
6256
6257 EntityAI SpawnEntityOnGroundOnCursorDir(string object_name, float distance)
6258 {
6259 vector position = GetPosition() + (GetDirection() * distance);
6260 return SpawnEntityOnGroundPos(object_name, position);
6261 }
6262
6263 EntityAI SpawnAI(string object_name, vector pos)
6264 {
6265 bool is_ai = GetGame().IsKindOf(object_name, "DZ_LightAI");
6266 if (is_ai)
6267 {
6268 return EntityAI.Cast(GetGame().CreateObjectEx(object_name, pos, ECE_PLACE_ON_SURFACE|ECE_INITAI|ECE_EQUIP_ATTACHMENTS));
6269 }
6270 return NULL;
6271 }
6272
6273 //--------------------------------------------------------------------------
6275 {
6276 bool can_be_dropped = CanDropEntity(item);
6277 if (can_be_dropped)
6278 {
6279 can_be_dropped = PredictiveDropEntity(item);
6280 }
6281
6282 vector pos_spawn = GetPosition() + GetDirection();
6283 pos_spawn[0] = pos_spawn[0] + Math.RandomFloat(-0.2, 0.2);
6284 pos_spawn[2] = pos_spawn[2] + Math.RandomFloat(-0.2, 0.2);
6285
6286 item.SetPosition(pos_spawn);
6287 item.PlaceOnSurface();
6288 return can_be_dropped;
6289 }
6290
6291 // -------------------------------------------------------------------------
6300
6301
6302 EntityAI CreateInInventory(string item_name, string cargo_type = "", bool full_quantity = false)
6303 {
6305 if (GetInventory().FindFirstFreeLocationForNewEntity(item_name, FindInventoryLocationType.ANY, inv_loc))
6306 {
6307 return SpawnItemOnLocation(item_name, inv_loc, full_quantity);
6308 }
6309 return NULL;
6310 }
6311
6313 {
6315 string t = src.GetType();
6316 if (GetInventory().FindFirstFreeLocationForNewEntity(t, FindInventoryLocationType.CARGO, loc))
6317 {
6318 bool locked = GetGame().HasInventoryJunctureDestination(this, loc);
6319 if (locked)
6320 {
6321 Print("Warning: Split: CreateCopyOfItemInInventory - Cannot create entity at locked inventory at loc=" + InventoryLocation.DumpToStringNullSafe(loc));
6322 return null;
6323 }
6324 ItemBase dst = ItemBase.Cast(GetInventory().LocationCreateLocalEntity(loc, t, ECE_IN_INVENTORY, RF_DEFAULT));
6325 if (dst)
6326 {
6327 MiscGameplayFunctions.TransferItemProperties(src, dst);
6328
6330
6331 Print("CreateCopyOfItemInInventory - created " + dst.GetName() + " at loc=" + InventoryLocation.DumpToStringNullSafe(loc));
6332 }
6333 return dst;
6334 }
6335 return NULL;
6336 }
6337
6342
6343 ItemBase CreateCopyOfItemInInventoryOrGroundEx(ItemBase src, bool markItemAsSplitResult = false)
6344 {
6346 if (!dst)
6347 {
6348 dst = ItemBase.Cast(SpawnEntityOnGroundPos(src.GetType(), this.GetPosition()));
6349 dst.PlaceOnSurface();
6350 dst.SetResultOfSplit(markItemAsSplitResult);
6351 MiscGameplayFunctions.TransferItemProperties(src, dst);
6352 }
6353
6354 return dst;
6355 }
6356
6357
6358
6359 // -------------------------------------------------------------------------
6366 void Message(string text, string style)
6367 {
6368 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
6369 {
6370 GetGame().ChatMP(this, text, style);
6371 }
6372 else
6373 {
6374 GetGame().Chat(text, style);
6375 }
6376 }
6377
6378 // -------------------------------------------------------------------------
6379 void MessageStatus(string text)
6380 {
6381 Message(text, "colorStatusChannel");
6382 }
6383
6384 // -------------------------------------------------------------------------
6385 void MessageAction(string text)
6386 {
6387 Message(text, "colorAction");
6388 }
6389
6390 // -------------------------------------------------------------------------
6391 void MessageFriendly(string text)
6392 {
6393 Message(text, "colorFriendly");
6394 }
6395
6396 // -------------------------------------------------------------------------
6397 void MessageImportant(string text)
6398 {
6399 Message(text, "colorImportant");
6400 }
6401
6403 {
6404 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
6405 {
6406#ifndef NO_GUI
6408 if (menu && (menu.GetID() == MENU_INVENTORY || menu.GetID() == MENU_INSPECT))
6409 {
6411 GetGame().GetMission().RemoveActiveInputExcludes({"inventory"},false);
6412 GetGame().GetMission().RemoveActiveInputRestriction(EInputRestrictors.INVENTORY);
6413 }
6414#endif
6415 }
6416 }
6417
6418 // -------------------------------------------------------------------------
6427 override void ClearInventory()
6428 {
6429 if ((GetGame().IsServer() || !GetGame().IsMultiplayer()) && GetInventory())
6430 {
6431 GameInventory inv = PlayerBase.Cast(this).GetInventory();
6432 array<EntityAI> items = new array<EntityAI>;
6433 inv.EnumerateInventory(InventoryTraversalType.INORDER, items);
6434 for (int i = 0; i < items.Count(); i++)
6435 {
6436 ItemBase item = ItemBase.Cast(items.Get(i));
6437 if (item)
6438 {
6439 GetGame().ObjectDelete(item);
6440 }
6441 }
6442
6443 ItemBase item_in_hands = ItemBase.Cast(GetHumanInventory().GetEntityInHands());
6444
6445 if (item_in_hands)
6446 {
6447 LocalDestroyEntityInHands();
6448 }
6449 }
6450 }
6451
6454 {
6455 array<EntityAI> itemsArray = new array<EntityAI>;
6456 ItemBase item;
6457 GetInventory().EnumerateInventory(InventoryTraversalType.LEVELORDER, itemsArray);
6458 int count = itemsArray.Count();
6459
6460 for (int i = 0; i < itemsArray.Count(); i++)
6461 {
6462 Class.CastTo(item, itemsArray.Get(i));
6463
6464 if (item && !item.IsInherited(SurvivorBase))
6465 {
6466 ServerDropEntity(item);
6467 }
6468 }
6469 }
6470
6472 {
6473 string type;
6474 GetGame().ObjectGetType(this, type);
6475 return type;
6476 }
6477
6478 // --------------------------------------------------
6479 // Lifespan
6480 //---------------------------------------------------
6481
6483 {
6485
6486 m_ModuleLifespan.UpdateLifespan(this, true);
6487 }
6488
6490 {
6492 {
6493 return true;
6494 }
6495 else
6496 {
6497 return false;
6498 }
6499 }
6500
6501
6502 override void OnParticleEvent(string pEventType, string pUserString, int pUserInt)
6503 {
6504 super.OnParticleEvent(pEventType ,pUserString, pUserInt);
6505
6506 if (!GetGame().IsDedicatedServer())
6507 {
6508 if (pUserInt == 123456) // 123456 is ID for vomiting effect. The current implementation is WIP.
6509 {
6510 PlayerBase player = PlayerBase.Cast(this);
6511 int boneIdx = player.GetBoneIndexByName("Head");
6512
6513 if (boneIdx != -1)
6514 {
6515 EffectParticle eff;
6516
6517 if (m_SyncedModifiers & eModifierSyncIDs.MODIFIER_SYNC_CONTAMINATION2)
6518 {
6519 eff = new EffVomitBlood();
6520 }
6521 else
6522 {
6523 eff = new EffVomit();
6524 }
6525
6526 eff.SetDecalOwner(player);
6527 eff.SetAutodestroy(true);
6529 Particle p = eff.GetParticle();
6530 player.AddChild(p, boneIdx);
6531 }
6532 }
6533 }
6534 }
6535
6536
6538 {
6539 if (!ToDelete() && IsAlive() && !IsSwimming() && !m_IsDrowning)
6540 {
6541 return true;
6542 }
6543 return false;
6544 }
6545
6546
6548 {
6549 if (m_AddModifier != -1)
6550 {
6551 HumanCommandAdditives ad = GetCommandModifier_Additives();
6552 if (ad)
6553 ad.StartModifier(m_AddModifier);
6554
6555 m_AddModifier = -1;
6556 }
6557 }
6558
6560 {
6561 //Print("SpawnBreathVaporEffect:"+GetGame().GetTime());
6562 int boneIdx = GetBoneIndexByName("Head");
6563 if (boneIdx != -1)
6564 {
6565 Particle p;
6566 switch (m_BreathVapour)
6567 {
6568 case 1:
6569 p = ParticleManager.GetInstance().PlayInWorld(ParticleList.BREATH_VAPOUR_LIGHT, "-0.03 0.15 0");
6570 break;
6571 case 2:
6572 p = ParticleManager.GetInstance().PlayInWorld(ParticleList.BREATH_VAPOUR_MEDIUM, "-0.03 0.15 0");
6573 break;
6574 case 3:
6575 p = ParticleManager.GetInstance().PlayInWorld(ParticleList.BREATH_VAPOUR_HEAVY, "-0.03 0.15 0");
6576 break;
6577 default:
6578 break;
6579 }
6580
6581 if (p)
6582 AddChild(p, boneIdx);
6583 }
6584 }
6585
6586 // returns 'true' if the player is submerged under water deep enough so that we consider him/her to be eligible for drowning, do note some other conditions may apply for actual drowning to be turned on
6588 {
6589 int index = GetBoneIndexByName("head");
6590 vector pos = GetBonePositionWS(index);
6591 float depth = g_Game.GetWaterDepth(pos);
6592
6593 if (IsSwimming())
6594 {
6596 }
6597 else if (IsUnconscious())
6598 {
6600 }
6602 }
6603
6604 void SetLifeSpanStateVisible(int show_state)
6605 {
6606 bool state_changed;
6607 if (show_state != m_LifeSpanState)
6608 state_changed = true;
6609 m_LifeSpanState = show_state;
6610 SetSynchDirty();
6611
6612 if (state_changed) //server only, client solution in OnVariablesSynchronized()
6613 {
6614 //SendLifespanSyncEvent(m_LifeSpanState);
6615
6617 }
6618 }
6619
6621 {
6622 return m_LifeSpanState;
6623 }
6624
6626 {
6627 return m_LastShavedSeconds;
6628 }
6629
6630 void SetLastShavedSeconds(int last_shaved_seconds)
6631 {
6632 m_LastShavedSeconds = last_shaved_seconds;
6633 }
6634
6636 {
6637 return IsExclusionFlagPresent(GetFaceCoverageShaveValues());
6638 }
6639
6642 {
6643 set<int> ret = new set<int>;
6644 ret.Insert(EAttExclusions.SHAVING_MASK_ATT_0);
6645 ret.Insert(EAttExclusions.SHAVING_HEADGEAR_ATT_0);
6646 //ret.Insert(EAttExclusions.SHAVING_EYEWEAR_ATT_0);
6647
6648 return ret;
6649 }
6650
6655
6657 {
6659 }
6660
6661 void SetBloodyHands(bool show)
6662 {
6663 SetBloodyHandsBase(show);
6664 }
6665
6667 {
6668 SetBloodyHandsBase(type);
6669 }
6670
6671 private void SetBloodyHandsBase(int type)
6672 {
6674 SetSynchDirty();
6675
6676 #ifdef DIAG_DEVELOPER
6677 #ifndef SERVER
6678 if (IsControlledPlayer())
6679 {
6680 bool enable = type;
6681 DiagMenu.SetValue(DiagMenuIDs.LIFESPAN_BLOODY_HANDS, enable);
6682 }
6683 #endif
6684 #endif
6685 }
6686
6688 {
6689 if (HasBloodyHands())
6690 {
6691 if (GetInventory().FindAttachment(InventorySlots.GLOVES))
6692 return 0;
6693
6694 float randomValue = Math.RandomFloat01();
6695 if (GetBloodyHandsPenaltyChancePerAgent(eAgents.SALMONELLA) >= randomValue)
6696 return eAgents.SALMONELLA;
6697
6698 return eAgents.FOOD_POISON;
6699 }
6700
6701 return 0;
6702 }
6703
6705 {
6706 float value = 0.0;
6707 if (m_BloodyHandsPenaltyChancePerAgent.Find(type, value))
6708 return value;
6709
6710 return value;
6711 }
6712
6715 {
6716 float storedValue = GetBloodyHandsPenaltyChancePerAgent(type);
6717 if (amount > storedValue)
6718 m_BloodyHandsPenaltyChancePerAgent.Set(type, Math.Clamp(amount, 0.0, 1.0));
6719 }
6720
6725
6727 {
6728 return m_HasBloodTypeVisible;
6729 }
6730
6731 void SetBloodTypeVisible(bool show)
6732 {
6733 m_HasBloodTypeVisible = show;
6734 SetSynchDirty();
6735 }
6736
6738 {
6739 return m_BloodType;
6740 }
6741
6742 void SetBloodType(int blood_type)
6743 {
6744 m_BloodType = blood_type;
6745 SetSynchDirty();
6746 }
6747
6748 // --------------------------------------------------
6749 // Soft Skills
6750 //---------------------------------------------------
6751
6756
6758 {
6759 if (IsPlayerSelected() && !IsAlive())
6760 {
6761 SimulateDeath(true);
6762 m_DeathCheckTimer.Stop();
6763 }
6764 }
6765
6766 // -------------------------------------------------------------------------
6767
6768 // --------------------------------------------------
6769 // AI Presence
6770 //---------------------------------------------------
6771
6774 {
6776 {
6777 return m_PresenceNotifier.GetNoisePresence();
6778 }
6779
6780 return 0;
6781 }
6782
6783 // is a bit on in the persistent flags
6785 {
6786 return (m_PersistentFlags & bit);
6787 }
6788 // turn on/off a bit in the persistent flag
6789 void SetPersistentFlag(PersistentFlag bit, bool enable)
6790 {
6791 if (enable)//turn on bit
6793 else//turn off bit
6795
6796 }
6797
6798
6799 // -------------------------------------------------------------------------
6800
6802 {
6803 return m_StoreLoadVersion;
6804 }
6805
6807 {
6808 //Print("OnStoreSave");
6809 if (GetGame().SaveVersion() < 102)
6810 {
6811 ctx.Write(ACT_STORE_SAVE_VERSION);//to be removed after we push 102+
6812 }
6813
6814 super.OnStoreSave(ctx);
6815
6816 GetHumanInventory().OnStoreSave(ctx); // FSM of hands
6818
6819 if (GetDayZGame().IsServer() && GetDayZGame().IsMultiplayer())
6820 {
6821 GetPlayerStats().SaveStats(ctx);// save stats
6822 m_ModifiersManager.OnStoreSave(ctx);// save modifiers
6823 m_AgentPool.OnStoreSave(ctx);//save agents
6824 GetSymptomManager().OnStoreSave(ctx);//save states
6826 {
6827 GetBleedingManagerServer().OnStoreSave(ctx);//save bleeding sources
6828 }
6829 m_PlayerStomach.OnStoreSave(ctx);
6830 ctx.Write(GetBrokenLegs());
6831 //ctx.Write(m_LocalBrokenState);
6833
6834 HumanCommandLadder ladder = GetCommand_Ladder();
6835 if (ladder)
6836 {
6837 ctx.Write(true);
6838 ctx.Write(ladder.GetLogoutPosition());
6839 }
6840 else
6841 {
6842 ctx.Write(false);
6843 }
6844
6846 arrowManager.Save(ctx);
6847 }
6848 }
6849
6850
6852 {
6853 if (GetModifiersManager())
6854 SetPersistentFlag(PersistentFlag.AREA_PRESENCE, GetModifiersManager().IsModifierActive(eModifiers.MDF_AREAEXPOSURE));//set the flag for player's presence in contaminated area
6856 }
6857
6858
6859 override bool OnStoreLoad(ParamsReadContext ctx, int version)
6860 {
6861 //Print("---- PlayerBase OnStoreLoad START ----, version: "+version);
6863
6864 // todo :: this should be after base call !!!!
6865 if (version < 102)//write removed in v. 102
6866 {
6867 if (!ctx.Read(m_StoreLoadVersion))
6868 return false;
6869 }
6870
6871 if (!super.OnStoreLoad(ctx, version))
6872 return false;
6873
6874 // FSM of hands
6875 if (!GetHumanInventory().OnStoreLoad(ctx, version))
6876 return false;
6877
6878 if (!OnStoreLoadLifespan(ctx, version))
6879 return false;
6880
6881 if (GetDayZGame().IsServer() && GetDayZGame().IsMultiplayer())
6882 {
6883 if (!GetPlayerStats().LoadStats(ctx, version)) // load stats
6884 {
6885 Print("---- failed to load PlayerStats ----");
6886 return false;
6887 }
6888
6889 if (!m_ModifiersManager.OnStoreLoad(ctx, version))
6890 {
6891 Print("---- failed to load ModifiersManager, read fail ----");
6892 return false;
6893 }
6894
6895 if (!m_AgentPool.OnStoreLoad(ctx, version))
6896 {
6897 Print("---- failed to load AgentPool, read fail ----");
6898 return false;
6899 }
6900
6901 if (!GetSymptomManager().OnStoreLoad(ctx, version))
6902 {
6903 Print("---- failed to load SymptomManager, read fail ----");
6904 return false;
6905 }
6906
6907 if (!GetBleedingManagerServer().OnStoreLoad(ctx, version))
6908 {
6909 Print("---- failed to load BleedingManagerServer, read fail ----");
6910 return false;
6911 }
6912
6913 if (!m_PlayerStomach.OnStoreLoad(ctx, version))
6914 {
6915 Print("---- failed to load PlayerStomach, read fail ----");
6916 return false;
6917 }
6918
6919 //Check for broken leg value
6920 if (version >= 116)
6921 {
6922 if (!ctx.Read(m_BrokenLegState))
6923 {
6924 return false;
6925 }
6926 if (version <= 126)// WHILE >= 116
6927 {
6928 if (!ctx.Read(m_LocalBrokenState))
6929 {
6930 return false;
6931 }
6932 }
6933 }
6934 //Load persistent flags value
6935 if (version >= 125 && (!ctx.Read(m_PersistentFlags)))
6936 {
6937 Print("---- failed to load Persistent Flags, read fail ----");
6938 return false;
6939 }
6940
6941 if (version >= 131)
6942 {
6943 bool onLadder;
6944 if (!ctx.Read(onLadder))
6945 {
6946 return false;
6947 }
6948
6949 if (onLadder)
6950 {
6951 vector position;
6952 if (!ctx.Read(position))
6953 {
6954 return false;
6955 }
6956
6957 Hive hive = GetHive();
6958 if (!hive || !hive.CharacterIsLoginPositionChanged(this))
6959 {
6960 SetPosition(position);
6961 }
6962 }
6963 }
6964
6965 if (version >= 134)
6966 {
6968 arrowManager.Load(ctx);
6969 }
6970 }
6971
6972 Print("---- PlayerBase OnStoreLoad SUCCESS ----");
6973 return true;
6974 }
6975
6976 override void AfterStoreLoad()
6977 {
6978 GetHumanInventory().OnAfterStoreLoad();
6979 if (m_EmoteManager)
6980 m_EmoteManager.AfterStoreLoad();
6981
6982 if (GetPlayerStats())
6983 GetPlayerStats().OnAfterStoreLoad();
6984
6986 vector currentPos = GetPosition();
6987 if (g_Game.GetGameState() != DayZGameState.MAIN_MENU && CfgPlayerRestrictedAreaHandler.IsInitialized() && CfgPlayerRestrictedAreaHandler.IsPointInPlayerRestrictedArea(currentPos,pra))
6988 {
6989 //vector safePos = pra.GetClosestSafePos3D(currentPos);
6990 vector safePos = pra.GetRandomSafePos3D(currentPos);
6991 if (MiscGameplayFunctions.TeleportPlayerToSafeLocation3D(this,safePos) && m_AdminLog)
6992 m_AdminLog.PlayerTeleportedLog(this,currentPos,safePos,"Spawning in Player Restricted Area: " + pra.areaName);
6993 }
6994 }
6995
7004
7006 {
7007 int lifespan_state = 0;
7008 if (!ctx.Read(lifespan_state))
7009 return false;
7010 m_LifeSpanState = lifespan_state;
7011
7012 int last_shaved = 0;
7013 if (!ctx.Read(last_shaved))
7014 return false;
7015 m_LastShavedSeconds = last_shaved;
7016
7017 if (version < 122)
7018 {
7019 bool bloody_hands_old;
7020 if (!ctx.Read(bloody_hands_old))
7021 return false;
7022 m_HasBloodyHandsVisible = bloody_hands_old;
7023 }
7024 else
7025 {
7026 int bloody_hands = 0;
7027 if (!ctx.Read(bloody_hands))
7028 return false;
7029 m_HasBloodyHandsVisible = bloody_hands;
7030 }
7031
7032
7033 bool blood_visible = false;
7034 if (!ctx.Read(blood_visible))
7035 return false;
7036 m_HasBloodTypeVisible = blood_visible;
7037
7038 int blood_type = 0;
7039 if (!ctx.Read(blood_type))
7040 return false;
7041 m_BloodType = blood_type;
7042
7043 return true;
7044 }
7045
7048 {
7049 int hour, minute, second;
7050 GetHourMinuteSecond(hour, minute, second);
7051 float distance;
7052 distance = StatGet(AnalyticsManagerServer.STAT_DISTANCE);
7053 if (m_AnalyticsTimer)
7054 {
7056 data.m_CharacterId = g_Game.GetDatabaseID();
7057 data.m_TimeInterval = m_AnalyticsTimer.GetRemaining();
7058 data.m_DaytimeHour = hour;
7060 data.m_PositionEnd = GetPosition();
7061 data.m_DistanceOnFoot = distance;
7063 }
7064
7066 }
7067
7069 {
7070 Debug.Log("Player connected:"+this.ToString(),"Connect");
7071
7072 // analytics
7074
7075 m_PlayerOldPos = GetPosition();
7076 if (m_AnalyticsTimer)
7077 m_AnalyticsTimer.Run(60, this, "UpdatePlayerMeasures", null, true);
7078
7079 //construction action data
7081 }
7082
7084 {
7085 Debug.Log("Player reconnected:"+this.ToString(),"Reconnect");
7086
7087 //construction action data
7088
7090 }
7091
7093 {
7094 Debug.Log("Player disconnected:"+this.ToString(),"Connect");
7095
7096 // analytics
7097 // force update of the stats
7098 // if player disconnect too soon, UpdatePlayersStats() is not called
7100
7102 data.m_CharacterId = g_Game.GetDatabaseID();
7103 data.m_Reason = "Disconnected";
7105
7106 if (m_AnalyticsTimer)
7107 m_AnalyticsTimer.Stop();
7109
7111 }
7112
7113 void SetModifiers(bool enable)
7114 {
7115 GetModifiersManager().SetModifiers(enable);
7116 }
7117
7119 {
7120 PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(GetPlugin(PluginTransmissionAgents));
7121 int pollution = GetGame().GetMission().GetWorldData().GetPollution();
7122 float temperature = 0;
7123
7124 if (data.m_Type == EConsumeType.ENVIRO_POND || data.m_Type == EConsumeType.ENVIRO_WELL || data.m_Type == EConsumeType.ENVIRO_SNOW)
7125 {
7126 if (data.m_Type != EConsumeType.ENVIRO_WELL)
7127 {
7128 if (pollution & EPollution.HEAVYMETAL)
7129 data.m_Agents = data.m_Agents | eAgents.HEAVYMETAL;
7130
7131 if (data.m_Type == EConsumeType.ENVIRO_POND)
7132 data.m_Agents = data.m_Agents | eAgents.CHOLERA;
7133 }
7134
7136 m_PlayerStomach.AddToStomach(Liquid.GetLiquidClassname(LIQUID_WATER), data.m_Amount, 0 , data.m_Agents, temperature);
7137
7138 return true;
7139 }
7140
7141 Edible_Base edibleItem = Edible_Base.Cast(data.m_Source);
7142 if (!edibleItem || !edibleItem.CanBeConsumed())
7143 return false;
7144
7145 if (data.m_Type == EConsumeType.ITEM_SINGLE_TIME || data.m_Type == EConsumeType.ITEM_CONTINUOUS)
7146 {
7147 data.m_Agents = edibleItem.FilterAgents(data.m_Agents | edibleItem.GetAgents());
7148 temperature = edibleItem.GetTemperature();
7149
7150 if (data.m_Type == EConsumeType.ITEM_SINGLE_TIME)
7151 plugin.TransmitAgents(edibleItem, this, AGT_UACTION_CONSUME, data.m_Amount);
7152
7153 if (edibleItem.IsLiquidContainer())
7154 {
7155 int liquidType = edibleItem.GetLiquidType();
7156 string liquidClassName = Liquid.GetLiquidClassname(liquidType);
7157 if (liquidClassName.Length() == 0)
7158 Error("Error! Trying to add unknown liquid to stomach with item=" + Object.GetDebugName(edibleItem) + " data.m_Type=" + data.m_Type + " liquid_type=" + liquidType);
7159
7160 m_PlayerStomach.AddToStomach(liquidClassName, data.m_Amount, 0, data.m_Agents, temperature);
7161 }
7162 else
7163 {
7164 int foodStageType;
7165 if (edibleItem.GetFoodStage())
7166 foodStageType = edibleItem.GetFoodStage().GetFoodStageType();
7167
7168 m_PlayerStomach.AddToStomach(data.m_Source.GetType(), data.m_Amount, foodStageType, data.m_Agents, temperature);
7169 }
7170
7171 edibleItem.Consume(data.m_Amount, this);
7172
7173 return true;
7174
7175 }
7176
7177 return false;
7178 }
7179
7181 {
7182 #ifndef NO_GUI
7183 if (show)
7184 {
7185 GetGame().GetUIManager().ScreenFadeIn(0, "You are Unconscious", FadeColors.BLACK, FadeColors.WHITE);
7186 PrintString("Fade in");
7187 }
7188 else
7189 {
7191 PrintString("Fade out");
7192 }
7193 #endif
7194 }
7195
7196 override void RequestSoundEventEx(EPlayerSoundEventID id, bool from_server_and_client = false, int param = 0)
7197 {
7198 if (from_server_and_client && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
7199 {
7200 PlaySoundEventEx(id, false, false, param);
7201 return;
7202 }
7203 SendSoundEventEx(id, param);
7204 }
7205
7206 override void RequestSoundEvent(EPlayerSoundEventID id, bool from_server_and_client = false)
7207 {
7208 RequestSoundEventEx(id, from_server_and_client);
7209 }
7210
7211 override protected void SendSoundEvent(EPlayerSoundEventID id)
7212 {
7213 SendSoundEventEx(id);
7214 }
7215
7216 override protected void SendSoundEventEx(EPlayerSoundEventID id, int param = 0)
7217 {
7218 if (!GetGame().IsServer())
7219 {
7220 return;
7221 }
7222 m_SoundEvent = id;
7223 m_SoundEventParam = param;
7224 SetSynchDirty();
7225
7226 if (!GetGame().IsMultiplayer())
7227 {
7229 }
7230
7231 //PrintString(GetGame().GetTime().ToString() + " Set SoundEvent, id:" + id.ToString());
7232 }
7233
7235 {
7236 if (m_SoundEvent != 0 && m_SoundEventSent)
7237 {
7238 m_SoundEvent = 0;
7240 m_SoundEventSent = false;
7241 SetSynchDirty();
7242 }
7243 }
7244
7246 {
7247 if (m_SoundEvent!= 0 && !m_SoundEventSent)
7248 {
7249 m_SoundEventSent = true;
7250 }
7251 }
7252
7253 override bool PlaySoundEventType(ESoundEventType soundType, int soundEventID, int param = 0)
7254 {
7255 if (m_ReplaceSoundEventHandler)
7256 return m_ReplaceSoundEventHandler.PlayReplaceSound(soundEventID, soundType, param);
7257
7258 return false;
7259 }
7260
7261 override bool PlaySoundEvent(EPlayerSoundEventID id, bool from_anim_system = false, bool is_from_server = false)
7262 {
7263 return PlaySoundEventEx(id, from_anim_system, is_from_server);
7264 }
7265
7266 override bool PlaySoundEventEx(EPlayerSoundEventID id, bool from_anim_system = false, bool is_from_server = false, int param = 0)
7267 {
7268 if (!m_PlayerSoundEventHandler)
7269 return false;
7270
7271 return m_PlayerSoundEventHandler.PlayRequestEx(id, is_from_server, param);
7272 }
7273
7275 {
7276 return m_PlayerSoundEventHandler;
7277 }
7278
7281
7283 {
7285 if (IsControlledPlayer())
7286 {
7287 if (!GetGame().IsDedicatedServer())
7288 {
7289 DisplayElementBadge dis_elm = DisplayElementBadge.Cast(GetVirtualHud().GetElement(eDisplayElements.DELM_BADGE_BLEEDING));
7290 if (dis_elm)
7291 {
7292 dis_elm.SetValue(GetBleedingSourceCount());
7293 }
7294
7295
7296 //Print("----------bleeding_SoundSet----------");
7297 SEffectManager.PlaySoundOnObject("bleeding_SoundSet", this);
7298 }
7299 }
7300 }
7301
7303 {
7305 if (GetGame().IsServer())
7306 {
7307 ArrowManagerBase arrowManager = GetArrowManager();
7308 if (GetBleedingSourceCount() > 0)
7309 {
7310 arrowManager.DropFirstArrow();
7311 }
7312 else
7313 {
7314 arrowManager.DropAllArrows();
7315 }
7316 }
7317
7318 if (IsControlledPlayer())
7319 {
7320 if (!GetGame().IsDedicatedServer())
7321 {
7322 //Print("GetBleedingSourceCount() "+GetBleedingSourceCount());
7323 DisplayElementBadge dis_elm = DisplayElementBadge.Cast(GetVirtualHud().GetElement(eDisplayElements.DELM_BADGE_BLEEDING));
7324 if (dis_elm)
7325 {
7326 dis_elm.SetValue(GetBleedingSourceCount());
7327 }
7328 }
7329 }
7330 }
7331
7332
7337
7339 {
7340 return m_BleedingSourceCount;
7341 }
7342
7343 // for debug purposes, should reset some systems like Modifiers, Stats, Damage etc.....
7344 void ResetPlayer(bool set_max)
7345 {
7346 #ifdef DIAG_DEVELOPER
7347 if (GetGame().IsServer() || !GetGame().IsMultiplayer())
7348 {
7349 GetStomach().ClearContents();
7350
7351 DamageSystem.ResetAllZones(this);
7352 GetModifiersManager().ResetAll();
7353
7354 // bleeding sources
7356 m_BleedingManagerServer.RemoveAllSources();
7357
7358 // Stats
7359 if (GetPlayerStats())
7360 {
7361 int bloodType = GetStatBloodType().Get();
7362 GetPlayerStats().ResetAllStats();
7363 GetStatBloodType().Set(bloodType);
7364 }
7365
7366 // Agents
7367 if (m_AgentPool)
7368 m_AgentPool.RemoveAllAgents();
7369
7370 if (m_StaminaHandler)
7372
7373 // uncon
7374 if (IsUnconscious())
7376
7377 // set max
7378 if (set_max)
7379 {
7380 GetStatWater().Set(GetStatWater().GetMax());
7382 }
7383
7384 // fix up inventory
7386
7387 //remove bloody hands
7388 PluginLifespan moduleLifespan = PluginLifespan.Cast(GetPlugin(PluginLifespan));
7389 moduleLifespan.UpdateBloodyHandsVisibilityEx(this, eBloodyHandsTypes.CLEAN);
7391
7392 if (GetArrowManager())
7394
7395 }
7396
7397 // client + single + server
7398 HumanCommandVehicle vehCmd = GetCommand_Vehicle();
7399 if (vehCmd)
7400 {
7401 Transport transport = vehCmd.GetTransport();
7402 if (transport)
7403 transport.FixEntity();
7404 }
7405 #endif
7406 }
7407
7409 {
7410 if (m_SoundEvent != 0)
7411 {
7413 m_SoundEvent = 0;
7415 }
7416
7417 // cancelling marked interrupted sounds
7418 if (m_PerformedAnimActionID == -1)
7419 {
7420 if (m_PerformedActionSounds.Count() == 0)
7421 return;
7422
7423 foreach (AbstractWave sound : m_PerformedActionSounds)
7424 {
7425 if (sound)
7426 sound.Stop();
7427 }
7428
7429 m_PerformedActionSounds.Clear();
7430 }
7431 }
7432
7434 {
7435 if (GetGame().IsClient()) return;
7436 RequestSoundEvent(1234);
7437 //Math.RandomInt(1,4096)
7438 }
7439
7440 void SetStaminaState(eStaminaState state)
7441 {
7442 if (state != m_StaminaState)
7443 {
7444 m_StaminaState = state;
7445 //PrintString("m_StaminaState:"+m_StaminaState.ToString());
7446 SetSynchDirty();
7447 }
7448 }
7449
7451 {
7452 return m_StaminaState;
7453 }
7454
7456 {
7457 m_QuickBarBase.updateSlotsCount();
7458 }
7459
7460 bool Save()
7461 {
7462 // saved player must be alive and not captive
7463 if (GetPlayerState() == EPlayerStates.ALIVE && !IsRestrained())
7464 {
7465 GetHive().CharacterSave(this);
7466 Debug.Log("Player "+this.ToString()+ " saved as alive");
7467
7468 return true;
7469 }
7470 return false;
7471 }
7472
7473 // agent transfer
7475 void SpreadAgentsEx(float distance = 3,float chance = 0.25)
7476 {
7477 if (Math.RandomFloat01() > chance)
7478 return;
7479
7481 float dist_check = distance * distance;//make it sq
7482 PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(GetPlugin(PluginTransmissionAgents));
7483
7484 foreach (Man target: m_ServerPlayers)
7485 {
7486 if (vector.DistanceSq(GetWorldPosition(), target.GetWorldPosition()) < dist_check && target != this)
7487 {
7488 plugin.TransmitAgents(this, target, AGT_AIRBOURNE_BIOLOGICAL, 1);
7489 }
7490 }
7491 }
7492
7493 void SpreadAgents()//legacy method
7494 {
7495 SpreadAgentsEx(3,1);
7496 }
7497
7498 //--------------------------------------------------------------------------------------------
7499 override int GetAgents()
7500 {
7501 return m_AgentPool.GetAgents();
7502 }
7503
7504 //--------------------------------------------------------------------------------------------
7505 override void RemoveAgent(int agent_id) //removes a single agent type from the player agent pool
7506 {
7507 m_AgentPool.RemoveAgent(agent_id);
7508 }
7509
7510 //--------------------------------------------------------------------------------------------
7511 override void RemoveAllAgents()
7512 {
7513 m_AgentPool.RemoveAllAgents();
7514 }
7515
7516
7517 //--------------------------------------------------------------------------------------------
7518 override void InsertAgent(int agent, float count = 1) //adds a single agent type to the player agent pool
7519 {
7520 m_AgentPool.AddAgent(agent,count);
7521 }
7522
7523 //--------------------------------------------------------------------------------------------
7524 int GetSingleAgentCount(int agent_id)
7525 {
7526 return m_AgentPool.GetSingleAgentCount(agent_id);
7527 }
7528
7529 //--------------------------------------------------------------------------------------------
7531 {
7532 int max_count = PluginTransmissionAgents.GetAgentMaxCount(agent_id);
7533 return m_AgentPool.GetSingleAgentCount(agent_id) / max_count;
7534 }
7535
7537 {
7538 return m_AgentPool.GetTotalAgentCount();
7539 }
7540
7542 {
7543 m_AgentPool.PrintAgents();
7544 }
7545
7546 void ImmuneSystemTick(float value, float deltaT)
7547 {
7548 m_AgentPool.ImmuneSystemTick(value, deltaT);
7549 }
7550
7551 void AntibioticsAttack(float value)
7552 {
7553 m_AgentPool.DrugsAttack(EMedicalDrugsType.ANTIBIOTICS, value);
7554 }
7555
7556 void SetTemporaryResistanceToAgent(int agent, float time)
7557 {
7558 m_AgentPool.SetTemporaryResistance(agent, time);
7559 }
7560
7562 {
7563 return m_AgentPool.GetTemporaryResistance(agent);
7564 }
7565
7566 //Get aim (player crosshair) position
7568 {
7569 float min_distance = 0.5; //min distance, default = 5m
7570
7572 vector to = from + (GetGame().GetCurrentCameraDirection() * min_distance);
7573 vector contactPos;
7574 vector contactDir;
7575 int contactComponent;
7576
7577 DayZPhysics.RaycastRV(from, to, contactPos, contactDir, contactComponent, NULL, NULL, NULL, false, true);
7578
7579 return contactPos;
7580 }
7581
7582
7584 {
7585 ItemBase mask = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
7586 return (!mask || (mask && mask.AllowFoodConsumption()));
7587 }
7588
7590 {
7591 return true;
7592 }
7593
7594 //get modifier manager
7599
7608
7617
7626
7635
7644
7646 {
7647 if (!m_StatWet && GetPlayerStats())
7648 {
7650 }
7651 return m_StatWet;
7652 }
7653
7655 {
7656 if (!m_StatDiet && GetPlayerStats())
7657 {
7659 }
7660 return m_StatDiet;
7661 }
7662
7664 {
7665 if (!m_StatStamina && GetPlayerStats())
7666 {
7667 m_StatStamina = PlayerStat<float>.Cast(GetPlayerStats().GetStatObject(EPlayerStats_current.STAMINA));
7668 }
7669 return m_StatStamina;
7670 }
7671
7673 {
7674 if (!m_StatSpecialty && GetPlayerStats())
7675 {
7676 m_StatSpecialty = PlayerStat<float>.Cast(GetPlayerStats().GetStatObject(EPlayerStats_current.SPECIALTY));
7677 }
7678 return m_StatSpecialty;
7679 }
7680
7682 {
7683 if (!m_StatBloodType && GetPlayerStats())
7684 {
7685 m_StatBloodType = PlayerStat<int>.Cast(GetPlayerStats().GetStatObject(EPlayerStats_current.BLOODTYPE));
7686 }
7687 return m_StatBloodType;
7688 }
7689
7691 {
7692 if (!m_StatHeatBuffer && GetPlayerStats())
7693 {
7694 m_StatHeatBuffer = PlayerStat<float>.Cast(GetPlayerStats().GetStatObject(EPlayerStats_current.HEATBUFFER));
7695 }
7696 return m_StatHeatBuffer;
7697 }
7698
7699 void SetHeatBufferDynamicMax(float value)
7700 {
7701 m_HeatBufferDynamicMax = value;
7702 SetSynchDirty();
7703 }
7704
7706 {
7708 }
7709
7711 {
7712 m_HasHeatBuffer = show;
7713 SetSynchDirty();
7714 }
7715
7716 void ToggleHeatBufferVisibility(int heatbufferStage)
7717 {
7718 m_HeatBufferStage = heatbufferStage;
7719 SetSynchDirty();
7720 }
7721
7724 {
7725 return m_UALastMessage;
7726 }
7727
7728 void SetLastUAMessage(string pMsg)
7729 {
7730 m_UALastMessage = pMsg;
7731
7732 if (m_UALastMessageTimer.IsRunning())
7733 {
7734 m_UALastMessageTimer.Stop();
7735 }
7736
7737 m_UALastMessageTimer.Run(PlayerConstants.LAST_UA_MSG_LIFETIME, this, "ClearLastUAMessage", null);
7738 }
7739
7740 protected void ClearLastUAMessage()
7741 {
7742 if (m_UALastMessageTimer.IsRunning())
7743 {
7744 m_UALastMessageTimer.Stop();
7745 }
7746
7747 m_UALastMessage = "";
7748 }
7749
7752
7755 {
7756 m_InjuryHandler.CheckValue(true);
7757 }
7758
7759 override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
7760 {
7761#ifdef DIAG_DEVELOPER
7762 if (m_Bot && action_id > EActions.PLAYER_BOT_INTERNAL_START && action_id < EActions.PLAYER_BOT_END)
7763 {
7764 m_Bot.StartAction(action_id);
7765 return true;
7766 }
7767#endif
7768
7769 return super.OnAction(action_id, player, ctx);
7770 }
7771
7772 // -------------------------------------------------------------------------
7773 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7774 {
7775 int i;
7776
7777 PluginTransmissionAgents pluginTransmissionAgents = PluginTransmissionAgents.Cast(GetPlugin(PluginTransmissionAgents));
7778
7779 if (pluginTransmissionAgents)
7780 {
7781 map<int, string> agentList = pluginTransmissionAgents.GetSimpleAgentList();
7782
7783 if (agentList)
7784 {
7785 foreach (int tid, string tname : agentList)
7786 {
7787 string injectName = "Inject " + tname;
7788 string removeName = "Remove " + tname;
7789
7790 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.DEBUG_AGENTS_RANGE_INJECT_START + tid, injectName, Colors.WHITE));
7791 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.DEBUG_AGENTS_RANGE_REMOVE_START + tid, removeName, Colors.WHITE));
7792 }
7793 }
7794 }
7795
7796#ifdef DIAG_DEVELOPER
7797 if (m_Bot || GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_AI_REMOTE)
7798 {
7799 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.SEPARATOR, "___________________________", FadeColors.RED));
7800
7801 typename e = EActions;
7802
7803 int cnt = e.GetVariableCount();
7804 int val;
7805
7806 for (i = 0; i < cnt; i++)
7807 {
7808 if (!e.GetVariableValue(null, i, val))
7809 continue;
7810
7811 if (val <= EActions.PLAYER_BOT_INTERNAL_START)
7812 continue;
7813
7814 if (val == EActions.PLAYER_BOT_START)
7815 {
7816 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.SEPARATOR, "___________________________", FadeColors.RED));
7817 continue;
7818 }
7819
7820 if (val >= EActions.PLAYER_BOT_END)
7821 break;
7822
7823 string name = e.GetVariableName(i);
7824
7825 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, val, name, FadeColors.LIGHT_GREY));
7826 }
7827 }
7828#endif
7829 }
7830
7831 //-------------------------------------------------------------
7835
7836 override void OnSyncJuncture(int pJunctureID, ParamsReadContext pCtx)
7837 {
7838 super.OnSyncJuncture(pJunctureID, pCtx);
7839
7840 switch(pJunctureID)
7841 {
7844 bool enable;
7845 DayZPlayerSyncJunctures.ReadInjuryParams(pCtx, enable, level);
7846 m_InjuryHandler.SetInjuryCommandParams(enable, level);
7847 break;
7849 GetSymptomManager().SetAnimation(pCtx);
7850 break;
7853 break;
7855 GetInventory().OnInventoryJunctureFromServer(pCtx);
7856 break;
7858 GetInventory().OnInventoryJunctureRepairFromServer(pCtx);
7859 break;
7861 GetInventory().OnInventoryJunctureFailureFromServer(pCtx);
7862 break;
7866 m_ActionManager.OnSyncJuncture(pJunctureID,pCtx);
7867 break;
7871 m_WeaponManager.OnSyncJuncture(pJunctureID,pCtx);
7872 break;
7874 DayZPlayerSyncJunctures.ReadPlayerUnconsciousnessParams(pCtx, m_ShouldBeUnconscious);
7875 break;
7877 GetSymptomManager().SetAnimation(pCtx);
7878 break;
7880 float amount;
7881 if (DayZPlayerSyncJunctures.ReadKuruRequest(pCtx, amount))
7882 {
7883 if (GetAimingModel() && IsFireWeaponRaised())
7884 {
7885 GetAimingModel().RequestKuruShake(amount);
7886 }
7887 }
7888 break;
7890 m_EmoteManager.OnSyncJuncture(pJunctureID, pCtx);
7891 break;
7892 case DayZPlayerSyncJunctures.SJ_WEAPON_LIFT: // Obsolete
7893 SetLiftWeapon(pJunctureID, pCtx);
7894 break;
7896 m_ResetADS = true;
7897 break;
7899 SetToDelete(pCtx);
7900 break;
7904 break;
7907 break;
7909 m_StaminaHandler.OnSyncJuncture(pJunctureID, pCtx);
7910 break;
7912 m_StaminaHandler.OnSyncJuncture(pJunctureID, pCtx);
7913 break;
7914 #ifdef DEVELOPER
7915 case DayZPlayerSyncJunctures.SJ_DEBUG_GET_IN_VEHICLE:
7916 EntityAI vehicle;
7917 DayZPlayerSyncJunctures.ReadGetInVehicleParams(pCtx, vehicle);
7918 SetGetInVehicleDebug(vehicle);
7919 break;
7920 #endif
7921 }
7922 }
7923
7925 {
7926 return m_ItemsToDelete.Count() > 0;
7927 }
7928
7930 {
7931 EntityAI item;
7932 pCtx.Read(item);
7933 AddItemToDelete(item);
7934 }
7935
7936 override void AddItemToDelete(EntityAI item)
7937 {
7938 if (item)
7939 {
7940 item.SetPrepareToDelete();
7941 m_ItemsToDelete.Insert(item);
7942 }
7943 }
7944
7946 {
7947 return !(GetThrowing().IsThrowingAnimationPlaying() || GetDayZPlayerInventory().IsProcessing() || (GetActionManager() && GetActionManager().GetRunningAction()));
7948 }
7949
7950 override void JunctureDeleteItem(EntityAI item)
7951 {
7953 }
7954
7956 {
7957 int count = m_ItemsToDelete.Count();
7958 if (count > 0)
7959 {
7960 if (CanDeleteItems())
7961 {
7962 EntityAI itemToDelete;
7963
7964 if (GetGame().IsClient() && GetGame().IsMultiplayer())
7965 {
7967 for (int i = count - 1; i >= 0 ; i--)
7968 {
7969 itemToDelete = m_ItemsToDelete.Get(i);
7970 if (itemToDelete != null)
7971 {
7972 itemToDelete.GetInventory().GetCurrentInventoryLocation(il);
7973 }
7974
7975 if (itemToDelete == null || (GetItemInHands() == null && il.GetType() == InventoryLocationType.UNKNOWN))
7976 {
7977 m_ItemsToDelete.Remove(i);
7978 }
7979 }
7980 }
7981 else
7982 {
7983 for (int j = count - 1; j >= 0 ; j--)
7984 {
7985 itemToDelete = m_ItemsToDelete.Get(j);
7986 if (itemToDelete == null)
7987 {
7988 m_ItemsToDelete.Remove(j);
7989 }
7990 else
7991 {
7992 itemToDelete.Delete();
7993 m_ItemsToDelete.Remove(j);
7994 }
7995 }
7996 }
7997 }
7998 }
7999 }
8000
8001 override bool HeadingModel(float pDt, SDayZPlayerHeadingModel pModel)
8002 {
8003 if (GetActionManager()) // disable character turning while performing actions
8004 {
8006 if (action && action.IsFullBody(this) && action.IsCameraLockOnPerform())
8007 {
8009 {
8010 m_IsHeadingRestricted = true;
8011 m_HeadingRestrictData.InitData(pModel.m_fHeadingAngle, action.GetCameraLRAngle());
8012 }
8013
8014 return DayZPlayerImplementHeading.RestrictHeading(pDt, pModel, m_fLastHeadingDiff, m_HeadingRestrictData);
8015 }
8016 else
8017 m_IsHeadingRestricted = false;
8018 }
8019
8022 {
8023 HumanItemAccessor hia = GetItemAccessor();
8024 HumanItemBehaviorCfg hibcfg = hia.GetItemInHandsBehaviourCfg();
8025 if (hibcfg && hibcfg.m_StanceRotation[m_MovementState.m_iStanceIdx] == DayZPlayerConstants.ROTATION_DISABLE)
8026 {
8027 return DayZPlayerImplementHeading.NoHeading(pDt, pModel, m_fLastHeadingDiff);
8028 }
8029 else
8030 {
8031 m_fLastHeadingDiff = 0;
8032 return DayZPlayerImplementHeading.ClampHeading(pDt, pModel, m_fLastHeadingDiff);
8033 }
8034 }
8035
8036 return super.HeadingModel(pDt, pModel);
8037 }
8038
8040 {
8041 return m_InventorySoftLockCount > 0;
8042 }
8043
8045 override void SetInventorySoftLock(bool status)
8046 {
8047 if (status)
8049 else
8051
8054
8056 }
8057
8058 void SetLoadedQuickBarItemBind(EntityAI entity, int index)
8059 {
8060 if (m_aQuickBarLoad)
8061 m_aQuickBarLoad.Insert(new Param2<EntityAI, int>(entity,index));
8062 }
8063
8064 override bool IsLiftWeapon()
8065 {
8066 return m_LiftWeapon_player;
8067 }
8068
8069 //Server
8070 bool ReadLiftWeaponRequest(int userDataType, ParamsReadContext ctx)
8071 {
8072 bool state;
8073 ctx.Read(state);
8074
8075
8076 SetLiftWeapon(state);
8077
8078 return true;
8079 }
8080
8081 void SetLiftWeapon(int pJunctureID, ParamsReadContext ctx) // Obsolete
8082 {
8083 bool state;
8084 ctx.Read(state);
8085
8086 SetLiftWeapon(state);
8087
8088 //Print("SetLiftWeapon | STS: " + GetSimulationTimeStamp());
8089 }
8090
8091 void SetLiftWeapon(bool state)
8092 {
8093 m_ProcessLiftWeaponState = state;
8094 m_ProcessLiftWeapon = true;
8095 }
8096
8098 void SendLiftWeaponSync(bool state)
8099 {
8101
8102 // Apply state immediately
8103 m_LiftWeapon_player = state;
8104
8105 hcw = GetCommandModifier_Weapons();
8106 if (hcw)
8107 hcw.LiftWeapon(state);
8108
8109 GetWeaponManager().OnLiftWeapon();
8110
8111 // Notify server to apply same state
8112 if (GetGame().IsMultiplayer() && GetGame().IsClient())
8113 {
8115 if (!ctx.CanStoreInputUserData())
8116 {
8117 // ctx not available??
8118 return;
8119 }
8120
8122 ctx.Write(state);
8123 ctx.Send();
8124 }
8125 }
8126
8127 override void CheckLiftWeapon()
8128 {
8129 // lift weapon check
8130 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
8131 {
8132 Weapon_Base weap;
8133 if (Weapon_Base.CastTo(weap, GetItemInHands()))
8134 {
8135 bool limited = weap.LiftWeaponCheck(this);
8136
8137 if (limited && !m_LiftWeapon_player)
8138 SendLiftWeaponSync(true);
8139 else if (!limited && m_LiftWeapon_player)
8140 SendLiftWeaponSync(false);
8141 }
8142 else if (m_LiftWeapon_player)
8143 {
8144 SendLiftWeaponSync(false);
8145 }
8146 }
8147 }
8148
8149 override void ProcessLiftWeapon()
8150 {
8151 if (m_ProcessLiftWeapon)
8152 {
8153 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
8154 if (hcw)
8155 hcw.LiftWeapon(m_ProcessLiftWeaponState);
8156
8157 GetWeaponManager().OnLiftWeapon();
8158 m_LiftWeapon_player = m_ProcessLiftWeaponState;
8159 m_ProcessLiftWeapon = false;
8160
8161 //Debug.Log("SimulationStamp_server: " + this.GetSimulationTimeStamp());
8162 }
8163 }
8164
8166 override void HideClothing(ItemOptics optic, bool state)
8167 {
8168 super.HideClothing(optic, state);
8169 array<int> clothingArray = new array<int>;
8170 Clothing clothes;
8171
8172 if (state && DayZPlayerCameraOptics.Cast(m_CurrentCamera))
8173 {
8174 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
8175 {
8176 clothingArray.Insert(InventorySlots.BACK);
8177 clothingArray.Insert(InventorySlots.SHOULDER);
8178 clothingArray.Insert(InventorySlots.MELEE);
8180 {
8181 clothingArray.Insert(InventorySlots.BODY);
8182 clothingArray.Insert(InventorySlots.VEST);
8183 }
8184
8185 SetInvisibleRecursive(true,this,clothingArray);
8186 }
8187 }
8188 //showing should be instant (called directly, not via CallLater)
8189 else
8190 {
8191 if (GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
8192 {
8193 clothingArray = {InventorySlots.BACK,InventorySlots.BODY,InventorySlots.VEST,InventorySlots.SHOULDER,InventorySlots.MELEE};
8194
8195 SetInvisibleRecursive(false,this,clothingArray);
8196 }
8197 }
8198 }
8199
8200 void RequestUnconsciousness(bool enable)
8201 {
8203 }
8204
8205 override void SetDeathDarknessLevel(float duration, float tick_time)
8206 {
8207 super.SetDeathDarknessLevel(duration, tick_time);
8208
8209 if (IsControlledPlayer())
8210 {
8211 float actual_tick = tick_time;
8213 m_DamageDealtEffect = null;
8214
8215 if (GetFlashbangEffect())
8216 m_FlashbangEffect = null;
8217
8218 float progress;
8219 if (duration > 0)
8220 progress = 1 - ((duration - m_DeathDarkeningCurrentTime) / duration);
8221
8222 m_DeathDarkeningCurrentTime += actual_tick;
8223
8224 if (!IsAlive() && IsPlayerSelected())
8225 {
8226 m_DeathDarkeningParam.param1 = progress;
8227 PPERequesterBank.GetRequester(PPERequester_DeathDarkening).Start(m_DeathDarkeningParam);
8228 }
8229
8230 if (m_DeathDarkeningCurrentTime >= duration)
8231 {
8232 StopDeathDarkeningEffect();
8233 }
8234 }
8235 else
8236 {
8237 StopDeathDarkeningEffect();
8238 }
8239 }
8240
8241 override bool IsInFBEmoteState()
8242 {
8243 if (!IsEmotePlaying())
8244 return false;
8245 if ((m_EmoteManager.m_Callback && m_EmoteManager.m_Callback.m_IsFullbody) || m_EmoteManager.m_IsSurrendered)
8246 {
8247 return true;
8248 }
8249 return false;
8250 }
8251
8254 {
8255 if (m_EmoteManager)
8256 m_EmoteManager.EndSurrenderRequest(data);
8257 }
8258
8260 {
8261 if (m_EmoteManager)
8262 return m_EmoteManager.m_IsSurrendered;
8263
8264 return false;
8265 }
8266
8268 {
8269 return m_PlayerLoaded;
8270 }
8271
8272 //disconnected, caused problems. Awaiting refactor
8274 {
8275 //FB gesture slideposeangle override
8276 if (IsInFBEmoteState() && IsControlledPlayer() && IsPlayerSelected())
8277 {
8278 OverrideSlidePoseAngle(Math.PI2);
8279 }
8280 else if (!IsInFBEmoteState() && IsControlledPlayer() && IsPlayerSelected())
8281 {
8282 OverrideSlidePoseAngle(m_OriginalSlidePoseAngle);
8283 }
8284
8285 //+add more, if needed
8286 }
8287
8288 /*void OnSurrenderEnd()
8289 {
8290 }*/
8291
8292 bool CanRedirectToWeaponManager (notnull EntityAI item, out bool isActionPossible)
8293 {
8294 isActionPossible = false;
8295 Magazine mag = Magazine.Cast(item);
8296 Weapon_Base wpn = Weapon_Base.Cast(item.GetHierarchyParent());
8297 if (mag && wpn)
8298 {
8299 if (GetWeaponManager().CanDetachMagazine(wpn, mag))
8300 {
8301 //Print("[inv] PlayerBase.CanRedirectToWeaponManager OK, can detach mag=" + mag + " from wpn=" + wpn);
8302 isActionPossible = true;
8303 }
8304 else
8305 {
8306 //Print("[inv] PlayerBase.CanRedirectToWeaponManager cannot detach mag=" + mag + " from wpn=" + wpn);
8307 }
8308 return true;
8309 }
8310 return false;
8311 }
8312
8313 // Inventory actions with redirection to weapon manager
8314 override bool PredictiveTakeEntityToTargetInventory (notnull EntityAI target, FindInventoryLocationType flags, notnull EntityAI item)
8315 {
8316 bool can_detach;
8317 if (CanRedirectToWeaponManager(item,can_detach))
8318 {
8320 if (can_detach && target.GetInventory().FindFreeLocationFor(item, flags, il))
8321 {
8322 return GetWeaponManager().DetachMagazine(il);
8323 }
8324 return false;
8325 }
8326 return super.PredictiveTakeEntityToTargetInventory(target, flags, item);
8327 }
8328
8330 {
8331 bool can_detach;
8332 if (CanRedirectToWeaponManager(item,can_detach))
8333 {
8335 if (can_detach && GetInventory().FindFreeLocationFor(item, flags, il))
8336 {
8337 return GetWeaponManager().DetachMagazine(il);
8338 }
8339 return false;
8340 }
8341 return super.PredictiveTakeEntityToInventory(flags, item);
8342 }
8343
8344 override bool PredictiveTakeEntityToTargetAttachment (notnull EntityAI target, notnull EntityAI item)
8345 {
8346 Weapon_Base parentWpn = Weapon_Base.Cast(target);
8347 Magazine mag = Magazine.Cast(item);
8348 if (parentWpn && mag)
8349 {
8350 if (GetWeaponManager().CanAttachMagazine(parentWpn, mag))
8351 return GetWeaponManager().AttachMagazine(mag);
8352
8353 return false;
8354 }
8355 return super.PredictiveTakeEntityToTargetAttachment(target, item);
8356 }
8357
8358 override bool PredictiveTakeEntityToTargetAttachmentEx (notnull EntityAI target, notnull EntityAI item, int slot)
8359 {
8360 Weapon_Base parentWpn = Weapon_Base.Cast(target);
8361 Magazine mag = Magazine.Cast(item);
8362 if (parentWpn && mag)
8363 {
8364 if (target.CanReceiveAttachment(item,slot) && GetWeaponManager().CanAttachMagazine(parentWpn, mag))
8365 return GetWeaponManager().AttachMagazine(mag);
8366
8367 return false;
8368 }
8369 return super.PredictiveTakeEntityToTargetAttachmentEx(target, item,slot);
8370 }
8371
8372 override bool PredictiveTakeEntityToTargetCargo (notnull EntityAI target, notnull EntityAI item)
8373 {
8374 bool can_detach;
8375 if (CanRedirectToWeaponManager(item,can_detach))
8376 {
8378 if (can_detach && target.GetInventory().FindFreeLocationFor(item, FindInventoryLocationType.CARGO, il))
8379 {
8380 return GetWeaponManager().DetachMagazine(il);
8381 }
8382 return false;
8383 }
8384 return super.PredictiveTakeEntityToTargetCargo(target,item);
8385 }
8386
8387 override bool PredictiveTakeEntityToTargetCargoEx (notnull CargoBase cargo, notnull EntityAI item, int row, int col)
8388 {
8389 bool can_detach;
8390 if (CanRedirectToWeaponManager(item, can_detach))
8391 {
8392 if (can_detach)
8393 {
8395 dst.SetCargoAuto(cargo, item, row, col, item.GetInventory().GetFlipCargo());
8396
8397 return GetWeaponManager().DetachMagazine(dst);
8398 }
8399 return false;
8400 }
8401 return super.PredictiveTakeEntityToTargetCargoEx (cargo, item, row, col);
8402 }
8403
8404 override bool PredictiveDropEntity (notnull EntityAI item)
8405 {
8406 bool can_detach;
8407 if (CanRedirectToWeaponManager(item,can_detach))
8408 {
8409 if (can_detach)
8410 {
8411 vector m4[4];
8413
8417 il.SetGround(item, m4);
8418 return GetWeaponManager().DetachMagazine(il);
8419 }
8420 return false;
8421 }
8422 return super.PredictiveDropEntity(item);
8423 }
8424
8425 override bool PredictiveSwapEntities (notnull EntityAI item1, notnull EntityAI item2)
8426 {
8427 //Print("PlayerBase | PredictiveSwapEntities");
8428 Magazine swapmag1 = Magazine.Cast(item1);
8429 Magazine swapmag2 = Magazine.Cast(item2);
8430
8431 if (swapmag1 && swapmag2)
8432 {
8433 Weapon_Base parentWpn;
8434
8435 if (Class.CastTo(parentWpn, swapmag1.GetHierarchyParent()))
8436 {
8437 if (GetWeaponManager().CanSwapMagazine(parentWpn, swapmag2))
8438 {
8439 Print("[inv] PlayerBase.PredictiveSwapEntities: swapping mag1=" + swapmag1 + " to parent wpn=" + parentWpn + " of mag1=" + swapmag1);
8440 return GetWeaponManager().SwapMagazine(swapmag2);
8441 }
8442 else
8443 {
8444 Print("[inv] PlayerBase.PredictiveSwapEntities: can not swap magazines");
8445 return false;
8446 }
8447 }
8448
8449 if (Class.CastTo(parentWpn, swapmag2.GetHierarchyParent()))
8450 {
8451 if (GetWeaponManager().CanSwapMagazine(parentWpn, swapmag1))
8452 {
8453 Print("[inv] PlayerBase.PredictiveSwapEntities: swapping mag1=" + swapmag1 + " to parent wpn=" + parentWpn + " of mag2=" + swapmag2);
8454 return GetWeaponManager().SwapMagazine(swapmag1);
8455 }
8456 else
8457 {
8458 Print("[inv] PlayerBase.PredictiveSwapEntities: can not swap magazines");
8459 return false;
8460 }
8461 }
8462 }
8463
8464 EntityAI item_hands;
8465 EntityAI item_ground;
8466 if (IsSwapBetweenHandsAndGroundLargeItem(item1,item2,item_hands,item_ground) && !m_ActionManager.GetRunningAction())
8467 {
8468 ActionManagerClient mngr_client;
8469 CastTo(mngr_client,m_ActionManager);
8470
8471 ActionTarget atrg = new ActionTarget(item_ground,null,-1,vector.Zero,-1.0);
8472 if (mngr_client.GetAction(ActionSwapItemToHands).Can(this,atrg,ItemBase.Cast(item_hands)))
8473 {
8474 mngr_client.PerformActionStart(mngr_client.GetAction(ActionSwapItemToHands),atrg,ItemBase.Cast(item_hands));
8475 return true;
8476 }
8477 return super.PredictiveSwapEntities(item1, item2);
8478 }
8479 else
8480 return super.PredictiveSwapEntities(item1, item2);
8481 }
8482
8483 override bool PredictiveForceSwapEntities (notnull EntityAI item1, notnull EntityAI item2, notnull InventoryLocation item2_dst)
8484 {
8486 if (item1.IsHeavyBehaviour() && item1.GetInventory().GetCurrentInventoryLocation(il) && il.GetType() == InventoryLocationType.GROUND && !m_ActionManager.GetRunningAction())
8487 {
8488 //Print("override bool PredictiveForceSwapEntities (notnull EntityAI item1, notnull EntityAI item2, notnull InventoryLocation item2_dst)");
8489 ActionManagerClient mngr_client;
8490 CastTo(mngr_client,m_ActionManager);
8491
8492 ActionTarget atrg = new ActionTarget(item1,null,-1,vector.Zero,-1.0);
8493 if (mngr_client.GetAction(ActionSwapItemToHands).Can(this,atrg,ItemBase.Cast(item2)))
8494 {
8495 mngr_client.PerformActionStart(mngr_client.GetAction(ActionSwapItemToHands),atrg,ItemBase.Cast(item2));
8496 }
8497 return true;
8498 }
8499 else
8500 return super.PredictiveForceSwapEntities(item1, item2, item2_dst);
8501 }
8502
8504 {
8505 if (item.IsHeavyBehaviour() && !m_ActionManager.GetRunningAction() && !item.GetHierarchyParent())
8506 {
8507 ActionManagerClient mngr_client;
8508 if (CastTo(mngr_client,m_ActionManager))
8509 {
8510 ActionTarget atrg = new ActionTarget(item,null,-1,vector.Zero,-1.0);
8511
8512 if (mngr_client.GetAction(ActionTakeItemToHands).Can(this,atrg,null))
8513 {
8514 mngr_client.PerformActionStart(mngr_client.GetAction(ActionTakeItemToHands),atrg,null);
8515 }
8516 /*).Can(this,
8517 mngr_client.ActionStart(mngr_client.GetAction(ActionTakeItemToHands),mngr_client.FindActionTarget(),null);
8518 return;*/
8519 }
8520 }
8521 else
8522 super.PredictiveTakeEntityToHands(item);
8523 }
8524
8525 override bool PredictiveTakeToDst (notnull InventoryLocation src, notnull InventoryLocation dst)
8526 {
8527 EntityAI item = src.GetItem();
8528 if (item)
8529 {
8530 bool can_detach;
8531
8532 if (CanRedirectToWeaponManager(item,can_detach))
8533 {
8534 if (can_detach)
8535 {
8536 return GetWeaponManager().DetachMagazine(dst);
8537 }
8538 return false;
8539 }
8540 return super.PredictiveTakeToDst(src,dst);
8541 }
8542 return false;
8543 }
8544
8545 bool IsSwapBetweenHandsAndGroundLargeItem(notnull EntityAI item1, notnull EntityAI item2, out EntityAI item_hands, out EntityAI item_ground)
8546 {
8548 if (item1.GetInventory().GetCurrentInventoryLocation(il) && il.GetType() == InventoryLocationType.HANDS)
8549 item_hands = item1;
8550 if (item2.GetInventory().GetCurrentInventoryLocation(il) && il.GetType() == InventoryLocationType.HANDS)
8551 item_hands = item2;
8552 if (item1.GetInventory().GetCurrentInventoryLocation(il) && il.GetType() == InventoryLocationType.GROUND)
8553 item_ground = item1;
8554 if (item2.GetInventory().GetCurrentInventoryLocation(il) && il.GetType() == InventoryLocationType.GROUND)
8555 item_ground = item2;
8556
8557 return item_hands && item_ground && item_ground.IsHeavyBehaviour();
8558 }
8559
8561 void SetHairLevelToHide(int level, bool state, bool was_debug = false)
8562 {
8563 if (was_debug && GetInstanceType() != DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
8564 return;
8565
8566 if (!m_CharactersHead)
8567 {
8568 ErrorEx("No valid head detected on character!");
8569 return;
8570 }
8571
8572 if (level == -1) //hide/show ALL
8573 {
8575 for (int i = 0; i < m_CharactersHead.m_HeadHairSelectionArray.Count(); ++i)
8576 {
8577 //m_CharactersHead.SetSimpleHiddenSelectionState(i,m_HideHairAnimated);
8578 SelectionTranslation stt = SelectionTranslation.Cast(m_CharactersHead.m_HeadHairHidingStateMap.Get(i));
8580 m_CharactersHead.m_HeadHairHidingStateMap.Set(i, stt);
8581#ifdef DIAG_DEVELOPER
8582#ifndef SERVER
8584 diagmenu.m_HairHidingStateMap.Set(i, m_HideHairAnimated);
8585#endif
8586#endif
8587 }
8588 }
8589 else //hide/show selected level only
8590 {
8591 bool switchState;
8592 if (was_debug)
8593 {
8594#ifdef DIAG_DEVELOPER
8595#ifndef SERVER
8597 switchState = !diagmenuu.m_HairHidingStateMap.Get(level);
8598 diagmenuu.m_HairHidingStateMap.Set(level, switchState);
8599#endif
8600#endif
8601 }
8602 else
8603 {
8604 switchState = !state;
8605 }
8606 //m_CharactersHead.SetSimpleHiddenSelectionState(level,switchState);
8607 stt = SelectionTranslation.Cast(m_CharactersHead.m_HeadHairHidingStateMap.Get(level));
8608 stt.SetSelectionState(switchState);
8609 m_CharactersHead.m_HeadHairHidingStateMap.Set(level, stt); //nescessary?
8610 }
8611 }
8612
8613 void HideHairSelections(ItemBase item, bool state)
8614 {
8615 if (!item || !item.GetHeadHidingSelection() || !m_CharactersHead)
8616 return;
8617
8618 int slot_id; //item currently attached (or detaching from) here
8619 string slot_name; //item currently attached (or detaching from) here
8620 string str
8621 int idx = 0;
8622 int i;
8623 int count;
8624 item.GetInventory().GetCurrentAttachmentSlotInfo(slot_id,slot_name);
8625
8626 if (item.HidesSelectionBySlot())
8627 {
8628 count = item.GetInventory().GetSlotIdCount();
8629 for (i = 0; i < count; i++)
8630 {
8631 if (item.GetInventory().GetSlotId(i) == slot_id)
8632 {
8633 str = item.GetHeadHidingSelection().Get(i);
8634 idx = m_CharactersHead.m_HeadHairSelectionArray.Find(str);
8635 if (idx != -1)
8636 SetHairLevelToHide(idx,state);
8637 #ifdef DEVELOPER
8638 else
8639 Debug.Log("No valid selection '" + str + "' found on head of " + GetType() + ". Verify the p3d, model config, and the 'HAIR_HIDING_SELECTIONS' macro in basicDefines.");
8640 #endif
8641 }
8642 }
8643 }
8644 else
8645 {
8646 count = item.GetHeadHidingSelection().Count();
8647 for (i = 0; i < count; i++)
8648 {
8649 str = item.GetHeadHidingSelection().Get(i);
8650 idx = m_CharactersHead.m_HeadHairSelectionArray.Find(str);
8651 if (idx != -1)
8652 SetHairLevelToHide(idx,state);
8653 #ifdef DEVELOPER
8654 else
8655 Debug.Log("No valid selection '" + str + "' found on head of " + GetType() + ". Verify the p3d, model config, and the 'HAIR_HIDING_SELECTIONS' macro in basicDefines.");
8656 #endif
8657 }
8658 }
8660 }
8661
8662 void UpdateHairSelectionVisibility(bool was_debug = false)
8663 {
8664 if (!m_CharactersHead)
8665 return;
8666 bool shown;
8667 bool exception_hidden = false;
8668 int i;
8669 int count = m_CharactersHead.m_HeadHairHidingStateMap.Count();
8671
8672 //hide/show beard
8673 if (IsMale() && m_CharactersHead.GetBeardIndex() > -1 && !was_debug)
8674 {
8675 SetHairLevelToHide(m_CharactersHead.GetBeardIndex(),GetLifeSpanState() != LifeSpanState.BEARD_EXTRA);
8676 }
8677
8678 //show all first
8679 for (i = 0; i < count; i++)
8680 {
8681 m_CharactersHead.SetSimpleHiddenSelectionState(i,true);
8682 }
8683 //then carve it up
8684 for (i = 0; i < count; i++)
8685 {
8686 stt = m_CharactersHead.m_HeadHairHidingStateMap.Get(i);
8687 shown = stt.GetSelectionState();
8688 if (!shown)
8689 {
8690 if (/*IsMale() && */!m_CharactersHead.IsHandlingException())
8691 {
8692 m_CharactersHead.SetSimpleHiddenSelectionState(i,shown);
8694 //Print("hidden idx: " + i);
8695 }
8696 else
8697 {
8698 exception_hidden = true;
8699 }
8700 }
8701 }
8702
8703 //exceptions handled differently; hides hair
8704 if (exception_hidden)
8705 {
8706 m_CharactersHead.SetSimpleHiddenSelectionState(m_CharactersHead.GetHairIndex(),false);
8707 if (IsMale())
8708 m_CharactersHead.SetSimpleHiddenSelectionState(m_CharactersHead.GetBeardIndex(),false);
8709 }
8710 }
8711
8713 {
8714 int index;
8715 array<int> translatedSelectinosArray = stt.GetTranslatedSelections();
8716 for (int i = 0; i < translatedSelectinosArray.Count(); i++)
8717 {
8718 index = translatedSelectinosArray.Get(i);
8719 //if (index > -1)
8720 m_CharactersHead.SetSimpleHiddenSelectionState(index,false); //safe this way, only hiding/carving from shown parts
8721 }
8722 }
8723
8726 {
8727 ItemBase headgear = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.HEADGEAR));
8728 ItemBase mask = ItemBase.Cast(GetInventory().FindAttachment(InventorySlots.MASK));
8729
8730 HideHairSelections(headgear,true);
8731 HideHairSelections(mask,true);
8732 }
8733
8735 {
8736 return m_ActiveNVTypes && m_ActiveNVTypes.Count() > 0;
8737 }
8738
8740 {
8741 return m_LoweredNVGHeadset;
8742 }
8743
8745 {
8746 if (!m_ActiveNVTypes || m_ActiveNVTypes.Count() == 0)
8747 {
8748 return NVTypes.NONE;
8749 }
8750 else
8751 {
8752 return m_ActiveNVTypes[m_ActiveNVTypes.Count() - 1];
8753 }
8754 }
8755
8757 {
8758 return m_ActiveNVTypes;
8759 }
8760
8762 void SetNVGWorking(bool state)
8763 {
8764 //Deprecated, below is for legacy's sake
8765 AddActiveNV(NVTypes.NV_GOGGLES);
8766 }
8767
8768 void SetNVGLowered(bool state)
8769 {
8770 m_LoweredNVGHeadset = state;
8771 }
8772
8773 void AddActiveNV(int type)
8774 {
8775 if (!m_ActiveNVTypes || (GetGame().IsMultiplayer() && GetGame().IsServer()))
8776 {
8777 #ifdef DEVELOPER
8778 Error("AddActiveNV | illegal server-side call!");
8779 #endif
8780
8781 return;
8782 }
8783
8784 if (m_ActiveNVTypes.Find(type) == -1)
8785 m_ActiveNVTypes.Insert(type);
8786 }
8787
8788 void RemoveActiveNV(int type)
8789 {
8790 if (!m_ActiveNVTypes || (GetGame().IsMultiplayer() && GetGame().IsServer()))
8791 {
8792 #ifdef DEVELOPER
8793 Error("RemoveActiveNV | illegal server-side call!");
8794 #endif
8795
8796 return;
8797 }
8798
8799 if (m_ActiveNVTypes.Find(type) != -1)
8800 m_ActiveNVTypes.RemoveItem(type);
8801 }
8802
8804 {
8805 m_ActiveNVTypes.Clear();
8806 }
8807
8808#ifdef DEVELOPER
8809 override string GetDebugText()
8810 {
8811 string text = super.GetDebugText();
8812 /*
8813 text += "GetMovementTimeToStrafeJog:" + CfgGameplayHandler.GetMovementTimeToStrafeJog() + "\n";
8814 text += "GetMovementTimeToStrafeSprint:" + CfgGameplayHandler.GetMovementTimeToStrafeSprint()+ "\n";
8815
8816 SHumanCommandMoveSettings moveSettings = GetDayZPlayerType().CommandMoveSettingsW();
8817 if (moveSettings)
8818 {
8819 text += "hmcs.m_fDirFilterTimeout:" + moveSettings.m_fDirFilterTimeout + "\n";
8820 text += "hmcs.m_fDirFilterSprintTimeout:" + moveSettings.m_fDirFilterSprintTimeout+ "\n";
8821 }*/
8822
8823 return text;
8824 }
8825
8826
8827
8828 void DEBUGRotateNVG()
8829 {
8830 NVGoggles nvg;
8831
8832 if (FindAttachmentBySlotName("Eyewear"))
8833 {
8834 nvg = NVGoggles.Cast(FindAttachmentBySlotName("Eyewear").FindAttachmentBySlotName("NVG"));
8835 }
8836 else if (FindAttachmentBySlotName("Headgear"))
8837 {
8838 nvg = NVGoggles.Cast(FindAttachmentBySlotName("Headgear").FindAttachmentBySlotName("NVG"));
8839 }
8840
8841 if (nvg)
8842 {
8843 nvg.RotateGoggles(nvg.m_IsLowered);
8844 }
8845 }
8846#endif
8847
8848 void AdjustBandana(EntityAI item, string slot_name)
8849 {
8850 if (Bandana_ColorBase.Cast(item))
8851 {
8852 if (slot_name == "Headgear")
8853 {
8854 item.SetSimpleHiddenSelectionState(0,1);
8855 item.SetSimpleHiddenSelectionState(1,0);
8856 }
8857 else if (slot_name == "Mask")
8858 {
8859 item.SetSimpleHiddenSelectionState(0,0);
8860 item.SetSimpleHiddenSelectionState(1,1);
8861 }
8862 }
8863 }
8864
8865 void AdjustShemag(EntityAI item, string slot_name)
8866 {
8867 if (Shemag_ColorBase.Cast(item))
8868 {
8869 if (slot_name == "Headgear")
8870 {
8871 item.SetSimpleHiddenSelectionState(0,1);
8872 item.SetSimpleHiddenSelectionState(1,0);
8873 }
8874 else if (slot_name == "Mask")
8875 {
8876 item.SetSimpleHiddenSelectionState(0,0);
8877 item.SetSimpleHiddenSelectionState(1,1);
8878 }
8879 }
8880 }
8881
8882 //client-side
8884 {
8885 //Print("---Prettying up corpses... | " + GetGame().GetTime() + " | " + this + " | " + GetType() + "---");
8886 //Print("m_DecayedTexture = " + m_DecayedTexture);
8887 int state = Math.AbsInt(m_CorpseState);//negative sign denotes a special meaning(state was forced to a live player), but we are only intetested in the positive value here
8889 {
8890 EntityAI bodypart;
8891 ItemBase item;
8892
8893 string path;
8894 int idx;
8895 int slot_id;
8896 array<string> bodyparts = {"Gloves","Body","Legs","Feet"};
8897
8898 for (int i = 0; i < bodyparts.Count(); i++)
8899 {
8900 slot_id = InventorySlots.GetSlotIdFromString(bodyparts.Get(i));
8901 bodypart = GetInventory().FindPlaceholderForSlot(slot_id);
8902 item = ItemBase.Cast(GetInventory().FindAttachment(slot_id));
8903
8904 if (bodypart)
8905 {
8906 path = "cfgVehicles " + bodypart.GetType();
8907 idx = bodypart.GetHiddenSelectionIndex("personality");
8908 if (idx > -1)
8909 {
8910 bodypart.SetObjectTexture(idx,m_DecayedTexture);
8911 }
8912 }
8913 if (item)
8914 {
8915 path = "cfgVehicles " + item.GetType();
8916 idx = item.GetHiddenSelectionIndex("personality");
8917 if (idx > -1)
8918 {
8919 item.SetObjectTexture(idx,m_DecayedTexture);
8920 }
8921 }
8922 }
8923
8924 SetFaceTexture(m_DecayedTexture);
8925 }
8926 }
8927
8928 void SetDecayEffects(int effect = -1)
8929 {
8930 int boneIdx = GetBoneIndexByName("Spine2");
8931 Particle p;
8932
8933 switch (effect)
8934 {
8936 //play medium sound/flies particle
8937 if (!m_FliesEff)
8939
8941 {
8942 m_FliesEff.SetDecalOwner(this);
8944 p = m_FliesEff.GetParticle();
8945 AddChild(p, boneIdx);
8946 if (!m_SoundFliesEffect)
8947 {
8948 PlaySoundSetLoop(m_SoundFliesEffect, "Flies_SoundSet", 1.0, 1.0);
8949 }
8950 }
8951 break;
8953 //play serious sound/flies particle
8954 if (!m_FliesEff)
8956
8958 {
8959 m_FliesEff.SetDecalOwner(this);
8961 p = m_FliesEff.GetParticle();
8962 AddChild(p, boneIdx);
8963 if (!m_SoundFliesEffect)
8964 {
8965 PlaySoundSetLoop(m_SoundFliesEffect, "Flies_SoundSet", 1.0, 1.0);
8966 }
8967 }
8968 break;
8969 //remove
8970 default:
8972 StopSoundSet(m_SoundFliesEffect);
8973 break;
8974 }
8975 }
8976
8978 {
8979 int idx = GetHiddenSelectionIndex("decay_preload");
8980 if (idx > -1)
8981 SetObjectTexture(idx, m_DecayedTexture);
8982 }
8983
8984 void SetLastMapInfo(float scale, vector pos)
8985 {
8986 m_LastMapScale = scale;
8987 m_LastMapPos = pos;
8988 }
8989
8990 bool GetLastMapInfo(out float scale, out vector pos)
8991 {
8992 scale = m_LastMapScale;
8993 pos = m_LastMapPos;
8994
8995 return m_LastMapScale != -1.0;
8996 }
8997
8998 override bool PhysicalPredictiveDropItem(EntityAI entity, bool heavy_item_only = true)
8999 {
9000 vector dir;
9001 ItemBase item = ItemBase.Cast(entity);
9002
9004 if (GetItemInHands() == item)
9005 {
9006 return PredictiveDropEntity(item);
9007 }
9008 else
9009 {
9011 if (actionManager)
9012 {
9013 ActionTarget actionTarget = new ActionTarget(null, null, -1, vector.Zero, -1);
9014 if (actionManager.GetAction(ActionDropItemSimple).Can(this, actionTarget, item))
9015 {
9016 actionManager.PerformActionStart(actionManager.GetAction(ActionDropItemSimple), actionTarget, item);
9017 return true;
9018 }
9019 }
9020 else
9021 return true;
9022 }
9023
9024 return false;
9025 }
9026
9027 override void SetProcessUIWarning(bool state)
9028 {
9029 m_ProcessUIWarning = state;
9030 }
9031
9032 void dmgDebugPrint(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
9033 {
9034 /*Print("ProjectileDebugging | Damage Health: " + damageResult.GetDamage(dmgZone,"Health") + " | Component: " + component + " | Zone: " + dmgZone + "| Timestamp: " + GetSimulationTimeStamp());
9035 Print("ProjectileDebugging | speedCoef: " + speedCoef);
9036 Print("ProjectileDebugging | GetWorldTime(): " + GetWorldTime());
9037 Print("-----------------------------------------------");*/
9038 }
9039
9040 //Use this method to process additionnal dmg to legs specifically (must use the dmg system to fire relevant events)
9041 //Legzone is a dummy to inflict damage once and NOT transfer damage to other zones. All leg zones will drop to 0 anyway
9042 void DamageAllLegs(float inputDmg)
9043 {
9044 array<string> legZones = new array<string>;
9045 legZones.Insert("LeftLeg");
9046 legZones.Insert("RightLeg");
9047 legZones.Insert("RightFoot");
9048 legZones.Insert("LeftFoot");
9049
9050 foreach (string legZone : legZones)
9051 DecreaseHealth(legZone, "", inputDmg);
9052 }
9053
9055 void TryHideItemInHands(bool hide, bool force = false)
9056 {
9057 if (!hide && ((!IsSwimming() && !IsClimbingLadder() && !IsInVehicle() && !AnimCommandCheck(HumanMoveCommandID.CommandSwim | HumanMoveCommandID.CommandLadder | HumanMoveCommandID.CommandVehicle)) || force))
9058 {
9059 GetItemAccessor().HideItemInHands(false);
9060 }
9061 else
9062 {
9063 GetItemAccessor().HideItemInHands(true);
9064 }
9065 }
9066
9069 {
9071 if (target.GetInventory().FindFreeLocationFor(item, flags, il))
9072 {
9074 }
9075 return false;
9076 }
9077
9079 {
9080 int slotID = il.GetSlot();
9081 float stackableTarget = item.GetTargetQuantityMax(slotID);
9082 if (stackableTarget > 0 && stackableTarget < item.GetQuantity())
9083 {
9084 ItemBase itemB;
9085 if (CastTo(itemB, item))
9086 {
9087 itemB.SplitIntoStackMaxToInventoryLocationClient(il);
9088 return true;
9089 }
9090 }
9091 return false;
9092 }
9093
9094 override protected bool TakeEntityToInventoryImpl(InventoryMode mode, FindInventoryLocationType flags, notnull EntityAI item)
9095 {
9096 if (CheckAndExecuteStackSplit(flags, item, this))
9097 {
9098 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2Inv(SPLIT) item=" + GetDebugName(item));
9099 return true;
9100 }
9101
9102 return super.TakeEntityToInventoryImpl(mode, flags, item);
9103 }
9104
9105 override protected bool TakeEntityToCargoImpl(InventoryMode mode, notnull EntityAI item)
9106 {
9108 {
9109 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2Cgo(SPLIT) item=" +GetDebugName(item));
9110 return true;
9111 }
9112
9113 return super.TakeEntityToCargoImpl(mode, item);
9114 }
9115
9116 override protected bool TakeEntityAsAttachmentImpl(InventoryMode mode, notnull EntityAI item)
9117 {
9118 if (CheckAndExecuteStackSplit(FindInventoryLocationType.ATTACHMENT, item, this))
9119 {
9120 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2Att(SPLIT) item=" + GetDebugName(item));
9121 return true;
9122 }
9123
9124 return super.TakeEntityAsAttachmentImpl(mode, item);
9125 }
9126
9128 {
9130 {
9131 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2Hands(SPLIT) item=" + GetDebugName(item));
9132 return;
9133 }
9134
9135 super.TakeEntityToHandsImpl(mode, item);
9136 }
9137
9138 override protected bool TakeEntityToTargetInventoryImpl(InventoryMode mode, notnull EntityAI target, FindInventoryLocationType flags, notnull EntityAI item)
9139 {
9140 if (CheckAndExecuteStackSplit(flags, item, target))
9141 {
9142 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2TargetInv(SPLIT) item=" + GetDebugName(item));
9143 return true;
9144 }
9145
9146 return super.TakeEntityToTargetInventoryImpl(mode, target, flags, item);
9147 }
9148
9149 override protected bool TakeEntityToTargetCargoImpl(InventoryMode mode, notnull EntityAI target, notnull EntityAI item)
9150 {
9152 {
9153 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2TargetCgo(SPLIT) item=" + GetDebugName(item));
9154 return true;
9155 }
9156
9157 return super.TakeEntityToTargetCargoImpl(mode, target, item);
9158 }
9159
9160 override protected bool TakeEntityToTargetAttachmentImpl(InventoryMode mode, notnull EntityAI target, notnull EntityAI item)
9161 {
9162 if (CheckAndExecuteStackSplit(FindInventoryLocationType.ATTACHMENT, item, target))
9163 {
9164 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2TargetAtt(SPLIT) item=" + GetDebugName(item));
9165 return true;
9166 }
9167
9168 return super.TakeEntityToTargetAttachmentImpl(mode, target, item);
9169 }
9170
9171 override protected bool TakeToDstImpl(InventoryMode mode, notnull InventoryLocation src, notnull InventoryLocation dst)
9172 {
9173 if (CheckAndExecuteStackSplitToInventoryLocation(dst, dst.GetItem()))
9174 {
9175 if (LogManager.IsSyncLogEnable()) syncDebugPrint("[inv] " + GetDebugName(this) + " STS=" + GetSimulationTimeStamp() + " Take2Dst(SPLIT) item=" + GetDebugName(dst.GetItem()));
9176 return true;
9177 }
9178
9179 return super.TakeToDstImpl(mode, src, dst);
9180 }
9181
9183 {
9184 return GetBonePositionWS(GetBoneIndexByName("spine3"));
9185 }
9186
9187
9188 // contaminated areas - temp stuff
9190 {
9192 {
9193 float playerSpeed = GetCommand_Move().GetCurrentMovementSpeed();
9194 //Print(playerSpeed);
9195
9196 // 1 - prone, crouch
9197 // 2 - jog
9198 // 3 - sprint
9199 float particleLifetime = 5.25;
9200 float particleSpeed = 0.25;
9201 if (playerSpeed >= 1)
9202 {
9203 particleLifetime = 3.5;
9204 particleSpeed = 3.25;
9205 }
9206 if (playerSpeed >= 2)
9207 {
9208 particleLifetime = 2.5;
9209 particleSpeed = 5.25;
9210 }
9211 if (playerSpeed >= 3)
9212 {
9213 particleLifetime = 1.5;
9214 particleSpeed = 8.25;
9215 }
9216 m_ContaminatedAroundPlayer.SetParameter(0, EmitorParam.LIFETIME, particleLifetime);
9217 m_ContaminatedAroundPlayer.SetParameter(1, EmitorParam.LIFETIME, particleLifetime);
9218 m_ContaminatedAroundPlayer.SetParameter(2, EmitorParam.LIFETIME, particleLifetime);
9219 m_ContaminatedAroundPlayer.SetParameter(3, EmitorParam.LIFETIME, particleLifetime);
9220
9221 m_ContaminatedAroundPlayerTiny.SetParameter(0, EmitorParam.VELOCITY, particleSpeed);
9222 vector transform[4];
9223 GetTransform(transform);
9224 m_ContaminatedAroundPlayer.SetTransform(transform);
9225 m_ContaminatedAroundPlayerTiny.SetTransform(transform);
9226 }
9227 }
9228
9230 {
9231 if (!IsControlledPlayer())
9232 return;
9233 int i;
9234
9236 {
9237 for (i = 0; i < m_ProcessRemoveGlassesEffects.Count(); i++)
9238 {
9239 PPERequesterBank.GetRequester(m_ProcessRemoveGlassesEffects[i]).Stop();
9240 }
9242 }
9243
9245 {
9246 for (i = 0; i < m_ProcessAddGlassesEffects.Count(); i++)
9247 {
9248 PPERequesterBank.GetRequester(m_ProcessAddGlassesEffects[i]).Start();
9249 }
9251 }
9252 }
9253
9254 override void AddArrow(Object arrow, int componentIndex, vector closeBonePosWS, vector closeBoneRotWS)
9255 {
9257 GetActionComponentNameList(componentIndex, CachedObjectsArrays.ARRAY_STRING, LOD.NAME_FIRE);
9258
9259 int pivot = componentIndex;
9260 int newPivot = -1;
9261 string compName;
9262 for (int i = 0; i < CachedObjectsArrays.ARRAY_STRING.Count() && newPivot == -1; i++)
9263 {
9264 compName = CachedObjectsArrays.ARRAY_STRING.Get(i);
9265 newPivot = GetBoneIndexByName(compName);
9266
9267 }
9268
9269 if (newPivot != -1)
9270 {
9271 pivot = newPivot;
9272
9273 }
9274
9275 vector parentTransMat[4];
9276 vector arrowTransMat[4];
9277
9278 arrow.GetTransform(arrowTransMat);
9279
9280 if (pivot == -1)
9281 {
9282 GetTransformWS(parentTransMat);
9283 }
9284 else
9285 {
9286 vector rotMatrix[3];
9287 Math3D.YawPitchRollMatrix(closeBoneRotWS * Math.RAD2DEG,rotMatrix);
9288
9289 parentTransMat[0] = rotMatrix[0];
9290 parentTransMat[1] = rotMatrix[1];
9291 parentTransMat[2] = rotMatrix[2];
9292 parentTransMat[3] = closeBonePosWS;
9293 }
9294
9295 Math3D.MatrixInvMultiply4(parentTransMat, arrowTransMat, arrowTransMat);
9296 Math3D.MatrixOrthogonalize4(arrowTransMat);
9297 arrow.SetTransform(arrowTransMat);
9298
9299 AddChild(arrow, pivot);
9300
9301 #ifdef SERVER
9302 // creating bleeding source
9303 BleedingSourcesManagerServer bleedingManager = GetBleedingManagerServer();
9304 if (bleedingManager)
9305 {
9306 if (!bleedingManager.AttemptAddBleedingSourceBySelection(compName))
9307 bleedingManager.AttemptAddBleedingSourceBySelection("Pelvis");//fallback, if we can't attach bleeding source to the fallback location because there already is another one, it's fine, we are just trying make sure there is at least one
9308 }
9309 #endif
9310 }
9311
9312 override bool IsManagingArrows()
9313 {
9314 return true;
9315 }
9316
9318 {
9319 return m_CachedPlayerName;
9320 }
9321
9323 {
9324 return m_CachedPlayerID;
9325 }
9326
9328 {
9329 super.OnFreezeStateChangeClient();
9330
9332 }
9333
9335 {
9336 return m_HasHeatBuffer;
9337 }
9338
9340 {
9341 return m_HeatBufferStage;
9342 }
9343
9347
9350
9353
9354 void SwitchItemTypeAttach(EntityAI item, string slot)
9355 {
9356 if (!GetGame().IsServer())
9357 return;
9358 }
9359
9360 void SwitchItemTypeDetach(EntityAI item, string slot);
9361 void AddToEnvironmentTemperature(float pTemperature);
9362
9364 {
9366 }
9367
9372
9373 bool Consume(ItemBase source, float amount, EConsumeType consume_type)
9374 {
9375 PlayerConsumeData consumeData = new PlayerConsumeData();
9376 consumeData.m_Type = consume_type;
9377 consumeData.m_Amount = amount;
9378 consumeData.m_Source = source;
9379 consumeData.m_Agents = 0;
9380
9381 return Consume(consumeData);
9382 }
9383
9385 {
9386 if (!GetStaminaHandler())
9387 return false;
9388
9389 return GetStaminaHandler().GetStamina() > 0;
9390 }
9391
9393 {
9394 InsertAgent(eAgents.SALMONELLA, 1);
9395 }
9396}
9397
9398
9399#ifdef DEVELOPER
9401#endif
Param4< int, int, string, int > TSelectableActionInfoWithColor
Определения EntityAI.c:97
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_INVENTORY
Определения _constants.c:9
const int INPUT_UDT_ITEM_MANIPULATION
Определения _constants.c:8
const int INPUT_UDT_RESET_ADS
Определения _constants.c:17
const int INPUT_UDT_WEAPON_LIFT_EVENT
Определения _constants.c:16
const int INPUT_UDT_USER_MUTE_XBOX
Определения _constants.c:13
const int INPUT_UDT_GESTURE
Определения _constants.c:18
const int INPUT_UDT_ADVANCED_PLACEMENT
Определения _constants.c:10
eBleedingSourceType GetType()
Определения BleedingSource.c:63
void ActionDrinkPondContinuous()
Определения ActionDrinkPondContinuous.c:14
ActionEatSnowContinuousCB ActionContinuousBaseCB ActionEatSnowContinuous()
Определения ActionEatSnowContinuous.c:11
void ActionManagerBase(PlayerBase player)
Определения ActionManagerBase.c:63
map< typename, ref array< ActionBase_Basic > > TInputActionMap
Определения ActionManagerClient.c:1
void ActionStartEngine()
DEPRECATED.
Определения ActionStartEngine.c:20
ActionStartEngineBoatCB ActionContinuousBaseCB ActionStartEngineBoat()
Определения ActionStartEngineBoat.c:11
class ActionTargets ActionTarget
ActionUncoverHeadBase ActionContinuousBase ActionUncoverHeadSelf()
Определения ActionUncoverHeadSelf.c:46
ActionWashHandsSnowCB ActionContinuousBaseCB ActionWashHandsSnow()
Определения ActionWashHandsSnow.c:11
ActionWashHandsWaterCB ActionContinuousBaseCB ActionWashHandsWater()
Определения ActionWashHandsWater.c:11
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
void RemoveAction(typename actionName)
Определения AdvancedCommunication.c:252
void SetActions()
Определения AdvancedCommunication.c:213
void InitializeActions()
Определения AdvancedCommunication.c:190
override ArrowManagerBase GetArrowManager()
Определения AnimalBase.c:49
const int BREATH_VAPOUR_LEVEL_MAX
Определения BreathVapourMdfr.c:1
void EffectRadial(Param param1, Param param2)
Определения BulletHitReaction.c:59
const int ECE_EQUIP_ATTACHMENTS
Определения CentralEconomy.c:20
const int ECE_PLACE_ON_SURFACE
Определения CentralEconomy.c:37
const int ECE_INITAI
Определения CentralEconomy.c:17
const int ECE_KEEPHEIGHT
Определения CentralEconomy.c:27
const int ECE_IN_INVENTORY
Определения CentralEconomy.c:36
const int RF_DEFAULT
Определения CentralEconomy.c:65
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
map
Определения ControlsXboxNew.c:4
void GetActionManager()
Определения CrossHairSelector.c:132
DamageType
exposed from C++ (do not change)
Определения DamageSystem.c:11
proto native int GetBoneIndexByName(string pBoneName)
returns bone index for a name (-1 if pBoneName doesn't exist)
DayZGame g_Game
Определения DayZGame.c:3868
override Widget Init()
Определения DayZGame.c:127
DayZGame GetDayZGame()
Определения DayZGame.c:3870
ref HumanMovementState m_MovementState
movement state
Определения DayZPlayerCamera3rdPerson.c:324
NVTypes
Определения DayZPlayerCamera_Base.c:55
void DayZPlayerCameraOptics(DayZPlayer pPlayer, HumanInputController pInput)
Определения DayZPlayerCameraIronsights.c:365
bool IsProcessing()
Определения DayZPlayerInventory.c:2461
void AbortWeaponEvent()
Определения DayZPlayerInventory.c:282
ref DayZPlayerImplementMeleeCombat m_MeleeCombat
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
DisplayElementBase GetElement(eDisplayElements element_id)
Определения DisplayStatus.c:95
Mission mission
Определения DisplayStatus.c:28
void VirtualHud(PlayerBase player)
Определения DisplayStatus.c:36
EActions
Определения EActions.c:2
eAgents
Определения EAgents.c:3
eBrokenLegs
Определения EBrokenLegs.c:2
EConsumeType
Определения EConsumeType.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
EMedicalDrugsType
Определения EMedicalDrugsType.c:2
eMixedSoundStates
bits
Определения EMixedSoundStates.c:3
EPlayerStates
Определения EPlayerStates.c:2
EPulseType
Определения EPulseType.c:2
ERPCs
Определения ERPCs.c:2
EStaminaConsumers
Определения EStaminaConsumers.c:2
EStaminaModifiers
Определения EStaminaModifiers.c:2
EStatLevels
Определения EStatLevels.c:2
bool Consume(float amount, PlayerBase consumer)
Определения Edible_Base.c:1202
int GetID()
Get the ID registered in SEffectManager.
Определения Effect.c:536
void EmoteManager(PlayerBase player)
Определения EmoteManager.c:151
bool IsControllsLocked()
Определения EmoteManager.c:873
bool OnInputUserDataProcess(int userDataType, ParamsReadContext ctx)
Определения EmoteManager.c:500
bool IsEmotePlaying()
Определения EmoteManager.c:1137
proto string ToString()
proto native Hive GetHive()
eInjuryHandlerLevels
Определения InjuryHandler.c:19
void InjuryAnimationHandler(PlayerBase player)
Определения InjuryHandler.c:59
FindInventoryLocationType
flags for searching locations in inventory
Определения InventoryLocation.c:17
InventoryLocationType
types of Inventory Location
Определения InventoryLocation.c:4
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
override void InsertAgent(int agent, float count=1)
Определения ItemBase.c:8653
class ItemBase extends InventoryItem SpawnItemOnLocation(string object_name, notnull InventoryLocation loc, bool full_quantity)
Определения ItemBase.c:4783
static string GetDisplayName(int liquid_type)
Определения Liquid.c:382
void MapNavigationBehaviour(PlayerBase pPlayer, EMapNavigationType pNavigationType=EMapNavigationType.BASIC)
Определения MapNavigationBehaviour.c:27
string GetDebugText()
Определения ModifierBase.c:71
PlayerBase GetPlayer()
Определения ModifierBase.c:51
eModifierSyncIDs
Определения ModifiersManager.c:3
bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения ModifiersManager.c:265
void ModifiersManager(PlayerBase player)
Определения ModifiersManager.c:80
void NotifiersManager(PlayerBase player)
Определения NotifiersManager.c:36
void OnScheduledTick()
Определения NotifiersManager.c:97
VirtualHud GetVirtualHud()
Определения NotifiersManager.c:77
string path
Определения OptionSelectorMultistate.c:142
PPERequesterCategory
Определения PPEConstants.c:29
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Определения ParticleManager.c:88
PersistentFlag
Определения PersistentFlag.c:6
void PlayerSoundEventHandler(PlayerBase player)
Определения PlayerSoundEventHandler.c:54
EPlayerSoundEventID
Определения PlayerSoundEventHandler.c:3
void PlayerSoundManagerClient(PlayerBase player)
Определения PlayerSoundManager.c:102
override float Get()
Определения PlayerStatBase.c:134
void PlayerStat(T min, T max, T init, string label, int flags)
Определения PlayerStatBase.c:43
bool LoadStats(ParamsReadContext ctx, int version)
Определения PlayerStats.c:115
void PlayerStats(Man player)
Определения PlayerStats.c:19
PlayerStatBase GetStatObject(int id)
Определения PlayerStats.c:41
EPlayerStats_current
Определения PlayerStatsPCO.c:313
void PlayerStomach(PlayerBase player)
Определения PlayerStomach.c:142
PluginConfigDebugProfile m_ConfigDebugProfile
Определения PluginItemDiagnostic.c:58
void PluginItemDiagnostic()
Определения PluginItemDiagnostic.c:74
void PluginLifespan()
Определения PluginLifespan.c:45
eBloodyHandsTypes
Определения PluginLifespan.c:9
PluginManager GetPluginManager()
Returns registred plugin by class type, better is to use global funtion GetPlugin(typename plugin_typ...
Определения PluginManager.c:274
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:316
void PluginPresenceNotifier()
Определения PluginPresenceNotifier.c:107
EPresenceNotifierNoiseEventType
Определения PluginPresenceNotifier.c:2
void QuickBarBase(PlayerBase player)
Определения QuickBarBase.c:21
PlayerBase _player
Определения QuickBarBase.c:18
void RandomGeneratorSyncManager(DayZPlayer player)
Определения RandomGeneratorSyncManager.c:18
const float DEFAULT_SPAWN_DISTANCE
Определения RecipeBase.c:3
void ReplaceSoundEventHandler(PlayerBase player)
Определения ReplaceSoundEventHandler.c:25
ESoundEventType
Определения ReplaceSoundEventHandler.c:2
StaminaHandler m_StaminaHandler
Определения StaminaSoundHandler.c:108
proto native UAInputAPI GetUApi()
void UndergroundHandlerClient(PlayerBase player)
Определения UndergroundHandlerClient.c:36
EUndergroundPresence
Определения UndergroundHandlerClient.c:2
void Debug()
Определения UniversalTemperatureSource.c:349
override bool IsIdle()
Определения WeaponStableState.c:91
GetInputType()
Определения ActionBase.c:215
ActionInput GetInput()
Определения ActionBase.c:1311
bool IsFullBody(PlayerBase player)
Определения ActionBase.c:708
Определения ActionBase.c:53
Определения ActionCPR.c:12
static string GetPulseMessage(EPulseType pulse_type, int blood_level)
Определения ActionCheckPulse.c:18
const int TARGET_IRREGULAR_PULSE_BIT
Определения ActionCheckPulse.c:4
DEPRECATED.
Определения ActionCheckPulse.c:3
Vector2 GetCameraLRAngle()
Определения ActionContinuousBase.c:173
bool IsCameraLockOnPerform()
Определения ActionContinuousBase.c:158
bool IsActive()
Определения ActionInput.c:104
bool CanPerformActionFromQuickbar(ItemBase mainItem, ItemBase targetItem)
Определения ActionManagerClient.c:910
void ClearForceTarget()
Определения ActionManagerClient.c:469
void PerformActionFromQuickbar(ItemBase mainItem, ItemBase targetItem)
Определения ActionManagerClient.c:968
override void RequestInterruptAction()
client requests action interrupt
Определения ActionManagerClient.c:1280
override void RequestEndAction()
Определения ActionManagerClient.c:266
void PerformActionStart(ActionBase action, ActionTarget target, ItemBase item, Param extra_data=NULL)
Определения ActionManagerClient.c:762
override void EndActionInput()
Определения ActionManagerClient.c:274
void ForceTarget(Object targetObject)
Определения ActionManagerClient.c:460
Определения ActionOpenDoors.c:2
Определения ActionTakeArrow.c:2
Определения ActionUngagSelf.c:2
static void PlayerDisconnected(StatsEventDisconnectedData data)
Определения ScriptAnalytics.c:160
static void PlayerMeasures(StatsEventMeasuresData data)
Определения ScriptAnalytics.c:166
Определения ScriptAnalytics.c:146
void OnItemAttachedAtPlayer(EntityAI item, string slot_name)
Определения AnalyticsManagerClient.c:77
void OnEntityHit(EntityAI source, Man target)
Определения AnalyticsManagerServer.c:25
void OnPlayerDisconnect(Man player)
Определения AnalyticsManagerServer.c:18
const string STAT_PLAYTIME
Определения AnalyticsManagerServer.c:4
void OnPlayerConnect(Man player)
Определения AnalyticsManagerServer.c:9
const string STAT_DISTANCE
Определения AnalyticsManagerServer.c:3
void ClearArrows()
Определения ArrowManagerBase.c:23
void DropFirstArrow()
Определения ArrowManagerBase.c:59
void DropAllArrows()
Определения ArrowManagerBase.c:64
bool Save(ParamsWriteContext ctx)
Определения ArrowManagerPlayer.c:33
bool Load(ParamsReadContext ctx)
Определения ArrowManagerPlayer.c:75
Определения consumables.c:2
static SoundOnVehicle SaySound(Object source, string sound_name, float distance, bool looped)
Определения BetaSound.c:3
Определения BetaSound.c:2
Определения AmmunitionPiles.c:84
Определения Bot.c:19
proto native UIManager GetUIManager()
proto native bool HasInventoryJunctureDestination(Man player, notnull InventoryLocation dst)
proto native void GetPlayers(out array< Man > players)
proto native void RPCSingleParam(Object target, int rpc_type, Param param, bool guaranteed, PlayerIdentity recipient=null)
see CGame.RPC
proto native void EnableVoN(Object player, bool enable)
Enable/disable VoN for target player.
proto native void SetVoiceEffect(Object player, int effect, bool enable)
Enable/disable VoN effect (only on server)
override ScriptCallQueue GetCallQueue(int call_category)
Определения DayZGame.c:1187
proto native void MutePlayer(string muteUID, string playerUID, bool mute)
Mutes voice of source player to target player.
bool IsKindOf(string cfg_class_name, string cfg_parent_name)
Returns is class name inherited from parent class name.
Определения Game.c:1339
proto native MenuData GetMenuData()
Return singleton of MenuData class - at main menu contains characters played with current profile.
proto native AbstractSoundScene GetSoundScene()
proto native void ChatMP(Man recipient, string text, string colorClass)
proto native int ConfigGetInt(string path)
Get int value from config on path.
proto native void Chat(string text, string colorClass)
Prints text into game chat.
proto native void RPC(Object target, int rpcType, notnull array< ref Param > params, bool guaranteed, PlayerIdentity recipient=null)
Initiate remote procedure call. When called on client, RPC is evaluated on server; When called on ser...
AnalyticsManagerServer GetAnalyticsServer()
Определения Game.c:1508
proto native vector GetCurrentCameraPosition()
proto int GetTime()
returns mission time in milliseconds
proto void SurfaceUnderObject(notnull Object object, out string type, out int liquidType)
AnalyticsManagerClient GetAnalyticsClient()
Определения Game.c:1513
proto native void RemoteObjectTreeCreate(Object obj)
RemoteObjectCreate - postponed registration of network object (and creation of remote object)....
proto native vector GetCurrentCameraDirection()
proto native bool ExecuteEnforceScript(string expression, string mainFnName)
Delevoper only: Executes Enforce Script expression, if there is an error, is printed into the script ...
proto native Mission GetMission()
proto native void ObjectDelete(Object obj)
proto void ObjectGetType(Object obj, out string type)
static ref TStringArray ARRAY_STRING
Определения UtilityClasses.c:49
static ref Param1< bool > PARAM1_BOOL
Определения UtilityClasses.c:12
static ref Param1< int > PARAM1_INT
Определения UtilityClasses.c:11
static ref Param1< string > PARAM1_STRING
Определения UtilityClasses.c:14
static ref Param2< float, float > PARAM2_FLOAT_FLOAT
Определения UtilityClasses.c:21
represents base for cargo storage for entities
Определения Cargo.c:7
static bool GetUse3DMap()
Определения CfgGameplayHandler.c:382
static int GetLightingConfig()
Определения CfgGameplayHandler.c:136
static bool GetAllowStaminaAffectInertia()
Определения CfgGameplayHandler.c:438
static bool GetHitIndicationPPEEnabled()
Определения CfgGameplayHandler.c:377
static TStringSet GetDisallowedTypesInUnderground()
Определения CfgGameplayHandler.c:337
static bool GetDisableRespawnDialog()
Определения CfgGameplayHandler.c:173
static bool IsPointInPlayerRestrictedArea(vector point, out PlayerRestrictedAreaInstance hitArea)
Super root of all classes in Enforce script.
Определения EnScript.c:11
static void RemovePlayerBase(Man player)
Определения ClientData.c:29
static void AddPlayerBase(Man player)
Определения ClientData.c:23
Определения ClientData.c:2
Определения DallasMask.c:2
Определения Armband_ColorBase.c:2
const int WHITE
Определения Colors.c:15
Определения Colors.c:4
Client only - manage set up crafting on client.
Определения CraftingManager.c:3
static proto bool RaycastRV(vector begPos, vector endPos, out vector contactPos, out vector contactDir, out int contactComponent, set< Object > results=NULL, Object with=NULL, Object ignore=NULL, bool sorted=false, bool ground_only=false, int iType=ObjIntersectView, float radius=0.0, CollisionFlags flags=CollisionFlags.NEARESTCONTACT)
Raycasts world by given parameters.
Определения DayZPhysics.c:124
this is main camera class
Определения DayZPlayerCamera1stPerson.c:5
static bool NoHeading(float pDt, SDayZPlayerHeadingModel pModel, out float pLastHeadingDiff)
Определения DayZPlayerImplementHeading.c:187
static bool RestrictHeading(float pDt, SDayZPlayerHeadingModel pModel, out float pLastHeadingDiff, HeadingRestrictData restrictData)
Определения DayZPlayerImplementHeading.c:122
static bool ClampHeading(float pDt, SDayZPlayerHeadingModel pModel, out float pLastHeadingDiff)
Определения DayZPlayerImplementHeading.c:19
static const int SJ_BROKEN_LEGS
Определения DayZPlayerSyncJunctures.c:27
static const int SJ_ACTION_INTERRUPT
Определения DayZPlayerSyncJunctures.c:8
static const int SJ_PLAYER_STATES
Определения DayZPlayerSyncJunctures.c:9
static const int SJ_ACTION_ACK_REJECT
Определения DayZPlayerSyncJunctures.c:13
static const int SJ_WEAPON_LIFT
Определения DayZPlayerSyncJunctures.c:24
static const int SJ_STAMINA
Определения DayZPlayerSyncJunctures.c:29
static const int SJ_INVENTORY_REPAIR
Определения DayZPlayerSyncJunctures.c:23
static bool ReadShockParams(ParamsReadContext pCtx, out float shockValue)
Определения DayZPlayerSyncJunctures.c:421
static const int SJ_KURU_REQUEST
Определения DayZPlayerSyncJunctures.c:21
static const int SJ_PLAYER_ADD_MODIFIER
Определения DayZPlayerSyncJunctures.c:20
static const int SJ_WEAPON_ACTION_ACK_REJECT
Определения DayZPlayerSyncJunctures.c:15
static const int SJ_SHOCK
Определения DayZPlayerSyncJunctures.c:28
static void SendDeleteItem(DayZPlayer pPlayer, EntityAI item)
Определения DayZPlayerSyncJunctures.c:356
static bool ReadKuruRequest(ParamsReadContext pCtx, out float amount)
Определения DayZPlayerSyncJunctures.c:306
static const int SJ_GESTURE_REQUEST
Определения DayZPlayerSyncJunctures.c:22
static const int SJ_QUICKBAR_SET_SHORTCUT
Определения DayZPlayerSyncJunctures.c:10
static bool ReadBrokenLegsParamsEx(ParamsReadContext pCtx, out int currentState)
Определения DayZPlayerSyncJunctures.c:400
static const int SJ_INVENTORY_FAILURE
Определения DayZPlayerSyncJunctures.c:32
static const int SJ_WEAPON_ACTION_ACK_ACCEPT
Определения DayZPlayerSyncJunctures.c:14
static const int SJ_UNCONSCIOUSNESS
Определения DayZPlayerSyncJunctures.c:17
static const int SJ_DELETE_ITEM
Определения DayZPlayerSyncJunctures.c:26
static const int SJ_ADS_RESET
Определения DayZPlayerSyncJunctures.c:31
static const int SJ_WEAPON_SET_JAMMING_CHANCE
Определения DayZPlayerSyncJunctures.c:16
static bool ReadInjuryParams(ParamsReadContext pCtx, out bool pEnable, out eInjuryHandlerLevels level)
Определения DayZPlayerSyncJunctures.c:153
static void SendPlayerUnconsciousness(DayZPlayer pPlayer, bool enable)
Определения DayZPlayerSyncJunctures.c:168
static const int SJ_ACTION_ACK_ACCEPT
Определения DayZPlayerSyncJunctures.c:12
static bool ReadPlayerUnconsciousnessParams(ParamsReadContext pCtx, out bool enable)
Определения DayZPlayerSyncJunctures.c:177
static void SendBrokenLegsEx(DayZPlayer pPlayer, int currentState)
Определения DayZPlayerSyncJunctures.c:392
static const int SJ_INJURY
Определения DayZPlayerSyncJunctures.c:7
static const int SJ_STAMINA_MISC
Определения DayZPlayerSyncJunctures.c:30
static const int SJ_INVENTORY
Определения DayZPlayerSyncJunctures.c:11
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
int FilterAgents(int agentsIn)
Filter agents from the item (override on higher implementations)
Определения Edible_Base.c:112
bool Consume(float amount, PlayerBase consumer)
Определения Edible_Base.c:95
override FoodStage GetFoodStage()
Определения Edible_Base.c:361
Определения Edible_Base.c:2
Определения SwarmingFlies.c:2
Определения VomitBlood.c:2
Определения Vomit.c:2
Particle GetParticle()
Gets the main particle which this Effect is managing.
Определения EffectParticle.c:162
void SetDecalOwner(Object o)
Определения EffectParticle.c:562
Wrapper class for managing particles through SEffectManager.
Определения EffectParticle.c:5
override void SetAutodestroy(bool auto_destroy)
Sets whether Effect automatically cleans up when it stops.
Определения EffectSound.c:603
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
int GetEffectsPriority()
Определения EffectTrigger.c:55
bool PredictiveSwapEntities(notnull EntityAI item1, notnull EntityAI item2)
Определения Man.c:501
Определения Building.c:6
static int GetEnumSize(typename e)
Return amount of values in enum.
Определения EnConvert.c:623
Определения EnConvert.c:590
Определения Environment.c:14
Определения FlashbangEffect.c:2
Определения constants.c:659
static proto native bool PrepareDropEntityPos(EntityAI owner, notnull EntityAI item, out vector mat[4], bool useValuesInMatrix=false, int conflictCheckDepth=-1)
Finds a transformation for the item to be dropped to If the initial transforation overlaps with anoth...
proto native bool EnumerateInventory(InventoryTraversalType tt, out array< EntityAI > items)
enumerate inventory using traversal type and filling items array
static bool CanSwapEntitiesEx(notnull EntityAI item1, notnull EntityAI item2)
Определения Inventory.c:628
static bool CanForceSwapEntitiesEx(notnull EntityAI item1, InventoryLocation item1_dst, notnull EntityAI item2, out InventoryLocation item2_dst)
Определения Inventory.c:664
script counterpart to engine's class Inventory
Определения Inventory.c:79
grouped gameplay effect widgets and their handling
Определения GameplayEffectWidgets.c:7
const int NUMBER_OF_STAGES
Определения HeatBuffer.c:3
Определения HeatBuffer.c:2
proto native void CharacterSave(Man player)
proto native bool CharacterIsLoginPositionChanged(Man player)
Only valid during login.
proto native void CharacterKill(Man player)
Определения Hive.c:6
Определения Hologram.c:2
static void ApplyEffects(PlayerBase player)
Определения HotSpringTrigger.c:97
static const float HEAT_DAMAGE_TICK_TIME
Определения HotSpringTrigger.c:6
Hot spring area trigger.
Определения HotSpringTrigger.c:3
void ShowHudUI(bool show)
void ShowQuickbarUI(bool show)
Определения gameplay.c:639
proto native vector GetLogoutPosition()
Определения human.c:645
proto native float GetCurrentMovementSpeed()
0,1,2..3 idle, walk, run, sprint
proto native void SetTurnSpanSprintModifier(float value)
sets the multiplier for HumanItemBehaviorCfg::m_fMoveHeadingSprintFilterSpan
proto native void ForceStance(int pStanceIdx)
proto native void SetRunSprintFilterModifier(float value)
sets the multiplier for SHumanCommandMoveSettings::m_fRunSpringTimeout
proto native void SetDirectionSprintFilterModifier(float value)
sets the multiplier for SHumanCommandMoveSettings::m_fDirFilterSprintTimeout
proto native void SetMeleeBlock(bool pBlock)
this enables/disables block
Определения human.c:434
proto native bool IsInWater()
proto native void WakeUp(int targetStance=-1)
Определения human.c:620
proto native Transport GetTransport()
proto native bool IsGettingIn()
proto native void SetVehicleType(int pVehicleType)
proto native bool IsSwitchSeat()
proto native bool IsGettingOut()
Определения human.c:690
proto native void LiftWeapon(bool pState)
command for lifting weapon near obstacled (works only when weapon is raised)
Определения human.c:994
proto native bool CameraIsFreeLook()
returns true if freelook is active
proto native void LimitsDisableSprint(bool pDisable)
this disables sprint
proto native bool IsQuickBarContinuousUseStart()
proto native void ResetADS()
resets ADS mode to default
proto native int IsQuickBarSlot()
returns 1..10 if some quickbar slot is used, 0 otherwise
proto native bool IsQuickBarSingleUse()
proto native bool IsQuickBarContinuousUseEnd()
Определения human.c:18
proto native EntityAI GetEntityInHands()
inventory for plain man/human
Определения HumanInventory.c:10
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
Определения human.c:1139
Определения EnEntity.c:165
const float LVL3
Определения InjuryHandler.c:14
Определения InjuryHandler.c:10
Client only - manage set up crafting on client.
Определения InventoryActionHandler.c:3
proto native void SetHands(notnull EntityAI parent, EntityAI e)
sets current inventory location type to Hands
static string DumpToStringNullSafe(InventoryLocation loc)
Определения InventoryLocation.c:226
proto native vector GetPos()
returns position of item in world if type is Ground
proto native int GetSlot()
returns slot id if current type is Attachment
proto native InventoryLocation CopyLocationFrom(notnull InventoryLocation rhs, bool copyFlip)
copies location to another location without m_item member
proto native void SetGround(EntityAI e, vector mat[4])
sets current inventory location type to Ground with transformation mat
proto native void SetCargoAuto(notnull CargoBase cargo, EntityAI e, int row, int col, bool flip)
based on Cargo.IsProxyCargo uses SetProxyCargo or SetCargo respectively
proto native int GetType()
returns type of InventoryLocation
bool ReadFromContext(ParamsReadContext ctx)
Определения InventoryLocation.c:296
InventoryLocation.
Определения InventoryLocation.c:29
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
provides access to slot configuration
Определения InventorySlots.c:6
Определения InventoryItem.c:731
proto native float GetCurrentStepFOV()
returns fov value at current index, or 'OpticsInfo.opticsZoomInit' config value (non-zooming optics)
Определения ItemOptics.c:2
static const string NAME_FIRE
Определения gameplay.c:208
LOD class.
Определения gameplay.c:204
static bool IsSyncLogEnable()
Определения Debug.c:678
Определения Debug.c:594
ref MapNavigationBehaviour m_MapNavigationBehaviour
Определения PlayerBase.c:244
bool AnimCommandCheck(HumanMoveCommandID mask)
Определения PlayerBase.c:5254
void UpdateLighting()
Определения PlayerBase.c:5616
bool IsTargetInActiveRefresherRange(EntityAI target)
Определения PlayerBase.c:4434
override void PredictiveTakeEntityToHands(EntityAI item)
Определения PlayerBase.c:8503
float GetSimplifiedShockNormalized()
Определения PlayerBase.c:3531
string m_UALastMessage
user actions & symptoms
Определения PlayerBase.c:261
ref PlayerSoundManagerServer m_PlayerSoundManagerServer
Определения PlayerBase.c:87
SymptomManager GetSymptomManager()
Определения PlayerBase.c:2665
void UpdateCorpseState()
Определения PlayerBase.c:5696
void UpdateHairSelectionVisibility(bool was_debug=false)
Определения PlayerBase.c:8662
PlayerStat< float > GetStatSpecialty()
Определения PlayerBase.c:7672
DayZPlayerCameraBase m_CurrentCamera
Определения PlayerBase.c:121
ref Param2< float, float > m_UAProgressParam
Определения PlayerBase.c:65
void SetNVGWorking(bool state)
Deprecated.
Определения PlayerBase.c:8762
bool GetLiquidTendencyDrain()
Определения PlayerBase.c:4862
bool IsAntibioticsActive()
Определения PlayerBase.c:587
PlayerStat< float > GetStatToxicity()
Определения PlayerBase.c:7609
bool m_CorpseProcessing
Определения PlayerBase.c:100
PlayerBase m_CheckPulseLastTarget
Определения PlayerBase.c:140
override bool IsUnconsciousStateOnly()
Определения PlayerBase.c:3541
float GetSingleAgentCountNormalized(int agent_id)
Определения PlayerBase.c:7530
override bool IsRefresherSignalingViable()
Определения PlayerBase.c:2200
ref BleedingSourcesManagerRemote m_BleedingManagerRemote
Определения PlayerBase.c:39
ref array< int > m_ProcessAddGlassesEffects
Определения PlayerBase.c:296
int m_ShockSimplified
Определения PlayerBase.c:109
override bool PredictiveTakeEntityToTargetCargoEx(notnull CargoBase cargo, notnull EntityAI item, int row, int col)
Определения PlayerBase.c:8387
void SetPlayerLoad(float load)
Определения PlayerBase.c:4901
void AddToEnvironmentTemperature(float pTemperature)
bool HasBloodyHands()
Определения PlayerBase.c:6656
override void ProcessLiftWeapon()
Определения PlayerBase.c:8149
ref CraftingManager m_CraftingManager
Определения PlayerBase.c:83
void ResetActiveNV()
Определения PlayerBase.c:8803
bool ItemToInventory
Определения PlayerBase.c:230
void FixAllInventoryItems()
Определения PlayerBase.c:5834
override bool IsLanded(int pCurrentCommandID)
Определения PlayerBase.c:3343
void ReloadWeapon(EntityAI weapon, EntityAI magazine)
Определения PlayerBase.c:4712
override void GetActions(typename action_input_type, out array< ActionBase_Basic > actions)
Определения PlayerBase.c:1598
bool IsPlacingServer()
Определения PlayerBase.c:2427
void AddPossibleCoverFaceForShave()
DEPRECATED!
Определения PlayerBase.c:1316
int m_BrokenLegState
Определения PlayerBase.c:145
void EndFighting()
Определения PlayerBase.c:5269
void RefreshHandAnimationState(int delay=0)
Определения PlayerBase.c:4467
void ImmuneSystemTick(float value, float deltaT)
Определения PlayerBase.c:7546
bool m_IsInColdArea
Определения PlayerBase.c:17
override void OnReceivedHit(ImpactEffectsData hitData)
Определения PlayerBase.c:1242
override void OnVariablesSynchronized()
Определения PlayerBase.c:5725
ref array< int > m_ProcessRemoveEffectWidgets
Определения PlayerBase.c:293
void OnUnconsciousStart()
Определения PlayerBase.c:3388
bool HasHeatBuffer()
Определения PlayerBase.c:9334
void SetCraftingRecipeID(int recipeID)
Определения PlayerBase.c:2004
PlayerSoundManagerServer GetPlayerSoundManagerServer()
Определения PlayerBase.c:1491
void UpdateQuickBarEntityVisibility(EntityAI entity)
Определения PlayerBase.c:2102
vector m_PlayerOldPos
Определения PlayerBase.c:7046
override bool CanStartConsumingStamina(EStaminaConsumers consumer)
Определения PlayerBase.c:4373
override bool NeedInventoryJunctureFromServer(notnull EntityAI item, EntityAI currParent, EntityAI newParent)
Определения PlayerBase.c:4923
ItemBase GetItemOnSlot(string slot_type)
Returns item that's on this player's attachment slot. Parameter slot_type should be a string from con...
Определения PlayerBase.c:811
override void OnThrowingModeChange(bool change_to_enabled)
Определения PlayerBase.c:4156
override bool CanSwapItemInCargo(EntityAI child_entity, EntityAI new_entity)
Определения PlayerBase.c:1966
override void OnStoreSave(ParamsWriteContext ctx)
Определения PlayerBase.c:6806
void OnConnect()
Определения PlayerBase.c:7068
bool TakeEntityToInventoryImpl(InventoryMode mode, FindInventoryLocationType flags, notnull EntityAI item)
Определения PlayerBase.c:9094
void MessageAction(string text)
Определения PlayerBase.c:6385
void ClearLastUAMessage()
Определения PlayerBase.c:7740
void OnPlayerLoaded()
Определения PlayerBase.c:2264
void OnCommandHandlerTick(float delta_time, int pCurrentCommandID)
Определения PlayerBase.c:2718
ref SymptomManager m_SymptomManager
Определения PlayerBase.c:48
void SetImmunityBoosted(bool boosted)
Определения PlayerBase.c:5160
bool CheckAndExecuteStackSplit(FindInventoryLocationType flags, notnull EntityAI item, notnull EntityAI target)
Определения PlayerBase.c:9068
override SoundOnVehicle PlaySound(string sound_name, float range, bool create_local=false)
Определения PlayerBase.c:4886
void SetActivePrimarySymptomID(SymptomIDs id)
Определения PlayerBase.c:609
override void OnCommandClimbStart()
Определения PlayerBase.c:3899
void SwitchItemTypeDetach(EntityAI item, string slot)
void RadialQuickBarCombine(int slotClicked)
Определения PlayerBase.c:4696
void SetBloodType(int blood_type)
Определения PlayerBase.c:6742
void Message(string text, string style)
Определения PlayerBase.c:6366
bool m_ActionsInitialize
Определения PlayerBase.c:79
bool IsLeaning()
Определения PlayerBase.c:5216
void RemoveCurrentEffectTrigger()
Определения PlayerBase.c:655
void MapNavigationItemInPossession(EntityAI item)
Определения PlayerBase.c:3289
void SetBloodTypeVisible(bool show)
Определения PlayerBase.c:6731
void SetMixedSoundState(eMixedSoundStates state)
Определения PlayerBase.c:881
ref map< EEffectAreaType, float > m_EffectAreaTimeToTick
Определения PlayerBase.c:171
const int SIMPLIFIED_SHOCK_CAP
Определения PlayerBase.c:3
PlayerStat< float > m_StatEnergy
Определения PlayerBase.c:280
void PlacingCancelServer()
Определения PlayerBase.c:2377
bool IsClimbing()
Определения PlayerBase.c:5226
bool m_MeleeDebug
melee stats
Определения PlayerBase.c:256
void IncreaseContaminatedAreaCount()
Определения PlayerBase.c:669
float GetImmunity()
returns player's immunity strength between 0..1
Определения PlayerBase.c:5168
bool IsInProne()
Определения PlayerBase.c:5206
override bool IsLiftWeapon()
Определения PlayerBase.c:8064
ItemBase CreateCopyOfItemInInventoryOrGroundEx(ItemBase src, bool markItemAsSplitResult=false)
Определения PlayerBase.c:6343
void SendLiftWeaponSync(bool state)
Client-side only.
Определения PlayerBase.c:8098
static ref array< string > m_BleedingSourcesLow
Определения PlayerBase.c:152
vector m_DirectionToCursor
Определения PlayerBase.c:123
void ProcessADSSyncResetRequest()
Определения PlayerBase.c:2505
bool CanEatAndDrink()
Определения PlayerBase.c:7583
void OnBleedingSourceAdded()
Определения PlayerBase.c:7282
DamageDealtEffect GetDamageDealtEffect()
Определения PlayerBase.c:986
ref TInputActionMap m_InputActionMap
Определения PlayerBase.c:76
ref PlayerStats m_PlayerStats
Определения PlayerBase.c:36
void SendSoundEventEx(EPlayerSoundEventID id, int param=0)
Определения PlayerBase.c:7216
void ResetPlayer(bool set_max)
Определения PlayerBase.c:7344
bool CanDeleteItems()
Определения PlayerBase.c:7945
override void OnCommandDeathStart()
Определения PlayerBase.c:3972
EntityAI SpawnAI(string object_name, vector pos)
Определения PlayerBase.c:6263
override void OnPlayerRecievedHit()
Определения PlayerBase.c:1256
PluginPlayerStatus m_ModulePlayerStatus
Определения PlayerBase.c:29
void EndSurrenderRequest(SurrenderData data=null)
ends surrender, originally intended for surrender->restrained transitioning
Определения PlayerBase.c:8253
ItemBase GetItemOnHead()
Returns item on player's head. For an example, a headtorch.
Определения PlayerBase.c:828
override bool CanReleaseFromHands(EntityAI handheld)
Определения PlayerBase.c:1987
bool IsRolling()
Определения PlayerBase.c:5221
vector m_LastFirePoint
Определения PlayerBase.c:226
void OnInventoryMenuClose()
bool CanSpawnBreathVaporEffect()
Определения PlayerBase.c:6537
string GetCachedName()
Определения PlayerBase.c:9317
void CloseMapEx(bool cancelled)
Определения PlayerBase.c:3192
TransferValues GetTransferValues()
Определения PlayerBase.c:2678
EPulseType m_PulseType
Определения PlayerBase.c:139
int m_SyncedModifiersPrev
Определения PlayerBase.c:271
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения PlayerBase.c:6859
ref array< int > m_Recipes
Определения PlayerBase.c:214
void UpdateBrokenLegs(int stateId)
Определения PlayerBase.c:3608
override bool IsUnconscious()
Определения PlayerBase.c:3536
override void SpawnDamageDealtEffect()
Определения PlayerBase.c:991
void OnHoldBreathStart()
Определения PlayerBase.c:2178
int m_LastShavedSeconds
Определения PlayerBase.c:6
DebugMonitorValues GetDebugMonitorValues()
Определения PlayerBase.c:2683
bool m_MapCloseRequestProcessed
Определения PlayerBase.c:240
ref EffectParticle m_FliesEff
Определения PlayerBase.c:75
void DropHeavyItem()
Определения PlayerBase.c:3788
bool IsBleeding()
Определения PlayerBase.c:897
int m_RecipeID
Определения PlayerBase.c:208
int m_QuickBarBonus
Определения PlayerBase.c:134
ref array< int > m_ProcessRemoveGlassesEffects
Определения PlayerBase.c:297
ref ArrowManagerPlayer m_ArrowManager
Определения PlayerBase.c:84
override bool IsPlayer()
Определения PlayerBase.c:892
PlayerStat< float > m_StatHeatComfort
Определения PlayerBase.c:281
ref PlayerAgentPool m_AgentPool
Определения PlayerBase.c:44
void QueueRemoveEffectWidget(array< int > effects)
Определения PlayerBase.c:971
bool m_LiquidTendencyDrain
Определения PlayerBase.c:9
EPulseType GetPulseType()
Определения PlayerBase.c:956
float m_LastTick
Определения PlayerBase.c:205
EEffectAreaType m_InEffectAreaType
Определения PlayerBase.c:169
override bool PredictiveDropEntity(notnull EntityAI item)
Определения PlayerBase.c:8404
EntityAI m_Item2
Определения PlayerBase.c:210
void SetPersistentFlag(PersistentFlag bit, bool enable)
Определения PlayerBase.c:6789
void SetStaminaState(eStaminaState state)
Определения PlayerBase.c:7440
override void OnRollFinish()
Определения PlayerBase.c:4105
void SetHeatBufferDynamicMax(float value)
Определения PlayerBase.c:7699
int GetBreathVapourLevel()
Определения PlayerBase.c:861
bool IsSwapBetweenHandsAndGroundLargeItem(notnull EntityAI item1, notnull EntityAI item2, out EntityAI item_hands, out EntityAI item_ground)
Определения PlayerBase.c:8545
ref UndergroundHandlerClient m_UndergroundHandler
Определения PlayerBase.c:34
vector GetLocalProjectionOrientation()
Определения PlayerBase.c:2590
const int ACT_STORE_SAVE_VERSION
Определения PlayerBase.c:24
void SetStamina(int value, int range)
Определения PlayerBase.c:1810
bool IsEmotePlaying()
Определения PlayerBase.c:5240
void SetActionEndInput(ActionBase action)
Определения PlayerBase.c:4672
float GetStatBordersWater()
Определения PlayerBase.c:5109
bool TakeEntityToTargetAttachmentImpl(InventoryMode mode, notnull EntityAI target, notnull EntityAI item)
Определения PlayerBase.c:9160
void dmgDebugPrint(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
Определения PlayerBase.c:9032
float GetTemporaryResistanceToAgent(int agent)
Определения PlayerBase.c:7561
override void OnLadder(float delta_time, HumanMovementState pState)
called every command handler tick when player is on ladder
Определения PlayerBase.c:1715
EntityAI m_Item1
Определения PlayerBase.c:209
override bool OnInputUserDataProcess(int userDataType, ParamsReadContext ctx)
Определения PlayerBase.c:6085
void OnPlayerReceiveFlashbangHitStart(bool visual)
Определения PlayerBase.c:1275
override array< string > GetSuitableFinisherHitComponents()
returns list of suitable finisher hit components (defined on base entity/entity type)
Определения PlayerBase.c:1304
string GetLastUAMessage()
UA Last Message.
Определения PlayerBase.c:7723
eMixedSoundStates GetMixedSoundStates()
Определения PlayerBase.c:2210
void SpawnShockEffect(float intensity_max)
Определения PlayerBase.c:1035
void MessageFriendly(string text)
Определения PlayerBase.c:6391
float m_LastShockHitTime
Определения PlayerBase.c:120
bool IsMapCallbackCancelInput()
Определения PlayerBase.c:3264
int GetCurrentRecipe()
Определения PlayerBase.c:1681
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
Определения PlayerBase.c:7759
override int GetQuickBarBonus()
Определения PlayerBase.c:833
ref Hologram m_HologramServer
Определения PlayerBase.c:199
override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
Определения PlayerBase.c:1086
BleedingSourcesManagerServer GetBleedingManagerServer()
Определения PlayerBase.c:2655
vector m_LocalProjectionOrientation
Определения PlayerBase.c:202
override bool PredictiveSwapEntities(notnull EntityAI item1, notnull EntityAI item2)
Определения PlayerBase.c:8425
bool IsInEffectArea(EEffectAreaType area)
Определения PlayerBase.c:733
void OnPlayerIsNowInsideEffectAreaEndServer()
Определения PlayerBase.c:794
void OnBleedingSourceRemovedEx(ItemBase item)
Определения PlayerBase.c:7333
bool m_LoweredNVGHeadset
Определения PlayerBase.c:267
static Particle m_ContaminatedAroundPlayerTiny
Определения PlayerBase.c:276
override void EEKilled(Object killer)
Определения PlayerBase.c:1045
void SetBloodyHands(bool show)
Определения PlayerBase.c:6661
float GetStatBordersEnergy()
Определения PlayerBase.c:5102
float m_UnconsciousTime
Определения PlayerBase.c:108
override bool CanReleaseAttachment(EntityAI attachment)
Определения PlayerBase.c:1951
void RadialQuickBarSingleUse(int slotClicked)
Определения PlayerBase.c:4690
override void EEItemOutOfHands(EntityAI item)
Определения PlayerBase.c:2847
int m_BloodType
Определения PlayerBase.c:7
float GetBordersImmunity()
Определения PlayerBase.c:5073
int m_ActivePrimarySymptomID
Определения PlayerBase.c:264
bool m_IsDrowning
Определения PlayerBase.c:232
SymptomIDs GetActivePrimarySymptomID()
Определения PlayerBase.c:615
void QuickReloadWeapon(EntityAI weapon)
Определения PlayerBase.c:4705
void PreloadDecayTexture()
Определения PlayerBase.c:8977
void DecreaseHealingsCount()
Определения PlayerBase.c:939
bool CanConsumeFood(ConsumeConditionData data=null)
Определения PlayerBase.c:7589
VirtualHud GetVirtualHud()
Определения PlayerBase.c:2669
EffectSound m_AmbientContamination
Определения PlayerBase.c:161
override void EEItemIntoHands(EntityAI item)
Определения PlayerBase.c:2812
void MapNavigationItemNotInPossession(EntityAI item)
Определения PlayerBase.c:3297
void UpdateShoulderProxyVisibility(EntityAI item, string slot_name)
Определения PlayerBase.c:1416
int GetCraftingRecipeID()
Определения PlayerBase.c:1992
override bool IsRestrained()
Определения PlayerBase.c:1910
void OnSpawnedFromConsole()
Определения PlayerBase.c:4843
ref Param2< int, int > m_UAParam
Определения PlayerBase.c:66
void ShowUnconsciousScreen(bool show)
Определения PlayerBase.c:7180
override bool PredictiveTakeEntityToTargetAttachment(notnull EntityAI target, notnull EntityAI item)
Определения PlayerBase.c:8344
ref array< int > m_ProcessAddEffectWidgets
Определения PlayerBase.c:292
override void SwitchItemSelectionTexture(EntityAI item, string slot_name)
Определения PlayerBase.c:1434
bool m_InsideEffectAreaPrev
Определения PlayerBase.c:165
bool ReadLiftWeaponRequest(int userDataType, ParamsReadContext ctx)
Определения PlayerBase.c:8070
EStatLevels GetStatLevelEnergy()
Определения PlayerBase.c:5052
int GetHeatBufferStage()
Определения PlayerBase.c:9339
bool CanBeRestrained()
Определения PlayerBase.c:1869
bool m_AreHandsLocked
Определения PlayerBase.c:117
float m_DbgSliderValue
Определения PlayerBase.c:2791
bool m_AllowQuickRestrain
Определения PlayerBase.c:127
override bool IsFighting()
Определения PlayerBase.c:5235
ref EffectRadial m_EffectRadial
Определения PlayerBase.c:72
bool m_ShowDbgUI
Определения PlayerBase.c:2789
void SpreadAgents()
Определения PlayerBase.c:7493
void OnHoldBreathEnd()
Определения PlayerBase.c:2189
ref Environment m_Environment
Определения PlayerBase.c:46
void SetNVGLowered(bool state)
Определения PlayerBase.c:8768
void SetLocalProjectionOrientation(vector local_orientation)
Определения PlayerBase.c:2580
bool IsPersistentFlag(PersistentFlag bit)
Определения PlayerBase.c:6784
override void EOnFrame(IEntity other, float timeSlice)
Определения PlayerBase.c:4165
int m_ContaminatedAreaCount
Определения PlayerBase.c:162
int m_HealingsCount
Определения PlayerBase.c:126
PlayerStat< float > GetStatEnergy()
Определения PlayerBase.c:7618
void OnUnconsciousUpdate(float pDt, int last_command)
Определения PlayerBase.c:3483
bool IsQBControl()
Определения PlayerBase.c:4677
override void OnCommandLadderStart()
Определения PlayerBase.c:3854
int m_PerformedAnimActionID
Определения PlayerBase.c:263
GameplayEffectWidgets_base m_EffectWidgets
effect widgets
Определения PlayerBase.c:291
void DecreaseEffectAreaCount()
Определения PlayerBase.c:696
override void RemoveAgent(int agent_id)
Определения PlayerBase.c:7505
override vector GetDefaultHitPosition()
Определения PlayerBase.c:1298
float m_OriginalSlidePoseAngle
Определения PlayerBase.c:60
float m_UnconsciousEndTime
Определения PlayerBase.c:136
override EntityAI SpawnEntityOnGroundPos(string object_name, vector pos)
Определения PlayerBase.c:6222
PlayerStomach GetStomach()
Определения PlayerBase.c:2859
ref PlayerStomach m_PlayerStomach
Определения PlayerBase.c:273
int GetNVType()
Определения PlayerBase.c:8744
void OnQuickbarSetEntityRequest(ParamsReadContext ctx)
Определения PlayerBase.c:2114
int m_RecipePick
Определения PlayerBase.c:94
void IncreaseDiseaseCount()
Определения PlayerBase.c:924
void SetMapOpen(bool state)
Определения PlayerBase.c:3244
bool m_SoundEventSent
Определения PlayerBase.c:64
bool m_IsRestrained
Определения PlayerBase.c:111
const int OVERLOAD_LIMIT
Определения PlayerBase.c:57
CraftingManager GetCraftingManager()
Определения PlayerBase.c:1849
void AdjustBandana(EntityAI item, string slot_name)
Определения PlayerBase.c:8848
void SetLastMapInfo(float scale, vector pos)
Определения PlayerBase.c:8984
override string GetDefaultHitComponent()
returns default hit component (fallback)
Определения PlayerBase.c:1293
bool m_IsRestrainStarted
Определения PlayerBase.c:113
int m_SoundEvent
Определения PlayerBase.c:61
void SwitchItemTypeAttach(EntityAI item, string slot)
Определения PlayerBase.c:9354
bool m_BrokenLegsJunctureReceived
Определения PlayerBase.c:147
override void CommandHandler(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения PlayerBase.c:2864
void CheckForGag()
Определения PlayerBase.c:6017
override WeaponManager GetWeaponManager()
Определения PlayerBase.c:1859
bool IsInWater()
Определения PlayerBase.c:2618
ModifiersManager GetModifiersManager()
Определения PlayerBase.c:7595
void IncreaseAntibioticsCount()
Определения PlayerBase.c:9363
float GetStatLevelBorders(float stat_value, float critical, float low, float normal, float high, float max)
Определения PlayerBase.c:5118
void RequestUnconsciousness(bool enable)
Определения PlayerBase.c:8200
UndergroundHandlerClient GetUndergroundHandler()
Определения PlayerBase.c:1497
string m_CachedPlayerName
Определения PlayerBase.c:175
override void EEItemDetached(EntityAI item, string slot_name)
Определения PlayerBase.c:1374
void RemoveAction(typename actionName, out TInputActionMap InputActionMap)
Определения PlayerBase.c:1655
bool ResetADSPlayerSync(int userDataType, ParamsReadContext ctx)
server only
Определения PlayerBase.c:2518
void CheckForBurlap()
Определения PlayerBase.c:5995
void SetHairLevelToHide(int level, bool state, bool was_debug=false)
Dynamic hair hiding.
Определения PlayerBase.c:8561
void SpawnDrowningBubbles()
Определения PlayerBase.c:2145
void IncreaseHealingsCount()
Определения PlayerBase.c:934
void SetActionsRemoteTarget(out TInputActionMap InputActionMap)
Определения PlayerBase.c:1563
override bool CanChangeStance(int previousStance, int newStance)
Определения PlayerBase.c:4036
void SetSoundCategoryHash(int hash)
Определения PlayerBase.c:592
override bool CanDropEntity(notnull EntityAI item)
Определения PlayerBase.c:841
ref SoundObject m_SaySoundObject
Определения PlayerBase.c:218
EffectTrigger m_CurrentEffectTrigger
Определения PlayerBase.c:166
ItemBase m_CheckMeleeItem
Определения PlayerBase.c:258
void HandleBrokenLegsSync()
Определения PlayerBase.c:5821
void OnVoiceEventPlayback(PlayerSoundEventBase voice_event, AbstractWave callback, float playback_time)
called every cmd handler tick during a playback of PlayerSoundEvent, m_ProcessPlaybackEvent needs to ...
Определения PlayerBase.c:6070
void TogglePlacingLocal(ItemBase item=null)
Определения PlayerBase.c:2549
ref ShockDealtEffect m_ShockDealtEffect
Определения PlayerBase.c:74
void OnJumpOutVehicleFinish(float carSpeed)
Определения PlayerBase.c:4109
float GetHeatBufferDynamicMax()
Определения PlayerBase.c:7705
void SetUnderground(EUndergroundPresence presence)
Определения PlayerBase.c:2544
int GetQuickBarSize()
Определения PlayerBase.c:2092
bool m_IsHoldingBreath
Определения PlayerBase.c:95
void QueueRemoveGlassesEffect(int id)
Определения PlayerBase.c:981
void RequestTriggerEffect(EffectTrigger trigger, int ppeIdx=-1, int aroundId=ParticleList.CONTAMINATED_AREA_GAS_AROUND, int tinyId=ParticleList.CONTAMINATED_AREA_GAS_TINY, string soundset="", bool partDynaUpdate=false, int newBirthRate=0, bool forceUpdate=false)
Определения PlayerBase.c:620
bool m_ProcessUIWarning
Определения PlayerBase.c:20
bool m_IsRestrainStartedLocal
Определения PlayerBase.c:114
bool m_MapClosingSyncSent
Определения PlayerBase.c:241
bool m_CanPlayBrokenLegSound
Определения PlayerBase.c:150
override void OnStanceChange(int previousStance, int newStance)
Определения PlayerBase.c:4018
void PlacingCancelLocal()
Определения PlayerBase.c:2403
static ref array< CargoBase > SPREAD_AGENTS_PROXY_CARGOS
Определения PlayerBase.c:9349
string m_DatabaseID
Определения PlayerBase.c:252
void SetInWater(bool pState)
water contact (driven by Environment)
Определения PlayerBase.c:2612
void SetLastFirePointRot(float last_fire_point_rot)
Определения PlayerBase.c:2052
void OnVoiceEvent(PlayerSoundEventBase voice_event)
Определения PlayerBase.c:6055
void SetFirstRecipe()
Определения PlayerBase.c:1691
void SetEnableQuickBarEntityShortcut(EntityAI entity, bool value)
Определения PlayerBase.c:2072
EntityAI CreateInInventory(string item_name, string cargo_type="", bool full_quantity=false)
Определения PlayerBase.c:6302
void AntibioticsAttack(float value)
Определения PlayerBase.c:7551
ActionManagerBase GetActionManager()
Определения PlayerBase.c:1699
bool IsItemInInventory(EntityAI entity)
Определения PlayerBase.c:4918
int m_StaminaState
Определения PlayerBase.c:107
void AddActiveNV(int type)
Определения PlayerBase.c:8773
int m_RefreshAnimStateIdx
Определения PlayerBase.c:22
void SetLoadedQuickBarItemBind(EntityAI entity, int index)
Определения PlayerBase.c:8058
void CheckSendSoundEvent()
Определения PlayerBase.c:7245
int m_BleedingBits
Определения PlayerBase.c:122
int m_InventorySoftLockCount
Определения PlayerBase.c:248
void SetLifeSpanStateVisible(int show_state)
Определения PlayerBase.c:6604
override void OnJumpStart()
Определения PlayerBase.c:3983
void RemoveQuickBarEntityShortcut(EntityAI entity)
Определения PlayerBase.c:2065
vector SetDefaultHitPosition(string pSelection)
Определения PlayerBase.c:1309
override bool IsHoldingBreath()
Определения PlayerBase.c:2195
void UpdateTranslatedSelections(SelectionTranslation stt)
Определения PlayerBase.c:8712
ref DebugMonitorValues m_DebugMonitorValues
Определения PlayerBase.c:56
bool m_InventorySoftLocked
Определения PlayerBase.c:247
void MessageImportant(string text)
Определения PlayerBase.c:6397
void SetHitPPEEnabled(bool enabled)
Определения PlayerBase.c:1465
bool m_CanDisplayHitEffectPPE
Определения PlayerBase.c:173
vector m_LastMapPos
Определения PlayerBase.c:243
int GetStoreLoadVersion()
Определения PlayerBase.c:6801
SoftSkillsManager GetSoftSkillsManager()
Определения PlayerBase.c:6752
void ShavePlayer()
Определения PlayerBase.c:6482
ref Param3< float, float, bool > m_StaminaParam
Определения PlayerBase.c:67
bool Consume(ItemBase source, float amount, EConsumeType consume_type)
Определения PlayerBase.c:9373
bool CanSprint()
Определения PlayerBase.c:5191
Hologram GetHologramLocal()
Определения PlayerBase.c:2347
int m_FliesIndex
Определения PlayerBase.c:63
override void OnGameplayDataHandlerSync()
Определения PlayerBase.c:5607
void OnQuickBarContinuousUseStart(int slotClicked)
Определения PlayerBase.c:4607
float GetHealthRegenSpeed()
Определения PlayerBase.c:6131
void SaveAreaPersistenceFlag(ParamsWriteContext ctx)
Определения PlayerBase.c:6851
override bool PredictiveTakeEntityToTargetInventory(notnull EntityAI target, FindInventoryLocationType flags, notnull EntityAI item)
Определения PlayerBase.c:8314
float m_LastFirePointRot
Определения PlayerBase.c:227
void RemovePossibleCoverFaceForShave()
DEPRECATED!
Определения PlayerBase.c:1321
void SetBloodyHandsEx(eBloodyHandsTypes type)
Определения PlayerBase.c:6666
void UnsetMixedSoundState(eMixedSoundStates state)
Определения PlayerBase.c:867
void IncreaseEffectAreaCount()
Определения PlayerBase.c:685
void UpdateMaskBreathWidget(notnull MaskBase mask, bool is_start=false)
Определения PlayerBase.c:6039
bool IsNVGWorking()
Определения PlayerBase.c:8734
int m_LocalBrokenState
Определения PlayerBase.c:146
override void OnCommandMoveStart()
Определения PlayerBase.c:4070
override void RequestSoundEvent(EPlayerSoundEventID id, bool from_server_and_client=false)
Определения PlayerBase.c:7206
ref Hologram m_HologramLocal
Определения PlayerBase.c:200
int GetSingleAgentCount(int agent_id)
Определения PlayerBase.c:7524
override bool PredictiveTakeEntityToInventory(FindInventoryLocationType flags, notnull EntityAI item)
Определения PlayerBase.c:8329
ref array< string > m_DbgOptions
Определения PlayerBase.c:2792
void QueueAddEffectWidget(array< int > effects)
Определения PlayerBase.c:966
void SetQuickFishing(bool enable)
Определения PlayerBase.c:1829
override bool CanPickupHeavyItem(notnull EntityAI item)
Определения PlayerBase.c:3771
PluginPresenceNotifier m_PresenceNotifier
Определения PlayerBase.c:32
void SetInColdArea(bool state)
Определения PlayerBase.c:2595
void DecreaseContaminatedAreaCount()
Определения PlayerBase.c:676
bool IsQuickRestrain()
Определения PlayerBase.c:1834
bool IsFalling()
Определения PlayerBase.c:5231
void OnPlayerReceiveFlashbangHitEnd()
Определения PlayerBase.c:1280
EmoteManager GetEmoteManager()
Определения PlayerBase.c:1704
void RunFightBlendTimer()
Определения PlayerBase.c:5259
void SetFlagTendencyRaise(bool state)
DEPRECATED.
Определения PlayerBase.c:4881
void AddMedicalDrugsInUse(EMedicalDrugsType drugType)
Определения PlayerBase.c:570
float m_UnconsciousVignetteTarget
Определения PlayerBase.c:118
void CheckZeroSoundEvent()
Определения PlayerBase.c:7234
ref EffectSound m_SoundFliesEffect
Определения PlayerBase.c:90
void HandleGlassesEffect()
Определения PlayerBase.c:9229
int SimplifyShock()
Определения PlayerBase.c:3524
int GetShakeLevel()
Определения PlayerBase.c:5028
int m_Shakes
Определения PlayerBase.c:129
void SendSoundEvent(EPlayerSoundEventID id)
Определения PlayerBase.c:7211
float GetVisibilityCoef()
Определения PlayerBase.c:5022
DayZPlayerCamera GetCurrentPlayerCamera()
Определения PlayerBase.c:2642
EStatLevels GetStatLevelBlood()
Определения PlayerBase.c:5046
override bool IsManagingArrows()
Определения PlayerBase.c:9312
void OnPlayerIsNowInsideEffectAreaEndClient()
Определения PlayerBase.c:804
PlayerStat< float > m_StatTremor
Определения PlayerBase.c:282
EntityAI FindCargoByBaseType(string searched_item)
Определения PlayerBase.c:2230
void UpdateDelete()
Определения PlayerBase.c:7955
int m_FaceCoveredForShaveLayers
Определения PlayerBase.c:9351
static set< int > GetFaceCoverageShaveValues()
returns a set of face covering values
Определения PlayerBase.c:6641
bool IsPlayerLoaded()
Определения PlayerBase.c:8267
vector m_DefaultHitPosition
Определения PlayerBase.c:124
void OnBleedingBegin()
override void OnCommandLadderFinish()
Определения PlayerBase.c:3867
ref BleedingSourcesManagerServer m_BleedingManagerServer
Определения PlayerBase.c:38
override void JunctureDeleteItem(EntityAI item)
Определения PlayerBase.c:7950
bool IsMale()
Определения PlayerBase.c:1470
ScriptInvoker GetOnUnconsciousStart()
Определения PlayerBase.c:554
int GetBleedingSourceCount()
Определения PlayerBase.c:7338
override void OnCommandMelee2Finish()
Определения PlayerBase.c:3964
override void OnCommandSwimStart()
Определения PlayerBase.c:3809
bool IsSurrendered()
Определения PlayerBase.c:8259
bool m_IsVehicleSeatDriver
Определения PlayerBase.c:135
void TestSend()
Определения PlayerBase.c:7433
void CloseInventoryMenu()
Определения PlayerBase.c:6402
void ClearBloodyHandsPenaltyChancePerAgent(eAgents type)
Определения PlayerBase.c:6721
int m_BleedingSourceCount
Определения PlayerBase.c:137
override void OnVehicleSeatDriverEnter()
Определения PlayerBase.c:4120
bool CheckMeleeItemDamage(ItemBase item)
Определения PlayerBase.c:5274
int FindQuickBarEntityIndex(EntityAI entity)
Определения PlayerBase.c:2080
void SetToDelete(ParamsReadContext pCtx)
Определения PlayerBase.c:7929
void OnUpdateEffectAreaServer(float timeSlice)
Определения PlayerBase.c:742
EMedicalDrugsType m_MedicalDrugsActive
Определения PlayerBase.c:299
override bool PredictiveTakeEntityToTargetAttachmentEx(notnull EntityAI target, notnull EntityAI item, int slot)
Определения PlayerBase.c:8358
bool m_FlagRaisingTendency
Определения PlayerBase.c:10
int GetBleedingBits()
Определения PlayerBase.c:919
override bool CanRoll()
Определения PlayerBase.c:4084
float GetBloodyHandsPenaltyChancePerAgent(eAgents type)
Определения PlayerBase.c:6704
void SetActions()
Определения PlayerBase.c:1559
int m_MixedSoundStates
Определения PlayerBase.c:133
bool IsStance(int stance, int stanceMask)
Определения PlayerBase.c:4013
void SetModifiers(bool enable)
Определения PlayerBase.c:7113
bool IsCurrentCameraAimedAtGround()
Определения PlayerBase.c:2647
ref Timer m_UALastMessageTimer
Определения PlayerBase.c:262
void OnSelectPlayer()
Определения PlayerBase.c:5851
override bool PredictiveTakeEntityToTargetCargo(notnull EntityAI target, notnull EntityAI item)
Определения PlayerBase.c:8372
void OnVehicleSwitchSeat(int seatIndex)
Определения PlayerBase.c:4116
ref InventoryActionHandler m_InventoryActionHandler
Определения PlayerBase.c:85
int m_BreathVapour
Определения PlayerBase.c:131
EStatLevels GetImmunityLevel()
Определения PlayerBase.c:5064
int m_PersistentFlags
Определения PlayerBase.c:106
bool m_WorkingNVGHeadset
Определения PlayerBase.c:266
ref TransferValues m_TrasferValues
Определения PlayerBase.c:55
EStatLevels GetStatLevelToxicity()
Определения PlayerBase.c:5040
bool IsJumpInProgress()
Определения PlayerBase.c:4429
void ProcessHoldBreath(float dT)
Определения PlayerBase.c:2161
void KillUndergroundHandler()
Определения PlayerBase.c:1517
void UnsetInEffectAreaTypeFlag(EEffectAreaType flag)
Определения PlayerBase.c:720
PlayerStat< float > GetStatTremor()
Определения PlayerBase.c:7636
bool m_HasBloodTypeVisible
Определения PlayerBase.c:8
bool IsInRasedProne()
Определения PlayerBase.c:5211
bool Consume(PlayerConsumeData data)
Определения PlayerBase.c:7118
void AddAction(typename actionName)
Определения PlayerBase.c:1650
Hud m_Hud
Определения PlayerBase.c:93
void SpawnBreathVaporEffect()
Определения PlayerBase.c:6559
bool IsMapOpen()
Определения PlayerBase.c:3249
void BreakLegSound()
Определения PlayerBase.c:3648
void ApplySplint()
Определения PlayerBase.c:2121
ref Param1< float > m_DeathDarkeningParam
Определения PlayerBase.c:70
void SetMapClosingSyncSet(bool state)
Определения PlayerBase.c:3254
void OnPlayerIsNowInsideEffectAreaBeginClient()
Определения PlayerBase.c:799
bool TogglePlacingServer(int userDataType, ParamsReadContext ctx)
Определения PlayerBase.c:2481
override bool PredictiveTakeToDst(notnull InventoryLocation src, notnull InventoryLocation dst)
Определения PlayerBase.c:8525
ref VirtualHud m_VirtualHud
Определения PlayerBase.c:49
const int SHAKE_LEVEL_MAX
Определения PlayerBase.c:4
ref Timer m_AnalyticsTimer
Определения PlayerBase.c:253
void UpdateCorpseStateVisual()
Определения PlayerBase.c:8883
bool IsRestrainPrelocked()
Определения PlayerBase.c:1899
void AdjustShemag(EntityAI item, string slot_name)
Определения PlayerBase.c:8865
override bool IsAlreadyInFallingCommand(int pCurrentCommandID)
Определения PlayerBase.c:3376
ref TInputActionMap m_InputActionMapControled
Определения PlayerBase.c:77
override void OnCommandClimbFinish()
Определения PlayerBase.c:3913
ref HiddenSelectionsData m_EmptyGloves
Определения PlayerBase.c:81
NotifiersManager GetNotifiersManager()
Определения PlayerBase.c:2794
bool HasStaminaRemaining()
Определения PlayerBase.c:9384
bool IsQuickFishing()
Определения PlayerBase.c:1839
void SetLastFirePoint(vector last_fire_point)
Определения PlayerBase.c:2048
eBloodyHandsTypes HasBloodyHandsEx()
Определения PlayerBase.c:6651
float m_LastPostFrameTickTime
Определения PlayerBase.c:97
string m_CachedPlayerID
Определения PlayerBase.c:176
float GetStatBordersToxicity()
Определения PlayerBase.c:5088
void DecreaseDiseaseCount()
Определения PlayerBase.c:929
void SetActions(out TInputActionMap InputActionMap)
Определения PlayerBase.c:1525
float m_HeatBufferDynamicMax
Определения PlayerBase.c:15
void SetActionsRemoteTarget()
Определения PlayerBase.c:1572
bool GetLastMapInfo(out float scale, out vector pos)
Определения PlayerBase.c:8990
int GetStaminaState()
Определения PlayerBase.c:7450
void ProcessADDModifier()
Определения PlayerBase.c:6547
void FreezeCheck()
Определения PlayerBase.c:3315
override int GetAgents()
Определения PlayerBase.c:7499
void SetRestrained(bool is_restrained)
Определения PlayerBase.c:1904
int GetLifeSpanState()
Определения PlayerBase.c:6620
void SetLocalProjectionPosition(vector local_position)
Определения PlayerBase.c:2575
ref ScriptInvoker m_OnUnconsciousStop
Определения PlayerBase.c:303
int GetVoiceType()
Определения PlayerBase.c:1479
void InitEditor()
Определения PlayerBase.c:2251
void OnRestrainStart()
Определения PlayerBase.c:3564
int m_HealthLevel
Определения PlayerBase.c:132
void OnDrowningEnd()
Определения PlayerBase.c:2469
ref SoftSkillsManager m_SoftSkillsManager
Определения PlayerBase.c:53
bool m_IsFighting
Определения PlayerBase.c:231
override string GetHitComponentForAI()
Melee helpers.
Определения PlayerBase.c:1287
override vector GetCenter()
Определения PlayerBase.c:9182
float GetWeightSpecialized(bool forceRecalc=false)
Определения PlayerBase.c:4964
override void EEItemAttached(EntityAI item, string slot_name)
Определения PlayerBase.c:1326
bool CheckAndExecuteStackSplitToInventoryLocation(InventoryLocation il, notnull EntityAI item)
Определения PlayerBase.c:9078
BleedingSourcesManagerRemote GetBleedingManagerRemote()
Определения PlayerBase.c:2660
PlayerStat< float > GetStatHeatComfort()
Определения PlayerBase.c:7627
ref ScriptInvoker m_OnUnconsciousStart
invokers
Определения PlayerBase.c:302
bool TakeEntityToTargetInventoryImpl(InventoryMode mode, notnull EntityAI target, FindInventoryLocationType flags, notnull EntityAI item)
Определения PlayerBase.c:9138
override void OnCommandSwimFinish()
Определения PlayerBase.c:3840
bool Save()
Определения PlayerBase.c:7460
override void OnCommandVehicleStart()
Определения PlayerBase.c:3921
bool IsSyncedModifierActive(eModifierSyncIDs modifier)
Checks whether modifier (which has syncing enabled) is currently active, works on both Client and Ser...
Определения PlayerBase.c:5816
FlashbangEffect GetFlashbangEffect()
Определения PlayerBase.c:1014
override bool PhysicalPredictiveDropItem(EntityAI entity, bool heavy_item_only=true)
Определения PlayerBase.c:8998
float m_UnconRefillModifier
Определения PlayerBase.c:154
ref ModifiersManager m_ModifiersManager
Определения PlayerBase.c:41
void PrintAgents()
Определения PlayerBase.c:7541
string GetPlayerClass()
Определения PlayerBase.c:6471
string m_DecayedTexture
Определения PlayerBase.c:143
ref map< EEffectAreaType, int > m_EffectAreaOverlap
Определения PlayerBase.c:170
int m_LastFirePointIndex
Определения PlayerBase.c:228
void CloseMap()
DEPRECATED; terminates map animation callback and re-enables controls.
Определения PlayerBase.c:3187
void OnDrowningStart()
Определения PlayerBase.c:2456
ShockDealtEffect GetShockEffect()
Определения PlayerBase.c:1030
void PlacingStartServer(ItemBase item)
Определения PlayerBase.c:2352
ref array< EntityAI > m_ItemsToDelete
Определения PlayerBase.c:144
override void DepleteStamina(EStaminaModifiers modifier, float dT=-1)
Определения PlayerBase.c:4354
override void ProcessFeetDamageServer(int pUserInt)
Определения PlayerBase.c:1757
override void InsertAgent(int agent, float count=1)
Определения PlayerBase.c:7518
void OnReconnect()
Определения PlayerBase.c:7083
void SetQuickBarEntityShortcut(EntityAI entity, int index, bool force=false)
Определения PlayerBase.c:2109
PlayerStat< float > m_StatToxicity
Определения PlayerBase.c:279
bool m_ActionQBControl
Определения PlayerBase.c:221
override void OnFreezeStateChangeClient()
Определения PlayerBase.c:9327
bool m_PlayerDisconnectProcessed
Определения PlayerBase.c:19
bool GetDrowningWaterLevelCheck()
Определения PlayerBase.c:6587
int m_AnimCommandStarting
Определения PlayerBase.c:26
bool m_IsRestrainPrelocked
Определения PlayerBase.c:115
int m_ForceInjuryAnimMask
Определения PlayerBase.c:141
ref EffectSound m_BrokenLegSound
Определения PlayerBase.c:148
void SetPlayerDisconnected(bool state)
Определения PlayerBase.c:2327
PlayerStat< float > GetStatWater()
Определения PlayerBase.c:7600
override void OnCommandVehicleFinish()
Определения PlayerBase.c:3944
override bool PlaySoundEventType(ESoundEventType soundType, int soundEventID, int param=0)
Определения PlayerBase.c:7253
int m_DbgListSelection
Определения PlayerBase.c:2790
PlayerStat< int > GetStatBloodType()
Определения PlayerBase.c:7681
void SetLastUAMessage(string pMsg)
Определения PlayerBase.c:7728
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
Определения PlayerBase.c:7773
override void OnVehicleSeatDriverLeft()
Определения PlayerBase.c:4138
void SetShakesForced(int value)
Определения PlayerBase.c:3310
bool CanManipulateInventory()
Определения PlayerBase.c:1942
float GetLastFirePointRot()
Определения PlayerBase.c:2039
void SpawnDamageDealtEffect2(Param param1=null, Param param2=null)
Определения PlayerBase.c:1004
int m_DebugMonitorEnabled
Определения PlayerBase.c:235
EntityAI GetQuickBarEntity(int index)
Определения PlayerBase.c:2097
StaminaHandler GetStaminaHandler()
Определения PlayerBase.c:1854
override bool CanReceiveItemIntoCargo(EntityAI item)
Определения PlayerBase.c:1961
ref SoundObjectBuilder m_SaySoundBuilder
Определения PlayerBase.c:217
int m_LifeSpanState
Определения PlayerBase.c:5
static ref array< Man > m_ServerPlayers
Определения PlayerBase.c:172
ref NotifiersManager m_NotifiersManager
Определения PlayerBase.c:42
override bool PlaySoundEvent(EPlayerSoundEventID id, bool from_anim_system=false, bool is_from_server=false)
Определения PlayerBase.c:7261
override void EOnPostFrame(IEntity other, int extra)
Определения PlayerBase.c:4189
ref StanceIndicator m_StanceIndicator
Определения PlayerBase.c:54
float ConvertNonlethalDamage(float damage, DamageType damageType)
Определения PlayerBase.c:1231
ItemBase GetItemInHands()
Определения PlayerBase.c:6210
void OnUnconsciousStop(int pCurrentCommandID)
Определения PlayerBase.c:3439
EntityAI SpawnEntityOnGroundRaycastDispersed(string object_name, float raycastDistance=DEFAULT_SPAWN_DISTANCE, float radius=UAItemsSpreadRadius.DEFAULT)
Определения PlayerBase.c:6251
float GetPlayerLoad()
Определения PlayerBase.c:4891
int GetLastFirePointIndex()
Определения PlayerBase.c:2043
void SetCheckMeleeItem(ItemBase item=null)
Определения PlayerBase.c:3305
static bool DEBUG_INVENTORY_ACCESS
Определения PlayerBase.c:151
void OnStoreSaveLifespan(ParamsWriteContext ctx)
Определения PlayerBase.c:6996
int m_HeatBufferStage
Определения PlayerBase.c:14
void SetDecayEffects(int effect=-1)
Определения PlayerBase.c:8928
bool GetHitPPEEnabled()
Определения PlayerBase.c:1460
PluginAdminLog m_AdminLog
Определения PlayerBase.c:272
bool CanRedirectToWeaponManager(notnull EntityAI item, out bool isActionPossible)
Определения PlayerBase.c:8292
bool HasCoveredFaceForShave()
Определения PlayerBase.c:6635
bool m_PlayerLoaded
Определения PlayerBase.c:18
ref array< ref Param2< EntityAI, int > > m_aQuickBarLoad
Определения PlayerBase.c:196
void DealShock(float dmg)
Определения PlayerBase.c:3763
void SetPulseType(EPulseType pulse_type)
Определения PlayerBase.c:961
void SetDrowning(bool enable)
Определения PlayerBase.c:2443
void SetRestrainPrelocked(bool restrain_prelock)
Определения PlayerBase.c:1893
ActionUnfoldMapCB m_hac
Определения PlayerBase.c:238
PlayerStats GetPlayerStats()
Определения PlayerBase.c:1844
int m_LifespanLevelLocal
Определения PlayerBase.c:25
void OnCameraChanged(DayZPlayerCameraBase new_camera)
Определения PlayerBase.c:2636
override void OnCommandFallStart()
Определения PlayerBase.c:3877
ref SoundParams m_SaySoundParams
Определения PlayerBase.c:216
bool m_MapOpen
Определения PlayerBase.c:239
PlayerSoundEventHandler GetPlayerSoundEventHandler()
Определения PlayerBase.c:7274
EntityAI GetMagazineToReload(EntityAI weapon)
Определения PlayerBase.c:4754
void QueueAddGlassesEffect(int id)
Определения PlayerBase.c:976
void OnDisconnect()
Определения PlayerBase.c:7092
bool m_HideHairAnimated
Определения PlayerBase.c:142
override bool IsInventoryVisible()
Определения PlayerBase.c:1937
void CalculateVisibilityForAI()
Определения PlayerBase.c:4984
bool IsSprinting()
Определения PlayerBase.c:5186
void SetBloodyHandsPenalty()
Определения PlayerBase.c:9392
float m_CurrentShock
Определения PlayerBase.c:110
RandomGeneratorSyncManager GetRandomGeneratorSyncManager()
Определения PlayerBase.c:1709
void OnScheduledTick(float deltaTime)
Определения PlayerBase.c:2689
void AddAction(typename actionName, out TInputActionMap InputActionMap)
Определения PlayerBase.c:1629
void SetBloodyHandsPenaltyChancePerAgent(eAgents type, float amount)
increments the chances per agents
Определения PlayerBase.c:6714
void SetLastFirePointIndex(int last_fire_point_index)
Определения PlayerBase.c:2056
PluginRecipesManager m_ModuleRecipesManager
Определения PlayerBase.c:37
void CheckSoundEvent()
Определения PlayerBase.c:7408
int m_AddModifier
Определения PlayerBase.c:206
vector m_CraftingInitialPos
Определения PlayerBase.c:213
PlayerStat< int > GetStatWet()
Определения PlayerBase.c:7645
override void HideClothing(ItemOptics optic, bool state)
state 'true' == hide
Определения PlayerBase.c:8166
void RemoveMedicalDrugsInUse(EMedicalDrugsType drugType)
Определения PlayerBase.c:576
vector GetLocalProjectionPosition()
Определения PlayerBase.c:2585
ItemBase CreateCopyOfItemInInventoryOrGround(ItemBase src)
Определения PlayerBase.c:6338
ref array< int > m_ActiveNVTypes
Определения PlayerBase.c:268
Head_Default m_CharactersHead
Определения PlayerBase.c:138
override bool HeadingModel(float pDt, SDayZPlayerHeadingModel pModel)
Определения PlayerBase.c:8001
EStatLevels GetStatLevelWater()
Определения PlayerBase.c:5058
void SetPerformedActionID(int id)
Определения PlayerBase.c:598
void ToggleHeatBufferVisibility(int heatbufferStage)
Определения PlayerBase.c:7716
void OnBleedingEnd()
PluginLifespan m_ModuleLifespan
Определения PlayerBase.c:31
int m_SoundEventParam
Определения PlayerBase.c:62
void OnRestrainChangeClient()
Определения PlayerBase.c:1926
PlayerStat< float > GetStatStamina()
Определения PlayerBase.c:7663
override void AfterStoreLoad()
Определения PlayerBase.c:6976
void OnQuickBarContinuousUseEnd(int slotClicked)
Определения PlayerBase.c:4642
bool DropItem(ItemBase item)
Определения PlayerBase.c:6274
void ProcessHandDamage(float delta_time, HumanMovementState pState)
Определения PlayerBase.c:1720
float GetStatBordersHealth()
Определения PlayerBase.c:5081
float GetTotalAgentCount()
Определения PlayerBase.c:7536
override bool IsInventorySoftLocked()
Определения PlayerBase.c:8039
void PlacingStartLocal(ItemBase item)
Определения PlayerBase.c:2365
const string SOUND_BREAK_LEG
Определения PlayerBase.c:149
void CheckDeath()
Определения PlayerBase.c:6757
void ForceUpdateInjuredState()
update injured state immediately
Определения PlayerBase.c:7754
void OnPlayerIsNowInsideEffectAreaBeginServer()
Определения PlayerBase.c:789
bool IsPlayerDisconnected()
Определения PlayerBase.c:2332
ref WeaponManager m_WeaponManager
Определения PlayerBase.c:82
bool GetFlagTendencyRaise()
DEPRECATED.
Определения PlayerBase.c:4875
void SetTemporaryResistanceToAgent(int agent, float time)
Определения PlayerBase.c:7556
override void RequestSoundEventEx(EPlayerSoundEventID id, bool from_server_and_client=false, int param=0)
Определения PlayerBase.c:7196
void OnQuickBarSingleUse(int slotClicked)
Определения PlayerBase.c:4499
void MovingShock(float legHealth, float highShock, float midShock, float lowShock)
Определения PlayerBase.c:3744
void BrokenLegWalkShock()
Определения PlayerBase.c:3695
void OnBleedingSourceRemoved()
Определения PlayerBase.c:7302
void OnInventoryMenuOpen()
ref StaminaHandler m_StaminaHandler
Определения PlayerBase.c:50
int m_Agents
Определения PlayerBase.c:45
override void OnCommandMelee2Start()
Определения PlayerBase.c:3954
ref DamageDealtEffect m_DamageDealtEffect
Определения PlayerBase.c:71
bool IsNVGLowered()
Определения PlayerBase.c:8739
override void ClearInventory()
Определения PlayerBase.c:6427
PlayerStat< float > m_StatWater
Определения PlayerBase.c:278
bool m_ContaminatedAreaEffectEnabled
Определения PlayerBase.c:159
bool HasDisease()
Определения PlayerBase.c:950
override void RPC(int rpc_type, array< ref Param > params, bool guaranteed, PlayerIdentity recipient=NULL)
Определения PlayerBase.c:5297
void ResetConstructionActionData()
Определения PlayerBase.c:2024
void Init()
Определения PlayerBase.c:312
ref ConstructionActionData m_ConstructionActionData
Определения PlayerBase.c:224
MapNavigationBehaviour GetMapNavigationBehaviour()
Определения PlayerBase.c:3284
ItemBase CreateCopyOfItemInInventory(ItemBase src)
Определения PlayerBase.c:6312
RandomGeneratorSyncManager m_RGSManager
Определения PlayerBase.c:155
bool IsPlacingLocal()
Определения PlayerBase.c:2435
override bool IsIgnoredByConstruction()
Определения PlayerBase.c:5245
int m_HasBloodyHandsVisible
Определения PlayerBase.c:11
void DecreaseAntibioticsCount()
Определения PlayerBase.c:9368
static Particle m_ContaminatedAroundPlayer
Определения PlayerBase.c:275
ref Timer m_DeathCheckTimer
Определения PlayerBase.c:99
ref Param1< float > m_UnconParam
Определения PlayerBase.c:69
override void OnSyncJuncture(int pJunctureID, ParamsReadContext pCtx)
Определения PlayerBase.c:7836
static ref array< Object > SPREAD_AGENTS_OBJECTS
Определения PlayerBase.c:9348
override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
Определения PlayerBase.c:5303
array< int > GetNVTypesArray()
Определения PlayerBase.c:8756
bool m_ImmunityBoosted
Определения PlayerBase.c:116
int m_DiseaseCount
Определения PlayerBase.c:125
string m_SaySoundLastSetName
Определения PlayerBase.c:219
ConstructionActionData GetConstructionActionData()
Определения PlayerBase.c:2019
string GetCachedID()
Определения PlayerBase.c:9322
float m_CameraSwayModifier
Определения PlayerBase.c:119
int m_StoreLoadVersion
Определения PlayerBase.c:23
EntityAI SpawnEntityOnGroundOnCursorDir(string object_name, float distance)
Определения PlayerBase.c:6257
override void TakeEntityToHandsImpl(InventoryMode mode, EntityAI item)
Определения PlayerBase.c:9127
void SetLiftWeapon(bool state)
Определения PlayerBase.c:8091
static ref TStringArray m_QBarItems
Определения PlayerBase.c:249
override bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
Определения PlayerBase.c:3363
ref HeatComfortAnimHandler m_HCAnimHandler
Определения PlayerBase.c:89
override void RemoveAllAgents()
Определения PlayerBase.c:7511
override bool CanSaveItemInHands(EntityAI item_in_hands)
Определения PlayerBase.c:1982
bool m_IsCraftingReady
Определения PlayerBase.c:211
int GetLastShavedSeconds()
Определения PlayerBase.c:6625
bool m_InsideEffectArea
Определения PlayerBase.c:164
void SetLegHealth()
Определения PlayerBase.c:3780
void SpreadAgentsEx(float distance=3, float chance=0.25)
chance between [0..1] , distance in meters
Определения PlayerBase.c:7475
void SetLiftWeapon(int pJunctureID, ParamsReadContext ctx)
Определения PlayerBase.c:8081
bool HandleRemoteItemManipulation(int userDataType, ParamsReadContext ctx)
Определения PlayerBase.c:6139
bool GetInColdArea()
Определения PlayerBase.c:2604
void DamageAllLegs(float inputDmg)
Определения PlayerBase.c:9042
int GetBloodType()
Определения PlayerBase.c:6737
float m_VisibilityCoef
Определения PlayerBase.c:59
void RequestResetADSSync()
Определения PlayerBase.c:2492
void RemoveActiveNV(int type)
Определения PlayerBase.c:8788
bool GetMapClosingSyncSent()
Определения PlayerBase.c:3259
void SetInEffectAreaTypeFlag(EEffectAreaType flag)
Определения PlayerBase.c:708
bool m_QuickBarHold
Определения PlayerBase.c:91
void BrokenLegForceProne(bool forceOverride=false)
Определения PlayerBase.c:3652
bool CanShave()
Определения PlayerBase.c:6489
void UpdateQuickBarExtraSlots()
Определения PlayerBase.c:7455
override bool CanBeTargetedByAI(EntityAI ai)
Определения PlayerBase.c:3546
override bool CanPlaceItem(EntityAI item)
Определения PlayerBase.c:2530
void DropAllItems()
Drops all clothes/wearables this character is carrying on themselves.
Определения PlayerBase.c:6453
ref UndergroundBunkerHandlerClient m_UndergroundBunkerHandler
Определения PlayerBase.c:35
ScriptInvoker GetOnUnconsciousStop()
Определения PlayerBase.c:562
void RemoveAllItems()
Определения PlayerBase.c:1447
float m_LastMapScale
Определения PlayerBase.c:242
override bool PlaySoundEventEx(EPlayerSoundEventID id, bool from_anim_system=false, bool is_from_server=false, int param=0)
Определения PlayerBase.c:7266
void SpawnFlashbangEffect(PlayerBase player, bool visual)
Определения PlayerBase.c:1019
void PlayerBase()
Определения PlayerBase.c:307
PluginConfigEmotesProfile m_ConfigEmotesProfile
Определения PlayerBase.c:30
void HideHairSelections(ItemBase item, bool state)
Определения PlayerBase.c:8613
ref FlashbangEffect m_FlashbangEffect
Определения PlayerBase.c:73
override void CheckAnimationOverrides()
Определения PlayerBase.c:8273
bool IsItemsToDelete()
Определения PlayerBase.c:7924
bool OnStoreLoadLifespan(ParamsReadContext ctx, int version)
Определения PlayerBase.c:7005
void SetVisibilityCoef(float pVisibility)
Определения PlayerBase.c:5017
EStatLevels GetStatLevelHealth()
Определения PlayerBase.c:5034
float GetStatBordersBlood()
Определения PlayerBase.c:5095
bool TakeEntityAsAttachmentImpl(InventoryMode mode, notnull EntityAI item)
Определения PlayerBase.c:9116
int GetBloodyHandsPenaltyAgents()
Определения PlayerBase.c:6687
override void OnParticleEvent(string pEventType, string pUserString, int pUserInt)
Определения PlayerBase.c:6502
void OnContaminatedAreaExitServer()
Определения PlayerBase.c:783
void PlacingCompleteLocal()
Определения PlayerBase.c:2421
bool m_IsRestrainedLocal
Определения PlayerBase.c:112
void SetNewCharName()
Определения PlayerBase.c:5988
EUndergroundPresence m_UndergroundPresence
Определения PlayerBase.c:27
override bool IsSelfAdjustingTemperature()
Определения PlayerBase.c:2205
vector GetAimPosition()
Определения PlayerBase.c:7567
override void SetInventorySoftLock(bool status)
'soft lock' meaning inventory screen cannot be displayed, but mechanically, inventory operations are ...
Определения PlayerBase.c:8045
bool TakeEntityToTargetCargoImpl(InventoryMode mode, notnull EntityAI target, notnull EntityAI item)
Определения PlayerBase.c:9149
AbstractWave SaySoundSet(string name)
Определения PlayerBase.c:2215
void PlacingCompleteServer()
Определения PlayerBase.c:2415
override bool IsInFBEmoteState()
Определения PlayerBase.c:8241
void SetRestrainStarted(bool restrain_started)
Определения PlayerBase.c:1882
QuickBarBase m_QuickBarBase
Определения PlayerBase.c:86
bool IsChelationActive()
Определения PlayerBase.c:582
bool m_AllowQuickFishing
Определения PlayerBase.c:128
void ProcessDrowning(float dT)
Определения PlayerBase.c:2134
override void OnRollStart(bool isToTheRight)
Определения PlayerBase.c:4097
eBrokenLegs GetBrokenLegs()
Определения PlayerBase.c:3577
void ShockRefill(float pDt)
functionality moved to ShockMdfr::OnTick
void TryHideItemInHands(bool hide, bool force=false)
tries to hide item in player's hands, some exceptions for various movement states
Определения PlayerBase.c:9055
float m_RecipeAnimLength
Определения PlayerBase.c:212
ref Param1< string > m_UAParamMessage
Определения PlayerBase.c:68
bool TakeEntityToCargoImpl(InventoryMode mode, notnull EntityAI item)
Определения PlayerBase.c:9105
override void CheckLiftWeapon()
Определения PlayerBase.c:8127
void InitializeActions()
Определения PlayerBase.c:1576
void SetQuickRestrain(bool enable)
Определения PlayerBase.c:1824
void AddPlayerLoad(float addedload)
Определения PlayerBase.c:4909
void RequestHandAnimationStateRefresh()
Определения PlayerBase.c:4456
ActionManagerBase m_ActionManager
Определения PlayerBase.c:43
override bool CanJump()
Определения PlayerBase.c:4407
override void OnJumpEnd(int pLandType=0)
Определения PlayerBase.c:3993
override void OnCommandFallFinish()
Определения PlayerBase.c:3891
bool IsOverloaded()
Определения PlayerBase.c:4896
ref ShockHandler m_ShockHandler
Определения PlayerBase.c:52
int m_LocalRefreshAnimStateIdx
Определения PlayerBase.c:21
bool m_HasHeatBuffer
Определения PlayerBase.c:13
bool IsMapCallbackEndInput()
Определения PlayerBase.c:3274
float GetFeetDamageMoveModifier()
Определения PlayerBase.c:1792
bool HasBloodTypeVisible()
Определения PlayerBase.c:6726
vector m_LocalProjectionPosition
Определения PlayerBase.c:201
int m_EffectAreaCount
Определения PlayerBase.c:163
void OnHoldBreathExhausted()
Определения PlayerBase.c:2184
ref TInputActionMap m_InputActionMapAsTarget
Определения PlayerBase.c:78
override bool PredictiveForceSwapEntities(notnull EntityAI item1, notnull EntityAI item2, notnull InventoryLocation item2_dst)
Определения PlayerBase.c:8483
PlayerStat< float > GetStatHeatBuffer()
Определения PlayerBase.c:7690
void SetBleedingBits(int bits)
Определения PlayerBase.c:902
void ContaminatedParticleAdjustment()
Определения PlayerBase.c:9189
void OnTick()
Определения PlayerBase.c:2800
void LockHandsUntilItemHeld()
Определения PlayerBase.c:2398
void ResetActionEndInput()
Определения PlayerBase.c:4681
void ~PlayerBase()
Определения PlayerBase.c:2624
void SetLiquidTendencyDrain(bool state)
Определения PlayerBase.c:4868
void UpdateMovementInertia()
Update movement inertia based on stamina available.
Определения PlayerBase.c:2777
UndergroundBunkerHandlerClient GetUndergroundBunkerHandler()
Определения PlayerBase.c:1507
bool m_IsHeadingRestricted
Определения PlayerBase.c:103
override bool CanReceiveItemIntoHands(EntityAI item_to_hands)
Определения PlayerBase.c:1971
override bool CanConsumeStamina(EStaminaConsumers consumer)
Определения PlayerBase.c:4360
void SetNextRecipe()
Определения PlayerBase.c:1686
ref InjuryAnimationHandler m_InjuryHandler
Определения PlayerBase.c:51
void UpdatePlayerMeasures()
Определения PlayerBase.c:7047
void OnContaminatedAreaEnterServer()
Определения PlayerBase.c:777
void ToggleHeatBufferVisibility(bool show)
Определения PlayerBase.c:7710
int m_AntibioticsActive
Определения PlayerBase.c:9352
void SetLastShavedSeconds(int last_shaved_seconds)
Определения PlayerBase.c:6630
int m_CorpseState
Определения PlayerBase.c:101
override void AddItemToDelete(EntityAI item)
Определения PlayerBase.c:7936
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
Определения PlayerBase.c:5707
override bool CanClimb(int climbType, SHumanCommandClimbResult climbRes)
Определения PlayerBase.c:4386
bool IsWearingSplint()
Определения PlayerBase.c:3795
ref PlayerSoundManagerClient m_PlayerSoundManagerClient
Определения PlayerBase.c:88
bool IsRestrainStarted()
Определения PlayerBase.c:1888
ref HeadingRestrictData m_HeadingRestrictData
Определения PlayerBase.c:104
override void EEHitByRemote(int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos)
Определения PlayerBase.c:1211
ref EmoteManager m_EmoteManager
Определения PlayerBase.c:47
void SetContaminatedEffect(bool enable, int ppeIdx=-1, int aroundId=ParticleList.CONTAMINATED_AREA_GAS_AROUND, int tinyId=ParticleList.CONTAMINATED_AREA_GAS_TINY, bool partDynaUpdate=false, int newBirthRate=0)
Определения PlayerBase.c:5690
int m_CorpseStateLocal
Определения PlayerBase.c:102
void OnRestrainStartedChangeClient()
Определения PlayerBase.c:1915
override ArrowManagerBase GetArrowManager()
Определения PlayerBase.c:1864
ref map< eAgents, float > m_BloodyHandsPenaltyChancePerAgent
Определения PlayerBase.c:305
float m_CargoLoad
Определения PlayerBase.c:58
const string CONTAMINATED_AREA_AMBIENT
Определения PlayerBase.c:160
void GiveShock(float shock)
Определения PlayerBase.c:3558
override void SetProcessUIWarning(bool state)
Определения PlayerBase.c:9027
bool m_QuickBarFT
Определения PlayerBase.c:92
bool TakeToDstImpl(InventoryMode mode, notnull InventoryLocation src, notnull InventoryLocation dst)
Определения PlayerBase.c:9171
void SetBrokenLegs(int stateId)
Определения PlayerBase.c:3583
bool m_IsInWater
Определения PlayerBase.c:96
int m_SyncedModifiers
Определения PlayerBase.c:270
override void SimulateDeath(bool state)
Определения PlayerBase.c:5975
int GetPerformedActionID()
Определения PlayerBase.c:604
int GetNoisePresenceInAI()
Return actual noise presence of player.
Определения PlayerBase.c:6773
bool HasHealings()
Определения PlayerBase.c:945
void CheckHairClippingOnCharacterLoad()
helper method for re-checking hairhiding on character load
Определения PlayerBase.c:8725
void SetBloodyHandsBase(int type)
Определения PlayerBase.c:6671
void SetContaminatedEffectEx(bool enable, int ppeIdx=-1, int aroundId=ParticleList.CONTAMINATED_AREA_GAS_AROUND, int tinyId=ParticleList.CONTAMINATED_AREA_GAS_TINY, string soundset="", bool partDynaUpdate=false, int newBirthRate=0)
Определения PlayerBase.c:5627
override void EEDelete(EntityAI parent)
Определения PlayerBase.c:1222
bool IsFacingTarget(Object target)
Определения PlayerBase.c:4484
override void SetDeathDarknessLevel(float duration, float tick_time)
Определения PlayerBase.c:8205
int m_ShakesForced
Определения PlayerBase.c:130
void StaminaHUDNotifier(bool show)
Определения PlayerBase.c:4348
vector GetLastFirePoint()
Определения PlayerBase.c:2035
static ref array< string > m_BleedingSourcesUp
Определения PlayerBase.c:153
Hologram GetHologramServer()
Определения PlayerBase.c:2342
override void AddArrow(Object arrow, int componentIndex, vector closeBonePosWS, vector closeBoneRotWS)
Определения PlayerBase.c:9254
void RemoveAction(typename actionName)
Определения PlayerBase.c:1676
override bool CanReleaseCargo(EntityAI cargo)
Определения PlayerBase.c:1956
EStatLevels GetStatLevel(float stat_value, float critical, float low, float normal, float high)
Определения PlayerBase.c:5139
void MessageStatus(string text)
Определения PlayerBase.c:6379
void PlayAttachmentDropSound()
Определения PlayerBase.c:5291
PlayerStat< float > GetStatDiet()
Определения PlayerBase.c:7654
Определения PlayerBase.c:2
Определения AirborneMask.c:2
Определения EnMath3D.c:28
Определения EnMath.c:7
proto native int GetLastPlayedCharacter()
proto native int GetCharactersCount()
void RemoveActiveInputRestriction(int restrictor)
array< vector > GetActiveRefresherLocations()
void AddDummyPlayerToScheduler(Man player)
Определения gameplay.c:716
void SetRespawnModeClient(int mode)
for client-side usage
WorldData GetWorldData()
Определения gameplay.c:743
void SetPlayerRespawning(bool state)
void OnPlayerRespawned(Man player)
void SyncRespawnModeInfo(PlayerIdentity identity)
server-side
void AddActiveInputExcludes(array< string > excludes)
Hud GetHud()
Определения gameplay.c:721
void HideInventory()
Определения gameplay.c:809
GameplayEffectWidgets_base GetEffectWidgets()
void EnableAllInputs(bool bForceSupress=false)
void ResetGUI()
Определения gameplay.c:718
void RemoveActiveInputExcludes(array< string > excludes, bool bForceSupress=false)
deprecated
Mission class.
Определения gameplay.c:687
Определения Bot.c:9
Определения ObjectTyped.c:2
static PPEManager GetPPEManager()
Returns the manager instance singleton.
Определения PPEManager.c:27
Static component of PPE manager, used to hold the instance.
Определения PPEManager.c:3
void Start(Param par=null)
Определения PPERequestPlatformsBase.c:38
Определения PPEConstants.c:68
Определения EntityAI.c:95
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
Legacy way of using particles in the game.
Определения Particle.c:7
static const int BREATH_VAPOUR_MEDIUM
Определения ParticleList.c:151
static const int BREATH_VAPOUR_LIGHT
Определения ParticleList.c:150
static const int DROWNING_BUBBLES
Определения ParticleList.c:337
static const int CONTAMINATED_AREA_GAS_AROUND
Определения ParticleList.c:300
static const int CONTAMINATED_AREA_GAS_TINY
Определения ParticleList.c:299
static const int BREATH_VAPOUR_HEAVY
Определения ParticleList.c:152
Определения ParticleList.c:12
Определения PlayerAgentPool.c:2
override void OnGameplayDataHandlerSync()
Определения PlayerBaseClient.c:39
Определения PlayerBaseClient.c:2
static const float HEALTH_REGEN_MAX
Определения PlayerConstants.c:149
static const float SL_HEALTH_CRITICAL
Определения PlayerConstants.c:25
static const int LAST_UA_MSG_LIFETIME
Определения PlayerConstants.c:205
static const float BROKEN_LEGS_HIGH_HEALTH_THRESHOLD
Определения PlayerConstants.c:230
static const float SL_WATER_HIGH
Определения PlayerConstants.c:49
static const float SHOES_MOVEMENT_DAMAGE_PER_STEP
Определения PlayerConstants.c:20
static const float IMMUNITY_THRESHOLD_LEVEL_CRITICAL
Определения PlayerConstants.c:190
static const int CORPSE_STATE_MEDIUM
Определения PlayerConstants.c:214
static const float THRESHOLD_HEAT_COMFORT_MINUS_WARNING
Определения PlayerConstants.c:92
static const float SL_ENERGY_HIGH
Определения PlayerConstants.c:43
static const float BROKEN_LEGS_SHOCK_SWIM
Определения PlayerConstants.c:226
static const float BROKEN_LEGS_INITIAL_SHOCK
Определения PlayerConstants.c:222
static const float FULL_SPRINT_DELAY_FROM_CROUCH
[seconds]
Определения PlayerConstants.c:8
static const float SL_ENERGY_LOW
Определения PlayerConstants.c:41
static const float THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL
Определения PlayerConstants.c:93
static const float SL_BLOOD_LOW
Определения PlayerConstants.c:36
static const float BROKEN_LEGS_ROLL_SHOCK
Определения PlayerConstants.c:233
static const int CORPSE_STATE_DECAYED
Определения PlayerConstants.c:215
static const float BROKEN_LEGS_LOW_SHOCK_WALK
Определения PlayerConstants.c:223
static const float SL_WATER_NORMAL
Определения PlayerConstants.c:48
static const float SL_BLOOD_CRITICAL
Определения PlayerConstants.c:35
static const float FULL_SPRINT_DELAY_FROM_PRONE
[seconds]
Определения PlayerConstants.c:9
static const float SL_ENERGY_MAX
Определения PlayerConstants.c:44
static const float SL_HEALTH_LOW
Определения PlayerConstants.c:26
static const float GLOVES_DAMAGE_SLIDING_LADDER_PER_SEC
Определения PlayerConstants.c:195
static const float UNCONSCIOUS_IN_WATER_TIME_LIMIT_TO_DEATH
Определения PlayerConstants.c:169
static const float SL_HEALTH_NORMAL
Определения PlayerConstants.c:27
static const float BROKEN_LEGS_STAND_SHOCK
Определения PlayerConstants.c:232
static const float SL_WATER_LOW
Определения PlayerConstants.c:47
static const float BROKEN_LEGS_MID_SHOCK_WALK
Определения PlayerConstants.c:224
static const float BROKEN_CROUCH_MODIFIER
Определения PlayerConstants.c:234
static const float SL_ENERGY_CRITICAL
Определения PlayerConstants.c:40
static const float HEALTH_REGEN_MIN
Определения PlayerConstants.c:148
static const int CHECK_EVERY_N_STEP
Определения PlayerConstants.c:21
static const int DROWNING_BUBBLE_FREQUENCY_MIN
Определения PlayerConstants.c:263
static const float IMMUNITY_THRESHOLD_LEVEL_LOW
Определения PlayerConstants.c:189
static const float CHANCE_TO_BLEED_SLIDING_LADDER_PER_SEC
Определения PlayerConstants.c:194
static const float IMMUNITY_THRESHOLD_LEVEL_HIGH
Определения PlayerConstants.c:187
static const float DROWNING_DEFAULT_THRESHOLD
Определения PlayerConstants.c:259
static const int DROWNING_BUBBLE_FREQUENCY_MAX
Определения PlayerConstants.c:262
static const float BAREFOOT_MOVEMENT_BLEED_MODIFIER
Определения PlayerConstants.c:19
static const float SL_BLOOD_NORMAL
Определения PlayerConstants.c:37
static const float MELEE2_MOVEMENT_BLEND_DELAY
Определения PlayerConstants.c:4
static const float SL_BLOOD_HIGH
Определения PlayerConstants.c:38
static const float DROWNING_UNCONSCIOUS_THRESHOLD
Определения PlayerConstants.c:261
static const int BLOOD_THRESHOLD_FATAL
Определения PlayerConstants.c:97
static const float SL_ENERGY_NORMAL
Определения PlayerConstants.c:42
static const float SL_WATER_CRITICAL
Определения PlayerConstants.c:46
static const float IMMUNITY_THRESHOLD_LEVEL_NORMAL
Определения PlayerConstants.c:188
static const float BROKEN_LEGS_LOW_HEALTH_THRESHOLD
Определения PlayerConstants.c:229
static const float DROWNING_SWIMMING_THRESHOLD
Определения PlayerConstants.c:260
static const float CAMERA_THRESHOLD_PITCH
Определения PlayerConstants.c:217
static const float SL_WATER_MAX
Определения PlayerConstants.c:50
static const float SL_HEALTH_HIGH
Определения PlayerConstants.c:28
static const float BROKEN_LEGS_HIGH_SHOCK_WALK
Определения PlayerConstants.c:225
Определения PlayerConstants.c:2
EConsumeType m_Type
Определения PlayerConsumeData.c:8
float m_Amount
Определения PlayerConsumeData.c:3
int m_LiquidType
Определения PlayerConsumeData.c:5
int m_Agents
Определения PlayerConsumeData.c:4
ItemBase m_Source
Определения PlayerConsumeData.c:7
proto string GetName()
nick (short) name of player
proto string GetId()
unique id of player (hashed steamID, database Xbox id...) can be used in database or logs
The class that will be instanced (moddable)
Определения gameplay.c:389
vector GetRandomSafePos3D(vector targetPos)
void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
Определения PluginDeveloper.c:61
Определения PluginDiagMenu.c:30
static int PlayInWorld(notnull Effect eff, vector pos)
Play an Effect.
Определения EffectManager.c:47
static int PlayOnObject(notnull Effect eff, Object obj, vector local_pos="0 0 0", vector local_ori="0 0 0", bool force_rotation_relative_to_world=false)
Play an Effect.
Определения EffectManager.c:70
static EffectSound PlaySoundOnObject(string sound_set, Object parent_object, float play_fade_in=0, float stop_fade_out=0, bool loop=false)
Create and play an EffectSound.
Определения EffectManager.c:247
static bool IsEffectExist(int effect_id)
Checks whether an Effect ID is registered in SEffectManager.
Определения EffectManager.c:294
static void DestroyEffect(Effect effect)
Unregisters, stops and frees the Effect.
Определения EffectManager.c:271
Manager class for managing Effect (EffectParticle, EffectSound)
Определения EffectManager.c:6
proto void Remove(func fn)
remove specific call from queue
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 native void Send()
proto static native bool CanStoreInputUserData()
Returns true when the channel is free, AND the InputBuffer is NOT full (same as '!...
Определения gameplay.c:121
ScriptInvoker Class provide list of callbacks usage:
Определения tools.c:116
Определения gameplay.c:152
void SetSelectionState(bool state)
Определения Head.c:143
ref array< int > GetTranslatedSelections()
Определения Head.c:153
bool GetSelectionState()
Определения Head.c:148
Определения Head.c:68
proto bool Write(void value_out)
proto bool Read(void value_in)
Определения consumables.c:66
Определения ShockHandler.c:2
Определения Sound.c:112
Определения StaminaHandler.c:261
Определения StanceIndicator.c:2
string m_CharacterId
character ID
Определения ScriptAnalytics.c:61
string m_Reason
reason of disconnect (quit, kick, ban, sign-out...)
Определения ScriptAnalytics.c:62
vector m_PositionStart
player world position at the start of interval
Определения ScriptAnalytics.c:7
int m_TimeInterval
amount of real time in seconds covered by this event
Определения ScriptAnalytics.c:5
int m_DaytimeHour
current daytime in gameplay (hour in 24h format)
Определения ScriptAnalytics.c:6
vector m_PositionEnd
player world position at the end of interval
Определения ScriptAnalytics.c:8
string m_CharacterId
character ID
Определения ScriptAnalytics.c:4
float m_DistanceOnFoot
traveled distance on foot (meters) during interval
Определения ScriptAnalytics.c:9
static float GetParamFloat(string surface_name, string param_name)
Определения Surface.c:18
Определения Surface.c:2
Определения EmoteManager.c:1192
Определения StateManager.c:48
static void SendEntityKilled(EntityAI victim, EntityAI killer, EntityAI source, bool is_headshot)
Определения SyncEvents.c:56
Определения SyncEvents.c:2
Определения DayZPlayerImplement.c:63
proto native float GetDamage(string zoneName, string healthType)
Определения DamageSystem.c:2
Base native class for all motorized wheeled vehicles.
Определения Boat.c:28
proto native void Supress()
proto native UAInput GetInputByID(int iID)
returns list of all bindable (i.e. visible) inputs from the active group ('core' by default)
const float DEFAULT
Определения ActionConstants.c:128
proto native UIScriptedMenu GetMenu()
Returns most-top open menu.
proto native void ScreenFadeOut(float duration)
UIScriptedMenu FindMenu(int id)
Returns menu with specific ID if it is open (see MenuID)
Определения UIManager.c:160
bool CloseAll()
Close all opened menus.
Определения UIManager.c:78
proto native void CloseDialog()
proto native void ScreenFadeIn(float duration, string text, int backgroundColor, int textColor)
Определения DayZGame.c:64
static const float HEAT_DAMAGE_TICK_TIME
Определения VolcanicTrigger.c:6
static void ApplyEffects(PlayerBase player)
Определения VolcanicTrigger.c:98
Volcanic area trigger.
Определения VolcanicTrigger.c:3
shorthand
Определения BoltActionRifle_Base.c:6
bool CanLoadBullet(Weapon_Base wpn, Magazine mag, bool reservationCheck=true)
Определения WeaponManager.c:200
bool CanAttachMagazine(Weapon_Base wpn, Magazine mag, bool reservationCheck=true)
Определения WeaponManager.c:91
bool CanSwapMagazine(Weapon_Base wpn, Magazine mag, bool reservationCheck=true)
Определения WeaponManager.c:132
Определения WeaponManager.c:2
void SetCalcDetails(string details)
Определения Debug.c:816
Определения Debug.c:799
int GetPollution()
Определения WorldData.c:281
float GetLiquidTypeEnviroTemperature(int liquidType)
Определения WorldData.c:228
void SetGlobalLighting(int lightingID)
Определения WorldLighting.c:11
Определения WorldLighting.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto string ToString(bool simple=true)
Определения EnConvert.c:97
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
proto native float LengthSq()
Returns squared length (magnitudeSqr)
static const vector Zero
Определения EnConvert.c:110
proto float Normalize()
Normalizes vector. Returns length.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:106
const int SIMPLE_SELECTION_SHOULDER_RIFLE
Определения dayzplayer.c:1159
const int SIMPLE_SELECTION_SHOULDER_MELEE
Определения dayzplayer.c:1160
override string GetDebugName()
Определения dayzplayer.c:1170
void SDayZPlayerHeadingModel()
cannot be created from script
Определения dayzplayer.c:1089
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1068
proto native DayZPlayerType GetDayZPlayerType()
returns appropriate DayZPlayerType
proto native DayZPlayerCamera GetCurrentCamera()
-------------— camera additional functions ----------------------—
proto native DayZPlayerInstanceType GetInstanceType()
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
proto native void SendSyncJuncture(int pJunctureID, ParamsWriteContext ctx)
-------------— sync stuff ----------------------—
class SDayZPlayerAimingModel SIMPLE_SELECTION_MELEE_RIFLE
float GetCurrentWaterLevel()
const int SIMPLE_SELECTION_MELEE_MELEE
Определения dayzplayer.c:1158
proto native bool IsPlayerInStance(int pStanceMask)
-------------— camera additiona functions ----------------------—
string GetDefaultHitPositionComponent()
Определения dayzplayer.c:502
class DayZPlayerCameraResult DayZPlayerCamera(DayZPlayer pPlayer, HumanInputController pInput)
Определения dayzplayer.c:56
eModifiers
Определения eModifiers.c:2
proto native float GetMax()
Определения PlayerStatBase.c:144
Serializer ParamsReadContext
Определения gameplay.c:15
InventoryTraversalType
tree traversal type, for more see http://en.wikipedia.org/wiki/Tree_traversal
Определения gameplay.c:6
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
const int AGT_UACTION_CONSUME
Определения constants.c:497
const int AGT_AIRBOURNE_BIOLOGICAL
Определения constants.c:501
const int COLOR_RED_A
Определения constants.c:69
const int COLOR_GREEN_A
Определения constants.c:70
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
proto void Print(void var)
Prints content of variable to console/log.
enum ShapeType ErrorEx
proto native void SetPosition(vector position)
Set the world position of the Effect.
Определения Effect.c:438
ShapeFlags
Определения EnDebug.c:126
static proto void SetValue(int id, int value)
Set value at the given script id.
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead
const int INVENTORY_ENTITY_DROP_OVERLAP_DEPTH
Определения constants.c:1052
const float DZPLAYER_CAMERA_FOV_IRONSIGHTS
Определения constants.c:978
const float REFRESHER_RADIUS
Определения constants.c:1023
const int DEFAULT_CHARACTER_MENU_ID
Определения constants.c:982
const float NL_DAMAGE_FIREARM_CONVERSION_PLAYERS
Определения constants.c:1003
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
void PrintString(string s)
Helper for printing out string expression. Example: PrintString("Hello " + var);.
Определения EnScript.c:345
set< string > TStringSet
Определения EnScript.c:775
EntityEvent
Entity events for event-mask, or throwing event from code.
Определения EnEntity.c:45
static const float ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE
Определения constants.c:806
const int STATE_RUINED
Определения constants.c:846
const int LIQUID_WATER
Определения constants.c:539
static proto void YawPitchRollMatrix(vector ang, out vector mat[3])
Creates rotation matrix from angles.
static proto void MatrixInvMultiply4(vector mat0[4], vector mat1[4], out vector res[4])
Invert-transforms matrix.
static void MatrixIdentity4(out vector mat[4])
Creates identity matrix.
Определения EnMath3D.c:256
static proto void MatrixOrthogonalize4(vector mat[4])
Orthogonalizes matrix.
static const float PI2
Определения EnMath.c:13
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:126
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto int AbsInt(int i)
Returns absolute value.
static proto float RandomFloat(float min, float max)
Returns a random float number between and min[inclusive] and max[exclusive].
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static proto float Sin(float angle)
Returns sinus of angle in radians.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
static const float RAD2DEG
Определения EnMath.c:16
static proto float AbsFloat(float f)
Returns absolute value.
const string CFG_AMMO
Определения constants.c:223
const int MENU_WARNING_TELEPORT
Определения constants.c:210
const int MENU_INSPECT
Определения constants.c:179
const int MENU_MAP
Определения constants.c:191
const int MENU_WARNING_ITEMDROP
Определения constants.c:208
const int MENU_RESPAWN_DIALOGUE
Определения constants.c:209
const int MENU_INVENTORY
Определения constants.c:180
const int MENU_RADIAL_QUICKBAR
Определения constants.c:198
EmitorParam
Определения EnVisual.c:114
const int SAT_DEBUG_ACTION
Определения constants.c:452
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)
const float STAMINA_MAX
Определения constants.c:710
proto native int Length()
Returns length of string.
proto void GetHourMinuteSecond(out int hour, out int minute, out int second)
Returns system time.
const int CALL_CATEGORY_GAMEPLAY
Определения tools.c:10
bool IsRunning()
Определения tools.c:264
const int CALL_CATEGORY_GUI
Определения tools.c:9
const int CALL_CATEGORY_SYSTEM
Определения tools.c:8
proto native Widget GetParent()
Get parent of the Effect.
Определения Effect.c:407
proto native void AddChild(Widget child, bool immedUpdate=true)
proto native bool IsModifierActive()
is modifier active
proto native int GetRunningAction()
returns -1 when no action is running or RELOAD,MECHANISM, ....
Определения ActionManagerBase.c:91
proto native bool IsInWater()
class HumanCommandMelee2 HumanCommandFall()
Определения human.c:574
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1112
void HumanItemAccessor()
Определения humanitems.c:141
class HumanItemBehaviorCfg OnItemInHandsChanged(bool pInstant=false)
signalization from script to engine that item in hands changed