5585{
5587 {
5588 return true;
5589 }
5590};
5591
5592
5593
5595{
5599
5601
5604
5605
5606
5607
5608
5617
5623
5628
5633
5654 protected bool m_IsResultOfSplit
5655
5657
5662
5663
5664
5666
5670
5671
5672
5674
5677
5678
5679
5685
5686
5694
5697
5698
5700
5701
5703
5704
5709
5710
5715
5716
5718
5719
5721 {
5726
5727 if (!
GetGame().IsDedicatedServer())
5728 {
5730 {
5732
5734 {
5736 }
5737 }
5738
5741 }
5742
5743 m_OldLocation = null;
5744
5746 {
5748 }
5749
5750 if (ConfigIsExisting("headSelectionsToHide"))
5751 {
5754 }
5755
5757 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5758 {
5760 }
5761
5763
5764 m_IsResultOfSplit = false;
5765
5767 }
5768
5770 {
5771 super.InitItemVariables();
5772
5778 m_Count = ConfigGetInt(
"count");
5779
5782
5787
5790
5795
5807
5811
5812
5815 if (ConfigIsExisting("canBeSplit"))
5816 {
5819 }
5820
5822 if (ConfigIsExisting("itemBehaviour"))
5824
5825
5828 RegisterNetSyncVariableInt("m_VarLiquidType");
5829 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5830
5831 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5832 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5833 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5834
5835 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5836 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5837 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5838 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5839
5840 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5841 RegisterNetSyncVariableBool("m_IsTakeable");
5842 RegisterNetSyncVariableBool("m_IsHologram");
5843
5846 {
5849 }
5850
5852
5854 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5856
5857 }
5858
5860 {
5862 }
5863
5865 {
5868 {
5873 }
5874 }
5875
5876 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5877 {
5879 {
5882 }
5883
5885 }
5886
5888 {
5894 }
5895
5897
5899 {
5901
5902 if (!action)
5903 {
5904 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5905 return;
5906 }
5907
5909 if (!ai)
5910 {
5912 return;
5913 }
5914
5916 if (!action_array)
5917 {
5918 action_array = new array<ActionBase_Basic>;
5920 }
5921 if (LogManager.IsActionLogEnable())
5922 {
5923 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5924 }
5925
5926 if (action_array.Find(action) != -1)
5927 {
5928 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5929 }
5930 else
5931 {
5932 action_array.Insert(action);
5933 }
5934 }
5935
5937 {
5939 ActionBase action = player.GetActionManager().GetAction(actionName);
5942
5943 if (action_array)
5944 {
5945 action_array.RemoveItem(action);
5946 }
5947 }
5948
5949
5950
5952 {
5953 ActionOverrideData overrideData = new ActionOverrideData();
5957
5959 if (!actionMap)
5960 {
5963 }
5964
5965 actionMap.Insert(this.
Type(), overrideData);
5966
5967 }
5968
5970
5972
5973
5975 {
5978
5981
5982 string config_to_search = "CfgVehicles";
5983 string muzzle_owner_config;
5984
5986 {
5987 if (IsInherited(Weapon))
5988 config_to_search = "CfgWeapons";
5989
5990 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5991
5992 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5993
5995
5996 if (config_OnFire_subclass_count > 0)
5997 {
5998 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5999
6000 for (int i = 0; i < config_OnFire_subclass_count; i++)
6001 {
6002 string particle_class = "";
6004 string config_OnFire_entry = config_OnFire_class + particle_class;
6005 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6006 WPOF_array.Insert(WPOF);
6007 }
6008
6009
6011 }
6012 }
6013
6015 {
6016 config_to_search = "CfgWeapons";
6017 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6018
6019 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6020
6022
6023 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6024 {
6025 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6026
6027 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6028 {
6029 string particle_class2 = "";
6031 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6032 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6033 WPOBE_array.Insert(WPOBE);
6034 }
6035
6036
6038 }
6039 }
6040 }
6041
6042
6044 {
6047
6049 {
6050 string config_to_search = "CfgVehicles";
6051
6052 if (IsInherited(Weapon))
6053 config_to_search = "CfgWeapons";
6054
6055 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6056 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6057
6058 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6059 {
6060
6062
6064 {
6066 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6068 return;
6069 }
6070
6073
6074
6075
6077 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6078
6079 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6080 {
6081 string particle_class = "";
6083 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6085
6086 if (entry_type == CT_CLASS)
6087 {
6088 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6089 WPOOH_array.Insert(WPOF);
6090 }
6091 }
6092
6093
6095 }
6096 }
6097 }
6098
6100 {
6102 }
6103
6105 {
6107 {
6109
6112
6115
6116 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6117 }
6118 }
6119
6121 {
6123 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6124
6126 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6127
6129 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6130
6132 {
6134 }
6135 }
6136
6138 {
6140 }
6141
6143 {
6146 else
6148
6150 {
6153 }
6154 else
6155 {
6158
6161 }
6162
6164 }
6165
6167 {
6169 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6170 }
6171
6173 {
6175 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6177 }
6178
6180 {
6182 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6183 }
6184
6186 {
6189
6190 OverheatingParticle OP = new OverheatingParticle();
6195
6197 }
6198
6200 {
6203
6204 return -1;
6205 }
6206
6208 {
6210 {
6213
6214 for (int i = count; i > 0; --i)
6215 {
6216 int id = i - 1;
6219
6222
6223 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6224 {
6225 if (p)
6226 {
6229 }
6230 }
6231 }
6232 }
6233 }
6234
6236 {
6238 {
6240 {
6241 int id = i - 1;
6243
6244 if (OP)
6245 {
6247
6248 if (p)
6249 {
6251 }
6252
6253 delete OP;
6254 }
6255 }
6256
6259 }
6260 }
6261
6264 {
6265 return 0.0;
6266 }
6267
6268
6270 {
6271 return 250;
6272 }
6273
6275 {
6276 return 0;
6277 }
6278
6281 {
6283 return true;
6284
6285 return false;
6286 }
6287
6290 {
6293
6295 {
6297 }
6298 else
6299 {
6300
6302 }
6303
6305 }
6306
6313 {
6314 return -1;
6315 }
6316
6317
6318
6319
6321 {
6323 {
6325 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6326
6327 if (r_index >= 0)
6328 {
6329 InventoryLocation r_il = new InventoryLocation;
6330 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6331
6332 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6335 {
6336 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6337 }
6339 {
6340 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6341 }
6342
6343 }
6344
6345 player.GetHumanInventory().ClearUserReservedLocation(this);
6346 }
6347
6350 }
6351
6352
6353
6354
6356 {
6357 return ItemBase.m_DebugActionsMask;
6358 }
6359
6361 {
6362 return ItemBase.m_DebugActionsMask & mask;
6363 }
6364
6366 {
6367 ItemBase.m_DebugActionsMask = mask;
6368 }
6369
6371 {
6372 ItemBase.m_DebugActionsMask |= mask;
6373 }
6374
6376 {
6377 ItemBase.m_DebugActionsMask &= ~mask;
6378 }
6379
6381 {
6383 {
6385 }
6386 else
6387 {
6389 }
6390 }
6391
6392
6394 {
6395 if (GetEconomyProfile())
6396 {
6397 float q_max = GetEconomyProfile().GetQuantityMax();
6398 if (q_max > 0)
6399 {
6400 float q_min = GetEconomyProfile().GetQuantityMin();
6401 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6402
6404 {
6405 ComponentEnergyManager comp = GetCompEM();
6407 {
6409 }
6410 }
6412 {
6414
6415 }
6416
6417 }
6418 }
6419 }
6420
6423 {
6424 EntityAI parent = GetHierarchyParent();
6425
6426 if (parent)
6427 {
6428 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6429 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6430 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6431 }
6432 }
6433
6436 {
6437 EntityAI parent = GetHierarchyParent();
6438
6439 if (parent)
6440 {
6441 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6442 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6443 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6444 }
6445 }
6446
6448 {
6449
6450
6451
6452
6454
6456 {
6457 if (ScriptInputUserData.CanStoreInputUserData())
6458 {
6459 ScriptInputUserData ctx = new ScriptInputUserData;
6465 ctx.
Write(use_stack_max);
6468
6470 {
6471 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6472 }
6473 }
6474 }
6475 else if (!
GetGame().IsMultiplayer())
6476 {
6478 }
6479 }
6480
6482 {
6484 }
6485
6487 {
6489 }
6490
6492 {
6494 }
6495
6497 {
6498
6499 return false;
6500 }
6501
6503 {
6504 return false;
6505 }
6506
6510 {
6511 return false;
6512 }
6513
6515 {
6516 return "";
6517 }
6518
6520
6522 {
6523 return false;
6524 }
6525
6527 {
6528 return true;
6529 }
6530
6531
6532
6534 {
6535 return true;
6536 }
6537
6539 {
6540 return true;
6541 }
6542
6544 {
6545 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6547 }
6548
6550 {
6552 }
6553
6555 {
6557 if (!is_being_placed)
6559 SetSynchDirty();
6560 }
6561
6562
6564
6566 {
6568 }
6569
6571 {
6573 }
6574
6576 {
6577 return 1;
6578 }
6579
6581 {
6582 return false;
6583 }
6584
6586 {
6588 SetSynchDirty();
6589 }
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6626 {
6627 super.OnMovedInsideCargo(container);
6628
6629 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6630 }
6631
6632 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6633 {
6634 super.EEItemLocationChanged(oldLoc,newLoc);
6635
6636 PlayerBase new_player = null;
6637 PlayerBase old_player = null;
6638
6639 if (newLoc.GetParent())
6640 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6641
6642 if (oldLoc.GetParent())
6643 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6644
6646 {
6647 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6648
6649 if (r_index >= 0)
6650 {
6651 InventoryLocation r_il = new InventoryLocation;
6652 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6653
6654 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6657 {
6658 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6659 }
6661 {
6662 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6663 }
6664
6665 }
6666 }
6667
6669 {
6670 if (new_player)
6671 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6672
6673 if (new_player == old_player)
6674 {
6675
6676 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6677 {
6679 {
6680 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6681 {
6682 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6683 }
6684 }
6685 else
6686 {
6687 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6688 }
6689 }
6690
6691 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6692 {
6693 int type = oldLoc.GetType();
6695 {
6696 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6697 }
6699 {
6700 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6701 }
6702 }
6703 if (!m_OldLocation)
6704 {
6705 m_OldLocation = new InventoryLocation;
6706 }
6707 m_OldLocation.Copy(oldLoc);
6708 }
6709 else
6710 {
6711 if (m_OldLocation)
6712 {
6713 m_OldLocation.Reset();
6714 }
6715 }
6716
6718 }
6719 else
6720 {
6721 if (new_player)
6722 {
6723 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6724 if (res_index >= 0)
6725 {
6726 InventoryLocation il = new InventoryLocation;
6727 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6729 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6732 {
6733 il.
GetParent().GetOnReleaseLock().Invoke(it);
6734 }
6736 {
6738 }
6739
6740 }
6741 }
6743 {
6744
6746 }
6747
6748 if (m_OldLocation)
6749 {
6750 m_OldLocation.Reset();
6751 }
6752 }
6753 }
6754
6755 override void EOnContact(IEntity other, Contact extra)
6756 {
6758 {
6759 int liquidType = -1;
6761 if (impactSpeed > 0.0)
6762 {
6764 #ifndef SERVER
6766 #else
6768 SetSynchDirty();
6769 #endif
6771 }
6772 }
6773
6774 #ifdef SERVER
6775 if (GetCompEM() && GetCompEM().IsPlugged())
6776 {
6777 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6778 GetCompEM().UnplugThis();
6779 }
6780 #endif
6781 }
6782
6784
6786 {
6788 }
6789
6791 {
6792
6793 }
6794
6796 {
6797 super.OnItemLocationChanged(old_owner, new_owner);
6798
6799 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6800 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6801
6802 if (!relatedPlayer && playerNew)
6803 relatedPlayer = playerNew;
6804
6805 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6806 {
6808 if (actionMgr)
6809 {
6810 ActionBase currentAction = actionMgr.GetRunningAction();
6811 if (currentAction)
6813 }
6814 }
6815
6816 Man ownerPlayerOld = null;
6817 Man ownerPlayerNew = null;
6818
6819 if (old_owner)
6820 {
6821 if (old_owner.
IsMan())
6822 {
6823 ownerPlayerOld = Man.Cast(old_owner);
6824 }
6825 else
6826 {
6827 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6828 }
6829 }
6830 else
6831 {
6833 {
6835
6836 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6837 {
6838 GetCompEM().UnplugThis();
6839 }
6840 }
6841 }
6842
6843 if (new_owner)
6844 {
6845 if (new_owner.
IsMan())
6846 {
6847 ownerPlayerNew = Man.Cast(new_owner);
6848 }
6849 else
6850 {
6851 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6852 }
6853 }
6854
6855 if (ownerPlayerOld != ownerPlayerNew)
6856 {
6857 if (ownerPlayerOld)
6858 {
6859 array<EntityAI> subItemsExit = new array<EntityAI>;
6861 for (int i = 0; i < subItemsExit.Count(); i++)
6862 {
6865 }
6866 }
6867
6868 if (ownerPlayerNew)
6869 {
6870 array<EntityAI> subItemsEnter = new array<EntityAI>;
6872 for (int j = 0; j < subItemsEnter.Count(); j++)
6873 {
6876 }
6877 }
6878 }
6879 else if (ownerPlayerNew != null)
6880 {
6881 PlayerBase nplayer;
6882 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6883 {
6884 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6886 for (int k = 0; k < subItemsUpdate.Count(); k++)
6887 {
6889 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6890 }
6891 }
6892 }
6893
6894 if (old_owner)
6895 old_owner.OnChildItemRemoved(this);
6896 if (new_owner)
6897 new_owner.OnChildItemReceived(this);
6898 }
6899
6900
6902 {
6903 super.EEDelete(parent);
6904 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6905 if (player)
6906 {
6908
6909 if (player.IsAlive())
6910 {
6911 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6912 if (r_index >= 0)
6913 {
6914 InventoryLocation r_il = new InventoryLocation;
6915 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6916
6917 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6920 {
6921 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6922 }
6924 {
6925 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6926 }
6927
6928 }
6929
6930 player.RemoveQuickBarEntityShortcut(this);
6931 }
6932 }
6933 }
6934
6936 {
6937 super.EEKilled(killer);
6938
6941 {
6942 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6943 {
6944 if (IsMagazine())
6945 {
6946 if (Magazine.Cast(this).GetAmmoCount() > 0)
6947 {
6949 }
6950 }
6951 else
6952 {
6954 }
6955 }
6956 }
6957 }
6958
6960 {
6961 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6962
6963 super.OnWasAttached(parent, slot_id);
6964
6967
6969 }
6970
6972 {
6973 super.OnWasDetached(parent, slot_id);
6974
6977 }
6978
6980 {
6981 int idx;
6984
6985 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6986 if (inventory_slots.Count() < 1)
6987 {
6988 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6989 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6990 }
6991 else
6992 {
6993 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6994 }
6995
6996 idx = inventory_slots.Find(slot);
6997 if (idx < 0)
6998 return "";
6999
7000 return attach_types.Get(idx);
7001 }
7002
7004 {
7005 int idx = -1;
7006 string slot;
7007
7010
7011 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7012 if (inventory_slots.Count() < 1)
7013 {
7014 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7015 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7016 }
7017 else
7018 {
7019 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7020 if (detach_types.Count() < 1)
7021 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7022 }
7023
7024 for (int i = 0; i < inventory_slots.Count(); i++)
7025 {
7026 slot = inventory_slots.Get(i);
7027 }
7028
7029 if (slot != "")
7030 {
7031 if (detach_types.Count() == 1)
7032 idx = 0;
7033 else
7034 idx = inventory_slots.Find(slot);
7035 }
7036 if (idx < 0)
7037 return "";
7038
7039 return detach_types.Get(idx);
7040 }
7041
7043 {
7044
7046
7047
7048 float min_time = 1;
7049 float max_time = 3;
7050 float delay = Math.RandomFloat(min_time, max_time);
7051
7052 explode_timer.Run(delay, this, "DoAmmoExplosion");
7053 }
7054
7056 {
7057 Magazine magazine = Magazine.Cast(this);
7058 int pop_sounds_count = 6;
7059 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7060
7061
7062 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7063 string sound_name = pop_sounds[ sound_idx ];
7065
7066
7067 magazine.ServerAddAmmoCount(-1);
7068
7069
7070 float min_temp_to_explode = 100;
7071
7072 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7073 {
7075 }
7076 }
7077
7078
7079 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7080 {
7081 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7082
7083 const int CHANCE_DAMAGE_CARGO = 4;
7084 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7085 const int CHANCE_DAMAGE_NOTHING = 2;
7086
7088 {
7089 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7090 int chances;
7091 int rnd;
7092
7093 if (GetInventory().GetCargo())
7094 {
7095 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7096 rnd = Math.RandomInt(0,chances);
7097
7098 if (rnd < CHANCE_DAMAGE_CARGO)
7099 {
7101 }
7102 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7103 {
7105 }
7106 }
7107 else
7108 {
7109 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7110 rnd = Math.RandomInt(0,chances);
7111
7112 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7113 {
7115 }
7116 }
7117 }
7118 }
7119
7121 {
7122 if (GetInventory().GetCargo())
7123 {
7124 int item_count = GetInventory().GetCargo().GetItemCount();
7125 if (item_count > 0)
7126 {
7127 int random_pick = Math.RandomInt(0, item_count);
7129 if (!item.IsExplosive())
7130 {
7131 item.AddHealth("","",damage);
7132 return true;
7133 }
7134 }
7135 }
7136 return false;
7137 }
7138
7140 {
7141 int attachment_count = GetInventory().AttachmentCount();
7142 if (attachment_count > 0)
7143 {
7144 int random_pick = Math.RandomInt(0, attachment_count);
7145 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7146 if (!attachment.IsExplosive())
7147 {
7148 attachment.AddHealth("","",damage);
7149 return true;
7150 }
7151 }
7152 return false;
7153 }
7154
7156 {
7158 }
7159
7161 {
7163 return GetInventory().CanRemoveEntity();
7164
7165 return false;
7166 }
7167
7169 {
7171 return;
7172
7174 {
7175 if (ScriptInputUserData.CanStoreInputUserData())
7176 {
7177 ScriptInputUserData ctx = new ScriptInputUserData;
7182 ctx.
Write(destination_entity);
7186 }
7187 }
7188 else if (!
GetGame().IsMultiplayer())
7189 {
7191 }
7192 }
7193
7195 {
7197 return;
7198
7199 float split_quantity_new;
7203 InventoryLocation loc = new InventoryLocation;
7204
7205 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7206 {
7208 split_quantity_new = stack_max;
7209 else
7211
7212 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7213 if (new_item)
7214 {
7215 new_item.SetResultOfSplit(true);
7216 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7218 new_item.SetQuantity(split_quantity_new);
7219 }
7220 }
7221 else if (destination_entity && slot_id == -1)
7222 {
7223 if (quantity > stack_max)
7224 split_quantity_new = stack_max;
7225 else
7226 split_quantity_new = quantity;
7227
7229 {
7232 }
7233
7234 if (new_item)
7235 {
7236 new_item.SetResultOfSplit(true);
7237 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7239 new_item.SetQuantity(split_quantity_new);
7240 }
7241 }
7242 else
7243 {
7244 if (stack_max != 0)
7245 {
7247 {
7249 }
7250
7251 if (split_quantity_new == 0)
7252 {
7253 if (!
GetGame().IsMultiplayer())
7254 player.PhysicalPredictiveDropItem(this);
7255 else
7256 player.ServerDropEntity(this);
7257 return;
7258 }
7259
7261
7262 if (new_item)
7263 {
7264 new_item.SetResultOfSplit(true);
7265 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7267 new_item.SetQuantity(stack_max);
7268 new_item.PlaceOnSurface();
7269 }
7270 }
7271 }
7272 }
7273
7275 {
7277 return;
7278
7279 float split_quantity_new;
7283 InventoryLocation loc = new InventoryLocation;
7284
7285 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7286 {
7288 split_quantity_new = stack_max;
7289 else
7291
7292 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7293 if (new_item)
7294 {
7295 new_item.SetResultOfSplit(true);
7296 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7298 new_item.SetQuantity(split_quantity_new);
7299 }
7300 }
7301 else if (destination_entity && slot_id == -1)
7302 {
7303 if (quantity > stack_max)
7304 split_quantity_new = stack_max;
7305 else
7306 split_quantity_new = quantity;
7307
7309 {
7312 }
7313
7314 if (new_item)
7315 {
7316 new_item.SetResultOfSplit(true);
7317 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7319 new_item.SetQuantity(split_quantity_new);
7320 }
7321 }
7322 else
7323 {
7324 if (stack_max != 0)
7325 {
7327 {
7329 }
7330
7332
7333 if (new_item)
7334 {
7335 new_item.SetResultOfSplit(true);
7336 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7338 new_item.SetQuantity(stack_max);
7339 new_item.PlaceOnSurface();
7340 }
7341 }
7342 }
7343 }
7344
7346 {
7348 return;
7349
7351 {
7352 if (ScriptInputUserData.CanStoreInputUserData())
7353 {
7354 ScriptInputUserData ctx = new ScriptInputUserData;
7359 dst.WriteToContext(ctx);
7361 }
7362 }
7363 else if (!
GetGame().IsMultiplayer())
7364 {
7366 }
7367 }
7368
7370 {
7372 return;
7373
7375 {
7376 if (ScriptInputUserData.CanStoreInputUserData())
7377 {
7378 ScriptInputUserData ctx = new ScriptInputUserData;
7383 ctx.
Write(destination_entity);
7389 }
7390 }
7391 else if (!
GetGame().IsMultiplayer())
7392 {
7394 }
7395 }
7396
7398 {
7400 }
7401
7403 {
7405 return this;
7406
7408 float split_quantity_new;
7410 if (dst.IsValid())
7411 {
7412 int slot_id = dst.GetSlot();
7414
7415 if (quantity > stack_max)
7416 split_quantity_new = stack_max;
7417 else
7418 split_quantity_new = quantity;
7419
7421
7422 if (new_item)
7423 {
7424 new_item.SetResultOfSplit(true);
7425 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7428 }
7429
7430 return new_item;
7431 }
7432
7433 return null;
7434 }
7435
7437 {
7439 return;
7440
7442 float split_quantity_new;
7444 if (destination_entity)
7445 {
7447 if (quantity > stackable)
7448 split_quantity_new = stackable;
7449 else
7450 split_quantity_new = quantity;
7451
7452 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7453 if (new_item)
7454 {
7455 new_item.SetResultOfSplit(true);
7456 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7458 new_item.SetQuantity(split_quantity_new);
7459 }
7460 }
7461 }
7462
7464 {
7466 return;
7467
7469 {
7470 if (ScriptInputUserData.CanStoreInputUserData())
7471 {
7472 ScriptInputUserData ctx = new ScriptInputUserData;
7477 ItemBase destination_entity =
this;
7478 ctx.
Write(destination_entity);
7482 }
7483 }
7484 else if (!
GetGame().IsMultiplayer())
7485 {
7487 }
7488 }
7489
7491 {
7493 return;
7494
7496 float split_quantity_new;
7498 if (player)
7499 {
7501 if (quantity > stackable)
7502 split_quantity_new = stackable;
7503 else
7504 split_quantity_new = quantity;
7505
7506 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7507 new_item =
ItemBase.Cast(in_hands);
7508 if (new_item)
7509 {
7510 new_item.SetResultOfSplit(true);
7511 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7513 new_item.SetQuantity(split_quantity_new);
7514 }
7515 }
7516 }
7517
7519 {
7521 return;
7522
7524 float split_quantity_new = Math.Floor(quantity * 0.5);
7525
7527
7528 if (new_item)
7529 {
7530 if (new_item.GetQuantityMax() < split_quantity_new)
7531 {
7532 split_quantity_new = new_item.GetQuantityMax();
7533 }
7534
7535 new_item.SetResultOfSplit(true);
7536 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7537
7539 {
7542 }
7543 else
7544 {
7547 }
7548 }
7549 }
7550
7552 {
7554 return;
7555
7557 float split_quantity_new = Math.Floor(quantity / 2);
7558
7559 InventoryLocation invloc = new InventoryLocation;
7561
7563 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7564
7565 if (new_item)
7566 {
7567 if (new_item.GetQuantityMax() < split_quantity_new)
7568 {
7569 split_quantity_new = new_item.GetQuantityMax();
7570 }
7572 {
7575 }
7576 else
7577 {
7580 }
7581 }
7582 }
7583
7586 {
7587 SetWeightDirty();
7589
7590 if (parent)
7591 parent.OnAttachmentQuantityChangedEx(this, delta);
7592
7594 {
7596 {
7598 }
7600 {
7601 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7603 }
7604 }
7605
7606 }
7607
7610 {
7611
7612 }
7613
7616 {
7618 }
7619
7621 {
7622 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7623
7625 {
7626 if (newLevel == GameConstants.STATE_RUINED)
7627 {
7629 EntityAI parent = GetHierarchyParent();
7630 if (parent && parent.IsFireplace())
7631 {
7632 CargoBase cargo = GetInventory().GetCargo();
7633 if (cargo)
7634 {
7636 {
7638 }
7639 }
7640 }
7641 }
7642
7644 {
7645
7647 return;
7648 }
7649
7650 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7651 {
7653 }
7654 }
7655 }
7656
7657
7659 {
7660 super.OnRightClick();
7661
7663 {
7665 {
7666 if (ScriptInputUserData.CanStoreInputUserData())
7667 {
7668 vector m4[4];
7670
7671 EntityAI root = GetHierarchyRoot();
7672
7673 InventoryLocation dst = new InventoryLocation;
7675 {
7676 if (root)
7677 {
7678 root.GetTransform(m4);
7680 }
7681 else
7682 GetInventory().GetCurrentInventoryLocation(dst);
7683 }
7684 else
7685 {
7687
7688
7689 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7690 {
7691 if (root)
7692 {
7693 root.GetTransform(m4);
7695 }
7696 else
7697 GetInventory().GetCurrentInventoryLocation(dst);
7698 }
7699 else
7700 {
7701 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7702 }
7703 }
7704
7705 ScriptInputUserData ctx = new ScriptInputUserData;
7713 }
7714 }
7715 else if (!
GetGame().IsMultiplayer())
7716 {
7718 }
7719 }
7720 }
7721
7722 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7723 {
7724
7725 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7726 return false;
7727
7728 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7729 return false;
7730
7731
7733 return false;
7734
7735
7736 Magazine mag = Magazine.Cast(this);
7737 if (mag)
7738 {
7739 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7740 return false;
7741
7742 if (stack_max_limit)
7743 {
7744 Magazine other_mag = Magazine.Cast(other_item);
7745 if (other_item)
7746 {
7747 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7748 return false;
7749 }
7750
7751 }
7752 }
7753 else
7754 {
7755
7757 return false;
7758
7760 return false;
7761 }
7762
7763 PlayerBase player = null;
7764 if (CastTo(player, GetHierarchyRootPlayer()))
7765 {
7766 if (player.GetInventory().HasAttachment(this))
7767 return false;
7768
7769 if (player.IsItemsToDelete())
7770 return false;
7771 }
7772
7773 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7774 return false;
7775
7776 int slotID;
7778 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7779 return false;
7780
7781 return true;
7782 }
7783
7785 {
7787 }
7788
7790 {
7791 return m_IsResultOfSplit;
7792 }
7793
7795 {
7796 m_IsResultOfSplit = value;
7797 }
7798
7800 {
7802 }
7803
7805 {
7806 float other_item_quantity = other_item.GetQuantity();
7807 float this_free_space;
7808
7810
7812
7813 if (other_item_quantity > this_free_space)
7814 {
7815 return this_free_space;
7816 }
7817 else
7818 {
7819 return other_item_quantity;
7820 }
7821 }
7822
7824 {
7826 }
7827
7829 {
7831 return;
7832
7833 if (!IsMagazine() && other_item)
7834 {
7836 if (quantity_used != 0)
7837 {
7838 float hp1 = GetHealth01("","");
7839 float hp2 = other_item.GetHealth01("","");
7840 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7841 hpResult = hpResult / (
GetQuantity() + quantity_used);
7842
7843 hpResult *= GetMaxHealth();
7844 Math.Round(hpResult);
7845 SetHealth("", "Health", hpResult);
7846
7848 other_item.AddQuantity(-quantity_used);
7849 }
7850 }
7852 }
7853
7855 {
7856 #ifdef SERVER
7857 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7858 GetHierarchyParent().IncreaseLifetimeUp();
7859 #endif
7860 };
7861
7863 {
7864 PlayerBase p = PlayerBase.Cast(player);
7865
7866 array<int> recipesIds = p.m_Recipes;
7867 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7868 if (moduleRecipesManager)
7869 {
7870 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7871 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7872 }
7873
7874 for (int i = 0;i < recipesIds.Count(); i++)
7875 {
7876 int key = recipesIds.Get(i);
7877 string recipeName = moduleRecipesManager.GetRecipeName(key);
7879 }
7880 }
7881
7882
7883 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7884 {
7885 super.GetDebugActions(outputList);
7886
7887
7892
7893
7897
7901
7902
7905
7906
7908 {
7911 }
7912
7914
7917
7921 }
7922
7923
7924
7925
7927 {
7928 super.OnAction(action_id, player, ctx);
7929 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7930 {
7931 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7932 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7933 PlayerBase p = PlayerBase.Cast(player);
7934 if (
EActions.RECIPES_RANGE_START < 1000)
7935 {
7936 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7937 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7938 }
7939 }
7940 #ifndef SERVER
7941 else if (action_id ==
EActions.WATCH_PLAYER)
7942 {
7943 PluginDeveloper.SetDeveloperItemClientEx(player);
7944 }
7945 #endif
7947 {
7948 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7949 {
7950 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7951 OnDebugButtonPressServer(id + 1);
7952 }
7953
7954 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7955 {
7956 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7958 }
7959
7960 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7961 {
7962 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7964 }
7965
7966 else if (action_id ==
EActions.ADD_QUANTITY)
7967 {
7968 if (IsMagazine())
7969 {
7970 Magazine mag = Magazine.Cast(this);
7971 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7972 }
7973 else
7974 {
7976 }
7977
7978 if (m_EM)
7979 {
7980 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7981 }
7982
7983 }
7984
7985 else if (action_id ==
EActions.REMOVE_QUANTITY)
7986 {
7987 if (IsMagazine())
7988 {
7989 Magazine mag2 = Magazine.Cast(this);
7990 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7991 }
7992 else
7993 {
7995 }
7996 if (m_EM)
7997 {
7998 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7999 }
8000
8001 }
8002
8003 else if (action_id ==
EActions.SET_QUANTITY_0)
8004 {
8006
8007 if (m_EM)
8008 {
8009 m_EM.SetEnergy(0);
8010 }
8011 }
8012
8013 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8014 {
8016
8017 if (m_EM)
8018 {
8019 m_EM.SetEnergy(m_EM.GetEnergyMax());
8020 }
8021 }
8022
8023 else if (action_id ==
EActions.ADD_HEALTH)
8024 {
8025 AddHealth("","",GetMaxHealth("","Health")/5);
8026 }
8027 else if (action_id ==
EActions.REMOVE_HEALTH)
8028 {
8029 AddHealth("","",-GetMaxHealth("","Health")/5);
8030 }
8031 else if (action_id ==
EActions.DESTROY_HEALTH)
8032 {
8033 SetHealth01("","",0);
8034 }
8035 else if (action_id ==
EActions.WATCH_ITEM)
8036 {
8038 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8039 #ifdef DEVELOPER
8040 SetDebugDeveloper_item(this);
8041 #endif
8042 }
8043
8044 else if (action_id ==
EActions.ADD_TEMPERATURE)
8045 {
8046 AddTemperature(20);
8047
8048 }
8049
8050 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8051 {
8052 AddTemperature(-20);
8053
8054 }
8055
8056 else if (action_id ==
EActions.FLIP_FROZEN)
8057 {
8058 SetFrozen(!GetIsFrozen());
8059
8060 }
8061
8062 else if (action_id ==
EActions.ADD_WETNESS)
8063 {
8065
8066 }
8067
8068 else if (action_id ==
EActions.REMOVE_WETNESS)
8069 {
8071
8072 }
8073
8074 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8075 {
8078
8079
8080 }
8081
8082 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8083 {
8086 }
8087
8088 else if (action_id ==
EActions.MAKE_SPECIAL)
8089 {
8090 auto debugParams = DebugSpawnParams.WithPlayer(player);
8091 OnDebugSpawnEx(debugParams);
8092 }
8093
8094 else if (action_id ==
EActions.DELETE)
8095 {
8096 Delete();
8097 }
8098
8099 }
8100
8101
8102 return false;
8103 }
8104
8105
8106
8107
8111
8114
8115
8116
8118 {
8119 return false;
8120 }
8121
8122
8124 {
8125 return true;
8126 }
8127
8128
8130 {
8131 return true;
8132 }
8133
8134
8135
8137 {
8138 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8140 }
8141
8144 {
8145 return null;
8146 }
8147
8149 {
8150 return false;
8151 }
8152
8154 {
8155 return false;
8156 }
8157
8161
8162
8164 {
8165 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8166 return module_repairing.CanRepair(this, item_repair_kit);
8167 }
8168
8169
8170 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8171 {
8172 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8173 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8174 }
8175
8176
8178 {
8179
8180
8181
8182
8183
8184
8185
8186
8187 return 1;
8188 }
8189
8190
8191
8193 {
8195 }
8196
8197
8198
8200 {
8202 }
8203
8204
8213 {
8214 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8215
8216 if (player)
8217 {
8218 player.MessageStatus(text);
8219 }
8220 }
8221
8222
8231 {
8232 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8233
8234 if (player)
8235 {
8236 player.MessageAction(text);
8237 }
8238 }
8239
8240
8249 {
8250 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8251
8252 if (player)
8253 {
8254 player.MessageFriendly(text);
8255 }
8256 }
8257
8258
8267 {
8268 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8269
8270 if (player)
8271 {
8272 player.MessageImportant(text);
8273 }
8274 }
8275
8277 {
8278 return true;
8279 }
8280
8281
8282 override bool KindOf(
string tag)
8283 {
8284 bool found = false;
8285 string item_name = this.
GetType();
8288
8289 int array_size = item_tag_array.Count();
8290 for (int i = 0; i < array_size; i++)
8291 {
8292 if (item_tag_array.Get(i) == tag)
8293 {
8294 found = true;
8295 break;
8296 }
8297 }
8298 return found;
8299 }
8300
8301
8303 {
8304
8305 super.OnRPC(sender, rpc_type,ctx);
8306
8307
8308 switch (rpc_type)
8309 {
8310 #ifndef SERVER
8311 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8312 Param2<bool, string> p = new Param2<bool, string>(false, "");
8313
8315 return;
8316
8317 bool play = p.param1;
8318 string soundSet = p.param2;
8319
8320 if (play)
8321 {
8323 {
8325 {
8327 }
8328 }
8329 else
8330 {
8332 }
8333 }
8334 else
8335 {
8337 }
8338
8339 break;
8340 #endif
8341
8342 }
8343
8345 {
8347 }
8348 }
8349
8350
8351
8352
8354 {
8355 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8356 return plugin.GetID(
name);
8357 }
8358
8360 {
8361 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8362 return plugin.GetName(id);
8363 }
8364
8367 {
8368
8369
8370 int varFlags;
8371 if (!ctx.
Read(varFlags))
8372 return;
8373
8374 if (varFlags & ItemVariableFlags.FLOAT)
8375 {
8377 }
8378 }
8379
8381 {
8382
8383 super.SerializeNumericalVars(floats_out);
8384
8385
8386
8388 {
8390 }
8391
8393 {
8395 }
8396
8398 {
8400 }
8401
8403 {
8408 }
8409
8411 {
8413 }
8414 }
8415
8417 {
8418
8419 super.DeSerializeNumericalVars(floats);
8420
8421
8422 int index = 0;
8423 int mask = Math.Round(floats.Get(index));
8424
8425 index++;
8426
8428 {
8430 {
8432 }
8433 else
8434 {
8435 float quantity = floats.Get(index);
8437 }
8438 index++;
8439 }
8440
8442 {
8443 float wet = floats.Get(index);
8445 index++;
8446 }
8447
8449 {
8450 int liquidtype = Math.Round(floats.Get(index));
8452 index++;
8453 }
8454
8456 {
8458 index++;
8460 index++;
8462 index++;
8464 index++;
8465 }
8466
8468 {
8469 int cleanness = Math.Round(floats.Get(index));
8471 index++;
8472 }
8473 }
8474
8476 {
8477 super.WriteVarsToCTX(ctx);
8478
8479
8481 {
8483 }
8484
8486 {
8488 }
8489
8491 {
8493 }
8494
8496 {
8497 int r,g,b,a;
8503 }
8504
8506 {
8508 }
8509 }
8510
8512 {
8513 if (!super.ReadVarsFromCTX(ctx,version))
8514 return false;
8515
8516 int intValue;
8517 float value;
8518
8519 if (version < 140)
8520 {
8521 if (!ctx.
Read(intValue))
8522 return false;
8523
8524 m_VariablesMask = intValue;
8525 }
8526
8528 {
8529 if (!ctx.
Read(value))
8530 return false;
8531
8533 {
8535 }
8536 else
8537 {
8539 }
8540 }
8541
8542 if (version < 140)
8543 {
8545 {
8546 if (!ctx.
Read(value))
8547 return false;
8548 SetTemperatureDirect(value);
8549 }
8550 }
8551
8553 {
8554 if (!ctx.
Read(value))
8555 return false;
8557 }
8558
8560 {
8561 if (!ctx.
Read(intValue))
8562 return false;
8564 }
8565
8567 {
8568 int r,g,b,a;
8570 return false;
8572 return false;
8574 return false;
8576 return false;
8577
8579 }
8580
8582 {
8583 if (!ctx.
Read(intValue))
8584 return false;
8586 }
8587
8588 if (version >= 138 && version < 140)
8589 {
8591 {
8592 if (!ctx.
Read(intValue))
8593 return false;
8594 SetFrozen(intValue);
8595 }
8596 }
8597
8598 return true;
8599 }
8600
8601
8603 {
8606 {
8608 }
8609
8610 if (!super.OnStoreLoad(ctx, version))
8611 {
8613 return false;
8614 }
8615
8616 if (version >= 114)
8617 {
8618 bool hasQuickBarIndexSaved;
8619
8620 if (!ctx.
Read(hasQuickBarIndexSaved))
8621 {
8623 return false;
8624 }
8625
8626 if (hasQuickBarIndexSaved)
8627 {
8628 int itmQBIndex;
8629
8630
8631 if (!ctx.
Read(itmQBIndex))
8632 {
8634 return false;
8635 }
8636
8637 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8638 if (itmQBIndex != -1 && parentPlayer)
8639 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8640 }
8641 }
8642 else
8643 {
8644
8645 PlayerBase player;
8646 int itemQBIndex;
8647 if (version ==
int.
MAX)
8648 {
8649 if (!ctx.
Read(itemQBIndex))
8650 {
8652 return false;
8653 }
8654 }
8655 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8656 {
8657
8658 if (!ctx.
Read(itemQBIndex))
8659 {
8661 return false;
8662 }
8663 if (itemQBIndex != -1 && player)
8664 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8665 }
8666 }
8667
8668 if (version < 140)
8669 {
8670
8671 if (!LoadVariables(ctx, version))
8672 {
8674 return false;
8675 }
8676 }
8677
8678
8680 {
8682 return false;
8683 }
8684 if (version >= 132)
8685 {
8687 if (raib)
8688 {
8690 {
8692 return false;
8693 }
8694 }
8695 }
8696
8698 return true;
8699 }
8700
8701
8702
8704 {
8705 super.OnStoreSave(ctx);
8706
8707 PlayerBase player;
8708 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8709 {
8711
8712 int itemQBIndex = -1;
8713 itemQBIndex = player.FindQuickBarEntityIndex(this);
8714 ctx.
Write(itemQBIndex);
8715 }
8716 else
8717 {
8719 }
8720
8722
8724 if (raib)
8725 {
8727 }
8728 }
8729
8730
8732 {
8733 super.AfterStoreLoad();
8734
8736 {
8738 }
8739
8741 {
8744 }
8745 }
8746
8748 {
8749 super.EEOnAfterLoad();
8750
8752 {
8754 }
8755
8758 }
8759
8761 {
8762 return false;
8763 }
8764
8765
8766
8768 {
8770 {
8771 #ifdef PLATFORM_CONSOLE
8772
8774 {
8776 if (menu)
8777 {
8779 }
8780 }
8781 #endif
8782 }
8783
8785 {
8788 }
8789
8791 {
8792 SetWeightDirty();
8794 }
8796 {
8799 }
8800
8802 {
8805 }
8807 {
8810 }
8811
8812 super.OnVariablesSynchronized();
8813 }
8814
8815
8816
8818 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8819 {
8820 if (!IsServerCheck(allow_client))
8821 return false;
8822
8824 return false;
8825
8828
8829 if (value <= (min + 0.001))
8830 value = min;
8831
8832 if (value == min)
8833 {
8834 if (destroy_config)
8835 {
8836 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8837 if (dstr)
8838 {
8840 this.Delete();
8841 return true;
8842 }
8843 }
8844 else if (destroy_forced)
8845 {
8847 this.Delete();
8848 return true;
8849 }
8850
8852 }
8853
8856
8858 {
8860
8861 if (delta)
8863 }
8864
8866
8867 return false;
8868 }
8869
8870
8872 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8873 {
8875 }
8876
8878 {
8881 }
8882
8884 {
8887 }
8888
8891 {
8892 float value_clamped = Math.Clamp(value, 0, 1);
8894 SetQuantity(result, destroy_config, destroy_forced);
8895 }
8896
8897
8900 {
8902 }
8903
8905 {
8907 }
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8919 {
8920 int slot = -1;
8921 if (GetInventory())
8922 {
8923 InventoryLocation il = new InventoryLocation;
8924 GetInventory().GetCurrentInventoryLocation(il);
8926 }
8927
8929 }
8930
8932 {
8933 float quantity_max = 0;
8934
8936 {
8937 if (attSlotID != -1)
8938 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8939
8940 if (quantity_max <= 0)
8942 }
8943
8944 if (quantity_max <= 0)
8946
8947 return quantity_max;
8948 }
8949
8951 {
8953 }
8954
8956 {
8958 }
8959
8960
8962 {
8964 }
8965
8967 {
8969 }
8970
8972 {
8974 }
8975
8976
8978 {
8979
8980 float weightEx = GetWeightEx();
8981 float special = GetInventoryAndCargoWeight();
8982 return weightEx - special;
8983 }
8984
8985
8987 {
8989 }
8990
8992 {
8994 {
8995 #ifdef DEVELOPER
8996 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8997 {
8998 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9000 }
9001 #endif
9002
9004 }
9005 else if (HasEnergyManager())
9006 {
9007 #ifdef DEVELOPER
9008 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9009 {
9010 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9011 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9012 }
9013 #endif
9014 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9015 }
9016 else
9017 {
9018 #ifdef DEVELOPER
9019 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9020 {
9021 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9022 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9023 }
9024 #endif
9025 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9026 }
9027 }
9028
9031 {
9032 int item_count = 0;
9034
9035 if (GetInventory().GetCargo() != NULL)
9036 {
9037 item_count = GetInventory().GetCargo().GetItemCount();
9038 }
9039
9040 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9041 {
9042 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9043 if (item)
9044 item_count += item.GetNumberOfItems();
9045 }
9046 return item_count;
9047 }
9048
9051 {
9052 float weight = 0;
9053 float wetness = 1;
9054 if (include_wetness)
9057 {
9058 weight = wetness * m_ConfigWeight;
9059 }
9061 {
9062 weight = 1;
9063 }
9064 return weight;
9065 }
9066
9067
9068
9070 {
9071 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9072 {
9073 GameInventory inv = GetInventory();
9074 array<EntityAI> items = new array<EntityAI>;
9076 for (int i = 0; i < items.Count(); i++)
9077 {
9079 if (item)
9080 {
9082 }
9083 }
9084 }
9085 }
9086
9087
9088
9089
9091 {
9092 float energy = 0;
9093 if (HasEnergyManager())
9094 {
9095 energy = GetCompEM().GetEnergy();
9096 }
9097 return energy;
9098 }
9099
9100
9102 {
9103 super.OnEnergyConsumed();
9104
9106 }
9107
9109 {
9110 super.OnEnergyAdded();
9111
9113 }
9114
9115
9117 {
9118 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9119 {
9121 {
9122 float energy_0to1 = GetCompEM().GetEnergy0To1();
9124 }
9125 }
9126 }
9127
9128
9130 {
9131 return ConfigGetFloat("heatIsolation");
9132 }
9133
9135 {
9137 }
9138
9140 {
9141 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9142 if (
GetGame().ConfigIsExisting(paramPath))
9144
9145 return 0.0;
9146 }
9147
9149 {
9150 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9151 if (
GetGame().ConfigIsExisting(paramPath))
9153
9154 return 0.0;
9155 }
9156
9157 override void SetWet(
float value,
bool allow_client =
false)
9158 {
9159 if (!IsServerCheck(allow_client))
9160 return;
9161
9164
9166
9167 m_VarWet = Math.Clamp(value, min, max);
9168
9170 {
9173 }
9174 }
9175
9176 override void AddWet(
float value)
9177 {
9179 }
9180
9182 {
9184 }
9185
9187 {
9189 }
9190
9192 {
9194 }
9195
9197 {
9199 }
9200
9202 {
9204 }
9205
9207 {
9210 if (newLevel != oldLevel)
9211 {
9213 }
9214 }
9215
9217 {
9218 SetWeightDirty();
9219 }
9220
9222 {
9223 return GetWetLevelInternal(
m_VarWet);
9224 }
9225
9226
9227
9229 {
9231 }
9232
9234 {
9236 }
9237
9239 {
9241 }
9242
9244 {
9246 }
9247
9248
9249
9251 {
9252 if (ConfigIsExisting("itemModelLength"))
9253 {
9254 return ConfigGetFloat("itemModelLength");
9255 }
9256 return 0;
9257 }
9258
9260 {
9261 if (ConfigIsExisting("itemAttachOffset"))
9262 {
9263 return ConfigGetFloat("itemAttachOffset");
9264 }
9265 return 0;
9266 }
9267
9268 override void SetCleanness(
int value,
bool allow_client =
false)
9269 {
9270 if (!IsServerCheck(allow_client))
9271 return;
9272
9274
9276
9279 }
9280
9282 {
9284 }
9285
9287 {
9288 return true;
9289 }
9290
9291
9292
9293
9295 {
9297 }
9298
9300 {
9302 }
9303
9304
9305
9306
9307 override void SetColor(
int r,
int g,
int b,
int a)
9308 {
9314 }
9316 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9317 {
9322 }
9323
9325 {
9327 }
9328
9331 {
9332 int r,g,b,a;
9334 r = r/255;
9335 g = g/255;
9336 b = b/255;
9337 a = a/255;
9338 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9339 }
9340
9341
9342
9343 override void SetLiquidType(
int value,
bool allow_client =
false)
9344 {
9345 if (!IsServerCheck(allow_client))
9346 return;
9347
9352 }
9353
9355 {
9356 return ConfigGetInt("varLiquidTypeInit");
9357 }
9358
9360 {
9362 }
9363
9365 {
9367 SetFrozen(false);
9368 }
9369
9372 {
9373 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9374 }
9375
9376
9379 {
9380 PlayerBase nplayer;
9381 if (PlayerBase.CastTo(nplayer, player))
9382 {
9384
9385 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9386 }
9387 }
9388
9389
9392 {
9393 PlayerBase nplayer;
9394 if (PlayerBase.CastTo(nplayer,player))
9395 {
9396
9397 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9398
9399 }
9400
9401
9402 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9403
9404
9405 if (HasEnergyManager())
9406 {
9407 GetCompEM().UpdatePlugState();
9408 }
9409 }
9410
9411
9413 {
9414 super.OnPlacementStarted(player);
9415
9417 }
9418
9419 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9420 {
9422 {
9423 m_AdminLog.OnPlacementComplete(player,
this);
9424 }
9425
9426 super.OnPlacementComplete(player, position, orientation);
9427 }
9428
9429
9430
9431
9432
9434 {
9436 {
9437 return true;
9438 }
9439 else
9440 {
9441 return false;
9442 }
9443 }
9444
9445
9447 {
9449 {
9451 }
9452 }
9453
9454
9456 {
9458 }
9459
9461 {
9463 }
9464
9465 override void InsertAgent(
int agent,
float count = 1)
9466 {
9467 if (count < 1)
9468 return;
9469
9471 }
9472
9475 {
9477 }
9478
9479
9481 {
9483 }
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9527 {
9529 return false;
9530 return true;
9531 }
9532
9534 {
9535
9537 }
9538
9539
9542 {
9543 super.CheckForRoofLimited(timeTresholdMS);
9544
9546 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9547 {
9548 m_PreviousRoofTestTime = time;
9549 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9550 }
9551 }
9552
9553
9555 {
9557 {
9558 return 0;
9559 }
9560
9561 if (GetInventory().GetAttachmentSlotsCount() != 0)
9562 {
9563 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9564 if (filter)
9565 return filter.GetProtectionLevel(type, false, system);
9566 else
9567 return 0;
9568 }
9569
9570 string subclassPath, entryName;
9571
9572 switch (type)
9573 {
9575 entryName = "biological";
9576 break;
9578 entryName = "chemical";
9579 break;
9580 default:
9581 entryName = "biological";
9582 break;
9583 }
9584
9585 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9586
9588 }
9589
9590
9591
9594 {
9595 if (!IsMagazine())
9597
9599 }
9600
9601
9602
9603
9604
9609 {
9610 return true;
9611 }
9612
9614 {
9616 }
9617
9618
9619
9620
9621
9623 {
9624 if (parent)
9625 {
9626 if (parent.IsInherited(DayZInfected))
9627 return true;
9628
9629 if (!parent.IsRuined())
9630 return true;
9631 }
9632
9633 return true;
9634 }
9635
9637 {
9638 if (!super.CanPutAsAttachment(parent))
9639 {
9640 return false;
9641 }
9642
9643 if (!IsRuined() && !parent.IsRuined())
9644 {
9645 return true;
9646 }
9647
9648 return false;
9649 }
9650
9652 {
9653
9654
9655
9656
9657 return super.CanReceiveItemIntoCargo(item);
9658 }
9659
9661 {
9662
9663
9664
9665
9666 GameInventory attachmentInv = attachment.GetInventory();
9668 {
9669 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9670 return false;
9671 }
9672
9673 InventoryLocation loc = new InventoryLocation();
9674 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9675 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9676 return false;
9677
9678 return super.CanReceiveAttachment(attachment, slotId);
9679 }
9680
9682 {
9683 if (!super.CanReleaseAttachment(attachment))
9684 return false;
9685
9686 return GetInventory().AreChildrenAccessible();
9687 }
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9710 {
9711 int id = muzzle_owner.GetMuzzleID();
9712 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9713
9714 if (WPOF_array)
9715 {
9716 for (int i = 0; i < WPOF_array.Count(); i++)
9717 {
9718 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9719
9720 if (WPOF)
9721 {
9722 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9723 }
9724 }
9725 }
9726 }
9727
9728
9730 {
9731 int id = muzzle_owner.GetMuzzleID();
9733
9734 if (WPOBE_array)
9735 {
9736 for (int i = 0; i < WPOBE_array.Count(); i++)
9737 {
9738 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9739
9740 if (WPOBE)
9741 {
9742 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9743 }
9744 }
9745 }
9746 }
9747
9748
9750 {
9751 int id = muzzle_owner.GetMuzzleID();
9752 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9753
9754 if (WPOOH_array)
9755 {
9756 for (int i = 0; i < WPOOH_array.Count(); i++)
9757 {
9758 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9759
9760 if (WPOOH)
9761 {
9762 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9763 }
9764 }
9765 }
9766 }
9767
9768
9770 {
9771 int id = muzzle_owner.GetMuzzleID();
9772 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9773
9774 if (WPOOH_array)
9775 {
9776 for (int i = 0; i < WPOOH_array.Count(); i++)
9777 {
9778 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9779
9780 if (WPOOH)
9781 {
9782 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9783 }
9784 }
9785 }
9786 }
9787
9788
9790 {
9791 int id = muzzle_owner.GetMuzzleID();
9792 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9793
9794 if (WPOOH_array)
9795 {
9796 for (int i = 0; i < WPOOH_array.Count(); i++)
9797 {
9798 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9799
9800 if (WPOOH)
9801 {
9802 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9803 }
9804 }
9805 }
9806 }
9807
9808
9809
9811 {
9813 {
9814 return true;
9815 }
9816
9817 return false;
9818 }
9819
9821 {
9823 {
9824 return true;
9825 }
9826
9827 return false;
9828 }
9829
9831 {
9833 {
9834 return true;
9835 }
9836
9837 return false;
9838 }
9839
9841 {
9842 return false;
9843 }
9844
9847 {
9848 return UATimeSpent.DEFAULT_DEPLOY;
9849 }
9850
9851
9852
9853
9855 {
9857 SetSynchDirty();
9858 }
9859
9861 {
9863 }
9864
9865
9867 {
9868 return false;
9869 }
9870
9873 {
9874 string att_type = "None";
9875
9876 if (ConfigIsExisting("soundAttType"))
9877 {
9878 att_type = ConfigGetString("soundAttType");
9879 }
9880
9882 }
9883
9885 {
9887 }
9888
9889
9890
9891
9892
9896
9898 {
9901
9903 }
9904
9905
9907 {
9909 return;
9910
9912
9915
9918
9919 SoundParameters params = new SoundParameters();
9923 }
9924
9925
9927 {
9929 return;
9930
9932 SetSynchDirty();
9933
9936 }
9937
9938
9940 {
9942 return;
9943
9945 SetSynchDirty();
9946
9949 }
9950
9952 {
9954 }
9955
9957 {
9959 }
9960
9963 {
9964 if (!
GetGame().IsDedicatedServer())
9965 {
9966 if (ConfigIsExisting("attachSoundSet"))
9967 {
9968 string cfg_path = "";
9969 string soundset = "";
9971
9974 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9975 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9976
9977 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9978 {
9979 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9980 {
9981 if (cfg_slot_array[i] == slot_type)
9982 {
9983 soundset = cfg_soundset_array[i];
9984 break;
9985 }
9986 }
9987 }
9988
9989 if (soundset != "")
9990 {
9991 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9993 }
9994 }
9995 }
9996 }
9997
9999 {
10000
10001 }
10002
10003 void OnApply(PlayerBase player);
10004
10006 {
10007 return 1.0;
10008 };
10009
10011 {
10013 }
10014
10016 {
10018 }
10019
10021
10023 {
10024 SetDynamicPhysicsLifeTime(0.01);
10026 }
10027
10029 {
10030 array<string> zone_names = new array<string>;
10031 GetDamageZones(zone_names);
10032 for (int i = 0; i < zone_names.Count(); i++)
10033 {
10034 SetHealthMax(zone_names.Get(i),"Health");
10035 }
10036 SetHealthMax("","Health");
10037 }
10038
10041 {
10042 float global_health = GetHealth01("","Health");
10043 array<string> zones = new array<string>;
10044 GetDamageZones(zones);
10045
10046 for (int i = 0; i < zones.Count(); i++)
10047 {
10048 SetHealth01(zones.Get(i),"Health",global_health);
10049 }
10050 }
10051
10054 {
10055 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10056 }
10057
10059 {
10060 if (!hasRootAsPlayer)
10061 {
10062 if (refParentIB)
10063 {
10064
10065 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10066 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10067
10068 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10069 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10070
10073 }
10074 else
10075 {
10076
10079 }
10080 }
10081 }
10082
10084 {
10086 {
10087 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10088 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10089 {
10090 float heatPermCoef = 1.0;
10092 while (ent)
10093 {
10094 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10095 ent = ent.GetHierarchyParent();
10096 }
10097
10098 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10099 }
10100 }
10101 }
10102
10104 {
10105
10106 EntityAI parent = GetHierarchyParent();
10107 if (!parent)
10108 {
10109 hasParent = false;
10110 hasRootAsPlayer = false;
10111 }
10112 else
10113 {
10114 hasParent = true;
10115 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10116 refParentIB =
ItemBase.Cast(parent);
10117 }
10118 }
10119
10120 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10121 {
10122
10123 }
10124
10126 {
10127
10128 return false;
10129 }
10130
10132 {
10133
10134
10135 return false;
10136 }
10137
10139 {
10140
10141 return false;
10142 }
10143
10146 {
10147 return !GetIsFrozen() &&
IsOpen();
10148 }
10149
10151 {
10152 bool hasParent = false, hasRootAsPlayer = false;
10154
10155 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10156 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10157
10158 if (wwtu || foodDecay)
10159 {
10163
10164 if (processWetness || processTemperature || processDecay)
10165 {
10167
10168 if (processWetness)
10169 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10170
10171 if (processTemperature)
10173
10174 if (processDecay)
10175 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10176 }
10177 }
10178 }
10179
10182 {
10184 }
10185
10187 {
10190
10191 return super.GetTemperatureFreezeThreshold();
10192 }
10193
10195 {
10198
10199 return super.GetTemperatureThawThreshold();
10200 }
10201
10203 {
10206
10207 return super.GetItemOverheatThreshold();
10208 }
10209
10211 {
10213 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10214
10215 return super.GetTemperatureFreezeTime();
10216 }
10217
10219 {
10221 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10222
10223 return super.GetTemperatureThawTime();
10224 }
10225
10230
10232 {
10233 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10234 }
10235
10237 {
10238 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10239 }
10240
10243 {
10245 }
10246
10248 {
10250 }
10251
10253 {
10255 }
10256
10259 {
10260 return null;
10261 }
10262
10265 {
10266 return false;
10267 }
10268
10270 {
10272 {
10275 if (!trg)
10276 {
10278 explosive = this;
10279 }
10280
10281 explosive.PairRemote(trg);
10283
10284 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10285 trg.SetPersistentPairID(persistentID);
10286 explosive.SetPersistentPairID(persistentID);
10287
10288 return true;
10289 }
10290 return false;
10291 }
10292
10295 {
10296 float ret = 1.0;
10299 ret *= GetHealth01();
10300
10301 return ret;
10302 }
10303
10304 #ifdef DEVELOPER
10305 override void SetDebugItem()
10306 {
10307 super.SetDebugItem();
10308 _itemBase = this;
10309 }
10310
10312 {
10313 string text = super.GetDebugText();
10314
10316 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10317
10318 return text;
10319 }
10320 #endif
10321
10323 {
10324 return true;
10325 }
10326
10328
10330
10332 {
10335 }
10336
10337
10345
10361}
10362
10364{
10366 if (entity)
10367 {
10368 bool is_item = entity.IsInherited(
ItemBase);
10369 if (is_item && full_quantity)
10370 {
10373 }
10374 }
10375 else
10376 {
10378 return NULL;
10379 }
10380 return entity;
10381}
10382
10384{
10385 if (item)
10386 {
10387 if (health > 0)
10388 item.SetHealth("", "", health);
10389
10390 if (item.CanHaveTemperature())
10391 {
10393 if (item.CanFreeze())
10394 item.SetFrozen(false);
10395 }
10396
10397 if (item.HasEnergyManager())
10398 {
10399 if (quantity >= 0)
10400 {
10401 item.GetCompEM().SetEnergy0To1(quantity);
10402 }
10403 else
10404 {
10406 }
10407 }
10408 else if (item.IsMagazine())
10409 {
10410 Magazine mag = Magazine.Cast(item);
10411 if (quantity >= 0)
10412 {
10413 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10414 }
10415 else
10416 {
10418 }
10419
10420 }
10421 else
10422 {
10423 if (quantity >= 0)
10424 {
10425 item.SetQuantityNormalized(quantity, false);
10426 }
10427 else
10428 {
10430 }
10431
10432 }
10433 }
10434}
10435
10436#ifdef DEVELOPER
10438#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.