5090{
5092 {
5093 return true;
5094 }
5095};
5096
5097
5098
5100{
5104
5106
5109
5110
5111
5112
5113
5122
5128
5133
5138
5159 protected bool m_IsResultOfSplit
5160
5162
5167
5168
5169
5171
5175
5176
5177
5179
5182
5183
5184
5190
5191
5199
5202
5203
5205
5206
5208
5209
5214
5215
5220
5221
5223
5224
5226 {
5231
5232 if (!
GetGame().IsDedicatedServer())
5233 {
5235 {
5237
5239 {
5241 }
5242 }
5243
5246 }
5247
5248 m_OldLocation = null;
5249
5251 {
5253 }
5254
5255 if (ConfigIsExisting("headSelectionsToHide"))
5256 {
5259 }
5260
5262 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5263 {
5265 }
5266
5268
5269 m_IsResultOfSplit = false;
5270
5272 }
5273
5275 {
5276 super.InitItemVariables();
5277
5283 m_Count = ConfigGetInt(
"count");
5284
5287
5292
5295
5300
5312
5316
5317
5320 if (ConfigIsExisting("canBeSplit"))
5321 {
5324 }
5325
5327 if (ConfigIsExisting("itemBehaviour"))
5329
5330
5333 RegisterNetSyncVariableInt("m_VarLiquidType");
5334 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5335
5336 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5337 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5338 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5339
5340 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5341 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5342 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5343 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5344
5345 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5346 RegisterNetSyncVariableBool("m_IsTakeable");
5347 RegisterNetSyncVariableBool("m_IsHologram");
5348
5351 {
5354 }
5355
5357
5359 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5361
5362 }
5363
5365 {
5367 }
5368
5370 {
5373 {
5378 }
5379 }
5380
5381 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5382 {
5384 {
5387 }
5388
5390 }
5391
5393 {
5399 }
5400
5402
5404 {
5406
5407 if (!action)
5408 {
5409 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5410 return;
5411 }
5412
5414 if (!ai)
5415 {
5417 return;
5418 }
5419
5421 if (!action_array)
5422 {
5423 action_array = new array<ActionBase_Basic>;
5425 }
5426 if (LogManager.IsActionLogEnable())
5427 {
5428 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5429 }
5430
5431 if (action_array.Find(action) != -1)
5432 {
5433 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5434 }
5435 else
5436 {
5437 action_array.Insert(action);
5438 }
5439 }
5440
5442 {
5444 ActionBase action = player.GetActionManager().GetAction(actionName);
5447
5448 if (action_array)
5449 {
5450 action_array.RemoveItem(action);
5451 }
5452 }
5453
5454
5455
5457 {
5458 ActionOverrideData overrideData = new ActionOverrideData();
5462
5464 if (!actionMap)
5465 {
5468 }
5469
5470 actionMap.Insert(this.
Type(), overrideData);
5471
5472 }
5473
5475
5477
5478
5480 {
5483
5486
5487 string config_to_search = "CfgVehicles";
5488 string muzzle_owner_config;
5489
5491 {
5492 if (IsInherited(Weapon))
5493 config_to_search = "CfgWeapons";
5494
5495 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5496
5497 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5498
5500
5501 if (config_OnFire_subclass_count > 0)
5502 {
5503 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5504
5505 for (int i = 0; i < config_OnFire_subclass_count; i++)
5506 {
5507 string particle_class = "";
5509 string config_OnFire_entry = config_OnFire_class + particle_class;
5510 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5511 WPOF_array.Insert(WPOF);
5512 }
5513
5514
5516 }
5517 }
5518
5520 {
5521 config_to_search = "CfgWeapons";
5522 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5523
5524 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
5525
5527
5528 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
5529 {
5530 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
5531
5532 for (i = 0; i < config_OnBulletCasingEject_count; i++)
5533 {
5534 string particle_class2 = "";
5536 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
5537 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
5538 WPOBE_array.Insert(WPOBE);
5539 }
5540
5541
5543 }
5544 }
5545 }
5546
5547
5549 {
5552
5554 {
5555 string config_to_search = "CfgVehicles";
5556
5557 if (IsInherited(Weapon))
5558 config_to_search = "CfgWeapons";
5559
5560 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5561 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
5562
5563 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
5564 {
5565
5567
5569 {
5571 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
5573 return;
5574 }
5575
5578
5579
5580
5582 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
5583
5584 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
5585 {
5586 string particle_class = "";
5588 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
5590
5591 if (entry_type == CT_CLASS)
5592 {
5593 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
5594 WPOOH_array.Insert(WPOF);
5595 }
5596 }
5597
5598
5600 }
5601 }
5602 }
5603
5605 {
5607 }
5608
5610 {
5612 {
5614
5617
5620
5621 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5622 }
5623 }
5624
5626 {
5628 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5629
5631 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5632
5634 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5635
5637 {
5639 }
5640 }
5641
5643 {
5645 }
5646
5648 {
5651 else
5653
5655 {
5658 }
5659 else
5660 {
5663
5666 }
5667
5669 }
5670
5672 {
5674 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5675 }
5676
5678 {
5680 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5682 }
5683
5685 {
5687 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5688 }
5689
5691 {
5694
5695 OverheatingParticle OP = new OverheatingParticle();
5700
5702 }
5703
5705 {
5708
5709 return -1;
5710 }
5711
5713 {
5715 {
5718
5719 for (int i = count; i > 0; --i)
5720 {
5721 int id = i - 1;
5724
5727
5728 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
5729 {
5730 if (p)
5731 {
5734 }
5735 }
5736 }
5737 }
5738 }
5739
5741 {
5743 {
5745 {
5746 int id = i - 1;
5748
5749 if (OP)
5750 {
5752
5753 if (p)
5754 {
5756 }
5757
5758 delete OP;
5759 }
5760 }
5761
5764 }
5765 }
5766
5769 {
5770 return 0.0;
5771 }
5772
5773
5775 {
5776 return 250;
5777 }
5778
5780 {
5781 return 0;
5782 }
5783
5786 {
5788 return true;
5789
5790 return false;
5791 }
5792
5795 {
5798
5800 {
5802 }
5803 else
5804 {
5805
5807 }
5808
5810 }
5811
5818 {
5819 return -1;
5820 }
5821
5822
5823
5824
5826 {
5828 {
5830 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
5831
5832 if (r_index >= 0)
5833 {
5834 InventoryLocation r_il = new InventoryLocation;
5835 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
5836
5837 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
5840 {
5841 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
5842 }
5844 {
5845 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
5846 }
5847
5848 }
5849
5850 player.GetHumanInventory().ClearUserReservedLocation(this);
5851 }
5852
5855 }
5856
5857
5858
5859
5861 {
5862 return ItemBase.m_DebugActionsMask;
5863 }
5864
5866 {
5867 return ItemBase.m_DebugActionsMask & mask;
5868 }
5869
5871 {
5872 ItemBase.m_DebugActionsMask = mask;
5873 }
5874
5876 {
5877 ItemBase.m_DebugActionsMask |= mask;
5878 }
5879
5881 {
5882 ItemBase.m_DebugActionsMask &= ~mask;
5883 }
5884
5886 {
5888 {
5890 }
5891 else
5892 {
5894 }
5895 }
5896
5897
5899 {
5900 if (GetEconomyProfile())
5901 {
5902 float q_max = GetEconomyProfile().GetQuantityMax();
5903 if (q_max > 0)
5904 {
5905 float q_min = GetEconomyProfile().GetQuantityMin();
5906 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
5907
5909 {
5910 ComponentEnergyManager comp = GetCompEM();
5912 {
5914 }
5915 }
5917 {
5919
5920 }
5921
5922 }
5923 }
5924 }
5925
5928 {
5929 EntityAI parent = GetHierarchyParent();
5930
5931 if (parent)
5932 {
5933 InventoryLocation inventory_location_to_lock = new InventoryLocation;
5934 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
5935 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
5936 }
5937 }
5938
5941 {
5942 EntityAI parent = GetHierarchyParent();
5943
5944 if (parent)
5945 {
5946 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
5947 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
5948 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
5949 }
5950 }
5951
5953 {
5954
5955
5956
5957
5959
5961 {
5962 if (ScriptInputUserData.CanStoreInputUserData())
5963 {
5964 ScriptInputUserData ctx = new ScriptInputUserData;
5970 ctx.
Write(use_stack_max);
5973
5975 {
5976 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
5977 }
5978 }
5979 }
5980 else if (!
GetGame().IsMultiplayer())
5981 {
5983 }
5984 }
5985
5987 {
5989 }
5990
5992 {
5994 }
5995
5997 {
5999 }
6000
6002 {
6003
6004 return false;
6005 }
6006
6008 {
6009 return false;
6010 }
6011
6015 {
6016 return false;
6017 }
6018
6020 {
6021 return "";
6022 }
6023
6025
6027 {
6028 return false;
6029 }
6030
6032 {
6033 return true;
6034 }
6035
6036
6037
6039 {
6040 return true;
6041 }
6042
6044 {
6045 return true;
6046 }
6047
6049 {
6050 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6052 }
6053
6055 {
6057 }
6058
6060 {
6062 if (!is_being_placed)
6064 SetSynchDirty();
6065 }
6066
6067
6069
6071 {
6073 }
6074
6076 {
6078 }
6079
6081 {
6082 return 1;
6083 }
6084
6086 {
6087 return false;
6088 }
6089
6091 {
6093 SetSynchDirty();
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
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6131 {
6132 super.OnMovedInsideCargo(container);
6133
6134 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6135 }
6136
6137 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6138 {
6139 super.EEItemLocationChanged(oldLoc,newLoc);
6140
6141 PlayerBase new_player = null;
6142 PlayerBase old_player = null;
6143
6144 if (newLoc.GetParent())
6145 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6146
6147 if (oldLoc.GetParent())
6148 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6149
6151 {
6152 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6153
6154 if (r_index >= 0)
6155 {
6156 InventoryLocation r_il = new InventoryLocation;
6157 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6158
6159 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6162 {
6163 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6164 }
6166 {
6167 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6168 }
6169
6170 }
6171 }
6172
6174 {
6175 if (new_player)
6176 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6177
6178 if (new_player == old_player)
6179 {
6180
6181 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6182 {
6184 {
6185 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6186 {
6187 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6188 }
6189 }
6190 else
6191 {
6192 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6193 }
6194 }
6195
6196 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6197 {
6198 int type = oldLoc.GetType();
6200 {
6201 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6202 }
6204 {
6205 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6206 }
6207 }
6208 if (!m_OldLocation)
6209 {
6210 m_OldLocation = new InventoryLocation;
6211 }
6212 m_OldLocation.Copy(oldLoc);
6213 }
6214 else
6215 {
6216 if (m_OldLocation)
6217 {
6218 m_OldLocation.Reset();
6219 }
6220 }
6221
6223 }
6224 else
6225 {
6226 if (new_player)
6227 {
6228 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6229 if (res_index >= 0)
6230 {
6231 InventoryLocation il = new InventoryLocation;
6232 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6234 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6237 {
6238 il.
GetParent().GetOnReleaseLock().Invoke(it);
6239 }
6241 {
6243 }
6244
6245 }
6246 }
6248 {
6249
6251 }
6252
6253 if (m_OldLocation)
6254 {
6255 m_OldLocation.Reset();
6256 }
6257 }
6258 }
6259
6260 override void EOnContact(IEntity other, Contact extra)
6261 {
6263 {
6264 int liquidType = -1;
6266 if (impactSpeed > 0.0)
6267 {
6269 #ifndef SERVER
6271 #else
6273 SetSynchDirty();
6274 #endif
6276 }
6277 }
6278
6279 #ifdef SERVER
6280 if (GetCompEM() && GetCompEM().IsPlugged())
6281 {
6282 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6283 GetCompEM().UnplugThis();
6284 }
6285 #endif
6286 }
6287
6289
6291 {
6293 }
6294
6296 {
6297
6298 }
6299
6301 {
6302 super.OnItemLocationChanged(old_owner, new_owner);
6303
6304 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6305 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6306
6307 if (!relatedPlayer && playerNew)
6308 relatedPlayer = playerNew;
6309
6310 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6311 {
6313 if (actionMgr)
6314 {
6315 ActionBase currentAction = actionMgr.GetRunningAction();
6316 if (currentAction)
6318 }
6319 }
6320
6321 Man ownerPlayerOld = null;
6322 Man ownerPlayerNew = null;
6323
6324 if (old_owner)
6325 {
6326 if (old_owner.
IsMan())
6327 {
6328 ownerPlayerOld = Man.Cast(old_owner);
6329 }
6330 else
6331 {
6332 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6333 }
6334 }
6335 else
6336 {
6338 {
6340
6341 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6342 {
6343 GetCompEM().UnplugThis();
6344 }
6345 }
6346 }
6347
6348 if (new_owner)
6349 {
6350 if (new_owner.
IsMan())
6351 {
6352 ownerPlayerNew = Man.Cast(new_owner);
6353 }
6354 else
6355 {
6356 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6357 }
6358 }
6359
6360 if (ownerPlayerOld != ownerPlayerNew)
6361 {
6362 if (ownerPlayerOld)
6363 {
6364 array<EntityAI> subItemsExit = new array<EntityAI>;
6366 for (int i = 0; i < subItemsExit.Count(); i++)
6367 {
6370 }
6371 }
6372
6373 if (ownerPlayerNew)
6374 {
6375 array<EntityAI> subItemsEnter = new array<EntityAI>;
6377 for (int j = 0; j < subItemsEnter.Count(); j++)
6378 {
6381 }
6382 }
6383 }
6384 else if (ownerPlayerNew != null)
6385 {
6386 PlayerBase nplayer;
6387 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6388 {
6389 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6391 for (int k = 0; k < subItemsUpdate.Count(); k++)
6392 {
6394 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6395 }
6396 }
6397 }
6398
6399 if (old_owner)
6400 old_owner.OnChildItemRemoved(this);
6401 if (new_owner)
6402 new_owner.OnChildItemReceived(this);
6403 }
6404
6405
6407 {
6408 super.EEDelete(parent);
6409 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6410 if (player)
6411 {
6413
6414 if (player.IsAlive())
6415 {
6416 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6417 if (r_index >= 0)
6418 {
6419 InventoryLocation r_il = new InventoryLocation;
6420 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6421
6422 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6425 {
6426 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6427 }
6429 {
6430 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6431 }
6432
6433 }
6434
6435 player.RemoveQuickBarEntityShortcut(this);
6436 }
6437 }
6438 }
6439
6441 {
6442 super.EEKilled(killer);
6443
6446 {
6447 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6448 {
6449 if (IsMagazine())
6450 {
6451 if (Magazine.Cast(this).GetAmmoCount() > 0)
6452 {
6454 }
6455 }
6456 else
6457 {
6459 }
6460 }
6461 }
6462 }
6463
6465 {
6466 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6467
6468 super.OnWasAttached(parent, slot_id);
6469
6472
6474 }
6475
6477 {
6478 super.OnWasDetached(parent, slot_id);
6479
6482 }
6483
6485 {
6486 int idx;
6489
6490 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6491 if (inventory_slots.Count() < 1)
6492 {
6493 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6494 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6495 }
6496 else
6497 {
6498 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6499 }
6500
6501 idx = inventory_slots.Find(slot);
6502 if (idx < 0)
6503 return "";
6504
6505 return attach_types.Get(idx);
6506 }
6507
6509 {
6510 int idx = -1;
6511 string slot;
6512
6515
6516 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6517 if (inventory_slots.Count() < 1)
6518 {
6519 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
6520 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6521 }
6522 else
6523 {
6524 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
6525 if (detach_types.Count() < 1)
6526 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6527 }
6528
6529 for (int i = 0; i < inventory_slots.Count(); i++)
6530 {
6531 slot = inventory_slots.Get(i);
6532 }
6533
6534 if (slot != "")
6535 {
6536 if (detach_types.Count() == 1)
6537 idx = 0;
6538 else
6539 idx = inventory_slots.Find(slot);
6540 }
6541 if (idx < 0)
6542 return "";
6543
6544 return detach_types.Get(idx);
6545 }
6546
6548 {
6549
6551
6552
6553 float min_time = 1;
6554 float max_time = 3;
6555 float delay = Math.RandomFloat(min_time, max_time);
6556
6557 explode_timer.Run(delay, this, "DoAmmoExplosion");
6558 }
6559
6561 {
6562 Magazine magazine = Magazine.Cast(this);
6563 int pop_sounds_count = 6;
6564 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
6565
6566
6567 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
6568 string sound_name = pop_sounds[ sound_idx ];
6570
6571
6572 magazine.ServerAddAmmoCount(-1);
6573
6574
6575 float min_temp_to_explode = 100;
6576
6577 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
6578 {
6580 }
6581 }
6582
6583
6584 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
6585 {
6586 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
6587
6588 const int CHANCE_DAMAGE_CARGO = 4;
6589 const int CHANCE_DAMAGE_ATTACHMENT = 1;
6590 const int CHANCE_DAMAGE_NOTHING = 2;
6591
6593 {
6594 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
6595 int chances;
6596 int rnd;
6597
6598 if (GetInventory().GetCargo())
6599 {
6600 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6601 rnd = Math.RandomInt(0,chances);
6602
6603 if (rnd < CHANCE_DAMAGE_CARGO)
6604 {
6606 }
6607 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
6608 {
6610 }
6611 }
6612 else
6613 {
6614 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6615 rnd = Math.RandomInt(0,chances);
6616
6617 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
6618 {
6620 }
6621 }
6622 }
6623 }
6624
6626 {
6627 if (GetInventory().GetCargo())
6628 {
6629 int item_count = GetInventory().GetCargo().GetItemCount();
6630 if (item_count > 0)
6631 {
6632 int random_pick = Math.RandomInt(0, item_count);
6634 if (!item.IsExplosive())
6635 {
6636 item.AddHealth("","",damage);
6637 return true;
6638 }
6639 }
6640 }
6641 return false;
6642 }
6643
6645 {
6646 int attachment_count = GetInventory().AttachmentCount();
6647 if (attachment_count > 0)
6648 {
6649 int random_pick = Math.RandomInt(0, attachment_count);
6650 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
6651 if (!attachment.IsExplosive())
6652 {
6653 attachment.AddHealth("","",damage);
6654 return true;
6655 }
6656 }
6657 return false;
6658 }
6659
6661 {
6663 }
6664
6666 {
6668 return GetInventory().CanRemoveEntity();
6669
6670 return false;
6671 }
6672
6674 {
6676 return;
6677
6679 {
6680 if (ScriptInputUserData.CanStoreInputUserData())
6681 {
6682 ScriptInputUserData ctx = new ScriptInputUserData;
6687 ctx.
Write(destination_entity);
6691 }
6692 }
6693 else if (!
GetGame().IsMultiplayer())
6694 {
6696 }
6697 }
6698
6700 {
6702 return;
6703
6704 float split_quantity_new;
6708 InventoryLocation loc = new InventoryLocation;
6709
6710 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6711 {
6713 split_quantity_new = stack_max;
6714 else
6716
6717 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
6718 if (new_item)
6719 {
6720 new_item.SetResultOfSplit(true);
6721 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6723 new_item.SetQuantity(split_quantity_new);
6724 }
6725 }
6726 else if (destination_entity && slot_id == -1)
6727 {
6728 if (quantity > stack_max)
6729 split_quantity_new = stack_max;
6730 else
6731 split_quantity_new = quantity;
6732
6734 {
6737 }
6738
6739 if (new_item)
6740 {
6741 new_item.SetResultOfSplit(true);
6742 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6744 new_item.SetQuantity(split_quantity_new);
6745 }
6746 }
6747 else
6748 {
6749 if (stack_max != 0)
6750 {
6752 {
6754 }
6755
6756 if (split_quantity_new == 0)
6757 {
6758 if (!
GetGame().IsMultiplayer())
6759 player.PhysicalPredictiveDropItem(this);
6760 else
6761 player.ServerDropEntity(this);
6762 return;
6763 }
6764
6766
6767 if (new_item)
6768 {
6769 new_item.SetResultOfSplit(true);
6770 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6772 new_item.SetQuantity(stack_max);
6773 new_item.PlaceOnSurface();
6774 }
6775 }
6776 }
6777 }
6778
6780 {
6782 return;
6783
6784 float split_quantity_new;
6788 InventoryLocation loc = new InventoryLocation;
6789
6790 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6791 {
6793 split_quantity_new = stack_max;
6794 else
6796
6797 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
6798 if (new_item)
6799 {
6800 new_item.SetResultOfSplit(true);
6801 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6803 new_item.SetQuantity(split_quantity_new);
6804 }
6805 }
6806 else if (destination_entity && slot_id == -1)
6807 {
6808 if (quantity > stack_max)
6809 split_quantity_new = stack_max;
6810 else
6811 split_quantity_new = quantity;
6812
6814 {
6817 }
6818
6819 if (new_item)
6820 {
6821 new_item.SetResultOfSplit(true);
6822 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6824 new_item.SetQuantity(split_quantity_new);
6825 }
6826 }
6827 else
6828 {
6829 if (stack_max != 0)
6830 {
6832 {
6834 }
6835
6837
6838 if (new_item)
6839 {
6840 new_item.SetResultOfSplit(true);
6841 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6843 new_item.SetQuantity(stack_max);
6844 new_item.PlaceOnSurface();
6845 }
6846 }
6847 }
6848 }
6849
6851 {
6853 return;
6854
6856 {
6857 if (ScriptInputUserData.CanStoreInputUserData())
6858 {
6859 ScriptInputUserData ctx = new ScriptInputUserData;
6864 dst.WriteToContext(ctx);
6866 }
6867 }
6868 else if (!
GetGame().IsMultiplayer())
6869 {
6871 }
6872 }
6873
6875 {
6877 return;
6878
6880 {
6881 if (ScriptInputUserData.CanStoreInputUserData())
6882 {
6883 ScriptInputUserData ctx = new ScriptInputUserData;
6888 ctx.
Write(destination_entity);
6894 }
6895 }
6896 else if (!
GetGame().IsMultiplayer())
6897 {
6899 }
6900 }
6901
6903 {
6905 }
6906
6908 {
6910 return this;
6911
6913 float split_quantity_new;
6915 if (dst.IsValid())
6916 {
6917 int slot_id = dst.GetSlot();
6919
6920 if (quantity > stack_max)
6921 split_quantity_new = stack_max;
6922 else
6923 split_quantity_new = quantity;
6924
6926
6927 if (new_item)
6928 {
6929 new_item.SetResultOfSplit(true);
6930 MiscGameplayFunctions.TransferItemProperties(this,new_item);
6933 }
6934
6935 return new_item;
6936 }
6937
6938 return null;
6939 }
6940
6942 {
6944 return;
6945
6947 float split_quantity_new;
6949 if (destination_entity)
6950 {
6952 if (quantity > stackable)
6953 split_quantity_new = stackable;
6954 else
6955 split_quantity_new = quantity;
6956
6957 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
6958 if (new_item)
6959 {
6960 new_item.SetResultOfSplit(true);
6961 MiscGameplayFunctions.TransferItemProperties(this,new_item);
6963 new_item.SetQuantity(split_quantity_new);
6964 }
6965 }
6966 }
6967
6969 {
6971 return;
6972
6974 {
6975 if (ScriptInputUserData.CanStoreInputUserData())
6976 {
6977 ScriptInputUserData ctx = new ScriptInputUserData;
6982 ItemBase destination_entity =
this;
6983 ctx.
Write(destination_entity);
6987 }
6988 }
6989 else if (!
GetGame().IsMultiplayer())
6990 {
6992 }
6993 }
6994
6996 {
6998 return;
6999
7001 float split_quantity_new;
7003 if (player)
7004 {
7006 if (quantity > stackable)
7007 split_quantity_new = stackable;
7008 else
7009 split_quantity_new = quantity;
7010
7011 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7012 new_item =
ItemBase.Cast(in_hands);
7013 if (new_item)
7014 {
7015 new_item.SetResultOfSplit(true);
7016 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7018 new_item.SetQuantity(split_quantity_new);
7019 }
7020 }
7021 }
7022
7024 {
7026 return;
7027
7029 float split_quantity_new = Math.Floor(quantity * 0.5);
7030
7032
7033 if (new_item)
7034 {
7035 if (new_item.GetQuantityMax() < split_quantity_new)
7036 {
7037 split_quantity_new = new_item.GetQuantityMax();
7038 }
7039
7040 new_item.SetResultOfSplit(true);
7041 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7042
7044 {
7047 }
7048 else
7049 {
7052 }
7053 }
7054 }
7055
7057 {
7059 return;
7060
7062 float split_quantity_new = Math.Floor(quantity / 2);
7063
7064 InventoryLocation invloc = new InventoryLocation;
7066
7068 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7069
7070 if (new_item)
7071 {
7072 if (new_item.GetQuantityMax() < split_quantity_new)
7073 {
7074 split_quantity_new = new_item.GetQuantityMax();
7075 }
7077 {
7080 }
7081 else
7082 {
7085 }
7086 }
7087 }
7088
7091 {
7092 SetWeightDirty();
7094
7095 if (parent)
7096 parent.OnAttachmentQuantityChangedEx(this, delta);
7097
7099 {
7101 {
7103 }
7105 {
7106 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7108 }
7109 }
7110
7111 }
7112
7115 {
7116
7117 }
7118
7121 {
7123 }
7124
7126 {
7127 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7128
7130 {
7131 if (newLevel == GameConstants.STATE_RUINED)
7132 {
7134 EntityAI parent = GetHierarchyParent();
7135 if (parent && parent.IsFireplace())
7136 {
7137 CargoBase cargo = GetInventory().GetCargo();
7138 if (cargo)
7139 {
7141 {
7143 }
7144 }
7145 }
7146 }
7147
7149 {
7150
7152 return;
7153 }
7154
7155 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7156 {
7158 }
7159 }
7160 }
7161
7162
7164 {
7165 super.OnRightClick();
7166
7168 {
7170 {
7171 if (ScriptInputUserData.CanStoreInputUserData())
7172 {
7173 vector m4[4];
7175
7176 EntityAI root = GetHierarchyRoot();
7177
7178 InventoryLocation dst = new InventoryLocation;
7180 {
7181 if (root)
7182 {
7183 root.GetTransform(m4);
7185 }
7186 else
7187 GetInventory().GetCurrentInventoryLocation(dst);
7188 }
7189 else
7190 {
7192
7193
7194 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7195 {
7196 if (root)
7197 {
7198 root.GetTransform(m4);
7200 }
7201 else
7202 GetInventory().GetCurrentInventoryLocation(dst);
7203 }
7204 else
7205 {
7206 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7207 }
7208 }
7209
7210 ScriptInputUserData ctx = new ScriptInputUserData;
7218 }
7219 }
7220 else if (!
GetGame().IsMultiplayer())
7221 {
7223 }
7224 }
7225 }
7226
7227 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7228 {
7229
7230 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7231 return false;
7232
7233 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7234 return false;
7235
7236
7238 return false;
7239
7240
7241 Magazine mag = Magazine.Cast(this);
7242 if (mag)
7243 {
7244 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7245 return false;
7246
7247 if (stack_max_limit)
7248 {
7249 Magazine other_mag = Magazine.Cast(other_item);
7250 if (other_item)
7251 {
7252 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7253 return false;
7254 }
7255
7256 }
7257 }
7258 else
7259 {
7260
7262 return false;
7263
7265 return false;
7266 }
7267
7268 PlayerBase player = null;
7269 if (CastTo(player, GetHierarchyRootPlayer()))
7270 {
7271 if (player.GetInventory().HasAttachment(this))
7272 return false;
7273
7274 if (player.IsItemsToDelete())
7275 return false;
7276 }
7277
7278 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7279 return false;
7280
7281 int slotID;
7283 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7284 return false;
7285
7286 return true;
7287 }
7288
7290 {
7292 }
7293
7295 {
7296 return m_IsResultOfSplit;
7297 }
7298
7300 {
7301 m_IsResultOfSplit = value;
7302 }
7303
7305 {
7307 }
7308
7310 {
7311 float other_item_quantity = other_item.GetQuantity();
7312 float this_free_space;
7313
7315
7317
7318 if (other_item_quantity > this_free_space)
7319 {
7320 return this_free_space;
7321 }
7322 else
7323 {
7324 return other_item_quantity;
7325 }
7326 }
7327
7329 {
7331 }
7332
7334 {
7336 return;
7337
7338 if (!IsMagazine() && other_item)
7339 {
7341 if (quantity_used != 0)
7342 {
7343 float hp1 = GetHealth01("","");
7344 float hp2 = other_item.GetHealth01("","");
7345 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7346 hpResult = hpResult / (
GetQuantity() + quantity_used);
7347
7348 hpResult *= GetMaxHealth();
7349 Math.Round(hpResult);
7350 SetHealth("", "Health", hpResult);
7351
7353 other_item.AddQuantity(-quantity_used);
7354 }
7355 }
7357 }
7358
7360 {
7361 #ifdef SERVER
7362 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7363 GetHierarchyParent().IncreaseLifetimeUp();
7364 #endif
7365 };
7366
7368 {
7369 PlayerBase p = PlayerBase.Cast(player);
7370
7371 array<int> recipesIds = p.m_Recipes;
7372 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7373 if (moduleRecipesManager)
7374 {
7375 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7376 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7377 }
7378
7379 for (int i = 0;i < recipesIds.Count(); i++)
7380 {
7381 int key = recipesIds.Get(i);
7382 string recipeName = moduleRecipesManager.GetRecipeName(key);
7384 }
7385 }
7386
7387
7388 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7389 {
7390 super.GetDebugActions(outputList);
7391
7392
7397
7398
7402
7406
7407
7410
7411
7413 {
7416 }
7417
7419
7422
7426 }
7427
7428
7429
7430
7432 {
7433 super.OnAction(action_id, player, ctx);
7434 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7435 {
7436 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7437 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7438 PlayerBase p = PlayerBase.Cast(player);
7439 if (
EActions.RECIPES_RANGE_START < 1000)
7440 {
7441 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7442 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7443 }
7444 }
7445 #ifndef SERVER
7446 else if (action_id ==
EActions.WATCH_PLAYER)
7447 {
7448 PluginDeveloper.SetDeveloperItemClientEx(player);
7449 }
7450 #endif
7452 {
7453 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7454 {
7455 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7456 OnDebugButtonPressServer(id + 1);
7457 }
7458
7459 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7460 {
7461 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7463 }
7464
7465 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7466 {
7467 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7469 }
7470
7471 else if (action_id ==
EActions.ADD_QUANTITY)
7472 {
7473 if (IsMagazine())
7474 {
7475 Magazine mag = Magazine.Cast(this);
7476 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7477 }
7478 else
7479 {
7481 }
7482
7483 if (m_EM)
7484 {
7485 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7486 }
7487
7488 }
7489
7490 else if (action_id ==
EActions.REMOVE_QUANTITY)
7491 {
7492 if (IsMagazine())
7493 {
7494 Magazine mag2 = Magazine.Cast(this);
7495 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7496 }
7497 else
7498 {
7500 }
7501 if (m_EM)
7502 {
7503 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7504 }
7505
7506 }
7507
7508 else if (action_id ==
EActions.SET_QUANTITY_0)
7509 {
7511
7512 if (m_EM)
7513 {
7514 m_EM.SetEnergy(0);
7515 }
7516 }
7517
7518 else if (action_id ==
EActions.SET_MAX_QUANTITY)
7519 {
7521
7522 if (m_EM)
7523 {
7524 m_EM.SetEnergy(m_EM.GetEnergyMax());
7525 }
7526 }
7527
7528 else if (action_id ==
EActions.ADD_HEALTH)
7529 {
7530 AddHealth("","",GetMaxHealth("","Health")/5);
7531 }
7532 else if (action_id ==
EActions.REMOVE_HEALTH)
7533 {
7534 AddHealth("","",-GetMaxHealth("","Health")/5);
7535 }
7536 else if (action_id ==
EActions.DESTROY_HEALTH)
7537 {
7538 SetHealth01("","",0);
7539 }
7540 else if (action_id ==
EActions.WATCH_ITEM)
7541 {
7543 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
7544 #ifdef DEVELOPER
7545 SetDebugDeveloper_item(this);
7546 #endif
7547 }
7548
7549 else if (action_id ==
EActions.ADD_TEMPERATURE)
7550 {
7551 AddTemperature(20);
7552
7553 }
7554
7555 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
7556 {
7557 AddTemperature(-20);
7558
7559 }
7560
7561 else if (action_id ==
EActions.FLIP_FROZEN)
7562 {
7563 SetFrozen(!GetIsFrozen());
7564
7565 }
7566
7567 else if (action_id ==
EActions.ADD_WETNESS)
7568 {
7570
7571 }
7572
7573 else if (action_id ==
EActions.REMOVE_WETNESS)
7574 {
7576
7577 }
7578
7579 else if (action_id ==
EActions.LIQUIDTYPE_UP)
7580 {
7583
7584
7585 }
7586
7587 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
7588 {
7591 }
7592
7593 else if (action_id ==
EActions.MAKE_SPECIAL)
7594 {
7595 auto debugParams = DebugSpawnParams.WithPlayer(player);
7596 OnDebugSpawnEx(debugParams);
7597 }
7598
7599 else if (action_id ==
EActions.DELETE)
7600 {
7601 Delete();
7602 }
7603
7604 }
7605
7606
7607 return false;
7608 }
7609
7610
7611
7612
7616
7619
7620
7621
7623 {
7624 return false;
7625 }
7626
7627
7629 {
7630 return true;
7631 }
7632
7633
7635 {
7636 return true;
7637 }
7638
7639
7640
7642 {
7643 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
7645 }
7646
7649 {
7650 return null;
7651 }
7652
7654 {
7655 return false;
7656 }
7657
7659 {
7660 return false;
7661 }
7662
7666
7667
7669 {
7670 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7671 return module_repairing.CanRepair(this, item_repair_kit);
7672 }
7673
7674
7675 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
7676 {
7677 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7678 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
7679 }
7680
7681
7683 {
7684
7685
7686
7687
7688
7689
7690
7691
7692 return 1;
7693 }
7694
7695
7696
7698 {
7700 }
7701
7702
7703
7705 {
7707 }
7708
7709
7718 {
7719 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7720
7721 if (player)
7722 {
7723 player.MessageStatus(text);
7724 }
7725 }
7726
7727
7736 {
7737 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7738
7739 if (player)
7740 {
7741 player.MessageAction(text);
7742 }
7743 }
7744
7745
7754 {
7755 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7756
7757 if (player)
7758 {
7759 player.MessageFriendly(text);
7760 }
7761 }
7762
7763
7772 {
7773 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7774
7775 if (player)
7776 {
7777 player.MessageImportant(text);
7778 }
7779 }
7780
7782 {
7783 return true;
7784 }
7785
7786
7787 override bool KindOf(
string tag)
7788 {
7789 bool found = false;
7790 string item_name = this.
GetType();
7793
7794 int array_size = item_tag_array.Count();
7795 for (int i = 0; i < array_size; i++)
7796 {
7797 if (item_tag_array.Get(i) == tag)
7798 {
7799 found = true;
7800 break;
7801 }
7802 }
7803 return found;
7804 }
7805
7806
7808 {
7809
7810 super.OnRPC(sender, rpc_type,ctx);
7811
7812
7813 switch (rpc_type)
7814 {
7815 #ifndef SERVER
7816 case ERPCs.RPC_SOUND_LOCK_ATTACH:
7817 Param2<bool, string> p = new Param2<bool, string>(false, "");
7818
7820 return;
7821
7822 bool play = p.param1;
7823 string soundSet = p.param2;
7824
7825 if (play)
7826 {
7828 {
7830 {
7832 }
7833 }
7834 else
7835 {
7837 }
7838 }
7839 else
7840 {
7842 }
7843
7844 break;
7845 #endif
7846
7847 }
7848
7850 {
7852 }
7853 }
7854
7855
7856
7857
7859 {
7860 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
7861 return plugin.GetID(
name);
7862 }
7863
7865 {
7866 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
7867 return plugin.GetName(id);
7868 }
7869
7872 {
7873
7874
7875 int varFlags;
7876 if (!ctx.
Read(varFlags))
7877 return;
7878
7879 if (varFlags & ItemVariableFlags.FLOAT)
7880 {
7882 }
7883 }
7884
7886 {
7887
7888 super.SerializeNumericalVars(floats_out);
7889
7890
7891
7893 {
7895 }
7896
7898 {
7900 }
7901
7903 {
7905 }
7906
7908 {
7913 }
7914
7916 {
7918 }
7919 }
7920
7922 {
7923
7924 super.DeSerializeNumericalVars(floats);
7925
7926
7927 int index = 0;
7928 int mask = Math.Round(floats.Get(index));
7929
7930 index++;
7931
7933 {
7935 {
7937 }
7938 else
7939 {
7940 float quantity = floats.Get(index);
7942 }
7943 index++;
7944 }
7945
7947 {
7948 float wet = floats.Get(index);
7950 index++;
7951 }
7952
7954 {
7955 int liquidtype = Math.Round(floats.Get(index));
7957 index++;
7958 }
7959
7961 {
7963 index++;
7965 index++;
7967 index++;
7969 index++;
7970 }
7971
7973 {
7974 int cleanness = Math.Round(floats.Get(index));
7976 index++;
7977 }
7978 }
7979
7981 {
7982 super.WriteVarsToCTX(ctx);
7983
7984
7986 {
7988 }
7989
7991 {
7993 }
7994
7996 {
7998 }
7999
8001 {
8002 int r,g,b,a;
8008 }
8009
8011 {
8013 }
8014 }
8015
8017 {
8018 if (!super.ReadVarsFromCTX(ctx,version))
8019 return false;
8020
8021 int intValue;
8022 float value;
8023
8024 if (version < 140)
8025 {
8026 if (!ctx.
Read(intValue))
8027 return false;
8028
8029 m_VariablesMask = intValue;
8030 }
8031
8033 {
8034 if (!ctx.
Read(value))
8035 return false;
8036
8038 {
8040 }
8041 else
8042 {
8044 }
8045 }
8046
8047 if (version < 140)
8048 {
8050 {
8051 if (!ctx.
Read(value))
8052 return false;
8053 SetTemperatureDirect(value);
8054 }
8055 }
8056
8058 {
8059 if (!ctx.
Read(value))
8060 return false;
8062 }
8063
8065 {
8066 if (!ctx.
Read(intValue))
8067 return false;
8069 }
8070
8072 {
8073 int r,g,b,a;
8075 return false;
8077 return false;
8079 return false;
8081 return false;
8082
8084 }
8085
8087 {
8088 if (!ctx.
Read(intValue))
8089 return false;
8091 }
8092
8093 if (version >= 138 && version < 140)
8094 {
8096 {
8097 if (!ctx.
Read(intValue))
8098 return false;
8099 SetFrozen(intValue);
8100 }
8101 }
8102
8103 return true;
8104 }
8105
8106
8108 {
8111 {
8113 }
8114
8115 if (!super.OnStoreLoad(ctx, version))
8116 {
8118 return false;
8119 }
8120
8121 if (version >= 114)
8122 {
8123 bool hasQuickBarIndexSaved;
8124
8125 if (!ctx.
Read(hasQuickBarIndexSaved))
8126 {
8128 return false;
8129 }
8130
8131 if (hasQuickBarIndexSaved)
8132 {
8133 int itmQBIndex;
8134
8135
8136 if (!ctx.
Read(itmQBIndex))
8137 {
8139 return false;
8140 }
8141
8142 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8143 if (itmQBIndex != -1 && parentPlayer)
8144 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8145 }
8146 }
8147 else
8148 {
8149
8150 PlayerBase player;
8151 int itemQBIndex;
8152 if (version ==
int.
MAX)
8153 {
8154 if (!ctx.
Read(itemQBIndex))
8155 {
8157 return false;
8158 }
8159 }
8160 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8161 {
8162
8163 if (!ctx.
Read(itemQBIndex))
8164 {
8166 return false;
8167 }
8168 if (itemQBIndex != -1 && player)
8169 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8170 }
8171 }
8172
8173 if (version < 140)
8174 {
8175
8176 if (!LoadVariables(ctx, version))
8177 {
8179 return false;
8180 }
8181 }
8182
8183
8185 {
8187 return false;
8188 }
8189 if (version >= 132)
8190 {
8192 if (raib)
8193 {
8195 {
8197 return false;
8198 }
8199 }
8200 }
8201
8203 return true;
8204 }
8205
8206
8207
8209 {
8210 super.OnStoreSave(ctx);
8211
8212 PlayerBase player;
8213 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8214 {
8216
8217 int itemQBIndex = -1;
8218 itemQBIndex = player.FindQuickBarEntityIndex(this);
8219 ctx.
Write(itemQBIndex);
8220 }
8221 else
8222 {
8224 }
8225
8227
8229 if (raib)
8230 {
8232 }
8233 }
8234
8235
8237 {
8238 super.AfterStoreLoad();
8239
8241 {
8243 }
8244
8246 {
8249 }
8250 }
8251
8253 {
8254 super.EEOnAfterLoad();
8255
8257 {
8259 }
8260
8263 }
8264
8266 {
8267 return false;
8268 }
8269
8270
8271
8273 {
8275 {
8276 #ifdef PLATFORM_CONSOLE
8277
8279 {
8281 if (menu)
8282 {
8284 }
8285 }
8286 #endif
8287 }
8288
8290 {
8293 }
8294
8296 {
8297 SetWeightDirty();
8299 }
8301 {
8304 }
8305
8307 {
8310 }
8312 {
8315 }
8316
8317 super.OnVariablesSynchronized();
8318 }
8319
8320
8321
8323 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8324 {
8325 if (!IsServerCheck(allow_client))
8326 return false;
8327
8329 return false;
8330
8333
8334 if (value <= (min + 0.001))
8335 value = min;
8336
8337 if (value == min)
8338 {
8339 if (destroy_config)
8340 {
8341 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8342 if (dstr)
8343 {
8345 this.Delete();
8346 return true;
8347 }
8348 }
8349 else if (destroy_forced)
8350 {
8352 this.Delete();
8353 return true;
8354 }
8355
8357 }
8358
8361
8363 {
8365
8366 if (delta)
8368 }
8369
8371
8372 return false;
8373 }
8374
8375
8377 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8378 {
8380 }
8381
8383 {
8386 }
8387
8389 {
8392 }
8393
8396 {
8397 float value_clamped = Math.Clamp(value, 0, 1);
8399 SetQuantity(result, destroy_config, destroy_forced);
8400 }
8401
8402
8405 {
8407 }
8408
8410 {
8412 }
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8424 {
8425 int slot = -1;
8426 if (GetInventory())
8427 {
8428 InventoryLocation il = new InventoryLocation;
8429 GetInventory().GetCurrentInventoryLocation(il);
8431 }
8432
8434 }
8435
8437 {
8438 float quantity_max = 0;
8439
8441 {
8442 if (attSlotID != -1)
8443 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8444
8445 if (quantity_max <= 0)
8447 }
8448
8449 if (quantity_max <= 0)
8451
8452 return quantity_max;
8453 }
8454
8456 {
8458 }
8459
8461 {
8463 }
8464
8465
8467 {
8469 }
8470
8472 {
8474 }
8475
8477 {
8479 }
8480
8481
8483 {
8484
8485 float weightEx = GetWeightEx();
8486 float special = GetInventoryAndCargoWeight();
8487 return weightEx - special;
8488 }
8489
8490
8492 {
8494 }
8495
8497 {
8499 {
8500 #ifdef DEVELOPER
8501 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8502 {
8503 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8505 }
8506 #endif
8507
8509 }
8510 else if (HasEnergyManager())
8511 {
8512 #ifdef DEVELOPER
8513 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8514 {
8515 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8516 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8517 }
8518 #endif
8519 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
8520 }
8521 else
8522 {
8523 #ifdef DEVELOPER
8524 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8525 {
8526 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
8527 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
8528 }
8529 #endif
8530 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
8531 }
8532 }
8533
8536 {
8537 int item_count = 0;
8539
8540 if (GetInventory().GetCargo() != NULL)
8541 {
8542 item_count = GetInventory().GetCargo().GetItemCount();
8543 }
8544
8545 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
8546 {
8547 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
8548 if (item)
8549 item_count += item.GetNumberOfItems();
8550 }
8551 return item_count;
8552 }
8553
8556 {
8557 float weight = 0;
8558 float wetness = 1;
8559 if (include_wetness)
8562 {
8563 weight = wetness * m_ConfigWeight;
8564 }
8566 {
8567 weight = 1;
8568 }
8569 return weight;
8570 }
8571
8572
8573
8575 {
8576 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
8577 {
8578 GameInventory inv = GetInventory();
8579 array<EntityAI> items = new array<EntityAI>;
8581 for (int i = 0; i < items.Count(); i++)
8582 {
8584 if (item)
8585 {
8587 }
8588 }
8589 }
8590 }
8591
8592
8593
8594
8596 {
8597 float energy = 0;
8598 if (HasEnergyManager())
8599 {
8600 energy = GetCompEM().GetEnergy();
8601 }
8602 return energy;
8603 }
8604
8605
8607 {
8608 super.OnEnergyConsumed();
8609
8611 }
8612
8614 {
8615 super.OnEnergyAdded();
8616
8618 }
8619
8620
8622 {
8623 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
8624 {
8626 {
8627 float energy_0to1 = GetCompEM().GetEnergy0To1();
8629 }
8630 }
8631 }
8632
8633
8635 {
8636 return ConfigGetFloat("heatIsolation");
8637 }
8638
8640 {
8642 }
8643
8645 {
8646 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
8647 if (
GetGame().ConfigIsExisting(paramPath))
8649
8650 return 0.0;
8651 }
8652
8654 {
8655 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
8656 if (
GetGame().ConfigIsExisting(paramPath))
8658
8659 return 0.0;
8660 }
8661
8662 override void SetWet(
float value,
bool allow_client =
false)
8663 {
8664 if (!IsServerCheck(allow_client))
8665 return;
8666
8669
8671
8672 m_VarWet = Math.Clamp(value, min, max);
8673
8675 {
8678 }
8679 }
8680
8681 override void AddWet(
float value)
8682 {
8684 }
8685
8687 {
8689 }
8690
8692 {
8694 }
8695
8697 {
8699 }
8700
8702 {
8704 }
8705
8707 {
8709 }
8710
8712 {
8715 if (newLevel != oldLevel)
8716 {
8718 }
8719 }
8720
8722 {
8723 SetWeightDirty();
8724 }
8725
8727 {
8728 return GetWetLevelInternal(
m_VarWet);
8729 }
8730
8731
8732
8734 {
8736 }
8737
8739 {
8741 }
8742
8744 {
8746 }
8747
8749 {
8751 }
8752
8753
8754
8756 {
8757 if (ConfigIsExisting("itemModelLength"))
8758 {
8759 return ConfigGetFloat("itemModelLength");
8760 }
8761 return 0;
8762 }
8763
8765 {
8766 if (ConfigIsExisting("itemAttachOffset"))
8767 {
8768 return ConfigGetFloat("itemAttachOffset");
8769 }
8770 return 0;
8771 }
8772
8773 override void SetCleanness(
int value,
bool allow_client =
false)
8774 {
8775 if (!IsServerCheck(allow_client))
8776 return;
8777
8779
8781
8784 }
8785
8787 {
8789 }
8790
8792 {
8793 return true;
8794 }
8795
8796
8797
8798
8800 {
8802 }
8803
8805 {
8807 }
8808
8809
8810
8811
8812 override void SetColor(
int r,
int g,
int b,
int a)
8813 {
8819 }
8821 override void GetColor(out
int r,out
int g,out
int b,out
int a)
8822 {
8827 }
8828
8830 {
8832 }
8833
8836 {
8837 int r,g,b,a;
8839 r = r/255;
8840 g = g/255;
8841 b = b/255;
8842 a = a/255;
8843 return MiscGameplayFunctions.GetColorString(r, g, b, a);
8844 }
8845
8846
8847
8848 override void SetLiquidType(
int value,
bool allow_client =
false)
8849 {
8850 if (!IsServerCheck(allow_client))
8851 return;
8852
8857 }
8858
8860 {
8861 return ConfigGetInt("varLiquidTypeInit");
8862 }
8863
8865 {
8867 }
8868
8870 {
8872 SetFrozen(false);
8873 }
8874
8877 {
8878 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
8879 }
8880
8881
8884 {
8885 PlayerBase nplayer;
8886 if (PlayerBase.CastTo(nplayer, player))
8887 {
8889
8890 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
8891 }
8892 }
8893
8894
8897 {
8898 PlayerBase nplayer;
8899 if (PlayerBase.CastTo(nplayer,player))
8900 {
8901
8902 nplayer.SetEnableQuickBarEntityShortcut(this,false);
8903
8904 }
8905
8906
8907 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
8908
8909
8910 if (HasEnergyManager())
8911 {
8912 GetCompEM().UpdatePlugState();
8913 }
8914 }
8915
8916
8918 {
8919 super.OnPlacementStarted(player);
8920
8922 }
8923
8924 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
8925 {
8927 {
8928 m_AdminLog.OnPlacementComplete(player,
this);
8929 }
8930
8931 super.OnPlacementComplete(player, position, orientation);
8932 }
8933
8934
8935
8936
8937
8939 {
8941 {
8942 return true;
8943 }
8944 else
8945 {
8946 return false;
8947 }
8948 }
8949
8950
8952 {
8954 {
8956 }
8957 }
8958
8959
8961 {
8963 }
8964
8966 {
8968 }
8969
8970 override void InsertAgent(
int agent,
float count = 1)
8971 {
8972 if (count < 1)
8973 return;
8974
8976 }
8977
8980 {
8982 }
8983
8984
8986 {
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
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9032 {
9034 return false;
9035 return true;
9036 }
9037
9039 {
9040
9042 }
9043
9044
9047 {
9048 super.CheckForRoofLimited(timeTresholdMS);
9049
9051 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9052 {
9053 m_PreviousRoofTestTime = time;
9054 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9055 }
9056 }
9057
9058
9060 {
9062 {
9063 return 0;
9064 }
9065
9066 if (GetInventory().GetAttachmentSlotsCount() != 0)
9067 {
9068 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9069 if (filter)
9070 return filter.GetProtectionLevel(type, false, system);
9071 else
9072 return 0;
9073 }
9074
9075 string subclassPath, entryName;
9076
9077 switch (type)
9078 {
9080 entryName = "biological";
9081 break;
9083 entryName = "chemical";
9084 break;
9085 default:
9086 entryName = "biological";
9087 break;
9088 }
9089
9090 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9091
9093 }
9094
9095
9096
9099 {
9100 if (!IsMagazine())
9102
9104 }
9105
9106
9107
9108
9109
9114 {
9115 return true;
9116 }
9117
9119 {
9121 }
9122
9123
9124
9125
9126
9128 {
9129 if (parent)
9130 {
9131 if (parent.IsInherited(DayZInfected))
9132 return true;
9133
9134 if (!parent.IsRuined())
9135 return true;
9136 }
9137
9138 return true;
9139 }
9140
9142 {
9143 if (!super.CanPutAsAttachment(parent))
9144 {
9145 return false;
9146 }
9147
9148 if (!IsRuined() && !parent.IsRuined())
9149 {
9150 return true;
9151 }
9152
9153 return false;
9154 }
9155
9157 {
9158
9159
9160
9161
9162 return super.CanReceiveItemIntoCargo(item);
9163 }
9164
9166 {
9167
9168
9169
9170
9171 GameInventory attachmentInv = attachment.GetInventory();
9173 {
9174 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9175 return false;
9176 }
9177
9178 InventoryLocation loc = new InventoryLocation();
9179 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9180 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9181 return false;
9182
9183 return super.CanReceiveAttachment(attachment, slotId);
9184 }
9185
9187 {
9188 if (!super.CanReleaseAttachment(attachment))
9189 return false;
9190
9191 return GetInventory().AreChildrenAccessible();
9192 }
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9215 {
9216 int id = muzzle_owner.GetMuzzleID();
9217 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9218
9219 if (WPOF_array)
9220 {
9221 for (int i = 0; i < WPOF_array.Count(); i++)
9222 {
9223 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9224
9225 if (WPOF)
9226 {
9227 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9228 }
9229 }
9230 }
9231 }
9232
9233
9235 {
9236 int id = muzzle_owner.GetMuzzleID();
9238
9239 if (WPOBE_array)
9240 {
9241 for (int i = 0; i < WPOBE_array.Count(); i++)
9242 {
9243 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9244
9245 if (WPOBE)
9246 {
9247 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9248 }
9249 }
9250 }
9251 }
9252
9253
9255 {
9256 int id = muzzle_owner.GetMuzzleID();
9257 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9258
9259 if (WPOOH_array)
9260 {
9261 for (int i = 0; i < WPOOH_array.Count(); i++)
9262 {
9263 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9264
9265 if (WPOOH)
9266 {
9267 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9268 }
9269 }
9270 }
9271 }
9272
9273
9275 {
9276 int id = muzzle_owner.GetMuzzleID();
9277 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9278
9279 if (WPOOH_array)
9280 {
9281 for (int i = 0; i < WPOOH_array.Count(); i++)
9282 {
9283 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9284
9285 if (WPOOH)
9286 {
9287 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9288 }
9289 }
9290 }
9291 }
9292
9293
9295 {
9296 int id = muzzle_owner.GetMuzzleID();
9297 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9298
9299 if (WPOOH_array)
9300 {
9301 for (int i = 0; i < WPOOH_array.Count(); i++)
9302 {
9303 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9304
9305 if (WPOOH)
9306 {
9307 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9308 }
9309 }
9310 }
9311 }
9312
9313
9314
9316 {
9318 {
9319 return true;
9320 }
9321
9322 return false;
9323 }
9324
9326 {
9328 {
9329 return true;
9330 }
9331
9332 return false;
9333 }
9334
9336 {
9338 {
9339 return true;
9340 }
9341
9342 return false;
9343 }
9344
9346 {
9347 return false;
9348 }
9349
9352 {
9353 return UATimeSpent.DEFAULT_DEPLOY;
9354 }
9355
9356
9357
9358
9360 {
9362 SetSynchDirty();
9363 }
9364
9366 {
9368 }
9369
9370
9372 {
9373 return false;
9374 }
9375
9378 {
9379 string att_type = "None";
9380
9381 if (ConfigIsExisting("soundAttType"))
9382 {
9383 att_type = ConfigGetString("soundAttType");
9384 }
9385
9387 }
9388
9390 {
9392 }
9393
9394
9395
9396
9397
9401
9403 {
9406
9408 }
9409
9410
9412 {
9414 return;
9415
9417
9420
9423
9424 SoundParameters params = new SoundParameters();
9428 }
9429
9430
9432 {
9434 return;
9435
9437 SetSynchDirty();
9438
9441 }
9442
9443
9445 {
9447 return;
9448
9450 SetSynchDirty();
9451
9454 }
9455
9457 {
9459 }
9460
9462 {
9464 }
9465
9468 {
9469 if (!
GetGame().IsDedicatedServer())
9470 {
9471 if (ConfigIsExisting("attachSoundSet"))
9472 {
9473 string cfg_path = "";
9474 string soundset = "";
9476
9479 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9480 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9481
9482 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9483 {
9484 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9485 {
9486 if (cfg_slot_array[i] == slot_type)
9487 {
9488 soundset = cfg_soundset_array[i];
9489 break;
9490 }
9491 }
9492 }
9493
9494 if (soundset != "")
9495 {
9496 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9498 }
9499 }
9500 }
9501 }
9502
9504 {
9505
9506 }
9507
9508 void OnApply(PlayerBase player);
9509
9511 {
9512 return 1.0;
9513 };
9514
9516 {
9518 }
9519
9521 {
9523 }
9524
9526
9528 {
9529 SetDynamicPhysicsLifeTime(0.01);
9531 }
9532
9534 {
9535 array<string> zone_names = new array<string>;
9536 GetDamageZones(zone_names);
9537 for (int i = 0; i < zone_names.Count(); i++)
9538 {
9539 SetHealthMax(zone_names.Get(i),"Health");
9540 }
9541 SetHealthMax("","Health");
9542 }
9543
9546 {
9547 float global_health = GetHealth01("","Health");
9548 array<string> zones = new array<string>;
9549 GetDamageZones(zones);
9550
9551 for (int i = 0; i < zones.Count(); i++)
9552 {
9553 SetHealth01(zones.Get(i),"Health",global_health);
9554 }
9555 }
9556
9559 {
9560 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
9561 }
9562
9564 {
9565 if (!hasRootAsPlayer)
9566 {
9567 if (refParentIB)
9568 {
9569
9570 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
9571 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
9572
9573 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
9574 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
9575
9578 }
9579 else
9580 {
9581
9584 }
9585 }
9586 }
9587
9589 {
9591 {
9592 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
9593 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
9594 {
9595 float heatPermCoef = 1.0;
9597 while (ent)
9598 {
9599 heatPermCoef *= ent.GetHeatPermeabilityCoef();
9600 ent = ent.GetHierarchyParent();
9601 }
9602
9603 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
9604 }
9605 }
9606 }
9607
9609 {
9610
9611 EntityAI parent = GetHierarchyParent();
9612 if (!parent)
9613 {
9614 hasParent = false;
9615 hasRootAsPlayer = false;
9616 }
9617 else
9618 {
9619 hasParent = true;
9620 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
9621 refParentIB =
ItemBase.Cast(parent);
9622 }
9623 }
9624
9625 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
9626 {
9627
9628 }
9629
9631 {
9632
9633 return false;
9634 }
9635
9637 {
9638
9639
9640 return false;
9641 }
9642
9644 {
9645
9646 return false;
9647 }
9648
9651 {
9652 return !GetIsFrozen() &&
IsOpen();
9653 }
9654
9656 {
9657 bool hasParent = false, hasRootAsPlayer = false;
9659
9660 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
9661 bool foodDecay =
g_Game.IsFoodDecayEnabled();
9662
9663 if (wwtu || foodDecay)
9664 {
9668
9669 if (processWetness || processTemperature || processDecay)
9670 {
9672
9673 if (processWetness)
9674 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
9675
9676 if (processTemperature)
9678
9679 if (processDecay)
9680 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
9681 }
9682 }
9683 }
9684
9687 {
9689 }
9690
9692 {
9695
9696 return super.GetTemperatureFreezeThreshold();
9697 }
9698
9700 {
9703
9704 return super.GetTemperatureThawThreshold();
9705 }
9706
9708 {
9711
9712 return super.GetItemOverheatThreshold();
9713 }
9714
9716 {
9718 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
9719
9720 return super.GetTemperatureFreezeTime();
9721 }
9722
9724 {
9726 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
9727
9728 return super.GetTemperatureThawTime();
9729 }
9730
9735
9737 {
9738 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
9739 }
9740
9742 {
9743 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
9744 }
9745
9748 {
9750 }
9751
9753 {
9755 }
9756
9758 {
9760 }
9761
9764 {
9765 return null;
9766 }
9767
9770 {
9771 return false;
9772 }
9773
9775 {
9777 {
9780 if (!trg)
9781 {
9783 explosive = this;
9784 }
9785
9786 explosive.PairRemote(trg);
9788
9789 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
9790 trg.SetPersistentPairID(persistentID);
9791 explosive.SetPersistentPairID(persistentID);
9792
9793 return true;
9794 }
9795 return false;
9796 }
9797
9800 {
9801 float ret = 1.0;
9804 ret *= GetHealth01();
9805
9806 return ret;
9807 }
9808
9809 #ifdef DEVELOPER
9810 override void SetDebugItem()
9811 {
9812 super.SetDebugItem();
9813 _itemBase = this;
9814 }
9815
9817 {
9818 string text = super.GetDebugText();
9819
9821 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
9822
9823 return text;
9824 }
9825 #endif
9826
9828 {
9829 return true;
9830 }
9831
9833
9835
9837 {
9840 }
9841
9842
9850
9866}
9867
9869{
9871 if (entity)
9872 {
9873 bool is_item = entity.IsInherited(
ItemBase);
9874 if (is_item && full_quantity)
9875 {
9878 }
9879 }
9880 else
9881 {
9883 return NULL;
9884 }
9885 return entity;
9886}
9887
9889{
9890 if (item)
9891 {
9892 if (health > 0)
9893 item.SetHealth("", "", health);
9894
9895 if (item.CanHaveTemperature())
9896 {
9898 if (item.CanFreeze())
9899 item.SetFrozen(false);
9900 }
9901
9902 if (item.HasEnergyManager())
9903 {
9904 if (quantity >= 0)
9905 {
9906 item.GetCompEM().SetEnergy0To1(quantity);
9907 }
9908 else
9909 {
9911 }
9912 }
9913 else if (item.IsMagazine())
9914 {
9915 Magazine mag = Magazine.Cast(item);
9916 if (quantity >= 0)
9917 {
9918 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
9919 }
9920 else
9921 {
9923 }
9924
9925 }
9926 else
9927 {
9928 if (quantity >= 0)
9929 {
9930 item.SetQuantityNormalized(quantity, false);
9931 }
9932 else
9933 {
9935 }
9936
9937 }
9938 }
9939}
9940
9941#ifdef DEVELOPER
9943#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.