5678{
5680 {
5681 return true;
5682 }
5683};
5684
5685
5686
5688{
5692
5694
5697
5698
5699
5700
5701
5710
5716
5721
5726
5747 protected bool m_IsResultOfSplit
5748
5750
5755
5756
5757
5759
5763
5764
5765
5767
5770
5771
5772
5778
5779
5787
5790
5791
5793
5794
5796
5797
5802
5803
5808
5809
5811
5812
5814 {
5819
5820 if (!
GetGame().IsDedicatedServer())
5821 {
5823 {
5825
5827 {
5829 }
5830 }
5831
5834 }
5835
5836 m_OldLocation = null;
5837
5839 {
5841 }
5842
5843 if (ConfigIsExisting("headSelectionsToHide"))
5844 {
5847 }
5848
5850 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5851 {
5853 }
5854
5856
5857 m_IsResultOfSplit = false;
5858
5860 }
5861
5863 {
5864 super.InitItemVariables();
5865
5871 m_Count = ConfigGetInt(
"count");
5872
5875
5880
5883
5888
5900
5904
5905
5908 if (ConfigIsExisting("canBeSplit"))
5909 {
5912 }
5913
5915 if (ConfigIsExisting("itemBehaviour"))
5917
5918
5921 RegisterNetSyncVariableInt("m_VarLiquidType");
5922 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5923
5924 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5925 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5926 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5927
5928 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5929 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5930 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5931 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5932
5933 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5934 RegisterNetSyncVariableBool("m_IsTakeable");
5935 RegisterNetSyncVariableBool("m_IsHologram");
5936
5939 {
5942 }
5943
5945
5947 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5949
5950 }
5951
5953 {
5955 }
5956
5958 {
5961 {
5966 }
5967 }
5968
5969 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5970 {
5972 {
5975 }
5976
5978 }
5979
5981 {
5987 }
5988
5990
5992 {
5994
5995 if (!action)
5996 {
5997 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5998 return;
5999 }
6000
6002 if (!ai)
6003 {
6005 return;
6006 }
6007
6009 if (!action_array)
6010 {
6011 action_array = new array<ActionBase_Basic>;
6013 }
6014 if (LogManager.IsActionLogEnable())
6015 {
6016 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6017 }
6018
6019 if (action_array.Find(action) != -1)
6020 {
6021 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6022 }
6023 else
6024 {
6025 action_array.Insert(action);
6026 }
6027 }
6028
6030 {
6032 ActionBase action = player.GetActionManager().GetAction(actionName);
6035
6036 if (action_array)
6037 {
6038 action_array.RemoveItem(action);
6039 }
6040 }
6041
6042
6043
6045 {
6046 ActionOverrideData overrideData = new ActionOverrideData();
6050
6052 if (!actionMap)
6053 {
6056 }
6057
6058 actionMap.Insert(this.
Type(), overrideData);
6059
6060 }
6061
6063
6065
6066
6068 {
6071
6074
6075 string config_to_search = "CfgVehicles";
6076 string muzzle_owner_config;
6077
6079 {
6080 if (IsInherited(Weapon))
6081 config_to_search = "CfgWeapons";
6082
6083 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6084
6085 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6086
6088
6089 if (config_OnFire_subclass_count > 0)
6090 {
6091 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6092
6093 for (int i = 0; i < config_OnFire_subclass_count; i++)
6094 {
6095 string particle_class = "";
6097 string config_OnFire_entry = config_OnFire_class + particle_class;
6098 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6099 WPOF_array.Insert(WPOF);
6100 }
6101
6102
6104 }
6105 }
6106
6108 {
6109 config_to_search = "CfgWeapons";
6110 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6111
6112 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6113
6115
6116 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6117 {
6118 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6119
6120 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6121 {
6122 string particle_class2 = "";
6124 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6125 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6126 WPOBE_array.Insert(WPOBE);
6127 }
6128
6129
6131 }
6132 }
6133 }
6134
6135
6137 {
6140
6142 {
6143 string config_to_search = "CfgVehicles";
6144
6145 if (IsInherited(Weapon))
6146 config_to_search = "CfgWeapons";
6147
6148 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6149 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6150
6151 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6152 {
6153
6155
6157 {
6159 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6161 return;
6162 }
6163
6166
6167
6168
6170 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6171
6172 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6173 {
6174 string particle_class = "";
6176 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6178
6179 if (entry_type == CT_CLASS)
6180 {
6181 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6182 WPOOH_array.Insert(WPOF);
6183 }
6184 }
6185
6186
6188 }
6189 }
6190 }
6191
6193 {
6195 }
6196
6198 {
6200 {
6202
6205
6208
6209 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6210 }
6211 }
6212
6214 {
6216 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6217
6219 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6220
6222 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6223
6225 {
6227 }
6228 }
6229
6231 {
6233 }
6234
6236 {
6239 else
6241
6243 {
6246 }
6247 else
6248 {
6251
6254 }
6255
6257 }
6258
6260 {
6262 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6263 }
6264
6266 {
6268 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6270 }
6271
6273 {
6275 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6276 }
6277
6279 {
6282
6283 OverheatingParticle OP = new OverheatingParticle();
6288
6290 }
6291
6293 {
6296
6297 return -1;
6298 }
6299
6301 {
6303 {
6306
6307 for (int i = count; i > 0; --i)
6308 {
6309 int id = i - 1;
6312
6315
6316 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6317 {
6318 if (p)
6319 {
6322 }
6323 }
6324 }
6325 }
6326 }
6327
6329 {
6331 {
6333 {
6334 int id = i - 1;
6336
6337 if (OP)
6338 {
6340
6341 if (p)
6342 {
6344 }
6345
6346 delete OP;
6347 }
6348 }
6349
6352 }
6353 }
6354
6357 {
6358 return 0.0;
6359 }
6360
6361
6363 {
6364 return 250;
6365 }
6366
6368 {
6369 return 0;
6370 }
6371
6374 {
6376 return true;
6377
6378 return false;
6379 }
6380
6383 {
6386
6388 {
6390 }
6391 else
6392 {
6393
6395 }
6396
6398 }
6399
6406 {
6407 return -1;
6408 }
6409
6410
6411
6412
6414 {
6416 {
6418 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6419
6420 if (r_index >= 0)
6421 {
6422 InventoryLocation r_il = new InventoryLocation;
6423 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6424
6425 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6428 {
6429 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6430 }
6432 {
6433 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6434 }
6435
6436 }
6437
6438 player.GetHumanInventory().ClearUserReservedLocation(this);
6439 }
6440
6443 }
6444
6445
6446
6447
6449 {
6450 return ItemBase.m_DebugActionsMask;
6451 }
6452
6454 {
6455 return ItemBase.m_DebugActionsMask & mask;
6456 }
6457
6459 {
6460 ItemBase.m_DebugActionsMask = mask;
6461 }
6462
6464 {
6465 ItemBase.m_DebugActionsMask |= mask;
6466 }
6467
6469 {
6470 ItemBase.m_DebugActionsMask &= ~mask;
6471 }
6472
6474 {
6476 {
6478 }
6479 else
6480 {
6482 }
6483 }
6484
6485
6487 {
6488 if (GetEconomyProfile())
6489 {
6490 float q_max = GetEconomyProfile().GetQuantityMax();
6491 if (q_max > 0)
6492 {
6493 float q_min = GetEconomyProfile().GetQuantityMin();
6494 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6495
6497 {
6498 ComponentEnergyManager comp = GetCompEM();
6500 {
6502 }
6503 }
6505 {
6507
6508 }
6509
6510 }
6511 }
6512 }
6513
6516 {
6517 EntityAI parent = GetHierarchyParent();
6518
6519 if (parent)
6520 {
6521 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6522 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6523 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6524 }
6525 }
6526
6529 {
6530 EntityAI parent = GetHierarchyParent();
6531
6532 if (parent)
6533 {
6534 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6535 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6536 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6537 }
6538 }
6539
6541 {
6542
6543
6544
6545
6547
6549 {
6550 if (ScriptInputUserData.CanStoreInputUserData())
6551 {
6552 ScriptInputUserData ctx = new ScriptInputUserData;
6558 ctx.
Write(use_stack_max);
6561
6563 {
6564 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6565 }
6566 }
6567 }
6568 else if (!
GetGame().IsMultiplayer())
6569 {
6571 }
6572 }
6573
6575 {
6577 }
6578
6580 {
6582 }
6583
6585 {
6587 }
6588
6590 {
6591
6592 return false;
6593 }
6594
6596 {
6597 return false;
6598 }
6599
6603 {
6604 return false;
6605 }
6606
6608 {
6609 return "";
6610 }
6611
6613
6615 {
6616 return false;
6617 }
6618
6620 {
6621 return true;
6622 }
6623
6624
6625
6627 {
6628 return true;
6629 }
6630
6632 {
6633 return true;
6634 }
6635
6637 {
6638 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6640 }
6641
6643 {
6645 }
6646
6648 {
6650 if (!is_being_placed)
6652 SetSynchDirty();
6653 }
6654
6655
6657
6659 {
6661 }
6662
6664 {
6666 }
6667
6669 {
6670 return 1;
6671 }
6672
6674 {
6675 return false;
6676 }
6677
6679 {
6681 SetSynchDirty();
6682 }
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6719 {
6720 super.OnMovedInsideCargo(container);
6721
6722 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6723 }
6724
6725 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6726 {
6727 super.EEItemLocationChanged(oldLoc,newLoc);
6728
6729 PlayerBase new_player = null;
6730 PlayerBase old_player = null;
6731
6732 if (newLoc.GetParent())
6733 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6734
6735 if (oldLoc.GetParent())
6736 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6737
6739 {
6740 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6741
6742 if (r_index >= 0)
6743 {
6744 InventoryLocation r_il = new InventoryLocation;
6745 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6746
6747 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6750 {
6751 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6752 }
6754 {
6755 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6756 }
6757
6758 }
6759 }
6760
6762 {
6763 if (new_player)
6764 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6765
6766 if (new_player == old_player)
6767 {
6768
6769 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6770 {
6772 {
6773 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6774 {
6775 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6776 }
6777 }
6778 else
6779 {
6780 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6781 }
6782 }
6783
6784 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6785 {
6786 int type = oldLoc.GetType();
6788 {
6789 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6790 }
6792 {
6793 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6794 }
6795 }
6796 if (!m_OldLocation)
6797 {
6798 m_OldLocation = new InventoryLocation;
6799 }
6800 m_OldLocation.Copy(oldLoc);
6801 }
6802 else
6803 {
6804 if (m_OldLocation)
6805 {
6806 m_OldLocation.Reset();
6807 }
6808 }
6809
6811 }
6812 else
6813 {
6814 if (new_player)
6815 {
6816 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6817 if (res_index >= 0)
6818 {
6819 InventoryLocation il = new InventoryLocation;
6820 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6822 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6825 {
6826 il.
GetParent().GetOnReleaseLock().Invoke(it);
6827 }
6829 {
6831 }
6832
6833 }
6834 }
6836 {
6837
6839 }
6840
6841 if (m_OldLocation)
6842 {
6843 m_OldLocation.Reset();
6844 }
6845 }
6846 }
6847
6848 override void EOnContact(IEntity other, Contact extra)
6849 {
6851 {
6852 int liquidType = -1;
6854 if (impactSpeed > 0.0)
6855 {
6857 #ifndef SERVER
6859 #else
6861 SetSynchDirty();
6862 #endif
6864 }
6865 }
6866
6867 #ifdef SERVER
6868 if (GetCompEM() && GetCompEM().IsPlugged())
6869 {
6870 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6871 GetCompEM().UnplugThis();
6872 }
6873 #endif
6874 }
6875
6877
6879 {
6881 }
6882
6884 {
6885
6886 }
6887
6889 {
6890 super.OnItemLocationChanged(old_owner, new_owner);
6891
6892 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6893 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6894
6895 if (!relatedPlayer && playerNew)
6896 relatedPlayer = playerNew;
6897
6898 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6899 {
6901 if (actionMgr)
6902 {
6903 ActionBase currentAction = actionMgr.GetRunningAction();
6904 if (currentAction)
6906 }
6907 }
6908
6909 Man ownerPlayerOld = null;
6910 Man ownerPlayerNew = null;
6911
6912 if (old_owner)
6913 {
6914 if (old_owner.
IsMan())
6915 {
6916 ownerPlayerOld = Man.Cast(old_owner);
6917 }
6918 else
6919 {
6920 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6921 }
6922 }
6923 else
6924 {
6926 {
6928
6929 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6930 {
6931 GetCompEM().UnplugThis();
6932 }
6933 }
6934 }
6935
6936 if (new_owner)
6937 {
6938 if (new_owner.
IsMan())
6939 {
6940 ownerPlayerNew = Man.Cast(new_owner);
6941 }
6942 else
6943 {
6944 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6945 }
6946 }
6947
6948 if (ownerPlayerOld != ownerPlayerNew)
6949 {
6950 if (ownerPlayerOld)
6951 {
6952 array<EntityAI> subItemsExit = new array<EntityAI>;
6954 for (int i = 0; i < subItemsExit.Count(); i++)
6955 {
6958 }
6959 }
6960
6961 if (ownerPlayerNew)
6962 {
6963 array<EntityAI> subItemsEnter = new array<EntityAI>;
6965 for (int j = 0; j < subItemsEnter.Count(); j++)
6966 {
6969 }
6970 }
6971 }
6972 else if (ownerPlayerNew != null)
6973 {
6974 PlayerBase nplayer;
6975 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6976 {
6977 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6979 for (int k = 0; k < subItemsUpdate.Count(); k++)
6980 {
6982 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6983 }
6984 }
6985 }
6986
6987 if (old_owner)
6988 old_owner.OnChildItemRemoved(this);
6989 if (new_owner)
6990 new_owner.OnChildItemReceived(this);
6991 }
6992
6993
6995 {
6996 super.EEDelete(parent);
6997 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6998 if (player)
6999 {
7001
7002 if (player.IsAlive())
7003 {
7004 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7005 if (r_index >= 0)
7006 {
7007 InventoryLocation r_il = new InventoryLocation;
7008 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7009
7010 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7013 {
7014 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7015 }
7017 {
7018 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7019 }
7020
7021 }
7022
7023 player.RemoveQuickBarEntityShortcut(this);
7024 }
7025 }
7026 }
7027
7029 {
7030 super.EEKilled(killer);
7031
7034 {
7035 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7036 {
7037 if (IsMagazine())
7038 {
7039 if (Magazine.Cast(this).GetAmmoCount() > 0)
7040 {
7042 }
7043 }
7044 else
7045 {
7047 }
7048 }
7049 }
7050 }
7051
7053 {
7054 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7055
7056 super.OnWasAttached(parent, slot_id);
7057
7060
7062 }
7063
7065 {
7066 super.OnWasDetached(parent, slot_id);
7067
7070 }
7071
7073 {
7074 int idx;
7077
7078 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7079 if (inventory_slots.Count() < 1)
7080 {
7081 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7082 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7083 }
7084 else
7085 {
7086 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7087 }
7088
7089 idx = inventory_slots.Find(slot);
7090 if (idx < 0)
7091 return "";
7092
7093 return attach_types.Get(idx);
7094 }
7095
7097 {
7098 int idx = -1;
7099 string slot;
7100
7103
7104 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7105 if (inventory_slots.Count() < 1)
7106 {
7107 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7108 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7109 }
7110 else
7111 {
7112 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7113 if (detach_types.Count() < 1)
7114 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7115 }
7116
7117 for (int i = 0; i < inventory_slots.Count(); i++)
7118 {
7119 slot = inventory_slots.Get(i);
7120 }
7121
7122 if (slot != "")
7123 {
7124 if (detach_types.Count() == 1)
7125 idx = 0;
7126 else
7127 idx = inventory_slots.Find(slot);
7128 }
7129 if (idx < 0)
7130 return "";
7131
7132 return detach_types.Get(idx);
7133 }
7134
7136 {
7137
7139
7140
7141 float min_time = 1;
7142 float max_time = 3;
7143 float delay = Math.RandomFloat(min_time, max_time);
7144
7145 explode_timer.Run(delay, this, "DoAmmoExplosion");
7146 }
7147
7149 {
7150 Magazine magazine = Magazine.Cast(this);
7151 int pop_sounds_count = 6;
7152 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7153
7154
7155 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7156 string sound_name = pop_sounds[ sound_idx ];
7158
7159
7160 magazine.ServerAddAmmoCount(-1);
7161
7162
7163 float min_temp_to_explode = 100;
7164
7165 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7166 {
7168 }
7169 }
7170
7171
7172 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7173 {
7174 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7175
7176 const int CHANCE_DAMAGE_CARGO = 4;
7177 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7178 const int CHANCE_DAMAGE_NOTHING = 2;
7179
7181 {
7182 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7183 int chances;
7184 int rnd;
7185
7186 if (GetInventory().GetCargo())
7187 {
7188 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7189 rnd = Math.RandomInt(0,chances);
7190
7191 if (rnd < CHANCE_DAMAGE_CARGO)
7192 {
7194 }
7195 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7196 {
7198 }
7199 }
7200 else
7201 {
7202 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7203 rnd = Math.RandomInt(0,chances);
7204
7205 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7206 {
7208 }
7209 }
7210 }
7211 }
7212
7214 {
7215 if (GetInventory().GetCargo())
7216 {
7217 int item_count = GetInventory().GetCargo().GetItemCount();
7218 if (item_count > 0)
7219 {
7220 int random_pick = Math.RandomInt(0, item_count);
7222 if (!item.IsExplosive())
7223 {
7224 item.AddHealth("","",damage);
7225 return true;
7226 }
7227 }
7228 }
7229 return false;
7230 }
7231
7233 {
7234 int attachment_count = GetInventory().AttachmentCount();
7235 if (attachment_count > 0)
7236 {
7237 int random_pick = Math.RandomInt(0, attachment_count);
7238 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7239 if (!attachment.IsExplosive())
7240 {
7241 attachment.AddHealth("","",damage);
7242 return true;
7243 }
7244 }
7245 return false;
7246 }
7247
7249 {
7251 }
7252
7254 {
7256 return GetInventory().CanRemoveEntity();
7257
7258 return false;
7259 }
7260
7262 {
7264 return;
7265
7267 {
7268 if (ScriptInputUserData.CanStoreInputUserData())
7269 {
7270 ScriptInputUserData ctx = new ScriptInputUserData;
7275 ctx.
Write(destination_entity);
7279 }
7280 }
7281 else if (!
GetGame().IsMultiplayer())
7282 {
7284 }
7285 }
7286
7288 {
7290 return;
7291
7292 float split_quantity_new;
7296 InventoryLocation loc = new InventoryLocation;
7297
7298 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7299 {
7301 split_quantity_new = stack_max;
7302 else
7304
7305 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7306 if (new_item)
7307 {
7308 new_item.SetResultOfSplit(true);
7309 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7311 new_item.SetQuantity(split_quantity_new);
7312 }
7313 }
7314 else if (destination_entity && slot_id == -1)
7315 {
7316 if (quantity > stack_max)
7317 split_quantity_new = stack_max;
7318 else
7319 split_quantity_new = quantity;
7320
7322 {
7325 }
7326
7327 if (new_item)
7328 {
7329 new_item.SetResultOfSplit(true);
7330 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7332 new_item.SetQuantity(split_quantity_new);
7333 }
7334 }
7335 else
7336 {
7337 if (stack_max != 0)
7338 {
7340 {
7342 }
7343
7344 if (split_quantity_new == 0)
7345 {
7346 if (!
GetGame().IsMultiplayer())
7347 player.PhysicalPredictiveDropItem(this);
7348 else
7349 player.ServerDropEntity(this);
7350 return;
7351 }
7352
7354
7355 if (new_item)
7356 {
7357 new_item.SetResultOfSplit(true);
7358 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7360 new_item.SetQuantity(stack_max);
7361 new_item.PlaceOnSurface();
7362 }
7363 }
7364 }
7365 }
7366
7368 {
7370 return;
7371
7372 float split_quantity_new;
7376 InventoryLocation loc = new InventoryLocation;
7377
7378 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7379 {
7381 split_quantity_new = stack_max;
7382 else
7384
7385 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7386 if (new_item)
7387 {
7388 new_item.SetResultOfSplit(true);
7389 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7391 new_item.SetQuantity(split_quantity_new);
7392 }
7393 }
7394 else if (destination_entity && slot_id == -1)
7395 {
7396 if (quantity > stack_max)
7397 split_quantity_new = stack_max;
7398 else
7399 split_quantity_new = quantity;
7400
7402 {
7405 }
7406
7407 if (new_item)
7408 {
7409 new_item.SetResultOfSplit(true);
7410 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7412 new_item.SetQuantity(split_quantity_new);
7413 }
7414 }
7415 else
7416 {
7417 if (stack_max != 0)
7418 {
7420 {
7422 }
7423
7425
7426 if (new_item)
7427 {
7428 new_item.SetResultOfSplit(true);
7429 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7431 new_item.SetQuantity(stack_max);
7432 new_item.PlaceOnSurface();
7433 }
7434 }
7435 }
7436 }
7437
7439 {
7441 return;
7442
7444 {
7445 if (ScriptInputUserData.CanStoreInputUserData())
7446 {
7447 ScriptInputUserData ctx = new ScriptInputUserData;
7452 dst.WriteToContext(ctx);
7454 }
7455 }
7456 else if (!
GetGame().IsMultiplayer())
7457 {
7459 }
7460 }
7461
7463 {
7465 return;
7466
7468 {
7469 if (ScriptInputUserData.CanStoreInputUserData())
7470 {
7471 ScriptInputUserData ctx = new ScriptInputUserData;
7476 ctx.
Write(destination_entity);
7482 }
7483 }
7484 else if (!
GetGame().IsMultiplayer())
7485 {
7487 }
7488 }
7489
7491 {
7493 }
7494
7496 {
7498 return this;
7499
7501 float split_quantity_new;
7503 if (dst.IsValid())
7504 {
7505 int slot_id = dst.GetSlot();
7507
7508 if (quantity > stack_max)
7509 split_quantity_new = stack_max;
7510 else
7511 split_quantity_new = quantity;
7512
7514
7515 if (new_item)
7516 {
7517 new_item.SetResultOfSplit(true);
7518 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7521 }
7522
7523 return new_item;
7524 }
7525
7526 return null;
7527 }
7528
7530 {
7532 return;
7533
7535 float split_quantity_new;
7537 if (destination_entity)
7538 {
7540 if (quantity > stackable)
7541 split_quantity_new = stackable;
7542 else
7543 split_quantity_new = quantity;
7544
7545 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7546 if (new_item)
7547 {
7548 new_item.SetResultOfSplit(true);
7549 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7551 new_item.SetQuantity(split_quantity_new);
7552 }
7553 }
7554 }
7555
7557 {
7559 return;
7560
7562 {
7563 if (ScriptInputUserData.CanStoreInputUserData())
7564 {
7565 ScriptInputUserData ctx = new ScriptInputUserData;
7570 ItemBase destination_entity =
this;
7571 ctx.
Write(destination_entity);
7575 }
7576 }
7577 else if (!
GetGame().IsMultiplayer())
7578 {
7580 }
7581 }
7582
7584 {
7586 return;
7587
7589 float split_quantity_new;
7591 if (player)
7592 {
7594 if (quantity > stackable)
7595 split_quantity_new = stackable;
7596 else
7597 split_quantity_new = quantity;
7598
7599 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7600 new_item =
ItemBase.Cast(in_hands);
7601 if (new_item)
7602 {
7603 new_item.SetResultOfSplit(true);
7604 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7606 new_item.SetQuantity(split_quantity_new);
7607 }
7608 }
7609 }
7610
7612 {
7614 return;
7615
7617 float split_quantity_new = Math.Floor(quantity * 0.5);
7618
7620
7621 if (new_item)
7622 {
7623 if (new_item.GetQuantityMax() < split_quantity_new)
7624 {
7625 split_quantity_new = new_item.GetQuantityMax();
7626 }
7627
7628 new_item.SetResultOfSplit(true);
7629 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7630
7632 {
7635 }
7636 else
7637 {
7640 }
7641 }
7642 }
7643
7645 {
7647 return;
7648
7650 float split_quantity_new = Math.Floor(quantity / 2);
7651
7652 InventoryLocation invloc = new InventoryLocation;
7654
7656 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7657
7658 if (new_item)
7659 {
7660 if (new_item.GetQuantityMax() < split_quantity_new)
7661 {
7662 split_quantity_new = new_item.GetQuantityMax();
7663 }
7665 {
7668 }
7669 else
7670 {
7673 }
7674 }
7675 }
7676
7679 {
7680 SetWeightDirty();
7682
7683 if (parent)
7684 parent.OnAttachmentQuantityChangedEx(this, delta);
7685
7687 {
7689 {
7691 }
7693 {
7694 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7696 }
7697 }
7698
7699 }
7700
7703 {
7704
7705 }
7706
7709 {
7711 }
7712
7714 {
7715 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7716
7718 {
7719 if (newLevel == GameConstants.STATE_RUINED)
7720 {
7722 EntityAI parent = GetHierarchyParent();
7723 if (parent && parent.IsFireplace())
7724 {
7725 CargoBase cargo = GetInventory().GetCargo();
7726 if (cargo)
7727 {
7729 {
7731 }
7732 }
7733 }
7734 }
7735
7737 {
7738
7740 return;
7741 }
7742
7743 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7744 {
7746 }
7747 }
7748 }
7749
7750
7752 {
7753 super.OnRightClick();
7754
7756 {
7758 {
7759 if (ScriptInputUserData.CanStoreInputUserData())
7760 {
7761 vector m4[4];
7763
7764 EntityAI root = GetHierarchyRoot();
7765
7766 InventoryLocation dst = new InventoryLocation;
7768 {
7769 if (root)
7770 {
7771 root.GetTransform(m4);
7773 }
7774 else
7775 GetInventory().GetCurrentInventoryLocation(dst);
7776 }
7777 else
7778 {
7780
7781
7782 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7783 {
7784 if (root)
7785 {
7786 root.GetTransform(m4);
7788 }
7789 else
7790 GetInventory().GetCurrentInventoryLocation(dst);
7791 }
7792 else
7793 {
7794 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7795 }
7796 }
7797
7798 ScriptInputUserData ctx = new ScriptInputUserData;
7806 }
7807 }
7808 else if (!
GetGame().IsMultiplayer())
7809 {
7811 }
7812 }
7813 }
7814
7815 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7816 {
7817
7818 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7819 return false;
7820
7821 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7822 return false;
7823
7824
7826 return false;
7827
7828
7829 Magazine mag = Magazine.Cast(this);
7830 if (mag)
7831 {
7832 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7833 return false;
7834
7835 if (stack_max_limit)
7836 {
7837 Magazine other_mag = Magazine.Cast(other_item);
7838 if (other_item)
7839 {
7840 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7841 return false;
7842 }
7843
7844 }
7845 }
7846 else
7847 {
7848
7850 return false;
7851
7853 return false;
7854 }
7855
7856 PlayerBase player = null;
7857 if (CastTo(player, GetHierarchyRootPlayer()))
7858 {
7859 if (player.GetInventory().HasAttachment(this))
7860 return false;
7861
7862 if (player.IsItemsToDelete())
7863 return false;
7864 }
7865
7866 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7867 return false;
7868
7869 int slotID;
7871 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7872 return false;
7873
7874 return true;
7875 }
7876
7878 {
7880 }
7881
7883 {
7884 return m_IsResultOfSplit;
7885 }
7886
7888 {
7889 m_IsResultOfSplit = value;
7890 }
7891
7893 {
7895 }
7896
7898 {
7899 float other_item_quantity = other_item.GetQuantity();
7900 float this_free_space;
7901
7903
7905
7906 if (other_item_quantity > this_free_space)
7907 {
7908 return this_free_space;
7909 }
7910 else
7911 {
7912 return other_item_quantity;
7913 }
7914 }
7915
7917 {
7919 }
7920
7922 {
7924 return;
7925
7926 if (!IsMagazine() && other_item)
7927 {
7929 if (quantity_used != 0)
7930 {
7931 float hp1 = GetHealth01("","");
7932 float hp2 = other_item.GetHealth01("","");
7933 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7934 hpResult = hpResult / (
GetQuantity() + quantity_used);
7935
7936 hpResult *= GetMaxHealth();
7937 Math.Round(hpResult);
7938 SetHealth("", "Health", hpResult);
7939
7941 other_item.AddQuantity(-quantity_used);
7942 }
7943 }
7945 }
7946
7948 {
7949 #ifdef SERVER
7950 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7951 GetHierarchyParent().IncreaseLifetimeUp();
7952 #endif
7953 };
7954
7956 {
7957 PlayerBase p = PlayerBase.Cast(player);
7958
7959 array<int> recipesIds = p.m_Recipes;
7960 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7961 if (moduleRecipesManager)
7962 {
7963 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7964 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7965 }
7966
7967 for (int i = 0;i < recipesIds.Count(); i++)
7968 {
7969 int key = recipesIds.Get(i);
7970 string recipeName = moduleRecipesManager.GetRecipeName(key);
7972 }
7973 }
7974
7975
7976 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7977 {
7978 super.GetDebugActions(outputList);
7979
7980
7985
7986
7990
7994
7995
7998
7999
8001 {
8004 }
8005
8007
8010
8014 }
8015
8016
8017
8018
8020 {
8021 super.OnAction(action_id, player, ctx);
8022 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8023 {
8024 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8025 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8026 PlayerBase p = PlayerBase.Cast(player);
8027 if (
EActions.RECIPES_RANGE_START < 1000)
8028 {
8029 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8030 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8031 }
8032 }
8033 #ifndef SERVER
8034 else if (action_id ==
EActions.WATCH_PLAYER)
8035 {
8036 PluginDeveloper.SetDeveloperItemClientEx(player);
8037 }
8038 #endif
8040 {
8041 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8042 {
8043 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8044 OnDebugButtonPressServer(id + 1);
8045 }
8046
8047 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8048 {
8049 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8051 }
8052
8053 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8054 {
8055 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8057 }
8058
8059 else if (action_id ==
EActions.ADD_QUANTITY)
8060 {
8061 if (IsMagazine())
8062 {
8063 Magazine mag = Magazine.Cast(this);
8064 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8065 }
8066 else
8067 {
8069 }
8070
8071 if (m_EM)
8072 {
8073 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8074 }
8075
8076 }
8077
8078 else if (action_id ==
EActions.REMOVE_QUANTITY)
8079 {
8080 if (IsMagazine())
8081 {
8082 Magazine mag2 = Magazine.Cast(this);
8083 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8084 }
8085 else
8086 {
8088 }
8089 if (m_EM)
8090 {
8091 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8092 }
8093
8094 }
8095
8096 else if (action_id ==
EActions.SET_QUANTITY_0)
8097 {
8099
8100 if (m_EM)
8101 {
8102 m_EM.SetEnergy(0);
8103 }
8104 }
8105
8106 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8107 {
8109
8110 if (m_EM)
8111 {
8112 m_EM.SetEnergy(m_EM.GetEnergyMax());
8113 }
8114 }
8115
8116 else if (action_id ==
EActions.ADD_HEALTH)
8117 {
8118 AddHealth("","",GetMaxHealth("","Health")/5);
8119 }
8120 else if (action_id ==
EActions.REMOVE_HEALTH)
8121 {
8122 AddHealth("","",-GetMaxHealth("","Health")/5);
8123 }
8124 else if (action_id ==
EActions.DESTROY_HEALTH)
8125 {
8126 SetHealth01("","",0);
8127 }
8128 else if (action_id ==
EActions.WATCH_ITEM)
8129 {
8131 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8132 #ifdef DEVELOPER
8133 SetDebugDeveloper_item(this);
8134 #endif
8135 }
8136
8137 else if (action_id ==
EActions.ADD_TEMPERATURE)
8138 {
8139 AddTemperature(20);
8140
8141 }
8142
8143 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8144 {
8145 AddTemperature(-20);
8146
8147 }
8148
8149 else if (action_id ==
EActions.FLIP_FROZEN)
8150 {
8151 SetFrozen(!GetIsFrozen());
8152
8153 }
8154
8155 else if (action_id ==
EActions.ADD_WETNESS)
8156 {
8158
8159 }
8160
8161 else if (action_id ==
EActions.REMOVE_WETNESS)
8162 {
8164
8165 }
8166
8167 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8168 {
8171
8172
8173 }
8174
8175 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8176 {
8179 }
8180
8181 else if (action_id ==
EActions.MAKE_SPECIAL)
8182 {
8183 auto debugParams = DebugSpawnParams.WithPlayer(player);
8184 OnDebugSpawnEx(debugParams);
8185 }
8186
8187 else if (action_id ==
EActions.DELETE)
8188 {
8189 Delete();
8190 }
8191
8192 }
8193
8194
8195 return false;
8196 }
8197
8198
8199
8200
8204
8207
8208
8209
8211 {
8212 return false;
8213 }
8214
8215
8217 {
8218 return true;
8219 }
8220
8221
8223 {
8224 return true;
8225 }
8226
8227
8228
8230 {
8231 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8233 }
8234
8237 {
8238 return null;
8239 }
8240
8242 {
8243 return false;
8244 }
8245
8247 {
8248 return false;
8249 }
8250
8254
8255
8257 {
8258 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8259 return module_repairing.CanRepair(this, item_repair_kit);
8260 }
8261
8262
8263 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8264 {
8265 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8266 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8267 }
8268
8269
8271 {
8272
8273
8274
8275
8276
8277
8278
8279
8280 return 1;
8281 }
8282
8283
8284
8286 {
8288 }
8289
8290
8291
8293 {
8295 }
8296
8297
8306 {
8307 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8308
8309 if (player)
8310 {
8311 player.MessageStatus(text);
8312 }
8313 }
8314
8315
8324 {
8325 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8326
8327 if (player)
8328 {
8329 player.MessageAction(text);
8330 }
8331 }
8332
8333
8342 {
8343 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8344
8345 if (player)
8346 {
8347 player.MessageFriendly(text);
8348 }
8349 }
8350
8351
8360 {
8361 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8362
8363 if (player)
8364 {
8365 player.MessageImportant(text);
8366 }
8367 }
8368
8370 {
8371 return true;
8372 }
8373
8374
8375 override bool KindOf(
string tag)
8376 {
8377 bool found = false;
8378 string item_name = this.
GetType();
8381
8382 int array_size = item_tag_array.Count();
8383 for (int i = 0; i < array_size; i++)
8384 {
8385 if (item_tag_array.Get(i) == tag)
8386 {
8387 found = true;
8388 break;
8389 }
8390 }
8391 return found;
8392 }
8393
8394
8396 {
8397
8398 super.OnRPC(sender, rpc_type,ctx);
8399
8400
8401 switch (rpc_type)
8402 {
8403 #ifndef SERVER
8404 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8405 Param2<bool, string> p = new Param2<bool, string>(false, "");
8406
8408 return;
8409
8410 bool play = p.param1;
8411 string soundSet = p.param2;
8412
8413 if (play)
8414 {
8416 {
8418 {
8420 }
8421 }
8422 else
8423 {
8425 }
8426 }
8427 else
8428 {
8430 }
8431
8432 break;
8433 #endif
8434
8435 }
8436
8438 {
8440 }
8441 }
8442
8443
8444
8445
8447 {
8448 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8449 return plugin.GetID(
name);
8450 }
8451
8453 {
8454 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8455 return plugin.GetName(id);
8456 }
8457
8460 {
8461
8462
8463 int varFlags;
8464 if (!ctx.
Read(varFlags))
8465 return;
8466
8467 if (varFlags & ItemVariableFlags.FLOAT)
8468 {
8470 }
8471 }
8472
8474 {
8475
8476 super.SerializeNumericalVars(floats_out);
8477
8478
8479
8481 {
8483 }
8484
8486 {
8488 }
8489
8491 {
8493 }
8494
8496 {
8501 }
8502
8504 {
8506 }
8507 }
8508
8510 {
8511
8512 super.DeSerializeNumericalVars(floats);
8513
8514
8515 int index = 0;
8516 int mask = Math.Round(floats.Get(index));
8517
8518 index++;
8519
8521 {
8523 {
8525 }
8526 else
8527 {
8528 float quantity = floats.Get(index);
8530 }
8531 index++;
8532 }
8533
8535 {
8536 float wet = floats.Get(index);
8538 index++;
8539 }
8540
8542 {
8543 int liquidtype = Math.Round(floats.Get(index));
8545 index++;
8546 }
8547
8549 {
8551 index++;
8553 index++;
8555 index++;
8557 index++;
8558 }
8559
8561 {
8562 int cleanness = Math.Round(floats.Get(index));
8564 index++;
8565 }
8566 }
8567
8569 {
8570 super.WriteVarsToCTX(ctx);
8571
8572
8574 {
8576 }
8577
8579 {
8581 }
8582
8584 {
8586 }
8587
8589 {
8590 int r,g,b,a;
8596 }
8597
8599 {
8601 }
8602 }
8603
8605 {
8606 if (!super.ReadVarsFromCTX(ctx,version))
8607 return false;
8608
8609 int intValue;
8610 float value;
8611
8612 if (version < 140)
8613 {
8614 if (!ctx.
Read(intValue))
8615 return false;
8616
8617 m_VariablesMask = intValue;
8618 }
8619
8621 {
8622 if (!ctx.
Read(value))
8623 return false;
8624
8626 {
8628 }
8629 else
8630 {
8632 }
8633 }
8634
8635 if (version < 140)
8636 {
8638 {
8639 if (!ctx.
Read(value))
8640 return false;
8641 SetTemperatureDirect(value);
8642 }
8643 }
8644
8646 {
8647 if (!ctx.
Read(value))
8648 return false;
8650 }
8651
8653 {
8654 if (!ctx.
Read(intValue))
8655 return false;
8657 }
8658
8660 {
8661 int r,g,b,a;
8663 return false;
8665 return false;
8667 return false;
8669 return false;
8670
8672 }
8673
8675 {
8676 if (!ctx.
Read(intValue))
8677 return false;
8679 }
8680
8681 if (version >= 138 && version < 140)
8682 {
8684 {
8685 if (!ctx.
Read(intValue))
8686 return false;
8687 SetFrozen(intValue);
8688 }
8689 }
8690
8691 return true;
8692 }
8693
8694
8696 {
8699 {
8701 }
8702
8703 if (!super.OnStoreLoad(ctx, version))
8704 {
8706 return false;
8707 }
8708
8709 if (version >= 114)
8710 {
8711 bool hasQuickBarIndexSaved;
8712
8713 if (!ctx.
Read(hasQuickBarIndexSaved))
8714 {
8716 return false;
8717 }
8718
8719 if (hasQuickBarIndexSaved)
8720 {
8721 int itmQBIndex;
8722
8723
8724 if (!ctx.
Read(itmQBIndex))
8725 {
8727 return false;
8728 }
8729
8730 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8731 if (itmQBIndex != -1 && parentPlayer)
8732 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8733 }
8734 }
8735 else
8736 {
8737
8738 PlayerBase player;
8739 int itemQBIndex;
8740 if (version ==
int.
MAX)
8741 {
8742 if (!ctx.
Read(itemQBIndex))
8743 {
8745 return false;
8746 }
8747 }
8748 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8749 {
8750
8751 if (!ctx.
Read(itemQBIndex))
8752 {
8754 return false;
8755 }
8756 if (itemQBIndex != -1 && player)
8757 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8758 }
8759 }
8760
8761 if (version < 140)
8762 {
8763
8764 if (!LoadVariables(ctx, version))
8765 {
8767 return false;
8768 }
8769 }
8770
8771
8773 {
8775 return false;
8776 }
8777 if (version >= 132)
8778 {
8780 if (raib)
8781 {
8783 {
8785 return false;
8786 }
8787 }
8788 }
8789
8791 return true;
8792 }
8793
8794
8795
8797 {
8798 super.OnStoreSave(ctx);
8799
8800 PlayerBase player;
8801 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8802 {
8804
8805 int itemQBIndex = -1;
8806 itemQBIndex = player.FindQuickBarEntityIndex(this);
8807 ctx.
Write(itemQBIndex);
8808 }
8809 else
8810 {
8812 }
8813
8815
8817 if (raib)
8818 {
8820 }
8821 }
8822
8823
8825 {
8826 super.AfterStoreLoad();
8827
8829 {
8831 }
8832
8834 {
8837 }
8838 }
8839
8841 {
8842 super.EEOnAfterLoad();
8843
8845 {
8847 }
8848
8851 }
8852
8854 {
8855 return false;
8856 }
8857
8858
8859
8861 {
8863 {
8864 #ifdef PLATFORM_CONSOLE
8865
8867 {
8869 if (menu)
8870 {
8872 }
8873 }
8874 #endif
8875 }
8876
8878 {
8881 }
8882
8884 {
8885 SetWeightDirty();
8887 }
8889 {
8892 }
8893
8895 {
8898 }
8900 {
8903 }
8904
8905 super.OnVariablesSynchronized();
8906 }
8907
8908
8909
8911 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8912 {
8913 if (!IsServerCheck(allow_client))
8914 return false;
8915
8917 return false;
8918
8921
8922 if (value <= (min + 0.001))
8923 value = min;
8924
8925 if (value == min)
8926 {
8927 if (destroy_config)
8928 {
8929 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8930 if (dstr)
8931 {
8933 this.Delete();
8934 return true;
8935 }
8936 }
8937 else if (destroy_forced)
8938 {
8940 this.Delete();
8941 return true;
8942 }
8943
8945 }
8946
8949
8951 {
8953
8954 if (delta)
8956 }
8957
8959
8960 return false;
8961 }
8962
8963
8965 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8966 {
8968 }
8969
8971 {
8974 }
8975
8977 {
8980 }
8981
8984 {
8985 float value_clamped = Math.Clamp(value, 0, 1);
8987 SetQuantity(result, destroy_config, destroy_forced);
8988 }
8989
8990
8993 {
8995 }
8996
8998 {
9000 }
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9012 {
9013 int slot = -1;
9014 if (GetInventory())
9015 {
9016 InventoryLocation il = new InventoryLocation;
9017 GetInventory().GetCurrentInventoryLocation(il);
9019 }
9020
9022 }
9023
9025 {
9026 float quantity_max = 0;
9027
9029 {
9030 if (attSlotID != -1)
9031 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9032
9033 if (quantity_max <= 0)
9035 }
9036
9037 if (quantity_max <= 0)
9039
9040 return quantity_max;
9041 }
9042
9044 {
9046 }
9047
9049 {
9051 }
9052
9053
9055 {
9057 }
9058
9060 {
9062 }
9063
9065 {
9067 }
9068
9069
9071 {
9072
9073 float weightEx = GetWeightEx();
9074 float special = GetInventoryAndCargoWeight();
9075 return weightEx - special;
9076 }
9077
9078
9080 {
9082 }
9083
9085 {
9087 {
9088 #ifdef DEVELOPER
9089 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9090 {
9091 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9093 }
9094 #endif
9095
9097 }
9098 else if (HasEnergyManager())
9099 {
9100 #ifdef DEVELOPER
9101 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9102 {
9103 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9104 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9105 }
9106 #endif
9107 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9108 }
9109 else
9110 {
9111 #ifdef DEVELOPER
9112 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9113 {
9114 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9115 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9116 }
9117 #endif
9118 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9119 }
9120 }
9121
9124 {
9125 int item_count = 0;
9127
9128 if (GetInventory().GetCargo() != NULL)
9129 {
9130 item_count = GetInventory().GetCargo().GetItemCount();
9131 }
9132
9133 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9134 {
9135 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9136 if (item)
9137 item_count += item.GetNumberOfItems();
9138 }
9139 return item_count;
9140 }
9141
9144 {
9145 float weight = 0;
9146 float wetness = 1;
9147 if (include_wetness)
9150 {
9151 weight = wetness * m_ConfigWeight;
9152 }
9154 {
9155 weight = 1;
9156 }
9157 return weight;
9158 }
9159
9160
9161
9163 {
9164 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9165 {
9166 GameInventory inv = GetInventory();
9167 array<EntityAI> items = new array<EntityAI>;
9169 for (int i = 0; i < items.Count(); i++)
9170 {
9172 if (item)
9173 {
9175 }
9176 }
9177 }
9178 }
9179
9180
9181
9182
9184 {
9185 float energy = 0;
9186 if (HasEnergyManager())
9187 {
9188 energy = GetCompEM().GetEnergy();
9189 }
9190 return energy;
9191 }
9192
9193
9195 {
9196 super.OnEnergyConsumed();
9197
9199 }
9200
9202 {
9203 super.OnEnergyAdded();
9204
9206 }
9207
9208
9210 {
9211 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9212 {
9214 {
9215 float energy_0to1 = GetCompEM().GetEnergy0To1();
9217 }
9218 }
9219 }
9220
9221
9223 {
9224 return ConfigGetFloat("heatIsolation");
9225 }
9226
9228 {
9230 }
9231
9233 {
9234 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9235 if (
GetGame().ConfigIsExisting(paramPath))
9237
9238 return 0.0;
9239 }
9240
9242 {
9243 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9244 if (
GetGame().ConfigIsExisting(paramPath))
9246
9247 return 0.0;
9248 }
9249
9250 override void SetWet(
float value,
bool allow_client =
false)
9251 {
9252 if (!IsServerCheck(allow_client))
9253 return;
9254
9257
9259
9260 m_VarWet = Math.Clamp(value, min, max);
9261
9263 {
9266 }
9267 }
9268
9269 override void AddWet(
float value)
9270 {
9272 }
9273
9275 {
9277 }
9278
9280 {
9282 }
9283
9285 {
9287 }
9288
9290 {
9292 }
9293
9295 {
9297 }
9298
9300 {
9303 if (newLevel != oldLevel)
9304 {
9306 }
9307 }
9308
9310 {
9311 SetWeightDirty();
9312 }
9313
9315 {
9316 return GetWetLevelInternal(
m_VarWet);
9317 }
9318
9319
9320
9322 {
9324 }
9325
9327 {
9329 }
9330
9332 {
9334 }
9335
9337 {
9339 }
9340
9341
9342
9344 {
9345 if (ConfigIsExisting("itemModelLength"))
9346 {
9347 return ConfigGetFloat("itemModelLength");
9348 }
9349 return 0;
9350 }
9351
9353 {
9354 if (ConfigIsExisting("itemAttachOffset"))
9355 {
9356 return ConfigGetFloat("itemAttachOffset");
9357 }
9358 return 0;
9359 }
9360
9361 override void SetCleanness(
int value,
bool allow_client =
false)
9362 {
9363 if (!IsServerCheck(allow_client))
9364 return;
9365
9367
9369
9372 }
9373
9375 {
9377 }
9378
9380 {
9381 return true;
9382 }
9383
9384
9385
9386
9388 {
9390 }
9391
9393 {
9395 }
9396
9397
9398
9399
9400 override void SetColor(
int r,
int g,
int b,
int a)
9401 {
9407 }
9409 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9410 {
9415 }
9416
9418 {
9420 }
9421
9424 {
9425 int r,g,b,a;
9427 r = r/255;
9428 g = g/255;
9429 b = b/255;
9430 a = a/255;
9431 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9432 }
9433
9434
9435
9436 override void SetLiquidType(
int value,
bool allow_client =
false)
9437 {
9438 if (!IsServerCheck(allow_client))
9439 return;
9440
9445 }
9446
9448 {
9449 return ConfigGetInt("varLiquidTypeInit");
9450 }
9451
9453 {
9455 }
9456
9458 {
9460 SetFrozen(false);
9461 }
9462
9465 {
9466 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9467 }
9468
9469
9472 {
9473 PlayerBase nplayer;
9474 if (PlayerBase.CastTo(nplayer, player))
9475 {
9477
9478 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9479 }
9480 }
9481
9482
9485 {
9486 PlayerBase nplayer;
9487 if (PlayerBase.CastTo(nplayer,player))
9488 {
9489
9490 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9491
9492 }
9493
9494
9495 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9496
9497
9498 if (HasEnergyManager())
9499 {
9500 GetCompEM().UpdatePlugState();
9501 }
9502 }
9503
9504
9506 {
9507 super.OnPlacementStarted(player);
9508
9510 }
9511
9512 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9513 {
9515 {
9516 m_AdminLog.OnPlacementComplete(player,
this);
9517 }
9518
9519 super.OnPlacementComplete(player, position, orientation);
9520 }
9521
9522
9523
9524
9525
9527 {
9529 {
9530 return true;
9531 }
9532 else
9533 {
9534 return false;
9535 }
9536 }
9537
9538
9540 {
9542 {
9544 }
9545 }
9546
9547
9549 {
9551 }
9552
9554 {
9556 }
9557
9558 override void InsertAgent(
int agent,
float count = 1)
9559 {
9560 if (count < 1)
9561 return;
9562
9564 }
9565
9568 {
9570 }
9571
9572
9574 {
9576 }
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
9616
9617
9618
9620 {
9622 return false;
9623 return true;
9624 }
9625
9627 {
9628
9630 }
9631
9632
9635 {
9636 super.CheckForRoofLimited(timeTresholdMS);
9637
9639 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9640 {
9641 m_PreviousRoofTestTime = time;
9642 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9643 }
9644 }
9645
9646
9648 {
9650 {
9651 return 0;
9652 }
9653
9654 if (GetInventory().GetAttachmentSlotsCount() != 0)
9655 {
9656 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9657 if (filter)
9658 return filter.GetProtectionLevel(type, false, system);
9659 else
9660 return 0;
9661 }
9662
9663 string subclassPath, entryName;
9664
9665 switch (type)
9666 {
9668 entryName = "biological";
9669 break;
9671 entryName = "chemical";
9672 break;
9673 default:
9674 entryName = "biological";
9675 break;
9676 }
9677
9678 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9679
9681 }
9682
9683
9684
9687 {
9688 if (!IsMagazine())
9690
9692 }
9693
9694
9695
9696
9697
9702 {
9703 return true;
9704 }
9705
9707 {
9709 }
9710
9711
9712
9713
9714
9716 {
9717 if (parent)
9718 {
9719 if (parent.IsInherited(DayZInfected))
9720 return true;
9721
9722 if (!parent.IsRuined())
9723 return true;
9724 }
9725
9726 return true;
9727 }
9728
9730 {
9731 if (!super.CanPutAsAttachment(parent))
9732 {
9733 return false;
9734 }
9735
9736 if (!IsRuined() && !parent.IsRuined())
9737 {
9738 return true;
9739 }
9740
9741 return false;
9742 }
9743
9745 {
9746
9747
9748
9749
9750 return super.CanReceiveItemIntoCargo(item);
9751 }
9752
9754 {
9755
9756
9757
9758
9759 GameInventory attachmentInv = attachment.GetInventory();
9761 {
9762 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9763 return false;
9764 }
9765
9766 InventoryLocation loc = new InventoryLocation();
9767 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9768 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9769 return false;
9770
9771 return super.CanReceiveAttachment(attachment, slotId);
9772 }
9773
9775 {
9776 if (!super.CanReleaseAttachment(attachment))
9777 return false;
9778
9779 return GetInventory().AreChildrenAccessible();
9780 }
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9803 {
9804 int id = muzzle_owner.GetMuzzleID();
9805 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9806
9807 if (WPOF_array)
9808 {
9809 for (int i = 0; i < WPOF_array.Count(); i++)
9810 {
9811 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9812
9813 if (WPOF)
9814 {
9815 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9816 }
9817 }
9818 }
9819 }
9820
9821
9823 {
9824 int id = muzzle_owner.GetMuzzleID();
9826
9827 if (WPOBE_array)
9828 {
9829 for (int i = 0; i < WPOBE_array.Count(); i++)
9830 {
9831 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9832
9833 if (WPOBE)
9834 {
9835 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9836 }
9837 }
9838 }
9839 }
9840
9841
9843 {
9844 int id = muzzle_owner.GetMuzzleID();
9845 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9846
9847 if (WPOOH_array)
9848 {
9849 for (int i = 0; i < WPOOH_array.Count(); i++)
9850 {
9851 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9852
9853 if (WPOOH)
9854 {
9855 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9856 }
9857 }
9858 }
9859 }
9860
9861
9863 {
9864 int id = muzzle_owner.GetMuzzleID();
9865 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9866
9867 if (WPOOH_array)
9868 {
9869 for (int i = 0; i < WPOOH_array.Count(); i++)
9870 {
9871 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9872
9873 if (WPOOH)
9874 {
9875 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9876 }
9877 }
9878 }
9879 }
9880
9881
9883 {
9884 int id = muzzle_owner.GetMuzzleID();
9885 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9886
9887 if (WPOOH_array)
9888 {
9889 for (int i = 0; i < WPOOH_array.Count(); i++)
9890 {
9891 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9892
9893 if (WPOOH)
9894 {
9895 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9896 }
9897 }
9898 }
9899 }
9900
9901
9902
9904 {
9906 {
9907 return true;
9908 }
9909
9910 return false;
9911 }
9912
9914 {
9916 {
9917 return true;
9918 }
9919
9920 return false;
9921 }
9922
9924 {
9926 {
9927 return true;
9928 }
9929
9930 return false;
9931 }
9932
9934 {
9935 return false;
9936 }
9937
9940 {
9941 return UATimeSpent.DEFAULT_DEPLOY;
9942 }
9943
9944
9945
9946
9948 {
9950 SetSynchDirty();
9951 }
9952
9954 {
9956 }
9957
9958
9960 {
9961 return false;
9962 }
9963
9966 {
9967 string att_type = "None";
9968
9969 if (ConfigIsExisting("soundAttType"))
9970 {
9971 att_type = ConfigGetString("soundAttType");
9972 }
9973
9975 }
9976
9978 {
9980 }
9981
9982
9983
9984
9985
9989
9991 {
9994
9996 }
9997
9998
10000 {
10002 return;
10003
10005
10008
10011
10012 SoundParameters params = new SoundParameters();
10016 }
10017
10018
10020 {
10022 return;
10023
10025 SetSynchDirty();
10026
10029 }
10030
10031
10033 {
10035 return;
10036
10038 SetSynchDirty();
10039
10042 }
10043
10045 {
10047 }
10048
10050 {
10052 }
10053
10056 {
10057 if (!
GetGame().IsDedicatedServer())
10058 {
10059 if (ConfigIsExisting("attachSoundSet"))
10060 {
10061 string cfg_path = "";
10062 string soundset = "";
10063 string type_name =
GetType();
10064
10067 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10068 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10069
10070 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10071 {
10072 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10073 {
10074 if (cfg_slot_array[i] == slot_type)
10075 {
10076 soundset = cfg_soundset_array[i];
10077 break;
10078 }
10079 }
10080 }
10081
10082 if (soundset != "")
10083 {
10084 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10086 }
10087 }
10088 }
10089 }
10090
10092 {
10093
10094 }
10095
10096 void OnApply(PlayerBase player);
10097
10099 {
10100 return 1.0;
10101 };
10102
10104 {
10106 }
10107
10109 {
10111 }
10112
10114
10116 {
10117 SetDynamicPhysicsLifeTime(0.01);
10119 }
10120
10122 {
10123 array<string> zone_names = new array<string>;
10124 GetDamageZones(zone_names);
10125 for (int i = 0; i < zone_names.Count(); i++)
10126 {
10127 SetHealthMax(zone_names.Get(i),"Health");
10128 }
10129 SetHealthMax("","Health");
10130 }
10131
10134 {
10135 float global_health = GetHealth01("","Health");
10136 array<string> zones = new array<string>;
10137 GetDamageZones(zones);
10138
10139 for (int i = 0; i < zones.Count(); i++)
10140 {
10141 SetHealth01(zones.Get(i),"Health",global_health);
10142 }
10143 }
10144
10147 {
10148 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10149 }
10150
10152 {
10153 if (!hasRootAsPlayer)
10154 {
10155 if (refParentIB)
10156 {
10157
10158 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10159 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10160
10161 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10162 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10163
10166 }
10167 else
10168 {
10169
10172 }
10173 }
10174 }
10175
10177 {
10179 {
10180 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10181 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10182 {
10183 float heatPermCoef = 1.0;
10185 while (ent)
10186 {
10187 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10188 ent = ent.GetHierarchyParent();
10189 }
10190
10191 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10192 }
10193 }
10194 }
10195
10197 {
10198
10199 EntityAI parent = GetHierarchyParent();
10200 if (!parent)
10201 {
10202 hasParent = false;
10203 hasRootAsPlayer = false;
10204 }
10205 else
10206 {
10207 hasParent = true;
10208 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10209 refParentIB =
ItemBase.Cast(parent);
10210 }
10211 }
10212
10213 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10214 {
10215
10216 }
10217
10219 {
10220
10221 return false;
10222 }
10223
10225 {
10226
10227
10228 return false;
10229 }
10230
10232 {
10233
10234 return false;
10235 }
10236
10239 {
10240 return !GetIsFrozen() &&
IsOpen();
10241 }
10242
10244 {
10245 bool hasParent = false, hasRootAsPlayer = false;
10247
10248 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10249 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10250
10251 if (wwtu || foodDecay)
10252 {
10256
10257 if (processWetness || processTemperature || processDecay)
10258 {
10260
10261 if (processWetness)
10262 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10263
10264 if (processTemperature)
10266
10267 if (processDecay)
10268 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10269 }
10270 }
10271 }
10272
10275 {
10277 }
10278
10280 {
10283
10284 return super.GetTemperatureFreezeThreshold();
10285 }
10286
10288 {
10291
10292 return super.GetTemperatureThawThreshold();
10293 }
10294
10296 {
10299
10300 return super.GetItemOverheatThreshold();
10301 }
10302
10304 {
10306 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10307
10308 return super.GetTemperatureFreezeTime();
10309 }
10310
10312 {
10314 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10315
10316 return super.GetTemperatureThawTime();
10317 }
10318
10323
10325 {
10326 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10327 }
10328
10330 {
10331 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10332 }
10333
10336 {
10338 }
10339
10341 {
10343 }
10344
10346 {
10348 }
10349
10352 {
10353 return null;
10354 }
10355
10358 {
10359 return false;
10360 }
10361
10363 {
10365 {
10368 if (!trg)
10369 {
10371 explosive = this;
10372 }
10373
10374 explosive.PairRemote(trg);
10376
10377 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10378 trg.SetPersistentPairID(persistentID);
10379 explosive.SetPersistentPairID(persistentID);
10380
10381 return true;
10382 }
10383 return false;
10384 }
10385
10388 {
10389 float ret = 1.0;
10392 ret *= GetHealth01();
10393
10394 return ret;
10395 }
10396
10397 #ifdef DEVELOPER
10398 override void SetDebugItem()
10399 {
10400 super.SetDebugItem();
10401 _itemBase = this;
10402 }
10403
10405 {
10406 string text = super.GetDebugText();
10407
10409 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10410
10411 return text;
10412 }
10413 #endif
10414
10416 {
10417 return true;
10418 }
10419
10421
10423
10425 {
10428 }
10429
10430
10438
10454}
10455
10457{
10459 if (entity)
10460 {
10461 bool is_item = entity.IsInherited(
ItemBase);
10462 if (is_item && full_quantity)
10463 {
10466 }
10467 }
10468 else
10469 {
10471 return NULL;
10472 }
10473 return entity;
10474}
10475
10477{
10478 if (item)
10479 {
10480 if (health > 0)
10481 item.SetHealth("", "", health);
10482
10483 if (item.CanHaveTemperature())
10484 {
10486 if (item.CanFreeze())
10487 item.SetFrozen(false);
10488 }
10489
10490 if (item.HasEnergyManager())
10491 {
10492 if (quantity >= 0)
10493 {
10494 item.GetCompEM().SetEnergy0To1(quantity);
10495 }
10496 else
10497 {
10499 }
10500 }
10501 else if (item.IsMagazine())
10502 {
10503 Magazine mag = Magazine.Cast(item);
10504 if (quantity >= 0)
10505 {
10506 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10507 }
10508 else
10509 {
10511 }
10512
10513 }
10514 else
10515 {
10516 if (quantity >= 0)
10517 {
10518 item.SetQuantityNormalized(quantity, false);
10519 }
10520 else
10521 {
10523 }
10524
10525 }
10526 }
10527}
10528
10529#ifdef DEVELOPER
10531#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.