8499{
8501 {
8502 return true;
8503 }
8504};
8505
8506
8507
8509{
8513
8515
8518
8519
8520
8521
8522
8531
8537
8542
8547
8568 protected bool m_IsResultOfSplit
8569
8571
8576
8577
8578
8580
8584
8585
8586
8588
8591
8592
8593
8599
8600
8608
8611
8612
8614
8615
8617
8618
8623
8624
8629
8630
8632
8633
8635 {
8640
8641 if (!
GetGame().IsDedicatedServer())
8642 {
8644 {
8646
8648 {
8650 }
8651 }
8652
8655 }
8656
8657 m_OldLocation = null;
8658
8660 {
8662 }
8663
8664 if (ConfigIsExisting("headSelectionsToHide"))
8665 {
8668 }
8669
8671 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8672 {
8674 }
8675
8677
8678 m_IsResultOfSplit = false;
8679
8681 }
8682
8684 {
8685 super.InitItemVariables();
8686
8692 m_Count = ConfigGetInt(
"count");
8693
8696
8701
8704
8709
8721
8725
8726
8729 if (ConfigIsExisting("canBeSplit"))
8730 {
8733 }
8734
8736 if (ConfigIsExisting("itemBehaviour"))
8738
8739
8742 RegisterNetSyncVariableInt("m_VarLiquidType");
8743 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8744
8745 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8746 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8747 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8748
8749 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8750 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8751 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8752 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8753
8754 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8755 RegisterNetSyncVariableBool("m_IsTakeable");
8756 RegisterNetSyncVariableBool("m_IsHologram");
8757
8760 {
8763 }
8764
8766
8768 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8770
8771 }
8772
8774 {
8776 }
8777
8779 {
8782 {
8787 }
8788 }
8789
8790 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8791 {
8793 {
8796 }
8797
8799 }
8800
8802 {
8808 }
8809
8811
8813 {
8815
8816 if (!action)
8817 {
8818 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8819 return;
8820 }
8821
8823 if (!ai)
8824 {
8826 return;
8827 }
8828
8830 if (!action_array)
8831 {
8832 action_array = new array<ActionBase_Basic>;
8834 }
8835 if (LogManager.IsActionLogEnable())
8836 {
8837 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8838 }
8839
8840 if (action_array.Find(action) != -1)
8841 {
8842 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8843 }
8844 else
8845 {
8846 action_array.Insert(action);
8847 }
8848 }
8849
8851 {
8853 ActionBase action = player.GetActionManager().GetAction(actionName);
8856
8857 if (action_array)
8858 {
8859 action_array.RemoveItem(action);
8860 }
8861 }
8862
8863
8864
8866 {
8867 ActionOverrideData overrideData = new ActionOverrideData();
8871
8873 if (!actionMap)
8874 {
8877 }
8878
8879 actionMap.Insert(this.
Type(), overrideData);
8880
8881 }
8882
8884
8886
8887
8889 {
8892
8895
8896 string config_to_search = "CfgVehicles";
8897 string muzzle_owner_config;
8898
8900 {
8901 if (IsInherited(Weapon))
8902 config_to_search = "CfgWeapons";
8903
8904 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8905
8906 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
8907
8909
8910 if (config_OnFire_subclass_count > 0)
8911 {
8912 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
8913
8914 for (int i = 0; i < config_OnFire_subclass_count; i++)
8915 {
8916 string particle_class = "";
8918 string config_OnFire_entry = config_OnFire_class + particle_class;
8919 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
8920 WPOF_array.Insert(WPOF);
8921 }
8922
8923
8925 }
8926 }
8927
8929 {
8930 config_to_search = "CfgWeapons";
8931 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8932
8933 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
8934
8936
8937 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
8938 {
8939 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
8940
8941 for (i = 0; i < config_OnBulletCasingEject_count; i++)
8942 {
8943 string particle_class2 = "";
8945 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
8946 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
8947 WPOBE_array.Insert(WPOBE);
8948 }
8949
8950
8952 }
8953 }
8954 }
8955
8956
8958 {
8961
8963 {
8964 string config_to_search = "CfgVehicles";
8965
8966 if (IsInherited(Weapon))
8967 config_to_search = "CfgWeapons";
8968
8969 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8970 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
8971
8972 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
8973 {
8974
8976
8978 {
8980 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
8982 return;
8983 }
8984
8987
8988
8989
8991 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
8992
8993 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
8994 {
8995 string particle_class = "";
8997 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
8999
9000 if (entry_type == CT_CLASS)
9001 {
9002 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9003 WPOOH_array.Insert(WPOF);
9004 }
9005 }
9006
9007
9009 }
9010 }
9011 }
9012
9014 {
9016 }
9017
9019 {
9021 {
9023
9026
9029
9030 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9031 }
9032 }
9033
9035 {
9037 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9038
9040 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9041
9043 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9044
9046 {
9048 }
9049 }
9050
9052 {
9054 }
9055
9057 {
9060 else
9062
9064 {
9067 }
9068 else
9069 {
9072
9075 }
9076
9078 }
9079
9081 {
9083 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9084 }
9085
9087 {
9089 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9091 }
9092
9094 {
9096 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9097 }
9098
9100 {
9103
9104 OverheatingParticle OP = new OverheatingParticle();
9109
9111 }
9112
9114 {
9117
9118 return -1;
9119 }
9120
9122 {
9124 {
9127
9128 for (int i = count; i > 0; --i)
9129 {
9130 int id = i - 1;
9133
9136
9137 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9138 {
9139 if (p)
9140 {
9143 }
9144 }
9145 }
9146 }
9147 }
9148
9150 {
9152 {
9154 {
9155 int id = i - 1;
9157
9158 if (OP)
9159 {
9161
9162 if (p)
9163 {
9165 }
9166
9167 delete OP;
9168 }
9169 }
9170
9173 }
9174 }
9175
9178 {
9179 return 0.0;
9180 }
9181
9182
9184 {
9185 return 250;
9186 }
9187
9189 {
9190 return 0;
9191 }
9192
9195 {
9197 return true;
9198
9199 return false;
9200 }
9201
9204 {
9207
9209 {
9211 }
9212 else
9213 {
9214
9216 }
9217
9219 }
9220
9227 {
9228 return -1;
9229 }
9230
9231
9232
9233
9235 {
9237 {
9239 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9240
9241 if (r_index >= 0)
9242 {
9243 InventoryLocation r_il = new InventoryLocation;
9244 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9245
9246 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9249 {
9250 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9251 }
9253 {
9254 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9255 }
9256
9257 }
9258
9259 player.GetHumanInventory().ClearUserReservedLocation(this);
9260 }
9261
9264 }
9265
9266
9267
9268
9270 {
9271 return ItemBase.m_DebugActionsMask;
9272 }
9273
9275 {
9276 return ItemBase.m_DebugActionsMask & mask;
9277 }
9278
9280 {
9281 ItemBase.m_DebugActionsMask = mask;
9282 }
9283
9285 {
9286 ItemBase.m_DebugActionsMask |= mask;
9287 }
9288
9290 {
9291 ItemBase.m_DebugActionsMask &= ~mask;
9292 }
9293
9295 {
9297 {
9299 }
9300 else
9301 {
9303 }
9304 }
9305
9306
9308 {
9309 if (GetEconomyProfile())
9310 {
9311 float q_max = GetEconomyProfile().GetQuantityMax();
9312 if (q_max > 0)
9313 {
9314 float q_min = GetEconomyProfile().GetQuantityMin();
9315 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9316
9318 {
9319 ComponentEnergyManager comp = GetCompEM();
9321 {
9323 }
9324 }
9326 {
9328
9329 }
9330
9331 }
9332 }
9333 }
9334
9337 {
9338 EntityAI parent = GetHierarchyParent();
9339
9340 if (parent)
9341 {
9342 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9343 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9344 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9345 }
9346 }
9347
9350 {
9351 EntityAI parent = GetHierarchyParent();
9352
9353 if (parent)
9354 {
9355 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9356 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9357 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9358 }
9359 }
9360
9362 {
9363
9364
9365
9366
9368
9370 {
9371 if (ScriptInputUserData.CanStoreInputUserData())
9372 {
9373 ScriptInputUserData ctx = new ScriptInputUserData;
9379 ctx.
Write(use_stack_max);
9382
9384 {
9385 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9386 }
9387 }
9388 }
9389 else if (!
GetGame().IsMultiplayer())
9390 {
9392 }
9393 }
9394
9396 {
9398 }
9399
9401 {
9403 }
9404
9406 {
9408 }
9409
9411 {
9412
9413 return false;
9414 }
9415
9417 {
9418 return false;
9419 }
9420
9424 {
9425 return false;
9426 }
9427
9429 {
9430 return "";
9431 }
9432
9434
9436 {
9437 return false;
9438 }
9439
9441 {
9442 return true;
9443 }
9444
9445
9446
9448 {
9449 return true;
9450 }
9451
9453 {
9454 return true;
9455 }
9456
9458 {
9459 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9461 }
9462
9464 {
9466 }
9467
9469 {
9471 if (!is_being_placed)
9473 SetSynchDirty();
9474 }
9475
9476
9478
9480 {
9482 }
9483
9485 {
9487 }
9488
9490 {
9491 return 1;
9492 }
9493
9495 {
9496 return false;
9497 }
9498
9500 {
9502 SetSynchDirty();
9503 }
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9540 {
9541 super.OnMovedInsideCargo(container);
9542
9543 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9544 }
9545
9546 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9547 {
9548 super.EEItemLocationChanged(oldLoc,newLoc);
9549
9550 PlayerBase new_player = null;
9551 PlayerBase old_player = null;
9552
9553 if (newLoc.GetParent())
9554 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9555
9556 if (oldLoc.GetParent())
9557 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9558
9560 {
9561 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9562
9563 if (r_index >= 0)
9564 {
9565 InventoryLocation r_il = new InventoryLocation;
9566 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9567
9568 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9571 {
9572 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9573 }
9575 {
9576 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9577 }
9578
9579 }
9580 }
9581
9583 {
9584 if (new_player)
9585 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9586
9587 if (new_player == old_player)
9588 {
9589
9590 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9591 {
9593 {
9594 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9595 {
9596 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9597 }
9598 }
9599 else
9600 {
9601 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9602 }
9603 }
9604
9605 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9606 {
9607 int type = oldLoc.GetType();
9609 {
9610 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9611 }
9613 {
9614 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9615 }
9616 }
9617 if (!m_OldLocation)
9618 {
9619 m_OldLocation = new InventoryLocation;
9620 }
9621 m_OldLocation.Copy(oldLoc);
9622 }
9623 else
9624 {
9625 if (m_OldLocation)
9626 {
9627 m_OldLocation.Reset();
9628 }
9629 }
9630
9632 }
9633 else
9634 {
9635 if (new_player)
9636 {
9637 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9638 if (res_index >= 0)
9639 {
9640 InventoryLocation il = new InventoryLocation;
9641 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9643 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9646 {
9647 il.
GetParent().GetOnReleaseLock().Invoke(it);
9648 }
9650 {
9652 }
9653
9654 }
9655 }
9657 {
9658
9660 }
9661
9662 if (m_OldLocation)
9663 {
9664 m_OldLocation.Reset();
9665 }
9666 }
9667 }
9668
9669 override void EOnContact(IEntity other, Contact extra)
9670 {
9672 {
9673 int liquidType = -1;
9675 if (impactSpeed > 0.0)
9676 {
9678 #ifndef SERVER
9680 #else
9682 SetSynchDirty();
9683 #endif
9685 }
9686 }
9687
9688 #ifdef SERVER
9689 if (GetCompEM() && GetCompEM().IsPlugged())
9690 {
9691 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9692 GetCompEM().UnplugThis();
9693 }
9694 #endif
9695 }
9696
9698
9700 {
9702 }
9703
9705 {
9706
9707 }
9708
9710 {
9711 super.OnItemLocationChanged(old_owner, new_owner);
9712
9713 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9714 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9715
9716 if (!relatedPlayer && playerNew)
9717 relatedPlayer = playerNew;
9718
9719 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9720 {
9722 if (actionMgr)
9723 {
9724 ActionBase currentAction = actionMgr.GetRunningAction();
9725 if (currentAction)
9727 }
9728 }
9729
9730 Man ownerPlayerOld = null;
9731 Man ownerPlayerNew = null;
9732
9733 if (old_owner)
9734 {
9735 if (old_owner.
IsMan())
9736 {
9737 ownerPlayerOld = Man.Cast(old_owner);
9738 }
9739 else
9740 {
9741 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9742 }
9743 }
9744 else
9745 {
9747 {
9749
9750 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9751 {
9752 GetCompEM().UnplugThis();
9753 }
9754 }
9755 }
9756
9757 if (new_owner)
9758 {
9759 if (new_owner.
IsMan())
9760 {
9761 ownerPlayerNew = Man.Cast(new_owner);
9762 }
9763 else
9764 {
9765 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9766 }
9767 }
9768
9769 if (ownerPlayerOld != ownerPlayerNew)
9770 {
9771 if (ownerPlayerOld)
9772 {
9773 array<EntityAI> subItemsExit = new array<EntityAI>;
9775 for (int i = 0; i < subItemsExit.Count(); i++)
9776 {
9779 }
9780 }
9781
9782 if (ownerPlayerNew)
9783 {
9784 array<EntityAI> subItemsEnter = new array<EntityAI>;
9786 for (int j = 0; j < subItemsEnter.Count(); j++)
9787 {
9790 }
9791 }
9792 }
9793 else if (ownerPlayerNew != null)
9794 {
9795 PlayerBase nplayer;
9796 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9797 {
9798 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9800 for (int k = 0; k < subItemsUpdate.Count(); k++)
9801 {
9803 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9804 }
9805 }
9806 }
9807
9808 if (old_owner)
9809 old_owner.OnChildItemRemoved(this);
9810 if (new_owner)
9811 new_owner.OnChildItemReceived(this);
9812 }
9813
9814
9816 {
9817 super.EEDelete(parent);
9818 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9819 if (player)
9820 {
9822
9823 if (player.IsAlive())
9824 {
9825 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9826 if (r_index >= 0)
9827 {
9828 InventoryLocation r_il = new InventoryLocation;
9829 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9830
9831 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9834 {
9835 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9836 }
9838 {
9839 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9840 }
9841
9842 }
9843
9844 player.RemoveQuickBarEntityShortcut(this);
9845 }
9846 }
9847 }
9848
9850 {
9851 super.EEKilled(killer);
9852
9855 {
9856 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
9857 {
9858 if (IsMagazine())
9859 {
9860 if (Magazine.Cast(this).GetAmmoCount() > 0)
9861 {
9863 }
9864 }
9865 else
9866 {
9868 }
9869 }
9870 }
9871 }
9872
9874 {
9875 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9876
9877 super.OnWasAttached(parent, slot_id);
9878
9881
9883 }
9884
9886 {
9887 super.OnWasDetached(parent, slot_id);
9888
9891 }
9892
9894 {
9895 int idx;
9898
9899 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9900 if (inventory_slots.Count() < 1)
9901 {
9902 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
9903 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
9904 }
9905 else
9906 {
9907 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
9908 }
9909
9910 idx = inventory_slots.Find(slot);
9911 if (idx < 0)
9912 return "";
9913
9914 return attach_types.Get(idx);
9915 }
9916
9918 {
9919 int idx = -1;
9920 string slot;
9921
9924
9925 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9926 if (inventory_slots.Count() < 1)
9927 {
9928 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
9929 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9930 }
9931 else
9932 {
9933 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
9934 if (detach_types.Count() < 1)
9935 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9936 }
9937
9938 for (int i = 0; i < inventory_slots.Count(); i++)
9939 {
9940 slot = inventory_slots.Get(i);
9941 }
9942
9943 if (slot != "")
9944 {
9945 if (detach_types.Count() == 1)
9946 idx = 0;
9947 else
9948 idx = inventory_slots.Find(slot);
9949 }
9950 if (idx < 0)
9951 return "";
9952
9953 return detach_types.Get(idx);
9954 }
9955
9957 {
9958
9960
9961
9962 float min_time = 1;
9963 float max_time = 3;
9964 float delay = Math.RandomFloat(min_time, max_time);
9965
9966 explode_timer.Run(delay, this, "DoAmmoExplosion");
9967 }
9968
9970 {
9971 Magazine magazine = Magazine.Cast(this);
9972 int pop_sounds_count = 6;
9973 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
9974
9975
9976 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
9977 string sound_name = pop_sounds[ sound_idx ];
9979
9980
9981 magazine.ServerAddAmmoCount(-1);
9982
9983
9984 float min_temp_to_explode = 100;
9985
9986 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
9987 {
9989 }
9990 }
9991
9992
9993 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
9994 {
9995 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
9996
9997 const int CHANCE_DAMAGE_CARGO = 4;
9998 const int CHANCE_DAMAGE_ATTACHMENT = 1;
9999 const int CHANCE_DAMAGE_NOTHING = 2;
10000
10002 {
10003 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10004 int chances;
10005 int rnd;
10006
10007 if (GetInventory().GetCargo())
10008 {
10009 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10010 rnd = Math.RandomInt(0,chances);
10011
10012 if (rnd < CHANCE_DAMAGE_CARGO)
10013 {
10015 }
10016 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10017 {
10019 }
10020 }
10021 else
10022 {
10023 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10024 rnd = Math.RandomInt(0,chances);
10025
10026 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10027 {
10029 }
10030 }
10031 }
10032 }
10033
10035 {
10036 if (GetInventory().GetCargo())
10037 {
10038 int item_count = GetInventory().GetCargo().GetItemCount();
10039 if (item_count > 0)
10040 {
10041 int random_pick = Math.RandomInt(0, item_count);
10043 if (!item.IsExplosive())
10044 {
10045 item.AddHealth("","",damage);
10046 return true;
10047 }
10048 }
10049 }
10050 return false;
10051 }
10052
10054 {
10055 int attachment_count = GetInventory().AttachmentCount();
10056 if (attachment_count > 0)
10057 {
10058 int random_pick = Math.RandomInt(0, attachment_count);
10059 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10060 if (!attachment.IsExplosive())
10061 {
10062 attachment.AddHealth("","",damage);
10063 return true;
10064 }
10065 }
10066 return false;
10067 }
10068
10070 {
10072 }
10073
10075 {
10077 return GetInventory().CanRemoveEntity();
10078
10079 return false;
10080 }
10081
10083 {
10085 return;
10086
10088 {
10089 if (ScriptInputUserData.CanStoreInputUserData())
10090 {
10091 ScriptInputUserData ctx = new ScriptInputUserData;
10096 ctx.
Write(destination_entity);
10098 ctx.
Write(slot_id);
10100 }
10101 }
10102 else if (!
GetGame().IsMultiplayer())
10103 {
10105 }
10106 }
10107
10109 {
10111 return;
10112
10113 float split_quantity_new;
10117 InventoryLocation loc = new InventoryLocation;
10118
10119 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10120 {
10122 split_quantity_new = stack_max;
10123 else
10125
10126 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10127 if (new_item)
10128 {
10129 new_item.SetResultOfSplit(true);
10130 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10132 new_item.SetQuantity(split_quantity_new);
10133 }
10134 }
10135 else if (destination_entity && slot_id == -1)
10136 {
10137 if (quantity > stack_max)
10138 split_quantity_new = stack_max;
10139 else
10140 split_quantity_new = quantity;
10141
10143 {
10146 }
10147
10148 if (new_item)
10149 {
10150 new_item.SetResultOfSplit(true);
10151 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10153 new_item.SetQuantity(split_quantity_new);
10154 }
10155 }
10156 else
10157 {
10158 if (stack_max != 0)
10159 {
10161 {
10163 }
10164
10165 if (split_quantity_new == 0)
10166 {
10167 if (!
GetGame().IsMultiplayer())
10168 player.PhysicalPredictiveDropItem(this);
10169 else
10170 player.ServerDropEntity(this);
10171 return;
10172 }
10173
10175
10176 if (new_item)
10177 {
10178 new_item.SetResultOfSplit(true);
10179 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10181 new_item.SetQuantity(stack_max);
10182 new_item.PlaceOnSurface();
10183 }
10184 }
10185 }
10186 }
10187
10189 {
10191 return;
10192
10193 float split_quantity_new;
10197 InventoryLocation loc = new InventoryLocation;
10198
10199 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10200 {
10202 split_quantity_new = stack_max;
10203 else
10205
10206 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10207 if (new_item)
10208 {
10209 new_item.SetResultOfSplit(true);
10210 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10212 new_item.SetQuantity(split_quantity_new);
10213 }
10214 }
10215 else if (destination_entity && slot_id == -1)
10216 {
10217 if (quantity > stack_max)
10218 split_quantity_new = stack_max;
10219 else
10220 split_quantity_new = quantity;
10221
10223 {
10226 }
10227
10228 if (new_item)
10229 {
10230 new_item.SetResultOfSplit(true);
10231 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10233 new_item.SetQuantity(split_quantity_new);
10234 }
10235 }
10236 else
10237 {
10238 if (stack_max != 0)
10239 {
10241 {
10243 }
10244
10246
10247 if (new_item)
10248 {
10249 new_item.SetResultOfSplit(true);
10250 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10252 new_item.SetQuantity(stack_max);
10253 new_item.PlaceOnSurface();
10254 }
10255 }
10256 }
10257 }
10258
10260 {
10262 return;
10263
10265 {
10266 if (ScriptInputUserData.CanStoreInputUserData())
10267 {
10268 ScriptInputUserData ctx = new ScriptInputUserData;
10273 dst.WriteToContext(ctx);
10275 }
10276 }
10277 else if (!
GetGame().IsMultiplayer())
10278 {
10280 }
10281 }
10282
10284 {
10286 return;
10287
10289 {
10290 if (ScriptInputUserData.CanStoreInputUserData())
10291 {
10292 ScriptInputUserData ctx = new ScriptInputUserData;
10297 ctx.
Write(destination_entity);
10303 }
10304 }
10305 else if (!
GetGame().IsMultiplayer())
10306 {
10308 }
10309 }
10310
10312 {
10314 }
10315
10317 {
10319 return this;
10320
10322 float split_quantity_new;
10324 if (dst.IsValid())
10325 {
10326 int slot_id = dst.GetSlot();
10328
10329 if (quantity > stack_max)
10330 split_quantity_new = stack_max;
10331 else
10332 split_quantity_new = quantity;
10333
10335
10336 if (new_item)
10337 {
10338 new_item.SetResultOfSplit(true);
10339 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10342 }
10343
10344 return new_item;
10345 }
10346
10347 return null;
10348 }
10349
10351 {
10353 return;
10354
10356 float split_quantity_new;
10358 if (destination_entity)
10359 {
10361 if (quantity > stackable)
10362 split_quantity_new = stackable;
10363 else
10364 split_quantity_new = quantity;
10365
10366 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10367 if (new_item)
10368 {
10369 new_item.SetResultOfSplit(true);
10370 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10372 new_item.SetQuantity(split_quantity_new);
10373 }
10374 }
10375 }
10376
10378 {
10380 return;
10381
10383 {
10384 if (ScriptInputUserData.CanStoreInputUserData())
10385 {
10386 ScriptInputUserData ctx = new ScriptInputUserData;
10391 ItemBase destination_entity =
this;
10392 ctx.
Write(destination_entity);
10396 }
10397 }
10398 else if (!
GetGame().IsMultiplayer())
10399 {
10401 }
10402 }
10403
10405 {
10407 return;
10408
10410 float split_quantity_new;
10412 if (player)
10413 {
10415 if (quantity > stackable)
10416 split_quantity_new = stackable;
10417 else
10418 split_quantity_new = quantity;
10419
10420 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10421 new_item =
ItemBase.Cast(in_hands);
10422 if (new_item)
10423 {
10424 new_item.SetResultOfSplit(true);
10425 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10427 new_item.SetQuantity(split_quantity_new);
10428 }
10429 }
10430 }
10431
10433 {
10435 return;
10436
10438 float split_quantity_new = Math.Floor(quantity * 0.5);
10439
10441
10442 if (new_item)
10443 {
10444 if (new_item.GetQuantityMax() < split_quantity_new)
10445 {
10446 split_quantity_new = new_item.GetQuantityMax();
10447 }
10448
10449 new_item.SetResultOfSplit(true);
10450 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10451
10453 {
10456 }
10457 else
10458 {
10461 }
10462 }
10463 }
10464
10466 {
10468 return;
10469
10471 float split_quantity_new = Math.Floor(quantity / 2);
10472
10473 InventoryLocation invloc = new InventoryLocation;
10475
10477 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10478
10479 if (new_item)
10480 {
10481 if (new_item.GetQuantityMax() < split_quantity_new)
10482 {
10483 split_quantity_new = new_item.GetQuantityMax();
10484 }
10486 {
10489 }
10490 else
10491 {
10494 }
10495 }
10496 }
10497
10500 {
10501 SetWeightDirty();
10503
10504 if (parent)
10505 parent.OnAttachmentQuantityChangedEx(this, delta);
10506
10508 {
10510 {
10512 }
10514 {
10515 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10517 }
10518 }
10519
10520 }
10521
10524 {
10525
10526 }
10527
10530 {
10532 }
10533
10535 {
10536 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10537
10539 {
10540 if (newLevel == GameConstants.STATE_RUINED)
10541 {
10543 EntityAI parent = GetHierarchyParent();
10544 if (parent && parent.IsFireplace())
10545 {
10546 CargoBase cargo = GetInventory().GetCargo();
10547 if (cargo)
10548 {
10550 {
10552 }
10553 }
10554 }
10555 }
10556
10558 {
10559
10561 return;
10562 }
10563
10564 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10565 {
10567 }
10568 }
10569 }
10570
10571
10573 {
10574 super.OnRightClick();
10575
10577 {
10579 {
10580 if (ScriptInputUserData.CanStoreInputUserData())
10581 {
10582 vector m4[4];
10584
10585 EntityAI root = GetHierarchyRoot();
10586
10587 InventoryLocation dst = new InventoryLocation;
10589 {
10590 if (root)
10591 {
10592 root.GetTransform(m4);
10594 }
10595 else
10596 GetInventory().GetCurrentInventoryLocation(dst);
10597 }
10598 else
10599 {
10601
10602
10603 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10604 {
10605 if (root)
10606 {
10607 root.GetTransform(m4);
10609 }
10610 else
10611 GetInventory().GetCurrentInventoryLocation(dst);
10612 }
10613 else
10614 {
10615 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10616 }
10617 }
10618
10619 ScriptInputUserData ctx = new ScriptInputUserData;
10627 }
10628 }
10629 else if (!
GetGame().IsMultiplayer())
10630 {
10632 }
10633 }
10634 }
10635
10636 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10637 {
10638
10639 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10640 return false;
10641
10642 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10643 return false;
10644
10645
10647 return false;
10648
10649
10650 Magazine mag = Magazine.Cast(this);
10651 if (mag)
10652 {
10653 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10654 return false;
10655
10656 if (stack_max_limit)
10657 {
10658 Magazine other_mag = Magazine.Cast(other_item);
10659 if (other_item)
10660 {
10661 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10662 return false;
10663 }
10664
10665 }
10666 }
10667 else
10668 {
10669
10671 return false;
10672
10674 return false;
10675 }
10676
10677 PlayerBase player = null;
10678 if (CastTo(player, GetHierarchyRootPlayer()))
10679 {
10680 if (player.GetInventory().HasAttachment(this))
10681 return false;
10682
10683 if (player.IsItemsToDelete())
10684 return false;
10685 }
10686
10687 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10688 return false;
10689
10690 int slotID;
10692 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10693 return false;
10694
10695 return true;
10696 }
10697
10699 {
10701 }
10702
10704 {
10705 return m_IsResultOfSplit;
10706 }
10707
10709 {
10710 m_IsResultOfSplit = value;
10711 }
10712
10714 {
10716 }
10717
10719 {
10720 float other_item_quantity = other_item.GetQuantity();
10721 float this_free_space;
10722
10724
10726
10727 if (other_item_quantity > this_free_space)
10728 {
10729 return this_free_space;
10730 }
10731 else
10732 {
10733 return other_item_quantity;
10734 }
10735 }
10736
10738 {
10740 }
10741
10743 {
10745 return;
10746
10747 if (!IsMagazine() && other_item)
10748 {
10750 if (quantity_used != 0)
10751 {
10752 float hp1 = GetHealth01("","");
10753 float hp2 = other_item.GetHealth01("","");
10754 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10755 hpResult = hpResult / (
GetQuantity() + quantity_used);
10756
10757 hpResult *= GetMaxHealth();
10758 Math.Round(hpResult);
10759 SetHealth("", "Health", hpResult);
10760
10762 other_item.AddQuantity(-quantity_used);
10763 }
10764 }
10766 }
10767
10769 {
10770 #ifdef SERVER
10771 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10772 GetHierarchyParent().IncreaseLifetimeUp();
10773 #endif
10774 };
10775
10777 {
10778 PlayerBase p = PlayerBase.Cast(player);
10779
10780 array<int> recipesIds = p.m_Recipes;
10781 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10782 if (moduleRecipesManager)
10783 {
10784 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10785 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10786 }
10787
10788 for (int i = 0;i < recipesIds.Count(); i++)
10789 {
10790 int key = recipesIds.Get(i);
10791 string recipeName = moduleRecipesManager.GetRecipeName(key);
10793 }
10794 }
10795
10796
10797 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10798 {
10799 super.GetDebugActions(outputList);
10800
10801
10806
10807
10811
10815
10816
10819
10820
10822 {
10825 }
10826
10828
10831
10835 }
10836
10837
10838
10839
10841 {
10842 super.OnAction(action_id, player, ctx);
10843 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10844 {
10845 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10846 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10847 PlayerBase p = PlayerBase.Cast(player);
10848 if (
EActions.RECIPES_RANGE_START < 1000)
10849 {
10850 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10851 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10852 }
10853 }
10854 #ifndef SERVER
10855 else if (action_id ==
EActions.WATCH_PLAYER)
10856 {
10857 PluginDeveloper.SetDeveloperItemClientEx(player);
10858 }
10859 #endif
10861 {
10862 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
10863 {
10864 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
10865 OnDebugButtonPressServer(id + 1);
10866 }
10867
10868 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
10869 {
10870 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
10872 }
10873
10874 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
10875 {
10876 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
10878 }
10879
10880 else if (action_id ==
EActions.ADD_QUANTITY)
10881 {
10882 if (IsMagazine())
10883 {
10884 Magazine mag = Magazine.Cast(this);
10885 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
10886 }
10887 else
10888 {
10890 }
10891
10892 if (m_EM)
10893 {
10894 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
10895 }
10896
10897 }
10898
10899 else if (action_id ==
EActions.REMOVE_QUANTITY)
10900 {
10901 if (IsMagazine())
10902 {
10903 Magazine mag2 = Magazine.Cast(this);
10904 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
10905 }
10906 else
10907 {
10909 }
10910 if (m_EM)
10911 {
10912 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
10913 }
10914
10915 }
10916
10917 else if (action_id ==
EActions.SET_QUANTITY_0)
10918 {
10920
10921 if (m_EM)
10922 {
10923 m_EM.SetEnergy(0);
10924 }
10925 }
10926
10927 else if (action_id ==
EActions.SET_MAX_QUANTITY)
10928 {
10930
10931 if (m_EM)
10932 {
10933 m_EM.SetEnergy(m_EM.GetEnergyMax());
10934 }
10935 }
10936
10937 else if (action_id ==
EActions.ADD_HEALTH)
10938 {
10939 AddHealth("","",GetMaxHealth("","Health")/5);
10940 }
10941 else if (action_id ==
EActions.REMOVE_HEALTH)
10942 {
10943 AddHealth("","",-GetMaxHealth("","Health")/5);
10944 }
10945 else if (action_id ==
EActions.DESTROY_HEALTH)
10946 {
10947 SetHealth01("","",0);
10948 }
10949 else if (action_id ==
EActions.WATCH_ITEM)
10950 {
10952 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
10953 #ifdef DEVELOPER
10954 SetDebugDeveloper_item(this);
10955 #endif
10956 }
10957
10958 else if (action_id ==
EActions.ADD_TEMPERATURE)
10959 {
10960 AddTemperature(20);
10961
10962 }
10963
10964 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
10965 {
10966 AddTemperature(-20);
10967
10968 }
10969
10970 else if (action_id ==
EActions.FLIP_FROZEN)
10971 {
10972 SetFrozen(!GetIsFrozen());
10973
10974 }
10975
10976 else if (action_id ==
EActions.ADD_WETNESS)
10977 {
10979
10980 }
10981
10982 else if (action_id ==
EActions.REMOVE_WETNESS)
10983 {
10985
10986 }
10987
10988 else if (action_id ==
EActions.LIQUIDTYPE_UP)
10989 {
10992
10993
10994 }
10995
10996 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
10997 {
11000 }
11001
11002 else if (action_id ==
EActions.MAKE_SPECIAL)
11003 {
11004 auto debugParams = DebugSpawnParams.WithPlayer(player);
11005 OnDebugSpawnEx(debugParams);
11006 }
11007
11008 else if (action_id ==
EActions.DELETE)
11009 {
11010 Delete();
11011 }
11012
11013 }
11014
11015
11016 return false;
11017 }
11018
11019
11020
11021
11025
11028
11029
11030
11032 {
11033 return false;
11034 }
11035
11036
11038 {
11039 return true;
11040 }
11041
11042
11044 {
11045 return true;
11046 }
11047
11048
11049
11051 {
11052 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11054 }
11055
11058 {
11059 return null;
11060 }
11061
11063 {
11064 return false;
11065 }
11066
11068 {
11069 return false;
11070 }
11071
11075
11076
11078 {
11079 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11080 return module_repairing.CanRepair(this, item_repair_kit);
11081 }
11082
11083
11084 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11085 {
11086 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11087 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11088 }
11089
11090
11092 {
11093
11094
11095
11096
11097
11098
11099
11100
11101 return 1;
11102 }
11103
11104
11105
11107 {
11109 }
11110
11111
11112
11114 {
11116 }
11117
11118
11127 {
11128 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11129
11130 if (player)
11131 {
11132 player.MessageStatus(text);
11133 }
11134 }
11135
11136
11145 {
11146 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11147
11148 if (player)
11149 {
11150 player.MessageAction(text);
11151 }
11152 }
11153
11154
11163 {
11164 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11165
11166 if (player)
11167 {
11168 player.MessageFriendly(text);
11169 }
11170 }
11171
11172
11181 {
11182 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11183
11184 if (player)
11185 {
11186 player.MessageImportant(text);
11187 }
11188 }
11189
11191 {
11192 return true;
11193 }
11194
11195
11196 override bool KindOf(
string tag)
11197 {
11198 bool found = false;
11199 string item_name = this.
GetType();
11202
11203 int array_size = item_tag_array.Count();
11204 for (int i = 0; i < array_size; i++)
11205 {
11206 if (item_tag_array.Get(i) == tag)
11207 {
11208 found = true;
11209 break;
11210 }
11211 }
11212 return found;
11213 }
11214
11215
11217 {
11218
11219 super.OnRPC(sender, rpc_type,ctx);
11220
11221
11222 switch (rpc_type)
11223 {
11224 #ifndef SERVER
11225 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11226 Param2<bool, string> p = new Param2<bool, string>(false, "");
11227
11229 return;
11230
11231 bool play = p.param1;
11232 string soundSet = p.param2;
11233
11234 if (play)
11235 {
11237 {
11239 {
11241 }
11242 }
11243 else
11244 {
11246 }
11247 }
11248 else
11249 {
11251 }
11252
11253 break;
11254 #endif
11255
11256 }
11257
11259 {
11261 }
11262 }
11263
11264
11265
11266
11268 {
11269 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11270 return plugin.GetID(
name);
11271 }
11272
11274 {
11275 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11276 return plugin.GetName(id);
11277 }
11278
11281 {
11282
11283
11284 int varFlags;
11285 if (!ctx.
Read(varFlags))
11286 return;
11287
11288 if (varFlags & ItemVariableFlags.FLOAT)
11289 {
11291 }
11292 }
11293
11295 {
11296
11297 super.SerializeNumericalVars(floats_out);
11298
11299
11300
11302 {
11304 }
11305
11307 {
11309 }
11310
11312 {
11314 }
11315
11317 {
11322 }
11323
11325 {
11327 }
11328 }
11329
11331 {
11332
11333 super.DeSerializeNumericalVars(floats);
11334
11335
11336 int index = 0;
11337 int mask = Math.Round(floats.Get(index));
11338
11339 index++;
11340
11342 {
11344 {
11346 }
11347 else
11348 {
11349 float quantity = floats.Get(index);
11350 SetQuantity(quantity,
true,
false,
false,
false);
11351 }
11352 index++;
11353 }
11354
11356 {
11357 float wet = floats.Get(index);
11359 index++;
11360 }
11361
11363 {
11364 int liquidtype = Math.Round(floats.Get(index));
11366 index++;
11367 }
11368
11370 {
11372 index++;
11374 index++;
11376 index++;
11378 index++;
11379 }
11380
11382 {
11383 int cleanness = Math.Round(floats.Get(index));
11385 index++;
11386 }
11387 }
11388
11390 {
11391 super.WriteVarsToCTX(ctx);
11392
11393
11395 {
11397 }
11398
11400 {
11402 }
11403
11405 {
11407 }
11408
11410 {
11411 int r,g,b,a;
11417 }
11418
11420 {
11422 }
11423 }
11424
11426 {
11427 if (!super.ReadVarsFromCTX(ctx,version))
11428 return false;
11429
11430 int intValue;
11431 float value;
11432
11433 if (version < 140)
11434 {
11435 if (!ctx.
Read(intValue))
11436 return false;
11437
11438 m_VariablesMask = intValue;
11439 }
11440
11442 {
11443 if (!ctx.
Read(value))
11444 return false;
11445
11447 {
11449 }
11450 else
11451 {
11453 }
11454 }
11455
11456 if (version < 140)
11457 {
11459 {
11460 if (!ctx.
Read(value))
11461 return false;
11462 SetTemperatureDirect(value);
11463 }
11464 }
11465
11467 {
11468 if (!ctx.
Read(value))
11469 return false;
11471 }
11472
11474 {
11475 if (!ctx.
Read(intValue))
11476 return false;
11478 }
11479
11481 {
11482 int r,g,b,a;
11484 return false;
11486 return false;
11488 return false;
11490 return false;
11491
11493 }
11494
11496 {
11497 if (!ctx.
Read(intValue))
11498 return false;
11500 }
11501
11502 if (version >= 138 && version < 140)
11503 {
11505 {
11506 if (!ctx.
Read(intValue))
11507 return false;
11508 SetFrozen(intValue);
11509 }
11510 }
11511
11512 return true;
11513 }
11514
11515
11517 {
11520 {
11522 }
11523
11524 if (!super.OnStoreLoad(ctx, version))
11525 {
11527 return false;
11528 }
11529
11530 if (version >= 114)
11531 {
11532 bool hasQuickBarIndexSaved;
11533
11534 if (!ctx.
Read(hasQuickBarIndexSaved))
11535 {
11537 return false;
11538 }
11539
11540 if (hasQuickBarIndexSaved)
11541 {
11542 int itmQBIndex;
11543
11544
11545 if (!ctx.
Read(itmQBIndex))
11546 {
11548 return false;
11549 }
11550
11551 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11552 if (itmQBIndex != -1 && parentPlayer)
11553 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11554 }
11555 }
11556 else
11557 {
11558
11559 PlayerBase player;
11560 int itemQBIndex;
11561 if (version ==
int.
MAX)
11562 {
11563 if (!ctx.
Read(itemQBIndex))
11564 {
11566 return false;
11567 }
11568 }
11569 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11570 {
11571
11572 if (!ctx.
Read(itemQBIndex))
11573 {
11575 return false;
11576 }
11577 if (itemQBIndex != -1 && player)
11578 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11579 }
11580 }
11581
11582 if (version < 140)
11583 {
11584
11585 if (!LoadVariables(ctx, version))
11586 {
11588 return false;
11589 }
11590 }
11591
11592
11594 {
11596 return false;
11597 }
11598 if (version >= 132)
11599 {
11601 if (raib)
11602 {
11604 {
11606 return false;
11607 }
11608 }
11609 }
11610
11612 return true;
11613 }
11614
11615
11616
11618 {
11619 super.OnStoreSave(ctx);
11620
11621 PlayerBase player;
11622 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11623 {
11625
11626 int itemQBIndex = -1;
11627 itemQBIndex = player.FindQuickBarEntityIndex(this);
11628 ctx.
Write(itemQBIndex);
11629 }
11630 else
11631 {
11633 }
11634
11636
11638 if (raib)
11639 {
11641 }
11642 }
11643
11644
11646 {
11647 super.AfterStoreLoad();
11648
11650 {
11652 }
11653
11655 {
11658 }
11659 }
11660
11662 {
11663 super.EEOnAfterLoad();
11664
11666 {
11668 }
11669
11672 }
11673
11675 {
11676 return false;
11677 }
11678
11679
11680
11682 {
11684 {
11685 #ifdef PLATFORM_CONSOLE
11686
11688 {
11690 if (menu)
11691 {
11693 }
11694 }
11695 #endif
11696 }
11697
11699 {
11702 }
11703
11705 {
11706 SetWeightDirty();
11708 }
11710 {
11713 }
11714
11716 {
11719 }
11721 {
11724 }
11725
11726 super.OnVariablesSynchronized();
11727 }
11728
11729
11730
11732 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11733 {
11734 if (!IsServerCheck(allow_client))
11735 return false;
11736
11738 return false;
11739
11742
11743 if (value <= (min + 0.001))
11744 value = min;
11745
11746 if (value == min)
11747 {
11748 if (destroy_config)
11749 {
11750 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11751 if (dstr)
11752 {
11754 this.Delete();
11755 return true;
11756 }
11757 }
11758 else if (destroy_forced)
11759 {
11761 this.Delete();
11762 return true;
11763 }
11764
11766 }
11767
11770
11772 {
11774
11775 if (delta)
11777 }
11778
11780
11781 return false;
11782 }
11783
11784
11786 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11787 {
11789 }
11790
11792 {
11795 }
11796
11798 {
11801 }
11802
11805 {
11806 float value_clamped = Math.Clamp(value, 0, 1);
11808 SetQuantity(result, destroy_config, destroy_forced);
11809 }
11810
11811
11814 {
11816 }
11817
11819 {
11821 }
11822
11823
11824
11825
11826
11827
11828
11829
11830
11831
11833 {
11834 int slot = -1;
11835 if (GetInventory())
11836 {
11837 InventoryLocation il = new InventoryLocation;
11838 GetInventory().GetCurrentInventoryLocation(il);
11840 }
11841
11843 }
11844
11846 {
11847 float quantity_max = 0;
11848
11850 {
11851 if (attSlotID != -1)
11852 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11853
11854 if (quantity_max <= 0)
11856 }
11857
11858 if (quantity_max <= 0)
11860
11861 return quantity_max;
11862 }
11863
11865 {
11867 }
11868
11870 {
11872 }
11873
11874
11876 {
11878 }
11879
11881 {
11883 }
11884
11886 {
11888 }
11889
11890
11892 {
11893
11894 float weightEx = GetWeightEx();
11895 float special = GetInventoryAndCargoWeight();
11896 return weightEx - special;
11897 }
11898
11899
11901 {
11903 }
11904
11906 {
11908 {
11909 #ifdef DEVELOPER
11910 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11911 {
11912 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
11914 }
11915 #endif
11916
11917 return GetQuantity() * GetConfigWeightModified();
11918 }
11919 else if (HasEnergyManager())
11920 {
11921 #ifdef DEVELOPER
11922 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11923 {
11924 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
11925 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
11926 }
11927 #endif
11928 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
11929 }
11930 else
11931 {
11932 #ifdef DEVELOPER
11933 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11934 {
11935 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
11936 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
11937 }
11938 #endif
11939 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
11940 }
11941 }
11942
11945 {
11946 int item_count = 0;
11948
11949 if (GetInventory().GetCargo() != NULL)
11950 {
11951 item_count = GetInventory().GetCargo().GetItemCount();
11952 }
11953
11954 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
11955 {
11956 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
11957 if (item)
11958 item_count += item.GetNumberOfItems();
11959 }
11960 return item_count;
11961 }
11962
11965 {
11966 float weight = 0;
11967 float wetness = 1;
11968 if (include_wetness)
11971 {
11972 weight = wetness * m_ConfigWeight;
11973 }
11975 {
11976 weight = 1;
11977 }
11978 return weight;
11979 }
11980
11981
11982
11984 {
11985 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
11986 {
11987 GameInventory inv = GetInventory();
11988 array<EntityAI> items = new array<EntityAI>;
11990 for (int i = 0; i < items.Count(); i++)
11991 {
11993 if (item)
11994 {
11996 }
11997 }
11998 }
11999 }
12000
12001
12002
12003
12005 {
12006 float energy = 0;
12007 if (HasEnergyManager())
12008 {
12009 energy = GetCompEM().GetEnergy();
12010 }
12011 return energy;
12012 }
12013
12014
12016 {
12017 super.OnEnergyConsumed();
12018
12020 }
12021
12023 {
12024 super.OnEnergyAdded();
12025
12027 }
12028
12029
12031 {
12032 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12033 {
12035 {
12036 float energy_0to1 = GetCompEM().GetEnergy0To1();
12038 }
12039 }
12040 }
12041
12042
12044 {
12045 return ConfigGetFloat("heatIsolation");
12046 }
12047
12049 {
12051 }
12052
12054 {
12055 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12056 if (
GetGame().ConfigIsExisting(paramPath))
12058
12059 return 0.0;
12060 }
12061
12063 {
12064 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12065 if (
GetGame().ConfigIsExisting(paramPath))
12067
12068 return 0.0;
12069 }
12070
12071 override void SetWet(
float value,
bool allow_client =
false)
12072 {
12073 if (!IsServerCheck(allow_client))
12074 return;
12075
12078
12080
12081 m_VarWet = Math.Clamp(value, min, max);
12082
12084 {
12087 }
12088 }
12089
12090 override void AddWet(
float value)
12091 {
12093 }
12094
12096 {
12098 }
12099
12101 {
12103 }
12104
12106 {
12108 }
12109
12111 {
12113 }
12114
12116 {
12118 }
12119
12120 override void OnWetChanged(
float newVal,
float oldVal)
12121 {
12124 if (newLevel != oldLevel)
12125 {
12127 }
12128 }
12129
12131 {
12132 SetWeightDirty();
12133 }
12134
12136 {
12137 return GetWetLevelInternal(
m_VarWet);
12138 }
12139
12140
12141
12143 {
12145 }
12146
12148 {
12150 }
12151
12153 {
12155 }
12156
12158 {
12160 }
12161
12162
12163
12165 {
12166 if (ConfigIsExisting("itemModelLength"))
12167 {
12168 return ConfigGetFloat("itemModelLength");
12169 }
12170 return 0;
12171 }
12172
12174 {
12175 if (ConfigIsExisting("itemAttachOffset"))
12176 {
12177 return ConfigGetFloat("itemAttachOffset");
12178 }
12179 return 0;
12180 }
12181
12182 override void SetCleanness(
int value,
bool allow_client =
false)
12183 {
12184 if (!IsServerCheck(allow_client))
12185 return;
12186
12188
12190
12193 }
12194
12196 {
12198 }
12199
12201 {
12202 return true;
12203 }
12204
12205
12206
12207
12209 {
12211 }
12212
12214 {
12216 }
12217
12218
12219
12220
12221 override void SetColor(
int r,
int g,
int b,
int a)
12222 {
12228 }
12230 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12231 {
12236 }
12237
12239 {
12241 }
12242
12245 {
12246 int r,g,b,a;
12248 r = r/255;
12249 g = g/255;
12250 b = b/255;
12251 a = a/255;
12252 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12253 }
12254
12255
12256
12257 override void SetLiquidType(
int value,
bool allow_client =
false)
12258 {
12259 if (!IsServerCheck(allow_client))
12260 return;
12261
12266 }
12267
12269 {
12270 return ConfigGetInt("varLiquidTypeInit");
12271 }
12272
12274 {
12276 }
12277
12279 {
12281 SetFrozen(false);
12282 }
12283
12286 {
12287 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12288 }
12289
12290
12293 {
12294 PlayerBase nplayer;
12295 if (PlayerBase.CastTo(nplayer, player))
12296 {
12298
12299 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12300 }
12301 }
12302
12303
12306 {
12307 PlayerBase nplayer;
12308 if (PlayerBase.CastTo(nplayer,player))
12309 {
12310
12311 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12312
12313 }
12314
12315
12316 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12317
12318
12319 if (HasEnergyManager())
12320 {
12321 GetCompEM().UpdatePlugState();
12322 }
12323 }
12324
12325
12327 {
12328 super.OnPlacementStarted(player);
12329
12331 }
12332
12333 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12334 {
12336 {
12337 m_AdminLog.OnPlacementComplete(player,
this);
12338 }
12339
12340 super.OnPlacementComplete(player, position, orientation);
12341 }
12342
12343
12344
12345
12346
12348 {
12350 {
12351 return true;
12352 }
12353 else
12354 {
12355 return false;
12356 }
12357 }
12358
12359
12361 {
12363 {
12365 }
12366 }
12367
12368
12370 {
12372 }
12373
12375 {
12377 }
12378
12379 override void InsertAgent(
int agent,
float count = 1)
12380 {
12381 if (count < 1)
12382 return;
12383
12385 }
12386
12389 {
12391 }
12392
12393
12395 {
12397 }
12398
12399
12400
12401
12402
12403
12404
12405
12406
12407
12408
12409
12410
12411
12412
12413
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
12441 {
12443 return false;
12444 return true;
12445 }
12446
12448 {
12449
12451 }
12452
12453
12456 {
12457 super.CheckForRoofLimited(timeTresholdMS);
12458
12460 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12461 {
12462 m_PreviousRoofTestTime = time;
12463 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12464 }
12465 }
12466
12467
12469 {
12471 {
12472 return 0;
12473 }
12474
12475 if (GetInventory().GetAttachmentSlotsCount() != 0)
12476 {
12477 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12478 if (filter)
12479 return filter.GetProtectionLevel(type, false, system);
12480 else
12481 return 0;
12482 }
12483
12484 string subclassPath, entryName;
12485
12486 switch (type)
12487 {
12489 entryName = "biological";
12490 break;
12492 entryName = "chemical";
12493 break;
12494 default:
12495 entryName = "biological";
12496 break;
12497 }
12498
12499 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12500
12502 }
12503
12504
12505
12508 {
12509 if (!IsMagazine())
12511
12513 }
12514
12515
12516
12517
12518
12523 {
12524 return true;
12525 }
12526
12528 {
12530 }
12531
12532
12533
12534
12535
12537 {
12538 if (parent)
12539 {
12540 if (parent.IsInherited(DayZInfected))
12541 return true;
12542
12543 if (!parent.IsRuined())
12544 return true;
12545 }
12546
12547 return true;
12548 }
12549
12551 {
12552 if (!super.CanPutAsAttachment(parent))
12553 {
12554 return false;
12555 }
12556
12557 if (!IsRuined() && !parent.IsRuined())
12558 {
12559 return true;
12560 }
12561
12562 return false;
12563 }
12564
12566 {
12567
12568
12569
12570
12571 return super.CanReceiveItemIntoCargo(item);
12572 }
12573
12575 {
12576
12577
12578
12579
12580 GameInventory attachmentInv = attachment.GetInventory();
12582 {
12583 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12584 return false;
12585 }
12586
12587 InventoryLocation loc = new InventoryLocation();
12588 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12589 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12590 return false;
12591
12592 return super.CanReceiveAttachment(attachment, slotId);
12593 }
12594
12596 {
12597 if (!super.CanReleaseAttachment(attachment))
12598 return false;
12599
12600 return GetInventory().AreChildrenAccessible();
12601 }
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12624 {
12625 int id = muzzle_owner.GetMuzzleID();
12626 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12627
12628 if (WPOF_array)
12629 {
12630 for (int i = 0; i < WPOF_array.Count(); i++)
12631 {
12632 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12633
12634 if (WPOF)
12635 {
12636 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12637 }
12638 }
12639 }
12640 }
12641
12642
12644 {
12645 int id = muzzle_owner.GetMuzzleID();
12647
12648 if (WPOBE_array)
12649 {
12650 for (int i = 0; i < WPOBE_array.Count(); i++)
12651 {
12652 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12653
12654 if (WPOBE)
12655 {
12656 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12657 }
12658 }
12659 }
12660 }
12661
12662
12664 {
12665 int id = muzzle_owner.GetMuzzleID();
12666 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12667
12668 if (WPOOH_array)
12669 {
12670 for (int i = 0; i < WPOOH_array.Count(); i++)
12671 {
12672 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12673
12674 if (WPOOH)
12675 {
12676 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12677 }
12678 }
12679 }
12680 }
12681
12682
12684 {
12685 int id = muzzle_owner.GetMuzzleID();
12686 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12687
12688 if (WPOOH_array)
12689 {
12690 for (int i = 0; i < WPOOH_array.Count(); i++)
12691 {
12692 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12693
12694 if (WPOOH)
12695 {
12696 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12697 }
12698 }
12699 }
12700 }
12701
12702
12704 {
12705 int id = muzzle_owner.GetMuzzleID();
12706 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12707
12708 if (WPOOH_array)
12709 {
12710 for (int i = 0; i < WPOOH_array.Count(); i++)
12711 {
12712 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12713
12714 if (WPOOH)
12715 {
12716 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12717 }
12718 }
12719 }
12720 }
12721
12722
12723
12725 {
12727 {
12728 return true;
12729 }
12730
12731 return false;
12732 }
12733
12735 {
12737 {
12738 return true;
12739 }
12740
12741 return false;
12742 }
12743
12745 {
12747 {
12748 return true;
12749 }
12750
12751 return false;
12752 }
12753
12755 {
12756 return false;
12757 }
12758
12761 {
12762 return UATimeSpent.DEFAULT_DEPLOY;
12763 }
12764
12765
12766
12767
12769 {
12771 SetSynchDirty();
12772 }
12773
12775 {
12777 }
12778
12779
12781 {
12782 return false;
12783 }
12784
12787 {
12788 string att_type = "None";
12789
12790 if (ConfigIsExisting("soundAttType"))
12791 {
12792 att_type = ConfigGetString("soundAttType");
12793 }
12794
12796 }
12797
12799 {
12801 }
12802
12803
12804
12805
12806
12810
12812 {
12815
12817 }
12818
12819
12821 {
12823 return;
12824
12826
12829
12832
12833 SoundParameters params = new SoundParameters();
12837 }
12838
12839
12841 {
12843 return;
12844
12846 SetSynchDirty();
12847
12850 }
12851
12852
12854 {
12856 return;
12857
12859 SetSynchDirty();
12860
12863 }
12864
12866 {
12868 }
12869
12871 {
12873 }
12874
12877 {
12878 if (!
GetGame().IsDedicatedServer())
12879 {
12880 if (ConfigIsExisting("attachSoundSet"))
12881 {
12882 string cfg_path = "";
12883 string soundset = "";
12884 string type_name =
GetType();
12885
12888 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
12889 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
12890
12891 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
12892 {
12893 for (int i = 0; i < cfg_soundset_array.Count(); i++)
12894 {
12895 if (cfg_slot_array[i] == slot_type)
12896 {
12897 soundset = cfg_soundset_array[i];
12898 break;
12899 }
12900 }
12901 }
12902
12903 if (soundset != "")
12904 {
12905 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
12907 }
12908 }
12909 }
12910 }
12911
12913 {
12914
12915 }
12916
12917 void OnApply(PlayerBase player);
12918
12920 {
12921 return 1.0;
12922 };
12923
12925 {
12927 }
12928
12930 {
12932 }
12933
12935
12937 {
12938 SetDynamicPhysicsLifeTime(0.01);
12940 }
12941
12943 {
12944 array<string> zone_names = new array<string>;
12945 GetDamageZones(zone_names);
12946 for (int i = 0; i < zone_names.Count(); i++)
12947 {
12948 SetHealthMax(zone_names.Get(i),"Health");
12949 }
12950 SetHealthMax("","Health");
12951 }
12952
12955 {
12956 float global_health = GetHealth01("","Health");
12957 array<string> zones = new array<string>;
12958 GetDamageZones(zones);
12959
12960 for (int i = 0; i < zones.Count(); i++)
12961 {
12962 SetHealth01(zones.Get(i),"Health",global_health);
12963 }
12964 }
12965
12968 {
12969 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
12970 }
12971
12973 {
12974 if (!hasRootAsPlayer)
12975 {
12976 if (refParentIB)
12977 {
12978
12979 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
12980 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
12981
12982 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
12983 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
12984
12987 }
12988 else
12989 {
12990
12993 }
12994 }
12995 }
12996
12998 {
13000 {
13001 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13002 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13003 {
13004 float heatPermCoef = 1.0;
13006 while (ent)
13007 {
13008 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13009 ent = ent.GetHierarchyParent();
13010 }
13011
13012 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13013 }
13014 }
13015 }
13016
13018 {
13019
13020 EntityAI parent = GetHierarchyParent();
13021 if (!parent)
13022 {
13023 hasParent = false;
13024 hasRootAsPlayer = false;
13025 }
13026 else
13027 {
13028 hasParent = true;
13029 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13030 refParentIB =
ItemBase.Cast(parent);
13031 }
13032 }
13033
13034 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13035 {
13036
13037 }
13038
13040 {
13041
13042 return false;
13043 }
13044
13046 {
13047
13048
13049 return false;
13050 }
13051
13053 {
13054
13055 return false;
13056 }
13057
13060 {
13061 return !GetIsFrozen() &&
IsOpen();
13062 }
13063
13065 {
13066 bool hasParent = false, hasRootAsPlayer = false;
13068
13069 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13070 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13071
13072 if (wwtu || foodDecay)
13073 {
13077
13078 if (processWetness || processTemperature || processDecay)
13079 {
13081
13082 if (processWetness)
13083 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13084
13085 if (processTemperature)
13087
13088 if (processDecay)
13089 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13090 }
13091 }
13092 }
13093
13096 {
13098 }
13099
13101 {
13104
13105 return super.GetTemperatureFreezeThreshold();
13106 }
13107
13109 {
13112
13113 return super.GetTemperatureThawThreshold();
13114 }
13115
13117 {
13120
13121 return super.GetItemOverheatThreshold();
13122 }
13123
13125 {
13127 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13128
13129 return super.GetTemperatureFreezeTime();
13130 }
13131
13133 {
13135 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13136
13137 return super.GetTemperatureThawTime();
13138 }
13139
13144
13146 {
13147 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13148 }
13149
13151 {
13152 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13153 }
13154
13157 {
13159 }
13160
13162 {
13164 }
13165
13167 {
13169 }
13170
13173 {
13174 return null;
13175 }
13176
13179 {
13180 return false;
13181 }
13182
13184 {
13186 {
13189 if (!trg)
13190 {
13192 explosive = this;
13193 }
13194
13195 explosive.PairRemote(trg);
13197
13198 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13199 trg.SetPersistentPairID(persistentID);
13200 explosive.SetPersistentPairID(persistentID);
13201
13202 return true;
13203 }
13204 return false;
13205 }
13206
13209 {
13210 float ret = 1.0;
13213 ret *= GetHealth01();
13214
13215 return ret;
13216 }
13217
13218 #ifdef DEVELOPER
13219 override void SetDebugItem()
13220 {
13221 super.SetDebugItem();
13222 _itemBase = this;
13223 }
13224
13226 {
13227 string text = super.GetDebugText();
13228
13230 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13231
13232 return text;
13233 }
13234 #endif
13235
13237 {
13238 return true;
13239 }
13240
13242
13244
13246 {
13249 }
13250
13251
13259
13275}
13276
13278{
13280 if (entity)
13281 {
13282 bool is_item = entity.IsInherited(
ItemBase);
13283 if (is_item && full_quantity)
13284 {
13287 }
13288 }
13289 else
13290 {
13292 return NULL;
13293 }
13294 return entity;
13295}
13296
13298{
13299 if (item)
13300 {
13301 if (health > 0)
13302 item.SetHealth("", "", health);
13303
13304 if (item.CanHaveTemperature())
13305 {
13307 if (item.CanFreeze())
13308 item.SetFrozen(false);
13309 }
13310
13311 if (item.HasEnergyManager())
13312 {
13313 if (quantity >= 0)
13314 {
13315 item.GetCompEM().SetEnergy0To1(quantity);
13316 }
13317 else
13318 {
13320 }
13321 }
13322 else if (item.IsMagazine())
13323 {
13324 Magazine mag = Magazine.Cast(item);
13325 if (quantity >= 0)
13326 {
13327 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13328 }
13329 else
13330 {
13332 }
13333
13334 }
13335 else
13336 {
13337 if (quantity >= 0)
13338 {
13339 item.SetQuantityNormalized(quantity, false);
13340 }
13341 else
13342 {
13344 }
13345
13346 }
13347 }
13348}
13349
13350#ifdef DEVELOPER
13352#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.