8546{
8548 {
8549 return true;
8550 }
8551};
8552
8553
8554
8556{
8560
8562
8565
8566
8567
8568
8569
8578
8584
8589
8594
8615 protected bool m_IsResultOfSplit
8616
8618
8623
8624
8625
8627
8631
8632
8633
8635
8638
8639
8640
8646
8647
8655
8658
8659
8661
8662
8664
8665
8670
8671
8676
8677
8679
8680
8682 {
8687
8688 if (!
GetGame().IsDedicatedServer())
8689 {
8691 {
8693
8695 {
8697 }
8698 }
8699
8702 }
8703
8704 m_OldLocation = null;
8705
8707 {
8709 }
8710
8711 if (ConfigIsExisting("headSelectionsToHide"))
8712 {
8715 }
8716
8718 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8719 {
8721 }
8722
8724
8725 m_IsResultOfSplit = false;
8726
8728 }
8729
8731 {
8732 super.InitItemVariables();
8733
8739 m_Count = ConfigGetInt(
"count");
8740
8743
8748
8751
8756
8768
8772
8773
8776 if (ConfigIsExisting("canBeSplit"))
8777 {
8780 }
8781
8783 if (ConfigIsExisting("itemBehaviour"))
8785
8786
8789 RegisterNetSyncVariableInt("m_VarLiquidType");
8790 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8791
8792 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8793 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8794 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8795
8796 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8797 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8798 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8799 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8800
8801 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8802 RegisterNetSyncVariableBool("m_IsTakeable");
8803 RegisterNetSyncVariableBool("m_IsHologram");
8804
8807 {
8810 }
8811
8813
8815 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8817
8818 }
8819
8821 {
8823 }
8824
8826 {
8829 {
8834 }
8835 }
8836
8837 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8838 {
8840 {
8843 }
8844
8846 }
8847
8849 {
8855 }
8856
8858
8860 {
8862
8863 if (!action)
8864 {
8865 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8866 return;
8867 }
8868
8870 if (!ai)
8871 {
8873 return;
8874 }
8875
8877 if (!action_array)
8878 {
8879 action_array = new array<ActionBase_Basic>;
8881 }
8882 if (LogManager.IsActionLogEnable())
8883 {
8884 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8885 }
8886
8887 if (action_array.Find(action) != -1)
8888 {
8889 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8890 }
8891 else
8892 {
8893 action_array.Insert(action);
8894 }
8895 }
8896
8898 {
8900 ActionBase action = player.GetActionManager().GetAction(actionName);
8903
8904 if (action_array)
8905 {
8906 action_array.RemoveItem(action);
8907 }
8908 }
8909
8910
8911
8913 {
8914 ActionOverrideData overrideData = new ActionOverrideData();
8918
8920 if (!actionMap)
8921 {
8924 }
8925
8926 actionMap.Insert(this.
Type(), overrideData);
8927
8928 }
8929
8931
8933
8934
8936 {
8939
8942
8943 string config_to_search = "CfgVehicles";
8944 string muzzle_owner_config;
8945
8947 {
8948 if (IsInherited(Weapon))
8949 config_to_search = "CfgWeapons";
8950
8951 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8952
8953 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
8954
8956
8957 if (config_OnFire_subclass_count > 0)
8958 {
8959 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
8960
8961 for (int i = 0; i < config_OnFire_subclass_count; i++)
8962 {
8963 string particle_class = "";
8965 string config_OnFire_entry = config_OnFire_class + particle_class;
8966 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
8967 WPOF_array.Insert(WPOF);
8968 }
8969
8970
8972 }
8973 }
8974
8976 {
8977 config_to_search = "CfgWeapons";
8978 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8979
8980 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
8981
8983
8984 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
8985 {
8986 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
8987
8988 for (i = 0; i < config_OnBulletCasingEject_count; i++)
8989 {
8990 string particle_class2 = "";
8992 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
8993 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
8994 WPOBE_array.Insert(WPOBE);
8995 }
8996
8997
8999 }
9000 }
9001 }
9002
9003
9005 {
9008
9010 {
9011 string config_to_search = "CfgVehicles";
9012
9013 if (IsInherited(Weapon))
9014 config_to_search = "CfgWeapons";
9015
9016 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9017 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9018
9019 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9020 {
9021
9023
9025 {
9027 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9029 return;
9030 }
9031
9034
9035
9036
9038 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9039
9040 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9041 {
9042 string particle_class = "";
9044 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9046
9047 if (entry_type == CT_CLASS)
9048 {
9049 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9050 WPOOH_array.Insert(WPOF);
9051 }
9052 }
9053
9054
9056 }
9057 }
9058 }
9059
9061 {
9063 }
9064
9066 {
9068 {
9070
9073
9076
9077 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9078 }
9079 }
9080
9082 {
9084 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9085
9087 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9088
9090 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9091
9093 {
9095 }
9096 }
9097
9099 {
9101 }
9102
9104 {
9107 else
9109
9111 {
9114 }
9115 else
9116 {
9119
9122 }
9123
9125 }
9126
9128 {
9130 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9131 }
9132
9134 {
9136 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9138 }
9139
9141 {
9143 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9144 }
9145
9147 {
9150
9151 OverheatingParticle OP = new OverheatingParticle();
9156
9158 }
9159
9161 {
9164
9165 return -1;
9166 }
9167
9169 {
9171 {
9174
9175 for (int i = count; i > 0; --i)
9176 {
9177 int id = i - 1;
9180
9183
9184 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9185 {
9186 if (p)
9187 {
9190 }
9191 }
9192 }
9193 }
9194 }
9195
9197 {
9199 {
9201 {
9202 int id = i - 1;
9204
9205 if (OP)
9206 {
9208
9209 if (p)
9210 {
9212 }
9213
9214 delete OP;
9215 }
9216 }
9217
9220 }
9221 }
9222
9225 {
9226 return 0.0;
9227 }
9228
9229
9231 {
9232 return 250;
9233 }
9234
9236 {
9237 return 0;
9238 }
9239
9242 {
9244 return true;
9245
9246 return false;
9247 }
9248
9251 {
9254
9256 {
9258 }
9259 else
9260 {
9261
9263 }
9264
9266 }
9267
9274 {
9275 return -1;
9276 }
9277
9278
9279
9280
9282 {
9284 {
9286 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9287
9288 if (r_index >= 0)
9289 {
9290 InventoryLocation r_il = new InventoryLocation;
9291 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9292
9293 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9296 {
9297 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9298 }
9300 {
9301 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9302 }
9303
9304 }
9305
9306 player.GetHumanInventory().ClearUserReservedLocation(this);
9307 }
9308
9311 }
9312
9313
9314
9315
9317 {
9318 return ItemBase.m_DebugActionsMask;
9319 }
9320
9322 {
9323 return ItemBase.m_DebugActionsMask & mask;
9324 }
9325
9327 {
9328 ItemBase.m_DebugActionsMask = mask;
9329 }
9330
9332 {
9333 ItemBase.m_DebugActionsMask |= mask;
9334 }
9335
9337 {
9338 ItemBase.m_DebugActionsMask &= ~mask;
9339 }
9340
9342 {
9344 {
9346 }
9347 else
9348 {
9350 }
9351 }
9352
9353
9355 {
9356 if (GetEconomyProfile())
9357 {
9358 float q_max = GetEconomyProfile().GetQuantityMax();
9359 if (q_max > 0)
9360 {
9361 float q_min = GetEconomyProfile().GetQuantityMin();
9362 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9363
9365 {
9366 ComponentEnergyManager comp = GetCompEM();
9368 {
9370 }
9371 }
9373 {
9375
9376 }
9377
9378 }
9379 }
9380 }
9381
9384 {
9385 EntityAI parent = GetHierarchyParent();
9386
9387 if (parent)
9388 {
9389 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9390 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9391 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9392 }
9393 }
9394
9397 {
9398 EntityAI parent = GetHierarchyParent();
9399
9400 if (parent)
9401 {
9402 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9403 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9404 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9405 }
9406 }
9407
9409 {
9410
9411
9412
9413
9415
9417 {
9418 if (ScriptInputUserData.CanStoreInputUserData())
9419 {
9420 ScriptInputUserData ctx = new ScriptInputUserData;
9426 ctx.
Write(use_stack_max);
9429
9431 {
9432 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9433 }
9434 }
9435 }
9436 else if (!
GetGame().IsMultiplayer())
9437 {
9439 }
9440 }
9441
9443 {
9445 }
9446
9448 {
9450 }
9451
9453 {
9455 }
9456
9458 {
9459
9460 return false;
9461 }
9462
9464 {
9465 return false;
9466 }
9467
9471 {
9472 return false;
9473 }
9474
9476 {
9477 return "";
9478 }
9479
9481
9483 {
9484 return false;
9485 }
9486
9488 {
9489 return true;
9490 }
9491
9492
9493
9495 {
9496 return true;
9497 }
9498
9500 {
9501 return true;
9502 }
9503
9505 {
9506 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9508 }
9509
9511 {
9513 }
9514
9516 {
9518 if (!is_being_placed)
9520 SetSynchDirty();
9521 }
9522
9523
9525
9527 {
9529 }
9530
9532 {
9534 }
9535
9537 {
9538 return 1;
9539 }
9540
9542 {
9543 return false;
9544 }
9545
9547 {
9549 SetSynchDirty();
9550 }
9551
9552
9553
9554
9555
9556
9557
9558
9559
9560
9561
9562
9563
9564
9565
9566
9567
9568
9569
9570
9571
9572
9573
9574
9575
9576
9577
9578
9579
9580
9581
9582
9583
9584
9585
9587 {
9588 super.OnMovedInsideCargo(container);
9589
9590 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9591 }
9592
9593 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9594 {
9595 super.EEItemLocationChanged(oldLoc,newLoc);
9596
9597 PlayerBase new_player = null;
9598 PlayerBase old_player = null;
9599
9600 if (newLoc.GetParent())
9601 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9602
9603 if (oldLoc.GetParent())
9604 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9605
9607 {
9608 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9609
9610 if (r_index >= 0)
9611 {
9612 InventoryLocation r_il = new InventoryLocation;
9613 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9614
9615 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9618 {
9619 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9620 }
9622 {
9623 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9624 }
9625
9626 }
9627 }
9628
9630 {
9631 if (new_player)
9632 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9633
9634 if (new_player == old_player)
9635 {
9636
9637 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9638 {
9640 {
9641 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9642 {
9643 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9644 }
9645 }
9646 else
9647 {
9648 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9649 }
9650 }
9651
9652 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9653 {
9654 int type = oldLoc.GetType();
9656 {
9657 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9658 }
9660 {
9661 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9662 }
9663 }
9664 if (!m_OldLocation)
9665 {
9666 m_OldLocation = new InventoryLocation;
9667 }
9668 m_OldLocation.Copy(oldLoc);
9669 }
9670 else
9671 {
9672 if (m_OldLocation)
9673 {
9674 m_OldLocation.Reset();
9675 }
9676 }
9677
9679 }
9680 else
9681 {
9682 if (new_player)
9683 {
9684 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9685 if (res_index >= 0)
9686 {
9687 InventoryLocation il = new InventoryLocation;
9688 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9690 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9693 {
9694 il.
GetParent().GetOnReleaseLock().Invoke(it);
9695 }
9697 {
9699 }
9700
9701 }
9702 }
9704 {
9705
9707 }
9708
9709 if (m_OldLocation)
9710 {
9711 m_OldLocation.Reset();
9712 }
9713 }
9714 }
9715
9716 override void EOnContact(IEntity other, Contact extra)
9717 {
9719 {
9720 int liquidType = -1;
9722 if (impactSpeed > 0.0)
9723 {
9725 #ifndef SERVER
9727 #else
9729 SetSynchDirty();
9730 #endif
9732 }
9733 }
9734
9735 #ifdef SERVER
9736 if (GetCompEM() && GetCompEM().IsPlugged())
9737 {
9738 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9739 GetCompEM().UnplugThis();
9740 }
9741 #endif
9742 }
9743
9745
9747 {
9749 }
9750
9752 {
9753
9754 }
9755
9757 {
9758 super.OnItemLocationChanged(old_owner, new_owner);
9759
9760 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9761 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9762
9763 if (!relatedPlayer && playerNew)
9764 relatedPlayer = playerNew;
9765
9766 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9767 {
9769 if (actionMgr)
9770 {
9771 ActionBase currentAction = actionMgr.GetRunningAction();
9772 if (currentAction)
9774 }
9775 }
9776
9777 Man ownerPlayerOld = null;
9778 Man ownerPlayerNew = null;
9779
9780 if (old_owner)
9781 {
9782 if (old_owner.
IsMan())
9783 {
9784 ownerPlayerOld = Man.Cast(old_owner);
9785 }
9786 else
9787 {
9788 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9789 }
9790 }
9791 else
9792 {
9794 {
9796
9797 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9798 {
9799 GetCompEM().UnplugThis();
9800 }
9801 }
9802 }
9803
9804 if (new_owner)
9805 {
9806 if (new_owner.
IsMan())
9807 {
9808 ownerPlayerNew = Man.Cast(new_owner);
9809 }
9810 else
9811 {
9812 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9813 }
9814 }
9815
9816 if (ownerPlayerOld != ownerPlayerNew)
9817 {
9818 if (ownerPlayerOld)
9819 {
9820 array<EntityAI> subItemsExit = new array<EntityAI>;
9822 for (int i = 0; i < subItemsExit.Count(); i++)
9823 {
9826 }
9827 }
9828
9829 if (ownerPlayerNew)
9830 {
9831 array<EntityAI> subItemsEnter = new array<EntityAI>;
9833 for (int j = 0; j < subItemsEnter.Count(); j++)
9834 {
9837 }
9838 }
9839 }
9840 else if (ownerPlayerNew != null)
9841 {
9842 PlayerBase nplayer;
9843 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9844 {
9845 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9847 for (int k = 0; k < subItemsUpdate.Count(); k++)
9848 {
9850 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9851 }
9852 }
9853 }
9854
9855 if (old_owner)
9856 old_owner.OnChildItemRemoved(this);
9857 if (new_owner)
9858 new_owner.OnChildItemReceived(this);
9859 }
9860
9861
9863 {
9864 super.EEDelete(parent);
9865 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9866 if (player)
9867 {
9869
9870 if (player.IsAlive())
9871 {
9872 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9873 if (r_index >= 0)
9874 {
9875 InventoryLocation r_il = new InventoryLocation;
9876 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9877
9878 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9881 {
9882 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9883 }
9885 {
9886 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9887 }
9888
9889 }
9890
9891 player.RemoveQuickBarEntityShortcut(this);
9892 }
9893 }
9894 }
9895
9897 {
9898 super.EEKilled(killer);
9899
9902 {
9903 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
9904 {
9905 if (IsMagazine())
9906 {
9907 if (Magazine.Cast(this).GetAmmoCount() > 0)
9908 {
9910 }
9911 }
9912 else
9913 {
9915 }
9916 }
9917 }
9918 }
9919
9921 {
9922 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9923
9924 super.OnWasAttached(parent, slot_id);
9925
9928
9930 }
9931
9933 {
9934 super.OnWasDetached(parent, slot_id);
9935
9938 }
9939
9941 {
9942 int idx;
9945
9946 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9947 if (inventory_slots.Count() < 1)
9948 {
9949 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
9950 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
9951 }
9952 else
9953 {
9954 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
9955 }
9956
9957 idx = inventory_slots.Find(slot);
9958 if (idx < 0)
9959 return "";
9960
9961 return attach_types.Get(idx);
9962 }
9963
9965 {
9966 int idx = -1;
9967 string slot;
9968
9971
9972 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9973 if (inventory_slots.Count() < 1)
9974 {
9975 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
9976 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9977 }
9978 else
9979 {
9980 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
9981 if (detach_types.Count() < 1)
9982 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9983 }
9984
9985 for (int i = 0; i < inventory_slots.Count(); i++)
9986 {
9987 slot = inventory_slots.Get(i);
9988 }
9989
9990 if (slot != "")
9991 {
9992 if (detach_types.Count() == 1)
9993 idx = 0;
9994 else
9995 idx = inventory_slots.Find(slot);
9996 }
9997 if (idx < 0)
9998 return "";
9999
10000 return detach_types.Get(idx);
10001 }
10002
10004 {
10005
10007
10008
10009 float min_time = 1;
10010 float max_time = 3;
10011 float delay = Math.RandomFloat(min_time, max_time);
10012
10013 explode_timer.Run(delay, this, "DoAmmoExplosion");
10014 }
10015
10017 {
10018 Magazine magazine = Magazine.Cast(this);
10019 int pop_sounds_count = 6;
10020 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10021
10022
10023 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10024 string sound_name = pop_sounds[ sound_idx ];
10026
10027
10028 magazine.ServerAddAmmoCount(-1);
10029
10030
10031 float min_temp_to_explode = 100;
10032
10033 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10034 {
10036 }
10037 }
10038
10039
10040 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10041 {
10042 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10043
10044 const int CHANCE_DAMAGE_CARGO = 4;
10045 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10046 const int CHANCE_DAMAGE_NOTHING = 2;
10047
10049 {
10050 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10051 int chances;
10052 int rnd;
10053
10054 if (GetInventory().GetCargo())
10055 {
10056 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10057 rnd = Math.RandomInt(0,chances);
10058
10059 if (rnd < CHANCE_DAMAGE_CARGO)
10060 {
10062 }
10063 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10064 {
10066 }
10067 }
10068 else
10069 {
10070 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10071 rnd = Math.RandomInt(0,chances);
10072
10073 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10074 {
10076 }
10077 }
10078 }
10079 }
10080
10082 {
10083 if (GetInventory().GetCargo())
10084 {
10085 int item_count = GetInventory().GetCargo().GetItemCount();
10086 if (item_count > 0)
10087 {
10088 int random_pick = Math.RandomInt(0, item_count);
10090 if (!item.IsExplosive())
10091 {
10092 item.AddHealth("","",damage);
10093 return true;
10094 }
10095 }
10096 }
10097 return false;
10098 }
10099
10101 {
10102 int attachment_count = GetInventory().AttachmentCount();
10103 if (attachment_count > 0)
10104 {
10105 int random_pick = Math.RandomInt(0, attachment_count);
10106 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10107 if (!attachment.IsExplosive())
10108 {
10109 attachment.AddHealth("","",damage);
10110 return true;
10111 }
10112 }
10113 return false;
10114 }
10115
10117 {
10119 }
10120
10122 {
10124 return GetInventory().CanRemoveEntity();
10125
10126 return false;
10127 }
10128
10130 {
10132 return;
10133
10135 {
10136 if (ScriptInputUserData.CanStoreInputUserData())
10137 {
10138 ScriptInputUserData ctx = new ScriptInputUserData;
10143 ctx.
Write(destination_entity);
10145 ctx.
Write(slot_id);
10147 }
10148 }
10149 else if (!
GetGame().IsMultiplayer())
10150 {
10152 }
10153 }
10154
10156 {
10158 return;
10159
10160 float split_quantity_new;
10164 InventoryLocation loc = new InventoryLocation;
10165
10166 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10167 {
10169 split_quantity_new = stack_max;
10170 else
10172
10173 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10174 if (new_item)
10175 {
10176 new_item.SetResultOfSplit(true);
10177 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10179 new_item.SetQuantity(split_quantity_new);
10180 }
10181 }
10182 else if (destination_entity && slot_id == -1)
10183 {
10184 if (quantity > stack_max)
10185 split_quantity_new = stack_max;
10186 else
10187 split_quantity_new = quantity;
10188
10190 {
10193 }
10194
10195 if (new_item)
10196 {
10197 new_item.SetResultOfSplit(true);
10198 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10200 new_item.SetQuantity(split_quantity_new);
10201 }
10202 }
10203 else
10204 {
10205 if (stack_max != 0)
10206 {
10208 {
10210 }
10211
10212 if (split_quantity_new == 0)
10213 {
10214 if (!
GetGame().IsMultiplayer())
10215 player.PhysicalPredictiveDropItem(this);
10216 else
10217 player.ServerDropEntity(this);
10218 return;
10219 }
10220
10222
10223 if (new_item)
10224 {
10225 new_item.SetResultOfSplit(true);
10226 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10228 new_item.SetQuantity(stack_max);
10229 new_item.PlaceOnSurface();
10230 }
10231 }
10232 }
10233 }
10234
10236 {
10238 return;
10239
10240 float split_quantity_new;
10244 InventoryLocation loc = new InventoryLocation;
10245
10246 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10247 {
10249 split_quantity_new = stack_max;
10250 else
10252
10253 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10254 if (new_item)
10255 {
10256 new_item.SetResultOfSplit(true);
10257 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10259 new_item.SetQuantity(split_quantity_new);
10260 }
10261 }
10262 else if (destination_entity && slot_id == -1)
10263 {
10264 if (quantity > stack_max)
10265 split_quantity_new = stack_max;
10266 else
10267 split_quantity_new = quantity;
10268
10270 {
10273 }
10274
10275 if (new_item)
10276 {
10277 new_item.SetResultOfSplit(true);
10278 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10280 new_item.SetQuantity(split_quantity_new);
10281 }
10282 }
10283 else
10284 {
10285 if (stack_max != 0)
10286 {
10288 {
10290 }
10291
10293
10294 if (new_item)
10295 {
10296 new_item.SetResultOfSplit(true);
10297 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10299 new_item.SetQuantity(stack_max);
10300 new_item.PlaceOnSurface();
10301 }
10302 }
10303 }
10304 }
10305
10307 {
10309 return;
10310
10312 {
10313 if (ScriptInputUserData.CanStoreInputUserData())
10314 {
10315 ScriptInputUserData ctx = new ScriptInputUserData;
10320 dst.WriteToContext(ctx);
10322 }
10323 }
10324 else if (!
GetGame().IsMultiplayer())
10325 {
10327 }
10328 }
10329
10331 {
10333 return;
10334
10336 {
10337 if (ScriptInputUserData.CanStoreInputUserData())
10338 {
10339 ScriptInputUserData ctx = new ScriptInputUserData;
10344 ctx.
Write(destination_entity);
10350 }
10351 }
10352 else if (!
GetGame().IsMultiplayer())
10353 {
10355 }
10356 }
10357
10359 {
10361 }
10362
10364 {
10366 return this;
10367
10369 float split_quantity_new;
10371 if (dst.IsValid())
10372 {
10373 int slot_id = dst.GetSlot();
10375
10376 if (quantity > stack_max)
10377 split_quantity_new = stack_max;
10378 else
10379 split_quantity_new = quantity;
10380
10382
10383 if (new_item)
10384 {
10385 new_item.SetResultOfSplit(true);
10386 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10389 }
10390
10391 return new_item;
10392 }
10393
10394 return null;
10395 }
10396
10398 {
10400 return;
10401
10403 float split_quantity_new;
10405 if (destination_entity)
10406 {
10408 if (quantity > stackable)
10409 split_quantity_new = stackable;
10410 else
10411 split_quantity_new = quantity;
10412
10413 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10414 if (new_item)
10415 {
10416 new_item.SetResultOfSplit(true);
10417 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10419 new_item.SetQuantity(split_quantity_new);
10420 }
10421 }
10422 }
10423
10425 {
10427 return;
10428
10430 {
10431 if (ScriptInputUserData.CanStoreInputUserData())
10432 {
10433 ScriptInputUserData ctx = new ScriptInputUserData;
10438 ItemBase destination_entity =
this;
10439 ctx.
Write(destination_entity);
10443 }
10444 }
10445 else if (!
GetGame().IsMultiplayer())
10446 {
10448 }
10449 }
10450
10452 {
10454 return;
10455
10457 float split_quantity_new;
10459 if (player)
10460 {
10462 if (quantity > stackable)
10463 split_quantity_new = stackable;
10464 else
10465 split_quantity_new = quantity;
10466
10467 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10468 new_item =
ItemBase.Cast(in_hands);
10469 if (new_item)
10470 {
10471 new_item.SetResultOfSplit(true);
10472 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10474 new_item.SetQuantity(split_quantity_new);
10475 }
10476 }
10477 }
10478
10480 {
10482 return;
10483
10485 float split_quantity_new = Math.Floor(quantity * 0.5);
10486
10488
10489 if (new_item)
10490 {
10491 if (new_item.GetQuantityMax() < split_quantity_new)
10492 {
10493 split_quantity_new = new_item.GetQuantityMax();
10494 }
10495
10496 new_item.SetResultOfSplit(true);
10497 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10498
10500 {
10503 }
10504 else
10505 {
10508 }
10509 }
10510 }
10511
10513 {
10515 return;
10516
10518 float split_quantity_new = Math.Floor(quantity / 2);
10519
10520 InventoryLocation invloc = new InventoryLocation;
10522
10524 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10525
10526 if (new_item)
10527 {
10528 if (new_item.GetQuantityMax() < split_quantity_new)
10529 {
10530 split_quantity_new = new_item.GetQuantityMax();
10531 }
10533 {
10536 }
10537 else
10538 {
10541 }
10542 }
10543 }
10544
10547 {
10548 SetWeightDirty();
10550
10551 if (parent)
10552 parent.OnAttachmentQuantityChangedEx(this, delta);
10553
10555 {
10557 {
10559 }
10561 {
10562 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10564 }
10565 }
10566
10567 }
10568
10571 {
10572
10573 }
10574
10577 {
10579 }
10580
10582 {
10583 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10584
10586 {
10587 if (newLevel == GameConstants.STATE_RUINED)
10588 {
10590 EntityAI parent = GetHierarchyParent();
10591 if (parent && parent.IsFireplace())
10592 {
10593 CargoBase cargo = GetInventory().GetCargo();
10594 if (cargo)
10595 {
10597 {
10599 }
10600 }
10601 }
10602 }
10603
10605 {
10606
10608 return;
10609 }
10610
10611 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10612 {
10614 }
10615 }
10616 }
10617
10618
10620 {
10621 super.OnRightClick();
10622
10624 {
10626 {
10627 if (ScriptInputUserData.CanStoreInputUserData())
10628 {
10629 vector m4[4];
10631
10632 EntityAI root = GetHierarchyRoot();
10633
10634 InventoryLocation dst = new InventoryLocation;
10636 {
10637 if (root)
10638 {
10639 root.GetTransform(m4);
10641 }
10642 else
10643 GetInventory().GetCurrentInventoryLocation(dst);
10644 }
10645 else
10646 {
10648
10649
10650 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10651 {
10652 if (root)
10653 {
10654 root.GetTransform(m4);
10656 }
10657 else
10658 GetInventory().GetCurrentInventoryLocation(dst);
10659 }
10660 else
10661 {
10662 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10663 }
10664 }
10665
10666 ScriptInputUserData ctx = new ScriptInputUserData;
10674 }
10675 }
10676 else if (!
GetGame().IsMultiplayer())
10677 {
10679 }
10680 }
10681 }
10682
10683 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10684 {
10685
10686 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10687 return false;
10688
10689 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10690 return false;
10691
10692
10694 return false;
10695
10696
10697 Magazine mag = Magazine.Cast(this);
10698 if (mag)
10699 {
10700 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10701 return false;
10702
10703 if (stack_max_limit)
10704 {
10705 Magazine other_mag = Magazine.Cast(other_item);
10706 if (other_item)
10707 {
10708 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10709 return false;
10710 }
10711
10712 }
10713 }
10714 else
10715 {
10716
10718 return false;
10719
10721 return false;
10722 }
10723
10724 PlayerBase player = null;
10725 if (CastTo(player, GetHierarchyRootPlayer()))
10726 {
10727 if (player.GetInventory().HasAttachment(this))
10728 return false;
10729
10730 if (player.IsItemsToDelete())
10731 return false;
10732 }
10733
10734 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10735 return false;
10736
10737 int slotID;
10739 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10740 return false;
10741
10742 return true;
10743 }
10744
10746 {
10748 }
10749
10751 {
10752 return m_IsResultOfSplit;
10753 }
10754
10756 {
10757 m_IsResultOfSplit = value;
10758 }
10759
10761 {
10763 }
10764
10766 {
10767 float other_item_quantity = other_item.GetQuantity();
10768 float this_free_space;
10769
10771
10773
10774 if (other_item_quantity > this_free_space)
10775 {
10776 return this_free_space;
10777 }
10778 else
10779 {
10780 return other_item_quantity;
10781 }
10782 }
10783
10785 {
10787 }
10788
10790 {
10792 return;
10793
10794 if (!IsMagazine() && other_item)
10795 {
10797 if (quantity_used != 0)
10798 {
10799 float hp1 = GetHealth01("","");
10800 float hp2 = other_item.GetHealth01("","");
10801 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10802 hpResult = hpResult / (
GetQuantity() + quantity_used);
10803
10804 hpResult *= GetMaxHealth();
10805 Math.Round(hpResult);
10806 SetHealth("", "Health", hpResult);
10807
10809 other_item.AddQuantity(-quantity_used);
10810 }
10811 }
10813 }
10814
10816 {
10817 #ifdef SERVER
10818 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10819 GetHierarchyParent().IncreaseLifetimeUp();
10820 #endif
10821 };
10822
10824 {
10825 PlayerBase p = PlayerBase.Cast(player);
10826
10827 array<int> recipesIds = p.m_Recipes;
10828 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10829 if (moduleRecipesManager)
10830 {
10831 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10832 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10833 }
10834
10835 for (int i = 0;i < recipesIds.Count(); i++)
10836 {
10837 int key = recipesIds.Get(i);
10838 string recipeName = moduleRecipesManager.GetRecipeName(key);
10840 }
10841 }
10842
10843
10844 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10845 {
10846 super.GetDebugActions(outputList);
10847
10848
10853
10854
10858
10862
10863
10866
10867
10869 {
10872 }
10873
10875
10878
10882 }
10883
10884
10885
10886
10888 {
10889 super.OnAction(action_id, player, ctx);
10890 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10891 {
10892 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10893 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10894 PlayerBase p = PlayerBase.Cast(player);
10895 if (
EActions.RECIPES_RANGE_START < 1000)
10896 {
10897 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10898 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10899 }
10900 }
10901 #ifndef SERVER
10902 else if (action_id ==
EActions.WATCH_PLAYER)
10903 {
10904 PluginDeveloper.SetDeveloperItemClientEx(player);
10905 }
10906 #endif
10908 {
10909 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
10910 {
10911 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
10912 OnDebugButtonPressServer(id + 1);
10913 }
10914
10915 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
10916 {
10917 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
10919 }
10920
10921 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
10922 {
10923 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
10925 }
10926
10927 else if (action_id ==
EActions.ADD_QUANTITY)
10928 {
10929 if (IsMagazine())
10930 {
10931 Magazine mag = Magazine.Cast(this);
10932 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
10933 }
10934 else
10935 {
10937 }
10938
10939 if (m_EM)
10940 {
10941 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
10942 }
10943
10944 }
10945
10946 else if (action_id ==
EActions.REMOVE_QUANTITY)
10947 {
10948 if (IsMagazine())
10949 {
10950 Magazine mag2 = Magazine.Cast(this);
10951 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
10952 }
10953 else
10954 {
10956 }
10957 if (m_EM)
10958 {
10959 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
10960 }
10961
10962 }
10963
10964 else if (action_id ==
EActions.SET_QUANTITY_0)
10965 {
10967
10968 if (m_EM)
10969 {
10970 m_EM.SetEnergy(0);
10971 }
10972 }
10973
10974 else if (action_id ==
EActions.SET_MAX_QUANTITY)
10975 {
10977
10978 if (m_EM)
10979 {
10980 m_EM.SetEnergy(m_EM.GetEnergyMax());
10981 }
10982 }
10983
10984 else if (action_id ==
EActions.ADD_HEALTH)
10985 {
10986 AddHealth("","",GetMaxHealth("","Health")/5);
10987 }
10988 else if (action_id ==
EActions.REMOVE_HEALTH)
10989 {
10990 AddHealth("","",-GetMaxHealth("","Health")/5);
10991 }
10992 else if (action_id ==
EActions.DESTROY_HEALTH)
10993 {
10994 SetHealth01("","",0);
10995 }
10996 else if (action_id ==
EActions.WATCH_ITEM)
10997 {
10999 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11000 #ifdef DEVELOPER
11001 SetDebugDeveloper_item(this);
11002 #endif
11003 }
11004
11005 else if (action_id ==
EActions.ADD_TEMPERATURE)
11006 {
11007 AddTemperature(20);
11008
11009 }
11010
11011 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11012 {
11013 AddTemperature(-20);
11014
11015 }
11016
11017 else if (action_id ==
EActions.FLIP_FROZEN)
11018 {
11019 SetFrozen(!GetIsFrozen());
11020
11021 }
11022
11023 else if (action_id ==
EActions.ADD_WETNESS)
11024 {
11026
11027 }
11028
11029 else if (action_id ==
EActions.REMOVE_WETNESS)
11030 {
11032
11033 }
11034
11035 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11036 {
11039
11040
11041 }
11042
11043 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11044 {
11047 }
11048
11049 else if (action_id ==
EActions.MAKE_SPECIAL)
11050 {
11051 auto debugParams = DebugSpawnParams.WithPlayer(player);
11052 OnDebugSpawnEx(debugParams);
11053 }
11054
11055 else if (action_id ==
EActions.DELETE)
11056 {
11057 Delete();
11058 }
11059
11060 }
11061
11062
11063 return false;
11064 }
11065
11066
11067
11068
11072
11075
11076
11077
11079 {
11080 return false;
11081 }
11082
11083
11085 {
11086 return true;
11087 }
11088
11089
11091 {
11092 return true;
11093 }
11094
11095
11096
11098 {
11099 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11101 }
11102
11105 {
11106 return null;
11107 }
11108
11110 {
11111 return false;
11112 }
11113
11115 {
11116 return false;
11117 }
11118
11122
11123
11125 {
11126 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11127 return module_repairing.CanRepair(this, item_repair_kit);
11128 }
11129
11130
11131 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11132 {
11133 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11134 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11135 }
11136
11137
11139 {
11140
11141
11142
11143
11144
11145
11146
11147
11148 return 1;
11149 }
11150
11151
11152
11154 {
11156 }
11157
11158
11159
11161 {
11163 }
11164
11165
11174 {
11175 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11176
11177 if (player)
11178 {
11179 player.MessageStatus(text);
11180 }
11181 }
11182
11183
11192 {
11193 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11194
11195 if (player)
11196 {
11197 player.MessageAction(text);
11198 }
11199 }
11200
11201
11210 {
11211 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11212
11213 if (player)
11214 {
11215 player.MessageFriendly(text);
11216 }
11217 }
11218
11219
11228 {
11229 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11230
11231 if (player)
11232 {
11233 player.MessageImportant(text);
11234 }
11235 }
11236
11238 {
11239 return true;
11240 }
11241
11242
11243 override bool KindOf(
string tag)
11244 {
11245 bool found = false;
11246 string item_name = this.
GetType();
11249
11250 int array_size = item_tag_array.Count();
11251 for (int i = 0; i < array_size; i++)
11252 {
11253 if (item_tag_array.Get(i) == tag)
11254 {
11255 found = true;
11256 break;
11257 }
11258 }
11259 return found;
11260 }
11261
11262
11264 {
11265
11266 super.OnRPC(sender, rpc_type,ctx);
11267
11268
11269 switch (rpc_type)
11270 {
11271 #ifndef SERVER
11272 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11273 Param2<bool, string> p = new Param2<bool, string>(false, "");
11274
11276 return;
11277
11278 bool play = p.param1;
11279 string soundSet = p.param2;
11280
11281 if (play)
11282 {
11284 {
11286 {
11288 }
11289 }
11290 else
11291 {
11293 }
11294 }
11295 else
11296 {
11298 }
11299
11300 break;
11301 #endif
11302
11303 }
11304
11306 {
11308 }
11309 }
11310
11311
11312
11313
11315 {
11316 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11317 return plugin.GetID(
name);
11318 }
11319
11321 {
11322 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11323 return plugin.GetName(id);
11324 }
11325
11328 {
11329
11330
11331 int varFlags;
11332 if (!ctx.
Read(varFlags))
11333 return;
11334
11335 if (varFlags & ItemVariableFlags.FLOAT)
11336 {
11338 }
11339 }
11340
11342 {
11343
11344 super.SerializeNumericalVars(floats_out);
11345
11346
11347
11349 {
11351 }
11352
11354 {
11356 }
11357
11359 {
11361 }
11362
11364 {
11369 }
11370
11372 {
11374 }
11375 }
11376
11378 {
11379
11380 super.DeSerializeNumericalVars(floats);
11381
11382
11383 int index = 0;
11384 int mask = Math.Round(floats.Get(index));
11385
11386 index++;
11387
11389 {
11391 {
11393 }
11394 else
11395 {
11396 float quantity = floats.Get(index);
11397 SetQuantity(quantity,
true,
false,
false,
false);
11398 }
11399 index++;
11400 }
11401
11403 {
11404 float wet = floats.Get(index);
11406 index++;
11407 }
11408
11410 {
11411 int liquidtype = Math.Round(floats.Get(index));
11413 index++;
11414 }
11415
11417 {
11419 index++;
11421 index++;
11423 index++;
11425 index++;
11426 }
11427
11429 {
11430 int cleanness = Math.Round(floats.Get(index));
11432 index++;
11433 }
11434 }
11435
11437 {
11438 super.WriteVarsToCTX(ctx);
11439
11440
11442 {
11444 }
11445
11447 {
11449 }
11450
11452 {
11454 }
11455
11457 {
11458 int r,g,b,a;
11464 }
11465
11467 {
11469 }
11470 }
11471
11473 {
11474 if (!super.ReadVarsFromCTX(ctx,version))
11475 return false;
11476
11477 int intValue;
11478 float value;
11479
11480 if (version < 140)
11481 {
11482 if (!ctx.
Read(intValue))
11483 return false;
11484
11485 m_VariablesMask = intValue;
11486 }
11487
11489 {
11490 if (!ctx.
Read(value))
11491 return false;
11492
11494 {
11496 }
11497 else
11498 {
11500 }
11501 }
11502
11503 if (version < 140)
11504 {
11506 {
11507 if (!ctx.
Read(value))
11508 return false;
11509 SetTemperatureDirect(value);
11510 }
11511 }
11512
11514 {
11515 if (!ctx.
Read(value))
11516 return false;
11518 }
11519
11521 {
11522 if (!ctx.
Read(intValue))
11523 return false;
11525 }
11526
11528 {
11529 int r,g,b,a;
11531 return false;
11533 return false;
11535 return false;
11537 return false;
11538
11540 }
11541
11543 {
11544 if (!ctx.
Read(intValue))
11545 return false;
11547 }
11548
11549 if (version >= 138 && version < 140)
11550 {
11552 {
11553 if (!ctx.
Read(intValue))
11554 return false;
11555 SetFrozen(intValue);
11556 }
11557 }
11558
11559 return true;
11560 }
11561
11562
11564 {
11567 {
11569 }
11570
11571 if (!super.OnStoreLoad(ctx, version))
11572 {
11574 return false;
11575 }
11576
11577 if (version >= 114)
11578 {
11579 bool hasQuickBarIndexSaved;
11580
11581 if (!ctx.
Read(hasQuickBarIndexSaved))
11582 {
11584 return false;
11585 }
11586
11587 if (hasQuickBarIndexSaved)
11588 {
11589 int itmQBIndex;
11590
11591
11592 if (!ctx.
Read(itmQBIndex))
11593 {
11595 return false;
11596 }
11597
11598 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11599 if (itmQBIndex != -1 && parentPlayer)
11600 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11601 }
11602 }
11603 else
11604 {
11605
11606 PlayerBase player;
11607 int itemQBIndex;
11608 if (version ==
int.
MAX)
11609 {
11610 if (!ctx.
Read(itemQBIndex))
11611 {
11613 return false;
11614 }
11615 }
11616 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11617 {
11618
11619 if (!ctx.
Read(itemQBIndex))
11620 {
11622 return false;
11623 }
11624 if (itemQBIndex != -1 && player)
11625 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11626 }
11627 }
11628
11629 if (version < 140)
11630 {
11631
11632 if (!LoadVariables(ctx, version))
11633 {
11635 return false;
11636 }
11637 }
11638
11639
11641 {
11643 return false;
11644 }
11645 if (version >= 132)
11646 {
11648 if (raib)
11649 {
11651 {
11653 return false;
11654 }
11655 }
11656 }
11657
11659 return true;
11660 }
11661
11662
11663
11665 {
11666 super.OnStoreSave(ctx);
11667
11668 PlayerBase player;
11669 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11670 {
11672
11673 int itemQBIndex = -1;
11674 itemQBIndex = player.FindQuickBarEntityIndex(this);
11675 ctx.
Write(itemQBIndex);
11676 }
11677 else
11678 {
11680 }
11681
11683
11685 if (raib)
11686 {
11688 }
11689 }
11690
11691
11693 {
11694 super.AfterStoreLoad();
11695
11697 {
11699 }
11700
11702 {
11705 }
11706 }
11707
11709 {
11710 super.EEOnAfterLoad();
11711
11713 {
11715 }
11716
11719 }
11720
11722 {
11723 return false;
11724 }
11725
11726
11727
11729 {
11731 {
11732 #ifdef PLATFORM_CONSOLE
11733
11735 {
11737 if (menu)
11738 {
11740 }
11741 }
11742 #endif
11743 }
11744
11746 {
11749 }
11750
11752 {
11753 SetWeightDirty();
11755 }
11757 {
11760 }
11761
11763 {
11766 }
11768 {
11771 }
11772
11773 super.OnVariablesSynchronized();
11774 }
11775
11776
11777
11779 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11780 {
11781 if (!IsServerCheck(allow_client))
11782 return false;
11783
11785 return false;
11786
11789
11790 if (value <= (min + 0.001))
11791 value = min;
11792
11793 if (value == min)
11794 {
11795 if (destroy_config)
11796 {
11797 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11798 if (dstr)
11799 {
11801 this.Delete();
11802 return true;
11803 }
11804 }
11805 else if (destroy_forced)
11806 {
11808 this.Delete();
11809 return true;
11810 }
11811
11813 }
11814
11817
11819 {
11821
11822 if (delta)
11824 }
11825
11827
11828 return false;
11829 }
11830
11831
11833 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11834 {
11836 }
11837
11839 {
11842 }
11843
11845 {
11848 }
11849
11852 {
11853 float value_clamped = Math.Clamp(value, 0, 1);
11855 SetQuantity(result, destroy_config, destroy_forced);
11856 }
11857
11858
11861 {
11863 }
11864
11866 {
11868 }
11869
11870
11871
11872
11873
11874
11875
11876
11877
11878
11880 {
11881 int slot = -1;
11882 if (GetInventory())
11883 {
11884 InventoryLocation il = new InventoryLocation;
11885 GetInventory().GetCurrentInventoryLocation(il);
11887 }
11888
11890 }
11891
11893 {
11894 float quantity_max = 0;
11895
11897 {
11898 if (attSlotID != -1)
11899 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11900
11901 if (quantity_max <= 0)
11903 }
11904
11905 if (quantity_max <= 0)
11907
11908 return quantity_max;
11909 }
11910
11912 {
11914 }
11915
11917 {
11919 }
11920
11921
11923 {
11925 }
11926
11928 {
11930 }
11931
11933 {
11935 }
11936
11937
11939 {
11940
11941 float weightEx = GetWeightEx();
11942 float special = GetInventoryAndCargoWeight();
11943 return weightEx - special;
11944 }
11945
11946
11948 {
11950 }
11951
11953 {
11955 {
11956 #ifdef DEVELOPER
11957 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11958 {
11959 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
11961 }
11962 #endif
11963
11964 return GetQuantity() * GetConfigWeightModified();
11965 }
11966 else if (HasEnergyManager())
11967 {
11968 #ifdef DEVELOPER
11969 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11970 {
11971 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
11972 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
11973 }
11974 #endif
11975 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
11976 }
11977 else
11978 {
11979 #ifdef DEVELOPER
11980 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11981 {
11982 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
11983 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
11984 }
11985 #endif
11986 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
11987 }
11988 }
11989
11992 {
11993 int item_count = 0;
11995
11996 if (GetInventory().GetCargo() != NULL)
11997 {
11998 item_count = GetInventory().GetCargo().GetItemCount();
11999 }
12000
12001 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12002 {
12003 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12004 if (item)
12005 item_count += item.GetNumberOfItems();
12006 }
12007 return item_count;
12008 }
12009
12012 {
12013 float weight = 0;
12014 float wetness = 1;
12015 if (include_wetness)
12018 {
12019 weight = wetness * m_ConfigWeight;
12020 }
12022 {
12023 weight = 1;
12024 }
12025 return weight;
12026 }
12027
12028
12029
12031 {
12032 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12033 {
12034 GameInventory inv = GetInventory();
12035 array<EntityAI> items = new array<EntityAI>;
12037 for (int i = 0; i < items.Count(); i++)
12038 {
12040 if (item)
12041 {
12043 }
12044 }
12045 }
12046 }
12047
12048
12049
12050
12052 {
12053 float energy = 0;
12054 if (HasEnergyManager())
12055 {
12056 energy = GetCompEM().GetEnergy();
12057 }
12058 return energy;
12059 }
12060
12061
12063 {
12064 super.OnEnergyConsumed();
12065
12067 }
12068
12070 {
12071 super.OnEnergyAdded();
12072
12074 }
12075
12076
12078 {
12079 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12080 {
12082 {
12083 float energy_0to1 = GetCompEM().GetEnergy0To1();
12085 }
12086 }
12087 }
12088
12089
12091 {
12092 return ConfigGetFloat("heatIsolation");
12093 }
12094
12096 {
12098 }
12099
12101 {
12102 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12103 if (
GetGame().ConfigIsExisting(paramPath))
12105
12106 return 0.0;
12107 }
12108
12110 {
12111 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12112 if (
GetGame().ConfigIsExisting(paramPath))
12114
12115 return 0.0;
12116 }
12117
12118 override void SetWet(
float value,
bool allow_client =
false)
12119 {
12120 if (!IsServerCheck(allow_client))
12121 return;
12122
12125
12127
12128 m_VarWet = Math.Clamp(value, min, max);
12129
12131 {
12134 }
12135 }
12136
12137 override void AddWet(
float value)
12138 {
12140 }
12141
12143 {
12145 }
12146
12148 {
12150 }
12151
12153 {
12155 }
12156
12158 {
12160 }
12161
12163 {
12165 }
12166
12167 override void OnWetChanged(
float newVal,
float oldVal)
12168 {
12171 if (newLevel != oldLevel)
12172 {
12174 }
12175 }
12176
12178 {
12179 SetWeightDirty();
12180 }
12181
12183 {
12184 return GetWetLevelInternal(
m_VarWet);
12185 }
12186
12187
12188
12190 {
12192 }
12193
12195 {
12197 }
12198
12200 {
12202 }
12203
12205 {
12207 }
12208
12209
12210
12212 {
12213 if (ConfigIsExisting("itemModelLength"))
12214 {
12215 return ConfigGetFloat("itemModelLength");
12216 }
12217 return 0;
12218 }
12219
12221 {
12222 if (ConfigIsExisting("itemAttachOffset"))
12223 {
12224 return ConfigGetFloat("itemAttachOffset");
12225 }
12226 return 0;
12227 }
12228
12229 override void SetCleanness(
int value,
bool allow_client =
false)
12230 {
12231 if (!IsServerCheck(allow_client))
12232 return;
12233
12235
12237
12240 }
12241
12243 {
12245 }
12246
12248 {
12249 return true;
12250 }
12251
12252
12253
12254
12256 {
12258 }
12259
12261 {
12263 }
12264
12265
12266
12267
12268 override void SetColor(
int r,
int g,
int b,
int a)
12269 {
12275 }
12277 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12278 {
12283 }
12284
12286 {
12288 }
12289
12292 {
12293 int r,g,b,a;
12295 r = r/255;
12296 g = g/255;
12297 b = b/255;
12298 a = a/255;
12299 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12300 }
12301
12302
12303
12304 override void SetLiquidType(
int value,
bool allow_client =
false)
12305 {
12306 if (!IsServerCheck(allow_client))
12307 return;
12308
12313 }
12314
12316 {
12317 return ConfigGetInt("varLiquidTypeInit");
12318 }
12319
12321 {
12323 }
12324
12326 {
12328 SetFrozen(false);
12329 }
12330
12333 {
12334 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12335 }
12336
12337
12340 {
12341 PlayerBase nplayer;
12342 if (PlayerBase.CastTo(nplayer, player))
12343 {
12345
12346 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12347 }
12348 }
12349
12350
12353 {
12354 PlayerBase nplayer;
12355 if (PlayerBase.CastTo(nplayer,player))
12356 {
12357
12358 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12359
12360 }
12361
12362
12363 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12364
12365
12366 if (HasEnergyManager())
12367 {
12368 GetCompEM().UpdatePlugState();
12369 }
12370 }
12371
12372
12374 {
12375 super.OnPlacementStarted(player);
12376
12378 }
12379
12380 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12381 {
12383 {
12384 m_AdminLog.OnPlacementComplete(player,
this);
12385 }
12386
12387 super.OnPlacementComplete(player, position, orientation);
12388 }
12389
12390
12391
12392
12393
12395 {
12397 {
12398 return true;
12399 }
12400 else
12401 {
12402 return false;
12403 }
12404 }
12405
12406
12408 {
12410 {
12412 }
12413 }
12414
12415
12417 {
12419 }
12420
12422 {
12424 }
12425
12426 override void InsertAgent(
int agent,
float count = 1)
12427 {
12428 if (count < 1)
12429 return;
12430
12432 }
12433
12436 {
12438 }
12439
12440
12442 {
12444 }
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
12469
12470
12471
12472
12473
12474
12475
12476
12477
12478
12479
12480
12481
12482
12483
12484
12485
12486
12488 {
12490 return false;
12491 return true;
12492 }
12493
12495 {
12496
12498 }
12499
12500
12503 {
12504 super.CheckForRoofLimited(timeTresholdMS);
12505
12507 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12508 {
12509 m_PreviousRoofTestTime = time;
12510 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12511 }
12512 }
12513
12514
12516 {
12518 {
12519 return 0;
12520 }
12521
12522 if (GetInventory().GetAttachmentSlotsCount() != 0)
12523 {
12524 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12525 if (filter)
12526 return filter.GetProtectionLevel(type, false, system);
12527 else
12528 return 0;
12529 }
12530
12531 string subclassPath, entryName;
12532
12533 switch (type)
12534 {
12536 entryName = "biological";
12537 break;
12539 entryName = "chemical";
12540 break;
12541 default:
12542 entryName = "biological";
12543 break;
12544 }
12545
12546 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12547
12549 }
12550
12551
12552
12555 {
12556 if (!IsMagazine())
12558
12560 }
12561
12562
12563
12564
12565
12570 {
12571 return true;
12572 }
12573
12575 {
12577 }
12578
12579
12580
12581
12582
12584 {
12585 if (parent)
12586 {
12587 if (parent.IsInherited(DayZInfected))
12588 return true;
12589
12590 if (!parent.IsRuined())
12591 return true;
12592 }
12593
12594 return true;
12595 }
12596
12598 {
12599 if (!super.CanPutAsAttachment(parent))
12600 {
12601 return false;
12602 }
12603
12604 if (!IsRuined() && !parent.IsRuined())
12605 {
12606 return true;
12607 }
12608
12609 return false;
12610 }
12611
12613 {
12614
12615
12616
12617
12618 return super.CanReceiveItemIntoCargo(item);
12619 }
12620
12622 {
12623
12624
12625
12626
12627 GameInventory attachmentInv = attachment.GetInventory();
12629 {
12630 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12631 return false;
12632 }
12633
12634 InventoryLocation loc = new InventoryLocation();
12635 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12636 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12637 return false;
12638
12639 return super.CanReceiveAttachment(attachment, slotId);
12640 }
12641
12643 {
12644 if (!super.CanReleaseAttachment(attachment))
12645 return false;
12646
12647 return GetInventory().AreChildrenAccessible();
12648 }
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662
12663
12664
12665
12666
12667
12668
12669
12671 {
12672 int id = muzzle_owner.GetMuzzleID();
12673 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12674
12675 if (WPOF_array)
12676 {
12677 for (int i = 0; i < WPOF_array.Count(); i++)
12678 {
12679 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12680
12681 if (WPOF)
12682 {
12683 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12684 }
12685 }
12686 }
12687 }
12688
12689
12691 {
12692 int id = muzzle_owner.GetMuzzleID();
12694
12695 if (WPOBE_array)
12696 {
12697 for (int i = 0; i < WPOBE_array.Count(); i++)
12698 {
12699 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12700
12701 if (WPOBE)
12702 {
12703 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12704 }
12705 }
12706 }
12707 }
12708
12709
12711 {
12712 int id = muzzle_owner.GetMuzzleID();
12713 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12714
12715 if (WPOOH_array)
12716 {
12717 for (int i = 0; i < WPOOH_array.Count(); i++)
12718 {
12719 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12720
12721 if (WPOOH)
12722 {
12723 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12724 }
12725 }
12726 }
12727 }
12728
12729
12731 {
12732 int id = muzzle_owner.GetMuzzleID();
12733 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12734
12735 if (WPOOH_array)
12736 {
12737 for (int i = 0; i < WPOOH_array.Count(); i++)
12738 {
12739 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12740
12741 if (WPOOH)
12742 {
12743 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12744 }
12745 }
12746 }
12747 }
12748
12749
12751 {
12752 int id = muzzle_owner.GetMuzzleID();
12753 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12754
12755 if (WPOOH_array)
12756 {
12757 for (int i = 0; i < WPOOH_array.Count(); i++)
12758 {
12759 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12760
12761 if (WPOOH)
12762 {
12763 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12764 }
12765 }
12766 }
12767 }
12768
12769
12770
12772 {
12774 {
12775 return true;
12776 }
12777
12778 return false;
12779 }
12780
12782 {
12784 {
12785 return true;
12786 }
12787
12788 return false;
12789 }
12790
12792 {
12794 {
12795 return true;
12796 }
12797
12798 return false;
12799 }
12800
12802 {
12803 return false;
12804 }
12805
12808 {
12809 return UATimeSpent.DEFAULT_DEPLOY;
12810 }
12811
12812
12813
12814
12816 {
12818 SetSynchDirty();
12819 }
12820
12822 {
12824 }
12825
12826
12828 {
12829 return false;
12830 }
12831
12834 {
12835 string att_type = "None";
12836
12837 if (ConfigIsExisting("soundAttType"))
12838 {
12839 att_type = ConfigGetString("soundAttType");
12840 }
12841
12843 }
12844
12846 {
12848 }
12849
12850
12851
12852
12853
12857
12859 {
12862
12864 }
12865
12866
12868 {
12870 return;
12871
12873
12876
12879
12880 SoundParameters params = new SoundParameters();
12884 }
12885
12886
12888 {
12890 return;
12891
12893 SetSynchDirty();
12894
12897 }
12898
12899
12901 {
12903 return;
12904
12906 SetSynchDirty();
12907
12910 }
12911
12913 {
12915 }
12916
12918 {
12920 }
12921
12924 {
12925 if (!
GetGame().IsDedicatedServer())
12926 {
12927 if (ConfigIsExisting("attachSoundSet"))
12928 {
12929 string cfg_path = "";
12930 string soundset = "";
12931 string type_name =
GetType();
12932
12935 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
12936 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
12937
12938 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
12939 {
12940 for (int i = 0; i < cfg_soundset_array.Count(); i++)
12941 {
12942 if (cfg_slot_array[i] == slot_type)
12943 {
12944 soundset = cfg_soundset_array[i];
12945 break;
12946 }
12947 }
12948 }
12949
12950 if (soundset != "")
12951 {
12952 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
12954 }
12955 }
12956 }
12957 }
12958
12960 {
12961
12962 }
12963
12964 void OnApply(PlayerBase player);
12965
12967 {
12968 return 1.0;
12969 };
12970
12972 {
12974 }
12975
12977 {
12979 }
12980
12982
12984 {
12985 SetDynamicPhysicsLifeTime(0.01);
12987 }
12988
12990 {
12991 array<string> zone_names = new array<string>;
12992 GetDamageZones(zone_names);
12993 for (int i = 0; i < zone_names.Count(); i++)
12994 {
12995 SetHealthMax(zone_names.Get(i),"Health");
12996 }
12997 SetHealthMax("","Health");
12998 }
12999
13002 {
13003 float global_health = GetHealth01("","Health");
13004 array<string> zones = new array<string>;
13005 GetDamageZones(zones);
13006
13007 for (int i = 0; i < zones.Count(); i++)
13008 {
13009 SetHealth01(zones.Get(i),"Health",global_health);
13010 }
13011 }
13012
13015 {
13016 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13017 }
13018
13020 {
13021 if (!hasRootAsPlayer)
13022 {
13023 if (refParentIB)
13024 {
13025
13026 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13027 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13028
13029 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13030 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13031
13034 }
13035 else
13036 {
13037
13040 }
13041 }
13042 }
13043
13045 {
13047 {
13048 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13049 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13050 {
13051 float heatPermCoef = 1.0;
13053 while (ent)
13054 {
13055 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13056 ent = ent.GetHierarchyParent();
13057 }
13058
13059 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13060 }
13061 }
13062 }
13063
13065 {
13066
13067 EntityAI parent = GetHierarchyParent();
13068 if (!parent)
13069 {
13070 hasParent = false;
13071 hasRootAsPlayer = false;
13072 }
13073 else
13074 {
13075 hasParent = true;
13076 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13077 refParentIB =
ItemBase.Cast(parent);
13078 }
13079 }
13080
13081 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13082 {
13083
13084 }
13085
13087 {
13088
13089 return false;
13090 }
13091
13093 {
13094
13095
13096 return false;
13097 }
13098
13100 {
13101
13102 return false;
13103 }
13104
13107 {
13108 return !GetIsFrozen() &&
IsOpen();
13109 }
13110
13112 {
13113 bool hasParent = false, hasRootAsPlayer = false;
13115
13116 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13117 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13118
13119 if (wwtu || foodDecay)
13120 {
13124
13125 if (processWetness || processTemperature || processDecay)
13126 {
13128
13129 if (processWetness)
13130 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13131
13132 if (processTemperature)
13134
13135 if (processDecay)
13136 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13137 }
13138 }
13139 }
13140
13143 {
13145 }
13146
13148 {
13151
13152 return super.GetTemperatureFreezeThreshold();
13153 }
13154
13156 {
13159
13160 return super.GetTemperatureThawThreshold();
13161 }
13162
13164 {
13167
13168 return super.GetItemOverheatThreshold();
13169 }
13170
13172 {
13174 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13175
13176 return super.GetTemperatureFreezeTime();
13177 }
13178
13180 {
13182 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13183
13184 return super.GetTemperatureThawTime();
13185 }
13186
13191
13193 {
13194 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13195 }
13196
13198 {
13199 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13200 }
13201
13204 {
13206 }
13207
13209 {
13211 }
13212
13214 {
13216 }
13217
13220 {
13221 return null;
13222 }
13223
13226 {
13227 return false;
13228 }
13229
13231 {
13233 {
13236 if (!trg)
13237 {
13239 explosive = this;
13240 }
13241
13242 explosive.PairRemote(trg);
13244
13245 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13246 trg.SetPersistentPairID(persistentID);
13247 explosive.SetPersistentPairID(persistentID);
13248
13249 return true;
13250 }
13251 return false;
13252 }
13253
13256 {
13257 float ret = 1.0;
13260 ret *= GetHealth01();
13261
13262 return ret;
13263 }
13264
13265 #ifdef DEVELOPER
13266 override void SetDebugItem()
13267 {
13268 super.SetDebugItem();
13269 _itemBase = this;
13270 }
13271
13273 {
13274 string text = super.GetDebugText();
13275
13277 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13278
13279 return text;
13280 }
13281 #endif
13282
13284 {
13285 return true;
13286 }
13287
13289
13291
13293 {
13296 }
13297
13298
13306
13322}
13323
13325{
13327 if (entity)
13328 {
13329 bool is_item = entity.IsInherited(
ItemBase);
13330 if (is_item && full_quantity)
13331 {
13334 }
13335 }
13336 else
13337 {
13339 return NULL;
13340 }
13341 return entity;
13342}
13343
13345{
13346 if (item)
13347 {
13348 if (health > 0)
13349 item.SetHealth("", "", health);
13350
13351 if (item.CanHaveTemperature())
13352 {
13354 if (item.CanFreeze())
13355 item.SetFrozen(false);
13356 }
13357
13358 if (item.HasEnergyManager())
13359 {
13360 if (quantity >= 0)
13361 {
13362 item.GetCompEM().SetEnergy0To1(quantity);
13363 }
13364 else
13365 {
13367 }
13368 }
13369 else if (item.IsMagazine())
13370 {
13371 Magazine mag = Magazine.Cast(item);
13372 if (quantity >= 0)
13373 {
13374 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13375 }
13376 else
13377 {
13379 }
13380
13381 }
13382 else
13383 {
13384 if (quantity >= 0)
13385 {
13386 item.SetQuantityNormalized(quantity, false);
13387 }
13388 else
13389 {
13391 }
13392
13393 }
13394 }
13395}
13396
13397#ifdef DEVELOPER
13399#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.