5817{
5819 {
5820 return true;
5821 }
5822};
5823
5824
5825
5827{
5831
5833
5836
5837
5838
5839
5840
5849
5855
5860
5865
5886 protected bool m_IsResultOfSplit
5887
5889
5894
5895
5896
5898
5902
5903
5904
5906
5909
5910
5911
5917
5918
5926
5929
5930
5932
5933
5935
5936
5941
5942
5947
5948
5950
5951
5953 {
5958
5959 if (!
GetGame().IsDedicatedServer())
5960 {
5962 {
5964
5966 {
5968 }
5969 }
5970
5973 }
5974
5975 m_OldLocation = null;
5976
5978 {
5980 }
5981
5982 if (ConfigIsExisting("headSelectionsToHide"))
5983 {
5986 }
5987
5989 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5990 {
5992 }
5993
5995
5996 m_IsResultOfSplit = false;
5997
5999 }
6000
6002 {
6003 super.InitItemVariables();
6004
6010 m_Count = ConfigGetInt(
"count");
6011
6014
6019
6022
6027
6039
6043
6044
6047 if (ConfigIsExisting("canBeSplit"))
6048 {
6051 }
6052
6054 if (ConfigIsExisting("itemBehaviour"))
6056
6057
6060 RegisterNetSyncVariableInt("m_VarLiquidType");
6061 RegisterNetSyncVariableInt("m_Cleanness",0,1);
6062
6063 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
6064 RegisterNetSyncVariableFloat("m_ImpactSpeed");
6065 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
6066
6067 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
6068 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
6069 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
6070 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
6071
6072 RegisterNetSyncVariableBool("m_IsBeingPlaced");
6073 RegisterNetSyncVariableBool("m_IsTakeable");
6074 RegisterNetSyncVariableBool("m_IsHologram");
6075
6078 {
6081 }
6082
6084
6086 if (ConfigIsExisting("temperaturePerQuantityWeight"))
6088
6089 }
6090
6092 {
6094 }
6095
6097 {
6100 {
6105 }
6106 }
6107
6108 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
6109 {
6111 {
6114 }
6115
6117 }
6118
6120 {
6126 }
6127
6129
6131 {
6133
6134 if (!action)
6135 {
6136 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
6137 return;
6138 }
6139
6141 if (!ai)
6142 {
6144 return;
6145 }
6146
6148 if (!action_array)
6149 {
6150 action_array = new array<ActionBase_Basic>;
6152 }
6153 if (LogManager.IsActionLogEnable())
6154 {
6155 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6156 }
6157
6158 if (action_array.Find(action) != -1)
6159 {
6160 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6161 }
6162 else
6163 {
6164 action_array.Insert(action);
6165 }
6166 }
6167
6169 {
6171 ActionBase action = player.GetActionManager().GetAction(actionName);
6174
6175 if (action_array)
6176 {
6177 action_array.RemoveItem(action);
6178 }
6179 }
6180
6181
6182
6184 {
6185 ActionOverrideData overrideData = new ActionOverrideData();
6189
6191 if (!actionMap)
6192 {
6195 }
6196
6197 actionMap.Insert(this.
Type(), overrideData);
6198
6199 }
6200
6202
6204
6205
6207 {
6210
6213
6214 string config_to_search = "CfgVehicles";
6215 string muzzle_owner_config;
6216
6218 {
6219 if (IsInherited(Weapon))
6220 config_to_search = "CfgWeapons";
6221
6222 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6223
6224 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6225
6227
6228 if (config_OnFire_subclass_count > 0)
6229 {
6230 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6231
6232 for (int i = 0; i < config_OnFire_subclass_count; i++)
6233 {
6234 string particle_class = "";
6236 string config_OnFire_entry = config_OnFire_class + particle_class;
6237 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6238 WPOF_array.Insert(WPOF);
6239 }
6240
6241
6243 }
6244 }
6245
6247 {
6248 config_to_search = "CfgWeapons";
6249 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6250
6251 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6252
6254
6255 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6256 {
6257 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6258
6259 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6260 {
6261 string particle_class2 = "";
6263 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6264 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6265 WPOBE_array.Insert(WPOBE);
6266 }
6267
6268
6270 }
6271 }
6272 }
6273
6274
6276 {
6279
6281 {
6282 string config_to_search = "CfgVehicles";
6283
6284 if (IsInherited(Weapon))
6285 config_to_search = "CfgWeapons";
6286
6287 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6288 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6289
6290 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6291 {
6292
6294
6296 {
6298 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6300 return;
6301 }
6302
6305
6306
6307
6309 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6310
6311 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6312 {
6313 string particle_class = "";
6315 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6317
6318 if (entry_type == CT_CLASS)
6319 {
6320 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6321 WPOOH_array.Insert(WPOF);
6322 }
6323 }
6324
6325
6327 }
6328 }
6329 }
6330
6332 {
6334 }
6335
6337 {
6339 {
6341
6344
6347
6348 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6349 }
6350 }
6351
6353 {
6355 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6356
6358 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6359
6361 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6362
6364 {
6366 }
6367 }
6368
6370 {
6372 }
6373
6375 {
6378 else
6380
6382 {
6385 }
6386 else
6387 {
6390
6393 }
6394
6396 }
6397
6399 {
6401 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6402 }
6403
6405 {
6407 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6409 }
6410
6412 {
6414 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6415 }
6416
6418 {
6421
6422 OverheatingParticle OP = new OverheatingParticle();
6427
6429 }
6430
6432 {
6435
6436 return -1;
6437 }
6438
6440 {
6442 {
6445
6446 for (int i = count; i > 0; --i)
6447 {
6448 int id = i - 1;
6451
6454
6455 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6456 {
6457 if (p)
6458 {
6461 }
6462 }
6463 }
6464 }
6465 }
6466
6468 {
6470 {
6472 {
6473 int id = i - 1;
6475
6476 if (OP)
6477 {
6479
6480 if (p)
6481 {
6483 }
6484
6485 delete OP;
6486 }
6487 }
6488
6491 }
6492 }
6493
6496 {
6497 return 0.0;
6498 }
6499
6500
6502 {
6503 return 250;
6504 }
6505
6507 {
6508 return 0;
6509 }
6510
6513 {
6515 return true;
6516
6517 return false;
6518 }
6519
6522 {
6525
6527 {
6529 }
6530 else
6531 {
6532
6534 }
6535
6537 }
6538
6545 {
6546 return -1;
6547 }
6548
6549
6550
6551
6553 {
6555 {
6557 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6558
6559 if (r_index >= 0)
6560 {
6561 InventoryLocation r_il = new InventoryLocation;
6562 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6563
6564 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6567 {
6568 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6569 }
6571 {
6572 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6573 }
6574
6575 }
6576
6577 player.GetHumanInventory().ClearUserReservedLocation(this);
6578 }
6579
6582 }
6583
6584
6585
6586
6588 {
6589 return ItemBase.m_DebugActionsMask;
6590 }
6591
6593 {
6594 return ItemBase.m_DebugActionsMask & mask;
6595 }
6596
6598 {
6599 ItemBase.m_DebugActionsMask = mask;
6600 }
6601
6603 {
6604 ItemBase.m_DebugActionsMask |= mask;
6605 }
6606
6608 {
6609 ItemBase.m_DebugActionsMask &= ~mask;
6610 }
6611
6613 {
6615 {
6617 }
6618 else
6619 {
6621 }
6622 }
6623
6624
6626 {
6627 if (GetEconomyProfile())
6628 {
6629 float q_max = GetEconomyProfile().GetQuantityMax();
6630 if (q_max > 0)
6631 {
6632 float q_min = GetEconomyProfile().GetQuantityMin();
6633 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6634
6636 {
6637 ComponentEnergyManager comp = GetCompEM();
6639 {
6641 }
6642 }
6644 {
6646
6647 }
6648
6649 }
6650 }
6651 }
6652
6655 {
6656 EntityAI parent = GetHierarchyParent();
6657
6658 if (parent)
6659 {
6660 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6661 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6662 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6663 }
6664 }
6665
6668 {
6669 EntityAI parent = GetHierarchyParent();
6670
6671 if (parent)
6672 {
6673 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6674 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6675 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6676 }
6677 }
6678
6680 {
6681
6682
6683
6684
6686
6688 {
6689 if (ScriptInputUserData.CanStoreInputUserData())
6690 {
6691 ScriptInputUserData ctx = new ScriptInputUserData;
6697 ctx.
Write(use_stack_max);
6700
6702 {
6703 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6704 }
6705 }
6706 }
6707 else if (!
GetGame().IsMultiplayer())
6708 {
6710 }
6711 }
6712
6714 {
6716 }
6717
6719 {
6721 }
6722
6724 {
6726 }
6727
6729 {
6730
6731 return false;
6732 }
6733
6735 {
6736 return false;
6737 }
6738
6742 {
6743 return false;
6744 }
6745
6747 {
6748 return "";
6749 }
6750
6752
6754 {
6755 return false;
6756 }
6757
6759 {
6760 return true;
6761 }
6762
6763
6764
6766 {
6767 return true;
6768 }
6769
6771 {
6772 return true;
6773 }
6774
6776 {
6777 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6779 }
6780
6782 {
6784 }
6785
6787 {
6789 if (!is_being_placed)
6791 SetSynchDirty();
6792 }
6793
6794
6796
6798 {
6800 }
6801
6803 {
6805 }
6806
6808 {
6809 return 1;
6810 }
6811
6813 {
6814 return false;
6815 }
6816
6818 {
6820 SetSynchDirty();
6821 }
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6858 {
6859 super.OnMovedInsideCargo(container);
6860
6861 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6862 }
6863
6864 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6865 {
6866 super.EEItemLocationChanged(oldLoc,newLoc);
6867
6868 PlayerBase new_player = null;
6869 PlayerBase old_player = null;
6870
6871 if (newLoc.GetParent())
6872 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6873
6874 if (oldLoc.GetParent())
6875 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6876
6878 {
6879 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6880
6881 if (r_index >= 0)
6882 {
6883 InventoryLocation r_il = new InventoryLocation;
6884 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6885
6886 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6889 {
6890 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6891 }
6893 {
6894 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6895 }
6896
6897 }
6898 }
6899
6901 {
6902 if (new_player)
6903 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6904
6905 if (new_player == old_player)
6906 {
6907
6908 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6909 {
6911 {
6912 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6913 {
6914 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6915 }
6916 }
6917 else
6918 {
6919 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6920 }
6921 }
6922
6923 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6924 {
6925 int type = oldLoc.GetType();
6927 {
6928 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6929 }
6931 {
6932 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6933 }
6934 }
6935 if (!m_OldLocation)
6936 {
6937 m_OldLocation = new InventoryLocation;
6938 }
6939 m_OldLocation.Copy(oldLoc);
6940 }
6941 else
6942 {
6943 if (m_OldLocation)
6944 {
6945 m_OldLocation.Reset();
6946 }
6947 }
6948
6950 }
6951 else
6952 {
6953 if (new_player)
6954 {
6955 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6956 if (res_index >= 0)
6957 {
6958 InventoryLocation il = new InventoryLocation;
6959 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6961 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6964 {
6965 il.
GetParent().GetOnReleaseLock().Invoke(it);
6966 }
6968 {
6970 }
6971
6972 }
6973 }
6975 {
6976
6978 }
6979
6980 if (m_OldLocation)
6981 {
6982 m_OldLocation.Reset();
6983 }
6984 }
6985 }
6986
6987 override void EOnContact(IEntity other, Contact extra)
6988 {
6990 {
6991 int liquidType = -1;
6993 if (impactSpeed > 0.0)
6994 {
6996 #ifndef SERVER
6998 #else
7000 SetSynchDirty();
7001 #endif
7003 }
7004 }
7005
7006 #ifdef SERVER
7007 if (GetCompEM() && GetCompEM().IsPlugged())
7008 {
7009 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
7010 GetCompEM().UnplugThis();
7011 }
7012 #endif
7013 }
7014
7016
7018 {
7020 }
7021
7023 {
7024
7025 }
7026
7028 {
7029 super.OnItemLocationChanged(old_owner, new_owner);
7030
7031 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
7032 PlayerBase playerNew = PlayerBase.Cast(new_owner);
7033
7034 if (!relatedPlayer && playerNew)
7035 relatedPlayer = playerNew;
7036
7037 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
7038 {
7040 if (actionMgr)
7041 {
7042 ActionBase currentAction = actionMgr.GetRunningAction();
7043 if (currentAction)
7045 }
7046 }
7047
7048 Man ownerPlayerOld = null;
7049 Man ownerPlayerNew = null;
7050
7051 if (old_owner)
7052 {
7053 if (old_owner.
IsMan())
7054 {
7055 ownerPlayerOld = Man.Cast(old_owner);
7056 }
7057 else
7058 {
7059 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
7060 }
7061 }
7062 else
7063 {
7065 {
7067
7068 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
7069 {
7070 GetCompEM().UnplugThis();
7071 }
7072 }
7073 }
7074
7075 if (new_owner)
7076 {
7077 if (new_owner.
IsMan())
7078 {
7079 ownerPlayerNew = Man.Cast(new_owner);
7080 }
7081 else
7082 {
7083 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
7084 }
7085 }
7086
7087 if (ownerPlayerOld != ownerPlayerNew)
7088 {
7089 if (ownerPlayerOld)
7090 {
7091 array<EntityAI> subItemsExit = new array<EntityAI>;
7093 for (int i = 0; i < subItemsExit.Count(); i++)
7094 {
7097 }
7098 }
7099
7100 if (ownerPlayerNew)
7101 {
7102 array<EntityAI> subItemsEnter = new array<EntityAI>;
7104 for (int j = 0; j < subItemsEnter.Count(); j++)
7105 {
7108 }
7109 }
7110 }
7111 else if (ownerPlayerNew != null)
7112 {
7113 PlayerBase nplayer;
7114 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
7115 {
7116 array<EntityAI> subItemsUpdate = new array<EntityAI>;
7118 for (int k = 0; k < subItemsUpdate.Count(); k++)
7119 {
7121 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
7122 }
7123 }
7124 }
7125
7126 if (old_owner)
7127 old_owner.OnChildItemRemoved(this);
7128 if (new_owner)
7129 new_owner.OnChildItemReceived(this);
7130 }
7131
7132
7134 {
7135 super.EEDelete(parent);
7136 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
7137 if (player)
7138 {
7140
7141 if (player.IsAlive())
7142 {
7143 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7144 if (r_index >= 0)
7145 {
7146 InventoryLocation r_il = new InventoryLocation;
7147 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7148
7149 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7152 {
7153 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7154 }
7156 {
7157 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7158 }
7159
7160 }
7161
7162 player.RemoveQuickBarEntityShortcut(this);
7163 }
7164 }
7165 }
7166
7168 {
7169 super.EEKilled(killer);
7170
7173 {
7174 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7175 {
7176 if (IsMagazine())
7177 {
7178 if (Magazine.Cast(this).GetAmmoCount() > 0)
7179 {
7181 }
7182 }
7183 else
7184 {
7186 }
7187 }
7188 }
7189 }
7190
7192 {
7193 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7194
7195 super.OnWasAttached(parent, slot_id);
7196
7199
7201 }
7202
7204 {
7205 super.OnWasDetached(parent, slot_id);
7206
7209 }
7210
7212 {
7213 int idx;
7216
7217 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7218 if (inventory_slots.Count() < 1)
7219 {
7220 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7221 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7222 }
7223 else
7224 {
7225 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7226 }
7227
7228 idx = inventory_slots.Find(slot);
7229 if (idx < 0)
7230 return "";
7231
7232 return attach_types.Get(idx);
7233 }
7234
7236 {
7237 int idx = -1;
7238 string slot;
7239
7242
7243 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7244 if (inventory_slots.Count() < 1)
7245 {
7246 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7247 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7248 }
7249 else
7250 {
7251 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7252 if (detach_types.Count() < 1)
7253 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7254 }
7255
7256 for (int i = 0; i < inventory_slots.Count(); i++)
7257 {
7258 slot = inventory_slots.Get(i);
7259 }
7260
7261 if (slot != "")
7262 {
7263 if (detach_types.Count() == 1)
7264 idx = 0;
7265 else
7266 idx = inventory_slots.Find(slot);
7267 }
7268 if (idx < 0)
7269 return "";
7270
7271 return detach_types.Get(idx);
7272 }
7273
7275 {
7276
7278
7279
7280 float min_time = 1;
7281 float max_time = 3;
7282 float delay = Math.RandomFloat(min_time, max_time);
7283
7284 explode_timer.Run(delay, this, "DoAmmoExplosion");
7285 }
7286
7288 {
7289 Magazine magazine = Magazine.Cast(this);
7290 int pop_sounds_count = 6;
7291 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7292
7293
7294 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7295 string sound_name = pop_sounds[ sound_idx ];
7297
7298
7299 magazine.ServerAddAmmoCount(-1);
7300
7301
7302 float min_temp_to_explode = 100;
7303
7304 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7305 {
7307 }
7308 }
7309
7310
7311 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7312 {
7313 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7314
7315 const int CHANCE_DAMAGE_CARGO = 4;
7316 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7317 const int CHANCE_DAMAGE_NOTHING = 2;
7318
7320 {
7321 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7322 int chances;
7323 int rnd;
7324
7325 if (GetInventory().GetCargo())
7326 {
7327 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7328 rnd = Math.RandomInt(0,chances);
7329
7330 if (rnd < CHANCE_DAMAGE_CARGO)
7331 {
7333 }
7334 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7335 {
7337 }
7338 }
7339 else
7340 {
7341 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7342 rnd = Math.RandomInt(0,chances);
7343
7344 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7345 {
7347 }
7348 }
7349 }
7350 }
7351
7353 {
7354 if (GetInventory().GetCargo())
7355 {
7356 int item_count = GetInventory().GetCargo().GetItemCount();
7357 if (item_count > 0)
7358 {
7359 int random_pick = Math.RandomInt(0, item_count);
7361 if (!item.IsExplosive())
7362 {
7363 item.AddHealth("","",damage);
7364 return true;
7365 }
7366 }
7367 }
7368 return false;
7369 }
7370
7372 {
7373 int attachment_count = GetInventory().AttachmentCount();
7374 if (attachment_count > 0)
7375 {
7376 int random_pick = Math.RandomInt(0, attachment_count);
7377 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7378 if (!attachment.IsExplosive())
7379 {
7380 attachment.AddHealth("","",damage);
7381 return true;
7382 }
7383 }
7384 return false;
7385 }
7386
7388 {
7390 }
7391
7393 {
7395 return GetInventory().CanRemoveEntity();
7396
7397 return false;
7398 }
7399
7401 {
7403 return;
7404
7406 {
7407 if (ScriptInputUserData.CanStoreInputUserData())
7408 {
7409 ScriptInputUserData ctx = new ScriptInputUserData;
7414 ctx.
Write(destination_entity);
7418 }
7419 }
7420 else if (!
GetGame().IsMultiplayer())
7421 {
7423 }
7424 }
7425
7427 {
7429 return;
7430
7431 float split_quantity_new;
7435 InventoryLocation loc = new InventoryLocation;
7436
7437 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7438 {
7440 split_quantity_new = stack_max;
7441 else
7443
7444 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7445 if (new_item)
7446 {
7447 new_item.SetResultOfSplit(true);
7448 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7450 new_item.SetQuantity(split_quantity_new);
7451 }
7452 }
7453 else if (destination_entity && slot_id == -1)
7454 {
7455 if (quantity > stack_max)
7456 split_quantity_new = stack_max;
7457 else
7458 split_quantity_new = quantity;
7459
7461 {
7464 }
7465
7466 if (new_item)
7467 {
7468 new_item.SetResultOfSplit(true);
7469 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7471 new_item.SetQuantity(split_quantity_new);
7472 }
7473 }
7474 else
7475 {
7476 if (stack_max != 0)
7477 {
7479 {
7481 }
7482
7483 if (split_quantity_new == 0)
7484 {
7485 if (!
GetGame().IsMultiplayer())
7486 player.PhysicalPredictiveDropItem(this);
7487 else
7488 player.ServerDropEntity(this);
7489 return;
7490 }
7491
7493
7494 if (new_item)
7495 {
7496 new_item.SetResultOfSplit(true);
7497 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7499 new_item.SetQuantity(stack_max);
7500 new_item.PlaceOnSurface();
7501 }
7502 }
7503 }
7504 }
7505
7507 {
7509 return;
7510
7511 float split_quantity_new;
7515 InventoryLocation loc = new InventoryLocation;
7516
7517 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7518 {
7520 split_quantity_new = stack_max;
7521 else
7523
7524 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7525 if (new_item)
7526 {
7527 new_item.SetResultOfSplit(true);
7528 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7530 new_item.SetQuantity(split_quantity_new);
7531 }
7532 }
7533 else if (destination_entity && slot_id == -1)
7534 {
7535 if (quantity > stack_max)
7536 split_quantity_new = stack_max;
7537 else
7538 split_quantity_new = quantity;
7539
7541 {
7544 }
7545
7546 if (new_item)
7547 {
7548 new_item.SetResultOfSplit(true);
7549 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7551 new_item.SetQuantity(split_quantity_new);
7552 }
7553 }
7554 else
7555 {
7556 if (stack_max != 0)
7557 {
7559 {
7561 }
7562
7564
7565 if (new_item)
7566 {
7567 new_item.SetResultOfSplit(true);
7568 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7570 new_item.SetQuantity(stack_max);
7571 new_item.PlaceOnSurface();
7572 }
7573 }
7574 }
7575 }
7576
7578 {
7580 return;
7581
7583 {
7584 if (ScriptInputUserData.CanStoreInputUserData())
7585 {
7586 ScriptInputUserData ctx = new ScriptInputUserData;
7591 dst.WriteToContext(ctx);
7593 }
7594 }
7595 else if (!
GetGame().IsMultiplayer())
7596 {
7598 }
7599 }
7600
7602 {
7604 return;
7605
7607 {
7608 if (ScriptInputUserData.CanStoreInputUserData())
7609 {
7610 ScriptInputUserData ctx = new ScriptInputUserData;
7615 ctx.
Write(destination_entity);
7621 }
7622 }
7623 else if (!
GetGame().IsMultiplayer())
7624 {
7626 }
7627 }
7628
7630 {
7632 }
7633
7635 {
7637 return this;
7638
7640 float split_quantity_new;
7642 if (dst.IsValid())
7643 {
7644 int slot_id = dst.GetSlot();
7646
7647 if (quantity > stack_max)
7648 split_quantity_new = stack_max;
7649 else
7650 split_quantity_new = quantity;
7651
7653
7654 if (new_item)
7655 {
7656 new_item.SetResultOfSplit(true);
7657 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7660 }
7661
7662 return new_item;
7663 }
7664
7665 return null;
7666 }
7667
7669 {
7671 return;
7672
7674 float split_quantity_new;
7676 if (destination_entity)
7677 {
7679 if (quantity > stackable)
7680 split_quantity_new = stackable;
7681 else
7682 split_quantity_new = quantity;
7683
7684 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7685 if (new_item)
7686 {
7687 new_item.SetResultOfSplit(true);
7688 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7690 new_item.SetQuantity(split_quantity_new);
7691 }
7692 }
7693 }
7694
7696 {
7698 return;
7699
7701 {
7702 if (ScriptInputUserData.CanStoreInputUserData())
7703 {
7704 ScriptInputUserData ctx = new ScriptInputUserData;
7709 ItemBase destination_entity =
this;
7710 ctx.
Write(destination_entity);
7714 }
7715 }
7716 else if (!
GetGame().IsMultiplayer())
7717 {
7719 }
7720 }
7721
7723 {
7725 return;
7726
7728 float split_quantity_new;
7730 if (player)
7731 {
7733 if (quantity > stackable)
7734 split_quantity_new = stackable;
7735 else
7736 split_quantity_new = quantity;
7737
7738 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7739 new_item =
ItemBase.Cast(in_hands);
7740 if (new_item)
7741 {
7742 new_item.SetResultOfSplit(true);
7743 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7745 new_item.SetQuantity(split_quantity_new);
7746 }
7747 }
7748 }
7749
7751 {
7753 return;
7754
7756 float split_quantity_new = Math.Floor(quantity * 0.5);
7757
7759
7760 if (new_item)
7761 {
7762 if (new_item.GetQuantityMax() < split_quantity_new)
7763 {
7764 split_quantity_new = new_item.GetQuantityMax();
7765 }
7766
7767 new_item.SetResultOfSplit(true);
7768 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7769
7771 {
7774 }
7775 else
7776 {
7779 }
7780 }
7781 }
7782
7784 {
7786 return;
7787
7789 float split_quantity_new = Math.Floor(quantity / 2);
7790
7791 InventoryLocation invloc = new InventoryLocation;
7793
7795 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7796
7797 if (new_item)
7798 {
7799 if (new_item.GetQuantityMax() < split_quantity_new)
7800 {
7801 split_quantity_new = new_item.GetQuantityMax();
7802 }
7804 {
7807 }
7808 else
7809 {
7812 }
7813 }
7814 }
7815
7818 {
7819 SetWeightDirty();
7821
7822 if (parent)
7823 parent.OnAttachmentQuantityChangedEx(this, delta);
7824
7826 {
7828 {
7830 }
7832 {
7833 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7835 }
7836 }
7837
7838 }
7839
7842 {
7843
7844 }
7845
7848 {
7850 }
7851
7853 {
7854 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7855
7857 {
7858 if (newLevel == GameConstants.STATE_RUINED)
7859 {
7861 EntityAI parent = GetHierarchyParent();
7862 if (parent && parent.IsFireplace())
7863 {
7864 CargoBase cargo = GetInventory().GetCargo();
7865 if (cargo)
7866 {
7868 {
7870 }
7871 }
7872 }
7873 }
7874
7876 {
7877
7879 return;
7880 }
7881
7882 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7883 {
7885 }
7886 }
7887 }
7888
7889
7891 {
7892 super.OnRightClick();
7893
7895 {
7897 {
7898 if (ScriptInputUserData.CanStoreInputUserData())
7899 {
7900 vector m4[4];
7902
7903 EntityAI root = GetHierarchyRoot();
7904
7905 InventoryLocation dst = new InventoryLocation;
7907 {
7908 if (root)
7909 {
7910 root.GetTransform(m4);
7912 }
7913 else
7914 GetInventory().GetCurrentInventoryLocation(dst);
7915 }
7916 else
7917 {
7919
7920
7921 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7922 {
7923 if (root)
7924 {
7925 root.GetTransform(m4);
7927 }
7928 else
7929 GetInventory().GetCurrentInventoryLocation(dst);
7930 }
7931 else
7932 {
7933 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7934 }
7935 }
7936
7937 ScriptInputUserData ctx = new ScriptInputUserData;
7945 }
7946 }
7947 else if (!
GetGame().IsMultiplayer())
7948 {
7950 }
7951 }
7952 }
7953
7954 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7955 {
7956
7957 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7958 return false;
7959
7960 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7961 return false;
7962
7963
7965 return false;
7966
7967
7968 Magazine mag = Magazine.Cast(this);
7969 if (mag)
7970 {
7971 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7972 return false;
7973
7974 if (stack_max_limit)
7975 {
7976 Magazine other_mag = Magazine.Cast(other_item);
7977 if (other_item)
7978 {
7979 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7980 return false;
7981 }
7982
7983 }
7984 }
7985 else
7986 {
7987
7989 return false;
7990
7992 return false;
7993 }
7994
7995 PlayerBase player = null;
7996 if (CastTo(player, GetHierarchyRootPlayer()))
7997 {
7998 if (player.GetInventory().HasAttachment(this))
7999 return false;
8000
8001 if (player.IsItemsToDelete())
8002 return false;
8003 }
8004
8005 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
8006 return false;
8007
8008 int slotID;
8010 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
8011 return false;
8012
8013 return true;
8014 }
8015
8017 {
8019 }
8020
8022 {
8023 return m_IsResultOfSplit;
8024 }
8025
8027 {
8028 m_IsResultOfSplit = value;
8029 }
8030
8032 {
8034 }
8035
8037 {
8038 float other_item_quantity = other_item.GetQuantity();
8039 float this_free_space;
8040
8042
8044
8045 if (other_item_quantity > this_free_space)
8046 {
8047 return this_free_space;
8048 }
8049 else
8050 {
8051 return other_item_quantity;
8052 }
8053 }
8054
8056 {
8058 }
8059
8061 {
8063 return;
8064
8065 if (!IsMagazine() && other_item)
8066 {
8068 if (quantity_used != 0)
8069 {
8070 float hp1 = GetHealth01("","");
8071 float hp2 = other_item.GetHealth01("","");
8072 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
8073 hpResult = hpResult / (
GetQuantity() + quantity_used);
8074
8075 hpResult *= GetMaxHealth();
8076 Math.Round(hpResult);
8077 SetHealth("", "Health", hpResult);
8078
8080 other_item.AddQuantity(-quantity_used);
8081 }
8082 }
8084 }
8085
8087 {
8088 #ifdef SERVER
8089 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
8090 GetHierarchyParent().IncreaseLifetimeUp();
8091 #endif
8092 };
8093
8095 {
8096 PlayerBase p = PlayerBase.Cast(player);
8097
8098 array<int> recipesIds = p.m_Recipes;
8099 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8100 if (moduleRecipesManager)
8101 {
8102 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
8103 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
8104 }
8105
8106 for (int i = 0;i < recipesIds.Count(); i++)
8107 {
8108 int key = recipesIds.Get(i);
8109 string recipeName = moduleRecipesManager.GetRecipeName(key);
8111 }
8112 }
8113
8114
8115 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
8116 {
8117 super.GetDebugActions(outputList);
8118
8119
8124
8125
8129
8133
8134
8137
8138
8140 {
8143 }
8144
8146
8149
8153 }
8154
8155
8156
8157
8159 {
8160 super.OnAction(action_id, player, ctx);
8161 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8162 {
8163 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8164 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8165 PlayerBase p = PlayerBase.Cast(player);
8166 if (
EActions.RECIPES_RANGE_START < 1000)
8167 {
8168 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8169 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8170 }
8171 }
8172 #ifndef SERVER
8173 else if (action_id ==
EActions.WATCH_PLAYER)
8174 {
8175 PluginDeveloper.SetDeveloperItemClientEx(player);
8176 }
8177 #endif
8179 {
8180 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8181 {
8182 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8183 OnDebugButtonPressServer(id + 1);
8184 }
8185
8186 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8187 {
8188 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8190 }
8191
8192 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8193 {
8194 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8196 }
8197
8198 else if (action_id ==
EActions.ADD_QUANTITY)
8199 {
8200 if (IsMagazine())
8201 {
8202 Magazine mag = Magazine.Cast(this);
8203 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8204 }
8205 else
8206 {
8208 }
8209
8210 if (m_EM)
8211 {
8212 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8213 }
8214
8215 }
8216
8217 else if (action_id ==
EActions.REMOVE_QUANTITY)
8218 {
8219 if (IsMagazine())
8220 {
8221 Magazine mag2 = Magazine.Cast(this);
8222 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8223 }
8224 else
8225 {
8227 }
8228 if (m_EM)
8229 {
8230 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8231 }
8232
8233 }
8234
8235 else if (action_id ==
EActions.SET_QUANTITY_0)
8236 {
8238
8239 if (m_EM)
8240 {
8241 m_EM.SetEnergy(0);
8242 }
8243 }
8244
8245 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8246 {
8248
8249 if (m_EM)
8250 {
8251 m_EM.SetEnergy(m_EM.GetEnergyMax());
8252 }
8253 }
8254
8255 else if (action_id ==
EActions.ADD_HEALTH)
8256 {
8257 AddHealth("","",GetMaxHealth("","Health")/5);
8258 }
8259 else if (action_id ==
EActions.REMOVE_HEALTH)
8260 {
8261 AddHealth("","",-GetMaxHealth("","Health")/5);
8262 }
8263 else if (action_id ==
EActions.DESTROY_HEALTH)
8264 {
8265 SetHealth01("","",0);
8266 }
8267 else if (action_id ==
EActions.WATCH_ITEM)
8268 {
8270 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8271 #ifdef DEVELOPER
8272 SetDebugDeveloper_item(this);
8273 #endif
8274 }
8275
8276 else if (action_id ==
EActions.ADD_TEMPERATURE)
8277 {
8278 AddTemperature(20);
8279
8280 }
8281
8282 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8283 {
8284 AddTemperature(-20);
8285
8286 }
8287
8288 else if (action_id ==
EActions.FLIP_FROZEN)
8289 {
8290 SetFrozen(!GetIsFrozen());
8291
8292 }
8293
8294 else if (action_id ==
EActions.ADD_WETNESS)
8295 {
8297
8298 }
8299
8300 else if (action_id ==
EActions.REMOVE_WETNESS)
8301 {
8303
8304 }
8305
8306 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8307 {
8310
8311
8312 }
8313
8314 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8315 {
8318 }
8319
8320 else if (action_id ==
EActions.MAKE_SPECIAL)
8321 {
8322 auto debugParams = DebugSpawnParams.WithPlayer(player);
8323 OnDebugSpawnEx(debugParams);
8324 }
8325
8326 else if (action_id ==
EActions.DELETE)
8327 {
8328 Delete();
8329 }
8330
8331 }
8332
8333
8334 return false;
8335 }
8336
8337
8338
8339
8343
8346
8347
8348
8350 {
8351 return false;
8352 }
8353
8354
8356 {
8357 return true;
8358 }
8359
8360
8362 {
8363 return true;
8364 }
8365
8366
8367
8369 {
8370 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8372 }
8373
8376 {
8377 return null;
8378 }
8379
8381 {
8382 return false;
8383 }
8384
8386 {
8387 return false;
8388 }
8389
8393
8394
8396 {
8397 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8398 return module_repairing.CanRepair(this, item_repair_kit);
8399 }
8400
8401
8402 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8403 {
8404 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8405 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8406 }
8407
8408
8410 {
8411
8412
8413
8414
8415
8416
8417
8418
8419 return 1;
8420 }
8421
8422
8423
8425 {
8427 }
8428
8429
8430
8432 {
8434 }
8435
8436
8445 {
8446 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8447
8448 if (player)
8449 {
8450 player.MessageStatus(text);
8451 }
8452 }
8453
8454
8463 {
8464 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8465
8466 if (player)
8467 {
8468 player.MessageAction(text);
8469 }
8470 }
8471
8472
8481 {
8482 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8483
8484 if (player)
8485 {
8486 player.MessageFriendly(text);
8487 }
8488 }
8489
8490
8499 {
8500 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8501
8502 if (player)
8503 {
8504 player.MessageImportant(text);
8505 }
8506 }
8507
8509 {
8510 return true;
8511 }
8512
8513
8514 override bool KindOf(
string tag)
8515 {
8516 bool found = false;
8517 string item_name = this.
GetType();
8520
8521 int array_size = item_tag_array.Count();
8522 for (int i = 0; i < array_size; i++)
8523 {
8524 if (item_tag_array.Get(i) == tag)
8525 {
8526 found = true;
8527 break;
8528 }
8529 }
8530 return found;
8531 }
8532
8533
8535 {
8536
8537 super.OnRPC(sender, rpc_type,ctx);
8538
8539
8540 switch (rpc_type)
8541 {
8542 #ifndef SERVER
8543 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8544 Param2<bool, string> p = new Param2<bool, string>(false, "");
8545
8547 return;
8548
8549 bool play = p.param1;
8550 string soundSet = p.param2;
8551
8552 if (play)
8553 {
8555 {
8557 {
8559 }
8560 }
8561 else
8562 {
8564 }
8565 }
8566 else
8567 {
8569 }
8570
8571 break;
8572 #endif
8573
8574 }
8575
8577 {
8579 }
8580 }
8581
8582
8583
8584
8586 {
8587 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8588 return plugin.GetID(
name);
8589 }
8590
8592 {
8593 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8594 return plugin.GetName(id);
8595 }
8596
8599 {
8600
8601
8602 int varFlags;
8603 if (!ctx.
Read(varFlags))
8604 return;
8605
8606 if (varFlags & ItemVariableFlags.FLOAT)
8607 {
8609 }
8610 }
8611
8613 {
8614
8615 super.SerializeNumericalVars(floats_out);
8616
8617
8618
8620 {
8622 }
8623
8625 {
8627 }
8628
8630 {
8632 }
8633
8635 {
8640 }
8641
8643 {
8645 }
8646 }
8647
8649 {
8650
8651 super.DeSerializeNumericalVars(floats);
8652
8653
8654 int index = 0;
8655 int mask = Math.Round(floats.Get(index));
8656
8657 index++;
8658
8660 {
8662 {
8664 }
8665 else
8666 {
8667 float quantity = floats.Get(index);
8669 }
8670 index++;
8671 }
8672
8674 {
8675 float wet = floats.Get(index);
8677 index++;
8678 }
8679
8681 {
8682 int liquidtype = Math.Round(floats.Get(index));
8684 index++;
8685 }
8686
8688 {
8690 index++;
8692 index++;
8694 index++;
8696 index++;
8697 }
8698
8700 {
8701 int cleanness = Math.Round(floats.Get(index));
8703 index++;
8704 }
8705 }
8706
8708 {
8709 super.WriteVarsToCTX(ctx);
8710
8711
8713 {
8715 }
8716
8718 {
8720 }
8721
8723 {
8725 }
8726
8728 {
8729 int r,g,b,a;
8735 }
8736
8738 {
8740 }
8741 }
8742
8744 {
8745 if (!super.ReadVarsFromCTX(ctx,version))
8746 return false;
8747
8748 int intValue;
8749 float value;
8750
8751 if (version < 140)
8752 {
8753 if (!ctx.
Read(intValue))
8754 return false;
8755
8756 m_VariablesMask = intValue;
8757 }
8758
8760 {
8761 if (!ctx.
Read(value))
8762 return false;
8763
8765 {
8767 }
8768 else
8769 {
8771 }
8772 }
8773
8774 if (version < 140)
8775 {
8777 {
8778 if (!ctx.
Read(value))
8779 return false;
8780 SetTemperatureDirect(value);
8781 }
8782 }
8783
8785 {
8786 if (!ctx.
Read(value))
8787 return false;
8789 }
8790
8792 {
8793 if (!ctx.
Read(intValue))
8794 return false;
8796 }
8797
8799 {
8800 int r,g,b,a;
8802 return false;
8804 return false;
8806 return false;
8808 return false;
8809
8811 }
8812
8814 {
8815 if (!ctx.
Read(intValue))
8816 return false;
8818 }
8819
8820 if (version >= 138 && version < 140)
8821 {
8823 {
8824 if (!ctx.
Read(intValue))
8825 return false;
8826 SetFrozen(intValue);
8827 }
8828 }
8829
8830 return true;
8831 }
8832
8833
8835 {
8838 {
8840 }
8841
8842 if (!super.OnStoreLoad(ctx, version))
8843 {
8845 return false;
8846 }
8847
8848 if (version >= 114)
8849 {
8850 bool hasQuickBarIndexSaved;
8851
8852 if (!ctx.
Read(hasQuickBarIndexSaved))
8853 {
8855 return false;
8856 }
8857
8858 if (hasQuickBarIndexSaved)
8859 {
8860 int itmQBIndex;
8861
8862
8863 if (!ctx.
Read(itmQBIndex))
8864 {
8866 return false;
8867 }
8868
8869 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8870 if (itmQBIndex != -1 && parentPlayer)
8871 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8872 }
8873 }
8874 else
8875 {
8876
8877 PlayerBase player;
8878 int itemQBIndex;
8879 if (version ==
int.
MAX)
8880 {
8881 if (!ctx.
Read(itemQBIndex))
8882 {
8884 return false;
8885 }
8886 }
8887 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8888 {
8889
8890 if (!ctx.
Read(itemQBIndex))
8891 {
8893 return false;
8894 }
8895 if (itemQBIndex != -1 && player)
8896 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8897 }
8898 }
8899
8900 if (version < 140)
8901 {
8902
8903 if (!LoadVariables(ctx, version))
8904 {
8906 return false;
8907 }
8908 }
8909
8910
8912 {
8914 return false;
8915 }
8916 if (version >= 132)
8917 {
8919 if (raib)
8920 {
8922 {
8924 return false;
8925 }
8926 }
8927 }
8928
8930 return true;
8931 }
8932
8933
8934
8936 {
8937 super.OnStoreSave(ctx);
8938
8939 PlayerBase player;
8940 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8941 {
8943
8944 int itemQBIndex = -1;
8945 itemQBIndex = player.FindQuickBarEntityIndex(this);
8946 ctx.
Write(itemQBIndex);
8947 }
8948 else
8949 {
8951 }
8952
8954
8956 if (raib)
8957 {
8959 }
8960 }
8961
8962
8964 {
8965 super.AfterStoreLoad();
8966
8968 {
8970 }
8971
8973 {
8976 }
8977 }
8978
8980 {
8981 super.EEOnAfterLoad();
8982
8984 {
8986 }
8987
8990 }
8991
8993 {
8994 return false;
8995 }
8996
8997
8998
9000 {
9002 {
9003 #ifdef PLATFORM_CONSOLE
9004
9006 {
9008 if (menu)
9009 {
9011 }
9012 }
9013 #endif
9014 }
9015
9017 {
9020 }
9021
9023 {
9024 SetWeightDirty();
9026 }
9028 {
9031 }
9032
9034 {
9037 }
9039 {
9042 }
9043
9044 super.OnVariablesSynchronized();
9045 }
9046
9047
9048
9050 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
9051 {
9052 if (!IsServerCheck(allow_client))
9053 return false;
9054
9056 return false;
9057
9060
9061 if (value <= (min + 0.001))
9062 value = min;
9063
9064 if (value == min)
9065 {
9066 if (destroy_config)
9067 {
9068 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
9069 if (dstr)
9070 {
9072 this.Delete();
9073 return true;
9074 }
9075 }
9076 else if (destroy_forced)
9077 {
9079 this.Delete();
9080 return true;
9081 }
9082
9084 }
9085
9088
9090 {
9092
9093 if (delta)
9095 }
9096
9098
9099 return false;
9100 }
9101
9102
9104 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
9105 {
9107 }
9108
9110 {
9113 }
9114
9116 {
9119 }
9120
9123 {
9124 float value_clamped = Math.Clamp(value, 0, 1);
9126 SetQuantity(result, destroy_config, destroy_forced);
9127 }
9128
9129
9132 {
9134 }
9135
9137 {
9139 }
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9151 {
9152 int slot = -1;
9153 if (GetInventory())
9154 {
9155 InventoryLocation il = new InventoryLocation;
9156 GetInventory().GetCurrentInventoryLocation(il);
9158 }
9159
9161 }
9162
9164 {
9165 float quantity_max = 0;
9166
9168 {
9169 if (attSlotID != -1)
9170 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9171
9172 if (quantity_max <= 0)
9174 }
9175
9176 if (quantity_max <= 0)
9178
9179 return quantity_max;
9180 }
9181
9183 {
9185 }
9186
9188 {
9190 }
9191
9192
9194 {
9196 }
9197
9199 {
9201 }
9202
9204 {
9206 }
9207
9208
9210 {
9211
9212 float weightEx = GetWeightEx();
9213 float special = GetInventoryAndCargoWeight();
9214 return weightEx - special;
9215 }
9216
9217
9219 {
9221 }
9222
9224 {
9226 {
9227 #ifdef DEVELOPER
9228 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9229 {
9230 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9232 }
9233 #endif
9234
9236 }
9237 else if (HasEnergyManager())
9238 {
9239 #ifdef DEVELOPER
9240 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9241 {
9242 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9243 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9244 }
9245 #endif
9246 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9247 }
9248 else
9249 {
9250 #ifdef DEVELOPER
9251 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9252 {
9253 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9254 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9255 }
9256 #endif
9257 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9258 }
9259 }
9260
9263 {
9264 int item_count = 0;
9266
9267 if (GetInventory().GetCargo() != NULL)
9268 {
9269 item_count = GetInventory().GetCargo().GetItemCount();
9270 }
9271
9272 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9273 {
9274 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9275 if (item)
9276 item_count += item.GetNumberOfItems();
9277 }
9278 return item_count;
9279 }
9280
9283 {
9284 float weight = 0;
9285 float wetness = 1;
9286 if (include_wetness)
9289 {
9290 weight = wetness * m_ConfigWeight;
9291 }
9293 {
9294 weight = 1;
9295 }
9296 return weight;
9297 }
9298
9299
9300
9302 {
9303 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9304 {
9305 GameInventory inv = GetInventory();
9306 array<EntityAI> items = new array<EntityAI>;
9308 for (int i = 0; i < items.Count(); i++)
9309 {
9311 if (item)
9312 {
9314 }
9315 }
9316 }
9317 }
9318
9319
9320
9321
9323 {
9324 float energy = 0;
9325 if (HasEnergyManager())
9326 {
9327 energy = GetCompEM().GetEnergy();
9328 }
9329 return energy;
9330 }
9331
9332
9334 {
9335 super.OnEnergyConsumed();
9336
9338 }
9339
9341 {
9342 super.OnEnergyAdded();
9343
9345 }
9346
9347
9349 {
9350 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9351 {
9353 {
9354 float energy_0to1 = GetCompEM().GetEnergy0To1();
9356 }
9357 }
9358 }
9359
9360
9362 {
9363 return ConfigGetFloat("heatIsolation");
9364 }
9365
9367 {
9369 }
9370
9372 {
9373 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9374 if (
GetGame().ConfigIsExisting(paramPath))
9376
9377 return 0.0;
9378 }
9379
9381 {
9382 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9383 if (
GetGame().ConfigIsExisting(paramPath))
9385
9386 return 0.0;
9387 }
9388
9389 override void SetWet(
float value,
bool allow_client =
false)
9390 {
9391 if (!IsServerCheck(allow_client))
9392 return;
9393
9396
9398
9399 m_VarWet = Math.Clamp(value, min, max);
9400
9402 {
9405 }
9406 }
9407
9408 override void AddWet(
float value)
9409 {
9411 }
9412
9414 {
9416 }
9417
9419 {
9421 }
9422
9424 {
9426 }
9427
9429 {
9431 }
9432
9434 {
9436 }
9437
9439 {
9442 if (newLevel != oldLevel)
9443 {
9445 }
9446 }
9447
9449 {
9450 SetWeightDirty();
9451 }
9452
9454 {
9455 return GetWetLevelInternal(
m_VarWet);
9456 }
9457
9458
9459
9461 {
9463 }
9464
9466 {
9468 }
9469
9471 {
9473 }
9474
9476 {
9478 }
9479
9480
9481
9483 {
9484 if (ConfigIsExisting("itemModelLength"))
9485 {
9486 return ConfigGetFloat("itemModelLength");
9487 }
9488 return 0;
9489 }
9490
9492 {
9493 if (ConfigIsExisting("itemAttachOffset"))
9494 {
9495 return ConfigGetFloat("itemAttachOffset");
9496 }
9497 return 0;
9498 }
9499
9500 override void SetCleanness(
int value,
bool allow_client =
false)
9501 {
9502 if (!IsServerCheck(allow_client))
9503 return;
9504
9506
9508
9511 }
9512
9514 {
9516 }
9517
9519 {
9520 return true;
9521 }
9522
9523
9524
9525
9527 {
9529 }
9530
9532 {
9534 }
9535
9536
9537
9538
9539 override void SetColor(
int r,
int g,
int b,
int a)
9540 {
9546 }
9548 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9549 {
9554 }
9555
9557 {
9559 }
9560
9563 {
9564 int r,g,b,a;
9566 r = r/255;
9567 g = g/255;
9568 b = b/255;
9569 a = a/255;
9570 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9571 }
9572
9573
9574
9575 override void SetLiquidType(
int value,
bool allow_client =
false)
9576 {
9577 if (!IsServerCheck(allow_client))
9578 return;
9579
9584 }
9585
9587 {
9588 return ConfigGetInt("varLiquidTypeInit");
9589 }
9590
9592 {
9594 }
9595
9597 {
9599 SetFrozen(false);
9600 }
9601
9604 {
9605 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9606 }
9607
9608
9611 {
9612 PlayerBase nplayer;
9613 if (PlayerBase.CastTo(nplayer, player))
9614 {
9616
9617 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9618 }
9619 }
9620
9621
9624 {
9625 PlayerBase nplayer;
9626 if (PlayerBase.CastTo(nplayer,player))
9627 {
9628
9629 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9630
9631 }
9632
9633
9634 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9635
9636
9637 if (HasEnergyManager())
9638 {
9639 GetCompEM().UpdatePlugState();
9640 }
9641 }
9642
9643
9645 {
9646 super.OnPlacementStarted(player);
9647
9649 }
9650
9651 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9652 {
9654 {
9655 m_AdminLog.OnPlacementComplete(player,
this);
9656 }
9657
9658 super.OnPlacementComplete(player, position, orientation);
9659 }
9660
9661
9662
9663
9664
9666 {
9668 {
9669 return true;
9670 }
9671 else
9672 {
9673 return false;
9674 }
9675 }
9676
9677
9679 {
9681 {
9683 }
9684 }
9685
9686
9688 {
9690 }
9691
9693 {
9695 }
9696
9697 override void InsertAgent(
int agent,
float count = 1)
9698 {
9699 if (count < 1)
9700 return;
9701
9703 }
9704
9707 {
9709 }
9710
9711
9713 {
9715 }
9716
9717
9718
9719
9720
9721
9722
9723
9724
9725
9726
9727
9728
9729
9730
9731
9732
9733
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9759 {
9761 return false;
9762 return true;
9763 }
9764
9766 {
9767
9769 }
9770
9771
9774 {
9775 super.CheckForRoofLimited(timeTresholdMS);
9776
9778 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9779 {
9780 m_PreviousRoofTestTime = time;
9781 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9782 }
9783 }
9784
9785
9787 {
9789 {
9790 return 0;
9791 }
9792
9793 if (GetInventory().GetAttachmentSlotsCount() != 0)
9794 {
9795 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9796 if (filter)
9797 return filter.GetProtectionLevel(type, false, system);
9798 else
9799 return 0;
9800 }
9801
9802 string subclassPath, entryName;
9803
9804 switch (type)
9805 {
9807 entryName = "biological";
9808 break;
9810 entryName = "chemical";
9811 break;
9812 default:
9813 entryName = "biological";
9814 break;
9815 }
9816
9817 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9818
9820 }
9821
9822
9823
9826 {
9827 if (!IsMagazine())
9829
9831 }
9832
9833
9834
9835
9836
9841 {
9842 return true;
9843 }
9844
9846 {
9848 }
9849
9850
9851
9852
9853
9855 {
9856 if (parent)
9857 {
9858 if (parent.IsInherited(DayZInfected))
9859 return true;
9860
9861 if (!parent.IsRuined())
9862 return true;
9863 }
9864
9865 return true;
9866 }
9867
9869 {
9870 if (!super.CanPutAsAttachment(parent))
9871 {
9872 return false;
9873 }
9874
9875 if (!IsRuined() && !parent.IsRuined())
9876 {
9877 return true;
9878 }
9879
9880 return false;
9881 }
9882
9884 {
9885
9886
9887
9888
9889 return super.CanReceiveItemIntoCargo(item);
9890 }
9891
9893 {
9894
9895
9896
9897
9898 GameInventory attachmentInv = attachment.GetInventory();
9900 {
9901 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9902 return false;
9903 }
9904
9905 InventoryLocation loc = new InventoryLocation();
9906 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9907 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9908 return false;
9909
9910 return super.CanReceiveAttachment(attachment, slotId);
9911 }
9912
9914 {
9915 if (!super.CanReleaseAttachment(attachment))
9916 return false;
9917
9918 return GetInventory().AreChildrenAccessible();
9919 }
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9942 {
9943 int id = muzzle_owner.GetMuzzleID();
9944 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9945
9946 if (WPOF_array)
9947 {
9948 for (int i = 0; i < WPOF_array.Count(); i++)
9949 {
9950 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9951
9952 if (WPOF)
9953 {
9954 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9955 }
9956 }
9957 }
9958 }
9959
9960
9962 {
9963 int id = muzzle_owner.GetMuzzleID();
9965
9966 if (WPOBE_array)
9967 {
9968 for (int i = 0; i < WPOBE_array.Count(); i++)
9969 {
9970 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9971
9972 if (WPOBE)
9973 {
9974 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9975 }
9976 }
9977 }
9978 }
9979
9980
9982 {
9983 int id = muzzle_owner.GetMuzzleID();
9984 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9985
9986 if (WPOOH_array)
9987 {
9988 for (int i = 0; i < WPOOH_array.Count(); i++)
9989 {
9990 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9991
9992 if (WPOOH)
9993 {
9994 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9995 }
9996 }
9997 }
9998 }
9999
10000
10002 {
10003 int id = muzzle_owner.GetMuzzleID();
10004 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
10005
10006 if (WPOOH_array)
10007 {
10008 for (int i = 0; i < WPOOH_array.Count(); i++)
10009 {
10010 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
10011
10012 if (WPOOH)
10013 {
10014 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10015 }
10016 }
10017 }
10018 }
10019
10020
10022 {
10023 int id = muzzle_owner.GetMuzzleID();
10024 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
10025
10026 if (WPOOH_array)
10027 {
10028 for (int i = 0; i < WPOOH_array.Count(); i++)
10029 {
10030 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
10031
10032 if (WPOOH)
10033 {
10034 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
10035 }
10036 }
10037 }
10038 }
10039
10040
10041
10043 {
10045 {
10046 return true;
10047 }
10048
10049 return false;
10050 }
10051
10053 {
10055 {
10056 return true;
10057 }
10058
10059 return false;
10060 }
10061
10063 {
10065 {
10066 return true;
10067 }
10068
10069 return false;
10070 }
10071
10073 {
10074 return false;
10075 }
10076
10079 {
10080 return UATimeSpent.DEFAULT_DEPLOY;
10081 }
10082
10083
10084
10085
10087 {
10089 SetSynchDirty();
10090 }
10091
10093 {
10095 }
10096
10097
10099 {
10100 return false;
10101 }
10102
10105 {
10106 string att_type = "None";
10107
10108 if (ConfigIsExisting("soundAttType"))
10109 {
10110 att_type = ConfigGetString("soundAttType");
10111 }
10112
10114 }
10115
10117 {
10119 }
10120
10121
10122
10123
10124
10128
10130 {
10133
10135 }
10136
10137
10139 {
10141 return;
10142
10144
10147
10150
10151 SoundParameters params = new SoundParameters();
10155 }
10156
10157
10159 {
10161 return;
10162
10164 SetSynchDirty();
10165
10168 }
10169
10170
10172 {
10174 return;
10175
10177 SetSynchDirty();
10178
10181 }
10182
10184 {
10186 }
10187
10189 {
10191 }
10192
10195 {
10196 if (!
GetGame().IsDedicatedServer())
10197 {
10198 if (ConfigIsExisting("attachSoundSet"))
10199 {
10200 string cfg_path = "";
10201 string soundset = "";
10202 string type_name =
GetType();
10203
10206 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10207 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10208
10209 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10210 {
10211 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10212 {
10213 if (cfg_slot_array[i] == slot_type)
10214 {
10215 soundset = cfg_soundset_array[i];
10216 break;
10217 }
10218 }
10219 }
10220
10221 if (soundset != "")
10222 {
10223 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10225 }
10226 }
10227 }
10228 }
10229
10231 {
10232
10233 }
10234
10235 void OnApply(PlayerBase player);
10236
10238 {
10239 return 1.0;
10240 };
10241
10243 {
10245 }
10246
10248 {
10250 }
10251
10253
10255 {
10256 SetDynamicPhysicsLifeTime(0.01);
10258 }
10259
10261 {
10262 array<string> zone_names = new array<string>;
10263 GetDamageZones(zone_names);
10264 for (int i = 0; i < zone_names.Count(); i++)
10265 {
10266 SetHealthMax(zone_names.Get(i),"Health");
10267 }
10268 SetHealthMax("","Health");
10269 }
10270
10273 {
10274 float global_health = GetHealth01("","Health");
10275 array<string> zones = new array<string>;
10276 GetDamageZones(zones);
10277
10278 for (int i = 0; i < zones.Count(); i++)
10279 {
10280 SetHealth01(zones.Get(i),"Health",global_health);
10281 }
10282 }
10283
10286 {
10287 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10288 }
10289
10291 {
10292 if (!hasRootAsPlayer)
10293 {
10294 if (refParentIB)
10295 {
10296
10297 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10298 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10299
10300 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10301 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10302
10305 }
10306 else
10307 {
10308
10311 }
10312 }
10313 }
10314
10316 {
10318 {
10319 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10320 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10321 {
10322 float heatPermCoef = 1.0;
10324 while (ent)
10325 {
10326 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10327 ent = ent.GetHierarchyParent();
10328 }
10329
10330 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10331 }
10332 }
10333 }
10334
10336 {
10337
10338 EntityAI parent = GetHierarchyParent();
10339 if (!parent)
10340 {
10341 hasParent = false;
10342 hasRootAsPlayer = false;
10343 }
10344 else
10345 {
10346 hasParent = true;
10347 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10348 refParentIB =
ItemBase.Cast(parent);
10349 }
10350 }
10351
10352 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10353 {
10354
10355 }
10356
10358 {
10359
10360 return false;
10361 }
10362
10364 {
10365
10366
10367 return false;
10368 }
10369
10371 {
10372
10373 return false;
10374 }
10375
10378 {
10379 return !GetIsFrozen() &&
IsOpen();
10380 }
10381
10383 {
10384 bool hasParent = false, hasRootAsPlayer = false;
10386
10387 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10388 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10389
10390 if (wwtu || foodDecay)
10391 {
10395
10396 if (processWetness || processTemperature || processDecay)
10397 {
10399
10400 if (processWetness)
10401 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10402
10403 if (processTemperature)
10405
10406 if (processDecay)
10407 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10408 }
10409 }
10410 }
10411
10414 {
10416 }
10417
10419 {
10422
10423 return super.GetTemperatureFreezeThreshold();
10424 }
10425
10427 {
10430
10431 return super.GetTemperatureThawThreshold();
10432 }
10433
10435 {
10438
10439 return super.GetItemOverheatThreshold();
10440 }
10441
10443 {
10445 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10446
10447 return super.GetTemperatureFreezeTime();
10448 }
10449
10451 {
10453 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10454
10455 return super.GetTemperatureThawTime();
10456 }
10457
10462
10464 {
10465 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10466 }
10467
10469 {
10470 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10471 }
10472
10475 {
10477 }
10478
10480 {
10482 }
10483
10485 {
10487 }
10488
10491 {
10492 return null;
10493 }
10494
10497 {
10498 return false;
10499 }
10500
10502 {
10504 {
10507 if (!trg)
10508 {
10510 explosive = this;
10511 }
10512
10513 explosive.PairRemote(trg);
10515
10516 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10517 trg.SetPersistentPairID(persistentID);
10518 explosive.SetPersistentPairID(persistentID);
10519
10520 return true;
10521 }
10522 return false;
10523 }
10524
10527 {
10528 float ret = 1.0;
10531 ret *= GetHealth01();
10532
10533 return ret;
10534 }
10535
10536 #ifdef DEVELOPER
10537 override void SetDebugItem()
10538 {
10539 super.SetDebugItem();
10540 _itemBase = this;
10541 }
10542
10544 {
10545 string text = super.GetDebugText();
10546
10548 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10549
10550 return text;
10551 }
10552 #endif
10553
10555 {
10556 return true;
10557 }
10558
10560
10562
10564 {
10567 }
10568
10569
10577
10593}
10594
10596{
10598 if (entity)
10599 {
10600 bool is_item = entity.IsInherited(
ItemBase);
10601 if (is_item && full_quantity)
10602 {
10605 }
10606 }
10607 else
10608 {
10610 return NULL;
10611 }
10612 return entity;
10613}
10614
10616{
10617 if (item)
10618 {
10619 if (health > 0)
10620 item.SetHealth("", "", health);
10621
10622 if (item.CanHaveTemperature())
10623 {
10625 if (item.CanFreeze())
10626 item.SetFrozen(false);
10627 }
10628
10629 if (item.HasEnergyManager())
10630 {
10631 if (quantity >= 0)
10632 {
10633 item.GetCompEM().SetEnergy0To1(quantity);
10634 }
10635 else
10636 {
10638 }
10639 }
10640 else if (item.IsMagazine())
10641 {
10642 Magazine mag = Magazine.Cast(item);
10643 if (quantity >= 0)
10644 {
10645 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10646 }
10647 else
10648 {
10650 }
10651
10652 }
10653 else
10654 {
10655 if (quantity >= 0)
10656 {
10657 item.SetQuantityNormalized(quantity, false);
10658 }
10659 else
10660 {
10662 }
10663
10664 }
10665 }
10666}
10667
10668#ifdef DEVELOPER
10670#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.