8516{
8518 {
8519 return true;
8520 }
8521};
8522
8523
8524
8526{
8530
8532
8535
8536
8537
8538
8539
8548
8554
8559
8564
8585 protected bool m_IsResultOfSplit
8586
8588
8593
8594
8595
8597
8601
8602
8603
8605
8608
8609
8610
8616
8617
8625
8628
8629
8631
8632
8634
8635
8640
8641
8646
8647
8649
8650
8652 {
8657
8658 if (!
GetGame().IsDedicatedServer())
8659 {
8661 {
8663
8665 {
8667 }
8668 }
8669
8672 }
8673
8674 m_OldLocation = null;
8675
8677 {
8679 }
8680
8681 if (ConfigIsExisting("headSelectionsToHide"))
8682 {
8685 }
8686
8688 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8689 {
8691 }
8692
8694
8695 m_IsResultOfSplit = false;
8696
8698 }
8699
8701 {
8702 super.InitItemVariables();
8703
8709 m_Count = ConfigGetInt(
"count");
8710
8713
8718
8721
8726
8738
8742
8743
8746 if (ConfigIsExisting("canBeSplit"))
8747 {
8750 }
8751
8753 if (ConfigIsExisting("itemBehaviour"))
8755
8756
8759 RegisterNetSyncVariableInt("m_VarLiquidType");
8760 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8761
8762 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8763 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8764 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8765
8766 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8767 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8768 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8769 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8770
8771 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8772 RegisterNetSyncVariableBool("m_IsTakeable");
8773 RegisterNetSyncVariableBool("m_IsHologram");
8774
8777 {
8780 }
8781
8783
8785 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8787
8788 }
8789
8791 {
8793 }
8794
8796 {
8799 {
8804 }
8805 }
8806
8807 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8808 {
8810 {
8813 }
8814
8816 }
8817
8819 {
8825 }
8826
8828
8830 {
8832
8833 if (!action)
8834 {
8835 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8836 return;
8837 }
8838
8840 if (!ai)
8841 {
8843 return;
8844 }
8845
8847 if (!action_array)
8848 {
8849 action_array = new array<ActionBase_Basic>;
8851 }
8852 if (LogManager.IsActionLogEnable())
8853 {
8854 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8855 }
8856
8857 if (action_array.Find(action) != -1)
8858 {
8859 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8860 }
8861 else
8862 {
8863 action_array.Insert(action);
8864 }
8865 }
8866
8868 {
8870 ActionBase action = player.GetActionManager().GetAction(actionName);
8873
8874 if (action_array)
8875 {
8876 action_array.RemoveItem(action);
8877 }
8878 }
8879
8880
8881
8883 {
8884 ActionOverrideData overrideData = new ActionOverrideData();
8888
8890 if (!actionMap)
8891 {
8894 }
8895
8896 actionMap.Insert(this.
Type(), overrideData);
8897
8898 }
8899
8901
8903
8904
8906 {
8909
8912
8913 string config_to_search = "CfgVehicles";
8914 string muzzle_owner_config;
8915
8917 {
8918 if (IsInherited(Weapon))
8919 config_to_search = "CfgWeapons";
8920
8921 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8922
8923 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
8924
8926
8927 if (config_OnFire_subclass_count > 0)
8928 {
8929 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
8930
8931 for (int i = 0; i < config_OnFire_subclass_count; i++)
8932 {
8933 string particle_class = "";
8935 string config_OnFire_entry = config_OnFire_class + particle_class;
8936 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
8937 WPOF_array.Insert(WPOF);
8938 }
8939
8940
8942 }
8943 }
8944
8946 {
8947 config_to_search = "CfgWeapons";
8948 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8949
8950 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
8951
8953
8954 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
8955 {
8956 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
8957
8958 for (i = 0; i < config_OnBulletCasingEject_count; i++)
8959 {
8960 string particle_class2 = "";
8962 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
8963 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
8964 WPOBE_array.Insert(WPOBE);
8965 }
8966
8967
8969 }
8970 }
8971 }
8972
8973
8975 {
8978
8980 {
8981 string config_to_search = "CfgVehicles";
8982
8983 if (IsInherited(Weapon))
8984 config_to_search = "CfgWeapons";
8985
8986 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8987 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
8988
8989 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
8990 {
8991
8993
8995 {
8997 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
8999 return;
9000 }
9001
9004
9005
9006
9008 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9009
9010 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9011 {
9012 string particle_class = "";
9014 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9016
9017 if (entry_type == CT_CLASS)
9018 {
9019 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9020 WPOOH_array.Insert(WPOF);
9021 }
9022 }
9023
9024
9026 }
9027 }
9028 }
9029
9031 {
9033 }
9034
9036 {
9038 {
9040
9043
9046
9047 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9048 }
9049 }
9050
9052 {
9054 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9055
9057 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9058
9060 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9061
9063 {
9065 }
9066 }
9067
9069 {
9071 }
9072
9074 {
9077 else
9079
9081 {
9084 }
9085 else
9086 {
9089
9092 }
9093
9095 }
9096
9098 {
9100 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9101 }
9102
9104 {
9106 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9108 }
9109
9111 {
9113 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9114 }
9115
9117 {
9120
9121 OverheatingParticle OP = new OverheatingParticle();
9126
9128 }
9129
9131 {
9134
9135 return -1;
9136 }
9137
9139 {
9141 {
9144
9145 for (int i = count; i > 0; --i)
9146 {
9147 int id = i - 1;
9150
9153
9154 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9155 {
9156 if (p)
9157 {
9160 }
9161 }
9162 }
9163 }
9164 }
9165
9167 {
9169 {
9171 {
9172 int id = i - 1;
9174
9175 if (OP)
9176 {
9178
9179 if (p)
9180 {
9182 }
9183
9184 delete OP;
9185 }
9186 }
9187
9190 }
9191 }
9192
9195 {
9196 return 0.0;
9197 }
9198
9199
9201 {
9202 return 250;
9203 }
9204
9206 {
9207 return 0;
9208 }
9209
9212 {
9214 return true;
9215
9216 return false;
9217 }
9218
9221 {
9224
9226 {
9228 }
9229 else
9230 {
9231
9233 }
9234
9236 }
9237
9244 {
9245 return -1;
9246 }
9247
9248
9249
9250
9252 {
9254 {
9256 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9257
9258 if (r_index >= 0)
9259 {
9260 InventoryLocation r_il = new InventoryLocation;
9261 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9262
9263 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9266 {
9267 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9268 }
9270 {
9271 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9272 }
9273
9274 }
9275
9276 player.GetHumanInventory().ClearUserReservedLocation(this);
9277 }
9278
9281 }
9282
9283
9284
9285
9287 {
9288 return ItemBase.m_DebugActionsMask;
9289 }
9290
9292 {
9293 return ItemBase.m_DebugActionsMask & mask;
9294 }
9295
9297 {
9298 ItemBase.m_DebugActionsMask = mask;
9299 }
9300
9302 {
9303 ItemBase.m_DebugActionsMask |= mask;
9304 }
9305
9307 {
9308 ItemBase.m_DebugActionsMask &= ~mask;
9309 }
9310
9312 {
9314 {
9316 }
9317 else
9318 {
9320 }
9321 }
9322
9323
9325 {
9326 if (GetEconomyProfile())
9327 {
9328 float q_max = GetEconomyProfile().GetQuantityMax();
9329 if (q_max > 0)
9330 {
9331 float q_min = GetEconomyProfile().GetQuantityMin();
9332 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9333
9335 {
9336 ComponentEnergyManager comp = GetCompEM();
9338 {
9340 }
9341 }
9343 {
9345
9346 }
9347
9348 }
9349 }
9350 }
9351
9354 {
9355 EntityAI parent = GetHierarchyParent();
9356
9357 if (parent)
9358 {
9359 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9360 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9361 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9362 }
9363 }
9364
9367 {
9368 EntityAI parent = GetHierarchyParent();
9369
9370 if (parent)
9371 {
9372 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9373 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9374 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9375 }
9376 }
9377
9379 {
9380
9381
9382
9383
9385
9387 {
9388 if (ScriptInputUserData.CanStoreInputUserData())
9389 {
9390 ScriptInputUserData ctx = new ScriptInputUserData;
9396 ctx.
Write(use_stack_max);
9399
9401 {
9402 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9403 }
9404 }
9405 }
9406 else if (!
GetGame().IsMultiplayer())
9407 {
9409 }
9410 }
9411
9413 {
9415 }
9416
9418 {
9420 }
9421
9423 {
9425 }
9426
9428 {
9429
9430 return false;
9431 }
9432
9434 {
9435 return false;
9436 }
9437
9441 {
9442 return false;
9443 }
9444
9446 {
9447 return "";
9448 }
9449
9451
9453 {
9454 return false;
9455 }
9456
9458 {
9459 return true;
9460 }
9461
9462
9463
9465 {
9466 return true;
9467 }
9468
9470 {
9471 return true;
9472 }
9473
9475 {
9476 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9478 }
9479
9481 {
9483 }
9484
9486 {
9488 if (!is_being_placed)
9490 SetSynchDirty();
9491 }
9492
9493
9495
9497 {
9499 }
9500
9502 {
9504 }
9505
9507 {
9508 return 1;
9509 }
9510
9512 {
9513 return false;
9514 }
9515
9517 {
9519 SetSynchDirty();
9520 }
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
9554
9555
9557 {
9558 super.OnMovedInsideCargo(container);
9559
9560 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9561 }
9562
9563 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9564 {
9565 super.EEItemLocationChanged(oldLoc,newLoc);
9566
9567 PlayerBase new_player = null;
9568 PlayerBase old_player = null;
9569
9570 if (newLoc.GetParent())
9571 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9572
9573 if (oldLoc.GetParent())
9574 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9575
9577 {
9578 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9579
9580 if (r_index >= 0)
9581 {
9582 InventoryLocation r_il = new InventoryLocation;
9583 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9584
9585 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9588 {
9589 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9590 }
9592 {
9593 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9594 }
9595
9596 }
9597 }
9598
9600 {
9601 if (new_player)
9602 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9603
9604 if (new_player == old_player)
9605 {
9606
9607 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9608 {
9610 {
9611 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9612 {
9613 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9614 }
9615 }
9616 else
9617 {
9618 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9619 }
9620 }
9621
9622 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9623 {
9624 int type = oldLoc.GetType();
9626 {
9627 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9628 }
9630 {
9631 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9632 }
9633 }
9634 if (!m_OldLocation)
9635 {
9636 m_OldLocation = new InventoryLocation;
9637 }
9638 m_OldLocation.Copy(oldLoc);
9639 }
9640 else
9641 {
9642 if (m_OldLocation)
9643 {
9644 m_OldLocation.Reset();
9645 }
9646 }
9647
9649 }
9650 else
9651 {
9652 if (new_player)
9653 {
9654 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9655 if (res_index >= 0)
9656 {
9657 InventoryLocation il = new InventoryLocation;
9658 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9660 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9663 {
9664 il.
GetParent().GetOnReleaseLock().Invoke(it);
9665 }
9667 {
9669 }
9670
9671 }
9672 }
9674 {
9675
9677 }
9678
9679 if (m_OldLocation)
9680 {
9681 m_OldLocation.Reset();
9682 }
9683 }
9684 }
9685
9686 override void EOnContact(IEntity other, Contact extra)
9687 {
9689 {
9690 int liquidType = -1;
9692 if (impactSpeed > 0.0)
9693 {
9695 #ifndef SERVER
9697 #else
9699 SetSynchDirty();
9700 #endif
9702 }
9703 }
9704
9705 #ifdef SERVER
9706 if (GetCompEM() && GetCompEM().IsPlugged())
9707 {
9708 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9709 GetCompEM().UnplugThis();
9710 }
9711 #endif
9712 }
9713
9715
9717 {
9719 }
9720
9722 {
9723
9724 }
9725
9727 {
9728 super.OnItemLocationChanged(old_owner, new_owner);
9729
9730 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9731 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9732
9733 if (!relatedPlayer && playerNew)
9734 relatedPlayer = playerNew;
9735
9736 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9737 {
9739 if (actionMgr)
9740 {
9741 ActionBase currentAction = actionMgr.GetRunningAction();
9742 if (currentAction)
9744 }
9745 }
9746
9747 Man ownerPlayerOld = null;
9748 Man ownerPlayerNew = null;
9749
9750 if (old_owner)
9751 {
9752 if (old_owner.
IsMan())
9753 {
9754 ownerPlayerOld = Man.Cast(old_owner);
9755 }
9756 else
9757 {
9758 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9759 }
9760 }
9761 else
9762 {
9764 {
9766
9767 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9768 {
9769 GetCompEM().UnplugThis();
9770 }
9771 }
9772 }
9773
9774 if (new_owner)
9775 {
9776 if (new_owner.
IsMan())
9777 {
9778 ownerPlayerNew = Man.Cast(new_owner);
9779 }
9780 else
9781 {
9782 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9783 }
9784 }
9785
9786 if (ownerPlayerOld != ownerPlayerNew)
9787 {
9788 if (ownerPlayerOld)
9789 {
9790 array<EntityAI> subItemsExit = new array<EntityAI>;
9792 for (int i = 0; i < subItemsExit.Count(); i++)
9793 {
9796 }
9797 }
9798
9799 if (ownerPlayerNew)
9800 {
9801 array<EntityAI> subItemsEnter = new array<EntityAI>;
9803 for (int j = 0; j < subItemsEnter.Count(); j++)
9804 {
9807 }
9808 }
9809 }
9810 else if (ownerPlayerNew != null)
9811 {
9812 PlayerBase nplayer;
9813 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9814 {
9815 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9817 for (int k = 0; k < subItemsUpdate.Count(); k++)
9818 {
9820 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9821 }
9822 }
9823 }
9824
9825 if (old_owner)
9826 old_owner.OnChildItemRemoved(this);
9827 if (new_owner)
9828 new_owner.OnChildItemReceived(this);
9829 }
9830
9831
9833 {
9834 super.EEDelete(parent);
9835 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9836 if (player)
9837 {
9839
9840 if (player.IsAlive())
9841 {
9842 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9843 if (r_index >= 0)
9844 {
9845 InventoryLocation r_il = new InventoryLocation;
9846 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9847
9848 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9851 {
9852 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9853 }
9855 {
9856 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9857 }
9858
9859 }
9860
9861 player.RemoveQuickBarEntityShortcut(this);
9862 }
9863 }
9864 }
9865
9867 {
9868 super.EEKilled(killer);
9869
9872 {
9873 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
9874 {
9875 if (IsMagazine())
9876 {
9877 if (Magazine.Cast(this).GetAmmoCount() > 0)
9878 {
9880 }
9881 }
9882 else
9883 {
9885 }
9886 }
9887 }
9888 }
9889
9891 {
9892 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9893
9894 super.OnWasAttached(parent, slot_id);
9895
9898
9900 }
9901
9903 {
9904 super.OnWasDetached(parent, slot_id);
9905
9908 }
9909
9911 {
9912 int idx;
9915
9916 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9917 if (inventory_slots.Count() < 1)
9918 {
9919 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
9920 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
9921 }
9922 else
9923 {
9924 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
9925 }
9926
9927 idx = inventory_slots.Find(slot);
9928 if (idx < 0)
9929 return "";
9930
9931 return attach_types.Get(idx);
9932 }
9933
9935 {
9936 int idx = -1;
9937 string slot;
9938
9941
9942 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9943 if (inventory_slots.Count() < 1)
9944 {
9945 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
9946 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9947 }
9948 else
9949 {
9950 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
9951 if (detach_types.Count() < 1)
9952 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9953 }
9954
9955 for (int i = 0; i < inventory_slots.Count(); i++)
9956 {
9957 slot = inventory_slots.Get(i);
9958 }
9959
9960 if (slot != "")
9961 {
9962 if (detach_types.Count() == 1)
9963 idx = 0;
9964 else
9965 idx = inventory_slots.Find(slot);
9966 }
9967 if (idx < 0)
9968 return "";
9969
9970 return detach_types.Get(idx);
9971 }
9972
9974 {
9975
9977
9978
9979 float min_time = 1;
9980 float max_time = 3;
9981 float delay = Math.RandomFloat(min_time, max_time);
9982
9983 explode_timer.Run(delay, this, "DoAmmoExplosion");
9984 }
9985
9987 {
9988 Magazine magazine = Magazine.Cast(this);
9989 int pop_sounds_count = 6;
9990 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
9991
9992
9993 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
9994 string sound_name = pop_sounds[ sound_idx ];
9996
9997
9998 magazine.ServerAddAmmoCount(-1);
9999
10000
10001 float min_temp_to_explode = 100;
10002
10003 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10004 {
10006 }
10007 }
10008
10009
10010 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10011 {
10012 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10013
10014 const int CHANCE_DAMAGE_CARGO = 4;
10015 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10016 const int CHANCE_DAMAGE_NOTHING = 2;
10017
10019 {
10020 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10021 int chances;
10022 int rnd;
10023
10024 if (GetInventory().GetCargo())
10025 {
10026 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10027 rnd = Math.RandomInt(0,chances);
10028
10029 if (rnd < CHANCE_DAMAGE_CARGO)
10030 {
10032 }
10033 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10034 {
10036 }
10037 }
10038 else
10039 {
10040 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10041 rnd = Math.RandomInt(0,chances);
10042
10043 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10044 {
10046 }
10047 }
10048 }
10049 }
10050
10052 {
10053 if (GetInventory().GetCargo())
10054 {
10055 int item_count = GetInventory().GetCargo().GetItemCount();
10056 if (item_count > 0)
10057 {
10058 int random_pick = Math.RandomInt(0, item_count);
10060 if (!item.IsExplosive())
10061 {
10062 item.AddHealth("","",damage);
10063 return true;
10064 }
10065 }
10066 }
10067 return false;
10068 }
10069
10071 {
10072 int attachment_count = GetInventory().AttachmentCount();
10073 if (attachment_count > 0)
10074 {
10075 int random_pick = Math.RandomInt(0, attachment_count);
10076 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10077 if (!attachment.IsExplosive())
10078 {
10079 attachment.AddHealth("","",damage);
10080 return true;
10081 }
10082 }
10083 return false;
10084 }
10085
10087 {
10089 }
10090
10092 {
10094 return GetInventory().CanRemoveEntity();
10095
10096 return false;
10097 }
10098
10100 {
10102 return;
10103
10105 {
10106 if (ScriptInputUserData.CanStoreInputUserData())
10107 {
10108 ScriptInputUserData ctx = new ScriptInputUserData;
10113 ctx.
Write(destination_entity);
10115 ctx.
Write(slot_id);
10117 }
10118 }
10119 else if (!
GetGame().IsMultiplayer())
10120 {
10122 }
10123 }
10124
10126 {
10128 return;
10129
10130 float split_quantity_new;
10134 InventoryLocation loc = new InventoryLocation;
10135
10136 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10137 {
10139 split_quantity_new = stack_max;
10140 else
10142
10143 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10144 if (new_item)
10145 {
10146 new_item.SetResultOfSplit(true);
10147 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10149 new_item.SetQuantity(split_quantity_new);
10150 }
10151 }
10152 else if (destination_entity && slot_id == -1)
10153 {
10154 if (quantity > stack_max)
10155 split_quantity_new = stack_max;
10156 else
10157 split_quantity_new = quantity;
10158
10160 {
10163 }
10164
10165 if (new_item)
10166 {
10167 new_item.SetResultOfSplit(true);
10168 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10170 new_item.SetQuantity(split_quantity_new);
10171 }
10172 }
10173 else
10174 {
10175 if (stack_max != 0)
10176 {
10178 {
10180 }
10181
10182 if (split_quantity_new == 0)
10183 {
10184 if (!
GetGame().IsMultiplayer())
10185 player.PhysicalPredictiveDropItem(this);
10186 else
10187 player.ServerDropEntity(this);
10188 return;
10189 }
10190
10192
10193 if (new_item)
10194 {
10195 new_item.SetResultOfSplit(true);
10196 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10198 new_item.SetQuantity(stack_max);
10199 new_item.PlaceOnSurface();
10200 }
10201 }
10202 }
10203 }
10204
10206 {
10208 return;
10209
10210 float split_quantity_new;
10214 InventoryLocation loc = new InventoryLocation;
10215
10216 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10217 {
10219 split_quantity_new = stack_max;
10220 else
10222
10223 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10224 if (new_item)
10225 {
10226 new_item.SetResultOfSplit(true);
10227 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10229 new_item.SetQuantity(split_quantity_new);
10230 }
10231 }
10232 else if (destination_entity && slot_id == -1)
10233 {
10234 if (quantity > stack_max)
10235 split_quantity_new = stack_max;
10236 else
10237 split_quantity_new = quantity;
10238
10240 {
10243 }
10244
10245 if (new_item)
10246 {
10247 new_item.SetResultOfSplit(true);
10248 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10250 new_item.SetQuantity(split_quantity_new);
10251 }
10252 }
10253 else
10254 {
10255 if (stack_max != 0)
10256 {
10258 {
10260 }
10261
10263
10264 if (new_item)
10265 {
10266 new_item.SetResultOfSplit(true);
10267 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10269 new_item.SetQuantity(stack_max);
10270 new_item.PlaceOnSurface();
10271 }
10272 }
10273 }
10274 }
10275
10277 {
10279 return;
10280
10282 {
10283 if (ScriptInputUserData.CanStoreInputUserData())
10284 {
10285 ScriptInputUserData ctx = new ScriptInputUserData;
10290 dst.WriteToContext(ctx);
10292 }
10293 }
10294 else if (!
GetGame().IsMultiplayer())
10295 {
10297 }
10298 }
10299
10301 {
10303 return;
10304
10306 {
10307 if (ScriptInputUserData.CanStoreInputUserData())
10308 {
10309 ScriptInputUserData ctx = new ScriptInputUserData;
10314 ctx.
Write(destination_entity);
10320 }
10321 }
10322 else if (!
GetGame().IsMultiplayer())
10323 {
10325 }
10326 }
10327
10329 {
10331 }
10332
10334 {
10336 return this;
10337
10339 float split_quantity_new;
10341 if (dst.IsValid())
10342 {
10343 int slot_id = dst.GetSlot();
10345
10346 if (quantity > stack_max)
10347 split_quantity_new = stack_max;
10348 else
10349 split_quantity_new = quantity;
10350
10352
10353 if (new_item)
10354 {
10355 new_item.SetResultOfSplit(true);
10356 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10359 }
10360
10361 return new_item;
10362 }
10363
10364 return null;
10365 }
10366
10368 {
10370 return;
10371
10373 float split_quantity_new;
10375 if (destination_entity)
10376 {
10378 if (quantity > stackable)
10379 split_quantity_new = stackable;
10380 else
10381 split_quantity_new = quantity;
10382
10383 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10384 if (new_item)
10385 {
10386 new_item.SetResultOfSplit(true);
10387 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10389 new_item.SetQuantity(split_quantity_new);
10390 }
10391 }
10392 }
10393
10395 {
10397 return;
10398
10400 {
10401 if (ScriptInputUserData.CanStoreInputUserData())
10402 {
10403 ScriptInputUserData ctx = new ScriptInputUserData;
10408 ItemBase destination_entity =
this;
10409 ctx.
Write(destination_entity);
10413 }
10414 }
10415 else if (!
GetGame().IsMultiplayer())
10416 {
10418 }
10419 }
10420
10422 {
10424 return;
10425
10427 float split_quantity_new;
10429 if (player)
10430 {
10432 if (quantity > stackable)
10433 split_quantity_new = stackable;
10434 else
10435 split_quantity_new = quantity;
10436
10437 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10438 new_item =
ItemBase.Cast(in_hands);
10439 if (new_item)
10440 {
10441 new_item.SetResultOfSplit(true);
10442 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10444 new_item.SetQuantity(split_quantity_new);
10445 }
10446 }
10447 }
10448
10450 {
10452 return;
10453
10455 float split_quantity_new = Math.Floor(quantity * 0.5);
10456
10458
10459 if (new_item)
10460 {
10461 if (new_item.GetQuantityMax() < split_quantity_new)
10462 {
10463 split_quantity_new = new_item.GetQuantityMax();
10464 }
10465
10466 new_item.SetResultOfSplit(true);
10467 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10468
10470 {
10473 }
10474 else
10475 {
10478 }
10479 }
10480 }
10481
10483 {
10485 return;
10486
10488 float split_quantity_new = Math.Floor(quantity / 2);
10489
10490 InventoryLocation invloc = new InventoryLocation;
10492
10494 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10495
10496 if (new_item)
10497 {
10498 if (new_item.GetQuantityMax() < split_quantity_new)
10499 {
10500 split_quantity_new = new_item.GetQuantityMax();
10501 }
10503 {
10506 }
10507 else
10508 {
10511 }
10512 }
10513 }
10514
10517 {
10518 SetWeightDirty();
10520
10521 if (parent)
10522 parent.OnAttachmentQuantityChangedEx(this, delta);
10523
10525 {
10527 {
10529 }
10531 {
10532 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10534 }
10535 }
10536
10537 }
10538
10541 {
10542
10543 }
10544
10547 {
10549 }
10550
10552 {
10553 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10554
10556 {
10557 if (newLevel == GameConstants.STATE_RUINED)
10558 {
10560 EntityAI parent = GetHierarchyParent();
10561 if (parent && parent.IsFireplace())
10562 {
10563 CargoBase cargo = GetInventory().GetCargo();
10564 if (cargo)
10565 {
10567 {
10569 }
10570 }
10571 }
10572 }
10573
10575 {
10576
10578 return;
10579 }
10580
10581 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10582 {
10584 }
10585 }
10586 }
10587
10588
10590 {
10591 super.OnRightClick();
10592
10594 {
10596 {
10597 if (ScriptInputUserData.CanStoreInputUserData())
10598 {
10599 vector m4[4];
10601
10602 EntityAI root = GetHierarchyRoot();
10603
10604 InventoryLocation dst = new InventoryLocation;
10606 {
10607 if (root)
10608 {
10609 root.GetTransform(m4);
10611 }
10612 else
10613 GetInventory().GetCurrentInventoryLocation(dst);
10614 }
10615 else
10616 {
10618
10619
10620 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10621 {
10622 if (root)
10623 {
10624 root.GetTransform(m4);
10626 }
10627 else
10628 GetInventory().GetCurrentInventoryLocation(dst);
10629 }
10630 else
10631 {
10632 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10633 }
10634 }
10635
10636 ScriptInputUserData ctx = new ScriptInputUserData;
10644 }
10645 }
10646 else if (!
GetGame().IsMultiplayer())
10647 {
10649 }
10650 }
10651 }
10652
10653 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10654 {
10655
10656 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10657 return false;
10658
10659 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10660 return false;
10661
10662
10664 return false;
10665
10666
10667 Magazine mag = Magazine.Cast(this);
10668 if (mag)
10669 {
10670 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10671 return false;
10672
10673 if (stack_max_limit)
10674 {
10675 Magazine other_mag = Magazine.Cast(other_item);
10676 if (other_item)
10677 {
10678 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10679 return false;
10680 }
10681
10682 }
10683 }
10684 else
10685 {
10686
10688 return false;
10689
10691 return false;
10692 }
10693
10694 PlayerBase player = null;
10695 if (CastTo(player, GetHierarchyRootPlayer()))
10696 {
10697 if (player.GetInventory().HasAttachment(this))
10698 return false;
10699
10700 if (player.IsItemsToDelete())
10701 return false;
10702 }
10703
10704 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10705 return false;
10706
10707 int slotID;
10709 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10710 return false;
10711
10712 return true;
10713 }
10714
10716 {
10718 }
10719
10721 {
10722 return m_IsResultOfSplit;
10723 }
10724
10726 {
10727 m_IsResultOfSplit = value;
10728 }
10729
10731 {
10733 }
10734
10736 {
10737 float other_item_quantity = other_item.GetQuantity();
10738 float this_free_space;
10739
10741
10743
10744 if (other_item_quantity > this_free_space)
10745 {
10746 return this_free_space;
10747 }
10748 else
10749 {
10750 return other_item_quantity;
10751 }
10752 }
10753
10755 {
10757 }
10758
10760 {
10762 return;
10763
10764 if (!IsMagazine() && other_item)
10765 {
10767 if (quantity_used != 0)
10768 {
10769 float hp1 = GetHealth01("","");
10770 float hp2 = other_item.GetHealth01("","");
10771 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10772 hpResult = hpResult / (
GetQuantity() + quantity_used);
10773
10774 hpResult *= GetMaxHealth();
10775 Math.Round(hpResult);
10776 SetHealth("", "Health", hpResult);
10777
10779 other_item.AddQuantity(-quantity_used);
10780 }
10781 }
10783 }
10784
10786 {
10787 #ifdef SERVER
10788 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10789 GetHierarchyParent().IncreaseLifetimeUp();
10790 #endif
10791 };
10792
10794 {
10795 PlayerBase p = PlayerBase.Cast(player);
10796
10797 array<int> recipesIds = p.m_Recipes;
10798 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10799 if (moduleRecipesManager)
10800 {
10801 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10802 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10803 }
10804
10805 for (int i = 0;i < recipesIds.Count(); i++)
10806 {
10807 int key = recipesIds.Get(i);
10808 string recipeName = moduleRecipesManager.GetRecipeName(key);
10810 }
10811 }
10812
10813
10814 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10815 {
10816 super.GetDebugActions(outputList);
10817
10818
10823
10824
10828
10832
10833
10836
10837
10839 {
10842 }
10843
10845
10848
10852 }
10853
10854
10855
10856
10858 {
10859 super.OnAction(action_id, player, ctx);
10860 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10861 {
10862 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10863 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10864 PlayerBase p = PlayerBase.Cast(player);
10865 if (
EActions.RECIPES_RANGE_START < 1000)
10866 {
10867 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10868 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10869 }
10870 }
10871 #ifndef SERVER
10872 else if (action_id ==
EActions.WATCH_PLAYER)
10873 {
10874 PluginDeveloper.SetDeveloperItemClientEx(player);
10875 }
10876 #endif
10878 {
10879 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
10880 {
10881 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
10882 OnDebugButtonPressServer(id + 1);
10883 }
10884
10885 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
10886 {
10887 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
10889 }
10890
10891 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
10892 {
10893 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
10895 }
10896
10897 else if (action_id ==
EActions.ADD_QUANTITY)
10898 {
10899 if (IsMagazine())
10900 {
10901 Magazine mag = Magazine.Cast(this);
10902 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
10903 }
10904 else
10905 {
10907 }
10908
10909 if (m_EM)
10910 {
10911 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
10912 }
10913
10914 }
10915
10916 else if (action_id ==
EActions.REMOVE_QUANTITY)
10917 {
10918 if (IsMagazine())
10919 {
10920 Magazine mag2 = Magazine.Cast(this);
10921 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
10922 }
10923 else
10924 {
10926 }
10927 if (m_EM)
10928 {
10929 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
10930 }
10931
10932 }
10933
10934 else if (action_id ==
EActions.SET_QUANTITY_0)
10935 {
10937
10938 if (m_EM)
10939 {
10940 m_EM.SetEnergy(0);
10941 }
10942 }
10943
10944 else if (action_id ==
EActions.SET_MAX_QUANTITY)
10945 {
10947
10948 if (m_EM)
10949 {
10950 m_EM.SetEnergy(m_EM.GetEnergyMax());
10951 }
10952 }
10953
10954 else if (action_id ==
EActions.ADD_HEALTH)
10955 {
10956 AddHealth("","",GetMaxHealth("","Health")/5);
10957 }
10958 else if (action_id ==
EActions.REMOVE_HEALTH)
10959 {
10960 AddHealth("","",-GetMaxHealth("","Health")/5);
10961 }
10962 else if (action_id ==
EActions.DESTROY_HEALTH)
10963 {
10964 SetHealth01("","",0);
10965 }
10966 else if (action_id ==
EActions.WATCH_ITEM)
10967 {
10969 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
10970 #ifdef DEVELOPER
10971 SetDebugDeveloper_item(this);
10972 #endif
10973 }
10974
10975 else if (action_id ==
EActions.ADD_TEMPERATURE)
10976 {
10977 AddTemperature(20);
10978
10979 }
10980
10981 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
10982 {
10983 AddTemperature(-20);
10984
10985 }
10986
10987 else if (action_id ==
EActions.FLIP_FROZEN)
10988 {
10989 SetFrozen(!GetIsFrozen());
10990
10991 }
10992
10993 else if (action_id ==
EActions.ADD_WETNESS)
10994 {
10996
10997 }
10998
10999 else if (action_id ==
EActions.REMOVE_WETNESS)
11000 {
11002
11003 }
11004
11005 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11006 {
11009
11010
11011 }
11012
11013 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11014 {
11017 }
11018
11019 else if (action_id ==
EActions.MAKE_SPECIAL)
11020 {
11021 auto debugParams = DebugSpawnParams.WithPlayer(player);
11022 OnDebugSpawnEx(debugParams);
11023 }
11024
11025 else if (action_id ==
EActions.DELETE)
11026 {
11027 Delete();
11028 }
11029
11030 }
11031
11032
11033 return false;
11034 }
11035
11036
11037
11038
11042
11045
11046
11047
11049 {
11050 return false;
11051 }
11052
11053
11055 {
11056 return true;
11057 }
11058
11059
11061 {
11062 return true;
11063 }
11064
11065
11066
11068 {
11069 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11071 }
11072
11075 {
11076 return null;
11077 }
11078
11080 {
11081 return false;
11082 }
11083
11085 {
11086 return false;
11087 }
11088
11092
11093
11095 {
11096 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11097 return module_repairing.CanRepair(this, item_repair_kit);
11098 }
11099
11100
11101 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11102 {
11103 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11104 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11105 }
11106
11107
11109 {
11110
11111
11112
11113
11114
11115
11116
11117
11118 return 1;
11119 }
11120
11121
11122
11124 {
11126 }
11127
11128
11129
11131 {
11133 }
11134
11135
11144 {
11145 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11146
11147 if (player)
11148 {
11149 player.MessageStatus(text);
11150 }
11151 }
11152
11153
11162 {
11163 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11164
11165 if (player)
11166 {
11167 player.MessageAction(text);
11168 }
11169 }
11170
11171
11180 {
11181 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11182
11183 if (player)
11184 {
11185 player.MessageFriendly(text);
11186 }
11187 }
11188
11189
11198 {
11199 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11200
11201 if (player)
11202 {
11203 player.MessageImportant(text);
11204 }
11205 }
11206
11208 {
11209 return true;
11210 }
11211
11212
11213 override bool KindOf(
string tag)
11214 {
11215 bool found = false;
11216 string item_name = this.
GetType();
11219
11220 int array_size = item_tag_array.Count();
11221 for (int i = 0; i < array_size; i++)
11222 {
11223 if (item_tag_array.Get(i) == tag)
11224 {
11225 found = true;
11226 break;
11227 }
11228 }
11229 return found;
11230 }
11231
11232
11234 {
11235
11236 super.OnRPC(sender, rpc_type,ctx);
11237
11238
11239 switch (rpc_type)
11240 {
11241 #ifndef SERVER
11242 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11243 Param2<bool, string> p = new Param2<bool, string>(false, "");
11244
11246 return;
11247
11248 bool play = p.param1;
11249 string soundSet = p.param2;
11250
11251 if (play)
11252 {
11254 {
11256 {
11258 }
11259 }
11260 else
11261 {
11263 }
11264 }
11265 else
11266 {
11268 }
11269
11270 break;
11271 #endif
11272
11273 }
11274
11276 {
11278 }
11279 }
11280
11281
11282
11283
11285 {
11286 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11287 return plugin.GetID(
name);
11288 }
11289
11291 {
11292 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11293 return plugin.GetName(id);
11294 }
11295
11298 {
11299
11300
11301 int varFlags;
11302 if (!ctx.
Read(varFlags))
11303 return;
11304
11305 if (varFlags & ItemVariableFlags.FLOAT)
11306 {
11308 }
11309 }
11310
11312 {
11313
11314 super.SerializeNumericalVars(floats_out);
11315
11316
11317
11319 {
11321 }
11322
11324 {
11326 }
11327
11329 {
11331 }
11332
11334 {
11339 }
11340
11342 {
11344 }
11345 }
11346
11348 {
11349
11350 super.DeSerializeNumericalVars(floats);
11351
11352
11353 int index = 0;
11354 int mask = Math.Round(floats.Get(index));
11355
11356 index++;
11357
11359 {
11361 {
11363 }
11364 else
11365 {
11366 float quantity = floats.Get(index);
11367 SetQuantity(quantity,
true,
false,
false,
false);
11368 }
11369 index++;
11370 }
11371
11373 {
11374 float wet = floats.Get(index);
11376 index++;
11377 }
11378
11380 {
11381 int liquidtype = Math.Round(floats.Get(index));
11383 index++;
11384 }
11385
11387 {
11389 index++;
11391 index++;
11393 index++;
11395 index++;
11396 }
11397
11399 {
11400 int cleanness = Math.Round(floats.Get(index));
11402 index++;
11403 }
11404 }
11405
11407 {
11408 super.WriteVarsToCTX(ctx);
11409
11410
11412 {
11414 }
11415
11417 {
11419 }
11420
11422 {
11424 }
11425
11427 {
11428 int r,g,b,a;
11434 }
11435
11437 {
11439 }
11440 }
11441
11443 {
11444 if (!super.ReadVarsFromCTX(ctx,version))
11445 return false;
11446
11447 int intValue;
11448 float value;
11449
11450 if (version < 140)
11451 {
11452 if (!ctx.
Read(intValue))
11453 return false;
11454
11455 m_VariablesMask = intValue;
11456 }
11457
11459 {
11460 if (!ctx.
Read(value))
11461 return false;
11462
11464 {
11466 }
11467 else
11468 {
11470 }
11471 }
11472
11473 if (version < 140)
11474 {
11476 {
11477 if (!ctx.
Read(value))
11478 return false;
11479 SetTemperatureDirect(value);
11480 }
11481 }
11482
11484 {
11485 if (!ctx.
Read(value))
11486 return false;
11488 }
11489
11491 {
11492 if (!ctx.
Read(intValue))
11493 return false;
11495 }
11496
11498 {
11499 int r,g,b,a;
11501 return false;
11503 return false;
11505 return false;
11507 return false;
11508
11510 }
11511
11513 {
11514 if (!ctx.
Read(intValue))
11515 return false;
11517 }
11518
11519 if (version >= 138 && version < 140)
11520 {
11522 {
11523 if (!ctx.
Read(intValue))
11524 return false;
11525 SetFrozen(intValue);
11526 }
11527 }
11528
11529 return true;
11530 }
11531
11532
11534 {
11537 {
11539 }
11540
11541 if (!super.OnStoreLoad(ctx, version))
11542 {
11544 return false;
11545 }
11546
11547 if (version >= 114)
11548 {
11549 bool hasQuickBarIndexSaved;
11550
11551 if (!ctx.
Read(hasQuickBarIndexSaved))
11552 {
11554 return false;
11555 }
11556
11557 if (hasQuickBarIndexSaved)
11558 {
11559 int itmQBIndex;
11560
11561
11562 if (!ctx.
Read(itmQBIndex))
11563 {
11565 return false;
11566 }
11567
11568 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11569 if (itmQBIndex != -1 && parentPlayer)
11570 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11571 }
11572 }
11573 else
11574 {
11575
11576 PlayerBase player;
11577 int itemQBIndex;
11578 if (version ==
int.
MAX)
11579 {
11580 if (!ctx.
Read(itemQBIndex))
11581 {
11583 return false;
11584 }
11585 }
11586 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11587 {
11588
11589 if (!ctx.
Read(itemQBIndex))
11590 {
11592 return false;
11593 }
11594 if (itemQBIndex != -1 && player)
11595 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11596 }
11597 }
11598
11599 if (version < 140)
11600 {
11601
11602 if (!LoadVariables(ctx, version))
11603 {
11605 return false;
11606 }
11607 }
11608
11609
11611 {
11613 return false;
11614 }
11615 if (version >= 132)
11616 {
11618 if (raib)
11619 {
11621 {
11623 return false;
11624 }
11625 }
11626 }
11627
11629 return true;
11630 }
11631
11632
11633
11635 {
11636 super.OnStoreSave(ctx);
11637
11638 PlayerBase player;
11639 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11640 {
11642
11643 int itemQBIndex = -1;
11644 itemQBIndex = player.FindQuickBarEntityIndex(this);
11645 ctx.
Write(itemQBIndex);
11646 }
11647 else
11648 {
11650 }
11651
11653
11655 if (raib)
11656 {
11658 }
11659 }
11660
11661
11663 {
11664 super.AfterStoreLoad();
11665
11667 {
11669 }
11670
11672 {
11675 }
11676 }
11677
11679 {
11680 super.EEOnAfterLoad();
11681
11683 {
11685 }
11686
11689 }
11690
11692 {
11693 return false;
11694 }
11695
11696
11697
11699 {
11701 {
11702 #ifdef PLATFORM_CONSOLE
11703
11705 {
11707 if (menu)
11708 {
11710 }
11711 }
11712 #endif
11713 }
11714
11716 {
11719 }
11720
11722 {
11723 SetWeightDirty();
11725 }
11727 {
11730 }
11731
11733 {
11736 }
11738 {
11741 }
11742
11743 super.OnVariablesSynchronized();
11744 }
11745
11746
11747
11749 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11750 {
11751 if (!IsServerCheck(allow_client))
11752 return false;
11753
11755 return false;
11756
11759
11760 if (value <= (min + 0.001))
11761 value = min;
11762
11763 if (value == min)
11764 {
11765 if (destroy_config)
11766 {
11767 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11768 if (dstr)
11769 {
11771 this.Delete();
11772 return true;
11773 }
11774 }
11775 else if (destroy_forced)
11776 {
11778 this.Delete();
11779 return true;
11780 }
11781
11783 }
11784
11787
11789 {
11791
11792 if (delta)
11794 }
11795
11797
11798 return false;
11799 }
11800
11801
11803 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11804 {
11806 }
11807
11809 {
11812 }
11813
11815 {
11818 }
11819
11822 {
11823 float value_clamped = Math.Clamp(value, 0, 1);
11825 SetQuantity(result, destroy_config, destroy_forced);
11826 }
11827
11828
11831 {
11833 }
11834
11836 {
11838 }
11839
11840
11841
11842
11843
11844
11845
11846
11847
11848
11850 {
11851 int slot = -1;
11852 if (GetInventory())
11853 {
11854 InventoryLocation il = new InventoryLocation;
11855 GetInventory().GetCurrentInventoryLocation(il);
11857 }
11858
11860 }
11861
11863 {
11864 float quantity_max = 0;
11865
11867 {
11868 if (attSlotID != -1)
11869 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11870
11871 if (quantity_max <= 0)
11873 }
11874
11875 if (quantity_max <= 0)
11877
11878 return quantity_max;
11879 }
11880
11882 {
11884 }
11885
11887 {
11889 }
11890
11891
11893 {
11895 }
11896
11898 {
11900 }
11901
11903 {
11905 }
11906
11907
11909 {
11910
11911 float weightEx = GetWeightEx();
11912 float special = GetInventoryAndCargoWeight();
11913 return weightEx - special;
11914 }
11915
11916
11918 {
11920 }
11921
11923 {
11925 {
11926 #ifdef DEVELOPER
11927 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11928 {
11929 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
11931 }
11932 #endif
11933
11934 return GetQuantity() * GetConfigWeightModified();
11935 }
11936 else if (HasEnergyManager())
11937 {
11938 #ifdef DEVELOPER
11939 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11940 {
11941 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
11942 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
11943 }
11944 #endif
11945 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
11946 }
11947 else
11948 {
11949 #ifdef DEVELOPER
11950 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11951 {
11952 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
11953 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
11954 }
11955 #endif
11956 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
11957 }
11958 }
11959
11962 {
11963 int item_count = 0;
11965
11966 if (GetInventory().GetCargo() != NULL)
11967 {
11968 item_count = GetInventory().GetCargo().GetItemCount();
11969 }
11970
11971 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
11972 {
11973 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
11974 if (item)
11975 item_count += item.GetNumberOfItems();
11976 }
11977 return item_count;
11978 }
11979
11982 {
11983 float weight = 0;
11984 float wetness = 1;
11985 if (include_wetness)
11988 {
11989 weight = wetness * m_ConfigWeight;
11990 }
11992 {
11993 weight = 1;
11994 }
11995 return weight;
11996 }
11997
11998
11999
12001 {
12002 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12003 {
12004 GameInventory inv = GetInventory();
12005 array<EntityAI> items = new array<EntityAI>;
12007 for (int i = 0; i < items.Count(); i++)
12008 {
12010 if (item)
12011 {
12013 }
12014 }
12015 }
12016 }
12017
12018
12019
12020
12022 {
12023 float energy = 0;
12024 if (HasEnergyManager())
12025 {
12026 energy = GetCompEM().GetEnergy();
12027 }
12028 return energy;
12029 }
12030
12031
12033 {
12034 super.OnEnergyConsumed();
12035
12037 }
12038
12040 {
12041 super.OnEnergyAdded();
12042
12044 }
12045
12046
12048 {
12049 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12050 {
12052 {
12053 float energy_0to1 = GetCompEM().GetEnergy0To1();
12055 }
12056 }
12057 }
12058
12059
12061 {
12062 return ConfigGetFloat("heatIsolation");
12063 }
12064
12066 {
12068 }
12069
12071 {
12072 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12073 if (
GetGame().ConfigIsExisting(paramPath))
12075
12076 return 0.0;
12077 }
12078
12080 {
12081 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12082 if (
GetGame().ConfigIsExisting(paramPath))
12084
12085 return 0.0;
12086 }
12087
12088 override void SetWet(
float value,
bool allow_client =
false)
12089 {
12090 if (!IsServerCheck(allow_client))
12091 return;
12092
12095
12097
12098 m_VarWet = Math.Clamp(value, min, max);
12099
12101 {
12104 }
12105 }
12106
12107 override void AddWet(
float value)
12108 {
12110 }
12111
12113 {
12115 }
12116
12118 {
12120 }
12121
12123 {
12125 }
12126
12128 {
12130 }
12131
12133 {
12135 }
12136
12137 override void OnWetChanged(
float newVal,
float oldVal)
12138 {
12141 if (newLevel != oldLevel)
12142 {
12144 }
12145 }
12146
12148 {
12149 SetWeightDirty();
12150 }
12151
12153 {
12154 return GetWetLevelInternal(
m_VarWet);
12155 }
12156
12157
12158
12160 {
12162 }
12163
12165 {
12167 }
12168
12170 {
12172 }
12173
12175 {
12177 }
12178
12179
12180
12182 {
12183 if (ConfigIsExisting("itemModelLength"))
12184 {
12185 return ConfigGetFloat("itemModelLength");
12186 }
12187 return 0;
12188 }
12189
12191 {
12192 if (ConfigIsExisting("itemAttachOffset"))
12193 {
12194 return ConfigGetFloat("itemAttachOffset");
12195 }
12196 return 0;
12197 }
12198
12199 override void SetCleanness(
int value,
bool allow_client =
false)
12200 {
12201 if (!IsServerCheck(allow_client))
12202 return;
12203
12205
12207
12210 }
12211
12213 {
12215 }
12216
12218 {
12219 return true;
12220 }
12221
12222
12223
12224
12226 {
12228 }
12229
12231 {
12233 }
12234
12235
12236
12237
12238 override void SetColor(
int r,
int g,
int b,
int a)
12239 {
12245 }
12247 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12248 {
12253 }
12254
12256 {
12258 }
12259
12262 {
12263 int r,g,b,a;
12265 r = r/255;
12266 g = g/255;
12267 b = b/255;
12268 a = a/255;
12269 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12270 }
12271
12272
12273
12274 override void SetLiquidType(
int value,
bool allow_client =
false)
12275 {
12276 if (!IsServerCheck(allow_client))
12277 return;
12278
12283 }
12284
12286 {
12287 return ConfigGetInt("varLiquidTypeInit");
12288 }
12289
12291 {
12293 }
12294
12296 {
12298 SetFrozen(false);
12299 }
12300
12303 {
12304 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12305 }
12306
12307
12310 {
12311 PlayerBase nplayer;
12312 if (PlayerBase.CastTo(nplayer, player))
12313 {
12315
12316 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12317 }
12318 }
12319
12320
12323 {
12324 PlayerBase nplayer;
12325 if (PlayerBase.CastTo(nplayer,player))
12326 {
12327
12328 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12329
12330 }
12331
12332
12333 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12334
12335
12336 if (HasEnergyManager())
12337 {
12338 GetCompEM().UpdatePlugState();
12339 }
12340 }
12341
12342
12344 {
12345 super.OnPlacementStarted(player);
12346
12348 }
12349
12350 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12351 {
12353 {
12354 m_AdminLog.OnPlacementComplete(player,
this);
12355 }
12356
12357 super.OnPlacementComplete(player, position, orientation);
12358 }
12359
12360
12361
12362
12363
12365 {
12367 {
12368 return true;
12369 }
12370 else
12371 {
12372 return false;
12373 }
12374 }
12375
12376
12378 {
12380 {
12382 }
12383 }
12384
12385
12387 {
12389 }
12390
12392 {
12394 }
12395
12396 override void InsertAgent(
int agent,
float count = 1)
12397 {
12398 if (count < 1)
12399 return;
12400
12402 }
12403
12406 {
12408 }
12409
12410
12412 {
12414 }
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
12426
12427
12428
12429
12430
12431
12432
12433
12434
12435
12436
12437
12438
12439
12440
12441
12442
12443
12444
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12458 {
12460 return false;
12461 return true;
12462 }
12463
12465 {
12466
12468 }
12469
12470
12473 {
12474 super.CheckForRoofLimited(timeTresholdMS);
12475
12477 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12478 {
12479 m_PreviousRoofTestTime = time;
12480 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12481 }
12482 }
12483
12484
12486 {
12488 {
12489 return 0;
12490 }
12491
12492 if (GetInventory().GetAttachmentSlotsCount() != 0)
12493 {
12494 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12495 if (filter)
12496 return filter.GetProtectionLevel(type, false, system);
12497 else
12498 return 0;
12499 }
12500
12501 string subclassPath, entryName;
12502
12503 switch (type)
12504 {
12506 entryName = "biological";
12507 break;
12509 entryName = "chemical";
12510 break;
12511 default:
12512 entryName = "biological";
12513 break;
12514 }
12515
12516 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12517
12519 }
12520
12521
12522
12525 {
12526 if (!IsMagazine())
12528
12530 }
12531
12532
12533
12534
12535
12540 {
12541 return true;
12542 }
12543
12545 {
12547 }
12548
12549
12550
12551
12552
12554 {
12555 if (parent)
12556 {
12557 if (parent.IsInherited(DayZInfected))
12558 return true;
12559
12560 if (!parent.IsRuined())
12561 return true;
12562 }
12563
12564 return true;
12565 }
12566
12568 {
12569 if (!super.CanPutAsAttachment(parent))
12570 {
12571 return false;
12572 }
12573
12574 if (!IsRuined() && !parent.IsRuined())
12575 {
12576 return true;
12577 }
12578
12579 return false;
12580 }
12581
12583 {
12584
12585
12586
12587
12588 return super.CanReceiveItemIntoCargo(item);
12589 }
12590
12592 {
12593
12594
12595
12596
12597 GameInventory attachmentInv = attachment.GetInventory();
12599 {
12600 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12601 return false;
12602 }
12603
12604 InventoryLocation loc = new InventoryLocation();
12605 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12606 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12607 return false;
12608
12609 return super.CanReceiveAttachment(attachment, slotId);
12610 }
12611
12613 {
12614 if (!super.CanReleaseAttachment(attachment))
12615 return false;
12616
12617 return GetInventory().AreChildrenAccessible();
12618 }
12619
12620
12621
12622
12623
12624
12625
12626
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636
12637
12638
12639
12641 {
12642 int id = muzzle_owner.GetMuzzleID();
12643 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12644
12645 if (WPOF_array)
12646 {
12647 for (int i = 0; i < WPOF_array.Count(); i++)
12648 {
12649 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12650
12651 if (WPOF)
12652 {
12653 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12654 }
12655 }
12656 }
12657 }
12658
12659
12661 {
12662 int id = muzzle_owner.GetMuzzleID();
12664
12665 if (WPOBE_array)
12666 {
12667 for (int i = 0; i < WPOBE_array.Count(); i++)
12668 {
12669 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12670
12671 if (WPOBE)
12672 {
12673 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12674 }
12675 }
12676 }
12677 }
12678
12679
12681 {
12682 int id = muzzle_owner.GetMuzzleID();
12683 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12684
12685 if (WPOOH_array)
12686 {
12687 for (int i = 0; i < WPOOH_array.Count(); i++)
12688 {
12689 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12690
12691 if (WPOOH)
12692 {
12693 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12694 }
12695 }
12696 }
12697 }
12698
12699
12701 {
12702 int id = muzzle_owner.GetMuzzleID();
12703 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12704
12705 if (WPOOH_array)
12706 {
12707 for (int i = 0; i < WPOOH_array.Count(); i++)
12708 {
12709 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12710
12711 if (WPOOH)
12712 {
12713 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12714 }
12715 }
12716 }
12717 }
12718
12719
12721 {
12722 int id = muzzle_owner.GetMuzzleID();
12723 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12724
12725 if (WPOOH_array)
12726 {
12727 for (int i = 0; i < WPOOH_array.Count(); i++)
12728 {
12729 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12730
12731 if (WPOOH)
12732 {
12733 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12734 }
12735 }
12736 }
12737 }
12738
12739
12740
12742 {
12744 {
12745 return true;
12746 }
12747
12748 return false;
12749 }
12750
12752 {
12754 {
12755 return true;
12756 }
12757
12758 return false;
12759 }
12760
12762 {
12764 {
12765 return true;
12766 }
12767
12768 return false;
12769 }
12770
12772 {
12773 return false;
12774 }
12775
12778 {
12779 return UATimeSpent.DEFAULT_DEPLOY;
12780 }
12781
12782
12783
12784
12786 {
12788 SetSynchDirty();
12789 }
12790
12792 {
12794 }
12795
12796
12798 {
12799 return false;
12800 }
12801
12804 {
12805 string att_type = "None";
12806
12807 if (ConfigIsExisting("soundAttType"))
12808 {
12809 att_type = ConfigGetString("soundAttType");
12810 }
12811
12813 }
12814
12816 {
12818 }
12819
12820
12821
12822
12823
12827
12829 {
12832
12834 }
12835
12836
12838 {
12840 return;
12841
12843
12846
12849
12850 SoundParameters params = new SoundParameters();
12854 }
12855
12856
12858 {
12860 return;
12861
12863 SetSynchDirty();
12864
12867 }
12868
12869
12871 {
12873 return;
12874
12876 SetSynchDirty();
12877
12880 }
12881
12883 {
12885 }
12886
12888 {
12890 }
12891
12894 {
12895 if (!
GetGame().IsDedicatedServer())
12896 {
12897 if (ConfigIsExisting("attachSoundSet"))
12898 {
12899 string cfg_path = "";
12900 string soundset = "";
12901 string type_name =
GetType();
12902
12905 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
12906 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
12907
12908 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
12909 {
12910 for (int i = 0; i < cfg_soundset_array.Count(); i++)
12911 {
12912 if (cfg_slot_array[i] == slot_type)
12913 {
12914 soundset = cfg_soundset_array[i];
12915 break;
12916 }
12917 }
12918 }
12919
12920 if (soundset != "")
12921 {
12922 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
12924 }
12925 }
12926 }
12927 }
12928
12930 {
12931
12932 }
12933
12934 void OnApply(PlayerBase player);
12935
12937 {
12938 return 1.0;
12939 };
12940
12942 {
12944 }
12945
12947 {
12949 }
12950
12952
12954 {
12955 SetDynamicPhysicsLifeTime(0.01);
12957 }
12958
12960 {
12961 array<string> zone_names = new array<string>;
12962 GetDamageZones(zone_names);
12963 for (int i = 0; i < zone_names.Count(); i++)
12964 {
12965 SetHealthMax(zone_names.Get(i),"Health");
12966 }
12967 SetHealthMax("","Health");
12968 }
12969
12972 {
12973 float global_health = GetHealth01("","Health");
12974 array<string> zones = new array<string>;
12975 GetDamageZones(zones);
12976
12977 for (int i = 0; i < zones.Count(); i++)
12978 {
12979 SetHealth01(zones.Get(i),"Health",global_health);
12980 }
12981 }
12982
12985 {
12986 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
12987 }
12988
12990 {
12991 if (!hasRootAsPlayer)
12992 {
12993 if (refParentIB)
12994 {
12995
12996 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
12997 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
12998
12999 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13000 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13001
13004 }
13005 else
13006 {
13007
13010 }
13011 }
13012 }
13013
13015 {
13017 {
13018 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13019 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13020 {
13021 float heatPermCoef = 1.0;
13023 while (ent)
13024 {
13025 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13026 ent = ent.GetHierarchyParent();
13027 }
13028
13029 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13030 }
13031 }
13032 }
13033
13035 {
13036
13037 EntityAI parent = GetHierarchyParent();
13038 if (!parent)
13039 {
13040 hasParent = false;
13041 hasRootAsPlayer = false;
13042 }
13043 else
13044 {
13045 hasParent = true;
13046 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13047 refParentIB =
ItemBase.Cast(parent);
13048 }
13049 }
13050
13051 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13052 {
13053
13054 }
13055
13057 {
13058
13059 return false;
13060 }
13061
13063 {
13064
13065
13066 return false;
13067 }
13068
13070 {
13071
13072 return false;
13073 }
13074
13077 {
13078 return !GetIsFrozen() &&
IsOpen();
13079 }
13080
13082 {
13083 bool hasParent = false, hasRootAsPlayer = false;
13085
13086 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13087 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13088
13089 if (wwtu || foodDecay)
13090 {
13094
13095 if (processWetness || processTemperature || processDecay)
13096 {
13098
13099 if (processWetness)
13100 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13101
13102 if (processTemperature)
13104
13105 if (processDecay)
13106 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13107 }
13108 }
13109 }
13110
13113 {
13115 }
13116
13118 {
13121
13122 return super.GetTemperatureFreezeThreshold();
13123 }
13124
13126 {
13129
13130 return super.GetTemperatureThawThreshold();
13131 }
13132
13134 {
13137
13138 return super.GetItemOverheatThreshold();
13139 }
13140
13142 {
13144 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13145
13146 return super.GetTemperatureFreezeTime();
13147 }
13148
13150 {
13152 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13153
13154 return super.GetTemperatureThawTime();
13155 }
13156
13161
13163 {
13164 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13165 }
13166
13168 {
13169 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13170 }
13171
13174 {
13176 }
13177
13179 {
13181 }
13182
13184 {
13186 }
13187
13190 {
13191 return null;
13192 }
13193
13196 {
13197 return false;
13198 }
13199
13201 {
13203 {
13206 if (!trg)
13207 {
13209 explosive = this;
13210 }
13211
13212 explosive.PairRemote(trg);
13214
13215 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13216 trg.SetPersistentPairID(persistentID);
13217 explosive.SetPersistentPairID(persistentID);
13218
13219 return true;
13220 }
13221 return false;
13222 }
13223
13226 {
13227 float ret = 1.0;
13230 ret *= GetHealth01();
13231
13232 return ret;
13233 }
13234
13235 #ifdef DEVELOPER
13236 override void SetDebugItem()
13237 {
13238 super.SetDebugItem();
13239 _itemBase = this;
13240 }
13241
13243 {
13244 string text = super.GetDebugText();
13245
13247 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13248
13249 return text;
13250 }
13251 #endif
13252
13254 {
13255 return true;
13256 }
13257
13259
13261
13263 {
13266 }
13267
13268
13276
13292}
13293
13295{
13297 if (entity)
13298 {
13299 bool is_item = entity.IsInherited(
ItemBase);
13300 if (is_item && full_quantity)
13301 {
13304 }
13305 }
13306 else
13307 {
13309 return NULL;
13310 }
13311 return entity;
13312}
13313
13315{
13316 if (item)
13317 {
13318 if (health > 0)
13319 item.SetHealth("", "", health);
13320
13321 if (item.CanHaveTemperature())
13322 {
13324 if (item.CanFreeze())
13325 item.SetFrozen(false);
13326 }
13327
13328 if (item.HasEnergyManager())
13329 {
13330 if (quantity >= 0)
13331 {
13332 item.GetCompEM().SetEnergy0To1(quantity);
13333 }
13334 else
13335 {
13337 }
13338 }
13339 else if (item.IsMagazine())
13340 {
13341 Magazine mag = Magazine.Cast(item);
13342 if (quantity >= 0)
13343 {
13344 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13345 }
13346 else
13347 {
13349 }
13350
13351 }
13352 else
13353 {
13354 if (quantity >= 0)
13355 {
13356 item.SetQuantityNormalized(quantity, false);
13357 }
13358 else
13359 {
13361 }
13362
13363 }
13364 }
13365}
13366
13367#ifdef DEVELOPER
13369#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.