5772{
5774 {
5775 return true;
5776 }
5777};
5778
5779
5780
5782{
5786
5788
5791
5792
5793
5794
5795
5804
5810
5815
5820
5841 protected bool m_IsResultOfSplit
5842
5844
5849
5850
5851
5853
5857
5858
5859
5861
5864
5865
5866
5872
5873
5881
5884
5885
5887
5888
5890
5891
5896
5897
5902
5903
5905
5906
5908 {
5913
5914 if (!
GetGame().IsDedicatedServer())
5915 {
5917 {
5919
5921 {
5923 }
5924 }
5925
5928 }
5929
5930 m_OldLocation = null;
5931
5933 {
5935 }
5936
5937 if (ConfigIsExisting("headSelectionsToHide"))
5938 {
5941 }
5942
5944 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5945 {
5947 }
5948
5950
5951 m_IsResultOfSplit = false;
5952
5954 }
5955
5957 {
5958 super.InitItemVariables();
5959
5965 m_Count = ConfigGetInt(
"count");
5966
5969
5974
5977
5982
5994
5998
5999
6002 if (ConfigIsExisting("canBeSplit"))
6003 {
6006 }
6007
6009 if (ConfigIsExisting("itemBehaviour"))
6011
6012
6015 RegisterNetSyncVariableInt("m_VarLiquidType");
6016 RegisterNetSyncVariableInt("m_Cleanness",0,1);
6017
6018 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
6019 RegisterNetSyncVariableFloat("m_ImpactSpeed");
6020 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
6021
6022 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
6023 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
6024 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
6025 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
6026
6027 RegisterNetSyncVariableBool("m_IsBeingPlaced");
6028 RegisterNetSyncVariableBool("m_IsTakeable");
6029 RegisterNetSyncVariableBool("m_IsHologram");
6030
6033 {
6036 }
6037
6039
6041 if (ConfigIsExisting("temperaturePerQuantityWeight"))
6043
6044 }
6045
6047 {
6049 }
6050
6052 {
6055 {
6060 }
6061 }
6062
6063 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
6064 {
6066 {
6069 }
6070
6072 }
6073
6075 {
6081 }
6082
6084
6086 {
6088
6089 if (!action)
6090 {
6091 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
6092 return;
6093 }
6094
6096 if (!ai)
6097 {
6099 return;
6100 }
6101
6103 if (!action_array)
6104 {
6105 action_array = new array<ActionBase_Basic>;
6107 }
6108 if (LogManager.IsActionLogEnable())
6109 {
6110 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6111 }
6112
6113 if (action_array.Find(action) != -1)
6114 {
6115 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6116 }
6117 else
6118 {
6119 action_array.Insert(action);
6120 }
6121 }
6122
6124 {
6126 ActionBase action = player.GetActionManager().GetAction(actionName);
6129
6130 if (action_array)
6131 {
6132 action_array.RemoveItem(action);
6133 }
6134 }
6135
6136
6137
6139 {
6140 ActionOverrideData overrideData = new ActionOverrideData();
6144
6146 if (!actionMap)
6147 {
6150 }
6151
6152 actionMap.Insert(this.
Type(), overrideData);
6153
6154 }
6155
6157
6159
6160
6162 {
6165
6168
6169 string config_to_search = "CfgVehicles";
6170 string muzzle_owner_config;
6171
6173 {
6174 if (IsInherited(Weapon))
6175 config_to_search = "CfgWeapons";
6176
6177 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6178
6179 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6180
6182
6183 if (config_OnFire_subclass_count > 0)
6184 {
6185 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6186
6187 for (int i = 0; i < config_OnFire_subclass_count; i++)
6188 {
6189 string particle_class = "";
6191 string config_OnFire_entry = config_OnFire_class + particle_class;
6192 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6193 WPOF_array.Insert(WPOF);
6194 }
6195
6196
6198 }
6199 }
6200
6202 {
6203 config_to_search = "CfgWeapons";
6204 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6205
6206 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6207
6209
6210 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6211 {
6212 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6213
6214 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6215 {
6216 string particle_class2 = "";
6218 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6219 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6220 WPOBE_array.Insert(WPOBE);
6221 }
6222
6223
6225 }
6226 }
6227 }
6228
6229
6231 {
6234
6236 {
6237 string config_to_search = "CfgVehicles";
6238
6239 if (IsInherited(Weapon))
6240 config_to_search = "CfgWeapons";
6241
6242 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6243 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6244
6245 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6246 {
6247
6249
6251 {
6253 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6255 return;
6256 }
6257
6260
6261
6262
6264 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6265
6266 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6267 {
6268 string particle_class = "";
6270 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6272
6273 if (entry_type == CT_CLASS)
6274 {
6275 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6276 WPOOH_array.Insert(WPOF);
6277 }
6278 }
6279
6280
6282 }
6283 }
6284 }
6285
6287 {
6289 }
6290
6292 {
6294 {
6296
6299
6302
6303 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6304 }
6305 }
6306
6308 {
6310 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6311
6313 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6314
6316 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6317
6319 {
6321 }
6322 }
6323
6325 {
6327 }
6328
6330 {
6333 else
6335
6337 {
6340 }
6341 else
6342 {
6345
6348 }
6349
6351 }
6352
6354 {
6356 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6357 }
6358
6360 {
6362 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6364 }
6365
6367 {
6369 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6370 }
6371
6373 {
6376
6377 OverheatingParticle OP = new OverheatingParticle();
6382
6384 }
6385
6387 {
6390
6391 return -1;
6392 }
6393
6395 {
6397 {
6400
6401 for (int i = count; i > 0; --i)
6402 {
6403 int id = i - 1;
6406
6409
6410 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6411 {
6412 if (p)
6413 {
6416 }
6417 }
6418 }
6419 }
6420 }
6421
6423 {
6425 {
6427 {
6428 int id = i - 1;
6430
6431 if (OP)
6432 {
6434
6435 if (p)
6436 {
6438 }
6439
6440 delete OP;
6441 }
6442 }
6443
6446 }
6447 }
6448
6451 {
6452 return 0.0;
6453 }
6454
6455
6457 {
6458 return 250;
6459 }
6460
6462 {
6463 return 0;
6464 }
6465
6468 {
6470 return true;
6471
6472 return false;
6473 }
6474
6477 {
6480
6482 {
6484 }
6485 else
6486 {
6487
6489 }
6490
6492 }
6493
6500 {
6501 return -1;
6502 }
6503
6504
6505
6506
6508 {
6510 {
6512 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6513
6514 if (r_index >= 0)
6515 {
6516 InventoryLocation r_il = new InventoryLocation;
6517 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6518
6519 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6522 {
6523 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6524 }
6526 {
6527 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6528 }
6529
6530 }
6531
6532 player.GetHumanInventory().ClearUserReservedLocation(this);
6533 }
6534
6537 }
6538
6539
6540
6541
6543 {
6544 return ItemBase.m_DebugActionsMask;
6545 }
6546
6548 {
6549 return ItemBase.m_DebugActionsMask & mask;
6550 }
6551
6553 {
6554 ItemBase.m_DebugActionsMask = mask;
6555 }
6556
6558 {
6559 ItemBase.m_DebugActionsMask |= mask;
6560 }
6561
6563 {
6564 ItemBase.m_DebugActionsMask &= ~mask;
6565 }
6566
6568 {
6570 {
6572 }
6573 else
6574 {
6576 }
6577 }
6578
6579
6581 {
6582 if (GetEconomyProfile())
6583 {
6584 float q_max = GetEconomyProfile().GetQuantityMax();
6585 if (q_max > 0)
6586 {
6587 float q_min = GetEconomyProfile().GetQuantityMin();
6588 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6589
6591 {
6592 ComponentEnergyManager comp = GetCompEM();
6594 {
6596 }
6597 }
6599 {
6601
6602 }
6603
6604 }
6605 }
6606 }
6607
6610 {
6611 EntityAI parent = GetHierarchyParent();
6612
6613 if (parent)
6614 {
6615 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6616 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6617 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6618 }
6619 }
6620
6623 {
6624 EntityAI parent = GetHierarchyParent();
6625
6626 if (parent)
6627 {
6628 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6629 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6630 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6631 }
6632 }
6633
6635 {
6636
6637
6638
6639
6641
6643 {
6644 if (ScriptInputUserData.CanStoreInputUserData())
6645 {
6646 ScriptInputUserData ctx = new ScriptInputUserData;
6652 ctx.
Write(use_stack_max);
6655
6657 {
6658 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6659 }
6660 }
6661 }
6662 else if (!
GetGame().IsMultiplayer())
6663 {
6665 }
6666 }
6667
6669 {
6671 }
6672
6674 {
6676 }
6677
6679 {
6681 }
6682
6684 {
6685
6686 return false;
6687 }
6688
6690 {
6691 return false;
6692 }
6693
6697 {
6698 return false;
6699 }
6700
6702 {
6703 return "";
6704 }
6705
6707
6709 {
6710 return false;
6711 }
6712
6714 {
6715 return true;
6716 }
6717
6718
6719
6721 {
6722 return true;
6723 }
6724
6726 {
6727 return true;
6728 }
6729
6731 {
6732 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6734 }
6735
6737 {
6739 }
6740
6742 {
6744 if (!is_being_placed)
6746 SetSynchDirty();
6747 }
6748
6749
6751
6753 {
6755 }
6756
6758 {
6760 }
6761
6763 {
6764 return 1;
6765 }
6766
6768 {
6769 return false;
6770 }
6771
6773 {
6775 SetSynchDirty();
6776 }
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6813 {
6814 super.OnMovedInsideCargo(container);
6815
6816 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6817 }
6818
6819 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6820 {
6821 super.EEItemLocationChanged(oldLoc,newLoc);
6822
6823 PlayerBase new_player = null;
6824 PlayerBase old_player = null;
6825
6826 if (newLoc.GetParent())
6827 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6828
6829 if (oldLoc.GetParent())
6830 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6831
6833 {
6834 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6835
6836 if (r_index >= 0)
6837 {
6838 InventoryLocation r_il = new InventoryLocation;
6839 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6840
6841 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6844 {
6845 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6846 }
6848 {
6849 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6850 }
6851
6852 }
6853 }
6854
6856 {
6857 if (new_player)
6858 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6859
6860 if (new_player == old_player)
6861 {
6862
6863 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6864 {
6866 {
6867 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6868 {
6869 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6870 }
6871 }
6872 else
6873 {
6874 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6875 }
6876 }
6877
6878 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6879 {
6880 int type = oldLoc.GetType();
6882 {
6883 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6884 }
6886 {
6887 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6888 }
6889 }
6890 if (!m_OldLocation)
6891 {
6892 m_OldLocation = new InventoryLocation;
6893 }
6894 m_OldLocation.Copy(oldLoc);
6895 }
6896 else
6897 {
6898 if (m_OldLocation)
6899 {
6900 m_OldLocation.Reset();
6901 }
6902 }
6903
6905 }
6906 else
6907 {
6908 if (new_player)
6909 {
6910 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6911 if (res_index >= 0)
6912 {
6913 InventoryLocation il = new InventoryLocation;
6914 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6916 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6919 {
6920 il.
GetParent().GetOnReleaseLock().Invoke(it);
6921 }
6923 {
6925 }
6926
6927 }
6928 }
6930 {
6931
6933 }
6934
6935 if (m_OldLocation)
6936 {
6937 m_OldLocation.Reset();
6938 }
6939 }
6940 }
6941
6942 override void EOnContact(IEntity other, Contact extra)
6943 {
6945 {
6946 int liquidType = -1;
6948 if (impactSpeed > 0.0)
6949 {
6951 #ifndef SERVER
6953 #else
6955 SetSynchDirty();
6956 #endif
6958 }
6959 }
6960
6961 #ifdef SERVER
6962 if (GetCompEM() && GetCompEM().IsPlugged())
6963 {
6964 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6965 GetCompEM().UnplugThis();
6966 }
6967 #endif
6968 }
6969
6971
6973 {
6975 }
6976
6978 {
6979
6980 }
6981
6983 {
6984 super.OnItemLocationChanged(old_owner, new_owner);
6985
6986 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6987 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6988
6989 if (!relatedPlayer && playerNew)
6990 relatedPlayer = playerNew;
6991
6992 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6993 {
6995 if (actionMgr)
6996 {
6997 ActionBase currentAction = actionMgr.GetRunningAction();
6998 if (currentAction)
7000 }
7001 }
7002
7003 Man ownerPlayerOld = null;
7004 Man ownerPlayerNew = null;
7005
7006 if (old_owner)
7007 {
7008 if (old_owner.
IsMan())
7009 {
7010 ownerPlayerOld = Man.Cast(old_owner);
7011 }
7012 else
7013 {
7014 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
7015 }
7016 }
7017 else
7018 {
7020 {
7022
7023 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
7024 {
7025 GetCompEM().UnplugThis();
7026 }
7027 }
7028 }
7029
7030 if (new_owner)
7031 {
7032 if (new_owner.
IsMan())
7033 {
7034 ownerPlayerNew = Man.Cast(new_owner);
7035 }
7036 else
7037 {
7038 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
7039 }
7040 }
7041
7042 if (ownerPlayerOld != ownerPlayerNew)
7043 {
7044 if (ownerPlayerOld)
7045 {
7046 array<EntityAI> subItemsExit = new array<EntityAI>;
7048 for (int i = 0; i < subItemsExit.Count(); i++)
7049 {
7052 }
7053 }
7054
7055 if (ownerPlayerNew)
7056 {
7057 array<EntityAI> subItemsEnter = new array<EntityAI>;
7059 for (int j = 0; j < subItemsEnter.Count(); j++)
7060 {
7063 }
7064 }
7065 }
7066 else if (ownerPlayerNew != null)
7067 {
7068 PlayerBase nplayer;
7069 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
7070 {
7071 array<EntityAI> subItemsUpdate = new array<EntityAI>;
7073 for (int k = 0; k < subItemsUpdate.Count(); k++)
7074 {
7076 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
7077 }
7078 }
7079 }
7080
7081 if (old_owner)
7082 old_owner.OnChildItemRemoved(this);
7083 if (new_owner)
7084 new_owner.OnChildItemReceived(this);
7085 }
7086
7087
7089 {
7090 super.EEDelete(parent);
7091 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
7092 if (player)
7093 {
7095
7096 if (player.IsAlive())
7097 {
7098 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7099 if (r_index >= 0)
7100 {
7101 InventoryLocation r_il = new InventoryLocation;
7102 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7103
7104 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7107 {
7108 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7109 }
7111 {
7112 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7113 }
7114
7115 }
7116
7117 player.RemoveQuickBarEntityShortcut(this);
7118 }
7119 }
7120 }
7121
7123 {
7124 super.EEKilled(killer);
7125
7128 {
7129 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7130 {
7131 if (IsMagazine())
7132 {
7133 if (Magazine.Cast(this).GetAmmoCount() > 0)
7134 {
7136 }
7137 }
7138 else
7139 {
7141 }
7142 }
7143 }
7144 }
7145
7147 {
7148 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7149
7150 super.OnWasAttached(parent, slot_id);
7151
7154
7156 }
7157
7159 {
7160 super.OnWasDetached(parent, slot_id);
7161
7164 }
7165
7167 {
7168 int idx;
7171
7172 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7173 if (inventory_slots.Count() < 1)
7174 {
7175 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7176 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7177 }
7178 else
7179 {
7180 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7181 }
7182
7183 idx = inventory_slots.Find(slot);
7184 if (idx < 0)
7185 return "";
7186
7187 return attach_types.Get(idx);
7188 }
7189
7191 {
7192 int idx = -1;
7193 string slot;
7194
7197
7198 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7199 if (inventory_slots.Count() < 1)
7200 {
7201 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7202 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7203 }
7204 else
7205 {
7206 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7207 if (detach_types.Count() < 1)
7208 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7209 }
7210
7211 for (int i = 0; i < inventory_slots.Count(); i++)
7212 {
7213 slot = inventory_slots.Get(i);
7214 }
7215
7216 if (slot != "")
7217 {
7218 if (detach_types.Count() == 1)
7219 idx = 0;
7220 else
7221 idx = inventory_slots.Find(slot);
7222 }
7223 if (idx < 0)
7224 return "";
7225
7226 return detach_types.Get(idx);
7227 }
7228
7230 {
7231
7233
7234
7235 float min_time = 1;
7236 float max_time = 3;
7237 float delay = Math.RandomFloat(min_time, max_time);
7238
7239 explode_timer.Run(delay, this, "DoAmmoExplosion");
7240 }
7241
7243 {
7244 Magazine magazine = Magazine.Cast(this);
7245 int pop_sounds_count = 6;
7246 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7247
7248
7249 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7250 string sound_name = pop_sounds[ sound_idx ];
7252
7253
7254 magazine.ServerAddAmmoCount(-1);
7255
7256
7257 float min_temp_to_explode = 100;
7258
7259 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7260 {
7262 }
7263 }
7264
7265
7266 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7267 {
7268 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7269
7270 const int CHANCE_DAMAGE_CARGO = 4;
7271 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7272 const int CHANCE_DAMAGE_NOTHING = 2;
7273
7275 {
7276 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7277 int chances;
7278 int rnd;
7279
7280 if (GetInventory().GetCargo())
7281 {
7282 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7283 rnd = Math.RandomInt(0,chances);
7284
7285 if (rnd < CHANCE_DAMAGE_CARGO)
7286 {
7288 }
7289 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7290 {
7292 }
7293 }
7294 else
7295 {
7296 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7297 rnd = Math.RandomInt(0,chances);
7298
7299 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7300 {
7302 }
7303 }
7304 }
7305 }
7306
7308 {
7309 if (GetInventory().GetCargo())
7310 {
7311 int item_count = GetInventory().GetCargo().GetItemCount();
7312 if (item_count > 0)
7313 {
7314 int random_pick = Math.RandomInt(0, item_count);
7316 if (!item.IsExplosive())
7317 {
7318 item.AddHealth("","",damage);
7319 return true;
7320 }
7321 }
7322 }
7323 return false;
7324 }
7325
7327 {
7328 int attachment_count = GetInventory().AttachmentCount();
7329 if (attachment_count > 0)
7330 {
7331 int random_pick = Math.RandomInt(0, attachment_count);
7332 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7333 if (!attachment.IsExplosive())
7334 {
7335 attachment.AddHealth("","",damage);
7336 return true;
7337 }
7338 }
7339 return false;
7340 }
7341
7343 {
7345 }
7346
7348 {
7350 return GetInventory().CanRemoveEntity();
7351
7352 return false;
7353 }
7354
7356 {
7358 return;
7359
7361 {
7362 if (ScriptInputUserData.CanStoreInputUserData())
7363 {
7364 ScriptInputUserData ctx = new ScriptInputUserData;
7369 ctx.
Write(destination_entity);
7373 }
7374 }
7375 else if (!
GetGame().IsMultiplayer())
7376 {
7378 }
7379 }
7380
7382 {
7384 return;
7385
7386 float split_quantity_new;
7390 InventoryLocation loc = new InventoryLocation;
7391
7392 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7393 {
7395 split_quantity_new = stack_max;
7396 else
7398
7399 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7400 if (new_item)
7401 {
7402 new_item.SetResultOfSplit(true);
7403 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7405 new_item.SetQuantity(split_quantity_new);
7406 }
7407 }
7408 else if (destination_entity && slot_id == -1)
7409 {
7410 if (quantity > stack_max)
7411 split_quantity_new = stack_max;
7412 else
7413 split_quantity_new = quantity;
7414
7416 {
7419 }
7420
7421 if (new_item)
7422 {
7423 new_item.SetResultOfSplit(true);
7424 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7426 new_item.SetQuantity(split_quantity_new);
7427 }
7428 }
7429 else
7430 {
7431 if (stack_max != 0)
7432 {
7434 {
7436 }
7437
7438 if (split_quantity_new == 0)
7439 {
7440 if (!
GetGame().IsMultiplayer())
7441 player.PhysicalPredictiveDropItem(this);
7442 else
7443 player.ServerDropEntity(this);
7444 return;
7445 }
7446
7448
7449 if (new_item)
7450 {
7451 new_item.SetResultOfSplit(true);
7452 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7454 new_item.SetQuantity(stack_max);
7455 new_item.PlaceOnSurface();
7456 }
7457 }
7458 }
7459 }
7460
7462 {
7464 return;
7465
7466 float split_quantity_new;
7470 InventoryLocation loc = new InventoryLocation;
7471
7472 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7473 {
7475 split_quantity_new = stack_max;
7476 else
7478
7479 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7480 if (new_item)
7481 {
7482 new_item.SetResultOfSplit(true);
7483 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7485 new_item.SetQuantity(split_quantity_new);
7486 }
7487 }
7488 else if (destination_entity && slot_id == -1)
7489 {
7490 if (quantity > stack_max)
7491 split_quantity_new = stack_max;
7492 else
7493 split_quantity_new = quantity;
7494
7496 {
7499 }
7500
7501 if (new_item)
7502 {
7503 new_item.SetResultOfSplit(true);
7504 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7506 new_item.SetQuantity(split_quantity_new);
7507 }
7508 }
7509 else
7510 {
7511 if (stack_max != 0)
7512 {
7514 {
7516 }
7517
7519
7520 if (new_item)
7521 {
7522 new_item.SetResultOfSplit(true);
7523 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7525 new_item.SetQuantity(stack_max);
7526 new_item.PlaceOnSurface();
7527 }
7528 }
7529 }
7530 }
7531
7533 {
7535 return;
7536
7538 {
7539 if (ScriptInputUserData.CanStoreInputUserData())
7540 {
7541 ScriptInputUserData ctx = new ScriptInputUserData;
7546 dst.WriteToContext(ctx);
7548 }
7549 }
7550 else if (!
GetGame().IsMultiplayer())
7551 {
7553 }
7554 }
7555
7557 {
7559 return;
7560
7562 {
7563 if (ScriptInputUserData.CanStoreInputUserData())
7564 {
7565 ScriptInputUserData ctx = new ScriptInputUserData;
7570 ctx.
Write(destination_entity);
7576 }
7577 }
7578 else if (!
GetGame().IsMultiplayer())
7579 {
7581 }
7582 }
7583
7585 {
7587 }
7588
7590 {
7592 return this;
7593
7595 float split_quantity_new;
7597 if (dst.IsValid())
7598 {
7599 int slot_id = dst.GetSlot();
7601
7602 if (quantity > stack_max)
7603 split_quantity_new = stack_max;
7604 else
7605 split_quantity_new = quantity;
7606
7608
7609 if (new_item)
7610 {
7611 new_item.SetResultOfSplit(true);
7612 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7615 }
7616
7617 return new_item;
7618 }
7619
7620 return null;
7621 }
7622
7624 {
7626 return;
7627
7629 float split_quantity_new;
7631 if (destination_entity)
7632 {
7634 if (quantity > stackable)
7635 split_quantity_new = stackable;
7636 else
7637 split_quantity_new = quantity;
7638
7639 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7640 if (new_item)
7641 {
7642 new_item.SetResultOfSplit(true);
7643 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7645 new_item.SetQuantity(split_quantity_new);
7646 }
7647 }
7648 }
7649
7651 {
7653 return;
7654
7656 {
7657 if (ScriptInputUserData.CanStoreInputUserData())
7658 {
7659 ScriptInputUserData ctx = new ScriptInputUserData;
7664 ItemBase destination_entity =
this;
7665 ctx.
Write(destination_entity);
7669 }
7670 }
7671 else if (!
GetGame().IsMultiplayer())
7672 {
7674 }
7675 }
7676
7678 {
7680 return;
7681
7683 float split_quantity_new;
7685 if (player)
7686 {
7688 if (quantity > stackable)
7689 split_quantity_new = stackable;
7690 else
7691 split_quantity_new = quantity;
7692
7693 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7694 new_item =
ItemBase.Cast(in_hands);
7695 if (new_item)
7696 {
7697 new_item.SetResultOfSplit(true);
7698 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7700 new_item.SetQuantity(split_quantity_new);
7701 }
7702 }
7703 }
7704
7706 {
7708 return;
7709
7711 float split_quantity_new = Math.Floor(quantity * 0.5);
7712
7714
7715 if (new_item)
7716 {
7717 if (new_item.GetQuantityMax() < split_quantity_new)
7718 {
7719 split_quantity_new = new_item.GetQuantityMax();
7720 }
7721
7722 new_item.SetResultOfSplit(true);
7723 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7724
7726 {
7729 }
7730 else
7731 {
7734 }
7735 }
7736 }
7737
7739 {
7741 return;
7742
7744 float split_quantity_new = Math.Floor(quantity / 2);
7745
7746 InventoryLocation invloc = new InventoryLocation;
7748
7750 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7751
7752 if (new_item)
7753 {
7754 if (new_item.GetQuantityMax() < split_quantity_new)
7755 {
7756 split_quantity_new = new_item.GetQuantityMax();
7757 }
7759 {
7762 }
7763 else
7764 {
7767 }
7768 }
7769 }
7770
7773 {
7774 SetWeightDirty();
7776
7777 if (parent)
7778 parent.OnAttachmentQuantityChangedEx(this, delta);
7779
7781 {
7783 {
7785 }
7787 {
7788 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7790 }
7791 }
7792
7793 }
7794
7797 {
7798
7799 }
7800
7803 {
7805 }
7806
7808 {
7809 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7810
7812 {
7813 if (newLevel == GameConstants.STATE_RUINED)
7814 {
7816 EntityAI parent = GetHierarchyParent();
7817 if (parent && parent.IsFireplace())
7818 {
7819 CargoBase cargo = GetInventory().GetCargo();
7820 if (cargo)
7821 {
7823 {
7825 }
7826 }
7827 }
7828 }
7829
7831 {
7832
7834 return;
7835 }
7836
7837 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7838 {
7840 }
7841 }
7842 }
7843
7844
7846 {
7847 super.OnRightClick();
7848
7850 {
7852 {
7853 if (ScriptInputUserData.CanStoreInputUserData())
7854 {
7855 vector m4[4];
7857
7858 EntityAI root = GetHierarchyRoot();
7859
7860 InventoryLocation dst = new InventoryLocation;
7862 {
7863 if (root)
7864 {
7865 root.GetTransform(m4);
7867 }
7868 else
7869 GetInventory().GetCurrentInventoryLocation(dst);
7870 }
7871 else
7872 {
7874
7875
7876 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7877 {
7878 if (root)
7879 {
7880 root.GetTransform(m4);
7882 }
7883 else
7884 GetInventory().GetCurrentInventoryLocation(dst);
7885 }
7886 else
7887 {
7888 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7889 }
7890 }
7891
7892 ScriptInputUserData ctx = new ScriptInputUserData;
7900 }
7901 }
7902 else if (!
GetGame().IsMultiplayer())
7903 {
7905 }
7906 }
7907 }
7908
7909 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7910 {
7911
7912 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7913 return false;
7914
7915 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7916 return false;
7917
7918
7920 return false;
7921
7922
7923 Magazine mag = Magazine.Cast(this);
7924 if (mag)
7925 {
7926 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7927 return false;
7928
7929 if (stack_max_limit)
7930 {
7931 Magazine other_mag = Magazine.Cast(other_item);
7932 if (other_item)
7933 {
7934 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7935 return false;
7936 }
7937
7938 }
7939 }
7940 else
7941 {
7942
7944 return false;
7945
7947 return false;
7948 }
7949
7950 PlayerBase player = null;
7951 if (CastTo(player, GetHierarchyRootPlayer()))
7952 {
7953 if (player.GetInventory().HasAttachment(this))
7954 return false;
7955
7956 if (player.IsItemsToDelete())
7957 return false;
7958 }
7959
7960 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7961 return false;
7962
7963 int slotID;
7965 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7966 return false;
7967
7968 return true;
7969 }
7970
7972 {
7974 }
7975
7977 {
7978 return m_IsResultOfSplit;
7979 }
7980
7982 {
7983 m_IsResultOfSplit = value;
7984 }
7985
7987 {
7989 }
7990
7992 {
7993 float other_item_quantity = other_item.GetQuantity();
7994 float this_free_space;
7995
7997
7999
8000 if (other_item_quantity > this_free_space)
8001 {
8002 return this_free_space;
8003 }
8004 else
8005 {
8006 return other_item_quantity;
8007 }
8008 }
8009
8011 {
8013 }
8014
8016 {
8018 return;
8019
8020 if (!IsMagazine() && other_item)
8021 {
8023 if (quantity_used != 0)
8024 {
8025 float hp1 = GetHealth01("","");
8026 float hp2 = other_item.GetHealth01("","");
8027 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
8028 hpResult = hpResult / (
GetQuantity() + quantity_used);
8029
8030 hpResult *= GetMaxHealth();
8031 Math.Round(hpResult);
8032 SetHealth("", "Health", hpResult);
8033
8035 other_item.AddQuantity(-quantity_used);
8036 }
8037 }
8039 }
8040
8042 {
8043 #ifdef SERVER
8044 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
8045 GetHierarchyParent().IncreaseLifetimeUp();
8046 #endif
8047 };
8048
8050 {
8051 PlayerBase p = PlayerBase.Cast(player);
8052
8053 array<int> recipesIds = p.m_Recipes;
8054 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8055 if (moduleRecipesManager)
8056 {
8057 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
8058 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
8059 }
8060
8061 for (int i = 0;i < recipesIds.Count(); i++)
8062 {
8063 int key = recipesIds.Get(i);
8064 string recipeName = moduleRecipesManager.GetRecipeName(key);
8066 }
8067 }
8068
8069
8070 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
8071 {
8072 super.GetDebugActions(outputList);
8073
8074
8079
8080
8084
8088
8089
8092
8093
8095 {
8098 }
8099
8101
8104
8108 }
8109
8110
8111
8112
8114 {
8115 super.OnAction(action_id, player, ctx);
8116 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8117 {
8118 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8119 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8120 PlayerBase p = PlayerBase.Cast(player);
8121 if (
EActions.RECIPES_RANGE_START < 1000)
8122 {
8123 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8124 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8125 }
8126 }
8127 #ifndef SERVER
8128 else if (action_id ==
EActions.WATCH_PLAYER)
8129 {
8130 PluginDeveloper.SetDeveloperItemClientEx(player);
8131 }
8132 #endif
8134 {
8135 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8136 {
8137 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8138 OnDebugButtonPressServer(id + 1);
8139 }
8140
8141 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8142 {
8143 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8145 }
8146
8147 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8148 {
8149 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8151 }
8152
8153 else if (action_id ==
EActions.ADD_QUANTITY)
8154 {
8155 if (IsMagazine())
8156 {
8157 Magazine mag = Magazine.Cast(this);
8158 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8159 }
8160 else
8161 {
8163 }
8164
8165 if (m_EM)
8166 {
8167 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8168 }
8169
8170 }
8171
8172 else if (action_id ==
EActions.REMOVE_QUANTITY)
8173 {
8174 if (IsMagazine())
8175 {
8176 Magazine mag2 = Magazine.Cast(this);
8177 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8178 }
8179 else
8180 {
8182 }
8183 if (m_EM)
8184 {
8185 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8186 }
8187
8188 }
8189
8190 else if (action_id ==
EActions.SET_QUANTITY_0)
8191 {
8193
8194 if (m_EM)
8195 {
8196 m_EM.SetEnergy(0);
8197 }
8198 }
8199
8200 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8201 {
8203
8204 if (m_EM)
8205 {
8206 m_EM.SetEnergy(m_EM.GetEnergyMax());
8207 }
8208 }
8209
8210 else if (action_id ==
EActions.ADD_HEALTH)
8211 {
8212 AddHealth("","",GetMaxHealth("","Health")/5);
8213 }
8214 else if (action_id ==
EActions.REMOVE_HEALTH)
8215 {
8216 AddHealth("","",-GetMaxHealth("","Health")/5);
8217 }
8218 else if (action_id ==
EActions.DESTROY_HEALTH)
8219 {
8220 SetHealth01("","",0);
8221 }
8222 else if (action_id ==
EActions.WATCH_ITEM)
8223 {
8225 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8226 #ifdef DEVELOPER
8227 SetDebugDeveloper_item(this);
8228 #endif
8229 }
8230
8231 else if (action_id ==
EActions.ADD_TEMPERATURE)
8232 {
8233 AddTemperature(20);
8234
8235 }
8236
8237 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8238 {
8239 AddTemperature(-20);
8240
8241 }
8242
8243 else if (action_id ==
EActions.FLIP_FROZEN)
8244 {
8245 SetFrozen(!GetIsFrozen());
8246
8247 }
8248
8249 else if (action_id ==
EActions.ADD_WETNESS)
8250 {
8252
8253 }
8254
8255 else if (action_id ==
EActions.REMOVE_WETNESS)
8256 {
8258
8259 }
8260
8261 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8262 {
8265
8266
8267 }
8268
8269 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8270 {
8273 }
8274
8275 else if (action_id ==
EActions.MAKE_SPECIAL)
8276 {
8277 auto debugParams = DebugSpawnParams.WithPlayer(player);
8278 OnDebugSpawnEx(debugParams);
8279 }
8280
8281 else if (action_id ==
EActions.DELETE)
8282 {
8283 Delete();
8284 }
8285
8286 }
8287
8288
8289 return false;
8290 }
8291
8292
8293
8294
8298
8301
8302
8303
8305 {
8306 return false;
8307 }
8308
8309
8311 {
8312 return true;
8313 }
8314
8315
8317 {
8318 return true;
8319 }
8320
8321
8322
8324 {
8325 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8327 }
8328
8331 {
8332 return null;
8333 }
8334
8336 {
8337 return false;
8338 }
8339
8341 {
8342 return false;
8343 }
8344
8348
8349
8351 {
8352 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8353 return module_repairing.CanRepair(this, item_repair_kit);
8354 }
8355
8356
8357 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8358 {
8359 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8360 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8361 }
8362
8363
8365 {
8366
8367
8368
8369
8370
8371
8372
8373
8374 return 1;
8375 }
8376
8377
8378
8380 {
8382 }
8383
8384
8385
8387 {
8389 }
8390
8391
8400 {
8401 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8402
8403 if (player)
8404 {
8405 player.MessageStatus(text);
8406 }
8407 }
8408
8409
8418 {
8419 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8420
8421 if (player)
8422 {
8423 player.MessageAction(text);
8424 }
8425 }
8426
8427
8436 {
8437 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8438
8439 if (player)
8440 {
8441 player.MessageFriendly(text);
8442 }
8443 }
8444
8445
8454 {
8455 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8456
8457 if (player)
8458 {
8459 player.MessageImportant(text);
8460 }
8461 }
8462
8464 {
8465 return true;
8466 }
8467
8468
8469 override bool KindOf(
string tag)
8470 {
8471 bool found = false;
8472 string item_name = this.
GetType();
8475
8476 int array_size = item_tag_array.Count();
8477 for (int i = 0; i < array_size; i++)
8478 {
8479 if (item_tag_array.Get(i) == tag)
8480 {
8481 found = true;
8482 break;
8483 }
8484 }
8485 return found;
8486 }
8487
8488
8490 {
8491
8492 super.OnRPC(sender, rpc_type,ctx);
8493
8494
8495 switch (rpc_type)
8496 {
8497 #ifndef SERVER
8498 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8499 Param2<bool, string> p = new Param2<bool, string>(false, "");
8500
8502 return;
8503
8504 bool play = p.param1;
8505 string soundSet = p.param2;
8506
8507 if (play)
8508 {
8510 {
8512 {
8514 }
8515 }
8516 else
8517 {
8519 }
8520 }
8521 else
8522 {
8524 }
8525
8526 break;
8527 #endif
8528
8529 }
8530
8532 {
8534 }
8535 }
8536
8537
8538
8539
8541 {
8542 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8543 return plugin.GetID(
name);
8544 }
8545
8547 {
8548 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8549 return plugin.GetName(id);
8550 }
8551
8554 {
8555
8556
8557 int varFlags;
8558 if (!ctx.
Read(varFlags))
8559 return;
8560
8561 if (varFlags & ItemVariableFlags.FLOAT)
8562 {
8564 }
8565 }
8566
8568 {
8569
8570 super.SerializeNumericalVars(floats_out);
8571
8572
8573
8575 {
8577 }
8578
8580 {
8582 }
8583
8585 {
8587 }
8588
8590 {
8595 }
8596
8598 {
8600 }
8601 }
8602
8604 {
8605
8606 super.DeSerializeNumericalVars(floats);
8607
8608
8609 int index = 0;
8610 int mask = Math.Round(floats.Get(index));
8611
8612 index++;
8613
8615 {
8617 {
8619 }
8620 else
8621 {
8622 float quantity = floats.Get(index);
8624 }
8625 index++;
8626 }
8627
8629 {
8630 float wet = floats.Get(index);
8632 index++;
8633 }
8634
8636 {
8637 int liquidtype = Math.Round(floats.Get(index));
8639 index++;
8640 }
8641
8643 {
8645 index++;
8647 index++;
8649 index++;
8651 index++;
8652 }
8653
8655 {
8656 int cleanness = Math.Round(floats.Get(index));
8658 index++;
8659 }
8660 }
8661
8663 {
8664 super.WriteVarsToCTX(ctx);
8665
8666
8668 {
8670 }
8671
8673 {
8675 }
8676
8678 {
8680 }
8681
8683 {
8684 int r,g,b,a;
8690 }
8691
8693 {
8695 }
8696 }
8697
8699 {
8700 if (!super.ReadVarsFromCTX(ctx,version))
8701 return false;
8702
8703 int intValue;
8704 float value;
8705
8706 if (version < 140)
8707 {
8708 if (!ctx.
Read(intValue))
8709 return false;
8710
8711 m_VariablesMask = intValue;
8712 }
8713
8715 {
8716 if (!ctx.
Read(value))
8717 return false;
8718
8720 {
8722 }
8723 else
8724 {
8726 }
8727 }
8728
8729 if (version < 140)
8730 {
8732 {
8733 if (!ctx.
Read(value))
8734 return false;
8735 SetTemperatureDirect(value);
8736 }
8737 }
8738
8740 {
8741 if (!ctx.
Read(value))
8742 return false;
8744 }
8745
8747 {
8748 if (!ctx.
Read(intValue))
8749 return false;
8751 }
8752
8754 {
8755 int r,g,b,a;
8757 return false;
8759 return false;
8761 return false;
8763 return false;
8764
8766 }
8767
8769 {
8770 if (!ctx.
Read(intValue))
8771 return false;
8773 }
8774
8775 if (version >= 138 && version < 140)
8776 {
8778 {
8779 if (!ctx.
Read(intValue))
8780 return false;
8781 SetFrozen(intValue);
8782 }
8783 }
8784
8785 return true;
8786 }
8787
8788
8790 {
8793 {
8795 }
8796
8797 if (!super.OnStoreLoad(ctx, version))
8798 {
8800 return false;
8801 }
8802
8803 if (version >= 114)
8804 {
8805 bool hasQuickBarIndexSaved;
8806
8807 if (!ctx.
Read(hasQuickBarIndexSaved))
8808 {
8810 return false;
8811 }
8812
8813 if (hasQuickBarIndexSaved)
8814 {
8815 int itmQBIndex;
8816
8817
8818 if (!ctx.
Read(itmQBIndex))
8819 {
8821 return false;
8822 }
8823
8824 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8825 if (itmQBIndex != -1 && parentPlayer)
8826 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8827 }
8828 }
8829 else
8830 {
8831
8832 PlayerBase player;
8833 int itemQBIndex;
8834 if (version ==
int.
MAX)
8835 {
8836 if (!ctx.
Read(itemQBIndex))
8837 {
8839 return false;
8840 }
8841 }
8842 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8843 {
8844
8845 if (!ctx.
Read(itemQBIndex))
8846 {
8848 return false;
8849 }
8850 if (itemQBIndex != -1 && player)
8851 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8852 }
8853 }
8854
8855 if (version < 140)
8856 {
8857
8858 if (!LoadVariables(ctx, version))
8859 {
8861 return false;
8862 }
8863 }
8864
8865
8867 {
8869 return false;
8870 }
8871 if (version >= 132)
8872 {
8874 if (raib)
8875 {
8877 {
8879 return false;
8880 }
8881 }
8882 }
8883
8885 return true;
8886 }
8887
8888
8889
8891 {
8892 super.OnStoreSave(ctx);
8893
8894 PlayerBase player;
8895 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8896 {
8898
8899 int itemQBIndex = -1;
8900 itemQBIndex = player.FindQuickBarEntityIndex(this);
8901 ctx.
Write(itemQBIndex);
8902 }
8903 else
8904 {
8906 }
8907
8909
8911 if (raib)
8912 {
8914 }
8915 }
8916
8917
8919 {
8920 super.AfterStoreLoad();
8921
8923 {
8925 }
8926
8928 {
8931 }
8932 }
8933
8935 {
8936 super.EEOnAfterLoad();
8937
8939 {
8941 }
8942
8945 }
8946
8948 {
8949 return false;
8950 }
8951
8952
8953
8955 {
8957 {
8958 #ifdef PLATFORM_CONSOLE
8959
8961 {
8963 if (menu)
8964 {
8966 }
8967 }
8968 #endif
8969 }
8970
8972 {
8975 }
8976
8978 {
8979 SetWeightDirty();
8981 }
8983 {
8986 }
8987
8989 {
8992 }
8994 {
8997 }
8998
8999 super.OnVariablesSynchronized();
9000 }
9001
9002
9003
9005 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
9006 {
9007 if (!IsServerCheck(allow_client))
9008 return false;
9009
9011 return false;
9012
9015
9016 if (value <= (min + 0.001))
9017 value = min;
9018
9019 if (value == min)
9020 {
9021 if (destroy_config)
9022 {
9023 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
9024 if (dstr)
9025 {
9027 this.Delete();
9028 return true;
9029 }
9030 }
9031 else if (destroy_forced)
9032 {
9034 this.Delete();
9035 return true;
9036 }
9037
9039 }
9040
9043
9045 {
9047
9048 if (delta)
9050 }
9051
9053
9054 return false;
9055 }
9056
9057
9059 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
9060 {
9062 }
9063
9065 {
9068 }
9069
9071 {
9074 }
9075
9078 {
9079 float value_clamped = Math.Clamp(value, 0, 1);
9081 SetQuantity(result, destroy_config, destroy_forced);
9082 }
9083
9084
9087 {
9089 }
9090
9092 {
9094 }
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9106 {
9107 int slot = -1;
9108 if (GetInventory())
9109 {
9110 InventoryLocation il = new InventoryLocation;
9111 GetInventory().GetCurrentInventoryLocation(il);
9113 }
9114
9116 }
9117
9119 {
9120 float quantity_max = 0;
9121
9123 {
9124 if (attSlotID != -1)
9125 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9126
9127 if (quantity_max <= 0)
9129 }
9130
9131 if (quantity_max <= 0)
9133
9134 return quantity_max;
9135 }
9136
9138 {
9140 }
9141
9143 {
9145 }
9146
9147
9149 {
9151 }
9152
9154 {
9156 }
9157
9159 {
9161 }
9162
9163
9165 {
9166
9167 float weightEx = GetWeightEx();
9168 float special = GetInventoryAndCargoWeight();
9169 return weightEx - special;
9170 }
9171
9172
9174 {
9176 }
9177
9179 {
9181 {
9182 #ifdef DEVELOPER
9183 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9184 {
9185 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9187 }
9188 #endif
9189
9191 }
9192 else if (HasEnergyManager())
9193 {
9194 #ifdef DEVELOPER
9195 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9196 {
9197 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9198 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9199 }
9200 #endif
9201 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9202 }
9203 else
9204 {
9205 #ifdef DEVELOPER
9206 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9207 {
9208 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9209 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9210 }
9211 #endif
9212 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9213 }
9214 }
9215
9218 {
9219 int item_count = 0;
9221
9222 if (GetInventory().GetCargo() != NULL)
9223 {
9224 item_count = GetInventory().GetCargo().GetItemCount();
9225 }
9226
9227 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9228 {
9229 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9230 if (item)
9231 item_count += item.GetNumberOfItems();
9232 }
9233 return item_count;
9234 }
9235
9238 {
9239 float weight = 0;
9240 float wetness = 1;
9241 if (include_wetness)
9244 {
9245 weight = wetness * m_ConfigWeight;
9246 }
9248 {
9249 weight = 1;
9250 }
9251 return weight;
9252 }
9253
9254
9255
9257 {
9258 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9259 {
9260 GameInventory inv = GetInventory();
9261 array<EntityAI> items = new array<EntityAI>;
9263 for (int i = 0; i < items.Count(); i++)
9264 {
9266 if (item)
9267 {
9269 }
9270 }
9271 }
9272 }
9273
9274
9275
9276
9278 {
9279 float energy = 0;
9280 if (HasEnergyManager())
9281 {
9282 energy = GetCompEM().GetEnergy();
9283 }
9284 return energy;
9285 }
9286
9287
9289 {
9290 super.OnEnergyConsumed();
9291
9293 }
9294
9296 {
9297 super.OnEnergyAdded();
9298
9300 }
9301
9302
9304 {
9305 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9306 {
9308 {
9309 float energy_0to1 = GetCompEM().GetEnergy0To1();
9311 }
9312 }
9313 }
9314
9315
9317 {
9318 return ConfigGetFloat("heatIsolation");
9319 }
9320
9322 {
9324 }
9325
9327 {
9328 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9329 if (
GetGame().ConfigIsExisting(paramPath))
9331
9332 return 0.0;
9333 }
9334
9336 {
9337 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9338 if (
GetGame().ConfigIsExisting(paramPath))
9340
9341 return 0.0;
9342 }
9343
9344 override void SetWet(
float value,
bool allow_client =
false)
9345 {
9346 if (!IsServerCheck(allow_client))
9347 return;
9348
9351
9353
9354 m_VarWet = Math.Clamp(value, min, max);
9355
9357 {
9360 }
9361 }
9362
9363 override void AddWet(
float value)
9364 {
9366 }
9367
9369 {
9371 }
9372
9374 {
9376 }
9377
9379 {
9381 }
9382
9384 {
9386 }
9387
9389 {
9391 }
9392
9394 {
9397 if (newLevel != oldLevel)
9398 {
9400 }
9401 }
9402
9404 {
9405 SetWeightDirty();
9406 }
9407
9409 {
9410 return GetWetLevelInternal(
m_VarWet);
9411 }
9412
9413
9414
9416 {
9418 }
9419
9421 {
9423 }
9424
9426 {
9428 }
9429
9431 {
9433 }
9434
9435
9436
9438 {
9439 if (ConfigIsExisting("itemModelLength"))
9440 {
9441 return ConfigGetFloat("itemModelLength");
9442 }
9443 return 0;
9444 }
9445
9447 {
9448 if (ConfigIsExisting("itemAttachOffset"))
9449 {
9450 return ConfigGetFloat("itemAttachOffset");
9451 }
9452 return 0;
9453 }
9454
9455 override void SetCleanness(
int value,
bool allow_client =
false)
9456 {
9457 if (!IsServerCheck(allow_client))
9458 return;
9459
9461
9463
9466 }
9467
9469 {
9471 }
9472
9474 {
9475 return true;
9476 }
9477
9478
9479
9480
9482 {
9484 }
9485
9487 {
9489 }
9490
9491
9492
9493
9494 override void SetColor(
int r,
int g,
int b,
int a)
9495 {
9501 }
9503 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9504 {
9509 }
9510
9512 {
9514 }
9515
9518 {
9519 int r,g,b,a;
9521 r = r/255;
9522 g = g/255;
9523 b = b/255;
9524 a = a/255;
9525 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9526 }
9527
9528
9529
9530 override void SetLiquidType(
int value,
bool allow_client =
false)
9531 {
9532 if (!IsServerCheck(allow_client))
9533 return;
9534
9539 }
9540
9542 {
9543 return ConfigGetInt("varLiquidTypeInit");
9544 }
9545
9547 {
9549 }
9550
9552 {
9554 SetFrozen(false);
9555 }
9556
9559 {
9560 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9561 }
9562
9563
9566 {
9567 PlayerBase nplayer;
9568 if (PlayerBase.CastTo(nplayer, player))
9569 {
9571
9572 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9573 }
9574 }
9575
9576
9579 {
9580 PlayerBase nplayer;
9581 if (PlayerBase.CastTo(nplayer,player))
9582 {
9583
9584 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9585
9586 }
9587
9588
9589 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9590
9591
9592 if (HasEnergyManager())
9593 {
9594 GetCompEM().UpdatePlugState();
9595 }
9596 }
9597
9598
9600 {
9601 super.OnPlacementStarted(player);
9602
9604 }
9605
9606 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9607 {
9609 {
9610 m_AdminLog.OnPlacementComplete(player,
this);
9611 }
9612
9613 super.OnPlacementComplete(player, position, orientation);
9614 }
9615
9616
9617
9618
9619
9621 {
9623 {
9624 return true;
9625 }
9626 else
9627 {
9628 return false;
9629 }
9630 }
9631
9632
9634 {
9636 {
9638 }
9639 }
9640
9641
9643 {
9645 }
9646
9648 {
9650 }
9651
9652 override void InsertAgent(
int agent,
float count = 1)
9653 {
9654 if (count < 1)
9655 return;
9656
9658 }
9659
9662 {
9664 }
9665
9666
9668 {
9670 }
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9714 {
9716 return false;
9717 return true;
9718 }
9719
9721 {
9722
9724 }
9725
9726
9729 {
9730 super.CheckForRoofLimited(timeTresholdMS);
9731
9733 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9734 {
9735 m_PreviousRoofTestTime = time;
9736 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9737 }
9738 }
9739
9740
9742 {
9744 {
9745 return 0;
9746 }
9747
9748 if (GetInventory().GetAttachmentSlotsCount() != 0)
9749 {
9750 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9751 if (filter)
9752 return filter.GetProtectionLevel(type, false, system);
9753 else
9754 return 0;
9755 }
9756
9757 string subclassPath, entryName;
9758
9759 switch (type)
9760 {
9762 entryName = "biological";
9763 break;
9765 entryName = "chemical";
9766 break;
9767 default:
9768 entryName = "biological";
9769 break;
9770 }
9771
9772 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9773
9775 }
9776
9777
9778
9781 {
9782 if (!IsMagazine())
9784
9786 }
9787
9788
9789
9790
9791
9796 {
9797 return true;
9798 }
9799
9801 {
9803 }
9804
9805
9806
9807
9808
9810 {
9811 if (parent)
9812 {
9813 if (parent.IsInherited(DayZInfected))
9814 return true;
9815
9816 if (!parent.IsRuined())
9817 return true;
9818 }
9819
9820 return true;
9821 }
9822
9824 {
9825 if (!super.CanPutAsAttachment(parent))
9826 {
9827 return false;
9828 }
9829
9830 if (!IsRuined() && !parent.IsRuined())
9831 {
9832 return true;
9833 }
9834
9835 return false;
9836 }
9837
9839 {
9840
9841
9842
9843
9844 return super.CanReceiveItemIntoCargo(item);
9845 }
9846
9848 {
9849
9850
9851
9852
9853 GameInventory attachmentInv = attachment.GetInventory();
9855 {
9856 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9857 return false;
9858 }
9859
9860 InventoryLocation loc = new InventoryLocation();
9861 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9862 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9863 return false;
9864
9865 return super.CanReceiveAttachment(attachment, slotId);
9866 }
9867
9869 {
9870 if (!super.CanReleaseAttachment(attachment))
9871 return false;
9872
9873 return GetInventory().AreChildrenAccessible();
9874 }
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9897 {
9898 int id = muzzle_owner.GetMuzzleID();
9899 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9900
9901 if (WPOF_array)
9902 {
9903 for (int i = 0; i < WPOF_array.Count(); i++)
9904 {
9905 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9906
9907 if (WPOF)
9908 {
9909 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9910 }
9911 }
9912 }
9913 }
9914
9915
9917 {
9918 int id = muzzle_owner.GetMuzzleID();
9920
9921 if (WPOBE_array)
9922 {
9923 for (int i = 0; i < WPOBE_array.Count(); i++)
9924 {
9925 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9926
9927 if (WPOBE)
9928 {
9929 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9930 }
9931 }
9932 }
9933 }
9934
9935
9937 {
9938 int id = muzzle_owner.GetMuzzleID();
9939 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9940
9941 if (WPOOH_array)
9942 {
9943 for (int i = 0; i < WPOOH_array.Count(); i++)
9944 {
9945 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9946
9947 if (WPOOH)
9948 {
9949 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9950 }
9951 }
9952 }
9953 }
9954
9955
9957 {
9958 int id = muzzle_owner.GetMuzzleID();
9959 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9960
9961 if (WPOOH_array)
9962 {
9963 for (int i = 0; i < WPOOH_array.Count(); i++)
9964 {
9965 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9966
9967 if (WPOOH)
9968 {
9969 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9970 }
9971 }
9972 }
9973 }
9974
9975
9977 {
9978 int id = muzzle_owner.GetMuzzleID();
9979 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9980
9981 if (WPOOH_array)
9982 {
9983 for (int i = 0; i < WPOOH_array.Count(); i++)
9984 {
9985 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9986
9987 if (WPOOH)
9988 {
9989 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9990 }
9991 }
9992 }
9993 }
9994
9995
9996
9998 {
10000 {
10001 return true;
10002 }
10003
10004 return false;
10005 }
10006
10008 {
10010 {
10011 return true;
10012 }
10013
10014 return false;
10015 }
10016
10018 {
10020 {
10021 return true;
10022 }
10023
10024 return false;
10025 }
10026
10028 {
10029 return false;
10030 }
10031
10034 {
10035 return UATimeSpent.DEFAULT_DEPLOY;
10036 }
10037
10038
10039
10040
10042 {
10044 SetSynchDirty();
10045 }
10046
10048 {
10050 }
10051
10052
10054 {
10055 return false;
10056 }
10057
10060 {
10061 string att_type = "None";
10062
10063 if (ConfigIsExisting("soundAttType"))
10064 {
10065 att_type = ConfigGetString("soundAttType");
10066 }
10067
10069 }
10070
10072 {
10074 }
10075
10076
10077
10078
10079
10083
10085 {
10088
10090 }
10091
10092
10094 {
10096 return;
10097
10099
10102
10105
10106 SoundParameters params = new SoundParameters();
10110 }
10111
10112
10114 {
10116 return;
10117
10119 SetSynchDirty();
10120
10123 }
10124
10125
10127 {
10129 return;
10130
10132 SetSynchDirty();
10133
10136 }
10137
10139 {
10141 }
10142
10144 {
10146 }
10147
10150 {
10151 if (!
GetGame().IsDedicatedServer())
10152 {
10153 if (ConfigIsExisting("attachSoundSet"))
10154 {
10155 string cfg_path = "";
10156 string soundset = "";
10157 string type_name =
GetType();
10158
10161 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10162 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10163
10164 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10165 {
10166 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10167 {
10168 if (cfg_slot_array[i] == slot_type)
10169 {
10170 soundset = cfg_soundset_array[i];
10171 break;
10172 }
10173 }
10174 }
10175
10176 if (soundset != "")
10177 {
10178 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10180 }
10181 }
10182 }
10183 }
10184
10186 {
10187
10188 }
10189
10190 void OnApply(PlayerBase player);
10191
10193 {
10194 return 1.0;
10195 };
10196
10198 {
10200 }
10201
10203 {
10205 }
10206
10208
10210 {
10211 SetDynamicPhysicsLifeTime(0.01);
10213 }
10214
10216 {
10217 array<string> zone_names = new array<string>;
10218 GetDamageZones(zone_names);
10219 for (int i = 0; i < zone_names.Count(); i++)
10220 {
10221 SetHealthMax(zone_names.Get(i),"Health");
10222 }
10223 SetHealthMax("","Health");
10224 }
10225
10228 {
10229 float global_health = GetHealth01("","Health");
10230 array<string> zones = new array<string>;
10231 GetDamageZones(zones);
10232
10233 for (int i = 0; i < zones.Count(); i++)
10234 {
10235 SetHealth01(zones.Get(i),"Health",global_health);
10236 }
10237 }
10238
10241 {
10242 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10243 }
10244
10246 {
10247 if (!hasRootAsPlayer)
10248 {
10249 if (refParentIB)
10250 {
10251
10252 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10253 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10254
10255 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10256 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10257
10260 }
10261 else
10262 {
10263
10266 }
10267 }
10268 }
10269
10271 {
10273 {
10274 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10275 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10276 {
10277 float heatPermCoef = 1.0;
10279 while (ent)
10280 {
10281 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10282 ent = ent.GetHierarchyParent();
10283 }
10284
10285 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10286 }
10287 }
10288 }
10289
10291 {
10292
10293 EntityAI parent = GetHierarchyParent();
10294 if (!parent)
10295 {
10296 hasParent = false;
10297 hasRootAsPlayer = false;
10298 }
10299 else
10300 {
10301 hasParent = true;
10302 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10303 refParentIB =
ItemBase.Cast(parent);
10304 }
10305 }
10306
10307 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10308 {
10309
10310 }
10311
10313 {
10314
10315 return false;
10316 }
10317
10319 {
10320
10321
10322 return false;
10323 }
10324
10326 {
10327
10328 return false;
10329 }
10330
10333 {
10334 return !GetIsFrozen() &&
IsOpen();
10335 }
10336
10338 {
10339 bool hasParent = false, hasRootAsPlayer = false;
10341
10342 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10343 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10344
10345 if (wwtu || foodDecay)
10346 {
10350
10351 if (processWetness || processTemperature || processDecay)
10352 {
10354
10355 if (processWetness)
10356 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10357
10358 if (processTemperature)
10360
10361 if (processDecay)
10362 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10363 }
10364 }
10365 }
10366
10369 {
10371 }
10372
10374 {
10377
10378 return super.GetTemperatureFreezeThreshold();
10379 }
10380
10382 {
10385
10386 return super.GetTemperatureThawThreshold();
10387 }
10388
10390 {
10393
10394 return super.GetItemOverheatThreshold();
10395 }
10396
10398 {
10400 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10401
10402 return super.GetTemperatureFreezeTime();
10403 }
10404
10406 {
10408 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10409
10410 return super.GetTemperatureThawTime();
10411 }
10412
10417
10419 {
10420 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10421 }
10422
10424 {
10425 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10426 }
10427
10430 {
10432 }
10433
10435 {
10437 }
10438
10440 {
10442 }
10443
10446 {
10447 return null;
10448 }
10449
10452 {
10453 return false;
10454 }
10455
10457 {
10459 {
10462 if (!trg)
10463 {
10465 explosive = this;
10466 }
10467
10468 explosive.PairRemote(trg);
10470
10471 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10472 trg.SetPersistentPairID(persistentID);
10473 explosive.SetPersistentPairID(persistentID);
10474
10475 return true;
10476 }
10477 return false;
10478 }
10479
10482 {
10483 float ret = 1.0;
10486 ret *= GetHealth01();
10487
10488 return ret;
10489 }
10490
10491 #ifdef DEVELOPER
10492 override void SetDebugItem()
10493 {
10494 super.SetDebugItem();
10495 _itemBase = this;
10496 }
10497
10499 {
10500 string text = super.GetDebugText();
10501
10503 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10504
10505 return text;
10506 }
10507 #endif
10508
10510 {
10511 return true;
10512 }
10513
10515
10517
10519 {
10522 }
10523
10524
10532
10548}
10549
10551{
10553 if (entity)
10554 {
10555 bool is_item = entity.IsInherited(
ItemBase);
10556 if (is_item && full_quantity)
10557 {
10560 }
10561 }
10562 else
10563 {
10565 return NULL;
10566 }
10567 return entity;
10568}
10569
10571{
10572 if (item)
10573 {
10574 if (health > 0)
10575 item.SetHealth("", "", health);
10576
10577 if (item.CanHaveTemperature())
10578 {
10580 if (item.CanFreeze())
10581 item.SetFrozen(false);
10582 }
10583
10584 if (item.HasEnergyManager())
10585 {
10586 if (quantity >= 0)
10587 {
10588 item.GetCompEM().SetEnergy0To1(quantity);
10589 }
10590 else
10591 {
10593 }
10594 }
10595 else if (item.IsMagazine())
10596 {
10597 Magazine mag = Magazine.Cast(item);
10598 if (quantity >= 0)
10599 {
10600 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10601 }
10602 else
10603 {
10605 }
10606
10607 }
10608 else
10609 {
10610 if (quantity >= 0)
10611 {
10612 item.SetQuantityNormalized(quantity, false);
10613 }
10614 else
10615 {
10617 }
10618
10619 }
10620 }
10621}
10622
10623#ifdef DEVELOPER
10625#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.