5713{
5715 {
5716 return true;
5717 }
5718};
5719
5720
5721
5723{
5727
5729
5732
5733
5734
5735
5736
5745
5751
5756
5761
5782 protected bool m_IsResultOfSplit
5783
5785
5790
5791
5792
5794
5798
5799
5800
5802
5805
5806
5807
5813
5814
5822
5825
5826
5828
5829
5831
5832
5837
5838
5843
5844
5846
5847
5849 {
5854
5855 if (!
GetGame().IsDedicatedServer())
5856 {
5858 {
5860
5862 {
5864 }
5865 }
5866
5869 }
5870
5871 m_OldLocation = null;
5872
5874 {
5876 }
5877
5878 if (ConfigIsExisting("headSelectionsToHide"))
5879 {
5882 }
5883
5885 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5886 {
5888 }
5889
5891
5892 m_IsResultOfSplit = false;
5893
5895 }
5896
5898 {
5899 super.InitItemVariables();
5900
5906 m_Count = ConfigGetInt(
"count");
5907
5910
5915
5918
5923
5935
5939
5940
5943 if (ConfigIsExisting("canBeSplit"))
5944 {
5947 }
5948
5950 if (ConfigIsExisting("itemBehaviour"))
5952
5953
5956 RegisterNetSyncVariableInt("m_VarLiquidType");
5957 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5958
5959 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5960 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5961 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5962
5963 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5964 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5965 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5966 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5967
5968 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5969 RegisterNetSyncVariableBool("m_IsTakeable");
5970 RegisterNetSyncVariableBool("m_IsHologram");
5971
5974 {
5977 }
5978
5980
5982 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5984
5985 }
5986
5988 {
5990 }
5991
5993 {
5996 {
6001 }
6002 }
6003
6004 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
6005 {
6007 {
6010 }
6011
6013 }
6014
6016 {
6022 }
6023
6025
6027 {
6029
6030 if (!action)
6031 {
6032 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
6033 return;
6034 }
6035
6037 if (!ai)
6038 {
6040 return;
6041 }
6042
6044 if (!action_array)
6045 {
6046 action_array = new array<ActionBase_Basic>;
6048 }
6049 if (LogManager.IsActionLogEnable())
6050 {
6051 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6052 }
6053
6054 if (action_array.Find(action) != -1)
6055 {
6056 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6057 }
6058 else
6059 {
6060 action_array.Insert(action);
6061 }
6062 }
6063
6065 {
6067 ActionBase action = player.GetActionManager().GetAction(actionName);
6070
6071 if (action_array)
6072 {
6073 action_array.RemoveItem(action);
6074 }
6075 }
6076
6077
6078
6080 {
6081 ActionOverrideData overrideData = new ActionOverrideData();
6085
6087 if (!actionMap)
6088 {
6091 }
6092
6093 actionMap.Insert(this.
Type(), overrideData);
6094
6095 }
6096
6098
6100
6101
6103 {
6106
6109
6110 string config_to_search = "CfgVehicles";
6111 string muzzle_owner_config;
6112
6114 {
6115 if (IsInherited(Weapon))
6116 config_to_search = "CfgWeapons";
6117
6118 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6119
6120 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6121
6123
6124 if (config_OnFire_subclass_count > 0)
6125 {
6126 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6127
6128 for (int i = 0; i < config_OnFire_subclass_count; i++)
6129 {
6130 string particle_class = "";
6132 string config_OnFire_entry = config_OnFire_class + particle_class;
6133 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6134 WPOF_array.Insert(WPOF);
6135 }
6136
6137
6139 }
6140 }
6141
6143 {
6144 config_to_search = "CfgWeapons";
6145 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6146
6147 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6148
6150
6151 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6152 {
6153 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6154
6155 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6156 {
6157 string particle_class2 = "";
6159 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6160 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6161 WPOBE_array.Insert(WPOBE);
6162 }
6163
6164
6166 }
6167 }
6168 }
6169
6170
6172 {
6175
6177 {
6178 string config_to_search = "CfgVehicles";
6179
6180 if (IsInherited(Weapon))
6181 config_to_search = "CfgWeapons";
6182
6183 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6184 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6185
6186 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6187 {
6188
6190
6192 {
6194 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6196 return;
6197 }
6198
6201
6202
6203
6205 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6206
6207 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6208 {
6209 string particle_class = "";
6211 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6213
6214 if (entry_type == CT_CLASS)
6215 {
6216 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6217 WPOOH_array.Insert(WPOF);
6218 }
6219 }
6220
6221
6223 }
6224 }
6225 }
6226
6228 {
6230 }
6231
6233 {
6235 {
6237
6240
6243
6244 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6245 }
6246 }
6247
6249 {
6251 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6252
6254 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6255
6257 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6258
6260 {
6262 }
6263 }
6264
6266 {
6268 }
6269
6271 {
6274 else
6276
6278 {
6281 }
6282 else
6283 {
6286
6289 }
6290
6292 }
6293
6295 {
6297 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6298 }
6299
6301 {
6303 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6305 }
6306
6308 {
6310 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6311 }
6312
6314 {
6317
6318 OverheatingParticle OP = new OverheatingParticle();
6323
6325 }
6326
6328 {
6331
6332 return -1;
6333 }
6334
6336 {
6338 {
6341
6342 for (int i = count; i > 0; --i)
6343 {
6344 int id = i - 1;
6347
6350
6351 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6352 {
6353 if (p)
6354 {
6357 }
6358 }
6359 }
6360 }
6361 }
6362
6364 {
6366 {
6368 {
6369 int id = i - 1;
6371
6372 if (OP)
6373 {
6375
6376 if (p)
6377 {
6379 }
6380
6381 delete OP;
6382 }
6383 }
6384
6387 }
6388 }
6389
6392 {
6393 return 0.0;
6394 }
6395
6396
6398 {
6399 return 250;
6400 }
6401
6403 {
6404 return 0;
6405 }
6406
6409 {
6411 return true;
6412
6413 return false;
6414 }
6415
6418 {
6421
6423 {
6425 }
6426 else
6427 {
6428
6430 }
6431
6433 }
6434
6441 {
6442 return -1;
6443 }
6444
6445
6446
6447
6449 {
6451 {
6453 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6454
6455 if (r_index >= 0)
6456 {
6457 InventoryLocation r_il = new InventoryLocation;
6458 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6459
6460 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6463 {
6464 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6465 }
6467 {
6468 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6469 }
6470
6471 }
6472
6473 player.GetHumanInventory().ClearUserReservedLocation(this);
6474 }
6475
6478 }
6479
6480
6481
6482
6484 {
6485 return ItemBase.m_DebugActionsMask;
6486 }
6487
6489 {
6490 return ItemBase.m_DebugActionsMask & mask;
6491 }
6492
6494 {
6495 ItemBase.m_DebugActionsMask = mask;
6496 }
6497
6499 {
6500 ItemBase.m_DebugActionsMask |= mask;
6501 }
6502
6504 {
6505 ItemBase.m_DebugActionsMask &= ~mask;
6506 }
6507
6509 {
6511 {
6513 }
6514 else
6515 {
6517 }
6518 }
6519
6520
6522 {
6523 if (GetEconomyProfile())
6524 {
6525 float q_max = GetEconomyProfile().GetQuantityMax();
6526 if (q_max > 0)
6527 {
6528 float q_min = GetEconomyProfile().GetQuantityMin();
6529 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6530
6532 {
6533 ComponentEnergyManager comp = GetCompEM();
6535 {
6537 }
6538 }
6540 {
6542
6543 }
6544
6545 }
6546 }
6547 }
6548
6551 {
6552 EntityAI parent = GetHierarchyParent();
6553
6554 if (parent)
6555 {
6556 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6557 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6558 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6559 }
6560 }
6561
6564 {
6565 EntityAI parent = GetHierarchyParent();
6566
6567 if (parent)
6568 {
6569 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6570 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6571 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6572 }
6573 }
6574
6576 {
6577
6578
6579
6580
6582
6584 {
6585 if (ScriptInputUserData.CanStoreInputUserData())
6586 {
6587 ScriptInputUserData ctx = new ScriptInputUserData;
6593 ctx.
Write(use_stack_max);
6596
6598 {
6599 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6600 }
6601 }
6602 }
6603 else if (!
GetGame().IsMultiplayer())
6604 {
6606 }
6607 }
6608
6610 {
6612 }
6613
6615 {
6617 }
6618
6620 {
6622 }
6623
6625 {
6626
6627 return false;
6628 }
6629
6631 {
6632 return false;
6633 }
6634
6638 {
6639 return false;
6640 }
6641
6643 {
6644 return "";
6645 }
6646
6648
6650 {
6651 return false;
6652 }
6653
6655 {
6656 return true;
6657 }
6658
6659
6660
6662 {
6663 return true;
6664 }
6665
6667 {
6668 return true;
6669 }
6670
6672 {
6673 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6675 }
6676
6678 {
6680 }
6681
6683 {
6685 if (!is_being_placed)
6687 SetSynchDirty();
6688 }
6689
6690
6692
6694 {
6696 }
6697
6699 {
6701 }
6702
6704 {
6705 return 1;
6706 }
6707
6709 {
6710 return false;
6711 }
6712
6714 {
6716 SetSynchDirty();
6717 }
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6754 {
6755 super.OnMovedInsideCargo(container);
6756
6757 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6758 }
6759
6760 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6761 {
6762 super.EEItemLocationChanged(oldLoc,newLoc);
6763
6764 PlayerBase new_player = null;
6765 PlayerBase old_player = null;
6766
6767 if (newLoc.GetParent())
6768 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6769
6770 if (oldLoc.GetParent())
6771 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6772
6774 {
6775 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6776
6777 if (r_index >= 0)
6778 {
6779 InventoryLocation r_il = new InventoryLocation;
6780 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6781
6782 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6785 {
6786 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6787 }
6789 {
6790 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6791 }
6792
6793 }
6794 }
6795
6797 {
6798 if (new_player)
6799 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6800
6801 if (new_player == old_player)
6802 {
6803
6804 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6805 {
6807 {
6808 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6809 {
6810 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6811 }
6812 }
6813 else
6814 {
6815 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6816 }
6817 }
6818
6819 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6820 {
6821 int type = oldLoc.GetType();
6823 {
6824 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6825 }
6827 {
6828 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6829 }
6830 }
6831 if (!m_OldLocation)
6832 {
6833 m_OldLocation = new InventoryLocation;
6834 }
6835 m_OldLocation.Copy(oldLoc);
6836 }
6837 else
6838 {
6839 if (m_OldLocation)
6840 {
6841 m_OldLocation.Reset();
6842 }
6843 }
6844
6846 }
6847 else
6848 {
6849 if (new_player)
6850 {
6851 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6852 if (res_index >= 0)
6853 {
6854 InventoryLocation il = new InventoryLocation;
6855 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6857 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6860 {
6861 il.
GetParent().GetOnReleaseLock().Invoke(it);
6862 }
6864 {
6866 }
6867
6868 }
6869 }
6871 {
6872
6874 }
6875
6876 if (m_OldLocation)
6877 {
6878 m_OldLocation.Reset();
6879 }
6880 }
6881 }
6882
6883 override void EOnContact(IEntity other, Contact extra)
6884 {
6886 {
6887 int liquidType = -1;
6889 if (impactSpeed > 0.0)
6890 {
6892 #ifndef SERVER
6894 #else
6896 SetSynchDirty();
6897 #endif
6899 }
6900 }
6901
6902 #ifdef SERVER
6903 if (GetCompEM() && GetCompEM().IsPlugged())
6904 {
6905 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6906 GetCompEM().UnplugThis();
6907 }
6908 #endif
6909 }
6910
6912
6914 {
6916 }
6917
6919 {
6920
6921 }
6922
6924 {
6925 super.OnItemLocationChanged(old_owner, new_owner);
6926
6927 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6928 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6929
6930 if (!relatedPlayer && playerNew)
6931 relatedPlayer = playerNew;
6932
6933 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6934 {
6936 if (actionMgr)
6937 {
6938 ActionBase currentAction = actionMgr.GetRunningAction();
6939 if (currentAction)
6941 }
6942 }
6943
6944 Man ownerPlayerOld = null;
6945 Man ownerPlayerNew = null;
6946
6947 if (old_owner)
6948 {
6949 if (old_owner.
IsMan())
6950 {
6951 ownerPlayerOld = Man.Cast(old_owner);
6952 }
6953 else
6954 {
6955 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6956 }
6957 }
6958 else
6959 {
6961 {
6963
6964 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6965 {
6966 GetCompEM().UnplugThis();
6967 }
6968 }
6969 }
6970
6971 if (new_owner)
6972 {
6973 if (new_owner.
IsMan())
6974 {
6975 ownerPlayerNew = Man.Cast(new_owner);
6976 }
6977 else
6978 {
6979 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6980 }
6981 }
6982
6983 if (ownerPlayerOld != ownerPlayerNew)
6984 {
6985 if (ownerPlayerOld)
6986 {
6987 array<EntityAI> subItemsExit = new array<EntityAI>;
6989 for (int i = 0; i < subItemsExit.Count(); i++)
6990 {
6993 }
6994 }
6995
6996 if (ownerPlayerNew)
6997 {
6998 array<EntityAI> subItemsEnter = new array<EntityAI>;
7000 for (int j = 0; j < subItemsEnter.Count(); j++)
7001 {
7004 }
7005 }
7006 }
7007 else if (ownerPlayerNew != null)
7008 {
7009 PlayerBase nplayer;
7010 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
7011 {
7012 array<EntityAI> subItemsUpdate = new array<EntityAI>;
7014 for (int k = 0; k < subItemsUpdate.Count(); k++)
7015 {
7017 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
7018 }
7019 }
7020 }
7021
7022 if (old_owner)
7023 old_owner.OnChildItemRemoved(this);
7024 if (new_owner)
7025 new_owner.OnChildItemReceived(this);
7026 }
7027
7028
7030 {
7031 super.EEDelete(parent);
7032 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
7033 if (player)
7034 {
7036
7037 if (player.IsAlive())
7038 {
7039 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7040 if (r_index >= 0)
7041 {
7042 InventoryLocation r_il = new InventoryLocation;
7043 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7044
7045 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7048 {
7049 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7050 }
7052 {
7053 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7054 }
7055
7056 }
7057
7058 player.RemoveQuickBarEntityShortcut(this);
7059 }
7060 }
7061 }
7062
7064 {
7065 super.EEKilled(killer);
7066
7069 {
7070 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7071 {
7072 if (IsMagazine())
7073 {
7074 if (Magazine.Cast(this).GetAmmoCount() > 0)
7075 {
7077 }
7078 }
7079 else
7080 {
7082 }
7083 }
7084 }
7085 }
7086
7088 {
7089 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7090
7091 super.OnWasAttached(parent, slot_id);
7092
7095
7097 }
7098
7100 {
7101 super.OnWasDetached(parent, slot_id);
7102
7105 }
7106
7108 {
7109 int idx;
7112
7113 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7114 if (inventory_slots.Count() < 1)
7115 {
7116 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7117 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7118 }
7119 else
7120 {
7121 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7122 }
7123
7124 idx = inventory_slots.Find(slot);
7125 if (idx < 0)
7126 return "";
7127
7128 return attach_types.Get(idx);
7129 }
7130
7132 {
7133 int idx = -1;
7134 string slot;
7135
7138
7139 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7140 if (inventory_slots.Count() < 1)
7141 {
7142 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7143 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7144 }
7145 else
7146 {
7147 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7148 if (detach_types.Count() < 1)
7149 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7150 }
7151
7152 for (int i = 0; i < inventory_slots.Count(); i++)
7153 {
7154 slot = inventory_slots.Get(i);
7155 }
7156
7157 if (slot != "")
7158 {
7159 if (detach_types.Count() == 1)
7160 idx = 0;
7161 else
7162 idx = inventory_slots.Find(slot);
7163 }
7164 if (idx < 0)
7165 return "";
7166
7167 return detach_types.Get(idx);
7168 }
7169
7171 {
7172
7174
7175
7176 float min_time = 1;
7177 float max_time = 3;
7178 float delay = Math.RandomFloat(min_time, max_time);
7179
7180 explode_timer.Run(delay, this, "DoAmmoExplosion");
7181 }
7182
7184 {
7185 Magazine magazine = Magazine.Cast(this);
7186 int pop_sounds_count = 6;
7187 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7188
7189
7190 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7191 string sound_name = pop_sounds[ sound_idx ];
7193
7194
7195 magazine.ServerAddAmmoCount(-1);
7196
7197
7198 float min_temp_to_explode = 100;
7199
7200 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7201 {
7203 }
7204 }
7205
7206
7207 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7208 {
7209 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7210
7211 const int CHANCE_DAMAGE_CARGO = 4;
7212 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7213 const int CHANCE_DAMAGE_NOTHING = 2;
7214
7216 {
7217 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7218 int chances;
7219 int rnd;
7220
7221 if (GetInventory().GetCargo())
7222 {
7223 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7224 rnd = Math.RandomInt(0,chances);
7225
7226 if (rnd < CHANCE_DAMAGE_CARGO)
7227 {
7229 }
7230 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7231 {
7233 }
7234 }
7235 else
7236 {
7237 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7238 rnd = Math.RandomInt(0,chances);
7239
7240 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7241 {
7243 }
7244 }
7245 }
7246 }
7247
7249 {
7250 if (GetInventory().GetCargo())
7251 {
7252 int item_count = GetInventory().GetCargo().GetItemCount();
7253 if (item_count > 0)
7254 {
7255 int random_pick = Math.RandomInt(0, item_count);
7257 if (!item.IsExplosive())
7258 {
7259 item.AddHealth("","",damage);
7260 return true;
7261 }
7262 }
7263 }
7264 return false;
7265 }
7266
7268 {
7269 int attachment_count = GetInventory().AttachmentCount();
7270 if (attachment_count > 0)
7271 {
7272 int random_pick = Math.RandomInt(0, attachment_count);
7273 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7274 if (!attachment.IsExplosive())
7275 {
7276 attachment.AddHealth("","",damage);
7277 return true;
7278 }
7279 }
7280 return false;
7281 }
7282
7284 {
7286 }
7287
7289 {
7291 return GetInventory().CanRemoveEntity();
7292
7293 return false;
7294 }
7295
7297 {
7299 return;
7300
7302 {
7303 if (ScriptInputUserData.CanStoreInputUserData())
7304 {
7305 ScriptInputUserData ctx = new ScriptInputUserData;
7310 ctx.
Write(destination_entity);
7314 }
7315 }
7316 else if (!
GetGame().IsMultiplayer())
7317 {
7319 }
7320 }
7321
7323 {
7325 return;
7326
7327 float split_quantity_new;
7331 InventoryLocation loc = new InventoryLocation;
7332
7333 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7334 {
7336 split_quantity_new = stack_max;
7337 else
7339
7340 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7341 if (new_item)
7342 {
7343 new_item.SetResultOfSplit(true);
7344 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7346 new_item.SetQuantity(split_quantity_new);
7347 }
7348 }
7349 else if (destination_entity && slot_id == -1)
7350 {
7351 if (quantity > stack_max)
7352 split_quantity_new = stack_max;
7353 else
7354 split_quantity_new = quantity;
7355
7357 {
7360 }
7361
7362 if (new_item)
7363 {
7364 new_item.SetResultOfSplit(true);
7365 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7367 new_item.SetQuantity(split_quantity_new);
7368 }
7369 }
7370 else
7371 {
7372 if (stack_max != 0)
7373 {
7375 {
7377 }
7378
7379 if (split_quantity_new == 0)
7380 {
7381 if (!
GetGame().IsMultiplayer())
7382 player.PhysicalPredictiveDropItem(this);
7383 else
7384 player.ServerDropEntity(this);
7385 return;
7386 }
7387
7389
7390 if (new_item)
7391 {
7392 new_item.SetResultOfSplit(true);
7393 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7395 new_item.SetQuantity(stack_max);
7396 new_item.PlaceOnSurface();
7397 }
7398 }
7399 }
7400 }
7401
7403 {
7405 return;
7406
7407 float split_quantity_new;
7411 InventoryLocation loc = new InventoryLocation;
7412
7413 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7414 {
7416 split_quantity_new = stack_max;
7417 else
7419
7420 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
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 if (destination_entity && slot_id == -1)
7430 {
7431 if (quantity > stack_max)
7432 split_quantity_new = stack_max;
7433 else
7434 split_quantity_new = quantity;
7435
7437 {
7440 }
7441
7442 if (new_item)
7443 {
7444 new_item.SetResultOfSplit(true);
7445 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7447 new_item.SetQuantity(split_quantity_new);
7448 }
7449 }
7450 else
7451 {
7452 if (stack_max != 0)
7453 {
7455 {
7457 }
7458
7460
7461 if (new_item)
7462 {
7463 new_item.SetResultOfSplit(true);
7464 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7466 new_item.SetQuantity(stack_max);
7467 new_item.PlaceOnSurface();
7468 }
7469 }
7470 }
7471 }
7472
7474 {
7476 return;
7477
7479 {
7480 if (ScriptInputUserData.CanStoreInputUserData())
7481 {
7482 ScriptInputUserData ctx = new ScriptInputUserData;
7487 dst.WriteToContext(ctx);
7489 }
7490 }
7491 else if (!
GetGame().IsMultiplayer())
7492 {
7494 }
7495 }
7496
7498 {
7500 return;
7501
7503 {
7504 if (ScriptInputUserData.CanStoreInputUserData())
7505 {
7506 ScriptInputUserData ctx = new ScriptInputUserData;
7511 ctx.
Write(destination_entity);
7517 }
7518 }
7519 else if (!
GetGame().IsMultiplayer())
7520 {
7522 }
7523 }
7524
7526 {
7528 }
7529
7531 {
7533 return this;
7534
7536 float split_quantity_new;
7538 if (dst.IsValid())
7539 {
7540 int slot_id = dst.GetSlot();
7542
7543 if (quantity > stack_max)
7544 split_quantity_new = stack_max;
7545 else
7546 split_quantity_new = quantity;
7547
7549
7550 if (new_item)
7551 {
7552 new_item.SetResultOfSplit(true);
7553 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7556 }
7557
7558 return new_item;
7559 }
7560
7561 return null;
7562 }
7563
7565 {
7567 return;
7568
7570 float split_quantity_new;
7572 if (destination_entity)
7573 {
7575 if (quantity > stackable)
7576 split_quantity_new = stackable;
7577 else
7578 split_quantity_new = quantity;
7579
7580 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7581 if (new_item)
7582 {
7583 new_item.SetResultOfSplit(true);
7584 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7586 new_item.SetQuantity(split_quantity_new);
7587 }
7588 }
7589 }
7590
7592 {
7594 return;
7595
7597 {
7598 if (ScriptInputUserData.CanStoreInputUserData())
7599 {
7600 ScriptInputUserData ctx = new ScriptInputUserData;
7605 ItemBase destination_entity =
this;
7606 ctx.
Write(destination_entity);
7610 }
7611 }
7612 else if (!
GetGame().IsMultiplayer())
7613 {
7615 }
7616 }
7617
7619 {
7621 return;
7622
7624 float split_quantity_new;
7626 if (player)
7627 {
7629 if (quantity > stackable)
7630 split_quantity_new = stackable;
7631 else
7632 split_quantity_new = quantity;
7633
7634 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7635 new_item =
ItemBase.Cast(in_hands);
7636 if (new_item)
7637 {
7638 new_item.SetResultOfSplit(true);
7639 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7641 new_item.SetQuantity(split_quantity_new);
7642 }
7643 }
7644 }
7645
7647 {
7649 return;
7650
7652 float split_quantity_new = Math.Floor(quantity * 0.5);
7653
7655
7656 if (new_item)
7657 {
7658 if (new_item.GetQuantityMax() < split_quantity_new)
7659 {
7660 split_quantity_new = new_item.GetQuantityMax();
7661 }
7662
7663 new_item.SetResultOfSplit(true);
7664 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7665
7667 {
7670 }
7671 else
7672 {
7675 }
7676 }
7677 }
7678
7680 {
7682 return;
7683
7685 float split_quantity_new = Math.Floor(quantity / 2);
7686
7687 InventoryLocation invloc = new InventoryLocation;
7689
7691 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7692
7693 if (new_item)
7694 {
7695 if (new_item.GetQuantityMax() < split_quantity_new)
7696 {
7697 split_quantity_new = new_item.GetQuantityMax();
7698 }
7700 {
7703 }
7704 else
7705 {
7708 }
7709 }
7710 }
7711
7714 {
7715 SetWeightDirty();
7717
7718 if (parent)
7719 parent.OnAttachmentQuantityChangedEx(this, delta);
7720
7722 {
7724 {
7726 }
7728 {
7729 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7731 }
7732 }
7733
7734 }
7735
7738 {
7739
7740 }
7741
7744 {
7746 }
7747
7749 {
7750 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7751
7753 {
7754 if (newLevel == GameConstants.STATE_RUINED)
7755 {
7757 EntityAI parent = GetHierarchyParent();
7758 if (parent && parent.IsFireplace())
7759 {
7760 CargoBase cargo = GetInventory().GetCargo();
7761 if (cargo)
7762 {
7764 {
7766 }
7767 }
7768 }
7769 }
7770
7772 {
7773
7775 return;
7776 }
7777
7778 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7779 {
7781 }
7782 }
7783 }
7784
7785
7787 {
7788 super.OnRightClick();
7789
7791 {
7793 {
7794 if (ScriptInputUserData.CanStoreInputUserData())
7795 {
7796 vector m4[4];
7798
7799 EntityAI root = GetHierarchyRoot();
7800
7801 InventoryLocation dst = new InventoryLocation;
7803 {
7804 if (root)
7805 {
7806 root.GetTransform(m4);
7808 }
7809 else
7810 GetInventory().GetCurrentInventoryLocation(dst);
7811 }
7812 else
7813 {
7815
7816
7817 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7818 {
7819 if (root)
7820 {
7821 root.GetTransform(m4);
7823 }
7824 else
7825 GetInventory().GetCurrentInventoryLocation(dst);
7826 }
7827 else
7828 {
7829 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7830 }
7831 }
7832
7833 ScriptInputUserData ctx = new ScriptInputUserData;
7841 }
7842 }
7843 else if (!
GetGame().IsMultiplayer())
7844 {
7846 }
7847 }
7848 }
7849
7850 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7851 {
7852
7853 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7854 return false;
7855
7856 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7857 return false;
7858
7859
7861 return false;
7862
7863
7864 Magazine mag = Magazine.Cast(this);
7865 if (mag)
7866 {
7867 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7868 return false;
7869
7870 if (stack_max_limit)
7871 {
7872 Magazine other_mag = Magazine.Cast(other_item);
7873 if (other_item)
7874 {
7875 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7876 return false;
7877 }
7878
7879 }
7880 }
7881 else
7882 {
7883
7885 return false;
7886
7888 return false;
7889 }
7890
7891 PlayerBase player = null;
7892 if (CastTo(player, GetHierarchyRootPlayer()))
7893 {
7894 if (player.GetInventory().HasAttachment(this))
7895 return false;
7896
7897 if (player.IsItemsToDelete())
7898 return false;
7899 }
7900
7901 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7902 return false;
7903
7904 int slotID;
7906 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7907 return false;
7908
7909 return true;
7910 }
7911
7913 {
7915 }
7916
7918 {
7919 return m_IsResultOfSplit;
7920 }
7921
7923 {
7924 m_IsResultOfSplit = value;
7925 }
7926
7928 {
7930 }
7931
7933 {
7934 float other_item_quantity = other_item.GetQuantity();
7935 float this_free_space;
7936
7938
7940
7941 if (other_item_quantity > this_free_space)
7942 {
7943 return this_free_space;
7944 }
7945 else
7946 {
7947 return other_item_quantity;
7948 }
7949 }
7950
7952 {
7954 }
7955
7957 {
7959 return;
7960
7961 if (!IsMagazine() && other_item)
7962 {
7964 if (quantity_used != 0)
7965 {
7966 float hp1 = GetHealth01("","");
7967 float hp2 = other_item.GetHealth01("","");
7968 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7969 hpResult = hpResult / (
GetQuantity() + quantity_used);
7970
7971 hpResult *= GetMaxHealth();
7972 Math.Round(hpResult);
7973 SetHealth("", "Health", hpResult);
7974
7976 other_item.AddQuantity(-quantity_used);
7977 }
7978 }
7980 }
7981
7983 {
7984 #ifdef SERVER
7985 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7986 GetHierarchyParent().IncreaseLifetimeUp();
7987 #endif
7988 };
7989
7991 {
7992 PlayerBase p = PlayerBase.Cast(player);
7993
7994 array<int> recipesIds = p.m_Recipes;
7995 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7996 if (moduleRecipesManager)
7997 {
7998 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7999 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
8000 }
8001
8002 for (int i = 0;i < recipesIds.Count(); i++)
8003 {
8004 int key = recipesIds.Get(i);
8005 string recipeName = moduleRecipesManager.GetRecipeName(key);
8007 }
8008 }
8009
8010
8011 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
8012 {
8013 super.GetDebugActions(outputList);
8014
8015
8020
8021
8025
8029
8030
8033
8034
8036 {
8039 }
8040
8042
8045
8049 }
8050
8051
8052
8053
8055 {
8056 super.OnAction(action_id, player, ctx);
8057 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8058 {
8059 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8060 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8061 PlayerBase p = PlayerBase.Cast(player);
8062 if (
EActions.RECIPES_RANGE_START < 1000)
8063 {
8064 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8065 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8066 }
8067 }
8068 #ifndef SERVER
8069 else if (action_id ==
EActions.WATCH_PLAYER)
8070 {
8071 PluginDeveloper.SetDeveloperItemClientEx(player);
8072 }
8073 #endif
8075 {
8076 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8077 {
8078 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8079 OnDebugButtonPressServer(id + 1);
8080 }
8081
8082 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8083 {
8084 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8086 }
8087
8088 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8089 {
8090 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8092 }
8093
8094 else if (action_id ==
EActions.ADD_QUANTITY)
8095 {
8096 if (IsMagazine())
8097 {
8098 Magazine mag = Magazine.Cast(this);
8099 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8100 }
8101 else
8102 {
8104 }
8105
8106 if (m_EM)
8107 {
8108 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8109 }
8110
8111 }
8112
8113 else if (action_id ==
EActions.REMOVE_QUANTITY)
8114 {
8115 if (IsMagazine())
8116 {
8117 Magazine mag2 = Magazine.Cast(this);
8118 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8119 }
8120 else
8121 {
8123 }
8124 if (m_EM)
8125 {
8126 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8127 }
8128
8129 }
8130
8131 else if (action_id ==
EActions.SET_QUANTITY_0)
8132 {
8134
8135 if (m_EM)
8136 {
8137 m_EM.SetEnergy(0);
8138 }
8139 }
8140
8141 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8142 {
8144
8145 if (m_EM)
8146 {
8147 m_EM.SetEnergy(m_EM.GetEnergyMax());
8148 }
8149 }
8150
8151 else if (action_id ==
EActions.ADD_HEALTH)
8152 {
8153 AddHealth("","",GetMaxHealth("","Health")/5);
8154 }
8155 else if (action_id ==
EActions.REMOVE_HEALTH)
8156 {
8157 AddHealth("","",-GetMaxHealth("","Health")/5);
8158 }
8159 else if (action_id ==
EActions.DESTROY_HEALTH)
8160 {
8161 SetHealth01("","",0);
8162 }
8163 else if (action_id ==
EActions.WATCH_ITEM)
8164 {
8166 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8167 #ifdef DEVELOPER
8168 SetDebugDeveloper_item(this);
8169 #endif
8170 }
8171
8172 else if (action_id ==
EActions.ADD_TEMPERATURE)
8173 {
8174 AddTemperature(20);
8175
8176 }
8177
8178 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8179 {
8180 AddTemperature(-20);
8181
8182 }
8183
8184 else if (action_id ==
EActions.FLIP_FROZEN)
8185 {
8186 SetFrozen(!GetIsFrozen());
8187
8188 }
8189
8190 else if (action_id ==
EActions.ADD_WETNESS)
8191 {
8193
8194 }
8195
8196 else if (action_id ==
EActions.REMOVE_WETNESS)
8197 {
8199
8200 }
8201
8202 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8203 {
8206
8207
8208 }
8209
8210 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8211 {
8214 }
8215
8216 else if (action_id ==
EActions.MAKE_SPECIAL)
8217 {
8218 auto debugParams = DebugSpawnParams.WithPlayer(player);
8219 OnDebugSpawnEx(debugParams);
8220 }
8221
8222 else if (action_id ==
EActions.DELETE)
8223 {
8224 Delete();
8225 }
8226
8227 }
8228
8229
8230 return false;
8231 }
8232
8233
8234
8235
8239
8242
8243
8244
8246 {
8247 return false;
8248 }
8249
8250
8252 {
8253 return true;
8254 }
8255
8256
8258 {
8259 return true;
8260 }
8261
8262
8263
8265 {
8266 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8268 }
8269
8272 {
8273 return null;
8274 }
8275
8277 {
8278 return false;
8279 }
8280
8282 {
8283 return false;
8284 }
8285
8289
8290
8292 {
8293 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8294 return module_repairing.CanRepair(this, item_repair_kit);
8295 }
8296
8297
8298 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8299 {
8300 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8301 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8302 }
8303
8304
8306 {
8307
8308
8309
8310
8311
8312
8313
8314
8315 return 1;
8316 }
8317
8318
8319
8321 {
8323 }
8324
8325
8326
8328 {
8330 }
8331
8332
8341 {
8342 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8343
8344 if (player)
8345 {
8346 player.MessageStatus(text);
8347 }
8348 }
8349
8350
8359 {
8360 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8361
8362 if (player)
8363 {
8364 player.MessageAction(text);
8365 }
8366 }
8367
8368
8377 {
8378 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8379
8380 if (player)
8381 {
8382 player.MessageFriendly(text);
8383 }
8384 }
8385
8386
8395 {
8396 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8397
8398 if (player)
8399 {
8400 player.MessageImportant(text);
8401 }
8402 }
8403
8405 {
8406 return true;
8407 }
8408
8409
8410 override bool KindOf(
string tag)
8411 {
8412 bool found = false;
8413 string item_name = this.
GetType();
8416
8417 int array_size = item_tag_array.Count();
8418 for (int i = 0; i < array_size; i++)
8419 {
8420 if (item_tag_array.Get(i) == tag)
8421 {
8422 found = true;
8423 break;
8424 }
8425 }
8426 return found;
8427 }
8428
8429
8431 {
8432
8433 super.OnRPC(sender, rpc_type,ctx);
8434
8435
8436 switch (rpc_type)
8437 {
8438 #ifndef SERVER
8439 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8440 Param2<bool, string> p = new Param2<bool, string>(false, "");
8441
8443 return;
8444
8445 bool play = p.param1;
8446 string soundSet = p.param2;
8447
8448 if (play)
8449 {
8451 {
8453 {
8455 }
8456 }
8457 else
8458 {
8460 }
8461 }
8462 else
8463 {
8465 }
8466
8467 break;
8468 #endif
8469
8470 }
8471
8473 {
8475 }
8476 }
8477
8478
8479
8480
8482 {
8483 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8484 return plugin.GetID(
name);
8485 }
8486
8488 {
8489 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8490 return plugin.GetName(id);
8491 }
8492
8495 {
8496
8497
8498 int varFlags;
8499 if (!ctx.
Read(varFlags))
8500 return;
8501
8502 if (varFlags & ItemVariableFlags.FLOAT)
8503 {
8505 }
8506 }
8507
8509 {
8510
8511 super.SerializeNumericalVars(floats_out);
8512
8513
8514
8516 {
8518 }
8519
8521 {
8523 }
8524
8526 {
8528 }
8529
8531 {
8536 }
8537
8539 {
8541 }
8542 }
8543
8545 {
8546
8547 super.DeSerializeNumericalVars(floats);
8548
8549
8550 int index = 0;
8551 int mask = Math.Round(floats.Get(index));
8552
8553 index++;
8554
8556 {
8558 {
8560 }
8561 else
8562 {
8563 float quantity = floats.Get(index);
8565 }
8566 index++;
8567 }
8568
8570 {
8571 float wet = floats.Get(index);
8573 index++;
8574 }
8575
8577 {
8578 int liquidtype = Math.Round(floats.Get(index));
8580 index++;
8581 }
8582
8584 {
8586 index++;
8588 index++;
8590 index++;
8592 index++;
8593 }
8594
8596 {
8597 int cleanness = Math.Round(floats.Get(index));
8599 index++;
8600 }
8601 }
8602
8604 {
8605 super.WriteVarsToCTX(ctx);
8606
8607
8609 {
8611 }
8612
8614 {
8616 }
8617
8619 {
8621 }
8622
8624 {
8625 int r,g,b,a;
8631 }
8632
8634 {
8636 }
8637 }
8638
8640 {
8641 if (!super.ReadVarsFromCTX(ctx,version))
8642 return false;
8643
8644 int intValue;
8645 float value;
8646
8647 if (version < 140)
8648 {
8649 if (!ctx.
Read(intValue))
8650 return false;
8651
8652 m_VariablesMask = intValue;
8653 }
8654
8656 {
8657 if (!ctx.
Read(value))
8658 return false;
8659
8661 {
8663 }
8664 else
8665 {
8667 }
8668 }
8669
8670 if (version < 140)
8671 {
8673 {
8674 if (!ctx.
Read(value))
8675 return false;
8676 SetTemperatureDirect(value);
8677 }
8678 }
8679
8681 {
8682 if (!ctx.
Read(value))
8683 return false;
8685 }
8686
8688 {
8689 if (!ctx.
Read(intValue))
8690 return false;
8692 }
8693
8695 {
8696 int r,g,b,a;
8698 return false;
8700 return false;
8702 return false;
8704 return false;
8705
8707 }
8708
8710 {
8711 if (!ctx.
Read(intValue))
8712 return false;
8714 }
8715
8716 if (version >= 138 && version < 140)
8717 {
8719 {
8720 if (!ctx.
Read(intValue))
8721 return false;
8722 SetFrozen(intValue);
8723 }
8724 }
8725
8726 return true;
8727 }
8728
8729
8731 {
8734 {
8736 }
8737
8738 if (!super.OnStoreLoad(ctx, version))
8739 {
8741 return false;
8742 }
8743
8744 if (version >= 114)
8745 {
8746 bool hasQuickBarIndexSaved;
8747
8748 if (!ctx.
Read(hasQuickBarIndexSaved))
8749 {
8751 return false;
8752 }
8753
8754 if (hasQuickBarIndexSaved)
8755 {
8756 int itmQBIndex;
8757
8758
8759 if (!ctx.
Read(itmQBIndex))
8760 {
8762 return false;
8763 }
8764
8765 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8766 if (itmQBIndex != -1 && parentPlayer)
8767 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8768 }
8769 }
8770 else
8771 {
8772
8773 PlayerBase player;
8774 int itemQBIndex;
8775 if (version ==
int.
MAX)
8776 {
8777 if (!ctx.
Read(itemQBIndex))
8778 {
8780 return false;
8781 }
8782 }
8783 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8784 {
8785
8786 if (!ctx.
Read(itemQBIndex))
8787 {
8789 return false;
8790 }
8791 if (itemQBIndex != -1 && player)
8792 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8793 }
8794 }
8795
8796 if (version < 140)
8797 {
8798
8799 if (!LoadVariables(ctx, version))
8800 {
8802 return false;
8803 }
8804 }
8805
8806
8808 {
8810 return false;
8811 }
8812 if (version >= 132)
8813 {
8815 if (raib)
8816 {
8818 {
8820 return false;
8821 }
8822 }
8823 }
8824
8826 return true;
8827 }
8828
8829
8830
8832 {
8833 super.OnStoreSave(ctx);
8834
8835 PlayerBase player;
8836 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8837 {
8839
8840 int itemQBIndex = -1;
8841 itemQBIndex = player.FindQuickBarEntityIndex(this);
8842 ctx.
Write(itemQBIndex);
8843 }
8844 else
8845 {
8847 }
8848
8850
8852 if (raib)
8853 {
8855 }
8856 }
8857
8858
8860 {
8861 super.AfterStoreLoad();
8862
8864 {
8866 }
8867
8869 {
8872 }
8873 }
8874
8876 {
8877 super.EEOnAfterLoad();
8878
8880 {
8882 }
8883
8886 }
8887
8889 {
8890 return false;
8891 }
8892
8893
8894
8896 {
8898 {
8899 #ifdef PLATFORM_CONSOLE
8900
8902 {
8904 if (menu)
8905 {
8907 }
8908 }
8909 #endif
8910 }
8911
8913 {
8916 }
8917
8919 {
8920 SetWeightDirty();
8922 }
8924 {
8927 }
8928
8930 {
8933 }
8935 {
8938 }
8939
8940 super.OnVariablesSynchronized();
8941 }
8942
8943
8944
8946 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8947 {
8948 if (!IsServerCheck(allow_client))
8949 return false;
8950
8952 return false;
8953
8956
8957 if (value <= (min + 0.001))
8958 value = min;
8959
8960 if (value == min)
8961 {
8962 if (destroy_config)
8963 {
8964 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8965 if (dstr)
8966 {
8968 this.Delete();
8969 return true;
8970 }
8971 }
8972 else if (destroy_forced)
8973 {
8975 this.Delete();
8976 return true;
8977 }
8978
8980 }
8981
8984
8986 {
8988
8989 if (delta)
8991 }
8992
8994
8995 return false;
8996 }
8997
8998
9000 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
9001 {
9003 }
9004
9006 {
9009 }
9010
9012 {
9015 }
9016
9019 {
9020 float value_clamped = Math.Clamp(value, 0, 1);
9022 SetQuantity(result, destroy_config, destroy_forced);
9023 }
9024
9025
9028 {
9030 }
9031
9033 {
9035 }
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9047 {
9048 int slot = -1;
9049 if (GetInventory())
9050 {
9051 InventoryLocation il = new InventoryLocation;
9052 GetInventory().GetCurrentInventoryLocation(il);
9054 }
9055
9057 }
9058
9060 {
9061 float quantity_max = 0;
9062
9064 {
9065 if (attSlotID != -1)
9066 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9067
9068 if (quantity_max <= 0)
9070 }
9071
9072 if (quantity_max <= 0)
9074
9075 return quantity_max;
9076 }
9077
9079 {
9081 }
9082
9084 {
9086 }
9087
9088
9090 {
9092 }
9093
9095 {
9097 }
9098
9100 {
9102 }
9103
9104
9106 {
9107
9108 float weightEx = GetWeightEx();
9109 float special = GetInventoryAndCargoWeight();
9110 return weightEx - special;
9111 }
9112
9113
9115 {
9117 }
9118
9120 {
9122 {
9123 #ifdef DEVELOPER
9124 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9125 {
9126 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9128 }
9129 #endif
9130
9132 }
9133 else if (HasEnergyManager())
9134 {
9135 #ifdef DEVELOPER
9136 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9137 {
9138 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9139 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9140 }
9141 #endif
9142 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9143 }
9144 else
9145 {
9146 #ifdef DEVELOPER
9147 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9148 {
9149 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9150 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9151 }
9152 #endif
9153 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9154 }
9155 }
9156
9159 {
9160 int item_count = 0;
9162
9163 if (GetInventory().GetCargo() != NULL)
9164 {
9165 item_count = GetInventory().GetCargo().GetItemCount();
9166 }
9167
9168 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9169 {
9170 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9171 if (item)
9172 item_count += item.GetNumberOfItems();
9173 }
9174 return item_count;
9175 }
9176
9179 {
9180 float weight = 0;
9181 float wetness = 1;
9182 if (include_wetness)
9185 {
9186 weight = wetness * m_ConfigWeight;
9187 }
9189 {
9190 weight = 1;
9191 }
9192 return weight;
9193 }
9194
9195
9196
9198 {
9199 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9200 {
9201 GameInventory inv = GetInventory();
9202 array<EntityAI> items = new array<EntityAI>;
9204 for (int i = 0; i < items.Count(); i++)
9205 {
9207 if (item)
9208 {
9210 }
9211 }
9212 }
9213 }
9214
9215
9216
9217
9219 {
9220 float energy = 0;
9221 if (HasEnergyManager())
9222 {
9223 energy = GetCompEM().GetEnergy();
9224 }
9225 return energy;
9226 }
9227
9228
9230 {
9231 super.OnEnergyConsumed();
9232
9234 }
9235
9237 {
9238 super.OnEnergyAdded();
9239
9241 }
9242
9243
9245 {
9246 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9247 {
9249 {
9250 float energy_0to1 = GetCompEM().GetEnergy0To1();
9252 }
9253 }
9254 }
9255
9256
9258 {
9259 return ConfigGetFloat("heatIsolation");
9260 }
9261
9263 {
9265 }
9266
9268 {
9269 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9270 if (
GetGame().ConfigIsExisting(paramPath))
9272
9273 return 0.0;
9274 }
9275
9277 {
9278 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9279 if (
GetGame().ConfigIsExisting(paramPath))
9281
9282 return 0.0;
9283 }
9284
9285 override void SetWet(
float value,
bool allow_client =
false)
9286 {
9287 if (!IsServerCheck(allow_client))
9288 return;
9289
9292
9294
9295 m_VarWet = Math.Clamp(value, min, max);
9296
9298 {
9301 }
9302 }
9303
9304 override void AddWet(
float value)
9305 {
9307 }
9308
9310 {
9312 }
9313
9315 {
9317 }
9318
9320 {
9322 }
9323
9325 {
9327 }
9328
9330 {
9332 }
9333
9335 {
9338 if (newLevel != oldLevel)
9339 {
9341 }
9342 }
9343
9345 {
9346 SetWeightDirty();
9347 }
9348
9350 {
9351 return GetWetLevelInternal(
m_VarWet);
9352 }
9353
9354
9355
9357 {
9359 }
9360
9362 {
9364 }
9365
9367 {
9369 }
9370
9372 {
9374 }
9375
9376
9377
9379 {
9380 if (ConfigIsExisting("itemModelLength"))
9381 {
9382 return ConfigGetFloat("itemModelLength");
9383 }
9384 return 0;
9385 }
9386
9388 {
9389 if (ConfigIsExisting("itemAttachOffset"))
9390 {
9391 return ConfigGetFloat("itemAttachOffset");
9392 }
9393 return 0;
9394 }
9395
9396 override void SetCleanness(
int value,
bool allow_client =
false)
9397 {
9398 if (!IsServerCheck(allow_client))
9399 return;
9400
9402
9404
9407 }
9408
9410 {
9412 }
9413
9415 {
9416 return true;
9417 }
9418
9419
9420
9421
9423 {
9425 }
9426
9428 {
9430 }
9431
9432
9433
9434
9435 override void SetColor(
int r,
int g,
int b,
int a)
9436 {
9442 }
9444 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9445 {
9450 }
9451
9453 {
9455 }
9456
9459 {
9460 int r,g,b,a;
9462 r = r/255;
9463 g = g/255;
9464 b = b/255;
9465 a = a/255;
9466 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9467 }
9468
9469
9470
9471 override void SetLiquidType(
int value,
bool allow_client =
false)
9472 {
9473 if (!IsServerCheck(allow_client))
9474 return;
9475
9480 }
9481
9483 {
9484 return ConfigGetInt("varLiquidTypeInit");
9485 }
9486
9488 {
9490 }
9491
9493 {
9495 SetFrozen(false);
9496 }
9497
9500 {
9501 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9502 }
9503
9504
9507 {
9508 PlayerBase nplayer;
9509 if (PlayerBase.CastTo(nplayer, player))
9510 {
9512
9513 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9514 }
9515 }
9516
9517
9520 {
9521 PlayerBase nplayer;
9522 if (PlayerBase.CastTo(nplayer,player))
9523 {
9524
9525 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9526
9527 }
9528
9529
9530 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9531
9532
9533 if (HasEnergyManager())
9534 {
9535 GetCompEM().UpdatePlugState();
9536 }
9537 }
9538
9539
9541 {
9542 super.OnPlacementStarted(player);
9543
9545 }
9546
9547 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9548 {
9550 {
9551 m_AdminLog.OnPlacementComplete(player,
this);
9552 }
9553
9554 super.OnPlacementComplete(player, position, orientation);
9555 }
9556
9557
9558
9559
9560
9562 {
9564 {
9565 return true;
9566 }
9567 else
9568 {
9569 return false;
9570 }
9571 }
9572
9573
9575 {
9577 {
9579 }
9580 }
9581
9582
9584 {
9586 }
9587
9589 {
9591 }
9592
9593 override void InsertAgent(
int agent,
float count = 1)
9594 {
9595 if (count < 1)
9596 return;
9597
9599 }
9600
9603 {
9605 }
9606
9607
9609 {
9611 }
9612
9613
9614
9615
9616
9617
9618
9619
9620
9621
9622
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
9655 {
9657 return false;
9658 return true;
9659 }
9660
9662 {
9663
9665 }
9666
9667
9670 {
9671 super.CheckForRoofLimited(timeTresholdMS);
9672
9674 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9675 {
9676 m_PreviousRoofTestTime = time;
9677 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9678 }
9679 }
9680
9681
9683 {
9685 {
9686 return 0;
9687 }
9688
9689 if (GetInventory().GetAttachmentSlotsCount() != 0)
9690 {
9691 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9692 if (filter)
9693 return filter.GetProtectionLevel(type, false, system);
9694 else
9695 return 0;
9696 }
9697
9698 string subclassPath, entryName;
9699
9700 switch (type)
9701 {
9703 entryName = "biological";
9704 break;
9706 entryName = "chemical";
9707 break;
9708 default:
9709 entryName = "biological";
9710 break;
9711 }
9712
9713 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9714
9716 }
9717
9718
9719
9722 {
9723 if (!IsMagazine())
9725
9727 }
9728
9729
9730
9731
9732
9737 {
9738 return true;
9739 }
9740
9742 {
9744 }
9745
9746
9747
9748
9749
9751 {
9752 if (parent)
9753 {
9754 if (parent.IsInherited(DayZInfected))
9755 return true;
9756
9757 if (!parent.IsRuined())
9758 return true;
9759 }
9760
9761 return true;
9762 }
9763
9765 {
9766 if (!super.CanPutAsAttachment(parent))
9767 {
9768 return false;
9769 }
9770
9771 if (!IsRuined() && !parent.IsRuined())
9772 {
9773 return true;
9774 }
9775
9776 return false;
9777 }
9778
9780 {
9781
9782
9783
9784
9785 return super.CanReceiveItemIntoCargo(item);
9786 }
9787
9789 {
9790
9791
9792
9793
9794 GameInventory attachmentInv = attachment.GetInventory();
9796 {
9797 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9798 return false;
9799 }
9800
9801 InventoryLocation loc = new InventoryLocation();
9802 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9803 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9804 return false;
9805
9806 return super.CanReceiveAttachment(attachment, slotId);
9807 }
9808
9810 {
9811 if (!super.CanReleaseAttachment(attachment))
9812 return false;
9813
9814 return GetInventory().AreChildrenAccessible();
9815 }
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9838 {
9839 int id = muzzle_owner.GetMuzzleID();
9840 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9841
9842 if (WPOF_array)
9843 {
9844 for (int i = 0; i < WPOF_array.Count(); i++)
9845 {
9846 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9847
9848 if (WPOF)
9849 {
9850 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9851 }
9852 }
9853 }
9854 }
9855
9856
9858 {
9859 int id = muzzle_owner.GetMuzzleID();
9861
9862 if (WPOBE_array)
9863 {
9864 for (int i = 0; i < WPOBE_array.Count(); i++)
9865 {
9866 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9867
9868 if (WPOBE)
9869 {
9870 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9871 }
9872 }
9873 }
9874 }
9875
9876
9878 {
9879 int id = muzzle_owner.GetMuzzleID();
9880 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9881
9882 if (WPOOH_array)
9883 {
9884 for (int i = 0; i < WPOOH_array.Count(); i++)
9885 {
9886 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9887
9888 if (WPOOH)
9889 {
9890 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9891 }
9892 }
9893 }
9894 }
9895
9896
9898 {
9899 int id = muzzle_owner.GetMuzzleID();
9900 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9901
9902 if (WPOOH_array)
9903 {
9904 for (int i = 0; i < WPOOH_array.Count(); i++)
9905 {
9906 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9907
9908 if (WPOOH)
9909 {
9910 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9911 }
9912 }
9913 }
9914 }
9915
9916
9918 {
9919 int id = muzzle_owner.GetMuzzleID();
9920 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9921
9922 if (WPOOH_array)
9923 {
9924 for (int i = 0; i < WPOOH_array.Count(); i++)
9925 {
9926 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9927
9928 if (WPOOH)
9929 {
9930 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9931 }
9932 }
9933 }
9934 }
9935
9936
9937
9939 {
9941 {
9942 return true;
9943 }
9944
9945 return false;
9946 }
9947
9949 {
9951 {
9952 return true;
9953 }
9954
9955 return false;
9956 }
9957
9959 {
9961 {
9962 return true;
9963 }
9964
9965 return false;
9966 }
9967
9969 {
9970 return false;
9971 }
9972
9975 {
9976 return UATimeSpent.DEFAULT_DEPLOY;
9977 }
9978
9979
9980
9981
9983 {
9985 SetSynchDirty();
9986 }
9987
9989 {
9991 }
9992
9993
9995 {
9996 return false;
9997 }
9998
10001 {
10002 string att_type = "None";
10003
10004 if (ConfigIsExisting("soundAttType"))
10005 {
10006 att_type = ConfigGetString("soundAttType");
10007 }
10008
10010 }
10011
10013 {
10015 }
10016
10017
10018
10019
10020
10024
10026 {
10029
10031 }
10032
10033
10035 {
10037 return;
10038
10040
10043
10046
10047 SoundParameters params = new SoundParameters();
10051 }
10052
10053
10055 {
10057 return;
10058
10060 SetSynchDirty();
10061
10064 }
10065
10066
10068 {
10070 return;
10071
10073 SetSynchDirty();
10074
10077 }
10078
10080 {
10082 }
10083
10085 {
10087 }
10088
10091 {
10092 if (!
GetGame().IsDedicatedServer())
10093 {
10094 if (ConfigIsExisting("attachSoundSet"))
10095 {
10096 string cfg_path = "";
10097 string soundset = "";
10098 string type_name =
GetType();
10099
10102 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10103 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10104
10105 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10106 {
10107 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10108 {
10109 if (cfg_slot_array[i] == slot_type)
10110 {
10111 soundset = cfg_soundset_array[i];
10112 break;
10113 }
10114 }
10115 }
10116
10117 if (soundset != "")
10118 {
10119 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10121 }
10122 }
10123 }
10124 }
10125
10127 {
10128
10129 }
10130
10131 void OnApply(PlayerBase player);
10132
10134 {
10135 return 1.0;
10136 };
10137
10139 {
10141 }
10142
10144 {
10146 }
10147
10149
10151 {
10152 SetDynamicPhysicsLifeTime(0.01);
10154 }
10155
10157 {
10158 array<string> zone_names = new array<string>;
10159 GetDamageZones(zone_names);
10160 for (int i = 0; i < zone_names.Count(); i++)
10161 {
10162 SetHealthMax(zone_names.Get(i),"Health");
10163 }
10164 SetHealthMax("","Health");
10165 }
10166
10169 {
10170 float global_health = GetHealth01("","Health");
10171 array<string> zones = new array<string>;
10172 GetDamageZones(zones);
10173
10174 for (int i = 0; i < zones.Count(); i++)
10175 {
10176 SetHealth01(zones.Get(i),"Health",global_health);
10177 }
10178 }
10179
10182 {
10183 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10184 }
10185
10187 {
10188 if (!hasRootAsPlayer)
10189 {
10190 if (refParentIB)
10191 {
10192
10193 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10194 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10195
10196 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10197 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10198
10201 }
10202 else
10203 {
10204
10207 }
10208 }
10209 }
10210
10212 {
10214 {
10215 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10216 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10217 {
10218 float heatPermCoef = 1.0;
10220 while (ent)
10221 {
10222 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10223 ent = ent.GetHierarchyParent();
10224 }
10225
10226 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10227 }
10228 }
10229 }
10230
10232 {
10233
10234 EntityAI parent = GetHierarchyParent();
10235 if (!parent)
10236 {
10237 hasParent = false;
10238 hasRootAsPlayer = false;
10239 }
10240 else
10241 {
10242 hasParent = true;
10243 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10244 refParentIB =
ItemBase.Cast(parent);
10245 }
10246 }
10247
10248 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10249 {
10250
10251 }
10252
10254 {
10255
10256 return false;
10257 }
10258
10260 {
10261
10262
10263 return false;
10264 }
10265
10267 {
10268
10269 return false;
10270 }
10271
10274 {
10275 return !GetIsFrozen() &&
IsOpen();
10276 }
10277
10279 {
10280 bool hasParent = false, hasRootAsPlayer = false;
10282
10283 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10284 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10285
10286 if (wwtu || foodDecay)
10287 {
10291
10292 if (processWetness || processTemperature || processDecay)
10293 {
10295
10296 if (processWetness)
10297 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10298
10299 if (processTemperature)
10301
10302 if (processDecay)
10303 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10304 }
10305 }
10306 }
10307
10310 {
10312 }
10313
10315 {
10318
10319 return super.GetTemperatureFreezeThreshold();
10320 }
10321
10323 {
10326
10327 return super.GetTemperatureThawThreshold();
10328 }
10329
10331 {
10334
10335 return super.GetItemOverheatThreshold();
10336 }
10337
10339 {
10341 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10342
10343 return super.GetTemperatureFreezeTime();
10344 }
10345
10347 {
10349 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10350
10351 return super.GetTemperatureThawTime();
10352 }
10353
10358
10360 {
10361 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10362 }
10363
10365 {
10366 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10367 }
10368
10371 {
10373 }
10374
10376 {
10378 }
10379
10381 {
10383 }
10384
10387 {
10388 return null;
10389 }
10390
10393 {
10394 return false;
10395 }
10396
10398 {
10400 {
10403 if (!trg)
10404 {
10406 explosive = this;
10407 }
10408
10409 explosive.PairRemote(trg);
10411
10412 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10413 trg.SetPersistentPairID(persistentID);
10414 explosive.SetPersistentPairID(persistentID);
10415
10416 return true;
10417 }
10418 return false;
10419 }
10420
10423 {
10424 float ret = 1.0;
10427 ret *= GetHealth01();
10428
10429 return ret;
10430 }
10431
10432 #ifdef DEVELOPER
10433 override void SetDebugItem()
10434 {
10435 super.SetDebugItem();
10436 _itemBase = this;
10437 }
10438
10440 {
10441 string text = super.GetDebugText();
10442
10444 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10445
10446 return text;
10447 }
10448 #endif
10449
10451 {
10452 return true;
10453 }
10454
10456
10458
10460 {
10463 }
10464
10465
10473
10489}
10490
10492{
10494 if (entity)
10495 {
10496 bool is_item = entity.IsInherited(
ItemBase);
10497 if (is_item && full_quantity)
10498 {
10501 }
10502 }
10503 else
10504 {
10506 return NULL;
10507 }
10508 return entity;
10509}
10510
10512{
10513 if (item)
10514 {
10515 if (health > 0)
10516 item.SetHealth("", "", health);
10517
10518 if (item.CanHaveTemperature())
10519 {
10521 if (item.CanFreeze())
10522 item.SetFrozen(false);
10523 }
10524
10525 if (item.HasEnergyManager())
10526 {
10527 if (quantity >= 0)
10528 {
10529 item.GetCompEM().SetEnergy0To1(quantity);
10530 }
10531 else
10532 {
10534 }
10535 }
10536 else if (item.IsMagazine())
10537 {
10538 Magazine mag = Magazine.Cast(item);
10539 if (quantity >= 0)
10540 {
10541 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10542 }
10543 else
10544 {
10546 }
10547
10548 }
10549 else
10550 {
10551 if (quantity >= 0)
10552 {
10553 item.SetQuantityNormalized(quantity, false);
10554 }
10555 else
10556 {
10558 }
10559
10560 }
10561 }
10562}
10563
10564#ifdef DEVELOPER
10566#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.