5725{
5727 {
5728 return true;
5729 }
5730};
5731
5732
5733
5735{
5739
5741
5744
5745
5746
5747
5748
5757
5763
5768
5773
5794 protected bool m_IsResultOfSplit
5795
5797
5802
5803
5804
5806
5810
5811
5812
5814
5817
5818
5819
5825
5826
5834
5837
5838
5840
5841
5843
5844
5849
5850
5855
5856
5858
5859
5861 {
5866
5867 if (!
GetGame().IsDedicatedServer())
5868 {
5870 {
5872
5874 {
5876 }
5877 }
5878
5881 }
5882
5883 m_OldLocation = null;
5884
5886 {
5888 }
5889
5890 if (ConfigIsExisting("headSelectionsToHide"))
5891 {
5894 }
5895
5897 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5898 {
5900 }
5901
5903
5904 m_IsResultOfSplit = false;
5905
5907 }
5908
5910 {
5911 super.InitItemVariables();
5912
5918 m_Count = ConfigGetInt(
"count");
5919
5922
5927
5930
5935
5947
5951
5952
5955 if (ConfigIsExisting("canBeSplit"))
5956 {
5959 }
5960
5962 if (ConfigIsExisting("itemBehaviour"))
5964
5965
5968 RegisterNetSyncVariableInt("m_VarLiquidType");
5969 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5970
5971 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5972 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5973 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5974
5975 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5976 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5977 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5978 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5979
5980 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5981 RegisterNetSyncVariableBool("m_IsTakeable");
5982 RegisterNetSyncVariableBool("m_IsHologram");
5983
5986 {
5989 }
5990
5992
5994 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5996
5997 }
5998
6000 {
6002 }
6003
6005 {
6008 {
6013 }
6014 }
6015
6016 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
6017 {
6019 {
6022 }
6023
6025 }
6026
6028 {
6034 }
6035
6037
6039 {
6041
6042 if (!action)
6043 {
6044 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
6045 return;
6046 }
6047
6049 if (!ai)
6050 {
6052 return;
6053 }
6054
6056 if (!action_array)
6057 {
6058 action_array = new array<ActionBase_Basic>;
6060 }
6061 if (LogManager.IsActionLogEnable())
6062 {
6063 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6064 }
6065
6066 if (action_array.Find(action) != -1)
6067 {
6068 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6069 }
6070 else
6071 {
6072 action_array.Insert(action);
6073 }
6074 }
6075
6077 {
6079 ActionBase action = player.GetActionManager().GetAction(actionName);
6082
6083 if (action_array)
6084 {
6085 action_array.RemoveItem(action);
6086 }
6087 }
6088
6089
6090
6092 {
6093 ActionOverrideData overrideData = new ActionOverrideData();
6097
6099 if (!actionMap)
6100 {
6103 }
6104
6105 actionMap.Insert(this.
Type(), overrideData);
6106
6107 }
6108
6110
6112
6113
6115 {
6118
6121
6122 string config_to_search = "CfgVehicles";
6123 string muzzle_owner_config;
6124
6126 {
6127 if (IsInherited(Weapon))
6128 config_to_search = "CfgWeapons";
6129
6130 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6131
6132 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6133
6135
6136 if (config_OnFire_subclass_count > 0)
6137 {
6138 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6139
6140 for (int i = 0; i < config_OnFire_subclass_count; i++)
6141 {
6142 string particle_class = "";
6144 string config_OnFire_entry = config_OnFire_class + particle_class;
6145 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6146 WPOF_array.Insert(WPOF);
6147 }
6148
6149
6151 }
6152 }
6153
6155 {
6156 config_to_search = "CfgWeapons";
6157 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6158
6159 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6160
6162
6163 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6164 {
6165 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6166
6167 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6168 {
6169 string particle_class2 = "";
6171 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6172 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6173 WPOBE_array.Insert(WPOBE);
6174 }
6175
6176
6178 }
6179 }
6180 }
6181
6182
6184 {
6187
6189 {
6190 string config_to_search = "CfgVehicles";
6191
6192 if (IsInherited(Weapon))
6193 config_to_search = "CfgWeapons";
6194
6195 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6196 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6197
6198 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6199 {
6200
6202
6204 {
6206 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6208 return;
6209 }
6210
6213
6214
6215
6217 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6218
6219 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6220 {
6221 string particle_class = "";
6223 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6225
6226 if (entry_type == CT_CLASS)
6227 {
6228 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6229 WPOOH_array.Insert(WPOF);
6230 }
6231 }
6232
6233
6235 }
6236 }
6237 }
6238
6240 {
6242 }
6243
6245 {
6247 {
6249
6252
6255
6256 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6257 }
6258 }
6259
6261 {
6263 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6264
6266 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6267
6269 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6270
6272 {
6274 }
6275 }
6276
6278 {
6280 }
6281
6283 {
6286 else
6288
6290 {
6293 }
6294 else
6295 {
6298
6301 }
6302
6304 }
6305
6307 {
6309 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6310 }
6311
6313 {
6315 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6317 }
6318
6320 {
6322 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6323 }
6324
6326 {
6329
6330 OverheatingParticle OP = new OverheatingParticle();
6335
6337 }
6338
6340 {
6343
6344 return -1;
6345 }
6346
6348 {
6350 {
6353
6354 for (int i = count; i > 0; --i)
6355 {
6356 int id = i - 1;
6359
6362
6363 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6364 {
6365 if (p)
6366 {
6369 }
6370 }
6371 }
6372 }
6373 }
6374
6376 {
6378 {
6380 {
6381 int id = i - 1;
6383
6384 if (OP)
6385 {
6387
6388 if (p)
6389 {
6391 }
6392
6393 delete OP;
6394 }
6395 }
6396
6399 }
6400 }
6401
6404 {
6405 return 0.0;
6406 }
6407
6408
6410 {
6411 return 250;
6412 }
6413
6415 {
6416 return 0;
6417 }
6418
6421 {
6423 return true;
6424
6425 return false;
6426 }
6427
6430 {
6433
6435 {
6437 }
6438 else
6439 {
6440
6442 }
6443
6445 }
6446
6453 {
6454 return -1;
6455 }
6456
6457
6458
6459
6461 {
6463 {
6465 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6466
6467 if (r_index >= 0)
6468 {
6469 InventoryLocation r_il = new InventoryLocation;
6470 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6471
6472 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6475 {
6476 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6477 }
6479 {
6480 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6481 }
6482
6483 }
6484
6485 player.GetHumanInventory().ClearUserReservedLocation(this);
6486 }
6487
6490 }
6491
6492
6493
6494
6496 {
6497 return ItemBase.m_DebugActionsMask;
6498 }
6499
6501 {
6502 return ItemBase.m_DebugActionsMask & mask;
6503 }
6504
6506 {
6507 ItemBase.m_DebugActionsMask = mask;
6508 }
6509
6511 {
6512 ItemBase.m_DebugActionsMask |= mask;
6513 }
6514
6516 {
6517 ItemBase.m_DebugActionsMask &= ~mask;
6518 }
6519
6521 {
6523 {
6525 }
6526 else
6527 {
6529 }
6530 }
6531
6532
6534 {
6535 if (GetEconomyProfile())
6536 {
6537 float q_max = GetEconomyProfile().GetQuantityMax();
6538 if (q_max > 0)
6539 {
6540 float q_min = GetEconomyProfile().GetQuantityMin();
6541 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6542
6544 {
6545 ComponentEnergyManager comp = GetCompEM();
6547 {
6549 }
6550 }
6552 {
6554
6555 }
6556
6557 }
6558 }
6559 }
6560
6563 {
6564 EntityAI parent = GetHierarchyParent();
6565
6566 if (parent)
6567 {
6568 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6569 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6570 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6571 }
6572 }
6573
6576 {
6577 EntityAI parent = GetHierarchyParent();
6578
6579 if (parent)
6580 {
6581 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6582 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6583 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6584 }
6585 }
6586
6588 {
6589
6590
6591
6592
6594
6596 {
6597 if (ScriptInputUserData.CanStoreInputUserData())
6598 {
6599 ScriptInputUserData ctx = new ScriptInputUserData;
6605 ctx.
Write(use_stack_max);
6608
6610 {
6611 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6612 }
6613 }
6614 }
6615 else if (!
GetGame().IsMultiplayer())
6616 {
6618 }
6619 }
6620
6622 {
6624 }
6625
6627 {
6629 }
6630
6632 {
6634 }
6635
6637 {
6638
6639 return false;
6640 }
6641
6643 {
6644 return false;
6645 }
6646
6650 {
6651 return false;
6652 }
6653
6655 {
6656 return "";
6657 }
6658
6660
6662 {
6663 return false;
6664 }
6665
6667 {
6668 return true;
6669 }
6670
6671
6672
6674 {
6675 return true;
6676 }
6677
6679 {
6680 return true;
6681 }
6682
6684 {
6685 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6687 }
6688
6690 {
6692 }
6693
6695 {
6697 if (!is_being_placed)
6699 SetSynchDirty();
6700 }
6701
6702
6704
6706 {
6708 }
6709
6711 {
6713 }
6714
6716 {
6717 return 1;
6718 }
6719
6721 {
6722 return false;
6723 }
6724
6726 {
6728 SetSynchDirty();
6729 }
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6766 {
6767 super.OnMovedInsideCargo(container);
6768
6769 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6770 }
6771
6772 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6773 {
6774 super.EEItemLocationChanged(oldLoc,newLoc);
6775
6776 PlayerBase new_player = null;
6777 PlayerBase old_player = null;
6778
6779 if (newLoc.GetParent())
6780 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6781
6782 if (oldLoc.GetParent())
6783 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6784
6786 {
6787 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6788
6789 if (r_index >= 0)
6790 {
6791 InventoryLocation r_il = new InventoryLocation;
6792 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6793
6794 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6797 {
6798 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6799 }
6801 {
6802 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6803 }
6804
6805 }
6806 }
6807
6809 {
6810 if (new_player)
6811 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6812
6813 if (new_player == old_player)
6814 {
6815
6816 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6817 {
6819 {
6820 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6821 {
6822 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6823 }
6824 }
6825 else
6826 {
6827 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6828 }
6829 }
6830
6831 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6832 {
6833 int type = oldLoc.GetType();
6835 {
6836 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6837 }
6839 {
6840 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6841 }
6842 }
6843 if (!m_OldLocation)
6844 {
6845 m_OldLocation = new InventoryLocation;
6846 }
6847 m_OldLocation.Copy(oldLoc);
6848 }
6849 else
6850 {
6851 if (m_OldLocation)
6852 {
6853 m_OldLocation.Reset();
6854 }
6855 }
6856
6858 }
6859 else
6860 {
6861 if (new_player)
6862 {
6863 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6864 if (res_index >= 0)
6865 {
6866 InventoryLocation il = new InventoryLocation;
6867 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6869 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6872 {
6873 il.
GetParent().GetOnReleaseLock().Invoke(it);
6874 }
6876 {
6878 }
6879
6880 }
6881 }
6883 {
6884
6886 }
6887
6888 if (m_OldLocation)
6889 {
6890 m_OldLocation.Reset();
6891 }
6892 }
6893 }
6894
6895 override void EOnContact(IEntity other, Contact extra)
6896 {
6898 {
6899 int liquidType = -1;
6901 if (impactSpeed > 0.0)
6902 {
6904 #ifndef SERVER
6906 #else
6908 SetSynchDirty();
6909 #endif
6911 }
6912 }
6913
6914 #ifdef SERVER
6915 if (GetCompEM() && GetCompEM().IsPlugged())
6916 {
6917 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6918 GetCompEM().UnplugThis();
6919 }
6920 #endif
6921 }
6922
6924
6926 {
6928 }
6929
6931 {
6932
6933 }
6934
6936 {
6937 super.OnItemLocationChanged(old_owner, new_owner);
6938
6939 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6940 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6941
6942 if (!relatedPlayer && playerNew)
6943 relatedPlayer = playerNew;
6944
6945 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6946 {
6948 if (actionMgr)
6949 {
6950 ActionBase currentAction = actionMgr.GetRunningAction();
6951 if (currentAction)
6953 }
6954 }
6955
6956 Man ownerPlayerOld = null;
6957 Man ownerPlayerNew = null;
6958
6959 if (old_owner)
6960 {
6961 if (old_owner.
IsMan())
6962 {
6963 ownerPlayerOld = Man.Cast(old_owner);
6964 }
6965 else
6966 {
6967 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6968 }
6969 }
6970 else
6971 {
6973 {
6975
6976 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6977 {
6978 GetCompEM().UnplugThis();
6979 }
6980 }
6981 }
6982
6983 if (new_owner)
6984 {
6985 if (new_owner.
IsMan())
6986 {
6987 ownerPlayerNew = Man.Cast(new_owner);
6988 }
6989 else
6990 {
6991 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6992 }
6993 }
6994
6995 if (ownerPlayerOld != ownerPlayerNew)
6996 {
6997 if (ownerPlayerOld)
6998 {
6999 array<EntityAI> subItemsExit = new array<EntityAI>;
7001 for (int i = 0; i < subItemsExit.Count(); i++)
7002 {
7005 }
7006 }
7007
7008 if (ownerPlayerNew)
7009 {
7010 array<EntityAI> subItemsEnter = new array<EntityAI>;
7012 for (int j = 0; j < subItemsEnter.Count(); j++)
7013 {
7016 }
7017 }
7018 }
7019 else if (ownerPlayerNew != null)
7020 {
7021 PlayerBase nplayer;
7022 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
7023 {
7024 array<EntityAI> subItemsUpdate = new array<EntityAI>;
7026 for (int k = 0; k < subItemsUpdate.Count(); k++)
7027 {
7029 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
7030 }
7031 }
7032 }
7033
7034 if (old_owner)
7035 old_owner.OnChildItemRemoved(this);
7036 if (new_owner)
7037 new_owner.OnChildItemReceived(this);
7038 }
7039
7040
7042 {
7043 super.EEDelete(parent);
7044 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
7045 if (player)
7046 {
7048
7049 if (player.IsAlive())
7050 {
7051 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7052 if (r_index >= 0)
7053 {
7054 InventoryLocation r_il = new InventoryLocation;
7055 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7056
7057 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7060 {
7061 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7062 }
7064 {
7065 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7066 }
7067
7068 }
7069
7070 player.RemoveQuickBarEntityShortcut(this);
7071 }
7072 }
7073 }
7074
7076 {
7077 super.EEKilled(killer);
7078
7081 {
7082 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7083 {
7084 if (IsMagazine())
7085 {
7086 if (Magazine.Cast(this).GetAmmoCount() > 0)
7087 {
7089 }
7090 }
7091 else
7092 {
7094 }
7095 }
7096 }
7097 }
7098
7100 {
7101 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7102
7103 super.OnWasAttached(parent, slot_id);
7104
7107
7109 }
7110
7112 {
7113 super.OnWasDetached(parent, slot_id);
7114
7117 }
7118
7120 {
7121 int idx;
7124
7125 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7126 if (inventory_slots.Count() < 1)
7127 {
7128 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7129 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7130 }
7131 else
7132 {
7133 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7134 }
7135
7136 idx = inventory_slots.Find(slot);
7137 if (idx < 0)
7138 return "";
7139
7140 return attach_types.Get(idx);
7141 }
7142
7144 {
7145 int idx = -1;
7146 string slot;
7147
7150
7151 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7152 if (inventory_slots.Count() < 1)
7153 {
7154 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7155 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7156 }
7157 else
7158 {
7159 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7160 if (detach_types.Count() < 1)
7161 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7162 }
7163
7164 for (int i = 0; i < inventory_slots.Count(); i++)
7165 {
7166 slot = inventory_slots.Get(i);
7167 }
7168
7169 if (slot != "")
7170 {
7171 if (detach_types.Count() == 1)
7172 idx = 0;
7173 else
7174 idx = inventory_slots.Find(slot);
7175 }
7176 if (idx < 0)
7177 return "";
7178
7179 return detach_types.Get(idx);
7180 }
7181
7183 {
7184
7186
7187
7188 float min_time = 1;
7189 float max_time = 3;
7190 float delay = Math.RandomFloat(min_time, max_time);
7191
7192 explode_timer.Run(delay, this, "DoAmmoExplosion");
7193 }
7194
7196 {
7197 Magazine magazine = Magazine.Cast(this);
7198 int pop_sounds_count = 6;
7199 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7200
7201
7202 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7203 string sound_name = pop_sounds[ sound_idx ];
7205
7206
7207 magazine.ServerAddAmmoCount(-1);
7208
7209
7210 float min_temp_to_explode = 100;
7211
7212 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7213 {
7215 }
7216 }
7217
7218
7219 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7220 {
7221 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7222
7223 const int CHANCE_DAMAGE_CARGO = 4;
7224 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7225 const int CHANCE_DAMAGE_NOTHING = 2;
7226
7228 {
7229 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7230 int chances;
7231 int rnd;
7232
7233 if (GetInventory().GetCargo())
7234 {
7235 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7236 rnd = Math.RandomInt(0,chances);
7237
7238 if (rnd < CHANCE_DAMAGE_CARGO)
7239 {
7241 }
7242 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7243 {
7245 }
7246 }
7247 else
7248 {
7249 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7250 rnd = Math.RandomInt(0,chances);
7251
7252 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7253 {
7255 }
7256 }
7257 }
7258 }
7259
7261 {
7262 if (GetInventory().GetCargo())
7263 {
7264 int item_count = GetInventory().GetCargo().GetItemCount();
7265 if (item_count > 0)
7266 {
7267 int random_pick = Math.RandomInt(0, item_count);
7269 if (!item.IsExplosive())
7270 {
7271 item.AddHealth("","",damage);
7272 return true;
7273 }
7274 }
7275 }
7276 return false;
7277 }
7278
7280 {
7281 int attachment_count = GetInventory().AttachmentCount();
7282 if (attachment_count > 0)
7283 {
7284 int random_pick = Math.RandomInt(0, attachment_count);
7285 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7286 if (!attachment.IsExplosive())
7287 {
7288 attachment.AddHealth("","",damage);
7289 return true;
7290 }
7291 }
7292 return false;
7293 }
7294
7296 {
7298 }
7299
7301 {
7303 return GetInventory().CanRemoveEntity();
7304
7305 return false;
7306 }
7307
7309 {
7311 return;
7312
7314 {
7315 if (ScriptInputUserData.CanStoreInputUserData())
7316 {
7317 ScriptInputUserData ctx = new ScriptInputUserData;
7322 ctx.
Write(destination_entity);
7326 }
7327 }
7328 else if (!
GetGame().IsMultiplayer())
7329 {
7331 }
7332 }
7333
7335 {
7337 return;
7338
7339 float split_quantity_new;
7343 InventoryLocation loc = new InventoryLocation;
7344
7345 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7346 {
7348 split_quantity_new = stack_max;
7349 else
7351
7352 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7353 if (new_item)
7354 {
7355 new_item.SetResultOfSplit(true);
7356 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7358 new_item.SetQuantity(split_quantity_new);
7359 }
7360 }
7361 else if (destination_entity && slot_id == -1)
7362 {
7363 if (quantity > stack_max)
7364 split_quantity_new = stack_max;
7365 else
7366 split_quantity_new = quantity;
7367
7369 {
7372 }
7373
7374 if (new_item)
7375 {
7376 new_item.SetResultOfSplit(true);
7377 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7379 new_item.SetQuantity(split_quantity_new);
7380 }
7381 }
7382 else
7383 {
7384 if (stack_max != 0)
7385 {
7387 {
7389 }
7390
7391 if (split_quantity_new == 0)
7392 {
7393 if (!
GetGame().IsMultiplayer())
7394 player.PhysicalPredictiveDropItem(this);
7395 else
7396 player.ServerDropEntity(this);
7397 return;
7398 }
7399
7401
7402 if (new_item)
7403 {
7404 new_item.SetResultOfSplit(true);
7405 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7407 new_item.SetQuantity(stack_max);
7408 new_item.PlaceOnSurface();
7409 }
7410 }
7411 }
7412 }
7413
7415 {
7417 return;
7418
7419 float split_quantity_new;
7423 InventoryLocation loc = new InventoryLocation;
7424
7425 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7426 {
7428 split_quantity_new = stack_max;
7429 else
7431
7432 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7433 if (new_item)
7434 {
7435 new_item.SetResultOfSplit(true);
7436 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7438 new_item.SetQuantity(split_quantity_new);
7439 }
7440 }
7441 else if (destination_entity && slot_id == -1)
7442 {
7443 if (quantity > stack_max)
7444 split_quantity_new = stack_max;
7445 else
7446 split_quantity_new = quantity;
7447
7449 {
7452 }
7453
7454 if (new_item)
7455 {
7456 new_item.SetResultOfSplit(true);
7457 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7459 new_item.SetQuantity(split_quantity_new);
7460 }
7461 }
7462 else
7463 {
7464 if (stack_max != 0)
7465 {
7467 {
7469 }
7470
7472
7473 if (new_item)
7474 {
7475 new_item.SetResultOfSplit(true);
7476 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7478 new_item.SetQuantity(stack_max);
7479 new_item.PlaceOnSurface();
7480 }
7481 }
7482 }
7483 }
7484
7486 {
7488 return;
7489
7491 {
7492 if (ScriptInputUserData.CanStoreInputUserData())
7493 {
7494 ScriptInputUserData ctx = new ScriptInputUserData;
7499 dst.WriteToContext(ctx);
7501 }
7502 }
7503 else if (!
GetGame().IsMultiplayer())
7504 {
7506 }
7507 }
7508
7510 {
7512 return;
7513
7515 {
7516 if (ScriptInputUserData.CanStoreInputUserData())
7517 {
7518 ScriptInputUserData ctx = new ScriptInputUserData;
7523 ctx.
Write(destination_entity);
7529 }
7530 }
7531 else if (!
GetGame().IsMultiplayer())
7532 {
7534 }
7535 }
7536
7538 {
7540 }
7541
7543 {
7545 return this;
7546
7548 float split_quantity_new;
7550 if (dst.IsValid())
7551 {
7552 int slot_id = dst.GetSlot();
7554
7555 if (quantity > stack_max)
7556 split_quantity_new = stack_max;
7557 else
7558 split_quantity_new = quantity;
7559
7561
7562 if (new_item)
7563 {
7564 new_item.SetResultOfSplit(true);
7565 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7568 }
7569
7570 return new_item;
7571 }
7572
7573 return null;
7574 }
7575
7577 {
7579 return;
7580
7582 float split_quantity_new;
7584 if (destination_entity)
7585 {
7587 if (quantity > stackable)
7588 split_quantity_new = stackable;
7589 else
7590 split_quantity_new = quantity;
7591
7592 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7593 if (new_item)
7594 {
7595 new_item.SetResultOfSplit(true);
7596 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7598 new_item.SetQuantity(split_quantity_new);
7599 }
7600 }
7601 }
7602
7604 {
7606 return;
7607
7609 {
7610 if (ScriptInputUserData.CanStoreInputUserData())
7611 {
7612 ScriptInputUserData ctx = new ScriptInputUserData;
7617 ItemBase destination_entity =
this;
7618 ctx.
Write(destination_entity);
7622 }
7623 }
7624 else if (!
GetGame().IsMultiplayer())
7625 {
7627 }
7628 }
7629
7631 {
7633 return;
7634
7636 float split_quantity_new;
7638 if (player)
7639 {
7641 if (quantity > stackable)
7642 split_quantity_new = stackable;
7643 else
7644 split_quantity_new = quantity;
7645
7646 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7647 new_item =
ItemBase.Cast(in_hands);
7648 if (new_item)
7649 {
7650 new_item.SetResultOfSplit(true);
7651 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7653 new_item.SetQuantity(split_quantity_new);
7654 }
7655 }
7656 }
7657
7659 {
7661 return;
7662
7664 float split_quantity_new = Math.Floor(quantity * 0.5);
7665
7667
7668 if (new_item)
7669 {
7670 if (new_item.GetQuantityMax() < split_quantity_new)
7671 {
7672 split_quantity_new = new_item.GetQuantityMax();
7673 }
7674
7675 new_item.SetResultOfSplit(true);
7676 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7677
7679 {
7682 }
7683 else
7684 {
7687 }
7688 }
7689 }
7690
7692 {
7694 return;
7695
7697 float split_quantity_new = Math.Floor(quantity / 2);
7698
7699 InventoryLocation invloc = new InventoryLocation;
7701
7703 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7704
7705 if (new_item)
7706 {
7707 if (new_item.GetQuantityMax() < split_quantity_new)
7708 {
7709 split_quantity_new = new_item.GetQuantityMax();
7710 }
7712 {
7715 }
7716 else
7717 {
7720 }
7721 }
7722 }
7723
7726 {
7727 SetWeightDirty();
7729
7730 if (parent)
7731 parent.OnAttachmentQuantityChangedEx(this, delta);
7732
7734 {
7736 {
7738 }
7740 {
7741 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7743 }
7744 }
7745
7746 }
7747
7750 {
7751
7752 }
7753
7756 {
7758 }
7759
7761 {
7762 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7763
7765 {
7766 if (newLevel == GameConstants.STATE_RUINED)
7767 {
7769 EntityAI parent = GetHierarchyParent();
7770 if (parent && parent.IsFireplace())
7771 {
7772 CargoBase cargo = GetInventory().GetCargo();
7773 if (cargo)
7774 {
7776 {
7778 }
7779 }
7780 }
7781 }
7782
7784 {
7785
7787 return;
7788 }
7789
7790 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7791 {
7793 }
7794 }
7795 }
7796
7797
7799 {
7800 super.OnRightClick();
7801
7803 {
7805 {
7806 if (ScriptInputUserData.CanStoreInputUserData())
7807 {
7808 vector m4[4];
7810
7811 EntityAI root = GetHierarchyRoot();
7812
7813 InventoryLocation dst = new InventoryLocation;
7815 {
7816 if (root)
7817 {
7818 root.GetTransform(m4);
7820 }
7821 else
7822 GetInventory().GetCurrentInventoryLocation(dst);
7823 }
7824 else
7825 {
7827
7828
7829 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7830 {
7831 if (root)
7832 {
7833 root.GetTransform(m4);
7835 }
7836 else
7837 GetInventory().GetCurrentInventoryLocation(dst);
7838 }
7839 else
7840 {
7841 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7842 }
7843 }
7844
7845 ScriptInputUserData ctx = new ScriptInputUserData;
7853 }
7854 }
7855 else if (!
GetGame().IsMultiplayer())
7856 {
7858 }
7859 }
7860 }
7861
7862 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7863 {
7864
7865 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7866 return false;
7867
7868 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7869 return false;
7870
7871
7873 return false;
7874
7875
7876 Magazine mag = Magazine.Cast(this);
7877 if (mag)
7878 {
7879 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7880 return false;
7881
7882 if (stack_max_limit)
7883 {
7884 Magazine other_mag = Magazine.Cast(other_item);
7885 if (other_item)
7886 {
7887 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7888 return false;
7889 }
7890
7891 }
7892 }
7893 else
7894 {
7895
7897 return false;
7898
7900 return false;
7901 }
7902
7903 PlayerBase player = null;
7904 if (CastTo(player, GetHierarchyRootPlayer()))
7905 {
7906 if (player.GetInventory().HasAttachment(this))
7907 return false;
7908
7909 if (player.IsItemsToDelete())
7910 return false;
7911 }
7912
7913 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7914 return false;
7915
7916 int slotID;
7918 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7919 return false;
7920
7921 return true;
7922 }
7923
7925 {
7927 }
7928
7930 {
7931 return m_IsResultOfSplit;
7932 }
7933
7935 {
7936 m_IsResultOfSplit = value;
7937 }
7938
7940 {
7942 }
7943
7945 {
7946 float other_item_quantity = other_item.GetQuantity();
7947 float this_free_space;
7948
7950
7952
7953 if (other_item_quantity > this_free_space)
7954 {
7955 return this_free_space;
7956 }
7957 else
7958 {
7959 return other_item_quantity;
7960 }
7961 }
7962
7964 {
7966 }
7967
7969 {
7971 return;
7972
7973 if (!IsMagazine() && other_item)
7974 {
7976 if (quantity_used != 0)
7977 {
7978 float hp1 = GetHealth01("","");
7979 float hp2 = other_item.GetHealth01("","");
7980 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7981 hpResult = hpResult / (
GetQuantity() + quantity_used);
7982
7983 hpResult *= GetMaxHealth();
7984 Math.Round(hpResult);
7985 SetHealth("", "Health", hpResult);
7986
7988 other_item.AddQuantity(-quantity_used);
7989 }
7990 }
7992 }
7993
7995 {
7996 #ifdef SERVER
7997 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7998 GetHierarchyParent().IncreaseLifetimeUp();
7999 #endif
8000 };
8001
8003 {
8004 PlayerBase p = PlayerBase.Cast(player);
8005
8006 array<int> recipesIds = p.m_Recipes;
8007 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8008 if (moduleRecipesManager)
8009 {
8010 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
8011 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
8012 }
8013
8014 for (int i = 0;i < recipesIds.Count(); i++)
8015 {
8016 int key = recipesIds.Get(i);
8017 string recipeName = moduleRecipesManager.GetRecipeName(key);
8019 }
8020 }
8021
8022
8023 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
8024 {
8025 super.GetDebugActions(outputList);
8026
8027
8032
8033
8037
8041
8042
8045
8046
8048 {
8051 }
8052
8054
8057
8061 }
8062
8063
8064
8065
8067 {
8068 super.OnAction(action_id, player, ctx);
8069 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8070 {
8071 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8072 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8073 PlayerBase p = PlayerBase.Cast(player);
8074 if (
EActions.RECIPES_RANGE_START < 1000)
8075 {
8076 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8077 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8078 }
8079 }
8080 #ifndef SERVER
8081 else if (action_id ==
EActions.WATCH_PLAYER)
8082 {
8083 PluginDeveloper.SetDeveloperItemClientEx(player);
8084 }
8085 #endif
8087 {
8088 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8089 {
8090 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8091 OnDebugButtonPressServer(id + 1);
8092 }
8093
8094 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8095 {
8096 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8098 }
8099
8100 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8101 {
8102 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8104 }
8105
8106 else if (action_id ==
EActions.ADD_QUANTITY)
8107 {
8108 if (IsMagazine())
8109 {
8110 Magazine mag = Magazine.Cast(this);
8111 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8112 }
8113 else
8114 {
8116 }
8117
8118 if (m_EM)
8119 {
8120 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8121 }
8122
8123 }
8124
8125 else if (action_id ==
EActions.REMOVE_QUANTITY)
8126 {
8127 if (IsMagazine())
8128 {
8129 Magazine mag2 = Magazine.Cast(this);
8130 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8131 }
8132 else
8133 {
8135 }
8136 if (m_EM)
8137 {
8138 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8139 }
8140
8141 }
8142
8143 else if (action_id ==
EActions.SET_QUANTITY_0)
8144 {
8146
8147 if (m_EM)
8148 {
8149 m_EM.SetEnergy(0);
8150 }
8151 }
8152
8153 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8154 {
8156
8157 if (m_EM)
8158 {
8159 m_EM.SetEnergy(m_EM.GetEnergyMax());
8160 }
8161 }
8162
8163 else if (action_id ==
EActions.ADD_HEALTH)
8164 {
8165 AddHealth("","",GetMaxHealth("","Health")/5);
8166 }
8167 else if (action_id ==
EActions.REMOVE_HEALTH)
8168 {
8169 AddHealth("","",-GetMaxHealth("","Health")/5);
8170 }
8171 else if (action_id ==
EActions.DESTROY_HEALTH)
8172 {
8173 SetHealth01("","",0);
8174 }
8175 else if (action_id ==
EActions.WATCH_ITEM)
8176 {
8178 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8179 #ifdef DEVELOPER
8180 SetDebugDeveloper_item(this);
8181 #endif
8182 }
8183
8184 else if (action_id ==
EActions.ADD_TEMPERATURE)
8185 {
8186 AddTemperature(20);
8187
8188 }
8189
8190 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8191 {
8192 AddTemperature(-20);
8193
8194 }
8195
8196 else if (action_id ==
EActions.FLIP_FROZEN)
8197 {
8198 SetFrozen(!GetIsFrozen());
8199
8200 }
8201
8202 else if (action_id ==
EActions.ADD_WETNESS)
8203 {
8205
8206 }
8207
8208 else if (action_id ==
EActions.REMOVE_WETNESS)
8209 {
8211
8212 }
8213
8214 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8215 {
8218
8219
8220 }
8221
8222 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8223 {
8226 }
8227
8228 else if (action_id ==
EActions.MAKE_SPECIAL)
8229 {
8230 auto debugParams = DebugSpawnParams.WithPlayer(player);
8231 OnDebugSpawnEx(debugParams);
8232 }
8233
8234 else if (action_id ==
EActions.DELETE)
8235 {
8236 Delete();
8237 }
8238
8239 }
8240
8241
8242 return false;
8243 }
8244
8245
8246
8247
8251
8254
8255
8256
8258 {
8259 return false;
8260 }
8261
8262
8264 {
8265 return true;
8266 }
8267
8268
8270 {
8271 return true;
8272 }
8273
8274
8275
8277 {
8278 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8280 }
8281
8284 {
8285 return null;
8286 }
8287
8289 {
8290 return false;
8291 }
8292
8294 {
8295 return false;
8296 }
8297
8301
8302
8304 {
8305 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8306 return module_repairing.CanRepair(this, item_repair_kit);
8307 }
8308
8309
8310 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8311 {
8312 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8313 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8314 }
8315
8316
8318 {
8319
8320
8321
8322
8323
8324
8325
8326
8327 return 1;
8328 }
8329
8330
8331
8333 {
8335 }
8336
8337
8338
8340 {
8342 }
8343
8344
8353 {
8354 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8355
8356 if (player)
8357 {
8358 player.MessageStatus(text);
8359 }
8360 }
8361
8362
8371 {
8372 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8373
8374 if (player)
8375 {
8376 player.MessageAction(text);
8377 }
8378 }
8379
8380
8389 {
8390 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8391
8392 if (player)
8393 {
8394 player.MessageFriendly(text);
8395 }
8396 }
8397
8398
8407 {
8408 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8409
8410 if (player)
8411 {
8412 player.MessageImportant(text);
8413 }
8414 }
8415
8417 {
8418 return true;
8419 }
8420
8421
8422 override bool KindOf(
string tag)
8423 {
8424 bool found = false;
8425 string item_name = this.
GetType();
8428
8429 int array_size = item_tag_array.Count();
8430 for (int i = 0; i < array_size; i++)
8431 {
8432 if (item_tag_array.Get(i) == tag)
8433 {
8434 found = true;
8435 break;
8436 }
8437 }
8438 return found;
8439 }
8440
8441
8443 {
8444
8445 super.OnRPC(sender, rpc_type,ctx);
8446
8447
8448 switch (rpc_type)
8449 {
8450 #ifndef SERVER
8451 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8452 Param2<bool, string> p = new Param2<bool, string>(false, "");
8453
8455 return;
8456
8457 bool play = p.param1;
8458 string soundSet = p.param2;
8459
8460 if (play)
8461 {
8463 {
8465 {
8467 }
8468 }
8469 else
8470 {
8472 }
8473 }
8474 else
8475 {
8477 }
8478
8479 break;
8480 #endif
8481
8482 }
8483
8485 {
8487 }
8488 }
8489
8490
8491
8492
8494 {
8495 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8496 return plugin.GetID(
name);
8497 }
8498
8500 {
8501 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8502 return plugin.GetName(id);
8503 }
8504
8507 {
8508
8509
8510 int varFlags;
8511 if (!ctx.
Read(varFlags))
8512 return;
8513
8514 if (varFlags & ItemVariableFlags.FLOAT)
8515 {
8517 }
8518 }
8519
8521 {
8522
8523 super.SerializeNumericalVars(floats_out);
8524
8525
8526
8528 {
8530 }
8531
8533 {
8535 }
8536
8538 {
8540 }
8541
8543 {
8548 }
8549
8551 {
8553 }
8554 }
8555
8557 {
8558
8559 super.DeSerializeNumericalVars(floats);
8560
8561
8562 int index = 0;
8563 int mask = Math.Round(floats.Get(index));
8564
8565 index++;
8566
8568 {
8570 {
8572 }
8573 else
8574 {
8575 float quantity = floats.Get(index);
8577 }
8578 index++;
8579 }
8580
8582 {
8583 float wet = floats.Get(index);
8585 index++;
8586 }
8587
8589 {
8590 int liquidtype = Math.Round(floats.Get(index));
8592 index++;
8593 }
8594
8596 {
8598 index++;
8600 index++;
8602 index++;
8604 index++;
8605 }
8606
8608 {
8609 int cleanness = Math.Round(floats.Get(index));
8611 index++;
8612 }
8613 }
8614
8616 {
8617 super.WriteVarsToCTX(ctx);
8618
8619
8621 {
8623 }
8624
8626 {
8628 }
8629
8631 {
8633 }
8634
8636 {
8637 int r,g,b,a;
8643 }
8644
8646 {
8648 }
8649 }
8650
8652 {
8653 if (!super.ReadVarsFromCTX(ctx,version))
8654 return false;
8655
8656 int intValue;
8657 float value;
8658
8659 if (version < 140)
8660 {
8661 if (!ctx.
Read(intValue))
8662 return false;
8663
8664 m_VariablesMask = intValue;
8665 }
8666
8668 {
8669 if (!ctx.
Read(value))
8670 return false;
8671
8673 {
8675 }
8676 else
8677 {
8679 }
8680 }
8681
8682 if (version < 140)
8683 {
8685 {
8686 if (!ctx.
Read(value))
8687 return false;
8688 SetTemperatureDirect(value);
8689 }
8690 }
8691
8693 {
8694 if (!ctx.
Read(value))
8695 return false;
8697 }
8698
8700 {
8701 if (!ctx.
Read(intValue))
8702 return false;
8704 }
8705
8707 {
8708 int r,g,b,a;
8710 return false;
8712 return false;
8714 return false;
8716 return false;
8717
8719 }
8720
8722 {
8723 if (!ctx.
Read(intValue))
8724 return false;
8726 }
8727
8728 if (version >= 138 && version < 140)
8729 {
8731 {
8732 if (!ctx.
Read(intValue))
8733 return false;
8734 SetFrozen(intValue);
8735 }
8736 }
8737
8738 return true;
8739 }
8740
8741
8743 {
8746 {
8748 }
8749
8750 if (!super.OnStoreLoad(ctx, version))
8751 {
8753 return false;
8754 }
8755
8756 if (version >= 114)
8757 {
8758 bool hasQuickBarIndexSaved;
8759
8760 if (!ctx.
Read(hasQuickBarIndexSaved))
8761 {
8763 return false;
8764 }
8765
8766 if (hasQuickBarIndexSaved)
8767 {
8768 int itmQBIndex;
8769
8770
8771 if (!ctx.
Read(itmQBIndex))
8772 {
8774 return false;
8775 }
8776
8777 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8778 if (itmQBIndex != -1 && parentPlayer)
8779 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8780 }
8781 }
8782 else
8783 {
8784
8785 PlayerBase player;
8786 int itemQBIndex;
8787 if (version ==
int.
MAX)
8788 {
8789 if (!ctx.
Read(itemQBIndex))
8790 {
8792 return false;
8793 }
8794 }
8795 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8796 {
8797
8798 if (!ctx.
Read(itemQBIndex))
8799 {
8801 return false;
8802 }
8803 if (itemQBIndex != -1 && player)
8804 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8805 }
8806 }
8807
8808 if (version < 140)
8809 {
8810
8811 if (!LoadVariables(ctx, version))
8812 {
8814 return false;
8815 }
8816 }
8817
8818
8820 {
8822 return false;
8823 }
8824 if (version >= 132)
8825 {
8827 if (raib)
8828 {
8830 {
8832 return false;
8833 }
8834 }
8835 }
8836
8838 return true;
8839 }
8840
8841
8842
8844 {
8845 super.OnStoreSave(ctx);
8846
8847 PlayerBase player;
8848 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8849 {
8851
8852 int itemQBIndex = -1;
8853 itemQBIndex = player.FindQuickBarEntityIndex(this);
8854 ctx.
Write(itemQBIndex);
8855 }
8856 else
8857 {
8859 }
8860
8862
8864 if (raib)
8865 {
8867 }
8868 }
8869
8870
8872 {
8873 super.AfterStoreLoad();
8874
8876 {
8878 }
8879
8881 {
8884 }
8885 }
8886
8888 {
8889 super.EEOnAfterLoad();
8890
8892 {
8894 }
8895
8898 }
8899
8901 {
8902 return false;
8903 }
8904
8905
8906
8908 {
8910 {
8911 #ifdef PLATFORM_CONSOLE
8912
8914 {
8916 if (menu)
8917 {
8919 }
8920 }
8921 #endif
8922 }
8923
8925 {
8928 }
8929
8931 {
8932 SetWeightDirty();
8934 }
8936 {
8939 }
8940
8942 {
8945 }
8947 {
8950 }
8951
8952 super.OnVariablesSynchronized();
8953 }
8954
8955
8956
8958 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8959 {
8960 if (!IsServerCheck(allow_client))
8961 return false;
8962
8964 return false;
8965
8968
8969 if (value <= (min + 0.001))
8970 value = min;
8971
8972 if (value == min)
8973 {
8974 if (destroy_config)
8975 {
8976 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8977 if (dstr)
8978 {
8980 this.Delete();
8981 return true;
8982 }
8983 }
8984 else if (destroy_forced)
8985 {
8987 this.Delete();
8988 return true;
8989 }
8990
8992 }
8993
8996
8998 {
9000
9001 if (delta)
9003 }
9004
9006
9007 return false;
9008 }
9009
9010
9012 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
9013 {
9015 }
9016
9018 {
9021 }
9022
9024 {
9027 }
9028
9031 {
9032 float value_clamped = Math.Clamp(value, 0, 1);
9034 SetQuantity(result, destroy_config, destroy_forced);
9035 }
9036
9037
9040 {
9042 }
9043
9045 {
9047 }
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9059 {
9060 int slot = -1;
9061 if (GetInventory())
9062 {
9063 InventoryLocation il = new InventoryLocation;
9064 GetInventory().GetCurrentInventoryLocation(il);
9066 }
9067
9069 }
9070
9072 {
9073 float quantity_max = 0;
9074
9076 {
9077 if (attSlotID != -1)
9078 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9079
9080 if (quantity_max <= 0)
9082 }
9083
9084 if (quantity_max <= 0)
9086
9087 return quantity_max;
9088 }
9089
9091 {
9093 }
9094
9096 {
9098 }
9099
9100
9102 {
9104 }
9105
9107 {
9109 }
9110
9112 {
9114 }
9115
9116
9118 {
9119
9120 float weightEx = GetWeightEx();
9121 float special = GetInventoryAndCargoWeight();
9122 return weightEx - special;
9123 }
9124
9125
9127 {
9129 }
9130
9132 {
9134 {
9135 #ifdef DEVELOPER
9136 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9137 {
9138 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9140 }
9141 #endif
9142
9144 }
9145 else if (HasEnergyManager())
9146 {
9147 #ifdef DEVELOPER
9148 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9149 {
9150 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9151 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9152 }
9153 #endif
9154 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9155 }
9156 else
9157 {
9158 #ifdef DEVELOPER
9159 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9160 {
9161 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9162 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9163 }
9164 #endif
9165 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9166 }
9167 }
9168
9171 {
9172 int item_count = 0;
9174
9175 if (GetInventory().GetCargo() != NULL)
9176 {
9177 item_count = GetInventory().GetCargo().GetItemCount();
9178 }
9179
9180 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9181 {
9182 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9183 if (item)
9184 item_count += item.GetNumberOfItems();
9185 }
9186 return item_count;
9187 }
9188
9191 {
9192 float weight = 0;
9193 float wetness = 1;
9194 if (include_wetness)
9197 {
9198 weight = wetness * m_ConfigWeight;
9199 }
9201 {
9202 weight = 1;
9203 }
9204 return weight;
9205 }
9206
9207
9208
9210 {
9211 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9212 {
9213 GameInventory inv = GetInventory();
9214 array<EntityAI> items = new array<EntityAI>;
9216 for (int i = 0; i < items.Count(); i++)
9217 {
9219 if (item)
9220 {
9222 }
9223 }
9224 }
9225 }
9226
9227
9228
9229
9231 {
9232 float energy = 0;
9233 if (HasEnergyManager())
9234 {
9235 energy = GetCompEM().GetEnergy();
9236 }
9237 return energy;
9238 }
9239
9240
9242 {
9243 super.OnEnergyConsumed();
9244
9246 }
9247
9249 {
9250 super.OnEnergyAdded();
9251
9253 }
9254
9255
9257 {
9258 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9259 {
9261 {
9262 float energy_0to1 = GetCompEM().GetEnergy0To1();
9264 }
9265 }
9266 }
9267
9268
9270 {
9271 return ConfigGetFloat("heatIsolation");
9272 }
9273
9275 {
9277 }
9278
9280 {
9281 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9282 if (
GetGame().ConfigIsExisting(paramPath))
9284
9285 return 0.0;
9286 }
9287
9289 {
9290 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9291 if (
GetGame().ConfigIsExisting(paramPath))
9293
9294 return 0.0;
9295 }
9296
9297 override void SetWet(
float value,
bool allow_client =
false)
9298 {
9299 if (!IsServerCheck(allow_client))
9300 return;
9301
9304
9306
9307 m_VarWet = Math.Clamp(value, min, max);
9308
9310 {
9313 }
9314 }
9315
9316 override void AddWet(
float value)
9317 {
9319 }
9320
9322 {
9324 }
9325
9327 {
9329 }
9330
9332 {
9334 }
9335
9337 {
9339 }
9340
9342 {
9344 }
9345
9347 {
9350 if (newLevel != oldLevel)
9351 {
9353 }
9354 }
9355
9357 {
9358 SetWeightDirty();
9359 }
9360
9362 {
9363 return GetWetLevelInternal(
m_VarWet);
9364 }
9365
9366
9367
9369 {
9371 }
9372
9374 {
9376 }
9377
9379 {
9381 }
9382
9384 {
9386 }
9387
9388
9389
9391 {
9392 if (ConfigIsExisting("itemModelLength"))
9393 {
9394 return ConfigGetFloat("itemModelLength");
9395 }
9396 return 0;
9397 }
9398
9400 {
9401 if (ConfigIsExisting("itemAttachOffset"))
9402 {
9403 return ConfigGetFloat("itemAttachOffset");
9404 }
9405 return 0;
9406 }
9407
9408 override void SetCleanness(
int value,
bool allow_client =
false)
9409 {
9410 if (!IsServerCheck(allow_client))
9411 return;
9412
9414
9416
9419 }
9420
9422 {
9424 }
9425
9427 {
9428 return true;
9429 }
9430
9431
9432
9433
9435 {
9437 }
9438
9440 {
9442 }
9443
9444
9445
9446
9447 override void SetColor(
int r,
int g,
int b,
int a)
9448 {
9454 }
9456 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9457 {
9462 }
9463
9465 {
9467 }
9468
9471 {
9472 int r,g,b,a;
9474 r = r/255;
9475 g = g/255;
9476 b = b/255;
9477 a = a/255;
9478 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9479 }
9480
9481
9482
9483 override void SetLiquidType(
int value,
bool allow_client =
false)
9484 {
9485 if (!IsServerCheck(allow_client))
9486 return;
9487
9492 }
9493
9495 {
9496 return ConfigGetInt("varLiquidTypeInit");
9497 }
9498
9500 {
9502 }
9503
9505 {
9507 SetFrozen(false);
9508 }
9509
9512 {
9513 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9514 }
9515
9516
9519 {
9520 PlayerBase nplayer;
9521 if (PlayerBase.CastTo(nplayer, player))
9522 {
9524
9525 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9526 }
9527 }
9528
9529
9532 {
9533 PlayerBase nplayer;
9534 if (PlayerBase.CastTo(nplayer,player))
9535 {
9536
9537 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9538
9539 }
9540
9541
9542 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9543
9544
9545 if (HasEnergyManager())
9546 {
9547 GetCompEM().UpdatePlugState();
9548 }
9549 }
9550
9551
9553 {
9554 super.OnPlacementStarted(player);
9555
9557 }
9558
9559 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9560 {
9562 {
9563 m_AdminLog.OnPlacementComplete(player,
this);
9564 }
9565
9566 super.OnPlacementComplete(player, position, orientation);
9567 }
9568
9569
9570
9571
9572
9574 {
9576 {
9577 return true;
9578 }
9579 else
9580 {
9581 return false;
9582 }
9583 }
9584
9585
9587 {
9589 {
9591 }
9592 }
9593
9594
9596 {
9598 }
9599
9601 {
9603 }
9604
9605 override void InsertAgent(
int agent,
float count = 1)
9606 {
9607 if (count < 1)
9608 return;
9609
9611 }
9612
9615 {
9617 }
9618
9619
9621 {
9623 }
9624
9625
9626
9627
9628
9629
9630
9631
9632
9633
9634
9635
9636
9637
9638
9639
9640
9641
9642
9643
9644
9645
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9667 {
9669 return false;
9670 return true;
9671 }
9672
9674 {
9675
9677 }
9678
9679
9682 {
9683 super.CheckForRoofLimited(timeTresholdMS);
9684
9686 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9687 {
9688 m_PreviousRoofTestTime = time;
9689 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9690 }
9691 }
9692
9693
9695 {
9697 {
9698 return 0;
9699 }
9700
9701 if (GetInventory().GetAttachmentSlotsCount() != 0)
9702 {
9703 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9704 if (filter)
9705 return filter.GetProtectionLevel(type, false, system);
9706 else
9707 return 0;
9708 }
9709
9710 string subclassPath, entryName;
9711
9712 switch (type)
9713 {
9715 entryName = "biological";
9716 break;
9718 entryName = "chemical";
9719 break;
9720 default:
9721 entryName = "biological";
9722 break;
9723 }
9724
9725 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9726
9728 }
9729
9730
9731
9734 {
9735 if (!IsMagazine())
9737
9739 }
9740
9741
9742
9743
9744
9749 {
9750 return true;
9751 }
9752
9754 {
9756 }
9757
9758
9759
9760
9761
9763 {
9764 if (parent)
9765 {
9766 if (parent.IsInherited(DayZInfected))
9767 return true;
9768
9769 if (!parent.IsRuined())
9770 return true;
9771 }
9772
9773 return true;
9774 }
9775
9777 {
9778 if (!super.CanPutAsAttachment(parent))
9779 {
9780 return false;
9781 }
9782
9783 if (!IsRuined() && !parent.IsRuined())
9784 {
9785 return true;
9786 }
9787
9788 return false;
9789 }
9790
9792 {
9793
9794
9795
9796
9797 return super.CanReceiveItemIntoCargo(item);
9798 }
9799
9801 {
9802
9803
9804
9805
9806 GameInventory attachmentInv = attachment.GetInventory();
9808 {
9809 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9810 return false;
9811 }
9812
9813 InventoryLocation loc = new InventoryLocation();
9814 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9815 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9816 return false;
9817
9818 return super.CanReceiveAttachment(attachment, slotId);
9819 }
9820
9822 {
9823 if (!super.CanReleaseAttachment(attachment))
9824 return false;
9825
9826 return GetInventory().AreChildrenAccessible();
9827 }
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9850 {
9851 int id = muzzle_owner.GetMuzzleID();
9852 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9853
9854 if (WPOF_array)
9855 {
9856 for (int i = 0; i < WPOF_array.Count(); i++)
9857 {
9858 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9859
9860 if (WPOF)
9861 {
9862 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9863 }
9864 }
9865 }
9866 }
9867
9868
9870 {
9871 int id = muzzle_owner.GetMuzzleID();
9873
9874 if (WPOBE_array)
9875 {
9876 for (int i = 0; i < WPOBE_array.Count(); i++)
9877 {
9878 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9879
9880 if (WPOBE)
9881 {
9882 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9883 }
9884 }
9885 }
9886 }
9887
9888
9890 {
9891 int id = muzzle_owner.GetMuzzleID();
9892 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9893
9894 if (WPOOH_array)
9895 {
9896 for (int i = 0; i < WPOOH_array.Count(); i++)
9897 {
9898 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9899
9900 if (WPOOH)
9901 {
9902 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9903 }
9904 }
9905 }
9906 }
9907
9908
9910 {
9911 int id = muzzle_owner.GetMuzzleID();
9912 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9913
9914 if (WPOOH_array)
9915 {
9916 for (int i = 0; i < WPOOH_array.Count(); i++)
9917 {
9918 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9919
9920 if (WPOOH)
9921 {
9922 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9923 }
9924 }
9925 }
9926 }
9927
9928
9930 {
9931 int id = muzzle_owner.GetMuzzleID();
9932 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9933
9934 if (WPOOH_array)
9935 {
9936 for (int i = 0; i < WPOOH_array.Count(); i++)
9937 {
9938 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9939
9940 if (WPOOH)
9941 {
9942 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9943 }
9944 }
9945 }
9946 }
9947
9948
9949
9951 {
9953 {
9954 return true;
9955 }
9956
9957 return false;
9958 }
9959
9961 {
9963 {
9964 return true;
9965 }
9966
9967 return false;
9968 }
9969
9971 {
9973 {
9974 return true;
9975 }
9976
9977 return false;
9978 }
9979
9981 {
9982 return false;
9983 }
9984
9987 {
9988 return UATimeSpent.DEFAULT_DEPLOY;
9989 }
9990
9991
9992
9993
9995 {
9997 SetSynchDirty();
9998 }
9999
10001 {
10003 }
10004
10005
10007 {
10008 return false;
10009 }
10010
10013 {
10014 string att_type = "None";
10015
10016 if (ConfigIsExisting("soundAttType"))
10017 {
10018 att_type = ConfigGetString("soundAttType");
10019 }
10020
10022 }
10023
10025 {
10027 }
10028
10029
10030
10031
10032
10036
10038 {
10041
10043 }
10044
10045
10047 {
10049 return;
10050
10052
10055
10058
10059 SoundParameters params = new SoundParameters();
10063 }
10064
10065
10067 {
10069 return;
10070
10072 SetSynchDirty();
10073
10076 }
10077
10078
10080 {
10082 return;
10083
10085 SetSynchDirty();
10086
10089 }
10090
10092 {
10094 }
10095
10097 {
10099 }
10100
10103 {
10104 if (!
GetGame().IsDedicatedServer())
10105 {
10106 if (ConfigIsExisting("attachSoundSet"))
10107 {
10108 string cfg_path = "";
10109 string soundset = "";
10110 string type_name =
GetType();
10111
10114 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10115 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10116
10117 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10118 {
10119 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10120 {
10121 if (cfg_slot_array[i] == slot_type)
10122 {
10123 soundset = cfg_soundset_array[i];
10124 break;
10125 }
10126 }
10127 }
10128
10129 if (soundset != "")
10130 {
10131 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10133 }
10134 }
10135 }
10136 }
10137
10139 {
10140
10141 }
10142
10143 void OnApply(PlayerBase player);
10144
10146 {
10147 return 1.0;
10148 };
10149
10151 {
10153 }
10154
10156 {
10158 }
10159
10161
10163 {
10164 SetDynamicPhysicsLifeTime(0.01);
10166 }
10167
10169 {
10170 array<string> zone_names = new array<string>;
10171 GetDamageZones(zone_names);
10172 for (int i = 0; i < zone_names.Count(); i++)
10173 {
10174 SetHealthMax(zone_names.Get(i),"Health");
10175 }
10176 SetHealthMax("","Health");
10177 }
10178
10181 {
10182 float global_health = GetHealth01("","Health");
10183 array<string> zones = new array<string>;
10184 GetDamageZones(zones);
10185
10186 for (int i = 0; i < zones.Count(); i++)
10187 {
10188 SetHealth01(zones.Get(i),"Health",global_health);
10189 }
10190 }
10191
10194 {
10195 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10196 }
10197
10199 {
10200 if (!hasRootAsPlayer)
10201 {
10202 if (refParentIB)
10203 {
10204
10205 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10206 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10207
10208 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10209 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10210
10213 }
10214 else
10215 {
10216
10219 }
10220 }
10221 }
10222
10224 {
10226 {
10227 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10228 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10229 {
10230 float heatPermCoef = 1.0;
10232 while (ent)
10233 {
10234 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10235 ent = ent.GetHierarchyParent();
10236 }
10237
10238 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10239 }
10240 }
10241 }
10242
10244 {
10245
10246 EntityAI parent = GetHierarchyParent();
10247 if (!parent)
10248 {
10249 hasParent = false;
10250 hasRootAsPlayer = false;
10251 }
10252 else
10253 {
10254 hasParent = true;
10255 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10256 refParentIB =
ItemBase.Cast(parent);
10257 }
10258 }
10259
10260 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10261 {
10262
10263 }
10264
10266 {
10267
10268 return false;
10269 }
10270
10272 {
10273
10274
10275 return false;
10276 }
10277
10279 {
10280
10281 return false;
10282 }
10283
10286 {
10287 return !GetIsFrozen() &&
IsOpen();
10288 }
10289
10291 {
10292 bool hasParent = false, hasRootAsPlayer = false;
10294
10295 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10296 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10297
10298 if (wwtu || foodDecay)
10299 {
10303
10304 if (processWetness || processTemperature || processDecay)
10305 {
10307
10308 if (processWetness)
10309 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10310
10311 if (processTemperature)
10313
10314 if (processDecay)
10315 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10316 }
10317 }
10318 }
10319
10322 {
10324 }
10325
10327 {
10330
10331 return super.GetTemperatureFreezeThreshold();
10332 }
10333
10335 {
10338
10339 return super.GetTemperatureThawThreshold();
10340 }
10341
10343 {
10346
10347 return super.GetItemOverheatThreshold();
10348 }
10349
10351 {
10353 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10354
10355 return super.GetTemperatureFreezeTime();
10356 }
10357
10359 {
10361 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10362
10363 return super.GetTemperatureThawTime();
10364 }
10365
10370
10372 {
10373 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10374 }
10375
10377 {
10378 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10379 }
10380
10383 {
10385 }
10386
10388 {
10390 }
10391
10393 {
10395 }
10396
10399 {
10400 return null;
10401 }
10402
10405 {
10406 return false;
10407 }
10408
10410 {
10412 {
10415 if (!trg)
10416 {
10418 explosive = this;
10419 }
10420
10421 explosive.PairRemote(trg);
10423
10424 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10425 trg.SetPersistentPairID(persistentID);
10426 explosive.SetPersistentPairID(persistentID);
10427
10428 return true;
10429 }
10430 return false;
10431 }
10432
10435 {
10436 float ret = 1.0;
10439 ret *= GetHealth01();
10440
10441 return ret;
10442 }
10443
10444 #ifdef DEVELOPER
10445 override void SetDebugItem()
10446 {
10447 super.SetDebugItem();
10448 _itemBase = this;
10449 }
10450
10452 {
10453 string text = super.GetDebugText();
10454
10456 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10457
10458 return text;
10459 }
10460 #endif
10461
10463 {
10464 return true;
10465 }
10466
10468
10470
10472 {
10475 }
10476
10477
10485
10501}
10502
10504{
10506 if (entity)
10507 {
10508 bool is_item = entity.IsInherited(
ItemBase);
10509 if (is_item && full_quantity)
10510 {
10513 }
10514 }
10515 else
10516 {
10518 return NULL;
10519 }
10520 return entity;
10521}
10522
10524{
10525 if (item)
10526 {
10527 if (health > 0)
10528 item.SetHealth("", "", health);
10529
10530 if (item.CanHaveTemperature())
10531 {
10533 if (item.CanFreeze())
10534 item.SetFrozen(false);
10535 }
10536
10537 if (item.HasEnergyManager())
10538 {
10539 if (quantity >= 0)
10540 {
10541 item.GetCompEM().SetEnergy0To1(quantity);
10542 }
10543 else
10544 {
10546 }
10547 }
10548 else if (item.IsMagazine())
10549 {
10550 Magazine mag = Magazine.Cast(item);
10551 if (quantity >= 0)
10552 {
10553 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10554 }
10555 else
10556 {
10558 }
10559
10560 }
10561 else
10562 {
10563 if (quantity >= 0)
10564 {
10565 item.SetQuantityNormalized(quantity, false);
10566 }
10567 else
10568 {
10570 }
10571
10572 }
10573 }
10574}
10575
10576#ifdef DEVELOPER
10578#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.