5683{
5685 {
5686 return true;
5687 }
5688};
5689
5690
5691
5693{
5697
5699
5702
5703
5704
5705
5706
5715
5721
5726
5731
5752 protected bool m_IsResultOfSplit
5753
5755
5760
5761
5762
5764
5768
5769
5770
5772
5775
5776
5777
5783
5784
5792
5795
5796
5798
5799
5801
5802
5807
5808
5813
5814
5816
5817
5819 {
5824
5825 if (!
GetGame().IsDedicatedServer())
5826 {
5828 {
5830
5832 {
5834 }
5835 }
5836
5839 }
5840
5841 m_OldLocation = null;
5842
5844 {
5846 }
5847
5848 if (ConfigIsExisting("headSelectionsToHide"))
5849 {
5852 }
5853
5855 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5856 {
5858 }
5859
5861
5862 m_IsResultOfSplit = false;
5863
5865 }
5866
5868 {
5869 super.InitItemVariables();
5870
5876 m_Count = ConfigGetInt(
"count");
5877
5880
5885
5888
5893
5905
5909
5910
5913 if (ConfigIsExisting("canBeSplit"))
5914 {
5917 }
5918
5920 if (ConfigIsExisting("itemBehaviour"))
5922
5923
5926 RegisterNetSyncVariableInt("m_VarLiquidType");
5927 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5928
5929 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5930 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5931 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5932
5933 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5934 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5935 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5936 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5937
5938 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5939 RegisterNetSyncVariableBool("m_IsTakeable");
5940 RegisterNetSyncVariableBool("m_IsHologram");
5941
5944 {
5947 }
5948
5950
5952 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5954
5955 }
5956
5958 {
5960 }
5961
5963 {
5966 {
5971 }
5972 }
5973
5974 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5975 {
5977 {
5980 }
5981
5983 }
5984
5986 {
5992 }
5993
5995
5997 {
5999
6000 if (!action)
6001 {
6002 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
6003 return;
6004 }
6005
6007 if (!ai)
6008 {
6010 return;
6011 }
6012
6014 if (!action_array)
6015 {
6016 action_array = new array<ActionBase_Basic>;
6018 }
6019 if (LogManager.IsActionLogEnable())
6020 {
6021 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
6022 }
6023
6024 if (action_array.Find(action) != -1)
6025 {
6026 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
6027 }
6028 else
6029 {
6030 action_array.Insert(action);
6031 }
6032 }
6033
6035 {
6037 ActionBase action = player.GetActionManager().GetAction(actionName);
6040
6041 if (action_array)
6042 {
6043 action_array.RemoveItem(action);
6044 }
6045 }
6046
6047
6048
6050 {
6051 ActionOverrideData overrideData = new ActionOverrideData();
6055
6057 if (!actionMap)
6058 {
6061 }
6062
6063 actionMap.Insert(this.
Type(), overrideData);
6064
6065 }
6066
6068
6070
6071
6073 {
6076
6079
6080 string config_to_search = "CfgVehicles";
6081 string muzzle_owner_config;
6082
6084 {
6085 if (IsInherited(Weapon))
6086 config_to_search = "CfgWeapons";
6087
6088 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6089
6090 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
6091
6093
6094 if (config_OnFire_subclass_count > 0)
6095 {
6096 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
6097
6098 for (int i = 0; i < config_OnFire_subclass_count; i++)
6099 {
6100 string particle_class = "";
6102 string config_OnFire_entry = config_OnFire_class + particle_class;
6103 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
6104 WPOF_array.Insert(WPOF);
6105 }
6106
6107
6109 }
6110 }
6111
6113 {
6114 config_to_search = "CfgWeapons";
6115 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6116
6117 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
6118
6120
6121 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
6122 {
6123 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
6124
6125 for (i = 0; i < config_OnBulletCasingEject_count; i++)
6126 {
6127 string particle_class2 = "";
6129 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
6130 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
6131 WPOBE_array.Insert(WPOBE);
6132 }
6133
6134
6136 }
6137 }
6138 }
6139
6140
6142 {
6145
6147 {
6148 string config_to_search = "CfgVehicles";
6149
6150 if (IsInherited(Weapon))
6151 config_to_search = "CfgWeapons";
6152
6153 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
6154 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
6155
6156 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
6157 {
6158
6160
6162 {
6164 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
6166 return;
6167 }
6168
6171
6172
6173
6175 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
6176
6177 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
6178 {
6179 string particle_class = "";
6181 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
6183
6184 if (entry_type == CT_CLASS)
6185 {
6186 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
6187 WPOOH_array.Insert(WPOF);
6188 }
6189 }
6190
6191
6193 }
6194 }
6195 }
6196
6198 {
6200 }
6201
6203 {
6205 {
6207
6210
6213
6214 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6215 }
6216 }
6217
6219 {
6221 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6222
6224 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6225
6227 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6228
6230 {
6232 }
6233 }
6234
6236 {
6238 }
6239
6241 {
6244 else
6246
6248 {
6251 }
6252 else
6253 {
6256
6259 }
6260
6262 }
6263
6265 {
6267 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6268 }
6269
6271 {
6273 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
6275 }
6276
6278 {
6280 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
6281 }
6282
6284 {
6287
6288 OverheatingParticle OP = new OverheatingParticle();
6293
6295 }
6296
6298 {
6301
6302 return -1;
6303 }
6304
6306 {
6308 {
6311
6312 for (int i = count; i > 0; --i)
6313 {
6314 int id = i - 1;
6317
6320
6321 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
6322 {
6323 if (p)
6324 {
6327 }
6328 }
6329 }
6330 }
6331 }
6332
6334 {
6336 {
6338 {
6339 int id = i - 1;
6341
6342 if (OP)
6343 {
6345
6346 if (p)
6347 {
6349 }
6350
6351 delete OP;
6352 }
6353 }
6354
6357 }
6358 }
6359
6362 {
6363 return 0.0;
6364 }
6365
6366
6368 {
6369 return 250;
6370 }
6371
6373 {
6374 return 0;
6375 }
6376
6379 {
6381 return true;
6382
6383 return false;
6384 }
6385
6388 {
6391
6393 {
6395 }
6396 else
6397 {
6398
6400 }
6401
6403 }
6404
6411 {
6412 return -1;
6413 }
6414
6415
6416
6417
6419 {
6421 {
6423 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6424
6425 if (r_index >= 0)
6426 {
6427 InventoryLocation r_il = new InventoryLocation;
6428 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6429
6430 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6433 {
6434 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6435 }
6437 {
6438 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6439 }
6440
6441 }
6442
6443 player.GetHumanInventory().ClearUserReservedLocation(this);
6444 }
6445
6448 }
6449
6450
6451
6452
6454 {
6455 return ItemBase.m_DebugActionsMask;
6456 }
6457
6459 {
6460 return ItemBase.m_DebugActionsMask & mask;
6461 }
6462
6464 {
6465 ItemBase.m_DebugActionsMask = mask;
6466 }
6467
6469 {
6470 ItemBase.m_DebugActionsMask |= mask;
6471 }
6472
6474 {
6475 ItemBase.m_DebugActionsMask &= ~mask;
6476 }
6477
6479 {
6481 {
6483 }
6484 else
6485 {
6487 }
6488 }
6489
6490
6492 {
6493 if (GetEconomyProfile())
6494 {
6495 float q_max = GetEconomyProfile().GetQuantityMax();
6496 if (q_max > 0)
6497 {
6498 float q_min = GetEconomyProfile().GetQuantityMin();
6499 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
6500
6502 {
6503 ComponentEnergyManager comp = GetCompEM();
6505 {
6507 }
6508 }
6510 {
6512
6513 }
6514
6515 }
6516 }
6517 }
6518
6521 {
6522 EntityAI parent = GetHierarchyParent();
6523
6524 if (parent)
6525 {
6526 InventoryLocation inventory_location_to_lock = new InventoryLocation;
6527 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
6528 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
6529 }
6530 }
6531
6534 {
6535 EntityAI parent = GetHierarchyParent();
6536
6537 if (parent)
6538 {
6539 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
6540 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
6541 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
6542 }
6543 }
6544
6546 {
6547
6548
6549
6550
6552
6554 {
6555 if (ScriptInputUserData.CanStoreInputUserData())
6556 {
6557 ScriptInputUserData ctx = new ScriptInputUserData;
6563 ctx.
Write(use_stack_max);
6566
6568 {
6569 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6570 }
6571 }
6572 }
6573 else if (!
GetGame().IsMultiplayer())
6574 {
6576 }
6577 }
6578
6580 {
6582 }
6583
6585 {
6587 }
6588
6590 {
6592 }
6593
6595 {
6596
6597 return false;
6598 }
6599
6601 {
6602 return false;
6603 }
6604
6608 {
6609 return false;
6610 }
6611
6613 {
6614 return "";
6615 }
6616
6618
6620 {
6621 return false;
6622 }
6623
6625 {
6626 return true;
6627 }
6628
6629
6630
6632 {
6633 return true;
6634 }
6635
6637 {
6638 return true;
6639 }
6640
6642 {
6643 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6645 }
6646
6648 {
6650 }
6651
6653 {
6655 if (!is_being_placed)
6657 SetSynchDirty();
6658 }
6659
6660
6662
6664 {
6666 }
6667
6669 {
6671 }
6672
6674 {
6675 return 1;
6676 }
6677
6679 {
6680 return false;
6681 }
6682
6684 {
6686 SetSynchDirty();
6687 }
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6724 {
6725 super.OnMovedInsideCargo(container);
6726
6727 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6728 }
6729
6730 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6731 {
6732 super.EEItemLocationChanged(oldLoc,newLoc);
6733
6734 PlayerBase new_player = null;
6735 PlayerBase old_player = null;
6736
6737 if (newLoc.GetParent())
6738 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6739
6740 if (oldLoc.GetParent())
6741 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6742
6744 {
6745 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6746
6747 if (r_index >= 0)
6748 {
6749 InventoryLocation r_il = new InventoryLocation;
6750 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6751
6752 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6755 {
6756 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6757 }
6759 {
6760 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6761 }
6762
6763 }
6764 }
6765
6767 {
6768 if (new_player)
6769 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6770
6771 if (new_player == old_player)
6772 {
6773
6774 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6775 {
6777 {
6778 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6779 {
6780 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6781 }
6782 }
6783 else
6784 {
6785 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6786 }
6787 }
6788
6789 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6790 {
6791 int type = oldLoc.GetType();
6793 {
6794 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6795 }
6797 {
6798 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6799 }
6800 }
6801 if (!m_OldLocation)
6802 {
6803 m_OldLocation = new InventoryLocation;
6804 }
6805 m_OldLocation.Copy(oldLoc);
6806 }
6807 else
6808 {
6809 if (m_OldLocation)
6810 {
6811 m_OldLocation.Reset();
6812 }
6813 }
6814
6816 }
6817 else
6818 {
6819 if (new_player)
6820 {
6821 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6822 if (res_index >= 0)
6823 {
6824 InventoryLocation il = new InventoryLocation;
6825 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6827 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6830 {
6831 il.
GetParent().GetOnReleaseLock().Invoke(it);
6832 }
6834 {
6836 }
6837
6838 }
6839 }
6841 {
6842
6844 }
6845
6846 if (m_OldLocation)
6847 {
6848 m_OldLocation.Reset();
6849 }
6850 }
6851 }
6852
6853 override void EOnContact(IEntity other, Contact extra)
6854 {
6856 {
6857 int liquidType = -1;
6859 if (impactSpeed > 0.0)
6860 {
6862 #ifndef SERVER
6864 #else
6866 SetSynchDirty();
6867 #endif
6869 }
6870 }
6871
6872 #ifdef SERVER
6873 if (GetCompEM() && GetCompEM().IsPlugged())
6874 {
6875 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6876 GetCompEM().UnplugThis();
6877 }
6878 #endif
6879 }
6880
6882
6884 {
6886 }
6887
6889 {
6890
6891 }
6892
6894 {
6895 super.OnItemLocationChanged(old_owner, new_owner);
6896
6897 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6898 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6899
6900 if (!relatedPlayer && playerNew)
6901 relatedPlayer = playerNew;
6902
6903 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6904 {
6906 if (actionMgr)
6907 {
6908 ActionBase currentAction = actionMgr.GetRunningAction();
6909 if (currentAction)
6911 }
6912 }
6913
6914 Man ownerPlayerOld = null;
6915 Man ownerPlayerNew = null;
6916
6917 if (old_owner)
6918 {
6919 if (old_owner.
IsMan())
6920 {
6921 ownerPlayerOld = Man.Cast(old_owner);
6922 }
6923 else
6924 {
6925 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6926 }
6927 }
6928 else
6929 {
6931 {
6933
6934 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6935 {
6936 GetCompEM().UnplugThis();
6937 }
6938 }
6939 }
6940
6941 if (new_owner)
6942 {
6943 if (new_owner.
IsMan())
6944 {
6945 ownerPlayerNew = Man.Cast(new_owner);
6946 }
6947 else
6948 {
6949 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6950 }
6951 }
6952
6953 if (ownerPlayerOld != ownerPlayerNew)
6954 {
6955 if (ownerPlayerOld)
6956 {
6957 array<EntityAI> subItemsExit = new array<EntityAI>;
6959 for (int i = 0; i < subItemsExit.Count(); i++)
6960 {
6963 }
6964 }
6965
6966 if (ownerPlayerNew)
6967 {
6968 array<EntityAI> subItemsEnter = new array<EntityAI>;
6970 for (int j = 0; j < subItemsEnter.Count(); j++)
6971 {
6974 }
6975 }
6976 }
6977 else if (ownerPlayerNew != null)
6978 {
6979 PlayerBase nplayer;
6980 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6981 {
6982 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6984 for (int k = 0; k < subItemsUpdate.Count(); k++)
6985 {
6987 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6988 }
6989 }
6990 }
6991
6992 if (old_owner)
6993 old_owner.OnChildItemRemoved(this);
6994 if (new_owner)
6995 new_owner.OnChildItemReceived(this);
6996 }
6997
6998
7000 {
7001 super.EEDelete(parent);
7002 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
7003 if (player)
7004 {
7006
7007 if (player.IsAlive())
7008 {
7009 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
7010 if (r_index >= 0)
7011 {
7012 InventoryLocation r_il = new InventoryLocation;
7013 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
7014
7015 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
7018 {
7019 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
7020 }
7022 {
7023 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
7024 }
7025
7026 }
7027
7028 player.RemoveQuickBarEntityShortcut(this);
7029 }
7030 }
7031 }
7032
7034 {
7035 super.EEKilled(killer);
7036
7039 {
7040 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
7041 {
7042 if (IsMagazine())
7043 {
7044 if (Magazine.Cast(this).GetAmmoCount() > 0)
7045 {
7047 }
7048 }
7049 else
7050 {
7052 }
7053 }
7054 }
7055 }
7056
7058 {
7059 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
7060
7061 super.OnWasAttached(parent, slot_id);
7062
7065
7067 }
7068
7070 {
7071 super.OnWasDetached(parent, slot_id);
7072
7075 }
7076
7078 {
7079 int idx;
7082
7083 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7084 if (inventory_slots.Count() < 1)
7085 {
7086 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
7087 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
7088 }
7089 else
7090 {
7091 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
7092 }
7093
7094 idx = inventory_slots.Find(slot);
7095 if (idx < 0)
7096 return "";
7097
7098 return attach_types.Get(idx);
7099 }
7100
7102 {
7103 int idx = -1;
7104 string slot;
7105
7108
7109 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
7110 if (inventory_slots.Count() < 1)
7111 {
7112 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
7113 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7114 }
7115 else
7116 {
7117 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
7118 if (detach_types.Count() < 1)
7119 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
7120 }
7121
7122 for (int i = 0; i < inventory_slots.Count(); i++)
7123 {
7124 slot = inventory_slots.Get(i);
7125 }
7126
7127 if (slot != "")
7128 {
7129 if (detach_types.Count() == 1)
7130 idx = 0;
7131 else
7132 idx = inventory_slots.Find(slot);
7133 }
7134 if (idx < 0)
7135 return "";
7136
7137 return detach_types.Get(idx);
7138 }
7139
7141 {
7142
7144
7145
7146 float min_time = 1;
7147 float max_time = 3;
7148 float delay = Math.RandomFloat(min_time, max_time);
7149
7150 explode_timer.Run(delay, this, "DoAmmoExplosion");
7151 }
7152
7154 {
7155 Magazine magazine = Magazine.Cast(this);
7156 int pop_sounds_count = 6;
7157 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
7158
7159
7160 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
7161 string sound_name = pop_sounds[ sound_idx ];
7163
7164
7165 magazine.ServerAddAmmoCount(-1);
7166
7167
7168 float min_temp_to_explode = 100;
7169
7170 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
7171 {
7173 }
7174 }
7175
7176
7177 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
7178 {
7179 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
7180
7181 const int CHANCE_DAMAGE_CARGO = 4;
7182 const int CHANCE_DAMAGE_ATTACHMENT = 1;
7183 const int CHANCE_DAMAGE_NOTHING = 2;
7184
7186 {
7187 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
7188 int chances;
7189 int rnd;
7190
7191 if (GetInventory().GetCargo())
7192 {
7193 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7194 rnd = Math.RandomInt(0,chances);
7195
7196 if (rnd < CHANCE_DAMAGE_CARGO)
7197 {
7199 }
7200 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
7201 {
7203 }
7204 }
7205 else
7206 {
7207 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
7208 rnd = Math.RandomInt(0,chances);
7209
7210 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
7211 {
7213 }
7214 }
7215 }
7216 }
7217
7219 {
7220 if (GetInventory().GetCargo())
7221 {
7222 int item_count = GetInventory().GetCargo().GetItemCount();
7223 if (item_count > 0)
7224 {
7225 int random_pick = Math.RandomInt(0, item_count);
7227 if (!item.IsExplosive())
7228 {
7229 item.AddHealth("","",damage);
7230 return true;
7231 }
7232 }
7233 }
7234 return false;
7235 }
7236
7238 {
7239 int attachment_count = GetInventory().AttachmentCount();
7240 if (attachment_count > 0)
7241 {
7242 int random_pick = Math.RandomInt(0, attachment_count);
7243 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
7244 if (!attachment.IsExplosive())
7245 {
7246 attachment.AddHealth("","",damage);
7247 return true;
7248 }
7249 }
7250 return false;
7251 }
7252
7254 {
7256 }
7257
7259 {
7261 return GetInventory().CanRemoveEntity();
7262
7263 return false;
7264 }
7265
7267 {
7269 return;
7270
7272 {
7273 if (ScriptInputUserData.CanStoreInputUserData())
7274 {
7275 ScriptInputUserData ctx = new ScriptInputUserData;
7280 ctx.
Write(destination_entity);
7284 }
7285 }
7286 else if (!
GetGame().IsMultiplayer())
7287 {
7289 }
7290 }
7291
7293 {
7295 return;
7296
7297 float split_quantity_new;
7301 InventoryLocation loc = new InventoryLocation;
7302
7303 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7304 {
7306 split_quantity_new = stack_max;
7307 else
7309
7310 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7311 if (new_item)
7312 {
7313 new_item.SetResultOfSplit(true);
7314 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7316 new_item.SetQuantity(split_quantity_new);
7317 }
7318 }
7319 else if (destination_entity && slot_id == -1)
7320 {
7321 if (quantity > stack_max)
7322 split_quantity_new = stack_max;
7323 else
7324 split_quantity_new = quantity;
7325
7327 {
7330 }
7331
7332 if (new_item)
7333 {
7334 new_item.SetResultOfSplit(true);
7335 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7337 new_item.SetQuantity(split_quantity_new);
7338 }
7339 }
7340 else
7341 {
7342 if (stack_max != 0)
7343 {
7345 {
7347 }
7348
7349 if (split_quantity_new == 0)
7350 {
7351 if (!
GetGame().IsMultiplayer())
7352 player.PhysicalPredictiveDropItem(this);
7353 else
7354 player.ServerDropEntity(this);
7355 return;
7356 }
7357
7359
7360 if (new_item)
7361 {
7362 new_item.SetResultOfSplit(true);
7363 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7365 new_item.SetQuantity(stack_max);
7366 new_item.PlaceOnSurface();
7367 }
7368 }
7369 }
7370 }
7371
7373 {
7375 return;
7376
7377 float split_quantity_new;
7381 InventoryLocation loc = new InventoryLocation;
7382
7383 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
7384 {
7386 split_quantity_new = stack_max;
7387 else
7389
7390 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
7391 if (new_item)
7392 {
7393 new_item.SetResultOfSplit(true);
7394 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7396 new_item.SetQuantity(split_quantity_new);
7397 }
7398 }
7399 else if (destination_entity && slot_id == -1)
7400 {
7401 if (quantity > stack_max)
7402 split_quantity_new = stack_max;
7403 else
7404 split_quantity_new = quantity;
7405
7407 {
7410 }
7411
7412 if (new_item)
7413 {
7414 new_item.SetResultOfSplit(true);
7415 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7417 new_item.SetQuantity(split_quantity_new);
7418 }
7419 }
7420 else
7421 {
7422 if (stack_max != 0)
7423 {
7425 {
7427 }
7428
7430
7431 if (new_item)
7432 {
7433 new_item.SetResultOfSplit(true);
7434 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7436 new_item.SetQuantity(stack_max);
7437 new_item.PlaceOnSurface();
7438 }
7439 }
7440 }
7441 }
7442
7444 {
7446 return;
7447
7449 {
7450 if (ScriptInputUserData.CanStoreInputUserData())
7451 {
7452 ScriptInputUserData ctx = new ScriptInputUserData;
7457 dst.WriteToContext(ctx);
7459 }
7460 }
7461 else if (!
GetGame().IsMultiplayer())
7462 {
7464 }
7465 }
7466
7468 {
7470 return;
7471
7473 {
7474 if (ScriptInputUserData.CanStoreInputUserData())
7475 {
7476 ScriptInputUserData ctx = new ScriptInputUserData;
7481 ctx.
Write(destination_entity);
7487 }
7488 }
7489 else if (!
GetGame().IsMultiplayer())
7490 {
7492 }
7493 }
7494
7496 {
7498 }
7499
7501 {
7503 return this;
7504
7506 float split_quantity_new;
7508 if (dst.IsValid())
7509 {
7510 int slot_id = dst.GetSlot();
7512
7513 if (quantity > stack_max)
7514 split_quantity_new = stack_max;
7515 else
7516 split_quantity_new = quantity;
7517
7519
7520 if (new_item)
7521 {
7522 new_item.SetResultOfSplit(true);
7523 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7526 }
7527
7528 return new_item;
7529 }
7530
7531 return null;
7532 }
7533
7535 {
7537 return;
7538
7540 float split_quantity_new;
7542 if (destination_entity)
7543 {
7545 if (quantity > stackable)
7546 split_quantity_new = stackable;
7547 else
7548 split_quantity_new = quantity;
7549
7550 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
7551 if (new_item)
7552 {
7553 new_item.SetResultOfSplit(true);
7554 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7556 new_item.SetQuantity(split_quantity_new);
7557 }
7558 }
7559 }
7560
7562 {
7564 return;
7565
7567 {
7568 if (ScriptInputUserData.CanStoreInputUserData())
7569 {
7570 ScriptInputUserData ctx = new ScriptInputUserData;
7575 ItemBase destination_entity =
this;
7576 ctx.
Write(destination_entity);
7580 }
7581 }
7582 else if (!
GetGame().IsMultiplayer())
7583 {
7585 }
7586 }
7587
7589 {
7591 return;
7592
7594 float split_quantity_new;
7596 if (player)
7597 {
7599 if (quantity > stackable)
7600 split_quantity_new = stackable;
7601 else
7602 split_quantity_new = quantity;
7603
7604 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7605 new_item =
ItemBase.Cast(in_hands);
7606 if (new_item)
7607 {
7608 new_item.SetResultOfSplit(true);
7609 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7611 new_item.SetQuantity(split_quantity_new);
7612 }
7613 }
7614 }
7615
7617 {
7619 return;
7620
7622 float split_quantity_new = Math.Floor(quantity * 0.5);
7623
7625
7626 if (new_item)
7627 {
7628 if (new_item.GetQuantityMax() < split_quantity_new)
7629 {
7630 split_quantity_new = new_item.GetQuantityMax();
7631 }
7632
7633 new_item.SetResultOfSplit(true);
7634 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7635
7637 {
7640 }
7641 else
7642 {
7645 }
7646 }
7647 }
7648
7650 {
7652 return;
7653
7655 float split_quantity_new = Math.Floor(quantity / 2);
7656
7657 InventoryLocation invloc = new InventoryLocation;
7659
7661 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7662
7663 if (new_item)
7664 {
7665 if (new_item.GetQuantityMax() < split_quantity_new)
7666 {
7667 split_quantity_new = new_item.GetQuantityMax();
7668 }
7670 {
7673 }
7674 else
7675 {
7678 }
7679 }
7680 }
7681
7684 {
7685 SetWeightDirty();
7687
7688 if (parent)
7689 parent.OnAttachmentQuantityChangedEx(this, delta);
7690
7692 {
7694 {
7696 }
7698 {
7699 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7701 }
7702 }
7703
7704 }
7705
7708 {
7709
7710 }
7711
7714 {
7716 }
7717
7719 {
7720 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7721
7723 {
7724 if (newLevel == GameConstants.STATE_RUINED)
7725 {
7727 EntityAI parent = GetHierarchyParent();
7728 if (parent && parent.IsFireplace())
7729 {
7730 CargoBase cargo = GetInventory().GetCargo();
7731 if (cargo)
7732 {
7734 {
7736 }
7737 }
7738 }
7739 }
7740
7742 {
7743
7745 return;
7746 }
7747
7748 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7749 {
7751 }
7752 }
7753 }
7754
7755
7757 {
7758 super.OnRightClick();
7759
7761 {
7763 {
7764 if (ScriptInputUserData.CanStoreInputUserData())
7765 {
7766 vector m4[4];
7768
7769 EntityAI root = GetHierarchyRoot();
7770
7771 InventoryLocation dst = new InventoryLocation;
7773 {
7774 if (root)
7775 {
7776 root.GetTransform(m4);
7778 }
7779 else
7780 GetInventory().GetCurrentInventoryLocation(dst);
7781 }
7782 else
7783 {
7785
7786
7787 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7788 {
7789 if (root)
7790 {
7791 root.GetTransform(m4);
7793 }
7794 else
7795 GetInventory().GetCurrentInventoryLocation(dst);
7796 }
7797 else
7798 {
7799 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7800 }
7801 }
7802
7803 ScriptInputUserData ctx = new ScriptInputUserData;
7811 }
7812 }
7813 else if (!
GetGame().IsMultiplayer())
7814 {
7816 }
7817 }
7818 }
7819
7820 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7821 {
7822
7823 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7824 return false;
7825
7826 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7827 return false;
7828
7829
7831 return false;
7832
7833
7834 Magazine mag = Magazine.Cast(this);
7835 if (mag)
7836 {
7837 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7838 return false;
7839
7840 if (stack_max_limit)
7841 {
7842 Magazine other_mag = Magazine.Cast(other_item);
7843 if (other_item)
7844 {
7845 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7846 return false;
7847 }
7848
7849 }
7850 }
7851 else
7852 {
7853
7855 return false;
7856
7858 return false;
7859 }
7860
7861 PlayerBase player = null;
7862 if (CastTo(player, GetHierarchyRootPlayer()))
7863 {
7864 if (player.GetInventory().HasAttachment(this))
7865 return false;
7866
7867 if (player.IsItemsToDelete())
7868 return false;
7869 }
7870
7871 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7872 return false;
7873
7874 int slotID;
7876 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7877 return false;
7878
7879 return true;
7880 }
7881
7883 {
7885 }
7886
7888 {
7889 return m_IsResultOfSplit;
7890 }
7891
7893 {
7894 m_IsResultOfSplit = value;
7895 }
7896
7898 {
7900 }
7901
7903 {
7904 float other_item_quantity = other_item.GetQuantity();
7905 float this_free_space;
7906
7908
7910
7911 if (other_item_quantity > this_free_space)
7912 {
7913 return this_free_space;
7914 }
7915 else
7916 {
7917 return other_item_quantity;
7918 }
7919 }
7920
7922 {
7924 }
7925
7927 {
7929 return;
7930
7931 if (!IsMagazine() && other_item)
7932 {
7934 if (quantity_used != 0)
7935 {
7936 float hp1 = GetHealth01("","");
7937 float hp2 = other_item.GetHealth01("","");
7938 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7939 hpResult = hpResult / (
GetQuantity() + quantity_used);
7940
7941 hpResult *= GetMaxHealth();
7942 Math.Round(hpResult);
7943 SetHealth("", "Health", hpResult);
7944
7946 other_item.AddQuantity(-quantity_used);
7947 }
7948 }
7950 }
7951
7953 {
7954 #ifdef SERVER
7955 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7956 GetHierarchyParent().IncreaseLifetimeUp();
7957 #endif
7958 };
7959
7961 {
7962 PlayerBase p = PlayerBase.Cast(player);
7963
7964 array<int> recipesIds = p.m_Recipes;
7965 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7966 if (moduleRecipesManager)
7967 {
7968 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7969 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7970 }
7971
7972 for (int i = 0;i < recipesIds.Count(); i++)
7973 {
7974 int key = recipesIds.Get(i);
7975 string recipeName = moduleRecipesManager.GetRecipeName(key);
7977 }
7978 }
7979
7980
7981 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7982 {
7983 super.GetDebugActions(outputList);
7984
7985
7990
7991
7995
7999
8000
8003
8004
8006 {
8009 }
8010
8012
8015
8019 }
8020
8021
8022
8023
8025 {
8026 super.OnAction(action_id, player, ctx);
8027 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
8028 {
8029 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
8030 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
8031 PlayerBase p = PlayerBase.Cast(player);
8032 if (
EActions.RECIPES_RANGE_START < 1000)
8033 {
8034 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
8035 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
8036 }
8037 }
8038 #ifndef SERVER
8039 else if (action_id ==
EActions.WATCH_PLAYER)
8040 {
8041 PluginDeveloper.SetDeveloperItemClientEx(player);
8042 }
8043 #endif
8045 {
8046 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
8047 {
8048 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
8049 OnDebugButtonPressServer(id + 1);
8050 }
8051
8052 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
8053 {
8054 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
8056 }
8057
8058 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
8059 {
8060 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
8062 }
8063
8064 else if (action_id ==
EActions.ADD_QUANTITY)
8065 {
8066 if (IsMagazine())
8067 {
8068 Magazine mag = Magazine.Cast(this);
8069 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
8070 }
8071 else
8072 {
8074 }
8075
8076 if (m_EM)
8077 {
8078 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
8079 }
8080
8081 }
8082
8083 else if (action_id ==
EActions.REMOVE_QUANTITY)
8084 {
8085 if (IsMagazine())
8086 {
8087 Magazine mag2 = Magazine.Cast(this);
8088 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
8089 }
8090 else
8091 {
8093 }
8094 if (m_EM)
8095 {
8096 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
8097 }
8098
8099 }
8100
8101 else if (action_id ==
EActions.SET_QUANTITY_0)
8102 {
8104
8105 if (m_EM)
8106 {
8107 m_EM.SetEnergy(0);
8108 }
8109 }
8110
8111 else if (action_id ==
EActions.SET_MAX_QUANTITY)
8112 {
8114
8115 if (m_EM)
8116 {
8117 m_EM.SetEnergy(m_EM.GetEnergyMax());
8118 }
8119 }
8120
8121 else if (action_id ==
EActions.ADD_HEALTH)
8122 {
8123 AddHealth("","",GetMaxHealth("","Health")/5);
8124 }
8125 else if (action_id ==
EActions.REMOVE_HEALTH)
8126 {
8127 AddHealth("","",-GetMaxHealth("","Health")/5);
8128 }
8129 else if (action_id ==
EActions.DESTROY_HEALTH)
8130 {
8131 SetHealth01("","",0);
8132 }
8133 else if (action_id ==
EActions.WATCH_ITEM)
8134 {
8136 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
8137 #ifdef DEVELOPER
8138 SetDebugDeveloper_item(this);
8139 #endif
8140 }
8141
8142 else if (action_id ==
EActions.ADD_TEMPERATURE)
8143 {
8144 AddTemperature(20);
8145
8146 }
8147
8148 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
8149 {
8150 AddTemperature(-20);
8151
8152 }
8153
8154 else if (action_id ==
EActions.FLIP_FROZEN)
8155 {
8156 SetFrozen(!GetIsFrozen());
8157
8158 }
8159
8160 else if (action_id ==
EActions.ADD_WETNESS)
8161 {
8163
8164 }
8165
8166 else if (action_id ==
EActions.REMOVE_WETNESS)
8167 {
8169
8170 }
8171
8172 else if (action_id ==
EActions.LIQUIDTYPE_UP)
8173 {
8176
8177
8178 }
8179
8180 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
8181 {
8184 }
8185
8186 else if (action_id ==
EActions.MAKE_SPECIAL)
8187 {
8188 auto debugParams = DebugSpawnParams.WithPlayer(player);
8189 OnDebugSpawnEx(debugParams);
8190 }
8191
8192 else if (action_id ==
EActions.DELETE)
8193 {
8194 Delete();
8195 }
8196
8197 }
8198
8199
8200 return false;
8201 }
8202
8203
8204
8205
8209
8212
8213
8214
8216 {
8217 return false;
8218 }
8219
8220
8222 {
8223 return true;
8224 }
8225
8226
8228 {
8229 return true;
8230 }
8231
8232
8233
8235 {
8236 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
8238 }
8239
8242 {
8243 return null;
8244 }
8245
8247 {
8248 return false;
8249 }
8250
8252 {
8253 return false;
8254 }
8255
8259
8260
8262 {
8263 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8264 return module_repairing.CanRepair(this, item_repair_kit);
8265 }
8266
8267
8268 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
8269 {
8270 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
8271 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
8272 }
8273
8274
8276 {
8277
8278
8279
8280
8281
8282
8283
8284
8285 return 1;
8286 }
8287
8288
8289
8291 {
8293 }
8294
8295
8296
8298 {
8300 }
8301
8302
8311 {
8312 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8313
8314 if (player)
8315 {
8316 player.MessageStatus(text);
8317 }
8318 }
8319
8320
8329 {
8330 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8331
8332 if (player)
8333 {
8334 player.MessageAction(text);
8335 }
8336 }
8337
8338
8347 {
8348 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8349
8350 if (player)
8351 {
8352 player.MessageFriendly(text);
8353 }
8354 }
8355
8356
8365 {
8366 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
8367
8368 if (player)
8369 {
8370 player.MessageImportant(text);
8371 }
8372 }
8373
8375 {
8376 return true;
8377 }
8378
8379
8380 override bool KindOf(
string tag)
8381 {
8382 bool found = false;
8383 string item_name = this.
GetType();
8386
8387 int array_size = item_tag_array.Count();
8388 for (int i = 0; i < array_size; i++)
8389 {
8390 if (item_tag_array.Get(i) == tag)
8391 {
8392 found = true;
8393 break;
8394 }
8395 }
8396 return found;
8397 }
8398
8399
8401 {
8402
8403 super.OnRPC(sender, rpc_type,ctx);
8404
8405
8406 switch (rpc_type)
8407 {
8408 #ifndef SERVER
8409 case ERPCs.RPC_SOUND_LOCK_ATTACH:
8410 Param2<bool, string> p = new Param2<bool, string>(false, "");
8411
8413 return;
8414
8415 bool play = p.param1;
8416 string soundSet = p.param2;
8417
8418 if (play)
8419 {
8421 {
8423 {
8425 }
8426 }
8427 else
8428 {
8430 }
8431 }
8432 else
8433 {
8435 }
8436
8437 break;
8438 #endif
8439
8440 }
8441
8443 {
8445 }
8446 }
8447
8448
8449
8450
8452 {
8453 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8454 return plugin.GetID(
name);
8455 }
8456
8458 {
8459 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
8460 return plugin.GetName(id);
8461 }
8462
8465 {
8466
8467
8468 int varFlags;
8469 if (!ctx.
Read(varFlags))
8470 return;
8471
8472 if (varFlags & ItemVariableFlags.FLOAT)
8473 {
8475 }
8476 }
8477
8479 {
8480
8481 super.SerializeNumericalVars(floats_out);
8482
8483
8484
8486 {
8488 }
8489
8491 {
8493 }
8494
8496 {
8498 }
8499
8501 {
8506 }
8507
8509 {
8511 }
8512 }
8513
8515 {
8516
8517 super.DeSerializeNumericalVars(floats);
8518
8519
8520 int index = 0;
8521 int mask = Math.Round(floats.Get(index));
8522
8523 index++;
8524
8526 {
8528 {
8530 }
8531 else
8532 {
8533 float quantity = floats.Get(index);
8535 }
8536 index++;
8537 }
8538
8540 {
8541 float wet = floats.Get(index);
8543 index++;
8544 }
8545
8547 {
8548 int liquidtype = Math.Round(floats.Get(index));
8550 index++;
8551 }
8552
8554 {
8556 index++;
8558 index++;
8560 index++;
8562 index++;
8563 }
8564
8566 {
8567 int cleanness = Math.Round(floats.Get(index));
8569 index++;
8570 }
8571 }
8572
8574 {
8575 super.WriteVarsToCTX(ctx);
8576
8577
8579 {
8581 }
8582
8584 {
8586 }
8587
8589 {
8591 }
8592
8594 {
8595 int r,g,b,a;
8601 }
8602
8604 {
8606 }
8607 }
8608
8610 {
8611 if (!super.ReadVarsFromCTX(ctx,version))
8612 return false;
8613
8614 int intValue;
8615 float value;
8616
8617 if (version < 140)
8618 {
8619 if (!ctx.
Read(intValue))
8620 return false;
8621
8622 m_VariablesMask = intValue;
8623 }
8624
8626 {
8627 if (!ctx.
Read(value))
8628 return false;
8629
8631 {
8633 }
8634 else
8635 {
8637 }
8638 }
8639
8640 if (version < 140)
8641 {
8643 {
8644 if (!ctx.
Read(value))
8645 return false;
8646 SetTemperatureDirect(value);
8647 }
8648 }
8649
8651 {
8652 if (!ctx.
Read(value))
8653 return false;
8655 }
8656
8658 {
8659 if (!ctx.
Read(intValue))
8660 return false;
8662 }
8663
8665 {
8666 int r,g,b,a;
8668 return false;
8670 return false;
8672 return false;
8674 return false;
8675
8677 }
8678
8680 {
8681 if (!ctx.
Read(intValue))
8682 return false;
8684 }
8685
8686 if (version >= 138 && version < 140)
8687 {
8689 {
8690 if (!ctx.
Read(intValue))
8691 return false;
8692 SetFrozen(intValue);
8693 }
8694 }
8695
8696 return true;
8697 }
8698
8699
8701 {
8704 {
8706 }
8707
8708 if (!super.OnStoreLoad(ctx, version))
8709 {
8711 return false;
8712 }
8713
8714 if (version >= 114)
8715 {
8716 bool hasQuickBarIndexSaved;
8717
8718 if (!ctx.
Read(hasQuickBarIndexSaved))
8719 {
8721 return false;
8722 }
8723
8724 if (hasQuickBarIndexSaved)
8725 {
8726 int itmQBIndex;
8727
8728
8729 if (!ctx.
Read(itmQBIndex))
8730 {
8732 return false;
8733 }
8734
8735 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8736 if (itmQBIndex != -1 && parentPlayer)
8737 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8738 }
8739 }
8740 else
8741 {
8742
8743 PlayerBase player;
8744 int itemQBIndex;
8745 if (version ==
int.
MAX)
8746 {
8747 if (!ctx.
Read(itemQBIndex))
8748 {
8750 return false;
8751 }
8752 }
8753 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8754 {
8755
8756 if (!ctx.
Read(itemQBIndex))
8757 {
8759 return false;
8760 }
8761 if (itemQBIndex != -1 && player)
8762 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8763 }
8764 }
8765
8766 if (version < 140)
8767 {
8768
8769 if (!LoadVariables(ctx, version))
8770 {
8772 return false;
8773 }
8774 }
8775
8776
8778 {
8780 return false;
8781 }
8782 if (version >= 132)
8783 {
8785 if (raib)
8786 {
8788 {
8790 return false;
8791 }
8792 }
8793 }
8794
8796 return true;
8797 }
8798
8799
8800
8802 {
8803 super.OnStoreSave(ctx);
8804
8805 PlayerBase player;
8806 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8807 {
8809
8810 int itemQBIndex = -1;
8811 itemQBIndex = player.FindQuickBarEntityIndex(this);
8812 ctx.
Write(itemQBIndex);
8813 }
8814 else
8815 {
8817 }
8818
8820
8822 if (raib)
8823 {
8825 }
8826 }
8827
8828
8830 {
8831 super.AfterStoreLoad();
8832
8834 {
8836 }
8837
8839 {
8842 }
8843 }
8844
8846 {
8847 super.EEOnAfterLoad();
8848
8850 {
8852 }
8853
8856 }
8857
8859 {
8860 return false;
8861 }
8862
8863
8864
8866 {
8868 {
8869 #ifdef PLATFORM_CONSOLE
8870
8872 {
8874 if (menu)
8875 {
8877 }
8878 }
8879 #endif
8880 }
8881
8883 {
8886 }
8887
8889 {
8890 SetWeightDirty();
8892 }
8894 {
8897 }
8898
8900 {
8903 }
8905 {
8908 }
8909
8910 super.OnVariablesSynchronized();
8911 }
8912
8913
8914
8916 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8917 {
8918 if (!IsServerCheck(allow_client))
8919 return false;
8920
8922 return false;
8923
8926
8927 if (value <= (min + 0.001))
8928 value = min;
8929
8930 if (value == min)
8931 {
8932 if (destroy_config)
8933 {
8934 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8935 if (dstr)
8936 {
8938 this.Delete();
8939 return true;
8940 }
8941 }
8942 else if (destroy_forced)
8943 {
8945 this.Delete();
8946 return true;
8947 }
8948
8950 }
8951
8954
8956 {
8958
8959 if (delta)
8961 }
8962
8964
8965 return false;
8966 }
8967
8968
8970 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8971 {
8973 }
8974
8976 {
8979 }
8980
8982 {
8985 }
8986
8989 {
8990 float value_clamped = Math.Clamp(value, 0, 1);
8992 SetQuantity(result, destroy_config, destroy_forced);
8993 }
8994
8995
8998 {
9000 }
9001
9003 {
9005 }
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9017 {
9018 int slot = -1;
9019 if (GetInventory())
9020 {
9021 InventoryLocation il = new InventoryLocation;
9022 GetInventory().GetCurrentInventoryLocation(il);
9024 }
9025
9027 }
9028
9030 {
9031 float quantity_max = 0;
9032
9034 {
9035 if (attSlotID != -1)
9036 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
9037
9038 if (quantity_max <= 0)
9040 }
9041
9042 if (quantity_max <= 0)
9044
9045 return quantity_max;
9046 }
9047
9049 {
9051 }
9052
9054 {
9056 }
9057
9058
9060 {
9062 }
9063
9065 {
9067 }
9068
9070 {
9072 }
9073
9074
9076 {
9077
9078 float weightEx = GetWeightEx();
9079 float special = GetInventoryAndCargoWeight();
9080 return weightEx - special;
9081 }
9082
9083
9085 {
9087 }
9088
9090 {
9092 {
9093 #ifdef DEVELOPER
9094 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9095 {
9096 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
9098 }
9099 #endif
9100
9102 }
9103 else if (HasEnergyManager())
9104 {
9105 #ifdef DEVELOPER
9106 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9107 {
9108 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
9109 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
9110 }
9111 #endif
9112 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
9113 }
9114 else
9115 {
9116 #ifdef DEVELOPER
9117 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
9118 {
9119 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
9120 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
9121 }
9122 #endif
9123 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
9124 }
9125 }
9126
9129 {
9130 int item_count = 0;
9132
9133 if (GetInventory().GetCargo() != NULL)
9134 {
9135 item_count = GetInventory().GetCargo().GetItemCount();
9136 }
9137
9138 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
9139 {
9140 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
9141 if (item)
9142 item_count += item.GetNumberOfItems();
9143 }
9144 return item_count;
9145 }
9146
9149 {
9150 float weight = 0;
9151 float wetness = 1;
9152 if (include_wetness)
9155 {
9156 weight = wetness * m_ConfigWeight;
9157 }
9159 {
9160 weight = 1;
9161 }
9162 return weight;
9163 }
9164
9165
9166
9168 {
9169 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
9170 {
9171 GameInventory inv = GetInventory();
9172 array<EntityAI> items = new array<EntityAI>;
9174 for (int i = 0; i < items.Count(); i++)
9175 {
9177 if (item)
9178 {
9180 }
9181 }
9182 }
9183 }
9184
9185
9186
9187
9189 {
9190 float energy = 0;
9191 if (HasEnergyManager())
9192 {
9193 energy = GetCompEM().GetEnergy();
9194 }
9195 return energy;
9196 }
9197
9198
9200 {
9201 super.OnEnergyConsumed();
9202
9204 }
9205
9207 {
9208 super.OnEnergyAdded();
9209
9211 }
9212
9213
9215 {
9216 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
9217 {
9219 {
9220 float energy_0to1 = GetCompEM().GetEnergy0To1();
9222 }
9223 }
9224 }
9225
9226
9228 {
9229 return ConfigGetFloat("heatIsolation");
9230 }
9231
9233 {
9235 }
9236
9238 {
9239 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
9240 if (
GetGame().ConfigIsExisting(paramPath))
9242
9243 return 0.0;
9244 }
9245
9247 {
9248 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
9249 if (
GetGame().ConfigIsExisting(paramPath))
9251
9252 return 0.0;
9253 }
9254
9255 override void SetWet(
float value,
bool allow_client =
false)
9256 {
9257 if (!IsServerCheck(allow_client))
9258 return;
9259
9262
9264
9265 m_VarWet = Math.Clamp(value, min, max);
9266
9268 {
9271 }
9272 }
9273
9274 override void AddWet(
float value)
9275 {
9277 }
9278
9280 {
9282 }
9283
9285 {
9287 }
9288
9290 {
9292 }
9293
9295 {
9297 }
9298
9300 {
9302 }
9303
9305 {
9308 if (newLevel != oldLevel)
9309 {
9311 }
9312 }
9313
9315 {
9316 SetWeightDirty();
9317 }
9318
9320 {
9321 return GetWetLevelInternal(
m_VarWet);
9322 }
9323
9324
9325
9327 {
9329 }
9330
9332 {
9334 }
9335
9337 {
9339 }
9340
9342 {
9344 }
9345
9346
9347
9349 {
9350 if (ConfigIsExisting("itemModelLength"))
9351 {
9352 return ConfigGetFloat("itemModelLength");
9353 }
9354 return 0;
9355 }
9356
9358 {
9359 if (ConfigIsExisting("itemAttachOffset"))
9360 {
9361 return ConfigGetFloat("itemAttachOffset");
9362 }
9363 return 0;
9364 }
9365
9366 override void SetCleanness(
int value,
bool allow_client =
false)
9367 {
9368 if (!IsServerCheck(allow_client))
9369 return;
9370
9372
9374
9377 }
9378
9380 {
9382 }
9383
9385 {
9386 return true;
9387 }
9388
9389
9390
9391
9393 {
9395 }
9396
9398 {
9400 }
9401
9402
9403
9404
9405 override void SetColor(
int r,
int g,
int b,
int a)
9406 {
9412 }
9414 override void GetColor(out
int r,out
int g,out
int b,out
int a)
9415 {
9420 }
9421
9423 {
9425 }
9426
9429 {
9430 int r,g,b,a;
9432 r = r/255;
9433 g = g/255;
9434 b = b/255;
9435 a = a/255;
9436 return MiscGameplayFunctions.GetColorString(r, g, b, a);
9437 }
9438
9439
9440
9441 override void SetLiquidType(
int value,
bool allow_client =
false)
9442 {
9443 if (!IsServerCheck(allow_client))
9444 return;
9445
9450 }
9451
9453 {
9454 return ConfigGetInt("varLiquidTypeInit");
9455 }
9456
9458 {
9460 }
9461
9463 {
9465 SetFrozen(false);
9466 }
9467
9470 {
9471 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9472 }
9473
9474
9477 {
9478 PlayerBase nplayer;
9479 if (PlayerBase.CastTo(nplayer, player))
9480 {
9482
9483 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
9484 }
9485 }
9486
9487
9490 {
9491 PlayerBase nplayer;
9492 if (PlayerBase.CastTo(nplayer,player))
9493 {
9494
9495 nplayer.SetEnableQuickBarEntityShortcut(this,false);
9496
9497 }
9498
9499
9500 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
9501
9502
9503 if (HasEnergyManager())
9504 {
9505 GetCompEM().UpdatePlugState();
9506 }
9507 }
9508
9509
9511 {
9512 super.OnPlacementStarted(player);
9513
9515 }
9516
9517 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
9518 {
9520 {
9521 m_AdminLog.OnPlacementComplete(player,
this);
9522 }
9523
9524 super.OnPlacementComplete(player, position, orientation);
9525 }
9526
9527
9528
9529
9530
9532 {
9534 {
9535 return true;
9536 }
9537 else
9538 {
9539 return false;
9540 }
9541 }
9542
9543
9545 {
9547 {
9549 }
9550 }
9551
9552
9554 {
9556 }
9557
9559 {
9561 }
9562
9563 override void InsertAgent(
int agent,
float count = 1)
9564 {
9565 if (count < 1)
9566 return;
9567
9569 }
9570
9573 {
9575 }
9576
9577
9579 {
9581 }
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
9616
9617
9618
9619
9620
9621
9622
9623
9625 {
9627 return false;
9628 return true;
9629 }
9630
9632 {
9633
9635 }
9636
9637
9640 {
9641 super.CheckForRoofLimited(timeTresholdMS);
9642
9644 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9645 {
9646 m_PreviousRoofTestTime = time;
9647 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9648 }
9649 }
9650
9651
9653 {
9655 {
9656 return 0;
9657 }
9658
9659 if (GetInventory().GetAttachmentSlotsCount() != 0)
9660 {
9661 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9662 if (filter)
9663 return filter.GetProtectionLevel(type, false, system);
9664 else
9665 return 0;
9666 }
9667
9668 string subclassPath, entryName;
9669
9670 switch (type)
9671 {
9673 entryName = "biological";
9674 break;
9676 entryName = "chemical";
9677 break;
9678 default:
9679 entryName = "biological";
9680 break;
9681 }
9682
9683 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9684
9686 }
9687
9688
9689
9692 {
9693 if (!IsMagazine())
9695
9697 }
9698
9699
9700
9701
9702
9707 {
9708 return true;
9709 }
9710
9712 {
9714 }
9715
9716
9717
9718
9719
9721 {
9722 if (parent)
9723 {
9724 if (parent.IsInherited(DayZInfected))
9725 return true;
9726
9727 if (!parent.IsRuined())
9728 return true;
9729 }
9730
9731 return true;
9732 }
9733
9735 {
9736 if (!super.CanPutAsAttachment(parent))
9737 {
9738 return false;
9739 }
9740
9741 if (!IsRuined() && !parent.IsRuined())
9742 {
9743 return true;
9744 }
9745
9746 return false;
9747 }
9748
9750 {
9751
9752
9753
9754
9755 return super.CanReceiveItemIntoCargo(item);
9756 }
9757
9759 {
9760
9761
9762
9763
9764 GameInventory attachmentInv = attachment.GetInventory();
9766 {
9767 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9768 return false;
9769 }
9770
9771 InventoryLocation loc = new InventoryLocation();
9772 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9773 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9774 return false;
9775
9776 return super.CanReceiveAttachment(attachment, slotId);
9777 }
9778
9780 {
9781 if (!super.CanReleaseAttachment(attachment))
9782 return false;
9783
9784 return GetInventory().AreChildrenAccessible();
9785 }
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9808 {
9809 int id = muzzle_owner.GetMuzzleID();
9810 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9811
9812 if (WPOF_array)
9813 {
9814 for (int i = 0; i < WPOF_array.Count(); i++)
9815 {
9816 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9817
9818 if (WPOF)
9819 {
9820 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9821 }
9822 }
9823 }
9824 }
9825
9826
9828 {
9829 int id = muzzle_owner.GetMuzzleID();
9831
9832 if (WPOBE_array)
9833 {
9834 for (int i = 0; i < WPOBE_array.Count(); i++)
9835 {
9836 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9837
9838 if (WPOBE)
9839 {
9840 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9841 }
9842 }
9843 }
9844 }
9845
9846
9848 {
9849 int id = muzzle_owner.GetMuzzleID();
9850 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9851
9852 if (WPOOH_array)
9853 {
9854 for (int i = 0; i < WPOOH_array.Count(); i++)
9855 {
9856 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9857
9858 if (WPOOH)
9859 {
9860 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9861 }
9862 }
9863 }
9864 }
9865
9866
9868 {
9869 int id = muzzle_owner.GetMuzzleID();
9870 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9871
9872 if (WPOOH_array)
9873 {
9874 for (int i = 0; i < WPOOH_array.Count(); i++)
9875 {
9876 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9877
9878 if (WPOOH)
9879 {
9880 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9881 }
9882 }
9883 }
9884 }
9885
9886
9888 {
9889 int id = muzzle_owner.GetMuzzleID();
9890 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9891
9892 if (WPOOH_array)
9893 {
9894 for (int i = 0; i < WPOOH_array.Count(); i++)
9895 {
9896 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9897
9898 if (WPOOH)
9899 {
9900 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9901 }
9902 }
9903 }
9904 }
9905
9906
9907
9909 {
9911 {
9912 return true;
9913 }
9914
9915 return false;
9916 }
9917
9919 {
9921 {
9922 return true;
9923 }
9924
9925 return false;
9926 }
9927
9929 {
9931 {
9932 return true;
9933 }
9934
9935 return false;
9936 }
9937
9939 {
9940 return false;
9941 }
9942
9945 {
9946 return UATimeSpent.DEFAULT_DEPLOY;
9947 }
9948
9949
9950
9951
9953 {
9955 SetSynchDirty();
9956 }
9957
9959 {
9961 }
9962
9963
9965 {
9966 return false;
9967 }
9968
9971 {
9972 string att_type = "None";
9973
9974 if (ConfigIsExisting("soundAttType"))
9975 {
9976 att_type = ConfigGetString("soundAttType");
9977 }
9978
9980 }
9981
9983 {
9985 }
9986
9987
9988
9989
9990
9994
9996 {
9999
10001 }
10002
10003
10005 {
10007 return;
10008
10010
10013
10016
10017 SoundParameters params = new SoundParameters();
10021 }
10022
10023
10025 {
10027 return;
10028
10030 SetSynchDirty();
10031
10034 }
10035
10036
10038 {
10040 return;
10041
10043 SetSynchDirty();
10044
10047 }
10048
10050 {
10052 }
10053
10055 {
10057 }
10058
10061 {
10062 if (!
GetGame().IsDedicatedServer())
10063 {
10064 if (ConfigIsExisting("attachSoundSet"))
10065 {
10066 string cfg_path = "";
10067 string soundset = "";
10068 string type_name =
GetType();
10069
10072 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
10073 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
10074
10075 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
10076 {
10077 for (int i = 0; i < cfg_soundset_array.Count(); i++)
10078 {
10079 if (cfg_slot_array[i] == slot_type)
10080 {
10081 soundset = cfg_soundset_array[i];
10082 break;
10083 }
10084 }
10085 }
10086
10087 if (soundset != "")
10088 {
10089 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
10091 }
10092 }
10093 }
10094 }
10095
10097 {
10098
10099 }
10100
10101 void OnApply(PlayerBase player);
10102
10104 {
10105 return 1.0;
10106 };
10107
10109 {
10111 }
10112
10114 {
10116 }
10117
10119
10121 {
10122 SetDynamicPhysicsLifeTime(0.01);
10124 }
10125
10127 {
10128 array<string> zone_names = new array<string>;
10129 GetDamageZones(zone_names);
10130 for (int i = 0; i < zone_names.Count(); i++)
10131 {
10132 SetHealthMax(zone_names.Get(i),"Health");
10133 }
10134 SetHealthMax("","Health");
10135 }
10136
10139 {
10140 float global_health = GetHealth01("","Health");
10141 array<string> zones = new array<string>;
10142 GetDamageZones(zones);
10143
10144 for (int i = 0; i < zones.Count(); i++)
10145 {
10146 SetHealth01(zones.Get(i),"Health",global_health);
10147 }
10148 }
10149
10152 {
10153 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
10154 }
10155
10157 {
10158 if (!hasRootAsPlayer)
10159 {
10160 if (refParentIB)
10161 {
10162
10163 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
10164 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
10165
10166 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
10167 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
10168
10171 }
10172 else
10173 {
10174
10177 }
10178 }
10179 }
10180
10182 {
10184 {
10185 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
10186 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
10187 {
10188 float heatPermCoef = 1.0;
10190 while (ent)
10191 {
10192 heatPermCoef *= ent.GetHeatPermeabilityCoef();
10193 ent = ent.GetHierarchyParent();
10194 }
10195
10196 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
10197 }
10198 }
10199 }
10200
10202 {
10203
10204 EntityAI parent = GetHierarchyParent();
10205 if (!parent)
10206 {
10207 hasParent = false;
10208 hasRootAsPlayer = false;
10209 }
10210 else
10211 {
10212 hasParent = true;
10213 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
10214 refParentIB =
ItemBase.Cast(parent);
10215 }
10216 }
10217
10218 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
10219 {
10220
10221 }
10222
10224 {
10225
10226 return false;
10227 }
10228
10230 {
10231
10232
10233 return false;
10234 }
10235
10237 {
10238
10239 return false;
10240 }
10241
10244 {
10245 return !GetIsFrozen() &&
IsOpen();
10246 }
10247
10249 {
10250 bool hasParent = false, hasRootAsPlayer = false;
10252
10253 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
10254 bool foodDecay =
g_Game.IsFoodDecayEnabled();
10255
10256 if (wwtu || foodDecay)
10257 {
10261
10262 if (processWetness || processTemperature || processDecay)
10263 {
10265
10266 if (processWetness)
10267 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
10268
10269 if (processTemperature)
10271
10272 if (processDecay)
10273 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
10274 }
10275 }
10276 }
10277
10280 {
10282 }
10283
10285 {
10288
10289 return super.GetTemperatureFreezeThreshold();
10290 }
10291
10293 {
10296
10297 return super.GetTemperatureThawThreshold();
10298 }
10299
10301 {
10304
10305 return super.GetItemOverheatThreshold();
10306 }
10307
10309 {
10311 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
10312
10313 return super.GetTemperatureFreezeTime();
10314 }
10315
10317 {
10319 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
10320
10321 return super.GetTemperatureThawTime();
10322 }
10323
10328
10330 {
10331 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
10332 }
10333
10335 {
10336 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
10337 }
10338
10341 {
10343 }
10344
10346 {
10348 }
10349
10351 {
10353 }
10354
10357 {
10358 return null;
10359 }
10360
10363 {
10364 return false;
10365 }
10366
10368 {
10370 {
10373 if (!trg)
10374 {
10376 explosive = this;
10377 }
10378
10379 explosive.PairRemote(trg);
10381
10382 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
10383 trg.SetPersistentPairID(persistentID);
10384 explosive.SetPersistentPairID(persistentID);
10385
10386 return true;
10387 }
10388 return false;
10389 }
10390
10393 {
10394 float ret = 1.0;
10397 ret *= GetHealth01();
10398
10399 return ret;
10400 }
10401
10402 #ifdef DEVELOPER
10403 override void SetDebugItem()
10404 {
10405 super.SetDebugItem();
10406 _itemBase = this;
10407 }
10408
10410 {
10411 string text = super.GetDebugText();
10412
10414 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
10415
10416 return text;
10417 }
10418 #endif
10419
10421 {
10422 return true;
10423 }
10424
10426
10428
10430 {
10433 }
10434
10435
10443
10459}
10460
10462{
10464 if (entity)
10465 {
10466 bool is_item = entity.IsInherited(
ItemBase);
10467 if (is_item && full_quantity)
10468 {
10471 }
10472 }
10473 else
10474 {
10476 return NULL;
10477 }
10478 return entity;
10479}
10480
10482{
10483 if (item)
10484 {
10485 if (health > 0)
10486 item.SetHealth("", "", health);
10487
10488 if (item.CanHaveTemperature())
10489 {
10491 if (item.CanFreeze())
10492 item.SetFrozen(false);
10493 }
10494
10495 if (item.HasEnergyManager())
10496 {
10497 if (quantity >= 0)
10498 {
10499 item.GetCompEM().SetEnergy0To1(quantity);
10500 }
10501 else
10502 {
10504 }
10505 }
10506 else if (item.IsMagazine())
10507 {
10508 Magazine mag = Magazine.Cast(item);
10509 if (quantity >= 0)
10510 {
10511 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
10512 }
10513 else
10514 {
10516 }
10517
10518 }
10519 else
10520 {
10521 if (quantity >= 0)
10522 {
10523 item.SetQuantityNormalized(quantity, false);
10524 }
10525 else
10526 {
10528 }
10529
10530 }
10531 }
10532}
10533
10534#ifdef DEVELOPER
10536#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.