5730{
5732 {
5733 return true;
5734 }
5735};
5736
5737
5738
5740{
5744
5746
5749
5750
5751
5752
5753
5762
5768
5773
5778
5799 protected bool m_IsResultOfSplit
5800
5802
5807
5808
5809
5811
5815
5816
5817
5819
5822
5823
5824
5830
5831
5839
5842
5843
5845
5846
5848
5849
5854
5855
5860
5861
5863
5864
5866 {
5871
5872 if (!
GetGame().IsDedicatedServer())
5873 {
5875 {
5877
5879 {
5881 }
5882 }
5883
5886 }
5887
5888 m_OldLocation = null;
5889
5891 {
5893 }
5894
5895 if (ConfigIsExisting("headSelectionsToHide"))
5896 {
5899 }
5900
5902 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5903 {
5905 }
5906
5908
5909 m_IsResultOfSplit = false;
5910
5912 }
5913
5915 {
5916 super.InitItemVariables();
5917
5923 m_Count = ConfigGetInt(
"count");
5924
5927
5932
5935
5940
5952
5956
5957
5960 if (ConfigIsExisting("canBeSplit"))
5961 {
5964 }
5965
5967 if (ConfigIsExisting("itemBehaviour"))
5969
5970
5973 RegisterNetSyncVariableInt("m_VarLiquidType");
5974 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5975
5976 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5977 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5978 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5979
5980 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5981 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5982 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5983 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5984
5985 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5986 RegisterNetSyncVariableBool("m_IsTakeable");
5987 RegisterNetSyncVariableBool("m_IsHologram");
5988
5991 {
5994 }
5995
5997
5999 if (ConfigIsExisting("temperaturePerQuantityWeight"))
6001
6002 }
6003
6005 {
6007 }
6008
6010 {
6013 {
6018 }
6019 }
6020
6021 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
6022 {
6024 {
6027 }
6028
6030 }
6031
6033 {
6039 }
6040
6042
6044 {
6046
6047 if (!action)
6048 {
6049 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
6050 return;
6051 }
6052
6054 if (!ai)
6055 {
6057 return;
6058 }
6059
6061 if (!action_array)
6062 {
6063 action_array = new array<ActionBase_Basic>;
6065 }
6066 if (LogManager.IsActionLogEnable())
6067 {
6068 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6069 }
6070
6071 if (action_array.Find(action) != -1)
6072 {
6073 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6074 }
6075 else
6076 {
6077 action_array.Insert(action);
6078 }
6079 }
6080
6082 {
6084 ActionBase action = player.GetActionManager().GetAction(actionName);
6087
6088 if (action_array)
6089 {
6090 action_array.RemoveItem(action);
6091 }
6092 }
6093
6094
6095
6097 {
6098 ActionOverrideData overrideData = new ActionOverrideData();
6102
6104 if (!actionMap)
6105 {
6108 }
6109
6110 actionMap.Insert(this.
Type(), overrideData);
6111
6112 }
6113
6115
6117
6118
6120 {
6123
6126
6127 string config_to_search = "CfgVehicles";
6128 string muzzle_owner_config;
6129
6131 {
6132 if (IsInherited(Weapon))
6133 config_to_search = "CfgWeapons";
6134
6135 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6136
6137 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6138
6140
6141 if (config_OnFire_subclass_count > 0)
6142 {
6143 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6144
6145 for (int i = 0; i < config_OnFire_subclass_count; i++)
6146 {
6147 string particle_class = "";
6149 string config_OnFire_entry = config_OnFire_class + particle_class;
6150 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6151 WPOF_array.Insert(WPOF);
6152 }
6153
6154
6156 }
6157 }
6158
6160 {
6161 config_to_search = "CfgWeapons";
6162 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6163
6164 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6165
6167
6168 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6169 {
6170 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6171
6172 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6173 {
6174 string particle_class2 = "";
6176 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6177 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6178 WPOBE_array.Insert(WPOBE);
6179 }
6180
6181
6183 }
6184 }
6185 }
6186
6187
6189 {
6192
6194 {
6195 string config_to_search = "CfgVehicles";
6196
6197 if (IsInherited(Weapon))
6198 config_to_search = "CfgWeapons";
6199
6200 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6201 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6202
6203 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6204 {
6205
6207
6209 {
6211 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6213 return;
6214 }
6215
6218
6219
6220
6222 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6223
6224 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6225 {
6226 string particle_class = "";
6228 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6230
6231 if (entry_type == CT_CLASS)
6232 {
6233 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6234 WPOOH_array.Insert(WPOF);
6235 }
6236 }
6237
6238
6240 }
6241 }
6242 }
6243
6245 {
6247 }
6248
6250 {
6252 {
6254
6257
6260
6261 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6262 }
6263 }
6264
6266 {
6268 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6269
6271 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6272
6274 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6275
6277 {
6279 }
6280 }
6281
6283 {
6285 }
6286
6288 {
6291 else
6293
6295 {
6298 }
6299 else
6300 {
6303
6306 }
6307
6309 }
6310
6312 {
6314 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6315 }
6316
6318 {
6320 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6322 }
6323
6325 {
6327 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6328 }
6329
6331 {
6334
6335 OverheatingParticle OP = new OverheatingParticle();
6340
6342 }
6343
6345 {
6348
6349 return -1;
6350 }
6351
6353 {
6355 {
6358
6359 for (int i = count; i > 0; --i)
6360 {
6361 int id = i - 1;
6364
6367
6368 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6369 {
6370 if (p)
6371 {
6374 }
6375 }
6376 }
6377 }
6378 }
6379
6381 {
6383 {
6385 {
6386 int id = i - 1;
6388
6389 if (OP)
6390 {
6392
6393 if (p)
6394 {
6396 }
6397
6398 delete OP;
6399 }
6400 }
6401
6404 }
6405 }
6406
6409 {
6410 return 0.0;
6411 }
6412
6413
6415 {
6416 return 250;
6417 }
6418
6420 {
6421 return 0;
6422 }
6423
6426 {
6428 return true;
6429
6430 return false;
6431 }
6432
6435 {
6438
6440 {
6442 }
6443 else
6444 {
6445
6447 }
6448
6450 }
6451
6458 {
6459 return -1;
6460 }
6461
6462
6463
6464
6466 {
6468 {
6470 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6471
6472 if (r_index >= 0)
6473 {
6474 InventoryLocation r_il = new InventoryLocation;
6475 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6476
6477 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6480 {
6481 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6482 }
6484 {
6485 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6486 }
6487
6488 }
6489
6490 player.GetHumanInventory().ClearUserReservedLocation(this);
6491 }
6492
6495 }
6496
6497
6498
6499
6501 {
6502 return ItemBase.m_DebugActionsMask;
6503 }
6504
6506 {
6507 return ItemBase.m_DebugActionsMask & mask;
6508 }
6509
6511 {
6512 ItemBase.m_DebugActionsMask = mask;
6513 }
6514
6516 {
6517 ItemBase.m_DebugActionsMask |= mask;
6518 }
6519
6521 {
6522 ItemBase.m_DebugActionsMask &= ~mask;
6523 }
6524
6526 {
6528 {
6530 }
6531 else
6532 {
6534 }
6535 }
6536
6537
6539 {
6540 if (GetEconomyProfile())
6541 {
6542 float q_max = GetEconomyProfile().GetQuantityMax();
6543 if (q_max > 0)
6544 {
6545 float q_min = GetEconomyProfile().GetQuantityMin();
6546 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6547
6549 {
6550 ComponentEnergyManager comp = GetCompEM();
6552 {
6554 }
6555 }
6557 {
6559
6560 }
6561
6562 }
6563 }
6564 }
6565
6568 {
6569 EntityAI parent = GetHierarchyParent();
6570
6571 if (parent)
6572 {
6573 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6574 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6575 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6576 }
6577 }
6578
6581 {
6582 EntityAI parent = GetHierarchyParent();
6583
6584 if (parent)
6585 {
6586 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6587 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6588 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6589 }
6590 }
6591
6593 {
6594
6595
6596
6597
6599
6601 {
6602 if (ScriptInputUserData.CanStoreInputUserData())
6603 {
6604 ScriptInputUserData ctx = new ScriptInputUserData;
6610 ctx.
Write(use_stack_max);
6613
6615 {
6616 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6617 }
6618 }
6619 }
6620 else if (!
GetGame().IsMultiplayer())
6621 {
6623 }
6624 }
6625
6627 {
6629 }
6630
6632 {
6634 }
6635
6637 {
6639 }
6640
6642 {
6643
6644 return false;
6645 }
6646
6648 {
6649 return false;
6650 }
6651
6655 {
6656 return false;
6657 }
6658
6660 {
6661 return "";
6662 }
6663
6665
6667 {
6668 return false;
6669 }
6670
6672 {
6673 return true;
6674 }
6675
6676
6677
6679 {
6680 return true;
6681 }
6682
6684 {
6685 return true;
6686 }
6687
6689 {
6690 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6692 }
6693
6695 {
6697 }
6698
6700 {
6702 if (!is_being_placed)
6704 SetSynchDirty();
6705 }
6706
6707
6709
6711 {
6713 }
6714
6716 {
6718 }
6719
6721 {
6722 return 1;
6723 }
6724
6726 {
6727 return false;
6728 }
6729
6731 {
6733 SetSynchDirty();
6734 }
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6771 {
6772 super.OnMovedInsideCargo(container);
6773
6774 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6775 }
6776
6777 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6778 {
6779 super.EEItemLocationChanged(oldLoc,newLoc);
6780
6781 PlayerBase new_player = null;
6782 PlayerBase old_player = null;
6783
6784 if (newLoc.GetParent())
6785 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6786
6787 if (oldLoc.GetParent())
6788 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6789
6791 {
6792 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6793
6794 if (r_index >= 0)
6795 {
6796 InventoryLocation r_il = new InventoryLocation;
6797 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6798
6799 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6802 {
6803 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6804 }
6806 {
6807 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6808 }
6809
6810 }
6811 }
6812
6814 {
6815 if (new_player)
6816 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6817
6818 if (new_player == old_player)
6819 {
6820
6821 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6822 {
6824 {
6825 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6826 {
6827 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6828 }
6829 }
6830 else
6831 {
6832 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6833 }
6834 }
6835
6836 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6837 {
6838 int type = oldLoc.GetType();
6840 {
6841 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6842 }
6844 {
6845 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6846 }
6847 }
6848 if (!m_OldLocation)
6849 {
6850 m_OldLocation = new InventoryLocation;
6851 }
6852 m_OldLocation.Copy(oldLoc);
6853 }
6854 else
6855 {
6856 if (m_OldLocation)
6857 {
6858 m_OldLocation.Reset();
6859 }
6860 }
6861
6863 }
6864 else
6865 {
6866 if (new_player)
6867 {
6868 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6869 if (res_index >= 0)
6870 {
6871 InventoryLocation il = new InventoryLocation;
6872 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6874 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6877 {
6878 il.
GetParent().GetOnReleaseLock().Invoke(it);
6879 }
6881 {
6883 }
6884
6885 }
6886 }
6888 {
6889
6891 }
6892
6893 if (m_OldLocation)
6894 {
6895 m_OldLocation.Reset();
6896 }
6897 }
6898 }
6899
6900 override void EOnContact(IEntity other, Contact extra)
6901 {
6903 {
6904 int liquidType = -1;
6906 if (impactSpeed > 0.0)
6907 {
6909 #ifndef SERVER
6911 #else
6913 SetSynchDirty();
6914 #endif
6916 }
6917 }
6918
6919 #ifdef SERVER
6920 if (GetCompEM() && GetCompEM().IsPlugged())
6921 {
6922 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6923 GetCompEM().UnplugThis();
6924 }
6925 #endif
6926 }
6927
6929
6931 {
6933 }
6934
6936 {
6937
6938 }
6939
6941 {
6942 super.OnItemLocationChanged(old_owner, new_owner);
6943
6944 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6945 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6946
6947 if (!relatedPlayer && playerNew)
6948 relatedPlayer = playerNew;
6949
6950 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6951 {
6953 if (actionMgr)
6954 {
6955 ActionBase currentAction = actionMgr.GetRunningAction();
6956 if (currentAction)
6958 }
6959 }
6960
6961 Man ownerPlayerOld = null;
6962 Man ownerPlayerNew = null;
6963
6964 if (old_owner)
6965 {
6966 if (old_owner.
IsMan())
6967 {
6968 ownerPlayerOld = Man.Cast(old_owner);
6969 }
6970 else
6971 {
6972 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6973 }
6974 }
6975 else
6976 {
6978 {
6980
6981 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6982 {
6983 GetCompEM().UnplugThis();
6984 }
6985 }
6986 }
6987
6988 if (new_owner)
6989 {
6990 if (new_owner.
IsMan())
6991 {
6992 ownerPlayerNew = Man.Cast(new_owner);
6993 }
6994 else
6995 {
6996 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6997 }
6998 }
6999
7000 if (ownerPlayerOld != ownerPlayerNew)
7001 {
7002 if (ownerPlayerOld)
7003 {
7004 array<EntityAI> subItemsExit = new array<EntityAI>;
7006 for (int i = 0; i < subItemsExit.Count(); i++)
7007 {
7010 }
7011 }
7012
7013 if (ownerPlayerNew)
7014 {
7015 array<EntityAI> subItemsEnter = new array<EntityAI>;
7017 for (int j = 0; j < subItemsEnter.Count(); j++)
7018 {
7021 }
7022 }
7023 }
7024 else if (ownerPlayerNew != null)
7025 {
7026 PlayerBase nplayer;
7027 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
7028 {
7029 array<EntityAI> subItemsUpdate = new array<EntityAI>;
7031 for (int k = 0; k < subItemsUpdate.Count(); k++)
7032 {
7034 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
7035 }
7036 }
7037 }
7038
7039 if (old_owner)
7040 old_owner.OnChildItemRemoved(this);
7041 if (new_owner)
7042 new_owner.OnChildItemReceived(this);
7043 }
7044
7045
7047 {
7048 super.EEDelete(parent);
7049 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
7050 if (player)
7051 {
7053
7054 if (player.IsAlive())
7055 {
7056 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7057 if (r_index >= 0)
7058 {
7059 InventoryLocation r_il = new InventoryLocation;
7060 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7061
7062 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7065 {
7066 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7067 }
7069 {
7070 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7071 }
7072
7073 }
7074
7075 player.RemoveQuickBarEntityShortcut(this);
7076 }
7077 }
7078 }
7079
7081 {
7082 super.EEKilled(killer);
7083
7086 {
7087 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7088 {
7089 if (IsMagazine())
7090 {
7091 if (Magazine.Cast(this).GetAmmoCount() > 0)
7092 {
7094 }
7095 }
7096 else
7097 {
7099 }
7100 }
7101 }
7102 }
7103
7105 {
7106 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7107
7108 super.OnWasAttached(parent, slot_id);
7109
7112
7114 }
7115
7117 {
7118 super.OnWasDetached(parent, slot_id);
7119
7122 }
7123
7125 {
7126 int idx;
7129
7130 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7131 if (inventory_slots.Count() < 1)
7132 {
7133 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7134 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7135 }
7136 else
7137 {
7138 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7139 }
7140
7141 idx = inventory_slots.Find(slot);
7142 if (idx < 0)
7143 return "";
7144
7145 return attach_types.Get(idx);
7146 }
7147
7149 {
7150 int idx = -1;
7151 string slot;
7152
7155
7156 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7157 if (inventory_slots.Count() < 1)
7158 {
7159 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7160 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7161 }
7162 else
7163 {
7164 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7165 if (detach_types.Count() < 1)
7166 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7167 }
7168
7169 for (int i = 0; i < inventory_slots.Count(); i++)
7170 {
7171 slot = inventory_slots.Get(i);
7172 }
7173
7174 if (slot != "")
7175 {
7176 if (detach_types.Count() == 1)
7177 idx = 0;
7178 else
7179 idx = inventory_slots.Find(slot);
7180 }
7181 if (idx < 0)
7182 return "";
7183
7184 return detach_types.Get(idx);
7185 }
7186
7188 {
7189
7191
7192
7193 float min_time = 1;
7194 float max_time = 3;
7195 float delay = Math.RandomFloat(min_time, max_time);
7196
7197 explode_timer.Run(delay, this, "DoAmmoExplosion");
7198 }
7199
7201 {
7202 Magazine magazine = Magazine.Cast(this);
7203 int pop_sounds_count = 6;
7204 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7205
7206
7207 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7208 string sound_name = pop_sounds[ sound_idx ];
7210
7211
7212 magazine.ServerAddAmmoCount(-1);
7213
7214
7215 float min_temp_to_explode = 100;
7216
7217 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7218 {
7220 }
7221 }
7222
7223
7224 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7225 {
7226 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7227
7228 const int CHANCE_DAMAGE_CARGO = 4;
7229 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7230 const int CHANCE_DAMAGE_NOTHING = 2;
7231
7233 {
7234 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7235 int chances;
7236 int rnd;
7237
7238 if (GetInventory().GetCargo())
7239 {
7240 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7241 rnd = Math.RandomInt(0,chances);
7242
7243 if (rnd < CHANCE_DAMAGE_CARGO)
7244 {
7246 }
7247 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7248 {
7250 }
7251 }
7252 else
7253 {
7254 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7255 rnd = Math.RandomInt(0,chances);
7256
7257 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7258 {
7260 }
7261 }
7262 }
7263 }
7264
7266 {
7267 if (GetInventory().GetCargo())
7268 {
7269 int item_count = GetInventory().GetCargo().GetItemCount();
7270 if (item_count > 0)
7271 {
7272 int random_pick = Math.RandomInt(0, item_count);
7274 if (!item.IsExplosive())
7275 {
7276 item.AddHealth("","",damage);
7277 return true;
7278 }
7279 }
7280 }
7281 return false;
7282 }
7283
7285 {
7286 int attachment_count = GetInventory().AttachmentCount();
7287 if (attachment_count > 0)
7288 {
7289 int random_pick = Math.RandomInt(0, attachment_count);
7290 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7291 if (!attachment.IsExplosive())
7292 {
7293 attachment.AddHealth("","",damage);
7294 return true;
7295 }
7296 }
7297 return false;
7298 }
7299
7301 {
7303 }
7304
7306 {
7308 return GetInventory().CanRemoveEntity();
7309
7310 return false;
7311 }
7312
7314 {
7316 return;
7317
7319 {
7320 if (ScriptInputUserData.CanStoreInputUserData())
7321 {
7322 ScriptInputUserData ctx = new ScriptInputUserData;
7327 ctx.
Write(destination_entity);
7331 }
7332 }
7333 else if (!
GetGame().IsMultiplayer())
7334 {
7336 }
7337 }
7338
7340 {
7342 return;
7343
7344 float split_quantity_new;
7348 InventoryLocation loc = new InventoryLocation;
7349
7350 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7351 {
7353 split_quantity_new = stack_max;
7354 else
7356
7357 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7358 if (new_item)
7359 {
7360 new_item.SetResultOfSplit(true);
7361 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7363 new_item.SetQuantity(split_quantity_new);
7364 }
7365 }
7366 else if (destination_entity && slot_id == -1)
7367 {
7368 if (quantity > stack_max)
7369 split_quantity_new = stack_max;
7370 else
7371 split_quantity_new = quantity;
7372
7374 {
7377 }
7378
7379 if (new_item)
7380 {
7381 new_item.SetResultOfSplit(true);
7382 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7384 new_item.SetQuantity(split_quantity_new);
7385 }
7386 }
7387 else
7388 {
7389 if (stack_max != 0)
7390 {
7392 {
7394 }
7395
7396 if (split_quantity_new == 0)
7397 {
7398 if (!
GetGame().IsMultiplayer())
7399 player.PhysicalPredictiveDropItem(this);
7400 else
7401 player.ServerDropEntity(this);
7402 return;
7403 }
7404
7406
7407 if (new_item)
7408 {
7409 new_item.SetResultOfSplit(true);
7410 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7412 new_item.SetQuantity(stack_max);
7413 new_item.PlaceOnSurface();
7414 }
7415 }
7416 }
7417 }
7418
7420 {
7422 return;
7423
7424 float split_quantity_new;
7428 InventoryLocation loc = new InventoryLocation;
7429
7430 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7431 {
7433 split_quantity_new = stack_max;
7434 else
7436
7437 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7438 if (new_item)
7439 {
7440 new_item.SetResultOfSplit(true);
7441 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7443 new_item.SetQuantity(split_quantity_new);
7444 }
7445 }
7446 else if (destination_entity && slot_id == -1)
7447 {
7448 if (quantity > stack_max)
7449 split_quantity_new = stack_max;
7450 else
7451 split_quantity_new = quantity;
7452
7454 {
7457 }
7458
7459 if (new_item)
7460 {
7461 new_item.SetResultOfSplit(true);
7462 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7464 new_item.SetQuantity(split_quantity_new);
7465 }
7466 }
7467 else
7468 {
7469 if (stack_max != 0)
7470 {
7472 {
7474 }
7475
7477
7478 if (new_item)
7479 {
7480 new_item.SetResultOfSplit(true);
7481 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7483 new_item.SetQuantity(stack_max);
7484 new_item.PlaceOnSurface();
7485 }
7486 }
7487 }
7488 }
7489
7491 {
7493 return;
7494
7496 {
7497 if (ScriptInputUserData.CanStoreInputUserData())
7498 {
7499 ScriptInputUserData ctx = new ScriptInputUserData;
7504 dst.WriteToContext(ctx);
7506 }
7507 }
7508 else if (!
GetGame().IsMultiplayer())
7509 {
7511 }
7512 }
7513
7515 {
7517 return;
7518
7520 {
7521 if (ScriptInputUserData.CanStoreInputUserData())
7522 {
7523 ScriptInputUserData ctx = new ScriptInputUserData;
7528 ctx.
Write(destination_entity);
7534 }
7535 }
7536 else if (!
GetGame().IsMultiplayer())
7537 {
7539 }
7540 }
7541
7543 {
7545 }
7546
7548 {
7550 return this;
7551
7553 float split_quantity_new;
7555 if (dst.IsValid())
7556 {
7557 int slot_id = dst.GetSlot();
7559
7560 if (quantity > stack_max)
7561 split_quantity_new = stack_max;
7562 else
7563 split_quantity_new = quantity;
7564
7566
7567 if (new_item)
7568 {
7569 new_item.SetResultOfSplit(true);
7570 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7573 }
7574
7575 return new_item;
7576 }
7577
7578 return null;
7579 }
7580
7582 {
7584 return;
7585
7587 float split_quantity_new;
7589 if (destination_entity)
7590 {
7592 if (quantity > stackable)
7593 split_quantity_new = stackable;
7594 else
7595 split_quantity_new = quantity;
7596
7597 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7598 if (new_item)
7599 {
7600 new_item.SetResultOfSplit(true);
7601 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7603 new_item.SetQuantity(split_quantity_new);
7604 }
7605 }
7606 }
7607
7609 {
7611 return;
7612
7614 {
7615 if (ScriptInputUserData.CanStoreInputUserData())
7616 {
7617 ScriptInputUserData ctx = new ScriptInputUserData;
7622 ItemBase destination_entity =
this;
7623 ctx.
Write(destination_entity);
7627 }
7628 }
7629 else if (!
GetGame().IsMultiplayer())
7630 {
7632 }
7633 }
7634
7636 {
7638 return;
7639
7641 float split_quantity_new;
7643 if (player)
7644 {
7646 if (quantity > stackable)
7647 split_quantity_new = stackable;
7648 else
7649 split_quantity_new = quantity;
7650
7651 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7652 new_item =
ItemBase.Cast(in_hands);
7653 if (new_item)
7654 {
7655 new_item.SetResultOfSplit(true);
7656 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7658 new_item.SetQuantity(split_quantity_new);
7659 }
7660 }
7661 }
7662
7664 {
7666 return;
7667
7669 float split_quantity_new = Math.Floor(quantity * 0.5);
7670
7672
7673 if (new_item)
7674 {
7675 if (new_item.GetQuantityMax() < split_quantity_new)
7676 {
7677 split_quantity_new = new_item.GetQuantityMax();
7678 }
7679
7680 new_item.SetResultOfSplit(true);
7681 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7682
7684 {
7687 }
7688 else
7689 {
7692 }
7693 }
7694 }
7695
7697 {
7699 return;
7700
7702 float split_quantity_new = Math.Floor(quantity / 2);
7703
7704 InventoryLocation invloc = new InventoryLocation;
7706
7708 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7709
7710 if (new_item)
7711 {
7712 if (new_item.GetQuantityMax() < split_quantity_new)
7713 {
7714 split_quantity_new = new_item.GetQuantityMax();
7715 }
7717 {
7720 }
7721 else
7722 {
7725 }
7726 }
7727 }
7728
7731 {
7732 SetWeightDirty();
7734
7735 if (parent)
7736 parent.OnAttachmentQuantityChangedEx(this, delta);
7737
7739 {
7741 {
7743 }
7745 {
7746 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7748 }
7749 }
7750
7751 }
7752
7755 {
7756
7757 }
7758
7761 {
7763 }
7764
7766 {
7767 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7768
7770 {
7771 if (newLevel == GameConstants.STATE_RUINED)
7772 {
7774 EntityAI parent = GetHierarchyParent();
7775 if (parent && parent.IsFireplace())
7776 {
7777 CargoBase cargo = GetInventory().GetCargo();
7778 if (cargo)
7779 {
7781 {
7783 }
7784 }
7785 }
7786 }
7787
7789 {
7790
7792 return;
7793 }
7794
7795 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7796 {
7798 }
7799 }
7800 }
7801
7802
7804 {
7805 super.OnRightClick();
7806
7808 {
7810 {
7811 if (ScriptInputUserData.CanStoreInputUserData())
7812 {
7813 vector m4[4];
7815
7816 EntityAI root = GetHierarchyRoot();
7817
7818 InventoryLocation dst = new InventoryLocation;
7820 {
7821 if (root)
7822 {
7823 root.GetTransform(m4);
7825 }
7826 else
7827 GetInventory().GetCurrentInventoryLocation(dst);
7828 }
7829 else
7830 {
7832
7833
7834 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7835 {
7836 if (root)
7837 {
7838 root.GetTransform(m4);
7840 }
7841 else
7842 GetInventory().GetCurrentInventoryLocation(dst);
7843 }
7844 else
7845 {
7846 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7847 }
7848 }
7849
7850 ScriptInputUserData ctx = new ScriptInputUserData;
7858 }
7859 }
7860 else if (!
GetGame().IsMultiplayer())
7861 {
7863 }
7864 }
7865 }
7866
7867 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7868 {
7869
7870 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7871 return false;
7872
7873 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7874 return false;
7875
7876
7878 return false;
7879
7880
7881 Magazine mag = Magazine.Cast(this);
7882 if (mag)
7883 {
7884 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7885 return false;
7886
7887 if (stack_max_limit)
7888 {
7889 Magazine other_mag = Magazine.Cast(other_item);
7890 if (other_item)
7891 {
7892 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7893 return false;
7894 }
7895
7896 }
7897 }
7898 else
7899 {
7900
7902 return false;
7903
7905 return false;
7906 }
7907
7908 PlayerBase player = null;
7909 if (CastTo(player, GetHierarchyRootPlayer()))
7910 {
7911 if (player.GetInventory().HasAttachment(this))
7912 return false;
7913
7914 if (player.IsItemsToDelete())
7915 return false;
7916 }
7917
7918 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7919 return false;
7920
7921 int slotID;
7923 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7924 return false;
7925
7926 return true;
7927 }
7928
7930 {
7932 }
7933
7935 {
7936 return m_IsResultOfSplit;
7937 }
7938
7940 {
7941 m_IsResultOfSplit = value;
7942 }
7943
7945 {
7947 }
7948
7950 {
7951 float other_item_quantity = other_item.GetQuantity();
7952 float this_free_space;
7953
7955
7957
7958 if (other_item_quantity > this_free_space)
7959 {
7960 return this_free_space;
7961 }
7962 else
7963 {
7964 return other_item_quantity;
7965 }
7966 }
7967
7969 {
7971 }
7972
7974 {
7976 return;
7977
7978 if (!IsMagazine() && other_item)
7979 {
7981 if (quantity_used != 0)
7982 {
7983 float hp1 = GetHealth01("","");
7984 float hp2 = other_item.GetHealth01("","");
7985 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7986 hpResult = hpResult / (
GetQuantity() + quantity_used);
7987
7988 hpResult *= GetMaxHealth();
7989 Math.Round(hpResult);
7990 SetHealth("", "Health", hpResult);
7991
7993 other_item.AddQuantity(-quantity_used);
7994 }
7995 }
7997 }
7998
8000 {
8001 #ifdef SERVER
8002 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
8003 GetHierarchyParent().IncreaseLifetimeUp();
8004 #endif
8005 };
8006
8008 {
8009 PlayerBase p = PlayerBase.Cast(player);
8010
8011 array<int> recipesIds = p.m_Recipes;
8012 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8013 if (moduleRecipesManager)
8014 {
8015 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
8016 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
8017 }
8018
8019 for (int i = 0;i < recipesIds.Count(); i++)
8020 {
8021 int key = recipesIds.Get(i);
8022 string recipeName = moduleRecipesManager.GetRecipeName(key);
8024 }
8025 }
8026
8027
8028 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
8029 {
8030 super.GetDebugActions(outputList);
8031
8032
8037
8038
8042
8046
8047
8050
8051
8053 {
8056 }
8057
8059
8062
8066 }
8067
8068
8069
8070
8072 {
8073 super.OnAction(action_id, player, ctx);
8074 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8075 {
8076 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8077 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8078 PlayerBase p = PlayerBase.Cast(player);
8079 if (
EActions.RECIPES_RANGE_START < 1000)
8080 {
8081 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8082 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8083 }
8084 }
8085 #ifndef SERVER
8086 else if (action_id ==
EActions.WATCH_PLAYER)
8087 {
8088 PluginDeveloper.SetDeveloperItemClientEx(player);
8089 }
8090 #endif
8092 {
8093 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8094 {
8095 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8096 OnDebugButtonPressServer(id + 1);
8097 }
8098
8099 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8100 {
8101 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8103 }
8104
8105 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8106 {
8107 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8109 }
8110
8111 else if (action_id ==
EActions.ADD_QUANTITY)
8112 {
8113 if (IsMagazine())
8114 {
8115 Magazine mag = Magazine.Cast(this);
8116 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8117 }
8118 else
8119 {
8121 }
8122
8123 if (m_EM)
8124 {
8125 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8126 }
8127
8128 }
8129
8130 else if (action_id ==
EActions.REMOVE_QUANTITY)
8131 {
8132 if (IsMagazine())
8133 {
8134 Magazine mag2 = Magazine.Cast(this);
8135 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8136 }
8137 else
8138 {
8140 }
8141 if (m_EM)
8142 {
8143 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8144 }
8145
8146 }
8147
8148 else if (action_id ==
EActions.SET_QUANTITY_0)
8149 {
8151
8152 if (m_EM)
8153 {
8154 m_EM.SetEnergy(0);
8155 }
8156 }
8157
8158 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8159 {
8161
8162 if (m_EM)
8163 {
8164 m_EM.SetEnergy(m_EM.GetEnergyMax());
8165 }
8166 }
8167
8168 else if (action_id ==
EActions.ADD_HEALTH)
8169 {
8170 AddHealth("","",GetMaxHealth("","Health")/5);
8171 }
8172 else if (action_id ==
EActions.REMOVE_HEALTH)
8173 {
8174 AddHealth("","",-GetMaxHealth("","Health")/5);
8175 }
8176 else if (action_id ==
EActions.DESTROY_HEALTH)
8177 {
8178 SetHealth01("","",0);
8179 }
8180 else if (action_id ==
EActions.WATCH_ITEM)
8181 {
8183 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8184 #ifdef DEVELOPER
8185 SetDebugDeveloper_item(this);
8186 #endif
8187 }
8188
8189 else if (action_id ==
EActions.ADD_TEMPERATURE)
8190 {
8191 AddTemperature(20);
8192
8193 }
8194
8195 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8196 {
8197 AddTemperature(-20);
8198
8199 }
8200
8201 else if (action_id ==
EActions.FLIP_FROZEN)
8202 {
8203 SetFrozen(!GetIsFrozen());
8204
8205 }
8206
8207 else if (action_id ==
EActions.ADD_WETNESS)
8208 {
8210
8211 }
8212
8213 else if (action_id ==
EActions.REMOVE_WETNESS)
8214 {
8216
8217 }
8218
8219 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8220 {
8223
8224
8225 }
8226
8227 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8228 {
8231 }
8232
8233 else if (action_id ==
EActions.MAKE_SPECIAL)
8234 {
8235 auto debugParams = DebugSpawnParams.WithPlayer(player);
8236 OnDebugSpawnEx(debugParams);
8237 }
8238
8239 else if (action_id ==
EActions.DELETE)
8240 {
8241 Delete();
8242 }
8243
8244 }
8245
8246
8247 return false;
8248 }
8249
8250
8251
8252
8256
8259
8260
8261
8263 {
8264 return false;
8265 }
8266
8267
8269 {
8270 return true;
8271 }
8272
8273
8275 {
8276 return true;
8277 }
8278
8279
8280
8282 {
8283 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8285 }
8286
8289 {
8290 return null;
8291 }
8292
8294 {
8295 return false;
8296 }
8297
8299 {
8300 return false;
8301 }
8302
8306
8307
8309 {
8310 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8311 return module_repairing.CanRepair(this, item_repair_kit);
8312 }
8313
8314
8315 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8316 {
8317 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8318 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8319 }
8320
8321
8323 {
8324
8325
8326
8327
8328
8329
8330
8331
8332 return 1;
8333 }
8334
8335
8336
8338 {
8340 }
8341
8342
8343
8345 {
8347 }
8348
8349
8358 {
8359 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8360
8361 if (player)
8362 {
8363 player.MessageStatus(text);
8364 }
8365 }
8366
8367
8376 {
8377 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8378
8379 if (player)
8380 {
8381 player.MessageAction(text);
8382 }
8383 }
8384
8385
8394 {
8395 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8396
8397 if (player)
8398 {
8399 player.MessageFriendly(text);
8400 }
8401 }
8402
8403
8412 {
8413 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8414
8415 if (player)
8416 {
8417 player.MessageImportant(text);
8418 }
8419 }
8420
8422 {
8423 return true;
8424 }
8425
8426
8427 override bool KindOf(
string tag)
8428 {
8429 bool found = false;
8430 string item_name = this.
GetType();
8433
8434 int array_size = item_tag_array.Count();
8435 for (int i = 0; i < array_size; i++)
8436 {
8437 if (item_tag_array.Get(i) == tag)
8438 {
8439 found = true;
8440 break;
8441 }
8442 }
8443 return found;
8444 }
8445
8446
8448 {
8449
8450 super.OnRPC(sender, rpc_type,ctx);
8451
8452
8453 switch (rpc_type)
8454 {
8455 #ifndef SERVER
8456 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8457 Param2<bool, string> p = new Param2<bool, string>(false, "");
8458
8460 return;
8461
8462 bool play = p.param1;
8463 string soundSet = p.param2;
8464
8465 if (play)
8466 {
8468 {
8470 {
8472 }
8473 }
8474 else
8475 {
8477 }
8478 }
8479 else
8480 {
8482 }
8483
8484 break;
8485 #endif
8486
8487 }
8488
8490 {
8492 }
8493 }
8494
8495
8496
8497
8499 {
8500 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8501 return plugin.GetID(
name);
8502 }
8503
8505 {
8506 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8507 return plugin.GetName(id);
8508 }
8509
8512 {
8513
8514
8515 int varFlags;
8516 if (!ctx.
Read(varFlags))
8517 return;
8518
8519 if (varFlags & ItemVariableFlags.FLOAT)
8520 {
8522 }
8523 }
8524
8526 {
8527
8528 super.SerializeNumericalVars(floats_out);
8529
8530
8531
8533 {
8535 }
8536
8538 {
8540 }
8541
8543 {
8545 }
8546
8548 {
8553 }
8554
8556 {
8558 }
8559 }
8560
8562 {
8563
8564 super.DeSerializeNumericalVars(floats);
8565
8566
8567 int index = 0;
8568 int mask = Math.Round(floats.Get(index));
8569
8570 index++;
8571
8573 {
8575 {
8577 }
8578 else
8579 {
8580 float quantity = floats.Get(index);
8582 }
8583 index++;
8584 }
8585
8587 {
8588 float wet = floats.Get(index);
8590 index++;
8591 }
8592
8594 {
8595 int liquidtype = Math.Round(floats.Get(index));
8597 index++;
8598 }
8599
8601 {
8603 index++;
8605 index++;
8607 index++;
8609 index++;
8610 }
8611
8613 {
8614 int cleanness = Math.Round(floats.Get(index));
8616 index++;
8617 }
8618 }
8619
8621 {
8622 super.WriteVarsToCTX(ctx);
8623
8624
8626 {
8628 }
8629
8631 {
8633 }
8634
8636 {
8638 }
8639
8641 {
8642 int r,g,b,a;
8648 }
8649
8651 {
8653 }
8654 }
8655
8657 {
8658 if (!super.ReadVarsFromCTX(ctx,version))
8659 return false;
8660
8661 int intValue;
8662 float value;
8663
8664 if (version < 140)
8665 {
8666 if (!ctx.
Read(intValue))
8667 return false;
8668
8669 m_VariablesMask = intValue;
8670 }
8671
8673 {
8674 if (!ctx.
Read(value))
8675 return false;
8676
8678 {
8680 }
8681 else
8682 {
8684 }
8685 }
8686
8687 if (version < 140)
8688 {
8690 {
8691 if (!ctx.
Read(value))
8692 return false;
8693 SetTemperatureDirect(value);
8694 }
8695 }
8696
8698 {
8699 if (!ctx.
Read(value))
8700 return false;
8702 }
8703
8705 {
8706 if (!ctx.
Read(intValue))
8707 return false;
8709 }
8710
8712 {
8713 int r,g,b,a;
8715 return false;
8717 return false;
8719 return false;
8721 return false;
8722
8724 }
8725
8727 {
8728 if (!ctx.
Read(intValue))
8729 return false;
8731 }
8732
8733 if (version >= 138 && version < 140)
8734 {
8736 {
8737 if (!ctx.
Read(intValue))
8738 return false;
8739 SetFrozen(intValue);
8740 }
8741 }
8742
8743 return true;
8744 }
8745
8746
8748 {
8751 {
8753 }
8754
8755 if (!super.OnStoreLoad(ctx, version))
8756 {
8758 return false;
8759 }
8760
8761 if (version >= 114)
8762 {
8763 bool hasQuickBarIndexSaved;
8764
8765 if (!ctx.
Read(hasQuickBarIndexSaved))
8766 {
8768 return false;
8769 }
8770
8771 if (hasQuickBarIndexSaved)
8772 {
8773 int itmQBIndex;
8774
8775
8776 if (!ctx.
Read(itmQBIndex))
8777 {
8779 return false;
8780 }
8781
8782 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8783 if (itmQBIndex != -1 && parentPlayer)
8784 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8785 }
8786 }
8787 else
8788 {
8789
8790 PlayerBase player;
8791 int itemQBIndex;
8792 if (version ==
int.
MAX)
8793 {
8794 if (!ctx.
Read(itemQBIndex))
8795 {
8797 return false;
8798 }
8799 }
8800 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8801 {
8802
8803 if (!ctx.
Read(itemQBIndex))
8804 {
8806 return false;
8807 }
8808 if (itemQBIndex != -1 && player)
8809 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8810 }
8811 }
8812
8813 if (version < 140)
8814 {
8815
8816 if (!LoadVariables(ctx, version))
8817 {
8819 return false;
8820 }
8821 }
8822
8823
8825 {
8827 return false;
8828 }
8829 if (version >= 132)
8830 {
8832 if (raib)
8833 {
8835 {
8837 return false;
8838 }
8839 }
8840 }
8841
8843 return true;
8844 }
8845
8846
8847
8849 {
8850 super.OnStoreSave(ctx);
8851
8852 PlayerBase player;
8853 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8854 {
8856
8857 int itemQBIndex = -1;
8858 itemQBIndex = player.FindQuickBarEntityIndex(this);
8859 ctx.
Write(itemQBIndex);
8860 }
8861 else
8862 {
8864 }
8865
8867
8869 if (raib)
8870 {
8872 }
8873 }
8874
8875
8877 {
8878 super.AfterStoreLoad();
8879
8881 {
8883 }
8884
8886 {
8889 }
8890 }
8891
8893 {
8894 super.EEOnAfterLoad();
8895
8897 {
8899 }
8900
8903 }
8904
8906 {
8907 return false;
8908 }
8909
8910
8911
8913 {
8915 {
8916 #ifdef PLATFORM_CONSOLE
8917
8919 {
8921 if (menu)
8922 {
8924 }
8925 }
8926 #endif
8927 }
8928
8930 {
8933 }
8934
8936 {
8937 SetWeightDirty();
8939 }
8941 {
8944 }
8945
8947 {
8950 }
8952 {
8955 }
8956
8957 super.OnVariablesSynchronized();
8958 }
8959
8960
8961
8963 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8964 {
8965 if (!IsServerCheck(allow_client))
8966 return false;
8967
8969 return false;
8970
8973
8974 if (value <= (min + 0.001))
8975 value = min;
8976
8977 if (value == min)
8978 {
8979 if (destroy_config)
8980 {
8981 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8982 if (dstr)
8983 {
8985 this.Delete();
8986 return true;
8987 }
8988 }
8989 else if (destroy_forced)
8990 {
8992 this.Delete();
8993 return true;
8994 }
8995
8997 }
8998
9001
9003 {
9005
9006 if (delta)
9008 }
9009
9011
9012 return false;
9013 }
9014
9015
9017 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
9018 {
9020 }
9021
9023 {
9026 }
9027
9029 {
9032 }
9033
9036 {
9037 float value_clamped = Math.Clamp(value, 0, 1);
9039 SetQuantity(result, destroy_config, destroy_forced);
9040 }
9041
9042
9045 {
9047 }
9048
9050 {
9052 }
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9064 {
9065 int slot = -1;
9066 if (GetInventory())
9067 {
9068 InventoryLocation il = new InventoryLocation;
9069 GetInventory().GetCurrentInventoryLocation(il);
9071 }
9072
9074 }
9075
9077 {
9078 float quantity_max = 0;
9079
9081 {
9082 if (attSlotID != -1)
9083 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9084
9085 if (quantity_max <= 0)
9087 }
9088
9089 if (quantity_max <= 0)
9091
9092 return quantity_max;
9093 }
9094
9096 {
9098 }
9099
9101 {
9103 }
9104
9105
9107 {
9109 }
9110
9112 {
9114 }
9115
9117 {
9119 }
9120
9121
9123 {
9124
9125 float weightEx = GetWeightEx();
9126 float special = GetInventoryAndCargoWeight();
9127 return weightEx - special;
9128 }
9129
9130
9132 {
9134 }
9135
9137 {
9139 {
9140 #ifdef DEVELOPER
9141 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9142 {
9143 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9145 }
9146 #endif
9147
9149 }
9150 else if (HasEnergyManager())
9151 {
9152 #ifdef DEVELOPER
9153 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9154 {
9155 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9156 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9157 }
9158 #endif
9159 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9160 }
9161 else
9162 {
9163 #ifdef DEVELOPER
9164 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9165 {
9166 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9167 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9168 }
9169 #endif
9170 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9171 }
9172 }
9173
9176 {
9177 int item_count = 0;
9179
9180 if (GetInventory().GetCargo() != NULL)
9181 {
9182 item_count = GetInventory().GetCargo().GetItemCount();
9183 }
9184
9185 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9186 {
9187 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9188 if (item)
9189 item_count += item.GetNumberOfItems();
9190 }
9191 return item_count;
9192 }
9193
9196 {
9197 float weight = 0;
9198 float wetness = 1;
9199 if (include_wetness)
9202 {
9203 weight = wetness * m_ConfigWeight;
9204 }
9206 {
9207 weight = 1;
9208 }
9209 return weight;
9210 }
9211
9212
9213
9215 {
9216 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9217 {
9218 GameInventory inv = GetInventory();
9219 array<EntityAI> items = new array<EntityAI>;
9221 for (int i = 0; i < items.Count(); i++)
9222 {
9224 if (item)
9225 {
9227 }
9228 }
9229 }
9230 }
9231
9232
9233
9234
9236 {
9237 float energy = 0;
9238 if (HasEnergyManager())
9239 {
9240 energy = GetCompEM().GetEnergy();
9241 }
9242 return energy;
9243 }
9244
9245
9247 {
9248 super.OnEnergyConsumed();
9249
9251 }
9252
9254 {
9255 super.OnEnergyAdded();
9256
9258 }
9259
9260
9262 {
9263 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9264 {
9266 {
9267 float energy_0to1 = GetCompEM().GetEnergy0To1();
9269 }
9270 }
9271 }
9272
9273
9275 {
9276 return ConfigGetFloat("heatIsolation");
9277 }
9278
9280 {
9282 }
9283
9285 {
9286 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9287 if (
GetGame().ConfigIsExisting(paramPath))
9289
9290 return 0.0;
9291 }
9292
9294 {
9295 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9296 if (
GetGame().ConfigIsExisting(paramPath))
9298
9299 return 0.0;
9300 }
9301
9302 override void SetWet(
float value,
bool allow_client =
false)
9303 {
9304 if (!IsServerCheck(allow_client))
9305 return;
9306
9309
9311
9312 m_VarWet = Math.Clamp(value, min, max);
9313
9315 {
9318 }
9319 }
9320
9321 override void AddWet(
float value)
9322 {
9324 }
9325
9327 {
9329 }
9330
9332 {
9334 }
9335
9337 {
9339 }
9340
9342 {
9344 }
9345
9347 {
9349 }
9350
9352 {
9355 if (newLevel != oldLevel)
9356 {
9358 }
9359 }
9360
9362 {
9363 SetWeightDirty();
9364 }
9365
9367 {
9368 return GetWetLevelInternal(
m_VarWet);
9369 }
9370
9371
9372
9374 {
9376 }
9377
9379 {
9381 }
9382
9384 {
9386 }
9387
9389 {
9391 }
9392
9393
9394
9396 {
9397 if (ConfigIsExisting("itemModelLength"))
9398 {
9399 return ConfigGetFloat("itemModelLength");
9400 }
9401 return 0;
9402 }
9403
9405 {
9406 if (ConfigIsExisting("itemAttachOffset"))
9407 {
9408 return ConfigGetFloat("itemAttachOffset");
9409 }
9410 return 0;
9411 }
9412
9413 override void SetCleanness(
int value,
bool allow_client =
false)
9414 {
9415 if (!IsServerCheck(allow_client))
9416 return;
9417
9419
9421
9424 }
9425
9427 {
9429 }
9430
9432 {
9433 return true;
9434 }
9435
9436
9437
9438
9440 {
9442 }
9443
9445 {
9447 }
9448
9449
9450
9451
9452 override void SetColor(
int r,
int g,
int b,
int a)
9453 {
9459 }
9461 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9462 {
9467 }
9468
9470 {
9472 }
9473
9476 {
9477 int r,g,b,a;
9479 r = r/255;
9480 g = g/255;
9481 b = b/255;
9482 a = a/255;
9483 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9484 }
9485
9486
9487
9488 override void SetLiquidType(
int value,
bool allow_client =
false)
9489 {
9490 if (!IsServerCheck(allow_client))
9491 return;
9492
9497 }
9498
9500 {
9501 return ConfigGetInt("varLiquidTypeInit");
9502 }
9503
9505 {
9507 }
9508
9510 {
9512 SetFrozen(false);
9513 }
9514
9517 {
9518 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9519 }
9520
9521
9524 {
9525 PlayerBase nplayer;
9526 if (PlayerBase.CastTo(nplayer, player))
9527 {
9529
9530 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9531 }
9532 }
9533
9534
9537 {
9538 PlayerBase nplayer;
9539 if (PlayerBase.CastTo(nplayer,player))
9540 {
9541
9542 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9543
9544 }
9545
9546
9547 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9548
9549
9550 if (HasEnergyManager())
9551 {
9552 GetCompEM().UpdatePlugState();
9553 }
9554 }
9555
9556
9558 {
9559 super.OnPlacementStarted(player);
9560
9562 }
9563
9564 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9565 {
9567 {
9568 m_AdminLog.OnPlacementComplete(player,
this);
9569 }
9570
9571 super.OnPlacementComplete(player, position, orientation);
9572 }
9573
9574
9575
9576
9577
9579 {
9581 {
9582 return true;
9583 }
9584 else
9585 {
9586 return false;
9587 }
9588 }
9589
9590
9592 {
9594 {
9596 }
9597 }
9598
9599
9601 {
9603 }
9604
9606 {
9608 }
9609
9610 override void InsertAgent(
int agent,
float count = 1)
9611 {
9612 if (count < 1)
9613 return;
9614
9616 }
9617
9620 {
9622 }
9623
9624
9626 {
9628 }
9629
9630
9631
9632
9633
9634
9635
9636
9637
9638
9639
9640
9641
9642
9643
9644
9645
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9666
9667
9668
9669
9670
9672 {
9674 return false;
9675 return true;
9676 }
9677
9679 {
9680
9682 }
9683
9684
9687 {
9688 super.CheckForRoofLimited(timeTresholdMS);
9689
9691 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9692 {
9693 m_PreviousRoofTestTime = time;
9694 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9695 }
9696 }
9697
9698
9700 {
9702 {
9703 return 0;
9704 }
9705
9706 if (GetInventory().GetAttachmentSlotsCount() != 0)
9707 {
9708 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9709 if (filter)
9710 return filter.GetProtectionLevel(type, false, system);
9711 else
9712 return 0;
9713 }
9714
9715 string subclassPath, entryName;
9716
9717 switch (type)
9718 {
9720 entryName = "biological";
9721 break;
9723 entryName = "chemical";
9724 break;
9725 default:
9726 entryName = "biological";
9727 break;
9728 }
9729
9730 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9731
9733 }
9734
9735
9736
9739 {
9740 if (!IsMagazine())
9742
9744 }
9745
9746
9747
9748
9749
9754 {
9755 return true;
9756 }
9757
9759 {
9761 }
9762
9763
9764
9765
9766
9768 {
9769 if (parent)
9770 {
9771 if (parent.IsInherited(DayZInfected))
9772 return true;
9773
9774 if (!parent.IsRuined())
9775 return true;
9776 }
9777
9778 return true;
9779 }
9780
9782 {
9783 if (!super.CanPutAsAttachment(parent))
9784 {
9785 return false;
9786 }
9787
9788 if (!IsRuined() && !parent.IsRuined())
9789 {
9790 return true;
9791 }
9792
9793 return false;
9794 }
9795
9797 {
9798
9799
9800
9801
9802 return super.CanReceiveItemIntoCargo(item);
9803 }
9804
9806 {
9807
9808
9809
9810
9811 GameInventory attachmentInv = attachment.GetInventory();
9813 {
9814 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9815 return false;
9816 }
9817
9818 InventoryLocation loc = new InventoryLocation();
9819 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9820 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9821 return false;
9822
9823 return super.CanReceiveAttachment(attachment, slotId);
9824 }
9825
9827 {
9828 if (!super.CanReleaseAttachment(attachment))
9829 return false;
9830
9831 return GetInventory().AreChildrenAccessible();
9832 }
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9855 {
9856 int id = muzzle_owner.GetMuzzleID();
9857 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9858
9859 if (WPOF_array)
9860 {
9861 for (int i = 0; i < WPOF_array.Count(); i++)
9862 {
9863 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9864
9865 if (WPOF)
9866 {
9867 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9868 }
9869 }
9870 }
9871 }
9872
9873
9875 {
9876 int id = muzzle_owner.GetMuzzleID();
9878
9879 if (WPOBE_array)
9880 {
9881 for (int i = 0; i < WPOBE_array.Count(); i++)
9882 {
9883 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9884
9885 if (WPOBE)
9886 {
9887 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9888 }
9889 }
9890 }
9891 }
9892
9893
9895 {
9896 int id = muzzle_owner.GetMuzzleID();
9897 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9898
9899 if (WPOOH_array)
9900 {
9901 for (int i = 0; i < WPOOH_array.Count(); i++)
9902 {
9903 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9904
9905 if (WPOOH)
9906 {
9907 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9908 }
9909 }
9910 }
9911 }
9912
9913
9915 {
9916 int id = muzzle_owner.GetMuzzleID();
9917 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9918
9919 if (WPOOH_array)
9920 {
9921 for (int i = 0; i < WPOOH_array.Count(); i++)
9922 {
9923 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9924
9925 if (WPOOH)
9926 {
9927 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9928 }
9929 }
9930 }
9931 }
9932
9933
9935 {
9936 int id = muzzle_owner.GetMuzzleID();
9937 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9938
9939 if (WPOOH_array)
9940 {
9941 for (int i = 0; i < WPOOH_array.Count(); i++)
9942 {
9943 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9944
9945 if (WPOOH)
9946 {
9947 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9948 }
9949 }
9950 }
9951 }
9952
9953
9954
9956 {
9958 {
9959 return true;
9960 }
9961
9962 return false;
9963 }
9964
9966 {
9968 {
9969 return true;
9970 }
9971
9972 return false;
9973 }
9974
9976 {
9978 {
9979 return true;
9980 }
9981
9982 return false;
9983 }
9984
9986 {
9987 return false;
9988 }
9989
9992 {
9993 return UATimeSpent.DEFAULT_DEPLOY;
9994 }
9995
9996
9997
9998
10000 {
10002 SetSynchDirty();
10003 }
10004
10006 {
10008 }
10009
10010
10012 {
10013 return false;
10014 }
10015
10018 {
10019 string att_type = "None";
10020
10021 if (ConfigIsExisting("soundAttType"))
10022 {
10023 att_type = ConfigGetString("soundAttType");
10024 }
10025
10027 }
10028
10030 {
10032 }
10033
10034
10035
10036
10037
10041
10043 {
10046
10048 }
10049
10050
10052 {
10054 return;
10055
10057
10060
10063
10064 SoundParameters params = new SoundParameters();
10068 }
10069
10070
10072 {
10074 return;
10075
10077 SetSynchDirty();
10078
10081 }
10082
10083
10085 {
10087 return;
10088
10090 SetSynchDirty();
10091
10094 }
10095
10097 {
10099 }
10100
10102 {
10104 }
10105
10108 {
10109 if (!
GetGame().IsDedicatedServer())
10110 {
10111 if (ConfigIsExisting("attachSoundSet"))
10112 {
10113 string cfg_path = "";
10114 string soundset = "";
10115 string type_name =
GetType();
10116
10119 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10120 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10121
10122 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10123 {
10124 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10125 {
10126 if (cfg_slot_array[i] == slot_type)
10127 {
10128 soundset = cfg_soundset_array[i];
10129 break;
10130 }
10131 }
10132 }
10133
10134 if (soundset != "")
10135 {
10136 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10138 }
10139 }
10140 }
10141 }
10142
10144 {
10145
10146 }
10147
10148 void OnApply(PlayerBase player);
10149
10151 {
10152 return 1.0;
10153 };
10154
10156 {
10158 }
10159
10161 {
10163 }
10164
10166
10168 {
10169 SetDynamicPhysicsLifeTime(0.01);
10171 }
10172
10174 {
10175 array<string> zone_names = new array<string>;
10176 GetDamageZones(zone_names);
10177 for (int i = 0; i < zone_names.Count(); i++)
10178 {
10179 SetHealthMax(zone_names.Get(i),"Health");
10180 }
10181 SetHealthMax("","Health");
10182 }
10183
10186 {
10187 float global_health = GetHealth01("","Health");
10188 array<string> zones = new array<string>;
10189 GetDamageZones(zones);
10190
10191 for (int i = 0; i < zones.Count(); i++)
10192 {
10193 SetHealth01(zones.Get(i),"Health",global_health);
10194 }
10195 }
10196
10199 {
10200 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10201 }
10202
10204 {
10205 if (!hasRootAsPlayer)
10206 {
10207 if (refParentIB)
10208 {
10209
10210 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10211 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10212
10213 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10214 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10215
10218 }
10219 else
10220 {
10221
10224 }
10225 }
10226 }
10227
10229 {
10231 {
10232 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10233 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10234 {
10235 float heatPermCoef = 1.0;
10237 while (ent)
10238 {
10239 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10240 ent = ent.GetHierarchyParent();
10241 }
10242
10243 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10244 }
10245 }
10246 }
10247
10249 {
10250
10251 EntityAI parent = GetHierarchyParent();
10252 if (!parent)
10253 {
10254 hasParent = false;
10255 hasRootAsPlayer = false;
10256 }
10257 else
10258 {
10259 hasParent = true;
10260 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10261 refParentIB =
ItemBase.Cast(parent);
10262 }
10263 }
10264
10265 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10266 {
10267
10268 }
10269
10271 {
10272
10273 return false;
10274 }
10275
10277 {
10278
10279
10280 return false;
10281 }
10282
10284 {
10285
10286 return false;
10287 }
10288
10291 {
10292 return !GetIsFrozen() &&
IsOpen();
10293 }
10294
10296 {
10297 bool hasParent = false, hasRootAsPlayer = false;
10299
10300 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10301 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10302
10303 if (wwtu || foodDecay)
10304 {
10308
10309 if (processWetness || processTemperature || processDecay)
10310 {
10312
10313 if (processWetness)
10314 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10315
10316 if (processTemperature)
10318
10319 if (processDecay)
10320 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10321 }
10322 }
10323 }
10324
10327 {
10329 }
10330
10332 {
10335
10336 return super.GetTemperatureFreezeThreshold();
10337 }
10338
10340 {
10343
10344 return super.GetTemperatureThawThreshold();
10345 }
10346
10348 {
10351
10352 return super.GetItemOverheatThreshold();
10353 }
10354
10356 {
10358 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10359
10360 return super.GetTemperatureFreezeTime();
10361 }
10362
10364 {
10366 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10367
10368 return super.GetTemperatureThawTime();
10369 }
10370
10375
10377 {
10378 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10379 }
10380
10382 {
10383 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10384 }
10385
10388 {
10390 }
10391
10393 {
10395 }
10396
10398 {
10400 }
10401
10404 {
10405 return null;
10406 }
10407
10410 {
10411 return false;
10412 }
10413
10415 {
10417 {
10420 if (!trg)
10421 {
10423 explosive = this;
10424 }
10425
10426 explosive.PairRemote(trg);
10428
10429 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10430 trg.SetPersistentPairID(persistentID);
10431 explosive.SetPersistentPairID(persistentID);
10432
10433 return true;
10434 }
10435 return false;
10436 }
10437
10440 {
10441 float ret = 1.0;
10444 ret *= GetHealth01();
10445
10446 return ret;
10447 }
10448
10449 #ifdef DEVELOPER
10450 override void SetDebugItem()
10451 {
10452 super.SetDebugItem();
10453 _itemBase = this;
10454 }
10455
10457 {
10458 string text = super.GetDebugText();
10459
10461 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10462
10463 return text;
10464 }
10465 #endif
10466
10468 {
10469 return true;
10470 }
10471
10473
10475
10477 {
10480 }
10481
10482
10490
10506}
10507
10509{
10511 if (entity)
10512 {
10513 bool is_item = entity.IsInherited(
ItemBase);
10514 if (is_item && full_quantity)
10515 {
10518 }
10519 }
10520 else
10521 {
10523 return NULL;
10524 }
10525 return entity;
10526}
10527
10529{
10530 if (item)
10531 {
10532 if (health > 0)
10533 item.SetHealth("", "", health);
10534
10535 if (item.CanHaveTemperature())
10536 {
10538 if (item.CanFreeze())
10539 item.SetFrozen(false);
10540 }
10541
10542 if (item.HasEnergyManager())
10543 {
10544 if (quantity >= 0)
10545 {
10546 item.GetCompEM().SetEnergy0To1(quantity);
10547 }
10548 else
10549 {
10551 }
10552 }
10553 else if (item.IsMagazine())
10554 {
10555 Magazine mag = Magazine.Cast(item);
10556 if (quantity >= 0)
10557 {
10558 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10559 }
10560 else
10561 {
10563 }
10564
10565 }
10566 else
10567 {
10568 if (quantity >= 0)
10569 {
10570 item.SetQuantityNormalized(quantity, false);
10571 }
10572 else
10573 {
10575 }
10576
10577 }
10578 }
10579}
10580
10581#ifdef DEVELOPER
10583#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.