9550{
9552 {
9553 return true;
9554 }
9555};
9556
9557
9558
9560{
9564
9566
9569
9570
9571
9572
9573
9582
9588
9593
9598
9619 protected bool m_IsResultOfSplit
9620
9622
9627
9628
9629
9631
9635
9636
9637
9639
9642
9643
9644
9650
9651
9659
9662
9663
9665
9666
9668
9669
9674
9675
9680
9681
9683
9684
9686 {
9691
9692 if (!
GetGame().IsDedicatedServer())
9693 {
9695 {
9697
9699 {
9701 }
9702 }
9703
9706 }
9707
9708 m_OldLocation = null;
9709
9711 {
9713 }
9714
9715 if (ConfigIsExisting("headSelectionsToHide"))
9716 {
9719 }
9720
9722 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
9723 {
9725 }
9726
9728
9729 m_IsResultOfSplit = false;
9730
9732 }
9733
9735 {
9736 super.InitItemVariables();
9737
9743 m_Count = ConfigGetInt(
"count");
9744
9747
9752
9755
9760
9772
9776
9777
9780 if (ConfigIsExisting("canBeSplit"))
9781 {
9784 }
9785
9787 if (ConfigIsExisting("itemBehaviour"))
9789
9790
9793 RegisterNetSyncVariableInt("m_VarLiquidType");
9794 RegisterNetSyncVariableInt("m_Cleanness",0,1);
9795
9796 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
9797 RegisterNetSyncVariableFloat("m_ImpactSpeed");
9798 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
9799
9800 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
9801 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
9802 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
9803 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
9804
9805 RegisterNetSyncVariableBool("m_IsBeingPlaced");
9806 RegisterNetSyncVariableBool("m_IsTakeable");
9807 RegisterNetSyncVariableBool("m_IsHologram");
9808
9811 {
9814 }
9815
9817
9819 if (ConfigIsExisting("temperaturePerQuantityWeight"))
9821
9822 }
9823
9825 {
9827 }
9828
9830 {
9833 {
9838 }
9839 }
9840
9841 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
9842 {
9844 {
9847 }
9848
9850 }
9851
9853 {
9859 }
9860
9862
9864 {
9866
9867 if (!action)
9868 {
9869 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
9870 return;
9871 }
9872
9874 if (!ai)
9875 {
9877 return;
9878 }
9879
9881 if (!action_array)
9882 {
9883 action_array = new array<ActionBase_Basic>;
9885 }
9886 if (LogManager.IsActionLogEnable())
9887 {
9888 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9889 }
9890
9891 if (action_array.Find(action) != -1)
9892 {
9893 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9894 }
9895 else
9896 {
9897 action_array.Insert(action);
9898 }
9899 }
9900
9902 {
9904 ActionBase action = player.GetActionManager().GetAction(actionName);
9907
9908 if (action_array)
9909 {
9910 action_array.RemoveItem(action);
9911 }
9912 }
9913
9914
9915
9917 {
9918 ActionOverrideData overrideData = new ActionOverrideData();
9922
9924 if (!actionMap)
9925 {
9928 }
9929
9930 actionMap.Insert(this.
Type(), overrideData);
9931
9932 }
9933
9935
9937
9938
9940 {
9943
9946
9947 string config_to_search = "CfgVehicles";
9948 string muzzle_owner_config;
9949
9951 {
9952 if (IsInherited(Weapon))
9953 config_to_search = "CfgWeapons";
9954
9955 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9956
9957 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9958
9960
9961 if (config_OnFire_subclass_count > 0)
9962 {
9963 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9964
9965 for (int i = 0; i < config_OnFire_subclass_count; i++)
9966 {
9967 string particle_class = "";
9969 string config_OnFire_entry = config_OnFire_class + particle_class;
9970 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9971 WPOF_array.Insert(WPOF);
9972 }
9973
9974
9976 }
9977 }
9978
9980 {
9981 config_to_search = "CfgWeapons";
9982 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9983
9984 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9985
9987
9988 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9989 {
9990 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9991
9992 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9993 {
9994 string particle_class2 = "";
9996 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9997 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9998 WPOBE_array.Insert(WPOBE);
9999 }
10000
10001
10003 }
10004 }
10005 }
10006
10007
10009 {
10012
10014 {
10015 string config_to_search = "CfgVehicles";
10016
10017 if (IsInherited(Weapon))
10018 config_to_search = "CfgWeapons";
10019
10020 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
10021 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
10022
10023 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
10024 {
10025
10027
10029 {
10031 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
10033 return;
10034 }
10035
10038
10039
10040
10042 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
10043
10044 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
10045 {
10046 string particle_class = "";
10048 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
10050
10051 if (entry_type == CT_CLASS)
10052 {
10053 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
10054 WPOOH_array.Insert(WPOF);
10055 }
10056 }
10057
10058
10060 }
10061 }
10062 }
10063
10065 {
10067 }
10068
10070 {
10072 {
10074
10077
10080
10081 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10082 }
10083 }
10084
10086 {
10088 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10089
10091 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10092
10094 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10095
10097 {
10099 }
10100 }
10101
10103 {
10105 }
10106
10108 {
10111 else
10113
10115 {
10118 }
10119 else
10120 {
10123
10126 }
10127
10129 }
10130
10132 {
10134 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
10135 }
10136
10138 {
10140 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
10142 }
10143
10145 {
10147 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10148 }
10149
10151 {
10154
10155 OverheatingParticle OP = new OverheatingParticle();
10160
10162 }
10163
10165 {
10168
10169 return -1;
10170 }
10171
10173 {
10175 {
10178
10179 for (int i = count; i > 0; --i)
10180 {
10181 int id = i - 1;
10184
10187
10188 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
10189 {
10190 if (p)
10191 {
10194 }
10195 }
10196 }
10197 }
10198 }
10199
10201 {
10203 {
10205 {
10206 int id = i - 1;
10208
10209 if (OP)
10210 {
10212
10213 if (p)
10214 {
10216 }
10217
10218 delete OP;
10219 }
10220 }
10221
10224 }
10225 }
10226
10229 {
10230 return 0.0;
10231 }
10232
10233
10235 {
10236 return 250;
10237 }
10238
10240 {
10241 return 0;
10242 }
10243
10246 {
10248 return true;
10249
10250 return false;
10251 }
10252
10255 {
10258
10260 {
10262 }
10263 else
10264 {
10265
10267 }
10268
10270 }
10271
10278 {
10279 return -1;
10280 }
10281
10282
10283
10284
10286 {
10288 {
10290 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10291
10292 if (r_index >= 0)
10293 {
10294 InventoryLocation r_il = new InventoryLocation;
10295 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10296
10297 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10300 {
10301 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10302 }
10304 {
10305 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10306 }
10307
10308 }
10309
10310 player.GetHumanInventory().ClearUserReservedLocation(this);
10311 }
10312
10315 }
10316
10317
10318
10319
10321 {
10322 return ItemBase.m_DebugActionsMask;
10323 }
10324
10326 {
10327 return ItemBase.m_DebugActionsMask & mask;
10328 }
10329
10331 {
10332 ItemBase.m_DebugActionsMask = mask;
10333 }
10334
10336 {
10337 ItemBase.m_DebugActionsMask |= mask;
10338 }
10339
10341 {
10342 ItemBase.m_DebugActionsMask &= ~mask;
10343 }
10344
10346 {
10348 {
10350 }
10351 else
10352 {
10354 }
10355 }
10356
10357
10359 {
10360 if (GetEconomyProfile())
10361 {
10362 float q_max = GetEconomyProfile().GetQuantityMax();
10363 if (q_max > 0)
10364 {
10365 float q_min = GetEconomyProfile().GetQuantityMin();
10366 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
10367
10369 {
10370 ComponentEnergyManager comp = GetCompEM();
10372 {
10374 }
10375 }
10377 {
10379
10380 }
10381
10382 }
10383 }
10384 }
10385
10388 {
10389 EntityAI parent = GetHierarchyParent();
10390
10391 if (parent)
10392 {
10393 InventoryLocation inventory_location_to_lock = new InventoryLocation;
10394 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
10395 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
10396 }
10397 }
10398
10401 {
10402 EntityAI parent = GetHierarchyParent();
10403
10404 if (parent)
10405 {
10406 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
10407 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
10408 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
10409 }
10410 }
10411
10413 {
10414
10415
10416
10417
10419
10421 {
10422 if (ScriptInputUserData.CanStoreInputUserData())
10423 {
10424 ScriptInputUserData ctx = new ScriptInputUserData;
10430 ctx.
Write(use_stack_max);
10433
10435 {
10436 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
10437 }
10438 }
10439 }
10440 else if (!
GetGame().IsMultiplayer())
10441 {
10443 }
10444 }
10445
10447 {
10449 }
10450
10452 {
10454 }
10455
10457 {
10459 }
10460
10462 {
10463
10464 return false;
10465 }
10466
10468 {
10469 return false;
10470 }
10471
10475 {
10476 return false;
10477 }
10478
10480 {
10481 return "";
10482 }
10483
10485
10487 {
10488 return false;
10489 }
10490
10492 {
10493 return true;
10494 }
10495
10496
10497
10499 {
10500 return true;
10501 }
10502
10504 {
10505 return true;
10506 }
10507
10509 {
10510 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
10512 }
10513
10515 {
10517 }
10518
10520 {
10522 if (!is_being_placed)
10524 SetSynchDirty();
10525 }
10526
10527
10529
10531 {
10533 }
10534
10536 {
10538 }
10539
10541 {
10542 return 1;
10543 }
10544
10546 {
10547 return false;
10548 }
10549
10551 {
10553 SetSynchDirty();
10554 }
10555
10556
10557
10558
10559
10560
10561
10562
10563
10564
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
10576
10577
10578
10579
10580
10581
10582
10583
10584
10585
10586
10587
10588
10589
10591 {
10592 super.OnMovedInsideCargo(container);
10593
10594 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10595 }
10596
10597 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
10598 {
10599 super.EEItemLocationChanged(oldLoc,newLoc);
10600
10601 PlayerBase new_player = null;
10602 PlayerBase old_player = null;
10603
10604 if (newLoc.GetParent())
10605 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
10606
10607 if (oldLoc.GetParent())
10608 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
10609
10611 {
10612 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
10613
10614 if (r_index >= 0)
10615 {
10616 InventoryLocation r_il = new InventoryLocation;
10617 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10618
10619 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10622 {
10623 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10624 }
10626 {
10627 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10628 }
10629
10630 }
10631 }
10632
10634 {
10635 if (new_player)
10636 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
10637
10638 if (new_player == old_player)
10639 {
10640
10641 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
10642 {
10644 {
10645 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
10646 {
10647 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10648 }
10649 }
10650 else
10651 {
10652 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10653 }
10654 }
10655
10656 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
10657 {
10658 int type = oldLoc.GetType();
10660 {
10661 oldLoc.GetParent().GetOnSetLock().Invoke(this);
10662 }
10664 {
10665 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
10666 }
10667 }
10668 if (!m_OldLocation)
10669 {
10670 m_OldLocation = new InventoryLocation;
10671 }
10672 m_OldLocation.Copy(oldLoc);
10673 }
10674 else
10675 {
10676 if (m_OldLocation)
10677 {
10678 m_OldLocation.Reset();
10679 }
10680 }
10681
10683 }
10684 else
10685 {
10686 if (new_player)
10687 {
10688 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
10689 if (res_index >= 0)
10690 {
10691 InventoryLocation il = new InventoryLocation;
10692 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
10694 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
10697 {
10698 il.
GetParent().GetOnReleaseLock().Invoke(it);
10699 }
10701 {
10703 }
10704
10705 }
10706 }
10708 {
10709
10711 }
10712
10713 if (m_OldLocation)
10714 {
10715 m_OldLocation.Reset();
10716 }
10717 }
10718 }
10719
10720 override void EOnContact(IEntity other, Contact extra)
10721 {
10723 {
10724 int liquidType = -1;
10726 if (impactSpeed > 0.0)
10727 {
10729 #ifndef SERVER
10731 #else
10733 SetSynchDirty();
10734 #endif
10736 }
10737 }
10738
10739 #ifdef SERVER
10740 if (GetCompEM() && GetCompEM().IsPlugged())
10741 {
10742 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
10743 GetCompEM().UnplugThis();
10744 }
10745 #endif
10746 }
10747
10749
10751 {
10753 }
10754
10756 {
10757
10758 }
10759
10761 {
10762 super.OnItemLocationChanged(old_owner, new_owner);
10763
10764 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
10765 PlayerBase playerNew = PlayerBase.Cast(new_owner);
10766
10767 if (!relatedPlayer && playerNew)
10768 relatedPlayer = playerNew;
10769
10770 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
10771 {
10773 if (actionMgr)
10774 {
10775 ActionBase currentAction = actionMgr.GetRunningAction();
10776 if (currentAction)
10778 }
10779 }
10780
10781 Man ownerPlayerOld = null;
10782 Man ownerPlayerNew = null;
10783
10784 if (old_owner)
10785 {
10786 if (old_owner.
IsMan())
10787 {
10788 ownerPlayerOld = Man.Cast(old_owner);
10789 }
10790 else
10791 {
10792 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
10793 }
10794 }
10795 else
10796 {
10798 {
10800
10801 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
10802 {
10803 GetCompEM().UnplugThis();
10804 }
10805 }
10806 }
10807
10808 if (new_owner)
10809 {
10810 if (new_owner.
IsMan())
10811 {
10812 ownerPlayerNew = Man.Cast(new_owner);
10813 }
10814 else
10815 {
10816 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
10817 }
10818 }
10819
10820 if (ownerPlayerOld != ownerPlayerNew)
10821 {
10822 if (ownerPlayerOld)
10823 {
10824 array<EntityAI> subItemsExit = new array<EntityAI>;
10826 for (int i = 0; i < subItemsExit.Count(); i++)
10827 {
10830 }
10831 }
10832
10833 if (ownerPlayerNew)
10834 {
10835 array<EntityAI> subItemsEnter = new array<EntityAI>;
10837 for (int j = 0; j < subItemsEnter.Count(); j++)
10838 {
10841 }
10842 }
10843 }
10844 else if (ownerPlayerNew != null)
10845 {
10846 PlayerBase nplayer;
10847 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
10848 {
10849 array<EntityAI> subItemsUpdate = new array<EntityAI>;
10851 for (int k = 0; k < subItemsUpdate.Count(); k++)
10852 {
10854 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
10855 }
10856 }
10857 }
10858
10859 if (old_owner)
10860 old_owner.OnChildItemRemoved(this);
10861 if (new_owner)
10862 new_owner.OnChildItemReceived(this);
10863 }
10864
10865
10867 {
10868 super.EEDelete(parent);
10869 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
10870 if (player)
10871 {
10873
10874 if (player.IsAlive())
10875 {
10876 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10877 if (r_index >= 0)
10878 {
10879 InventoryLocation r_il = new InventoryLocation;
10880 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10881
10882 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10885 {
10886 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10887 }
10889 {
10890 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10891 }
10892
10893 }
10894
10895 player.RemoveQuickBarEntityShortcut(this);
10896 }
10897 }
10898 }
10899
10901 {
10902 super.EEKilled(killer);
10903
10906 {
10907 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10908 {
10909 if (IsMagazine())
10910 {
10911 if (Magazine.Cast(this).GetAmmoCount() > 0)
10912 {
10914 }
10915 }
10916 else
10917 {
10919 }
10920 }
10921 }
10922 }
10923
10925 {
10926 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10927
10928 super.OnWasAttached(parent, slot_id);
10929
10932
10934 }
10935
10937 {
10938 super.OnWasDetached(parent, slot_id);
10939
10942 }
10943
10945 {
10946 int idx;
10949
10950 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10951 if (inventory_slots.Count() < 1)
10952 {
10953 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10954 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10955 }
10956 else
10957 {
10958 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10959 }
10960
10961 idx = inventory_slots.Find(slot);
10962 if (idx < 0)
10963 return "";
10964
10965 return attach_types.Get(idx);
10966 }
10967
10969 {
10970 int idx = -1;
10971 string slot;
10972
10975
10976 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10977 if (inventory_slots.Count() < 1)
10978 {
10979 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10980 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10981 }
10982 else
10983 {
10984 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10985 if (detach_types.Count() < 1)
10986 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10987 }
10988
10989 for (int i = 0; i < inventory_slots.Count(); i++)
10990 {
10991 slot = inventory_slots.Get(i);
10992 }
10993
10994 if (slot != "")
10995 {
10996 if (detach_types.Count() == 1)
10997 idx = 0;
10998 else
10999 idx = inventory_slots.Find(slot);
11000 }
11001 if (idx < 0)
11002 return "";
11003
11004 return detach_types.Get(idx);
11005 }
11006
11008 {
11009
11011
11012
11013 float min_time = 1;
11014 float max_time = 3;
11015 float delay = Math.RandomFloat(min_time, max_time);
11016
11017 explode_timer.Run(delay, this, "DoAmmoExplosion");
11018 }
11019
11021 {
11022 Magazine magazine = Magazine.Cast(this);
11023 int pop_sounds_count = 6;
11024 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
11025
11026
11027 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
11028 string sound_name = pop_sounds[ sound_idx ];
11030
11031
11032 magazine.ServerAddAmmoCount(-1);
11033
11034
11035 float min_temp_to_explode = 100;
11036
11037 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
11038 {
11040 }
11041 }
11042
11043
11044 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
11045 {
11046 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
11047
11048 const int CHANCE_DAMAGE_CARGO = 4;
11049 const int CHANCE_DAMAGE_ATTACHMENT = 1;
11050 const int CHANCE_DAMAGE_NOTHING = 2;
11051
11053 {
11054 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
11055 int chances;
11056 int rnd;
11057
11058 if (GetInventory().GetCargo())
11059 {
11060 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
11061 rnd = Math.RandomInt(0,chances);
11062
11063 if (rnd < CHANCE_DAMAGE_CARGO)
11064 {
11066 }
11067 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
11068 {
11070 }
11071 }
11072 else
11073 {
11074 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
11075 rnd = Math.RandomInt(0,chances);
11076
11077 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
11078 {
11080 }
11081 }
11082 }
11083 }
11084
11086 {
11087 if (GetInventory().GetCargo())
11088 {
11089 int item_count = GetInventory().GetCargo().GetItemCount();
11090 if (item_count > 0)
11091 {
11092 int random_pick = Math.RandomInt(0, item_count);
11094 if (!item.IsExplosive())
11095 {
11096 item.AddHealth("","",damage);
11097 return true;
11098 }
11099 }
11100 }
11101 return false;
11102 }
11103
11105 {
11106 int attachment_count = GetInventory().AttachmentCount();
11107 if (attachment_count > 0)
11108 {
11109 int random_pick = Math.RandomInt(0, attachment_count);
11110 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
11111 if (!attachment.IsExplosive())
11112 {
11113 attachment.AddHealth("","",damage);
11114 return true;
11115 }
11116 }
11117 return false;
11118 }
11119
11121 {
11123 }
11124
11126 {
11128 return GetInventory().CanRemoveEntity();
11129
11130 return false;
11131 }
11132
11134 {
11136 return;
11137
11139 {
11140 if (ScriptInputUserData.CanStoreInputUserData())
11141 {
11142 ScriptInputUserData ctx = new ScriptInputUserData;
11147 ctx.
Write(destination_entity);
11149 ctx.
Write(slot_id);
11151 }
11152 }
11153 else if (!
GetGame().IsMultiplayer())
11154 {
11156 }
11157 }
11158
11160 {
11162 return;
11163
11164 float split_quantity_new;
11168 InventoryLocation loc = new InventoryLocation;
11169
11170 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
11171 {
11173 split_quantity_new = stack_max;
11174 else
11176
11177 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
11178 if (new_item)
11179 {
11180 new_item.SetResultOfSplit(true);
11181 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11183 new_item.SetQuantity(split_quantity_new);
11184 }
11185 }
11186 else if (destination_entity && slot_id == -1)
11187 {
11188 if (quantity > stack_max)
11189 split_quantity_new = stack_max;
11190 else
11191 split_quantity_new = quantity;
11192
11194 {
11197 }
11198
11199 if (new_item)
11200 {
11201 new_item.SetResultOfSplit(true);
11202 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11204 new_item.SetQuantity(split_quantity_new);
11205 }
11206 }
11207 else
11208 {
11209 if (stack_max != 0)
11210 {
11212 {
11214 }
11215
11216 if (split_quantity_new == 0)
11217 {
11218 if (!
GetGame().IsMultiplayer())
11219 player.PhysicalPredictiveDropItem(this);
11220 else
11221 player.ServerDropEntity(this);
11222 return;
11223 }
11224
11226
11227 if (new_item)
11228 {
11229 new_item.SetResultOfSplit(true);
11230 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11232 new_item.SetQuantity(stack_max);
11233 new_item.PlaceOnSurface();
11234 }
11235 }
11236 }
11237 }
11238
11240 {
11242 return;
11243
11244 float split_quantity_new;
11248 InventoryLocation loc = new InventoryLocation;
11249
11250 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
11251 {
11253 split_quantity_new = stack_max;
11254 else
11256
11257 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
11258 if (new_item)
11259 {
11260 new_item.SetResultOfSplit(true);
11261 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11263 new_item.SetQuantity(split_quantity_new);
11264 }
11265 }
11266 else if (destination_entity && slot_id == -1)
11267 {
11268 if (quantity > stack_max)
11269 split_quantity_new = stack_max;
11270 else
11271 split_quantity_new = quantity;
11272
11274 {
11277 }
11278
11279 if (new_item)
11280 {
11281 new_item.SetResultOfSplit(true);
11282 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11284 new_item.SetQuantity(split_quantity_new);
11285 }
11286 }
11287 else
11288 {
11289 if (stack_max != 0)
11290 {
11292 {
11294 }
11295
11297
11298 if (new_item)
11299 {
11300 new_item.SetResultOfSplit(true);
11301 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11303 new_item.SetQuantity(stack_max);
11304 new_item.PlaceOnSurface();
11305 }
11306 }
11307 }
11308 }
11309
11311 {
11313 return;
11314
11316 {
11317 if (ScriptInputUserData.CanStoreInputUserData())
11318 {
11319 ScriptInputUserData ctx = new ScriptInputUserData;
11324 dst.WriteToContext(ctx);
11326 }
11327 }
11328 else if (!
GetGame().IsMultiplayer())
11329 {
11331 }
11332 }
11333
11335 {
11337 return;
11338
11340 {
11341 if (ScriptInputUserData.CanStoreInputUserData())
11342 {
11343 ScriptInputUserData ctx = new ScriptInputUserData;
11348 ctx.
Write(destination_entity);
11354 }
11355 }
11356 else if (!
GetGame().IsMultiplayer())
11357 {
11359 }
11360 }
11361
11363 {
11365 }
11366
11368 {
11370 return this;
11371
11373 float split_quantity_new;
11375 if (dst.IsValid())
11376 {
11377 int slot_id = dst.GetSlot();
11379
11380 if (quantity > stack_max)
11381 split_quantity_new = stack_max;
11382 else
11383 split_quantity_new = quantity;
11384
11386
11387 if (new_item)
11388 {
11389 new_item.SetResultOfSplit(true);
11390 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11393 }
11394
11395 return new_item;
11396 }
11397
11398 return null;
11399 }
11400
11402 {
11404 return;
11405
11407 float split_quantity_new;
11409 if (destination_entity)
11410 {
11412 if (quantity > stackable)
11413 split_quantity_new = stackable;
11414 else
11415 split_quantity_new = quantity;
11416
11417 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
11418 if (new_item)
11419 {
11420 new_item.SetResultOfSplit(true);
11421 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11423 new_item.SetQuantity(split_quantity_new);
11424 }
11425 }
11426 }
11427
11429 {
11431 return;
11432
11434 {
11435 if (ScriptInputUserData.CanStoreInputUserData())
11436 {
11437 ScriptInputUserData ctx = new ScriptInputUserData;
11442 ItemBase destination_entity =
this;
11443 ctx.
Write(destination_entity);
11447 }
11448 }
11449 else if (!
GetGame().IsMultiplayer())
11450 {
11452 }
11453 }
11454
11456 {
11458 return;
11459
11461 float split_quantity_new;
11463 if (player)
11464 {
11466 if (quantity > stackable)
11467 split_quantity_new = stackable;
11468 else
11469 split_quantity_new = quantity;
11470
11471 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
11472 new_item =
ItemBase.Cast(in_hands);
11473 if (new_item)
11474 {
11475 new_item.SetResultOfSplit(true);
11476 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11478 new_item.SetQuantity(split_quantity_new);
11479 }
11480 }
11481 }
11482
11484 {
11486 return;
11487
11489 float split_quantity_new = Math.Floor(quantity * 0.5);
11490
11492
11493 if (new_item)
11494 {
11495 if (new_item.GetQuantityMax() < split_quantity_new)
11496 {
11497 split_quantity_new = new_item.GetQuantityMax();
11498 }
11499
11500 new_item.SetResultOfSplit(true);
11501 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11502
11504 {
11507 }
11508 else
11509 {
11512 }
11513 }
11514 }
11515
11517 {
11519 return;
11520
11522 float split_quantity_new = Math.Floor(quantity / 2);
11523
11524 InventoryLocation invloc = new InventoryLocation;
11526
11528 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
11529
11530 if (new_item)
11531 {
11532 if (new_item.GetQuantityMax() < split_quantity_new)
11533 {
11534 split_quantity_new = new_item.GetQuantityMax();
11535 }
11537 {
11540 }
11541 else
11542 {
11545 }
11546 }
11547 }
11548
11551 {
11552 SetWeightDirty();
11554
11555 if (parent)
11556 parent.OnAttachmentQuantityChangedEx(this, delta);
11557
11559 {
11561 {
11563 }
11565 {
11566 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
11568 }
11569 }
11570
11571 }
11572
11575 {
11576
11577 }
11578
11581 {
11583 }
11584
11586 {
11587 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
11588
11590 {
11591 if (newLevel == GameConstants.STATE_RUINED)
11592 {
11594 EntityAI parent = GetHierarchyParent();
11595 if (parent && parent.IsFireplace())
11596 {
11597 CargoBase cargo = GetInventory().GetCargo();
11598 if (cargo)
11599 {
11601 {
11603 }
11604 }
11605 }
11606 }
11607
11609 {
11610
11612 return;
11613 }
11614
11615 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
11616 {
11618 }
11619 }
11620 }
11621
11622
11624 {
11625 super.OnRightClick();
11626
11628 {
11630 {
11631 if (ScriptInputUserData.CanStoreInputUserData())
11632 {
11633 vector m4[4];
11635
11636 EntityAI root = GetHierarchyRoot();
11637
11638 InventoryLocation dst = new InventoryLocation;
11640 {
11641 if (root)
11642 {
11643 root.GetTransform(m4);
11645 }
11646 else
11647 GetInventory().GetCurrentInventoryLocation(dst);
11648 }
11649 else
11650 {
11652
11653
11654 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
11655 {
11656 if (root)
11657 {
11658 root.GetTransform(m4);
11660 }
11661 else
11662 GetInventory().GetCurrentInventoryLocation(dst);
11663 }
11664 else
11665 {
11666 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
11667 }
11668 }
11669
11670 ScriptInputUserData ctx = new ScriptInputUserData;
11678 }
11679 }
11680 else if (!
GetGame().IsMultiplayer())
11681 {
11683 }
11684 }
11685 }
11686
11687 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
11688 {
11689
11690 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
11691 return false;
11692
11693 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
11694 return false;
11695
11696
11698 return false;
11699
11700
11701 Magazine mag = Magazine.Cast(this);
11702 if (mag)
11703 {
11704 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
11705 return false;
11706
11707 if (stack_max_limit)
11708 {
11709 Magazine other_mag = Magazine.Cast(other_item);
11710 if (other_item)
11711 {
11712 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
11713 return false;
11714 }
11715
11716 }
11717 }
11718 else
11719 {
11720
11722 return false;
11723
11725 return false;
11726 }
11727
11728 PlayerBase player = null;
11729 if (CastTo(player, GetHierarchyRootPlayer()))
11730 {
11731 if (player.GetInventory().HasAttachment(this))
11732 return false;
11733
11734 if (player.IsItemsToDelete())
11735 return false;
11736 }
11737
11738 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
11739 return false;
11740
11741 int slotID;
11743 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
11744 return false;
11745
11746 return true;
11747 }
11748
11750 {
11752 }
11753
11755 {
11756 return m_IsResultOfSplit;
11757 }
11758
11760 {
11761 m_IsResultOfSplit = value;
11762 }
11763
11765 {
11767 }
11768
11770 {
11771 float other_item_quantity = other_item.GetQuantity();
11772 float this_free_space;
11773
11775
11777
11778 if (other_item_quantity > this_free_space)
11779 {
11780 return this_free_space;
11781 }
11782 else
11783 {
11784 return other_item_quantity;
11785 }
11786 }
11787
11789 {
11791 }
11792
11794 {
11796 return;
11797
11798 if (!IsMagazine() && other_item)
11799 {
11801 if (quantity_used != 0)
11802 {
11803 float hp1 = GetHealth01("","");
11804 float hp2 = other_item.GetHealth01("","");
11805 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
11806 hpResult = hpResult / (
GetQuantity() + quantity_used);
11807
11808 hpResult *= GetMaxHealth();
11809 Math.Round(hpResult);
11810 SetHealth("", "Health", hpResult);
11811
11813 other_item.AddQuantity(-quantity_used);
11814 }
11815 }
11817 }
11818
11820 {
11821 #ifdef SERVER
11822 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
11823 GetHierarchyParent().IncreaseLifetimeUp();
11824 #endif
11825 };
11826
11828 {
11829 PlayerBase p = PlayerBase.Cast(player);
11830
11831 array<int> recipesIds = p.m_Recipes;
11832 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11833 if (moduleRecipesManager)
11834 {
11835 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
11836 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
11837 }
11838
11839 for (int i = 0;i < recipesIds.Count(); i++)
11840 {
11841 int key = recipesIds.Get(i);
11842 string recipeName = moduleRecipesManager.GetRecipeName(key);
11844 }
11845 }
11846
11847
11848 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
11849 {
11850 super.GetDebugActions(outputList);
11851
11852
11857
11858
11862
11866
11867
11870
11871
11873 {
11876 }
11877
11879
11882
11886 }
11887
11888
11889
11890
11892 {
11893 super.OnAction(action_id, player, ctx);
11894 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11895 {
11896 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11897 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11898 PlayerBase p = PlayerBase.Cast(player);
11899 if (
EActions.RECIPES_RANGE_START < 1000)
11900 {
11901 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11902 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11903 }
11904 }
11905 #ifndef SERVER
11906 else if (action_id ==
EActions.WATCH_PLAYER)
11907 {
11908 PluginDeveloper.SetDeveloperItemClientEx(player);
11909 }
11910 #endif
11912 {
11913 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11914 {
11915 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11916 OnDebugButtonPressServer(id + 1);
11917 }
11918
11919 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11920 {
11921 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11923 }
11924
11925 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11926 {
11927 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11929 }
11930
11931 else if (action_id ==
EActions.ADD_QUANTITY)
11932 {
11933 if (IsMagazine())
11934 {
11935 Magazine mag = Magazine.Cast(this);
11936 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11937 }
11938 else
11939 {
11941 }
11942
11943 if (m_EM)
11944 {
11945 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11946 }
11947
11948 }
11949
11950 else if (action_id ==
EActions.REMOVE_QUANTITY)
11951 {
11952 if (IsMagazine())
11953 {
11954 Magazine mag2 = Magazine.Cast(this);
11955 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11956 }
11957 else
11958 {
11960 }
11961 if (m_EM)
11962 {
11963 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11964 }
11965
11966 }
11967
11968 else if (action_id ==
EActions.SET_QUANTITY_0)
11969 {
11971
11972 if (m_EM)
11973 {
11974 m_EM.SetEnergy(0);
11975 }
11976 }
11977
11978 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11979 {
11981
11982 if (m_EM)
11983 {
11984 m_EM.SetEnergy(m_EM.GetEnergyMax());
11985 }
11986 }
11987
11988 else if (action_id ==
EActions.ADD_HEALTH)
11989 {
11990 AddHealth("","",GetMaxHealth("","Health")/5);
11991 }
11992 else if (action_id ==
EActions.REMOVE_HEALTH)
11993 {
11994 AddHealth("","",-GetMaxHealth("","Health")/5);
11995 }
11996 else if (action_id ==
EActions.DESTROY_HEALTH)
11997 {
11998 SetHealth01("","",0);
11999 }
12000 else if (action_id ==
EActions.WATCH_ITEM)
12001 {
12003 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
12004 #ifdef DEVELOPER
12005 SetDebugDeveloper_item(this);
12006 #endif
12007 }
12008
12009 else if (action_id ==
EActions.ADD_TEMPERATURE)
12010 {
12011 AddTemperature(20);
12012
12013 }
12014
12015 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
12016 {
12017 AddTemperature(-20);
12018
12019 }
12020
12021 else if (action_id ==
EActions.FLIP_FROZEN)
12022 {
12023 SetFrozen(!GetIsFrozen());
12024
12025 }
12026
12027 else if (action_id ==
EActions.ADD_WETNESS)
12028 {
12030
12031 }
12032
12033 else if (action_id ==
EActions.REMOVE_WETNESS)
12034 {
12036
12037 }
12038
12039 else if (action_id ==
EActions.LIQUIDTYPE_UP)
12040 {
12043
12044
12045 }
12046
12047 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
12048 {
12051 }
12052
12053 else if (action_id ==
EActions.MAKE_SPECIAL)
12054 {
12055 auto debugParams = DebugSpawnParams.WithPlayer(player);
12056 OnDebugSpawnEx(debugParams);
12057 }
12058
12059 else if (action_id ==
EActions.DELETE)
12060 {
12061 Delete();
12062 }
12063
12064 }
12065
12066
12067 return false;
12068 }
12069
12070
12071
12072
12076
12079
12080
12081
12083 {
12084 return false;
12085 }
12086
12087
12089 {
12090 return true;
12091 }
12092
12093
12095 {
12096 return true;
12097 }
12098
12099
12100
12102 {
12103 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
12105 }
12106
12109 {
12110 return null;
12111 }
12112
12114 {
12115 return false;
12116 }
12117
12119 {
12120 return false;
12121 }
12122
12126
12127
12129 {
12130 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
12131 return module_repairing.CanRepair(this, item_repair_kit);
12132 }
12133
12134
12135 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
12136 {
12137 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
12138 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
12139 }
12140
12141
12143 {
12144
12145
12146
12147
12148
12149
12150
12151
12152 return 1;
12153 }
12154
12155
12156
12158 {
12160 }
12161
12162
12163
12165 {
12167 }
12168
12169
12178 {
12179 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12180
12181 if (player)
12182 {
12183 player.MessageStatus(text);
12184 }
12185 }
12186
12187
12196 {
12197 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12198
12199 if (player)
12200 {
12201 player.MessageAction(text);
12202 }
12203 }
12204
12205
12214 {
12215 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12216
12217 if (player)
12218 {
12219 player.MessageFriendly(text);
12220 }
12221 }
12222
12223
12232 {
12233 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12234
12235 if (player)
12236 {
12237 player.MessageImportant(text);
12238 }
12239 }
12240
12242 {
12243 return true;
12244 }
12245
12246
12247 override bool KindOf(
string tag)
12248 {
12249 bool found = false;
12250 string item_name = this.
GetType();
12253
12254 int array_size = item_tag_array.Count();
12255 for (int i = 0; i < array_size; i++)
12256 {
12257 if (item_tag_array.Get(i) == tag)
12258 {
12259 found = true;
12260 break;
12261 }
12262 }
12263 return found;
12264 }
12265
12266
12268 {
12269
12270 super.OnRPC(sender, rpc_type,ctx);
12271
12272
12273 switch (rpc_type)
12274 {
12275 #ifndef SERVER
12276 case ERPCs.RPC_SOUND_LOCK_ATTACH:
12277 Param2<bool, string> p = new Param2<bool, string>(false, "");
12278
12280 return;
12281
12282 bool play = p.param1;
12283 string soundSet = p.param2;
12284
12285 if (play)
12286 {
12288 {
12290 {
12292 }
12293 }
12294 else
12295 {
12297 }
12298 }
12299 else
12300 {
12302 }
12303
12304 break;
12305 #endif
12306
12307 }
12308
12310 {
12312 }
12313 }
12314
12315
12316
12317
12319 {
12320 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
12321 return plugin.GetID(
name);
12322 }
12323
12325 {
12326 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
12327 return plugin.GetName(id);
12328 }
12329
12332 {
12333
12334
12335 int varFlags;
12336 if (!ctx.
Read(varFlags))
12337 return;
12338
12339 if (varFlags & ItemVariableFlags.FLOAT)
12340 {
12342 }
12343 }
12344
12346 {
12347
12348 super.SerializeNumericalVars(floats_out);
12349
12350
12351
12353 {
12355 }
12356
12358 {
12360 }
12361
12363 {
12365 }
12366
12368 {
12373 }
12374
12376 {
12378 }
12379 }
12380
12382 {
12383
12384 super.DeSerializeNumericalVars(floats);
12385
12386
12387 int index = 0;
12388 int mask = Math.Round(floats.Get(index));
12389
12390 index++;
12391
12393 {
12395 {
12397 }
12398 else
12399 {
12400 float quantity = floats.Get(index);
12401 SetQuantity(quantity,
true,
false,
false,
false);
12402 }
12403 index++;
12404 }
12405
12407 {
12408 float wet = floats.Get(index);
12410 index++;
12411 }
12412
12414 {
12415 int liquidtype = Math.Round(floats.Get(index));
12417 index++;
12418 }
12419
12421 {
12423 index++;
12425 index++;
12427 index++;
12429 index++;
12430 }
12431
12433 {
12434 int cleanness = Math.Round(floats.Get(index));
12436 index++;
12437 }
12438 }
12439
12441 {
12442 super.WriteVarsToCTX(ctx);
12443
12444
12446 {
12448 }
12449
12451 {
12453 }
12454
12456 {
12458 }
12459
12461 {
12462 int r,g,b,a;
12468 }
12469
12471 {
12473 }
12474 }
12475
12477 {
12478 if (!super.ReadVarsFromCTX(ctx,version))
12479 return false;
12480
12481 int intValue;
12482 float value;
12483
12484 if (version < 140)
12485 {
12486 if (!ctx.
Read(intValue))
12487 return false;
12488
12489 m_VariablesMask = intValue;
12490 }
12491
12493 {
12494 if (!ctx.
Read(value))
12495 return false;
12496
12498 {
12500 }
12501 else
12502 {
12504 }
12505 }
12506
12507 if (version < 140)
12508 {
12510 {
12511 if (!ctx.
Read(value))
12512 return false;
12513 SetTemperatureDirect(value);
12514 }
12515 }
12516
12518 {
12519 if (!ctx.
Read(value))
12520 return false;
12522 }
12523
12525 {
12526 if (!ctx.
Read(intValue))
12527 return false;
12529 }
12530
12532 {
12533 int r,g,b,a;
12535 return false;
12537 return false;
12539 return false;
12541 return false;
12542
12544 }
12545
12547 {
12548 if (!ctx.
Read(intValue))
12549 return false;
12551 }
12552
12553 if (version >= 138 && version < 140)
12554 {
12556 {
12557 if (!ctx.
Read(intValue))
12558 return false;
12559 SetFrozen(intValue);
12560 }
12561 }
12562
12563 return true;
12564 }
12565
12566
12568 {
12571 {
12573 }
12574
12575 if (!super.OnStoreLoad(ctx, version))
12576 {
12578 return false;
12579 }
12580
12581 if (version >= 114)
12582 {
12583 bool hasQuickBarIndexSaved;
12584
12585 if (!ctx.
Read(hasQuickBarIndexSaved))
12586 {
12588 return false;
12589 }
12590
12591 if (hasQuickBarIndexSaved)
12592 {
12593 int itmQBIndex;
12594
12595
12596 if (!ctx.
Read(itmQBIndex))
12597 {
12599 return false;
12600 }
12601
12602 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
12603 if (itmQBIndex != -1 && parentPlayer)
12604 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
12605 }
12606 }
12607 else
12608 {
12609
12610 PlayerBase player;
12611 int itemQBIndex;
12612 if (version ==
int.
MAX)
12613 {
12614 if (!ctx.
Read(itemQBIndex))
12615 {
12617 return false;
12618 }
12619 }
12620 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
12621 {
12622
12623 if (!ctx.
Read(itemQBIndex))
12624 {
12626 return false;
12627 }
12628 if (itemQBIndex != -1 && player)
12629 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
12630 }
12631 }
12632
12633 if (version < 140)
12634 {
12635
12636 if (!LoadVariables(ctx, version))
12637 {
12639 return false;
12640 }
12641 }
12642
12643
12645 {
12647 return false;
12648 }
12649 if (version >= 132)
12650 {
12652 if (raib)
12653 {
12655 {
12657 return false;
12658 }
12659 }
12660 }
12661
12663 return true;
12664 }
12665
12666
12667
12669 {
12670 super.OnStoreSave(ctx);
12671
12672 PlayerBase player;
12673 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
12674 {
12676
12677 int itemQBIndex = -1;
12678 itemQBIndex = player.FindQuickBarEntityIndex(this);
12679 ctx.
Write(itemQBIndex);
12680 }
12681 else
12682 {
12684 }
12685
12687
12689 if (raib)
12690 {
12692 }
12693 }
12694
12695
12697 {
12698 super.AfterStoreLoad();
12699
12701 {
12703 }
12704
12706 {
12709 }
12710 }
12711
12713 {
12714 super.EEOnAfterLoad();
12715
12717 {
12719 }
12720
12723 }
12724
12726 {
12727 return false;
12728 }
12729
12730
12731
12733 {
12735 {
12736 #ifdef PLATFORM_CONSOLE
12737
12739 {
12741 if (menu)
12742 {
12744 }
12745 }
12746 #endif
12747 }
12748
12750 {
12753 }
12754
12756 {
12757 SetWeightDirty();
12759 }
12761 {
12764 }
12765
12767 {
12770 }
12772 {
12775 }
12776
12777 super.OnVariablesSynchronized();
12778 }
12779
12780
12781
12783 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
12784 {
12785 if (!IsServerCheck(allow_client))
12786 return false;
12787
12789 return false;
12790
12793
12794 if (value <= (min + 0.001))
12795 value = min;
12796
12797 if (value == min)
12798 {
12799 if (destroy_config)
12800 {
12801 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
12802 if (dstr)
12803 {
12805 this.Delete();
12806 return true;
12807 }
12808 }
12809 else if (destroy_forced)
12810 {
12812 this.Delete();
12813 return true;
12814 }
12815
12817 }
12818
12821
12823 {
12825
12826 if (delta)
12828 }
12829
12831
12832 return false;
12833 }
12834
12835
12837 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
12838 {
12840 }
12841
12843 {
12846 }
12847
12849 {
12852 }
12853
12856 {
12857 float value_clamped = Math.Clamp(value, 0, 1);
12859 SetQuantity(result, destroy_config, destroy_forced);
12860 }
12861
12862
12865 {
12867 }
12868
12870 {
12872 }
12873
12874
12875
12876
12877
12878
12879
12880
12881
12882
12884 {
12885 int slot = -1;
12886 if (GetInventory())
12887 {
12888 InventoryLocation il = new InventoryLocation;
12889 GetInventory().GetCurrentInventoryLocation(il);
12891 }
12892
12894 }
12895
12897 {
12898 float quantity_max = 0;
12899
12901 {
12902 if (attSlotID != -1)
12903 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12904
12905 if (quantity_max <= 0)
12907 }
12908
12909 if (quantity_max <= 0)
12911
12912 return quantity_max;
12913 }
12914
12916 {
12918 }
12919
12921 {
12923 }
12924
12925
12927 {
12929 }
12930
12932 {
12934 }
12935
12937 {
12939 }
12940
12941
12943 {
12944
12945 float weightEx = GetWeightEx();
12946 float special = GetInventoryAndCargoWeight();
12947 return weightEx - special;
12948 }
12949
12950
12952 {
12954 }
12955
12957 {
12959 {
12960 #ifdef DEVELOPER
12961 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12962 {
12963 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12965 }
12966 #endif
12967
12968 return GetQuantity() * GetConfigWeightModified();
12969 }
12970 else if (HasEnergyManager())
12971 {
12972 #ifdef DEVELOPER
12973 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12974 {
12975 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12976 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12977 }
12978 #endif
12979 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12980 }
12981 else
12982 {
12983 #ifdef DEVELOPER
12984 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12985 {
12986 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12987 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12988 }
12989 #endif
12990 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12991 }
12992 }
12993
12996 {
12997 int item_count = 0;
12999
13000 if (GetInventory().GetCargo() != NULL)
13001 {
13002 item_count = GetInventory().GetCargo().GetItemCount();
13003 }
13004
13005 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
13006 {
13007 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
13008 if (item)
13009 item_count += item.GetNumberOfItems();
13010 }
13011 return item_count;
13012 }
13013
13016 {
13017 float weight = 0;
13018 float wetness = 1;
13019 if (include_wetness)
13022 {
13023 weight = wetness * m_ConfigWeight;
13024 }
13026 {
13027 weight = 1;
13028 }
13029 return weight;
13030 }
13031
13032
13033
13035 {
13036 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
13037 {
13038 GameInventory inv = GetInventory();
13039 array<EntityAI> items = new array<EntityAI>;
13041 for (int i = 0; i < items.Count(); i++)
13042 {
13044 if (item)
13045 {
13047 }
13048 }
13049 }
13050 }
13051
13052
13053
13054
13056 {
13057 float energy = 0;
13058 if (HasEnergyManager())
13059 {
13060 energy = GetCompEM().GetEnergy();
13061 }
13062 return energy;
13063 }
13064
13065
13067 {
13068 super.OnEnergyConsumed();
13069
13071 }
13072
13074 {
13075 super.OnEnergyAdded();
13076
13078 }
13079
13080
13082 {
13083 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
13084 {
13086 {
13087 float energy_0to1 = GetCompEM().GetEnergy0To1();
13089 }
13090 }
13091 }
13092
13093
13095 {
13096 return ConfigGetFloat("heatIsolation");
13097 }
13098
13100 {
13102 }
13103
13105 {
13106 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
13107 if (
GetGame().ConfigIsExisting(paramPath))
13109
13110 return 0.0;
13111 }
13112
13114 {
13115 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
13116 if (
GetGame().ConfigIsExisting(paramPath))
13118
13119 return 0.0;
13120 }
13121
13122 override void SetWet(
float value,
bool allow_client =
false)
13123 {
13124 if (!IsServerCheck(allow_client))
13125 return;
13126
13129
13131
13132 m_VarWet = Math.Clamp(value, min, max);
13133
13135 {
13138 }
13139 }
13140
13141 override void AddWet(
float value)
13142 {
13144 }
13145
13147 {
13149 }
13150
13152 {
13154 }
13155
13157 {
13159 }
13160
13162 {
13164 }
13165
13167 {
13169 }
13170
13171 override void OnWetChanged(
float newVal,
float oldVal)
13172 {
13175 if (newLevel != oldLevel)
13176 {
13178 }
13179 }
13180
13182 {
13183 SetWeightDirty();
13184 }
13185
13187 {
13188 return GetWetLevelInternal(
m_VarWet);
13189 }
13190
13191
13192
13194 {
13196 }
13197
13199 {
13201 }
13202
13204 {
13206 }
13207
13209 {
13211 }
13212
13213
13214
13216 {
13217 if (ConfigIsExisting("itemModelLength"))
13218 {
13219 return ConfigGetFloat("itemModelLength");
13220 }
13221 return 0;
13222 }
13223
13225 {
13226 if (ConfigIsExisting("itemAttachOffset"))
13227 {
13228 return ConfigGetFloat("itemAttachOffset");
13229 }
13230 return 0;
13231 }
13232
13233 override void SetCleanness(
int value,
bool allow_client =
false)
13234 {
13235 if (!IsServerCheck(allow_client))
13236 return;
13237
13239
13241
13244 }
13245
13247 {
13249 }
13250
13252 {
13253 return true;
13254 }
13255
13256
13257
13258
13260 {
13262 }
13263
13265 {
13267 }
13268
13269
13270
13271
13272 override void SetColor(
int r,
int g,
int b,
int a)
13273 {
13279 }
13281 override void GetColor(out
int r,out
int g,out
int b,out
int a)
13282 {
13287 }
13288
13290 {
13292 }
13293
13296 {
13297 int r,g,b,a;
13299 r = r/255;
13300 g = g/255;
13301 b = b/255;
13302 a = a/255;
13303 return MiscGameplayFunctions.GetColorString(r, g, b, a);
13304 }
13305
13306
13307
13308 override void SetLiquidType(
int value,
bool allow_client =
false)
13309 {
13310 if (!IsServerCheck(allow_client))
13311 return;
13312
13317 }
13318
13320 {
13321 return ConfigGetInt("varLiquidTypeInit");
13322 }
13323
13325 {
13327 }
13328
13330 {
13332 SetFrozen(false);
13333 }
13334
13337 {
13338 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
13339 }
13340
13341
13344 {
13345 PlayerBase nplayer;
13346 if (PlayerBase.CastTo(nplayer, player))
13347 {
13349
13350 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
13351 }
13352 }
13353
13354
13357 {
13358 PlayerBase nplayer;
13359 if (PlayerBase.CastTo(nplayer,player))
13360 {
13361
13362 nplayer.SetEnableQuickBarEntityShortcut(this,false);
13363
13364 }
13365
13366
13367 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
13368
13369
13370 if (HasEnergyManager())
13371 {
13372 GetCompEM().UpdatePlugState();
13373 }
13374 }
13375
13376
13378 {
13379 super.OnPlacementStarted(player);
13380
13382 }
13383
13384 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
13385 {
13387 {
13388 m_AdminLog.OnPlacementComplete(player,
this);
13389 }
13390
13391 super.OnPlacementComplete(player, position, orientation);
13392 }
13393
13394
13395
13396
13397
13399 {
13401 {
13402 return true;
13403 }
13404 else
13405 {
13406 return false;
13407 }
13408 }
13409
13410
13412 {
13414 {
13416 }
13417 }
13418
13419
13421 {
13423 }
13424
13426 {
13428 }
13429
13430 override void InsertAgent(
int agent,
float count = 1)
13431 {
13432 if (count < 1)
13433 return;
13434
13436 }
13437
13440 {
13442 }
13443
13444
13446 {
13448 }
13449
13450
13451
13452
13453
13454
13455
13456
13457
13458
13459
13460
13461
13462
13463
13464
13465
13466
13467
13468
13469
13470
13471
13472
13473
13474
13475
13476
13477
13478
13479
13480
13481
13482
13483
13484
13485
13486
13487
13488
13489
13490
13492 {
13494 return false;
13495 return true;
13496 }
13497
13499 {
13500
13502 }
13503
13504
13507 {
13508 super.CheckForRoofLimited(timeTresholdMS);
13509
13511 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
13512 {
13513 m_PreviousRoofTestTime = time;
13514 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
13515 }
13516 }
13517
13518
13520 {
13522 {
13523 return 0;
13524 }
13525
13526 if (GetInventory().GetAttachmentSlotsCount() != 0)
13527 {
13528 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
13529 if (filter)
13530 return filter.GetProtectionLevel(type, false, system);
13531 else
13532 return 0;
13533 }
13534
13535 string subclassPath, entryName;
13536
13537 switch (type)
13538 {
13540 entryName = "biological";
13541 break;
13543 entryName = "chemical";
13544 break;
13545 default:
13546 entryName = "biological";
13547 break;
13548 }
13549
13550 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
13551
13553 }
13554
13555
13556
13559 {
13560 if (!IsMagazine())
13562
13564 }
13565
13566
13567
13568
13569
13574 {
13575 return true;
13576 }
13577
13579 {
13581 }
13582
13583
13584
13585
13586
13588 {
13589 if (parent)
13590 {
13591 if (parent.IsInherited(DayZInfected))
13592 return true;
13593
13594 if (!parent.IsRuined())
13595 return true;
13596 }
13597
13598 return true;
13599 }
13600
13602 {
13603 if (!super.CanPutAsAttachment(parent))
13604 {
13605 return false;
13606 }
13607
13608 if (!IsRuined() && !parent.IsRuined())
13609 {
13610 return true;
13611 }
13612
13613 return false;
13614 }
13615
13617 {
13618
13619
13620
13621
13622 return super.CanReceiveItemIntoCargo(item);
13623 }
13624
13626 {
13627
13628
13629
13630
13631 GameInventory attachmentInv = attachment.GetInventory();
13633 {
13634 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
13635 return false;
13636 }
13637
13638 InventoryLocation loc = new InventoryLocation();
13639 attachment.GetInventory().GetCurrentInventoryLocation(loc);
13640 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
13641 return false;
13642
13643 return super.CanReceiveAttachment(attachment, slotId);
13644 }
13645
13647 {
13648 if (!super.CanReleaseAttachment(attachment))
13649 return false;
13650
13651 return GetInventory().AreChildrenAccessible();
13652 }
13653
13654
13655
13656
13657
13658
13659
13660
13661
13662
13663
13664
13665
13666
13667
13668
13669
13670
13671
13672
13673
13675 {
13676 int id = muzzle_owner.GetMuzzleID();
13677 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
13678
13679 if (WPOF_array)
13680 {
13681 for (int i = 0; i < WPOF_array.Count(); i++)
13682 {
13683 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
13684
13685 if (WPOF)
13686 {
13687 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
13688 }
13689 }
13690 }
13691 }
13692
13693
13695 {
13696 int id = muzzle_owner.GetMuzzleID();
13698
13699 if (WPOBE_array)
13700 {
13701 for (int i = 0; i < WPOBE_array.Count(); i++)
13702 {
13703 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
13704
13705 if (WPOBE)
13706 {
13707 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13708 }
13709 }
13710 }
13711 }
13712
13713
13715 {
13716 int id = muzzle_owner.GetMuzzleID();
13717 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13718
13719 if (WPOOH_array)
13720 {
13721 for (int i = 0; i < WPOOH_array.Count(); i++)
13722 {
13723 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13724
13725 if (WPOOH)
13726 {
13727 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13728 }
13729 }
13730 }
13731 }
13732
13733
13735 {
13736 int id = muzzle_owner.GetMuzzleID();
13737 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13738
13739 if (WPOOH_array)
13740 {
13741 for (int i = 0; i < WPOOH_array.Count(); i++)
13742 {
13743 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13744
13745 if (WPOOH)
13746 {
13747 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13748 }
13749 }
13750 }
13751 }
13752
13753
13755 {
13756 int id = muzzle_owner.GetMuzzleID();
13757 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13758
13759 if (WPOOH_array)
13760 {
13761 for (int i = 0; i < WPOOH_array.Count(); i++)
13762 {
13763 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13764
13765 if (WPOOH)
13766 {
13767 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13768 }
13769 }
13770 }
13771 }
13772
13773
13774
13776 {
13778 {
13779 return true;
13780 }
13781
13782 return false;
13783 }
13784
13786 {
13788 {
13789 return true;
13790 }
13791
13792 return false;
13793 }
13794
13796 {
13798 {
13799 return true;
13800 }
13801
13802 return false;
13803 }
13804
13806 {
13807 return false;
13808 }
13809
13812 {
13813 return UATimeSpent.DEFAULT_DEPLOY;
13814 }
13815
13816
13817
13818
13820 {
13822 SetSynchDirty();
13823 }
13824
13826 {
13828 }
13829
13830
13832 {
13833 return false;
13834 }
13835
13838 {
13839 string att_type = "None";
13840
13841 if (ConfigIsExisting("soundAttType"))
13842 {
13843 att_type = ConfigGetString("soundAttType");
13844 }
13845
13847 }
13848
13850 {
13852 }
13853
13854
13855
13856
13857
13861
13863 {
13866
13868 }
13869
13870
13872 {
13874 return;
13875
13877
13880
13883
13884 SoundParameters params = new SoundParameters();
13888 }
13889
13890
13892 {
13894 return;
13895
13897 SetSynchDirty();
13898
13901 }
13902
13903
13905 {
13907 return;
13908
13910 SetSynchDirty();
13911
13914 }
13915
13917 {
13919 }
13920
13922 {
13924 }
13925
13928 {
13929 if (!
GetGame().IsDedicatedServer())
13930 {
13931 if (ConfigIsExisting("attachSoundSet"))
13932 {
13933 string cfg_path = "";
13934 string soundset = "";
13935 string type_name =
GetType();
13936
13939 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13940 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13941
13942 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13943 {
13944 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13945 {
13946 if (cfg_slot_array[i] == slot_type)
13947 {
13948 soundset = cfg_soundset_array[i];
13949 break;
13950 }
13951 }
13952 }
13953
13954 if (soundset != "")
13955 {
13956 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13958 }
13959 }
13960 }
13961 }
13962
13964 {
13965
13966 }
13967
13968 void OnApply(PlayerBase player);
13969
13971 {
13972 return 1.0;
13973 };
13974
13976 {
13978 }
13979
13981 {
13983 }
13984
13986
13988 {
13989 SetDynamicPhysicsLifeTime(0.01);
13991 }
13992
13994 {
13995 array<string> zone_names = new array<string>;
13996 GetDamageZones(zone_names);
13997 for (int i = 0; i < zone_names.Count(); i++)
13998 {
13999 SetHealthMax(zone_names.Get(i),"Health");
14000 }
14001 SetHealthMax("","Health");
14002 }
14003
14006 {
14007 float global_health = GetHealth01("","Health");
14008 array<string> zones = new array<string>;
14009 GetDamageZones(zones);
14010
14011 for (int i = 0; i < zones.Count(); i++)
14012 {
14013 SetHealth01(zones.Get(i),"Health",global_health);
14014 }
14015 }
14016
14019 {
14020 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
14021 }
14022
14024 {
14025 if (!hasRootAsPlayer)
14026 {
14027 if (refParentIB)
14028 {
14029
14030 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
14031 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
14032
14033 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
14034 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
14035
14038 }
14039 else
14040 {
14041
14044 }
14045 }
14046 }
14047
14049 {
14051 {
14052 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
14053 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
14054 {
14055 float heatPermCoef = 1.0;
14057 while (ent)
14058 {
14059 heatPermCoef *= ent.GetHeatPermeabilityCoef();
14060 ent = ent.GetHierarchyParent();
14061 }
14062
14063 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
14064 }
14065 }
14066 }
14067
14069 {
14070
14071 EntityAI parent = GetHierarchyParent();
14072 if (!parent)
14073 {
14074 hasParent = false;
14075 hasRootAsPlayer = false;
14076 }
14077 else
14078 {
14079 hasParent = true;
14080 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
14081 refParentIB =
ItemBase.Cast(parent);
14082 }
14083 }
14084
14085 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
14086 {
14087
14088 }
14089
14091 {
14092
14093 return false;
14094 }
14095
14097 {
14098
14099
14100 return false;
14101 }
14102
14104 {
14105
14106 return false;
14107 }
14108
14111 {
14112 return !GetIsFrozen() &&
IsOpen();
14113 }
14114
14116 {
14117 bool hasParent = false, hasRootAsPlayer = false;
14119
14120 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
14121 bool foodDecay =
g_Game.IsFoodDecayEnabled();
14122
14123 if (wwtu || foodDecay)
14124 {
14128
14129 if (processWetness || processTemperature || processDecay)
14130 {
14132
14133 if (processWetness)
14134 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
14135
14136 if (processTemperature)
14138
14139 if (processDecay)
14140 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
14141 }
14142 }
14143 }
14144
14147 {
14149 }
14150
14152 {
14155
14156 return super.GetTemperatureFreezeThreshold();
14157 }
14158
14160 {
14163
14164 return super.GetTemperatureThawThreshold();
14165 }
14166
14168 {
14171
14172 return super.GetItemOverheatThreshold();
14173 }
14174
14176 {
14178 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
14179
14180 return super.GetTemperatureFreezeTime();
14181 }
14182
14184 {
14186 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
14187
14188 return super.GetTemperatureThawTime();
14189 }
14190
14195
14197 {
14198 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
14199 }
14200
14202 {
14203 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
14204 }
14205
14208 {
14210 }
14211
14213 {
14215 }
14216
14218 {
14220 }
14221
14224 {
14225 return null;
14226 }
14227
14230 {
14231 return false;
14232 }
14233
14235 {
14237 {
14240 if (!trg)
14241 {
14243 explosive = this;
14244 }
14245
14246 explosive.PairRemote(trg);
14248
14249 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
14250 trg.SetPersistentPairID(persistentID);
14251 explosive.SetPersistentPairID(persistentID);
14252
14253 return true;
14254 }
14255 return false;
14256 }
14257
14260 {
14261 float ret = 1.0;
14264 ret *= GetHealth01();
14265
14266 return ret;
14267 }
14268
14269 #ifdef DEVELOPER
14270 override void SetDebugItem()
14271 {
14272 super.SetDebugItem();
14273 _itemBase = this;
14274 }
14275
14277 {
14278 string text = super.GetDebugText();
14279
14281 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
14282
14283 return text;
14284 }
14285 #endif
14286
14288 {
14289 return true;
14290 }
14291
14293
14295
14297 {
14300 }
14301
14302
14310
14326}
14327
14329{
14331 if (entity)
14332 {
14333 bool is_item = entity.IsInherited(
ItemBase);
14334 if (is_item && full_quantity)
14335 {
14338 }
14339 }
14340 else
14341 {
14343 return NULL;
14344 }
14345 return entity;
14346}
14347
14349{
14350 if (item)
14351 {
14352 if (health > 0)
14353 item.SetHealth("", "", health);
14354
14355 if (item.CanHaveTemperature())
14356 {
14358 if (item.CanFreeze())
14359 item.SetFrozen(false);
14360 }
14361
14362 if (item.HasEnergyManager())
14363 {
14364 if (quantity >= 0)
14365 {
14366 item.GetCompEM().SetEnergy0To1(quantity);
14367 }
14368 else
14369 {
14371 }
14372 }
14373 else if (item.IsMagazine())
14374 {
14375 Magazine mag = Magazine.Cast(item);
14376 if (quantity >= 0)
14377 {
14378 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
14379 }
14380 else
14381 {
14383 }
14384
14385 }
14386 else
14387 {
14388 if (quantity >= 0)
14389 {
14390 item.SetQuantityNormalized(quantity, false);
14391 }
14392 else
14393 {
14395 }
14396
14397 }
14398 }
14399}
14400
14401#ifdef DEVELOPER
14403#endif
Param4< int, int, string, int > TSelectableActionInfoWithColor
Param3 TSelectableActionInfo
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
eBleedingSourceType GetType()
ItemSuppressor SuppressorBase
void ActionManagerBase(PlayerBase player)
map< typename, ref array< ActionBase_Basic > > TInputActionMap
void AddAction(typename actionName)
void RemoveAction(typename actionName)
TInputActionMap m_InputActionMap
override void GetActions(typename action_input_type, out array< ActionBase_Basic > actions)
const int ECE_PLACE_ON_SURFACE
proto native void SpawnEntity(string sClassName, vector vPos, float fRange, int iCount)
Spawn an entity through CE.
const int ECE_IN_INVENTORY
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
PlayerSpawnPreset slotName
DamageType
exposed from C++ (do not change)
PluginAdminLog m_AdminLog
override bool IsExplosive()
override bool CanHaveTemperature()
class GP5GasMask extends MaskBase ItemBase
FindInventoryLocationType
flags for searching locations in inventory
InventoryLocationType
types of Inventory Location
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
bool DamageItemInCargo(float damage)
static bool HasDebugActionsMask(int mask)
bool HidesSelectionBySlot()
void SplitItem(PlayerBase player)
void CopyScriptPropertiesFrom(EntityAI oldItem)
override void InsertAgent(int agent, float count=1)
override float GetQuantityNormalized()
Gets quantity in normalized 0..1 form between the item's Min a Max values as defined by item's config...
static void SetDebugActionsMask(int mask)
void SetIsDeploySound(bool is_deploy_sound)
void SplitItemToInventoryLocation(notnull InventoryLocation dst)
override bool IsHeavyBehaviour()
override void SetWetMax()
bool IsCoverFaceForShave(string slot_name)
DEPRECATED in use, but returns correct values nontheless. Check performed elsewhere.
void ClearStartItemSoundServer()
void ProcessItemTemperature(float delta, bool hasParent, bool hasRootAsPlayer, ItemBase refParentIB)
map< typename, ref ActionOverrideData > TActionAnimOverrideMap
override void RemoveAllAgentsExcept(int agent_to_keep)
static ref map< int, ref array< ref WeaponParticlesOnBulletCasingEject > > m_OnBulletCasingEjectEffect
bool CanBeMovedOverride()
override void SetWet(float value, bool allow_client=false)
ref TIntArray m_SingleUseActions
override void ProcessVariables()
ref TStringArray m_HeadHidingSelections
float GetWeightSpecialized(bool forceRecalc=false)
bool LoadAgents(ParamsReadContext ctx, int version)
void UpdateQuickbarShortcutVisibility(PlayerBase player)
To be called on moving item within character's inventory; 'player' should never be null.
void OverrideActionAnimation(typename action, int commandUID, int stanceMask=-1, int commandUIDProne=-1)
ref array< ref OverheatingParticle > m_OverheatingParticles
override float GetTemperatureFreezeThreshold()
bool m_IsSoundSynchRemote
void StopItemSoundServer(int id)
static void ToggleDebugActionsMask(int mask)
void IncreaseOverheating(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
override float GetTemperatureFreezeTime()
ref array< int > m_CompatibleLocks
override void CombineItemsClient(EntityAI entity2, bool use_stack_max=true)
float m_TemperaturePerQuantityWeight
bool m_RecipesInitialized
void SplitIntoStackMax(EntityAI destination_entity, int slot_id, PlayerBase player)
override float GetTemperatureThawThreshold()
override void OnEnergyConsumed()
void SetQuantityNormalized(float value, bool destroy_config=true, bool destroy_forced=false)
Sets quantity in normalized 0..1 form between the item's Min a Max values as defined by item's config...
void RefreshAudioVisualsOnClient(CookingMethodType cooking_method, bool is_done, bool is_empty, bool is_burned)
cooking-related effect methods
int GetNumberOfItems()
Returns the number of items in cargo, otherwise returns 0(non-cargo objects). Recursive.
override EWetnessLevel GetWetLevel()
float GetSingleInventoryItemWeight()
ref TIntArray m_InteractActions
void MessageToOwnerStatus(string text)
Send message to owner player in grey color.
bool CanPlayDeployLoopSound()
override float GetWetMax()
bool CanBeUsedForSuicide()
override void CombineItemsEx(EntityAI entity2, bool use_stack_max=true)
void OnItemInHandsPlayerSwimStart(PlayerBase player)
void SetIsHologram(bool is_hologram)
void OnSyncVariables(ParamsReadContext ctx)
DEPRECATED (most likely)
void StartItemSoundServer(int id)
static ref map< int, ref array< ref WeaponParticlesOnFire > > m_OnFireEffect
void SplitIntoStackMaxCargoClient(EntityAI destination_entity, int idx, int row, int col)
bool m_CanBeMovedOverride
override string ChangeIntoOnAttach(string slot)
void UpdateOverheating(ItemBase weapon=null, string ammoType="", ItemBase muzzle_owner=null, ItemBase suppressor=null, string config_to_search="")
ScriptedLightBase GetLight()
string GetPlaceSoundset()
bool AddQuantity(float value, bool destroy_config=true, bool destroy_forced=false)
add item quantity[related to varQuantity... config entry], destroy_config = true > if the quantity re...
override float GetQuantity()
int m_ShotsToStartOverheating
override void OnWetChanged(float newVal, float oldVal)
void StopOverheating(ItemBase weapon=null, string ammoType="", ItemBase muzzle_owner=null, ItemBase suppressor=null, string config_to_search="")
static void PlayFireParticles(ItemBase weapon, int muzzle_index, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
void OnOverheatingDecay()
float GetDryingIncrement(string pIncrementName)
void SoundSynchRemoteReset()
bool HasMuzzle()
Returns true if this item has a muzzle (weapons, suppressors)
override bool CanReleaseAttachment(EntityAI attachment)
override void OnMovedInsideCargo(EntityAI container)
void SetCEBasedQuantity()
bool m_CanPlayImpactSound
override string GetAttachmentSoundType()
float GetOverheatingCoef()
array< string > GetHeadHidingSelection()
void PlayAttachSound(string slot_type)
Plays sound on item attach. Be advised, the config structure may slightly change in 1....
override bool IsStoreLoad()
int ComputeQuantityUsed(ItemBase other_item, bool use_stack_max=true)
void SetResultOfSplit(bool value)
void SplitIntoStackMaxCargo(EntityAI destination_entity, int idx, int row, int col)
void OnAttachmentQuantityChanged(ItemBase item)
Called on server side when some attachment's quantity is changed. Call super.OnAttachmentQuantityChan...
void UpdateAllOverheatingParticles()
float GetSoakingIncrement(string pIncrementName)
static void StopOverheatingParticles(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
override float GetStoreLoadedQuantity()
const int ITEM_SOUNDS_MAX
float GetItemModelLength()
override bool ReadVarsFromCTX(ParamsReadContext ctx, int version=-1)
override void CheckForRoofLimited(float timeTresholdMS=3000)
Roof check for entity, limited by time (anti-spam solution)
void CombineItems(ItemBase other_item, bool use_stack_max=true)
void TransferModifiers(PlayerBase reciever)
appears to be deprecated, legacy code
float GetTemperaturePerQuantityWeight()
Used in heat comfort calculations only!
void TransferAgents(int agents)
transfer agents from another item
bool CanBeConsumed(ConsumeConditionData data=null)
Items cannot be consumed if frozen by default. Override for exceptions.
float GetHeatIsolationInit()
void SetCanBeMovedOverride(bool setting)
override bool HasQuantity()
bool IsCargoException4x3(EntityAI item)
ref TIntArray m_ContinuousActions
int GetMuzzleID()
Returns global muzzle ID. If not found, then it gets automatically registered.
void LoadParticleConfigOnFire(int id)
void PreLoadSoundAttachmentType()
Attachment Sound Type getting from config file.
override float GetWetInit()
int m_ImpactSoundSurfaceHash
int m_MaxOverheatingValue
void SetupSpawnedItem(ItemBase item, float health, float quantity)
static ref map< string, int > m_WeaponTypeToID
string GetColorString()
Returns item's PROCEDURAL color as formated string, i.e. "#(argb,8,8,3)color(0.15,...
array< int > GetValidFinishers()
returns an array of possible finishers
void OnAttachmentQuantityChangedEx(ItemBase item, float delta)
Called on server side when some attachment's quantity is changed. Call super.OnAttachmentQuantityChan...
class ItemBase extends InventoryItem SpawnItemOnLocation(string object_name, notnull InventoryLocation loc, bool full_quantity)
ItemSoundHandler GetItemSoundHandler()
override int GetQuantityMin()
void SplitIntoStackMaxToInventoryLocationClient(notnull InventoryLocation dst)
override int GetQuickBarBonus()
override void SetTakeable(bool pState)
float m_OverheatingDecayInterval
void SetIsPlaceSound(bool is_place_sound)
override void SplitIntoStackMaxClient(EntityAI destination_entity, int slot_id)
void HierarchyCheck(out bool hasParent, out bool hasRootAsPlayer, out ItemBase refParentIB)
void RemoveAudioVisualsOnClient()
static void AddDebugActionsMask(int mask)
void PlayDeployLoopSoundEx()
void RemoveLightSourceItem()
bool CanRepair(ItemBase item_repair_kit)
bool can_this_be_combined
EffectSound m_SoundDeploy
float GetBaitEffectivity()
generic effectivity as a bait for animal catching
float GetDeployTime()
how long it takes to deploy this item in seconds
override bool IsSplitable()
bool DamageItemAttachments(float damage)
override void WriteVarsToCTX(ParamsWriteContext ctx)
void ConvertEnergyToQuantity()
override void RemoveAllAgents()
override void SetQuantityToMinimum()
bool m_WantPlayImpactSound
override float GetTemperatureThawTime()
ref map< int, ref array< ref WeaponParticlesOnOverheating > > m_OnOverheatingEffect
float m_StoreLoadedQuantity
void MessageToOwnerAction(string text)
Send message to owner player in yellow color.
float GetFilterDamageRatio()
override void SetLiquidType(int value, bool allow_client=false)
void OnQuantityChanged(float delta)
Called on server side when this item's quantity is changed. Call super.OnQuantityChanged(); first whe...
void OnApply(PlayerBase player)
bool m_HideSelectionsBySlot
bool IsOverheatingEffectActive()
void SetIsBeingPlaced(bool is_being_placed)
int GetLiquidContainerMask()
ref Timer m_CheckOverheating
void RegisterOverheatingParticle(Particle p, float min_heat_coef, float max_heat_coef, int particle_id, Object parent, vector local_pos, vector local_ori)
bool GetActionWidgetOverride(out typename name)
If we need a different (handheld)item action widget displayed, the logic goes in here.
float GetUnitWeight(bool include_wetness=true)
Obsolete, use GetWeightEx instead.
void SetZoneDamageCEInit()
Sets zone damages to match randomized global health set by CE (CE spawn only)
static void PlayOverheatingParticles(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
override bool IsOneHandedBehaviour()
void AddLightSourceItem(ItemBase lightsource)
Adds a light source child.
FoodStage GetFoodStage()
overridden on Edible_Base; so we don't have to parse configs all the time
override float GetSingleInventoryItemWeightEx()
void SaveAgents(ParamsWriteContext ctx)
override int GetTargetQuantityMax(int attSlotID=-1)
float GetDisinfectQuantity(int system=0, Param param1=null)
override bool IsHologram()
float GetItemAttachOffset()
static int GetDebugActionsMask()
override int GetLiquidType()
void ProcessDecay(float delta, bool hasRootAsPlayer)
override bool IsItemBase()
override bool IsTwoHandedBehaviour()
bool IsCombineAll(ItemBase other_item, bool use_stack_max=false)
float GetProtectionLevel(int type, bool consider_filter=false, int system=0)
static void PlayBulletCasingEjectParticles(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
override void OnEnergyAdded()
void AffectLiquidContainerOnFill(int liquid_type, float amount)
from enviro source
void AffectLiquidContainerOnTransfer(int liquidType, float amount, float sourceLiquidTemperature)
from other liquid container source
string GetExplosiveTriggerSlotName()
EffectSound m_DeployLoopSoundEx
override void DeSerializeNumericalVars(array< float > floats)
void StopItemDynamicPhysics()
override void SetStoreLoad(bool value)
float GetOverheatingValue()
bool ContainsAgent(int agent_id)
override void AddWet(float value)
override void EOnContact(IEntity other, Contact extra)
void SplitIntoStackMaxHands(PlayerBase player)
void SplitIntoStackMaxHandsClient(PlayerBase player)
ref Timer m_PhysDropTimer
void MessageToOwnerFriendly(string text)
Send message to owner player in green color.
override void SetStoreLoadedQuantity(float value)
bool m_IsResultOfSplit string m_SoundAttType
distinguish if item has been created as new or it came from splitting (server only flag)
void CheckOverheating(ItemBase weapon=null, string ammoType="", ItemBase muzzle_owner=null, ItemBase suppressor=null, string config_to_search="")
void UnlockFromParent()
Unlocks this item from its attachment slot of its parent.
bool Repair(PlayerBase player, ItemBase item_repair_kit, float specialty_weight)
void OnLiquidTypeChanged(int oldType, int newType)
void StartOverheating(ItemBase weapon=null, string ammoType="", ItemBase muzzle_owner=null, ItemBase suppressor=null, string config_to_search="")
void PlayDeployFinishSound()
bool AllowFoodConsumption()
bool m_IsOverheatingEffectActive
int m_LiquidContainerMask
void ProcessItemWetness(float delta, bool hasParent, bool hasRootAsPlayer, ItemBase refParentIB)
override int GetCleanness()
bool PairWithDevice(notnull ItemBase otherDevice)
static void RemoveDebugActionsMask(int mask)
static void UpdateOverheatingParticles(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
void PerformDamageSystemReinit()
override void ClearInventory()
static int m_LastRegisteredWeaponID
ItemBase GetLightSourceItem()
void MessageToOwnerImportant(string text)
Send message to owner player in red color.
override float GetItemOverheatThreshold()
void StopDeployLoopSoundEx()
override void SerializeNumericalVars(array< float > floats_out)
void Open()
Implementations only.
ItemBase SplitIntoStackMaxToInventoryLocationEx(notnull InventoryLocation dst)
static int m_DebugActionsMask
void KillAllOverheatingParticles()
bool CanBeCookedOnStick()
override int GetQuantityMax()
void GetRecipesActions(Man player, out TSelectableActionInfoArray outputList)
void OnActivatedByTripWire()
override void RemoveAgent(int agent_id)
bool m_ItemBeingDroppedPhys
override bool CanPutAsAttachment(EntityAI parent)
void PlayDetachSound(string slot_type)
static ref map< typename, ref TInputActionMap > m_ItemTypeActionsMap
void ProcessItemWetnessAndTemperature(float delta, bool hasParent, bool hasRootAsPlayer, ItemBase refParentIB)
override bool IsBeingPlaced()
float ComputeQuantityUsedEx(ItemBase other_item, bool use_stack_max=true)
bool m_FixDamageSystemInit
string GetDeployFinishSoundset()
ItemBase m_LightSourceItem
void LockToParent()
Locks this item in it's current attachment slot of its parent. This makes the "locked" icon visible i...
override void SplitIntoStackMaxEx(EntityAI destination_entity, int slot_id)
void LoadParticleConfigOnOverheating(int id)
bool IsSoundSynchRemote()
override void EEOnCECreate()
Called when entity is being created as new by CE/ Debug.
override void OnRightClick()
static ref map< typename, ref TActionAnimOverrideMap > m_ItemActionOverrides
bool IsActionTargetVisible()
override void OnItemAttachmentSlotChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
int NameToID(string name)
override void OnWetLevelChanged(EWetnessLevel newLevel, EWetnessLevel oldLevel)
void ClearStopItemSoundServer()
override string ChangeIntoOnDetach()
void SplitIntoStackMaxToInventoryLocation(notnull InventoryLocation dst)
EffectSound m_SoundDeployFinish
float GetQuantityNormalizedScripted()
override void SetCleanness(int value, bool allow_client=false)
override float GetWetMin()
ref ItemSoundHandler m_ItemSoundHandler
override bool KindOf(string tag)
void ItemSoundHandler(ItemBase parent)
EffectSound m_LockingSound
void PluginItemDiagnostic()
PluginBase GetPlugin(typename plugin_type)
override RemotelyActivatedItemBehaviour GetRemotelyActivatedItemBehaviour()
void RemoteDetonatorTrigger()
override void OnActivatedByItem(notnull ItemBase item)
Called when this item is activated by other.
override void Explode(int damageType, string ammoType="")
void OnItemLocationChanged(ItemBase item)
void OnItemAttachedAtPlayer(EntityAI item, string slot_name)
proto native UIManager GetUIManager()
proto bool ConfigGetChildName(string path, int index, out string name)
Get name of subclass in config class on path.
proto native float ConfigGetFloat(string path)
Get float value from config on path.
override ScriptCallQueue GetCallQueue(int call_category)
proto native bool ConfigIsExisting(string path)
proto native void ConfigGetTextArray(string path, out TStringArray values)
Get array of strings from config on path.
proto native DayZPlayer GetPlayer()
proto int GetTime()
returns mission time in milliseconds
proto native int ConfigGetType(string path)
Returns type of config value.
AnalyticsManagerClient GetAnalyticsClient()
proto native int ConfigGetChildrenCount(string path)
Get count of subclasses in config class on path.
proto native SoundOnVehicle CreateSoundOnObject(Object source, string sound_name, float distance, bool looped, bool create_local=false)
proto native void ObjectDelete(Object obj)
proto native int GetItemCount()
proto native EntityAI GetItem(int index)
void SetEnergy0To1(float energy01)
Energy manager: Sets stored energy for this device between 0 and MAX based on relative input value be...
float GetEnergyMaxPristine()
Energy manager: Returns the maximum amount of energy this device can store. It's damage is NOT taken ...
override void SetAutodestroy(bool auto_destroy)
Sets whether Effect automatically cleans up when it stops.
bool IsSoundPlaying()
Get whether EffectSound is currently playing.
proto native bool EnumerateInventory(InventoryTraversalType tt, out array< EntityAI > items)
enumerate inventory using traversal type and filling items array
proto native CargoBase GetCargo()
cargo
proto native bool IsValid()
verify current set inventory location
proto native EntityAI GetParent()
returns parent of current inventory location
proto native int GetSlot()
returns slot id if current type is Attachment
proto native int GetCol()
returns column of cargo if current type is Cargo / ProxyCargo
proto native int GetRow()
returns row of cargo if current type is Cargo / ProxyCargo
proto native void SetGround(EntityAI e, vector mat[4])
sets current inventory location type to Ground with transformation mat
bool WriteToContext(ParamsWriteContext ctx)
proto native int GetType()
returns type of InventoryLocation
proto native int GetIdx()
returns index of cargo if current type is Cargo / ProxyCargo
proto native void SetCargo(notnull EntityAI parent, EntityAI e, int idx, int row, int col, bool flip)
sets current inventory location type to Cargo with coordinates (idx, row, col)
proto native bool GetFlip()
returns flip status of cargo
proto native EntityAI GetItem()
returns item of current inventory location
override bool CanDisplayCargo()
override void OnInventoryEnter(Man player)
override bool CanPutAsAttachment(EntityAI parent)
override bool CanReceiveItemIntoCargo(EntityAI item)
override bool OnStoreLoad(ParamsReadContext ctx, int version)
override void OnWasDetached(EntityAI parent, int slot_id)
override void EEOnAfterLoad()
override void EEDelete(EntityAI parent)
override bool CanBeRepairedByCrafting()
override void OnPlacementStarted(Man player)
override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
override bool IsElectricAppliance()
override bool IsItemTent()
override void SetActions()
override bool CanMakeGardenplot()
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
override WrittenNoteData GetWrittenNoteData()
override int GetDamageSystemVersionChange()
override bool SetQuantity(float value, bool destroy_config=true, bool destroy_forced=false, bool allow_client=false, bool clamp_to_stack_max=true)
override void InitItemVariables()
override void SetActionAnimOverrides()
override void OnCreatePhysics()
override string GetDeploySoundset()
override float GetBandagingEffectivity()
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
override void OnStoreSave(ParamsWriteContext ctx)
override void AfterStoreLoad()
override int GetOnDigWormsAmount()
override bool IsSelfAdjustingTemperature()
override bool IsPlayerInside(PlayerBase player, string selection)
override void OnVariablesSynchronized()
override void RefreshPhysics()
override bool CanObstruct()
override void OnWasAttached(EntityAI parent, int slot_id)
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
override bool CanPutInCargo(EntityAI parent)
override string GetLoopDeploySoundset()
override void OnPlacementComplete(Man player, vector position="0 0 0", vector orientation="0 0 0")
override void OnInventoryExit(Man player)
override bool IsTakeable()
override bool IsIgnoredByConstruction()
override void InitItemSounds()
override void EEKilled(Object killer)
override void OnCombine(ItemBase other_item)
override bool CanExplodeInFire()
override bool IsFacingPlayer(PlayerBase player, string selection)
override bool CanBeCombined(EntityAI other_item, bool reservation_check=true, bool stack_max_limit=false)
override bool IsBloodContainer()
override bool IsClothing()
override bool CanBeSplit()
override bool IsDeployable()
override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
override bool CanBeDisinfected()
override float GetInfectionChance(int system=0, Param param=null)
override void OnEndPlacement()
float GetOverheatingLimitMax()
void SetOverheatingLimitMax(float max)
void SetParticleParams(int particle_id, Object parent, vector local_pos, vector local_ori)
float GetOverheatingLimitMin()
void SetOverheatingLimitMin(float min)
void RegisterParticle(Particle p)
void Stop()
Legacy function for backwards compatibility with 1.14 and below.
void SetControlledDevice(EntityAI pDevice)
bool OnStoreLoad(ParamsReadContext ctx, int version)
void OnStoreSave(ParamsWriteContext ctx)
proto void Remove(func fn)
remove specific call from queue
proto void CallLater(func fn, int delay=0, bool repeat=false, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
proto bool Write(void value_out)
proto bool Read(void value_in)
proto native float GetDamage(string zoneName, string healthType)
UIScriptedMenu FindMenu(int id)
Returns menu with specific ID if it is open (see MenuID)
void SetCalcDetails(string details)
void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
Serializer ParamsReadContext
InventoryTraversalType
tree traversal type, for more see http://en.wikipedia.org/wiki/Tree_traversal
proto native CGame GetGame()
Serializer ParamsWriteContext
const int COMP_TYPE_ENERGY_MANAGER
void Error(string err)
Messagebox with error message.
proto native void SetColor(int color)
array< string > TStringArray
EntityEvent
Entity events for event-mask, or throwing event from code.
static const float ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE
const int VARIABLE_LIQUIDTYPE
const int VARIABLE_CLEANNESS
const int VARIABLE_TEMPERATURE
const int VARIABLE_QUANTITY
static proto float AbsFloat(float f)
Returns absolute value.
proto native bool dBodyIsDynamic(notnull IEntity ent)
const int SAT_DEBUG_ACTION
class JsonUndergroundAreaTriggerData GetPosition
static proto string Format(string fmt, 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)
Gets n-th character from string.