8430{
8432 {
8433 return true;
8434 }
8435};
8436
8437
8438
8440{
8444
8446
8449
8450
8451
8452
8453
8462
8468
8473
8478
8499 protected bool m_IsResultOfSplit
8500
8502
8507
8508
8509
8511
8515
8516
8517
8519
8522
8523
8524
8530
8531
8539
8542
8543
8545
8546
8548
8549
8554
8555
8560
8561
8563
8564
8566 {
8571
8572 if (!
GetGame().IsDedicatedServer())
8573 {
8575 {
8577
8579 {
8581 }
8582 }
8583
8586 }
8587
8588 m_OldLocation = null;
8589
8591 {
8593 }
8594
8595 if (ConfigIsExisting("headSelectionsToHide"))
8596 {
8599 }
8600
8602 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8603 {
8605 }
8606
8608
8609 m_IsResultOfSplit = false;
8610
8612 }
8613
8615 {
8616 super.InitItemVariables();
8617
8623 m_Count = ConfigGetInt(
"count");
8624
8627
8632
8635
8640
8652
8656
8657
8660 if (ConfigIsExisting("canBeSplit"))
8661 {
8664 }
8665
8667 if (ConfigIsExisting("itemBehaviour"))
8669
8670
8673 RegisterNetSyncVariableInt("m_VarLiquidType");
8674 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8675
8676 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8677 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8678 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8679
8680 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8681 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8682 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8683 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8684
8685 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8686 RegisterNetSyncVariableBool("m_IsTakeable");
8687 RegisterNetSyncVariableBool("m_IsHologram");
8688
8691 {
8694 }
8695
8697
8699 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8701
8702 }
8703
8705 {
8707 }
8708
8710 {
8713 {
8718 }
8719 }
8720
8721 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8722 {
8724 {
8727 }
8728
8730 }
8731
8733 {
8739 }
8740
8742
8744 {
8746
8747 if (!action)
8748 {
8749 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8750 return;
8751 }
8752
8754 if (!ai)
8755 {
8757 return;
8758 }
8759
8761 if (!action_array)
8762 {
8763 action_array = new array<ActionBase_Basic>;
8765 }
8766 if (LogManager.IsActionLogEnable())
8767 {
8768 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8769 }
8770
8771 if (action_array.Find(action) != -1)
8772 {
8773 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8774 }
8775 else
8776 {
8777 action_array.Insert(action);
8778 }
8779 }
8780
8782 {
8784 ActionBase action = player.GetActionManager().GetAction(actionName);
8787
8788 if (action_array)
8789 {
8790 action_array.RemoveItem(action);
8791 }
8792 }
8793
8794
8795
8797 {
8798 ActionOverrideData overrideData = new ActionOverrideData();
8802
8804 if (!actionMap)
8805 {
8808 }
8809
8810 actionMap.Insert(this.
Type(), overrideData);
8811
8812 }
8813
8815
8817
8818
8820 {
8823
8826
8827 string config_to_search = "CfgVehicles";
8828 string muzzle_owner_config;
8829
8831 {
8832 if (IsInherited(Weapon))
8833 config_to_search = "CfgWeapons";
8834
8835 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8836
8837 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
8838
8840
8841 if (config_OnFire_subclass_count > 0)
8842 {
8843 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
8844
8845 for (int i = 0; i < config_OnFire_subclass_count; i++)
8846 {
8847 string particle_class = "";
8849 string config_OnFire_entry = config_OnFire_class + particle_class;
8850 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
8851 WPOF_array.Insert(WPOF);
8852 }
8853
8854
8856 }
8857 }
8858
8860 {
8861 config_to_search = "CfgWeapons";
8862 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8863
8864 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
8865
8867
8868 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
8869 {
8870 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
8871
8872 for (i = 0; i < config_OnBulletCasingEject_count; i++)
8873 {
8874 string particle_class2 = "";
8876 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
8877 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
8878 WPOBE_array.Insert(WPOBE);
8879 }
8880
8881
8883 }
8884 }
8885 }
8886
8887
8889 {
8892
8894 {
8895 string config_to_search = "CfgVehicles";
8896
8897 if (IsInherited(Weapon))
8898 config_to_search = "CfgWeapons";
8899
8900 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8901 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
8902
8903 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
8904 {
8905
8907
8909 {
8911 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
8913 return;
8914 }
8915
8918
8919
8920
8922 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
8923
8924 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
8925 {
8926 string particle_class = "";
8928 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
8930
8931 if (entry_type == CT_CLASS)
8932 {
8933 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
8934 WPOOH_array.Insert(WPOF);
8935 }
8936 }
8937
8938
8940 }
8941 }
8942 }
8943
8945 {
8947 }
8948
8950 {
8952 {
8954
8957
8960
8961 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8962 }
8963 }
8964
8966 {
8968 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8969
8971 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8972
8974 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8975
8977 {
8979 }
8980 }
8981
8983 {
8985 }
8986
8988 {
8991 else
8993
8995 {
8998 }
8999 else
9000 {
9003
9006 }
9007
9009 }
9010
9012 {
9014 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9015 }
9016
9018 {
9020 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9022 }
9023
9025 {
9027 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9028 }
9029
9031 {
9034
9035 OverheatingParticle OP = new OverheatingParticle();
9040
9042 }
9043
9045 {
9048
9049 return -1;
9050 }
9051
9053 {
9055 {
9058
9059 for (int i = count; i > 0; --i)
9060 {
9061 int id = i - 1;
9064
9067
9068 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9069 {
9070 if (p)
9071 {
9074 }
9075 }
9076 }
9077 }
9078 }
9079
9081 {
9083 {
9085 {
9086 int id = i - 1;
9088
9089 if (OP)
9090 {
9092
9093 if (p)
9094 {
9096 }
9097
9098 delete OP;
9099 }
9100 }
9101
9104 }
9105 }
9106
9109 {
9110 return 0.0;
9111 }
9112
9113
9115 {
9116 return 250;
9117 }
9118
9120 {
9121 return 0;
9122 }
9123
9126 {
9128 return true;
9129
9130 return false;
9131 }
9132
9135 {
9138
9140 {
9142 }
9143 else
9144 {
9145
9147 }
9148
9150 }
9151
9158 {
9159 return -1;
9160 }
9161
9162
9163
9164
9166 {
9168 {
9170 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9171
9172 if (r_index >= 0)
9173 {
9174 InventoryLocation r_il = new InventoryLocation;
9175 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9176
9177 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9180 {
9181 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9182 }
9184 {
9185 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9186 }
9187
9188 }
9189
9190 player.GetHumanInventory().ClearUserReservedLocation(this);
9191 }
9192
9195 }
9196
9197
9198
9199
9201 {
9202 return ItemBase.m_DebugActionsMask;
9203 }
9204
9206 {
9207 return ItemBase.m_DebugActionsMask & mask;
9208 }
9209
9211 {
9212 ItemBase.m_DebugActionsMask = mask;
9213 }
9214
9216 {
9217 ItemBase.m_DebugActionsMask |= mask;
9218 }
9219
9221 {
9222 ItemBase.m_DebugActionsMask &= ~mask;
9223 }
9224
9226 {
9228 {
9230 }
9231 else
9232 {
9234 }
9235 }
9236
9237
9239 {
9240 if (GetEconomyProfile())
9241 {
9242 float q_max = GetEconomyProfile().GetQuantityMax();
9243 if (q_max > 0)
9244 {
9245 float q_min = GetEconomyProfile().GetQuantityMin();
9246 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9247
9249 {
9250 ComponentEnergyManager comp = GetCompEM();
9252 {
9254 }
9255 }
9257 {
9259
9260 }
9261
9262 }
9263 }
9264 }
9265
9268 {
9269 EntityAI parent = GetHierarchyParent();
9270
9271 if (parent)
9272 {
9273 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9274 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9275 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9276 }
9277 }
9278
9281 {
9282 EntityAI parent = GetHierarchyParent();
9283
9284 if (parent)
9285 {
9286 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9287 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9288 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9289 }
9290 }
9291
9293 {
9294
9295
9296
9297
9299
9301 {
9302 if (ScriptInputUserData.CanStoreInputUserData())
9303 {
9304 ScriptInputUserData ctx = new ScriptInputUserData;
9310 ctx.
Write(use_stack_max);
9313
9315 {
9316 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9317 }
9318 }
9319 }
9320 else if (!
GetGame().IsMultiplayer())
9321 {
9323 }
9324 }
9325
9327 {
9329 }
9330
9332 {
9334 }
9335
9337 {
9339 }
9340
9342 {
9343
9344 return false;
9345 }
9346
9348 {
9349 return false;
9350 }
9351
9355 {
9356 return false;
9357 }
9358
9360 {
9361 return "";
9362 }
9363
9365
9367 {
9368 return false;
9369 }
9370
9372 {
9373 return true;
9374 }
9375
9376
9377
9379 {
9380 return true;
9381 }
9382
9384 {
9385 return true;
9386 }
9387
9389 {
9390 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9392 }
9393
9395 {
9397 }
9398
9400 {
9402 if (!is_being_placed)
9404 SetSynchDirty();
9405 }
9406
9407
9409
9411 {
9413 }
9414
9416 {
9418 }
9419
9421 {
9422 return 1;
9423 }
9424
9426 {
9427 return false;
9428 }
9429
9431 {
9433 SetSynchDirty();
9434 }
9435
9436
9437
9438
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
9471 {
9472 super.OnMovedInsideCargo(container);
9473
9474 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9475 }
9476
9477 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9478 {
9479 super.EEItemLocationChanged(oldLoc,newLoc);
9480
9481 PlayerBase new_player = null;
9482 PlayerBase old_player = null;
9483
9484 if (newLoc.GetParent())
9485 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9486
9487 if (oldLoc.GetParent())
9488 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9489
9491 {
9492 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9493
9494 if (r_index >= 0)
9495 {
9496 InventoryLocation r_il = new InventoryLocation;
9497 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9498
9499 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9502 {
9503 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9504 }
9506 {
9507 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9508 }
9509
9510 }
9511 }
9512
9514 {
9515 if (new_player)
9516 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9517
9518 if (new_player == old_player)
9519 {
9520
9521 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9522 {
9524 {
9525 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9526 {
9527 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9528 }
9529 }
9530 else
9531 {
9532 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9533 }
9534 }
9535
9536 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9537 {
9538 int type = oldLoc.GetType();
9540 {
9541 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9542 }
9544 {
9545 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9546 }
9547 }
9548 if (!m_OldLocation)
9549 {
9550 m_OldLocation = new InventoryLocation;
9551 }
9552 m_OldLocation.Copy(oldLoc);
9553 }
9554 else
9555 {
9556 if (m_OldLocation)
9557 {
9558 m_OldLocation.Reset();
9559 }
9560 }
9561
9563 }
9564 else
9565 {
9566 if (new_player)
9567 {
9568 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9569 if (res_index >= 0)
9570 {
9571 InventoryLocation il = new InventoryLocation;
9572 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9574 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9577 {
9578 il.
GetParent().GetOnReleaseLock().Invoke(it);
9579 }
9581 {
9583 }
9584
9585 }
9586 }
9588 {
9589
9591 }
9592
9593 if (m_OldLocation)
9594 {
9595 m_OldLocation.Reset();
9596 }
9597 }
9598 }
9599
9600 override void EOnContact(IEntity other, Contact extra)
9601 {
9603 {
9604 int liquidType = -1;
9606 if (impactSpeed > 0.0)
9607 {
9609 #ifndef SERVER
9611 #else
9613 SetSynchDirty();
9614 #endif
9616 }
9617 }
9618
9619 #ifdef SERVER
9620 if (GetCompEM() && GetCompEM().IsPlugged())
9621 {
9622 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9623 GetCompEM().UnplugThis();
9624 }
9625 #endif
9626 }
9627
9629
9631 {
9633 }
9634
9636 {
9637
9638 }
9639
9641 {
9642 super.OnItemLocationChanged(old_owner, new_owner);
9643
9644 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9645 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9646
9647 if (!relatedPlayer && playerNew)
9648 relatedPlayer = playerNew;
9649
9650 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9651 {
9653 if (actionMgr)
9654 {
9655 ActionBase currentAction = actionMgr.GetRunningAction();
9656 if (currentAction)
9658 }
9659 }
9660
9661 Man ownerPlayerOld = null;
9662 Man ownerPlayerNew = null;
9663
9664 if (old_owner)
9665 {
9666 if (old_owner.
IsMan())
9667 {
9668 ownerPlayerOld = Man.Cast(old_owner);
9669 }
9670 else
9671 {
9672 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9673 }
9674 }
9675 else
9676 {
9678 {
9680
9681 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9682 {
9683 GetCompEM().UnplugThis();
9684 }
9685 }
9686 }
9687
9688 if (new_owner)
9689 {
9690 if (new_owner.
IsMan())
9691 {
9692 ownerPlayerNew = Man.Cast(new_owner);
9693 }
9694 else
9695 {
9696 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9697 }
9698 }
9699
9700 if (ownerPlayerOld != ownerPlayerNew)
9701 {
9702 if (ownerPlayerOld)
9703 {
9704 array<EntityAI> subItemsExit = new array<EntityAI>;
9706 for (int i = 0; i < subItemsExit.Count(); i++)
9707 {
9710 }
9711 }
9712
9713 if (ownerPlayerNew)
9714 {
9715 array<EntityAI> subItemsEnter = new array<EntityAI>;
9717 for (int j = 0; j < subItemsEnter.Count(); j++)
9718 {
9721 }
9722 }
9723 }
9724 else if (ownerPlayerNew != null)
9725 {
9726 PlayerBase nplayer;
9727 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9728 {
9729 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9731 for (int k = 0; k < subItemsUpdate.Count(); k++)
9732 {
9734 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9735 }
9736 }
9737 }
9738
9739 if (old_owner)
9740 old_owner.OnChildItemRemoved(this);
9741 if (new_owner)
9742 new_owner.OnChildItemReceived(this);
9743 }
9744
9745
9747 {
9748 super.EEDelete(parent);
9749 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9750 if (player)
9751 {
9753
9754 if (player.IsAlive())
9755 {
9756 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9757 if (r_index >= 0)
9758 {
9759 InventoryLocation r_il = new InventoryLocation;
9760 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9761
9762 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9765 {
9766 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9767 }
9769 {
9770 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9771 }
9772
9773 }
9774
9775 player.RemoveQuickBarEntityShortcut(this);
9776 }
9777 }
9778 }
9779
9781 {
9782 super.EEKilled(killer);
9783
9786 {
9787 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
9788 {
9789 if (IsMagazine())
9790 {
9791 if (Magazine.Cast(this).GetAmmoCount() > 0)
9792 {
9794 }
9795 }
9796 else
9797 {
9799 }
9800 }
9801 }
9802 }
9803
9805 {
9806 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9807
9808 super.OnWasAttached(parent, slot_id);
9809
9812
9814 }
9815
9817 {
9818 super.OnWasDetached(parent, slot_id);
9819
9822 }
9823
9825 {
9826 int idx;
9829
9830 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9831 if (inventory_slots.Count() < 1)
9832 {
9833 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
9834 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
9835 }
9836 else
9837 {
9838 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
9839 }
9840
9841 idx = inventory_slots.Find(slot);
9842 if (idx < 0)
9843 return "";
9844
9845 return attach_types.Get(idx);
9846 }
9847
9849 {
9850 int idx = -1;
9851 string slot;
9852
9855
9856 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9857 if (inventory_slots.Count() < 1)
9858 {
9859 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
9860 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9861 }
9862 else
9863 {
9864 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
9865 if (detach_types.Count() < 1)
9866 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9867 }
9868
9869 for (int i = 0; i < inventory_slots.Count(); i++)
9870 {
9871 slot = inventory_slots.Get(i);
9872 }
9873
9874 if (slot != "")
9875 {
9876 if (detach_types.Count() == 1)
9877 idx = 0;
9878 else
9879 idx = inventory_slots.Find(slot);
9880 }
9881 if (idx < 0)
9882 return "";
9883
9884 return detach_types.Get(idx);
9885 }
9886
9888 {
9889
9891
9892
9893 float min_time = 1;
9894 float max_time = 3;
9895 float delay = Math.RandomFloat(min_time, max_time);
9896
9897 explode_timer.Run(delay, this, "DoAmmoExplosion");
9898 }
9899
9901 {
9902 Magazine magazine = Magazine.Cast(this);
9903 int pop_sounds_count = 6;
9904 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
9905
9906
9907 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
9908 string sound_name = pop_sounds[ sound_idx ];
9910
9911
9912 magazine.ServerAddAmmoCount(-1);
9913
9914
9915 float min_temp_to_explode = 100;
9916
9917 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
9918 {
9920 }
9921 }
9922
9923
9924 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
9925 {
9926 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
9927
9928 const int CHANCE_DAMAGE_CARGO = 4;
9929 const int CHANCE_DAMAGE_ATTACHMENT = 1;
9930 const int CHANCE_DAMAGE_NOTHING = 2;
9931
9933 {
9934 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
9935 int chances;
9936 int rnd;
9937
9938 if (GetInventory().GetCargo())
9939 {
9940 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
9941 rnd = Math.RandomInt(0,chances);
9942
9943 if (rnd < CHANCE_DAMAGE_CARGO)
9944 {
9946 }
9947 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
9948 {
9950 }
9951 }
9952 else
9953 {
9954 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
9955 rnd = Math.RandomInt(0,chances);
9956
9957 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
9958 {
9960 }
9961 }
9962 }
9963 }
9964
9966 {
9967 if (GetInventory().GetCargo())
9968 {
9969 int item_count = GetInventory().GetCargo().GetItemCount();
9970 if (item_count > 0)
9971 {
9972 int random_pick = Math.RandomInt(0, item_count);
9974 if (!item.IsExplosive())
9975 {
9976 item.AddHealth("","",damage);
9977 return true;
9978 }
9979 }
9980 }
9981 return false;
9982 }
9983
9985 {
9986 int attachment_count = GetInventory().AttachmentCount();
9987 if (attachment_count > 0)
9988 {
9989 int random_pick = Math.RandomInt(0, attachment_count);
9990 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
9991 if (!attachment.IsExplosive())
9992 {
9993 attachment.AddHealth("","",damage);
9994 return true;
9995 }
9996 }
9997 return false;
9998 }
9999
10001 {
10003 }
10004
10006 {
10008 return GetInventory().CanRemoveEntity();
10009
10010 return false;
10011 }
10012
10014 {
10016 return;
10017
10019 {
10020 if (ScriptInputUserData.CanStoreInputUserData())
10021 {
10022 ScriptInputUserData ctx = new ScriptInputUserData;
10027 ctx.
Write(destination_entity);
10029 ctx.
Write(slot_id);
10031 }
10032 }
10033 else if (!
GetGame().IsMultiplayer())
10034 {
10036 }
10037 }
10038
10040 {
10042 return;
10043
10044 float split_quantity_new;
10048 InventoryLocation loc = new InventoryLocation;
10049
10050 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10051 {
10053 split_quantity_new = stack_max;
10054 else
10056
10057 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10058 if (new_item)
10059 {
10060 new_item.SetResultOfSplit(true);
10061 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10063 new_item.SetQuantity(split_quantity_new);
10064 }
10065 }
10066 else if (destination_entity && slot_id == -1)
10067 {
10068 if (quantity > stack_max)
10069 split_quantity_new = stack_max;
10070 else
10071 split_quantity_new = quantity;
10072
10074 {
10077 }
10078
10079 if (new_item)
10080 {
10081 new_item.SetResultOfSplit(true);
10082 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10084 new_item.SetQuantity(split_quantity_new);
10085 }
10086 }
10087 else
10088 {
10089 if (stack_max != 0)
10090 {
10092 {
10094 }
10095
10096 if (split_quantity_new == 0)
10097 {
10098 if (!
GetGame().IsMultiplayer())
10099 player.PhysicalPredictiveDropItem(this);
10100 else
10101 player.ServerDropEntity(this);
10102 return;
10103 }
10104
10106
10107 if (new_item)
10108 {
10109 new_item.SetResultOfSplit(true);
10110 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10112 new_item.SetQuantity(stack_max);
10113 new_item.PlaceOnSurface();
10114 }
10115 }
10116 }
10117 }
10118
10120 {
10122 return;
10123
10124 float split_quantity_new;
10128 InventoryLocation loc = new InventoryLocation;
10129
10130 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10131 {
10133 split_quantity_new = stack_max;
10134 else
10136
10137 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10138 if (new_item)
10139 {
10140 new_item.SetResultOfSplit(true);
10141 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10143 new_item.SetQuantity(split_quantity_new);
10144 }
10145 }
10146 else if (destination_entity && slot_id == -1)
10147 {
10148 if (quantity > stack_max)
10149 split_quantity_new = stack_max;
10150 else
10151 split_quantity_new = quantity;
10152
10154 {
10157 }
10158
10159 if (new_item)
10160 {
10161 new_item.SetResultOfSplit(true);
10162 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10164 new_item.SetQuantity(split_quantity_new);
10165 }
10166 }
10167 else
10168 {
10169 if (stack_max != 0)
10170 {
10172 {
10174 }
10175
10177
10178 if (new_item)
10179 {
10180 new_item.SetResultOfSplit(true);
10181 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10183 new_item.SetQuantity(stack_max);
10184 new_item.PlaceOnSurface();
10185 }
10186 }
10187 }
10188 }
10189
10191 {
10193 return;
10194
10196 {
10197 if (ScriptInputUserData.CanStoreInputUserData())
10198 {
10199 ScriptInputUserData ctx = new ScriptInputUserData;
10204 dst.WriteToContext(ctx);
10206 }
10207 }
10208 else if (!
GetGame().IsMultiplayer())
10209 {
10211 }
10212 }
10213
10215 {
10217 return;
10218
10220 {
10221 if (ScriptInputUserData.CanStoreInputUserData())
10222 {
10223 ScriptInputUserData ctx = new ScriptInputUserData;
10228 ctx.
Write(destination_entity);
10234 }
10235 }
10236 else if (!
GetGame().IsMultiplayer())
10237 {
10239 }
10240 }
10241
10243 {
10245 }
10246
10248 {
10250 return this;
10251
10253 float split_quantity_new;
10255 if (dst.IsValid())
10256 {
10257 int slot_id = dst.GetSlot();
10259
10260 if (quantity > stack_max)
10261 split_quantity_new = stack_max;
10262 else
10263 split_quantity_new = quantity;
10264
10266
10267 if (new_item)
10268 {
10269 new_item.SetResultOfSplit(true);
10270 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10273 }
10274
10275 return new_item;
10276 }
10277
10278 return null;
10279 }
10280
10282 {
10284 return;
10285
10287 float split_quantity_new;
10289 if (destination_entity)
10290 {
10292 if (quantity > stackable)
10293 split_quantity_new = stackable;
10294 else
10295 split_quantity_new = quantity;
10296
10297 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10298 if (new_item)
10299 {
10300 new_item.SetResultOfSplit(true);
10301 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10303 new_item.SetQuantity(split_quantity_new);
10304 }
10305 }
10306 }
10307
10309 {
10311 return;
10312
10314 {
10315 if (ScriptInputUserData.CanStoreInputUserData())
10316 {
10317 ScriptInputUserData ctx = new ScriptInputUserData;
10322 ItemBase destination_entity =
this;
10323 ctx.
Write(destination_entity);
10327 }
10328 }
10329 else if (!
GetGame().IsMultiplayer())
10330 {
10332 }
10333 }
10334
10336 {
10338 return;
10339
10341 float split_quantity_new;
10343 if (player)
10344 {
10346 if (quantity > stackable)
10347 split_quantity_new = stackable;
10348 else
10349 split_quantity_new = quantity;
10350
10351 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10352 new_item =
ItemBase.Cast(in_hands);
10353 if (new_item)
10354 {
10355 new_item.SetResultOfSplit(true);
10356 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10358 new_item.SetQuantity(split_quantity_new);
10359 }
10360 }
10361 }
10362
10364 {
10366 return;
10367
10369 float split_quantity_new = Math.Floor(quantity * 0.5);
10370
10372
10373 if (new_item)
10374 {
10375 if (new_item.GetQuantityMax() < split_quantity_new)
10376 {
10377 split_quantity_new = new_item.GetQuantityMax();
10378 }
10379
10380 new_item.SetResultOfSplit(true);
10381 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10382
10384 {
10387 }
10388 else
10389 {
10392 }
10393 }
10394 }
10395
10397 {
10399 return;
10400
10402 float split_quantity_new = Math.Floor(quantity / 2);
10403
10404 InventoryLocation invloc = new InventoryLocation;
10406
10408 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10409
10410 if (new_item)
10411 {
10412 if (new_item.GetQuantityMax() < split_quantity_new)
10413 {
10414 split_quantity_new = new_item.GetQuantityMax();
10415 }
10417 {
10420 }
10421 else
10422 {
10425 }
10426 }
10427 }
10428
10431 {
10432 SetWeightDirty();
10434
10435 if (parent)
10436 parent.OnAttachmentQuantityChangedEx(this, delta);
10437
10439 {
10441 {
10443 }
10445 {
10446 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10448 }
10449 }
10450
10451 }
10452
10455 {
10456
10457 }
10458
10461 {
10463 }
10464
10466 {
10467 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10468
10470 {
10471 if (newLevel == GameConstants.STATE_RUINED)
10472 {
10474 EntityAI parent = GetHierarchyParent();
10475 if (parent && parent.IsFireplace())
10476 {
10477 CargoBase cargo = GetInventory().GetCargo();
10478 if (cargo)
10479 {
10481 {
10483 }
10484 }
10485 }
10486 }
10487
10489 {
10490
10492 return;
10493 }
10494
10495 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10496 {
10498 }
10499 }
10500 }
10501
10502
10504 {
10505 super.OnRightClick();
10506
10508 {
10510 {
10511 if (ScriptInputUserData.CanStoreInputUserData())
10512 {
10513 vector m4[4];
10515
10516 EntityAI root = GetHierarchyRoot();
10517
10518 InventoryLocation dst = new InventoryLocation;
10520 {
10521 if (root)
10522 {
10523 root.GetTransform(m4);
10525 }
10526 else
10527 GetInventory().GetCurrentInventoryLocation(dst);
10528 }
10529 else
10530 {
10532
10533
10534 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10535 {
10536 if (root)
10537 {
10538 root.GetTransform(m4);
10540 }
10541 else
10542 GetInventory().GetCurrentInventoryLocation(dst);
10543 }
10544 else
10545 {
10546 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10547 }
10548 }
10549
10550 ScriptInputUserData ctx = new ScriptInputUserData;
10558 }
10559 }
10560 else if (!
GetGame().IsMultiplayer())
10561 {
10563 }
10564 }
10565 }
10566
10567 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10568 {
10569
10570 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10571 return false;
10572
10573 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10574 return false;
10575
10576
10578 return false;
10579
10580
10581 Magazine mag = Magazine.Cast(this);
10582 if (mag)
10583 {
10584 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10585 return false;
10586
10587 if (stack_max_limit)
10588 {
10589 Magazine other_mag = Magazine.Cast(other_item);
10590 if (other_item)
10591 {
10592 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10593 return false;
10594 }
10595
10596 }
10597 }
10598 else
10599 {
10600
10602 return false;
10603
10605 return false;
10606 }
10607
10608 PlayerBase player = null;
10609 if (CastTo(player, GetHierarchyRootPlayer()))
10610 {
10611 if (player.GetInventory().HasAttachment(this))
10612 return false;
10613
10614 if (player.IsItemsToDelete())
10615 return false;
10616 }
10617
10618 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10619 return false;
10620
10621 int slotID;
10623 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10624 return false;
10625
10626 return true;
10627 }
10628
10630 {
10632 }
10633
10635 {
10636 return m_IsResultOfSplit;
10637 }
10638
10640 {
10641 m_IsResultOfSplit = value;
10642 }
10643
10645 {
10647 }
10648
10650 {
10651 float other_item_quantity = other_item.GetQuantity();
10652 float this_free_space;
10653
10655
10657
10658 if (other_item_quantity > this_free_space)
10659 {
10660 return this_free_space;
10661 }
10662 else
10663 {
10664 return other_item_quantity;
10665 }
10666 }
10667
10669 {
10671 }
10672
10674 {
10676 return;
10677
10678 if (!IsMagazine() && other_item)
10679 {
10681 if (quantity_used != 0)
10682 {
10683 float hp1 = GetHealth01("","");
10684 float hp2 = other_item.GetHealth01("","");
10685 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10686 hpResult = hpResult / (
GetQuantity() + quantity_used);
10687
10688 hpResult *= GetMaxHealth();
10689 Math.Round(hpResult);
10690 SetHealth("", "Health", hpResult);
10691
10693 other_item.AddQuantity(-quantity_used);
10694 }
10695 }
10697 }
10698
10700 {
10701 #ifdef SERVER
10702 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10703 GetHierarchyParent().IncreaseLifetimeUp();
10704 #endif
10705 };
10706
10708 {
10709 PlayerBase p = PlayerBase.Cast(player);
10710
10711 array<int> recipesIds = p.m_Recipes;
10712 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10713 if (moduleRecipesManager)
10714 {
10715 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10716 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10717 }
10718
10719 for (int i = 0;i < recipesIds.Count(); i++)
10720 {
10721 int key = recipesIds.Get(i);
10722 string recipeName = moduleRecipesManager.GetRecipeName(key);
10724 }
10725 }
10726
10727
10728 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10729 {
10730 super.GetDebugActions(outputList);
10731
10732
10737
10738
10742
10746
10747
10750
10751
10753 {
10756 }
10757
10759
10762
10766 }
10767
10768
10769
10770
10772 {
10773 super.OnAction(action_id, player, ctx);
10774 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10775 {
10776 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10777 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10778 PlayerBase p = PlayerBase.Cast(player);
10779 if (
EActions.RECIPES_RANGE_START < 1000)
10780 {
10781 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10782 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10783 }
10784 }
10785 #ifndef SERVER
10786 else if (action_id ==
EActions.WATCH_PLAYER)
10787 {
10788 PluginDeveloper.SetDeveloperItemClientEx(player);
10789 }
10790 #endif
10792 {
10793 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
10794 {
10795 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
10796 OnDebugButtonPressServer(id + 1);
10797 }
10798
10799 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
10800 {
10801 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
10803 }
10804
10805 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
10806 {
10807 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
10809 }
10810
10811 else if (action_id ==
EActions.ADD_QUANTITY)
10812 {
10813 if (IsMagazine())
10814 {
10815 Magazine mag = Magazine.Cast(this);
10816 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
10817 }
10818 else
10819 {
10821 }
10822
10823 if (m_EM)
10824 {
10825 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
10826 }
10827
10828 }
10829
10830 else if (action_id ==
EActions.REMOVE_QUANTITY)
10831 {
10832 if (IsMagazine())
10833 {
10834 Magazine mag2 = Magazine.Cast(this);
10835 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
10836 }
10837 else
10838 {
10840 }
10841 if (m_EM)
10842 {
10843 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
10844 }
10845
10846 }
10847
10848 else if (action_id ==
EActions.SET_QUANTITY_0)
10849 {
10851
10852 if (m_EM)
10853 {
10854 m_EM.SetEnergy(0);
10855 }
10856 }
10857
10858 else if (action_id ==
EActions.SET_MAX_QUANTITY)
10859 {
10861
10862 if (m_EM)
10863 {
10864 m_EM.SetEnergy(m_EM.GetEnergyMax());
10865 }
10866 }
10867
10868 else if (action_id ==
EActions.ADD_HEALTH)
10869 {
10870 AddHealth("","",GetMaxHealth("","Health")/5);
10871 }
10872 else if (action_id ==
EActions.REMOVE_HEALTH)
10873 {
10874 AddHealth("","",-GetMaxHealth("","Health")/5);
10875 }
10876 else if (action_id ==
EActions.DESTROY_HEALTH)
10877 {
10878 SetHealth01("","",0);
10879 }
10880 else if (action_id ==
EActions.WATCH_ITEM)
10881 {
10883 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
10884 #ifdef DEVELOPER
10885 SetDebugDeveloper_item(this);
10886 #endif
10887 }
10888
10889 else if (action_id ==
EActions.ADD_TEMPERATURE)
10890 {
10891 AddTemperature(20);
10892
10893 }
10894
10895 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
10896 {
10897 AddTemperature(-20);
10898
10899 }
10900
10901 else if (action_id ==
EActions.FLIP_FROZEN)
10902 {
10903 SetFrozen(!GetIsFrozen());
10904
10905 }
10906
10907 else if (action_id ==
EActions.ADD_WETNESS)
10908 {
10910
10911 }
10912
10913 else if (action_id ==
EActions.REMOVE_WETNESS)
10914 {
10916
10917 }
10918
10919 else if (action_id ==
EActions.LIQUIDTYPE_UP)
10920 {
10923
10924
10925 }
10926
10927 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
10928 {
10931 }
10932
10933 else if (action_id ==
EActions.MAKE_SPECIAL)
10934 {
10935 auto debugParams = DebugSpawnParams.WithPlayer(player);
10936 OnDebugSpawnEx(debugParams);
10937 }
10938
10939 else if (action_id ==
EActions.DELETE)
10940 {
10941 Delete();
10942 }
10943
10944 }
10945
10946
10947 return false;
10948 }
10949
10950
10951
10952
10956
10959
10960
10961
10963 {
10964 return false;
10965 }
10966
10967
10969 {
10970 return true;
10971 }
10972
10973
10975 {
10976 return true;
10977 }
10978
10979
10980
10982 {
10983 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
10985 }
10986
10989 {
10990 return null;
10991 }
10992
10994 {
10995 return false;
10996 }
10997
10999 {
11000 return false;
11001 }
11002
11006
11007
11009 {
11010 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11011 return module_repairing.CanRepair(this, item_repair_kit);
11012 }
11013
11014
11015 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11016 {
11017 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11018 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11019 }
11020
11021
11023 {
11024
11025
11026
11027
11028
11029
11030
11031
11032 return 1;
11033 }
11034
11035
11036
11038 {
11040 }
11041
11042
11043
11045 {
11047 }
11048
11049
11058 {
11059 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11060
11061 if (player)
11062 {
11063 player.MessageStatus(text);
11064 }
11065 }
11066
11067
11076 {
11077 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11078
11079 if (player)
11080 {
11081 player.MessageAction(text);
11082 }
11083 }
11084
11085
11094 {
11095 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11096
11097 if (player)
11098 {
11099 player.MessageFriendly(text);
11100 }
11101 }
11102
11103
11112 {
11113 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11114
11115 if (player)
11116 {
11117 player.MessageImportant(text);
11118 }
11119 }
11120
11122 {
11123 return true;
11124 }
11125
11126
11127 override bool KindOf(
string tag)
11128 {
11129 bool found = false;
11130 string item_name = this.
GetType();
11133
11134 int array_size = item_tag_array.Count();
11135 for (int i = 0; i < array_size; i++)
11136 {
11137 if (item_tag_array.Get(i) == tag)
11138 {
11139 found = true;
11140 break;
11141 }
11142 }
11143 return found;
11144 }
11145
11146
11148 {
11149
11150 super.OnRPC(sender, rpc_type,ctx);
11151
11152
11153 switch (rpc_type)
11154 {
11155 #ifndef SERVER
11156 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11157 Param2<bool, string> p = new Param2<bool, string>(false, "");
11158
11160 return;
11161
11162 bool play = p.param1;
11163 string soundSet = p.param2;
11164
11165 if (play)
11166 {
11168 {
11170 {
11172 }
11173 }
11174 else
11175 {
11177 }
11178 }
11179 else
11180 {
11182 }
11183
11184 break;
11185 #endif
11186
11187 }
11188
11190 {
11192 }
11193 }
11194
11195
11196
11197
11199 {
11200 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11201 return plugin.GetID(
name);
11202 }
11203
11205 {
11206 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11207 return plugin.GetName(id);
11208 }
11209
11212 {
11213
11214
11215 int varFlags;
11216 if (!ctx.
Read(varFlags))
11217 return;
11218
11219 if (varFlags & ItemVariableFlags.FLOAT)
11220 {
11222 }
11223 }
11224
11226 {
11227
11228 super.SerializeNumericalVars(floats_out);
11229
11230
11231
11233 {
11235 }
11236
11238 {
11240 }
11241
11243 {
11245 }
11246
11248 {
11253 }
11254
11256 {
11258 }
11259 }
11260
11262 {
11263
11264 super.DeSerializeNumericalVars(floats);
11265
11266
11267 int index = 0;
11268 int mask = Math.Round(floats.Get(index));
11269
11270 index++;
11271
11273 {
11275 {
11277 }
11278 else
11279 {
11280 float quantity = floats.Get(index);
11281 SetQuantity(quantity,
true,
false,
false,
false);
11282 }
11283 index++;
11284 }
11285
11287 {
11288 float wet = floats.Get(index);
11290 index++;
11291 }
11292
11294 {
11295 int liquidtype = Math.Round(floats.Get(index));
11297 index++;
11298 }
11299
11301 {
11303 index++;
11305 index++;
11307 index++;
11309 index++;
11310 }
11311
11313 {
11314 int cleanness = Math.Round(floats.Get(index));
11316 index++;
11317 }
11318 }
11319
11321 {
11322 super.WriteVarsToCTX(ctx);
11323
11324
11326 {
11328 }
11329
11331 {
11333 }
11334
11336 {
11338 }
11339
11341 {
11342 int r,g,b,a;
11348 }
11349
11351 {
11353 }
11354 }
11355
11357 {
11358 if (!super.ReadVarsFromCTX(ctx,version))
11359 return false;
11360
11361 int intValue;
11362 float value;
11363
11364 if (version < 140)
11365 {
11366 if (!ctx.
Read(intValue))
11367 return false;
11368
11369 m_VariablesMask = intValue;
11370 }
11371
11373 {
11374 if (!ctx.
Read(value))
11375 return false;
11376
11378 {
11380 }
11381 else
11382 {
11384 }
11385 }
11386
11387 if (version < 140)
11388 {
11390 {
11391 if (!ctx.
Read(value))
11392 return false;
11393 SetTemperatureDirect(value);
11394 }
11395 }
11396
11398 {
11399 if (!ctx.
Read(value))
11400 return false;
11402 }
11403
11405 {
11406 if (!ctx.
Read(intValue))
11407 return false;
11409 }
11410
11412 {
11413 int r,g,b,a;
11415 return false;
11417 return false;
11419 return false;
11421 return false;
11422
11424 }
11425
11427 {
11428 if (!ctx.
Read(intValue))
11429 return false;
11431 }
11432
11433 if (version >= 138 && version < 140)
11434 {
11436 {
11437 if (!ctx.
Read(intValue))
11438 return false;
11439 SetFrozen(intValue);
11440 }
11441 }
11442
11443 return true;
11444 }
11445
11446
11448 {
11451 {
11453 }
11454
11455 if (!super.OnStoreLoad(ctx, version))
11456 {
11458 return false;
11459 }
11460
11461 if (version >= 114)
11462 {
11463 bool hasQuickBarIndexSaved;
11464
11465 if (!ctx.
Read(hasQuickBarIndexSaved))
11466 {
11468 return false;
11469 }
11470
11471 if (hasQuickBarIndexSaved)
11472 {
11473 int itmQBIndex;
11474
11475
11476 if (!ctx.
Read(itmQBIndex))
11477 {
11479 return false;
11480 }
11481
11482 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11483 if (itmQBIndex != -1 && parentPlayer)
11484 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11485 }
11486 }
11487 else
11488 {
11489
11490 PlayerBase player;
11491 int itemQBIndex;
11492 if (version ==
int.
MAX)
11493 {
11494 if (!ctx.
Read(itemQBIndex))
11495 {
11497 return false;
11498 }
11499 }
11500 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11501 {
11502
11503 if (!ctx.
Read(itemQBIndex))
11504 {
11506 return false;
11507 }
11508 if (itemQBIndex != -1 && player)
11509 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11510 }
11511 }
11512
11513 if (version < 140)
11514 {
11515
11516 if (!LoadVariables(ctx, version))
11517 {
11519 return false;
11520 }
11521 }
11522
11523
11525 {
11527 return false;
11528 }
11529 if (version >= 132)
11530 {
11532 if (raib)
11533 {
11535 {
11537 return false;
11538 }
11539 }
11540 }
11541
11543 return true;
11544 }
11545
11546
11547
11549 {
11550 super.OnStoreSave(ctx);
11551
11552 PlayerBase player;
11553 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11554 {
11556
11557 int itemQBIndex = -1;
11558 itemQBIndex = player.FindQuickBarEntityIndex(this);
11559 ctx.
Write(itemQBIndex);
11560 }
11561 else
11562 {
11564 }
11565
11567
11569 if (raib)
11570 {
11572 }
11573 }
11574
11575
11577 {
11578 super.AfterStoreLoad();
11579
11581 {
11583 }
11584
11586 {
11589 }
11590 }
11591
11593 {
11594 super.EEOnAfterLoad();
11595
11597 {
11599 }
11600
11603 }
11604
11606 {
11607 return false;
11608 }
11609
11610
11611
11613 {
11615 {
11616 #ifdef PLATFORM_CONSOLE
11617
11619 {
11621 if (menu)
11622 {
11624 }
11625 }
11626 #endif
11627 }
11628
11630 {
11633 }
11634
11636 {
11637 SetWeightDirty();
11639 }
11641 {
11644 }
11645
11647 {
11650 }
11652 {
11655 }
11656
11657 super.OnVariablesSynchronized();
11658 }
11659
11660
11661
11663 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11664 {
11665 if (!IsServerCheck(allow_client))
11666 return false;
11667
11669 return false;
11670
11673
11674 if (value <= (min + 0.001))
11675 value = min;
11676
11677 if (value == min)
11678 {
11679 if (destroy_config)
11680 {
11681 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11682 if (dstr)
11683 {
11685 this.Delete();
11686 return true;
11687 }
11688 }
11689 else if (destroy_forced)
11690 {
11692 this.Delete();
11693 return true;
11694 }
11695
11697 }
11698
11701
11703 {
11705
11706 if (delta)
11708 }
11709
11711
11712 return false;
11713 }
11714
11715
11717 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11718 {
11720 }
11721
11723 {
11726 }
11727
11729 {
11732 }
11733
11736 {
11737 float value_clamped = Math.Clamp(value, 0, 1);
11739 SetQuantity(result, destroy_config, destroy_forced);
11740 }
11741
11742
11745 {
11747 }
11748
11750 {
11752 }
11753
11754
11755
11756
11757
11758
11759
11760
11761
11762
11764 {
11765 int slot = -1;
11766 if (GetInventory())
11767 {
11768 InventoryLocation il = new InventoryLocation;
11769 GetInventory().GetCurrentInventoryLocation(il);
11771 }
11772
11774 }
11775
11777 {
11778 float quantity_max = 0;
11779
11781 {
11782 if (attSlotID != -1)
11783 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11784
11785 if (quantity_max <= 0)
11787 }
11788
11789 if (quantity_max <= 0)
11791
11792 return quantity_max;
11793 }
11794
11796 {
11798 }
11799
11801 {
11803 }
11804
11805
11807 {
11809 }
11810
11812 {
11814 }
11815
11817 {
11819 }
11820
11821
11823 {
11824
11825 float weightEx = GetWeightEx();
11826 float special = GetInventoryAndCargoWeight();
11827 return weightEx - special;
11828 }
11829
11830
11832 {
11834 }
11835
11837 {
11839 {
11840 #ifdef DEVELOPER
11841 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11842 {
11843 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
11845 }
11846 #endif
11847
11848 return GetQuantity() * GetConfigWeightModified();
11849 }
11850 else if (HasEnergyManager())
11851 {
11852 #ifdef DEVELOPER
11853 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11854 {
11855 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
11856 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
11857 }
11858 #endif
11859 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
11860 }
11861 else
11862 {
11863 #ifdef DEVELOPER
11864 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11865 {
11866 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
11867 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
11868 }
11869 #endif
11870 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
11871 }
11872 }
11873
11876 {
11877 int item_count = 0;
11879
11880 if (GetInventory().GetCargo() != NULL)
11881 {
11882 item_count = GetInventory().GetCargo().GetItemCount();
11883 }
11884
11885 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
11886 {
11887 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
11888 if (item)
11889 item_count += item.GetNumberOfItems();
11890 }
11891 return item_count;
11892 }
11893
11896 {
11897 float weight = 0;
11898 float wetness = 1;
11899 if (include_wetness)
11902 {
11903 weight = wetness * m_ConfigWeight;
11904 }
11906 {
11907 weight = 1;
11908 }
11909 return weight;
11910 }
11911
11912
11913
11915 {
11916 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
11917 {
11918 GameInventory inv = GetInventory();
11919 array<EntityAI> items = new array<EntityAI>;
11921 for (int i = 0; i < items.Count(); i++)
11922 {
11924 if (item)
11925 {
11927 }
11928 }
11929 }
11930 }
11931
11932
11933
11934
11936 {
11937 float energy = 0;
11938 if (HasEnergyManager())
11939 {
11940 energy = GetCompEM().GetEnergy();
11941 }
11942 return energy;
11943 }
11944
11945
11947 {
11948 super.OnEnergyConsumed();
11949
11951 }
11952
11954 {
11955 super.OnEnergyAdded();
11956
11958 }
11959
11960
11962 {
11963 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
11964 {
11966 {
11967 float energy_0to1 = GetCompEM().GetEnergy0To1();
11969 }
11970 }
11971 }
11972
11973
11975 {
11976 return ConfigGetFloat("heatIsolation");
11977 }
11978
11980 {
11982 }
11983
11985 {
11986 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
11987 if (
GetGame().ConfigIsExisting(paramPath))
11989
11990 return 0.0;
11991 }
11992
11994 {
11995 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
11996 if (
GetGame().ConfigIsExisting(paramPath))
11998
11999 return 0.0;
12000 }
12001
12002 override void SetWet(
float value,
bool allow_client =
false)
12003 {
12004 if (!IsServerCheck(allow_client))
12005 return;
12006
12009
12011
12012 m_VarWet = Math.Clamp(value, min, max);
12013
12015 {
12018 }
12019 }
12020
12021 override void AddWet(
float value)
12022 {
12024 }
12025
12027 {
12029 }
12030
12032 {
12034 }
12035
12037 {
12039 }
12040
12042 {
12044 }
12045
12047 {
12049 }
12050
12051 override void OnWetChanged(
float newVal,
float oldVal)
12052 {
12055 if (newLevel != oldLevel)
12056 {
12058 }
12059 }
12060
12062 {
12063 SetWeightDirty();
12064 }
12065
12067 {
12068 return GetWetLevelInternal(
m_VarWet);
12069 }
12070
12071
12072
12074 {
12076 }
12077
12079 {
12081 }
12082
12084 {
12086 }
12087
12089 {
12091 }
12092
12093
12094
12096 {
12097 if (ConfigIsExisting("itemModelLength"))
12098 {
12099 return ConfigGetFloat("itemModelLength");
12100 }
12101 return 0;
12102 }
12103
12105 {
12106 if (ConfigIsExisting("itemAttachOffset"))
12107 {
12108 return ConfigGetFloat("itemAttachOffset");
12109 }
12110 return 0;
12111 }
12112
12113 override void SetCleanness(
int value,
bool allow_client =
false)
12114 {
12115 if (!IsServerCheck(allow_client))
12116 return;
12117
12119
12121
12124 }
12125
12127 {
12129 }
12130
12132 {
12133 return true;
12134 }
12135
12136
12137
12138
12140 {
12142 }
12143
12145 {
12147 }
12148
12149
12150
12151
12152 override void SetColor(
int r,
int g,
int b,
int a)
12153 {
12159 }
12161 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12162 {
12167 }
12168
12170 {
12172 }
12173
12176 {
12177 int r,g,b,a;
12179 r = r/255;
12180 g = g/255;
12181 b = b/255;
12182 a = a/255;
12183 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12184 }
12185
12186
12187
12188 override void SetLiquidType(
int value,
bool allow_client =
false)
12189 {
12190 if (!IsServerCheck(allow_client))
12191 return;
12192
12197 }
12198
12200 {
12201 return ConfigGetInt("varLiquidTypeInit");
12202 }
12203
12205 {
12207 }
12208
12210 {
12212 SetFrozen(false);
12213 }
12214
12217 {
12218 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12219 }
12220
12221
12224 {
12225 PlayerBase nplayer;
12226 if (PlayerBase.CastTo(nplayer, player))
12227 {
12229
12230 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12231 }
12232 }
12233
12234
12237 {
12238 PlayerBase nplayer;
12239 if (PlayerBase.CastTo(nplayer,player))
12240 {
12241
12242 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12243
12244 }
12245
12246
12247 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12248
12249
12250 if (HasEnergyManager())
12251 {
12252 GetCompEM().UpdatePlugState();
12253 }
12254 }
12255
12256
12258 {
12259 super.OnPlacementStarted(player);
12260
12262 }
12263
12264 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12265 {
12267 {
12268 m_AdminLog.OnPlacementComplete(player,
this);
12269 }
12270
12271 super.OnPlacementComplete(player, position, orientation);
12272 }
12273
12274
12275
12276
12277
12279 {
12281 {
12282 return true;
12283 }
12284 else
12285 {
12286 return false;
12287 }
12288 }
12289
12290
12292 {
12294 {
12296 }
12297 }
12298
12299
12301 {
12303 }
12304
12306 {
12308 }
12309
12310 override void InsertAgent(
int agent,
float count = 1)
12311 {
12312 if (count < 1)
12313 return;
12314
12316 }
12317
12320 {
12322 }
12323
12324
12326 {
12328 }
12329
12330
12331
12332
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
12372 {
12374 return false;
12375 return true;
12376 }
12377
12379 {
12380
12382 }
12383
12384
12387 {
12388 super.CheckForRoofLimited(timeTresholdMS);
12389
12391 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12392 {
12393 m_PreviousRoofTestTime = time;
12394 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12395 }
12396 }
12397
12398
12400 {
12402 {
12403 return 0;
12404 }
12405
12406 if (GetInventory().GetAttachmentSlotsCount() != 0)
12407 {
12408 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12409 if (filter)
12410 return filter.GetProtectionLevel(type, false, system);
12411 else
12412 return 0;
12413 }
12414
12415 string subclassPath, entryName;
12416
12417 switch (type)
12418 {
12420 entryName = "biological";
12421 break;
12423 entryName = "chemical";
12424 break;
12425 default:
12426 entryName = "biological";
12427 break;
12428 }
12429
12430 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12431
12433 }
12434
12435
12436
12439 {
12440 if (!IsMagazine())
12442
12444 }
12445
12446
12447
12448
12449
12454 {
12455 return true;
12456 }
12457
12459 {
12461 }
12462
12463
12464
12465
12466
12468 {
12469 if (parent)
12470 {
12471 if (parent.IsInherited(DayZInfected))
12472 return true;
12473
12474 if (!parent.IsRuined())
12475 return true;
12476 }
12477
12478 return true;
12479 }
12480
12482 {
12483 if (!super.CanPutAsAttachment(parent))
12484 {
12485 return false;
12486 }
12487
12488 if (!IsRuined() && !parent.IsRuined())
12489 {
12490 return true;
12491 }
12492
12493 return false;
12494 }
12495
12497 {
12498
12499
12500
12501
12502 return super.CanReceiveItemIntoCargo(item);
12503 }
12504
12506 {
12507
12508
12509
12510
12511 GameInventory attachmentInv = attachment.GetInventory();
12513 {
12514 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12515 return false;
12516 }
12517
12518 InventoryLocation loc = new InventoryLocation();
12519 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12520 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12521 return false;
12522
12523 return super.CanReceiveAttachment(attachment, slotId);
12524 }
12525
12527 {
12528 if (!super.CanReleaseAttachment(attachment))
12529 return false;
12530
12531 return GetInventory().AreChildrenAccessible();
12532 }
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12555 {
12556 int id = muzzle_owner.GetMuzzleID();
12557 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12558
12559 if (WPOF_array)
12560 {
12561 for (int i = 0; i < WPOF_array.Count(); i++)
12562 {
12563 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12564
12565 if (WPOF)
12566 {
12567 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12568 }
12569 }
12570 }
12571 }
12572
12573
12575 {
12576 int id = muzzle_owner.GetMuzzleID();
12578
12579 if (WPOBE_array)
12580 {
12581 for (int i = 0; i < WPOBE_array.Count(); i++)
12582 {
12583 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12584
12585 if (WPOBE)
12586 {
12587 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12588 }
12589 }
12590 }
12591 }
12592
12593
12595 {
12596 int id = muzzle_owner.GetMuzzleID();
12597 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12598
12599 if (WPOOH_array)
12600 {
12601 for (int i = 0; i < WPOOH_array.Count(); i++)
12602 {
12603 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12604
12605 if (WPOOH)
12606 {
12607 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12608 }
12609 }
12610 }
12611 }
12612
12613
12615 {
12616 int id = muzzle_owner.GetMuzzleID();
12617 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12618
12619 if (WPOOH_array)
12620 {
12621 for (int i = 0; i < WPOOH_array.Count(); i++)
12622 {
12623 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12624
12625 if (WPOOH)
12626 {
12627 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12628 }
12629 }
12630 }
12631 }
12632
12633
12635 {
12636 int id = muzzle_owner.GetMuzzleID();
12637 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12638
12639 if (WPOOH_array)
12640 {
12641 for (int i = 0; i < WPOOH_array.Count(); i++)
12642 {
12643 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12644
12645 if (WPOOH)
12646 {
12647 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12648 }
12649 }
12650 }
12651 }
12652
12653
12654
12656 {
12658 {
12659 return true;
12660 }
12661
12662 return false;
12663 }
12664
12666 {
12668 {
12669 return true;
12670 }
12671
12672 return false;
12673 }
12674
12676 {
12678 {
12679 return true;
12680 }
12681
12682 return false;
12683 }
12684
12686 {
12687 return false;
12688 }
12689
12692 {
12693 return UATimeSpent.DEFAULT_DEPLOY;
12694 }
12695
12696
12697
12698
12700 {
12702 SetSynchDirty();
12703 }
12704
12706 {
12708 }
12709
12710
12712 {
12713 return false;
12714 }
12715
12718 {
12719 string att_type = "None";
12720
12721 if (ConfigIsExisting("soundAttType"))
12722 {
12723 att_type = ConfigGetString("soundAttType");
12724 }
12725
12727 }
12728
12730 {
12732 }
12733
12734
12735
12736
12737
12741
12743 {
12746
12748 }
12749
12750
12752 {
12754 return;
12755
12757
12760
12763
12764 SoundParameters params = new SoundParameters();
12768 }
12769
12770
12772 {
12774 return;
12775
12777 SetSynchDirty();
12778
12781 }
12782
12783
12785 {
12787 return;
12788
12790 SetSynchDirty();
12791
12794 }
12795
12797 {
12799 }
12800
12802 {
12804 }
12805
12808 {
12809 if (!
GetGame().IsDedicatedServer())
12810 {
12811 if (ConfigIsExisting("attachSoundSet"))
12812 {
12813 string cfg_path = "";
12814 string soundset = "";
12815 string type_name =
GetType();
12816
12819 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
12820 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
12821
12822 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
12823 {
12824 for (int i = 0; i < cfg_soundset_array.Count(); i++)
12825 {
12826 if (cfg_slot_array[i] == slot_type)
12827 {
12828 soundset = cfg_soundset_array[i];
12829 break;
12830 }
12831 }
12832 }
12833
12834 if (soundset != "")
12835 {
12836 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
12838 }
12839 }
12840 }
12841 }
12842
12844 {
12845
12846 }
12847
12848 void OnApply(PlayerBase player);
12849
12851 {
12852 return 1.0;
12853 };
12854
12856 {
12858 }
12859
12861 {
12863 }
12864
12866
12868 {
12869 SetDynamicPhysicsLifeTime(0.01);
12871 }
12872
12874 {
12875 array<string> zone_names = new array<string>;
12876 GetDamageZones(zone_names);
12877 for (int i = 0; i < zone_names.Count(); i++)
12878 {
12879 SetHealthMax(zone_names.Get(i),"Health");
12880 }
12881 SetHealthMax("","Health");
12882 }
12883
12886 {
12887 float global_health = GetHealth01("","Health");
12888 array<string> zones = new array<string>;
12889 GetDamageZones(zones);
12890
12891 for (int i = 0; i < zones.Count(); i++)
12892 {
12893 SetHealth01(zones.Get(i),"Health",global_health);
12894 }
12895 }
12896
12899 {
12900 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
12901 }
12902
12904 {
12905 if (!hasRootAsPlayer)
12906 {
12907 if (refParentIB)
12908 {
12909
12910 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
12911 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
12912
12913 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
12914 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
12915
12918 }
12919 else
12920 {
12921
12924 }
12925 }
12926 }
12927
12929 {
12931 {
12932 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
12933 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
12934 {
12935 float heatPermCoef = 1.0;
12937 while (ent)
12938 {
12939 heatPermCoef *= ent.GetHeatPermeabilityCoef();
12940 ent = ent.GetHierarchyParent();
12941 }
12942
12943 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
12944 }
12945 }
12946 }
12947
12949 {
12950
12951 EntityAI parent = GetHierarchyParent();
12952 if (!parent)
12953 {
12954 hasParent = false;
12955 hasRootAsPlayer = false;
12956 }
12957 else
12958 {
12959 hasParent = true;
12960 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
12961 refParentIB =
ItemBase.Cast(parent);
12962 }
12963 }
12964
12965 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
12966 {
12967
12968 }
12969
12971 {
12972
12973 return false;
12974 }
12975
12977 {
12978
12979
12980 return false;
12981 }
12982
12984 {
12985
12986 return false;
12987 }
12988
12991 {
12992 return !GetIsFrozen() &&
IsOpen();
12993 }
12994
12996 {
12997 bool hasParent = false, hasRootAsPlayer = false;
12999
13000 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13001 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13002
13003 if (wwtu || foodDecay)
13004 {
13008
13009 if (processWetness || processTemperature || processDecay)
13010 {
13012
13013 if (processWetness)
13014 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13015
13016 if (processTemperature)
13018
13019 if (processDecay)
13020 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13021 }
13022 }
13023 }
13024
13027 {
13029 }
13030
13032 {
13035
13036 return super.GetTemperatureFreezeThreshold();
13037 }
13038
13040 {
13043
13044 return super.GetTemperatureThawThreshold();
13045 }
13046
13048 {
13051
13052 return super.GetItemOverheatThreshold();
13053 }
13054
13056 {
13058 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13059
13060 return super.GetTemperatureFreezeTime();
13061 }
13062
13064 {
13066 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13067
13068 return super.GetTemperatureThawTime();
13069 }
13070
13075
13077 {
13078 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13079 }
13080
13082 {
13083 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13084 }
13085
13088 {
13090 }
13091
13093 {
13095 }
13096
13098 {
13100 }
13101
13104 {
13105 return null;
13106 }
13107
13110 {
13111 return false;
13112 }
13113
13115 {
13117 {
13120 if (!trg)
13121 {
13123 explosive = this;
13124 }
13125
13126 explosive.PairRemote(trg);
13128
13129 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13130 trg.SetPersistentPairID(persistentID);
13131 explosive.SetPersistentPairID(persistentID);
13132
13133 return true;
13134 }
13135 return false;
13136 }
13137
13140 {
13141 float ret = 1.0;
13144 ret *= GetHealth01();
13145
13146 return ret;
13147 }
13148
13149 #ifdef DEVELOPER
13150 override void SetDebugItem()
13151 {
13152 super.SetDebugItem();
13153 _itemBase = this;
13154 }
13155
13157 {
13158 string text = super.GetDebugText();
13159
13161 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13162
13163 return text;
13164 }
13165 #endif
13166
13168 {
13169 return true;
13170 }
13171
13173
13175
13177 {
13180 }
13181
13182
13190
13206}
13207
13209{
13211 if (entity)
13212 {
13213 bool is_item = entity.IsInherited(
ItemBase);
13214 if (is_item && full_quantity)
13215 {
13218 }
13219 }
13220 else
13221 {
13223 return NULL;
13224 }
13225 return entity;
13226}
13227
13229{
13230 if (item)
13231 {
13232 if (health > 0)
13233 item.SetHealth("", "", health);
13234
13235 if (item.CanHaveTemperature())
13236 {
13238 if (item.CanFreeze())
13239 item.SetFrozen(false);
13240 }
13241
13242 if (item.HasEnergyManager())
13243 {
13244 if (quantity >= 0)
13245 {
13246 item.GetCompEM().SetEnergy0To1(quantity);
13247 }
13248 else
13249 {
13251 }
13252 }
13253 else if (item.IsMagazine())
13254 {
13255 Magazine mag = Magazine.Cast(item);
13256 if (quantity >= 0)
13257 {
13258 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13259 }
13260 else
13261 {
13263 }
13264
13265 }
13266 else
13267 {
13268 if (quantity >= 0)
13269 {
13270 item.SetQuantityNormalized(quantity, false);
13271 }
13272 else
13273 {
13275 }
13276
13277 }
13278 }
13279}
13280
13281#ifdef DEVELOPER
13283#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.