5079{
5081 {
5082 return true;
5083 }
5084};
5085
5086
5087
5089{
5093
5095
5098
5099
5100
5101
5102
5111
5117
5122
5127
5148 protected bool m_IsResultOfSplit
5149
5151
5156
5157
5158
5160
5164
5165
5166
5168
5171
5172
5173
5179
5180
5188
5191
5192
5194
5195
5197
5198
5203
5204
5209
5210
5212
5213
5215 {
5220
5221 if (!
GetGame().IsDedicatedServer())
5222 {
5224 {
5226
5228 {
5230 }
5231 }
5232
5235 }
5236
5237 m_OldLocation = null;
5238
5240 {
5242 }
5243
5244 if (ConfigIsExisting("headSelectionsToHide"))
5245 {
5248 }
5249
5251 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5252 {
5254 }
5255
5257
5258 m_IsResultOfSplit = false;
5259
5261 }
5262
5264 {
5265 super.InitItemVariables();
5266
5272 m_Count = ConfigGetInt(
"count");
5273
5276
5281
5284
5289
5301
5305
5306
5309 if (ConfigIsExisting("canBeSplit"))
5310 {
5313 }
5314
5316 if (ConfigIsExisting("itemBehaviour"))
5318
5319
5322 RegisterNetSyncVariableInt("m_VarLiquidType");
5323 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5324
5325 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5326 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5327 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5328
5329 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5330 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5331 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5332 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5333
5334 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5335 RegisterNetSyncVariableBool("m_IsTakeable");
5336 RegisterNetSyncVariableBool("m_IsHologram");
5337
5340 {
5343 }
5344
5346
5348 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5350
5351 }
5352
5354 {
5356 }
5357
5359 {
5362 {
5367 }
5368 }
5369
5370 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5371 {
5373 {
5376 }
5377
5379 }
5380
5382 {
5388 }
5389
5391
5393 {
5395
5396 if (!action)
5397 {
5398 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5399 return;
5400 }
5401
5403 if (!ai)
5404 {
5406 return;
5407 }
5408
5410 if (!action_array)
5411 {
5412 action_array = new array<ActionBase_Basic>;
5414 }
5415 if (LogManager.IsActionLogEnable())
5416 {
5417 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5418 }
5419
5420 if (action_array.Find(action) != -1)
5421 {
5422 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5423 }
5424 else
5425 {
5426 action_array.Insert(action);
5427 }
5428 }
5429
5431 {
5433 ActionBase action = player.GetActionManager().GetAction(actionName);
5436
5437 if (action_array)
5438 {
5439 action_array.RemoveItem(action);
5440 }
5441 }
5442
5443
5444
5446 {
5447 ActionOverrideData overrideData = new ActionOverrideData();
5451
5453 if (!actionMap)
5454 {
5457 }
5458
5459 actionMap.Insert(this.
Type(), overrideData);
5460
5461 }
5462
5464
5466
5467
5469 {
5472
5475
5476 string config_to_search = "CfgVehicles";
5477 string muzzle_owner_config;
5478
5480 {
5481 if (IsInherited(Weapon))
5482 config_to_search = "CfgWeapons";
5483
5484 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5485
5486 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5487
5489
5490 if (config_OnFire_subclass_count > 0)
5491 {
5492 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5493
5494 for (int i = 0; i < config_OnFire_subclass_count; i++)
5495 {
5496 string particle_class = "";
5498 string config_OnFire_entry = config_OnFire_class + particle_class;
5499 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5500 WPOF_array.Insert(WPOF);
5501 }
5502
5503
5505 }
5506 }
5507
5509 {
5510 config_to_search = "CfgWeapons";
5511 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5512
5513 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
5514
5516
5517 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
5518 {
5519 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
5520
5521 for (i = 0; i < config_OnBulletCasingEject_count; i++)
5522 {
5523 string particle_class2 = "";
5525 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
5526 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
5527 WPOBE_array.Insert(WPOBE);
5528 }
5529
5530
5532 }
5533 }
5534 }
5535
5536
5538 {
5541
5543 {
5544 string config_to_search = "CfgVehicles";
5545
5546 if (IsInherited(Weapon))
5547 config_to_search = "CfgWeapons";
5548
5549 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5550 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
5551
5552 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
5553 {
5554
5556
5558 {
5560 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
5562 return;
5563 }
5564
5567
5568
5569
5571 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
5572
5573 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
5574 {
5575 string particle_class = "";
5577 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
5579
5580 if (entry_type == CT_CLASS)
5581 {
5582 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
5583 WPOOH_array.Insert(WPOF);
5584 }
5585 }
5586
5587
5589 }
5590 }
5591 }
5592
5594 {
5596 }
5597
5599 {
5601 {
5603
5606
5609
5610 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5611 }
5612 }
5613
5615 {
5617 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5618
5620 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5621
5623 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5624
5626 {
5628 }
5629 }
5630
5632 {
5634 }
5635
5637 {
5640 else
5642
5644 {
5647 }
5648 else
5649 {
5652
5655 }
5656
5658 }
5659
5661 {
5663 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5664 }
5665
5667 {
5669 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5671 }
5672
5674 {
5676 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5677 }
5678
5680 {
5683
5684 OverheatingParticle OP = new OverheatingParticle();
5689
5691 }
5692
5694 {
5697
5698 return -1;
5699 }
5700
5702 {
5704 {
5707
5708 for (int i = count; i > 0; --i)
5709 {
5710 int id = i - 1;
5713
5716
5717 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
5718 {
5719 if (p)
5720 {
5723 }
5724 }
5725 }
5726 }
5727 }
5728
5730 {
5732 {
5734 {
5735 int id = i - 1;
5737
5738 if (OP)
5739 {
5741
5742 if (p)
5743 {
5745 }
5746
5747 delete OP;
5748 }
5749 }
5750
5753 }
5754 }
5755
5758 {
5759 return 0.0;
5760 }
5761
5762
5764 {
5765 return 250;
5766 }
5767
5769 {
5770 return 0;
5771 }
5772
5775 {
5777 return true;
5778
5779 return false;
5780 }
5781
5784 {
5787
5789 {
5791 }
5792 else
5793 {
5794
5796 }
5797
5799 }
5800
5807 {
5808 return -1;
5809 }
5810
5811
5812
5813
5815 {
5817 {
5819 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
5820
5821 if (r_index >= 0)
5822 {
5823 InventoryLocation r_il = new InventoryLocation;
5824 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
5825
5826 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
5829 {
5830 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
5831 }
5833 {
5834 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
5835 }
5836
5837 }
5838
5839 player.GetHumanInventory().ClearUserReservedLocation(this);
5840 }
5841
5844 }
5845
5846
5847
5848
5850 {
5851 return ItemBase.m_DebugActionsMask;
5852 }
5853
5855 {
5856 return ItemBase.m_DebugActionsMask & mask;
5857 }
5858
5860 {
5861 ItemBase.m_DebugActionsMask = mask;
5862 }
5863
5865 {
5866 ItemBase.m_DebugActionsMask |= mask;
5867 }
5868
5870 {
5871 ItemBase.m_DebugActionsMask &= ~mask;
5872 }
5873
5875 {
5877 {
5879 }
5880 else
5881 {
5883 }
5884 }
5885
5886
5888 {
5889 if (GetEconomyProfile())
5890 {
5891 float q_max = GetEconomyProfile().GetQuantityMax();
5892 if (q_max > 0)
5893 {
5894 float q_min = GetEconomyProfile().GetQuantityMin();
5895 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
5896
5898 {
5899 ComponentEnergyManager comp = GetCompEM();
5901 {
5903 }
5904 }
5906 {
5908
5909 }
5910
5911 }
5912 }
5913 }
5914
5917 {
5918 EntityAI parent = GetHierarchyParent();
5919
5920 if (parent)
5921 {
5922 InventoryLocation inventory_location_to_lock = new InventoryLocation;
5923 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
5924 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
5925 }
5926 }
5927
5930 {
5931 EntityAI parent = GetHierarchyParent();
5932
5933 if (parent)
5934 {
5935 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
5936 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
5937 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
5938 }
5939 }
5940
5942 {
5943
5944
5945
5946
5948
5950 {
5951 if (ScriptInputUserData.CanStoreInputUserData())
5952 {
5953 ScriptInputUserData ctx = new ScriptInputUserData;
5959 ctx.
Write(use_stack_max);
5962
5964 {
5965 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
5966 }
5967 }
5968 }
5969 else if (!
GetGame().IsMultiplayer())
5970 {
5972 }
5973 }
5974
5976 {
5978 }
5979
5981 {
5983 }
5984
5986 {
5988 }
5989
5991 {
5992
5993 return false;
5994 }
5995
5997 {
5998 return false;
5999 }
6000
6004 {
6005 return false;
6006 }
6007
6009 {
6010 return "";
6011 }
6012
6014
6016 {
6017 return false;
6018 }
6019
6021 {
6022 return true;
6023 }
6024
6025
6026
6028 {
6029 return true;
6030 }
6031
6033 {
6034 return true;
6035 }
6036
6038 {
6039 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6041 }
6042
6044 {
6046 }
6047
6049 {
6051 if (!is_being_placed)
6053 SetSynchDirty();
6054 }
6055
6056
6058
6060 {
6062 }
6063
6065 {
6067 }
6068
6070 {
6071 return 1;
6072 }
6073
6075 {
6076 return false;
6077 }
6078
6080 {
6082 SetSynchDirty();
6083 }
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6120 {
6121 super.OnMovedInsideCargo(container);
6122
6123 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6124 }
6125
6126 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6127 {
6128 super.EEItemLocationChanged(oldLoc,newLoc);
6129
6130 PlayerBase new_player = null;
6131 PlayerBase old_player = null;
6132
6133 if (newLoc.GetParent())
6134 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6135
6136 if (oldLoc.GetParent())
6137 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6138
6140 {
6141 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6142
6143 if (r_index >= 0)
6144 {
6145 InventoryLocation r_il = new InventoryLocation;
6146 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6147
6148 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6151 {
6152 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6153 }
6155 {
6156 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6157 }
6158
6159 }
6160 }
6161
6163 {
6164 if (new_player)
6165 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6166
6167 if (new_player == old_player)
6168 {
6169
6170 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6171 {
6173 {
6174 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6175 {
6176 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6177 }
6178 }
6179 else
6180 {
6181 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6182 }
6183 }
6184
6185 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6186 {
6187 int type = oldLoc.GetType();
6189 {
6190 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6191 }
6193 {
6194 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6195 }
6196 }
6197 if (!m_OldLocation)
6198 {
6199 m_OldLocation = new InventoryLocation;
6200 }
6201 m_OldLocation.Copy(oldLoc);
6202 }
6203 else
6204 {
6205 if (m_OldLocation)
6206 {
6207 m_OldLocation.Reset();
6208 }
6209 }
6210
6212 }
6213 else
6214 {
6215 if (new_player)
6216 {
6217 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6218 if (res_index >= 0)
6219 {
6220 InventoryLocation il = new InventoryLocation;
6221 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6223 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6226 {
6227 il.
GetParent().GetOnReleaseLock().Invoke(it);
6228 }
6230 {
6232 }
6233
6234 }
6235 }
6237 {
6238
6240 }
6241
6242 if (m_OldLocation)
6243 {
6244 m_OldLocation.Reset();
6245 }
6246 }
6247 }
6248
6249 override void EOnContact(IEntity other, Contact extra)
6250 {
6252 {
6253 int liquidType = -1;
6255 if (impactSpeed > 0.0)
6256 {
6258 #ifndef SERVER
6260 #else
6262 SetSynchDirty();
6263 #endif
6265 }
6266 }
6267
6268 #ifdef SERVER
6269 if (GetCompEM() && GetCompEM().IsPlugged())
6270 {
6271 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6272 GetCompEM().UnplugThis();
6273 }
6274 #endif
6275 }
6276
6278
6280 {
6282 }
6283
6285 {
6286
6287 }
6288
6290 {
6291 super.OnItemLocationChanged(old_owner, new_owner);
6292
6293 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6294 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6295
6296 if (!relatedPlayer && playerNew)
6297 relatedPlayer = playerNew;
6298
6299 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6300 {
6302 if (actionMgr)
6303 {
6304 ActionBase currentAction = actionMgr.GetRunningAction();
6305 if (currentAction)
6307 }
6308 }
6309
6310 Man ownerPlayerOld = null;
6311 Man ownerPlayerNew = null;
6312
6313 if (old_owner)
6314 {
6315 if (old_owner.
IsMan())
6316 {
6317 ownerPlayerOld = Man.Cast(old_owner);
6318 }
6319 else
6320 {
6321 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6322 }
6323 }
6324 else
6325 {
6327 {
6329
6330 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6331 {
6332 GetCompEM().UnplugThis();
6333 }
6334 }
6335 }
6336
6337 if (new_owner)
6338 {
6339 if (new_owner.
IsMan())
6340 {
6341 ownerPlayerNew = Man.Cast(new_owner);
6342 }
6343 else
6344 {
6345 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6346 }
6347 }
6348
6349 if (ownerPlayerOld != ownerPlayerNew)
6350 {
6351 if (ownerPlayerOld)
6352 {
6353 array<EntityAI> subItemsExit = new array<EntityAI>;
6355 for (int i = 0; i < subItemsExit.Count(); i++)
6356 {
6359 }
6360 }
6361
6362 if (ownerPlayerNew)
6363 {
6364 array<EntityAI> subItemsEnter = new array<EntityAI>;
6366 for (int j = 0; j < subItemsEnter.Count(); j++)
6367 {
6370 }
6371 }
6372 }
6373 else if (ownerPlayerNew != null)
6374 {
6375 PlayerBase nplayer;
6376 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6377 {
6378 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6380 for (int k = 0; k < subItemsUpdate.Count(); k++)
6381 {
6383 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6384 }
6385 }
6386 }
6387
6388 if (old_owner)
6389 old_owner.OnChildItemRemoved(this);
6390 if (new_owner)
6391 new_owner.OnChildItemReceived(this);
6392 }
6393
6394
6396 {
6397 super.EEDelete(parent);
6398 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6399 if (player)
6400 {
6402
6403 if (player.IsAlive())
6404 {
6405 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6406 if (r_index >= 0)
6407 {
6408 InventoryLocation r_il = new InventoryLocation;
6409 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6410
6411 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6414 {
6415 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6416 }
6418 {
6419 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6420 }
6421
6422 }
6423
6424 player.RemoveQuickBarEntityShortcut(this);
6425 }
6426 }
6427 }
6428
6430 {
6431 super.EEKilled(killer);
6432
6435 {
6436 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6437 {
6438 if (IsMagazine())
6439 {
6440 if (Magazine.Cast(this).GetAmmoCount() > 0)
6441 {
6443 }
6444 }
6445 else
6446 {
6448 }
6449 }
6450 }
6451 }
6452
6454 {
6455 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6456
6457 super.OnWasAttached(parent, slot_id);
6458
6461
6463 }
6464
6466 {
6467 super.OnWasDetached(parent, slot_id);
6468
6471 }
6472
6474 {
6475 int idx;
6478
6479 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6480 if (inventory_slots.Count() < 1)
6481 {
6482 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6483 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6484 }
6485 else
6486 {
6487 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6488 }
6489
6490 idx = inventory_slots.Find(slot);
6491 if (idx < 0)
6492 return "";
6493
6494 return attach_types.Get(idx);
6495 }
6496
6498 {
6499 int idx = -1;
6500 string slot;
6501
6504
6505 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6506 if (inventory_slots.Count() < 1)
6507 {
6508 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
6509 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6510 }
6511 else
6512 {
6513 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
6514 if (detach_types.Count() < 1)
6515 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6516 }
6517
6518 for (int i = 0; i < inventory_slots.Count(); i++)
6519 {
6520 slot = inventory_slots.Get(i);
6521 }
6522
6523 if (slot != "")
6524 {
6525 if (detach_types.Count() == 1)
6526 idx = 0;
6527 else
6528 idx = inventory_slots.Find(slot);
6529 }
6530 if (idx < 0)
6531 return "";
6532
6533 return detach_types.Get(idx);
6534 }
6535
6537 {
6538
6540
6541
6542 float min_time = 1;
6543 float max_time = 3;
6544 float delay = Math.RandomFloat(min_time, max_time);
6545
6546 explode_timer.Run(delay, this, "DoAmmoExplosion");
6547 }
6548
6550 {
6551 Magazine magazine = Magazine.Cast(this);
6552 int pop_sounds_count = 6;
6553 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
6554
6555
6556 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
6557 string sound_name = pop_sounds[ sound_idx ];
6559
6560
6561 magazine.ServerAddAmmoCount(-1);
6562
6563
6564 float min_temp_to_explode = 100;
6565
6566 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
6567 {
6569 }
6570 }
6571
6572
6573 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
6574 {
6575 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
6576
6577 const int CHANCE_DAMAGE_CARGO = 4;
6578 const int CHANCE_DAMAGE_ATTACHMENT = 1;
6579 const int CHANCE_DAMAGE_NOTHING = 2;
6580
6582 {
6583 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
6584 int chances;
6585 int rnd;
6586
6587 if (GetInventory().GetCargo())
6588 {
6589 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6590 rnd = Math.RandomInt(0,chances);
6591
6592 if (rnd < CHANCE_DAMAGE_CARGO)
6593 {
6595 }
6596 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
6597 {
6599 }
6600 }
6601 else
6602 {
6603 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6604 rnd = Math.RandomInt(0,chances);
6605
6606 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
6607 {
6609 }
6610 }
6611 }
6612 }
6613
6615 {
6616 if (GetInventory().GetCargo())
6617 {
6618 int item_count = GetInventory().GetCargo().GetItemCount();
6619 if (item_count > 0)
6620 {
6621 int random_pick = Math.RandomInt(0, item_count);
6623 if (!item.IsExplosive())
6624 {
6625 item.AddHealth("","",damage);
6626 return true;
6627 }
6628 }
6629 }
6630 return false;
6631 }
6632
6634 {
6635 int attachment_count = GetInventory().AttachmentCount();
6636 if (attachment_count > 0)
6637 {
6638 int random_pick = Math.RandomInt(0, attachment_count);
6639 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
6640 if (!attachment.IsExplosive())
6641 {
6642 attachment.AddHealth("","",damage);
6643 return true;
6644 }
6645 }
6646 return false;
6647 }
6648
6650 {
6652 }
6653
6655 {
6657 return GetInventory().CanRemoveEntity();
6658
6659 return false;
6660 }
6661
6663 {
6665 return;
6666
6668 {
6669 if (ScriptInputUserData.CanStoreInputUserData())
6670 {
6671 ScriptInputUserData ctx = new ScriptInputUserData;
6676 ctx.
Write(destination_entity);
6680 }
6681 }
6682 else if (!
GetGame().IsMultiplayer())
6683 {
6685 }
6686 }
6687
6689 {
6691 return;
6692
6693 float split_quantity_new;
6697 InventoryLocation loc = new InventoryLocation;
6698
6699 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6700 {
6702 split_quantity_new = stack_max;
6703 else
6705
6706 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
6707 if (new_item)
6708 {
6709 new_item.SetResultOfSplit(true);
6710 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6712 new_item.SetQuantity(split_quantity_new);
6713 }
6714 }
6715 else if (destination_entity && slot_id == -1)
6716 {
6717 if (quantity > stack_max)
6718 split_quantity_new = stack_max;
6719 else
6720 split_quantity_new = quantity;
6721
6723 {
6726 }
6727
6728 if (new_item)
6729 {
6730 new_item.SetResultOfSplit(true);
6731 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6733 new_item.SetQuantity(split_quantity_new);
6734 }
6735 }
6736 else
6737 {
6738 if (stack_max != 0)
6739 {
6741 {
6743 }
6744
6745 if (split_quantity_new == 0)
6746 {
6747 if (!
GetGame().IsMultiplayer())
6748 player.PhysicalPredictiveDropItem(this);
6749 else
6750 player.ServerDropEntity(this);
6751 return;
6752 }
6753
6755
6756 if (new_item)
6757 {
6758 new_item.SetResultOfSplit(true);
6759 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6761 new_item.SetQuantity(stack_max);
6762 new_item.PlaceOnSurface();
6763 }
6764 }
6765 }
6766 }
6767
6769 {
6771 return;
6772
6773 float split_quantity_new;
6777 InventoryLocation loc = new InventoryLocation;
6778
6779 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6780 {
6782 split_quantity_new = stack_max;
6783 else
6785
6786 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
6787 if (new_item)
6788 {
6789 new_item.SetResultOfSplit(true);
6790 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6792 new_item.SetQuantity(split_quantity_new);
6793 }
6794 }
6795 else if (destination_entity && slot_id == -1)
6796 {
6797 if (quantity > stack_max)
6798 split_quantity_new = stack_max;
6799 else
6800 split_quantity_new = quantity;
6801
6803 {
6806 }
6807
6808 if (new_item)
6809 {
6810 new_item.SetResultOfSplit(true);
6811 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6813 new_item.SetQuantity(split_quantity_new);
6814 }
6815 }
6816 else
6817 {
6818 if (stack_max != 0)
6819 {
6821 {
6823 }
6824
6826
6827 if (new_item)
6828 {
6829 new_item.SetResultOfSplit(true);
6830 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6832 new_item.SetQuantity(stack_max);
6833 new_item.PlaceOnSurface();
6834 }
6835 }
6836 }
6837 }
6838
6840 {
6842 return;
6843
6845 {
6846 if (ScriptInputUserData.CanStoreInputUserData())
6847 {
6848 ScriptInputUserData ctx = new ScriptInputUserData;
6853 dst.WriteToContext(ctx);
6855 }
6856 }
6857 else if (!
GetGame().IsMultiplayer())
6858 {
6860 }
6861 }
6862
6864 {
6866 return;
6867
6869 {
6870 if (ScriptInputUserData.CanStoreInputUserData())
6871 {
6872 ScriptInputUserData ctx = new ScriptInputUserData;
6877 ctx.
Write(destination_entity);
6883 }
6884 }
6885 else if (!
GetGame().IsMultiplayer())
6886 {
6888 }
6889 }
6890
6892 {
6894 }
6895
6897 {
6899 return this;
6900
6902 float split_quantity_new;
6904 if (dst.IsValid())
6905 {
6906 int slot_id = dst.GetSlot();
6908
6909 if (quantity > stack_max)
6910 split_quantity_new = stack_max;
6911 else
6912 split_quantity_new = quantity;
6913
6915
6916 if (new_item)
6917 {
6918 new_item.SetResultOfSplit(true);
6919 MiscGameplayFunctions.TransferItemProperties(this,new_item);
6922 }
6923
6924 return new_item;
6925 }
6926
6927 return null;
6928 }
6929
6931 {
6933 return;
6934
6936 float split_quantity_new;
6938 if (destination_entity)
6939 {
6941 if (quantity > stackable)
6942 split_quantity_new = stackable;
6943 else
6944 split_quantity_new = quantity;
6945
6946 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
6947 if (new_item)
6948 {
6949 new_item.SetResultOfSplit(true);
6950 MiscGameplayFunctions.TransferItemProperties(this,new_item);
6952 new_item.SetQuantity(split_quantity_new);
6953 }
6954 }
6955 }
6956
6958 {
6960 return;
6961
6963 {
6964 if (ScriptInputUserData.CanStoreInputUserData())
6965 {
6966 ScriptInputUserData ctx = new ScriptInputUserData;
6971 ItemBase destination_entity =
this;
6972 ctx.
Write(destination_entity);
6976 }
6977 }
6978 else if (!
GetGame().IsMultiplayer())
6979 {
6981 }
6982 }
6983
6985 {
6987 return;
6988
6990 float split_quantity_new;
6992 if (player)
6993 {
6995 if (quantity > stackable)
6996 split_quantity_new = stackable;
6997 else
6998 split_quantity_new = quantity;
6999
7000 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7001 new_item =
ItemBase.Cast(in_hands);
7002 if (new_item)
7003 {
7004 new_item.SetResultOfSplit(true);
7005 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7007 new_item.SetQuantity(split_quantity_new);
7008 }
7009 }
7010 }
7011
7013 {
7015 return;
7016
7018 float split_quantity_new = Math.Floor(quantity * 0.5);
7019
7021
7022 if (new_item)
7023 {
7024 if (new_item.GetQuantityMax() < split_quantity_new)
7025 {
7026 split_quantity_new = new_item.GetQuantityMax();
7027 }
7028
7029 new_item.SetResultOfSplit(true);
7030 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7031
7033 {
7036 }
7037 else
7038 {
7041 }
7042 }
7043 }
7044
7046 {
7048 return;
7049
7051 float split_quantity_new = Math.Floor(quantity / 2);
7052
7053 InventoryLocation invloc = new InventoryLocation;
7055
7057 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7058
7059 if (new_item)
7060 {
7061 if (new_item.GetQuantityMax() < split_quantity_new)
7062 {
7063 split_quantity_new = new_item.GetQuantityMax();
7064 }
7066 {
7069 }
7070 else
7071 {
7074 }
7075 }
7076 }
7077
7080 {
7081 SetWeightDirty();
7083
7084 if (parent)
7085 parent.OnAttachmentQuantityChangedEx(this, delta);
7086
7088 {
7090 {
7092 }
7094 {
7095 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7097 }
7098 }
7099
7100 }
7101
7104 {
7105
7106 }
7107
7110 {
7112 }
7113
7115 {
7116 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7117
7119 {
7120 if (newLevel == GameConstants.STATE_RUINED)
7121 {
7123 EntityAI parent = GetHierarchyParent();
7124 if (parent && parent.IsFireplace())
7125 {
7126 CargoBase cargo = GetInventory().GetCargo();
7127 if (cargo)
7128 {
7130 {
7132 }
7133 }
7134 }
7135 }
7136
7138 {
7139
7141 return;
7142 }
7143
7144 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7145 {
7147 }
7148 }
7149 }
7150
7151
7153 {
7154 super.OnRightClick();
7155
7157 {
7159 {
7160 if (ScriptInputUserData.CanStoreInputUserData())
7161 {
7162 vector m4[4];
7164
7165 EntityAI root = GetHierarchyRoot();
7166
7167 InventoryLocation dst = new InventoryLocation;
7169 {
7170 if (root)
7171 {
7172 root.GetTransform(m4);
7174 }
7175 else
7176 GetInventory().GetCurrentInventoryLocation(dst);
7177 }
7178 else
7179 {
7181
7182
7183 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7184 {
7185 if (root)
7186 {
7187 root.GetTransform(m4);
7189 }
7190 else
7191 GetInventory().GetCurrentInventoryLocation(dst);
7192 }
7193 else
7194 {
7195 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7196 }
7197 }
7198
7199 ScriptInputUserData ctx = new ScriptInputUserData;
7207 }
7208 }
7209 else if (!
GetGame().IsMultiplayer())
7210 {
7212 }
7213 }
7214 }
7215
7216 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7217 {
7218
7219 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7220 return false;
7221
7222 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7223 return false;
7224
7225
7227 return false;
7228
7229
7230 Magazine mag = Magazine.Cast(this);
7231 if (mag)
7232 {
7233 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7234 return false;
7235
7236 if (stack_max_limit)
7237 {
7238 Magazine other_mag = Magazine.Cast(other_item);
7239 if (other_item)
7240 {
7241 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7242 return false;
7243 }
7244
7245 }
7246 }
7247 else
7248 {
7249
7251 return false;
7252
7254 return false;
7255 }
7256
7257 PlayerBase player = null;
7258 if (CastTo(player, GetHierarchyRootPlayer()))
7259 {
7260 if (player.GetInventory().HasAttachment(this))
7261 return false;
7262
7263 if (player.IsItemsToDelete())
7264 return false;
7265 }
7266
7267 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7268 return false;
7269
7270 int slotID;
7272 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7273 return false;
7274
7275 return true;
7276 }
7277
7279 {
7281 }
7282
7284 {
7285 return m_IsResultOfSplit;
7286 }
7287
7289 {
7290 m_IsResultOfSplit = value;
7291 }
7292
7294 {
7296 }
7297
7299 {
7300 float other_item_quantity = other_item.GetQuantity();
7301 float this_free_space;
7302
7304
7306
7307 if (other_item_quantity > this_free_space)
7308 {
7309 return this_free_space;
7310 }
7311 else
7312 {
7313 return other_item_quantity;
7314 }
7315 }
7316
7318 {
7320 }
7321
7323 {
7325 return;
7326
7327 if (!IsMagazine() && other_item)
7328 {
7330 if (quantity_used != 0)
7331 {
7332 float hp1 = GetHealth01("","");
7333 float hp2 = other_item.GetHealth01("","");
7334 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7335 hpResult = hpResult / (
GetQuantity() + quantity_used);
7336
7337 hpResult *= GetMaxHealth();
7338 Math.Round(hpResult);
7339 SetHealth("", "Health", hpResult);
7340
7342 other_item.AddQuantity(-quantity_used);
7343 }
7344 }
7346 }
7347
7349 {
7350 #ifdef SERVER
7351 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7352 GetHierarchyParent().IncreaseLifetimeUp();
7353 #endif
7354 };
7355
7357 {
7358 PlayerBase p = PlayerBase.Cast(player);
7359
7360 array<int> recipesIds = p.m_Recipes;
7361 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7362 if (moduleRecipesManager)
7363 {
7364 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7365 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7366 }
7367
7368 for (int i = 0;i < recipesIds.Count(); i++)
7369 {
7370 int key = recipesIds.Get(i);
7371 string recipeName = moduleRecipesManager.GetRecipeName(key);
7373 }
7374 }
7375
7376
7377 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7378 {
7379 super.GetDebugActions(outputList);
7380
7381
7386
7387
7391
7395
7396
7399
7400
7402 {
7405 }
7406
7408
7411
7415 }
7416
7417
7418
7419
7421 {
7422 super.OnAction(action_id, player, ctx);
7423 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7424 {
7425 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7426 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7427 PlayerBase p = PlayerBase.Cast(player);
7428 if (
EActions.RECIPES_RANGE_START < 1000)
7429 {
7430 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7431 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7432 }
7433 }
7434 #ifndef SERVER
7435 else if (action_id ==
EActions.WATCH_PLAYER)
7436 {
7437 PluginDeveloper.SetDeveloperItemClientEx(player);
7438 }
7439 #endif
7441 {
7442 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7443 {
7444 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7445 OnDebugButtonPressServer(id + 1);
7446 }
7447
7448 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7449 {
7450 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7452 }
7453
7454 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7455 {
7456 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7458 }
7459
7460 else if (action_id ==
EActions.ADD_QUANTITY)
7461 {
7462 if (IsMagazine())
7463 {
7464 Magazine mag = Magazine.Cast(this);
7465 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7466 }
7467 else
7468 {
7470 }
7471
7472 if (m_EM)
7473 {
7474 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7475 }
7476
7477 }
7478
7479 else if (action_id ==
EActions.REMOVE_QUANTITY)
7480 {
7481 if (IsMagazine())
7482 {
7483 Magazine mag2 = Magazine.Cast(this);
7484 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7485 }
7486 else
7487 {
7489 }
7490 if (m_EM)
7491 {
7492 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7493 }
7494
7495 }
7496
7497 else if (action_id ==
EActions.SET_QUANTITY_0)
7498 {
7500
7501 if (m_EM)
7502 {
7503 m_EM.SetEnergy(0);
7504 }
7505 }
7506
7507 else if (action_id ==
EActions.SET_MAX_QUANTITY)
7508 {
7510
7511 if (m_EM)
7512 {
7513 m_EM.SetEnergy(m_EM.GetEnergyMax());
7514 }
7515 }
7516
7517 else if (action_id ==
EActions.ADD_HEALTH)
7518 {
7519 AddHealth("","",GetMaxHealth("","Health")/5);
7520 }
7521 else if (action_id ==
EActions.REMOVE_HEALTH)
7522 {
7523 AddHealth("","",-GetMaxHealth("","Health")/5);
7524 }
7525 else if (action_id ==
EActions.DESTROY_HEALTH)
7526 {
7527 SetHealth01("","",0);
7528 }
7529 else if (action_id ==
EActions.WATCH_ITEM)
7530 {
7532 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
7533 #ifdef DEVELOPER
7534 SetDebugDeveloper_item(this);
7535 #endif
7536 }
7537
7538 else if (action_id ==
EActions.ADD_TEMPERATURE)
7539 {
7540 AddTemperature(20);
7541
7542 }
7543
7544 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
7545 {
7546 AddTemperature(-20);
7547
7548 }
7549
7550 else if (action_id ==
EActions.FLIP_FROZEN)
7551 {
7552 SetFrozen(!GetIsFrozen());
7553
7554 }
7555
7556 else if (action_id ==
EActions.ADD_WETNESS)
7557 {
7559
7560 }
7561
7562 else if (action_id ==
EActions.REMOVE_WETNESS)
7563 {
7565
7566 }
7567
7568 else if (action_id ==
EActions.LIQUIDTYPE_UP)
7569 {
7572
7573
7574 }
7575
7576 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
7577 {
7580 }
7581
7582 else if (action_id ==
EActions.MAKE_SPECIAL)
7583 {
7584 auto debugParams = DebugSpawnParams.WithPlayer(player);
7585 OnDebugSpawnEx(debugParams);
7586 }
7587
7588 else if (action_id ==
EActions.DELETE)
7589 {
7590 Delete();
7591 }
7592
7593 }
7594
7595
7596 return false;
7597 }
7598
7599
7600
7601
7605
7608
7609
7610
7612 {
7613 return false;
7614 }
7615
7616
7618 {
7619 return true;
7620 }
7621
7622
7624 {
7625 return true;
7626 }
7627
7628
7629
7631 {
7632 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
7634 }
7635
7638 {
7639 return null;
7640 }
7641
7643 {
7644 return false;
7645 }
7646
7648 {
7649 return false;
7650 }
7651
7655
7656
7658 {
7659 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7660 return module_repairing.CanRepair(this, item_repair_kit);
7661 }
7662
7663
7664 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
7665 {
7666 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7667 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
7668 }
7669
7670
7672 {
7673
7674
7675
7676
7677
7678
7679
7680
7681 return 1;
7682 }
7683
7684
7685
7687 {
7689 }
7690
7691
7692
7694 {
7696 }
7697
7698
7707 {
7708 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7709
7710 if (player)
7711 {
7712 player.MessageStatus(text);
7713 }
7714 }
7715
7716
7725 {
7726 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7727
7728 if (player)
7729 {
7730 player.MessageAction(text);
7731 }
7732 }
7733
7734
7743 {
7744 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7745
7746 if (player)
7747 {
7748 player.MessageFriendly(text);
7749 }
7750 }
7751
7752
7761 {
7762 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7763
7764 if (player)
7765 {
7766 player.MessageImportant(text);
7767 }
7768 }
7769
7771 {
7772 return true;
7773 }
7774
7775
7776 override bool KindOf(
string tag)
7777 {
7778 bool found = false;
7779 string item_name = this.
GetType();
7782
7783 int array_size = item_tag_array.Count();
7784 for (int i = 0; i < array_size; i++)
7785 {
7786 if (item_tag_array.Get(i) == tag)
7787 {
7788 found = true;
7789 break;
7790 }
7791 }
7792 return found;
7793 }
7794
7795
7797 {
7798
7799 super.OnRPC(sender, rpc_type,ctx);
7800
7801
7802 switch (rpc_type)
7803 {
7804 #ifndef SERVER
7805 case ERPCs.RPC_SOUND_LOCK_ATTACH:
7806 Param2<bool, string> p = new Param2<bool, string>(false, "");
7807
7809 return;
7810
7811 bool play = p.param1;
7812 string soundSet = p.param2;
7813
7814 if (play)
7815 {
7817 {
7819 {
7821 }
7822 }
7823 else
7824 {
7826 }
7827 }
7828 else
7829 {
7831 }
7832
7833 break;
7834 #endif
7835
7836 }
7837
7839 {
7841 }
7842 }
7843
7844
7845
7846
7848 {
7849 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
7850 return plugin.GetID(
name);
7851 }
7852
7854 {
7855 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
7856 return plugin.GetName(id);
7857 }
7858
7861 {
7862
7863
7864 int varFlags;
7865 if (!ctx.
Read(varFlags))
7866 return;
7867
7868 if (varFlags & ItemVariableFlags.FLOAT)
7869 {
7871 }
7872 }
7873
7875 {
7876
7877 super.SerializeNumericalVars(floats_out);
7878
7879
7880
7882 {
7884 }
7885
7887 {
7889 }
7890
7892 {
7894 }
7895
7897 {
7902 }
7903
7905 {
7907 }
7908 }
7909
7911 {
7912
7913 super.DeSerializeNumericalVars(floats);
7914
7915
7916 int index = 0;
7917 int mask = Math.Round(floats.Get(index));
7918
7919 index++;
7920
7922 {
7924 {
7926 }
7927 else
7928 {
7929 float quantity = floats.Get(index);
7931 }
7932 index++;
7933 }
7934
7936 {
7937 float wet = floats.Get(index);
7939 index++;
7940 }
7941
7943 {
7944 int liquidtype = Math.Round(floats.Get(index));
7946 index++;
7947 }
7948
7950 {
7952 index++;
7954 index++;
7956 index++;
7958 index++;
7959 }
7960
7962 {
7963 int cleanness = Math.Round(floats.Get(index));
7965 index++;
7966 }
7967 }
7968
7970 {
7971 super.WriteVarsToCTX(ctx);
7972
7973
7975 {
7977 }
7978
7980 {
7982 }
7983
7985 {
7987 }
7988
7990 {
7991 int r,g,b,a;
7997 }
7998
8000 {
8002 }
8003 }
8004
8006 {
8007 if (!super.ReadVarsFromCTX(ctx,version))
8008 return false;
8009
8010 int intValue;
8011 float value;
8012
8013 if (version < 140)
8014 {
8015 if (!ctx.
Read(intValue))
8016 return false;
8017
8018 m_VariablesMask = intValue;
8019 }
8020
8022 {
8023 if (!ctx.
Read(value))
8024 return false;
8025
8027 {
8029 }
8030 else
8031 {
8033 }
8034 }
8035
8036 if (version < 140)
8037 {
8039 {
8040 if (!ctx.
Read(value))
8041 return false;
8042 SetTemperatureDirect(value);
8043 }
8044 }
8045
8047 {
8048 if (!ctx.
Read(value))
8049 return false;
8051 }
8052
8054 {
8055 if (!ctx.
Read(intValue))
8056 return false;
8058 }
8059
8061 {
8062 int r,g,b,a;
8064 return false;
8066 return false;
8068 return false;
8070 return false;
8071
8073 }
8074
8076 {
8077 if (!ctx.
Read(intValue))
8078 return false;
8080 }
8081
8082 if (version >= 138 && version < 140)
8083 {
8085 {
8086 if (!ctx.
Read(intValue))
8087 return false;
8088 SetFrozen(intValue);
8089 }
8090 }
8091
8092 return true;
8093 }
8094
8095
8097 {
8100 {
8102 }
8103
8104 if (!super.OnStoreLoad(ctx, version))
8105 {
8107 return false;
8108 }
8109
8110 if (version >= 114)
8111 {
8112 bool hasQuickBarIndexSaved;
8113
8114 if (!ctx.
Read(hasQuickBarIndexSaved))
8115 {
8117 return false;
8118 }
8119
8120 if (hasQuickBarIndexSaved)
8121 {
8122 int itmQBIndex;
8123
8124
8125 if (!ctx.
Read(itmQBIndex))
8126 {
8128 return false;
8129 }
8130
8131 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8132 if (itmQBIndex != -1 && parentPlayer)
8133 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8134 }
8135 }
8136 else
8137 {
8138
8139 PlayerBase player;
8140 int itemQBIndex;
8141 if (version ==
int.
MAX)
8142 {
8143 if (!ctx.
Read(itemQBIndex))
8144 {
8146 return false;
8147 }
8148 }
8149 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8150 {
8151
8152 if (!ctx.
Read(itemQBIndex))
8153 {
8155 return false;
8156 }
8157 if (itemQBIndex != -1 && player)
8158 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8159 }
8160 }
8161
8162 if (version < 140)
8163 {
8164
8165 if (!LoadVariables(ctx, version))
8166 {
8168 return false;
8169 }
8170 }
8171
8172
8174 {
8176 return false;
8177 }
8178 if (version >= 132)
8179 {
8181 if (raib)
8182 {
8184 {
8186 return false;
8187 }
8188 }
8189 }
8190
8192 return true;
8193 }
8194
8195
8196
8198 {
8199 super.OnStoreSave(ctx);
8200
8201 PlayerBase player;
8202 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8203 {
8205
8206 int itemQBIndex = -1;
8207 itemQBIndex = player.FindQuickBarEntityIndex(this);
8208 ctx.
Write(itemQBIndex);
8209 }
8210 else
8211 {
8213 }
8214
8216
8218 if (raib)
8219 {
8221 }
8222 }
8223
8224
8226 {
8227 super.AfterStoreLoad();
8228
8230 {
8232 }
8233
8235 {
8238 }
8239 }
8240
8242 {
8243 super.EEOnAfterLoad();
8244
8246 {
8248 }
8249
8252 }
8253
8255 {
8256 return false;
8257 }
8258
8259
8260
8262 {
8264 {
8265 #ifdef PLATFORM_CONSOLE
8266
8268 {
8270 if (menu)
8271 {
8273 }
8274 }
8275 #endif
8276 }
8277
8279 {
8282 }
8283
8285 {
8286 SetWeightDirty();
8288 }
8290 {
8293 }
8294
8296 {
8299 }
8301 {
8304 }
8305
8306 super.OnVariablesSynchronized();
8307 }
8308
8309
8310
8312 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8313 {
8314 if (!IsServerCheck(allow_client))
8315 return false;
8316
8318 return false;
8319
8322
8323 if (value <= (min + 0.001))
8324 value = min;
8325
8326 if (value == min)
8327 {
8328 if (destroy_config)
8329 {
8330 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8331 if (dstr)
8332 {
8334 this.Delete();
8335 return true;
8336 }
8337 }
8338 else if (destroy_forced)
8339 {
8341 this.Delete();
8342 return true;
8343 }
8344
8346 }
8347
8350
8352 {
8354
8355 if (delta)
8357 }
8358
8360
8361 return false;
8362 }
8363
8364
8366 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8367 {
8369 }
8370
8372 {
8375 }
8376
8378 {
8381 }
8382
8385 {
8386 float value_clamped = Math.Clamp(value, 0, 1);
8388 SetQuantity(result, destroy_config, destroy_forced);
8389 }
8390
8391
8394 {
8396 }
8397
8399 {
8401 }
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8413 {
8414 int slot = -1;
8415 if (GetInventory())
8416 {
8417 InventoryLocation il = new InventoryLocation;
8418 GetInventory().GetCurrentInventoryLocation(il);
8420 }
8421
8423 }
8424
8426 {
8427 float quantity_max = 0;
8428
8430 {
8431 if (attSlotID != -1)
8432 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8433
8434 if (quantity_max <= 0)
8436 }
8437
8438 if (quantity_max <= 0)
8440
8441 return quantity_max;
8442 }
8443
8445 {
8447 }
8448
8450 {
8452 }
8453
8454
8456 {
8458 }
8459
8461 {
8463 }
8464
8466 {
8468 }
8469
8470
8472 {
8473
8474 float weightEx = GetWeightEx();
8475 float special = GetInventoryAndCargoWeight();
8476 return weightEx - special;
8477 }
8478
8479
8481 {
8483 }
8484
8486 {
8488 {
8489 #ifdef DEVELOPER
8490 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8491 {
8492 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8494 }
8495 #endif
8496
8498 }
8499 else if (HasEnergyManager())
8500 {
8501 #ifdef DEVELOPER
8502 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8503 {
8504 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8505 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8506 }
8507 #endif
8508 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
8509 }
8510 else
8511 {
8512 #ifdef DEVELOPER
8513 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8514 {
8515 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
8516 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
8517 }
8518 #endif
8519 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
8520 }
8521 }
8522
8525 {
8526 int item_count = 0;
8528
8529 if (GetInventory().GetCargo() != NULL)
8530 {
8531 item_count = GetInventory().GetCargo().GetItemCount();
8532 }
8533
8534 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
8535 {
8536 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
8537 if (item)
8538 item_count += item.GetNumberOfItems();
8539 }
8540 return item_count;
8541 }
8542
8545 {
8546 float weight = 0;
8547 float wetness = 1;
8548 if (include_wetness)
8551 {
8552 weight = wetness * m_ConfigWeight;
8553 }
8555 {
8556 weight = 1;
8557 }
8558 return weight;
8559 }
8560
8561
8562
8564 {
8565 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
8566 {
8567 GameInventory inv = GetInventory();
8568 array<EntityAI> items = new array<EntityAI>;
8570 for (int i = 0; i < items.Count(); i++)
8571 {
8573 if (item)
8574 {
8576 }
8577 }
8578 }
8579 }
8580
8581
8582
8583
8585 {
8586 float energy = 0;
8587 if (HasEnergyManager())
8588 {
8589 energy = GetCompEM().GetEnergy();
8590 }
8591 return energy;
8592 }
8593
8594
8596 {
8597 super.OnEnergyConsumed();
8598
8600 }
8601
8603 {
8604 super.OnEnergyAdded();
8605
8607 }
8608
8609
8611 {
8612 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
8613 {
8615 {
8616 float energy_0to1 = GetCompEM().GetEnergy0To1();
8618 }
8619 }
8620 }
8621
8622
8624 {
8625 return ConfigGetFloat("heatIsolation");
8626 }
8627
8629 {
8631 }
8632
8634 {
8635 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
8636 if (
GetGame().ConfigIsExisting(paramPath))
8638
8639 return 0.0;
8640 }
8641
8643 {
8644 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
8645 if (
GetGame().ConfigIsExisting(paramPath))
8647
8648 return 0.0;
8649 }
8650
8651 override void SetWet(
float value,
bool allow_client =
false)
8652 {
8653 if (!IsServerCheck(allow_client))
8654 return;
8655
8658
8660
8661 m_VarWet = Math.Clamp(value, min, max);
8662
8664 {
8667 }
8668 }
8669
8670 override void AddWet(
float value)
8671 {
8673 }
8674
8676 {
8678 }
8679
8681 {
8683 }
8684
8686 {
8688 }
8689
8691 {
8693 }
8694
8696 {
8698 }
8699
8701 {
8704 if (newLevel != oldLevel)
8705 {
8707 }
8708 }
8709
8711 {
8712 SetWeightDirty();
8713 }
8714
8716 {
8717 return GetWetLevelInternal(
m_VarWet);
8718 }
8719
8720
8721
8723 {
8725 }
8726
8728 {
8730 }
8731
8733 {
8735 }
8736
8738 {
8740 }
8741
8742
8743
8745 {
8746 if (ConfigIsExisting("itemModelLength"))
8747 {
8748 return ConfigGetFloat("itemModelLength");
8749 }
8750 return 0;
8751 }
8752
8754 {
8755 if (ConfigIsExisting("itemAttachOffset"))
8756 {
8757 return ConfigGetFloat("itemAttachOffset");
8758 }
8759 return 0;
8760 }
8761
8762 override void SetCleanness(
int value,
bool allow_client =
false)
8763 {
8764 if (!IsServerCheck(allow_client))
8765 return;
8766
8768
8770
8773 }
8774
8776 {
8778 }
8779
8781 {
8782 return true;
8783 }
8784
8785
8786
8787
8789 {
8791 }
8792
8794 {
8796 }
8797
8798
8799
8800
8801 override void SetColor(
int r,
int g,
int b,
int a)
8802 {
8808 }
8810 override void GetColor(out
int r,out
int g,out
int b,out
int a)
8811 {
8816 }
8817
8819 {
8821 }
8822
8825 {
8826 int r,g,b,a;
8828 r = r/255;
8829 g = g/255;
8830 b = b/255;
8831 a = a/255;
8832 return MiscGameplayFunctions.GetColorString(r, g, b, a);
8833 }
8834
8835
8836
8837 override void SetLiquidType(
int value,
bool allow_client =
false)
8838 {
8839 if (!IsServerCheck(allow_client))
8840 return;
8841
8846 }
8847
8849 {
8850 return ConfigGetInt("varLiquidTypeInit");
8851 }
8852
8854 {
8856 }
8857
8859 {
8861 SetFrozen(false);
8862 }
8863
8866 {
8867 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
8868 }
8869
8870
8873 {
8874 PlayerBase nplayer;
8875 if (PlayerBase.CastTo(nplayer, player))
8876 {
8878
8879 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
8880 }
8881 }
8882
8883
8886 {
8887 PlayerBase nplayer;
8888 if (PlayerBase.CastTo(nplayer,player))
8889 {
8890
8891 nplayer.SetEnableQuickBarEntityShortcut(this,false);
8892
8893 }
8894
8895
8896 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
8897
8898
8899 if (HasEnergyManager())
8900 {
8901 GetCompEM().UpdatePlugState();
8902 }
8903 }
8904
8905
8907 {
8908 super.OnPlacementStarted(player);
8909
8911 }
8912
8913 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
8914 {
8916 {
8917 m_AdminLog.OnPlacementComplete(player,
this);
8918 }
8919
8920 super.OnPlacementComplete(player, position, orientation);
8921 }
8922
8923
8924
8925
8926
8928 {
8930 {
8931 return true;
8932 }
8933 else
8934 {
8935 return false;
8936 }
8937 }
8938
8939
8941 {
8943 {
8945 }
8946 }
8947
8948
8950 {
8952 }
8953
8955 {
8957 }
8958
8959 override void InsertAgent(
int agent,
float count = 1)
8960 {
8961 if (count < 1)
8962 return;
8963
8965 }
8966
8969 {
8971 }
8972
8973
8975 {
8977 }
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9021 {
9023 return false;
9024 return true;
9025 }
9026
9028 {
9029
9031 }
9032
9033
9036 {
9037 super.CheckForRoofLimited(timeTresholdMS);
9038
9040 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9041 {
9042 m_PreviousRoofTestTime = time;
9043 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9044 }
9045 }
9046
9047
9049 {
9051 {
9052 return 0;
9053 }
9054
9055 if (GetInventory().GetAttachmentSlotsCount() != 0)
9056 {
9057 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9058 if (filter)
9059 return filter.GetProtectionLevel(type, false, system);
9060 else
9061 return 0;
9062 }
9063
9064 string subclassPath, entryName;
9065
9066 switch (type)
9067 {
9069 entryName = "biological";
9070 break;
9072 entryName = "chemical";
9073 break;
9074 default:
9075 entryName = "biological";
9076 break;
9077 }
9078
9079 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9080
9082 }
9083
9084
9085
9088 {
9089 if (!IsMagazine())
9091
9093 }
9094
9095
9096
9097
9098
9103 {
9104 return true;
9105 }
9106
9108 {
9110 }
9111
9112
9113
9114
9115
9117 {
9118 if (parent)
9119 {
9120 if (parent.IsInherited(DayZInfected))
9121 return true;
9122
9123 if (!parent.IsRuined())
9124 return true;
9125 }
9126
9127 return true;
9128 }
9129
9131 {
9132 if (!super.CanPutAsAttachment(parent))
9133 {
9134 return false;
9135 }
9136
9137 if (!IsRuined() && !parent.IsRuined())
9138 {
9139 return true;
9140 }
9141
9142 return false;
9143 }
9144
9146 {
9147
9148
9149
9150
9151 return super.CanReceiveItemIntoCargo(item);
9152 }
9153
9155 {
9156
9157
9158
9159
9160 GameInventory attachmentInv = attachment.GetInventory();
9162 {
9163 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9164 return false;
9165 }
9166
9167 InventoryLocation loc = new InventoryLocation();
9168 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9169 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9170 return false;
9171
9172 return super.CanReceiveAttachment(attachment, slotId);
9173 }
9174
9176 {
9177 if (!super.CanReleaseAttachment(attachment))
9178 return false;
9179
9180 return GetInventory().AreChildrenAccessible();
9181 }
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9204 {
9205 int id = muzzle_owner.GetMuzzleID();
9206 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9207
9208 if (WPOF_array)
9209 {
9210 for (int i = 0; i < WPOF_array.Count(); i++)
9211 {
9212 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9213
9214 if (WPOF)
9215 {
9216 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9217 }
9218 }
9219 }
9220 }
9221
9222
9224 {
9225 int id = muzzle_owner.GetMuzzleID();
9227
9228 if (WPOBE_array)
9229 {
9230 for (int i = 0; i < WPOBE_array.Count(); i++)
9231 {
9232 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9233
9234 if (WPOBE)
9235 {
9236 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9237 }
9238 }
9239 }
9240 }
9241
9242
9244 {
9245 int id = muzzle_owner.GetMuzzleID();
9246 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9247
9248 if (WPOOH_array)
9249 {
9250 for (int i = 0; i < WPOOH_array.Count(); i++)
9251 {
9252 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9253
9254 if (WPOOH)
9255 {
9256 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9257 }
9258 }
9259 }
9260 }
9261
9262
9264 {
9265 int id = muzzle_owner.GetMuzzleID();
9266 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9267
9268 if (WPOOH_array)
9269 {
9270 for (int i = 0; i < WPOOH_array.Count(); i++)
9271 {
9272 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9273
9274 if (WPOOH)
9275 {
9276 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9277 }
9278 }
9279 }
9280 }
9281
9282
9284 {
9285 int id = muzzle_owner.GetMuzzleID();
9286 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9287
9288 if (WPOOH_array)
9289 {
9290 for (int i = 0; i < WPOOH_array.Count(); i++)
9291 {
9292 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9293
9294 if (WPOOH)
9295 {
9296 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9297 }
9298 }
9299 }
9300 }
9301
9302
9303
9305 {
9307 {
9308 return true;
9309 }
9310
9311 return false;
9312 }
9313
9315 {
9317 {
9318 return true;
9319 }
9320
9321 return false;
9322 }
9323
9325 {
9327 {
9328 return true;
9329 }
9330
9331 return false;
9332 }
9333
9335 {
9336 return false;
9337 }
9338
9341 {
9342 return UATimeSpent.DEFAULT_DEPLOY;
9343 }
9344
9345
9346
9347
9349 {
9351 SetSynchDirty();
9352 }
9353
9355 {
9357 }
9358
9359
9361 {
9362 return false;
9363 }
9364
9367 {
9368 string att_type = "None";
9369
9370 if (ConfigIsExisting("soundAttType"))
9371 {
9372 att_type = ConfigGetString("soundAttType");
9373 }
9374
9376 }
9377
9379 {
9381 }
9382
9383
9384
9385
9386
9390
9392 {
9395
9397 }
9398
9399
9401 {
9403 return;
9404
9406
9409
9412
9413 SoundParameters params = new SoundParameters();
9417 }
9418
9419
9421 {
9423 return;
9424
9426 SetSynchDirty();
9427
9430 }
9431
9432
9434 {
9436 return;
9437
9439 SetSynchDirty();
9440
9443 }
9444
9446 {
9448 }
9449
9451 {
9453 }
9454
9457 {
9458 if (!
GetGame().IsDedicatedServer())
9459 {
9460 if (ConfigIsExisting("attachSoundSet"))
9461 {
9462 string cfg_path = "";
9463 string soundset = "";
9465
9468 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9469 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9470
9471 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9472 {
9473 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9474 {
9475 if (cfg_slot_array[i] == slot_type)
9476 {
9477 soundset = cfg_soundset_array[i];
9478 break;
9479 }
9480 }
9481 }
9482
9483 if (soundset != "")
9484 {
9485 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9487 }
9488 }
9489 }
9490 }
9491
9493 {
9494
9495 }
9496
9497 void OnApply(PlayerBase player);
9498
9500 {
9501 return 1.0;
9502 };
9503
9505 {
9507 }
9508
9510 {
9512 }
9513
9515
9517 {
9518 SetDynamicPhysicsLifeTime(0.01);
9520 }
9521
9523 {
9524 array<string> zone_names = new array<string>;
9525 GetDamageZones(zone_names);
9526 for (int i = 0; i < zone_names.Count(); i++)
9527 {
9528 SetHealthMax(zone_names.Get(i),"Health");
9529 }
9530 SetHealthMax("","Health");
9531 }
9532
9535 {
9536 float global_health = GetHealth01("","Health");
9537 array<string> zones = new array<string>;
9538 GetDamageZones(zones);
9539
9540 for (int i = 0; i < zones.Count(); i++)
9541 {
9542 SetHealth01(zones.Get(i),"Health",global_health);
9543 }
9544 }
9545
9548 {
9549 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
9550 }
9551
9553 {
9554 if (!hasRootAsPlayer)
9555 {
9556 if (refParentIB)
9557 {
9558
9559 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
9560 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
9561
9562 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
9563 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
9564
9567 }
9568 else
9569 {
9570
9573 }
9574 }
9575 }
9576
9578 {
9580 {
9581 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
9582 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
9583 {
9584 float heatPermCoef = 1.0;
9586 while (ent)
9587 {
9588 heatPermCoef *= ent.GetHeatPermeabilityCoef();
9589 ent = ent.GetHierarchyParent();
9590 }
9591
9592 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
9593 }
9594 }
9595 }
9596
9598 {
9599
9600 EntityAI parent = GetHierarchyParent();
9601 if (!parent)
9602 {
9603 hasParent = false;
9604 hasRootAsPlayer = false;
9605 }
9606 else
9607 {
9608 hasParent = true;
9609 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
9610 refParentIB =
ItemBase.Cast(parent);
9611 }
9612 }
9613
9614 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
9615 {
9616
9617 }
9618
9620 {
9621
9622 return false;
9623 }
9624
9626 {
9627
9628
9629 return false;
9630 }
9631
9633 {
9634
9635 return false;
9636 }
9637
9640 {
9641 return !GetIsFrozen() &&
IsOpen();
9642 }
9643
9645 {
9646 bool hasParent = false, hasRootAsPlayer = false;
9648
9649 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
9650 bool foodDecay =
g_Game.IsFoodDecayEnabled();
9651
9652 if (wwtu || foodDecay)
9653 {
9657
9658 if (processWetness || processTemperature || processDecay)
9659 {
9661
9662 if (processWetness)
9663 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
9664
9665 if (processTemperature)
9667
9668 if (processDecay)
9669 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
9670 }
9671 }
9672 }
9673
9676 {
9678 }
9679
9681 {
9684
9685 return super.GetTemperatureFreezeThreshold();
9686 }
9687
9689 {
9692
9693 return super.GetTemperatureThawThreshold();
9694 }
9695
9697 {
9700
9701 return super.GetItemOverheatThreshold();
9702 }
9703
9705 {
9707 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
9708
9709 return super.GetTemperatureFreezeTime();
9710 }
9711
9713 {
9715 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
9716
9717 return super.GetTemperatureThawTime();
9718 }
9719
9724
9726 {
9727 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
9728 }
9729
9731 {
9732 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
9733 }
9734
9737 {
9739 }
9740
9742 {
9744 }
9745
9747 {
9749 }
9750
9753 {
9754 return null;
9755 }
9756
9759 {
9760 return false;
9761 }
9762
9764 {
9766 {
9769 if (!trg)
9770 {
9772 explosive = this;
9773 }
9774
9775 explosive.PairRemote(trg);
9777
9778 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
9779 trg.SetPersistentPairID(persistentID);
9780 explosive.SetPersistentPairID(persistentID);
9781
9782 return true;
9783 }
9784 return false;
9785 }
9786
9789 {
9790 float ret = 1.0;
9793 ret *= GetHealth01();
9794
9795 return ret;
9796 }
9797
9798 #ifdef DEVELOPER
9799 override void SetDebugItem()
9800 {
9801 super.SetDebugItem();
9802 _itemBase = this;
9803 }
9804
9806 {
9807 string text = super.GetDebugText();
9808
9810 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
9811
9812 return text;
9813 }
9814 #endif
9815
9817 {
9818 return true;
9819 }
9820
9822
9824
9826 {
9829 }
9830
9831
9839
9855}
9856
9858{
9860 if (entity)
9861 {
9862 bool is_item = entity.IsInherited(
ItemBase);
9863 if (is_item && full_quantity)
9864 {
9867 }
9868 }
9869 else
9870 {
9872 return NULL;
9873 }
9874 return entity;
9875}
9876
9878{
9879 if (item)
9880 {
9881 if (health > 0)
9882 item.SetHealth("", "", health);
9883
9884 if (item.CanHaveTemperature())
9885 {
9887 if (item.CanFreeze())
9888 item.SetFrozen(false);
9889 }
9890
9891 if (item.HasEnergyManager())
9892 {
9893 if (quantity >= 0)
9894 {
9895 item.GetCompEM().SetEnergy0To1(quantity);
9896 }
9897 else
9898 {
9900 }
9901 }
9902 else if (item.IsMagazine())
9903 {
9904 Magazine mag = Magazine.Cast(item);
9905 if (quantity >= 0)
9906 {
9907 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
9908 }
9909 else
9910 {
9912 }
9913
9914 }
9915 else
9916 {
9917 if (quantity >= 0)
9918 {
9919 item.SetQuantityNormalized(quantity, false);
9920 }
9921 else
9922 {
9924 }
9925
9926 }
9927 }
9928}
9929
9930#ifdef DEVELOPER
9932#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.