5567{
5569 {
5570 return true;
5571 }
5572};
5573
5574
5575
5577{
5581
5583
5586
5587
5588
5589
5590
5599
5605
5610
5615
5636 protected bool m_IsResultOfSplit
5637
5639
5644
5645
5646
5648
5652
5653
5654
5656
5659
5660
5661
5667
5668
5676
5679
5680
5682
5683
5685
5686
5691
5692
5697
5698
5700
5701
5703 {
5708
5709 if (!
GetGame().IsDedicatedServer())
5710 {
5712 {
5714
5716 {
5718 }
5719 }
5720
5723 }
5724
5725 m_OldLocation = null;
5726
5728 {
5730 }
5731
5732 if (ConfigIsExisting("headSelectionsToHide"))
5733 {
5736 }
5737
5739 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5740 {
5742 }
5743
5745
5746 m_IsResultOfSplit = false;
5747
5749 }
5750
5752 {
5753 super.InitItemVariables();
5754
5760 m_Count = ConfigGetInt(
"count");
5761
5764
5769
5772
5777
5789
5793
5794
5797 if (ConfigIsExisting("canBeSplit"))
5798 {
5801 }
5802
5804 if (ConfigIsExisting("itemBehaviour"))
5806
5807
5810 RegisterNetSyncVariableInt("m_VarLiquidType");
5811 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5812
5813 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5814 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5815 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5816
5817 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5818 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5819 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5820 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5821
5822 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5823 RegisterNetSyncVariableBool("m_IsTakeable");
5824 RegisterNetSyncVariableBool("m_IsHologram");
5825
5828 {
5831 }
5832
5834
5836 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5838
5839 }
5840
5842 {
5844 }
5845
5847 {
5850 {
5855 }
5856 }
5857
5858 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5859 {
5861 {
5864 }
5865
5867 }
5868
5870 {
5876 }
5877
5879
5881 {
5883
5884 if (!action)
5885 {
5886 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5887 return;
5888 }
5889
5891 if (!ai)
5892 {
5894 return;
5895 }
5896
5898 if (!action_array)
5899 {
5900 action_array = new array<ActionBase_Basic>;
5902 }
5903 if (LogManager.IsActionLogEnable())
5904 {
5905 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5906 }
5907
5908 if (action_array.Find(action) != -1)
5909 {
5910 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5911 }
5912 else
5913 {
5914 action_array.Insert(action);
5915 }
5916 }
5917
5919 {
5921 ActionBase action = player.GetActionManager().GetAction(actionName);
5924
5925 if (action_array)
5926 {
5927 action_array.RemoveItem(action);
5928 }
5929 }
5930
5931
5932
5934 {
5935 ActionOverrideData overrideData = new ActionOverrideData();
5939
5941 if (!actionMap)
5942 {
5945 }
5946
5947 actionMap.Insert(this.
Type(), overrideData);
5948
5949 }
5950
5952
5954
5955
5957 {
5960
5963
5964 string config_to_search = "CfgVehicles";
5965 string muzzle_owner_config;
5966
5968 {
5969 if (IsInherited(Weapon))
5970 config_to_search = "CfgWeapons";
5971
5972 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5973
5974 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5975
5977
5978 if (config_OnFire_subclass_count > 0)
5979 {
5980 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5981
5982 for (int i = 0; i < config_OnFire_subclass_count; i++)
5983 {
5984 string particle_class = "";
5986 string config_OnFire_entry = config_OnFire_class + particle_class;
5987 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5988 WPOF_array.Insert(WPOF);
5989 }
5990
5991
5993 }
5994 }
5995
5997 {
5998 config_to_search = "CfgWeapons";
5999 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6000
6001 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6002
6004
6005 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6006 {
6007 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6008
6009 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6010 {
6011 string particle_class2 = "";
6013 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6014 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6015 WPOBE_array.Insert(WPOBE);
6016 }
6017
6018
6020 }
6021 }
6022 }
6023
6024
6026 {
6029
6031 {
6032 string config_to_search = "CfgVehicles";
6033
6034 if (IsInherited(Weapon))
6035 config_to_search = "CfgWeapons";
6036
6037 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6038 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6039
6040 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6041 {
6042
6044
6046 {
6048 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6050 return;
6051 }
6052
6055
6056
6057
6059 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6060
6061 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6062 {
6063 string particle_class = "";
6065 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6067
6068 if (entry_type == CT_CLASS)
6069 {
6070 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6071 WPOOH_array.Insert(WPOF);
6072 }
6073 }
6074
6075
6077 }
6078 }
6079 }
6080
6082 {
6084 }
6085
6087 {
6089 {
6091
6094
6097
6098 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6099 }
6100 }
6101
6103 {
6105 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6106
6108 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6109
6111 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6112
6114 {
6116 }
6117 }
6118
6120 {
6122 }
6123
6125 {
6128 else
6130
6132 {
6135 }
6136 else
6137 {
6140
6143 }
6144
6146 }
6147
6149 {
6151 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6152 }
6153
6155 {
6157 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6159 }
6160
6162 {
6164 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6165 }
6166
6168 {
6171
6172 OverheatingParticle OP = new OverheatingParticle();
6177
6179 }
6180
6182 {
6185
6186 return -1;
6187 }
6188
6190 {
6192 {
6195
6196 for (int i = count; i > 0; --i)
6197 {
6198 int id = i - 1;
6201
6204
6205 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6206 {
6207 if (p)
6208 {
6211 }
6212 }
6213 }
6214 }
6215 }
6216
6218 {
6220 {
6222 {
6223 int id = i - 1;
6225
6226 if (OP)
6227 {
6229
6230 if (p)
6231 {
6233 }
6234
6235 delete OP;
6236 }
6237 }
6238
6241 }
6242 }
6243
6246 {
6247 return 0.0;
6248 }
6249
6250
6252 {
6253 return 250;
6254 }
6255
6257 {
6258 return 0;
6259 }
6260
6263 {
6265 return true;
6266
6267 return false;
6268 }
6269
6272 {
6275
6277 {
6279 }
6280 else
6281 {
6282
6284 }
6285
6287 }
6288
6295 {
6296 return -1;
6297 }
6298
6299
6300
6301
6303 {
6305 {
6307 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6308
6309 if (r_index >= 0)
6310 {
6311 InventoryLocation r_il = new InventoryLocation;
6312 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6313
6314 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6317 {
6318 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6319 }
6321 {
6322 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6323 }
6324
6325 }
6326
6327 player.GetHumanInventory().ClearUserReservedLocation(this);
6328 }
6329
6332 }
6333
6334
6335
6336
6338 {
6339 return ItemBase.m_DebugActionsMask;
6340 }
6341
6343 {
6344 return ItemBase.m_DebugActionsMask & mask;
6345 }
6346
6348 {
6349 ItemBase.m_DebugActionsMask = mask;
6350 }
6351
6353 {
6354 ItemBase.m_DebugActionsMask |= mask;
6355 }
6356
6358 {
6359 ItemBase.m_DebugActionsMask &= ~mask;
6360 }
6361
6363 {
6365 {
6367 }
6368 else
6369 {
6371 }
6372 }
6373
6374
6376 {
6377 if (GetEconomyProfile())
6378 {
6379 float q_max = GetEconomyProfile().GetQuantityMax();
6380 if (q_max > 0)
6381 {
6382 float q_min = GetEconomyProfile().GetQuantityMin();
6383 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6384
6386 {
6387 ComponentEnergyManager comp = GetCompEM();
6389 {
6391 }
6392 }
6394 {
6396
6397 }
6398
6399 }
6400 }
6401 }
6402
6405 {
6406 EntityAI parent = GetHierarchyParent();
6407
6408 if (parent)
6409 {
6410 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6411 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6412 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6413 }
6414 }
6415
6418 {
6419 EntityAI parent = GetHierarchyParent();
6420
6421 if (parent)
6422 {
6423 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6424 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6425 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6426 }
6427 }
6428
6430 {
6431
6432
6433
6434
6436
6438 {
6439 if (ScriptInputUserData.CanStoreInputUserData())
6440 {
6441 ScriptInputUserData ctx = new ScriptInputUserData;
6447 ctx.
Write(use_stack_max);
6450
6452 {
6453 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6454 }
6455 }
6456 }
6457 else if (!
GetGame().IsMultiplayer())
6458 {
6460 }
6461 }
6462
6464 {
6466 }
6467
6469 {
6471 }
6472
6474 {
6476 }
6477
6479 {
6480
6481 return false;
6482 }
6483
6485 {
6486 return false;
6487 }
6488
6492 {
6493 return false;
6494 }
6495
6497 {
6498 return "";
6499 }
6500
6502
6504 {
6505 return false;
6506 }
6507
6509 {
6510 return true;
6511 }
6512
6513
6514
6516 {
6517 return true;
6518 }
6519
6521 {
6522 return true;
6523 }
6524
6526 {
6527 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6529 }
6530
6532 {
6534 }
6535
6537 {
6539 if (!is_being_placed)
6541 SetSynchDirty();
6542 }
6543
6544
6546
6548 {
6550 }
6551
6553 {
6555 }
6556
6558 {
6559 return 1;
6560 }
6561
6563 {
6564 return false;
6565 }
6566
6568 {
6570 SetSynchDirty();
6571 }
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6608 {
6609 super.OnMovedInsideCargo(container);
6610
6611 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6612 }
6613
6614 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6615 {
6616 super.EEItemLocationChanged(oldLoc,newLoc);
6617
6618 PlayerBase new_player = null;
6619 PlayerBase old_player = null;
6620
6621 if (newLoc.GetParent())
6622 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6623
6624 if (oldLoc.GetParent())
6625 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6626
6628 {
6629 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6630
6631 if (r_index >= 0)
6632 {
6633 InventoryLocation r_il = new InventoryLocation;
6634 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6635
6636 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6639 {
6640 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6641 }
6643 {
6644 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6645 }
6646
6647 }
6648 }
6649
6651 {
6652 if (new_player)
6653 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6654
6655 if (new_player == old_player)
6656 {
6657
6658 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6659 {
6661 {
6662 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6663 {
6664 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6665 }
6666 }
6667 else
6668 {
6669 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6670 }
6671 }
6672
6673 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6674 {
6675 int type = oldLoc.GetType();
6677 {
6678 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6679 }
6681 {
6682 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6683 }
6684 }
6685 if (!m_OldLocation)
6686 {
6687 m_OldLocation = new InventoryLocation;
6688 }
6689 m_OldLocation.Copy(oldLoc);
6690 }
6691 else
6692 {
6693 if (m_OldLocation)
6694 {
6695 m_OldLocation.Reset();
6696 }
6697 }
6698
6700 }
6701 else
6702 {
6703 if (new_player)
6704 {
6705 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6706 if (res_index >= 0)
6707 {
6708 InventoryLocation il = new InventoryLocation;
6709 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6711 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6714 {
6715 il.
GetParent().GetOnReleaseLock().Invoke(it);
6716 }
6718 {
6720 }
6721
6722 }
6723 }
6725 {
6726
6728 }
6729
6730 if (m_OldLocation)
6731 {
6732 m_OldLocation.Reset();
6733 }
6734 }
6735 }
6736
6737 override void EOnContact(IEntity other, Contact extra)
6738 {
6740 {
6741 int liquidType = -1;
6743 if (impactSpeed > 0.0)
6744 {
6746 #ifndef SERVER
6748 #else
6750 SetSynchDirty();
6751 #endif
6753 }
6754 }
6755
6756 #ifdef SERVER
6757 if (GetCompEM() && GetCompEM().IsPlugged())
6758 {
6759 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6760 GetCompEM().UnplugThis();
6761 }
6762 #endif
6763 }
6764
6766
6768 {
6770 }
6771
6773 {
6774
6775 }
6776
6778 {
6779 super.OnItemLocationChanged(old_owner, new_owner);
6780
6781 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6782 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6783
6784 if (!relatedPlayer && playerNew)
6785 relatedPlayer = playerNew;
6786
6787 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6788 {
6790 if (actionMgr)
6791 {
6792 ActionBase currentAction = actionMgr.GetRunningAction();
6793 if (currentAction)
6795 }
6796 }
6797
6798 Man ownerPlayerOld = null;
6799 Man ownerPlayerNew = null;
6800
6801 if (old_owner)
6802 {
6803 if (old_owner.
IsMan())
6804 {
6805 ownerPlayerOld = Man.Cast(old_owner);
6806 }
6807 else
6808 {
6809 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6810 }
6811 }
6812 else
6813 {
6815 {
6817
6818 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6819 {
6820 GetCompEM().UnplugThis();
6821 }
6822 }
6823 }
6824
6825 if (new_owner)
6826 {
6827 if (new_owner.
IsMan())
6828 {
6829 ownerPlayerNew = Man.Cast(new_owner);
6830 }
6831 else
6832 {
6833 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6834 }
6835 }
6836
6837 if (ownerPlayerOld != ownerPlayerNew)
6838 {
6839 if (ownerPlayerOld)
6840 {
6841 array<EntityAI> subItemsExit = new array<EntityAI>;
6843 for (int i = 0; i < subItemsExit.Count(); i++)
6844 {
6847 }
6848 }
6849
6850 if (ownerPlayerNew)
6851 {
6852 array<EntityAI> subItemsEnter = new array<EntityAI>;
6854 for (int j = 0; j < subItemsEnter.Count(); j++)
6855 {
6858 }
6859 }
6860 }
6861 else if (ownerPlayerNew != null)
6862 {
6863 PlayerBase nplayer;
6864 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6865 {
6866 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6868 for (int k = 0; k < subItemsUpdate.Count(); k++)
6869 {
6871 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6872 }
6873 }
6874 }
6875
6876 if (old_owner)
6877 old_owner.OnChildItemRemoved(this);
6878 if (new_owner)
6879 new_owner.OnChildItemReceived(this);
6880 }
6881
6882
6884 {
6885 super.EEDelete(parent);
6886 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6887 if (player)
6888 {
6890
6891 if (player.IsAlive())
6892 {
6893 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6894 if (r_index >= 0)
6895 {
6896 InventoryLocation r_il = new InventoryLocation;
6897 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6898
6899 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6902 {
6903 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6904 }
6906 {
6907 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6908 }
6909
6910 }
6911
6912 player.RemoveQuickBarEntityShortcut(this);
6913 }
6914 }
6915 }
6916
6918 {
6919 super.EEKilled(killer);
6920
6923 {
6924 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6925 {
6926 if (IsMagazine())
6927 {
6928 if (Magazine.Cast(this).GetAmmoCount() > 0)
6929 {
6931 }
6932 }
6933 else
6934 {
6936 }
6937 }
6938 }
6939 }
6940
6942 {
6943 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6944
6945 super.OnWasAttached(parent, slot_id);
6946
6949
6951 }
6952
6954 {
6955 super.OnWasDetached(parent, slot_id);
6956
6959 }
6960
6962 {
6963 int idx;
6966
6967 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6968 if (inventory_slots.Count() < 1)
6969 {
6970 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6971 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6972 }
6973 else
6974 {
6975 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6976 }
6977
6978 idx = inventory_slots.Find(slot);
6979 if (idx < 0)
6980 return "";
6981
6982 return attach_types.Get(idx);
6983 }
6984
6986 {
6987 int idx = -1;
6988 string slot;
6989
6992
6993 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6994 if (inventory_slots.Count() < 1)
6995 {
6996 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
6997 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6998 }
6999 else
7000 {
7001 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7002 if (detach_types.Count() < 1)
7003 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7004 }
7005
7006 for (int i = 0; i < inventory_slots.Count(); i++)
7007 {
7008 slot = inventory_slots.Get(i);
7009 }
7010
7011 if (slot != "")
7012 {
7013 if (detach_types.Count() == 1)
7014 idx = 0;
7015 else
7016 idx = inventory_slots.Find(slot);
7017 }
7018 if (idx < 0)
7019 return "";
7020
7021 return detach_types.Get(idx);
7022 }
7023
7025 {
7026
7028
7029
7030 float min_time = 1;
7031 float max_time = 3;
7032 float delay = Math.RandomFloat(min_time, max_time);
7033
7034 explode_timer.Run(delay, this, "DoAmmoExplosion");
7035 }
7036
7038 {
7039 Magazine magazine = Magazine.Cast(this);
7040 int pop_sounds_count = 6;
7041 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7042
7043
7044 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7045 string sound_name = pop_sounds[ sound_idx ];
7047
7048
7049 magazine.ServerAddAmmoCount(-1);
7050
7051
7052 float min_temp_to_explode = 100;
7053
7054 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7055 {
7057 }
7058 }
7059
7060
7061 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7062 {
7063 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7064
7065 const int CHANCE_DAMAGE_CARGO = 4;
7066 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7067 const int CHANCE_DAMAGE_NOTHING = 2;
7068
7070 {
7071 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7072 int chances;
7073 int rnd;
7074
7075 if (GetInventory().GetCargo())
7076 {
7077 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7078 rnd = Math.RandomInt(0,chances);
7079
7080 if (rnd < CHANCE_DAMAGE_CARGO)
7081 {
7083 }
7084 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7085 {
7087 }
7088 }
7089 else
7090 {
7091 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7092 rnd = Math.RandomInt(0,chances);
7093
7094 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7095 {
7097 }
7098 }
7099 }
7100 }
7101
7103 {
7104 if (GetInventory().GetCargo())
7105 {
7106 int item_count = GetInventory().GetCargo().GetItemCount();
7107 if (item_count > 0)
7108 {
7109 int random_pick = Math.RandomInt(0, item_count);
7111 if (!item.IsExplosive())
7112 {
7113 item.AddHealth("","",damage);
7114 return true;
7115 }
7116 }
7117 }
7118 return false;
7119 }
7120
7122 {
7123 int attachment_count = GetInventory().AttachmentCount();
7124 if (attachment_count > 0)
7125 {
7126 int random_pick = Math.RandomInt(0, attachment_count);
7127 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7128 if (!attachment.IsExplosive())
7129 {
7130 attachment.AddHealth("","",damage);
7131 return true;
7132 }
7133 }
7134 return false;
7135 }
7136
7138 {
7140 }
7141
7143 {
7145 return GetInventory().CanRemoveEntity();
7146
7147 return false;
7148 }
7149
7151 {
7153 return;
7154
7156 {
7157 if (ScriptInputUserData.CanStoreInputUserData())
7158 {
7159 ScriptInputUserData ctx = new ScriptInputUserData;
7164 ctx.
Write(destination_entity);
7168 }
7169 }
7170 else if (!
GetGame().IsMultiplayer())
7171 {
7173 }
7174 }
7175
7177 {
7179 return;
7180
7181 float split_quantity_new;
7185 InventoryLocation loc = new InventoryLocation;
7186
7187 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7188 {
7190 split_quantity_new = stack_max;
7191 else
7193
7194 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7195 if (new_item)
7196 {
7197 new_item.SetResultOfSplit(true);
7198 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7200 new_item.SetQuantity(split_quantity_new);
7201 }
7202 }
7203 else if (destination_entity && slot_id == -1)
7204 {
7205 if (quantity > stack_max)
7206 split_quantity_new = stack_max;
7207 else
7208 split_quantity_new = quantity;
7209
7211 {
7214 }
7215
7216 if (new_item)
7217 {
7218 new_item.SetResultOfSplit(true);
7219 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7221 new_item.SetQuantity(split_quantity_new);
7222 }
7223 }
7224 else
7225 {
7226 if (stack_max != 0)
7227 {
7229 {
7231 }
7232
7233 if (split_quantity_new == 0)
7234 {
7235 if (!
GetGame().IsMultiplayer())
7236 player.PhysicalPredictiveDropItem(this);
7237 else
7238 player.ServerDropEntity(this);
7239 return;
7240 }
7241
7243
7244 if (new_item)
7245 {
7246 new_item.SetResultOfSplit(true);
7247 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7249 new_item.SetQuantity(stack_max);
7250 new_item.PlaceOnSurface();
7251 }
7252 }
7253 }
7254 }
7255
7257 {
7259 return;
7260
7261 float split_quantity_new;
7265 InventoryLocation loc = new InventoryLocation;
7266
7267 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7268 {
7270 split_quantity_new = stack_max;
7271 else
7273
7274 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7275 if (new_item)
7276 {
7277 new_item.SetResultOfSplit(true);
7278 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7280 new_item.SetQuantity(split_quantity_new);
7281 }
7282 }
7283 else if (destination_entity && slot_id == -1)
7284 {
7285 if (quantity > stack_max)
7286 split_quantity_new = stack_max;
7287 else
7288 split_quantity_new = quantity;
7289
7291 {
7294 }
7295
7296 if (new_item)
7297 {
7298 new_item.SetResultOfSplit(true);
7299 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7301 new_item.SetQuantity(split_quantity_new);
7302 }
7303 }
7304 else
7305 {
7306 if (stack_max != 0)
7307 {
7309 {
7311 }
7312
7314
7315 if (new_item)
7316 {
7317 new_item.SetResultOfSplit(true);
7318 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7320 new_item.SetQuantity(stack_max);
7321 new_item.PlaceOnSurface();
7322 }
7323 }
7324 }
7325 }
7326
7328 {
7330 return;
7331
7333 {
7334 if (ScriptInputUserData.CanStoreInputUserData())
7335 {
7336 ScriptInputUserData ctx = new ScriptInputUserData;
7341 dst.WriteToContext(ctx);
7343 }
7344 }
7345 else if (!
GetGame().IsMultiplayer())
7346 {
7348 }
7349 }
7350
7352 {
7354 return;
7355
7357 {
7358 if (ScriptInputUserData.CanStoreInputUserData())
7359 {
7360 ScriptInputUserData ctx = new ScriptInputUserData;
7365 ctx.
Write(destination_entity);
7371 }
7372 }
7373 else if (!
GetGame().IsMultiplayer())
7374 {
7376 }
7377 }
7378
7380 {
7382 }
7383
7385 {
7387 return this;
7388
7390 float split_quantity_new;
7392 if (dst.IsValid())
7393 {
7394 int slot_id = dst.GetSlot();
7396
7397 if (quantity > stack_max)
7398 split_quantity_new = stack_max;
7399 else
7400 split_quantity_new = quantity;
7401
7403
7404 if (new_item)
7405 {
7406 new_item.SetResultOfSplit(true);
7407 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7410 }
7411
7412 return new_item;
7413 }
7414
7415 return null;
7416 }
7417
7419 {
7421 return;
7422
7424 float split_quantity_new;
7426 if (destination_entity)
7427 {
7429 if (quantity > stackable)
7430 split_quantity_new = stackable;
7431 else
7432 split_quantity_new = quantity;
7433
7434 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7435 if (new_item)
7436 {
7437 new_item.SetResultOfSplit(true);
7438 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7440 new_item.SetQuantity(split_quantity_new);
7441 }
7442 }
7443 }
7444
7446 {
7448 return;
7449
7451 {
7452 if (ScriptInputUserData.CanStoreInputUserData())
7453 {
7454 ScriptInputUserData ctx = new ScriptInputUserData;
7459 ItemBase destination_entity =
this;
7460 ctx.
Write(destination_entity);
7464 }
7465 }
7466 else if (!
GetGame().IsMultiplayer())
7467 {
7469 }
7470 }
7471
7473 {
7475 return;
7476
7478 float split_quantity_new;
7480 if (player)
7481 {
7483 if (quantity > stackable)
7484 split_quantity_new = stackable;
7485 else
7486 split_quantity_new = quantity;
7487
7488 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7489 new_item =
ItemBase.Cast(in_hands);
7490 if (new_item)
7491 {
7492 new_item.SetResultOfSplit(true);
7493 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7495 new_item.SetQuantity(split_quantity_new);
7496 }
7497 }
7498 }
7499
7501 {
7503 return;
7504
7506 float split_quantity_new = Math.Floor(quantity * 0.5);
7507
7509
7510 if (new_item)
7511 {
7512 if (new_item.GetQuantityMax() < split_quantity_new)
7513 {
7514 split_quantity_new = new_item.GetQuantityMax();
7515 }
7516
7517 new_item.SetResultOfSplit(true);
7518 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7519
7521 {
7524 }
7525 else
7526 {
7529 }
7530 }
7531 }
7532
7534 {
7536 return;
7537
7539 float split_quantity_new = Math.Floor(quantity / 2);
7540
7541 InventoryLocation invloc = new InventoryLocation;
7543
7545 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7546
7547 if (new_item)
7548 {
7549 if (new_item.GetQuantityMax() < split_quantity_new)
7550 {
7551 split_quantity_new = new_item.GetQuantityMax();
7552 }
7554 {
7557 }
7558 else
7559 {
7562 }
7563 }
7564 }
7565
7568 {
7569 SetWeightDirty();
7571
7572 if (parent)
7573 parent.OnAttachmentQuantityChangedEx(this, delta);
7574
7576 {
7578 {
7580 }
7582 {
7583 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7585 }
7586 }
7587
7588 }
7589
7592 {
7593
7594 }
7595
7598 {
7600 }
7601
7603 {
7604 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7605
7607 {
7608 if (newLevel == GameConstants.STATE_RUINED)
7609 {
7611 EntityAI parent = GetHierarchyParent();
7612 if (parent && parent.IsFireplace())
7613 {
7614 CargoBase cargo = GetInventory().GetCargo();
7615 if (cargo)
7616 {
7618 {
7620 }
7621 }
7622 }
7623 }
7624
7626 {
7627
7629 return;
7630 }
7631
7632 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7633 {
7635 }
7636 }
7637 }
7638
7639
7641 {
7642 super.OnRightClick();
7643
7645 {
7647 {
7648 if (ScriptInputUserData.CanStoreInputUserData())
7649 {
7650 vector m4[4];
7652
7653 EntityAI root = GetHierarchyRoot();
7654
7655 InventoryLocation dst = new InventoryLocation;
7657 {
7658 if (root)
7659 {
7660 root.GetTransform(m4);
7662 }
7663 else
7664 GetInventory().GetCurrentInventoryLocation(dst);
7665 }
7666 else
7667 {
7669
7670
7671 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7672 {
7673 if (root)
7674 {
7675 root.GetTransform(m4);
7677 }
7678 else
7679 GetInventory().GetCurrentInventoryLocation(dst);
7680 }
7681 else
7682 {
7683 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7684 }
7685 }
7686
7687 ScriptInputUserData ctx = new ScriptInputUserData;
7695 }
7696 }
7697 else if (!
GetGame().IsMultiplayer())
7698 {
7700 }
7701 }
7702 }
7703
7704 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7705 {
7706
7707 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7708 return false;
7709
7710 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7711 return false;
7712
7713
7715 return false;
7716
7717
7718 Magazine mag = Magazine.Cast(this);
7719 if (mag)
7720 {
7721 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7722 return false;
7723
7724 if (stack_max_limit)
7725 {
7726 Magazine other_mag = Magazine.Cast(other_item);
7727 if (other_item)
7728 {
7729 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7730 return false;
7731 }
7732
7733 }
7734 }
7735 else
7736 {
7737
7739 return false;
7740
7742 return false;
7743 }
7744
7745 PlayerBase player = null;
7746 if (CastTo(player, GetHierarchyRootPlayer()))
7747 {
7748 if (player.GetInventory().HasAttachment(this))
7749 return false;
7750
7751 if (player.IsItemsToDelete())
7752 return false;
7753 }
7754
7755 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7756 return false;
7757
7758 int slotID;
7760 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7761 return false;
7762
7763 return true;
7764 }
7765
7767 {
7769 }
7770
7772 {
7773 return m_IsResultOfSplit;
7774 }
7775
7777 {
7778 m_IsResultOfSplit = value;
7779 }
7780
7782 {
7784 }
7785
7787 {
7788 float other_item_quantity = other_item.GetQuantity();
7789 float this_free_space;
7790
7792
7794
7795 if (other_item_quantity > this_free_space)
7796 {
7797 return this_free_space;
7798 }
7799 else
7800 {
7801 return other_item_quantity;
7802 }
7803 }
7804
7806 {
7808 }
7809
7811 {
7813 return;
7814
7815 if (!IsMagazine() && other_item)
7816 {
7818 if (quantity_used != 0)
7819 {
7820 float hp1 = GetHealth01("","");
7821 float hp2 = other_item.GetHealth01("","");
7822 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7823 hpResult = hpResult / (
GetQuantity() + quantity_used);
7824
7825 hpResult *= GetMaxHealth();
7826 Math.Round(hpResult);
7827 SetHealth("", "Health", hpResult);
7828
7830 other_item.AddQuantity(-quantity_used);
7831 }
7832 }
7834 }
7835
7837 {
7838 #ifdef SERVER
7839 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7840 GetHierarchyParent().IncreaseLifetimeUp();
7841 #endif
7842 };
7843
7845 {
7846 PlayerBase p = PlayerBase.Cast(player);
7847
7848 array<int> recipesIds = p.m_Recipes;
7849 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7850 if (moduleRecipesManager)
7851 {
7852 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7853 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7854 }
7855
7856 for (int i = 0;i < recipesIds.Count(); i++)
7857 {
7858 int key = recipesIds.Get(i);
7859 string recipeName = moduleRecipesManager.GetRecipeName(key);
7861 }
7862 }
7863
7864
7865 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7866 {
7867 super.GetDebugActions(outputList);
7868
7869
7874
7875
7879
7883
7884
7887
7888
7890 {
7893 }
7894
7896
7899
7903 }
7904
7905
7906
7907
7909 {
7910 super.OnAction(action_id, player, ctx);
7911 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7912 {
7913 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7914 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7915 PlayerBase p = PlayerBase.Cast(player);
7916 if (
EActions.RECIPES_RANGE_START < 1000)
7917 {
7918 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7919 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7920 }
7921 }
7922 #ifndef SERVER
7923 else if (action_id ==
EActions.WATCH_PLAYER)
7924 {
7925 PluginDeveloper.SetDeveloperItemClientEx(player);
7926 }
7927 #endif
7929 {
7930 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7931 {
7932 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7933 OnDebugButtonPressServer(id + 1);
7934 }
7935
7936 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7937 {
7938 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7940 }
7941
7942 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7943 {
7944 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7946 }
7947
7948 else if (action_id ==
EActions.ADD_QUANTITY)
7949 {
7950 if (IsMagazine())
7951 {
7952 Magazine mag = Magazine.Cast(this);
7953 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7954 }
7955 else
7956 {
7958 }
7959
7960 if (m_EM)
7961 {
7962 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7963 }
7964
7965 }
7966
7967 else if (action_id ==
EActions.REMOVE_QUANTITY)
7968 {
7969 if (IsMagazine())
7970 {
7971 Magazine mag2 = Magazine.Cast(this);
7972 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7973 }
7974 else
7975 {
7977 }
7978 if (m_EM)
7979 {
7980 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7981 }
7982
7983 }
7984
7985 else if (action_id ==
EActions.SET_QUANTITY_0)
7986 {
7988
7989 if (m_EM)
7990 {
7991 m_EM.SetEnergy(0);
7992 }
7993 }
7994
7995 else if (action_id ==
EActions.SET_MAX_QUANTITY)
7996 {
7998
7999 if (m_EM)
8000 {
8001 m_EM.SetEnergy(m_EM.GetEnergyMax());
8002 }
8003 }
8004
8005 else if (action_id ==
EActions.ADD_HEALTH)
8006 {
8007 AddHealth("","",GetMaxHealth("","Health")/5);
8008 }
8009 else if (action_id ==
EActions.REMOVE_HEALTH)
8010 {
8011 AddHealth("","",-GetMaxHealth("","Health")/5);
8012 }
8013 else if (action_id ==
EActions.DESTROY_HEALTH)
8014 {
8015 SetHealth01("","",0);
8016 }
8017 else if (action_id ==
EActions.WATCH_ITEM)
8018 {
8020 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8021 #ifdef DEVELOPER
8022 SetDebugDeveloper_item(this);
8023 #endif
8024 }
8025
8026 else if (action_id ==
EActions.ADD_TEMPERATURE)
8027 {
8028 AddTemperature(20);
8029
8030 }
8031
8032 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8033 {
8034 AddTemperature(-20);
8035
8036 }
8037
8038 else if (action_id ==
EActions.FLIP_FROZEN)
8039 {
8040 SetFrozen(!GetIsFrozen());
8041
8042 }
8043
8044 else if (action_id ==
EActions.ADD_WETNESS)
8045 {
8047
8048 }
8049
8050 else if (action_id ==
EActions.REMOVE_WETNESS)
8051 {
8053
8054 }
8055
8056 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8057 {
8060
8061
8062 }
8063
8064 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8065 {
8068 }
8069
8070 else if (action_id ==
EActions.MAKE_SPECIAL)
8071 {
8072 auto debugParams = DebugSpawnParams.WithPlayer(player);
8073 OnDebugSpawnEx(debugParams);
8074 }
8075
8076 else if (action_id ==
EActions.DELETE)
8077 {
8078 Delete();
8079 }
8080
8081 }
8082
8083
8084 return false;
8085 }
8086
8087
8088
8089
8093
8096
8097
8098
8100 {
8101 return false;
8102 }
8103
8104
8106 {
8107 return true;
8108 }
8109
8110
8112 {
8113 return true;
8114 }
8115
8116
8117
8119 {
8120 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8122 }
8123
8126 {
8127 return null;
8128 }
8129
8131 {
8132 return false;
8133 }
8134
8136 {
8137 return false;
8138 }
8139
8143
8144
8146 {
8147 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8148 return module_repairing.CanRepair(this, item_repair_kit);
8149 }
8150
8151
8152 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8153 {
8154 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8155 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8156 }
8157
8158
8160 {
8161
8162
8163
8164
8165
8166
8167
8168
8169 return 1;
8170 }
8171
8172
8173
8175 {
8177 }
8178
8179
8180
8182 {
8184 }
8185
8186
8195 {
8196 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8197
8198 if (player)
8199 {
8200 player.MessageStatus(text);
8201 }
8202 }
8203
8204
8213 {
8214 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8215
8216 if (player)
8217 {
8218 player.MessageAction(text);
8219 }
8220 }
8221
8222
8231 {
8232 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8233
8234 if (player)
8235 {
8236 player.MessageFriendly(text);
8237 }
8238 }
8239
8240
8249 {
8250 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8251
8252 if (player)
8253 {
8254 player.MessageImportant(text);
8255 }
8256 }
8257
8259 {
8260 return true;
8261 }
8262
8263
8264 override bool KindOf(
string tag)
8265 {
8266 bool found = false;
8267 string item_name = this.
GetType();
8270
8271 int array_size = item_tag_array.Count();
8272 for (int i = 0; i < array_size; i++)
8273 {
8274 if (item_tag_array.Get(i) == tag)
8275 {
8276 found = true;
8277 break;
8278 }
8279 }
8280 return found;
8281 }
8282
8283
8285 {
8286
8287 super.OnRPC(sender, rpc_type,ctx);
8288
8289
8290 switch (rpc_type)
8291 {
8292 #ifndef SERVER
8293 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8294 Param2<bool, string> p = new Param2<bool, string>(false, "");
8295
8297 return;
8298
8299 bool play = p.param1;
8300 string soundSet = p.param2;
8301
8302 if (play)
8303 {
8305 {
8307 {
8309 }
8310 }
8311 else
8312 {
8314 }
8315 }
8316 else
8317 {
8319 }
8320
8321 break;
8322 #endif
8323
8324 }
8325
8327 {
8329 }
8330 }
8331
8332
8333
8334
8336 {
8337 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8338 return plugin.GetID(
name);
8339 }
8340
8342 {
8343 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8344 return plugin.GetName(id);
8345 }
8346
8349 {
8350
8351
8352 int varFlags;
8353 if (!ctx.
Read(varFlags))
8354 return;
8355
8356 if (varFlags & ItemVariableFlags.FLOAT)
8357 {
8359 }
8360 }
8361
8363 {
8364
8365 super.SerializeNumericalVars(floats_out);
8366
8367
8368
8370 {
8372 }
8373
8375 {
8377 }
8378
8380 {
8382 }
8383
8385 {
8390 }
8391
8393 {
8395 }
8396 }
8397
8399 {
8400
8401 super.DeSerializeNumericalVars(floats);
8402
8403
8404 int index = 0;
8405 int mask = Math.Round(floats.Get(index));
8406
8407 index++;
8408
8410 {
8412 {
8414 }
8415 else
8416 {
8417 float quantity = floats.Get(index);
8419 }
8420 index++;
8421 }
8422
8424 {
8425 float wet = floats.Get(index);
8427 index++;
8428 }
8429
8431 {
8432 int liquidtype = Math.Round(floats.Get(index));
8434 index++;
8435 }
8436
8438 {
8440 index++;
8442 index++;
8444 index++;
8446 index++;
8447 }
8448
8450 {
8451 int cleanness = Math.Round(floats.Get(index));
8453 index++;
8454 }
8455 }
8456
8458 {
8459 super.WriteVarsToCTX(ctx);
8460
8461
8463 {
8465 }
8466
8468 {
8470 }
8471
8473 {
8475 }
8476
8478 {
8479 int r,g,b,a;
8485 }
8486
8488 {
8490 }
8491 }
8492
8494 {
8495 if (!super.ReadVarsFromCTX(ctx,version))
8496 return false;
8497
8498 int intValue;
8499 float value;
8500
8501 if (version < 140)
8502 {
8503 if (!ctx.
Read(intValue))
8504 return false;
8505
8506 m_VariablesMask = intValue;
8507 }
8508
8510 {
8511 if (!ctx.
Read(value))
8512 return false;
8513
8515 {
8517 }
8518 else
8519 {
8521 }
8522 }
8523
8524 if (version < 140)
8525 {
8527 {
8528 if (!ctx.
Read(value))
8529 return false;
8530 SetTemperatureDirect(value);
8531 }
8532 }
8533
8535 {
8536 if (!ctx.
Read(value))
8537 return false;
8539 }
8540
8542 {
8543 if (!ctx.
Read(intValue))
8544 return false;
8546 }
8547
8549 {
8550 int r,g,b,a;
8552 return false;
8554 return false;
8556 return false;
8558 return false;
8559
8561 }
8562
8564 {
8565 if (!ctx.
Read(intValue))
8566 return false;
8568 }
8569
8570 if (version >= 138 && version < 140)
8571 {
8573 {
8574 if (!ctx.
Read(intValue))
8575 return false;
8576 SetFrozen(intValue);
8577 }
8578 }
8579
8580 return true;
8581 }
8582
8583
8585 {
8588 {
8590 }
8591
8592 if (!super.OnStoreLoad(ctx, version))
8593 {
8595 return false;
8596 }
8597
8598 if (version >= 114)
8599 {
8600 bool hasQuickBarIndexSaved;
8601
8602 if (!ctx.
Read(hasQuickBarIndexSaved))
8603 {
8605 return false;
8606 }
8607
8608 if (hasQuickBarIndexSaved)
8609 {
8610 int itmQBIndex;
8611
8612
8613 if (!ctx.
Read(itmQBIndex))
8614 {
8616 return false;
8617 }
8618
8619 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8620 if (itmQBIndex != -1 && parentPlayer)
8621 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8622 }
8623 }
8624 else
8625 {
8626
8627 PlayerBase player;
8628 int itemQBIndex;
8629 if (version ==
int.
MAX)
8630 {
8631 if (!ctx.
Read(itemQBIndex))
8632 {
8634 return false;
8635 }
8636 }
8637 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8638 {
8639
8640 if (!ctx.
Read(itemQBIndex))
8641 {
8643 return false;
8644 }
8645 if (itemQBIndex != -1 && player)
8646 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8647 }
8648 }
8649
8650 if (version < 140)
8651 {
8652
8653 if (!LoadVariables(ctx, version))
8654 {
8656 return false;
8657 }
8658 }
8659
8660
8662 {
8664 return false;
8665 }
8666 if (version >= 132)
8667 {
8669 if (raib)
8670 {
8672 {
8674 return false;
8675 }
8676 }
8677 }
8678
8680 return true;
8681 }
8682
8683
8684
8686 {
8687 super.OnStoreSave(ctx);
8688
8689 PlayerBase player;
8690 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8691 {
8693
8694 int itemQBIndex = -1;
8695 itemQBIndex = player.FindQuickBarEntityIndex(this);
8696 ctx.
Write(itemQBIndex);
8697 }
8698 else
8699 {
8701 }
8702
8704
8706 if (raib)
8707 {
8709 }
8710 }
8711
8712
8714 {
8715 super.AfterStoreLoad();
8716
8718 {
8720 }
8721
8723 {
8726 }
8727 }
8728
8730 {
8731 super.EEOnAfterLoad();
8732
8734 {
8736 }
8737
8740 }
8741
8743 {
8744 return false;
8745 }
8746
8747
8748
8750 {
8752 {
8753 #ifdef PLATFORM_CONSOLE
8754
8756 {
8758 if (menu)
8759 {
8761 }
8762 }
8763 #endif
8764 }
8765
8767 {
8770 }
8771
8773 {
8774 SetWeightDirty();
8776 }
8778 {
8781 }
8782
8784 {
8787 }
8789 {
8792 }
8793
8794 super.OnVariablesSynchronized();
8795 }
8796
8797
8798
8800 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8801 {
8802 if (!IsServerCheck(allow_client))
8803 return false;
8804
8806 return false;
8807
8810
8811 if (value <= (min + 0.001))
8812 value = min;
8813
8814 if (value == min)
8815 {
8816 if (destroy_config)
8817 {
8818 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8819 if (dstr)
8820 {
8822 this.Delete();
8823 return true;
8824 }
8825 }
8826 else if (destroy_forced)
8827 {
8829 this.Delete();
8830 return true;
8831 }
8832
8834 }
8835
8838
8840 {
8842
8843 if (delta)
8845 }
8846
8848
8849 return false;
8850 }
8851
8852
8854 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8855 {
8857 }
8858
8860 {
8863 }
8864
8866 {
8869 }
8870
8873 {
8874 float value_clamped = Math.Clamp(value, 0, 1);
8876 SetQuantity(result, destroy_config, destroy_forced);
8877 }
8878
8879
8882 {
8884 }
8885
8887 {
8889 }
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8901 {
8902 int slot = -1;
8903 if (GetInventory())
8904 {
8905 InventoryLocation il = new InventoryLocation;
8906 GetInventory().GetCurrentInventoryLocation(il);
8908 }
8909
8911 }
8912
8914 {
8915 float quantity_max = 0;
8916
8918 {
8919 if (attSlotID != -1)
8920 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8921
8922 if (quantity_max <= 0)
8924 }
8925
8926 if (quantity_max <= 0)
8928
8929 return quantity_max;
8930 }
8931
8933 {
8935 }
8936
8938 {
8940 }
8941
8942
8944 {
8946 }
8947
8949 {
8951 }
8952
8954 {
8956 }
8957
8958
8960 {
8961
8962 float weightEx = GetWeightEx();
8963 float special = GetInventoryAndCargoWeight();
8964 return weightEx - special;
8965 }
8966
8967
8969 {
8971 }
8972
8974 {
8976 {
8977 #ifdef DEVELOPER
8978 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8979 {
8980 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8982 }
8983 #endif
8984
8986 }
8987 else if (HasEnergyManager())
8988 {
8989 #ifdef DEVELOPER
8990 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8991 {
8992 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8993 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8994 }
8995 #endif
8996 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
8997 }
8998 else
8999 {
9000 #ifdef DEVELOPER
9001 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9002 {
9003 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9004 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9005 }
9006 #endif
9007 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9008 }
9009 }
9010
9013 {
9014 int item_count = 0;
9016
9017 if (GetInventory().GetCargo() != NULL)
9018 {
9019 item_count = GetInventory().GetCargo().GetItemCount();
9020 }
9021
9022 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9023 {
9024 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9025 if (item)
9026 item_count += item.GetNumberOfItems();
9027 }
9028 return item_count;
9029 }
9030
9033 {
9034 float weight = 0;
9035 float wetness = 1;
9036 if (include_wetness)
9039 {
9040 weight = wetness * m_ConfigWeight;
9041 }
9043 {
9044 weight = 1;
9045 }
9046 return weight;
9047 }
9048
9049
9050
9052 {
9053 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9054 {
9055 GameInventory inv = GetInventory();
9056 array<EntityAI> items = new array<EntityAI>;
9058 for (int i = 0; i < items.Count(); i++)
9059 {
9061 if (item)
9062 {
9064 }
9065 }
9066 }
9067 }
9068
9069
9070
9071
9073 {
9074 float energy = 0;
9075 if (HasEnergyManager())
9076 {
9077 energy = GetCompEM().GetEnergy();
9078 }
9079 return energy;
9080 }
9081
9082
9084 {
9085 super.OnEnergyConsumed();
9086
9088 }
9089
9091 {
9092 super.OnEnergyAdded();
9093
9095 }
9096
9097
9099 {
9100 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9101 {
9103 {
9104 float energy_0to1 = GetCompEM().GetEnergy0To1();
9106 }
9107 }
9108 }
9109
9110
9112 {
9113 return ConfigGetFloat("heatIsolation");
9114 }
9115
9117 {
9119 }
9120
9122 {
9123 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9124 if (
GetGame().ConfigIsExisting(paramPath))
9126
9127 return 0.0;
9128 }
9129
9131 {
9132 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9133 if (
GetGame().ConfigIsExisting(paramPath))
9135
9136 return 0.0;
9137 }
9138
9139 override void SetWet(
float value,
bool allow_client =
false)
9140 {
9141 if (!IsServerCheck(allow_client))
9142 return;
9143
9146
9148
9149 m_VarWet = Math.Clamp(value, min, max);
9150
9152 {
9155 }
9156 }
9157
9158 override void AddWet(
float value)
9159 {
9161 }
9162
9164 {
9166 }
9167
9169 {
9171 }
9172
9174 {
9176 }
9177
9179 {
9181 }
9182
9184 {
9186 }
9187
9189 {
9192 if (newLevel != oldLevel)
9193 {
9195 }
9196 }
9197
9199 {
9200 SetWeightDirty();
9201 }
9202
9204 {
9205 return GetWetLevelInternal(
m_VarWet);
9206 }
9207
9208
9209
9211 {
9213 }
9214
9216 {
9218 }
9219
9221 {
9223 }
9224
9226 {
9228 }
9229
9230
9231
9233 {
9234 if (ConfigIsExisting("itemModelLength"))
9235 {
9236 return ConfigGetFloat("itemModelLength");
9237 }
9238 return 0;
9239 }
9240
9242 {
9243 if (ConfigIsExisting("itemAttachOffset"))
9244 {
9245 return ConfigGetFloat("itemAttachOffset");
9246 }
9247 return 0;
9248 }
9249
9250 override void SetCleanness(
int value,
bool allow_client =
false)
9251 {
9252 if (!IsServerCheck(allow_client))
9253 return;
9254
9256
9258
9261 }
9262
9264 {
9266 }
9267
9269 {
9270 return true;
9271 }
9272
9273
9274
9275
9277 {
9279 }
9280
9282 {
9284 }
9285
9286
9287
9288
9289 override void SetColor(
int r,
int g,
int b,
int a)
9290 {
9296 }
9298 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9299 {
9304 }
9305
9307 {
9309 }
9310
9313 {
9314 int r,g,b,a;
9316 r = r/255;
9317 g = g/255;
9318 b = b/255;
9319 a = a/255;
9320 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9321 }
9322
9323
9324
9325 override void SetLiquidType(
int value,
bool allow_client =
false)
9326 {
9327 if (!IsServerCheck(allow_client))
9328 return;
9329
9334 }
9335
9337 {
9338 return ConfigGetInt("varLiquidTypeInit");
9339 }
9340
9342 {
9344 }
9345
9347 {
9349 SetFrozen(false);
9350 }
9351
9354 {
9355 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9356 }
9357
9358
9361 {
9362 PlayerBase nplayer;
9363 if (PlayerBase.CastTo(nplayer, player))
9364 {
9366
9367 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9368 }
9369 }
9370
9371
9374 {
9375 PlayerBase nplayer;
9376 if (PlayerBase.CastTo(nplayer,player))
9377 {
9378
9379 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9380
9381 }
9382
9383
9384 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9385
9386
9387 if (HasEnergyManager())
9388 {
9389 GetCompEM().UpdatePlugState();
9390 }
9391 }
9392
9393
9395 {
9396 super.OnPlacementStarted(player);
9397
9399 }
9400
9401 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9402 {
9404 {
9405 m_AdminLog.OnPlacementComplete(player,
this);
9406 }
9407
9408 super.OnPlacementComplete(player, position, orientation);
9409 }
9410
9411
9412
9413
9414
9416 {
9418 {
9419 return true;
9420 }
9421 else
9422 {
9423 return false;
9424 }
9425 }
9426
9427
9429 {
9431 {
9433 }
9434 }
9435
9436
9438 {
9440 }
9441
9443 {
9445 }
9446
9447 override void InsertAgent(
int agent,
float count = 1)
9448 {
9449 if (count < 1)
9450 return;
9451
9453 }
9454
9457 {
9459 }
9460
9461
9463 {
9465 }
9466
9467
9468
9469
9470
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481
9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9509 {
9511 return false;
9512 return true;
9513 }
9514
9516 {
9517
9519 }
9520
9521
9524 {
9525 super.CheckForRoofLimited(timeTresholdMS);
9526
9528 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9529 {
9530 m_PreviousRoofTestTime = time;
9531 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9532 }
9533 }
9534
9535
9537 {
9539 {
9540 return 0;
9541 }
9542
9543 if (GetInventory().GetAttachmentSlotsCount() != 0)
9544 {
9545 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9546 if (filter)
9547 return filter.GetProtectionLevel(type, false, system);
9548 else
9549 return 0;
9550 }
9551
9552 string subclassPath, entryName;
9553
9554 switch (type)
9555 {
9557 entryName = "biological";
9558 break;
9560 entryName = "chemical";
9561 break;
9562 default:
9563 entryName = "biological";
9564 break;
9565 }
9566
9567 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9568
9570 }
9571
9572
9573
9576 {
9577 if (!IsMagazine())
9579
9581 }
9582
9583
9584
9585
9586
9591 {
9592 return true;
9593 }
9594
9596 {
9598 }
9599
9600
9601
9602
9603
9605 {
9606 if (parent)
9607 {
9608 if (parent.IsInherited(DayZInfected))
9609 return true;
9610
9611 if (!parent.IsRuined())
9612 return true;
9613 }
9614
9615 return true;
9616 }
9617
9619 {
9620 if (!super.CanPutAsAttachment(parent))
9621 {
9622 return false;
9623 }
9624
9625 if (!IsRuined() && !parent.IsRuined())
9626 {
9627 return true;
9628 }
9629
9630 return false;
9631 }
9632
9634 {
9635
9636
9637
9638
9639 return super.CanReceiveItemIntoCargo(item);
9640 }
9641
9643 {
9644
9645
9646
9647
9648 GameInventory attachmentInv = attachment.GetInventory();
9650 {
9651 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9652 return false;
9653 }
9654
9655 InventoryLocation loc = new InventoryLocation();
9656 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9657 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9658 return false;
9659
9660 return super.CanReceiveAttachment(attachment, slotId);
9661 }
9662
9664 {
9665 if (!super.CanReleaseAttachment(attachment))
9666 return false;
9667
9668 return GetInventory().AreChildrenAccessible();
9669 }
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9692 {
9693 int id = muzzle_owner.GetMuzzleID();
9694 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9695
9696 if (WPOF_array)
9697 {
9698 for (int i = 0; i < WPOF_array.Count(); i++)
9699 {
9700 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9701
9702 if (WPOF)
9703 {
9704 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9705 }
9706 }
9707 }
9708 }
9709
9710
9712 {
9713 int id = muzzle_owner.GetMuzzleID();
9715
9716 if (WPOBE_array)
9717 {
9718 for (int i = 0; i < WPOBE_array.Count(); i++)
9719 {
9720 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9721
9722 if (WPOBE)
9723 {
9724 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9725 }
9726 }
9727 }
9728 }
9729
9730
9732 {
9733 int id = muzzle_owner.GetMuzzleID();
9734 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9735
9736 if (WPOOH_array)
9737 {
9738 for (int i = 0; i < WPOOH_array.Count(); i++)
9739 {
9740 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9741
9742 if (WPOOH)
9743 {
9744 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9745 }
9746 }
9747 }
9748 }
9749
9750
9752 {
9753 int id = muzzle_owner.GetMuzzleID();
9754 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9755
9756 if (WPOOH_array)
9757 {
9758 for (int i = 0; i < WPOOH_array.Count(); i++)
9759 {
9760 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9761
9762 if (WPOOH)
9763 {
9764 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9765 }
9766 }
9767 }
9768 }
9769
9770
9772 {
9773 int id = muzzle_owner.GetMuzzleID();
9774 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9775
9776 if (WPOOH_array)
9777 {
9778 for (int i = 0; i < WPOOH_array.Count(); i++)
9779 {
9780 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9781
9782 if (WPOOH)
9783 {
9784 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9785 }
9786 }
9787 }
9788 }
9789
9790
9791
9793 {
9795 {
9796 return true;
9797 }
9798
9799 return false;
9800 }
9801
9803 {
9805 {
9806 return true;
9807 }
9808
9809 return false;
9810 }
9811
9813 {
9815 {
9816 return true;
9817 }
9818
9819 return false;
9820 }
9821
9823 {
9824 return false;
9825 }
9826
9829 {
9830 return UATimeSpent.DEFAULT_DEPLOY;
9831 }
9832
9833
9834
9835
9837 {
9839 SetSynchDirty();
9840 }
9841
9843 {
9845 }
9846
9847
9849 {
9850 return false;
9851 }
9852
9855 {
9856 string att_type = "None";
9857
9858 if (ConfigIsExisting("soundAttType"))
9859 {
9860 att_type = ConfigGetString("soundAttType");
9861 }
9862
9864 }
9865
9867 {
9869 }
9870
9871
9872
9873
9874
9878
9880 {
9883
9885 }
9886
9887
9889 {
9891 return;
9892
9894
9897
9900
9901 SoundParameters params = new SoundParameters();
9905 }
9906
9907
9909 {
9911 return;
9912
9914 SetSynchDirty();
9915
9918 }
9919
9920
9922 {
9924 return;
9925
9927 SetSynchDirty();
9928
9931 }
9932
9934 {
9936 }
9937
9939 {
9941 }
9942
9945 {
9946 if (!
GetGame().IsDedicatedServer())
9947 {
9948 if (ConfigIsExisting("attachSoundSet"))
9949 {
9950 string cfg_path = "";
9951 string soundset = "";
9953
9956 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9957 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9958
9959 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9960 {
9961 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9962 {
9963 if (cfg_slot_array[i] == slot_type)
9964 {
9965 soundset = cfg_soundset_array[i];
9966 break;
9967 }
9968 }
9969 }
9970
9971 if (soundset != "")
9972 {
9973 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9975 }
9976 }
9977 }
9978 }
9979
9981 {
9982
9983 }
9984
9985 void OnApply(PlayerBase player);
9986
9988 {
9989 return 1.0;
9990 };
9991
9993 {
9995 }
9996
9998 {
10000 }
10001
10003
10005 {
10006 SetDynamicPhysicsLifeTime(0.01);
10008 }
10009
10011 {
10012 array<string> zone_names = new array<string>;
10013 GetDamageZones(zone_names);
10014 for (int i = 0; i < zone_names.Count(); i++)
10015 {
10016 SetHealthMax(zone_names.Get(i),"Health");
10017 }
10018 SetHealthMax("","Health");
10019 }
10020
10023 {
10024 float global_health = GetHealth01("","Health");
10025 array<string> zones = new array<string>;
10026 GetDamageZones(zones);
10027
10028 for (int i = 0; i < zones.Count(); i++)
10029 {
10030 SetHealth01(zones.Get(i),"Health",global_health);
10031 }
10032 }
10033
10036 {
10037 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10038 }
10039
10041 {
10042 if (!hasRootAsPlayer)
10043 {
10044 if (refParentIB)
10045 {
10046
10047 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10048 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10049
10050 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10051 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10052
10055 }
10056 else
10057 {
10058
10061 }
10062 }
10063 }
10064
10066 {
10068 {
10069 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10070 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10071 {
10072 float heatPermCoef = 1.0;
10074 while (ent)
10075 {
10076 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10077 ent = ent.GetHierarchyParent();
10078 }
10079
10080 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10081 }
10082 }
10083 }
10084
10086 {
10087
10088 EntityAI parent = GetHierarchyParent();
10089 if (!parent)
10090 {
10091 hasParent = false;
10092 hasRootAsPlayer = false;
10093 }
10094 else
10095 {
10096 hasParent = true;
10097 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10098 refParentIB =
ItemBase.Cast(parent);
10099 }
10100 }
10101
10102 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10103 {
10104
10105 }
10106
10108 {
10109
10110 return false;
10111 }
10112
10114 {
10115
10116
10117 return false;
10118 }
10119
10121 {
10122
10123 return false;
10124 }
10125
10128 {
10129 return !GetIsFrozen() &&
IsOpen();
10130 }
10131
10133 {
10134 bool hasParent = false, hasRootAsPlayer = false;
10136
10137 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10138 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10139
10140 if (wwtu || foodDecay)
10141 {
10145
10146 if (processWetness || processTemperature || processDecay)
10147 {
10149
10150 if (processWetness)
10151 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10152
10153 if (processTemperature)
10155
10156 if (processDecay)
10157 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10158 }
10159 }
10160 }
10161
10164 {
10166 }
10167
10169 {
10172
10173 return super.GetTemperatureFreezeThreshold();
10174 }
10175
10177 {
10180
10181 return super.GetTemperatureThawThreshold();
10182 }
10183
10185 {
10188
10189 return super.GetItemOverheatThreshold();
10190 }
10191
10193 {
10195 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10196
10197 return super.GetTemperatureFreezeTime();
10198 }
10199
10201 {
10203 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10204
10205 return super.GetTemperatureThawTime();
10206 }
10207
10212
10214 {
10215 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10216 }
10217
10219 {
10220 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10221 }
10222
10225 {
10227 }
10228
10230 {
10232 }
10233
10235 {
10237 }
10238
10241 {
10242 return null;
10243 }
10244
10247 {
10248 return false;
10249 }
10250
10252 {
10254 {
10257 if (!trg)
10258 {
10260 explosive = this;
10261 }
10262
10263 explosive.PairRemote(trg);
10265
10266 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10267 trg.SetPersistentPairID(persistentID);
10268 explosive.SetPersistentPairID(persistentID);
10269
10270 return true;
10271 }
10272 return false;
10273 }
10274
10277 {
10278 float ret = 1.0;
10281 ret *= GetHealth01();
10282
10283 return ret;
10284 }
10285
10286 #ifdef DEVELOPER
10287 override void SetDebugItem()
10288 {
10289 super.SetDebugItem();
10290 _itemBase = this;
10291 }
10292
10294 {
10295 string text = super.GetDebugText();
10296
10298 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10299
10300 return text;
10301 }
10302 #endif
10303
10305 {
10306 return true;
10307 }
10308
10310
10312
10314 {
10317 }
10318
10319
10327
10343}
10344
10346{
10348 if (entity)
10349 {
10350 bool is_item = entity.IsInherited(
ItemBase);
10351 if (is_item && full_quantity)
10352 {
10355 }
10356 }
10357 else
10358 {
10360 return NULL;
10361 }
10362 return entity;
10363}
10364
10366{
10367 if (item)
10368 {
10369 if (health > 0)
10370 item.SetHealth("", "", health);
10371
10372 if (item.CanHaveTemperature())
10373 {
10375 if (item.CanFreeze())
10376 item.SetFrozen(false);
10377 }
10378
10379 if (item.HasEnergyManager())
10380 {
10381 if (quantity >= 0)
10382 {
10383 item.GetCompEM().SetEnergy0To1(quantity);
10384 }
10385 else
10386 {
10388 }
10389 }
10390 else if (item.IsMagazine())
10391 {
10392 Magazine mag = Magazine.Cast(item);
10393 if (quantity >= 0)
10394 {
10395 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10396 }
10397 else
10398 {
10400 }
10401
10402 }
10403 else
10404 {
10405 if (quantity >= 0)
10406 {
10407 item.SetQuantityNormalized(quantity, false);
10408 }
10409 else
10410 {
10412 }
10413
10414 }
10415 }
10416}
10417
10418#ifdef DEVELOPER
10420#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.