8666{
8668 {
8669 return true;
8670 }
8671};
8672
8673
8674
8676{
8680
8682
8685
8686
8687
8688
8689
8698
8704
8709
8714
8735 protected bool m_IsResultOfSplit
8736
8738
8743
8744
8745
8747
8751
8752
8753
8755
8758
8759
8760
8766
8767
8775
8778
8779
8781
8782
8784
8785
8790
8791
8796
8797
8799
8800
8802 {
8807
8808 if (!
GetGame().IsDedicatedServer())
8809 {
8811 {
8813
8815 {
8817 }
8818 }
8819
8822 }
8823
8824 m_OldLocation = null;
8825
8827 {
8829 }
8830
8831 if (ConfigIsExisting("headSelectionsToHide"))
8832 {
8835 }
8836
8838 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8839 {
8841 }
8842
8844
8845 m_IsResultOfSplit = false;
8846
8848 }
8849
8851 {
8852 super.InitItemVariables();
8853
8859 m_Count = ConfigGetInt(
"count");
8860
8863
8868
8871
8876
8888
8892
8893
8896 if (ConfigIsExisting("canBeSplit"))
8897 {
8900 }
8901
8903 if (ConfigIsExisting("itemBehaviour"))
8905
8906
8909 RegisterNetSyncVariableInt("m_VarLiquidType");
8910 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8911
8912 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8913 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8914 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8915
8916 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8917 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8918 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8919 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8920
8921 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8922 RegisterNetSyncVariableBool("m_IsTakeable");
8923 RegisterNetSyncVariableBool("m_IsHologram");
8924
8927 {
8930 }
8931
8933
8935 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8937
8938 }
8939
8941 {
8943 }
8944
8946 {
8949 {
8954 }
8955 }
8956
8957 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8958 {
8960 {
8963 }
8964
8966 }
8967
8969 {
8975 }
8976
8978
8980 {
8982
8983 if (!action)
8984 {
8985 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8986 return;
8987 }
8988
8990 if (!ai)
8991 {
8993 return;
8994 }
8995
8997 if (!action_array)
8998 {
8999 action_array = new array<ActionBase_Basic>;
9001 }
9002 if (LogManager.IsActionLogEnable())
9003 {
9004 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9005 }
9006
9007 if (action_array.Find(action) != -1)
9008 {
9009 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9010 }
9011 else
9012 {
9013 action_array.Insert(action);
9014 }
9015 }
9016
9018 {
9020 ActionBase action = player.GetActionManager().GetAction(actionName);
9023
9024 if (action_array)
9025 {
9026 action_array.RemoveItem(action);
9027 }
9028 }
9029
9030
9031
9033 {
9034 ActionOverrideData overrideData = new ActionOverrideData();
9038
9040 if (!actionMap)
9041 {
9044 }
9045
9046 actionMap.Insert(this.
Type(), overrideData);
9047
9048 }
9049
9051
9053
9054
9056 {
9059
9062
9063 string config_to_search = "CfgVehicles";
9064 string muzzle_owner_config;
9065
9067 {
9068 if (IsInherited(Weapon))
9069 config_to_search = "CfgWeapons";
9070
9071 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9072
9073 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9074
9076
9077 if (config_OnFire_subclass_count > 0)
9078 {
9079 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9080
9081 for (int i = 0; i < config_OnFire_subclass_count; i++)
9082 {
9083 string particle_class = "";
9085 string config_OnFire_entry = config_OnFire_class + particle_class;
9086 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9087 WPOF_array.Insert(WPOF);
9088 }
9089
9090
9092 }
9093 }
9094
9096 {
9097 config_to_search = "CfgWeapons";
9098 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9099
9100 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9101
9103
9104 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9105 {
9106 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9107
9108 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9109 {
9110 string particle_class2 = "";
9112 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9113 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9114 WPOBE_array.Insert(WPOBE);
9115 }
9116
9117
9119 }
9120 }
9121 }
9122
9123
9125 {
9128
9130 {
9131 string config_to_search = "CfgVehicles";
9132
9133 if (IsInherited(Weapon))
9134 config_to_search = "CfgWeapons";
9135
9136 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9137 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9138
9139 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9140 {
9141
9143
9145 {
9147 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9149 return;
9150 }
9151
9154
9155
9156
9158 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9159
9160 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9161 {
9162 string particle_class = "";
9164 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9166
9167 if (entry_type == CT_CLASS)
9168 {
9169 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9170 WPOOH_array.Insert(WPOF);
9171 }
9172 }
9173
9174
9176 }
9177 }
9178 }
9179
9181 {
9183 }
9184
9186 {
9188 {
9190
9193
9196
9197 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9198 }
9199 }
9200
9202 {
9204 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9205
9207 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9208
9210 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9211
9213 {
9215 }
9216 }
9217
9219 {
9221 }
9222
9224 {
9227 else
9229
9231 {
9234 }
9235 else
9236 {
9239
9242 }
9243
9245 }
9246
9248 {
9250 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9251 }
9252
9254 {
9256 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9258 }
9259
9261 {
9263 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9264 }
9265
9267 {
9270
9271 OverheatingParticle OP = new OverheatingParticle();
9276
9278 }
9279
9281 {
9284
9285 return -1;
9286 }
9287
9289 {
9291 {
9294
9295 for (int i = count; i > 0; --i)
9296 {
9297 int id = i - 1;
9300
9303
9304 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9305 {
9306 if (p)
9307 {
9310 }
9311 }
9312 }
9313 }
9314 }
9315
9317 {
9319 {
9321 {
9322 int id = i - 1;
9324
9325 if (OP)
9326 {
9328
9329 if (p)
9330 {
9332 }
9333
9334 delete OP;
9335 }
9336 }
9337
9340 }
9341 }
9342
9345 {
9346 return 0.0;
9347 }
9348
9349
9351 {
9352 return 250;
9353 }
9354
9356 {
9357 return 0;
9358 }
9359
9362 {
9364 return true;
9365
9366 return false;
9367 }
9368
9371 {
9374
9376 {
9378 }
9379 else
9380 {
9381
9383 }
9384
9386 }
9387
9394 {
9395 return -1;
9396 }
9397
9398
9399
9400
9402 {
9404 {
9406 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9407
9408 if (r_index >= 0)
9409 {
9410 InventoryLocation r_il = new InventoryLocation;
9411 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9412
9413 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9416 {
9417 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9418 }
9420 {
9421 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9422 }
9423
9424 }
9425
9426 player.GetHumanInventory().ClearUserReservedLocation(this);
9427 }
9428
9431 }
9432
9433
9434
9435
9437 {
9438 return ItemBase.m_DebugActionsMask;
9439 }
9440
9442 {
9443 return ItemBase.m_DebugActionsMask & mask;
9444 }
9445
9447 {
9448 ItemBase.m_DebugActionsMask = mask;
9449 }
9450
9452 {
9453 ItemBase.m_DebugActionsMask |= mask;
9454 }
9455
9457 {
9458 ItemBase.m_DebugActionsMask &= ~mask;
9459 }
9460
9462 {
9464 {
9466 }
9467 else
9468 {
9470 }
9471 }
9472
9473
9475 {
9476 if (GetEconomyProfile())
9477 {
9478 float q_max = GetEconomyProfile().GetQuantityMax();
9479 if (q_max > 0)
9480 {
9481 float q_min = GetEconomyProfile().GetQuantityMin();
9482 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9483
9485 {
9486 ComponentEnergyManager comp = GetCompEM();
9488 {
9490 }
9491 }
9493 {
9495
9496 }
9497
9498 }
9499 }
9500 }
9501
9504 {
9505 EntityAI parent = GetHierarchyParent();
9506
9507 if (parent)
9508 {
9509 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9510 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9511 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9512 }
9513 }
9514
9517 {
9518 EntityAI parent = GetHierarchyParent();
9519
9520 if (parent)
9521 {
9522 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9523 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9524 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9525 }
9526 }
9527
9529 {
9530
9531
9532
9533
9535
9537 {
9538 if (ScriptInputUserData.CanStoreInputUserData())
9539 {
9540 ScriptInputUserData ctx = new ScriptInputUserData;
9546 ctx.
Write(use_stack_max);
9549
9551 {
9552 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9553 }
9554 }
9555 }
9556 else if (!
GetGame().IsMultiplayer())
9557 {
9559 }
9560 }
9561
9563 {
9565 }
9566
9568 {
9570 }
9571
9573 {
9575 }
9576
9578 {
9579
9580 return false;
9581 }
9582
9584 {
9585 return false;
9586 }
9587
9591 {
9592 return false;
9593 }
9594
9596 {
9597 return "";
9598 }
9599
9601
9603 {
9604 return false;
9605 }
9606
9608 {
9609 return true;
9610 }
9611
9612
9613
9615 {
9616 return true;
9617 }
9618
9620 {
9621 return true;
9622 }
9623
9625 {
9626 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9628 }
9629
9631 {
9633 }
9634
9636 {
9638 if (!is_being_placed)
9640 SetSynchDirty();
9641 }
9642
9643
9645
9647 {
9649 }
9650
9652 {
9654 }
9655
9657 {
9658 return 1;
9659 }
9660
9662 {
9663 return false;
9664 }
9665
9667 {
9669 SetSynchDirty();
9670 }
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9707 {
9708 super.OnMovedInsideCargo(container);
9709
9710 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9711 }
9712
9713 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9714 {
9715 super.EEItemLocationChanged(oldLoc,newLoc);
9716
9717 PlayerBase new_player = null;
9718 PlayerBase old_player = null;
9719
9720 if (newLoc.GetParent())
9721 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9722
9723 if (oldLoc.GetParent())
9724 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9725
9727 {
9728 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9729
9730 if (r_index >= 0)
9731 {
9732 InventoryLocation r_il = new InventoryLocation;
9733 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9734
9735 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9738 {
9739 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9740 }
9742 {
9743 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9744 }
9745
9746 }
9747 }
9748
9750 {
9751 if (new_player)
9752 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9753
9754 if (new_player == old_player)
9755 {
9756
9757 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9758 {
9760 {
9761 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9762 {
9763 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9764 }
9765 }
9766 else
9767 {
9768 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9769 }
9770 }
9771
9772 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9773 {
9774 int type = oldLoc.GetType();
9776 {
9777 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9778 }
9780 {
9781 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9782 }
9783 }
9784 if (!m_OldLocation)
9785 {
9786 m_OldLocation = new InventoryLocation;
9787 }
9788 m_OldLocation.Copy(oldLoc);
9789 }
9790 else
9791 {
9792 if (m_OldLocation)
9793 {
9794 m_OldLocation.Reset();
9795 }
9796 }
9797
9799 }
9800 else
9801 {
9802 if (new_player)
9803 {
9804 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9805 if (res_index >= 0)
9806 {
9807 InventoryLocation il = new InventoryLocation;
9808 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9810 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9813 {
9814 il.
GetParent().GetOnReleaseLock().Invoke(it);
9815 }
9817 {
9819 }
9820
9821 }
9822 }
9824 {
9825
9827 }
9828
9829 if (m_OldLocation)
9830 {
9831 m_OldLocation.Reset();
9832 }
9833 }
9834 }
9835
9836 override void EOnContact(IEntity other, Contact extra)
9837 {
9839 {
9840 int liquidType = -1;
9842 if (impactSpeed > 0.0)
9843 {
9845 #ifndef SERVER
9847 #else
9849 SetSynchDirty();
9850 #endif
9852 }
9853 }
9854
9855 #ifdef SERVER
9856 if (GetCompEM() && GetCompEM().IsPlugged())
9857 {
9858 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9859 GetCompEM().UnplugThis();
9860 }
9861 #endif
9862 }
9863
9865
9867 {
9869 }
9870
9872 {
9873
9874 }
9875
9877 {
9878 super.OnItemLocationChanged(old_owner, new_owner);
9879
9880 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9881 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9882
9883 if (!relatedPlayer && playerNew)
9884 relatedPlayer = playerNew;
9885
9886 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9887 {
9889 if (actionMgr)
9890 {
9891 ActionBase currentAction = actionMgr.GetRunningAction();
9892 if (currentAction)
9894 }
9895 }
9896
9897 Man ownerPlayerOld = null;
9898 Man ownerPlayerNew = null;
9899
9900 if (old_owner)
9901 {
9902 if (old_owner.
IsMan())
9903 {
9904 ownerPlayerOld = Man.Cast(old_owner);
9905 }
9906 else
9907 {
9908 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9909 }
9910 }
9911 else
9912 {
9914 {
9916
9917 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9918 {
9919 GetCompEM().UnplugThis();
9920 }
9921 }
9922 }
9923
9924 if (new_owner)
9925 {
9926 if (new_owner.
IsMan())
9927 {
9928 ownerPlayerNew = Man.Cast(new_owner);
9929 }
9930 else
9931 {
9932 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9933 }
9934 }
9935
9936 if (ownerPlayerOld != ownerPlayerNew)
9937 {
9938 if (ownerPlayerOld)
9939 {
9940 array<EntityAI> subItemsExit = new array<EntityAI>;
9942 for (int i = 0; i < subItemsExit.Count(); i++)
9943 {
9946 }
9947 }
9948
9949 if (ownerPlayerNew)
9950 {
9951 array<EntityAI> subItemsEnter = new array<EntityAI>;
9953 for (int j = 0; j < subItemsEnter.Count(); j++)
9954 {
9957 }
9958 }
9959 }
9960 else if (ownerPlayerNew != null)
9961 {
9962 PlayerBase nplayer;
9963 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9964 {
9965 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9967 for (int k = 0; k < subItemsUpdate.Count(); k++)
9968 {
9970 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9971 }
9972 }
9973 }
9974
9975 if (old_owner)
9976 old_owner.OnChildItemRemoved(this);
9977 if (new_owner)
9978 new_owner.OnChildItemReceived(this);
9979 }
9980
9981
9983 {
9984 super.EEDelete(parent);
9985 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9986 if (player)
9987 {
9989
9990 if (player.IsAlive())
9991 {
9992 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9993 if (r_index >= 0)
9994 {
9995 InventoryLocation r_il = new InventoryLocation;
9996 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9997
9998 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10001 {
10002 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10003 }
10005 {
10006 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10007 }
10008
10009 }
10010
10011 player.RemoveQuickBarEntityShortcut(this);
10012 }
10013 }
10014 }
10015
10017 {
10018 super.EEKilled(killer);
10019
10022 {
10023 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10024 {
10025 if (IsMagazine())
10026 {
10027 if (Magazine.Cast(this).GetAmmoCount() > 0)
10028 {
10030 }
10031 }
10032 else
10033 {
10035 }
10036 }
10037 }
10038 }
10039
10041 {
10042 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10043
10044 super.OnWasAttached(parent, slot_id);
10045
10048
10050 }
10051
10053 {
10054 super.OnWasDetached(parent, slot_id);
10055
10058 }
10059
10061 {
10062 int idx;
10065
10066 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10067 if (inventory_slots.Count() < 1)
10068 {
10069 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10070 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10071 }
10072 else
10073 {
10074 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10075 }
10076
10077 idx = inventory_slots.Find(slot);
10078 if (idx < 0)
10079 return "";
10080
10081 return attach_types.Get(idx);
10082 }
10083
10085 {
10086 int idx = -1;
10087 string slot;
10088
10091
10092 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10093 if (inventory_slots.Count() < 1)
10094 {
10095 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10096 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10097 }
10098 else
10099 {
10100 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10101 if (detach_types.Count() < 1)
10102 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10103 }
10104
10105 for (int i = 0; i < inventory_slots.Count(); i++)
10106 {
10107 slot = inventory_slots.Get(i);
10108 }
10109
10110 if (slot != "")
10111 {
10112 if (detach_types.Count() == 1)
10113 idx = 0;
10114 else
10115 idx = inventory_slots.Find(slot);
10116 }
10117 if (idx < 0)
10118 return "";
10119
10120 return detach_types.Get(idx);
10121 }
10122
10124 {
10125
10127
10128
10129 float min_time = 1;
10130 float max_time = 3;
10131 float delay = Math.RandomFloat(min_time, max_time);
10132
10133 explode_timer.Run(delay, this, "DoAmmoExplosion");
10134 }
10135
10137 {
10138 Magazine magazine = Magazine.Cast(this);
10139 int pop_sounds_count = 6;
10140 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10141
10142
10143 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10144 string sound_name = pop_sounds[ sound_idx ];
10146
10147
10148 magazine.ServerAddAmmoCount(-1);
10149
10150
10151 float min_temp_to_explode = 100;
10152
10153 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10154 {
10156 }
10157 }
10158
10159
10160 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10161 {
10162 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10163
10164 const int CHANCE_DAMAGE_CARGO = 4;
10165 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10166 const int CHANCE_DAMAGE_NOTHING = 2;
10167
10169 {
10170 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10171 int chances;
10172 int rnd;
10173
10174 if (GetInventory().GetCargo())
10175 {
10176 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10177 rnd = Math.RandomInt(0,chances);
10178
10179 if (rnd < CHANCE_DAMAGE_CARGO)
10180 {
10182 }
10183 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10184 {
10186 }
10187 }
10188 else
10189 {
10190 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10191 rnd = Math.RandomInt(0,chances);
10192
10193 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10194 {
10196 }
10197 }
10198 }
10199 }
10200
10202 {
10203 if (GetInventory().GetCargo())
10204 {
10205 int item_count = GetInventory().GetCargo().GetItemCount();
10206 if (item_count > 0)
10207 {
10208 int random_pick = Math.RandomInt(0, item_count);
10210 if (!item.IsExplosive())
10211 {
10212 item.AddHealth("","",damage);
10213 return true;
10214 }
10215 }
10216 }
10217 return false;
10218 }
10219
10221 {
10222 int attachment_count = GetInventory().AttachmentCount();
10223 if (attachment_count > 0)
10224 {
10225 int random_pick = Math.RandomInt(0, attachment_count);
10226 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10227 if (!attachment.IsExplosive())
10228 {
10229 attachment.AddHealth("","",damage);
10230 return true;
10231 }
10232 }
10233 return false;
10234 }
10235
10237 {
10239 }
10240
10242 {
10244 return GetInventory().CanRemoveEntity();
10245
10246 return false;
10247 }
10248
10250 {
10252 return;
10253
10255 {
10256 if (ScriptInputUserData.CanStoreInputUserData())
10257 {
10258 ScriptInputUserData ctx = new ScriptInputUserData;
10263 ctx.
Write(destination_entity);
10265 ctx.
Write(slot_id);
10267 }
10268 }
10269 else if (!
GetGame().IsMultiplayer())
10270 {
10272 }
10273 }
10274
10276 {
10278 return;
10279
10280 float split_quantity_new;
10284 InventoryLocation loc = new InventoryLocation;
10285
10286 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10287 {
10289 split_quantity_new = stack_max;
10290 else
10292
10293 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10294 if (new_item)
10295 {
10296 new_item.SetResultOfSplit(true);
10297 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10299 new_item.SetQuantity(split_quantity_new);
10300 }
10301 }
10302 else if (destination_entity && slot_id == -1)
10303 {
10304 if (quantity > stack_max)
10305 split_quantity_new = stack_max;
10306 else
10307 split_quantity_new = quantity;
10308
10310 {
10313 }
10314
10315 if (new_item)
10316 {
10317 new_item.SetResultOfSplit(true);
10318 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10320 new_item.SetQuantity(split_quantity_new);
10321 }
10322 }
10323 else
10324 {
10325 if (stack_max != 0)
10326 {
10328 {
10330 }
10331
10332 if (split_quantity_new == 0)
10333 {
10334 if (!
GetGame().IsMultiplayer())
10335 player.PhysicalPredictiveDropItem(this);
10336 else
10337 player.ServerDropEntity(this);
10338 return;
10339 }
10340
10342
10343 if (new_item)
10344 {
10345 new_item.SetResultOfSplit(true);
10346 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10348 new_item.SetQuantity(stack_max);
10349 new_item.PlaceOnSurface();
10350 }
10351 }
10352 }
10353 }
10354
10356 {
10358 return;
10359
10360 float split_quantity_new;
10364 InventoryLocation loc = new InventoryLocation;
10365
10366 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10367 {
10369 split_quantity_new = stack_max;
10370 else
10372
10373 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10374 if (new_item)
10375 {
10376 new_item.SetResultOfSplit(true);
10377 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10379 new_item.SetQuantity(split_quantity_new);
10380 }
10381 }
10382 else if (destination_entity && slot_id == -1)
10383 {
10384 if (quantity > stack_max)
10385 split_quantity_new = stack_max;
10386 else
10387 split_quantity_new = quantity;
10388
10390 {
10393 }
10394
10395 if (new_item)
10396 {
10397 new_item.SetResultOfSplit(true);
10398 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10400 new_item.SetQuantity(split_quantity_new);
10401 }
10402 }
10403 else
10404 {
10405 if (stack_max != 0)
10406 {
10408 {
10410 }
10411
10413
10414 if (new_item)
10415 {
10416 new_item.SetResultOfSplit(true);
10417 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10419 new_item.SetQuantity(stack_max);
10420 new_item.PlaceOnSurface();
10421 }
10422 }
10423 }
10424 }
10425
10427 {
10429 return;
10430
10432 {
10433 if (ScriptInputUserData.CanStoreInputUserData())
10434 {
10435 ScriptInputUserData ctx = new ScriptInputUserData;
10440 dst.WriteToContext(ctx);
10442 }
10443 }
10444 else if (!
GetGame().IsMultiplayer())
10445 {
10447 }
10448 }
10449
10451 {
10453 return;
10454
10456 {
10457 if (ScriptInputUserData.CanStoreInputUserData())
10458 {
10459 ScriptInputUserData ctx = new ScriptInputUserData;
10464 ctx.
Write(destination_entity);
10470 }
10471 }
10472 else if (!
GetGame().IsMultiplayer())
10473 {
10475 }
10476 }
10477
10479 {
10481 }
10482
10484 {
10486 return this;
10487
10489 float split_quantity_new;
10491 if (dst.IsValid())
10492 {
10493 int slot_id = dst.GetSlot();
10495
10496 if (quantity > stack_max)
10497 split_quantity_new = stack_max;
10498 else
10499 split_quantity_new = quantity;
10500
10502
10503 if (new_item)
10504 {
10505 new_item.SetResultOfSplit(true);
10506 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10509 }
10510
10511 return new_item;
10512 }
10513
10514 return null;
10515 }
10516
10518 {
10520 return;
10521
10523 float split_quantity_new;
10525 if (destination_entity)
10526 {
10528 if (quantity > stackable)
10529 split_quantity_new = stackable;
10530 else
10531 split_quantity_new = quantity;
10532
10533 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10534 if (new_item)
10535 {
10536 new_item.SetResultOfSplit(true);
10537 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10539 new_item.SetQuantity(split_quantity_new);
10540 }
10541 }
10542 }
10543
10545 {
10547 return;
10548
10550 {
10551 if (ScriptInputUserData.CanStoreInputUserData())
10552 {
10553 ScriptInputUserData ctx = new ScriptInputUserData;
10558 ItemBase destination_entity =
this;
10559 ctx.
Write(destination_entity);
10563 }
10564 }
10565 else if (!
GetGame().IsMultiplayer())
10566 {
10568 }
10569 }
10570
10572 {
10574 return;
10575
10577 float split_quantity_new;
10579 if (player)
10580 {
10582 if (quantity > stackable)
10583 split_quantity_new = stackable;
10584 else
10585 split_quantity_new = quantity;
10586
10587 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10588 new_item =
ItemBase.Cast(in_hands);
10589 if (new_item)
10590 {
10591 new_item.SetResultOfSplit(true);
10592 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10594 new_item.SetQuantity(split_quantity_new);
10595 }
10596 }
10597 }
10598
10600 {
10602 return;
10603
10605 float split_quantity_new = Math.Floor(quantity * 0.5);
10606
10608
10609 if (new_item)
10610 {
10611 if (new_item.GetQuantityMax() < split_quantity_new)
10612 {
10613 split_quantity_new = new_item.GetQuantityMax();
10614 }
10615
10616 new_item.SetResultOfSplit(true);
10617 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10618
10620 {
10623 }
10624 else
10625 {
10628 }
10629 }
10630 }
10631
10633 {
10635 return;
10636
10638 float split_quantity_new = Math.Floor(quantity / 2);
10639
10640 InventoryLocation invloc = new InventoryLocation;
10642
10644 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10645
10646 if (new_item)
10647 {
10648 if (new_item.GetQuantityMax() < split_quantity_new)
10649 {
10650 split_quantity_new = new_item.GetQuantityMax();
10651 }
10653 {
10656 }
10657 else
10658 {
10661 }
10662 }
10663 }
10664
10667 {
10668 SetWeightDirty();
10670
10671 if (parent)
10672 parent.OnAttachmentQuantityChangedEx(this, delta);
10673
10675 {
10677 {
10679 }
10681 {
10682 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10684 }
10685 }
10686
10687 }
10688
10691 {
10692
10693 }
10694
10697 {
10699 }
10700
10702 {
10703 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10704
10706 {
10707 if (newLevel == GameConstants.STATE_RUINED)
10708 {
10710 EntityAI parent = GetHierarchyParent();
10711 if (parent && parent.IsFireplace())
10712 {
10713 CargoBase cargo = GetInventory().GetCargo();
10714 if (cargo)
10715 {
10717 {
10719 }
10720 }
10721 }
10722 }
10723
10725 {
10726
10728 return;
10729 }
10730
10731 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10732 {
10734 }
10735 }
10736 }
10737
10738
10740 {
10741 super.OnRightClick();
10742
10744 {
10746 {
10747 if (ScriptInputUserData.CanStoreInputUserData())
10748 {
10749 vector m4[4];
10751
10752 EntityAI root = GetHierarchyRoot();
10753
10754 InventoryLocation dst = new InventoryLocation;
10756 {
10757 if (root)
10758 {
10759 root.GetTransform(m4);
10761 }
10762 else
10763 GetInventory().GetCurrentInventoryLocation(dst);
10764 }
10765 else
10766 {
10768
10769
10770 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10771 {
10772 if (root)
10773 {
10774 root.GetTransform(m4);
10776 }
10777 else
10778 GetInventory().GetCurrentInventoryLocation(dst);
10779 }
10780 else
10781 {
10782 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10783 }
10784 }
10785
10786 ScriptInputUserData ctx = new ScriptInputUserData;
10794 }
10795 }
10796 else if (!
GetGame().IsMultiplayer())
10797 {
10799 }
10800 }
10801 }
10802
10803 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10804 {
10805
10806 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10807 return false;
10808
10809 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10810 return false;
10811
10812
10814 return false;
10815
10816
10817 Magazine mag = Magazine.Cast(this);
10818 if (mag)
10819 {
10820 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10821 return false;
10822
10823 if (stack_max_limit)
10824 {
10825 Magazine other_mag = Magazine.Cast(other_item);
10826 if (other_item)
10827 {
10828 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10829 return false;
10830 }
10831
10832 }
10833 }
10834 else
10835 {
10836
10838 return false;
10839
10841 return false;
10842 }
10843
10844 PlayerBase player = null;
10845 if (CastTo(player, GetHierarchyRootPlayer()))
10846 {
10847 if (player.GetInventory().HasAttachment(this))
10848 return false;
10849
10850 if (player.IsItemsToDelete())
10851 return false;
10852 }
10853
10854 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10855 return false;
10856
10857 int slotID;
10859 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10860 return false;
10861
10862 return true;
10863 }
10864
10866 {
10868 }
10869
10871 {
10872 return m_IsResultOfSplit;
10873 }
10874
10876 {
10877 m_IsResultOfSplit = value;
10878 }
10879
10881 {
10883 }
10884
10886 {
10887 float other_item_quantity = other_item.GetQuantity();
10888 float this_free_space;
10889
10891
10893
10894 if (other_item_quantity > this_free_space)
10895 {
10896 return this_free_space;
10897 }
10898 else
10899 {
10900 return other_item_quantity;
10901 }
10902 }
10903
10905 {
10907 }
10908
10910 {
10912 return;
10913
10914 if (!IsMagazine() && other_item)
10915 {
10917 if (quantity_used != 0)
10918 {
10919 float hp1 = GetHealth01("","");
10920 float hp2 = other_item.GetHealth01("","");
10921 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10922 hpResult = hpResult / (
GetQuantity() + quantity_used);
10923
10924 hpResult *= GetMaxHealth();
10925 Math.Round(hpResult);
10926 SetHealth("", "Health", hpResult);
10927
10929 other_item.AddQuantity(-quantity_used);
10930 }
10931 }
10933 }
10934
10936 {
10937 #ifdef SERVER
10938 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10939 GetHierarchyParent().IncreaseLifetimeUp();
10940 #endif
10941 };
10942
10944 {
10945 PlayerBase p = PlayerBase.Cast(player);
10946
10947 array<int> recipesIds = p.m_Recipes;
10948 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10949 if (moduleRecipesManager)
10950 {
10951 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10952 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10953 }
10954
10955 for (int i = 0;i < recipesIds.Count(); i++)
10956 {
10957 int key = recipesIds.Get(i);
10958 string recipeName = moduleRecipesManager.GetRecipeName(key);
10960 }
10961 }
10962
10963
10964 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10965 {
10966 super.GetDebugActions(outputList);
10967
10968
10973
10974
10978
10982
10983
10986
10987
10989 {
10992 }
10993
10995
10998
11002 }
11003
11004
11005
11006
11008 {
11009 super.OnAction(action_id, player, ctx);
11010 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11011 {
11012 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11013 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11014 PlayerBase p = PlayerBase.Cast(player);
11015 if (
EActions.RECIPES_RANGE_START < 1000)
11016 {
11017 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11018 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11019 }
11020 }
11021 #ifndef SERVER
11022 else if (action_id ==
EActions.WATCH_PLAYER)
11023 {
11024 PluginDeveloper.SetDeveloperItemClientEx(player);
11025 }
11026 #endif
11028 {
11029 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11030 {
11031 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11032 OnDebugButtonPressServer(id + 1);
11033 }
11034
11035 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11036 {
11037 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11039 }
11040
11041 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11042 {
11043 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11045 }
11046
11047 else if (action_id ==
EActions.ADD_QUANTITY)
11048 {
11049 if (IsMagazine())
11050 {
11051 Magazine mag = Magazine.Cast(this);
11052 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11053 }
11054 else
11055 {
11057 }
11058
11059 if (m_EM)
11060 {
11061 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11062 }
11063
11064 }
11065
11066 else if (action_id ==
EActions.REMOVE_QUANTITY)
11067 {
11068 if (IsMagazine())
11069 {
11070 Magazine mag2 = Magazine.Cast(this);
11071 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11072 }
11073 else
11074 {
11076 }
11077 if (m_EM)
11078 {
11079 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11080 }
11081
11082 }
11083
11084 else if (action_id ==
EActions.SET_QUANTITY_0)
11085 {
11087
11088 if (m_EM)
11089 {
11090 m_EM.SetEnergy(0);
11091 }
11092 }
11093
11094 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11095 {
11097
11098 if (m_EM)
11099 {
11100 m_EM.SetEnergy(m_EM.GetEnergyMax());
11101 }
11102 }
11103
11104 else if (action_id ==
EActions.ADD_HEALTH)
11105 {
11106 AddHealth("","",GetMaxHealth("","Health")/5);
11107 }
11108 else if (action_id ==
EActions.REMOVE_HEALTH)
11109 {
11110 AddHealth("","",-GetMaxHealth("","Health")/5);
11111 }
11112 else if (action_id ==
EActions.DESTROY_HEALTH)
11113 {
11114 SetHealth01("","",0);
11115 }
11116 else if (action_id ==
EActions.WATCH_ITEM)
11117 {
11119 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11120 #ifdef DEVELOPER
11121 SetDebugDeveloper_item(this);
11122 #endif
11123 }
11124
11125 else if (action_id ==
EActions.ADD_TEMPERATURE)
11126 {
11127 AddTemperature(20);
11128
11129 }
11130
11131 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11132 {
11133 AddTemperature(-20);
11134
11135 }
11136
11137 else if (action_id ==
EActions.FLIP_FROZEN)
11138 {
11139 SetFrozen(!GetIsFrozen());
11140
11141 }
11142
11143 else if (action_id ==
EActions.ADD_WETNESS)
11144 {
11146
11147 }
11148
11149 else if (action_id ==
EActions.REMOVE_WETNESS)
11150 {
11152
11153 }
11154
11155 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11156 {
11159
11160
11161 }
11162
11163 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11164 {
11167 }
11168
11169 else if (action_id ==
EActions.MAKE_SPECIAL)
11170 {
11171 auto debugParams = DebugSpawnParams.WithPlayer(player);
11172 OnDebugSpawnEx(debugParams);
11173 }
11174
11175 else if (action_id ==
EActions.DELETE)
11176 {
11177 Delete();
11178 }
11179
11180 }
11181
11182
11183 return false;
11184 }
11185
11186
11187
11188
11192
11195
11196
11197
11199 {
11200 return false;
11201 }
11202
11203
11205 {
11206 return true;
11207 }
11208
11209
11211 {
11212 return true;
11213 }
11214
11215
11216
11218 {
11219 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11221 }
11222
11225 {
11226 return null;
11227 }
11228
11230 {
11231 return false;
11232 }
11233
11235 {
11236 return false;
11237 }
11238
11242
11243
11245 {
11246 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11247 return module_repairing.CanRepair(this, item_repair_kit);
11248 }
11249
11250
11251 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11252 {
11253 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11254 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11255 }
11256
11257
11259 {
11260
11261
11262
11263
11264
11265
11266
11267
11268 return 1;
11269 }
11270
11271
11272
11274 {
11276 }
11277
11278
11279
11281 {
11283 }
11284
11285
11294 {
11295 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11296
11297 if (player)
11298 {
11299 player.MessageStatus(text);
11300 }
11301 }
11302
11303
11312 {
11313 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11314
11315 if (player)
11316 {
11317 player.MessageAction(text);
11318 }
11319 }
11320
11321
11330 {
11331 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11332
11333 if (player)
11334 {
11335 player.MessageFriendly(text);
11336 }
11337 }
11338
11339
11348 {
11349 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11350
11351 if (player)
11352 {
11353 player.MessageImportant(text);
11354 }
11355 }
11356
11358 {
11359 return true;
11360 }
11361
11362
11363 override bool KindOf(
string tag)
11364 {
11365 bool found = false;
11366 string item_name = this.
GetType();
11369
11370 int array_size = item_tag_array.Count();
11371 for (int i = 0; i < array_size; i++)
11372 {
11373 if (item_tag_array.Get(i) == tag)
11374 {
11375 found = true;
11376 break;
11377 }
11378 }
11379 return found;
11380 }
11381
11382
11384 {
11385
11386 super.OnRPC(sender, rpc_type,ctx);
11387
11388
11389 switch (rpc_type)
11390 {
11391 #ifndef SERVER
11392 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11393 Param2<bool, string> p = new Param2<bool, string>(false, "");
11394
11396 return;
11397
11398 bool play = p.param1;
11399 string soundSet = p.param2;
11400
11401 if (play)
11402 {
11404 {
11406 {
11408 }
11409 }
11410 else
11411 {
11413 }
11414 }
11415 else
11416 {
11418 }
11419
11420 break;
11421 #endif
11422
11423 }
11424
11426 {
11428 }
11429 }
11430
11431
11432
11433
11435 {
11436 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11437 return plugin.GetID(
name);
11438 }
11439
11441 {
11442 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11443 return plugin.GetName(id);
11444 }
11445
11448 {
11449
11450
11451 int varFlags;
11452 if (!ctx.
Read(varFlags))
11453 return;
11454
11455 if (varFlags & ItemVariableFlags.FLOAT)
11456 {
11458 }
11459 }
11460
11462 {
11463
11464 super.SerializeNumericalVars(floats_out);
11465
11466
11467
11469 {
11471 }
11472
11474 {
11476 }
11477
11479 {
11481 }
11482
11484 {
11489 }
11490
11492 {
11494 }
11495 }
11496
11498 {
11499
11500 super.DeSerializeNumericalVars(floats);
11501
11502
11503 int index = 0;
11504 int mask = Math.Round(floats.Get(index));
11505
11506 index++;
11507
11509 {
11511 {
11513 }
11514 else
11515 {
11516 float quantity = floats.Get(index);
11517 SetQuantity(quantity,
true,
false,
false,
false);
11518 }
11519 index++;
11520 }
11521
11523 {
11524 float wet = floats.Get(index);
11526 index++;
11527 }
11528
11530 {
11531 int liquidtype = Math.Round(floats.Get(index));
11533 index++;
11534 }
11535
11537 {
11539 index++;
11541 index++;
11543 index++;
11545 index++;
11546 }
11547
11549 {
11550 int cleanness = Math.Round(floats.Get(index));
11552 index++;
11553 }
11554 }
11555
11557 {
11558 super.WriteVarsToCTX(ctx);
11559
11560
11562 {
11564 }
11565
11567 {
11569 }
11570
11572 {
11574 }
11575
11577 {
11578 int r,g,b,a;
11584 }
11585
11587 {
11589 }
11590 }
11591
11593 {
11594 if (!super.ReadVarsFromCTX(ctx,version))
11595 return false;
11596
11597 int intValue;
11598 float value;
11599
11600 if (version < 140)
11601 {
11602 if (!ctx.
Read(intValue))
11603 return false;
11604
11605 m_VariablesMask = intValue;
11606 }
11607
11609 {
11610 if (!ctx.
Read(value))
11611 return false;
11612
11614 {
11616 }
11617 else
11618 {
11620 }
11621 }
11622
11623 if (version < 140)
11624 {
11626 {
11627 if (!ctx.
Read(value))
11628 return false;
11629 SetTemperatureDirect(value);
11630 }
11631 }
11632
11634 {
11635 if (!ctx.
Read(value))
11636 return false;
11638 }
11639
11641 {
11642 if (!ctx.
Read(intValue))
11643 return false;
11645 }
11646
11648 {
11649 int r,g,b,a;
11651 return false;
11653 return false;
11655 return false;
11657 return false;
11658
11660 }
11661
11663 {
11664 if (!ctx.
Read(intValue))
11665 return false;
11667 }
11668
11669 if (version >= 138 && version < 140)
11670 {
11672 {
11673 if (!ctx.
Read(intValue))
11674 return false;
11675 SetFrozen(intValue);
11676 }
11677 }
11678
11679 return true;
11680 }
11681
11682
11684 {
11687 {
11689 }
11690
11691 if (!super.OnStoreLoad(ctx, version))
11692 {
11694 return false;
11695 }
11696
11697 if (version >= 114)
11698 {
11699 bool hasQuickBarIndexSaved;
11700
11701 if (!ctx.
Read(hasQuickBarIndexSaved))
11702 {
11704 return false;
11705 }
11706
11707 if (hasQuickBarIndexSaved)
11708 {
11709 int itmQBIndex;
11710
11711
11712 if (!ctx.
Read(itmQBIndex))
11713 {
11715 return false;
11716 }
11717
11718 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11719 if (itmQBIndex != -1 && parentPlayer)
11720 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11721 }
11722 }
11723 else
11724 {
11725
11726 PlayerBase player;
11727 int itemQBIndex;
11728 if (version ==
int.
MAX)
11729 {
11730 if (!ctx.
Read(itemQBIndex))
11731 {
11733 return false;
11734 }
11735 }
11736 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11737 {
11738
11739 if (!ctx.
Read(itemQBIndex))
11740 {
11742 return false;
11743 }
11744 if (itemQBIndex != -1 && player)
11745 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11746 }
11747 }
11748
11749 if (version < 140)
11750 {
11751
11752 if (!LoadVariables(ctx, version))
11753 {
11755 return false;
11756 }
11757 }
11758
11759
11761 {
11763 return false;
11764 }
11765 if (version >= 132)
11766 {
11768 if (raib)
11769 {
11771 {
11773 return false;
11774 }
11775 }
11776 }
11777
11779 return true;
11780 }
11781
11782
11783
11785 {
11786 super.OnStoreSave(ctx);
11787
11788 PlayerBase player;
11789 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11790 {
11792
11793 int itemQBIndex = -1;
11794 itemQBIndex = player.FindQuickBarEntityIndex(this);
11795 ctx.
Write(itemQBIndex);
11796 }
11797 else
11798 {
11800 }
11801
11803
11805 if (raib)
11806 {
11808 }
11809 }
11810
11811
11813 {
11814 super.AfterStoreLoad();
11815
11817 {
11819 }
11820
11822 {
11825 }
11826 }
11827
11829 {
11830 super.EEOnAfterLoad();
11831
11833 {
11835 }
11836
11839 }
11840
11842 {
11843 return false;
11844 }
11845
11846
11847
11849 {
11851 {
11852 #ifdef PLATFORM_CONSOLE
11853
11855 {
11857 if (menu)
11858 {
11860 }
11861 }
11862 #endif
11863 }
11864
11866 {
11869 }
11870
11872 {
11873 SetWeightDirty();
11875 }
11877 {
11880 }
11881
11883 {
11886 }
11888 {
11891 }
11892
11893 super.OnVariablesSynchronized();
11894 }
11895
11896
11897
11899 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11900 {
11901 if (!IsServerCheck(allow_client))
11902 return false;
11903
11905 return false;
11906
11909
11910 if (value <= (min + 0.001))
11911 value = min;
11912
11913 if (value == min)
11914 {
11915 if (destroy_config)
11916 {
11917 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11918 if (dstr)
11919 {
11921 this.Delete();
11922 return true;
11923 }
11924 }
11925 else if (destroy_forced)
11926 {
11928 this.Delete();
11929 return true;
11930 }
11931
11933 }
11934
11937
11939 {
11941
11942 if (delta)
11944 }
11945
11947
11948 return false;
11949 }
11950
11951
11953 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11954 {
11956 }
11957
11959 {
11962 }
11963
11965 {
11968 }
11969
11972 {
11973 float value_clamped = Math.Clamp(value, 0, 1);
11975 SetQuantity(result, destroy_config, destroy_forced);
11976 }
11977
11978
11981 {
11983 }
11984
11986 {
11988 }
11989
11990
11991
11992
11993
11994
11995
11996
11997
11998
12000 {
12001 int slot = -1;
12002 if (GetInventory())
12003 {
12004 InventoryLocation il = new InventoryLocation;
12005 GetInventory().GetCurrentInventoryLocation(il);
12007 }
12008
12010 }
12011
12013 {
12014 float quantity_max = 0;
12015
12017 {
12018 if (attSlotID != -1)
12019 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12020
12021 if (quantity_max <= 0)
12023 }
12024
12025 if (quantity_max <= 0)
12027
12028 return quantity_max;
12029 }
12030
12032 {
12034 }
12035
12037 {
12039 }
12040
12041
12043 {
12045 }
12046
12048 {
12050 }
12051
12053 {
12055 }
12056
12057
12059 {
12060
12061 float weightEx = GetWeightEx();
12062 float special = GetInventoryAndCargoWeight();
12063 return weightEx - special;
12064 }
12065
12066
12068 {
12070 }
12071
12073 {
12075 {
12076 #ifdef DEVELOPER
12077 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12078 {
12079 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12081 }
12082 #endif
12083
12084 return GetQuantity() * GetConfigWeightModified();
12085 }
12086 else if (HasEnergyManager())
12087 {
12088 #ifdef DEVELOPER
12089 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12090 {
12091 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12092 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12093 }
12094 #endif
12095 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12096 }
12097 else
12098 {
12099 #ifdef DEVELOPER
12100 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12101 {
12102 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12103 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12104 }
12105 #endif
12106 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12107 }
12108 }
12109
12112 {
12113 int item_count = 0;
12115
12116 if (GetInventory().GetCargo() != NULL)
12117 {
12118 item_count = GetInventory().GetCargo().GetItemCount();
12119 }
12120
12121 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12122 {
12123 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12124 if (item)
12125 item_count += item.GetNumberOfItems();
12126 }
12127 return item_count;
12128 }
12129
12132 {
12133 float weight = 0;
12134 float wetness = 1;
12135 if (include_wetness)
12138 {
12139 weight = wetness * m_ConfigWeight;
12140 }
12142 {
12143 weight = 1;
12144 }
12145 return weight;
12146 }
12147
12148
12149
12151 {
12152 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12153 {
12154 GameInventory inv = GetInventory();
12155 array<EntityAI> items = new array<EntityAI>;
12157 for (int i = 0; i < items.Count(); i++)
12158 {
12160 if (item)
12161 {
12163 }
12164 }
12165 }
12166 }
12167
12168
12169
12170
12172 {
12173 float energy = 0;
12174 if (HasEnergyManager())
12175 {
12176 energy = GetCompEM().GetEnergy();
12177 }
12178 return energy;
12179 }
12180
12181
12183 {
12184 super.OnEnergyConsumed();
12185
12187 }
12188
12190 {
12191 super.OnEnergyAdded();
12192
12194 }
12195
12196
12198 {
12199 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12200 {
12202 {
12203 float energy_0to1 = GetCompEM().GetEnergy0To1();
12205 }
12206 }
12207 }
12208
12209
12211 {
12212 return ConfigGetFloat("heatIsolation");
12213 }
12214
12216 {
12218 }
12219
12221 {
12222 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12223 if (
GetGame().ConfigIsExisting(paramPath))
12225
12226 return 0.0;
12227 }
12228
12230 {
12231 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12232 if (
GetGame().ConfigIsExisting(paramPath))
12234
12235 return 0.0;
12236 }
12237
12238 override void SetWet(
float value,
bool allow_client =
false)
12239 {
12240 if (!IsServerCheck(allow_client))
12241 return;
12242
12245
12247
12248 m_VarWet = Math.Clamp(value, min, max);
12249
12251 {
12254 }
12255 }
12256
12257 override void AddWet(
float value)
12258 {
12260 }
12261
12263 {
12265 }
12266
12268 {
12270 }
12271
12273 {
12275 }
12276
12278 {
12280 }
12281
12283 {
12285 }
12286
12287 override void OnWetChanged(
float newVal,
float oldVal)
12288 {
12291 if (newLevel != oldLevel)
12292 {
12294 }
12295 }
12296
12298 {
12299 SetWeightDirty();
12300 }
12301
12303 {
12304 return GetWetLevelInternal(
m_VarWet);
12305 }
12306
12307
12308
12310 {
12312 }
12313
12315 {
12317 }
12318
12320 {
12322 }
12323
12325 {
12327 }
12328
12329
12330
12332 {
12333 if (ConfigIsExisting("itemModelLength"))
12334 {
12335 return ConfigGetFloat("itemModelLength");
12336 }
12337 return 0;
12338 }
12339
12341 {
12342 if (ConfigIsExisting("itemAttachOffset"))
12343 {
12344 return ConfigGetFloat("itemAttachOffset");
12345 }
12346 return 0;
12347 }
12348
12349 override void SetCleanness(
int value,
bool allow_client =
false)
12350 {
12351 if (!IsServerCheck(allow_client))
12352 return;
12353
12355
12357
12360 }
12361
12363 {
12365 }
12366
12368 {
12369 return true;
12370 }
12371
12372
12373
12374
12376 {
12378 }
12379
12381 {
12383 }
12384
12385
12386
12387
12388 override void SetColor(
int r,
int g,
int b,
int a)
12389 {
12395 }
12397 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12398 {
12403 }
12404
12406 {
12408 }
12409
12412 {
12413 int r,g,b,a;
12415 r = r/255;
12416 g = g/255;
12417 b = b/255;
12418 a = a/255;
12419 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12420 }
12421
12422
12423
12424 override void SetLiquidType(
int value,
bool allow_client =
false)
12425 {
12426 if (!IsServerCheck(allow_client))
12427 return;
12428
12433 }
12434
12436 {
12437 return ConfigGetInt("varLiquidTypeInit");
12438 }
12439
12441 {
12443 }
12444
12446 {
12448 SetFrozen(false);
12449 }
12450
12453 {
12454 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12455 }
12456
12457
12460 {
12461 PlayerBase nplayer;
12462 if (PlayerBase.CastTo(nplayer, player))
12463 {
12465
12466 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12467 }
12468 }
12469
12470
12473 {
12474 PlayerBase nplayer;
12475 if (PlayerBase.CastTo(nplayer,player))
12476 {
12477
12478 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12479
12480 }
12481
12482
12483 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12484
12485
12486 if (HasEnergyManager())
12487 {
12488 GetCompEM().UpdatePlugState();
12489 }
12490 }
12491
12492
12494 {
12495 super.OnPlacementStarted(player);
12496
12498 }
12499
12500 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12501 {
12503 {
12504 m_AdminLog.OnPlacementComplete(player,
this);
12505 }
12506
12507 super.OnPlacementComplete(player, position, orientation);
12508 }
12509
12510
12511
12512
12513
12515 {
12517 {
12518 return true;
12519 }
12520 else
12521 {
12522 return false;
12523 }
12524 }
12525
12526
12528 {
12530 {
12532 }
12533 }
12534
12535
12537 {
12539 }
12540
12542 {
12544 }
12545
12546 override void InsertAgent(
int agent,
float count = 1)
12547 {
12548 if (count < 1)
12549 return;
12550
12552 }
12553
12556 {
12558 }
12559
12560
12562 {
12564 }
12565
12566
12567
12568
12569
12570
12571
12572
12573
12574
12575
12576
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
12606
12608 {
12610 return false;
12611 return true;
12612 }
12613
12615 {
12616
12618 }
12619
12620
12623 {
12624 super.CheckForRoofLimited(timeTresholdMS);
12625
12627 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12628 {
12629 m_PreviousRoofTestTime = time;
12630 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12631 }
12632 }
12633
12634
12636 {
12638 {
12639 return 0;
12640 }
12641
12642 if (GetInventory().GetAttachmentSlotsCount() != 0)
12643 {
12644 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12645 if (filter)
12646 return filter.GetProtectionLevel(type, false, system);
12647 else
12648 return 0;
12649 }
12650
12651 string subclassPath, entryName;
12652
12653 switch (type)
12654 {
12656 entryName = "biological";
12657 break;
12659 entryName = "chemical";
12660 break;
12661 default:
12662 entryName = "biological";
12663 break;
12664 }
12665
12666 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12667
12669 }
12670
12671
12672
12675 {
12676 if (!IsMagazine())
12678
12680 }
12681
12682
12683
12684
12685
12690 {
12691 return true;
12692 }
12693
12695 {
12697 }
12698
12699
12700
12701
12702
12704 {
12705 if (parent)
12706 {
12707 if (parent.IsInherited(DayZInfected))
12708 return true;
12709
12710 if (!parent.IsRuined())
12711 return true;
12712 }
12713
12714 return true;
12715 }
12716
12718 {
12719 if (!super.CanPutAsAttachment(parent))
12720 {
12721 return false;
12722 }
12723
12724 if (!IsRuined() && !parent.IsRuined())
12725 {
12726 return true;
12727 }
12728
12729 return false;
12730 }
12731
12733 {
12734
12735
12736
12737
12738 return super.CanReceiveItemIntoCargo(item);
12739 }
12740
12742 {
12743
12744
12745
12746
12747 GameInventory attachmentInv = attachment.GetInventory();
12749 {
12750 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12751 return false;
12752 }
12753
12754 InventoryLocation loc = new InventoryLocation();
12755 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12756 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12757 return false;
12758
12759 return super.CanReceiveAttachment(attachment, slotId);
12760 }
12761
12763 {
12764 if (!super.CanReleaseAttachment(attachment))
12765 return false;
12766
12767 return GetInventory().AreChildrenAccessible();
12768 }
12769
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
12785
12786
12787
12788
12789
12791 {
12792 int id = muzzle_owner.GetMuzzleID();
12793 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12794
12795 if (WPOF_array)
12796 {
12797 for (int i = 0; i < WPOF_array.Count(); i++)
12798 {
12799 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12800
12801 if (WPOF)
12802 {
12803 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12804 }
12805 }
12806 }
12807 }
12808
12809
12811 {
12812 int id = muzzle_owner.GetMuzzleID();
12814
12815 if (WPOBE_array)
12816 {
12817 for (int i = 0; i < WPOBE_array.Count(); i++)
12818 {
12819 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12820
12821 if (WPOBE)
12822 {
12823 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12824 }
12825 }
12826 }
12827 }
12828
12829
12831 {
12832 int id = muzzle_owner.GetMuzzleID();
12833 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12834
12835 if (WPOOH_array)
12836 {
12837 for (int i = 0; i < WPOOH_array.Count(); i++)
12838 {
12839 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12840
12841 if (WPOOH)
12842 {
12843 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12844 }
12845 }
12846 }
12847 }
12848
12849
12851 {
12852 int id = muzzle_owner.GetMuzzleID();
12853 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12854
12855 if (WPOOH_array)
12856 {
12857 for (int i = 0; i < WPOOH_array.Count(); i++)
12858 {
12859 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12860
12861 if (WPOOH)
12862 {
12863 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12864 }
12865 }
12866 }
12867 }
12868
12869
12871 {
12872 int id = muzzle_owner.GetMuzzleID();
12873 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12874
12875 if (WPOOH_array)
12876 {
12877 for (int i = 0; i < WPOOH_array.Count(); i++)
12878 {
12879 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12880
12881 if (WPOOH)
12882 {
12883 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12884 }
12885 }
12886 }
12887 }
12888
12889
12890
12892 {
12894 {
12895 return true;
12896 }
12897
12898 return false;
12899 }
12900
12902 {
12904 {
12905 return true;
12906 }
12907
12908 return false;
12909 }
12910
12912 {
12914 {
12915 return true;
12916 }
12917
12918 return false;
12919 }
12920
12922 {
12923 return false;
12924 }
12925
12928 {
12929 return UATimeSpent.DEFAULT_DEPLOY;
12930 }
12931
12932
12933
12934
12936 {
12938 SetSynchDirty();
12939 }
12940
12942 {
12944 }
12945
12946
12948 {
12949 return false;
12950 }
12951
12954 {
12955 string att_type = "None";
12956
12957 if (ConfigIsExisting("soundAttType"))
12958 {
12959 att_type = ConfigGetString("soundAttType");
12960 }
12961
12963 }
12964
12966 {
12968 }
12969
12970
12971
12972
12973
12977
12979 {
12982
12984 }
12985
12986
12988 {
12990 return;
12991
12993
12996
12999
13000 SoundParameters params = new SoundParameters();
13004 }
13005
13006
13008 {
13010 return;
13011
13013 SetSynchDirty();
13014
13017 }
13018
13019
13021 {
13023 return;
13024
13026 SetSynchDirty();
13027
13030 }
13031
13033 {
13035 }
13036
13038 {
13040 }
13041
13044 {
13045 if (!
GetGame().IsDedicatedServer())
13046 {
13047 if (ConfigIsExisting("attachSoundSet"))
13048 {
13049 string cfg_path = "";
13050 string soundset = "";
13051 string type_name =
GetType();
13052
13055 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13056 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13057
13058 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13059 {
13060 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13061 {
13062 if (cfg_slot_array[i] == slot_type)
13063 {
13064 soundset = cfg_soundset_array[i];
13065 break;
13066 }
13067 }
13068 }
13069
13070 if (soundset != "")
13071 {
13072 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13074 }
13075 }
13076 }
13077 }
13078
13080 {
13081
13082 }
13083
13084 void OnApply(PlayerBase player);
13085
13087 {
13088 return 1.0;
13089 };
13090
13092 {
13094 }
13095
13097 {
13099 }
13100
13102
13104 {
13105 SetDynamicPhysicsLifeTime(0.01);
13107 }
13108
13110 {
13111 array<string> zone_names = new array<string>;
13112 GetDamageZones(zone_names);
13113 for (int i = 0; i < zone_names.Count(); i++)
13114 {
13115 SetHealthMax(zone_names.Get(i),"Health");
13116 }
13117 SetHealthMax("","Health");
13118 }
13119
13122 {
13123 float global_health = GetHealth01("","Health");
13124 array<string> zones = new array<string>;
13125 GetDamageZones(zones);
13126
13127 for (int i = 0; i < zones.Count(); i++)
13128 {
13129 SetHealth01(zones.Get(i),"Health",global_health);
13130 }
13131 }
13132
13135 {
13136 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13137 }
13138
13140 {
13141 if (!hasRootAsPlayer)
13142 {
13143 if (refParentIB)
13144 {
13145
13146 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13147 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13148
13149 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13150 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13151
13154 }
13155 else
13156 {
13157
13160 }
13161 }
13162 }
13163
13165 {
13167 {
13168 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13169 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13170 {
13171 float heatPermCoef = 1.0;
13173 while (ent)
13174 {
13175 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13176 ent = ent.GetHierarchyParent();
13177 }
13178
13179 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13180 }
13181 }
13182 }
13183
13185 {
13186
13187 EntityAI parent = GetHierarchyParent();
13188 if (!parent)
13189 {
13190 hasParent = false;
13191 hasRootAsPlayer = false;
13192 }
13193 else
13194 {
13195 hasParent = true;
13196 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13197 refParentIB =
ItemBase.Cast(parent);
13198 }
13199 }
13200
13201 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13202 {
13203
13204 }
13205
13207 {
13208
13209 return false;
13210 }
13211
13213 {
13214
13215
13216 return false;
13217 }
13218
13220 {
13221
13222 return false;
13223 }
13224
13227 {
13228 return !GetIsFrozen() &&
IsOpen();
13229 }
13230
13232 {
13233 bool hasParent = false, hasRootAsPlayer = false;
13235
13236 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13237 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13238
13239 if (wwtu || foodDecay)
13240 {
13244
13245 if (processWetness || processTemperature || processDecay)
13246 {
13248
13249 if (processWetness)
13250 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13251
13252 if (processTemperature)
13254
13255 if (processDecay)
13256 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13257 }
13258 }
13259 }
13260
13263 {
13265 }
13266
13268 {
13271
13272 return super.GetTemperatureFreezeThreshold();
13273 }
13274
13276 {
13279
13280 return super.GetTemperatureThawThreshold();
13281 }
13282
13284 {
13287
13288 return super.GetItemOverheatThreshold();
13289 }
13290
13292 {
13294 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13295
13296 return super.GetTemperatureFreezeTime();
13297 }
13298
13300 {
13302 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13303
13304 return super.GetTemperatureThawTime();
13305 }
13306
13311
13313 {
13314 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13315 }
13316
13318 {
13319 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13320 }
13321
13324 {
13326 }
13327
13329 {
13331 }
13332
13334 {
13336 }
13337
13340 {
13341 return null;
13342 }
13343
13346 {
13347 return false;
13348 }
13349
13351 {
13353 {
13356 if (!trg)
13357 {
13359 explosive = this;
13360 }
13361
13362 explosive.PairRemote(trg);
13364
13365 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13366 trg.SetPersistentPairID(persistentID);
13367 explosive.SetPersistentPairID(persistentID);
13368
13369 return true;
13370 }
13371 return false;
13372 }
13373
13376 {
13377 float ret = 1.0;
13380 ret *= GetHealth01();
13381
13382 return ret;
13383 }
13384
13385 #ifdef DEVELOPER
13386 override void SetDebugItem()
13387 {
13388 super.SetDebugItem();
13389 _itemBase = this;
13390 }
13391
13393 {
13394 string text = super.GetDebugText();
13395
13397 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13398
13399 return text;
13400 }
13401 #endif
13402
13404 {
13405 return true;
13406 }
13407
13409
13411
13413 {
13416 }
13417
13418
13426
13442}
13443
13445{
13447 if (entity)
13448 {
13449 bool is_item = entity.IsInherited(
ItemBase);
13450 if (is_item && full_quantity)
13451 {
13454 }
13455 }
13456 else
13457 {
13459 return NULL;
13460 }
13461 return entity;
13462}
13463
13465{
13466 if (item)
13467 {
13468 if (health > 0)
13469 item.SetHealth("", "", health);
13470
13471 if (item.CanHaveTemperature())
13472 {
13474 if (item.CanFreeze())
13475 item.SetFrozen(false);
13476 }
13477
13478 if (item.HasEnergyManager())
13479 {
13480 if (quantity >= 0)
13481 {
13482 item.GetCompEM().SetEnergy0To1(quantity);
13483 }
13484 else
13485 {
13487 }
13488 }
13489 else if (item.IsMagazine())
13490 {
13491 Magazine mag = Magazine.Cast(item);
13492 if (quantity >= 0)
13493 {
13494 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13495 }
13496 else
13497 {
13499 }
13500
13501 }
13502 else
13503 {
13504 if (quantity >= 0)
13505 {
13506 item.SetQuantityNormalized(quantity, false);
13507 }
13508 else
13509 {
13511 }
13512
13513 }
13514 }
13515}
13516
13517#ifdef DEVELOPER
13519#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.