5377{
5379 {
5380 return true;
5381 }
5382};
5383
5384
5385
5387{
5391
5393
5396
5397
5398
5399
5400
5409
5415
5420
5425
5446 protected bool m_IsResultOfSplit
5447
5449
5454
5455
5456
5458
5462
5463
5464
5466
5469
5470
5471
5477
5478
5486
5489
5490
5492
5493
5495
5496
5501
5502
5507
5508
5510
5511
5513 {
5518
5519 if (!
GetGame().IsDedicatedServer())
5520 {
5522 {
5524
5526 {
5528 }
5529 }
5530
5533 }
5534
5535 m_OldLocation = null;
5536
5538 {
5540 }
5541
5542 if (ConfigIsExisting("headSelectionsToHide"))
5543 {
5546 }
5547
5549 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5550 {
5552 }
5553
5555
5556 m_IsResultOfSplit = false;
5557
5559 }
5560
5562 {
5563 super.InitItemVariables();
5564
5570 m_Count = ConfigGetInt(
"count");
5571
5574
5579
5582
5587
5599
5603
5604
5607 if (ConfigIsExisting("canBeSplit"))
5608 {
5611 }
5612
5614 if (ConfigIsExisting("itemBehaviour"))
5616
5617
5620 RegisterNetSyncVariableInt("m_VarLiquidType");
5621 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5622
5623 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5624 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5625 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5626
5627 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5628 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5629 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5630 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5631
5632 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5633 RegisterNetSyncVariableBool("m_IsTakeable");
5634 RegisterNetSyncVariableBool("m_IsHologram");
5635
5638 {
5641 }
5642
5644
5646 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5648
5649 }
5650
5652 {
5654 }
5655
5657 {
5660 {
5665 }
5666 }
5667
5668 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5669 {
5671 {
5674 }
5675
5677 }
5678
5680 {
5686 }
5687
5689
5691 {
5693
5694 if (!action)
5695 {
5696 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5697 return;
5698 }
5699
5701 if (!ai)
5702 {
5704 return;
5705 }
5706
5708 if (!action_array)
5709 {
5710 action_array = new array<ActionBase_Basic>;
5712 }
5713 if (LogManager.IsActionLogEnable())
5714 {
5715 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5716 }
5717
5718 if (action_array.Find(action) != -1)
5719 {
5720 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5721 }
5722 else
5723 {
5724 action_array.Insert(action);
5725 }
5726 }
5727
5729 {
5731 ActionBase action = player.GetActionManager().GetAction(actionName);
5734
5735 if (action_array)
5736 {
5737 action_array.RemoveItem(action);
5738 }
5739 }
5740
5741
5742
5744 {
5745 ActionOverrideData overrideData = new ActionOverrideData();
5749
5751 if (!actionMap)
5752 {
5755 }
5756
5757 actionMap.Insert(this.
Type(), overrideData);
5758
5759 }
5760
5762
5764
5765
5767 {
5770
5773
5774 string config_to_search = "CfgVehicles";
5775 string muzzle_owner_config;
5776
5778 {
5779 if (IsInherited(Weapon))
5780 config_to_search = "CfgWeapons";
5781
5782 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5783
5784 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5785
5787
5788 if (config_OnFire_subclass_count > 0)
5789 {
5790 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5791
5792 for (int i = 0; i < config_OnFire_subclass_count; i++)
5793 {
5794 string particle_class = "";
5796 string config_OnFire_entry = config_OnFire_class + particle_class;
5797 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5798 WPOF_array.Insert(WPOF);
5799 }
5800
5801
5803 }
5804 }
5805
5807 {
5808 config_to_search = "CfgWeapons";
5809 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5810
5811 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
5812
5814
5815 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
5816 {
5817 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
5818
5819 for (i = 0; i < config_OnBulletCasingEject_count; i++)
5820 {
5821 string particle_class2 = "";
5823 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
5824 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
5825 WPOBE_array.Insert(WPOBE);
5826 }
5827
5828
5830 }
5831 }
5832 }
5833
5834
5836 {
5839
5841 {
5842 string config_to_search = "CfgVehicles";
5843
5844 if (IsInherited(Weapon))
5845 config_to_search = "CfgWeapons";
5846
5847 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5848 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
5849
5850 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
5851 {
5852
5854
5856 {
5858 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
5860 return;
5861 }
5862
5865
5866
5867
5869 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
5870
5871 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
5872 {
5873 string particle_class = "";
5875 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
5877
5878 if (entry_type == CT_CLASS)
5879 {
5880 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
5881 WPOOH_array.Insert(WPOF);
5882 }
5883 }
5884
5885
5887 }
5888 }
5889 }
5890
5892 {
5894 }
5895
5897 {
5899 {
5901
5904
5907
5908 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5909 }
5910 }
5911
5913 {
5915 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5916
5918 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5919
5921 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5922
5924 {
5926 }
5927 }
5928
5930 {
5932 }
5933
5935 {
5938 else
5940
5942 {
5945 }
5946 else
5947 {
5950
5953 }
5954
5956 }
5957
5959 {
5961 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5962 }
5963
5965 {
5967 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5969 }
5970
5972 {
5974 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5975 }
5976
5978 {
5981
5982 OverheatingParticle OP = new OverheatingParticle();
5987
5989 }
5990
5992 {
5995
5996 return -1;
5997 }
5998
6000 {
6002 {
6005
6006 for (int i = count; i > 0; --i)
6007 {
6008 int id = i - 1;
6011
6014
6015 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6016 {
6017 if (p)
6018 {
6021 }
6022 }
6023 }
6024 }
6025 }
6026
6028 {
6030 {
6032 {
6033 int id = i - 1;
6035
6036 if (OP)
6037 {
6039
6040 if (p)
6041 {
6043 }
6044
6045 delete OP;
6046 }
6047 }
6048
6051 }
6052 }
6053
6056 {
6057 return 0.0;
6058 }
6059
6060
6062 {
6063 return 250;
6064 }
6065
6067 {
6068 return 0;
6069 }
6070
6073 {
6075 return true;
6076
6077 return false;
6078 }
6079
6082 {
6085
6087 {
6089 }
6090 else
6091 {
6092
6094 }
6095
6097 }
6098
6105 {
6106 return -1;
6107 }
6108
6109
6110
6111
6113 {
6115 {
6117 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6118
6119 if (r_index >= 0)
6120 {
6121 InventoryLocation r_il = new InventoryLocation;
6122 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6123
6124 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6127 {
6128 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6129 }
6131 {
6132 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6133 }
6134
6135 }
6136
6137 player.GetHumanInventory().ClearUserReservedLocation(this);
6138 }
6139
6142 }
6143
6144
6145
6146
6148 {
6149 return ItemBase.m_DebugActionsMask;
6150 }
6151
6153 {
6154 return ItemBase.m_DebugActionsMask & mask;
6155 }
6156
6158 {
6159 ItemBase.m_DebugActionsMask = mask;
6160 }
6161
6163 {
6164 ItemBase.m_DebugActionsMask |= mask;
6165 }
6166
6168 {
6169 ItemBase.m_DebugActionsMask &= ~mask;
6170 }
6171
6173 {
6175 {
6177 }
6178 else
6179 {
6181 }
6182 }
6183
6184
6186 {
6187 if (GetEconomyProfile())
6188 {
6189 float q_max = GetEconomyProfile().GetQuantityMax();
6190 if (q_max > 0)
6191 {
6192 float q_min = GetEconomyProfile().GetQuantityMin();
6193 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6194
6196 {
6197 ComponentEnergyManager comp = GetCompEM();
6199 {
6201 }
6202 }
6204 {
6206
6207 }
6208
6209 }
6210 }
6211 }
6212
6215 {
6216 EntityAI parent = GetHierarchyParent();
6217
6218 if (parent)
6219 {
6220 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6221 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6222 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6223 }
6224 }
6225
6228 {
6229 EntityAI parent = GetHierarchyParent();
6230
6231 if (parent)
6232 {
6233 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6234 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6235 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6236 }
6237 }
6238
6240 {
6241
6242
6243
6244
6246
6248 {
6249 if (ScriptInputUserData.CanStoreInputUserData())
6250 {
6251 ScriptInputUserData ctx = new ScriptInputUserData;
6257 ctx.
Write(use_stack_max);
6260
6262 {
6263 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6264 }
6265 }
6266 }
6267 else if (!
GetGame().IsMultiplayer())
6268 {
6270 }
6271 }
6272
6274 {
6276 }
6277
6279 {
6281 }
6282
6284 {
6286 }
6287
6289 {
6290
6291 return false;
6292 }
6293
6295 {
6296 return false;
6297 }
6298
6302 {
6303 return false;
6304 }
6305
6307 {
6308 return "";
6309 }
6310
6312
6314 {
6315 return false;
6316 }
6317
6319 {
6320 return true;
6321 }
6322
6323
6324
6326 {
6327 return true;
6328 }
6329
6331 {
6332 return true;
6333 }
6334
6336 {
6337 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6339 }
6340
6342 {
6344 }
6345
6347 {
6349 if (!is_being_placed)
6351 SetSynchDirty();
6352 }
6353
6354
6356
6358 {
6360 }
6361
6363 {
6365 }
6366
6368 {
6369 return 1;
6370 }
6371
6373 {
6374 return false;
6375 }
6376
6378 {
6380 SetSynchDirty();
6381 }
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6418 {
6419 super.OnMovedInsideCargo(container);
6420
6421 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6422 }
6423
6424 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6425 {
6426 super.EEItemLocationChanged(oldLoc,newLoc);
6427
6428 PlayerBase new_player = null;
6429 PlayerBase old_player = null;
6430
6431 if (newLoc.GetParent())
6432 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6433
6434 if (oldLoc.GetParent())
6435 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6436
6438 {
6439 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6440
6441 if (r_index >= 0)
6442 {
6443 InventoryLocation r_il = new InventoryLocation;
6444 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6445
6446 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6449 {
6450 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6451 }
6453 {
6454 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6455 }
6456
6457 }
6458 }
6459
6461 {
6462 if (new_player)
6463 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6464
6465 if (new_player == old_player)
6466 {
6467
6468 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6469 {
6471 {
6472 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6473 {
6474 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6475 }
6476 }
6477 else
6478 {
6479 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6480 }
6481 }
6482
6483 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6484 {
6485 int type = oldLoc.GetType();
6487 {
6488 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6489 }
6491 {
6492 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6493 }
6494 }
6495 if (!m_OldLocation)
6496 {
6497 m_OldLocation = new InventoryLocation;
6498 }
6499 m_OldLocation.Copy(oldLoc);
6500 }
6501 else
6502 {
6503 if (m_OldLocation)
6504 {
6505 m_OldLocation.Reset();
6506 }
6507 }
6508
6510 }
6511 else
6512 {
6513 if (new_player)
6514 {
6515 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6516 if (res_index >= 0)
6517 {
6518 InventoryLocation il = new InventoryLocation;
6519 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6521 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6524 {
6525 il.
GetParent().GetOnReleaseLock().Invoke(it);
6526 }
6528 {
6530 }
6531
6532 }
6533 }
6535 {
6536
6538 }
6539
6540 if (m_OldLocation)
6541 {
6542 m_OldLocation.Reset();
6543 }
6544 }
6545 }
6546
6547 override void EOnContact(IEntity other, Contact extra)
6548 {
6550 {
6551 int liquidType = -1;
6553 if (impactSpeed > 0.0)
6554 {
6556 #ifndef SERVER
6558 #else
6560 SetSynchDirty();
6561 #endif
6563 }
6564 }
6565
6566 #ifdef SERVER
6567 if (GetCompEM() && GetCompEM().IsPlugged())
6568 {
6569 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6570 GetCompEM().UnplugThis();
6571 }
6572 #endif
6573 }
6574
6576
6578 {
6580 }
6581
6583 {
6584
6585 }
6586
6588 {
6589 super.OnItemLocationChanged(old_owner, new_owner);
6590
6591 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6592 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6593
6594 if (!relatedPlayer && playerNew)
6595 relatedPlayer = playerNew;
6596
6597 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6598 {
6600 if (actionMgr)
6601 {
6602 ActionBase currentAction = actionMgr.GetRunningAction();
6603 if (currentAction)
6605 }
6606 }
6607
6608 Man ownerPlayerOld = null;
6609 Man ownerPlayerNew = null;
6610
6611 if (old_owner)
6612 {
6613 if (old_owner.
IsMan())
6614 {
6615 ownerPlayerOld = Man.Cast(old_owner);
6616 }
6617 else
6618 {
6619 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6620 }
6621 }
6622 else
6623 {
6625 {
6627
6628 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6629 {
6630 GetCompEM().UnplugThis();
6631 }
6632 }
6633 }
6634
6635 if (new_owner)
6636 {
6637 if (new_owner.
IsMan())
6638 {
6639 ownerPlayerNew = Man.Cast(new_owner);
6640 }
6641 else
6642 {
6643 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6644 }
6645 }
6646
6647 if (ownerPlayerOld != ownerPlayerNew)
6648 {
6649 if (ownerPlayerOld)
6650 {
6651 array<EntityAI> subItemsExit = new array<EntityAI>;
6653 for (int i = 0; i < subItemsExit.Count(); i++)
6654 {
6657 }
6658 }
6659
6660 if (ownerPlayerNew)
6661 {
6662 array<EntityAI> subItemsEnter = new array<EntityAI>;
6664 for (int j = 0; j < subItemsEnter.Count(); j++)
6665 {
6668 }
6669 }
6670 }
6671 else if (ownerPlayerNew != null)
6672 {
6673 PlayerBase nplayer;
6674 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6675 {
6676 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6678 for (int k = 0; k < subItemsUpdate.Count(); k++)
6679 {
6681 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6682 }
6683 }
6684 }
6685
6686 if (old_owner)
6687 old_owner.OnChildItemRemoved(this);
6688 if (new_owner)
6689 new_owner.OnChildItemReceived(this);
6690 }
6691
6692
6694 {
6695 super.EEDelete(parent);
6696 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6697 if (player)
6698 {
6700
6701 if (player.IsAlive())
6702 {
6703 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6704 if (r_index >= 0)
6705 {
6706 InventoryLocation r_il = new InventoryLocation;
6707 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6708
6709 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6712 {
6713 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6714 }
6716 {
6717 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6718 }
6719
6720 }
6721
6722 player.RemoveQuickBarEntityShortcut(this);
6723 }
6724 }
6725 }
6726
6728 {
6729 super.EEKilled(killer);
6730
6733 {
6734 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6735 {
6736 if (IsMagazine())
6737 {
6738 if (Magazine.Cast(this).GetAmmoCount() > 0)
6739 {
6741 }
6742 }
6743 else
6744 {
6746 }
6747 }
6748 }
6749 }
6750
6752 {
6753 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6754
6755 super.OnWasAttached(parent, slot_id);
6756
6759
6761 }
6762
6764 {
6765 super.OnWasDetached(parent, slot_id);
6766
6769 }
6770
6772 {
6773 int idx;
6776
6777 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6778 if (inventory_slots.Count() < 1)
6779 {
6780 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6781 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6782 }
6783 else
6784 {
6785 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6786 }
6787
6788 idx = inventory_slots.Find(slot);
6789 if (idx < 0)
6790 return "";
6791
6792 return attach_types.Get(idx);
6793 }
6794
6796 {
6797 int idx = -1;
6798 string slot;
6799
6802
6803 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6804 if (inventory_slots.Count() < 1)
6805 {
6806 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
6807 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6808 }
6809 else
6810 {
6811 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
6812 if (detach_types.Count() < 1)
6813 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6814 }
6815
6816 for (int i = 0; i < inventory_slots.Count(); i++)
6817 {
6818 slot = inventory_slots.Get(i);
6819 }
6820
6821 if (slot != "")
6822 {
6823 if (detach_types.Count() == 1)
6824 idx = 0;
6825 else
6826 idx = inventory_slots.Find(slot);
6827 }
6828 if (idx < 0)
6829 return "";
6830
6831 return detach_types.Get(idx);
6832 }
6833
6835 {
6836
6838
6839
6840 float min_time = 1;
6841 float max_time = 3;
6842 float delay = Math.RandomFloat(min_time, max_time);
6843
6844 explode_timer.Run(delay, this, "DoAmmoExplosion");
6845 }
6846
6848 {
6849 Magazine magazine = Magazine.Cast(this);
6850 int pop_sounds_count = 6;
6851 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
6852
6853
6854 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
6855 string sound_name = pop_sounds[ sound_idx ];
6857
6858
6859 magazine.ServerAddAmmoCount(-1);
6860
6861
6862 float min_temp_to_explode = 100;
6863
6864 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
6865 {
6867 }
6868 }
6869
6870
6871 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
6872 {
6873 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
6874
6875 const int CHANCE_DAMAGE_CARGO = 4;
6876 const int CHANCE_DAMAGE_ATTACHMENT = 1;
6877 const int CHANCE_DAMAGE_NOTHING = 2;
6878
6880 {
6881 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
6882 int chances;
6883 int rnd;
6884
6885 if (GetInventory().GetCargo())
6886 {
6887 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6888 rnd = Math.RandomInt(0,chances);
6889
6890 if (rnd < CHANCE_DAMAGE_CARGO)
6891 {
6893 }
6894 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
6895 {
6897 }
6898 }
6899 else
6900 {
6901 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6902 rnd = Math.RandomInt(0,chances);
6903
6904 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
6905 {
6907 }
6908 }
6909 }
6910 }
6911
6913 {
6914 if (GetInventory().GetCargo())
6915 {
6916 int item_count = GetInventory().GetCargo().GetItemCount();
6917 if (item_count > 0)
6918 {
6919 int random_pick = Math.RandomInt(0, item_count);
6921 if (!item.IsExplosive())
6922 {
6923 item.AddHealth("","",damage);
6924 return true;
6925 }
6926 }
6927 }
6928 return false;
6929 }
6930
6932 {
6933 int attachment_count = GetInventory().AttachmentCount();
6934 if (attachment_count > 0)
6935 {
6936 int random_pick = Math.RandomInt(0, attachment_count);
6937 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
6938 if (!attachment.IsExplosive())
6939 {
6940 attachment.AddHealth("","",damage);
6941 return true;
6942 }
6943 }
6944 return false;
6945 }
6946
6948 {
6950 }
6951
6953 {
6955 return GetInventory().CanRemoveEntity();
6956
6957 return false;
6958 }
6959
6961 {
6963 return;
6964
6966 {
6967 if (ScriptInputUserData.CanStoreInputUserData())
6968 {
6969 ScriptInputUserData ctx = new ScriptInputUserData;
6974 ctx.
Write(destination_entity);
6978 }
6979 }
6980 else if (!
GetGame().IsMultiplayer())
6981 {
6983 }
6984 }
6985
6987 {
6989 return;
6990
6991 float split_quantity_new;
6995 InventoryLocation loc = new InventoryLocation;
6996
6997 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6998 {
7000 split_quantity_new = stack_max;
7001 else
7003
7004 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7005 if (new_item)
7006 {
7007 new_item.SetResultOfSplit(true);
7008 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7010 new_item.SetQuantity(split_quantity_new);
7011 }
7012 }
7013 else if (destination_entity && slot_id == -1)
7014 {
7015 if (quantity > stack_max)
7016 split_quantity_new = stack_max;
7017 else
7018 split_quantity_new = quantity;
7019
7021 {
7024 }
7025
7026 if (new_item)
7027 {
7028 new_item.SetResultOfSplit(true);
7029 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7031 new_item.SetQuantity(split_quantity_new);
7032 }
7033 }
7034 else
7035 {
7036 if (stack_max != 0)
7037 {
7039 {
7041 }
7042
7043 if (split_quantity_new == 0)
7044 {
7045 if (!
GetGame().IsMultiplayer())
7046 player.PhysicalPredictiveDropItem(this);
7047 else
7048 player.ServerDropEntity(this);
7049 return;
7050 }
7051
7053
7054 if (new_item)
7055 {
7056 new_item.SetResultOfSplit(true);
7057 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7059 new_item.SetQuantity(stack_max);
7060 new_item.PlaceOnSurface();
7061 }
7062 }
7063 }
7064 }
7065
7067 {
7069 return;
7070
7071 float split_quantity_new;
7075 InventoryLocation loc = new InventoryLocation;
7076
7077 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7078 {
7080 split_quantity_new = stack_max;
7081 else
7083
7084 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7085 if (new_item)
7086 {
7087 new_item.SetResultOfSplit(true);
7088 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7090 new_item.SetQuantity(split_quantity_new);
7091 }
7092 }
7093 else if (destination_entity && slot_id == -1)
7094 {
7095 if (quantity > stack_max)
7096 split_quantity_new = stack_max;
7097 else
7098 split_quantity_new = quantity;
7099
7101 {
7104 }
7105
7106 if (new_item)
7107 {
7108 new_item.SetResultOfSplit(true);
7109 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7111 new_item.SetQuantity(split_quantity_new);
7112 }
7113 }
7114 else
7115 {
7116 if (stack_max != 0)
7117 {
7119 {
7121 }
7122
7124
7125 if (new_item)
7126 {
7127 new_item.SetResultOfSplit(true);
7128 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7130 new_item.SetQuantity(stack_max);
7131 new_item.PlaceOnSurface();
7132 }
7133 }
7134 }
7135 }
7136
7138 {
7140 return;
7141
7143 {
7144 if (ScriptInputUserData.CanStoreInputUserData())
7145 {
7146 ScriptInputUserData ctx = new ScriptInputUserData;
7151 dst.WriteToContext(ctx);
7153 }
7154 }
7155 else if (!
GetGame().IsMultiplayer())
7156 {
7158 }
7159 }
7160
7162 {
7164 return;
7165
7167 {
7168 if (ScriptInputUserData.CanStoreInputUserData())
7169 {
7170 ScriptInputUserData ctx = new ScriptInputUserData;
7175 ctx.
Write(destination_entity);
7181 }
7182 }
7183 else if (!
GetGame().IsMultiplayer())
7184 {
7186 }
7187 }
7188
7190 {
7192 }
7193
7195 {
7197 return this;
7198
7200 float split_quantity_new;
7202 if (dst.IsValid())
7203 {
7204 int slot_id = dst.GetSlot();
7206
7207 if (quantity > stack_max)
7208 split_quantity_new = stack_max;
7209 else
7210 split_quantity_new = quantity;
7211
7213
7214 if (new_item)
7215 {
7216 new_item.SetResultOfSplit(true);
7217 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7220 }
7221
7222 return new_item;
7223 }
7224
7225 return null;
7226 }
7227
7229 {
7231 return;
7232
7234 float split_quantity_new;
7236 if (destination_entity)
7237 {
7239 if (quantity > stackable)
7240 split_quantity_new = stackable;
7241 else
7242 split_quantity_new = quantity;
7243
7244 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7245 if (new_item)
7246 {
7247 new_item.SetResultOfSplit(true);
7248 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7250 new_item.SetQuantity(split_quantity_new);
7251 }
7252 }
7253 }
7254
7256 {
7258 return;
7259
7261 {
7262 if (ScriptInputUserData.CanStoreInputUserData())
7263 {
7264 ScriptInputUserData ctx = new ScriptInputUserData;
7269 ItemBase destination_entity =
this;
7270 ctx.
Write(destination_entity);
7274 }
7275 }
7276 else if (!
GetGame().IsMultiplayer())
7277 {
7279 }
7280 }
7281
7283 {
7285 return;
7286
7288 float split_quantity_new;
7290 if (player)
7291 {
7293 if (quantity > stackable)
7294 split_quantity_new = stackable;
7295 else
7296 split_quantity_new = quantity;
7297
7298 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7299 new_item =
ItemBase.Cast(in_hands);
7300 if (new_item)
7301 {
7302 new_item.SetResultOfSplit(true);
7303 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7305 new_item.SetQuantity(split_quantity_new);
7306 }
7307 }
7308 }
7309
7311 {
7313 return;
7314
7316 float split_quantity_new = Math.Floor(quantity * 0.5);
7317
7319
7320 if (new_item)
7321 {
7322 if (new_item.GetQuantityMax() < split_quantity_new)
7323 {
7324 split_quantity_new = new_item.GetQuantityMax();
7325 }
7326
7327 new_item.SetResultOfSplit(true);
7328 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7329
7331 {
7334 }
7335 else
7336 {
7339 }
7340 }
7341 }
7342
7344 {
7346 return;
7347
7349 float split_quantity_new = Math.Floor(quantity / 2);
7350
7351 InventoryLocation invloc = new InventoryLocation;
7353
7355 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7356
7357 if (new_item)
7358 {
7359 if (new_item.GetQuantityMax() < split_quantity_new)
7360 {
7361 split_quantity_new = new_item.GetQuantityMax();
7362 }
7364 {
7367 }
7368 else
7369 {
7372 }
7373 }
7374 }
7375
7378 {
7379 SetWeightDirty();
7381
7382 if (parent)
7383 parent.OnAttachmentQuantityChangedEx(this, delta);
7384
7386 {
7388 {
7390 }
7392 {
7393 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7395 }
7396 }
7397
7398 }
7399
7402 {
7403
7404 }
7405
7408 {
7410 }
7411
7413 {
7414 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7415
7417 {
7418 if (newLevel == GameConstants.STATE_RUINED)
7419 {
7421 EntityAI parent = GetHierarchyParent();
7422 if (parent && parent.IsFireplace())
7423 {
7424 CargoBase cargo = GetInventory().GetCargo();
7425 if (cargo)
7426 {
7428 {
7430 }
7431 }
7432 }
7433 }
7434
7436 {
7437
7439 return;
7440 }
7441
7442 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7443 {
7445 }
7446 }
7447 }
7448
7449
7451 {
7452 super.OnRightClick();
7453
7455 {
7457 {
7458 if (ScriptInputUserData.CanStoreInputUserData())
7459 {
7460 vector m4[4];
7462
7463 EntityAI root = GetHierarchyRoot();
7464
7465 InventoryLocation dst = new InventoryLocation;
7467 {
7468 if (root)
7469 {
7470 root.GetTransform(m4);
7472 }
7473 else
7474 GetInventory().GetCurrentInventoryLocation(dst);
7475 }
7476 else
7477 {
7479
7480
7481 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7482 {
7483 if (root)
7484 {
7485 root.GetTransform(m4);
7487 }
7488 else
7489 GetInventory().GetCurrentInventoryLocation(dst);
7490 }
7491 else
7492 {
7493 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7494 }
7495 }
7496
7497 ScriptInputUserData ctx = new ScriptInputUserData;
7505 }
7506 }
7507 else if (!
GetGame().IsMultiplayer())
7508 {
7510 }
7511 }
7512 }
7513
7514 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7515 {
7516
7517 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7518 return false;
7519
7520 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7521 return false;
7522
7523
7525 return false;
7526
7527
7528 Magazine mag = Magazine.Cast(this);
7529 if (mag)
7530 {
7531 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7532 return false;
7533
7534 if (stack_max_limit)
7535 {
7536 Magazine other_mag = Magazine.Cast(other_item);
7537 if (other_item)
7538 {
7539 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7540 return false;
7541 }
7542
7543 }
7544 }
7545 else
7546 {
7547
7549 return false;
7550
7552 return false;
7553 }
7554
7555 PlayerBase player = null;
7556 if (CastTo(player, GetHierarchyRootPlayer()))
7557 {
7558 if (player.GetInventory().HasAttachment(this))
7559 return false;
7560
7561 if (player.IsItemsToDelete())
7562 return false;
7563 }
7564
7565 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7566 return false;
7567
7568 int slotID;
7570 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7571 return false;
7572
7573 return true;
7574 }
7575
7577 {
7579 }
7580
7582 {
7583 return m_IsResultOfSplit;
7584 }
7585
7587 {
7588 m_IsResultOfSplit = value;
7589 }
7590
7592 {
7594 }
7595
7597 {
7598 float other_item_quantity = other_item.GetQuantity();
7599 float this_free_space;
7600
7602
7604
7605 if (other_item_quantity > this_free_space)
7606 {
7607 return this_free_space;
7608 }
7609 else
7610 {
7611 return other_item_quantity;
7612 }
7613 }
7614
7616 {
7618 }
7619
7621 {
7623 return;
7624
7625 if (!IsMagazine() && other_item)
7626 {
7628 if (quantity_used != 0)
7629 {
7630 float hp1 = GetHealth01("","");
7631 float hp2 = other_item.GetHealth01("","");
7632 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7633 hpResult = hpResult / (
GetQuantity() + quantity_used);
7634
7635 hpResult *= GetMaxHealth();
7636 Math.Round(hpResult);
7637 SetHealth("", "Health", hpResult);
7638
7640 other_item.AddQuantity(-quantity_used);
7641 }
7642 }
7644 }
7645
7647 {
7648 #ifdef SERVER
7649 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7650 GetHierarchyParent().IncreaseLifetimeUp();
7651 #endif
7652 };
7653
7655 {
7656 PlayerBase p = PlayerBase.Cast(player);
7657
7658 array<int> recipesIds = p.m_Recipes;
7659 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7660 if (moduleRecipesManager)
7661 {
7662 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7663 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7664 }
7665
7666 for (int i = 0;i < recipesIds.Count(); i++)
7667 {
7668 int key = recipesIds.Get(i);
7669 string recipeName = moduleRecipesManager.GetRecipeName(key);
7671 }
7672 }
7673
7674
7675 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7676 {
7677 super.GetDebugActions(outputList);
7678
7679
7684
7685
7689
7693
7694
7697
7698
7700 {
7703 }
7704
7706
7709
7713 }
7714
7715
7716
7717
7719 {
7720 super.OnAction(action_id, player, ctx);
7721 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7722 {
7723 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7724 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7725 PlayerBase p = PlayerBase.Cast(player);
7726 if (
EActions.RECIPES_RANGE_START < 1000)
7727 {
7728 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7729 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7730 }
7731 }
7732 #ifndef SERVER
7733 else if (action_id ==
EActions.WATCH_PLAYER)
7734 {
7735 PluginDeveloper.SetDeveloperItemClientEx(player);
7736 }
7737 #endif
7739 {
7740 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7741 {
7742 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7743 OnDebugButtonPressServer(id + 1);
7744 }
7745
7746 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7747 {
7748 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7750 }
7751
7752 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7753 {
7754 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7756 }
7757
7758 else if (action_id ==
EActions.ADD_QUANTITY)
7759 {
7760 if (IsMagazine())
7761 {
7762 Magazine mag = Magazine.Cast(this);
7763 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7764 }
7765 else
7766 {
7768 }
7769
7770 if (m_EM)
7771 {
7772 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7773 }
7774
7775 }
7776
7777 else if (action_id ==
EActions.REMOVE_QUANTITY)
7778 {
7779 if (IsMagazine())
7780 {
7781 Magazine mag2 = Magazine.Cast(this);
7782 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7783 }
7784 else
7785 {
7787 }
7788 if (m_EM)
7789 {
7790 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7791 }
7792
7793 }
7794
7795 else if (action_id ==
EActions.SET_QUANTITY_0)
7796 {
7798
7799 if (m_EM)
7800 {
7801 m_EM.SetEnergy(0);
7802 }
7803 }
7804
7805 else if (action_id ==
EActions.SET_MAX_QUANTITY)
7806 {
7808
7809 if (m_EM)
7810 {
7811 m_EM.SetEnergy(m_EM.GetEnergyMax());
7812 }
7813 }
7814
7815 else if (action_id ==
EActions.ADD_HEALTH)
7816 {
7817 AddHealth("","",GetMaxHealth("","Health")/5);
7818 }
7819 else if (action_id ==
EActions.REMOVE_HEALTH)
7820 {
7821 AddHealth("","",-GetMaxHealth("","Health")/5);
7822 }
7823 else if (action_id ==
EActions.DESTROY_HEALTH)
7824 {
7825 SetHealth01("","",0);
7826 }
7827 else if (action_id ==
EActions.WATCH_ITEM)
7828 {
7830 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
7831 #ifdef DEVELOPER
7832 SetDebugDeveloper_item(this);
7833 #endif
7834 }
7835
7836 else if (action_id ==
EActions.ADD_TEMPERATURE)
7837 {
7838 AddTemperature(20);
7839
7840 }
7841
7842 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
7843 {
7844 AddTemperature(-20);
7845
7846 }
7847
7848 else if (action_id ==
EActions.FLIP_FROZEN)
7849 {
7850 SetFrozen(!GetIsFrozen());
7851
7852 }
7853
7854 else if (action_id ==
EActions.ADD_WETNESS)
7855 {
7857
7858 }
7859
7860 else if (action_id ==
EActions.REMOVE_WETNESS)
7861 {
7863
7864 }
7865
7866 else if (action_id ==
EActions.LIQUIDTYPE_UP)
7867 {
7870
7871
7872 }
7873
7874 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
7875 {
7878 }
7879
7880 else if (action_id ==
EActions.MAKE_SPECIAL)
7881 {
7882 auto debugParams = DebugSpawnParams.WithPlayer(player);
7883 OnDebugSpawnEx(debugParams);
7884 }
7885
7886 else if (action_id ==
EActions.DELETE)
7887 {
7888 Delete();
7889 }
7890
7891 }
7892
7893
7894 return false;
7895 }
7896
7897
7898
7899
7903
7906
7907
7908
7910 {
7911 return false;
7912 }
7913
7914
7916 {
7917 return true;
7918 }
7919
7920
7922 {
7923 return true;
7924 }
7925
7926
7927
7929 {
7930 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
7932 }
7933
7936 {
7937 return null;
7938 }
7939
7941 {
7942 return false;
7943 }
7944
7946 {
7947 return false;
7948 }
7949
7953
7954
7956 {
7957 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7958 return module_repairing.CanRepair(this, item_repair_kit);
7959 }
7960
7961
7962 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
7963 {
7964 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7965 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
7966 }
7967
7968
7970 {
7971
7972
7973
7974
7975
7976
7977
7978
7979 return 1;
7980 }
7981
7982
7983
7985 {
7987 }
7988
7989
7990
7992 {
7994 }
7995
7996
8005 {
8006 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8007
8008 if (player)
8009 {
8010 player.MessageStatus(text);
8011 }
8012 }
8013
8014
8023 {
8024 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8025
8026 if (player)
8027 {
8028 player.MessageAction(text);
8029 }
8030 }
8031
8032
8041 {
8042 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8043
8044 if (player)
8045 {
8046 player.MessageFriendly(text);
8047 }
8048 }
8049
8050
8059 {
8060 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8061
8062 if (player)
8063 {
8064 player.MessageImportant(text);
8065 }
8066 }
8067
8069 {
8070 return true;
8071 }
8072
8073
8074 override bool KindOf(
string tag)
8075 {
8076 bool found = false;
8077 string item_name = this.
GetType();
8080
8081 int array_size = item_tag_array.Count();
8082 for (int i = 0; i < array_size; i++)
8083 {
8084 if (item_tag_array.Get(i) == tag)
8085 {
8086 found = true;
8087 break;
8088 }
8089 }
8090 return found;
8091 }
8092
8093
8095 {
8096
8097 super.OnRPC(sender, rpc_type,ctx);
8098
8099
8100 switch (rpc_type)
8101 {
8102 #ifndef SERVER
8103 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8104 Param2<bool, string> p = new Param2<bool, string>(false, "");
8105
8107 return;
8108
8109 bool play = p.param1;
8110 string soundSet = p.param2;
8111
8112 if (play)
8113 {
8115 {
8117 {
8119 }
8120 }
8121 else
8122 {
8124 }
8125 }
8126 else
8127 {
8129 }
8130
8131 break;
8132 #endif
8133
8134 }
8135
8137 {
8139 }
8140 }
8141
8142
8143
8144
8146 {
8147 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8148 return plugin.GetID(
name);
8149 }
8150
8152 {
8153 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8154 return plugin.GetName(id);
8155 }
8156
8159 {
8160
8161
8162 int varFlags;
8163 if (!ctx.
Read(varFlags))
8164 return;
8165
8166 if (varFlags & ItemVariableFlags.FLOAT)
8167 {
8169 }
8170 }
8171
8173 {
8174
8175 super.SerializeNumericalVars(floats_out);
8176
8177
8178
8180 {
8182 }
8183
8185 {
8187 }
8188
8190 {
8192 }
8193
8195 {
8200 }
8201
8203 {
8205 }
8206 }
8207
8209 {
8210
8211 super.DeSerializeNumericalVars(floats);
8212
8213
8214 int index = 0;
8215 int mask = Math.Round(floats.Get(index));
8216
8217 index++;
8218
8220 {
8222 {
8224 }
8225 else
8226 {
8227 float quantity = floats.Get(index);
8229 }
8230 index++;
8231 }
8232
8234 {
8235 float wet = floats.Get(index);
8237 index++;
8238 }
8239
8241 {
8242 int liquidtype = Math.Round(floats.Get(index));
8244 index++;
8245 }
8246
8248 {
8250 index++;
8252 index++;
8254 index++;
8256 index++;
8257 }
8258
8260 {
8261 int cleanness = Math.Round(floats.Get(index));
8263 index++;
8264 }
8265 }
8266
8268 {
8269 super.WriteVarsToCTX(ctx);
8270
8271
8273 {
8275 }
8276
8278 {
8280 }
8281
8283 {
8285 }
8286
8288 {
8289 int r,g,b,a;
8295 }
8296
8298 {
8300 }
8301 }
8302
8304 {
8305 if (!super.ReadVarsFromCTX(ctx,version))
8306 return false;
8307
8308 int intValue;
8309 float value;
8310
8311 if (version < 140)
8312 {
8313 if (!ctx.
Read(intValue))
8314 return false;
8315
8316 m_VariablesMask = intValue;
8317 }
8318
8320 {
8321 if (!ctx.
Read(value))
8322 return false;
8323
8325 {
8327 }
8328 else
8329 {
8331 }
8332 }
8333
8334 if (version < 140)
8335 {
8337 {
8338 if (!ctx.
Read(value))
8339 return false;
8340 SetTemperatureDirect(value);
8341 }
8342 }
8343
8345 {
8346 if (!ctx.
Read(value))
8347 return false;
8349 }
8350
8352 {
8353 if (!ctx.
Read(intValue))
8354 return false;
8356 }
8357
8359 {
8360 int r,g,b,a;
8362 return false;
8364 return false;
8366 return false;
8368 return false;
8369
8371 }
8372
8374 {
8375 if (!ctx.
Read(intValue))
8376 return false;
8378 }
8379
8380 if (version >= 138 && version < 140)
8381 {
8383 {
8384 if (!ctx.
Read(intValue))
8385 return false;
8386 SetFrozen(intValue);
8387 }
8388 }
8389
8390 return true;
8391 }
8392
8393
8395 {
8398 {
8400 }
8401
8402 if (!super.OnStoreLoad(ctx, version))
8403 {
8405 return false;
8406 }
8407
8408 if (version >= 114)
8409 {
8410 bool hasQuickBarIndexSaved;
8411
8412 if (!ctx.
Read(hasQuickBarIndexSaved))
8413 {
8415 return false;
8416 }
8417
8418 if (hasQuickBarIndexSaved)
8419 {
8420 int itmQBIndex;
8421
8422
8423 if (!ctx.
Read(itmQBIndex))
8424 {
8426 return false;
8427 }
8428
8429 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8430 if (itmQBIndex != -1 && parentPlayer)
8431 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8432 }
8433 }
8434 else
8435 {
8436
8437 PlayerBase player;
8438 int itemQBIndex;
8439 if (version ==
int.
MAX)
8440 {
8441 if (!ctx.
Read(itemQBIndex))
8442 {
8444 return false;
8445 }
8446 }
8447 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8448 {
8449
8450 if (!ctx.
Read(itemQBIndex))
8451 {
8453 return false;
8454 }
8455 if (itemQBIndex != -1 && player)
8456 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8457 }
8458 }
8459
8460 if (version < 140)
8461 {
8462
8463 if (!LoadVariables(ctx, version))
8464 {
8466 return false;
8467 }
8468 }
8469
8470
8472 {
8474 return false;
8475 }
8476 if (version >= 132)
8477 {
8479 if (raib)
8480 {
8482 {
8484 return false;
8485 }
8486 }
8487 }
8488
8490 return true;
8491 }
8492
8493
8494
8496 {
8497 super.OnStoreSave(ctx);
8498
8499 PlayerBase player;
8500 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8501 {
8503
8504 int itemQBIndex = -1;
8505 itemQBIndex = player.FindQuickBarEntityIndex(this);
8506 ctx.
Write(itemQBIndex);
8507 }
8508 else
8509 {
8511 }
8512
8514
8516 if (raib)
8517 {
8519 }
8520 }
8521
8522
8524 {
8525 super.AfterStoreLoad();
8526
8528 {
8530 }
8531
8533 {
8536 }
8537 }
8538
8540 {
8541 super.EEOnAfterLoad();
8542
8544 {
8546 }
8547
8550 }
8551
8553 {
8554 return false;
8555 }
8556
8557
8558
8560 {
8562 {
8563 #ifdef PLATFORM_CONSOLE
8564
8566 {
8568 if (menu)
8569 {
8571 }
8572 }
8573 #endif
8574 }
8575
8577 {
8580 }
8581
8583 {
8584 SetWeightDirty();
8586 }
8588 {
8591 }
8592
8594 {
8597 }
8599 {
8602 }
8603
8604 super.OnVariablesSynchronized();
8605 }
8606
8607
8608
8610 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8611 {
8612 if (!IsServerCheck(allow_client))
8613 return false;
8614
8616 return false;
8617
8620
8621 if (value <= (min + 0.001))
8622 value = min;
8623
8624 if (value == min)
8625 {
8626 if (destroy_config)
8627 {
8628 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8629 if (dstr)
8630 {
8632 this.Delete();
8633 return true;
8634 }
8635 }
8636 else if (destroy_forced)
8637 {
8639 this.Delete();
8640 return true;
8641 }
8642
8644 }
8645
8648
8650 {
8652
8653 if (delta)
8655 }
8656
8658
8659 return false;
8660 }
8661
8662
8664 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8665 {
8667 }
8668
8670 {
8673 }
8674
8676 {
8679 }
8680
8683 {
8684 float value_clamped = Math.Clamp(value, 0, 1);
8686 SetQuantity(result, destroy_config, destroy_forced);
8687 }
8688
8689
8692 {
8694 }
8695
8697 {
8699 }
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8711 {
8712 int slot = -1;
8713 if (GetInventory())
8714 {
8715 InventoryLocation il = new InventoryLocation;
8716 GetInventory().GetCurrentInventoryLocation(il);
8718 }
8719
8721 }
8722
8724 {
8725 float quantity_max = 0;
8726
8728 {
8729 if (attSlotID != -1)
8730 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8731
8732 if (quantity_max <= 0)
8734 }
8735
8736 if (quantity_max <= 0)
8738
8739 return quantity_max;
8740 }
8741
8743 {
8745 }
8746
8748 {
8750 }
8751
8752
8754 {
8756 }
8757
8759 {
8761 }
8762
8764 {
8766 }
8767
8768
8770 {
8771
8772 float weightEx = GetWeightEx();
8773 float special = GetInventoryAndCargoWeight();
8774 return weightEx - special;
8775 }
8776
8777
8779 {
8781 }
8782
8784 {
8786 {
8787 #ifdef DEVELOPER
8788 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8789 {
8790 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8792 }
8793 #endif
8794
8796 }
8797 else if (HasEnergyManager())
8798 {
8799 #ifdef DEVELOPER
8800 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8801 {
8802 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8803 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8804 }
8805 #endif
8806 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
8807 }
8808 else
8809 {
8810 #ifdef DEVELOPER
8811 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8812 {
8813 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
8814 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
8815 }
8816 #endif
8817 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
8818 }
8819 }
8820
8823 {
8824 int item_count = 0;
8826
8827 if (GetInventory().GetCargo() != NULL)
8828 {
8829 item_count = GetInventory().GetCargo().GetItemCount();
8830 }
8831
8832 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
8833 {
8834 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
8835 if (item)
8836 item_count += item.GetNumberOfItems();
8837 }
8838 return item_count;
8839 }
8840
8843 {
8844 float weight = 0;
8845 float wetness = 1;
8846 if (include_wetness)
8849 {
8850 weight = wetness * m_ConfigWeight;
8851 }
8853 {
8854 weight = 1;
8855 }
8856 return weight;
8857 }
8858
8859
8860
8862 {
8863 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
8864 {
8865 GameInventory inv = GetInventory();
8866 array<EntityAI> items = new array<EntityAI>;
8868 for (int i = 0; i < items.Count(); i++)
8869 {
8871 if (item)
8872 {
8874 }
8875 }
8876 }
8877 }
8878
8879
8880
8881
8883 {
8884 float energy = 0;
8885 if (HasEnergyManager())
8886 {
8887 energy = GetCompEM().GetEnergy();
8888 }
8889 return energy;
8890 }
8891
8892
8894 {
8895 super.OnEnergyConsumed();
8896
8898 }
8899
8901 {
8902 super.OnEnergyAdded();
8903
8905 }
8906
8907
8909 {
8910 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
8911 {
8913 {
8914 float energy_0to1 = GetCompEM().GetEnergy0To1();
8916 }
8917 }
8918 }
8919
8920
8922 {
8923 return ConfigGetFloat("heatIsolation");
8924 }
8925
8927 {
8929 }
8930
8932 {
8933 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
8934 if (
GetGame().ConfigIsExisting(paramPath))
8936
8937 return 0.0;
8938 }
8939
8941 {
8942 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
8943 if (
GetGame().ConfigIsExisting(paramPath))
8945
8946 return 0.0;
8947 }
8948
8949 override void SetWet(
float value,
bool allow_client =
false)
8950 {
8951 if (!IsServerCheck(allow_client))
8952 return;
8953
8956
8958
8959 m_VarWet = Math.Clamp(value, min, max);
8960
8962 {
8965 }
8966 }
8967
8968 override void AddWet(
float value)
8969 {
8971 }
8972
8974 {
8976 }
8977
8979 {
8981 }
8982
8984 {
8986 }
8987
8989 {
8991 }
8992
8994 {
8996 }
8997
8999 {
9002 if (newLevel != oldLevel)
9003 {
9005 }
9006 }
9007
9009 {
9010 SetWeightDirty();
9011 }
9012
9014 {
9015 return GetWetLevelInternal(
m_VarWet);
9016 }
9017
9018
9019
9021 {
9023 }
9024
9026 {
9028 }
9029
9031 {
9033 }
9034
9036 {
9038 }
9039
9040
9041
9043 {
9044 if (ConfigIsExisting("itemModelLength"))
9045 {
9046 return ConfigGetFloat("itemModelLength");
9047 }
9048 return 0;
9049 }
9050
9052 {
9053 if (ConfigIsExisting("itemAttachOffset"))
9054 {
9055 return ConfigGetFloat("itemAttachOffset");
9056 }
9057 return 0;
9058 }
9059
9060 override void SetCleanness(
int value,
bool allow_client =
false)
9061 {
9062 if (!IsServerCheck(allow_client))
9063 return;
9064
9066
9068
9071 }
9072
9074 {
9076 }
9077
9079 {
9080 return true;
9081 }
9082
9083
9084
9085
9087 {
9089 }
9090
9092 {
9094 }
9095
9096
9097
9098
9099 override void SetColor(
int r,
int g,
int b,
int a)
9100 {
9106 }
9108 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9109 {
9114 }
9115
9117 {
9119 }
9120
9123 {
9124 int r,g,b,a;
9126 r = r/255;
9127 g = g/255;
9128 b = b/255;
9129 a = a/255;
9130 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9131 }
9132
9133
9134
9135 override void SetLiquidType(
int value,
bool allow_client =
false)
9136 {
9137 if (!IsServerCheck(allow_client))
9138 return;
9139
9144 }
9145
9147 {
9148 return ConfigGetInt("varLiquidTypeInit");
9149 }
9150
9152 {
9154 }
9155
9157 {
9159 SetFrozen(false);
9160 }
9161
9164 {
9165 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9166 }
9167
9168
9171 {
9172 PlayerBase nplayer;
9173 if (PlayerBase.CastTo(nplayer, player))
9174 {
9176
9177 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9178 }
9179 }
9180
9181
9184 {
9185 PlayerBase nplayer;
9186 if (PlayerBase.CastTo(nplayer,player))
9187 {
9188
9189 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9190
9191 }
9192
9193
9194 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9195
9196
9197 if (HasEnergyManager())
9198 {
9199 GetCompEM().UpdatePlugState();
9200 }
9201 }
9202
9203
9205 {
9206 super.OnPlacementStarted(player);
9207
9209 }
9210
9211 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9212 {
9214 {
9215 m_AdminLog.OnPlacementComplete(player,
this);
9216 }
9217
9218 super.OnPlacementComplete(player, position, orientation);
9219 }
9220
9221
9222
9223
9224
9226 {
9228 {
9229 return true;
9230 }
9231 else
9232 {
9233 return false;
9234 }
9235 }
9236
9237
9239 {
9241 {
9243 }
9244 }
9245
9246
9248 {
9250 }
9251
9253 {
9255 }
9256
9257 override void InsertAgent(
int agent,
float count = 1)
9258 {
9259 if (count < 1)
9260 return;
9261
9263 }
9264
9267 {
9269 }
9270
9271
9273 {
9275 }
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9319 {
9321 return false;
9322 return true;
9323 }
9324
9326 {
9327
9329 }
9330
9331
9334 {
9335 super.CheckForRoofLimited(timeTresholdMS);
9336
9338 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9339 {
9340 m_PreviousRoofTestTime = time;
9341 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9342 }
9343 }
9344
9345
9347 {
9349 {
9350 return 0;
9351 }
9352
9353 if (GetInventory().GetAttachmentSlotsCount() != 0)
9354 {
9355 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9356 if (filter)
9357 return filter.GetProtectionLevel(type, false, system);
9358 else
9359 return 0;
9360 }
9361
9362 string subclassPath, entryName;
9363
9364 switch (type)
9365 {
9367 entryName = "biological";
9368 break;
9370 entryName = "chemical";
9371 break;
9372 default:
9373 entryName = "biological";
9374 break;
9375 }
9376
9377 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9378
9380 }
9381
9382
9383
9386 {
9387 if (!IsMagazine())
9389
9391 }
9392
9393
9394
9395
9396
9401 {
9402 return true;
9403 }
9404
9406 {
9408 }
9409
9410
9411
9412
9413
9415 {
9416 if (parent)
9417 {
9418 if (parent.IsInherited(DayZInfected))
9419 return true;
9420
9421 if (!parent.IsRuined())
9422 return true;
9423 }
9424
9425 return true;
9426 }
9427
9429 {
9430 if (!super.CanPutAsAttachment(parent))
9431 {
9432 return false;
9433 }
9434
9435 if (!IsRuined() && !parent.IsRuined())
9436 {
9437 return true;
9438 }
9439
9440 return false;
9441 }
9442
9444 {
9445
9446
9447
9448
9449 return super.CanReceiveItemIntoCargo(item);
9450 }
9451
9453 {
9454
9455
9456
9457
9458 GameInventory attachmentInv = attachment.GetInventory();
9460 {
9461 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9462 return false;
9463 }
9464
9465 InventoryLocation loc = new InventoryLocation();
9466 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9467 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9468 return false;
9469
9470 return super.CanReceiveAttachment(attachment, slotId);
9471 }
9472
9474 {
9475 if (!super.CanReleaseAttachment(attachment))
9476 return false;
9477
9478 return GetInventory().AreChildrenAccessible();
9479 }
9480
9481
9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9502 {
9503 int id = muzzle_owner.GetMuzzleID();
9504 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9505
9506 if (WPOF_array)
9507 {
9508 for (int i = 0; i < WPOF_array.Count(); i++)
9509 {
9510 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9511
9512 if (WPOF)
9513 {
9514 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9515 }
9516 }
9517 }
9518 }
9519
9520
9522 {
9523 int id = muzzle_owner.GetMuzzleID();
9525
9526 if (WPOBE_array)
9527 {
9528 for (int i = 0; i < WPOBE_array.Count(); i++)
9529 {
9530 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9531
9532 if (WPOBE)
9533 {
9534 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9535 }
9536 }
9537 }
9538 }
9539
9540
9542 {
9543 int id = muzzle_owner.GetMuzzleID();
9544 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9545
9546 if (WPOOH_array)
9547 {
9548 for (int i = 0; i < WPOOH_array.Count(); i++)
9549 {
9550 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9551
9552 if (WPOOH)
9553 {
9554 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9555 }
9556 }
9557 }
9558 }
9559
9560
9562 {
9563 int id = muzzle_owner.GetMuzzleID();
9564 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9565
9566 if (WPOOH_array)
9567 {
9568 for (int i = 0; i < WPOOH_array.Count(); i++)
9569 {
9570 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9571
9572 if (WPOOH)
9573 {
9574 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9575 }
9576 }
9577 }
9578 }
9579
9580
9582 {
9583 int id = muzzle_owner.GetMuzzleID();
9584 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9585
9586 if (WPOOH_array)
9587 {
9588 for (int i = 0; i < WPOOH_array.Count(); i++)
9589 {
9590 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9591
9592 if (WPOOH)
9593 {
9594 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9595 }
9596 }
9597 }
9598 }
9599
9600
9601
9603 {
9605 {
9606 return true;
9607 }
9608
9609 return false;
9610 }
9611
9613 {
9615 {
9616 return true;
9617 }
9618
9619 return false;
9620 }
9621
9623 {
9625 {
9626 return true;
9627 }
9628
9629 return false;
9630 }
9631
9633 {
9634 return false;
9635 }
9636
9639 {
9640 return UATimeSpent.DEFAULT_DEPLOY;
9641 }
9642
9643
9644
9645
9647 {
9649 SetSynchDirty();
9650 }
9651
9653 {
9655 }
9656
9657
9659 {
9660 return false;
9661 }
9662
9665 {
9666 string att_type = "None";
9667
9668 if (ConfigIsExisting("soundAttType"))
9669 {
9670 att_type = ConfigGetString("soundAttType");
9671 }
9672
9674 }
9675
9677 {
9679 }
9680
9681
9682
9683
9684
9688
9690 {
9693
9695 }
9696
9697
9699 {
9701 return;
9702
9704
9707
9710
9711 SoundParameters params = new SoundParameters();
9715 }
9716
9717
9719 {
9721 return;
9722
9724 SetSynchDirty();
9725
9728 }
9729
9730
9732 {
9734 return;
9735
9737 SetSynchDirty();
9738
9741 }
9742
9744 {
9746 }
9747
9749 {
9751 }
9752
9755 {
9756 if (!
GetGame().IsDedicatedServer())
9757 {
9758 if (ConfigIsExisting("attachSoundSet"))
9759 {
9760 string cfg_path = "";
9761 string soundset = "";
9763
9766 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9767 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9768
9769 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9770 {
9771 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9772 {
9773 if (cfg_slot_array[i] == slot_type)
9774 {
9775 soundset = cfg_soundset_array[i];
9776 break;
9777 }
9778 }
9779 }
9780
9781 if (soundset != "")
9782 {
9783 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9785 }
9786 }
9787 }
9788 }
9789
9791 {
9792
9793 }
9794
9795 void OnApply(PlayerBase player);
9796
9798 {
9799 return 1.0;
9800 };
9801
9803 {
9805 }
9806
9808 {
9810 }
9811
9813
9815 {
9816 SetDynamicPhysicsLifeTime(0.01);
9818 }
9819
9821 {
9822 array<string> zone_names = new array<string>;
9823 GetDamageZones(zone_names);
9824 for (int i = 0; i < zone_names.Count(); i++)
9825 {
9826 SetHealthMax(zone_names.Get(i),"Health");
9827 }
9828 SetHealthMax("","Health");
9829 }
9830
9833 {
9834 float global_health = GetHealth01("","Health");
9835 array<string> zones = new array<string>;
9836 GetDamageZones(zones);
9837
9838 for (int i = 0; i < zones.Count(); i++)
9839 {
9840 SetHealth01(zones.Get(i),"Health",global_health);
9841 }
9842 }
9843
9846 {
9847 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
9848 }
9849
9851 {
9852 if (!hasRootAsPlayer)
9853 {
9854 if (refParentIB)
9855 {
9856
9857 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
9858 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
9859
9860 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
9861 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
9862
9865 }
9866 else
9867 {
9868
9871 }
9872 }
9873 }
9874
9876 {
9878 {
9879 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
9880 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
9881 {
9882 float heatPermCoef = 1.0;
9884 while (ent)
9885 {
9886 heatPermCoef *= ent.GetHeatPermeabilityCoef();
9887 ent = ent.GetHierarchyParent();
9888 }
9889
9890 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
9891 }
9892 }
9893 }
9894
9896 {
9897
9898 EntityAI parent = GetHierarchyParent();
9899 if (!parent)
9900 {
9901 hasParent = false;
9902 hasRootAsPlayer = false;
9903 }
9904 else
9905 {
9906 hasParent = true;
9907 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
9908 refParentIB =
ItemBase.Cast(parent);
9909 }
9910 }
9911
9912 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
9913 {
9914
9915 }
9916
9918 {
9919
9920 return false;
9921 }
9922
9924 {
9925
9926
9927 return false;
9928 }
9929
9931 {
9932
9933 return false;
9934 }
9935
9938 {
9939 return !GetIsFrozen() &&
IsOpen();
9940 }
9941
9943 {
9944 bool hasParent = false, hasRootAsPlayer = false;
9946
9947 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
9948 bool foodDecay =
g_Game.IsFoodDecayEnabled();
9949
9950 if (wwtu || foodDecay)
9951 {
9955
9956 if (processWetness || processTemperature || processDecay)
9957 {
9959
9960 if (processWetness)
9961 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
9962
9963 if (processTemperature)
9965
9966 if (processDecay)
9967 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
9968 }
9969 }
9970 }
9971
9974 {
9976 }
9977
9979 {
9982
9983 return super.GetTemperatureFreezeThreshold();
9984 }
9985
9987 {
9990
9991 return super.GetTemperatureThawThreshold();
9992 }
9993
9995 {
9998
9999 return super.GetItemOverheatThreshold();
10000 }
10001
10003 {
10005 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10006
10007 return super.GetTemperatureFreezeTime();
10008 }
10009
10011 {
10013 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10014
10015 return super.GetTemperatureThawTime();
10016 }
10017
10022
10024 {
10025 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10026 }
10027
10029 {
10030 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10031 }
10032
10035 {
10037 }
10038
10040 {
10042 }
10043
10045 {
10047 }
10048
10051 {
10052 return null;
10053 }
10054
10057 {
10058 return false;
10059 }
10060
10062 {
10064 {
10067 if (!trg)
10068 {
10070 explosive = this;
10071 }
10072
10073 explosive.PairRemote(trg);
10075
10076 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10077 trg.SetPersistentPairID(persistentID);
10078 explosive.SetPersistentPairID(persistentID);
10079
10080 return true;
10081 }
10082 return false;
10083 }
10084
10087 {
10088 float ret = 1.0;
10091 ret *= GetHealth01();
10092
10093 return ret;
10094 }
10095
10096 #ifdef DEVELOPER
10097 override void SetDebugItem()
10098 {
10099 super.SetDebugItem();
10100 _itemBase = this;
10101 }
10102
10104 {
10105 string text = super.GetDebugText();
10106
10108 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10109
10110 return text;
10111 }
10112 #endif
10113
10115 {
10116 return true;
10117 }
10118
10120
10122
10124 {
10127 }
10128
10129
10137
10153}
10154
10156{
10158 if (entity)
10159 {
10160 bool is_item = entity.IsInherited(
ItemBase);
10161 if (is_item && full_quantity)
10162 {
10165 }
10166 }
10167 else
10168 {
10170 return NULL;
10171 }
10172 return entity;
10173}
10174
10176{
10177 if (item)
10178 {
10179 if (health > 0)
10180 item.SetHealth("", "", health);
10181
10182 if (item.CanHaveTemperature())
10183 {
10185 if (item.CanFreeze())
10186 item.SetFrozen(false);
10187 }
10188
10189 if (item.HasEnergyManager())
10190 {
10191 if (quantity >= 0)
10192 {
10193 item.GetCompEM().SetEnergy0To1(quantity);
10194 }
10195 else
10196 {
10198 }
10199 }
10200 else if (item.IsMagazine())
10201 {
10202 Magazine mag = Magazine.Cast(item);
10203 if (quantity >= 0)
10204 {
10205 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10206 }
10207 else
10208 {
10210 }
10211
10212 }
10213 else
10214 {
10215 if (quantity >= 0)
10216 {
10217 item.SetQuantityNormalized(quantity, false);
10218 }
10219 else
10220 {
10222 }
10223
10224 }
10225 }
10226}
10227
10228#ifdef DEVELOPER
10230#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.