9220{
9222 {
9223 return true;
9224 }
9225};
9226
9227
9228
9230{
9234
9236
9239
9240
9241
9242
9243
9252
9258
9263
9268
9289 protected bool m_IsResultOfSplit
9290
9292
9297
9298
9299
9301
9305
9306
9307
9309
9312
9313
9314
9320
9321
9329
9332
9333
9335
9336
9338
9339
9344
9345
9350
9351
9353
9354
9356 {
9361
9362 if (!
GetGame().IsDedicatedServer())
9363 {
9365 {
9367
9369 {
9371 }
9372 }
9373
9376 }
9377
9378 m_OldLocation = null;
9379
9381 {
9383 }
9384
9385 if (ConfigIsExisting("headSelectionsToHide"))
9386 {
9389 }
9390
9392 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
9393 {
9395 }
9396
9398
9399 m_IsResultOfSplit = false;
9400
9402 }
9403
9405 {
9406 super.InitItemVariables();
9407
9413 m_Count = ConfigGetInt(
"count");
9414
9417
9422
9425
9430
9442
9446
9447
9450 if (ConfigIsExisting("canBeSplit"))
9451 {
9454 }
9455
9457 if (ConfigIsExisting("itemBehaviour"))
9459
9460
9463 RegisterNetSyncVariableInt("m_VarLiquidType");
9464 RegisterNetSyncVariableInt("m_Cleanness",0,1);
9465
9466 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
9467 RegisterNetSyncVariableFloat("m_ImpactSpeed");
9468 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
9469
9470 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
9471 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
9472 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
9473 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
9474
9475 RegisterNetSyncVariableBool("m_IsBeingPlaced");
9476 RegisterNetSyncVariableBool("m_IsTakeable");
9477 RegisterNetSyncVariableBool("m_IsHologram");
9478
9481 {
9484 }
9485
9487
9489 if (ConfigIsExisting("temperaturePerQuantityWeight"))
9491
9492 }
9493
9495 {
9497 }
9498
9500 {
9503 {
9508 }
9509 }
9510
9511 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
9512 {
9514 {
9517 }
9518
9520 }
9521
9523 {
9529 }
9530
9532
9534 {
9536
9537 if (!action)
9538 {
9539 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
9540 return;
9541 }
9542
9544 if (!ai)
9545 {
9547 return;
9548 }
9549
9551 if (!action_array)
9552 {
9553 action_array = new array<ActionBase_Basic>;
9555 }
9556 if (LogManager.IsActionLogEnable())
9557 {
9558 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9559 }
9560
9561 if (action_array.Find(action) != -1)
9562 {
9563 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9564 }
9565 else
9566 {
9567 action_array.Insert(action);
9568 }
9569 }
9570
9572 {
9574 ActionBase action = player.GetActionManager().GetAction(actionName);
9577
9578 if (action_array)
9579 {
9580 action_array.RemoveItem(action);
9581 }
9582 }
9583
9584
9585
9587 {
9588 ActionOverrideData overrideData = new ActionOverrideData();
9592
9594 if (!actionMap)
9595 {
9598 }
9599
9600 actionMap.Insert(this.
Type(), overrideData);
9601
9602 }
9603
9605
9607
9608
9610 {
9613
9616
9617 string config_to_search = "CfgVehicles";
9618 string muzzle_owner_config;
9619
9621 {
9622 if (IsInherited(Weapon))
9623 config_to_search = "CfgWeapons";
9624
9625 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9626
9627 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9628
9630
9631 if (config_OnFire_subclass_count > 0)
9632 {
9633 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9634
9635 for (int i = 0; i < config_OnFire_subclass_count; i++)
9636 {
9637 string particle_class = "";
9639 string config_OnFire_entry = config_OnFire_class + particle_class;
9640 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9641 WPOF_array.Insert(WPOF);
9642 }
9643
9644
9646 }
9647 }
9648
9650 {
9651 config_to_search = "CfgWeapons";
9652 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9653
9654 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9655
9657
9658 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9659 {
9660 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9661
9662 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9663 {
9664 string particle_class2 = "";
9666 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9667 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9668 WPOBE_array.Insert(WPOBE);
9669 }
9670
9671
9673 }
9674 }
9675 }
9676
9677
9679 {
9682
9684 {
9685 string config_to_search = "CfgVehicles";
9686
9687 if (IsInherited(Weapon))
9688 config_to_search = "CfgWeapons";
9689
9690 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9691 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9692
9693 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9694 {
9695
9697
9699 {
9701 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9703 return;
9704 }
9705
9708
9709
9710
9712 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9713
9714 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9715 {
9716 string particle_class = "";
9718 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9720
9721 if (entry_type == CT_CLASS)
9722 {
9723 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9724 WPOOH_array.Insert(WPOF);
9725 }
9726 }
9727
9728
9730 }
9731 }
9732 }
9733
9735 {
9737 }
9738
9740 {
9742 {
9744
9747
9750
9751 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9752 }
9753 }
9754
9756 {
9758 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9759
9761 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9762
9764 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9765
9767 {
9769 }
9770 }
9771
9773 {
9775 }
9776
9778 {
9781 else
9783
9785 {
9788 }
9789 else
9790 {
9793
9796 }
9797
9799 }
9800
9802 {
9804 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9805 }
9806
9808 {
9810 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9812 }
9813
9815 {
9817 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9818 }
9819
9821 {
9824
9825 OverheatingParticle OP = new OverheatingParticle();
9830
9832 }
9833
9835 {
9838
9839 return -1;
9840 }
9841
9843 {
9845 {
9848
9849 for (int i = count; i > 0; --i)
9850 {
9851 int id = i - 1;
9854
9857
9858 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9859 {
9860 if (p)
9861 {
9864 }
9865 }
9866 }
9867 }
9868 }
9869
9871 {
9873 {
9875 {
9876 int id = i - 1;
9878
9879 if (OP)
9880 {
9882
9883 if (p)
9884 {
9886 }
9887
9888 delete OP;
9889 }
9890 }
9891
9894 }
9895 }
9896
9899 {
9900 return 0.0;
9901 }
9902
9903
9905 {
9906 return 250;
9907 }
9908
9910 {
9911 return 0;
9912 }
9913
9916 {
9918 return true;
9919
9920 return false;
9921 }
9922
9925 {
9928
9930 {
9932 }
9933 else
9934 {
9935
9937 }
9938
9940 }
9941
9948 {
9949 return -1;
9950 }
9951
9952
9953
9954
9956 {
9958 {
9960 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9961
9962 if (r_index >= 0)
9963 {
9964 InventoryLocation r_il = new InventoryLocation;
9965 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9966
9967 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9970 {
9971 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9972 }
9974 {
9975 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9976 }
9977
9978 }
9979
9980 player.GetHumanInventory().ClearUserReservedLocation(this);
9981 }
9982
9985 }
9986
9987
9988
9989
9991 {
9992 return ItemBase.m_DebugActionsMask;
9993 }
9994
9996 {
9997 return ItemBase.m_DebugActionsMask & mask;
9998 }
9999
10001 {
10002 ItemBase.m_DebugActionsMask = mask;
10003 }
10004
10006 {
10007 ItemBase.m_DebugActionsMask |= mask;
10008 }
10009
10011 {
10012 ItemBase.m_DebugActionsMask &= ~mask;
10013 }
10014
10016 {
10018 {
10020 }
10021 else
10022 {
10024 }
10025 }
10026
10027
10029 {
10030 if (GetEconomyProfile())
10031 {
10032 float q_max = GetEconomyProfile().GetQuantityMax();
10033 if (q_max > 0)
10034 {
10035 float q_min = GetEconomyProfile().GetQuantityMin();
10036 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
10037
10039 {
10040 ComponentEnergyManager comp = GetCompEM();
10042 {
10044 }
10045 }
10047 {
10049
10050 }
10051
10052 }
10053 }
10054 }
10055
10058 {
10059 EntityAI parent = GetHierarchyParent();
10060
10061 if (parent)
10062 {
10063 InventoryLocation inventory_location_to_lock = new InventoryLocation;
10064 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
10065 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
10066 }
10067 }
10068
10071 {
10072 EntityAI parent = GetHierarchyParent();
10073
10074 if (parent)
10075 {
10076 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
10077 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
10078 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
10079 }
10080 }
10081
10083 {
10084
10085
10086
10087
10089
10091 {
10092 if (ScriptInputUserData.CanStoreInputUserData())
10093 {
10094 ScriptInputUserData ctx = new ScriptInputUserData;
10100 ctx.
Write(use_stack_max);
10103
10105 {
10106 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
10107 }
10108 }
10109 }
10110 else if (!
GetGame().IsMultiplayer())
10111 {
10113 }
10114 }
10115
10117 {
10119 }
10120
10122 {
10124 }
10125
10127 {
10129 }
10130
10132 {
10133
10134 return false;
10135 }
10136
10138 {
10139 return false;
10140 }
10141
10145 {
10146 return false;
10147 }
10148
10150 {
10151 return "";
10152 }
10153
10155
10157 {
10158 return false;
10159 }
10160
10162 {
10163 return true;
10164 }
10165
10166
10167
10169 {
10170 return true;
10171 }
10172
10174 {
10175 return true;
10176 }
10177
10179 {
10180 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
10182 }
10183
10185 {
10187 }
10188
10190 {
10192 if (!is_being_placed)
10194 SetSynchDirty();
10195 }
10196
10197
10199
10201 {
10203 }
10204
10206 {
10208 }
10209
10211 {
10212 return 1;
10213 }
10214
10216 {
10217 return false;
10218 }
10219
10221 {
10223 SetSynchDirty();
10224 }
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10261 {
10262 super.OnMovedInsideCargo(container);
10263
10264 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10265 }
10266
10267 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
10268 {
10269 super.EEItemLocationChanged(oldLoc,newLoc);
10270
10271 PlayerBase new_player = null;
10272 PlayerBase old_player = null;
10273
10274 if (newLoc.GetParent())
10275 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
10276
10277 if (oldLoc.GetParent())
10278 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
10279
10281 {
10282 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
10283
10284 if (r_index >= 0)
10285 {
10286 InventoryLocation r_il = new InventoryLocation;
10287 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10288
10289 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10292 {
10293 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10294 }
10296 {
10297 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10298 }
10299
10300 }
10301 }
10302
10304 {
10305 if (new_player)
10306 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
10307
10308 if (new_player == old_player)
10309 {
10310
10311 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
10312 {
10314 {
10315 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
10316 {
10317 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10318 }
10319 }
10320 else
10321 {
10322 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10323 }
10324 }
10325
10326 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
10327 {
10328 int type = oldLoc.GetType();
10330 {
10331 oldLoc.GetParent().GetOnSetLock().Invoke(this);
10332 }
10334 {
10335 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
10336 }
10337 }
10338 if (!m_OldLocation)
10339 {
10340 m_OldLocation = new InventoryLocation;
10341 }
10342 m_OldLocation.Copy(oldLoc);
10343 }
10344 else
10345 {
10346 if (m_OldLocation)
10347 {
10348 m_OldLocation.Reset();
10349 }
10350 }
10351
10353 }
10354 else
10355 {
10356 if (new_player)
10357 {
10358 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
10359 if (res_index >= 0)
10360 {
10361 InventoryLocation il = new InventoryLocation;
10362 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
10364 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
10367 {
10368 il.
GetParent().GetOnReleaseLock().Invoke(it);
10369 }
10371 {
10373 }
10374
10375 }
10376 }
10378 {
10379
10381 }
10382
10383 if (m_OldLocation)
10384 {
10385 m_OldLocation.Reset();
10386 }
10387 }
10388 }
10389
10390 override void EOnContact(IEntity other, Contact extra)
10391 {
10393 {
10394 int liquidType = -1;
10396 if (impactSpeed > 0.0)
10397 {
10399 #ifndef SERVER
10401 #else
10403 SetSynchDirty();
10404 #endif
10406 }
10407 }
10408
10409 #ifdef SERVER
10410 if (GetCompEM() && GetCompEM().IsPlugged())
10411 {
10412 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
10413 GetCompEM().UnplugThis();
10414 }
10415 #endif
10416 }
10417
10419
10421 {
10423 }
10424
10426 {
10427
10428 }
10429
10431 {
10432 super.OnItemLocationChanged(old_owner, new_owner);
10433
10434 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
10435 PlayerBase playerNew = PlayerBase.Cast(new_owner);
10436
10437 if (!relatedPlayer && playerNew)
10438 relatedPlayer = playerNew;
10439
10440 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
10441 {
10443 if (actionMgr)
10444 {
10445 ActionBase currentAction = actionMgr.GetRunningAction();
10446 if (currentAction)
10448 }
10449 }
10450
10451 Man ownerPlayerOld = null;
10452 Man ownerPlayerNew = null;
10453
10454 if (old_owner)
10455 {
10456 if (old_owner.
IsMan())
10457 {
10458 ownerPlayerOld = Man.Cast(old_owner);
10459 }
10460 else
10461 {
10462 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
10463 }
10464 }
10465 else
10466 {
10468 {
10470
10471 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
10472 {
10473 GetCompEM().UnplugThis();
10474 }
10475 }
10476 }
10477
10478 if (new_owner)
10479 {
10480 if (new_owner.
IsMan())
10481 {
10482 ownerPlayerNew = Man.Cast(new_owner);
10483 }
10484 else
10485 {
10486 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
10487 }
10488 }
10489
10490 if (ownerPlayerOld != ownerPlayerNew)
10491 {
10492 if (ownerPlayerOld)
10493 {
10494 array<EntityAI> subItemsExit = new array<EntityAI>;
10496 for (int i = 0; i < subItemsExit.Count(); i++)
10497 {
10500 }
10501 }
10502
10503 if (ownerPlayerNew)
10504 {
10505 array<EntityAI> subItemsEnter = new array<EntityAI>;
10507 for (int j = 0; j < subItemsEnter.Count(); j++)
10508 {
10511 }
10512 }
10513 }
10514 else if (ownerPlayerNew != null)
10515 {
10516 PlayerBase nplayer;
10517 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
10518 {
10519 array<EntityAI> subItemsUpdate = new array<EntityAI>;
10521 for (int k = 0; k < subItemsUpdate.Count(); k++)
10522 {
10524 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
10525 }
10526 }
10527 }
10528
10529 if (old_owner)
10530 old_owner.OnChildItemRemoved(this);
10531 if (new_owner)
10532 new_owner.OnChildItemReceived(this);
10533 }
10534
10535
10537 {
10538 super.EEDelete(parent);
10539 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
10540 if (player)
10541 {
10543
10544 if (player.IsAlive())
10545 {
10546 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10547 if (r_index >= 0)
10548 {
10549 InventoryLocation r_il = new InventoryLocation;
10550 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10551
10552 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10555 {
10556 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10557 }
10559 {
10560 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10561 }
10562
10563 }
10564
10565 player.RemoveQuickBarEntityShortcut(this);
10566 }
10567 }
10568 }
10569
10571 {
10572 super.EEKilled(killer);
10573
10576 {
10577 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10578 {
10579 if (IsMagazine())
10580 {
10581 if (Magazine.Cast(this).GetAmmoCount() > 0)
10582 {
10584 }
10585 }
10586 else
10587 {
10589 }
10590 }
10591 }
10592 }
10593
10595 {
10596 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10597
10598 super.OnWasAttached(parent, slot_id);
10599
10602
10604 }
10605
10607 {
10608 super.OnWasDetached(parent, slot_id);
10609
10612 }
10613
10615 {
10616 int idx;
10619
10620 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10621 if (inventory_slots.Count() < 1)
10622 {
10623 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10624 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10625 }
10626 else
10627 {
10628 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10629 }
10630
10631 idx = inventory_slots.Find(slot);
10632 if (idx < 0)
10633 return "";
10634
10635 return attach_types.Get(idx);
10636 }
10637
10639 {
10640 int idx = -1;
10641 string slot;
10642
10645
10646 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10647 if (inventory_slots.Count() < 1)
10648 {
10649 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10650 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10651 }
10652 else
10653 {
10654 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10655 if (detach_types.Count() < 1)
10656 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10657 }
10658
10659 for (int i = 0; i < inventory_slots.Count(); i++)
10660 {
10661 slot = inventory_slots.Get(i);
10662 }
10663
10664 if (slot != "")
10665 {
10666 if (detach_types.Count() == 1)
10667 idx = 0;
10668 else
10669 idx = inventory_slots.Find(slot);
10670 }
10671 if (idx < 0)
10672 return "";
10673
10674 return detach_types.Get(idx);
10675 }
10676
10678 {
10679
10681
10682
10683 float min_time = 1;
10684 float max_time = 3;
10685 float delay = Math.RandomFloat(min_time, max_time);
10686
10687 explode_timer.Run(delay, this, "DoAmmoExplosion");
10688 }
10689
10691 {
10692 Magazine magazine = Magazine.Cast(this);
10693 int pop_sounds_count = 6;
10694 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10695
10696
10697 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10698 string sound_name = pop_sounds[ sound_idx ];
10700
10701
10702 magazine.ServerAddAmmoCount(-1);
10703
10704
10705 float min_temp_to_explode = 100;
10706
10707 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10708 {
10710 }
10711 }
10712
10713
10714 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10715 {
10716 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10717
10718 const int CHANCE_DAMAGE_CARGO = 4;
10719 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10720 const int CHANCE_DAMAGE_NOTHING = 2;
10721
10723 {
10724 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10725 int chances;
10726 int rnd;
10727
10728 if (GetInventory().GetCargo())
10729 {
10730 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10731 rnd = Math.RandomInt(0,chances);
10732
10733 if (rnd < CHANCE_DAMAGE_CARGO)
10734 {
10736 }
10737 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10738 {
10740 }
10741 }
10742 else
10743 {
10744 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10745 rnd = Math.RandomInt(0,chances);
10746
10747 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10748 {
10750 }
10751 }
10752 }
10753 }
10754
10756 {
10757 if (GetInventory().GetCargo())
10758 {
10759 int item_count = GetInventory().GetCargo().GetItemCount();
10760 if (item_count > 0)
10761 {
10762 int random_pick = Math.RandomInt(0, item_count);
10764 if (!item.IsExplosive())
10765 {
10766 item.AddHealth("","",damage);
10767 return true;
10768 }
10769 }
10770 }
10771 return false;
10772 }
10773
10775 {
10776 int attachment_count = GetInventory().AttachmentCount();
10777 if (attachment_count > 0)
10778 {
10779 int random_pick = Math.RandomInt(0, attachment_count);
10780 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10781 if (!attachment.IsExplosive())
10782 {
10783 attachment.AddHealth("","",damage);
10784 return true;
10785 }
10786 }
10787 return false;
10788 }
10789
10791 {
10793 }
10794
10796 {
10798 return GetInventory().CanRemoveEntity();
10799
10800 return false;
10801 }
10802
10804 {
10806 return;
10807
10809 {
10810 if (ScriptInputUserData.CanStoreInputUserData())
10811 {
10812 ScriptInputUserData ctx = new ScriptInputUserData;
10817 ctx.
Write(destination_entity);
10819 ctx.
Write(slot_id);
10821 }
10822 }
10823 else if (!
GetGame().IsMultiplayer())
10824 {
10826 }
10827 }
10828
10830 {
10832 return;
10833
10834 float split_quantity_new;
10838 InventoryLocation loc = new InventoryLocation;
10839
10840 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10841 {
10843 split_quantity_new = stack_max;
10844 else
10846
10847 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10848 if (new_item)
10849 {
10850 new_item.SetResultOfSplit(true);
10851 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10853 new_item.SetQuantity(split_quantity_new);
10854 }
10855 }
10856 else if (destination_entity && slot_id == -1)
10857 {
10858 if (quantity > stack_max)
10859 split_quantity_new = stack_max;
10860 else
10861 split_quantity_new = quantity;
10862
10864 {
10867 }
10868
10869 if (new_item)
10870 {
10871 new_item.SetResultOfSplit(true);
10872 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10874 new_item.SetQuantity(split_quantity_new);
10875 }
10876 }
10877 else
10878 {
10879 if (stack_max != 0)
10880 {
10882 {
10884 }
10885
10886 if (split_quantity_new == 0)
10887 {
10888 if (!
GetGame().IsMultiplayer())
10889 player.PhysicalPredictiveDropItem(this);
10890 else
10891 player.ServerDropEntity(this);
10892 return;
10893 }
10894
10896
10897 if (new_item)
10898 {
10899 new_item.SetResultOfSplit(true);
10900 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10902 new_item.SetQuantity(stack_max);
10903 new_item.PlaceOnSurface();
10904 }
10905 }
10906 }
10907 }
10908
10910 {
10912 return;
10913
10914 float split_quantity_new;
10918 InventoryLocation loc = new InventoryLocation;
10919
10920 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10921 {
10923 split_quantity_new = stack_max;
10924 else
10926
10927 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10928 if (new_item)
10929 {
10930 new_item.SetResultOfSplit(true);
10931 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10933 new_item.SetQuantity(split_quantity_new);
10934 }
10935 }
10936 else if (destination_entity && slot_id == -1)
10937 {
10938 if (quantity > stack_max)
10939 split_quantity_new = stack_max;
10940 else
10941 split_quantity_new = quantity;
10942
10944 {
10947 }
10948
10949 if (new_item)
10950 {
10951 new_item.SetResultOfSplit(true);
10952 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10954 new_item.SetQuantity(split_quantity_new);
10955 }
10956 }
10957 else
10958 {
10959 if (stack_max != 0)
10960 {
10962 {
10964 }
10965
10967
10968 if (new_item)
10969 {
10970 new_item.SetResultOfSplit(true);
10971 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10973 new_item.SetQuantity(stack_max);
10974 new_item.PlaceOnSurface();
10975 }
10976 }
10977 }
10978 }
10979
10981 {
10983 return;
10984
10986 {
10987 if (ScriptInputUserData.CanStoreInputUserData())
10988 {
10989 ScriptInputUserData ctx = new ScriptInputUserData;
10994 dst.WriteToContext(ctx);
10996 }
10997 }
10998 else if (!
GetGame().IsMultiplayer())
10999 {
11001 }
11002 }
11003
11005 {
11007 return;
11008
11010 {
11011 if (ScriptInputUserData.CanStoreInputUserData())
11012 {
11013 ScriptInputUserData ctx = new ScriptInputUserData;
11018 ctx.
Write(destination_entity);
11024 }
11025 }
11026 else if (!
GetGame().IsMultiplayer())
11027 {
11029 }
11030 }
11031
11033 {
11035 }
11036
11038 {
11040 return this;
11041
11043 float split_quantity_new;
11045 if (dst.IsValid())
11046 {
11047 int slot_id = dst.GetSlot();
11049
11050 if (quantity > stack_max)
11051 split_quantity_new = stack_max;
11052 else
11053 split_quantity_new = quantity;
11054
11056
11057 if (new_item)
11058 {
11059 new_item.SetResultOfSplit(true);
11060 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11063 }
11064
11065 return new_item;
11066 }
11067
11068 return null;
11069 }
11070
11072 {
11074 return;
11075
11077 float split_quantity_new;
11079 if (destination_entity)
11080 {
11082 if (quantity > stackable)
11083 split_quantity_new = stackable;
11084 else
11085 split_quantity_new = quantity;
11086
11087 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
11088 if (new_item)
11089 {
11090 new_item.SetResultOfSplit(true);
11091 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11093 new_item.SetQuantity(split_quantity_new);
11094 }
11095 }
11096 }
11097
11099 {
11101 return;
11102
11104 {
11105 if (ScriptInputUserData.CanStoreInputUserData())
11106 {
11107 ScriptInputUserData ctx = new ScriptInputUserData;
11112 ItemBase destination_entity =
this;
11113 ctx.
Write(destination_entity);
11117 }
11118 }
11119 else if (!
GetGame().IsMultiplayer())
11120 {
11122 }
11123 }
11124
11126 {
11128 return;
11129
11131 float split_quantity_new;
11133 if (player)
11134 {
11136 if (quantity > stackable)
11137 split_quantity_new = stackable;
11138 else
11139 split_quantity_new = quantity;
11140
11141 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
11142 new_item =
ItemBase.Cast(in_hands);
11143 if (new_item)
11144 {
11145 new_item.SetResultOfSplit(true);
11146 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11148 new_item.SetQuantity(split_quantity_new);
11149 }
11150 }
11151 }
11152
11154 {
11156 return;
11157
11159 float split_quantity_new = Math.Floor(quantity * 0.5);
11160
11162
11163 if (new_item)
11164 {
11165 if (new_item.GetQuantityMax() < split_quantity_new)
11166 {
11167 split_quantity_new = new_item.GetQuantityMax();
11168 }
11169
11170 new_item.SetResultOfSplit(true);
11171 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11172
11174 {
11177 }
11178 else
11179 {
11182 }
11183 }
11184 }
11185
11187 {
11189 return;
11190
11192 float split_quantity_new = Math.Floor(quantity / 2);
11193
11194 InventoryLocation invloc = new InventoryLocation;
11196
11198 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
11199
11200 if (new_item)
11201 {
11202 if (new_item.GetQuantityMax() < split_quantity_new)
11203 {
11204 split_quantity_new = new_item.GetQuantityMax();
11205 }
11207 {
11210 }
11211 else
11212 {
11215 }
11216 }
11217 }
11218
11221 {
11222 SetWeightDirty();
11224
11225 if (parent)
11226 parent.OnAttachmentQuantityChangedEx(this, delta);
11227
11229 {
11231 {
11233 }
11235 {
11236 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
11238 }
11239 }
11240
11241 }
11242
11245 {
11246
11247 }
11248
11251 {
11253 }
11254
11256 {
11257 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
11258
11260 {
11261 if (newLevel == GameConstants.STATE_RUINED)
11262 {
11264 EntityAI parent = GetHierarchyParent();
11265 if (parent && parent.IsFireplace())
11266 {
11267 CargoBase cargo = GetInventory().GetCargo();
11268 if (cargo)
11269 {
11271 {
11273 }
11274 }
11275 }
11276 }
11277
11279 {
11280
11282 return;
11283 }
11284
11285 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
11286 {
11288 }
11289 }
11290 }
11291
11292
11294 {
11295 super.OnRightClick();
11296
11298 {
11300 {
11301 if (ScriptInputUserData.CanStoreInputUserData())
11302 {
11303 vector m4[4];
11305
11306 EntityAI root = GetHierarchyRoot();
11307
11308 InventoryLocation dst = new InventoryLocation;
11310 {
11311 if (root)
11312 {
11313 root.GetTransform(m4);
11315 }
11316 else
11317 GetInventory().GetCurrentInventoryLocation(dst);
11318 }
11319 else
11320 {
11322
11323
11324 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
11325 {
11326 if (root)
11327 {
11328 root.GetTransform(m4);
11330 }
11331 else
11332 GetInventory().GetCurrentInventoryLocation(dst);
11333 }
11334 else
11335 {
11336 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
11337 }
11338 }
11339
11340 ScriptInputUserData ctx = new ScriptInputUserData;
11348 }
11349 }
11350 else if (!
GetGame().IsMultiplayer())
11351 {
11353 }
11354 }
11355 }
11356
11357 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
11358 {
11359
11360 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
11361 return false;
11362
11363 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
11364 return false;
11365
11366
11368 return false;
11369
11370
11371 Magazine mag = Magazine.Cast(this);
11372 if (mag)
11373 {
11374 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
11375 return false;
11376
11377 if (stack_max_limit)
11378 {
11379 Magazine other_mag = Magazine.Cast(other_item);
11380 if (other_item)
11381 {
11382 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
11383 return false;
11384 }
11385
11386 }
11387 }
11388 else
11389 {
11390
11392 return false;
11393
11395 return false;
11396 }
11397
11398 PlayerBase player = null;
11399 if (CastTo(player, GetHierarchyRootPlayer()))
11400 {
11401 if (player.GetInventory().HasAttachment(this))
11402 return false;
11403
11404 if (player.IsItemsToDelete())
11405 return false;
11406 }
11407
11408 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
11409 return false;
11410
11411 int slotID;
11413 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
11414 return false;
11415
11416 return true;
11417 }
11418
11420 {
11422 }
11423
11425 {
11426 return m_IsResultOfSplit;
11427 }
11428
11430 {
11431 m_IsResultOfSplit = value;
11432 }
11433
11435 {
11437 }
11438
11440 {
11441 float other_item_quantity = other_item.GetQuantity();
11442 float this_free_space;
11443
11445
11447
11448 if (other_item_quantity > this_free_space)
11449 {
11450 return this_free_space;
11451 }
11452 else
11453 {
11454 return other_item_quantity;
11455 }
11456 }
11457
11459 {
11461 }
11462
11464 {
11466 return;
11467
11468 if (!IsMagazine() && other_item)
11469 {
11471 if (quantity_used != 0)
11472 {
11473 float hp1 = GetHealth01("","");
11474 float hp2 = other_item.GetHealth01("","");
11475 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
11476 hpResult = hpResult / (
GetQuantity() + quantity_used);
11477
11478 hpResult *= GetMaxHealth();
11479 Math.Round(hpResult);
11480 SetHealth("", "Health", hpResult);
11481
11483 other_item.AddQuantity(-quantity_used);
11484 }
11485 }
11487 }
11488
11490 {
11491 #ifdef SERVER
11492 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
11493 GetHierarchyParent().IncreaseLifetimeUp();
11494 #endif
11495 };
11496
11498 {
11499 PlayerBase p = PlayerBase.Cast(player);
11500
11501 array<int> recipesIds = p.m_Recipes;
11502 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11503 if (moduleRecipesManager)
11504 {
11505 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
11506 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
11507 }
11508
11509 for (int i = 0;i < recipesIds.Count(); i++)
11510 {
11511 int key = recipesIds.Get(i);
11512 string recipeName = moduleRecipesManager.GetRecipeName(key);
11514 }
11515 }
11516
11517
11518 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
11519 {
11520 super.GetDebugActions(outputList);
11521
11522
11527
11528
11532
11536
11537
11540
11541
11543 {
11546 }
11547
11549
11552
11556 }
11557
11558
11559
11560
11562 {
11563 super.OnAction(action_id, player, ctx);
11564 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11565 {
11566 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11567 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11568 PlayerBase p = PlayerBase.Cast(player);
11569 if (
EActions.RECIPES_RANGE_START < 1000)
11570 {
11571 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11572 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11573 }
11574 }
11575 #ifndef SERVER
11576 else if (action_id ==
EActions.WATCH_PLAYER)
11577 {
11578 PluginDeveloper.SetDeveloperItemClientEx(player);
11579 }
11580 #endif
11582 {
11583 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11584 {
11585 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11586 OnDebugButtonPressServer(id + 1);
11587 }
11588
11589 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11590 {
11591 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11593 }
11594
11595 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11596 {
11597 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11599 }
11600
11601 else if (action_id ==
EActions.ADD_QUANTITY)
11602 {
11603 if (IsMagazine())
11604 {
11605 Magazine mag = Magazine.Cast(this);
11606 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11607 }
11608 else
11609 {
11611 }
11612
11613 if (m_EM)
11614 {
11615 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11616 }
11617
11618 }
11619
11620 else if (action_id ==
EActions.REMOVE_QUANTITY)
11621 {
11622 if (IsMagazine())
11623 {
11624 Magazine mag2 = Magazine.Cast(this);
11625 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11626 }
11627 else
11628 {
11630 }
11631 if (m_EM)
11632 {
11633 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11634 }
11635
11636 }
11637
11638 else if (action_id ==
EActions.SET_QUANTITY_0)
11639 {
11641
11642 if (m_EM)
11643 {
11644 m_EM.SetEnergy(0);
11645 }
11646 }
11647
11648 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11649 {
11651
11652 if (m_EM)
11653 {
11654 m_EM.SetEnergy(m_EM.GetEnergyMax());
11655 }
11656 }
11657
11658 else if (action_id ==
EActions.ADD_HEALTH)
11659 {
11660 AddHealth("","",GetMaxHealth("","Health")/5);
11661 }
11662 else if (action_id ==
EActions.REMOVE_HEALTH)
11663 {
11664 AddHealth("","",-GetMaxHealth("","Health")/5);
11665 }
11666 else if (action_id ==
EActions.DESTROY_HEALTH)
11667 {
11668 SetHealth01("","",0);
11669 }
11670 else if (action_id ==
EActions.WATCH_ITEM)
11671 {
11673 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11674 #ifdef DEVELOPER
11675 SetDebugDeveloper_item(this);
11676 #endif
11677 }
11678
11679 else if (action_id ==
EActions.ADD_TEMPERATURE)
11680 {
11681 AddTemperature(20);
11682
11683 }
11684
11685 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11686 {
11687 AddTemperature(-20);
11688
11689 }
11690
11691 else if (action_id ==
EActions.FLIP_FROZEN)
11692 {
11693 SetFrozen(!GetIsFrozen());
11694
11695 }
11696
11697 else if (action_id ==
EActions.ADD_WETNESS)
11698 {
11700
11701 }
11702
11703 else if (action_id ==
EActions.REMOVE_WETNESS)
11704 {
11706
11707 }
11708
11709 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11710 {
11713
11714
11715 }
11716
11717 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11718 {
11721 }
11722
11723 else if (action_id ==
EActions.MAKE_SPECIAL)
11724 {
11725 auto debugParams = DebugSpawnParams.WithPlayer(player);
11726 OnDebugSpawnEx(debugParams);
11727 }
11728
11729 else if (action_id ==
EActions.DELETE)
11730 {
11731 Delete();
11732 }
11733
11734 }
11735
11736
11737 return false;
11738 }
11739
11740
11741
11742
11746
11749
11750
11751
11753 {
11754 return false;
11755 }
11756
11757
11759 {
11760 return true;
11761 }
11762
11763
11765 {
11766 return true;
11767 }
11768
11769
11770
11772 {
11773 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11775 }
11776
11779 {
11780 return null;
11781 }
11782
11784 {
11785 return false;
11786 }
11787
11789 {
11790 return false;
11791 }
11792
11796
11797
11799 {
11800 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11801 return module_repairing.CanRepair(this, item_repair_kit);
11802 }
11803
11804
11805 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11806 {
11807 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11808 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11809 }
11810
11811
11813 {
11814
11815
11816
11817
11818
11819
11820
11821
11822 return 1;
11823 }
11824
11825
11826
11828 {
11830 }
11831
11832
11833
11835 {
11837 }
11838
11839
11848 {
11849 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11850
11851 if (player)
11852 {
11853 player.MessageStatus(text);
11854 }
11855 }
11856
11857
11866 {
11867 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11868
11869 if (player)
11870 {
11871 player.MessageAction(text);
11872 }
11873 }
11874
11875
11884 {
11885 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11886
11887 if (player)
11888 {
11889 player.MessageFriendly(text);
11890 }
11891 }
11892
11893
11902 {
11903 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11904
11905 if (player)
11906 {
11907 player.MessageImportant(text);
11908 }
11909 }
11910
11912 {
11913 return true;
11914 }
11915
11916
11917 override bool KindOf(
string tag)
11918 {
11919 bool found = false;
11920 string item_name = this.
GetType();
11923
11924 int array_size = item_tag_array.Count();
11925 for (int i = 0; i < array_size; i++)
11926 {
11927 if (item_tag_array.Get(i) == tag)
11928 {
11929 found = true;
11930 break;
11931 }
11932 }
11933 return found;
11934 }
11935
11936
11938 {
11939
11940 super.OnRPC(sender, rpc_type,ctx);
11941
11942
11943 switch (rpc_type)
11944 {
11945 #ifndef SERVER
11946 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11947 Param2<bool, string> p = new Param2<bool, string>(false, "");
11948
11950 return;
11951
11952 bool play = p.param1;
11953 string soundSet = p.param2;
11954
11955 if (play)
11956 {
11958 {
11960 {
11962 }
11963 }
11964 else
11965 {
11967 }
11968 }
11969 else
11970 {
11972 }
11973
11974 break;
11975 #endif
11976
11977 }
11978
11980 {
11982 }
11983 }
11984
11985
11986
11987
11989 {
11990 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11991 return plugin.GetID(
name);
11992 }
11993
11995 {
11996 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11997 return plugin.GetName(id);
11998 }
11999
12002 {
12003
12004
12005 int varFlags;
12006 if (!ctx.
Read(varFlags))
12007 return;
12008
12009 if (varFlags & ItemVariableFlags.FLOAT)
12010 {
12012 }
12013 }
12014
12016 {
12017
12018 super.SerializeNumericalVars(floats_out);
12019
12020
12021
12023 {
12025 }
12026
12028 {
12030 }
12031
12033 {
12035 }
12036
12038 {
12043 }
12044
12046 {
12048 }
12049 }
12050
12052 {
12053
12054 super.DeSerializeNumericalVars(floats);
12055
12056
12057 int index = 0;
12058 int mask = Math.Round(floats.Get(index));
12059
12060 index++;
12061
12063 {
12065 {
12067 }
12068 else
12069 {
12070 float quantity = floats.Get(index);
12071 SetQuantity(quantity,
true,
false,
false,
false);
12072 }
12073 index++;
12074 }
12075
12077 {
12078 float wet = floats.Get(index);
12080 index++;
12081 }
12082
12084 {
12085 int liquidtype = Math.Round(floats.Get(index));
12087 index++;
12088 }
12089
12091 {
12093 index++;
12095 index++;
12097 index++;
12099 index++;
12100 }
12101
12103 {
12104 int cleanness = Math.Round(floats.Get(index));
12106 index++;
12107 }
12108 }
12109
12111 {
12112 super.WriteVarsToCTX(ctx);
12113
12114
12116 {
12118 }
12119
12121 {
12123 }
12124
12126 {
12128 }
12129
12131 {
12132 int r,g,b,a;
12138 }
12139
12141 {
12143 }
12144 }
12145
12147 {
12148 if (!super.ReadVarsFromCTX(ctx,version))
12149 return false;
12150
12151 int intValue;
12152 float value;
12153
12154 if (version < 140)
12155 {
12156 if (!ctx.
Read(intValue))
12157 return false;
12158
12159 m_VariablesMask = intValue;
12160 }
12161
12163 {
12164 if (!ctx.
Read(value))
12165 return false;
12166
12168 {
12170 }
12171 else
12172 {
12174 }
12175 }
12176
12177 if (version < 140)
12178 {
12180 {
12181 if (!ctx.
Read(value))
12182 return false;
12183 SetTemperatureDirect(value);
12184 }
12185 }
12186
12188 {
12189 if (!ctx.
Read(value))
12190 return false;
12192 }
12193
12195 {
12196 if (!ctx.
Read(intValue))
12197 return false;
12199 }
12200
12202 {
12203 int r,g,b,a;
12205 return false;
12207 return false;
12209 return false;
12211 return false;
12212
12214 }
12215
12217 {
12218 if (!ctx.
Read(intValue))
12219 return false;
12221 }
12222
12223 if (version >= 138 && version < 140)
12224 {
12226 {
12227 if (!ctx.
Read(intValue))
12228 return false;
12229 SetFrozen(intValue);
12230 }
12231 }
12232
12233 return true;
12234 }
12235
12236
12238 {
12241 {
12243 }
12244
12245 if (!super.OnStoreLoad(ctx, version))
12246 {
12248 return false;
12249 }
12250
12251 if (version >= 114)
12252 {
12253 bool hasQuickBarIndexSaved;
12254
12255 if (!ctx.
Read(hasQuickBarIndexSaved))
12256 {
12258 return false;
12259 }
12260
12261 if (hasQuickBarIndexSaved)
12262 {
12263 int itmQBIndex;
12264
12265
12266 if (!ctx.
Read(itmQBIndex))
12267 {
12269 return false;
12270 }
12271
12272 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
12273 if (itmQBIndex != -1 && parentPlayer)
12274 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
12275 }
12276 }
12277 else
12278 {
12279
12280 PlayerBase player;
12281 int itemQBIndex;
12282 if (version ==
int.
MAX)
12283 {
12284 if (!ctx.
Read(itemQBIndex))
12285 {
12287 return false;
12288 }
12289 }
12290 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
12291 {
12292
12293 if (!ctx.
Read(itemQBIndex))
12294 {
12296 return false;
12297 }
12298 if (itemQBIndex != -1 && player)
12299 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
12300 }
12301 }
12302
12303 if (version < 140)
12304 {
12305
12306 if (!LoadVariables(ctx, version))
12307 {
12309 return false;
12310 }
12311 }
12312
12313
12315 {
12317 return false;
12318 }
12319 if (version >= 132)
12320 {
12322 if (raib)
12323 {
12325 {
12327 return false;
12328 }
12329 }
12330 }
12331
12333 return true;
12334 }
12335
12336
12337
12339 {
12340 super.OnStoreSave(ctx);
12341
12342 PlayerBase player;
12343 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
12344 {
12346
12347 int itemQBIndex = -1;
12348 itemQBIndex = player.FindQuickBarEntityIndex(this);
12349 ctx.
Write(itemQBIndex);
12350 }
12351 else
12352 {
12354 }
12355
12357
12359 if (raib)
12360 {
12362 }
12363 }
12364
12365
12367 {
12368 super.AfterStoreLoad();
12369
12371 {
12373 }
12374
12376 {
12379 }
12380 }
12381
12383 {
12384 super.EEOnAfterLoad();
12385
12387 {
12389 }
12390
12393 }
12394
12396 {
12397 return false;
12398 }
12399
12400
12401
12403 {
12405 {
12406 #ifdef PLATFORM_CONSOLE
12407
12409 {
12411 if (menu)
12412 {
12414 }
12415 }
12416 #endif
12417 }
12418
12420 {
12423 }
12424
12426 {
12427 SetWeightDirty();
12429 }
12431 {
12434 }
12435
12437 {
12440 }
12442 {
12445 }
12446
12447 super.OnVariablesSynchronized();
12448 }
12449
12450
12451
12453 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
12454 {
12455 if (!IsServerCheck(allow_client))
12456 return false;
12457
12459 return false;
12460
12463
12464 if (value <= (min + 0.001))
12465 value = min;
12466
12467 if (value == min)
12468 {
12469 if (destroy_config)
12470 {
12471 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
12472 if (dstr)
12473 {
12475 this.Delete();
12476 return true;
12477 }
12478 }
12479 else if (destroy_forced)
12480 {
12482 this.Delete();
12483 return true;
12484 }
12485
12487 }
12488
12491
12493 {
12495
12496 if (delta)
12498 }
12499
12501
12502 return false;
12503 }
12504
12505
12507 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
12508 {
12510 }
12511
12513 {
12516 }
12517
12519 {
12522 }
12523
12526 {
12527 float value_clamped = Math.Clamp(value, 0, 1);
12529 SetQuantity(result, destroy_config, destroy_forced);
12530 }
12531
12532
12535 {
12537 }
12538
12540 {
12542 }
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12554 {
12555 int slot = -1;
12556 if (GetInventory())
12557 {
12558 InventoryLocation il = new InventoryLocation;
12559 GetInventory().GetCurrentInventoryLocation(il);
12561 }
12562
12564 }
12565
12567 {
12568 float quantity_max = 0;
12569
12571 {
12572 if (attSlotID != -1)
12573 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12574
12575 if (quantity_max <= 0)
12577 }
12578
12579 if (quantity_max <= 0)
12581
12582 return quantity_max;
12583 }
12584
12586 {
12588 }
12589
12591 {
12593 }
12594
12595
12597 {
12599 }
12600
12602 {
12604 }
12605
12607 {
12609 }
12610
12611
12613 {
12614
12615 float weightEx = GetWeightEx();
12616 float special = GetInventoryAndCargoWeight();
12617 return weightEx - special;
12618 }
12619
12620
12622 {
12624 }
12625
12627 {
12629 {
12630 #ifdef DEVELOPER
12631 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12632 {
12633 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12635 }
12636 #endif
12637
12638 return GetQuantity() * GetConfigWeightModified();
12639 }
12640 else if (HasEnergyManager())
12641 {
12642 #ifdef DEVELOPER
12643 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12644 {
12645 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12646 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12647 }
12648 #endif
12649 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12650 }
12651 else
12652 {
12653 #ifdef DEVELOPER
12654 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12655 {
12656 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12657 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12658 }
12659 #endif
12660 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12661 }
12662 }
12663
12666 {
12667 int item_count = 0;
12669
12670 if (GetInventory().GetCargo() != NULL)
12671 {
12672 item_count = GetInventory().GetCargo().GetItemCount();
12673 }
12674
12675 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12676 {
12677 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12678 if (item)
12679 item_count += item.GetNumberOfItems();
12680 }
12681 return item_count;
12682 }
12683
12686 {
12687 float weight = 0;
12688 float wetness = 1;
12689 if (include_wetness)
12692 {
12693 weight = wetness * m_ConfigWeight;
12694 }
12696 {
12697 weight = 1;
12698 }
12699 return weight;
12700 }
12701
12702
12703
12705 {
12706 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12707 {
12708 GameInventory inv = GetInventory();
12709 array<EntityAI> items = new array<EntityAI>;
12711 for (int i = 0; i < items.Count(); i++)
12712 {
12714 if (item)
12715 {
12717 }
12718 }
12719 }
12720 }
12721
12722
12723
12724
12726 {
12727 float energy = 0;
12728 if (HasEnergyManager())
12729 {
12730 energy = GetCompEM().GetEnergy();
12731 }
12732 return energy;
12733 }
12734
12735
12737 {
12738 super.OnEnergyConsumed();
12739
12741 }
12742
12744 {
12745 super.OnEnergyAdded();
12746
12748 }
12749
12750
12752 {
12753 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12754 {
12756 {
12757 float energy_0to1 = GetCompEM().GetEnergy0To1();
12759 }
12760 }
12761 }
12762
12763
12765 {
12766 return ConfigGetFloat("heatIsolation");
12767 }
12768
12770 {
12772 }
12773
12775 {
12776 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12777 if (
GetGame().ConfigIsExisting(paramPath))
12779
12780 return 0.0;
12781 }
12782
12784 {
12785 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12786 if (
GetGame().ConfigIsExisting(paramPath))
12788
12789 return 0.0;
12790 }
12791
12792 override void SetWet(
float value,
bool allow_client =
false)
12793 {
12794 if (!IsServerCheck(allow_client))
12795 return;
12796
12799
12801
12802 m_VarWet = Math.Clamp(value, min, max);
12803
12805 {
12808 }
12809 }
12810
12811 override void AddWet(
float value)
12812 {
12814 }
12815
12817 {
12819 }
12820
12822 {
12824 }
12825
12827 {
12829 }
12830
12832 {
12834 }
12835
12837 {
12839 }
12840
12841 override void OnWetChanged(
float newVal,
float oldVal)
12842 {
12845 if (newLevel != oldLevel)
12846 {
12848 }
12849 }
12850
12852 {
12853 SetWeightDirty();
12854 }
12855
12857 {
12858 return GetWetLevelInternal(
m_VarWet);
12859 }
12860
12861
12862
12864 {
12866 }
12867
12869 {
12871 }
12872
12874 {
12876 }
12877
12879 {
12881 }
12882
12883
12884
12886 {
12887 if (ConfigIsExisting("itemModelLength"))
12888 {
12889 return ConfigGetFloat("itemModelLength");
12890 }
12891 return 0;
12892 }
12893
12895 {
12896 if (ConfigIsExisting("itemAttachOffset"))
12897 {
12898 return ConfigGetFloat("itemAttachOffset");
12899 }
12900 return 0;
12901 }
12902
12903 override void SetCleanness(
int value,
bool allow_client =
false)
12904 {
12905 if (!IsServerCheck(allow_client))
12906 return;
12907
12909
12911
12914 }
12915
12917 {
12919 }
12920
12922 {
12923 return true;
12924 }
12925
12926
12927
12928
12930 {
12932 }
12933
12935 {
12937 }
12938
12939
12940
12941
12942 override void SetColor(
int r,
int g,
int b,
int a)
12943 {
12949 }
12951 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12952 {
12957 }
12958
12960 {
12962 }
12963
12966 {
12967 int r,g,b,a;
12969 r = r/255;
12970 g = g/255;
12971 b = b/255;
12972 a = a/255;
12973 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12974 }
12975
12976
12977
12978 override void SetLiquidType(
int value,
bool allow_client =
false)
12979 {
12980 if (!IsServerCheck(allow_client))
12981 return;
12982
12987 }
12988
12990 {
12991 return ConfigGetInt("varLiquidTypeInit");
12992 }
12993
12995 {
12997 }
12998
13000 {
13002 SetFrozen(false);
13003 }
13004
13007 {
13008 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
13009 }
13010
13011
13014 {
13015 PlayerBase nplayer;
13016 if (PlayerBase.CastTo(nplayer, player))
13017 {
13019
13020 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
13021 }
13022 }
13023
13024
13027 {
13028 PlayerBase nplayer;
13029 if (PlayerBase.CastTo(nplayer,player))
13030 {
13031
13032 nplayer.SetEnableQuickBarEntityShortcut(this,false);
13033
13034 }
13035
13036
13037 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
13038
13039
13040 if (HasEnergyManager())
13041 {
13042 GetCompEM().UpdatePlugState();
13043 }
13044 }
13045
13046
13048 {
13049 super.OnPlacementStarted(player);
13050
13052 }
13053
13054 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
13055 {
13057 {
13058 m_AdminLog.OnPlacementComplete(player,
this);
13059 }
13060
13061 super.OnPlacementComplete(player, position, orientation);
13062 }
13063
13064
13065
13066
13067
13069 {
13071 {
13072 return true;
13073 }
13074 else
13075 {
13076 return false;
13077 }
13078 }
13079
13080
13082 {
13084 {
13086 }
13087 }
13088
13089
13091 {
13093 }
13094
13096 {
13098 }
13099
13100 override void InsertAgent(
int agent,
float count = 1)
13101 {
13102 if (count < 1)
13103 return;
13104
13106 }
13107
13110 {
13112 }
13113
13114
13116 {
13118 }
13119
13120
13121
13122
13123
13124
13125
13126
13127
13128
13129
13130
13131
13132
13133
13134
13135
13136
13137
13138
13139
13140
13141
13142
13143
13144
13145
13146
13147
13148
13149
13150
13151
13152
13153
13154
13155
13156
13157
13158
13159
13160
13162 {
13164 return false;
13165 return true;
13166 }
13167
13169 {
13170
13172 }
13173
13174
13177 {
13178 super.CheckForRoofLimited(timeTresholdMS);
13179
13181 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
13182 {
13183 m_PreviousRoofTestTime = time;
13184 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
13185 }
13186 }
13187
13188
13190 {
13192 {
13193 return 0;
13194 }
13195
13196 if (GetInventory().GetAttachmentSlotsCount() != 0)
13197 {
13198 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
13199 if (filter)
13200 return filter.GetProtectionLevel(type, false, system);
13201 else
13202 return 0;
13203 }
13204
13205 string subclassPath, entryName;
13206
13207 switch (type)
13208 {
13210 entryName = "biological";
13211 break;
13213 entryName = "chemical";
13214 break;
13215 default:
13216 entryName = "biological";
13217 break;
13218 }
13219
13220 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
13221
13223 }
13224
13225
13226
13229 {
13230 if (!IsMagazine())
13232
13234 }
13235
13236
13237
13238
13239
13244 {
13245 return true;
13246 }
13247
13249 {
13251 }
13252
13253
13254
13255
13256
13258 {
13259 if (parent)
13260 {
13261 if (parent.IsInherited(DayZInfected))
13262 return true;
13263
13264 if (!parent.IsRuined())
13265 return true;
13266 }
13267
13268 return true;
13269 }
13270
13272 {
13273 if (!super.CanPutAsAttachment(parent))
13274 {
13275 return false;
13276 }
13277
13278 if (!IsRuined() && !parent.IsRuined())
13279 {
13280 return true;
13281 }
13282
13283 return false;
13284 }
13285
13287 {
13288
13289
13290
13291
13292 return super.CanReceiveItemIntoCargo(item);
13293 }
13294
13296 {
13297
13298
13299
13300
13301 GameInventory attachmentInv = attachment.GetInventory();
13303 {
13304 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
13305 return false;
13306 }
13307
13308 InventoryLocation loc = new InventoryLocation();
13309 attachment.GetInventory().GetCurrentInventoryLocation(loc);
13310 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
13311 return false;
13312
13313 return super.CanReceiveAttachment(attachment, slotId);
13314 }
13315
13317 {
13318 if (!super.CanReleaseAttachment(attachment))
13319 return false;
13320
13321 return GetInventory().AreChildrenAccessible();
13322 }
13323
13324
13325
13326
13327
13328
13329
13330
13331
13332
13333
13334
13335
13336
13337
13338
13339
13340
13341
13342
13343
13345 {
13346 int id = muzzle_owner.GetMuzzleID();
13347 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
13348
13349 if (WPOF_array)
13350 {
13351 for (int i = 0; i < WPOF_array.Count(); i++)
13352 {
13353 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
13354
13355 if (WPOF)
13356 {
13357 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
13358 }
13359 }
13360 }
13361 }
13362
13363
13365 {
13366 int id = muzzle_owner.GetMuzzleID();
13368
13369 if (WPOBE_array)
13370 {
13371 for (int i = 0; i < WPOBE_array.Count(); i++)
13372 {
13373 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
13374
13375 if (WPOBE)
13376 {
13377 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13378 }
13379 }
13380 }
13381 }
13382
13383
13385 {
13386 int id = muzzle_owner.GetMuzzleID();
13387 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13388
13389 if (WPOOH_array)
13390 {
13391 for (int i = 0; i < WPOOH_array.Count(); i++)
13392 {
13393 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13394
13395 if (WPOOH)
13396 {
13397 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13398 }
13399 }
13400 }
13401 }
13402
13403
13405 {
13406 int id = muzzle_owner.GetMuzzleID();
13407 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13408
13409 if (WPOOH_array)
13410 {
13411 for (int i = 0; i < WPOOH_array.Count(); i++)
13412 {
13413 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13414
13415 if (WPOOH)
13416 {
13417 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13418 }
13419 }
13420 }
13421 }
13422
13423
13425 {
13426 int id = muzzle_owner.GetMuzzleID();
13427 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13428
13429 if (WPOOH_array)
13430 {
13431 for (int i = 0; i < WPOOH_array.Count(); i++)
13432 {
13433 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13434
13435 if (WPOOH)
13436 {
13437 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13438 }
13439 }
13440 }
13441 }
13442
13443
13444
13446 {
13448 {
13449 return true;
13450 }
13451
13452 return false;
13453 }
13454
13456 {
13458 {
13459 return true;
13460 }
13461
13462 return false;
13463 }
13464
13466 {
13468 {
13469 return true;
13470 }
13471
13472 return false;
13473 }
13474
13476 {
13477 return false;
13478 }
13479
13482 {
13483 return UATimeSpent.DEFAULT_DEPLOY;
13484 }
13485
13486
13487
13488
13490 {
13492 SetSynchDirty();
13493 }
13494
13496 {
13498 }
13499
13500
13502 {
13503 return false;
13504 }
13505
13508 {
13509 string att_type = "None";
13510
13511 if (ConfigIsExisting("soundAttType"))
13512 {
13513 att_type = ConfigGetString("soundAttType");
13514 }
13515
13517 }
13518
13520 {
13522 }
13523
13524
13525
13526
13527
13531
13533 {
13536
13538 }
13539
13540
13542 {
13544 return;
13545
13547
13550
13553
13554 SoundParameters params = new SoundParameters();
13558 }
13559
13560
13562 {
13564 return;
13565
13567 SetSynchDirty();
13568
13571 }
13572
13573
13575 {
13577 return;
13578
13580 SetSynchDirty();
13581
13584 }
13585
13587 {
13589 }
13590
13592 {
13594 }
13595
13598 {
13599 if (!
GetGame().IsDedicatedServer())
13600 {
13601 if (ConfigIsExisting("attachSoundSet"))
13602 {
13603 string cfg_path = "";
13604 string soundset = "";
13605 string type_name =
GetType();
13606
13609 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13610 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13611
13612 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13613 {
13614 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13615 {
13616 if (cfg_slot_array[i] == slot_type)
13617 {
13618 soundset = cfg_soundset_array[i];
13619 break;
13620 }
13621 }
13622 }
13623
13624 if (soundset != "")
13625 {
13626 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13628 }
13629 }
13630 }
13631 }
13632
13634 {
13635
13636 }
13637
13638 void OnApply(PlayerBase player);
13639
13641 {
13642 return 1.0;
13643 };
13644
13646 {
13648 }
13649
13651 {
13653 }
13654
13656
13658 {
13659 SetDynamicPhysicsLifeTime(0.01);
13661 }
13662
13664 {
13665 array<string> zone_names = new array<string>;
13666 GetDamageZones(zone_names);
13667 for (int i = 0; i < zone_names.Count(); i++)
13668 {
13669 SetHealthMax(zone_names.Get(i),"Health");
13670 }
13671 SetHealthMax("","Health");
13672 }
13673
13676 {
13677 float global_health = GetHealth01("","Health");
13678 array<string> zones = new array<string>;
13679 GetDamageZones(zones);
13680
13681 for (int i = 0; i < zones.Count(); i++)
13682 {
13683 SetHealth01(zones.Get(i),"Health",global_health);
13684 }
13685 }
13686
13689 {
13690 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13691 }
13692
13694 {
13695 if (!hasRootAsPlayer)
13696 {
13697 if (refParentIB)
13698 {
13699
13700 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13701 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13702
13703 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13704 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13705
13708 }
13709 else
13710 {
13711
13714 }
13715 }
13716 }
13717
13719 {
13721 {
13722 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13723 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13724 {
13725 float heatPermCoef = 1.0;
13727 while (ent)
13728 {
13729 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13730 ent = ent.GetHierarchyParent();
13731 }
13732
13733 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13734 }
13735 }
13736 }
13737
13739 {
13740
13741 EntityAI parent = GetHierarchyParent();
13742 if (!parent)
13743 {
13744 hasParent = false;
13745 hasRootAsPlayer = false;
13746 }
13747 else
13748 {
13749 hasParent = true;
13750 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13751 refParentIB =
ItemBase.Cast(parent);
13752 }
13753 }
13754
13755 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13756 {
13757
13758 }
13759
13761 {
13762
13763 return false;
13764 }
13765
13767 {
13768
13769
13770 return false;
13771 }
13772
13774 {
13775
13776 return false;
13777 }
13778
13781 {
13782 return !GetIsFrozen() &&
IsOpen();
13783 }
13784
13786 {
13787 bool hasParent = false, hasRootAsPlayer = false;
13789
13790 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13791 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13792
13793 if (wwtu || foodDecay)
13794 {
13798
13799 if (processWetness || processTemperature || processDecay)
13800 {
13802
13803 if (processWetness)
13804 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13805
13806 if (processTemperature)
13808
13809 if (processDecay)
13810 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13811 }
13812 }
13813 }
13814
13817 {
13819 }
13820
13822 {
13825
13826 return super.GetTemperatureFreezeThreshold();
13827 }
13828
13830 {
13833
13834 return super.GetTemperatureThawThreshold();
13835 }
13836
13838 {
13841
13842 return super.GetItemOverheatThreshold();
13843 }
13844
13846 {
13848 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13849
13850 return super.GetTemperatureFreezeTime();
13851 }
13852
13854 {
13856 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13857
13858 return super.GetTemperatureThawTime();
13859 }
13860
13865
13867 {
13868 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13869 }
13870
13872 {
13873 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13874 }
13875
13878 {
13880 }
13881
13883 {
13885 }
13886
13888 {
13890 }
13891
13894 {
13895 return null;
13896 }
13897
13900 {
13901 return false;
13902 }
13903
13905 {
13907 {
13910 if (!trg)
13911 {
13913 explosive = this;
13914 }
13915
13916 explosive.PairRemote(trg);
13918
13919 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13920 trg.SetPersistentPairID(persistentID);
13921 explosive.SetPersistentPairID(persistentID);
13922
13923 return true;
13924 }
13925 return false;
13926 }
13927
13930 {
13931 float ret = 1.0;
13934 ret *= GetHealth01();
13935
13936 return ret;
13937 }
13938
13939 #ifdef DEVELOPER
13940 override void SetDebugItem()
13941 {
13942 super.SetDebugItem();
13943 _itemBase = this;
13944 }
13945
13947 {
13948 string text = super.GetDebugText();
13949
13951 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13952
13953 return text;
13954 }
13955 #endif
13956
13958 {
13959 return true;
13960 }
13961
13963
13965
13967 {
13970 }
13971
13972
13980
13996}
13997
13999{
14001 if (entity)
14002 {
14003 bool is_item = entity.IsInherited(
ItemBase);
14004 if (is_item && full_quantity)
14005 {
14008 }
14009 }
14010 else
14011 {
14013 return NULL;
14014 }
14015 return entity;
14016}
14017
14019{
14020 if (item)
14021 {
14022 if (health > 0)
14023 item.SetHealth("", "", health);
14024
14025 if (item.CanHaveTemperature())
14026 {
14028 if (item.CanFreeze())
14029 item.SetFrozen(false);
14030 }
14031
14032 if (item.HasEnergyManager())
14033 {
14034 if (quantity >= 0)
14035 {
14036 item.GetCompEM().SetEnergy0To1(quantity);
14037 }
14038 else
14039 {
14041 }
14042 }
14043 else if (item.IsMagazine())
14044 {
14045 Magazine mag = Magazine.Cast(item);
14046 if (quantity >= 0)
14047 {
14048 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
14049 }
14050 else
14051 {
14053 }
14054
14055 }
14056 else
14057 {
14058 if (quantity >= 0)
14059 {
14060 item.SetQuantityNormalized(quantity, false);
14061 }
14062 else
14063 {
14065 }
14066
14067 }
14068 }
14069}
14070
14071#ifdef DEVELOPER
14073#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.