Infection chance while/after using this item, originally used for wound infection after bandaging, params 'system' and 'param' can allow usage by other systems as well.
5455{
5457 {
5458 return true;
5459 }
5460};
5461
5462
5463
5465{
5469
5471
5474
5475
5476
5477
5478
5487
5493
5498
5503
5524 protected bool m_IsResultOfSplit
5525
5527
5532
5533
5534
5536
5540
5541
5542
5544
5547
5548
5549
5555
5556
5564
5567
5568
5570
5571
5573
5574
5579
5580
5585
5586
5588
5589
5591 {
5596
5597 if (!
GetGame().IsDedicatedServer())
5598 {
5600 {
5602
5604 {
5606 }
5607 }
5608
5611 }
5612
5613 m_OldLocation = null;
5614
5616 {
5618 }
5619
5620 if (ConfigIsExisting("headSelectionsToHide"))
5621 {
5624 }
5625
5627 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5628 {
5630 }
5631
5633
5634 m_IsResultOfSplit = false;
5635
5637 }
5638
5640 {
5641 super.InitItemVariables();
5642
5648 m_Count = ConfigGetInt(
"count");
5649
5652
5657
5660
5665
5677
5681
5682
5685 if (ConfigIsExisting("canBeSplit"))
5686 {
5689 }
5690
5692 if (ConfigIsExisting("itemBehaviour"))
5694
5695
5698 RegisterNetSyncVariableInt("m_VarLiquidType");
5699 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5700
5701 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5702 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5703 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5704
5705 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5706 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5707 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5708 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5709
5710 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5711 RegisterNetSyncVariableBool("m_IsTakeable");
5712 RegisterNetSyncVariableBool("m_IsHologram");
5713
5716 {
5719 }
5720
5722
5724 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5726
5727 }
5728
5730 {
5732 }
5733
5735 {
5738 {
5743 }
5744 }
5745
5746 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5747 {
5749 {
5752 }
5753
5755 }
5756
5758 {
5764 }
5765
5767
5769 {
5771
5772 if (!action)
5773 {
5774 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5775 return;
5776 }
5777
5779 if (!ai)
5780 {
5782 return;
5783 }
5784
5786 if (!action_array)
5787 {
5788 action_array = new array<ActionBase_Basic>;
5790 }
5791 if (LogManager.IsActionLogEnable())
5792 {
5793 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5794 }
5795
5796 if (action_array.Find(action) != -1)
5797 {
5798 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5799 }
5800 else
5801 {
5802 action_array.Insert(action);
5803 }
5804 }
5805
5807 {
5809 ActionBase action = player.GetActionManager().GetAction(actionName);
5812
5813 if (action_array)
5814 {
5815 action_array.RemoveItem(action);
5816 }
5817 }
5818
5819
5820
5822 {
5823 ActionOverrideData overrideData = new ActionOverrideData();
5827
5829 if (!actionMap)
5830 {
5833 }
5834
5835 actionMap.Insert(this.
Type(), overrideData);
5836
5837 }
5838
5840
5842
5843
5845 {
5848
5851
5852 string config_to_search = "CfgVehicles";
5853 string muzzle_owner_config;
5854
5856 {
5857 if (IsInherited(Weapon))
5858 config_to_search = "CfgWeapons";
5859
5860 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5861
5862 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5863
5865
5866 if (config_OnFire_subclass_count > 0)
5867 {
5868 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5869
5870 for (int i = 0; i < config_OnFire_subclass_count; i++)
5871 {
5872 string particle_class = "";
5874 string config_OnFire_entry = config_OnFire_class + particle_class;
5875 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5876 WPOF_array.Insert(WPOF);
5877 }
5878
5879
5881 }
5882 }
5883
5885 {
5886 config_to_search = "CfgWeapons";
5887 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5888
5889 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
5890
5892
5893 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
5894 {
5895 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
5896
5897 for (i = 0; i < config_OnBulletCasingEject_count; i++)
5898 {
5899 string particle_class2 = "";
5901 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
5902 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
5903 WPOBE_array.Insert(WPOBE);
5904 }
5905
5906
5908 }
5909 }
5910 }
5911
5912
5914 {
5917
5919 {
5920 string config_to_search = "CfgVehicles";
5921
5922 if (IsInherited(Weapon))
5923 config_to_search = "CfgWeapons";
5924
5925 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5926 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
5927
5928 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
5929 {
5930
5932
5934 {
5936 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
5938 return;
5939 }
5940
5943
5944
5945
5947 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
5948
5949 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
5950 {
5951 string particle_class = "";
5953 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
5955
5956 if (entry_type == CT_CLASS)
5957 {
5958 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
5959 WPOOH_array.Insert(WPOF);
5960 }
5961 }
5962
5963
5965 }
5966 }
5967 }
5968
5970 {
5972 }
5973
5975 {
5977 {
5979
5982
5985
5986 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5987 }
5988 }
5989
5991 {
5993 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5994
5996 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5997
5999 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6000
6002 {
6004 }
6005 }
6006
6008 {
6010 }
6011
6013 {
6016 else
6018
6020 {
6023 }
6024 else
6025 {
6028
6031 }
6032
6034 }
6035
6037 {
6039 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6040 }
6041
6043 {
6045 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6047 }
6048
6050 {
6052 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6053 }
6054
6056 {
6059
6060 OverheatingParticle OP = new OverheatingParticle();
6065
6067 }
6068
6070 {
6073
6074 return -1;
6075 }
6076
6078 {
6080 {
6083
6084 for (int i = count; i > 0; --i)
6085 {
6086 int id = i - 1;
6089
6092
6093 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6094 {
6095 if (p)
6096 {
6099 }
6100 }
6101 }
6102 }
6103 }
6104
6106 {
6108 {
6110 {
6111 int id = i - 1;
6113
6114 if (OP)
6115 {
6117
6118 if (p)
6119 {
6121 }
6122
6123 delete OP;
6124 }
6125 }
6126
6129 }
6130 }
6131
6134 {
6135 return 0.0;
6136 }
6137
6138
6140 {
6141 return 250;
6142 }
6143
6145 {
6146 return 0;
6147 }
6148
6151 {
6153 return true;
6154
6155 return false;
6156 }
6157
6160 {
6163
6165 {
6167 }
6168 else
6169 {
6170
6172 }
6173
6175 }
6176
6183 {
6184 return -1;
6185 }
6186
6187
6188
6189
6191 {
6193 {
6195 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6196
6197 if (r_index >= 0)
6198 {
6199 InventoryLocation r_il = new InventoryLocation;
6200 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6201
6202 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6205 {
6206 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6207 }
6209 {
6210 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6211 }
6212
6213 }
6214
6215 player.GetHumanInventory().ClearUserReservedLocation(this);
6216 }
6217
6220 }
6221
6222
6223
6224
6226 {
6227 return ItemBase.m_DebugActionsMask;
6228 }
6229
6231 {
6232 return ItemBase.m_DebugActionsMask & mask;
6233 }
6234
6236 {
6237 ItemBase.m_DebugActionsMask = mask;
6238 }
6239
6241 {
6242 ItemBase.m_DebugActionsMask |= mask;
6243 }
6244
6246 {
6247 ItemBase.m_DebugActionsMask &= ~mask;
6248 }
6249
6251 {
6253 {
6255 }
6256 else
6257 {
6259 }
6260 }
6261
6262
6264 {
6265 if (GetEconomyProfile())
6266 {
6267 float q_max = GetEconomyProfile().GetQuantityMax();
6268 if (q_max > 0)
6269 {
6270 float q_min = GetEconomyProfile().GetQuantityMin();
6271 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6272
6274 {
6275 ComponentEnergyManager comp = GetCompEM();
6277 {
6279 }
6280 }
6282 {
6284
6285 }
6286
6287 }
6288 }
6289 }
6290
6293 {
6294 EntityAI parent = GetHierarchyParent();
6295
6296 if (parent)
6297 {
6298 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6299 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6300 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6301 }
6302 }
6303
6306 {
6307 EntityAI parent = GetHierarchyParent();
6308
6309 if (parent)
6310 {
6311 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6312 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6313 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6314 }
6315 }
6316
6318 {
6319
6320
6321
6322
6324
6326 {
6327 if (ScriptInputUserData.CanStoreInputUserData())
6328 {
6329 ScriptInputUserData ctx = new ScriptInputUserData;
6335 ctx.
Write(use_stack_max);
6338
6340 {
6341 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6342 }
6343 }
6344 }
6345 else if (!
GetGame().IsMultiplayer())
6346 {
6348 }
6349 }
6350
6352 {
6354 }
6355
6357 {
6359 }
6360
6362 {
6364 }
6365
6367 {
6368
6369 return false;
6370 }
6371
6373 {
6374 return false;
6375 }
6376
6380 {
6381 return false;
6382 }
6383
6385 {
6386 return "";
6387 }
6388
6390
6392 {
6393 return false;
6394 }
6395
6397 {
6398 return true;
6399 }
6400
6401
6402
6404 {
6405 return true;
6406 }
6407
6409 {
6410 return true;
6411 }
6412
6414 {
6415 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6417 }
6418
6420 {
6422 }
6423
6425 {
6427 if (!is_being_placed)
6429 SetSynchDirty();
6430 }
6431
6432
6434
6436 {
6438 }
6439
6441 {
6443 }
6444
6446 {
6447 return 1;
6448 }
6449
6451 {
6452 return false;
6453 }
6454
6456 {
6458 SetSynchDirty();
6459 }
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6496 {
6497 super.OnMovedInsideCargo(container);
6498
6499 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6500 }
6501
6502 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6503 {
6504 super.EEItemLocationChanged(oldLoc,newLoc);
6505
6506 PlayerBase new_player = null;
6507 PlayerBase old_player = null;
6508
6509 if (newLoc.GetParent())
6510 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6511
6512 if (oldLoc.GetParent())
6513 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6514
6516 {
6517 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6518
6519 if (r_index >= 0)
6520 {
6521 InventoryLocation r_il = new InventoryLocation;
6522 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6523
6524 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6527 {
6528 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6529 }
6531 {
6532 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6533 }
6534
6535 }
6536 }
6537
6539 {
6540 if (new_player)
6541 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6542
6543 if (new_player == old_player)
6544 {
6545
6546 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6547 {
6549 {
6550 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6551 {
6552 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6553 }
6554 }
6555 else
6556 {
6557 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6558 }
6559 }
6560
6561 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6562 {
6563 int type = oldLoc.GetType();
6565 {
6566 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6567 }
6569 {
6570 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6571 }
6572 }
6573 if (!m_OldLocation)
6574 {
6575 m_OldLocation = new InventoryLocation;
6576 }
6577 m_OldLocation.Copy(oldLoc);
6578 }
6579 else
6580 {
6581 if (m_OldLocation)
6582 {
6583 m_OldLocation.Reset();
6584 }
6585 }
6586
6588 }
6589 else
6590 {
6591 if (new_player)
6592 {
6593 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6594 if (res_index >= 0)
6595 {
6596 InventoryLocation il = new InventoryLocation;
6597 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6599 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6602 {
6603 il.
GetParent().GetOnReleaseLock().Invoke(it);
6604 }
6606 {
6608 }
6609
6610 }
6611 }
6613 {
6614
6616 }
6617
6618 if (m_OldLocation)
6619 {
6620 m_OldLocation.Reset();
6621 }
6622 }
6623 }
6624
6625 override void EOnContact(IEntity other, Contact extra)
6626 {
6628 {
6629 int liquidType = -1;
6631 if (impactSpeed > 0.0)
6632 {
6634 #ifndef SERVER
6636 #else
6638 SetSynchDirty();
6639 #endif
6641 }
6642 }
6643
6644 #ifdef SERVER
6645 if (GetCompEM() && GetCompEM().IsPlugged())
6646 {
6647 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6648 GetCompEM().UnplugThis();
6649 }
6650 #endif
6651 }
6652
6654
6656 {
6658 }
6659
6661 {
6662
6663 }
6664
6666 {
6667 super.OnItemLocationChanged(old_owner, new_owner);
6668
6669 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6670 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6671
6672 if (!relatedPlayer && playerNew)
6673 relatedPlayer = playerNew;
6674
6675 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6676 {
6678 if (actionMgr)
6679 {
6680 ActionBase currentAction = actionMgr.GetRunningAction();
6681 if (currentAction)
6683 }
6684 }
6685
6686 Man ownerPlayerOld = null;
6687 Man ownerPlayerNew = null;
6688
6689 if (old_owner)
6690 {
6691 if (old_owner.
IsMan())
6692 {
6693 ownerPlayerOld = Man.Cast(old_owner);
6694 }
6695 else
6696 {
6697 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6698 }
6699 }
6700 else
6701 {
6703 {
6705
6706 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6707 {
6708 GetCompEM().UnplugThis();
6709 }
6710 }
6711 }
6712
6713 if (new_owner)
6714 {
6715 if (new_owner.
IsMan())
6716 {
6717 ownerPlayerNew = Man.Cast(new_owner);
6718 }
6719 else
6720 {
6721 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6722 }
6723 }
6724
6725 if (ownerPlayerOld != ownerPlayerNew)
6726 {
6727 if (ownerPlayerOld)
6728 {
6729 array<EntityAI> subItemsExit = new array<EntityAI>;
6731 for (int i = 0; i < subItemsExit.Count(); i++)
6732 {
6735 }
6736 }
6737
6738 if (ownerPlayerNew)
6739 {
6740 array<EntityAI> subItemsEnter = new array<EntityAI>;
6742 for (int j = 0; j < subItemsEnter.Count(); j++)
6743 {
6746 }
6747 }
6748 }
6749 else if (ownerPlayerNew != null)
6750 {
6751 PlayerBase nplayer;
6752 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6753 {
6754 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6756 for (int k = 0; k < subItemsUpdate.Count(); k++)
6757 {
6759 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6760 }
6761 }
6762 }
6763
6764 if (old_owner)
6765 old_owner.OnChildItemRemoved(this);
6766 if (new_owner)
6767 new_owner.OnChildItemReceived(this);
6768 }
6769
6770
6772 {
6773 super.EEDelete(parent);
6774 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6775 if (player)
6776 {
6778
6779 if (player.IsAlive())
6780 {
6781 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6782 if (r_index >= 0)
6783 {
6784 InventoryLocation r_il = new InventoryLocation;
6785 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6786
6787 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6790 {
6791 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6792 }
6794 {
6795 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6796 }
6797
6798 }
6799
6800 player.RemoveQuickBarEntityShortcut(this);
6801 }
6802 }
6803 }
6804
6806 {
6807 super.EEKilled(killer);
6808
6811 {
6812 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6813 {
6814 if (IsMagazine())
6815 {
6816 if (Magazine.Cast(this).GetAmmoCount() > 0)
6817 {
6819 }
6820 }
6821 else
6822 {
6824 }
6825 }
6826 }
6827 }
6828
6830 {
6831 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6832
6833 super.OnWasAttached(parent, slot_id);
6834
6837
6839 }
6840
6842 {
6843 super.OnWasDetached(parent, slot_id);
6844
6847 }
6848
6850 {
6851 int idx;
6854
6855 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6856 if (inventory_slots.Count() < 1)
6857 {
6858 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6859 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6860 }
6861 else
6862 {
6863 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6864 }
6865
6866 idx = inventory_slots.Find(slot);
6867 if (idx < 0)
6868 return "";
6869
6870 return attach_types.Get(idx);
6871 }
6872
6874 {
6875 int idx = -1;
6876 string slot;
6877
6880
6881 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6882 if (inventory_slots.Count() < 1)
6883 {
6884 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
6885 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6886 }
6887 else
6888 {
6889 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
6890 if (detach_types.Count() < 1)
6891 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6892 }
6893
6894 for (int i = 0; i < inventory_slots.Count(); i++)
6895 {
6896 slot = inventory_slots.Get(i);
6897 }
6898
6899 if (slot != "")
6900 {
6901 if (detach_types.Count() == 1)
6902 idx = 0;
6903 else
6904 idx = inventory_slots.Find(slot);
6905 }
6906 if (idx < 0)
6907 return "";
6908
6909 return detach_types.Get(idx);
6910 }
6911
6913 {
6914
6916
6917
6918 float min_time = 1;
6919 float max_time = 3;
6920 float delay = Math.RandomFloat(min_time, max_time);
6921
6922 explode_timer.Run(delay, this, "DoAmmoExplosion");
6923 }
6924
6926 {
6927 Magazine magazine = Magazine.Cast(this);
6928 int pop_sounds_count = 6;
6929 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
6930
6931
6932 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
6933 string sound_name = pop_sounds[ sound_idx ];
6935
6936
6937 magazine.ServerAddAmmoCount(-1);
6938
6939
6940 float min_temp_to_explode = 100;
6941
6942 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
6943 {
6945 }
6946 }
6947
6948
6949 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
6950 {
6951 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
6952
6953 const int CHANCE_DAMAGE_CARGO = 4;
6954 const int CHANCE_DAMAGE_ATTACHMENT = 1;
6955 const int CHANCE_DAMAGE_NOTHING = 2;
6956
6958 {
6959 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
6960 int chances;
6961 int rnd;
6962
6963 if (GetInventory().GetCargo())
6964 {
6965 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6966 rnd = Math.RandomInt(0,chances);
6967
6968 if (rnd < CHANCE_DAMAGE_CARGO)
6969 {
6971 }
6972 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
6973 {
6975 }
6976 }
6977 else
6978 {
6979 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6980 rnd = Math.RandomInt(0,chances);
6981
6982 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
6983 {
6985 }
6986 }
6987 }
6988 }
6989
6991 {
6992 if (GetInventory().GetCargo())
6993 {
6994 int item_count = GetInventory().GetCargo().GetItemCount();
6995 if (item_count > 0)
6996 {
6997 int random_pick = Math.RandomInt(0, item_count);
6999 if (!item.IsExplosive())
7000 {
7001 item.AddHealth("","",damage);
7002 return true;
7003 }
7004 }
7005 }
7006 return false;
7007 }
7008
7010 {
7011 int attachment_count = GetInventory().AttachmentCount();
7012 if (attachment_count > 0)
7013 {
7014 int random_pick = Math.RandomInt(0, attachment_count);
7015 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7016 if (!attachment.IsExplosive())
7017 {
7018 attachment.AddHealth("","",damage);
7019 return true;
7020 }
7021 }
7022 return false;
7023 }
7024
7026 {
7028 }
7029
7031 {
7033 return GetInventory().CanRemoveEntity();
7034
7035 return false;
7036 }
7037
7039 {
7041 return;
7042
7044 {
7045 if (ScriptInputUserData.CanStoreInputUserData())
7046 {
7047 ScriptInputUserData ctx = new ScriptInputUserData;
7052 ctx.
Write(destination_entity);
7056 }
7057 }
7058 else if (!
GetGame().IsMultiplayer())
7059 {
7061 }
7062 }
7063
7065 {
7067 return;
7068
7069 float split_quantity_new;
7073 InventoryLocation loc = new InventoryLocation;
7074
7075 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7076 {
7078 split_quantity_new = stack_max;
7079 else
7081
7082 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7083 if (new_item)
7084 {
7085 new_item.SetResultOfSplit(true);
7086 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7088 new_item.SetQuantity(split_quantity_new);
7089 }
7090 }
7091 else if (destination_entity && slot_id == -1)
7092 {
7093 if (quantity > stack_max)
7094 split_quantity_new = stack_max;
7095 else
7096 split_quantity_new = quantity;
7097
7099 {
7102 }
7103
7104 if (new_item)
7105 {
7106 new_item.SetResultOfSplit(true);
7107 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7109 new_item.SetQuantity(split_quantity_new);
7110 }
7111 }
7112 else
7113 {
7114 if (stack_max != 0)
7115 {
7117 {
7119 }
7120
7121 if (split_quantity_new == 0)
7122 {
7123 if (!
GetGame().IsMultiplayer())
7124 player.PhysicalPredictiveDropItem(this);
7125 else
7126 player.ServerDropEntity(this);
7127 return;
7128 }
7129
7131
7132 if (new_item)
7133 {
7134 new_item.SetResultOfSplit(true);
7135 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7137 new_item.SetQuantity(stack_max);
7138 new_item.PlaceOnSurface();
7139 }
7140 }
7141 }
7142 }
7143
7145 {
7147 return;
7148
7149 float split_quantity_new;
7153 InventoryLocation loc = new InventoryLocation;
7154
7155 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7156 {
7158 split_quantity_new = stack_max;
7159 else
7161
7162 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7163 if (new_item)
7164 {
7165 new_item.SetResultOfSplit(true);
7166 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7168 new_item.SetQuantity(split_quantity_new);
7169 }
7170 }
7171 else if (destination_entity && slot_id == -1)
7172 {
7173 if (quantity > stack_max)
7174 split_quantity_new = stack_max;
7175 else
7176 split_quantity_new = quantity;
7177
7179 {
7182 }
7183
7184 if (new_item)
7185 {
7186 new_item.SetResultOfSplit(true);
7187 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7189 new_item.SetQuantity(split_quantity_new);
7190 }
7191 }
7192 else
7193 {
7194 if (stack_max != 0)
7195 {
7197 {
7199 }
7200
7202
7203 if (new_item)
7204 {
7205 new_item.SetResultOfSplit(true);
7206 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7208 new_item.SetQuantity(stack_max);
7209 new_item.PlaceOnSurface();
7210 }
7211 }
7212 }
7213 }
7214
7216 {
7218 return;
7219
7221 {
7222 if (ScriptInputUserData.CanStoreInputUserData())
7223 {
7224 ScriptInputUserData ctx = new ScriptInputUserData;
7229 dst.WriteToContext(ctx);
7231 }
7232 }
7233 else if (!
GetGame().IsMultiplayer())
7234 {
7236 }
7237 }
7238
7240 {
7242 return;
7243
7245 {
7246 if (ScriptInputUserData.CanStoreInputUserData())
7247 {
7248 ScriptInputUserData ctx = new ScriptInputUserData;
7253 ctx.
Write(destination_entity);
7259 }
7260 }
7261 else if (!
GetGame().IsMultiplayer())
7262 {
7264 }
7265 }
7266
7268 {
7270 }
7271
7273 {
7275 return this;
7276
7278 float split_quantity_new;
7280 if (dst.IsValid())
7281 {
7282 int slot_id = dst.GetSlot();
7284
7285 if (quantity > stack_max)
7286 split_quantity_new = stack_max;
7287 else
7288 split_quantity_new = quantity;
7289
7291
7292 if (new_item)
7293 {
7294 new_item.SetResultOfSplit(true);
7295 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7298 }
7299
7300 return new_item;
7301 }
7302
7303 return null;
7304 }
7305
7307 {
7309 return;
7310
7312 float split_quantity_new;
7314 if (destination_entity)
7315 {
7317 if (quantity > stackable)
7318 split_quantity_new = stackable;
7319 else
7320 split_quantity_new = quantity;
7321
7322 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7323 if (new_item)
7324 {
7325 new_item.SetResultOfSplit(true);
7326 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7328 new_item.SetQuantity(split_quantity_new);
7329 }
7330 }
7331 }
7332
7334 {
7336 return;
7337
7339 {
7340 if (ScriptInputUserData.CanStoreInputUserData())
7341 {
7342 ScriptInputUserData ctx = new ScriptInputUserData;
7347 ItemBase destination_entity =
this;
7348 ctx.
Write(destination_entity);
7352 }
7353 }
7354 else if (!
GetGame().IsMultiplayer())
7355 {
7357 }
7358 }
7359
7361 {
7363 return;
7364
7366 float split_quantity_new;
7368 if (player)
7369 {
7371 if (quantity > stackable)
7372 split_quantity_new = stackable;
7373 else
7374 split_quantity_new = quantity;
7375
7376 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7377 new_item =
ItemBase.Cast(in_hands);
7378 if (new_item)
7379 {
7380 new_item.SetResultOfSplit(true);
7381 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7383 new_item.SetQuantity(split_quantity_new);
7384 }
7385 }
7386 }
7387
7389 {
7391 return;
7392
7394 float split_quantity_new = Math.Floor(quantity * 0.5);
7395
7397
7398 if (new_item)
7399 {
7400 if (new_item.GetQuantityMax() < split_quantity_new)
7401 {
7402 split_quantity_new = new_item.GetQuantityMax();
7403 }
7404
7405 new_item.SetResultOfSplit(true);
7406 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7407
7409 {
7412 }
7413 else
7414 {
7417 }
7418 }
7419 }
7420
7422 {
7424 return;
7425
7427 float split_quantity_new = Math.Floor(quantity / 2);
7428
7429 InventoryLocation invloc = new InventoryLocation;
7431
7433 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7434
7435 if (new_item)
7436 {
7437 if (new_item.GetQuantityMax() < split_quantity_new)
7438 {
7439 split_quantity_new = new_item.GetQuantityMax();
7440 }
7442 {
7445 }
7446 else
7447 {
7450 }
7451 }
7452 }
7453
7456 {
7457 SetWeightDirty();
7459
7460 if (parent)
7461 parent.OnAttachmentQuantityChangedEx(this, delta);
7462
7464 {
7466 {
7468 }
7470 {
7471 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7473 }
7474 }
7475
7476 }
7477
7480 {
7481
7482 }
7483
7486 {
7488 }
7489
7491 {
7492 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7493
7495 {
7496 if (newLevel == GameConstants.STATE_RUINED)
7497 {
7499 EntityAI parent = GetHierarchyParent();
7500 if (parent && parent.IsFireplace())
7501 {
7502 CargoBase cargo = GetInventory().GetCargo();
7503 if (cargo)
7504 {
7506 {
7508 }
7509 }
7510 }
7511 }
7512
7514 {
7515
7517 return;
7518 }
7519
7520 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7521 {
7523 }
7524 }
7525 }
7526
7527
7529 {
7530 super.OnRightClick();
7531
7533 {
7535 {
7536 if (ScriptInputUserData.CanStoreInputUserData())
7537 {
7538 vector m4[4];
7540
7541 EntityAI root = GetHierarchyRoot();
7542
7543 InventoryLocation dst = new InventoryLocation;
7545 {
7546 if (root)
7547 {
7548 root.GetTransform(m4);
7550 }
7551 else
7552 GetInventory().GetCurrentInventoryLocation(dst);
7553 }
7554 else
7555 {
7557
7558
7559 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7560 {
7561 if (root)
7562 {
7563 root.GetTransform(m4);
7565 }
7566 else
7567 GetInventory().GetCurrentInventoryLocation(dst);
7568 }
7569 else
7570 {
7571 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7572 }
7573 }
7574
7575 ScriptInputUserData ctx = new ScriptInputUserData;
7583 }
7584 }
7585 else if (!
GetGame().IsMultiplayer())
7586 {
7588 }
7589 }
7590 }
7591
7592 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7593 {
7594
7595 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7596 return false;
7597
7598 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7599 return false;
7600
7601
7603 return false;
7604
7605
7606 Magazine mag = Magazine.Cast(this);
7607 if (mag)
7608 {
7609 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7610 return false;
7611
7612 if (stack_max_limit)
7613 {
7614 Magazine other_mag = Magazine.Cast(other_item);
7615 if (other_item)
7616 {
7617 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7618 return false;
7619 }
7620
7621 }
7622 }
7623 else
7624 {
7625
7627 return false;
7628
7630 return false;
7631 }
7632
7633 PlayerBase player = null;
7634 if (CastTo(player, GetHierarchyRootPlayer()))
7635 {
7636 if (player.GetInventory().HasAttachment(this))
7637 return false;
7638
7639 if (player.IsItemsToDelete())
7640 return false;
7641 }
7642
7643 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7644 return false;
7645
7646 int slotID;
7648 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7649 return false;
7650
7651 return true;
7652 }
7653
7655 {
7657 }
7658
7660 {
7661 return m_IsResultOfSplit;
7662 }
7663
7665 {
7666 m_IsResultOfSplit = value;
7667 }
7668
7670 {
7672 }
7673
7675 {
7676 float other_item_quantity = other_item.GetQuantity();
7677 float this_free_space;
7678
7680
7682
7683 if (other_item_quantity > this_free_space)
7684 {
7685 return this_free_space;
7686 }
7687 else
7688 {
7689 return other_item_quantity;
7690 }
7691 }
7692
7694 {
7696 }
7697
7699 {
7701 return;
7702
7703 if (!IsMagazine() && other_item)
7704 {
7706 if (quantity_used != 0)
7707 {
7708 float hp1 = GetHealth01("","");
7709 float hp2 = other_item.GetHealth01("","");
7710 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7711 hpResult = hpResult / (
GetQuantity() + quantity_used);
7712
7713 hpResult *= GetMaxHealth();
7714 Math.Round(hpResult);
7715 SetHealth("", "Health", hpResult);
7716
7718 other_item.AddQuantity(-quantity_used);
7719 }
7720 }
7722 }
7723
7725 {
7726 #ifdef SERVER
7727 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7728 GetHierarchyParent().IncreaseLifetimeUp();
7729 #endif
7730 };
7731
7733 {
7734 PlayerBase p = PlayerBase.Cast(player);
7735
7736 array<int> recipesIds = p.m_Recipes;
7737 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7738 if (moduleRecipesManager)
7739 {
7740 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7741 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7742 }
7743
7744 for (int i = 0;i < recipesIds.Count(); i++)
7745 {
7746 int key = recipesIds.Get(i);
7747 string recipeName = moduleRecipesManager.GetRecipeName(key);
7749 }
7750 }
7751
7752
7753 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7754 {
7755 super.GetDebugActions(outputList);
7756
7757
7762
7763
7767
7771
7772
7775
7776
7778 {
7781 }
7782
7784
7787
7791 }
7792
7793
7794
7795
7797 {
7798 super.OnAction(action_id, player, ctx);
7799 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7800 {
7801 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7802 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7803 PlayerBase p = PlayerBase.Cast(player);
7804 if (
EActions.RECIPES_RANGE_START < 1000)
7805 {
7806 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7807 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7808 }
7809 }
7810 #ifndef SERVER
7811 else if (action_id ==
EActions.WATCH_PLAYER)
7812 {
7813 PluginDeveloper.SetDeveloperItemClientEx(player);
7814 }
7815 #endif
7817 {
7818 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7819 {
7820 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7821 OnDebugButtonPressServer(id + 1);
7822 }
7823
7824 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7825 {
7826 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7828 }
7829
7830 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7831 {
7832 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7834 }
7835
7836 else if (action_id ==
EActions.ADD_QUANTITY)
7837 {
7838 if (IsMagazine())
7839 {
7840 Magazine mag = Magazine.Cast(this);
7841 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7842 }
7843 else
7844 {
7846 }
7847
7848 if (m_EM)
7849 {
7850 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7851 }
7852
7853 }
7854
7855 else if (action_id ==
EActions.REMOVE_QUANTITY)
7856 {
7857 if (IsMagazine())
7858 {
7859 Magazine mag2 = Magazine.Cast(this);
7860 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7861 }
7862 else
7863 {
7865 }
7866 if (m_EM)
7867 {
7868 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7869 }
7870
7871 }
7872
7873 else if (action_id ==
EActions.SET_QUANTITY_0)
7874 {
7876
7877 if (m_EM)
7878 {
7879 m_EM.SetEnergy(0);
7880 }
7881 }
7882
7883 else if (action_id ==
EActions.SET_MAX_QUANTITY)
7884 {
7886
7887 if (m_EM)
7888 {
7889 m_EM.SetEnergy(m_EM.GetEnergyMax());
7890 }
7891 }
7892
7893 else if (action_id ==
EActions.ADD_HEALTH)
7894 {
7895 AddHealth("","",GetMaxHealth("","Health")/5);
7896 }
7897 else if (action_id ==
EActions.REMOVE_HEALTH)
7898 {
7899 AddHealth("","",-GetMaxHealth("","Health")/5);
7900 }
7901 else if (action_id ==
EActions.DESTROY_HEALTH)
7902 {
7903 SetHealth01("","",0);
7904 }
7905 else if (action_id ==
EActions.WATCH_ITEM)
7906 {
7908 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
7909 #ifdef DEVELOPER
7910 SetDebugDeveloper_item(this);
7911 #endif
7912 }
7913
7914 else if (action_id ==
EActions.ADD_TEMPERATURE)
7915 {
7916 AddTemperature(20);
7917
7918 }
7919
7920 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
7921 {
7922 AddTemperature(-20);
7923
7924 }
7925
7926 else if (action_id ==
EActions.FLIP_FROZEN)
7927 {
7928 SetFrozen(!GetIsFrozen());
7929
7930 }
7931
7932 else if (action_id ==
EActions.ADD_WETNESS)
7933 {
7935
7936 }
7937
7938 else if (action_id ==
EActions.REMOVE_WETNESS)
7939 {
7941
7942 }
7943
7944 else if (action_id ==
EActions.LIQUIDTYPE_UP)
7945 {
7948
7949
7950 }
7951
7952 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
7953 {
7956 }
7957
7958 else if (action_id ==
EActions.MAKE_SPECIAL)
7959 {
7960 auto debugParams = DebugSpawnParams.WithPlayer(player);
7961 OnDebugSpawnEx(debugParams);
7962 }
7963
7964 else if (action_id ==
EActions.DELETE)
7965 {
7966 Delete();
7967 }
7968
7969 }
7970
7971
7972 return false;
7973 }
7974
7975
7976
7977
7981
7984
7985
7986
7988 {
7989 return false;
7990 }
7991
7992
7994 {
7995 return true;
7996 }
7997
7998
8000 {
8001 return true;
8002 }
8003
8004
8005
8007 {
8008 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8010 }
8011
8014 {
8015 return null;
8016 }
8017
8019 {
8020 return false;
8021 }
8022
8024 {
8025 return false;
8026 }
8027
8031
8032
8034 {
8035 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8036 return module_repairing.CanRepair(this, item_repair_kit);
8037 }
8038
8039
8040 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8041 {
8042 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8043 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8044 }
8045
8046
8048 {
8049
8050
8051
8052
8053
8054
8055
8056
8057 return 1;
8058 }
8059
8060
8061
8063 {
8065 }
8066
8067
8068
8070 {
8072 }
8073
8074
8083 {
8084 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8085
8086 if (player)
8087 {
8088 player.MessageStatus(text);
8089 }
8090 }
8091
8092
8101 {
8102 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8103
8104 if (player)
8105 {
8106 player.MessageAction(text);
8107 }
8108 }
8109
8110
8119 {
8120 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8121
8122 if (player)
8123 {
8124 player.MessageFriendly(text);
8125 }
8126 }
8127
8128
8137 {
8138 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8139
8140 if (player)
8141 {
8142 player.MessageImportant(text);
8143 }
8144 }
8145
8147 {
8148 return true;
8149 }
8150
8151
8152 override bool KindOf(
string tag)
8153 {
8154 bool found = false;
8155 string item_name = this.
GetType();
8158
8159 int array_size = item_tag_array.Count();
8160 for (int i = 0; i < array_size; i++)
8161 {
8162 if (item_tag_array.Get(i) == tag)
8163 {
8164 found = true;
8165 break;
8166 }
8167 }
8168 return found;
8169 }
8170
8171
8173 {
8174
8175 super.OnRPC(sender, rpc_type,ctx);
8176
8177
8178 switch (rpc_type)
8179 {
8180 #ifndef SERVER
8181 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8182 Param2<bool, string> p = new Param2<bool, string>(false, "");
8183
8185 return;
8186
8187 bool play = p.param1;
8188 string soundSet = p.param2;
8189
8190 if (play)
8191 {
8193 {
8195 {
8197 }
8198 }
8199 else
8200 {
8202 }
8203 }
8204 else
8205 {
8207 }
8208
8209 break;
8210 #endif
8211
8212 }
8213
8215 {
8217 }
8218 }
8219
8220
8221
8222
8224 {
8225 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8226 return plugin.GetID(
name);
8227 }
8228
8230 {
8231 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8232 return plugin.GetName(id);
8233 }
8234
8237 {
8238
8239
8240 int varFlags;
8241 if (!ctx.
Read(varFlags))
8242 return;
8243
8244 if (varFlags & ItemVariableFlags.FLOAT)
8245 {
8247 }
8248 }
8249
8251 {
8252
8253 super.SerializeNumericalVars(floats_out);
8254
8255
8256
8258 {
8260 }
8261
8263 {
8265 }
8266
8268 {
8270 }
8271
8273 {
8278 }
8279
8281 {
8283 }
8284 }
8285
8287 {
8288
8289 super.DeSerializeNumericalVars(floats);
8290
8291
8292 int index = 0;
8293 int mask = Math.Round(floats.Get(index));
8294
8295 index++;
8296
8298 {
8300 {
8302 }
8303 else
8304 {
8305 float quantity = floats.Get(index);
8307 }
8308 index++;
8309 }
8310
8312 {
8313 float wet = floats.Get(index);
8315 index++;
8316 }
8317
8319 {
8320 int liquidtype = Math.Round(floats.Get(index));
8322 index++;
8323 }
8324
8326 {
8328 index++;
8330 index++;
8332 index++;
8334 index++;
8335 }
8336
8338 {
8339 int cleanness = Math.Round(floats.Get(index));
8341 index++;
8342 }
8343 }
8344
8346 {
8347 super.WriteVarsToCTX(ctx);
8348
8349
8351 {
8353 }
8354
8356 {
8358 }
8359
8361 {
8363 }
8364
8366 {
8367 int r,g,b,a;
8373 }
8374
8376 {
8378 }
8379 }
8380
8382 {
8383 if (!super.ReadVarsFromCTX(ctx,version))
8384 return false;
8385
8386 int intValue;
8387 float value;
8388
8389 if (version < 140)
8390 {
8391 if (!ctx.
Read(intValue))
8392 return false;
8393
8394 m_VariablesMask = intValue;
8395 }
8396
8398 {
8399 if (!ctx.
Read(value))
8400 return false;
8401
8403 {
8405 }
8406 else
8407 {
8409 }
8410 }
8411
8412 if (version < 140)
8413 {
8415 {
8416 if (!ctx.
Read(value))
8417 return false;
8418 SetTemperatureDirect(value);
8419 }
8420 }
8421
8423 {
8424 if (!ctx.
Read(value))
8425 return false;
8427 }
8428
8430 {
8431 if (!ctx.
Read(intValue))
8432 return false;
8434 }
8435
8437 {
8438 int r,g,b,a;
8440 return false;
8442 return false;
8444 return false;
8446 return false;
8447
8449 }
8450
8452 {
8453 if (!ctx.
Read(intValue))
8454 return false;
8456 }
8457
8458 if (version >= 138 && version < 140)
8459 {
8461 {
8462 if (!ctx.
Read(intValue))
8463 return false;
8464 SetFrozen(intValue);
8465 }
8466 }
8467
8468 return true;
8469 }
8470
8471
8473 {
8476 {
8478 }
8479
8480 if (!super.OnStoreLoad(ctx, version))
8481 {
8483 return false;
8484 }
8485
8486 if (version >= 114)
8487 {
8488 bool hasQuickBarIndexSaved;
8489
8490 if (!ctx.
Read(hasQuickBarIndexSaved))
8491 {
8493 return false;
8494 }
8495
8496 if (hasQuickBarIndexSaved)
8497 {
8498 int itmQBIndex;
8499
8500
8501 if (!ctx.
Read(itmQBIndex))
8502 {
8504 return false;
8505 }
8506
8507 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8508 if (itmQBIndex != -1 && parentPlayer)
8509 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8510 }
8511 }
8512 else
8513 {
8514
8515 PlayerBase player;
8516 int itemQBIndex;
8517 if (version ==
int.
MAX)
8518 {
8519 if (!ctx.
Read(itemQBIndex))
8520 {
8522 return false;
8523 }
8524 }
8525 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8526 {
8527
8528 if (!ctx.
Read(itemQBIndex))
8529 {
8531 return false;
8532 }
8533 if (itemQBIndex != -1 && player)
8534 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8535 }
8536 }
8537
8538 if (version < 140)
8539 {
8540
8541 if (!LoadVariables(ctx, version))
8542 {
8544 return false;
8545 }
8546 }
8547
8548
8550 {
8552 return false;
8553 }
8554 if (version >= 132)
8555 {
8557 if (raib)
8558 {
8560 {
8562 return false;
8563 }
8564 }
8565 }
8566
8568 return true;
8569 }
8570
8571
8572
8574 {
8575 super.OnStoreSave(ctx);
8576
8577 PlayerBase player;
8578 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8579 {
8581
8582 int itemQBIndex = -1;
8583 itemQBIndex = player.FindQuickBarEntityIndex(this);
8584 ctx.
Write(itemQBIndex);
8585 }
8586 else
8587 {
8589 }
8590
8592
8594 if (raib)
8595 {
8597 }
8598 }
8599
8600
8602 {
8603 super.AfterStoreLoad();
8604
8606 {
8608 }
8609
8611 {
8614 }
8615 }
8616
8618 {
8619 super.EEOnAfterLoad();
8620
8622 {
8624 }
8625
8628 }
8629
8631 {
8632 return false;
8633 }
8634
8635
8636
8638 {
8640 {
8641 #ifdef PLATFORM_CONSOLE
8642
8644 {
8646 if (menu)
8647 {
8649 }
8650 }
8651 #endif
8652 }
8653
8655 {
8658 }
8659
8661 {
8662 SetWeightDirty();
8664 }
8666 {
8669 }
8670
8672 {
8675 }
8677 {
8680 }
8681
8682 super.OnVariablesSynchronized();
8683 }
8684
8685
8686
8688 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8689 {
8690 if (!IsServerCheck(allow_client))
8691 return false;
8692
8694 return false;
8695
8698
8699 if (value <= (min + 0.001))
8700 value = min;
8701
8702 if (value == min)
8703 {
8704 if (destroy_config)
8705 {
8706 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8707 if (dstr)
8708 {
8710 this.Delete();
8711 return true;
8712 }
8713 }
8714 else if (destroy_forced)
8715 {
8717 this.Delete();
8718 return true;
8719 }
8720
8722 }
8723
8726
8728 {
8730
8731 if (delta)
8733 }
8734
8736
8737 return false;
8738 }
8739
8740
8742 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8743 {
8745 }
8746
8748 {
8751 }
8752
8754 {
8757 }
8758
8761 {
8762 float value_clamped = Math.Clamp(value, 0, 1);
8764 SetQuantity(result, destroy_config, destroy_forced);
8765 }
8766
8767
8770 {
8772 }
8773
8775 {
8777 }
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8789 {
8790 int slot = -1;
8791 if (GetInventory())
8792 {
8793 InventoryLocation il = new InventoryLocation;
8794 GetInventory().GetCurrentInventoryLocation(il);
8796 }
8797
8799 }
8800
8802 {
8803 float quantity_max = 0;
8804
8806 {
8807 if (attSlotID != -1)
8808 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8809
8810 if (quantity_max <= 0)
8812 }
8813
8814 if (quantity_max <= 0)
8816
8817 return quantity_max;
8818 }
8819
8821 {
8823 }
8824
8826 {
8828 }
8829
8830
8832 {
8834 }
8835
8837 {
8839 }
8840
8842 {
8844 }
8845
8846
8848 {
8849
8850 float weightEx = GetWeightEx();
8851 float special = GetInventoryAndCargoWeight();
8852 return weightEx - special;
8853 }
8854
8855
8857 {
8859 }
8860
8862 {
8864 {
8865 #ifdef DEVELOPER
8866 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8867 {
8868 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8870 }
8871 #endif
8872
8874 }
8875 else if (HasEnergyManager())
8876 {
8877 #ifdef DEVELOPER
8878 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8879 {
8880 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8881 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8882 }
8883 #endif
8884 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
8885 }
8886 else
8887 {
8888 #ifdef DEVELOPER
8889 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8890 {
8891 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
8892 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
8893 }
8894 #endif
8895 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
8896 }
8897 }
8898
8901 {
8902 int item_count = 0;
8904
8905 if (GetInventory().GetCargo() != NULL)
8906 {
8907 item_count = GetInventory().GetCargo().GetItemCount();
8908 }
8909
8910 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
8911 {
8912 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
8913 if (item)
8914 item_count += item.GetNumberOfItems();
8915 }
8916 return item_count;
8917 }
8918
8921 {
8922 float weight = 0;
8923 float wetness = 1;
8924 if (include_wetness)
8927 {
8928 weight = wetness * m_ConfigWeight;
8929 }
8931 {
8932 weight = 1;
8933 }
8934 return weight;
8935 }
8936
8937
8938
8940 {
8941 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
8942 {
8943 GameInventory inv = GetInventory();
8944 array<EntityAI> items = new array<EntityAI>;
8946 for (int i = 0; i < items.Count(); i++)
8947 {
8949 if (item)
8950 {
8952 }
8953 }
8954 }
8955 }
8956
8957
8958
8959
8961 {
8962 float energy = 0;
8963 if (HasEnergyManager())
8964 {
8965 energy = GetCompEM().GetEnergy();
8966 }
8967 return energy;
8968 }
8969
8970
8972 {
8973 super.OnEnergyConsumed();
8974
8976 }
8977
8979 {
8980 super.OnEnergyAdded();
8981
8983 }
8984
8985
8987 {
8988 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
8989 {
8991 {
8992 float energy_0to1 = GetCompEM().GetEnergy0To1();
8994 }
8995 }
8996 }
8997
8998
9000 {
9001 return ConfigGetFloat("heatIsolation");
9002 }
9003
9005 {
9007 }
9008
9010 {
9011 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9012 if (
GetGame().ConfigIsExisting(paramPath))
9014
9015 return 0.0;
9016 }
9017
9019 {
9020 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9021 if (
GetGame().ConfigIsExisting(paramPath))
9023
9024 return 0.0;
9025 }
9026
9027 override void SetWet(
float value,
bool allow_client =
false)
9028 {
9029 if (!IsServerCheck(allow_client))
9030 return;
9031
9034
9036
9037 m_VarWet = Math.Clamp(value, min, max);
9038
9040 {
9043 }
9044 }
9045
9046 override void AddWet(
float value)
9047 {
9049 }
9050
9052 {
9054 }
9055
9057 {
9059 }
9060
9062 {
9064 }
9065
9067 {
9069 }
9070
9072 {
9074 }
9075
9077 {
9080 if (newLevel != oldLevel)
9081 {
9083 }
9084 }
9085
9087 {
9088 SetWeightDirty();
9089 }
9090
9092 {
9093 return GetWetLevelInternal(
m_VarWet);
9094 }
9095
9096
9097
9099 {
9101 }
9102
9104 {
9106 }
9107
9109 {
9111 }
9112
9114 {
9116 }
9117
9118
9119
9121 {
9122 if (ConfigIsExisting("itemModelLength"))
9123 {
9124 return ConfigGetFloat("itemModelLength");
9125 }
9126 return 0;
9127 }
9128
9130 {
9131 if (ConfigIsExisting("itemAttachOffset"))
9132 {
9133 return ConfigGetFloat("itemAttachOffset");
9134 }
9135 return 0;
9136 }
9137
9138 override void SetCleanness(
int value,
bool allow_client =
false)
9139 {
9140 if (!IsServerCheck(allow_client))
9141 return;
9142
9144
9146
9149 }
9150
9152 {
9154 }
9155
9157 {
9158 return true;
9159 }
9160
9161
9162
9163
9165 {
9167 }
9168
9170 {
9172 }
9173
9174
9175
9176
9177 override void SetColor(
int r,
int g,
int b,
int a)
9178 {
9184 }
9186 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9187 {
9192 }
9193
9195 {
9197 }
9198
9201 {
9202 int r,g,b,a;
9204 r = r/255;
9205 g = g/255;
9206 b = b/255;
9207 a = a/255;
9208 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9209 }
9210
9211
9212
9213 override void SetLiquidType(
int value,
bool allow_client =
false)
9214 {
9215 if (!IsServerCheck(allow_client))
9216 return;
9217
9222 }
9223
9225 {
9226 return ConfigGetInt("varLiquidTypeInit");
9227 }
9228
9230 {
9232 }
9233
9235 {
9237 SetFrozen(false);
9238 }
9239
9242 {
9243 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9244 }
9245
9246
9249 {
9250 PlayerBase nplayer;
9251 if (PlayerBase.CastTo(nplayer, player))
9252 {
9254
9255 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9256 }
9257 }
9258
9259
9262 {
9263 PlayerBase nplayer;
9264 if (PlayerBase.CastTo(nplayer,player))
9265 {
9266
9267 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9268
9269 }
9270
9271
9272 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9273
9274
9275 if (HasEnergyManager())
9276 {
9277 GetCompEM().UpdatePlugState();
9278 }
9279 }
9280
9281
9283 {
9284 super.OnPlacementStarted(player);
9285
9287 }
9288
9289 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9290 {
9292 {
9293 m_AdminLog.OnPlacementComplete(player,
this);
9294 }
9295
9296 super.OnPlacementComplete(player, position, orientation);
9297 }
9298
9299
9300
9301
9302
9304 {
9306 {
9307 return true;
9308 }
9309 else
9310 {
9311 return false;
9312 }
9313 }
9314
9315
9317 {
9319 {
9321 }
9322 }
9323
9324
9326 {
9328 }
9329
9331 {
9333 }
9334
9335 override void InsertAgent(
int agent,
float count = 1)
9336 {
9337 if (count < 1)
9338 return;
9339
9341 }
9342
9345 {
9347 }
9348
9349
9351 {
9353 }
9354
9355
9356
9357
9358
9359
9360
9361
9362
9363
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
9388
9389
9390
9391
9392
9393
9394
9395
9397 {
9399 return false;
9400 return true;
9401 }
9402
9404 {
9405
9407 }
9408
9409
9412 {
9413 super.CheckForRoofLimited(timeTresholdMS);
9414
9416 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9417 {
9418 m_PreviousRoofTestTime = time;
9419 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9420 }
9421 }
9422
9423
9425 {
9427 {
9428 return 0;
9429 }
9430
9431 if (GetInventory().GetAttachmentSlotsCount() != 0)
9432 {
9433 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9434 if (filter)
9435 return filter.GetProtectionLevel(type, false, system);
9436 else
9437 return 0;
9438 }
9439
9440 string subclassPath, entryName;
9441
9442 switch (type)
9443 {
9445 entryName = "biological";
9446 break;
9448 entryName = "chemical";
9449 break;
9450 default:
9451 entryName = "biological";
9452 break;
9453 }
9454
9455 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9456
9458 }
9459
9460
9461
9464 {
9465 if (!IsMagazine())
9467
9469 }
9470
9471
9472
9473
9474
9479 {
9480 return true;
9481 }
9482
9484 {
9486 }
9487
9488
9489
9490
9491
9493 {
9494 if (parent)
9495 {
9496 if (parent.IsInherited(DayZInfected))
9497 return true;
9498
9499 if (!parent.IsRuined())
9500 return true;
9501 }
9502
9503 return true;
9504 }
9505
9507 {
9508 if (!super.CanPutAsAttachment(parent))
9509 {
9510 return false;
9511 }
9512
9513 if (!IsRuined() && !parent.IsRuined())
9514 {
9515 return true;
9516 }
9517
9518 return false;
9519 }
9520
9522 {
9523
9524
9525
9526
9527 return super.CanReceiveItemIntoCargo(item);
9528 }
9529
9531 {
9532
9533
9534
9535
9536 GameInventory attachmentInv = attachment.GetInventory();
9538 {
9539 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9540 return false;
9541 }
9542
9543 InventoryLocation loc = new InventoryLocation();
9544 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9545 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9546 return false;
9547
9548 return super.CanReceiveAttachment(attachment, slotId);
9549 }
9550
9552 {
9553 if (!super.CanReleaseAttachment(attachment))
9554 return false;
9555
9556 return GetInventory().AreChildrenAccessible();
9557 }
9558
9559
9560
9561
9562
9563
9564
9565
9566
9567
9568
9569
9570
9571
9572
9573
9574
9575
9576
9577
9578
9580 {
9581 int id = muzzle_owner.GetMuzzleID();
9582 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9583
9584 if (WPOF_array)
9585 {
9586 for (int i = 0; i < WPOF_array.Count(); i++)
9587 {
9588 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9589
9590 if (WPOF)
9591 {
9592 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9593 }
9594 }
9595 }
9596 }
9597
9598
9600 {
9601 int id = muzzle_owner.GetMuzzleID();
9603
9604 if (WPOBE_array)
9605 {
9606 for (int i = 0; i < WPOBE_array.Count(); i++)
9607 {
9608 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9609
9610 if (WPOBE)
9611 {
9612 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9613 }
9614 }
9615 }
9616 }
9617
9618
9620 {
9621 int id = muzzle_owner.GetMuzzleID();
9622 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9623
9624 if (WPOOH_array)
9625 {
9626 for (int i = 0; i < WPOOH_array.Count(); i++)
9627 {
9628 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9629
9630 if (WPOOH)
9631 {
9632 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9633 }
9634 }
9635 }
9636 }
9637
9638
9640 {
9641 int id = muzzle_owner.GetMuzzleID();
9642 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9643
9644 if (WPOOH_array)
9645 {
9646 for (int i = 0; i < WPOOH_array.Count(); i++)
9647 {
9648 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9649
9650 if (WPOOH)
9651 {
9652 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9653 }
9654 }
9655 }
9656 }
9657
9658
9660 {
9661 int id = muzzle_owner.GetMuzzleID();
9662 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9663
9664 if (WPOOH_array)
9665 {
9666 for (int i = 0; i < WPOOH_array.Count(); i++)
9667 {
9668 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9669
9670 if (WPOOH)
9671 {
9672 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9673 }
9674 }
9675 }
9676 }
9677
9678
9679
9681 {
9683 {
9684 return true;
9685 }
9686
9687 return false;
9688 }
9689
9691 {
9693 {
9694 return true;
9695 }
9696
9697 return false;
9698 }
9699
9701 {
9703 {
9704 return true;
9705 }
9706
9707 return false;
9708 }
9709
9711 {
9712 return false;
9713 }
9714
9717 {
9718 return UATimeSpent.DEFAULT_DEPLOY;
9719 }
9720
9721
9722
9723
9725 {
9727 SetSynchDirty();
9728 }
9729
9731 {
9733 }
9734
9735
9737 {
9738 return false;
9739 }
9740
9743 {
9744 string att_type = "None";
9745
9746 if (ConfigIsExisting("soundAttType"))
9747 {
9748 att_type = ConfigGetString("soundAttType");
9749 }
9750
9752 }
9753
9755 {
9757 }
9758
9759
9760
9761
9762
9766
9768 {
9771
9773 }
9774
9775
9777 {
9779 return;
9780
9782
9785
9788
9789 SoundParameters params = new SoundParameters();
9793 }
9794
9795
9797 {
9799 return;
9800
9802 SetSynchDirty();
9803
9806 }
9807
9808
9810 {
9812 return;
9813
9815 SetSynchDirty();
9816
9819 }
9820
9822 {
9824 }
9825
9827 {
9829 }
9830
9833 {
9834 if (!
GetGame().IsDedicatedServer())
9835 {
9836 if (ConfigIsExisting("attachSoundSet"))
9837 {
9838 string cfg_path = "";
9839 string soundset = "";
9841
9844 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9845 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9846
9847 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9848 {
9849 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9850 {
9851 if (cfg_slot_array[i] == slot_type)
9852 {
9853 soundset = cfg_soundset_array[i];
9854 break;
9855 }
9856 }
9857 }
9858
9859 if (soundset != "")
9860 {
9861 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9863 }
9864 }
9865 }
9866 }
9867
9869 {
9870
9871 }
9872
9873 void OnApply(PlayerBase player);
9874
9876 {
9877 return 1.0;
9878 };
9879
9881 {
9883 }
9884
9886 {
9888 }
9889
9891
9893 {
9894 SetDynamicPhysicsLifeTime(0.01);
9896 }
9897
9899 {
9900 array<string> zone_names = new array<string>;
9901 GetDamageZones(zone_names);
9902 for (int i = 0; i < zone_names.Count(); i++)
9903 {
9904 SetHealthMax(zone_names.Get(i),"Health");
9905 }
9906 SetHealthMax("","Health");
9907 }
9908
9911 {
9912 float global_health = GetHealth01("","Health");
9913 array<string> zones = new array<string>;
9914 GetDamageZones(zones);
9915
9916 for (int i = 0; i < zones.Count(); i++)
9917 {
9918 SetHealth01(zones.Get(i),"Health",global_health);
9919 }
9920 }
9921
9924 {
9925 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
9926 }
9927
9929 {
9930 if (!hasRootAsPlayer)
9931 {
9932 if (refParentIB)
9933 {
9934
9935 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
9936 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
9937
9938 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
9939 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
9940
9943 }
9944 else
9945 {
9946
9949 }
9950 }
9951 }
9952
9954 {
9956 {
9957 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
9958 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
9959 {
9960 float heatPermCoef = 1.0;
9962 while (ent)
9963 {
9964 heatPermCoef *= ent.GetHeatPermeabilityCoef();
9965 ent = ent.GetHierarchyParent();
9966 }
9967
9968 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
9969 }
9970 }
9971 }
9972
9974 {
9975
9976 EntityAI parent = GetHierarchyParent();
9977 if (!parent)
9978 {
9979 hasParent = false;
9980 hasRootAsPlayer = false;
9981 }
9982 else
9983 {
9984 hasParent = true;
9985 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
9986 refParentIB =
ItemBase.Cast(parent);
9987 }
9988 }
9989
9990 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
9991 {
9992
9993 }
9994
9996 {
9997
9998 return false;
9999 }
10000
10002 {
10003
10004
10005 return false;
10006 }
10007
10009 {
10010
10011 return false;
10012 }
10013
10016 {
10017 return !GetIsFrozen() &&
IsOpen();
10018 }
10019
10021 {
10022 bool hasParent = false, hasRootAsPlayer = false;
10024
10025 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10026 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10027
10028 if (wwtu || foodDecay)
10029 {
10033
10034 if (processWetness || processTemperature || processDecay)
10035 {
10037
10038 if (processWetness)
10039 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10040
10041 if (processTemperature)
10043
10044 if (processDecay)
10045 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10046 }
10047 }
10048 }
10049
10052 {
10054 }
10055
10057 {
10060
10061 return super.GetTemperatureFreezeThreshold();
10062 }
10063
10065 {
10068
10069 return super.GetTemperatureThawThreshold();
10070 }
10071
10073 {
10076
10077 return super.GetItemOverheatThreshold();
10078 }
10079
10081 {
10083 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10084
10085 return super.GetTemperatureFreezeTime();
10086 }
10087
10089 {
10091 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10092
10093 return super.GetTemperatureThawTime();
10094 }
10095
10100
10102 {
10103 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10104 }
10105
10107 {
10108 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10109 }
10110
10113 {
10115 }
10116
10118 {
10120 }
10121
10123 {
10125 }
10126
10129 {
10130 return null;
10131 }
10132
10135 {
10136 return false;
10137 }
10138
10140 {
10142 {
10145 if (!trg)
10146 {
10148 explosive = this;
10149 }
10150
10151 explosive.PairRemote(trg);
10153
10154 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10155 trg.SetPersistentPairID(persistentID);
10156 explosive.SetPersistentPairID(persistentID);
10157
10158 return true;
10159 }
10160 return false;
10161 }
10162
10165 {
10166 float ret = 1.0;
10169 ret *= GetHealth01();
10170
10171 return ret;
10172 }
10173
10174 #ifdef DEVELOPER
10175 override void SetDebugItem()
10176 {
10177 super.SetDebugItem();
10178 _itemBase = this;
10179 }
10180
10182 {
10183 string text = super.GetDebugText();
10184
10186 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10187
10188 return text;
10189 }
10190 #endif
10191
10193 {
10194 return true;
10195 }
10196
10198
10200
10202 {
10205 }
10206
10207
10215
10231}
10232
10234{
10236 if (entity)
10237 {
10238 bool is_item = entity.IsInherited(
ItemBase);
10239 if (is_item && full_quantity)
10240 {
10243 }
10244 }
10245 else
10246 {
10248 return NULL;
10249 }
10250 return entity;
10251}
10252
10254{
10255 if (item)
10256 {
10257 if (health > 0)
10258 item.SetHealth("", "", health);
10259
10260 if (item.CanHaveTemperature())
10261 {
10263 if (item.CanFreeze())
10264 item.SetFrozen(false);
10265 }
10266
10267 if (item.HasEnergyManager())
10268 {
10269 if (quantity >= 0)
10270 {
10271 item.GetCompEM().SetEnergy0To1(quantity);
10272 }
10273 else
10274 {
10276 }
10277 }
10278 else if (item.IsMagazine())
10279 {
10280 Magazine mag = Magazine.Cast(item);
10281 if (quantity >= 0)
10282 {
10283 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10284 }
10285 else
10286 {
10288 }
10289
10290 }
10291 else
10292 {
10293 if (quantity >= 0)
10294 {
10295 item.SetQuantityNormalized(quantity, false);
10296 }
10297 else
10298 {
10300 }
10301
10302 }
10303 }
10304}
10305
10306#ifdef DEVELOPER
10308#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.