8435{
8437 {
8438 return true;
8439 }
8440};
8441
8442
8443
8445{
8449
8451
8454
8455
8456
8457
8458
8467
8473
8478
8483
8504 protected bool m_IsResultOfSplit
8505
8507
8512
8513
8514
8516
8520
8521
8522
8524
8527
8528
8529
8535
8536
8544
8547
8548
8550
8551
8553
8554
8559
8560
8565
8566
8568
8569
8571 {
8576
8577 if (!
GetGame().IsDedicatedServer())
8578 {
8580 {
8582
8584 {
8586 }
8587 }
8588
8591 }
8592
8593 m_OldLocation = null;
8594
8596 {
8598 }
8599
8600 if (ConfigIsExisting("headSelectionsToHide"))
8601 {
8604 }
8605
8607 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8608 {
8610 }
8611
8613
8614 m_IsResultOfSplit = false;
8615
8617 }
8618
8620 {
8621 super.InitItemVariables();
8622
8628 m_Count = ConfigGetInt(
"count");
8629
8632
8637
8640
8645
8657
8661
8662
8665 if (ConfigIsExisting("canBeSplit"))
8666 {
8669 }
8670
8672 if (ConfigIsExisting("itemBehaviour"))
8674
8675
8678 RegisterNetSyncVariableInt("m_VarLiquidType");
8679 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8680
8681 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8682 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8683 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8684
8685 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8686 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8687 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8688 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8689
8690 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8691 RegisterNetSyncVariableBool("m_IsTakeable");
8692 RegisterNetSyncVariableBool("m_IsHologram");
8693
8696 {
8699 }
8700
8702
8704 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8706
8707 }
8708
8710 {
8712 }
8713
8715 {
8718 {
8723 }
8724 }
8725
8726 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8727 {
8729 {
8732 }
8733
8735 }
8736
8738 {
8744 }
8745
8747
8749 {
8751
8752 if (!action)
8753 {
8754 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8755 return;
8756 }
8757
8759 if (!ai)
8760 {
8762 return;
8763 }
8764
8766 if (!action_array)
8767 {
8768 action_array = new array<ActionBase_Basic>;
8770 }
8771 if (LogManager.IsActionLogEnable())
8772 {
8773 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8774 }
8775
8776 if (action_array.Find(action) != -1)
8777 {
8778 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8779 }
8780 else
8781 {
8782 action_array.Insert(action);
8783 }
8784 }
8785
8787 {
8789 ActionBase action = player.GetActionManager().GetAction(actionName);
8792
8793 if (action_array)
8794 {
8795 action_array.RemoveItem(action);
8796 }
8797 }
8798
8799
8800
8802 {
8803 ActionOverrideData overrideData = new ActionOverrideData();
8807
8809 if (!actionMap)
8810 {
8813 }
8814
8815 actionMap.Insert(this.
Type(), overrideData);
8816
8817 }
8818
8820
8822
8823
8825 {
8828
8831
8832 string config_to_search = "CfgVehicles";
8833 string muzzle_owner_config;
8834
8836 {
8837 if (IsInherited(Weapon))
8838 config_to_search = "CfgWeapons";
8839
8840 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8841
8842 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
8843
8845
8846 if (config_OnFire_subclass_count > 0)
8847 {
8848 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
8849
8850 for (int i = 0; i < config_OnFire_subclass_count; i++)
8851 {
8852 string particle_class = "";
8854 string config_OnFire_entry = config_OnFire_class + particle_class;
8855 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
8856 WPOF_array.Insert(WPOF);
8857 }
8858
8859
8861 }
8862 }
8863
8865 {
8866 config_to_search = "CfgWeapons";
8867 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8868
8869 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
8870
8872
8873 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
8874 {
8875 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
8876
8877 for (i = 0; i < config_OnBulletCasingEject_count; i++)
8878 {
8879 string particle_class2 = "";
8881 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
8882 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
8883 WPOBE_array.Insert(WPOBE);
8884 }
8885
8886
8888 }
8889 }
8890 }
8891
8892
8894 {
8897
8899 {
8900 string config_to_search = "CfgVehicles";
8901
8902 if (IsInherited(Weapon))
8903 config_to_search = "CfgWeapons";
8904
8905 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8906 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
8907
8908 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
8909 {
8910
8912
8914 {
8916 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
8918 return;
8919 }
8920
8923
8924
8925
8927 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
8928
8929 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
8930 {
8931 string particle_class = "";
8933 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
8935
8936 if (entry_type == CT_CLASS)
8937 {
8938 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
8939 WPOOH_array.Insert(WPOF);
8940 }
8941 }
8942
8943
8945 }
8946 }
8947 }
8948
8950 {
8952 }
8953
8955 {
8957 {
8959
8962
8965
8966 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8967 }
8968 }
8969
8971 {
8973 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8974
8976 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8977
8979 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8980
8982 {
8984 }
8985 }
8986
8988 {
8990 }
8991
8993 {
8996 else
8998
9000 {
9003 }
9004 else
9005 {
9008
9011 }
9012
9014 }
9015
9017 {
9019 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9020 }
9021
9023 {
9025 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9027 }
9028
9030 {
9032 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9033 }
9034
9036 {
9039
9040 OverheatingParticle OP = new OverheatingParticle();
9045
9047 }
9048
9050 {
9053
9054 return -1;
9055 }
9056
9058 {
9060 {
9063
9064 for (int i = count; i > 0; --i)
9065 {
9066 int id = i - 1;
9069
9072
9073 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9074 {
9075 if (p)
9076 {
9079 }
9080 }
9081 }
9082 }
9083 }
9084
9086 {
9088 {
9090 {
9091 int id = i - 1;
9093
9094 if (OP)
9095 {
9097
9098 if (p)
9099 {
9101 }
9102
9103 delete OP;
9104 }
9105 }
9106
9109 }
9110 }
9111
9114 {
9115 return 0.0;
9116 }
9117
9118
9120 {
9121 return 250;
9122 }
9123
9125 {
9126 return 0;
9127 }
9128
9131 {
9133 return true;
9134
9135 return false;
9136 }
9137
9140 {
9143
9145 {
9147 }
9148 else
9149 {
9150
9152 }
9153
9155 }
9156
9163 {
9164 return -1;
9165 }
9166
9167
9168
9169
9171 {
9173 {
9175 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9176
9177 if (r_index >= 0)
9178 {
9179 InventoryLocation r_il = new InventoryLocation;
9180 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9181
9182 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9185 {
9186 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9187 }
9189 {
9190 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9191 }
9192
9193 }
9194
9195 player.GetHumanInventory().ClearUserReservedLocation(this);
9196 }
9197
9200 }
9201
9202
9203
9204
9206 {
9207 return ItemBase.m_DebugActionsMask;
9208 }
9209
9211 {
9212 return ItemBase.m_DebugActionsMask & mask;
9213 }
9214
9216 {
9217 ItemBase.m_DebugActionsMask = mask;
9218 }
9219
9221 {
9222 ItemBase.m_DebugActionsMask |= mask;
9223 }
9224
9226 {
9227 ItemBase.m_DebugActionsMask &= ~mask;
9228 }
9229
9231 {
9233 {
9235 }
9236 else
9237 {
9239 }
9240 }
9241
9242
9244 {
9245 if (GetEconomyProfile())
9246 {
9247 float q_max = GetEconomyProfile().GetQuantityMax();
9248 if (q_max > 0)
9249 {
9250 float q_min = GetEconomyProfile().GetQuantityMin();
9251 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9252
9254 {
9255 ComponentEnergyManager comp = GetCompEM();
9257 {
9259 }
9260 }
9262 {
9264
9265 }
9266
9267 }
9268 }
9269 }
9270
9273 {
9274 EntityAI parent = GetHierarchyParent();
9275
9276 if (parent)
9277 {
9278 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9279 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9280 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9281 }
9282 }
9283
9286 {
9287 EntityAI parent = GetHierarchyParent();
9288
9289 if (parent)
9290 {
9291 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9292 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9293 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9294 }
9295 }
9296
9298 {
9299
9300
9301
9302
9304
9306 {
9307 if (ScriptInputUserData.CanStoreInputUserData())
9308 {
9309 ScriptInputUserData ctx = new ScriptInputUserData;
9315 ctx.
Write(use_stack_max);
9318
9320 {
9321 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9322 }
9323 }
9324 }
9325 else if (!
GetGame().IsMultiplayer())
9326 {
9328 }
9329 }
9330
9332 {
9334 }
9335
9337 {
9339 }
9340
9342 {
9344 }
9345
9347 {
9348
9349 return false;
9350 }
9351
9353 {
9354 return false;
9355 }
9356
9360 {
9361 return false;
9362 }
9363
9365 {
9366 return "";
9367 }
9368
9370
9372 {
9373 return false;
9374 }
9375
9377 {
9378 return true;
9379 }
9380
9381
9382
9384 {
9385 return true;
9386 }
9387
9389 {
9390 return true;
9391 }
9392
9394 {
9395 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9397 }
9398
9400 {
9402 }
9403
9405 {
9407 if (!is_being_placed)
9409 SetSynchDirty();
9410 }
9411
9412
9414
9416 {
9418 }
9419
9421 {
9423 }
9424
9426 {
9427 return 1;
9428 }
9429
9431 {
9432 return false;
9433 }
9434
9436 {
9438 SetSynchDirty();
9439 }
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
9452
9453
9454
9455
9456
9457
9458
9459
9460
9461
9462
9463
9464
9465
9466
9467
9468
9469
9470
9471
9472
9473
9474
9476 {
9477 super.OnMovedInsideCargo(container);
9478
9479 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9480 }
9481
9482 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9483 {
9484 super.EEItemLocationChanged(oldLoc,newLoc);
9485
9486 PlayerBase new_player = null;
9487 PlayerBase old_player = null;
9488
9489 if (newLoc.GetParent())
9490 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9491
9492 if (oldLoc.GetParent())
9493 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9494
9496 {
9497 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9498
9499 if (r_index >= 0)
9500 {
9501 InventoryLocation r_il = new InventoryLocation;
9502 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9503
9504 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9507 {
9508 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9509 }
9511 {
9512 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9513 }
9514
9515 }
9516 }
9517
9519 {
9520 if (new_player)
9521 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9522
9523 if (new_player == old_player)
9524 {
9525
9526 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9527 {
9529 {
9530 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9531 {
9532 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9533 }
9534 }
9535 else
9536 {
9537 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9538 }
9539 }
9540
9541 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9542 {
9543 int type = oldLoc.GetType();
9545 {
9546 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9547 }
9549 {
9550 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9551 }
9552 }
9553 if (!m_OldLocation)
9554 {
9555 m_OldLocation = new InventoryLocation;
9556 }
9557 m_OldLocation.Copy(oldLoc);
9558 }
9559 else
9560 {
9561 if (m_OldLocation)
9562 {
9563 m_OldLocation.Reset();
9564 }
9565 }
9566
9568 }
9569 else
9570 {
9571 if (new_player)
9572 {
9573 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9574 if (res_index >= 0)
9575 {
9576 InventoryLocation il = new InventoryLocation;
9577 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9579 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9582 {
9583 il.
GetParent().GetOnReleaseLock().Invoke(it);
9584 }
9586 {
9588 }
9589
9590 }
9591 }
9593 {
9594
9596 }
9597
9598 if (m_OldLocation)
9599 {
9600 m_OldLocation.Reset();
9601 }
9602 }
9603 }
9604
9605 override void EOnContact(IEntity other, Contact extra)
9606 {
9608 {
9609 int liquidType = -1;
9611 if (impactSpeed > 0.0)
9612 {
9614 #ifndef SERVER
9616 #else
9618 SetSynchDirty();
9619 #endif
9621 }
9622 }
9623
9624 #ifdef SERVER
9625 if (GetCompEM() && GetCompEM().IsPlugged())
9626 {
9627 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9628 GetCompEM().UnplugThis();
9629 }
9630 #endif
9631 }
9632
9634
9636 {
9638 }
9639
9641 {
9642
9643 }
9644
9646 {
9647 super.OnItemLocationChanged(old_owner, new_owner);
9648
9649 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9650 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9651
9652 if (!relatedPlayer && playerNew)
9653 relatedPlayer = playerNew;
9654
9655 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9656 {
9658 if (actionMgr)
9659 {
9660 ActionBase currentAction = actionMgr.GetRunningAction();
9661 if (currentAction)
9663 }
9664 }
9665
9666 Man ownerPlayerOld = null;
9667 Man ownerPlayerNew = null;
9668
9669 if (old_owner)
9670 {
9671 if (old_owner.
IsMan())
9672 {
9673 ownerPlayerOld = Man.Cast(old_owner);
9674 }
9675 else
9676 {
9677 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9678 }
9679 }
9680 else
9681 {
9683 {
9685
9686 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9687 {
9688 GetCompEM().UnplugThis();
9689 }
9690 }
9691 }
9692
9693 if (new_owner)
9694 {
9695 if (new_owner.
IsMan())
9696 {
9697 ownerPlayerNew = Man.Cast(new_owner);
9698 }
9699 else
9700 {
9701 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9702 }
9703 }
9704
9705 if (ownerPlayerOld != ownerPlayerNew)
9706 {
9707 if (ownerPlayerOld)
9708 {
9709 array<EntityAI> subItemsExit = new array<EntityAI>;
9711 for (int i = 0; i < subItemsExit.Count(); i++)
9712 {
9715 }
9716 }
9717
9718 if (ownerPlayerNew)
9719 {
9720 array<EntityAI> subItemsEnter = new array<EntityAI>;
9722 for (int j = 0; j < subItemsEnter.Count(); j++)
9723 {
9726 }
9727 }
9728 }
9729 else if (ownerPlayerNew != null)
9730 {
9731 PlayerBase nplayer;
9732 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9733 {
9734 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9736 for (int k = 0; k < subItemsUpdate.Count(); k++)
9737 {
9739 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9740 }
9741 }
9742 }
9743
9744 if (old_owner)
9745 old_owner.OnChildItemRemoved(this);
9746 if (new_owner)
9747 new_owner.OnChildItemReceived(this);
9748 }
9749
9750
9752 {
9753 super.EEDelete(parent);
9754 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9755 if (player)
9756 {
9758
9759 if (player.IsAlive())
9760 {
9761 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9762 if (r_index >= 0)
9763 {
9764 InventoryLocation r_il = new InventoryLocation;
9765 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9766
9767 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9770 {
9771 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9772 }
9774 {
9775 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9776 }
9777
9778 }
9779
9780 player.RemoveQuickBarEntityShortcut(this);
9781 }
9782 }
9783 }
9784
9786 {
9787 super.EEKilled(killer);
9788
9791 {
9792 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
9793 {
9794 if (IsMagazine())
9795 {
9796 if (Magazine.Cast(this).GetAmmoCount() > 0)
9797 {
9799 }
9800 }
9801 else
9802 {
9804 }
9805 }
9806 }
9807 }
9808
9810 {
9811 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9812
9813 super.OnWasAttached(parent, slot_id);
9814
9817
9819 }
9820
9822 {
9823 super.OnWasDetached(parent, slot_id);
9824
9827 }
9828
9830 {
9831 int idx;
9834
9835 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9836 if (inventory_slots.Count() < 1)
9837 {
9838 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
9839 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
9840 }
9841 else
9842 {
9843 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
9844 }
9845
9846 idx = inventory_slots.Find(slot);
9847 if (idx < 0)
9848 return "";
9849
9850 return attach_types.Get(idx);
9851 }
9852
9854 {
9855 int idx = -1;
9856 string slot;
9857
9860
9861 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9862 if (inventory_slots.Count() < 1)
9863 {
9864 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
9865 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9866 }
9867 else
9868 {
9869 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
9870 if (detach_types.Count() < 1)
9871 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9872 }
9873
9874 for (int i = 0; i < inventory_slots.Count(); i++)
9875 {
9876 slot = inventory_slots.Get(i);
9877 }
9878
9879 if (slot != "")
9880 {
9881 if (detach_types.Count() == 1)
9882 idx = 0;
9883 else
9884 idx = inventory_slots.Find(slot);
9885 }
9886 if (idx < 0)
9887 return "";
9888
9889 return detach_types.Get(idx);
9890 }
9891
9893 {
9894
9896
9897
9898 float min_time = 1;
9899 float max_time = 3;
9900 float delay = Math.RandomFloat(min_time, max_time);
9901
9902 explode_timer.Run(delay, this, "DoAmmoExplosion");
9903 }
9904
9906 {
9907 Magazine magazine = Magazine.Cast(this);
9908 int pop_sounds_count = 6;
9909 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
9910
9911
9912 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
9913 string sound_name = pop_sounds[ sound_idx ];
9915
9916
9917 magazine.ServerAddAmmoCount(-1);
9918
9919
9920 float min_temp_to_explode = 100;
9921
9922 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
9923 {
9925 }
9926 }
9927
9928
9929 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
9930 {
9931 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
9932
9933 const int CHANCE_DAMAGE_CARGO = 4;
9934 const int CHANCE_DAMAGE_ATTACHMENT = 1;
9935 const int CHANCE_DAMAGE_NOTHING = 2;
9936
9938 {
9939 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
9940 int chances;
9941 int rnd;
9942
9943 if (GetInventory().GetCargo())
9944 {
9945 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
9946 rnd = Math.RandomInt(0,chances);
9947
9948 if (rnd < CHANCE_DAMAGE_CARGO)
9949 {
9951 }
9952 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
9953 {
9955 }
9956 }
9957 else
9958 {
9959 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
9960 rnd = Math.RandomInt(0,chances);
9961
9962 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
9963 {
9965 }
9966 }
9967 }
9968 }
9969
9971 {
9972 if (GetInventory().GetCargo())
9973 {
9974 int item_count = GetInventory().GetCargo().GetItemCount();
9975 if (item_count > 0)
9976 {
9977 int random_pick = Math.RandomInt(0, item_count);
9979 if (!item.IsExplosive())
9980 {
9981 item.AddHealth("","",damage);
9982 return true;
9983 }
9984 }
9985 }
9986 return false;
9987 }
9988
9990 {
9991 int attachment_count = GetInventory().AttachmentCount();
9992 if (attachment_count > 0)
9993 {
9994 int random_pick = Math.RandomInt(0, attachment_count);
9995 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
9996 if (!attachment.IsExplosive())
9997 {
9998 attachment.AddHealth("","",damage);
9999 return true;
10000 }
10001 }
10002 return false;
10003 }
10004
10006 {
10008 }
10009
10011 {
10013 return GetInventory().CanRemoveEntity();
10014
10015 return false;
10016 }
10017
10019 {
10021 return;
10022
10024 {
10025 if (ScriptInputUserData.CanStoreInputUserData())
10026 {
10027 ScriptInputUserData ctx = new ScriptInputUserData;
10032 ctx.
Write(destination_entity);
10034 ctx.
Write(slot_id);
10036 }
10037 }
10038 else if (!
GetGame().IsMultiplayer())
10039 {
10041 }
10042 }
10043
10045 {
10047 return;
10048
10049 float split_quantity_new;
10053 InventoryLocation loc = new InventoryLocation;
10054
10055 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10056 {
10058 split_quantity_new = stack_max;
10059 else
10061
10062 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10063 if (new_item)
10064 {
10065 new_item.SetResultOfSplit(true);
10066 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10068 new_item.SetQuantity(split_quantity_new);
10069 }
10070 }
10071 else if (destination_entity && slot_id == -1)
10072 {
10073 if (quantity > stack_max)
10074 split_quantity_new = stack_max;
10075 else
10076 split_quantity_new = quantity;
10077
10079 {
10082 }
10083
10084 if (new_item)
10085 {
10086 new_item.SetResultOfSplit(true);
10087 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10089 new_item.SetQuantity(split_quantity_new);
10090 }
10091 }
10092 else
10093 {
10094 if (stack_max != 0)
10095 {
10097 {
10099 }
10100
10101 if (split_quantity_new == 0)
10102 {
10103 if (!
GetGame().IsMultiplayer())
10104 player.PhysicalPredictiveDropItem(this);
10105 else
10106 player.ServerDropEntity(this);
10107 return;
10108 }
10109
10111
10112 if (new_item)
10113 {
10114 new_item.SetResultOfSplit(true);
10115 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10117 new_item.SetQuantity(stack_max);
10118 new_item.PlaceOnSurface();
10119 }
10120 }
10121 }
10122 }
10123
10125 {
10127 return;
10128
10129 float split_quantity_new;
10133 InventoryLocation loc = new InventoryLocation;
10134
10135 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10136 {
10138 split_quantity_new = stack_max;
10139 else
10141
10142 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10143 if (new_item)
10144 {
10145 new_item.SetResultOfSplit(true);
10146 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10148 new_item.SetQuantity(split_quantity_new);
10149 }
10150 }
10151 else if (destination_entity && slot_id == -1)
10152 {
10153 if (quantity > stack_max)
10154 split_quantity_new = stack_max;
10155 else
10156 split_quantity_new = quantity;
10157
10159 {
10162 }
10163
10164 if (new_item)
10165 {
10166 new_item.SetResultOfSplit(true);
10167 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10169 new_item.SetQuantity(split_quantity_new);
10170 }
10171 }
10172 else
10173 {
10174 if (stack_max != 0)
10175 {
10177 {
10179 }
10180
10182
10183 if (new_item)
10184 {
10185 new_item.SetResultOfSplit(true);
10186 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10188 new_item.SetQuantity(stack_max);
10189 new_item.PlaceOnSurface();
10190 }
10191 }
10192 }
10193 }
10194
10196 {
10198 return;
10199
10201 {
10202 if (ScriptInputUserData.CanStoreInputUserData())
10203 {
10204 ScriptInputUserData ctx = new ScriptInputUserData;
10209 dst.WriteToContext(ctx);
10211 }
10212 }
10213 else if (!
GetGame().IsMultiplayer())
10214 {
10216 }
10217 }
10218
10220 {
10222 return;
10223
10225 {
10226 if (ScriptInputUserData.CanStoreInputUserData())
10227 {
10228 ScriptInputUserData ctx = new ScriptInputUserData;
10233 ctx.
Write(destination_entity);
10239 }
10240 }
10241 else if (!
GetGame().IsMultiplayer())
10242 {
10244 }
10245 }
10246
10248 {
10250 }
10251
10253 {
10255 return this;
10256
10258 float split_quantity_new;
10260 if (dst.IsValid())
10261 {
10262 int slot_id = dst.GetSlot();
10264
10265 if (quantity > stack_max)
10266 split_quantity_new = stack_max;
10267 else
10268 split_quantity_new = quantity;
10269
10271
10272 if (new_item)
10273 {
10274 new_item.SetResultOfSplit(true);
10275 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10278 }
10279
10280 return new_item;
10281 }
10282
10283 return null;
10284 }
10285
10287 {
10289 return;
10290
10292 float split_quantity_new;
10294 if (destination_entity)
10295 {
10297 if (quantity > stackable)
10298 split_quantity_new = stackable;
10299 else
10300 split_quantity_new = quantity;
10301
10302 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10303 if (new_item)
10304 {
10305 new_item.SetResultOfSplit(true);
10306 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10308 new_item.SetQuantity(split_quantity_new);
10309 }
10310 }
10311 }
10312
10314 {
10316 return;
10317
10319 {
10320 if (ScriptInputUserData.CanStoreInputUserData())
10321 {
10322 ScriptInputUserData ctx = new ScriptInputUserData;
10327 ItemBase destination_entity =
this;
10328 ctx.
Write(destination_entity);
10332 }
10333 }
10334 else if (!
GetGame().IsMultiplayer())
10335 {
10337 }
10338 }
10339
10341 {
10343 return;
10344
10346 float split_quantity_new;
10348 if (player)
10349 {
10351 if (quantity > stackable)
10352 split_quantity_new = stackable;
10353 else
10354 split_quantity_new = quantity;
10355
10356 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10357 new_item =
ItemBase.Cast(in_hands);
10358 if (new_item)
10359 {
10360 new_item.SetResultOfSplit(true);
10361 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10363 new_item.SetQuantity(split_quantity_new);
10364 }
10365 }
10366 }
10367
10369 {
10371 return;
10372
10374 float split_quantity_new = Math.Floor(quantity * 0.5);
10375
10377
10378 if (new_item)
10379 {
10380 if (new_item.GetQuantityMax() < split_quantity_new)
10381 {
10382 split_quantity_new = new_item.GetQuantityMax();
10383 }
10384
10385 new_item.SetResultOfSplit(true);
10386 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10387
10389 {
10392 }
10393 else
10394 {
10397 }
10398 }
10399 }
10400
10402 {
10404 return;
10405
10407 float split_quantity_new = Math.Floor(quantity / 2);
10408
10409 InventoryLocation invloc = new InventoryLocation;
10411
10413 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10414
10415 if (new_item)
10416 {
10417 if (new_item.GetQuantityMax() < split_quantity_new)
10418 {
10419 split_quantity_new = new_item.GetQuantityMax();
10420 }
10422 {
10425 }
10426 else
10427 {
10430 }
10431 }
10432 }
10433
10436 {
10437 SetWeightDirty();
10439
10440 if (parent)
10441 parent.OnAttachmentQuantityChangedEx(this, delta);
10442
10444 {
10446 {
10448 }
10450 {
10451 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10453 }
10454 }
10455
10456 }
10457
10460 {
10461
10462 }
10463
10466 {
10468 }
10469
10471 {
10472 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10473
10475 {
10476 if (newLevel == GameConstants.STATE_RUINED)
10477 {
10479 EntityAI parent = GetHierarchyParent();
10480 if (parent && parent.IsFireplace())
10481 {
10482 CargoBase cargo = GetInventory().GetCargo();
10483 if (cargo)
10484 {
10486 {
10488 }
10489 }
10490 }
10491 }
10492
10494 {
10495
10497 return;
10498 }
10499
10500 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10501 {
10503 }
10504 }
10505 }
10506
10507
10509 {
10510 super.OnRightClick();
10511
10513 {
10515 {
10516 if (ScriptInputUserData.CanStoreInputUserData())
10517 {
10518 vector m4[4];
10520
10521 EntityAI root = GetHierarchyRoot();
10522
10523 InventoryLocation dst = new InventoryLocation;
10525 {
10526 if (root)
10527 {
10528 root.GetTransform(m4);
10530 }
10531 else
10532 GetInventory().GetCurrentInventoryLocation(dst);
10533 }
10534 else
10535 {
10537
10538
10539 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10540 {
10541 if (root)
10542 {
10543 root.GetTransform(m4);
10545 }
10546 else
10547 GetInventory().GetCurrentInventoryLocation(dst);
10548 }
10549 else
10550 {
10551 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10552 }
10553 }
10554
10555 ScriptInputUserData ctx = new ScriptInputUserData;
10563 }
10564 }
10565 else if (!
GetGame().IsMultiplayer())
10566 {
10568 }
10569 }
10570 }
10571
10572 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10573 {
10574
10575 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10576 return false;
10577
10578 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10579 return false;
10580
10581
10583 return false;
10584
10585
10586 Magazine mag = Magazine.Cast(this);
10587 if (mag)
10588 {
10589 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10590 return false;
10591
10592 if (stack_max_limit)
10593 {
10594 Magazine other_mag = Magazine.Cast(other_item);
10595 if (other_item)
10596 {
10597 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10598 return false;
10599 }
10600
10601 }
10602 }
10603 else
10604 {
10605
10607 return false;
10608
10610 return false;
10611 }
10612
10613 PlayerBase player = null;
10614 if (CastTo(player, GetHierarchyRootPlayer()))
10615 {
10616 if (player.GetInventory().HasAttachment(this))
10617 return false;
10618
10619 if (player.IsItemsToDelete())
10620 return false;
10621 }
10622
10623 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10624 return false;
10625
10626 int slotID;
10628 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10629 return false;
10630
10631 return true;
10632 }
10633
10635 {
10637 }
10638
10640 {
10641 return m_IsResultOfSplit;
10642 }
10643
10645 {
10646 m_IsResultOfSplit = value;
10647 }
10648
10650 {
10652 }
10653
10655 {
10656 float other_item_quantity = other_item.GetQuantity();
10657 float this_free_space;
10658
10660
10662
10663 if (other_item_quantity > this_free_space)
10664 {
10665 return this_free_space;
10666 }
10667 else
10668 {
10669 return other_item_quantity;
10670 }
10671 }
10672
10674 {
10676 }
10677
10679 {
10681 return;
10682
10683 if (!IsMagazine() && other_item)
10684 {
10686 if (quantity_used != 0)
10687 {
10688 float hp1 = GetHealth01("","");
10689 float hp2 = other_item.GetHealth01("","");
10690 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10691 hpResult = hpResult / (
GetQuantity() + quantity_used);
10692
10693 hpResult *= GetMaxHealth();
10694 Math.Round(hpResult);
10695 SetHealth("", "Health", hpResult);
10696
10698 other_item.AddQuantity(-quantity_used);
10699 }
10700 }
10702 }
10703
10705 {
10706 #ifdef SERVER
10707 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10708 GetHierarchyParent().IncreaseLifetimeUp();
10709 #endif
10710 };
10711
10713 {
10714 PlayerBase p = PlayerBase.Cast(player);
10715
10716 array<int> recipesIds = p.m_Recipes;
10717 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10718 if (moduleRecipesManager)
10719 {
10720 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10721 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10722 }
10723
10724 for (int i = 0;i < recipesIds.Count(); i++)
10725 {
10726 int key = recipesIds.Get(i);
10727 string recipeName = moduleRecipesManager.GetRecipeName(key);
10729 }
10730 }
10731
10732
10733 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10734 {
10735 super.GetDebugActions(outputList);
10736
10737
10742
10743
10747
10751
10752
10755
10756
10758 {
10761 }
10762
10764
10767
10771 }
10772
10773
10774
10775
10777 {
10778 super.OnAction(action_id, player, ctx);
10779 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10780 {
10781 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10782 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10783 PlayerBase p = PlayerBase.Cast(player);
10784 if (
EActions.RECIPES_RANGE_START < 1000)
10785 {
10786 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10787 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10788 }
10789 }
10790 #ifndef SERVER
10791 else if (action_id ==
EActions.WATCH_PLAYER)
10792 {
10793 PluginDeveloper.SetDeveloperItemClientEx(player);
10794 }
10795 #endif
10797 {
10798 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
10799 {
10800 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
10801 OnDebugButtonPressServer(id + 1);
10802 }
10803
10804 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
10805 {
10806 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
10808 }
10809
10810 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
10811 {
10812 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
10814 }
10815
10816 else if (action_id ==
EActions.ADD_QUANTITY)
10817 {
10818 if (IsMagazine())
10819 {
10820 Magazine mag = Magazine.Cast(this);
10821 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
10822 }
10823 else
10824 {
10826 }
10827
10828 if (m_EM)
10829 {
10830 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
10831 }
10832
10833 }
10834
10835 else if (action_id ==
EActions.REMOVE_QUANTITY)
10836 {
10837 if (IsMagazine())
10838 {
10839 Magazine mag2 = Magazine.Cast(this);
10840 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
10841 }
10842 else
10843 {
10845 }
10846 if (m_EM)
10847 {
10848 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
10849 }
10850
10851 }
10852
10853 else if (action_id ==
EActions.SET_QUANTITY_0)
10854 {
10856
10857 if (m_EM)
10858 {
10859 m_EM.SetEnergy(0);
10860 }
10861 }
10862
10863 else if (action_id ==
EActions.SET_MAX_QUANTITY)
10864 {
10866
10867 if (m_EM)
10868 {
10869 m_EM.SetEnergy(m_EM.GetEnergyMax());
10870 }
10871 }
10872
10873 else if (action_id ==
EActions.ADD_HEALTH)
10874 {
10875 AddHealth("","",GetMaxHealth("","Health")/5);
10876 }
10877 else if (action_id ==
EActions.REMOVE_HEALTH)
10878 {
10879 AddHealth("","",-GetMaxHealth("","Health")/5);
10880 }
10881 else if (action_id ==
EActions.DESTROY_HEALTH)
10882 {
10883 SetHealth01("","",0);
10884 }
10885 else if (action_id ==
EActions.WATCH_ITEM)
10886 {
10888 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
10889 #ifdef DEVELOPER
10890 SetDebugDeveloper_item(this);
10891 #endif
10892 }
10893
10894 else if (action_id ==
EActions.ADD_TEMPERATURE)
10895 {
10896 AddTemperature(20);
10897
10898 }
10899
10900 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
10901 {
10902 AddTemperature(-20);
10903
10904 }
10905
10906 else if (action_id ==
EActions.FLIP_FROZEN)
10907 {
10908 SetFrozen(!GetIsFrozen());
10909
10910 }
10911
10912 else if (action_id ==
EActions.ADD_WETNESS)
10913 {
10915
10916 }
10917
10918 else if (action_id ==
EActions.REMOVE_WETNESS)
10919 {
10921
10922 }
10923
10924 else if (action_id ==
EActions.LIQUIDTYPE_UP)
10925 {
10928
10929
10930 }
10931
10932 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
10933 {
10936 }
10937
10938 else if (action_id ==
EActions.MAKE_SPECIAL)
10939 {
10940 auto debugParams = DebugSpawnParams.WithPlayer(player);
10941 OnDebugSpawnEx(debugParams);
10942 }
10943
10944 else if (action_id ==
EActions.DELETE)
10945 {
10946 Delete();
10947 }
10948
10949 }
10950
10951
10952 return false;
10953 }
10954
10955
10956
10957
10961
10964
10965
10966
10968 {
10969 return false;
10970 }
10971
10972
10974 {
10975 return true;
10976 }
10977
10978
10980 {
10981 return true;
10982 }
10983
10984
10985
10987 {
10988 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
10990 }
10991
10994 {
10995 return null;
10996 }
10997
10999 {
11000 return false;
11001 }
11002
11004 {
11005 return false;
11006 }
11007
11011
11012
11014 {
11015 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11016 return module_repairing.CanRepair(this, item_repair_kit);
11017 }
11018
11019
11020 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11021 {
11022 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11023 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11024 }
11025
11026
11028 {
11029
11030
11031
11032
11033
11034
11035
11036
11037 return 1;
11038 }
11039
11040
11041
11043 {
11045 }
11046
11047
11048
11050 {
11052 }
11053
11054
11063 {
11064 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11065
11066 if (player)
11067 {
11068 player.MessageStatus(text);
11069 }
11070 }
11071
11072
11081 {
11082 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11083
11084 if (player)
11085 {
11086 player.MessageAction(text);
11087 }
11088 }
11089
11090
11099 {
11100 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11101
11102 if (player)
11103 {
11104 player.MessageFriendly(text);
11105 }
11106 }
11107
11108
11117 {
11118 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11119
11120 if (player)
11121 {
11122 player.MessageImportant(text);
11123 }
11124 }
11125
11127 {
11128 return true;
11129 }
11130
11131
11132 override bool KindOf(
string tag)
11133 {
11134 bool found = false;
11135 string item_name = this.
GetType();
11138
11139 int array_size = item_tag_array.Count();
11140 for (int i = 0; i < array_size; i++)
11141 {
11142 if (item_tag_array.Get(i) == tag)
11143 {
11144 found = true;
11145 break;
11146 }
11147 }
11148 return found;
11149 }
11150
11151
11153 {
11154
11155 super.OnRPC(sender, rpc_type,ctx);
11156
11157
11158 switch (rpc_type)
11159 {
11160 #ifndef SERVER
11161 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11162 Param2<bool, string> p = new Param2<bool, string>(false, "");
11163
11165 return;
11166
11167 bool play = p.param1;
11168 string soundSet = p.param2;
11169
11170 if (play)
11171 {
11173 {
11175 {
11177 }
11178 }
11179 else
11180 {
11182 }
11183 }
11184 else
11185 {
11187 }
11188
11189 break;
11190 #endif
11191
11192 }
11193
11195 {
11197 }
11198 }
11199
11200
11201
11202
11204 {
11205 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11206 return plugin.GetID(
name);
11207 }
11208
11210 {
11211 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11212 return plugin.GetName(id);
11213 }
11214
11217 {
11218
11219
11220 int varFlags;
11221 if (!ctx.
Read(varFlags))
11222 return;
11223
11224 if (varFlags & ItemVariableFlags.FLOAT)
11225 {
11227 }
11228 }
11229
11231 {
11232
11233 super.SerializeNumericalVars(floats_out);
11234
11235
11236
11238 {
11240 }
11241
11243 {
11245 }
11246
11248 {
11250 }
11251
11253 {
11258 }
11259
11261 {
11263 }
11264 }
11265
11267 {
11268
11269 super.DeSerializeNumericalVars(floats);
11270
11271
11272 int index = 0;
11273 int mask = Math.Round(floats.Get(index));
11274
11275 index++;
11276
11278 {
11280 {
11282 }
11283 else
11284 {
11285 float quantity = floats.Get(index);
11286 SetQuantity(quantity,
true,
false,
false,
false);
11287 }
11288 index++;
11289 }
11290
11292 {
11293 float wet = floats.Get(index);
11295 index++;
11296 }
11297
11299 {
11300 int liquidtype = Math.Round(floats.Get(index));
11302 index++;
11303 }
11304
11306 {
11308 index++;
11310 index++;
11312 index++;
11314 index++;
11315 }
11316
11318 {
11319 int cleanness = Math.Round(floats.Get(index));
11321 index++;
11322 }
11323 }
11324
11326 {
11327 super.WriteVarsToCTX(ctx);
11328
11329
11331 {
11333 }
11334
11336 {
11338 }
11339
11341 {
11343 }
11344
11346 {
11347 int r,g,b,a;
11353 }
11354
11356 {
11358 }
11359 }
11360
11362 {
11363 if (!super.ReadVarsFromCTX(ctx,version))
11364 return false;
11365
11366 int intValue;
11367 float value;
11368
11369 if (version < 140)
11370 {
11371 if (!ctx.
Read(intValue))
11372 return false;
11373
11374 m_VariablesMask = intValue;
11375 }
11376
11378 {
11379 if (!ctx.
Read(value))
11380 return false;
11381
11383 {
11385 }
11386 else
11387 {
11389 }
11390 }
11391
11392 if (version < 140)
11393 {
11395 {
11396 if (!ctx.
Read(value))
11397 return false;
11398 SetTemperatureDirect(value);
11399 }
11400 }
11401
11403 {
11404 if (!ctx.
Read(value))
11405 return false;
11407 }
11408
11410 {
11411 if (!ctx.
Read(intValue))
11412 return false;
11414 }
11415
11417 {
11418 int r,g,b,a;
11420 return false;
11422 return false;
11424 return false;
11426 return false;
11427
11429 }
11430
11432 {
11433 if (!ctx.
Read(intValue))
11434 return false;
11436 }
11437
11438 if (version >= 138 && version < 140)
11439 {
11441 {
11442 if (!ctx.
Read(intValue))
11443 return false;
11444 SetFrozen(intValue);
11445 }
11446 }
11447
11448 return true;
11449 }
11450
11451
11453 {
11456 {
11458 }
11459
11460 if (!super.OnStoreLoad(ctx, version))
11461 {
11463 return false;
11464 }
11465
11466 if (version >= 114)
11467 {
11468 bool hasQuickBarIndexSaved;
11469
11470 if (!ctx.
Read(hasQuickBarIndexSaved))
11471 {
11473 return false;
11474 }
11475
11476 if (hasQuickBarIndexSaved)
11477 {
11478 int itmQBIndex;
11479
11480
11481 if (!ctx.
Read(itmQBIndex))
11482 {
11484 return false;
11485 }
11486
11487 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11488 if (itmQBIndex != -1 && parentPlayer)
11489 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11490 }
11491 }
11492 else
11493 {
11494
11495 PlayerBase player;
11496 int itemQBIndex;
11497 if (version ==
int.
MAX)
11498 {
11499 if (!ctx.
Read(itemQBIndex))
11500 {
11502 return false;
11503 }
11504 }
11505 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11506 {
11507
11508 if (!ctx.
Read(itemQBIndex))
11509 {
11511 return false;
11512 }
11513 if (itemQBIndex != -1 && player)
11514 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11515 }
11516 }
11517
11518 if (version < 140)
11519 {
11520
11521 if (!LoadVariables(ctx, version))
11522 {
11524 return false;
11525 }
11526 }
11527
11528
11530 {
11532 return false;
11533 }
11534 if (version >= 132)
11535 {
11537 if (raib)
11538 {
11540 {
11542 return false;
11543 }
11544 }
11545 }
11546
11548 return true;
11549 }
11550
11551
11552
11554 {
11555 super.OnStoreSave(ctx);
11556
11557 PlayerBase player;
11558 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11559 {
11561
11562 int itemQBIndex = -1;
11563 itemQBIndex = player.FindQuickBarEntityIndex(this);
11564 ctx.
Write(itemQBIndex);
11565 }
11566 else
11567 {
11569 }
11570
11572
11574 if (raib)
11575 {
11577 }
11578 }
11579
11580
11582 {
11583 super.AfterStoreLoad();
11584
11586 {
11588 }
11589
11591 {
11594 }
11595 }
11596
11598 {
11599 super.EEOnAfterLoad();
11600
11602 {
11604 }
11605
11608 }
11609
11611 {
11612 return false;
11613 }
11614
11615
11616
11618 {
11620 {
11621 #ifdef PLATFORM_CONSOLE
11622
11624 {
11626 if (menu)
11627 {
11629 }
11630 }
11631 #endif
11632 }
11633
11635 {
11638 }
11639
11641 {
11642 SetWeightDirty();
11644 }
11646 {
11649 }
11650
11652 {
11655 }
11657 {
11660 }
11661
11662 super.OnVariablesSynchronized();
11663 }
11664
11665
11666
11668 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11669 {
11670 if (!IsServerCheck(allow_client))
11671 return false;
11672
11674 return false;
11675
11678
11679 if (value <= (min + 0.001))
11680 value = min;
11681
11682 if (value == min)
11683 {
11684 if (destroy_config)
11685 {
11686 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11687 if (dstr)
11688 {
11690 this.Delete();
11691 return true;
11692 }
11693 }
11694 else if (destroy_forced)
11695 {
11697 this.Delete();
11698 return true;
11699 }
11700
11702 }
11703
11706
11708 {
11710
11711 if (delta)
11713 }
11714
11716
11717 return false;
11718 }
11719
11720
11722 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11723 {
11725 }
11726
11728 {
11731 }
11732
11734 {
11737 }
11738
11741 {
11742 float value_clamped = Math.Clamp(value, 0, 1);
11744 SetQuantity(result, destroy_config, destroy_forced);
11745 }
11746
11747
11750 {
11752 }
11753
11755 {
11757 }
11758
11759
11760
11761
11762
11763
11764
11765
11766
11767
11769 {
11770 int slot = -1;
11771 if (GetInventory())
11772 {
11773 InventoryLocation il = new InventoryLocation;
11774 GetInventory().GetCurrentInventoryLocation(il);
11776 }
11777
11779 }
11780
11782 {
11783 float quantity_max = 0;
11784
11786 {
11787 if (attSlotID != -1)
11788 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11789
11790 if (quantity_max <= 0)
11792 }
11793
11794 if (quantity_max <= 0)
11796
11797 return quantity_max;
11798 }
11799
11801 {
11803 }
11804
11806 {
11808 }
11809
11810
11812 {
11814 }
11815
11817 {
11819 }
11820
11822 {
11824 }
11825
11826
11828 {
11829
11830 float weightEx = GetWeightEx();
11831 float special = GetInventoryAndCargoWeight();
11832 return weightEx - special;
11833 }
11834
11835
11837 {
11839 }
11840
11842 {
11844 {
11845 #ifdef DEVELOPER
11846 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11847 {
11848 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
11850 }
11851 #endif
11852
11853 return GetQuantity() * GetConfigWeightModified();
11854 }
11855 else if (HasEnergyManager())
11856 {
11857 #ifdef DEVELOPER
11858 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11859 {
11860 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
11861 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
11862 }
11863 #endif
11864 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
11865 }
11866 else
11867 {
11868 #ifdef DEVELOPER
11869 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11870 {
11871 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
11872 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
11873 }
11874 #endif
11875 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
11876 }
11877 }
11878
11881 {
11882 int item_count = 0;
11884
11885 if (GetInventory().GetCargo() != NULL)
11886 {
11887 item_count = GetInventory().GetCargo().GetItemCount();
11888 }
11889
11890 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
11891 {
11892 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
11893 if (item)
11894 item_count += item.GetNumberOfItems();
11895 }
11896 return item_count;
11897 }
11898
11901 {
11902 float weight = 0;
11903 float wetness = 1;
11904 if (include_wetness)
11907 {
11908 weight = wetness * m_ConfigWeight;
11909 }
11911 {
11912 weight = 1;
11913 }
11914 return weight;
11915 }
11916
11917
11918
11920 {
11921 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
11922 {
11923 GameInventory inv = GetInventory();
11924 array<EntityAI> items = new array<EntityAI>;
11926 for (int i = 0; i < items.Count(); i++)
11927 {
11929 if (item)
11930 {
11932 }
11933 }
11934 }
11935 }
11936
11937
11938
11939
11941 {
11942 float energy = 0;
11943 if (HasEnergyManager())
11944 {
11945 energy = GetCompEM().GetEnergy();
11946 }
11947 return energy;
11948 }
11949
11950
11952 {
11953 super.OnEnergyConsumed();
11954
11956 }
11957
11959 {
11960 super.OnEnergyAdded();
11961
11963 }
11964
11965
11967 {
11968 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
11969 {
11971 {
11972 float energy_0to1 = GetCompEM().GetEnergy0To1();
11974 }
11975 }
11976 }
11977
11978
11980 {
11981 return ConfigGetFloat("heatIsolation");
11982 }
11983
11985 {
11987 }
11988
11990 {
11991 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
11992 if (
GetGame().ConfigIsExisting(paramPath))
11994
11995 return 0.0;
11996 }
11997
11999 {
12000 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12001 if (
GetGame().ConfigIsExisting(paramPath))
12003
12004 return 0.0;
12005 }
12006
12007 override void SetWet(
float value,
bool allow_client =
false)
12008 {
12009 if (!IsServerCheck(allow_client))
12010 return;
12011
12014
12016
12017 m_VarWet = Math.Clamp(value, min, max);
12018
12020 {
12023 }
12024 }
12025
12026 override void AddWet(
float value)
12027 {
12029 }
12030
12032 {
12034 }
12035
12037 {
12039 }
12040
12042 {
12044 }
12045
12047 {
12049 }
12050
12052 {
12054 }
12055
12056 override void OnWetChanged(
float newVal,
float oldVal)
12057 {
12060 if (newLevel != oldLevel)
12061 {
12063 }
12064 }
12065
12067 {
12068 SetWeightDirty();
12069 }
12070
12072 {
12073 return GetWetLevelInternal(
m_VarWet);
12074 }
12075
12076
12077
12079 {
12081 }
12082
12084 {
12086 }
12087
12089 {
12091 }
12092
12094 {
12096 }
12097
12098
12099
12101 {
12102 if (ConfigIsExisting("itemModelLength"))
12103 {
12104 return ConfigGetFloat("itemModelLength");
12105 }
12106 return 0;
12107 }
12108
12110 {
12111 if (ConfigIsExisting("itemAttachOffset"))
12112 {
12113 return ConfigGetFloat("itemAttachOffset");
12114 }
12115 return 0;
12116 }
12117
12118 override void SetCleanness(
int value,
bool allow_client =
false)
12119 {
12120 if (!IsServerCheck(allow_client))
12121 return;
12122
12124
12126
12129 }
12130
12132 {
12134 }
12135
12137 {
12138 return true;
12139 }
12140
12141
12142
12143
12145 {
12147 }
12148
12150 {
12152 }
12153
12154
12155
12156
12157 override void SetColor(
int r,
int g,
int b,
int a)
12158 {
12164 }
12166 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12167 {
12172 }
12173
12175 {
12177 }
12178
12181 {
12182 int r,g,b,a;
12184 r = r/255;
12185 g = g/255;
12186 b = b/255;
12187 a = a/255;
12188 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12189 }
12190
12191
12192
12193 override void SetLiquidType(
int value,
bool allow_client =
false)
12194 {
12195 if (!IsServerCheck(allow_client))
12196 return;
12197
12202 }
12203
12205 {
12206 return ConfigGetInt("varLiquidTypeInit");
12207 }
12208
12210 {
12212 }
12213
12215 {
12217 SetFrozen(false);
12218 }
12219
12222 {
12223 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12224 }
12225
12226
12229 {
12230 PlayerBase nplayer;
12231 if (PlayerBase.CastTo(nplayer, player))
12232 {
12234
12235 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12236 }
12237 }
12238
12239
12242 {
12243 PlayerBase nplayer;
12244 if (PlayerBase.CastTo(nplayer,player))
12245 {
12246
12247 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12248
12249 }
12250
12251
12252 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12253
12254
12255 if (HasEnergyManager())
12256 {
12257 GetCompEM().UpdatePlugState();
12258 }
12259 }
12260
12261
12263 {
12264 super.OnPlacementStarted(player);
12265
12267 }
12268
12269 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12270 {
12272 {
12273 m_AdminLog.OnPlacementComplete(player,
this);
12274 }
12275
12276 super.OnPlacementComplete(player, position, orientation);
12277 }
12278
12279
12280
12281
12282
12284 {
12286 {
12287 return true;
12288 }
12289 else
12290 {
12291 return false;
12292 }
12293 }
12294
12295
12297 {
12299 {
12301 }
12302 }
12303
12304
12306 {
12308 }
12309
12311 {
12313 }
12314
12315 override void InsertAgent(
int agent,
float count = 1)
12316 {
12317 if (count < 1)
12318 return;
12319
12321 }
12322
12325 {
12327 }
12328
12329
12331 {
12333 }
12334
12335
12336
12337
12338
12339
12340
12341
12342
12343
12344
12345
12346
12347
12348
12349
12350
12351
12352
12353
12354
12355
12356
12357
12358
12359
12360
12361
12362
12363
12364
12365
12366
12367
12368
12369
12370
12371
12372
12373
12374
12375
12377 {
12379 return false;
12380 return true;
12381 }
12382
12384 {
12385
12387 }
12388
12389
12392 {
12393 super.CheckForRoofLimited(timeTresholdMS);
12394
12396 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12397 {
12398 m_PreviousRoofTestTime = time;
12399 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12400 }
12401 }
12402
12403
12405 {
12407 {
12408 return 0;
12409 }
12410
12411 if (GetInventory().GetAttachmentSlotsCount() != 0)
12412 {
12413 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12414 if (filter)
12415 return filter.GetProtectionLevel(type, false, system);
12416 else
12417 return 0;
12418 }
12419
12420 string subclassPath, entryName;
12421
12422 switch (type)
12423 {
12425 entryName = "biological";
12426 break;
12428 entryName = "chemical";
12429 break;
12430 default:
12431 entryName = "biological";
12432 break;
12433 }
12434
12435 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12436
12438 }
12439
12440
12441
12444 {
12445 if (!IsMagazine())
12447
12449 }
12450
12451
12452
12453
12454
12459 {
12460 return true;
12461 }
12462
12464 {
12466 }
12467
12468
12469
12470
12471
12473 {
12474 if (parent)
12475 {
12476 if (parent.IsInherited(DayZInfected))
12477 return true;
12478
12479 if (!parent.IsRuined())
12480 return true;
12481 }
12482
12483 return true;
12484 }
12485
12487 {
12488 if (!super.CanPutAsAttachment(parent))
12489 {
12490 return false;
12491 }
12492
12493 if (!IsRuined() && !parent.IsRuined())
12494 {
12495 return true;
12496 }
12497
12498 return false;
12499 }
12500
12502 {
12503
12504
12505
12506
12507 return super.CanReceiveItemIntoCargo(item);
12508 }
12509
12511 {
12512
12513
12514
12515
12516 GameInventory attachmentInv = attachment.GetInventory();
12518 {
12519 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12520 return false;
12521 }
12522
12523 InventoryLocation loc = new InventoryLocation();
12524 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12525 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12526 return false;
12527
12528 return super.CanReceiveAttachment(attachment, slotId);
12529 }
12530
12532 {
12533 if (!super.CanReleaseAttachment(attachment))
12534 return false;
12535
12536 return GetInventory().AreChildrenAccessible();
12537 }
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12560 {
12561 int id = muzzle_owner.GetMuzzleID();
12562 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12563
12564 if (WPOF_array)
12565 {
12566 for (int i = 0; i < WPOF_array.Count(); i++)
12567 {
12568 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12569
12570 if (WPOF)
12571 {
12572 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12573 }
12574 }
12575 }
12576 }
12577
12578
12580 {
12581 int id = muzzle_owner.GetMuzzleID();
12583
12584 if (WPOBE_array)
12585 {
12586 for (int i = 0; i < WPOBE_array.Count(); i++)
12587 {
12588 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12589
12590 if (WPOBE)
12591 {
12592 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12593 }
12594 }
12595 }
12596 }
12597
12598
12600 {
12601 int id = muzzle_owner.GetMuzzleID();
12602 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12603
12604 if (WPOOH_array)
12605 {
12606 for (int i = 0; i < WPOOH_array.Count(); i++)
12607 {
12608 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12609
12610 if (WPOOH)
12611 {
12612 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12613 }
12614 }
12615 }
12616 }
12617
12618
12620 {
12621 int id = muzzle_owner.GetMuzzleID();
12622 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12623
12624 if (WPOOH_array)
12625 {
12626 for (int i = 0; i < WPOOH_array.Count(); i++)
12627 {
12628 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12629
12630 if (WPOOH)
12631 {
12632 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12633 }
12634 }
12635 }
12636 }
12637
12638
12640 {
12641 int id = muzzle_owner.GetMuzzleID();
12642 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12643
12644 if (WPOOH_array)
12645 {
12646 for (int i = 0; i < WPOOH_array.Count(); i++)
12647 {
12648 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12649
12650 if (WPOOH)
12651 {
12652 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12653 }
12654 }
12655 }
12656 }
12657
12658
12659
12661 {
12663 {
12664 return true;
12665 }
12666
12667 return false;
12668 }
12669
12671 {
12673 {
12674 return true;
12675 }
12676
12677 return false;
12678 }
12679
12681 {
12683 {
12684 return true;
12685 }
12686
12687 return false;
12688 }
12689
12691 {
12692 return false;
12693 }
12694
12697 {
12698 return UATimeSpent.DEFAULT_DEPLOY;
12699 }
12700
12701
12702
12703
12705 {
12707 SetSynchDirty();
12708 }
12709
12711 {
12713 }
12714
12715
12717 {
12718 return false;
12719 }
12720
12723 {
12724 string att_type = "None";
12725
12726 if (ConfigIsExisting("soundAttType"))
12727 {
12728 att_type = ConfigGetString("soundAttType");
12729 }
12730
12732 }
12733
12735 {
12737 }
12738
12739
12740
12741
12742
12746
12748 {
12751
12753 }
12754
12755
12757 {
12759 return;
12760
12762
12765
12768
12769 SoundParameters params = new SoundParameters();
12773 }
12774
12775
12777 {
12779 return;
12780
12782 SetSynchDirty();
12783
12786 }
12787
12788
12790 {
12792 return;
12793
12795 SetSynchDirty();
12796
12799 }
12800
12802 {
12804 }
12805
12807 {
12809 }
12810
12813 {
12814 if (!
GetGame().IsDedicatedServer())
12815 {
12816 if (ConfigIsExisting("attachSoundSet"))
12817 {
12818 string cfg_path = "";
12819 string soundset = "";
12820 string type_name =
GetType();
12821
12824 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
12825 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
12826
12827 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
12828 {
12829 for (int i = 0; i < cfg_soundset_array.Count(); i++)
12830 {
12831 if (cfg_slot_array[i] == slot_type)
12832 {
12833 soundset = cfg_soundset_array[i];
12834 break;
12835 }
12836 }
12837 }
12838
12839 if (soundset != "")
12840 {
12841 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
12843 }
12844 }
12845 }
12846 }
12847
12849 {
12850
12851 }
12852
12853 void OnApply(PlayerBase player);
12854
12856 {
12857 return 1.0;
12858 };
12859
12861 {
12863 }
12864
12866 {
12868 }
12869
12871
12873 {
12874 SetDynamicPhysicsLifeTime(0.01);
12876 }
12877
12879 {
12880 array<string> zone_names = new array<string>;
12881 GetDamageZones(zone_names);
12882 for (int i = 0; i < zone_names.Count(); i++)
12883 {
12884 SetHealthMax(zone_names.Get(i),"Health");
12885 }
12886 SetHealthMax("","Health");
12887 }
12888
12891 {
12892 float global_health = GetHealth01("","Health");
12893 array<string> zones = new array<string>;
12894 GetDamageZones(zones);
12895
12896 for (int i = 0; i < zones.Count(); i++)
12897 {
12898 SetHealth01(zones.Get(i),"Health",global_health);
12899 }
12900 }
12901
12904 {
12905 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
12906 }
12907
12909 {
12910 if (!hasRootAsPlayer)
12911 {
12912 if (refParentIB)
12913 {
12914
12915 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
12916 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
12917
12918 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
12919 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
12920
12923 }
12924 else
12925 {
12926
12929 }
12930 }
12931 }
12932
12934 {
12936 {
12937 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
12938 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
12939 {
12940 float heatPermCoef = 1.0;
12942 while (ent)
12943 {
12944 heatPermCoef *= ent.GetHeatPermeabilityCoef();
12945 ent = ent.GetHierarchyParent();
12946 }
12947
12948 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
12949 }
12950 }
12951 }
12952
12954 {
12955
12956 EntityAI parent = GetHierarchyParent();
12957 if (!parent)
12958 {
12959 hasParent = false;
12960 hasRootAsPlayer = false;
12961 }
12962 else
12963 {
12964 hasParent = true;
12965 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
12966 refParentIB =
ItemBase.Cast(parent);
12967 }
12968 }
12969
12970 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
12971 {
12972
12973 }
12974
12976 {
12977
12978 return false;
12979 }
12980
12982 {
12983
12984
12985 return false;
12986 }
12987
12989 {
12990
12991 return false;
12992 }
12993
12996 {
12997 return !GetIsFrozen() &&
IsOpen();
12998 }
12999
13001 {
13002 bool hasParent = false, hasRootAsPlayer = false;
13004
13005 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13006 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13007
13008 if (wwtu || foodDecay)
13009 {
13013
13014 if (processWetness || processTemperature || processDecay)
13015 {
13017
13018 if (processWetness)
13019 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13020
13021 if (processTemperature)
13023
13024 if (processDecay)
13025 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13026 }
13027 }
13028 }
13029
13032 {
13034 }
13035
13037 {
13040
13041 return super.GetTemperatureFreezeThreshold();
13042 }
13043
13045 {
13048
13049 return super.GetTemperatureThawThreshold();
13050 }
13051
13053 {
13056
13057 return super.GetItemOverheatThreshold();
13058 }
13059
13061 {
13063 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13064
13065 return super.GetTemperatureFreezeTime();
13066 }
13067
13069 {
13071 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13072
13073 return super.GetTemperatureThawTime();
13074 }
13075
13080
13082 {
13083 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13084 }
13085
13087 {
13088 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13089 }
13090
13093 {
13095 }
13096
13098 {
13100 }
13101
13103 {
13105 }
13106
13109 {
13110 return null;
13111 }
13112
13115 {
13116 return false;
13117 }
13118
13120 {
13122 {
13125 if (!trg)
13126 {
13128 explosive = this;
13129 }
13130
13131 explosive.PairRemote(trg);
13133
13134 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13135 trg.SetPersistentPairID(persistentID);
13136 explosive.SetPersistentPairID(persistentID);
13137
13138 return true;
13139 }
13140 return false;
13141 }
13142
13145 {
13146 float ret = 1.0;
13149 ret *= GetHealth01();
13150
13151 return ret;
13152 }
13153
13154 #ifdef DEVELOPER
13155 override void SetDebugItem()
13156 {
13157 super.SetDebugItem();
13158 _itemBase = this;
13159 }
13160
13162 {
13163 string text = super.GetDebugText();
13164
13166 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13167
13168 return text;
13169 }
13170 #endif
13171
13173 {
13174 return true;
13175 }
13176
13178
13180
13182 {
13185 }
13186
13187
13195
13211}
13212
13214{
13216 if (entity)
13217 {
13218 bool is_item = entity.IsInherited(
ItemBase);
13219 if (is_item && full_quantity)
13220 {
13223 }
13224 }
13225 else
13226 {
13228 return NULL;
13229 }
13230 return entity;
13231}
13232
13234{
13235 if (item)
13236 {
13237 if (health > 0)
13238 item.SetHealth("", "", health);
13239
13240 if (item.CanHaveTemperature())
13241 {
13243 if (item.CanFreeze())
13244 item.SetFrozen(false);
13245 }
13246
13247 if (item.HasEnergyManager())
13248 {
13249 if (quantity >= 0)
13250 {
13251 item.GetCompEM().SetEnergy0To1(quantity);
13252 }
13253 else
13254 {
13256 }
13257 }
13258 else if (item.IsMagazine())
13259 {
13260 Magazine mag = Magazine.Cast(item);
13261 if (quantity >= 0)
13262 {
13263 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13264 }
13265 else
13266 {
13268 }
13269
13270 }
13271 else
13272 {
13273 if (quantity >= 0)
13274 {
13275 item.SetQuantityNormalized(quantity, false);
13276 }
13277 else
13278 {
13280 }
13281
13282 }
13283 }
13284}
13285
13286#ifdef DEVELOPER
13288#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.