5572{
5574 {
5575 return true;
5576 }
5577};
5578
5579
5580
5582{
5586
5588
5591
5592
5593
5594
5595
5604
5610
5615
5620
5641 protected bool m_IsResultOfSplit
5642
5644
5649
5650
5651
5653
5657
5658
5659
5661
5664
5665
5666
5672
5673
5681
5684
5685
5687
5688
5690
5691
5696
5697
5702
5703
5705
5706
5708 {
5713
5714 if (!
GetGame().IsDedicatedServer())
5715 {
5717 {
5719
5721 {
5723 }
5724 }
5725
5728 }
5729
5730 m_OldLocation = null;
5731
5733 {
5735 }
5736
5737 if (ConfigIsExisting("headSelectionsToHide"))
5738 {
5741 }
5742
5744 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5745 {
5747 }
5748
5750
5751 m_IsResultOfSplit = false;
5752
5754 }
5755
5757 {
5758 super.InitItemVariables();
5759
5765 m_Count = ConfigGetInt(
"count");
5766
5769
5774
5777
5782
5794
5798
5799
5802 if (ConfigIsExisting("canBeSplit"))
5803 {
5806 }
5807
5809 if (ConfigIsExisting("itemBehaviour"))
5811
5812
5815 RegisterNetSyncVariableInt("m_VarLiquidType");
5816 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5817
5818 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5819 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5820 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5821
5822 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5823 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5824 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5825 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5826
5827 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5828 RegisterNetSyncVariableBool("m_IsTakeable");
5829 RegisterNetSyncVariableBool("m_IsHologram");
5830
5833 {
5836 }
5837
5839
5841 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5843
5844 }
5845
5847 {
5849 }
5850
5852 {
5855 {
5860 }
5861 }
5862
5863 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5864 {
5866 {
5869 }
5870
5872 }
5873
5875 {
5881 }
5882
5884
5886 {
5888
5889 if (!action)
5890 {
5891 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5892 return;
5893 }
5894
5896 if (!ai)
5897 {
5899 return;
5900 }
5901
5903 if (!action_array)
5904 {
5905 action_array = new array<ActionBase_Basic>;
5907 }
5908 if (LogManager.IsActionLogEnable())
5909 {
5910 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5911 }
5912
5913 if (action_array.Find(action) != -1)
5914 {
5915 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5916 }
5917 else
5918 {
5919 action_array.Insert(action);
5920 }
5921 }
5922
5924 {
5926 ActionBase action = player.GetActionManager().GetAction(actionName);
5929
5930 if (action_array)
5931 {
5932 action_array.RemoveItem(action);
5933 }
5934 }
5935
5936
5937
5939 {
5940 ActionOverrideData overrideData = new ActionOverrideData();
5944
5946 if (!actionMap)
5947 {
5950 }
5951
5952 actionMap.Insert(this.
Type(), overrideData);
5953
5954 }
5955
5957
5959
5960
5962 {
5965
5968
5969 string config_to_search = "CfgVehicles";
5970 string muzzle_owner_config;
5971
5973 {
5974 if (IsInherited(Weapon))
5975 config_to_search = "CfgWeapons";
5976
5977 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5978
5979 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5980
5982
5983 if (config_OnFire_subclass_count > 0)
5984 {
5985 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5986
5987 for (int i = 0; i < config_OnFire_subclass_count; i++)
5988 {
5989 string particle_class = "";
5991 string config_OnFire_entry = config_OnFire_class + particle_class;
5992 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5993 WPOF_array.Insert(WPOF);
5994 }
5995
5996
5998 }
5999 }
6000
6002 {
6003 config_to_search = "CfgWeapons";
6004 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6005
6006 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6007
6009
6010 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6011 {
6012 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6013
6014 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6015 {
6016 string particle_class2 = "";
6018 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6019 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6020 WPOBE_array.Insert(WPOBE);
6021 }
6022
6023
6025 }
6026 }
6027 }
6028
6029
6031 {
6034
6036 {
6037 string config_to_search = "CfgVehicles";
6038
6039 if (IsInherited(Weapon))
6040 config_to_search = "CfgWeapons";
6041
6042 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6043 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6044
6045 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6046 {
6047
6049
6051 {
6053 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6055 return;
6056 }
6057
6060
6061
6062
6064 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6065
6066 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6067 {
6068 string particle_class = "";
6070 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6072
6073 if (entry_type == CT_CLASS)
6074 {
6075 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6076 WPOOH_array.Insert(WPOF);
6077 }
6078 }
6079
6080
6082 }
6083 }
6084 }
6085
6087 {
6089 }
6090
6092 {
6094 {
6096
6099
6102
6103 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6104 }
6105 }
6106
6108 {
6110 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6111
6113 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6114
6116 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6117
6119 {
6121 }
6122 }
6123
6125 {
6127 }
6128
6130 {
6133 else
6135
6137 {
6140 }
6141 else
6142 {
6145
6148 }
6149
6151 }
6152
6154 {
6156 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6157 }
6158
6160 {
6162 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6164 }
6165
6167 {
6169 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6170 }
6171
6173 {
6176
6177 OverheatingParticle OP = new OverheatingParticle();
6182
6184 }
6185
6187 {
6190
6191 return -1;
6192 }
6193
6195 {
6197 {
6200
6201 for (int i = count; i > 0; --i)
6202 {
6203 int id = i - 1;
6206
6209
6210 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6211 {
6212 if (p)
6213 {
6216 }
6217 }
6218 }
6219 }
6220 }
6221
6223 {
6225 {
6227 {
6228 int id = i - 1;
6230
6231 if (OP)
6232 {
6234
6235 if (p)
6236 {
6238 }
6239
6240 delete OP;
6241 }
6242 }
6243
6246 }
6247 }
6248
6251 {
6252 return 0.0;
6253 }
6254
6255
6257 {
6258 return 250;
6259 }
6260
6262 {
6263 return 0;
6264 }
6265
6268 {
6270 return true;
6271
6272 return false;
6273 }
6274
6277 {
6280
6282 {
6284 }
6285 else
6286 {
6287
6289 }
6290
6292 }
6293
6300 {
6301 return -1;
6302 }
6303
6304
6305
6306
6308 {
6310 {
6312 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6313
6314 if (r_index >= 0)
6315 {
6316 InventoryLocation r_il = new InventoryLocation;
6317 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6318
6319 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6322 {
6323 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6324 }
6326 {
6327 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6328 }
6329
6330 }
6331
6332 player.GetHumanInventory().ClearUserReservedLocation(this);
6333 }
6334
6337 }
6338
6339
6340
6341
6343 {
6344 return ItemBase.m_DebugActionsMask;
6345 }
6346
6348 {
6349 return ItemBase.m_DebugActionsMask & mask;
6350 }
6351
6353 {
6354 ItemBase.m_DebugActionsMask = mask;
6355 }
6356
6358 {
6359 ItemBase.m_DebugActionsMask |= mask;
6360 }
6361
6363 {
6364 ItemBase.m_DebugActionsMask &= ~mask;
6365 }
6366
6368 {
6370 {
6372 }
6373 else
6374 {
6376 }
6377 }
6378
6379
6381 {
6382 if (GetEconomyProfile())
6383 {
6384 float q_max = GetEconomyProfile().GetQuantityMax();
6385 if (q_max > 0)
6386 {
6387 float q_min = GetEconomyProfile().GetQuantityMin();
6388 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6389
6391 {
6392 ComponentEnergyManager comp = GetCompEM();
6394 {
6396 }
6397 }
6399 {
6401
6402 }
6403
6404 }
6405 }
6406 }
6407
6410 {
6411 EntityAI parent = GetHierarchyParent();
6412
6413 if (parent)
6414 {
6415 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6416 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6417 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6418 }
6419 }
6420
6423 {
6424 EntityAI parent = GetHierarchyParent();
6425
6426 if (parent)
6427 {
6428 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6429 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6430 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6431 }
6432 }
6433
6435 {
6436
6437
6438
6439
6441
6443 {
6444 if (ScriptInputUserData.CanStoreInputUserData())
6445 {
6446 ScriptInputUserData ctx = new ScriptInputUserData;
6452 ctx.
Write(use_stack_max);
6455
6457 {
6458 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6459 }
6460 }
6461 }
6462 else if (!
GetGame().IsMultiplayer())
6463 {
6465 }
6466 }
6467
6469 {
6471 }
6472
6474 {
6476 }
6477
6479 {
6481 }
6482
6484 {
6485
6486 return false;
6487 }
6488
6490 {
6491 return false;
6492 }
6493
6497 {
6498 return false;
6499 }
6500
6502 {
6503 return "";
6504 }
6505
6507
6509 {
6510 return false;
6511 }
6512
6514 {
6515 return true;
6516 }
6517
6518
6519
6521 {
6522 return true;
6523 }
6524
6526 {
6527 return true;
6528 }
6529
6531 {
6532 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6534 }
6535
6537 {
6539 }
6540
6542 {
6544 if (!is_being_placed)
6546 SetSynchDirty();
6547 }
6548
6549
6551
6553 {
6555 }
6556
6558 {
6560 }
6561
6563 {
6564 return 1;
6565 }
6566
6568 {
6569 return false;
6570 }
6571
6573 {
6575 SetSynchDirty();
6576 }
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6613 {
6614 super.OnMovedInsideCargo(container);
6615
6616 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6617 }
6618
6619 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6620 {
6621 super.EEItemLocationChanged(oldLoc,newLoc);
6622
6623 PlayerBase new_player = null;
6624 PlayerBase old_player = null;
6625
6626 if (newLoc.GetParent())
6627 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6628
6629 if (oldLoc.GetParent())
6630 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6631
6633 {
6634 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6635
6636 if (r_index >= 0)
6637 {
6638 InventoryLocation r_il = new InventoryLocation;
6639 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6640
6641 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6644 {
6645 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6646 }
6648 {
6649 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6650 }
6651
6652 }
6653 }
6654
6656 {
6657 if (new_player)
6658 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6659
6660 if (new_player == old_player)
6661 {
6662
6663 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6664 {
6666 {
6667 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6668 {
6669 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6670 }
6671 }
6672 else
6673 {
6674 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6675 }
6676 }
6677
6678 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6679 {
6680 int type = oldLoc.GetType();
6682 {
6683 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6684 }
6686 {
6687 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6688 }
6689 }
6690 if (!m_OldLocation)
6691 {
6692 m_OldLocation = new InventoryLocation;
6693 }
6694 m_OldLocation.Copy(oldLoc);
6695 }
6696 else
6697 {
6698 if (m_OldLocation)
6699 {
6700 m_OldLocation.Reset();
6701 }
6702 }
6703
6705 }
6706 else
6707 {
6708 if (new_player)
6709 {
6710 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6711 if (res_index >= 0)
6712 {
6713 InventoryLocation il = new InventoryLocation;
6714 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6716 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6719 {
6720 il.
GetParent().GetOnReleaseLock().Invoke(it);
6721 }
6723 {
6725 }
6726
6727 }
6728 }
6730 {
6731
6733 }
6734
6735 if (m_OldLocation)
6736 {
6737 m_OldLocation.Reset();
6738 }
6739 }
6740 }
6741
6742 override void EOnContact(IEntity other, Contact extra)
6743 {
6745 {
6746 int liquidType = -1;
6748 if (impactSpeed > 0.0)
6749 {
6751 #ifndef SERVER
6753 #else
6755 SetSynchDirty();
6756 #endif
6758 }
6759 }
6760
6761 #ifdef SERVER
6762 if (GetCompEM() && GetCompEM().IsPlugged())
6763 {
6764 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6765 GetCompEM().UnplugThis();
6766 }
6767 #endif
6768 }
6769
6771
6773 {
6775 }
6776
6778 {
6779
6780 }
6781
6783 {
6784 super.OnItemLocationChanged(old_owner, new_owner);
6785
6786 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6787 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6788
6789 if (!relatedPlayer && playerNew)
6790 relatedPlayer = playerNew;
6791
6792 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6793 {
6795 if (actionMgr)
6796 {
6797 ActionBase currentAction = actionMgr.GetRunningAction();
6798 if (currentAction)
6800 }
6801 }
6802
6803 Man ownerPlayerOld = null;
6804 Man ownerPlayerNew = null;
6805
6806 if (old_owner)
6807 {
6808 if (old_owner.
IsMan())
6809 {
6810 ownerPlayerOld = Man.Cast(old_owner);
6811 }
6812 else
6813 {
6814 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6815 }
6816 }
6817 else
6818 {
6820 {
6822
6823 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6824 {
6825 GetCompEM().UnplugThis();
6826 }
6827 }
6828 }
6829
6830 if (new_owner)
6831 {
6832 if (new_owner.
IsMan())
6833 {
6834 ownerPlayerNew = Man.Cast(new_owner);
6835 }
6836 else
6837 {
6838 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6839 }
6840 }
6841
6842 if (ownerPlayerOld != ownerPlayerNew)
6843 {
6844 if (ownerPlayerOld)
6845 {
6846 array<EntityAI> subItemsExit = new array<EntityAI>;
6848 for (int i = 0; i < subItemsExit.Count(); i++)
6849 {
6852 }
6853 }
6854
6855 if (ownerPlayerNew)
6856 {
6857 array<EntityAI> subItemsEnter = new array<EntityAI>;
6859 for (int j = 0; j < subItemsEnter.Count(); j++)
6860 {
6863 }
6864 }
6865 }
6866 else if (ownerPlayerNew != null)
6867 {
6868 PlayerBase nplayer;
6869 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6870 {
6871 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6873 for (int k = 0; k < subItemsUpdate.Count(); k++)
6874 {
6876 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6877 }
6878 }
6879 }
6880
6881 if (old_owner)
6882 old_owner.OnChildItemRemoved(this);
6883 if (new_owner)
6884 new_owner.OnChildItemReceived(this);
6885 }
6886
6887
6889 {
6890 super.EEDelete(parent);
6891 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6892 if (player)
6893 {
6895
6896 if (player.IsAlive())
6897 {
6898 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6899 if (r_index >= 0)
6900 {
6901 InventoryLocation r_il = new InventoryLocation;
6902 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6903
6904 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6907 {
6908 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6909 }
6911 {
6912 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6913 }
6914
6915 }
6916
6917 player.RemoveQuickBarEntityShortcut(this);
6918 }
6919 }
6920 }
6921
6923 {
6924 super.EEKilled(killer);
6925
6928 {
6929 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6930 {
6931 if (IsMagazine())
6932 {
6933 if (Magazine.Cast(this).GetAmmoCount() > 0)
6934 {
6936 }
6937 }
6938 else
6939 {
6941 }
6942 }
6943 }
6944 }
6945
6947 {
6948 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6949
6950 super.OnWasAttached(parent, slot_id);
6951
6954
6956 }
6957
6959 {
6960 super.OnWasDetached(parent, slot_id);
6961
6964 }
6965
6967 {
6968 int idx;
6971
6972 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6973 if (inventory_slots.Count() < 1)
6974 {
6975 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6976 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6977 }
6978 else
6979 {
6980 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6981 }
6982
6983 idx = inventory_slots.Find(slot);
6984 if (idx < 0)
6985 return "";
6986
6987 return attach_types.Get(idx);
6988 }
6989
6991 {
6992 int idx = -1;
6993 string slot;
6994
6997
6998 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6999 if (inventory_slots.Count() < 1)
7000 {
7001 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7002 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7003 }
7004 else
7005 {
7006 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7007 if (detach_types.Count() < 1)
7008 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7009 }
7010
7011 for (int i = 0; i < inventory_slots.Count(); i++)
7012 {
7013 slot = inventory_slots.Get(i);
7014 }
7015
7016 if (slot != "")
7017 {
7018 if (detach_types.Count() == 1)
7019 idx = 0;
7020 else
7021 idx = inventory_slots.Find(slot);
7022 }
7023 if (idx < 0)
7024 return "";
7025
7026 return detach_types.Get(idx);
7027 }
7028
7030 {
7031
7033
7034
7035 float min_time = 1;
7036 float max_time = 3;
7037 float delay = Math.RandomFloat(min_time, max_time);
7038
7039 explode_timer.Run(delay, this, "DoAmmoExplosion");
7040 }
7041
7043 {
7044 Magazine magazine = Magazine.Cast(this);
7045 int pop_sounds_count = 6;
7046 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7047
7048
7049 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7050 string sound_name = pop_sounds[ sound_idx ];
7052
7053
7054 magazine.ServerAddAmmoCount(-1);
7055
7056
7057 float min_temp_to_explode = 100;
7058
7059 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7060 {
7062 }
7063 }
7064
7065
7066 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7067 {
7068 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7069
7070 const int CHANCE_DAMAGE_CARGO = 4;
7071 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7072 const int CHANCE_DAMAGE_NOTHING = 2;
7073
7075 {
7076 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7077 int chances;
7078 int rnd;
7079
7080 if (GetInventory().GetCargo())
7081 {
7082 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7083 rnd = Math.RandomInt(0,chances);
7084
7085 if (rnd < CHANCE_DAMAGE_CARGO)
7086 {
7088 }
7089 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7090 {
7092 }
7093 }
7094 else
7095 {
7096 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7097 rnd = Math.RandomInt(0,chances);
7098
7099 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7100 {
7102 }
7103 }
7104 }
7105 }
7106
7108 {
7109 if (GetInventory().GetCargo())
7110 {
7111 int item_count = GetInventory().GetCargo().GetItemCount();
7112 if (item_count > 0)
7113 {
7114 int random_pick = Math.RandomInt(0, item_count);
7116 if (!item.IsExplosive())
7117 {
7118 item.AddHealth("","",damage);
7119 return true;
7120 }
7121 }
7122 }
7123 return false;
7124 }
7125
7127 {
7128 int attachment_count = GetInventory().AttachmentCount();
7129 if (attachment_count > 0)
7130 {
7131 int random_pick = Math.RandomInt(0, attachment_count);
7132 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7133 if (!attachment.IsExplosive())
7134 {
7135 attachment.AddHealth("","",damage);
7136 return true;
7137 }
7138 }
7139 return false;
7140 }
7141
7143 {
7145 }
7146
7148 {
7150 return GetInventory().CanRemoveEntity();
7151
7152 return false;
7153 }
7154
7156 {
7158 return;
7159
7161 {
7162 if (ScriptInputUserData.CanStoreInputUserData())
7163 {
7164 ScriptInputUserData ctx = new ScriptInputUserData;
7169 ctx.
Write(destination_entity);
7173 }
7174 }
7175 else if (!
GetGame().IsMultiplayer())
7176 {
7178 }
7179 }
7180
7182 {
7184 return;
7185
7186 float split_quantity_new;
7190 InventoryLocation loc = new InventoryLocation;
7191
7192 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7193 {
7195 split_quantity_new = stack_max;
7196 else
7198
7199 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7200 if (new_item)
7201 {
7202 new_item.SetResultOfSplit(true);
7203 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7205 new_item.SetQuantity(split_quantity_new);
7206 }
7207 }
7208 else if (destination_entity && slot_id == -1)
7209 {
7210 if (quantity > stack_max)
7211 split_quantity_new = stack_max;
7212 else
7213 split_quantity_new = quantity;
7214
7216 {
7219 }
7220
7221 if (new_item)
7222 {
7223 new_item.SetResultOfSplit(true);
7224 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7226 new_item.SetQuantity(split_quantity_new);
7227 }
7228 }
7229 else
7230 {
7231 if (stack_max != 0)
7232 {
7234 {
7236 }
7237
7238 if (split_quantity_new == 0)
7239 {
7240 if (!
GetGame().IsMultiplayer())
7241 player.PhysicalPredictiveDropItem(this);
7242 else
7243 player.ServerDropEntity(this);
7244 return;
7245 }
7246
7248
7249 if (new_item)
7250 {
7251 new_item.SetResultOfSplit(true);
7252 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7254 new_item.SetQuantity(stack_max);
7255 new_item.PlaceOnSurface();
7256 }
7257 }
7258 }
7259 }
7260
7262 {
7264 return;
7265
7266 float split_quantity_new;
7270 InventoryLocation loc = new InventoryLocation;
7271
7272 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7273 {
7275 split_quantity_new = stack_max;
7276 else
7278
7279 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7280 if (new_item)
7281 {
7282 new_item.SetResultOfSplit(true);
7283 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7285 new_item.SetQuantity(split_quantity_new);
7286 }
7287 }
7288 else if (destination_entity && slot_id == -1)
7289 {
7290 if (quantity > stack_max)
7291 split_quantity_new = stack_max;
7292 else
7293 split_quantity_new = quantity;
7294
7296 {
7299 }
7300
7301 if (new_item)
7302 {
7303 new_item.SetResultOfSplit(true);
7304 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7306 new_item.SetQuantity(split_quantity_new);
7307 }
7308 }
7309 else
7310 {
7311 if (stack_max != 0)
7312 {
7314 {
7316 }
7317
7319
7320 if (new_item)
7321 {
7322 new_item.SetResultOfSplit(true);
7323 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7325 new_item.SetQuantity(stack_max);
7326 new_item.PlaceOnSurface();
7327 }
7328 }
7329 }
7330 }
7331
7333 {
7335 return;
7336
7338 {
7339 if (ScriptInputUserData.CanStoreInputUserData())
7340 {
7341 ScriptInputUserData ctx = new ScriptInputUserData;
7346 dst.WriteToContext(ctx);
7348 }
7349 }
7350 else if (!
GetGame().IsMultiplayer())
7351 {
7353 }
7354 }
7355
7357 {
7359 return;
7360
7362 {
7363 if (ScriptInputUserData.CanStoreInputUserData())
7364 {
7365 ScriptInputUserData ctx = new ScriptInputUserData;
7370 ctx.
Write(destination_entity);
7376 }
7377 }
7378 else if (!
GetGame().IsMultiplayer())
7379 {
7381 }
7382 }
7383
7385 {
7387 }
7388
7390 {
7392 return this;
7393
7395 float split_quantity_new;
7397 if (dst.IsValid())
7398 {
7399 int slot_id = dst.GetSlot();
7401
7402 if (quantity > stack_max)
7403 split_quantity_new = stack_max;
7404 else
7405 split_quantity_new = quantity;
7406
7408
7409 if (new_item)
7410 {
7411 new_item.SetResultOfSplit(true);
7412 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7415 }
7416
7417 return new_item;
7418 }
7419
7420 return null;
7421 }
7422
7424 {
7426 return;
7427
7429 float split_quantity_new;
7431 if (destination_entity)
7432 {
7434 if (quantity > stackable)
7435 split_quantity_new = stackable;
7436 else
7437 split_quantity_new = quantity;
7438
7439 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7440 if (new_item)
7441 {
7442 new_item.SetResultOfSplit(true);
7443 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7445 new_item.SetQuantity(split_quantity_new);
7446 }
7447 }
7448 }
7449
7451 {
7453 return;
7454
7456 {
7457 if (ScriptInputUserData.CanStoreInputUserData())
7458 {
7459 ScriptInputUserData ctx = new ScriptInputUserData;
7464 ItemBase destination_entity =
this;
7465 ctx.
Write(destination_entity);
7469 }
7470 }
7471 else if (!
GetGame().IsMultiplayer())
7472 {
7474 }
7475 }
7476
7478 {
7480 return;
7481
7483 float split_quantity_new;
7485 if (player)
7486 {
7488 if (quantity > stackable)
7489 split_quantity_new = stackable;
7490 else
7491 split_quantity_new = quantity;
7492
7493 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7494 new_item =
ItemBase.Cast(in_hands);
7495 if (new_item)
7496 {
7497 new_item.SetResultOfSplit(true);
7498 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7500 new_item.SetQuantity(split_quantity_new);
7501 }
7502 }
7503 }
7504
7506 {
7508 return;
7509
7511 float split_quantity_new = Math.Floor(quantity * 0.5);
7512
7514
7515 if (new_item)
7516 {
7517 if (new_item.GetQuantityMax() < split_quantity_new)
7518 {
7519 split_quantity_new = new_item.GetQuantityMax();
7520 }
7521
7522 new_item.SetResultOfSplit(true);
7523 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7524
7526 {
7529 }
7530 else
7531 {
7534 }
7535 }
7536 }
7537
7539 {
7541 return;
7542
7544 float split_quantity_new = Math.Floor(quantity / 2);
7545
7546 InventoryLocation invloc = new InventoryLocation;
7548
7550 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7551
7552 if (new_item)
7553 {
7554 if (new_item.GetQuantityMax() < split_quantity_new)
7555 {
7556 split_quantity_new = new_item.GetQuantityMax();
7557 }
7559 {
7562 }
7563 else
7564 {
7567 }
7568 }
7569 }
7570
7573 {
7574 SetWeightDirty();
7576
7577 if (parent)
7578 parent.OnAttachmentQuantityChangedEx(this, delta);
7579
7581 {
7583 {
7585 }
7587 {
7588 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7590 }
7591 }
7592
7593 }
7594
7597 {
7598
7599 }
7600
7603 {
7605 }
7606
7608 {
7609 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7610
7612 {
7613 if (newLevel == GameConstants.STATE_RUINED)
7614 {
7616 EntityAI parent = GetHierarchyParent();
7617 if (parent && parent.IsFireplace())
7618 {
7619 CargoBase cargo = GetInventory().GetCargo();
7620 if (cargo)
7621 {
7623 {
7625 }
7626 }
7627 }
7628 }
7629
7631 {
7632
7634 return;
7635 }
7636
7637 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7638 {
7640 }
7641 }
7642 }
7643
7644
7646 {
7647 super.OnRightClick();
7648
7650 {
7652 {
7653 if (ScriptInputUserData.CanStoreInputUserData())
7654 {
7655 vector m4[4];
7657
7658 EntityAI root = GetHierarchyRoot();
7659
7660 InventoryLocation dst = new InventoryLocation;
7662 {
7663 if (root)
7664 {
7665 root.GetTransform(m4);
7667 }
7668 else
7669 GetInventory().GetCurrentInventoryLocation(dst);
7670 }
7671 else
7672 {
7674
7675
7676 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7677 {
7678 if (root)
7679 {
7680 root.GetTransform(m4);
7682 }
7683 else
7684 GetInventory().GetCurrentInventoryLocation(dst);
7685 }
7686 else
7687 {
7688 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7689 }
7690 }
7691
7692 ScriptInputUserData ctx = new ScriptInputUserData;
7700 }
7701 }
7702 else if (!
GetGame().IsMultiplayer())
7703 {
7705 }
7706 }
7707 }
7708
7709 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7710 {
7711
7712 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7713 return false;
7714
7715 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7716 return false;
7717
7718
7720 return false;
7721
7722
7723 Magazine mag = Magazine.Cast(this);
7724 if (mag)
7725 {
7726 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7727 return false;
7728
7729 if (stack_max_limit)
7730 {
7731 Magazine other_mag = Magazine.Cast(other_item);
7732 if (other_item)
7733 {
7734 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7735 return false;
7736 }
7737
7738 }
7739 }
7740 else
7741 {
7742
7744 return false;
7745
7747 return false;
7748 }
7749
7750 PlayerBase player = null;
7751 if (CastTo(player, GetHierarchyRootPlayer()))
7752 {
7753 if (player.GetInventory().HasAttachment(this))
7754 return false;
7755
7756 if (player.IsItemsToDelete())
7757 return false;
7758 }
7759
7760 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7761 return false;
7762
7763 int slotID;
7765 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7766 return false;
7767
7768 return true;
7769 }
7770
7772 {
7774 }
7775
7777 {
7778 return m_IsResultOfSplit;
7779 }
7780
7782 {
7783 m_IsResultOfSplit = value;
7784 }
7785
7787 {
7789 }
7790
7792 {
7793 float other_item_quantity = other_item.GetQuantity();
7794 float this_free_space;
7795
7797
7799
7800 if (other_item_quantity > this_free_space)
7801 {
7802 return this_free_space;
7803 }
7804 else
7805 {
7806 return other_item_quantity;
7807 }
7808 }
7809
7811 {
7813 }
7814
7816 {
7818 return;
7819
7820 if (!IsMagazine() && other_item)
7821 {
7823 if (quantity_used != 0)
7824 {
7825 float hp1 = GetHealth01("","");
7826 float hp2 = other_item.GetHealth01("","");
7827 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7828 hpResult = hpResult / (
GetQuantity() + quantity_used);
7829
7830 hpResult *= GetMaxHealth();
7831 Math.Round(hpResult);
7832 SetHealth("", "Health", hpResult);
7833
7835 other_item.AddQuantity(-quantity_used);
7836 }
7837 }
7839 }
7840
7842 {
7843 #ifdef SERVER
7844 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7845 GetHierarchyParent().IncreaseLifetimeUp();
7846 #endif
7847 };
7848
7850 {
7851 PlayerBase p = PlayerBase.Cast(player);
7852
7853 array<int> recipesIds = p.m_Recipes;
7854 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7855 if (moduleRecipesManager)
7856 {
7857 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7858 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7859 }
7860
7861 for (int i = 0;i < recipesIds.Count(); i++)
7862 {
7863 int key = recipesIds.Get(i);
7864 string recipeName = moduleRecipesManager.GetRecipeName(key);
7866 }
7867 }
7868
7869
7870 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7871 {
7872 super.GetDebugActions(outputList);
7873
7874
7879
7880
7884
7888
7889
7892
7893
7895 {
7898 }
7899
7901
7904
7908 }
7909
7910
7911
7912
7914 {
7915 super.OnAction(action_id, player, ctx);
7916 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7917 {
7918 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7919 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7920 PlayerBase p = PlayerBase.Cast(player);
7921 if (
EActions.RECIPES_RANGE_START < 1000)
7922 {
7923 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7924 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7925 }
7926 }
7927 #ifndef SERVER
7928 else if (action_id ==
EActions.WATCH_PLAYER)
7929 {
7930 PluginDeveloper.SetDeveloperItemClientEx(player);
7931 }
7932 #endif
7934 {
7935 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7936 {
7937 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7938 OnDebugButtonPressServer(id + 1);
7939 }
7940
7941 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7942 {
7943 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7945 }
7946
7947 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7948 {
7949 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7951 }
7952
7953 else if (action_id ==
EActions.ADD_QUANTITY)
7954 {
7955 if (IsMagazine())
7956 {
7957 Magazine mag = Magazine.Cast(this);
7958 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7959 }
7960 else
7961 {
7963 }
7964
7965 if (m_EM)
7966 {
7967 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7968 }
7969
7970 }
7971
7972 else if (action_id ==
EActions.REMOVE_QUANTITY)
7973 {
7974 if (IsMagazine())
7975 {
7976 Magazine mag2 = Magazine.Cast(this);
7977 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7978 }
7979 else
7980 {
7982 }
7983 if (m_EM)
7984 {
7985 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7986 }
7987
7988 }
7989
7990 else if (action_id ==
EActions.SET_QUANTITY_0)
7991 {
7993
7994 if (m_EM)
7995 {
7996 m_EM.SetEnergy(0);
7997 }
7998 }
7999
8000 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8001 {
8003
8004 if (m_EM)
8005 {
8006 m_EM.SetEnergy(m_EM.GetEnergyMax());
8007 }
8008 }
8009
8010 else if (action_id ==
EActions.ADD_HEALTH)
8011 {
8012 AddHealth("","",GetMaxHealth("","Health")/5);
8013 }
8014 else if (action_id ==
EActions.REMOVE_HEALTH)
8015 {
8016 AddHealth("","",-GetMaxHealth("","Health")/5);
8017 }
8018 else if (action_id ==
EActions.DESTROY_HEALTH)
8019 {
8020 SetHealth01("","",0);
8021 }
8022 else if (action_id ==
EActions.WATCH_ITEM)
8023 {
8025 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8026 #ifdef DEVELOPER
8027 SetDebugDeveloper_item(this);
8028 #endif
8029 }
8030
8031 else if (action_id ==
EActions.ADD_TEMPERATURE)
8032 {
8033 AddTemperature(20);
8034
8035 }
8036
8037 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8038 {
8039 AddTemperature(-20);
8040
8041 }
8042
8043 else if (action_id ==
EActions.FLIP_FROZEN)
8044 {
8045 SetFrozen(!GetIsFrozen());
8046
8047 }
8048
8049 else if (action_id ==
EActions.ADD_WETNESS)
8050 {
8052
8053 }
8054
8055 else if (action_id ==
EActions.REMOVE_WETNESS)
8056 {
8058
8059 }
8060
8061 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8062 {
8065
8066
8067 }
8068
8069 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8070 {
8073 }
8074
8075 else if (action_id ==
EActions.MAKE_SPECIAL)
8076 {
8077 auto debugParams = DebugSpawnParams.WithPlayer(player);
8078 OnDebugSpawnEx(debugParams);
8079 }
8080
8081 else if (action_id ==
EActions.DELETE)
8082 {
8083 Delete();
8084 }
8085
8086 }
8087
8088
8089 return false;
8090 }
8091
8092
8093
8094
8098
8101
8102
8103
8105 {
8106 return false;
8107 }
8108
8109
8111 {
8112 return true;
8113 }
8114
8115
8117 {
8118 return true;
8119 }
8120
8121
8122
8124 {
8125 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8127 }
8128
8131 {
8132 return null;
8133 }
8134
8136 {
8137 return false;
8138 }
8139
8141 {
8142 return false;
8143 }
8144
8148
8149
8151 {
8152 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8153 return module_repairing.CanRepair(this, item_repair_kit);
8154 }
8155
8156
8157 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8158 {
8159 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8160 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8161 }
8162
8163
8165 {
8166
8167
8168
8169
8170
8171
8172
8173
8174 return 1;
8175 }
8176
8177
8178
8180 {
8182 }
8183
8184
8185
8187 {
8189 }
8190
8191
8200 {
8201 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8202
8203 if (player)
8204 {
8205 player.MessageStatus(text);
8206 }
8207 }
8208
8209
8218 {
8219 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8220
8221 if (player)
8222 {
8223 player.MessageAction(text);
8224 }
8225 }
8226
8227
8236 {
8237 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8238
8239 if (player)
8240 {
8241 player.MessageFriendly(text);
8242 }
8243 }
8244
8245
8254 {
8255 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8256
8257 if (player)
8258 {
8259 player.MessageImportant(text);
8260 }
8261 }
8262
8264 {
8265 return true;
8266 }
8267
8268
8269 override bool KindOf(
string tag)
8270 {
8271 bool found = false;
8272 string item_name = this.
GetType();
8275
8276 int array_size = item_tag_array.Count();
8277 for (int i = 0; i < array_size; i++)
8278 {
8279 if (item_tag_array.Get(i) == tag)
8280 {
8281 found = true;
8282 break;
8283 }
8284 }
8285 return found;
8286 }
8287
8288
8290 {
8291
8292 super.OnRPC(sender, rpc_type,ctx);
8293
8294
8295 switch (rpc_type)
8296 {
8297 #ifndef SERVER
8298 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8299 Param2<bool, string> p = new Param2<bool, string>(false, "");
8300
8302 return;
8303
8304 bool play = p.param1;
8305 string soundSet = p.param2;
8306
8307 if (play)
8308 {
8310 {
8312 {
8314 }
8315 }
8316 else
8317 {
8319 }
8320 }
8321 else
8322 {
8324 }
8325
8326 break;
8327 #endif
8328
8329 }
8330
8332 {
8334 }
8335 }
8336
8337
8338
8339
8341 {
8342 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8343 return plugin.GetID(
name);
8344 }
8345
8347 {
8348 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8349 return plugin.GetName(id);
8350 }
8351
8354 {
8355
8356
8357 int varFlags;
8358 if (!ctx.
Read(varFlags))
8359 return;
8360
8361 if (varFlags & ItemVariableFlags.FLOAT)
8362 {
8364 }
8365 }
8366
8368 {
8369
8370 super.SerializeNumericalVars(floats_out);
8371
8372
8373
8375 {
8377 }
8378
8380 {
8382 }
8383
8385 {
8387 }
8388
8390 {
8395 }
8396
8398 {
8400 }
8401 }
8402
8404 {
8405
8406 super.DeSerializeNumericalVars(floats);
8407
8408
8409 int index = 0;
8410 int mask = Math.Round(floats.Get(index));
8411
8412 index++;
8413
8415 {
8417 {
8419 }
8420 else
8421 {
8422 float quantity = floats.Get(index);
8424 }
8425 index++;
8426 }
8427
8429 {
8430 float wet = floats.Get(index);
8432 index++;
8433 }
8434
8436 {
8437 int liquidtype = Math.Round(floats.Get(index));
8439 index++;
8440 }
8441
8443 {
8445 index++;
8447 index++;
8449 index++;
8451 index++;
8452 }
8453
8455 {
8456 int cleanness = Math.Round(floats.Get(index));
8458 index++;
8459 }
8460 }
8461
8463 {
8464 super.WriteVarsToCTX(ctx);
8465
8466
8468 {
8470 }
8471
8473 {
8475 }
8476
8478 {
8480 }
8481
8483 {
8484 int r,g,b,a;
8490 }
8491
8493 {
8495 }
8496 }
8497
8499 {
8500 if (!super.ReadVarsFromCTX(ctx,version))
8501 return false;
8502
8503 int intValue;
8504 float value;
8505
8506 if (version < 140)
8507 {
8508 if (!ctx.
Read(intValue))
8509 return false;
8510
8511 m_VariablesMask = intValue;
8512 }
8513
8515 {
8516 if (!ctx.
Read(value))
8517 return false;
8518
8520 {
8522 }
8523 else
8524 {
8526 }
8527 }
8528
8529 if (version < 140)
8530 {
8532 {
8533 if (!ctx.
Read(value))
8534 return false;
8535 SetTemperatureDirect(value);
8536 }
8537 }
8538
8540 {
8541 if (!ctx.
Read(value))
8542 return false;
8544 }
8545
8547 {
8548 if (!ctx.
Read(intValue))
8549 return false;
8551 }
8552
8554 {
8555 int r,g,b,a;
8557 return false;
8559 return false;
8561 return false;
8563 return false;
8564
8566 }
8567
8569 {
8570 if (!ctx.
Read(intValue))
8571 return false;
8573 }
8574
8575 if (version >= 138 && version < 140)
8576 {
8578 {
8579 if (!ctx.
Read(intValue))
8580 return false;
8581 SetFrozen(intValue);
8582 }
8583 }
8584
8585 return true;
8586 }
8587
8588
8590 {
8593 {
8595 }
8596
8597 if (!super.OnStoreLoad(ctx, version))
8598 {
8600 return false;
8601 }
8602
8603 if (version >= 114)
8604 {
8605 bool hasQuickBarIndexSaved;
8606
8607 if (!ctx.
Read(hasQuickBarIndexSaved))
8608 {
8610 return false;
8611 }
8612
8613 if (hasQuickBarIndexSaved)
8614 {
8615 int itmQBIndex;
8616
8617
8618 if (!ctx.
Read(itmQBIndex))
8619 {
8621 return false;
8622 }
8623
8624 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8625 if (itmQBIndex != -1 && parentPlayer)
8626 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8627 }
8628 }
8629 else
8630 {
8631
8632 PlayerBase player;
8633 int itemQBIndex;
8634 if (version ==
int.
MAX)
8635 {
8636 if (!ctx.
Read(itemQBIndex))
8637 {
8639 return false;
8640 }
8641 }
8642 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8643 {
8644
8645 if (!ctx.
Read(itemQBIndex))
8646 {
8648 return false;
8649 }
8650 if (itemQBIndex != -1 && player)
8651 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8652 }
8653 }
8654
8655 if (version < 140)
8656 {
8657
8658 if (!LoadVariables(ctx, version))
8659 {
8661 return false;
8662 }
8663 }
8664
8665
8667 {
8669 return false;
8670 }
8671 if (version >= 132)
8672 {
8674 if (raib)
8675 {
8677 {
8679 return false;
8680 }
8681 }
8682 }
8683
8685 return true;
8686 }
8687
8688
8689
8691 {
8692 super.OnStoreSave(ctx);
8693
8694 PlayerBase player;
8695 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8696 {
8698
8699 int itemQBIndex = -1;
8700 itemQBIndex = player.FindQuickBarEntityIndex(this);
8701 ctx.
Write(itemQBIndex);
8702 }
8703 else
8704 {
8706 }
8707
8709
8711 if (raib)
8712 {
8714 }
8715 }
8716
8717
8719 {
8720 super.AfterStoreLoad();
8721
8723 {
8725 }
8726
8728 {
8731 }
8732 }
8733
8735 {
8736 super.EEOnAfterLoad();
8737
8739 {
8741 }
8742
8745 }
8746
8748 {
8749 return false;
8750 }
8751
8752
8753
8755 {
8757 {
8758 #ifdef PLATFORM_CONSOLE
8759
8761 {
8763 if (menu)
8764 {
8766 }
8767 }
8768 #endif
8769 }
8770
8772 {
8775 }
8776
8778 {
8779 SetWeightDirty();
8781 }
8783 {
8786 }
8787
8789 {
8792 }
8794 {
8797 }
8798
8799 super.OnVariablesSynchronized();
8800 }
8801
8802
8803
8805 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8806 {
8807 if (!IsServerCheck(allow_client))
8808 return false;
8809
8811 return false;
8812
8815
8816 if (value <= (min + 0.001))
8817 value = min;
8818
8819 if (value == min)
8820 {
8821 if (destroy_config)
8822 {
8823 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8824 if (dstr)
8825 {
8827 this.Delete();
8828 return true;
8829 }
8830 }
8831 else if (destroy_forced)
8832 {
8834 this.Delete();
8835 return true;
8836 }
8837
8839 }
8840
8843
8845 {
8847
8848 if (delta)
8850 }
8851
8853
8854 return false;
8855 }
8856
8857
8859 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8860 {
8862 }
8863
8865 {
8868 }
8869
8871 {
8874 }
8875
8878 {
8879 float value_clamped = Math.Clamp(value, 0, 1);
8881 SetQuantity(result, destroy_config, destroy_forced);
8882 }
8883
8884
8887 {
8889 }
8890
8892 {
8894 }
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8906 {
8907 int slot = -1;
8908 if (GetInventory())
8909 {
8910 InventoryLocation il = new InventoryLocation;
8911 GetInventory().GetCurrentInventoryLocation(il);
8913 }
8914
8916 }
8917
8919 {
8920 float quantity_max = 0;
8921
8923 {
8924 if (attSlotID != -1)
8925 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8926
8927 if (quantity_max <= 0)
8929 }
8930
8931 if (quantity_max <= 0)
8933
8934 return quantity_max;
8935 }
8936
8938 {
8940 }
8941
8943 {
8945 }
8946
8947
8949 {
8951 }
8952
8954 {
8956 }
8957
8959 {
8961 }
8962
8963
8965 {
8966
8967 float weightEx = GetWeightEx();
8968 float special = GetInventoryAndCargoWeight();
8969 return weightEx - special;
8970 }
8971
8972
8974 {
8976 }
8977
8979 {
8981 {
8982 #ifdef DEVELOPER
8983 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8984 {
8985 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8987 }
8988 #endif
8989
8991 }
8992 else if (HasEnergyManager())
8993 {
8994 #ifdef DEVELOPER
8995 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8996 {
8997 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8998 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8999 }
9000 #endif
9001 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9002 }
9003 else
9004 {
9005 #ifdef DEVELOPER
9006 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9007 {
9008 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9009 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9010 }
9011 #endif
9012 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9013 }
9014 }
9015
9018 {
9019 int item_count = 0;
9021
9022 if (GetInventory().GetCargo() != NULL)
9023 {
9024 item_count = GetInventory().GetCargo().GetItemCount();
9025 }
9026
9027 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9028 {
9029 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9030 if (item)
9031 item_count += item.GetNumberOfItems();
9032 }
9033 return item_count;
9034 }
9035
9038 {
9039 float weight = 0;
9040 float wetness = 1;
9041 if (include_wetness)
9044 {
9045 weight = wetness * m_ConfigWeight;
9046 }
9048 {
9049 weight = 1;
9050 }
9051 return weight;
9052 }
9053
9054
9055
9057 {
9058 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9059 {
9060 GameInventory inv = GetInventory();
9061 array<EntityAI> items = new array<EntityAI>;
9063 for (int i = 0; i < items.Count(); i++)
9064 {
9066 if (item)
9067 {
9069 }
9070 }
9071 }
9072 }
9073
9074
9075
9076
9078 {
9079 float energy = 0;
9080 if (HasEnergyManager())
9081 {
9082 energy = GetCompEM().GetEnergy();
9083 }
9084 return energy;
9085 }
9086
9087
9089 {
9090 super.OnEnergyConsumed();
9091
9093 }
9094
9096 {
9097 super.OnEnergyAdded();
9098
9100 }
9101
9102
9104 {
9105 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9106 {
9108 {
9109 float energy_0to1 = GetCompEM().GetEnergy0To1();
9111 }
9112 }
9113 }
9114
9115
9117 {
9118 return ConfigGetFloat("heatIsolation");
9119 }
9120
9122 {
9124 }
9125
9127 {
9128 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9129 if (
GetGame().ConfigIsExisting(paramPath))
9131
9132 return 0.0;
9133 }
9134
9136 {
9137 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9138 if (
GetGame().ConfigIsExisting(paramPath))
9140
9141 return 0.0;
9142 }
9143
9144 override void SetWet(
float value,
bool allow_client =
false)
9145 {
9146 if (!IsServerCheck(allow_client))
9147 return;
9148
9151
9153
9154 m_VarWet = Math.Clamp(value, min, max);
9155
9157 {
9160 }
9161 }
9162
9163 override void AddWet(
float value)
9164 {
9166 }
9167
9169 {
9171 }
9172
9174 {
9176 }
9177
9179 {
9181 }
9182
9184 {
9186 }
9187
9189 {
9191 }
9192
9194 {
9197 if (newLevel != oldLevel)
9198 {
9200 }
9201 }
9202
9204 {
9205 SetWeightDirty();
9206 }
9207
9209 {
9210 return GetWetLevelInternal(
m_VarWet);
9211 }
9212
9213
9214
9216 {
9218 }
9219
9221 {
9223 }
9224
9226 {
9228 }
9229
9231 {
9233 }
9234
9235
9236
9238 {
9239 if (ConfigIsExisting("itemModelLength"))
9240 {
9241 return ConfigGetFloat("itemModelLength");
9242 }
9243 return 0;
9244 }
9245
9247 {
9248 if (ConfigIsExisting("itemAttachOffset"))
9249 {
9250 return ConfigGetFloat("itemAttachOffset");
9251 }
9252 return 0;
9253 }
9254
9255 override void SetCleanness(
int value,
bool allow_client =
false)
9256 {
9257 if (!IsServerCheck(allow_client))
9258 return;
9259
9261
9263
9266 }
9267
9269 {
9271 }
9272
9274 {
9275 return true;
9276 }
9277
9278
9279
9280
9282 {
9284 }
9285
9287 {
9289 }
9290
9291
9292
9293
9294 override void SetColor(
int r,
int g,
int b,
int a)
9295 {
9301 }
9303 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9304 {
9309 }
9310
9312 {
9314 }
9315
9318 {
9319 int r,g,b,a;
9321 r = r/255;
9322 g = g/255;
9323 b = b/255;
9324 a = a/255;
9325 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9326 }
9327
9328
9329
9330 override void SetLiquidType(
int value,
bool allow_client =
false)
9331 {
9332 if (!IsServerCheck(allow_client))
9333 return;
9334
9339 }
9340
9342 {
9343 return ConfigGetInt("varLiquidTypeInit");
9344 }
9345
9347 {
9349 }
9350
9352 {
9354 SetFrozen(false);
9355 }
9356
9359 {
9360 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9361 }
9362
9363
9366 {
9367 PlayerBase nplayer;
9368 if (PlayerBase.CastTo(nplayer, player))
9369 {
9371
9372 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9373 }
9374 }
9375
9376
9379 {
9380 PlayerBase nplayer;
9381 if (PlayerBase.CastTo(nplayer,player))
9382 {
9383
9384 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9385
9386 }
9387
9388
9389 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9390
9391
9392 if (HasEnergyManager())
9393 {
9394 GetCompEM().UpdatePlugState();
9395 }
9396 }
9397
9398
9400 {
9401 super.OnPlacementStarted(player);
9402
9404 }
9405
9406 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9407 {
9409 {
9410 m_AdminLog.OnPlacementComplete(player,
this);
9411 }
9412
9413 super.OnPlacementComplete(player, position, orientation);
9414 }
9415
9416
9417
9418
9419
9421 {
9423 {
9424 return true;
9425 }
9426 else
9427 {
9428 return false;
9429 }
9430 }
9431
9432
9434 {
9436 {
9438 }
9439 }
9440
9441
9443 {
9445 }
9446
9448 {
9450 }
9451
9452 override void InsertAgent(
int agent,
float count = 1)
9453 {
9454 if (count < 1)
9455 return;
9456
9458 }
9459
9462 {
9464 }
9465
9466
9468 {
9470 }
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481
9482
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
9514 {
9516 return false;
9517 return true;
9518 }
9519
9521 {
9522
9524 }
9525
9526
9529 {
9530 super.CheckForRoofLimited(timeTresholdMS);
9531
9533 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9534 {
9535 m_PreviousRoofTestTime = time;
9536 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9537 }
9538 }
9539
9540
9542 {
9544 {
9545 return 0;
9546 }
9547
9548 if (GetInventory().GetAttachmentSlotsCount() != 0)
9549 {
9550 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9551 if (filter)
9552 return filter.GetProtectionLevel(type, false, system);
9553 else
9554 return 0;
9555 }
9556
9557 string subclassPath, entryName;
9558
9559 switch (type)
9560 {
9562 entryName = "biological";
9563 break;
9565 entryName = "chemical";
9566 break;
9567 default:
9568 entryName = "biological";
9569 break;
9570 }
9571
9572 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9573
9575 }
9576
9577
9578
9581 {
9582 if (!IsMagazine())
9584
9586 }
9587
9588
9589
9590
9591
9596 {
9597 return true;
9598 }
9599
9601 {
9603 }
9604
9605
9606
9607
9608
9610 {
9611 if (parent)
9612 {
9613 if (parent.IsInherited(DayZInfected))
9614 return true;
9615
9616 if (!parent.IsRuined())
9617 return true;
9618 }
9619
9620 return true;
9621 }
9622
9624 {
9625 if (!super.CanPutAsAttachment(parent))
9626 {
9627 return false;
9628 }
9629
9630 if (!IsRuined() && !parent.IsRuined())
9631 {
9632 return true;
9633 }
9634
9635 return false;
9636 }
9637
9639 {
9640
9641
9642
9643
9644 return super.CanReceiveItemIntoCargo(item);
9645 }
9646
9648 {
9649
9650
9651
9652
9653 GameInventory attachmentInv = attachment.GetInventory();
9655 {
9656 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9657 return false;
9658 }
9659
9660 InventoryLocation loc = new InventoryLocation();
9661 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9662 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9663 return false;
9664
9665 return super.CanReceiveAttachment(attachment, slotId);
9666 }
9667
9669 {
9670 if (!super.CanReleaseAttachment(attachment))
9671 return false;
9672
9673 return GetInventory().AreChildrenAccessible();
9674 }
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9697 {
9698 int id = muzzle_owner.GetMuzzleID();
9699 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9700
9701 if (WPOF_array)
9702 {
9703 for (int i = 0; i < WPOF_array.Count(); i++)
9704 {
9705 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9706
9707 if (WPOF)
9708 {
9709 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9710 }
9711 }
9712 }
9713 }
9714
9715
9717 {
9718 int id = muzzle_owner.GetMuzzleID();
9720
9721 if (WPOBE_array)
9722 {
9723 for (int i = 0; i < WPOBE_array.Count(); i++)
9724 {
9725 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9726
9727 if (WPOBE)
9728 {
9729 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9730 }
9731 }
9732 }
9733 }
9734
9735
9737 {
9738 int id = muzzle_owner.GetMuzzleID();
9739 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9740
9741 if (WPOOH_array)
9742 {
9743 for (int i = 0; i < WPOOH_array.Count(); i++)
9744 {
9745 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9746
9747 if (WPOOH)
9748 {
9749 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9750 }
9751 }
9752 }
9753 }
9754
9755
9757 {
9758 int id = muzzle_owner.GetMuzzleID();
9759 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9760
9761 if (WPOOH_array)
9762 {
9763 for (int i = 0; i < WPOOH_array.Count(); i++)
9764 {
9765 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9766
9767 if (WPOOH)
9768 {
9769 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9770 }
9771 }
9772 }
9773 }
9774
9775
9777 {
9778 int id = muzzle_owner.GetMuzzleID();
9779 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9780
9781 if (WPOOH_array)
9782 {
9783 for (int i = 0; i < WPOOH_array.Count(); i++)
9784 {
9785 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9786
9787 if (WPOOH)
9788 {
9789 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9790 }
9791 }
9792 }
9793 }
9794
9795
9796
9798 {
9800 {
9801 return true;
9802 }
9803
9804 return false;
9805 }
9806
9808 {
9810 {
9811 return true;
9812 }
9813
9814 return false;
9815 }
9816
9818 {
9820 {
9821 return true;
9822 }
9823
9824 return false;
9825 }
9826
9828 {
9829 return false;
9830 }
9831
9834 {
9835 return UATimeSpent.DEFAULT_DEPLOY;
9836 }
9837
9838
9839
9840
9842 {
9844 SetSynchDirty();
9845 }
9846
9848 {
9850 }
9851
9852
9854 {
9855 return false;
9856 }
9857
9860 {
9861 string att_type = "None";
9862
9863 if (ConfigIsExisting("soundAttType"))
9864 {
9865 att_type = ConfigGetString("soundAttType");
9866 }
9867
9869 }
9870
9872 {
9874 }
9875
9876
9877
9878
9879
9883
9885 {
9888
9890 }
9891
9892
9894 {
9896 return;
9897
9899
9902
9905
9906 SoundParameters params = new SoundParameters();
9910 }
9911
9912
9914 {
9916 return;
9917
9919 SetSynchDirty();
9920
9923 }
9924
9925
9927 {
9929 return;
9930
9932 SetSynchDirty();
9933
9936 }
9937
9939 {
9941 }
9942
9944 {
9946 }
9947
9950 {
9951 if (!
GetGame().IsDedicatedServer())
9952 {
9953 if (ConfigIsExisting("attachSoundSet"))
9954 {
9955 string cfg_path = "";
9956 string soundset = "";
9958
9961 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9962 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9963
9964 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9965 {
9966 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9967 {
9968 if (cfg_slot_array[i] == slot_type)
9969 {
9970 soundset = cfg_soundset_array[i];
9971 break;
9972 }
9973 }
9974 }
9975
9976 if (soundset != "")
9977 {
9978 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9980 }
9981 }
9982 }
9983 }
9984
9986 {
9987
9988 }
9989
9990 void OnApply(PlayerBase player);
9991
9993 {
9994 return 1.0;
9995 };
9996
9998 {
10000 }
10001
10003 {
10005 }
10006
10008
10010 {
10011 SetDynamicPhysicsLifeTime(0.01);
10013 }
10014
10016 {
10017 array<string> zone_names = new array<string>;
10018 GetDamageZones(zone_names);
10019 for (int i = 0; i < zone_names.Count(); i++)
10020 {
10021 SetHealthMax(zone_names.Get(i),"Health");
10022 }
10023 SetHealthMax("","Health");
10024 }
10025
10028 {
10029 float global_health = GetHealth01("","Health");
10030 array<string> zones = new array<string>;
10031 GetDamageZones(zones);
10032
10033 for (int i = 0; i < zones.Count(); i++)
10034 {
10035 SetHealth01(zones.Get(i),"Health",global_health);
10036 }
10037 }
10038
10041 {
10042 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10043 }
10044
10046 {
10047 if (!hasRootAsPlayer)
10048 {
10049 if (refParentIB)
10050 {
10051
10052 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10053 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10054
10055 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10056 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10057
10060 }
10061 else
10062 {
10063
10066 }
10067 }
10068 }
10069
10071 {
10073 {
10074 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10075 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10076 {
10077 float heatPermCoef = 1.0;
10079 while (ent)
10080 {
10081 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10082 ent = ent.GetHierarchyParent();
10083 }
10084
10085 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10086 }
10087 }
10088 }
10089
10091 {
10092
10093 EntityAI parent = GetHierarchyParent();
10094 if (!parent)
10095 {
10096 hasParent = false;
10097 hasRootAsPlayer = false;
10098 }
10099 else
10100 {
10101 hasParent = true;
10102 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10103 refParentIB =
ItemBase.Cast(parent);
10104 }
10105 }
10106
10107 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10108 {
10109
10110 }
10111
10113 {
10114
10115 return false;
10116 }
10117
10119 {
10120
10121
10122 return false;
10123 }
10124
10126 {
10127
10128 return false;
10129 }
10130
10133 {
10134 return !GetIsFrozen() &&
IsOpen();
10135 }
10136
10138 {
10139 bool hasParent = false, hasRootAsPlayer = false;
10141
10142 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10143 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10144
10145 if (wwtu || foodDecay)
10146 {
10150
10151 if (processWetness || processTemperature || processDecay)
10152 {
10154
10155 if (processWetness)
10156 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10157
10158 if (processTemperature)
10160
10161 if (processDecay)
10162 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10163 }
10164 }
10165 }
10166
10169 {
10171 }
10172
10174 {
10177
10178 return super.GetTemperatureFreezeThreshold();
10179 }
10180
10182 {
10185
10186 return super.GetTemperatureThawThreshold();
10187 }
10188
10190 {
10193
10194 return super.GetItemOverheatThreshold();
10195 }
10196
10198 {
10200 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10201
10202 return super.GetTemperatureFreezeTime();
10203 }
10204
10206 {
10208 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10209
10210 return super.GetTemperatureThawTime();
10211 }
10212
10217
10219 {
10220 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10221 }
10222
10224 {
10225 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10226 }
10227
10230 {
10232 }
10233
10235 {
10237 }
10238
10240 {
10242 }
10243
10246 {
10247 return null;
10248 }
10249
10252 {
10253 return false;
10254 }
10255
10257 {
10259 {
10262 if (!trg)
10263 {
10265 explosive = this;
10266 }
10267
10268 explosive.PairRemote(trg);
10270
10271 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10272 trg.SetPersistentPairID(persistentID);
10273 explosive.SetPersistentPairID(persistentID);
10274
10275 return true;
10276 }
10277 return false;
10278 }
10279
10282 {
10283 float ret = 1.0;
10286 ret *= GetHealth01();
10287
10288 return ret;
10289 }
10290
10291 #ifdef DEVELOPER
10292 override void SetDebugItem()
10293 {
10294 super.SetDebugItem();
10295 _itemBase = this;
10296 }
10297
10299 {
10300 string text = super.GetDebugText();
10301
10303 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10304
10305 return text;
10306 }
10307 #endif
10308
10310 {
10311 return true;
10312 }
10313
10315
10317
10319 {
10322 }
10323
10324
10332
10348}
10349
10351{
10353 if (entity)
10354 {
10355 bool is_item = entity.IsInherited(
ItemBase);
10356 if (is_item && full_quantity)
10357 {
10360 }
10361 }
10362 else
10363 {
10365 return NULL;
10366 }
10367 return entity;
10368}
10369
10371{
10372 if (item)
10373 {
10374 if (health > 0)
10375 item.SetHealth("", "", health);
10376
10377 if (item.CanHaveTemperature())
10378 {
10380 if (item.CanFreeze())
10381 item.SetFrozen(false);
10382 }
10383
10384 if (item.HasEnergyManager())
10385 {
10386 if (quantity >= 0)
10387 {
10388 item.GetCompEM().SetEnergy0To1(quantity);
10389 }
10390 else
10391 {
10393 }
10394 }
10395 else if (item.IsMagazine())
10396 {
10397 Magazine mag = Magazine.Cast(item);
10398 if (quantity >= 0)
10399 {
10400 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10401 }
10402 else
10403 {
10405 }
10406
10407 }
10408 else
10409 {
10410 if (quantity >= 0)
10411 {
10412 item.SetQuantityNormalized(quantity, false);
10413 }
10414 else
10415 {
10417 }
10418
10419 }
10420 }
10421}
10422
10423#ifdef DEVELOPER
10425#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.