5619{
5621 {
5622 return true;
5623 }
5624};
5625
5626
5627
5629{
5633
5635
5638
5639
5640
5641
5642
5651
5657
5662
5667
5688 protected bool m_IsResultOfSplit
5689
5691
5696
5697
5698
5700
5704
5705
5706
5708
5711
5712
5713
5719
5720
5728
5731
5732
5734
5735
5737
5738
5743
5744
5749
5750
5752
5753
5755 {
5760
5761 if (!
GetGame().IsDedicatedServer())
5762 {
5764 {
5766
5768 {
5770 }
5771 }
5772
5775 }
5776
5777 m_OldLocation = null;
5778
5780 {
5782 }
5783
5784 if (ConfigIsExisting("headSelectionsToHide"))
5785 {
5788 }
5789
5791 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5792 {
5794 }
5795
5797
5798 m_IsResultOfSplit = false;
5799
5801 }
5802
5804 {
5805 super.InitItemVariables();
5806
5812 m_Count = ConfigGetInt(
"count");
5813
5816
5821
5824
5829
5841
5845
5846
5849 if (ConfigIsExisting("canBeSplit"))
5850 {
5853 }
5854
5856 if (ConfigIsExisting("itemBehaviour"))
5858
5859
5862 RegisterNetSyncVariableInt("m_VarLiquidType");
5863 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5864
5865 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5866 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5867 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5868
5869 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5870 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5871 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5872 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5873
5874 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5875 RegisterNetSyncVariableBool("m_IsTakeable");
5876 RegisterNetSyncVariableBool("m_IsHologram");
5877
5880 {
5883 }
5884
5886
5888 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5890
5891 }
5892
5894 {
5896 }
5897
5899 {
5902 {
5907 }
5908 }
5909
5910 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5911 {
5913 {
5916 }
5917
5919 }
5920
5922 {
5928 }
5929
5931
5933 {
5935
5936 if (!action)
5937 {
5938 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5939 return;
5940 }
5941
5943 if (!ai)
5944 {
5946 return;
5947 }
5948
5950 if (!action_array)
5951 {
5952 action_array = new array<ActionBase_Basic>;
5954 }
5955 if (LogManager.IsActionLogEnable())
5956 {
5957 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5958 }
5959
5960 if (action_array.Find(action) != -1)
5961 {
5962 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5963 }
5964 else
5965 {
5966 action_array.Insert(action);
5967 }
5968 }
5969
5971 {
5973 ActionBase action = player.GetActionManager().GetAction(actionName);
5976
5977 if (action_array)
5978 {
5979 action_array.RemoveItem(action);
5980 }
5981 }
5982
5983
5984
5986 {
5987 ActionOverrideData overrideData = new ActionOverrideData();
5991
5993 if (!actionMap)
5994 {
5997 }
5998
5999 actionMap.Insert(this.
Type(), overrideData);
6000
6001 }
6002
6004
6006
6007
6009 {
6012
6015
6016 string config_to_search = "CfgVehicles";
6017 string muzzle_owner_config;
6018
6020 {
6021 if (IsInherited(Weapon))
6022 config_to_search = "CfgWeapons";
6023
6024 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6025
6026 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6027
6029
6030 if (config_OnFire_subclass_count > 0)
6031 {
6032 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6033
6034 for (int i = 0; i < config_OnFire_subclass_count; i++)
6035 {
6036 string particle_class = "";
6038 string config_OnFire_entry = config_OnFire_class + particle_class;
6039 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6040 WPOF_array.Insert(WPOF);
6041 }
6042
6043
6045 }
6046 }
6047
6049 {
6050 config_to_search = "CfgWeapons";
6051 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6052
6053 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6054
6056
6057 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6058 {
6059 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6060
6061 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6062 {
6063 string particle_class2 = "";
6065 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6066 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6067 WPOBE_array.Insert(WPOBE);
6068 }
6069
6070
6072 }
6073 }
6074 }
6075
6076
6078 {
6081
6083 {
6084 string config_to_search = "CfgVehicles";
6085
6086 if (IsInherited(Weapon))
6087 config_to_search = "CfgWeapons";
6088
6089 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6090 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6091
6092 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6093 {
6094
6096
6098 {
6100 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6102 return;
6103 }
6104
6107
6108
6109
6111 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6112
6113 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6114 {
6115 string particle_class = "";
6117 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6119
6120 if (entry_type == CT_CLASS)
6121 {
6122 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6123 WPOOH_array.Insert(WPOF);
6124 }
6125 }
6126
6127
6129 }
6130 }
6131 }
6132
6134 {
6136 }
6137
6139 {
6141 {
6143
6146
6149
6150 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6151 }
6152 }
6153
6155 {
6157 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6158
6160 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6161
6163 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6164
6166 {
6168 }
6169 }
6170
6172 {
6174 }
6175
6177 {
6180 else
6182
6184 {
6187 }
6188 else
6189 {
6192
6195 }
6196
6198 }
6199
6201 {
6203 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6204 }
6205
6207 {
6209 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6211 }
6212
6214 {
6216 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6217 }
6218
6220 {
6223
6224 OverheatingParticle OP = new OverheatingParticle();
6229
6231 }
6232
6234 {
6237
6238 return -1;
6239 }
6240
6242 {
6244 {
6247
6248 for (int i = count; i > 0; --i)
6249 {
6250 int id = i - 1;
6253
6256
6257 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6258 {
6259 if (p)
6260 {
6263 }
6264 }
6265 }
6266 }
6267 }
6268
6270 {
6272 {
6274 {
6275 int id = i - 1;
6277
6278 if (OP)
6279 {
6281
6282 if (p)
6283 {
6285 }
6286
6287 delete OP;
6288 }
6289 }
6290
6293 }
6294 }
6295
6298 {
6299 return 0.0;
6300 }
6301
6302
6304 {
6305 return 250;
6306 }
6307
6309 {
6310 return 0;
6311 }
6312
6315 {
6317 return true;
6318
6319 return false;
6320 }
6321
6324 {
6327
6329 {
6331 }
6332 else
6333 {
6334
6336 }
6337
6339 }
6340
6347 {
6348 return -1;
6349 }
6350
6351
6352
6353
6355 {
6357 {
6359 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6360
6361 if (r_index >= 0)
6362 {
6363 InventoryLocation r_il = new InventoryLocation;
6364 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6365
6366 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6369 {
6370 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6371 }
6373 {
6374 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6375 }
6376
6377 }
6378
6379 player.GetHumanInventory().ClearUserReservedLocation(this);
6380 }
6381
6384 }
6385
6386
6387
6388
6390 {
6391 return ItemBase.m_DebugActionsMask;
6392 }
6393
6395 {
6396 return ItemBase.m_DebugActionsMask & mask;
6397 }
6398
6400 {
6401 ItemBase.m_DebugActionsMask = mask;
6402 }
6403
6405 {
6406 ItemBase.m_DebugActionsMask |= mask;
6407 }
6408
6410 {
6411 ItemBase.m_DebugActionsMask &= ~mask;
6412 }
6413
6415 {
6417 {
6419 }
6420 else
6421 {
6423 }
6424 }
6425
6426
6428 {
6429 if (GetEconomyProfile())
6430 {
6431 float q_max = GetEconomyProfile().GetQuantityMax();
6432 if (q_max > 0)
6433 {
6434 float q_min = GetEconomyProfile().GetQuantityMin();
6435 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6436
6438 {
6439 ComponentEnergyManager comp = GetCompEM();
6441 {
6443 }
6444 }
6446 {
6448
6449 }
6450
6451 }
6452 }
6453 }
6454
6457 {
6458 EntityAI parent = GetHierarchyParent();
6459
6460 if (parent)
6461 {
6462 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6463 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6464 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6465 }
6466 }
6467
6470 {
6471 EntityAI parent = GetHierarchyParent();
6472
6473 if (parent)
6474 {
6475 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6476 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6477 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6478 }
6479 }
6480
6482 {
6483
6484
6485
6486
6488
6490 {
6491 if (ScriptInputUserData.CanStoreInputUserData())
6492 {
6493 ScriptInputUserData ctx = new ScriptInputUserData;
6499 ctx.
Write(use_stack_max);
6502
6504 {
6505 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6506 }
6507 }
6508 }
6509 else if (!
GetGame().IsMultiplayer())
6510 {
6512 }
6513 }
6514
6516 {
6518 }
6519
6521 {
6523 }
6524
6526 {
6528 }
6529
6531 {
6532
6533 return false;
6534 }
6535
6537 {
6538 return false;
6539 }
6540
6544 {
6545 return false;
6546 }
6547
6549 {
6550 return "";
6551 }
6552
6554
6556 {
6557 return false;
6558 }
6559
6561 {
6562 return true;
6563 }
6564
6565
6566
6568 {
6569 return true;
6570 }
6571
6573 {
6574 return true;
6575 }
6576
6578 {
6579 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6581 }
6582
6584 {
6586 }
6587
6589 {
6591 if (!is_being_placed)
6593 SetSynchDirty();
6594 }
6595
6596
6598
6600 {
6602 }
6603
6605 {
6607 }
6608
6610 {
6611 return 1;
6612 }
6613
6615 {
6616 return false;
6617 }
6618
6620 {
6622 SetSynchDirty();
6623 }
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6660 {
6661 super.OnMovedInsideCargo(container);
6662
6663 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6664 }
6665
6666 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6667 {
6668 super.EEItemLocationChanged(oldLoc,newLoc);
6669
6670 PlayerBase new_player = null;
6671 PlayerBase old_player = null;
6672
6673 if (newLoc.GetParent())
6674 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6675
6676 if (oldLoc.GetParent())
6677 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6678
6680 {
6681 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6682
6683 if (r_index >= 0)
6684 {
6685 InventoryLocation r_il = new InventoryLocation;
6686 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6687
6688 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6691 {
6692 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6693 }
6695 {
6696 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6697 }
6698
6699 }
6700 }
6701
6703 {
6704 if (new_player)
6705 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6706
6707 if (new_player == old_player)
6708 {
6709
6710 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6711 {
6713 {
6714 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6715 {
6716 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6717 }
6718 }
6719 else
6720 {
6721 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6722 }
6723 }
6724
6725 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6726 {
6727 int type = oldLoc.GetType();
6729 {
6730 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6731 }
6733 {
6734 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6735 }
6736 }
6737 if (!m_OldLocation)
6738 {
6739 m_OldLocation = new InventoryLocation;
6740 }
6741 m_OldLocation.Copy(oldLoc);
6742 }
6743 else
6744 {
6745 if (m_OldLocation)
6746 {
6747 m_OldLocation.Reset();
6748 }
6749 }
6750
6752 }
6753 else
6754 {
6755 if (new_player)
6756 {
6757 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6758 if (res_index >= 0)
6759 {
6760 InventoryLocation il = new InventoryLocation;
6761 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6763 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6766 {
6767 il.
GetParent().GetOnReleaseLock().Invoke(it);
6768 }
6770 {
6772 }
6773
6774 }
6775 }
6777 {
6778
6780 }
6781
6782 if (m_OldLocation)
6783 {
6784 m_OldLocation.Reset();
6785 }
6786 }
6787 }
6788
6789 override void EOnContact(IEntity other, Contact extra)
6790 {
6792 {
6793 int liquidType = -1;
6795 if (impactSpeed > 0.0)
6796 {
6798 #ifndef SERVER
6800 #else
6802 SetSynchDirty();
6803 #endif
6805 }
6806 }
6807
6808 #ifdef SERVER
6809 if (GetCompEM() && GetCompEM().IsPlugged())
6810 {
6811 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6812 GetCompEM().UnplugThis();
6813 }
6814 #endif
6815 }
6816
6818
6820 {
6822 }
6823
6825 {
6826
6827 }
6828
6830 {
6831 super.OnItemLocationChanged(old_owner, new_owner);
6832
6833 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6834 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6835
6836 if (!relatedPlayer && playerNew)
6837 relatedPlayer = playerNew;
6838
6839 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6840 {
6842 if (actionMgr)
6843 {
6844 ActionBase currentAction = actionMgr.GetRunningAction();
6845 if (currentAction)
6847 }
6848 }
6849
6850 Man ownerPlayerOld = null;
6851 Man ownerPlayerNew = null;
6852
6853 if (old_owner)
6854 {
6855 if (old_owner.
IsMan())
6856 {
6857 ownerPlayerOld = Man.Cast(old_owner);
6858 }
6859 else
6860 {
6861 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6862 }
6863 }
6864 else
6865 {
6867 {
6869
6870 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6871 {
6872 GetCompEM().UnplugThis();
6873 }
6874 }
6875 }
6876
6877 if (new_owner)
6878 {
6879 if (new_owner.
IsMan())
6880 {
6881 ownerPlayerNew = Man.Cast(new_owner);
6882 }
6883 else
6884 {
6885 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6886 }
6887 }
6888
6889 if (ownerPlayerOld != ownerPlayerNew)
6890 {
6891 if (ownerPlayerOld)
6892 {
6893 array<EntityAI> subItemsExit = new array<EntityAI>;
6895 for (int i = 0; i < subItemsExit.Count(); i++)
6896 {
6899 }
6900 }
6901
6902 if (ownerPlayerNew)
6903 {
6904 array<EntityAI> subItemsEnter = new array<EntityAI>;
6906 for (int j = 0; j < subItemsEnter.Count(); j++)
6907 {
6910 }
6911 }
6912 }
6913 else if (ownerPlayerNew != null)
6914 {
6915 PlayerBase nplayer;
6916 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6917 {
6918 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6920 for (int k = 0; k < subItemsUpdate.Count(); k++)
6921 {
6923 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6924 }
6925 }
6926 }
6927
6928 if (old_owner)
6929 old_owner.OnChildItemRemoved(this);
6930 if (new_owner)
6931 new_owner.OnChildItemReceived(this);
6932 }
6933
6934
6936 {
6937 super.EEDelete(parent);
6938 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6939 if (player)
6940 {
6942
6943 if (player.IsAlive())
6944 {
6945 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6946 if (r_index >= 0)
6947 {
6948 InventoryLocation r_il = new InventoryLocation;
6949 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6950
6951 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6954 {
6955 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6956 }
6958 {
6959 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6960 }
6961
6962 }
6963
6964 player.RemoveQuickBarEntityShortcut(this);
6965 }
6966 }
6967 }
6968
6970 {
6971 super.EEKilled(killer);
6972
6975 {
6976 if (
GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6977 {
6978 if (IsMagazine())
6979 {
6980 if (Magazine.Cast(this).GetAmmoCount() > 0)
6981 {
6983 }
6984 }
6985 else
6986 {
6988 }
6989 }
6990 }
6991 }
6992
6994 {
6995 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6996
6997 super.OnWasAttached(parent, slot_id);
6998
7001
7003 }
7004
7006 {
7007 super.OnWasDetached(parent, slot_id);
7008
7011 }
7012
7014 {
7015 int idx;
7018
7019 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7020 if (inventory_slots.Count() < 1)
7021 {
7022 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7023 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7024 }
7025 else
7026 {
7027 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7028 }
7029
7030 idx = inventory_slots.Find(slot);
7031 if (idx < 0)
7032 return "";
7033
7034 return attach_types.Get(idx);
7035 }
7036
7038 {
7039 int idx = -1;
7040 string slot;
7041
7044
7045 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7046 if (inventory_slots.Count() < 1)
7047 {
7048 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7049 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7050 }
7051 else
7052 {
7053 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7054 if (detach_types.Count() < 1)
7055 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7056 }
7057
7058 for (int i = 0; i < inventory_slots.Count(); i++)
7059 {
7060 slot = inventory_slots.Get(i);
7061 }
7062
7063 if (slot != "")
7064 {
7065 if (detach_types.Count() == 1)
7066 idx = 0;
7067 else
7068 idx = inventory_slots.Find(slot);
7069 }
7070 if (idx < 0)
7071 return "";
7072
7073 return detach_types.Get(idx);
7074 }
7075
7077 {
7078
7080
7081
7082 float min_time = 1;
7083 float max_time = 3;
7084 float delay = Math.RandomFloat(min_time, max_time);
7085
7086 explode_timer.Run(delay, this, "DoAmmoExplosion");
7087 }
7088
7090 {
7091 Magazine magazine = Magazine.Cast(this);
7092 int pop_sounds_count = 6;
7093 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7094
7095
7096 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7097 string sound_name = pop_sounds[ sound_idx ];
7099
7100
7101 magazine.ServerAddAmmoCount(-1);
7102
7103
7104 float min_temp_to_explode = 100;
7105
7106 if (magazine.GetAmmoCount() > 0 &&
GetTemperature() >= min_temp_to_explode)
7107 {
7109 }
7110 }
7111
7112
7113 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7114 {
7115 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7116
7117 const int CHANCE_DAMAGE_CARGO = 4;
7118 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7119 const int CHANCE_DAMAGE_NOTHING = 2;
7120
7122 {
7123 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7124 int chances;
7125 int rnd;
7126
7127 if (GetInventory().GetCargo())
7128 {
7129 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7130 rnd = Math.RandomInt(0,chances);
7131
7132 if (rnd < CHANCE_DAMAGE_CARGO)
7133 {
7135 }
7136 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7137 {
7139 }
7140 }
7141 else
7142 {
7143 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7144 rnd = Math.RandomInt(0,chances);
7145
7146 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7147 {
7149 }
7150 }
7151 }
7152 }
7153
7155 {
7156 if (GetInventory().GetCargo())
7157 {
7158 int item_count = GetInventory().GetCargo().GetItemCount();
7159 if (item_count > 0)
7160 {
7161 int random_pick = Math.RandomInt(0, item_count);
7163 if (!item.IsExplosive())
7164 {
7165 item.AddHealth("","",damage);
7166 return true;
7167 }
7168 }
7169 }
7170 return false;
7171 }
7172
7174 {
7175 int attachment_count = GetInventory().AttachmentCount();
7176 if (attachment_count > 0)
7177 {
7178 int random_pick = Math.RandomInt(0, attachment_count);
7179 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7180 if (!attachment.IsExplosive())
7181 {
7182 attachment.AddHealth("","",damage);
7183 return true;
7184 }
7185 }
7186 return false;
7187 }
7188
7190 {
7192 }
7193
7195 {
7197 return GetInventory().CanRemoveEntity();
7198
7199 return false;
7200 }
7201
7203 {
7204
7206 return false;
7207
7208
7210 return false;
7211
7212
7213
7215 if (delta == 0)
7216 return false;
7217
7218
7219 return true;
7220 }
7221
7223 {
7225 {
7226 if (ScriptInputUserData.CanStoreInputUserData())
7227 {
7228 ScriptInputUserData ctx = new ScriptInputUserData;
7233 ctx.
Write(destination_entity);
7237 }
7238 }
7239 else if (!
GetGame().IsMultiplayer())
7240 {
7242 }
7243 }
7244
7246 {
7247 float split_quantity_new;
7251 InventoryLocation loc = new InventoryLocation;
7252
7253 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7254 {
7256 split_quantity_new = stack_max;
7257 else
7259
7261 {
7262 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7263 if (new_item)
7264 {
7265 new_item.SetResultOfSplit(true);
7266 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7268 new_item.
SetQuantity(split_quantity_new,
false,
true);
7269 }
7270 }
7271 }
7272 else if (destination_entity && slot_id == -1)
7273 {
7274 if (quantity > stack_max)
7275 split_quantity_new = stack_max;
7276 else
7277 split_quantity_new = quantity;
7278
7280 {
7282 {
7285 }
7286
7287 if (new_item)
7288 {
7289 new_item.SetResultOfSplit(true);
7290 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7292 new_item.
SetQuantity(split_quantity_new,
false,
true);
7293 }
7294 }
7295 }
7296 else
7297 {
7298 if (stack_max != 0)
7299 {
7301 {
7303 }
7304
7305 if (split_quantity_new == 0)
7306 {
7307 if (!
GetGame().IsMultiplayer())
7308 player.PhysicalPredictiveDropItem(this);
7309 else
7310 player.ServerDropEntity(this);
7311 return;
7312 }
7313
7315 {
7317
7318 if (new_item)
7319 {
7320 new_item.SetResultOfSplit(true);
7321 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7324 new_item.PlaceOnSurface();
7325 }
7326 }
7327 }
7328 }
7329 }
7330
7332 {
7333 float split_quantity_new;
7337 InventoryLocation loc = new InventoryLocation;
7338
7339 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7340 {
7342 split_quantity_new = stack_max;
7343 else
7345
7347 {
7348 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7349 if (new_item)
7350 {
7351 new_item.SetResultOfSplit(true);
7352 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7354 new_item.
SetQuantity(split_quantity_new,
false,
true);
7355 }
7356 }
7357 }
7358 else if (destination_entity && slot_id == -1)
7359 {
7360 if (quantity > stack_max)
7361 split_quantity_new = stack_max;
7362 else
7363 split_quantity_new = quantity;
7364
7366 {
7368 {
7371 }
7372
7373 if (new_item)
7374 {
7375 new_item.SetResultOfSplit(true);
7376 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7378 new_item.
SetQuantity(split_quantity_new,
false,
true);
7379 }
7380 }
7381 }
7382 else
7383 {
7384 if (stack_max != 0)
7385 {
7387 {
7389 }
7390
7392 {
7394
7395 if (new_item)
7396 {
7397 new_item.SetResultOfSplit(true);
7398 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7401 new_item.PlaceOnSurface();
7402 }
7403 }
7404 }
7405 }
7406 }
7407
7409 {
7411 {
7412 if (ScriptInputUserData.CanStoreInputUserData())
7413 {
7414 ScriptInputUserData ctx = new ScriptInputUserData;
7419 dst.WriteToContext(ctx);
7421 }
7422 }
7423 else if (!
GetGame().IsMultiplayer())
7424 {
7426 }
7427 }
7428
7430 {
7432 {
7433 if (ScriptInputUserData.CanStoreInputUserData())
7434 {
7435 ScriptInputUserData ctx = new ScriptInputUserData;
7440 ctx.
Write(destination_entity);
7446 }
7447 }
7448 else if (!
GetGame().IsMultiplayer())
7449 {
7451 }
7452 }
7453
7455 {
7457 }
7458
7460 {
7462 float split_quantity_new;
7464 if (dst.IsValid())
7465 {
7466 int slot_id = dst.GetSlot();
7468
7469 if (quantity > stack_max)
7470 split_quantity_new = stack_max;
7471 else
7472 split_quantity_new = quantity;
7473
7475 {
7477
7478 if (new_item)
7479 {
7480 new_item.SetResultOfSplit(true);
7481 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7483 new_item.
SetQuantity(split_quantity_new,
false,
true);
7484 }
7485
7486 return new_item;
7487 }
7488 }
7489
7490 return null;
7491 }
7492
7494 {
7496 float split_quantity_new;
7498 if (destination_entity)
7499 {
7501 if (quantity > stackable)
7502 split_quantity_new = stackable;
7503 else
7504 split_quantity_new = quantity;
7505
7507 {
7508 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7509 if (new_item)
7510 {
7511 new_item.SetResultOfSplit(true);
7512 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7514 new_item.
SetQuantity(split_quantity_new,
false,
true);
7515 }
7516 }
7517 }
7518 }
7519
7521 {
7523 {
7524 if (ScriptInputUserData.CanStoreInputUserData())
7525 {
7526 ScriptInputUserData ctx = new ScriptInputUserData;
7531 ItemBase destination_entity =
this;
7532 ctx.
Write(destination_entity);
7536 }
7537 }
7538 else if (!
GetGame().IsMultiplayer())
7539 {
7541 }
7542 }
7543
7545 {
7547 float split_quantity_new;
7549 if (player)
7550 {
7552 if (quantity > stackable)
7553 split_quantity_new = stackable;
7554 else
7555 split_quantity_new = quantity;
7556
7558 {
7559 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7560 new_item =
ItemBase.Cast(in_hands);
7561 if (new_item)
7562 {
7563 new_item.SetResultOfSplit(true);
7564 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7566 new_item.SetQuantity(split_quantity_new, false, true);
7567 }
7568 }
7569 }
7570 }
7571
7573 {
7575 float split_quantity_new = Math.Floor(quantity * 0.5);
7576
7578 return;
7579
7581
7582 if (new_item)
7583 {
7584 if (new_item.GetQuantityMax() < split_quantity_new)
7585 {
7586 split_quantity_new = new_item.GetQuantityMax();
7587 }
7588
7589 new_item.SetResultOfSplit(true);
7590 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7591
7593 {
7596 }
7597 else
7598 {
7600 new_item.
SetQuantity(split_quantity_new,
false,
true);
7601 }
7602 }
7603 }
7604
7606 {
7608 float split_quantity_new = Math.Floor(quantity / 2);
7609
7611 return;
7612
7613 InventoryLocation invloc = new InventoryLocation;
7615
7617 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7618
7619 if (new_item)
7620 {
7621 if (new_item.GetQuantityMax() < split_quantity_new)
7622 {
7623 split_quantity_new = new_item.GetQuantityMax();
7624 }
7626 {
7629 }
7630 else if (split_quantity_new > 1)
7631 {
7633 new_item.
SetQuantity(split_quantity_new,
false,
true);
7634 }
7635 }
7636 }
7637
7640 {
7641 SetWeightDirty();
7643
7644 if (parent)
7645 parent.OnAttachmentQuantityChangedEx(this, delta);
7646
7648 {
7650 {
7652 }
7654 {
7655 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7657 }
7658 }
7659
7660 }
7661
7664 {
7665
7666 }
7667
7670 {
7672 }
7673
7675 {
7676 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7677
7679 {
7680 if (newLevel == GameConstants.STATE_RUINED)
7681 {
7683 EntityAI parent = GetHierarchyParent();
7684 if (parent && parent.IsFireplace())
7685 {
7686 CargoBase cargo = GetInventory().GetCargo();
7687 if (cargo)
7688 {
7690 {
7692 }
7693 }
7694 }
7695 }
7696
7698 {
7699
7701 return;
7702 }
7703
7704 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7705 {
7707 }
7708 }
7709 }
7710
7711
7713 {
7714 super.OnRightClick();
7715
7717 {
7719 {
7720 if (ScriptInputUserData.CanStoreInputUserData())
7721 {
7722 EntityAI root = GetHierarchyRoot();
7723 Man playerOwner = GetHierarchyRootPlayer();
7724 InventoryLocation dst = new InventoryLocation;
7725
7726
7727 if (!playerOwner && root && root == this)
7728 {
7730 }
7731 else
7732 {
7733
7734 GetInventory().GetCurrentInventoryLocation(dst);
7736 {
7739 {
7741 }
7742 else
7743 {
7745
7746
7747 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7748 {
7750 }
7751 else
7752 {
7753 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7754 }
7755 }
7756 }
7757 }
7758
7759 ScriptInputUserData ctx = new ScriptInputUserData;
7767 }
7768 }
7769 else if (!
GetGame().IsMultiplayer())
7770 {
7772 }
7773 }
7774 }
7775
7777 {
7778 if (root)
7779 {
7780 vector m4[4];
7781 root.GetTransform(m4);
7782 dst.SetGround(this, m4);
7783 }
7784 else
7785 {
7786 GetInventory().GetCurrentInventoryLocation(dst);
7787 }
7788 }
7789
7790 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7791 {
7792
7793 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7794 return false;
7795
7796 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7797 return false;
7798
7799
7801 return false;
7802
7803
7804 Magazine mag = Magazine.Cast(this);
7805 if (mag)
7806 {
7807 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7808 return false;
7809
7810 if (stack_max_limit)
7811 {
7812 Magazine other_mag = Magazine.Cast(other_item);
7813 if (other_item)
7814 {
7815 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7816 return false;
7817 }
7818
7819 }
7820 }
7821 else
7822 {
7823
7825 return false;
7826
7828 return false;
7829 }
7830
7831 PlayerBase player = null;
7832 if (CastTo(player, GetHierarchyRootPlayer()))
7833 {
7834 if (player.GetInventory().HasAttachment(this))
7835 return false;
7836
7837 if (player.IsItemsToDelete())
7838 return false;
7839 }
7840
7841 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7842 return false;
7843
7844 int slotID;
7846 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7847 return false;
7848
7849 return true;
7850 }
7851
7853 {
7855 }
7856
7858 {
7859 return m_IsResultOfSplit;
7860 }
7861
7863 {
7864 m_IsResultOfSplit = value;
7865 }
7866
7868 {
7870 }
7871
7873 {
7874 float other_item_quantity = other_item.GetQuantity();
7875 float this_free_space;
7876
7878
7880
7881 if (other_item_quantity > this_free_space)
7882 {
7883 return this_free_space;
7884 }
7885 else
7886 {
7887 return other_item_quantity;
7888 }
7889 }
7890
7892 {
7894 }
7895
7897 {
7899 return;
7900
7901 if (!IsMagazine() && other_item)
7902 {
7904 if (quantity_used != 0)
7905 {
7906 float hp1 = GetHealth01("","");
7907 float hp2 = other_item.GetHealth01("","");
7908 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7909 hpResult = hpResult / (
GetQuantity() + quantity_used);
7910
7911 hpResult *= GetMaxHealth();
7912 Math.Round(hpResult);
7913 SetHealth("", "Health", hpResult);
7914
7916 other_item.AddQuantity(-quantity_used);
7917 }
7918 }
7920 }
7921
7923 {
7924 #ifdef SERVER
7925 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7926 GetHierarchyParent().IncreaseLifetimeUp();
7927 #endif
7928 };
7929
7931 {
7932 PlayerBase p = PlayerBase.Cast(player);
7933
7934 array<int> recipesIds = p.m_Recipes;
7935 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7936 if (moduleRecipesManager)
7937 {
7938 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7939 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7940 }
7941
7942 for (int i = 0;i < recipesIds.Count(); i++)
7943 {
7944 int key = recipesIds.Get(i);
7945 string recipeName = moduleRecipesManager.GetRecipeName(key);
7947 }
7948 }
7949
7950
7951 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7952 {
7953 super.GetDebugActions(outputList);
7954
7955
7961
7962
7967
7972
7973
7977
7978
7980 {
7984 }
7985
7988
7989
7993
7995
7996 InventoryLocation loc = new InventoryLocation();
7997 GetInventory().GetCurrentInventoryLocation(loc);
7999 {
8000 if (Gizmo_IsSupported())
8003 }
8004
8006 }
8007
8008
8009
8010
8012 {
8013 super.OnAction(action_id, player, ctx);
8014
8016 {
8017 switch (action_id)
8018 {
8021 return true;
8024 return true;
8025 }
8026 }
8027
8029 {
8030 switch (action_id)
8031 {
8033 Delete();
8034 return true;
8035 }
8036 }
8037
8038 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8039 {
8040 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8041 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8042 PlayerBase p = PlayerBase.Cast(player);
8043 if (
EActions.RECIPES_RANGE_START < 1000)
8044 {
8045 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8046 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8047 }
8048 }
8049 #ifndef SERVER
8050 else if (action_id ==
EActions.WATCH_PLAYER)
8051 {
8052 PluginDeveloper.SetDeveloperItemClientEx(player);
8053 }
8054 #endif
8056 {
8057 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8058 {
8059 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8060 OnDebugButtonPressServer(id + 1);
8061 }
8062
8063 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8064 {
8065 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8067 }
8068
8069 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8070 {
8071 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8073 }
8074
8075 else if (action_id ==
EActions.ADD_QUANTITY)
8076 {
8077 if (IsMagazine())
8078 {
8079 Magazine mag = Magazine.Cast(this);
8080 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8081 }
8082 else
8083 {
8085 }
8086
8087 if (m_EM)
8088 {
8089 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8090 }
8091
8092 }
8093
8094 else if (action_id ==
EActions.REMOVE_QUANTITY)
8095 {
8096 if (IsMagazine())
8097 {
8098 Magazine mag2 = Magazine.Cast(this);
8099 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8100 }
8101 else
8102 {
8104 }
8105 if (m_EM)
8106 {
8107 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8108 }
8109
8110 }
8111
8112 else if (action_id ==
EActions.SET_QUANTITY_0)
8113 {
8115
8116 if (m_EM)
8117 {
8118 m_EM.SetEnergy(0);
8119 }
8120 }
8121
8122 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8123 {
8125
8126 if (m_EM)
8127 {
8128 m_EM.SetEnergy(m_EM.GetEnergyMax());
8129 }
8130 }
8131
8132 else if (action_id ==
EActions.ADD_HEALTH)
8133 {
8134 AddHealth("","",GetMaxHealth("","Health")/5);
8135 }
8136 else if (action_id ==
EActions.REMOVE_HEALTH)
8137 {
8138 AddHealth("","",-GetMaxHealth("","Health")/5);
8139 }
8140 else if (action_id ==
EActions.DESTROY_HEALTH)
8141 {
8142 SetHealth01("","",0);
8143 }
8144 else if (action_id ==
EActions.WATCH_ITEM)
8145 {
8147 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8148 #ifdef DEVELOPER
8149 SetDebugDeveloper_item(this);
8150 #endif
8151 }
8152
8153 else if (action_id ==
EActions.ADD_TEMPERATURE)
8154 {
8155 AddTemperature(20);
8156
8157 }
8158
8159 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8160 {
8161 AddTemperature(-20);
8162
8163 }
8164
8165 else if (action_id ==
EActions.FLIP_FROZEN)
8166 {
8167 SetFrozen(!GetIsFrozen());
8168
8169 }
8170
8171 else if (action_id ==
EActions.ADD_WETNESS)
8172 {
8174
8175 }
8176
8177 else if (action_id ==
EActions.REMOVE_WETNESS)
8178 {
8180
8181 }
8182
8183 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8184 {
8187
8188
8189 }
8190
8191 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8192 {
8195 }
8196
8197 else if (action_id ==
EActions.MAKE_SPECIAL)
8198 {
8199 auto debugParams = DebugSpawnParams.WithPlayer(player);
8200 OnDebugSpawnEx(debugParams);
8201 }
8202
8203 }
8204
8205
8206 return false;
8207 }
8208
8209
8210
8211
8215
8218
8219
8220
8222 {
8223 return false;
8224 }
8225
8226
8228 {
8229 return true;
8230 }
8231
8232
8234 {
8235 return true;
8236 }
8237
8238
8239
8241 {
8242 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8244 }
8245
8248 {
8249 return null;
8250 }
8251
8253 {
8254 return false;
8255 }
8256
8258 {
8259 return false;
8260 }
8261
8265
8266
8268 {
8269 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8270 return module_repairing.CanRepair(this, item_repair_kit);
8271 }
8272
8273
8274 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8275 {
8276 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8277 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8278 }
8279
8280
8282 {
8283
8284
8285
8286
8287
8288
8289
8290
8291 return 1;
8292 }
8293
8294
8295
8297 {
8299 }
8300
8301
8302
8304 {
8306 }
8307
8308
8317 {
8318 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8319
8320 if (player)
8321 {
8322 player.MessageStatus(text);
8323 }
8324 }
8325
8326
8335 {
8336 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8337
8338 if (player)
8339 {
8340 player.MessageAction(text);
8341 }
8342 }
8343
8344
8353 {
8354 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8355
8356 if (player)
8357 {
8358 player.MessageFriendly(text);
8359 }
8360 }
8361
8362
8371 {
8372 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8373
8374 if (player)
8375 {
8376 player.MessageImportant(text);
8377 }
8378 }
8379
8381 {
8382 return true;
8383 }
8384
8385
8386 override bool KindOf(
string tag)
8387 {
8388 bool found = false;
8389 string item_name = this.
GetType();
8392
8393 int array_size = item_tag_array.Count();
8394 for (int i = 0; i < array_size; i++)
8395 {
8396 if (item_tag_array.Get(i) == tag)
8397 {
8398 found = true;
8399 break;
8400 }
8401 }
8402 return found;
8403 }
8404
8405
8407 {
8408
8409 super.OnRPC(sender, rpc_type,ctx);
8410
8411
8412 switch (rpc_type)
8413 {
8414 #ifndef SERVER
8415 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8416 Param2<bool, string> p = new Param2<bool, string>(false, "");
8417
8419 return;
8420
8421 bool play = p.param1;
8422 string soundSet = p.param2;
8423
8424 if (play)
8425 {
8427 {
8429 {
8431 }
8432 }
8433 else
8434 {
8436 }
8437 }
8438 else
8439 {
8441 }
8442
8443 break;
8444 #endif
8445
8446 }
8447
8449 {
8451 }
8452 }
8453
8454
8455
8456
8458 {
8459 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8460 return plugin.GetID(
name);
8461 }
8462
8464 {
8465 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8466 return plugin.GetName(id);
8467 }
8468
8471 {
8472
8473
8474 int varFlags;
8475 if (!ctx.
Read(varFlags))
8476 return;
8477
8478 if (varFlags & ItemVariableFlags.FLOAT)
8479 {
8481 }
8482 }
8483
8485 {
8486
8487 super.SerializeNumericalVars(floats_out);
8488
8489
8490
8492 {
8494 }
8495
8497 {
8499 }
8500
8502 {
8504 }
8505
8507 {
8512 }
8513
8515 {
8517 }
8518 }
8519
8521 {
8522
8523 super.DeSerializeNumericalVars(floats);
8524
8525
8526 int index = 0;
8527 int mask = Math.Round(floats.Get(index));
8528
8529 index++;
8530
8532 {
8534 {
8536 }
8537 else
8538 {
8539 float quantity = floats.Get(index);
8541 }
8542 index++;
8543 }
8544
8546 {
8547 float wet = floats.Get(index);
8549 index++;
8550 }
8551
8553 {
8554 int liquidtype = Math.Round(floats.Get(index));
8556 index++;
8557 }
8558
8560 {
8562 index++;
8564 index++;
8566 index++;
8568 index++;
8569 }
8570
8572 {
8573 int cleanness = Math.Round(floats.Get(index));
8575 index++;
8576 }
8577 }
8578
8580 {
8581 super.WriteVarsToCTX(ctx);
8582
8583
8585 {
8587 }
8588
8590 {
8592 }
8593
8595 {
8597 }
8598
8600 {
8601 int r,g,b,a;
8607 }
8608
8610 {
8612 }
8613 }
8614
8616 {
8617 if (!super.ReadVarsFromCTX(ctx,version))
8618 return false;
8619
8620 int intValue;
8621 float value;
8622
8623 if (version < 140)
8624 {
8625 if (!ctx.
Read(intValue))
8626 return false;
8627
8628 m_VariablesMask = intValue;
8629 }
8630
8632 {
8633 if (!ctx.
Read(value))
8634 return false;
8635
8637 {
8639 }
8640 else
8641 {
8643 }
8644 }
8645
8646 if (version < 140)
8647 {
8649 {
8650 if (!ctx.
Read(value))
8651 return false;
8652 SetTemperatureDirect(value);
8653 }
8654 }
8655
8657 {
8658 if (!ctx.
Read(value))
8659 return false;
8661 }
8662
8664 {
8665 if (!ctx.
Read(intValue))
8666 return false;
8668 }
8669
8671 {
8672 int r,g,b,a;
8674 return false;
8676 return false;
8678 return false;
8680 return false;
8681
8683 }
8684
8686 {
8687 if (!ctx.
Read(intValue))
8688 return false;
8690 }
8691
8692 if (version >= 138 && version < 140)
8693 {
8695 {
8696 if (!ctx.
Read(intValue))
8697 return false;
8698 SetFrozen(intValue);
8699 }
8700 }
8701
8702 return true;
8703 }
8704
8705
8707 {
8710 {
8712 }
8713
8714 if (!super.OnStoreLoad(ctx, version))
8715 {
8717 return false;
8718 }
8719
8720 if (version >= 114)
8721 {
8722 bool hasQuickBarIndexSaved;
8723
8724 if (!ctx.
Read(hasQuickBarIndexSaved))
8725 {
8727 return false;
8728 }
8729
8730 if (hasQuickBarIndexSaved)
8731 {
8732 int itmQBIndex;
8733
8734
8735 if (!ctx.
Read(itmQBIndex))
8736 {
8738 return false;
8739 }
8740
8741 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8742 if (itmQBIndex != -1 && parentPlayer)
8743 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8744 }
8745 }
8746 else
8747 {
8748
8749 PlayerBase player;
8750 int itemQBIndex;
8751 if (version ==
int.
MAX)
8752 {
8753 if (!ctx.
Read(itemQBIndex))
8754 {
8756 return false;
8757 }
8758 }
8759 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8760 {
8761
8762 if (!ctx.
Read(itemQBIndex))
8763 {
8765 return false;
8766 }
8767 if (itemQBIndex != -1 && player)
8768 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8769 }
8770 }
8771
8772 if (version < 140)
8773 {
8774
8775 if (!LoadVariables(ctx, version))
8776 {
8778 return false;
8779 }
8780 }
8781
8782
8784 {
8786 return false;
8787 }
8788 if (version >= 132)
8789 {
8791 if (raib)
8792 {
8794 {
8796 return false;
8797 }
8798 }
8799 }
8800
8802 return true;
8803 }
8804
8805
8806
8808 {
8809 super.OnStoreSave(ctx);
8810
8811 PlayerBase player;
8812 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8813 {
8815
8816 int itemQBIndex = -1;
8817 itemQBIndex = player.FindQuickBarEntityIndex(this);
8818 ctx.
Write(itemQBIndex);
8819 }
8820 else
8821 {
8823 }
8824
8826
8828 if (raib)
8829 {
8831 }
8832 }
8833
8834
8836 {
8837 super.AfterStoreLoad();
8838
8840 {
8842 }
8843
8845 {
8848 }
8849 }
8850
8852 {
8853 super.EEOnAfterLoad();
8854
8856 {
8858 }
8859
8862 }
8863
8865 {
8866 return false;
8867 }
8868
8869
8870
8872 {
8874 {
8875 #ifdef PLATFORM_CONSOLE
8876
8878 {
8880 if (menu)
8881 {
8883 }
8884 }
8885 #endif
8886 }
8887
8889 {
8892 }
8893
8895 {
8896 SetWeightDirty();
8898 }
8900 {
8903 }
8904
8906 {
8909 }
8911 {
8914 }
8915
8916 super.OnVariablesSynchronized();
8917 }
8918
8919
8920
8922 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8923 {
8924 if (!IsServerCheck(allow_client))
8925 return false;
8926
8928 return false;
8929
8932
8933 if (value <= (min + 0.001))
8934 value = min;
8935
8936 if (value == min)
8937 {
8938 if (destroy_config)
8939 {
8940 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8941 if (dstr)
8942 {
8944 this.Delete();
8945 return true;
8946 }
8947 }
8948 else if (destroy_forced)
8949 {
8951 this.Delete();
8952 return true;
8953 }
8954
8956 }
8957
8960
8962 {
8964
8965 if (delta)
8967 }
8968
8970
8971 return false;
8972 }
8973
8974
8976 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8977 {
8979 }
8980
8982 {
8985 }
8986
8988 {
8991 }
8992
8994 override void SetQuantityNormalized(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8995 {
8996 float value_clamped = Math.Clamp(value, 0, 1);
8998 SetQuantity(result, destroy_config, destroy_forced);
8999 }
9000
9001
9004 {
9006 }
9007
9009 {
9011 }
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9023 {
9024 int slot = -1;
9025 if (GetInventory())
9026 {
9027 InventoryLocation il = new InventoryLocation;
9028 GetInventory().GetCurrentInventoryLocation(il);
9030 }
9031
9033 }
9034
9036 {
9037 float quantity_max = 0;
9038
9040 {
9041 if (attSlotID != -1)
9042 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9043
9044 if (quantity_max <= 0)
9046 }
9047
9048 if (quantity_max <= 0)
9050
9051 return quantity_max;
9052 }
9053
9055 {
9057 }
9058
9060 {
9062 }
9063
9064
9066 {
9068 }
9069
9071 {
9073 }
9074
9076 {
9078 }
9079
9080
9082 {
9083
9084 float weightEx = GetWeightEx();
9085 float special = GetInventoryAndCargoWeight();
9086 return weightEx - special;
9087 }
9088
9089
9091 {
9093 }
9094
9096 {
9098 {
9099 #ifdef DEVELOPER
9100 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9101 {
9102 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9104 }
9105 #endif
9106
9108 }
9109 else if (HasEnergyManager())
9110 {
9111 #ifdef DEVELOPER
9112 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9113 {
9114 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9115 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9116 }
9117 #endif
9118 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified();
9119 }
9120 else
9121 {
9122 #ifdef DEVELOPER
9123 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9124 {
9125 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9126 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9127 }
9128 #endif
9129 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified();
9130 }
9131 }
9132
9135 {
9136 int item_count = 0;
9138
9139 if (GetInventory().GetCargo() != NULL)
9140 {
9141 item_count = GetInventory().GetCargo().GetItemCount();
9142 }
9143
9144 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9145 {
9146 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9147 if (item)
9148 item_count += item.GetNumberOfItems();
9149 }
9150 return item_count;
9151 }
9152
9155 {
9156 float weight = 0;
9157 float wetness = 1;
9158 if (include_wetness)
9161 {
9162 weight = wetness * m_ConfigWeight;
9163 }
9165 {
9166 weight = 1;
9167 }
9168 return weight;
9169 }
9170
9171
9172
9174 {
9175 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9176 {
9177 GameInventory inv = GetInventory();
9178 array<EntityAI> items = new array<EntityAI>;
9180 for (int i = 0; i < items.Count(); i++)
9181 {
9183 if (item)
9184 {
9186 }
9187 }
9188 }
9189 }
9190
9191
9192
9193
9195 {
9196 float energy = 0;
9197 if (HasEnergyManager())
9198 {
9199 energy = GetCompEM().GetEnergy();
9200 }
9201 return energy;
9202 }
9203
9204
9206 {
9207 super.OnEnergyConsumed();
9208
9210 }
9211
9213 {
9214 super.OnEnergyAdded();
9215
9217 }
9218
9219
9221 {
9222 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9223 {
9225 {
9226 float energy_0to1 = GetCompEM().GetEnergy0To1();
9228 }
9229 }
9230 }
9231
9232
9234 {
9235 return ConfigGetFloat("heatIsolation");
9236 }
9237
9239 {
9241 }
9242
9244 {
9245 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9246 if (
GetGame().ConfigIsExisting(paramPath))
9248
9249 return 0.0;
9250 }
9251
9253 {
9254 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9255 if (
GetGame().ConfigIsExisting(paramPath))
9257
9258 return 0.0;
9259 }
9260
9261 override void SetWet(
float value,
bool allow_client =
false)
9262 {
9263 if (!IsServerCheck(allow_client))
9264 return;
9265
9268
9270
9271 m_VarWet = Math.Clamp(value, min, max);
9272
9274 {
9277 }
9278 }
9279
9280 override void AddWet(
float value)
9281 {
9283 }
9284
9286 {
9288 }
9289
9291 {
9293 }
9294
9296 {
9298 }
9299
9301 {
9303 }
9304
9306 {
9308 }
9309
9311 {
9314 if (newLevel != oldLevel)
9315 {
9317 }
9318 }
9319
9321 {
9322 SetWeightDirty();
9323 }
9324
9326 {
9327 return GetWetLevelInternal(
m_VarWet);
9328 }
9329
9330
9331
9333 {
9335 }
9336
9338 {
9340 }
9341
9343 {
9345 }
9346
9348 {
9350 }
9351
9352
9353
9355 {
9356 if (ConfigIsExisting("itemModelLength"))
9357 {
9358 return ConfigGetFloat("itemModelLength");
9359 }
9360 return 0;
9361 }
9362
9364 {
9365 if (ConfigIsExisting("itemAttachOffset"))
9366 {
9367 return ConfigGetFloat("itemAttachOffset");
9368 }
9369 return 0;
9370 }
9371
9372 override void SetCleanness(
int value,
bool allow_client =
false)
9373 {
9374 if (!IsServerCheck(allow_client))
9375 return;
9376
9378
9380
9383 }
9384
9386 {
9388 }
9389
9391 {
9392 return true;
9393 }
9394
9395
9396
9397
9399 {
9401 }
9402
9404 {
9406 }
9407
9408
9409
9410
9411 override void SetColor(
int r,
int g,
int b,
int a)
9412 {
9418 }
9420 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9421 {
9426 }
9427
9429 {
9431 }
9432
9435 {
9436 int r,g,b,a;
9438 r = r/255;
9439 g = g/255;
9440 b = b/255;
9441 a = a/255;
9442 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9443 }
9444
9445
9446
9447 override void SetLiquidType(
int value,
bool allow_client =
false)
9448 {
9449 if (!IsServerCheck(allow_client))
9450 return;
9451
9456 }
9457
9459 {
9460 return ConfigGetInt("varLiquidTypeInit");
9461 }
9462
9464 {
9466 }
9467
9469 {
9471 SetFrozen(false);
9472 }
9473
9476 {
9477 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9478 }
9479
9480
9483 {
9484 PlayerBase nplayer;
9485 if (PlayerBase.CastTo(nplayer, player))
9486 {
9488
9489 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9490 }
9491 }
9492
9493
9496 {
9497 PlayerBase nplayer;
9498 if (PlayerBase.CastTo(nplayer,player))
9499 {
9500
9501 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9502
9503 }
9504
9505
9506 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9507
9508
9509 if (HasEnergyManager())
9510 {
9511 GetCompEM().UpdatePlugState();
9512 }
9513 }
9514
9515
9517 {
9518 super.OnPlacementStarted(player);
9519
9521 }
9522
9523 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9524 {
9526 {
9527 m_AdminLog.OnPlacementComplete(player,
this);
9528 }
9529
9530 super.OnPlacementComplete(player, position, orientation);
9531 }
9532
9533
9534
9535
9536
9538 {
9540 {
9541 return true;
9542 }
9543 else
9544 {
9545 return false;
9546 }
9547 }
9548
9549
9551 {
9553 {
9555 }
9556 }
9557
9558
9560 {
9562 }
9563
9565 {
9567 }
9568
9569 override void InsertAgent(
int agent,
float count = 1)
9570 {
9571 if (count < 1)
9572 return;
9573
9575 }
9576
9579 {
9581 }
9582
9583
9585 {
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
9619
9620
9621
9622
9623
9624
9625
9626
9627
9628
9629
9631 {
9633 return false;
9634 return true;
9635 }
9636
9638 {
9639
9641 }
9642
9643
9646 {
9647 super.CheckForRoofLimited(timeTresholdMS);
9648
9650 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9651 {
9652 m_PreviousRoofTestTime = time;
9653 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9654 }
9655 }
9656
9657
9659 {
9661 {
9662 return 0;
9663 }
9664
9665 if (GetInventory().GetAttachmentSlotsCount() != 0)
9666 {
9667 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9668 if (filter)
9669 return filter.GetProtectionLevel(type, false, system);
9670 else
9671 return 0;
9672 }
9673
9674 string subclassPath, entryName;
9675
9676 switch (type)
9677 {
9679 entryName = "biological";
9680 break;
9682 entryName = "chemical";
9683 break;
9684 default:
9685 entryName = "biological";
9686 break;
9687 }
9688
9689 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9690
9692 }
9693
9694
9695
9698 {
9699 if (!IsMagazine())
9701
9703 }
9704
9705
9706
9707
9708
9713 {
9714 return true;
9715 }
9716
9718 {
9720 }
9721
9722
9723
9724
9725
9727 {
9728 if (parent)
9729 {
9730 if (parent.IsInherited(DayZInfected))
9731 return true;
9732
9733 if (!parent.IsRuined())
9734 return true;
9735 }
9736
9737 return true;
9738 }
9739
9741 {
9742 if (!super.CanPutAsAttachment(parent))
9743 {
9744 return false;
9745 }
9746
9747 if (!IsRuined() && !parent.IsRuined())
9748 {
9749 return true;
9750 }
9751
9752 return false;
9753 }
9754
9756 {
9757
9758
9759
9760
9761 return super.CanReceiveItemIntoCargo(item);
9762 }
9763
9765 {
9766
9767
9768
9769
9770 GameInventory attachmentInv = attachment.GetInventory();
9772 {
9773 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9774 return false;
9775 }
9776
9777 InventoryLocation loc = new InventoryLocation();
9778 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9779 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9780 return false;
9781
9782 return super.CanReceiveAttachment(attachment, slotId);
9783 }
9784
9786 {
9787 if (!super.CanReleaseAttachment(attachment))
9788 return false;
9789
9790 return GetInventory().AreChildrenAccessible();
9791 }
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9814 {
9815 int id = muzzle_owner.GetMuzzleID();
9816 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9817
9818 if (WPOF_array)
9819 {
9820 for (int i = 0; i < WPOF_array.Count(); i++)
9821 {
9822 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9823
9824 if (WPOF)
9825 {
9826 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9827 }
9828 }
9829 }
9830 }
9831
9832
9834 {
9835 int id = muzzle_owner.GetMuzzleID();
9837
9838 if (WPOBE_array)
9839 {
9840 for (int i = 0; i < WPOBE_array.Count(); i++)
9841 {
9842 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9843
9844 if (WPOBE)
9845 {
9846 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9847 }
9848 }
9849 }
9850 }
9851
9852
9854 {
9855 int id = muzzle_owner.GetMuzzleID();
9856 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9857
9858 if (WPOOH_array)
9859 {
9860 for (int i = 0; i < WPOOH_array.Count(); i++)
9861 {
9862 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9863
9864 if (WPOOH)
9865 {
9866 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9867 }
9868 }
9869 }
9870 }
9871
9872
9874 {
9875 int id = muzzle_owner.GetMuzzleID();
9876 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9877
9878 if (WPOOH_array)
9879 {
9880 for (int i = 0; i < WPOOH_array.Count(); i++)
9881 {
9882 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9883
9884 if (WPOOH)
9885 {
9886 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9887 }
9888 }
9889 }
9890 }
9891
9892
9894 {
9895 int id = muzzle_owner.GetMuzzleID();
9896 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9897
9898 if (WPOOH_array)
9899 {
9900 for (int i = 0; i < WPOOH_array.Count(); i++)
9901 {
9902 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9903
9904 if (WPOOH)
9905 {
9906 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9907 }
9908 }
9909 }
9910 }
9911
9912
9913
9915 {
9917 {
9918 return true;
9919 }
9920
9921 return false;
9922 }
9923
9925 {
9927 {
9928 return true;
9929 }
9930
9931 return false;
9932 }
9933
9935 {
9937 {
9938 return true;
9939 }
9940
9941 return false;
9942 }
9943
9945 {
9946 return false;
9947 }
9948
9951 {
9952 return UATimeSpent.DEFAULT_DEPLOY;
9953 }
9954
9955
9956
9957
9959 {
9961 SetSynchDirty();
9962 }
9963
9965 {
9967 }
9968
9969
9971 {
9972 return false;
9973 }
9974
9977 {
9978 string att_type = "None";
9979
9980 if (ConfigIsExisting("soundAttType"))
9981 {
9982 att_type = ConfigGetString("soundAttType");
9983 }
9984
9986 }
9987
9989 {
9991 }
9992
9993
9994
9995
9996
10002
10004 {
10007
10009 }
10010
10011
10013 {
10015 return;
10016
10018
10021
10024
10025 SoundParameters params = new SoundParameters();
10029 }
10030
10031
10033 {
10035 return;
10036
10038 SetSynchDirty();
10039
10042 }
10043
10044
10046 {
10048 return;
10049
10051 SetSynchDirty();
10052
10055 }
10056
10058 {
10060 }
10061
10063 {
10065 }
10066
10069 {
10070 if (!
GetGame().IsDedicatedServer())
10071 {
10072 if (ConfigIsExisting("attachSoundSet"))
10073 {
10074 string cfg_path = "";
10075 string soundset = "";
10076 string type_name =
GetType();
10077
10080 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10081 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10082
10083 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10084 {
10085 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10086 {
10087 if (cfg_slot_array[i] == slot_type)
10088 {
10089 soundset = cfg_soundset_array[i];
10090 break;
10091 }
10092 }
10093 }
10094
10095 if (soundset != "")
10096 {
10097 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10099 }
10100 }
10101 }
10102 }
10103
10105 {
10106
10107 }
10108
10109 void OnApply(PlayerBase player);
10110
10112 {
10113 return 1.0;
10114 };
10115
10117 {
10119 }
10120
10122 {
10124 }
10125
10127
10129 {
10130 SetDynamicPhysicsLifeTime(0.01);
10132 }
10133
10135 {
10136 array<string> zone_names = new array<string>;
10137 GetDamageZones(zone_names);
10138 for (int i = 0; i < zone_names.Count(); i++)
10139 {
10140 SetHealthMax(zone_names.Get(i),"Health");
10141 }
10142 SetHealthMax("","Health");
10143 }
10144
10147 {
10148 float global_health = GetHealth01("","Health");
10149 array<string> zones = new array<string>;
10150 GetDamageZones(zones);
10151
10152 for (int i = 0; i < zones.Count(); i++)
10153 {
10154 SetHealth01(zones.Get(i),"Health",global_health);
10155 }
10156 }
10157
10160 {
10161 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10162 }
10163
10165 {
10166 if (!hasRootAsPlayer)
10167 {
10168 if (refParentIB)
10169 {
10170
10171 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10172 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10173
10174 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10175 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10176
10179 }
10180 else
10181 {
10182
10185 }
10186 }
10187 }
10188
10190 {
10192 {
10193 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10194 if (
GetTemperature() != target || !IsFreezeThawProgressFinished())
10195 {
10196 float heatPermCoef = 1.0;
10198 while (ent)
10199 {
10200 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10201 ent = ent.GetHierarchyParent();
10202 }
10203
10204 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10205 }
10206 }
10207 }
10208
10210 {
10211
10212 EntityAI parent = GetHierarchyParent();
10213 if (!parent)
10214 {
10215 hasParent = false;
10216 hasRootAsPlayer = false;
10217 }
10218 else
10219 {
10220 hasParent = true;
10221 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10222 refParentIB =
ItemBase.Cast(parent);
10223 }
10224 }
10225
10226 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10227 {
10228
10229 }
10230
10232 {
10233
10234 return false;
10235 }
10236
10238 {
10239
10240
10241 return false;
10242 }
10243
10245 {
10246
10247 return false;
10248 }
10249
10252 {
10253 return !GetIsFrozen() &&
IsOpen();
10254 }
10255
10257 {
10258 bool hasParent = false, hasRootAsPlayer = false;
10260
10261 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10262 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10263
10264 if (wwtu || foodDecay)
10265 {
10269
10270 if (processWetness || processTemperature || processDecay)
10271 {
10273
10274 if (processWetness)
10275 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10276
10277 if (processTemperature)
10279
10280 if (processDecay)
10281 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10282 }
10283 }
10284 }
10285
10288 {
10290 }
10291
10293 {
10296
10297 return super.GetTemperatureFreezeThreshold();
10298 }
10299
10301 {
10304
10305 return super.GetTemperatureThawThreshold();
10306 }
10307
10309 {
10312
10313 return super.GetItemOverheatThreshold();
10314 }
10315
10317 {
10319 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10320
10321 return super.GetTemperatureFreezeTime();
10322 }
10323
10325 {
10327 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10328
10329 return super.GetTemperatureThawTime();
10330 }
10331
10336
10338 {
10339 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10340 }
10341
10343 {
10344 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10345 }
10346
10349 {
10351 }
10352
10354 {
10356 }
10357
10359 {
10361 }
10362
10365 {
10366 return null;
10367 }
10368
10371 {
10372 return false;
10373 }
10374
10376 {
10378 {
10381 if (!trg)
10382 {
10384 explosive = this;
10385 }
10386
10387 explosive.PairRemote(trg);
10389
10390 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10391 trg.SetPersistentPairID(persistentID);
10392 explosive.SetPersistentPairID(persistentID);
10393
10394 return true;
10395 }
10396 return false;
10397 }
10398
10401 {
10402 float ret = 1.0;
10405 ret *= GetHealth01();
10406
10407 return ret;
10408 }
10409
10410 #ifdef DEVELOPER
10411 override void SetDebugItem()
10412 {
10413 super.SetDebugItem();
10414 _itemBase = this;
10415 }
10416
10418 {
10419 string text = super.GetDebugText();
10420
10422 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10423
10424 return text;
10425 }
10426 #endif
10427
10429 {
10430 return true;
10431 }
10432
10434
10436
10438 {
10441 }
10442
10443
10451
10467}
10468
10470{
10472 if (entity)
10473 {
10474 bool is_item = entity.IsInherited(
ItemBase);
10475 if (is_item && full_quantity)
10476 {
10479 }
10480 }
10481 else
10482 {
10484 return NULL;
10485 }
10486 return entity;
10487}
10488
10490{
10491 if (item)
10492 {
10493 if (health > 0)
10494 item.SetHealth("", "", health);
10495
10496 if (item.CanHaveTemperature())
10497 {
10499 if (item.CanFreeze())
10500 item.SetFrozen(false);
10501 }
10502
10503 if (item.HasEnergyManager())
10504 {
10505 if (quantity >= 0)
10506 {
10507 item.GetCompEM().SetEnergy0To1(quantity);
10508 }
10509 else
10510 {
10512 }
10513 }
10514 else if (item.IsMagazine())
10515 {
10516 Magazine mag = Magazine.Cast(item);
10517 if (quantity >= 0)
10518 {
10519 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10520 }
10521 else
10522 {
10524 }
10525
10526 }
10527 else
10528 {
10529 if (quantity >= 0)
10530 {
10531 item.SetQuantityNormalized(quantity, false);
10532 }
10533 else
10534 {
10536 }
10537
10538 }
10539 }
10540}
10541
10542#ifdef DEVELOPER
10544#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
Open
Implementations only.
override void EEOnCECreate()
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 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)
bool ShouldSplitQuantity(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)
override 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...
bool m_HideSelectionsBySlot
bool IsOverheatingEffectActive()
void SetIsBeingPlaced(bool is_being_placed)
int GetLiquidContainerMask()
void SetInventoryLocationToVicinityOrCurrent(EntityAI root, inout InventoryLocation dst)
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()
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)
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 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 void GizmoSelectObject(Object object)
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 native void GizmoSelectPhysics(Physics physics)
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
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 string GetFoldSoundset()
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 string GetLoopFoldSoundset()
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.