5128{
5130 {
5131 return true;
5132 }
5133};
5134
5135
5136
5138{
5142
5144
5147
5148
5149
5150
5151
5160
5166
5171
5176
5197 protected bool m_IsResultOfSplit
5198
5200
5205
5206
5207
5209
5213
5214
5215
5217
5220
5221
5222
5228
5229
5237
5240
5241
5243
5244
5246
5247
5252
5253
5258
5259
5261
5262
5264 {
5269
5270 if (!
GetGame().IsDedicatedServer())
5271 {
5273 {
5275
5277 {
5279 }
5280 }
5281
5284 }
5285
5286 m_OldLocation = null;
5287
5289 {
5291 }
5292
5293 if (ConfigIsExisting("headSelectionsToHide"))
5294 {
5297 }
5298
5300 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
5301 {
5303 }
5304
5306
5307 m_IsResultOfSplit = false;
5308
5310 }
5311
5313 {
5314 super.InitItemVariables();
5315
5321 m_Count = ConfigGetInt(
"count");
5322
5325
5330
5333
5338
5350
5354
5355
5358 if (ConfigIsExisting("canBeSplit"))
5359 {
5362 }
5363
5365 if (ConfigIsExisting("itemBehaviour"))
5367
5368
5371 RegisterNetSyncVariableInt("m_VarLiquidType");
5372 RegisterNetSyncVariableInt("m_Cleanness",0,1);
5373
5374 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
5375 RegisterNetSyncVariableFloat("m_ImpactSpeed");
5376 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
5377
5378 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
5379 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
5380 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
5381 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
5382
5383 RegisterNetSyncVariableBool("m_IsBeingPlaced");
5384 RegisterNetSyncVariableBool("m_IsTakeable");
5385 RegisterNetSyncVariableBool("m_IsHologram");
5386
5389 {
5392 }
5393
5395
5397 if (ConfigIsExisting("temperaturePerQuantityWeight"))
5399
5400 }
5401
5403 {
5405 }
5406
5408 {
5411 {
5416 }
5417 }
5418
5419 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
5420 {
5422 {
5425 }
5426
5428 }
5429
5431 {
5437 }
5438
5440
5442 {
5444
5445 if (!action)
5446 {
5447 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
5448 return;
5449 }
5450
5452 if (!ai)
5453 {
5455 return;
5456 }
5457
5459 if (!action_array)
5460 {
5461 action_array = new array<ActionBase_Basic>;
5463 }
5464 if (LogManager.IsActionLogEnable())
5465 {
5466 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
5467 }
5468
5469 if (action_array.Find(action) != -1)
5470 {
5471 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
5472 }
5473 else
5474 {
5475 action_array.Insert(action);
5476 }
5477 }
5478
5480 {
5482 ActionBase action = player.GetActionManager().GetAction(actionName);
5485
5486 if (action_array)
5487 {
5488 action_array.RemoveItem(action);
5489 }
5490 }
5491
5492
5493
5495 {
5496 ActionOverrideData overrideData = new ActionOverrideData();
5500
5502 if (!actionMap)
5503 {
5506 }
5507
5508 actionMap.Insert(this.
Type(), overrideData);
5509
5510 }
5511
5513
5515
5516
5518 {
5521
5524
5525 string config_to_search = "CfgVehicles";
5526 string muzzle_owner_config;
5527
5529 {
5530 if (IsInherited(Weapon))
5531 config_to_search = "CfgWeapons";
5532
5533 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5534
5535 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
5536
5538
5539 if (config_OnFire_subclass_count > 0)
5540 {
5541 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
5542
5543 for (int i = 0; i < config_OnFire_subclass_count; i++)
5544 {
5545 string particle_class = "";
5547 string config_OnFire_entry = config_OnFire_class + particle_class;
5548 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
5549 WPOF_array.Insert(WPOF);
5550 }
5551
5552
5554 }
5555 }
5556
5558 {
5559 config_to_search = "CfgWeapons";
5560 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5561
5562 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
5563
5565
5566 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
5567 {
5568 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
5569
5570 for (i = 0; i < config_OnBulletCasingEject_count; i++)
5571 {
5572 string particle_class2 = "";
5574 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
5575 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
5576 WPOBE_array.Insert(WPOBE);
5577 }
5578
5579
5581 }
5582 }
5583 }
5584
5585
5587 {
5590
5592 {
5593 string config_to_search = "CfgVehicles";
5594
5595 if (IsInherited(Weapon))
5596 config_to_search = "CfgWeapons";
5597
5598 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
5599 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
5600
5601 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
5602 {
5603
5605
5607 {
5609 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
5611 return;
5612 }
5613
5616
5617
5618
5620 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
5621
5622 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
5623 {
5624 string particle_class = "";
5626 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
5628
5629 if (entry_type == CT_CLASS)
5630 {
5631 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
5632 WPOOH_array.Insert(WPOF);
5633 }
5634 }
5635
5636
5638 }
5639 }
5640 }
5641
5643 {
5645 }
5646
5648 {
5650 {
5652
5655
5658
5659 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5660 }
5661 }
5662
5664 {
5666 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5667
5669 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5670
5672 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5673
5675 {
5677 }
5678 }
5679
5681 {
5683 }
5684
5686 {
5689 else
5691
5693 {
5696 }
5697 else
5698 {
5701
5704 }
5705
5707 }
5708
5710 {
5712 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5713 }
5714
5716 {
5718 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
5720 }
5721
5723 {
5725 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
5726 }
5727
5729 {
5732
5733 OverheatingParticle OP = new OverheatingParticle();
5738
5740 }
5741
5743 {
5746
5747 return -1;
5748 }
5749
5751 {
5753 {
5756
5757 for (int i = count; i > 0; --i)
5758 {
5759 int id = i - 1;
5762
5765
5766 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
5767 {
5768 if (p)
5769 {
5772 }
5773 }
5774 }
5775 }
5776 }
5777
5779 {
5781 {
5783 {
5784 int id = i - 1;
5786
5787 if (OP)
5788 {
5790
5791 if (p)
5792 {
5794 }
5795
5796 delete OP;
5797 }
5798 }
5799
5802 }
5803 }
5804
5807 {
5808 return 0.0;
5809 }
5810
5811
5813 {
5814 return 250;
5815 }
5816
5818 {
5819 return 0;
5820 }
5821
5824 {
5826 return true;
5827
5828 return false;
5829 }
5830
5833 {
5836
5838 {
5840 }
5841 else
5842 {
5843
5845 }
5846
5848 }
5849
5856 {
5857 return -1;
5858 }
5859
5860
5861
5862
5864 {
5866 {
5868 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
5869
5870 if (r_index >= 0)
5871 {
5872 InventoryLocation r_il = new InventoryLocation;
5873 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
5874
5875 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
5878 {
5879 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
5880 }
5882 {
5883 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
5884 }
5885
5886 }
5887
5888 player.GetHumanInventory().ClearUserReservedLocation(this);
5889 }
5890
5893 }
5894
5895
5896
5897
5899 {
5900 return ItemBase.m_DebugActionsMask;
5901 }
5902
5904 {
5905 return ItemBase.m_DebugActionsMask & mask;
5906 }
5907
5909 {
5910 ItemBase.m_DebugActionsMask = mask;
5911 }
5912
5914 {
5915 ItemBase.m_DebugActionsMask |= mask;
5916 }
5917
5919 {
5920 ItemBase.m_DebugActionsMask &= ~mask;
5921 }
5922
5924 {
5926 {
5928 }
5929 else
5930 {
5932 }
5933 }
5934
5935
5937 {
5938 if (GetEconomyProfile())
5939 {
5940 float q_max = GetEconomyProfile().GetQuantityMax();
5941 if (q_max > 0)
5942 {
5943 float q_min = GetEconomyProfile().GetQuantityMin();
5944 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
5945
5947 {
5948 ComponentEnergyManager comp = GetCompEM();
5950 {
5952 }
5953 }
5955 {
5957
5958 }
5959
5960 }
5961 }
5962 }
5963
5966 {
5967 EntityAI parent = GetHierarchyParent();
5968
5969 if (parent)
5970 {
5971 InventoryLocation inventory_location_to_lock = new InventoryLocation;
5972 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
5973 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
5974 }
5975 }
5976
5979 {
5980 EntityAI parent = GetHierarchyParent();
5981
5982 if (parent)
5983 {
5984 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
5985 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
5986 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
5987 }
5988 }
5989
5991 {
5992
5993
5994
5995
5997
5999 {
6000 if (ScriptInputUserData.CanStoreInputUserData())
6001 {
6002 ScriptInputUserData ctx = new ScriptInputUserData;
6008 ctx.
Write(use_stack_max);
6011
6013 {
6014 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
6015 }
6016 }
6017 }
6018 else if (!
GetGame().IsMultiplayer())
6019 {
6021 }
6022 }
6023
6025 {
6027 }
6028
6030 {
6032 }
6033
6035 {
6037 }
6038
6040 {
6041
6042 return false;
6043 }
6044
6046 {
6047 return false;
6048 }
6049
6053 {
6054 return false;
6055 }
6056
6058 {
6059 return "";
6060 }
6061
6063
6065 {
6066 return false;
6067 }
6068
6070 {
6071 return true;
6072 }
6073
6074
6075
6077 {
6078 return true;
6079 }
6080
6082 {
6083 return true;
6084 }
6085
6087 {
6088 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
6090 }
6091
6093 {
6095 }
6096
6098 {
6100 if (!is_being_placed)
6102 SetSynchDirty();
6103 }
6104
6105
6107
6109 {
6111 }
6112
6114 {
6116 }
6117
6119 {
6120 return 1;
6121 }
6122
6124 {
6125 return false;
6126 }
6127
6129 {
6131 SetSynchDirty();
6132 }
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6169 {
6170 super.OnMovedInsideCargo(container);
6171
6172 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6173 }
6174
6175 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
6176 {
6177 super.EEItemLocationChanged(oldLoc,newLoc);
6178
6179 PlayerBase new_player = null;
6180 PlayerBase old_player = null;
6181
6182 if (newLoc.GetParent())
6183 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
6184
6185 if (oldLoc.GetParent())
6186 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
6187
6189 {
6190 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
6191
6192 if (r_index >= 0)
6193 {
6194 InventoryLocation r_il = new InventoryLocation;
6195 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6196
6197 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6200 {
6201 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6202 }
6204 {
6205 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6206 }
6207
6208 }
6209 }
6210
6212 {
6213 if (new_player)
6214 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
6215
6216 if (new_player == old_player)
6217 {
6218
6219 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
6220 {
6222 {
6223 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
6224 {
6225 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6226 }
6227 }
6228 else
6229 {
6230 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
6231 }
6232 }
6233
6234 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
6235 {
6236 int type = oldLoc.GetType();
6238 {
6239 oldLoc.GetParent().GetOnSetLock().Invoke(this);
6240 }
6242 {
6243 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
6244 }
6245 }
6246 if (!m_OldLocation)
6247 {
6248 m_OldLocation = new InventoryLocation;
6249 }
6250 m_OldLocation.Copy(oldLoc);
6251 }
6252 else
6253 {
6254 if (m_OldLocation)
6255 {
6256 m_OldLocation.Reset();
6257 }
6258 }
6259
6261 }
6262 else
6263 {
6264 if (new_player)
6265 {
6266 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
6267 if (res_index >= 0)
6268 {
6269 InventoryLocation il = new InventoryLocation;
6270 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
6272 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
6275 {
6276 il.
GetParent().GetOnReleaseLock().Invoke(it);
6277 }
6279 {
6281 }
6282
6283 }
6284 }
6286 {
6287
6289 }
6290
6291 if (m_OldLocation)
6292 {
6293 m_OldLocation.Reset();
6294 }
6295 }
6296 }
6297
6298 override void EOnContact(IEntity other, Contact extra)
6299 {
6301 {
6302 int liquidType = -1;
6304 if (impactSpeed > 0.0)
6305 {
6307 #ifndef SERVER
6309 #else
6311 SetSynchDirty();
6312 #endif
6314 }
6315 }
6316
6317 #ifdef SERVER
6318 if (GetCompEM() && GetCompEM().IsPlugged())
6319 {
6320 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
6321 GetCompEM().UnplugThis();
6322 }
6323 #endif
6324 }
6325
6327
6329 {
6331 }
6332
6334 {
6335
6336 }
6337
6339 {
6340 super.OnItemLocationChanged(old_owner, new_owner);
6341
6342 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
6343 PlayerBase playerNew = PlayerBase.Cast(new_owner);
6344
6345 if (!relatedPlayer && playerNew)
6346 relatedPlayer = playerNew;
6347
6348 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
6349 {
6351 if (actionMgr)
6352 {
6353 ActionBase currentAction = actionMgr.GetRunningAction();
6354 if (currentAction)
6356 }
6357 }
6358
6359 Man ownerPlayerOld = null;
6360 Man ownerPlayerNew = null;
6361
6362 if (old_owner)
6363 {
6364 if (old_owner.
IsMan())
6365 {
6366 ownerPlayerOld = Man.Cast(old_owner);
6367 }
6368 else
6369 {
6370 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
6371 }
6372 }
6373 else
6374 {
6376 {
6378
6379 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
6380 {
6381 GetCompEM().UnplugThis();
6382 }
6383 }
6384 }
6385
6386 if (new_owner)
6387 {
6388 if (new_owner.
IsMan())
6389 {
6390 ownerPlayerNew = Man.Cast(new_owner);
6391 }
6392 else
6393 {
6394 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
6395 }
6396 }
6397
6398 if (ownerPlayerOld != ownerPlayerNew)
6399 {
6400 if (ownerPlayerOld)
6401 {
6402 array<EntityAI> subItemsExit = new array<EntityAI>;
6404 for (int i = 0; i < subItemsExit.Count(); i++)
6405 {
6408 }
6409 }
6410
6411 if (ownerPlayerNew)
6412 {
6413 array<EntityAI> subItemsEnter = new array<EntityAI>;
6415 for (int j = 0; j < subItemsEnter.Count(); j++)
6416 {
6419 }
6420 }
6421 }
6422 else if (ownerPlayerNew != null)
6423 {
6424 PlayerBase nplayer;
6425 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
6426 {
6427 array<EntityAI> subItemsUpdate = new array<EntityAI>;
6429 for (int k = 0; k < subItemsUpdate.Count(); k++)
6430 {
6432 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
6433 }
6434 }
6435 }
6436
6437 if (old_owner)
6438 old_owner.OnChildItemRemoved(this);
6439 if (new_owner)
6440 new_owner.OnChildItemReceived(this);
6441 }
6442
6443
6445 {
6446 super.EEDelete(parent);
6447 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
6448 if (player)
6449 {
6451
6452 if (player.IsAlive())
6453 {
6454 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
6455 if (r_index >= 0)
6456 {
6457 InventoryLocation r_il = new InventoryLocation;
6458 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
6459
6460 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
6463 {
6464 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
6465 }
6467 {
6468 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
6469 }
6470
6471 }
6472
6473 player.RemoveQuickBarEntityShortcut(this);
6474 }
6475 }
6476 }
6477
6479 {
6480 super.EEKilled(killer);
6481
6484 {
6485 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
6486 {
6487 if (IsMagazine())
6488 {
6489 if (Magazine.Cast(this).GetAmmoCount() > 0)
6490 {
6492 }
6493 }
6494 else
6495 {
6497 }
6498 }
6499 }
6500 }
6501
6503 {
6504 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
6505
6506 super.OnWasAttached(parent, slot_id);
6507
6510
6512 }
6513
6515 {
6516 super.OnWasDetached(parent, slot_id);
6517
6520 }
6521
6523 {
6524 int idx;
6527
6528 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6529 if (inventory_slots.Count() < 1)
6530 {
6531 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
6532 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
6533 }
6534 else
6535 {
6536 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
6537 }
6538
6539 idx = inventory_slots.Find(slot);
6540 if (idx < 0)
6541 return "";
6542
6543 return attach_types.Get(idx);
6544 }
6545
6547 {
6548 int idx = -1;
6549 string slot;
6550
6553
6554 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
6555 if (inventory_slots.Count() < 1)
6556 {
6557 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
6558 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6559 }
6560 else
6561 {
6562 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
6563 if (detach_types.Count() < 1)
6564 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
6565 }
6566
6567 for (int i = 0; i < inventory_slots.Count(); i++)
6568 {
6569 slot = inventory_slots.Get(i);
6570 }
6571
6572 if (slot != "")
6573 {
6574 if (detach_types.Count() == 1)
6575 idx = 0;
6576 else
6577 idx = inventory_slots.Find(slot);
6578 }
6579 if (idx < 0)
6580 return "";
6581
6582 return detach_types.Get(idx);
6583 }
6584
6586 {
6587
6589
6590
6591 float min_time = 1;
6592 float max_time = 3;
6593 float delay = Math.RandomFloat(min_time, max_time);
6594
6595 explode_timer.Run(delay, this, "DoAmmoExplosion");
6596 }
6597
6599 {
6600 Magazine magazine = Magazine.Cast(this);
6601 int pop_sounds_count = 6;
6602 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
6603
6604
6605 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
6606 string sound_name = pop_sounds[ sound_idx ];
6608
6609
6610 magazine.ServerAddAmmoCount(-1);
6611
6612
6613 float min_temp_to_explode = 100;
6614
6615 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
6616 {
6618 }
6619 }
6620
6621
6622 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
6623 {
6624 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
6625
6626 const int CHANCE_DAMAGE_CARGO = 4;
6627 const int CHANCE_DAMAGE_ATTACHMENT = 1;
6628 const int CHANCE_DAMAGE_NOTHING = 2;
6629
6631 {
6632 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
6633 int chances;
6634 int rnd;
6635
6636 if (GetInventory().GetCargo())
6637 {
6638 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6639 rnd = Math.RandomInt(0,chances);
6640
6641 if (rnd < CHANCE_DAMAGE_CARGO)
6642 {
6644 }
6645 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
6646 {
6648 }
6649 }
6650 else
6651 {
6652 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
6653 rnd = Math.RandomInt(0,chances);
6654
6655 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
6656 {
6658 }
6659 }
6660 }
6661 }
6662
6664 {
6665 if (GetInventory().GetCargo())
6666 {
6667 int item_count = GetInventory().GetCargo().GetItemCount();
6668 if (item_count > 0)
6669 {
6670 int random_pick = Math.RandomInt(0, item_count);
6672 if (!item.IsExplosive())
6673 {
6674 item.AddHealth("","",damage);
6675 return true;
6676 }
6677 }
6678 }
6679 return false;
6680 }
6681
6683 {
6684 int attachment_count = GetInventory().AttachmentCount();
6685 if (attachment_count > 0)
6686 {
6687 int random_pick = Math.RandomInt(0, attachment_count);
6688 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
6689 if (!attachment.IsExplosive())
6690 {
6691 attachment.AddHealth("","",damage);
6692 return true;
6693 }
6694 }
6695 return false;
6696 }
6697
6699 {
6701 }
6702
6704 {
6706 return GetInventory().CanRemoveEntity();
6707
6708 return false;
6709 }
6710
6712 {
6714 return;
6715
6717 {
6718 if (ScriptInputUserData.CanStoreInputUserData())
6719 {
6720 ScriptInputUserData ctx = new ScriptInputUserData;
6725 ctx.
Write(destination_entity);
6729 }
6730 }
6731 else if (!
GetGame().IsMultiplayer())
6732 {
6734 }
6735 }
6736
6738 {
6740 return;
6741
6742 float split_quantity_new;
6746 InventoryLocation loc = new InventoryLocation;
6747
6748 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6749 {
6751 split_quantity_new = stack_max;
6752 else
6754
6755 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
6756 if (new_item)
6757 {
6758 new_item.SetResultOfSplit(true);
6759 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6761 new_item.SetQuantity(split_quantity_new);
6762 }
6763 }
6764 else if (destination_entity && slot_id == -1)
6765 {
6766 if (quantity > stack_max)
6767 split_quantity_new = stack_max;
6768 else
6769 split_quantity_new = quantity;
6770
6772 {
6775 }
6776
6777 if (new_item)
6778 {
6779 new_item.SetResultOfSplit(true);
6780 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6782 new_item.SetQuantity(split_quantity_new);
6783 }
6784 }
6785 else
6786 {
6787 if (stack_max != 0)
6788 {
6790 {
6792 }
6793
6794 if (split_quantity_new == 0)
6795 {
6796 if (!
GetGame().IsMultiplayer())
6797 player.PhysicalPredictiveDropItem(this);
6798 else
6799 player.ServerDropEntity(this);
6800 return;
6801 }
6802
6804
6805 if (new_item)
6806 {
6807 new_item.SetResultOfSplit(true);
6808 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6810 new_item.SetQuantity(stack_max);
6811 new_item.PlaceOnSurface();
6812 }
6813 }
6814 }
6815 }
6816
6818 {
6820 return;
6821
6822 float split_quantity_new;
6826 InventoryLocation loc = new InventoryLocation;
6827
6828 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
6829 {
6831 split_quantity_new = stack_max;
6832 else
6834
6835 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
6836 if (new_item)
6837 {
6838 new_item.SetResultOfSplit(true);
6839 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6841 new_item.SetQuantity(split_quantity_new);
6842 }
6843 }
6844 else if (destination_entity && slot_id == -1)
6845 {
6846 if (quantity > stack_max)
6847 split_quantity_new = stack_max;
6848 else
6849 split_quantity_new = quantity;
6850
6852 {
6855 }
6856
6857 if (new_item)
6858 {
6859 new_item.SetResultOfSplit(true);
6860 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6862 new_item.SetQuantity(split_quantity_new);
6863 }
6864 }
6865 else
6866 {
6867 if (stack_max != 0)
6868 {
6870 {
6872 }
6873
6875
6876 if (new_item)
6877 {
6878 new_item.SetResultOfSplit(true);
6879 MiscGameplayFunctions.TransferItemProperties(this, new_item);
6881 new_item.SetQuantity(stack_max);
6882 new_item.PlaceOnSurface();
6883 }
6884 }
6885 }
6886 }
6887
6889 {
6891 return;
6892
6894 {
6895 if (ScriptInputUserData.CanStoreInputUserData())
6896 {
6897 ScriptInputUserData ctx = new ScriptInputUserData;
6902 dst.WriteToContext(ctx);
6904 }
6905 }
6906 else if (!
GetGame().IsMultiplayer())
6907 {
6909 }
6910 }
6911
6913 {
6915 return;
6916
6918 {
6919 if (ScriptInputUserData.CanStoreInputUserData())
6920 {
6921 ScriptInputUserData ctx = new ScriptInputUserData;
6926 ctx.
Write(destination_entity);
6932 }
6933 }
6934 else if (!
GetGame().IsMultiplayer())
6935 {
6937 }
6938 }
6939
6941 {
6943 }
6944
6946 {
6948 return this;
6949
6951 float split_quantity_new;
6953 if (dst.IsValid())
6954 {
6955 int slot_id = dst.GetSlot();
6957
6958 if (quantity > stack_max)
6959 split_quantity_new = stack_max;
6960 else
6961 split_quantity_new = quantity;
6962
6964
6965 if (new_item)
6966 {
6967 new_item.SetResultOfSplit(true);
6968 MiscGameplayFunctions.TransferItemProperties(this,new_item);
6971 }
6972
6973 return new_item;
6974 }
6975
6976 return null;
6977 }
6978
6980 {
6982 return;
6983
6985 float split_quantity_new;
6987 if (destination_entity)
6988 {
6990 if (quantity > stackable)
6991 split_quantity_new = stackable;
6992 else
6993 split_quantity_new = quantity;
6994
6995 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
6996 if (new_item)
6997 {
6998 new_item.SetResultOfSplit(true);
6999 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7001 new_item.SetQuantity(split_quantity_new);
7002 }
7003 }
7004 }
7005
7007 {
7009 return;
7010
7012 {
7013 if (ScriptInputUserData.CanStoreInputUserData())
7014 {
7015 ScriptInputUserData ctx = new ScriptInputUserData;
7020 ItemBase destination_entity =
this;
7021 ctx.
Write(destination_entity);
7025 }
7026 }
7027 else if (!
GetGame().IsMultiplayer())
7028 {
7030 }
7031 }
7032
7034 {
7036 return;
7037
7039 float split_quantity_new;
7041 if (player)
7042 {
7044 if (quantity > stackable)
7045 split_quantity_new = stackable;
7046 else
7047 split_quantity_new = quantity;
7048
7049 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
7050 new_item =
ItemBase.Cast(in_hands);
7051 if (new_item)
7052 {
7053 new_item.SetResultOfSplit(true);
7054 MiscGameplayFunctions.TransferItemProperties(this,new_item);
7056 new_item.SetQuantity(split_quantity_new);
7057 }
7058 }
7059 }
7060
7062 {
7064 return;
7065
7067 float split_quantity_new = Math.Floor(quantity * 0.5);
7068
7070
7071 if (new_item)
7072 {
7073 if (new_item.GetQuantityMax() < split_quantity_new)
7074 {
7075 split_quantity_new = new_item.GetQuantityMax();
7076 }
7077
7078 new_item.SetResultOfSplit(true);
7079 MiscGameplayFunctions.TransferItemProperties(this, new_item);
7080
7082 {
7085 }
7086 else
7087 {
7090 }
7091 }
7092 }
7093
7095 {
7097 return;
7098
7100 float split_quantity_new = Math.Floor(quantity / 2);
7101
7102 InventoryLocation invloc = new InventoryLocation;
7104
7106 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
7107
7108 if (new_item)
7109 {
7110 if (new_item.GetQuantityMax() < split_quantity_new)
7111 {
7112 split_quantity_new = new_item.GetQuantityMax();
7113 }
7115 {
7118 }
7119 else
7120 {
7123 }
7124 }
7125 }
7126
7129 {
7130 SetWeightDirty();
7132
7133 if (parent)
7134 parent.OnAttachmentQuantityChangedEx(this, delta);
7135
7137 {
7139 {
7141 }
7143 {
7144 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
7146 }
7147 }
7148
7149 }
7150
7153 {
7154
7155 }
7156
7159 {
7161 }
7162
7164 {
7165 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
7166
7168 {
7169 if (newLevel == GameConstants.STATE_RUINED)
7170 {
7172 EntityAI parent = GetHierarchyParent();
7173 if (parent && parent.IsFireplace())
7174 {
7175 CargoBase cargo = GetInventory().GetCargo();
7176 if (cargo)
7177 {
7179 {
7181 }
7182 }
7183 }
7184 }
7185
7187 {
7188
7190 return;
7191 }
7192
7193 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
7194 {
7196 }
7197 }
7198 }
7199
7200
7202 {
7203 super.OnRightClick();
7204
7206 {
7208 {
7209 if (ScriptInputUserData.CanStoreInputUserData())
7210 {
7211 vector m4[4];
7213
7214 EntityAI root = GetHierarchyRoot();
7215
7216 InventoryLocation dst = new InventoryLocation;
7218 {
7219 if (root)
7220 {
7221 root.GetTransform(m4);
7223 }
7224 else
7225 GetInventory().GetCurrentInventoryLocation(dst);
7226 }
7227 else
7228 {
7230
7231
7232 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
7233 {
7234 if (root)
7235 {
7236 root.GetTransform(m4);
7238 }
7239 else
7240 GetInventory().GetCurrentInventoryLocation(dst);
7241 }
7242 else
7243 {
7244 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
7245 }
7246 }
7247
7248 ScriptInputUserData ctx = new ScriptInputUserData;
7256 }
7257 }
7258 else if (!
GetGame().IsMultiplayer())
7259 {
7261 }
7262 }
7263 }
7264
7265 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
7266 {
7267
7268 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
7269 return false;
7270
7271 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
7272 return false;
7273
7274
7276 return false;
7277
7278
7279 Magazine mag = Magazine.Cast(this);
7280 if (mag)
7281 {
7282 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
7283 return false;
7284
7285 if (stack_max_limit)
7286 {
7287 Magazine other_mag = Magazine.Cast(other_item);
7288 if (other_item)
7289 {
7290 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
7291 return false;
7292 }
7293
7294 }
7295 }
7296 else
7297 {
7298
7300 return false;
7301
7303 return false;
7304 }
7305
7306 PlayerBase player = null;
7307 if (CastTo(player, GetHierarchyRootPlayer()))
7308 {
7309 if (player.GetInventory().HasAttachment(this))
7310 return false;
7311
7312 if (player.IsItemsToDelete())
7313 return false;
7314 }
7315
7316 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
7317 return false;
7318
7319 int slotID;
7321 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
7322 return false;
7323
7324 return true;
7325 }
7326
7328 {
7330 }
7331
7333 {
7334 return m_IsResultOfSplit;
7335 }
7336
7338 {
7339 m_IsResultOfSplit = value;
7340 }
7341
7343 {
7345 }
7346
7348 {
7349 float other_item_quantity = other_item.GetQuantity();
7350 float this_free_space;
7351
7353
7355
7356 if (other_item_quantity > this_free_space)
7357 {
7358 return this_free_space;
7359 }
7360 else
7361 {
7362 return other_item_quantity;
7363 }
7364 }
7365
7367 {
7369 }
7370
7372 {
7374 return;
7375
7376 if (!IsMagazine() && other_item)
7377 {
7379 if (quantity_used != 0)
7380 {
7381 float hp1 = GetHealth01("","");
7382 float hp2 = other_item.GetHealth01("","");
7383 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
7384 hpResult = hpResult / (
GetQuantity() + quantity_used);
7385
7386 hpResult *= GetMaxHealth();
7387 Math.Round(hpResult);
7388 SetHealth("", "Health", hpResult);
7389
7391 other_item.AddQuantity(-quantity_used);
7392 }
7393 }
7395 }
7396
7398 {
7399 #ifdef SERVER
7400 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
7401 GetHierarchyParent().IncreaseLifetimeUp();
7402 #endif
7403 };
7404
7406 {
7407 PlayerBase p = PlayerBase.Cast(player);
7408
7409 array<int> recipesIds = p.m_Recipes;
7410 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7411 if (moduleRecipesManager)
7412 {
7413 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
7414 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
7415 }
7416
7417 for (int i = 0;i < recipesIds.Count(); i++)
7418 {
7419 int key = recipesIds.Get(i);
7420 string recipeName = moduleRecipesManager.GetRecipeName(key);
7422 }
7423 }
7424
7425
7426 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
7427 {
7428 super.GetDebugActions(outputList);
7429
7430
7435
7436
7440
7444
7445
7448
7449
7451 {
7454 }
7455
7457
7460
7464 }
7465
7466
7467
7468
7470 {
7471 super.OnAction(action_id, player, ctx);
7472 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
7473 {
7474 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
7475 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
7476 PlayerBase p = PlayerBase.Cast(player);
7477 if (
EActions.RECIPES_RANGE_START < 1000)
7478 {
7479 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
7480 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
7481 }
7482 }
7483 #ifndef SERVER
7484 else if (action_id ==
EActions.WATCH_PLAYER)
7485 {
7486 PluginDeveloper.SetDeveloperItemClientEx(player);
7487 }
7488 #endif
7490 {
7491 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
7492 {
7493 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
7494 OnDebugButtonPressServer(id + 1);
7495 }
7496
7497 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
7498 {
7499 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
7501 }
7502
7503 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
7504 {
7505 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
7507 }
7508
7509 else if (action_id ==
EActions.ADD_QUANTITY)
7510 {
7511 if (IsMagazine())
7512 {
7513 Magazine mag = Magazine.Cast(this);
7514 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
7515 }
7516 else
7517 {
7519 }
7520
7521 if (m_EM)
7522 {
7523 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
7524 }
7525
7526 }
7527
7528 else if (action_id ==
EActions.REMOVE_QUANTITY)
7529 {
7530 if (IsMagazine())
7531 {
7532 Magazine mag2 = Magazine.Cast(this);
7533 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
7534 }
7535 else
7536 {
7538 }
7539 if (m_EM)
7540 {
7541 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
7542 }
7543
7544 }
7545
7546 else if (action_id ==
EActions.SET_QUANTITY_0)
7547 {
7549
7550 if (m_EM)
7551 {
7552 m_EM.SetEnergy(0);
7553 }
7554 }
7555
7556 else if (action_id ==
EActions.SET_MAX_QUANTITY)
7557 {
7559
7560 if (m_EM)
7561 {
7562 m_EM.SetEnergy(m_EM.GetEnergyMax());
7563 }
7564 }
7565
7566 else if (action_id ==
EActions.ADD_HEALTH)
7567 {
7568 AddHealth("","",GetMaxHealth("","Health")/5);
7569 }
7570 else if (action_id ==
EActions.REMOVE_HEALTH)
7571 {
7572 AddHealth("","",-GetMaxHealth("","Health")/5);
7573 }
7574 else if (action_id ==
EActions.DESTROY_HEALTH)
7575 {
7576 SetHealth01("","",0);
7577 }
7578 else if (action_id ==
EActions.WATCH_ITEM)
7579 {
7581 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
7582 #ifdef DEVELOPER
7583 SetDebugDeveloper_item(this);
7584 #endif
7585 }
7586
7587 else if (action_id ==
EActions.ADD_TEMPERATURE)
7588 {
7589 AddTemperature(20);
7590
7591 }
7592
7593 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
7594 {
7595 AddTemperature(-20);
7596
7597 }
7598
7599 else if (action_id ==
EActions.FLIP_FROZEN)
7600 {
7601 SetFrozen(!GetIsFrozen());
7602
7603 }
7604
7605 else if (action_id ==
EActions.ADD_WETNESS)
7606 {
7608
7609 }
7610
7611 else if (action_id ==
EActions.REMOVE_WETNESS)
7612 {
7614
7615 }
7616
7617 else if (action_id ==
EActions.LIQUIDTYPE_UP)
7618 {
7621
7622
7623 }
7624
7625 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
7626 {
7629 }
7630
7631 else if (action_id ==
EActions.MAKE_SPECIAL)
7632 {
7633 auto debugParams = DebugSpawnParams.WithPlayer(player);
7634 OnDebugSpawnEx(debugParams);
7635 }
7636
7637 else if (action_id ==
EActions.DELETE)
7638 {
7639 Delete();
7640 }
7641
7642 }
7643
7644
7645 return false;
7646 }
7647
7648
7649
7650
7654
7657
7658
7659
7661 {
7662 return false;
7663 }
7664
7665
7667 {
7668 return true;
7669 }
7670
7671
7673 {
7674 return true;
7675 }
7676
7677
7678
7680 {
7681 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
7683 }
7684
7687 {
7688 return null;
7689 }
7690
7692 {
7693 return false;
7694 }
7695
7697 {
7698 return false;
7699 }
7700
7704
7705
7707 {
7708 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7709 return module_repairing.CanRepair(this, item_repair_kit);
7710 }
7711
7712
7713 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
7714 {
7715 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
7716 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
7717 }
7718
7719
7721 {
7722
7723
7724
7725
7726
7727
7728
7729
7730 return 1;
7731 }
7732
7733
7734
7736 {
7738 }
7739
7740
7741
7743 {
7745 }
7746
7747
7756 {
7757 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7758
7759 if (player)
7760 {
7761 player.MessageStatus(text);
7762 }
7763 }
7764
7765
7774 {
7775 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7776
7777 if (player)
7778 {
7779 player.MessageAction(text);
7780 }
7781 }
7782
7783
7792 {
7793 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7794
7795 if (player)
7796 {
7797 player.MessageFriendly(text);
7798 }
7799 }
7800
7801
7810 {
7811 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
7812
7813 if (player)
7814 {
7815 player.MessageImportant(text);
7816 }
7817 }
7818
7820 {
7821 return true;
7822 }
7823
7824
7825 override bool KindOf(
string tag)
7826 {
7827 bool found = false;
7828 string item_name = this.
GetType();
7831
7832 int array_size = item_tag_array.Count();
7833 for (int i = 0; i < array_size; i++)
7834 {
7835 if (item_tag_array.Get(i) == tag)
7836 {
7837 found = true;
7838 break;
7839 }
7840 }
7841 return found;
7842 }
7843
7844
7846 {
7847
7848 super.OnRPC(sender, rpc_type,ctx);
7849
7850
7851 switch (rpc_type)
7852 {
7853 #ifndef SERVER
7854 case ERPCs.RPC_SOUND_LOCK_ATTACH:
7855 Param2<bool, string> p = new Param2<bool, string>(false, "");
7856
7858 return;
7859
7860 bool play = p.param1;
7861 string soundSet = p.param2;
7862
7863 if (play)
7864 {
7866 {
7868 {
7870 }
7871 }
7872 else
7873 {
7875 }
7876 }
7877 else
7878 {
7880 }
7881
7882 break;
7883 #endif
7884
7885 }
7886
7888 {
7890 }
7891 }
7892
7893
7894
7895
7897 {
7898 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
7899 return plugin.GetID(
name);
7900 }
7901
7903 {
7904 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
7905 return plugin.GetName(id);
7906 }
7907
7910 {
7911
7912
7913 int varFlags;
7914 if (!ctx.
Read(varFlags))
7915 return;
7916
7917 if (varFlags & ItemVariableFlags.FLOAT)
7918 {
7920 }
7921 }
7922
7924 {
7925
7926 super.SerializeNumericalVars(floats_out);
7927
7928
7929
7931 {
7933 }
7934
7936 {
7938 }
7939
7941 {
7943 }
7944
7946 {
7951 }
7952
7954 {
7956 }
7957 }
7958
7960 {
7961
7962 super.DeSerializeNumericalVars(floats);
7963
7964
7965 int index = 0;
7966 int mask = Math.Round(floats.Get(index));
7967
7968 index++;
7969
7971 {
7973 {
7975 }
7976 else
7977 {
7978 float quantity = floats.Get(index);
7980 }
7981 index++;
7982 }
7983
7985 {
7986 float wet = floats.Get(index);
7988 index++;
7989 }
7990
7992 {
7993 int liquidtype = Math.Round(floats.Get(index));
7995 index++;
7996 }
7997
7999 {
8001 index++;
8003 index++;
8005 index++;
8007 index++;
8008 }
8009
8011 {
8012 int cleanness = Math.Round(floats.Get(index));
8014 index++;
8015 }
8016 }
8017
8019 {
8020 super.WriteVarsToCTX(ctx);
8021
8022
8024 {
8026 }
8027
8029 {
8031 }
8032
8034 {
8036 }
8037
8039 {
8040 int r,g,b,a;
8046 }
8047
8049 {
8051 }
8052 }
8053
8055 {
8056 if (!super.ReadVarsFromCTX(ctx,version))
8057 return false;
8058
8059 int intValue;
8060 float value;
8061
8062 if (version < 140)
8063 {
8064 if (!ctx.
Read(intValue))
8065 return false;
8066
8067 m_VariablesMask = intValue;
8068 }
8069
8071 {
8072 if (!ctx.
Read(value))
8073 return false;
8074
8076 {
8078 }
8079 else
8080 {
8082 }
8083 }
8084
8085 if (version < 140)
8086 {
8088 {
8089 if (!ctx.
Read(value))
8090 return false;
8091 SetTemperatureDirect(value);
8092 }
8093 }
8094
8096 {
8097 if (!ctx.
Read(value))
8098 return false;
8100 }
8101
8103 {
8104 if (!ctx.
Read(intValue))
8105 return false;
8107 }
8108
8110 {
8111 int r,g,b,a;
8113 return false;
8115 return false;
8117 return false;
8119 return false;
8120
8122 }
8123
8125 {
8126 if (!ctx.
Read(intValue))
8127 return false;
8129 }
8130
8131 if (version >= 138 && version < 140)
8132 {
8134 {
8135 if (!ctx.
Read(intValue))
8136 return false;
8137 SetFrozen(intValue);
8138 }
8139 }
8140
8141 return true;
8142 }
8143
8144
8146 {
8149 {
8151 }
8152
8153 if (!super.OnStoreLoad(ctx, version))
8154 {
8156 return false;
8157 }
8158
8159 if (version >= 114)
8160 {
8161 bool hasQuickBarIndexSaved;
8162
8163 if (!ctx.
Read(hasQuickBarIndexSaved))
8164 {
8166 return false;
8167 }
8168
8169 if (hasQuickBarIndexSaved)
8170 {
8171 int itmQBIndex;
8172
8173
8174 if (!ctx.
Read(itmQBIndex))
8175 {
8177 return false;
8178 }
8179
8180 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
8181 if (itmQBIndex != -1 && parentPlayer)
8182 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
8183 }
8184 }
8185 else
8186 {
8187
8188 PlayerBase player;
8189 int itemQBIndex;
8190 if (version ==
int.
MAX)
8191 {
8192 if (!ctx.
Read(itemQBIndex))
8193 {
8195 return false;
8196 }
8197 }
8198 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
8199 {
8200
8201 if (!ctx.
Read(itemQBIndex))
8202 {
8204 return false;
8205 }
8206 if (itemQBIndex != -1 && player)
8207 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
8208 }
8209 }
8210
8211 if (version < 140)
8212 {
8213
8214 if (!LoadVariables(ctx, version))
8215 {
8217 return false;
8218 }
8219 }
8220
8221
8223 {
8225 return false;
8226 }
8227 if (version >= 132)
8228 {
8230 if (raib)
8231 {
8233 {
8235 return false;
8236 }
8237 }
8238 }
8239
8241 return true;
8242 }
8243
8244
8245
8247 {
8248 super.OnStoreSave(ctx);
8249
8250 PlayerBase player;
8251 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
8252 {
8254
8255 int itemQBIndex = -1;
8256 itemQBIndex = player.FindQuickBarEntityIndex(this);
8257 ctx.
Write(itemQBIndex);
8258 }
8259 else
8260 {
8262 }
8263
8265
8267 if (raib)
8268 {
8270 }
8271 }
8272
8273
8275 {
8276 super.AfterStoreLoad();
8277
8279 {
8281 }
8282
8284 {
8287 }
8288 }
8289
8291 {
8292 super.EEOnAfterLoad();
8293
8295 {
8297 }
8298
8301 }
8302
8304 {
8305 return false;
8306 }
8307
8308
8309
8311 {
8313 {
8314 #ifdef PLATFORM_CONSOLE
8315
8317 {
8319 if (menu)
8320 {
8322 }
8323 }
8324 #endif
8325 }
8326
8328 {
8331 }
8332
8334 {
8335 SetWeightDirty();
8337 }
8339 {
8342 }
8343
8345 {
8348 }
8350 {
8353 }
8354
8355 super.OnVariablesSynchronized();
8356 }
8357
8358
8359
8361 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
8362 {
8363 if (!IsServerCheck(allow_client))
8364 return false;
8365
8367 return false;
8368
8371
8372 if (value <= (min + 0.001))
8373 value = min;
8374
8375 if (value == min)
8376 {
8377 if (destroy_config)
8378 {
8379 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
8380 if (dstr)
8381 {
8383 this.Delete();
8384 return true;
8385 }
8386 }
8387 else if (destroy_forced)
8388 {
8390 this.Delete();
8391 return true;
8392 }
8393
8395 }
8396
8399
8401 {
8403
8404 if (delta)
8406 }
8407
8409
8410 return false;
8411 }
8412
8413
8415 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
8416 {
8418 }
8419
8421 {
8424 }
8425
8427 {
8430 }
8431
8434 {
8435 float value_clamped = Math.Clamp(value, 0, 1);
8437 SetQuantity(result, destroy_config, destroy_forced);
8438 }
8439
8440
8443 {
8445 }
8446
8448 {
8450 }
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8462 {
8463 int slot = -1;
8464 if (GetInventory())
8465 {
8466 InventoryLocation il = new InventoryLocation;
8467 GetInventory().GetCurrentInventoryLocation(il);
8469 }
8470
8472 }
8473
8475 {
8476 float quantity_max = 0;
8477
8479 {
8480 if (attSlotID != -1)
8481 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
8482
8483 if (quantity_max <= 0)
8485 }
8486
8487 if (quantity_max <= 0)
8489
8490 return quantity_max;
8491 }
8492
8494 {
8496 }
8497
8499 {
8501 }
8502
8503
8505 {
8507 }
8508
8510 {
8512 }
8513
8515 {
8517 }
8518
8519
8521 {
8522
8523 float weightEx = GetWeightEx();
8524 float special = GetInventoryAndCargoWeight();
8525 return weightEx - special;
8526 }
8527
8528
8530 {
8532 }
8533
8535 {
8537 {
8538 #ifdef DEVELOPER
8539 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8540 {
8541 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
8543 }
8544 #endif
8545
8547 }
8548 else if (HasEnergyManager())
8549 {
8550 #ifdef DEVELOPER
8551 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8552 {
8553 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
8554 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
8555 }
8556 #endif
8557 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
8558 }
8559 else
8560 {
8561 #ifdef DEVELOPER
8562 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
8563 {
8564 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
8565 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
8566 }
8567 #endif
8568 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
8569 }
8570 }
8571
8574 {
8575 int item_count = 0;
8577
8578 if (GetInventory().GetCargo() != NULL)
8579 {
8580 item_count = GetInventory().GetCargo().GetItemCount();
8581 }
8582
8583 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
8584 {
8585 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
8586 if (item)
8587 item_count += item.GetNumberOfItems();
8588 }
8589 return item_count;
8590 }
8591
8594 {
8595 float weight = 0;
8596 float wetness = 1;
8597 if (include_wetness)
8600 {
8601 weight = wetness * m_ConfigWeight;
8602 }
8604 {
8605 weight = 1;
8606 }
8607 return weight;
8608 }
8609
8610
8611
8613 {
8614 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
8615 {
8616 GameInventory inv = GetInventory();
8617 array<EntityAI> items = new array<EntityAI>;
8619 for (int i = 0; i < items.Count(); i++)
8620 {
8622 if (item)
8623 {
8625 }
8626 }
8627 }
8628 }
8629
8630
8631
8632
8634 {
8635 float energy = 0;
8636 if (HasEnergyManager())
8637 {
8638 energy = GetCompEM().GetEnergy();
8639 }
8640 return energy;
8641 }
8642
8643
8645 {
8646 super.OnEnergyConsumed();
8647
8649 }
8650
8652 {
8653 super.OnEnergyAdded();
8654
8656 }
8657
8658
8660 {
8661 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
8662 {
8664 {
8665 float energy_0to1 = GetCompEM().GetEnergy0To1();
8667 }
8668 }
8669 }
8670
8671
8673 {
8674 return ConfigGetFloat("heatIsolation");
8675 }
8676
8678 {
8680 }
8681
8683 {
8684 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
8685 if (
GetGame().ConfigIsExisting(paramPath))
8687
8688 return 0.0;
8689 }
8690
8692 {
8693 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
8694 if (
GetGame().ConfigIsExisting(paramPath))
8696
8697 return 0.0;
8698 }
8699
8700 override void SetWet(
float value,
bool allow_client =
false)
8701 {
8702 if (!IsServerCheck(allow_client))
8703 return;
8704
8707
8709
8710 m_VarWet = Math.Clamp(value, min, max);
8711
8713 {
8716 }
8717 }
8718
8719 override void AddWet(
float value)
8720 {
8722 }
8723
8725 {
8727 }
8728
8730 {
8732 }
8733
8735 {
8737 }
8738
8740 {
8742 }
8743
8745 {
8747 }
8748
8750 {
8753 if (newLevel != oldLevel)
8754 {
8756 }
8757 }
8758
8760 {
8761 SetWeightDirty();
8762 }
8763
8765 {
8766 return GetWetLevelInternal(
m_VarWet);
8767 }
8768
8769
8770
8772 {
8774 }
8775
8777 {
8779 }
8780
8782 {
8784 }
8785
8787 {
8789 }
8790
8791
8792
8794 {
8795 if (ConfigIsExisting("itemModelLength"))
8796 {
8797 return ConfigGetFloat("itemModelLength");
8798 }
8799 return 0;
8800 }
8801
8803 {
8804 if (ConfigIsExisting("itemAttachOffset"))
8805 {
8806 return ConfigGetFloat("itemAttachOffset");
8807 }
8808 return 0;
8809 }
8810
8811 override void SetCleanness(
int value,
bool allow_client =
false)
8812 {
8813 if (!IsServerCheck(allow_client))
8814 return;
8815
8817
8819
8822 }
8823
8825 {
8827 }
8828
8830 {
8831 return true;
8832 }
8833
8834
8835
8836
8838 {
8840 }
8841
8843 {
8845 }
8846
8847
8848
8849
8850 override void SetColor(
int r,
int g,
int b,
int a)
8851 {
8857 }
8859 override void GetColor(out
int r,out
int g,out
int b,out
int a)
8860 {
8865 }
8866
8868 {
8870 }
8871
8874 {
8875 int r,g,b,a;
8877 r = r/255;
8878 g = g/255;
8879 b = b/255;
8880 a = a/255;
8881 return MiscGameplayFunctions.GetColorString(r, g, b, a);
8882 }
8883
8884
8885
8886 override void SetLiquidType(
int value,
bool allow_client =
false)
8887 {
8888 if (!IsServerCheck(allow_client))
8889 return;
8890
8895 }
8896
8898 {
8899 return ConfigGetInt("varLiquidTypeInit");
8900 }
8901
8903 {
8905 }
8906
8908 {
8910 SetFrozen(false);
8911 }
8912
8915 {
8916 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
8917 }
8918
8919
8922 {
8923 PlayerBase nplayer;
8924 if (PlayerBase.CastTo(nplayer, player))
8925 {
8927
8928 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
8929 }
8930 }
8931
8932
8935 {
8936 PlayerBase nplayer;
8937 if (PlayerBase.CastTo(nplayer,player))
8938 {
8939
8940 nplayer.SetEnableQuickBarEntityShortcut(this,false);
8941
8942 }
8943
8944
8945 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
8946
8947
8948 if (HasEnergyManager())
8949 {
8950 GetCompEM().UpdatePlugState();
8951 }
8952 }
8953
8954
8956 {
8957 super.OnPlacementStarted(player);
8958
8960 }
8961
8962 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
8963 {
8965 {
8966 m_AdminLog.OnPlacementComplete(player,
this);
8967 }
8968
8969 super.OnPlacementComplete(player, position, orientation);
8970 }
8971
8972
8973
8974
8975
8977 {
8979 {
8980 return true;
8981 }
8982 else
8983 {
8984 return false;
8985 }
8986 }
8987
8988
8990 {
8992 {
8994 }
8995 }
8996
8997
8999 {
9001 }
9002
9004 {
9006 }
9007
9008 override void InsertAgent(
int agent,
float count = 1)
9009 {
9010 if (count < 1)
9011 return;
9012
9014 }
9015
9018 {
9020 }
9021
9022
9024 {
9026 }
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9070 {
9072 return false;
9073 return true;
9074 }
9075
9077 {
9078
9080 }
9081
9082
9085 {
9086 super.CheckForRoofLimited(timeTresholdMS);
9087
9089 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
9090 {
9091 m_PreviousRoofTestTime = time;
9092 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
9093 }
9094 }
9095
9096
9098 {
9100 {
9101 return 0;
9102 }
9103
9104 if (GetInventory().GetAttachmentSlotsCount() != 0)
9105 {
9106 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
9107 if (filter)
9108 return filter.GetProtectionLevel(type, false, system);
9109 else
9110 return 0;
9111 }
9112
9113 string subclassPath, entryName;
9114
9115 switch (type)
9116 {
9118 entryName = "biological";
9119 break;
9121 entryName = "chemical";
9122 break;
9123 default:
9124 entryName = "biological";
9125 break;
9126 }
9127
9128 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
9129
9131 }
9132
9133
9134
9137 {
9138 if (!IsMagazine())
9140
9142 }
9143
9144
9145
9146
9147
9152 {
9153 return true;
9154 }
9155
9157 {
9159 }
9160
9161
9162
9163
9164
9166 {
9167 if (parent)
9168 {
9169 if (parent.IsInherited(DayZInfected))
9170 return true;
9171
9172 if (!parent.IsRuined())
9173 return true;
9174 }
9175
9176 return true;
9177 }
9178
9180 {
9181 if (!super.CanPutAsAttachment(parent))
9182 {
9183 return false;
9184 }
9185
9186 if (!IsRuined() && !parent.IsRuined())
9187 {
9188 return true;
9189 }
9190
9191 return false;
9192 }
9193
9195 {
9196
9197
9198
9199
9200 return super.CanReceiveItemIntoCargo(item);
9201 }
9202
9204 {
9205
9206
9207
9208
9209 GameInventory attachmentInv = attachment.GetInventory();
9211 {
9212 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
9213 return false;
9214 }
9215
9216 InventoryLocation loc = new InventoryLocation();
9217 attachment.GetInventory().GetCurrentInventoryLocation(loc);
9218 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
9219 return false;
9220
9221 return super.CanReceiveAttachment(attachment, slotId);
9222 }
9223
9225 {
9226 if (!super.CanReleaseAttachment(attachment))
9227 return false;
9228
9229 return GetInventory().AreChildrenAccessible();
9230 }
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9253 {
9254 int id = muzzle_owner.GetMuzzleID();
9255 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
9256
9257 if (WPOF_array)
9258 {
9259 for (int i = 0; i < WPOF_array.Count(); i++)
9260 {
9261 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
9262
9263 if (WPOF)
9264 {
9265 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
9266 }
9267 }
9268 }
9269 }
9270
9271
9273 {
9274 int id = muzzle_owner.GetMuzzleID();
9276
9277 if (WPOBE_array)
9278 {
9279 for (int i = 0; i < WPOBE_array.Count(); i++)
9280 {
9281 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
9282
9283 if (WPOBE)
9284 {
9285 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9286 }
9287 }
9288 }
9289 }
9290
9291
9293 {
9294 int id = muzzle_owner.GetMuzzleID();
9295 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9296
9297 if (WPOOH_array)
9298 {
9299 for (int i = 0; i < WPOOH_array.Count(); i++)
9300 {
9301 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9302
9303 if (WPOOH)
9304 {
9305 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
9306 }
9307 }
9308 }
9309 }
9310
9311
9313 {
9314 int id = muzzle_owner.GetMuzzleID();
9315 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9316
9317 if (WPOOH_array)
9318 {
9319 for (int i = 0; i < WPOOH_array.Count(); i++)
9320 {
9321 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9322
9323 if (WPOOH)
9324 {
9325 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9326 }
9327 }
9328 }
9329 }
9330
9331
9333 {
9334 int id = muzzle_owner.GetMuzzleID();
9335 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
9336
9337 if (WPOOH_array)
9338 {
9339 for (int i = 0; i < WPOOH_array.Count(); i++)
9340 {
9341 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
9342
9343 if (WPOOH)
9344 {
9345 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9346 }
9347 }
9348 }
9349 }
9350
9351
9352
9354 {
9356 {
9357 return true;
9358 }
9359
9360 return false;
9361 }
9362
9364 {
9366 {
9367 return true;
9368 }
9369
9370 return false;
9371 }
9372
9374 {
9376 {
9377 return true;
9378 }
9379
9380 return false;
9381 }
9382
9384 {
9385 return false;
9386 }
9387
9390 {
9391 return UATimeSpent.DEFAULT_DEPLOY;
9392 }
9393
9394
9395
9396
9398 {
9400 SetSynchDirty();
9401 }
9402
9404 {
9406 }
9407
9408
9410 {
9411 return false;
9412 }
9413
9416 {
9417 string att_type = "None";
9418
9419 if (ConfigIsExisting("soundAttType"))
9420 {
9421 att_type = ConfigGetString("soundAttType");
9422 }
9423
9425 }
9426
9428 {
9430 }
9431
9432
9433
9434
9435
9439
9441 {
9444
9446 }
9447
9448
9450 {
9452 return;
9453
9455
9458
9461
9462 SoundParameters params = new SoundParameters();
9466 }
9467
9468
9470 {
9472 return;
9473
9475 SetSynchDirty();
9476
9479 }
9480
9481
9483 {
9485 return;
9486
9488 SetSynchDirty();
9489
9492 }
9493
9495 {
9497 }
9498
9500 {
9502 }
9503
9506 {
9507 if (!
GetGame().IsDedicatedServer())
9508 {
9509 if (ConfigIsExisting("attachSoundSet"))
9510 {
9511 string cfg_path = "";
9512 string soundset = "";
9514
9517 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
9518 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
9519
9520 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
9521 {
9522 for (int i = 0; i < cfg_soundset_array.Count(); i++)
9523 {
9524 if (cfg_slot_array[i] == slot_type)
9525 {
9526 soundset = cfg_soundset_array[i];
9527 break;
9528 }
9529 }
9530 }
9531
9532 if (soundset != "")
9533 {
9534 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
9536 }
9537 }
9538 }
9539 }
9540
9542 {
9543
9544 }
9545
9546 void OnApply(PlayerBase player);
9547
9549 {
9550 return 1.0;
9551 };
9552
9554 {
9556 }
9557
9559 {
9561 }
9562
9564
9566 {
9567 SetDynamicPhysicsLifeTime(0.01);
9569 }
9570
9572 {
9573 array<string> zone_names = new array<string>;
9574 GetDamageZones(zone_names);
9575 for (int i = 0; i < zone_names.Count(); i++)
9576 {
9577 SetHealthMax(zone_names.Get(i),"Health");
9578 }
9579 SetHealthMax("","Health");
9580 }
9581
9584 {
9585 float global_health = GetHealth01("","Health");
9586 array<string> zones = new array<string>;
9587 GetDamageZones(zones);
9588
9589 for (int i = 0; i < zones.Count(); i++)
9590 {
9591 SetHealth01(zones.Get(i),"Health",global_health);
9592 }
9593 }
9594
9597 {
9598 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
9599 }
9600
9602 {
9603 if (!hasRootAsPlayer)
9604 {
9605 if (refParentIB)
9606 {
9607
9608 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
9609 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
9610
9611 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
9612 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
9613
9616 }
9617 else
9618 {
9619
9622 }
9623 }
9624 }
9625
9627 {
9629 {
9630 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
9631 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
9632 {
9633 float heatPermCoef = 1.0;
9635 while (ent)
9636 {
9637 heatPermCoef *= ent.GetHeatPermeabilityCoef();
9638 ent = ent.GetHierarchyParent();
9639 }
9640
9641 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
9642 }
9643 }
9644 }
9645
9647 {
9648
9649 EntityAI parent = GetHierarchyParent();
9650 if (!parent)
9651 {
9652 hasParent = false;
9653 hasRootAsPlayer = false;
9654 }
9655 else
9656 {
9657 hasParent = true;
9658 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
9659 refParentIB =
ItemBase.Cast(parent);
9660 }
9661 }
9662
9663 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
9664 {
9665
9666 }
9667
9669 {
9670
9671 return false;
9672 }
9673
9675 {
9676
9677
9678 return false;
9679 }
9680
9682 {
9683
9684 return false;
9685 }
9686
9689 {
9690 return !GetIsFrozen() &&
IsOpen();
9691 }
9692
9694 {
9695 bool hasParent = false, hasRootAsPlayer = false;
9697
9698 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
9699 bool foodDecay =
g_Game.IsFoodDecayEnabled();
9700
9701 if (wwtu || foodDecay)
9702 {
9706
9707 if (processWetness || processTemperature || processDecay)
9708 {
9710
9711 if (processWetness)
9712 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
9713
9714 if (processTemperature)
9716
9717 if (processDecay)
9718 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
9719 }
9720 }
9721 }
9722
9725 {
9727 }
9728
9730 {
9733
9734 return super.GetTemperatureFreezeThreshold();
9735 }
9736
9738 {
9741
9742 return super.GetTemperatureThawThreshold();
9743 }
9744
9746 {
9749
9750 return super.GetItemOverheatThreshold();
9751 }
9752
9754 {
9756 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
9757
9758 return super.GetTemperatureFreezeTime();
9759 }
9760
9762 {
9764 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
9765
9766 return super.GetTemperatureThawTime();
9767 }
9768
9773
9775 {
9776 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
9777 }
9778
9780 {
9781 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
9782 }
9783
9786 {
9788 }
9789
9791 {
9793 }
9794
9796 {
9798 }
9799
9802 {
9803 return null;
9804 }
9805
9808 {
9809 return false;
9810 }
9811
9813 {
9815 {
9818 if (!trg)
9819 {
9821 explosive = this;
9822 }
9823
9824 explosive.PairRemote(trg);
9826
9827 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
9828 trg.SetPersistentPairID(persistentID);
9829 explosive.SetPersistentPairID(persistentID);
9830
9831 return true;
9832 }
9833 return false;
9834 }
9835
9838 {
9839 float ret = 1.0;
9842 ret *= GetHealth01();
9843
9844 return ret;
9845 }
9846
9847 #ifdef DEVELOPER
9848 override void SetDebugItem()
9849 {
9850 super.SetDebugItem();
9851 _itemBase = this;
9852 }
9853
9855 {
9856 string text = super.GetDebugText();
9857
9859 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
9860
9861 return text;
9862 }
9863 #endif
9864
9866 {
9867 return true;
9868 }
9869
9871
9873
9875 {
9878 }
9879
9880
9888
9904}
9905
9907{
9909 if (entity)
9910 {
9911 bool is_item = entity.IsInherited(
ItemBase);
9912 if (is_item && full_quantity)
9913 {
9916 }
9917 }
9918 else
9919 {
9921 return NULL;
9922 }
9923 return entity;
9924}
9925
9927{
9928 if (item)
9929 {
9930 if (health > 0)
9931 item.SetHealth("", "", health);
9932
9933 if (item.CanHaveTemperature())
9934 {
9936 if (item.CanFreeze())
9937 item.SetFrozen(false);
9938 }
9939
9940 if (item.HasEnergyManager())
9941 {
9942 if (quantity >= 0)
9943 {
9944 item.GetCompEM().SetEnergy0To1(quantity);
9945 }
9946 else
9947 {
9949 }
9950 }
9951 else if (item.IsMagazine())
9952 {
9953 Magazine mag = Magazine.Cast(item);
9954 if (quantity >= 0)
9955 {
9956 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
9957 }
9958 else
9959 {
9961 }
9962
9963 }
9964 else
9965 {
9966 if (quantity >= 0)
9967 {
9968 item.SetQuantityNormalized(quantity, false);
9969 }
9970 else
9971 {
9973 }
9974
9975 }
9976 }
9977}
9978
9979#ifdef DEVELOPER
9981#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.