9386{
9388 {
9389 return true;
9390 }
9391};
9392
9393
9394
9396{
9400
9402
9405
9406
9407
9408
9409
9418
9424
9429
9434
9455 protected bool m_IsResultOfSplit
9456
9458
9463
9464
9465
9467
9471
9472
9473
9475
9478
9479
9480
9486
9487
9495
9498
9499
9501
9502
9504
9505
9510
9511
9516
9517
9519
9520
9522 {
9527
9528 if (!
GetGame().IsDedicatedServer())
9529 {
9531 {
9533
9535 {
9537 }
9538 }
9539
9542 }
9543
9544 m_OldLocation = null;
9545
9547 {
9549 }
9550
9551 if (ConfigIsExisting("headSelectionsToHide"))
9552 {
9555 }
9556
9558 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
9559 {
9561 }
9562
9564
9565 m_IsResultOfSplit = false;
9566
9568 }
9569
9571 {
9572 super.InitItemVariables();
9573
9579 m_Count = ConfigGetInt(
"count");
9580
9583
9588
9591
9596
9608
9612
9613
9616 if (ConfigIsExisting("canBeSplit"))
9617 {
9620 }
9621
9623 if (ConfigIsExisting("itemBehaviour"))
9625
9626
9629 RegisterNetSyncVariableInt("m_VarLiquidType");
9630 RegisterNetSyncVariableInt("m_Cleanness",0,1);
9631
9632 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
9633 RegisterNetSyncVariableFloat("m_ImpactSpeed");
9634 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
9635
9636 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
9637 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
9638 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
9639 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
9640
9641 RegisterNetSyncVariableBool("m_IsBeingPlaced");
9642 RegisterNetSyncVariableBool("m_IsTakeable");
9643 RegisterNetSyncVariableBool("m_IsHologram");
9644
9647 {
9650 }
9651
9653
9655 if (ConfigIsExisting("temperaturePerQuantityWeight"))
9657
9658 }
9659
9661 {
9663 }
9664
9666 {
9669 {
9674 }
9675 }
9676
9677 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
9678 {
9680 {
9683 }
9684
9686 }
9687
9689 {
9695 }
9696
9698
9700 {
9702
9703 if (!action)
9704 {
9705 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
9706 return;
9707 }
9708
9710 if (!ai)
9711 {
9713 return;
9714 }
9715
9717 if (!action_array)
9718 {
9719 action_array = new array<ActionBase_Basic>;
9721 }
9722 if (LogManager.IsActionLogEnable())
9723 {
9724 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9725 }
9726
9727 if (action_array.Find(action) != -1)
9728 {
9729 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9730 }
9731 else
9732 {
9733 action_array.Insert(action);
9734 }
9735 }
9736
9738 {
9740 ActionBase action = player.GetActionManager().GetAction(actionName);
9743
9744 if (action_array)
9745 {
9746 action_array.RemoveItem(action);
9747 }
9748 }
9749
9750
9751
9753 {
9754 ActionOverrideData overrideData = new ActionOverrideData();
9758
9760 if (!actionMap)
9761 {
9764 }
9765
9766 actionMap.Insert(this.
Type(), overrideData);
9767
9768 }
9769
9771
9773
9774
9776 {
9779
9782
9783 string config_to_search = "CfgVehicles";
9784 string muzzle_owner_config;
9785
9787 {
9788 if (IsInherited(Weapon))
9789 config_to_search = "CfgWeapons";
9790
9791 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9792
9793 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9794
9796
9797 if (config_OnFire_subclass_count > 0)
9798 {
9799 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9800
9801 for (int i = 0; i < config_OnFire_subclass_count; i++)
9802 {
9803 string particle_class = "";
9805 string config_OnFire_entry = config_OnFire_class + particle_class;
9806 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9807 WPOF_array.Insert(WPOF);
9808 }
9809
9810
9812 }
9813 }
9814
9816 {
9817 config_to_search = "CfgWeapons";
9818 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9819
9820 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9821
9823
9824 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9825 {
9826 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9827
9828 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9829 {
9830 string particle_class2 = "";
9832 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9833 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9834 WPOBE_array.Insert(WPOBE);
9835 }
9836
9837
9839 }
9840 }
9841 }
9842
9843
9845 {
9848
9850 {
9851 string config_to_search = "CfgVehicles";
9852
9853 if (IsInherited(Weapon))
9854 config_to_search = "CfgWeapons";
9855
9856 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9857 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9858
9859 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9860 {
9861
9863
9865 {
9867 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9869 return;
9870 }
9871
9874
9875
9876
9878 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9879
9880 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9881 {
9882 string particle_class = "";
9884 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9886
9887 if (entry_type == CT_CLASS)
9888 {
9889 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9890 WPOOH_array.Insert(WPOF);
9891 }
9892 }
9893
9894
9896 }
9897 }
9898 }
9899
9901 {
9903 }
9904
9906 {
9908 {
9910
9913
9916
9917 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9918 }
9919 }
9920
9922 {
9924 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9925
9927 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9928
9930 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9931
9933 {
9935 }
9936 }
9937
9939 {
9941 }
9942
9944 {
9947 else
9949
9951 {
9954 }
9955 else
9956 {
9959
9962 }
9963
9965 }
9966
9968 {
9970 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9971 }
9972
9974 {
9976 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9978 }
9979
9981 {
9983 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9984 }
9985
9987 {
9990
9991 OverheatingParticle OP = new OverheatingParticle();
9996
9998 }
9999
10001 {
10004
10005 return -1;
10006 }
10007
10009 {
10011 {
10014
10015 for (int i = count; i > 0; --i)
10016 {
10017 int id = i - 1;
10020
10023
10024 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
10025 {
10026 if (p)
10027 {
10030 }
10031 }
10032 }
10033 }
10034 }
10035
10037 {
10039 {
10041 {
10042 int id = i - 1;
10044
10045 if (OP)
10046 {
10048
10049 if (p)
10050 {
10052 }
10053
10054 delete OP;
10055 }
10056 }
10057
10060 }
10061 }
10062
10065 {
10066 return 0.0;
10067 }
10068
10069
10071 {
10072 return 250;
10073 }
10074
10076 {
10077 return 0;
10078 }
10079
10082 {
10084 return true;
10085
10086 return false;
10087 }
10088
10091 {
10094
10096 {
10098 }
10099 else
10100 {
10101
10103 }
10104
10106 }
10107
10114 {
10115 return -1;
10116 }
10117
10118
10119
10120
10122 {
10124 {
10126 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10127
10128 if (r_index >= 0)
10129 {
10130 InventoryLocation r_il = new InventoryLocation;
10131 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10132
10133 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10136 {
10137 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10138 }
10140 {
10141 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10142 }
10143
10144 }
10145
10146 player.GetHumanInventory().ClearUserReservedLocation(this);
10147 }
10148
10151 }
10152
10153
10154
10155
10157 {
10158 return ItemBase.m_DebugActionsMask;
10159 }
10160
10162 {
10163 return ItemBase.m_DebugActionsMask & mask;
10164 }
10165
10167 {
10168 ItemBase.m_DebugActionsMask = mask;
10169 }
10170
10172 {
10173 ItemBase.m_DebugActionsMask |= mask;
10174 }
10175
10177 {
10178 ItemBase.m_DebugActionsMask &= ~mask;
10179 }
10180
10182 {
10184 {
10186 }
10187 else
10188 {
10190 }
10191 }
10192
10193
10195 {
10196 if (GetEconomyProfile())
10197 {
10198 float q_max = GetEconomyProfile().GetQuantityMax();
10199 if (q_max > 0)
10200 {
10201 float q_min = GetEconomyProfile().GetQuantityMin();
10202 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
10203
10205 {
10206 ComponentEnergyManager comp = GetCompEM();
10208 {
10210 }
10211 }
10213 {
10215
10216 }
10217
10218 }
10219 }
10220 }
10221
10224 {
10225 EntityAI parent = GetHierarchyParent();
10226
10227 if (parent)
10228 {
10229 InventoryLocation inventory_location_to_lock = new InventoryLocation;
10230 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
10231 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
10232 }
10233 }
10234
10237 {
10238 EntityAI parent = GetHierarchyParent();
10239
10240 if (parent)
10241 {
10242 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
10243 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
10244 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
10245 }
10246 }
10247
10249 {
10250
10251
10252
10253
10255
10257 {
10258 if (ScriptInputUserData.CanStoreInputUserData())
10259 {
10260 ScriptInputUserData ctx = new ScriptInputUserData;
10266 ctx.
Write(use_stack_max);
10269
10271 {
10272 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
10273 }
10274 }
10275 }
10276 else if (!
GetGame().IsMultiplayer())
10277 {
10279 }
10280 }
10281
10283 {
10285 }
10286
10288 {
10290 }
10291
10293 {
10295 }
10296
10298 {
10299
10300 return false;
10301 }
10302
10304 {
10305 return false;
10306 }
10307
10311 {
10312 return false;
10313 }
10314
10316 {
10317 return "";
10318 }
10319
10321
10323 {
10324 return false;
10325 }
10326
10328 {
10329 return true;
10330 }
10331
10332
10333
10335 {
10336 return true;
10337 }
10338
10340 {
10341 return true;
10342 }
10343
10345 {
10346 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
10348 }
10349
10351 {
10353 }
10354
10356 {
10358 if (!is_being_placed)
10360 SetSynchDirty();
10361 }
10362
10363
10365
10367 {
10369 }
10370
10372 {
10374 }
10375
10377 {
10378 return 1;
10379 }
10380
10382 {
10383 return false;
10384 }
10385
10387 {
10389 SetSynchDirty();
10390 }
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
10423
10424
10425
10427 {
10428 super.OnMovedInsideCargo(container);
10429
10430 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10431 }
10432
10433 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
10434 {
10435 super.EEItemLocationChanged(oldLoc,newLoc);
10436
10437 PlayerBase new_player = null;
10438 PlayerBase old_player = null;
10439
10440 if (newLoc.GetParent())
10441 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
10442
10443 if (oldLoc.GetParent())
10444 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
10445
10447 {
10448 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
10449
10450 if (r_index >= 0)
10451 {
10452 InventoryLocation r_il = new InventoryLocation;
10453 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10454
10455 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10458 {
10459 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10460 }
10462 {
10463 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10464 }
10465
10466 }
10467 }
10468
10470 {
10471 if (new_player)
10472 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
10473
10474 if (new_player == old_player)
10475 {
10476
10477 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
10478 {
10480 {
10481 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
10482 {
10483 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10484 }
10485 }
10486 else
10487 {
10488 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10489 }
10490 }
10491
10492 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
10493 {
10494 int type = oldLoc.GetType();
10496 {
10497 oldLoc.GetParent().GetOnSetLock().Invoke(this);
10498 }
10500 {
10501 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
10502 }
10503 }
10504 if (!m_OldLocation)
10505 {
10506 m_OldLocation = new InventoryLocation;
10507 }
10508 m_OldLocation.Copy(oldLoc);
10509 }
10510 else
10511 {
10512 if (m_OldLocation)
10513 {
10514 m_OldLocation.Reset();
10515 }
10516 }
10517
10519 }
10520 else
10521 {
10522 if (new_player)
10523 {
10524 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
10525 if (res_index >= 0)
10526 {
10527 InventoryLocation il = new InventoryLocation;
10528 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
10530 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
10533 {
10534 il.
GetParent().GetOnReleaseLock().Invoke(it);
10535 }
10537 {
10539 }
10540
10541 }
10542 }
10544 {
10545
10547 }
10548
10549 if (m_OldLocation)
10550 {
10551 m_OldLocation.Reset();
10552 }
10553 }
10554 }
10555
10556 override void EOnContact(IEntity other, Contact extra)
10557 {
10559 {
10560 int liquidType = -1;
10562 if (impactSpeed > 0.0)
10563 {
10565 #ifndef SERVER
10567 #else
10569 SetSynchDirty();
10570 #endif
10572 }
10573 }
10574
10575 #ifdef SERVER
10576 if (GetCompEM() && GetCompEM().IsPlugged())
10577 {
10578 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
10579 GetCompEM().UnplugThis();
10580 }
10581 #endif
10582 }
10583
10585
10587 {
10589 }
10590
10592 {
10593
10594 }
10595
10597 {
10598 super.OnItemLocationChanged(old_owner, new_owner);
10599
10600 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
10601 PlayerBase playerNew = PlayerBase.Cast(new_owner);
10602
10603 if (!relatedPlayer && playerNew)
10604 relatedPlayer = playerNew;
10605
10606 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
10607 {
10609 if (actionMgr)
10610 {
10611 ActionBase currentAction = actionMgr.GetRunningAction();
10612 if (currentAction)
10614 }
10615 }
10616
10617 Man ownerPlayerOld = null;
10618 Man ownerPlayerNew = null;
10619
10620 if (old_owner)
10621 {
10622 if (old_owner.
IsMan())
10623 {
10624 ownerPlayerOld = Man.Cast(old_owner);
10625 }
10626 else
10627 {
10628 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
10629 }
10630 }
10631 else
10632 {
10634 {
10636
10637 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
10638 {
10639 GetCompEM().UnplugThis();
10640 }
10641 }
10642 }
10643
10644 if (new_owner)
10645 {
10646 if (new_owner.
IsMan())
10647 {
10648 ownerPlayerNew = Man.Cast(new_owner);
10649 }
10650 else
10651 {
10652 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
10653 }
10654 }
10655
10656 if (ownerPlayerOld != ownerPlayerNew)
10657 {
10658 if (ownerPlayerOld)
10659 {
10660 array<EntityAI> subItemsExit = new array<EntityAI>;
10662 for (int i = 0; i < subItemsExit.Count(); i++)
10663 {
10666 }
10667 }
10668
10669 if (ownerPlayerNew)
10670 {
10671 array<EntityAI> subItemsEnter = new array<EntityAI>;
10673 for (int j = 0; j < subItemsEnter.Count(); j++)
10674 {
10677 }
10678 }
10679 }
10680 else if (ownerPlayerNew != null)
10681 {
10682 PlayerBase nplayer;
10683 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
10684 {
10685 array<EntityAI> subItemsUpdate = new array<EntityAI>;
10687 for (int k = 0; k < subItemsUpdate.Count(); k++)
10688 {
10690 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
10691 }
10692 }
10693 }
10694
10695 if (old_owner)
10696 old_owner.OnChildItemRemoved(this);
10697 if (new_owner)
10698 new_owner.OnChildItemReceived(this);
10699 }
10700
10701
10703 {
10704 super.EEDelete(parent);
10705 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
10706 if (player)
10707 {
10709
10710 if (player.IsAlive())
10711 {
10712 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10713 if (r_index >= 0)
10714 {
10715 InventoryLocation r_il = new InventoryLocation;
10716 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10717
10718 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10721 {
10722 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10723 }
10725 {
10726 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10727 }
10728
10729 }
10730
10731 player.RemoveQuickBarEntityShortcut(this);
10732 }
10733 }
10734 }
10735
10737 {
10738 super.EEKilled(killer);
10739
10742 {
10743 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10744 {
10745 if (IsMagazine())
10746 {
10747 if (Magazine.Cast(this).GetAmmoCount() > 0)
10748 {
10750 }
10751 }
10752 else
10753 {
10755 }
10756 }
10757 }
10758 }
10759
10761 {
10762 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10763
10764 super.OnWasAttached(parent, slot_id);
10765
10768
10770 }
10771
10773 {
10774 super.OnWasDetached(parent, slot_id);
10775
10778 }
10779
10781 {
10782 int idx;
10785
10786 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10787 if (inventory_slots.Count() < 1)
10788 {
10789 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10790 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10791 }
10792 else
10793 {
10794 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10795 }
10796
10797 idx = inventory_slots.Find(slot);
10798 if (idx < 0)
10799 return "";
10800
10801 return attach_types.Get(idx);
10802 }
10803
10805 {
10806 int idx = -1;
10807 string slot;
10808
10811
10812 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10813 if (inventory_slots.Count() < 1)
10814 {
10815 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10816 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10817 }
10818 else
10819 {
10820 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10821 if (detach_types.Count() < 1)
10822 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10823 }
10824
10825 for (int i = 0; i < inventory_slots.Count(); i++)
10826 {
10827 slot = inventory_slots.Get(i);
10828 }
10829
10830 if (slot != "")
10831 {
10832 if (detach_types.Count() == 1)
10833 idx = 0;
10834 else
10835 idx = inventory_slots.Find(slot);
10836 }
10837 if (idx < 0)
10838 return "";
10839
10840 return detach_types.Get(idx);
10841 }
10842
10844 {
10845
10847
10848
10849 float min_time = 1;
10850 float max_time = 3;
10851 float delay = Math.RandomFloat(min_time, max_time);
10852
10853 explode_timer.Run(delay, this, "DoAmmoExplosion");
10854 }
10855
10857 {
10858 Magazine magazine = Magazine.Cast(this);
10859 int pop_sounds_count = 6;
10860 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10861
10862
10863 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10864 string sound_name = pop_sounds[ sound_idx ];
10866
10867
10868 magazine.ServerAddAmmoCount(-1);
10869
10870
10871 float min_temp_to_explode = 100;
10872
10873 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10874 {
10876 }
10877 }
10878
10879
10880 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10881 {
10882 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10883
10884 const int CHANCE_DAMAGE_CARGO = 4;
10885 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10886 const int CHANCE_DAMAGE_NOTHING = 2;
10887
10889 {
10890 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10891 int chances;
10892 int rnd;
10893
10894 if (GetInventory().GetCargo())
10895 {
10896 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10897 rnd = Math.RandomInt(0,chances);
10898
10899 if (rnd < CHANCE_DAMAGE_CARGO)
10900 {
10902 }
10903 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10904 {
10906 }
10907 }
10908 else
10909 {
10910 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10911 rnd = Math.RandomInt(0,chances);
10912
10913 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10914 {
10916 }
10917 }
10918 }
10919 }
10920
10922 {
10923 if (GetInventory().GetCargo())
10924 {
10925 int item_count = GetInventory().GetCargo().GetItemCount();
10926 if (item_count > 0)
10927 {
10928 int random_pick = Math.RandomInt(0, item_count);
10930 if (!item.IsExplosive())
10931 {
10932 item.AddHealth("","",damage);
10933 return true;
10934 }
10935 }
10936 }
10937 return false;
10938 }
10939
10941 {
10942 int attachment_count = GetInventory().AttachmentCount();
10943 if (attachment_count > 0)
10944 {
10945 int random_pick = Math.RandomInt(0, attachment_count);
10946 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10947 if (!attachment.IsExplosive())
10948 {
10949 attachment.AddHealth("","",damage);
10950 return true;
10951 }
10952 }
10953 return false;
10954 }
10955
10957 {
10959 }
10960
10962 {
10964 return GetInventory().CanRemoveEntity();
10965
10966 return false;
10967 }
10968
10970 {
10972 return;
10973
10975 {
10976 if (ScriptInputUserData.CanStoreInputUserData())
10977 {
10978 ScriptInputUserData ctx = new ScriptInputUserData;
10983 ctx.
Write(destination_entity);
10985 ctx.
Write(slot_id);
10987 }
10988 }
10989 else if (!
GetGame().IsMultiplayer())
10990 {
10992 }
10993 }
10994
10996 {
10998 return;
10999
11000 float split_quantity_new;
11004 InventoryLocation loc = new InventoryLocation;
11005
11006 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
11007 {
11009 split_quantity_new = stack_max;
11010 else
11012
11013 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
11014 if (new_item)
11015 {
11016 new_item.SetResultOfSplit(true);
11017 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11019 new_item.SetQuantity(split_quantity_new);
11020 }
11021 }
11022 else if (destination_entity && slot_id == -1)
11023 {
11024 if (quantity > stack_max)
11025 split_quantity_new = stack_max;
11026 else
11027 split_quantity_new = quantity;
11028
11030 {
11033 }
11034
11035 if (new_item)
11036 {
11037 new_item.SetResultOfSplit(true);
11038 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11040 new_item.SetQuantity(split_quantity_new);
11041 }
11042 }
11043 else
11044 {
11045 if (stack_max != 0)
11046 {
11048 {
11050 }
11051
11052 if (split_quantity_new == 0)
11053 {
11054 if (!
GetGame().IsMultiplayer())
11055 player.PhysicalPredictiveDropItem(this);
11056 else
11057 player.ServerDropEntity(this);
11058 return;
11059 }
11060
11062
11063 if (new_item)
11064 {
11065 new_item.SetResultOfSplit(true);
11066 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11068 new_item.SetQuantity(stack_max);
11069 new_item.PlaceOnSurface();
11070 }
11071 }
11072 }
11073 }
11074
11076 {
11078 return;
11079
11080 float split_quantity_new;
11084 InventoryLocation loc = new InventoryLocation;
11085
11086 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
11087 {
11089 split_quantity_new = stack_max;
11090 else
11092
11093 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
11094 if (new_item)
11095 {
11096 new_item.SetResultOfSplit(true);
11097 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11099 new_item.SetQuantity(split_quantity_new);
11100 }
11101 }
11102 else if (destination_entity && slot_id == -1)
11103 {
11104 if (quantity > stack_max)
11105 split_quantity_new = stack_max;
11106 else
11107 split_quantity_new = quantity;
11108
11110 {
11113 }
11114
11115 if (new_item)
11116 {
11117 new_item.SetResultOfSplit(true);
11118 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11120 new_item.SetQuantity(split_quantity_new);
11121 }
11122 }
11123 else
11124 {
11125 if (stack_max != 0)
11126 {
11128 {
11130 }
11131
11133
11134 if (new_item)
11135 {
11136 new_item.SetResultOfSplit(true);
11137 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11139 new_item.SetQuantity(stack_max);
11140 new_item.PlaceOnSurface();
11141 }
11142 }
11143 }
11144 }
11145
11147 {
11149 return;
11150
11152 {
11153 if (ScriptInputUserData.CanStoreInputUserData())
11154 {
11155 ScriptInputUserData ctx = new ScriptInputUserData;
11160 dst.WriteToContext(ctx);
11162 }
11163 }
11164 else if (!
GetGame().IsMultiplayer())
11165 {
11167 }
11168 }
11169
11171 {
11173 return;
11174
11176 {
11177 if (ScriptInputUserData.CanStoreInputUserData())
11178 {
11179 ScriptInputUserData ctx = new ScriptInputUserData;
11184 ctx.
Write(destination_entity);
11190 }
11191 }
11192 else if (!
GetGame().IsMultiplayer())
11193 {
11195 }
11196 }
11197
11199 {
11201 }
11202
11204 {
11206 return this;
11207
11209 float split_quantity_new;
11211 if (dst.IsValid())
11212 {
11213 int slot_id = dst.GetSlot();
11215
11216 if (quantity > stack_max)
11217 split_quantity_new = stack_max;
11218 else
11219 split_quantity_new = quantity;
11220
11222
11223 if (new_item)
11224 {
11225 new_item.SetResultOfSplit(true);
11226 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11229 }
11230
11231 return new_item;
11232 }
11233
11234 return null;
11235 }
11236
11238 {
11240 return;
11241
11243 float split_quantity_new;
11245 if (destination_entity)
11246 {
11248 if (quantity > stackable)
11249 split_quantity_new = stackable;
11250 else
11251 split_quantity_new = quantity;
11252
11253 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
11254 if (new_item)
11255 {
11256 new_item.SetResultOfSplit(true);
11257 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11259 new_item.SetQuantity(split_quantity_new);
11260 }
11261 }
11262 }
11263
11265 {
11267 return;
11268
11270 {
11271 if (ScriptInputUserData.CanStoreInputUserData())
11272 {
11273 ScriptInputUserData ctx = new ScriptInputUserData;
11278 ItemBase destination_entity =
this;
11279 ctx.
Write(destination_entity);
11283 }
11284 }
11285 else if (!
GetGame().IsMultiplayer())
11286 {
11288 }
11289 }
11290
11292 {
11294 return;
11295
11297 float split_quantity_new;
11299 if (player)
11300 {
11302 if (quantity > stackable)
11303 split_quantity_new = stackable;
11304 else
11305 split_quantity_new = quantity;
11306
11307 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
11308 new_item =
ItemBase.Cast(in_hands);
11309 if (new_item)
11310 {
11311 new_item.SetResultOfSplit(true);
11312 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11314 new_item.SetQuantity(split_quantity_new);
11315 }
11316 }
11317 }
11318
11320 {
11322 return;
11323
11325 float split_quantity_new = Math.Floor(quantity * 0.5);
11326
11328
11329 if (new_item)
11330 {
11331 if (new_item.GetQuantityMax() < split_quantity_new)
11332 {
11333 split_quantity_new = new_item.GetQuantityMax();
11334 }
11335
11336 new_item.SetResultOfSplit(true);
11337 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11338
11340 {
11343 }
11344 else
11345 {
11348 }
11349 }
11350 }
11351
11353 {
11355 return;
11356
11358 float split_quantity_new = Math.Floor(quantity / 2);
11359
11360 InventoryLocation invloc = new InventoryLocation;
11362
11364 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
11365
11366 if (new_item)
11367 {
11368 if (new_item.GetQuantityMax() < split_quantity_new)
11369 {
11370 split_quantity_new = new_item.GetQuantityMax();
11371 }
11373 {
11376 }
11377 else
11378 {
11381 }
11382 }
11383 }
11384
11387 {
11388 SetWeightDirty();
11390
11391 if (parent)
11392 parent.OnAttachmentQuantityChangedEx(this, delta);
11393
11395 {
11397 {
11399 }
11401 {
11402 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
11404 }
11405 }
11406
11407 }
11408
11411 {
11412
11413 }
11414
11417 {
11419 }
11420
11422 {
11423 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
11424
11426 {
11427 if (newLevel == GameConstants.STATE_RUINED)
11428 {
11430 EntityAI parent = GetHierarchyParent();
11431 if (parent && parent.IsFireplace())
11432 {
11433 CargoBase cargo = GetInventory().GetCargo();
11434 if (cargo)
11435 {
11437 {
11439 }
11440 }
11441 }
11442 }
11443
11445 {
11446
11448 return;
11449 }
11450
11451 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
11452 {
11454 }
11455 }
11456 }
11457
11458
11460 {
11461 super.OnRightClick();
11462
11464 {
11466 {
11467 if (ScriptInputUserData.CanStoreInputUserData())
11468 {
11469 vector m4[4];
11471
11472 EntityAI root = GetHierarchyRoot();
11473
11474 InventoryLocation dst = new InventoryLocation;
11476 {
11477 if (root)
11478 {
11479 root.GetTransform(m4);
11481 }
11482 else
11483 GetInventory().GetCurrentInventoryLocation(dst);
11484 }
11485 else
11486 {
11488
11489
11490 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
11491 {
11492 if (root)
11493 {
11494 root.GetTransform(m4);
11496 }
11497 else
11498 GetInventory().GetCurrentInventoryLocation(dst);
11499 }
11500 else
11501 {
11502 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
11503 }
11504 }
11505
11506 ScriptInputUserData ctx = new ScriptInputUserData;
11514 }
11515 }
11516 else if (!
GetGame().IsMultiplayer())
11517 {
11519 }
11520 }
11521 }
11522
11523 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
11524 {
11525
11526 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
11527 return false;
11528
11529 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
11530 return false;
11531
11532
11534 return false;
11535
11536
11537 Magazine mag = Magazine.Cast(this);
11538 if (mag)
11539 {
11540 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
11541 return false;
11542
11543 if (stack_max_limit)
11544 {
11545 Magazine other_mag = Magazine.Cast(other_item);
11546 if (other_item)
11547 {
11548 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
11549 return false;
11550 }
11551
11552 }
11553 }
11554 else
11555 {
11556
11558 return false;
11559
11561 return false;
11562 }
11563
11564 PlayerBase player = null;
11565 if (CastTo(player, GetHierarchyRootPlayer()))
11566 {
11567 if (player.GetInventory().HasAttachment(this))
11568 return false;
11569
11570 if (player.IsItemsToDelete())
11571 return false;
11572 }
11573
11574 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
11575 return false;
11576
11577 int slotID;
11579 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
11580 return false;
11581
11582 return true;
11583 }
11584
11586 {
11588 }
11589
11591 {
11592 return m_IsResultOfSplit;
11593 }
11594
11596 {
11597 m_IsResultOfSplit = value;
11598 }
11599
11601 {
11603 }
11604
11606 {
11607 float other_item_quantity = other_item.GetQuantity();
11608 float this_free_space;
11609
11611
11613
11614 if (other_item_quantity > this_free_space)
11615 {
11616 return this_free_space;
11617 }
11618 else
11619 {
11620 return other_item_quantity;
11621 }
11622 }
11623
11625 {
11627 }
11628
11630 {
11632 return;
11633
11634 if (!IsMagazine() && other_item)
11635 {
11637 if (quantity_used != 0)
11638 {
11639 float hp1 = GetHealth01("","");
11640 float hp2 = other_item.GetHealth01("","");
11641 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
11642 hpResult = hpResult / (
GetQuantity() + quantity_used);
11643
11644 hpResult *= GetMaxHealth();
11645 Math.Round(hpResult);
11646 SetHealth("", "Health", hpResult);
11647
11649 other_item.AddQuantity(-quantity_used);
11650 }
11651 }
11653 }
11654
11656 {
11657 #ifdef SERVER
11658 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
11659 GetHierarchyParent().IncreaseLifetimeUp();
11660 #endif
11661 };
11662
11664 {
11665 PlayerBase p = PlayerBase.Cast(player);
11666
11667 array<int> recipesIds = p.m_Recipes;
11668 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11669 if (moduleRecipesManager)
11670 {
11671 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
11672 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
11673 }
11674
11675 for (int i = 0;i < recipesIds.Count(); i++)
11676 {
11677 int key = recipesIds.Get(i);
11678 string recipeName = moduleRecipesManager.GetRecipeName(key);
11680 }
11681 }
11682
11683
11684 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
11685 {
11686 super.GetDebugActions(outputList);
11687
11688
11693
11694
11698
11702
11703
11706
11707
11709 {
11712 }
11713
11715
11718
11722 }
11723
11724
11725
11726
11728 {
11729 super.OnAction(action_id, player, ctx);
11730 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11731 {
11732 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11733 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11734 PlayerBase p = PlayerBase.Cast(player);
11735 if (
EActions.RECIPES_RANGE_START < 1000)
11736 {
11737 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11738 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11739 }
11740 }
11741 #ifndef SERVER
11742 else if (action_id ==
EActions.WATCH_PLAYER)
11743 {
11744 PluginDeveloper.SetDeveloperItemClientEx(player);
11745 }
11746 #endif
11748 {
11749 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11750 {
11751 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11752 OnDebugButtonPressServer(id + 1);
11753 }
11754
11755 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11756 {
11757 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11759 }
11760
11761 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11762 {
11763 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11765 }
11766
11767 else if (action_id ==
EActions.ADD_QUANTITY)
11768 {
11769 if (IsMagazine())
11770 {
11771 Magazine mag = Magazine.Cast(this);
11772 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11773 }
11774 else
11775 {
11777 }
11778
11779 if (m_EM)
11780 {
11781 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11782 }
11783
11784 }
11785
11786 else if (action_id ==
EActions.REMOVE_QUANTITY)
11787 {
11788 if (IsMagazine())
11789 {
11790 Magazine mag2 = Magazine.Cast(this);
11791 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11792 }
11793 else
11794 {
11796 }
11797 if (m_EM)
11798 {
11799 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11800 }
11801
11802 }
11803
11804 else if (action_id ==
EActions.SET_QUANTITY_0)
11805 {
11807
11808 if (m_EM)
11809 {
11810 m_EM.SetEnergy(0);
11811 }
11812 }
11813
11814 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11815 {
11817
11818 if (m_EM)
11819 {
11820 m_EM.SetEnergy(m_EM.GetEnergyMax());
11821 }
11822 }
11823
11824 else if (action_id ==
EActions.ADD_HEALTH)
11825 {
11826 AddHealth("","",GetMaxHealth("","Health")/5);
11827 }
11828 else if (action_id ==
EActions.REMOVE_HEALTH)
11829 {
11830 AddHealth("","",-GetMaxHealth("","Health")/5);
11831 }
11832 else if (action_id ==
EActions.DESTROY_HEALTH)
11833 {
11834 SetHealth01("","",0);
11835 }
11836 else if (action_id ==
EActions.WATCH_ITEM)
11837 {
11839 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11840 #ifdef DEVELOPER
11841 SetDebugDeveloper_item(this);
11842 #endif
11843 }
11844
11845 else if (action_id ==
EActions.ADD_TEMPERATURE)
11846 {
11847 AddTemperature(20);
11848
11849 }
11850
11851 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11852 {
11853 AddTemperature(-20);
11854
11855 }
11856
11857 else if (action_id ==
EActions.FLIP_FROZEN)
11858 {
11859 SetFrozen(!GetIsFrozen());
11860
11861 }
11862
11863 else if (action_id ==
EActions.ADD_WETNESS)
11864 {
11866
11867 }
11868
11869 else if (action_id ==
EActions.REMOVE_WETNESS)
11870 {
11872
11873 }
11874
11875 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11876 {
11879
11880
11881 }
11882
11883 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11884 {
11887 }
11888
11889 else if (action_id ==
EActions.MAKE_SPECIAL)
11890 {
11891 auto debugParams = DebugSpawnParams.WithPlayer(player);
11892 OnDebugSpawnEx(debugParams);
11893 }
11894
11895 else if (action_id ==
EActions.DELETE)
11896 {
11897 Delete();
11898 }
11899
11900 }
11901
11902
11903 return false;
11904 }
11905
11906
11907
11908
11912
11915
11916
11917
11919 {
11920 return false;
11921 }
11922
11923
11925 {
11926 return true;
11927 }
11928
11929
11931 {
11932 return true;
11933 }
11934
11935
11936
11938 {
11939 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11941 }
11942
11945 {
11946 return null;
11947 }
11948
11950 {
11951 return false;
11952 }
11953
11955 {
11956 return false;
11957 }
11958
11962
11963
11965 {
11966 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11967 return module_repairing.CanRepair(this, item_repair_kit);
11968 }
11969
11970
11971 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11972 {
11973 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11974 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11975 }
11976
11977
11979 {
11980
11981
11982
11983
11984
11985
11986
11987
11988 return 1;
11989 }
11990
11991
11992
11994 {
11996 }
11997
11998
11999
12001 {
12003 }
12004
12005
12014 {
12015 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12016
12017 if (player)
12018 {
12019 player.MessageStatus(text);
12020 }
12021 }
12022
12023
12032 {
12033 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12034
12035 if (player)
12036 {
12037 player.MessageAction(text);
12038 }
12039 }
12040
12041
12050 {
12051 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12052
12053 if (player)
12054 {
12055 player.MessageFriendly(text);
12056 }
12057 }
12058
12059
12068 {
12069 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
12070
12071 if (player)
12072 {
12073 player.MessageImportant(text);
12074 }
12075 }
12076
12078 {
12079 return true;
12080 }
12081
12082
12083 override bool KindOf(
string tag)
12084 {
12085 bool found = false;
12086 string item_name = this.
GetType();
12089
12090 int array_size = item_tag_array.Count();
12091 for (int i = 0; i < array_size; i++)
12092 {
12093 if (item_tag_array.Get(i) == tag)
12094 {
12095 found = true;
12096 break;
12097 }
12098 }
12099 return found;
12100 }
12101
12102
12104 {
12105
12106 super.OnRPC(sender, rpc_type,ctx);
12107
12108
12109 switch (rpc_type)
12110 {
12111 #ifndef SERVER
12112 case ERPCs.RPC_SOUND_LOCK_ATTACH:
12113 Param2<bool, string> p = new Param2<bool, string>(false, "");
12114
12116 return;
12117
12118 bool play = p.param1;
12119 string soundSet = p.param2;
12120
12121 if (play)
12122 {
12124 {
12126 {
12128 }
12129 }
12130 else
12131 {
12133 }
12134 }
12135 else
12136 {
12138 }
12139
12140 break;
12141 #endif
12142
12143 }
12144
12146 {
12148 }
12149 }
12150
12151
12152
12153
12155 {
12156 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
12157 return plugin.GetID(
name);
12158 }
12159
12161 {
12162 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
12163 return plugin.GetName(id);
12164 }
12165
12168 {
12169
12170
12171 int varFlags;
12172 if (!ctx.
Read(varFlags))
12173 return;
12174
12175 if (varFlags & ItemVariableFlags.FLOAT)
12176 {
12178 }
12179 }
12180
12182 {
12183
12184 super.SerializeNumericalVars(floats_out);
12185
12186
12187
12189 {
12191 }
12192
12194 {
12196 }
12197
12199 {
12201 }
12202
12204 {
12209 }
12210
12212 {
12214 }
12215 }
12216
12218 {
12219
12220 super.DeSerializeNumericalVars(floats);
12221
12222
12223 int index = 0;
12224 int mask = Math.Round(floats.Get(index));
12225
12226 index++;
12227
12229 {
12231 {
12233 }
12234 else
12235 {
12236 float quantity = floats.Get(index);
12237 SetQuantity(quantity,
true,
false,
false,
false);
12238 }
12239 index++;
12240 }
12241
12243 {
12244 float wet = floats.Get(index);
12246 index++;
12247 }
12248
12250 {
12251 int liquidtype = Math.Round(floats.Get(index));
12253 index++;
12254 }
12255
12257 {
12259 index++;
12261 index++;
12263 index++;
12265 index++;
12266 }
12267
12269 {
12270 int cleanness = Math.Round(floats.Get(index));
12272 index++;
12273 }
12274 }
12275
12277 {
12278 super.WriteVarsToCTX(ctx);
12279
12280
12282 {
12284 }
12285
12287 {
12289 }
12290
12292 {
12294 }
12295
12297 {
12298 int r,g,b,a;
12304 }
12305
12307 {
12309 }
12310 }
12311
12313 {
12314 if (!super.ReadVarsFromCTX(ctx,version))
12315 return false;
12316
12317 int intValue;
12318 float value;
12319
12320 if (version < 140)
12321 {
12322 if (!ctx.
Read(intValue))
12323 return false;
12324
12325 m_VariablesMask = intValue;
12326 }
12327
12329 {
12330 if (!ctx.
Read(value))
12331 return false;
12332
12334 {
12336 }
12337 else
12338 {
12340 }
12341 }
12342
12343 if (version < 140)
12344 {
12346 {
12347 if (!ctx.
Read(value))
12348 return false;
12349 SetTemperatureDirect(value);
12350 }
12351 }
12352
12354 {
12355 if (!ctx.
Read(value))
12356 return false;
12358 }
12359
12361 {
12362 if (!ctx.
Read(intValue))
12363 return false;
12365 }
12366
12368 {
12369 int r,g,b,a;
12371 return false;
12373 return false;
12375 return false;
12377 return false;
12378
12380 }
12381
12383 {
12384 if (!ctx.
Read(intValue))
12385 return false;
12387 }
12388
12389 if (version >= 138 && version < 140)
12390 {
12392 {
12393 if (!ctx.
Read(intValue))
12394 return false;
12395 SetFrozen(intValue);
12396 }
12397 }
12398
12399 return true;
12400 }
12401
12402
12404 {
12407 {
12409 }
12410
12411 if (!super.OnStoreLoad(ctx, version))
12412 {
12414 return false;
12415 }
12416
12417 if (version >= 114)
12418 {
12419 bool hasQuickBarIndexSaved;
12420
12421 if (!ctx.
Read(hasQuickBarIndexSaved))
12422 {
12424 return false;
12425 }
12426
12427 if (hasQuickBarIndexSaved)
12428 {
12429 int itmQBIndex;
12430
12431
12432 if (!ctx.
Read(itmQBIndex))
12433 {
12435 return false;
12436 }
12437
12438 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
12439 if (itmQBIndex != -1 && parentPlayer)
12440 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
12441 }
12442 }
12443 else
12444 {
12445
12446 PlayerBase player;
12447 int itemQBIndex;
12448 if (version ==
int.
MAX)
12449 {
12450 if (!ctx.
Read(itemQBIndex))
12451 {
12453 return false;
12454 }
12455 }
12456 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
12457 {
12458
12459 if (!ctx.
Read(itemQBIndex))
12460 {
12462 return false;
12463 }
12464 if (itemQBIndex != -1 && player)
12465 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
12466 }
12467 }
12468
12469 if (version < 140)
12470 {
12471
12472 if (!LoadVariables(ctx, version))
12473 {
12475 return false;
12476 }
12477 }
12478
12479
12481 {
12483 return false;
12484 }
12485 if (version >= 132)
12486 {
12488 if (raib)
12489 {
12491 {
12493 return false;
12494 }
12495 }
12496 }
12497
12499 return true;
12500 }
12501
12502
12503
12505 {
12506 super.OnStoreSave(ctx);
12507
12508 PlayerBase player;
12509 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
12510 {
12512
12513 int itemQBIndex = -1;
12514 itemQBIndex = player.FindQuickBarEntityIndex(this);
12515 ctx.
Write(itemQBIndex);
12516 }
12517 else
12518 {
12520 }
12521
12523
12525 if (raib)
12526 {
12528 }
12529 }
12530
12531
12533 {
12534 super.AfterStoreLoad();
12535
12537 {
12539 }
12540
12542 {
12545 }
12546 }
12547
12549 {
12550 super.EEOnAfterLoad();
12551
12553 {
12555 }
12556
12559 }
12560
12562 {
12563 return false;
12564 }
12565
12566
12567
12569 {
12571 {
12572 #ifdef PLATFORM_CONSOLE
12573
12575 {
12577 if (menu)
12578 {
12580 }
12581 }
12582 #endif
12583 }
12584
12586 {
12589 }
12590
12592 {
12593 SetWeightDirty();
12595 }
12597 {
12600 }
12601
12603 {
12606 }
12608 {
12611 }
12612
12613 super.OnVariablesSynchronized();
12614 }
12615
12616
12617
12619 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
12620 {
12621 if (!IsServerCheck(allow_client))
12622 return false;
12623
12625 return false;
12626
12629
12630 if (value <= (min + 0.001))
12631 value = min;
12632
12633 if (value == min)
12634 {
12635 if (destroy_config)
12636 {
12637 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
12638 if (dstr)
12639 {
12641 this.Delete();
12642 return true;
12643 }
12644 }
12645 else if (destroy_forced)
12646 {
12648 this.Delete();
12649 return true;
12650 }
12651
12653 }
12654
12657
12659 {
12661
12662 if (delta)
12664 }
12665
12667
12668 return false;
12669 }
12670
12671
12673 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
12674 {
12676 }
12677
12679 {
12682 }
12683
12685 {
12688 }
12689
12692 {
12693 float value_clamped = Math.Clamp(value, 0, 1);
12695 SetQuantity(result, destroy_config, destroy_forced);
12696 }
12697
12698
12701 {
12703 }
12704
12706 {
12708 }
12709
12710
12711
12712
12713
12714
12715
12716
12717
12718
12720 {
12721 int slot = -1;
12722 if (GetInventory())
12723 {
12724 InventoryLocation il = new InventoryLocation;
12725 GetInventory().GetCurrentInventoryLocation(il);
12727 }
12728
12730 }
12731
12733 {
12734 float quantity_max = 0;
12735
12737 {
12738 if (attSlotID != -1)
12739 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12740
12741 if (quantity_max <= 0)
12743 }
12744
12745 if (quantity_max <= 0)
12747
12748 return quantity_max;
12749 }
12750
12752 {
12754 }
12755
12757 {
12759 }
12760
12761
12763 {
12765 }
12766
12768 {
12770 }
12771
12773 {
12775 }
12776
12777
12779 {
12780
12781 float weightEx = GetWeightEx();
12782 float special = GetInventoryAndCargoWeight();
12783 return weightEx - special;
12784 }
12785
12786
12788 {
12790 }
12791
12793 {
12795 {
12796 #ifdef DEVELOPER
12797 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12798 {
12799 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12801 }
12802 #endif
12803
12804 return GetQuantity() * GetConfigWeightModified();
12805 }
12806 else if (HasEnergyManager())
12807 {
12808 #ifdef DEVELOPER
12809 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12810 {
12811 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12812 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12813 }
12814 #endif
12815 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12816 }
12817 else
12818 {
12819 #ifdef DEVELOPER
12820 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12821 {
12822 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12823 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12824 }
12825 #endif
12826 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12827 }
12828 }
12829
12832 {
12833 int item_count = 0;
12835
12836 if (GetInventory().GetCargo() != NULL)
12837 {
12838 item_count = GetInventory().GetCargo().GetItemCount();
12839 }
12840
12841 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12842 {
12843 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12844 if (item)
12845 item_count += item.GetNumberOfItems();
12846 }
12847 return item_count;
12848 }
12849
12852 {
12853 float weight = 0;
12854 float wetness = 1;
12855 if (include_wetness)
12858 {
12859 weight = wetness * m_ConfigWeight;
12860 }
12862 {
12863 weight = 1;
12864 }
12865 return weight;
12866 }
12867
12868
12869
12871 {
12872 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12873 {
12874 GameInventory inv = GetInventory();
12875 array<EntityAI> items = new array<EntityAI>;
12877 for (int i = 0; i < items.Count(); i++)
12878 {
12880 if (item)
12881 {
12883 }
12884 }
12885 }
12886 }
12887
12888
12889
12890
12892 {
12893 float energy = 0;
12894 if (HasEnergyManager())
12895 {
12896 energy = GetCompEM().GetEnergy();
12897 }
12898 return energy;
12899 }
12900
12901
12903 {
12904 super.OnEnergyConsumed();
12905
12907 }
12908
12910 {
12911 super.OnEnergyAdded();
12912
12914 }
12915
12916
12918 {
12919 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12920 {
12922 {
12923 float energy_0to1 = GetCompEM().GetEnergy0To1();
12925 }
12926 }
12927 }
12928
12929
12931 {
12932 return ConfigGetFloat("heatIsolation");
12933 }
12934
12936 {
12938 }
12939
12941 {
12942 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12943 if (
GetGame().ConfigIsExisting(paramPath))
12945
12946 return 0.0;
12947 }
12948
12950 {
12951 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12952 if (
GetGame().ConfigIsExisting(paramPath))
12954
12955 return 0.0;
12956 }
12957
12958 override void SetWet(
float value,
bool allow_client =
false)
12959 {
12960 if (!IsServerCheck(allow_client))
12961 return;
12962
12965
12967
12968 m_VarWet = Math.Clamp(value, min, max);
12969
12971 {
12974 }
12975 }
12976
12977 override void AddWet(
float value)
12978 {
12980 }
12981
12983 {
12985 }
12986
12988 {
12990 }
12991
12993 {
12995 }
12996
12998 {
13000 }
13001
13003 {
13005 }
13006
13007 override void OnWetChanged(
float newVal,
float oldVal)
13008 {
13011 if (newLevel != oldLevel)
13012 {
13014 }
13015 }
13016
13018 {
13019 SetWeightDirty();
13020 }
13021
13023 {
13024 return GetWetLevelInternal(
m_VarWet);
13025 }
13026
13027
13028
13030 {
13032 }
13033
13035 {
13037 }
13038
13040 {
13042 }
13043
13045 {
13047 }
13048
13049
13050
13052 {
13053 if (ConfigIsExisting("itemModelLength"))
13054 {
13055 return ConfigGetFloat("itemModelLength");
13056 }
13057 return 0;
13058 }
13059
13061 {
13062 if (ConfigIsExisting("itemAttachOffset"))
13063 {
13064 return ConfigGetFloat("itemAttachOffset");
13065 }
13066 return 0;
13067 }
13068
13069 override void SetCleanness(
int value,
bool allow_client =
false)
13070 {
13071 if (!IsServerCheck(allow_client))
13072 return;
13073
13075
13077
13080 }
13081
13083 {
13085 }
13086
13088 {
13089 return true;
13090 }
13091
13092
13093
13094
13096 {
13098 }
13099
13101 {
13103 }
13104
13105
13106
13107
13108 override void SetColor(
int r,
int g,
int b,
int a)
13109 {
13115 }
13117 override void GetColor(out
int r,out
int g,out
int b,out
int a)
13118 {
13123 }
13124
13126 {
13128 }
13129
13132 {
13133 int r,g,b,a;
13135 r = r/255;
13136 g = g/255;
13137 b = b/255;
13138 a = a/255;
13139 return MiscGameplayFunctions.GetColorString(r, g, b, a);
13140 }
13141
13142
13143
13144 override void SetLiquidType(
int value,
bool allow_client =
false)
13145 {
13146 if (!IsServerCheck(allow_client))
13147 return;
13148
13153 }
13154
13156 {
13157 return ConfigGetInt("varLiquidTypeInit");
13158 }
13159
13161 {
13163 }
13164
13166 {
13168 SetFrozen(false);
13169 }
13170
13173 {
13174 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
13175 }
13176
13177
13180 {
13181 PlayerBase nplayer;
13182 if (PlayerBase.CastTo(nplayer, player))
13183 {
13185
13186 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
13187 }
13188 }
13189
13190
13193 {
13194 PlayerBase nplayer;
13195 if (PlayerBase.CastTo(nplayer,player))
13196 {
13197
13198 nplayer.SetEnableQuickBarEntityShortcut(this,false);
13199
13200 }
13201
13202
13203 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
13204
13205
13206 if (HasEnergyManager())
13207 {
13208 GetCompEM().UpdatePlugState();
13209 }
13210 }
13211
13212
13214 {
13215 super.OnPlacementStarted(player);
13216
13218 }
13219
13220 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
13221 {
13223 {
13224 m_AdminLog.OnPlacementComplete(player,
this);
13225 }
13226
13227 super.OnPlacementComplete(player, position, orientation);
13228 }
13229
13230
13231
13232
13233
13235 {
13237 {
13238 return true;
13239 }
13240 else
13241 {
13242 return false;
13243 }
13244 }
13245
13246
13248 {
13250 {
13252 }
13253 }
13254
13255
13257 {
13259 }
13260
13262 {
13264 }
13265
13266 override void InsertAgent(
int agent,
float count = 1)
13267 {
13268 if (count < 1)
13269 return;
13270
13272 }
13273
13276 {
13278 }
13279
13280
13282 {
13284 }
13285
13286
13287
13288
13289
13290
13291
13292
13293
13294
13295
13296
13297
13298
13299
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309
13310
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13321
13322
13323
13324
13325
13326
13328 {
13330 return false;
13331 return true;
13332 }
13333
13335 {
13336
13338 }
13339
13340
13343 {
13344 super.CheckForRoofLimited(timeTresholdMS);
13345
13347 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
13348 {
13349 m_PreviousRoofTestTime = time;
13350 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
13351 }
13352 }
13353
13354
13356 {
13358 {
13359 return 0;
13360 }
13361
13362 if (GetInventory().GetAttachmentSlotsCount() != 0)
13363 {
13364 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
13365 if (filter)
13366 return filter.GetProtectionLevel(type, false, system);
13367 else
13368 return 0;
13369 }
13370
13371 string subclassPath, entryName;
13372
13373 switch (type)
13374 {
13376 entryName = "biological";
13377 break;
13379 entryName = "chemical";
13380 break;
13381 default:
13382 entryName = "biological";
13383 break;
13384 }
13385
13386 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
13387
13389 }
13390
13391
13392
13395 {
13396 if (!IsMagazine())
13398
13400 }
13401
13402
13403
13404
13405
13410 {
13411 return true;
13412 }
13413
13415 {
13417 }
13418
13419
13420
13421
13422
13424 {
13425 if (parent)
13426 {
13427 if (parent.IsInherited(DayZInfected))
13428 return true;
13429
13430 if (!parent.IsRuined())
13431 return true;
13432 }
13433
13434 return true;
13435 }
13436
13438 {
13439 if (!super.CanPutAsAttachment(parent))
13440 {
13441 return false;
13442 }
13443
13444 if (!IsRuined() && !parent.IsRuined())
13445 {
13446 return true;
13447 }
13448
13449 return false;
13450 }
13451
13453 {
13454
13455
13456
13457
13458 return super.CanReceiveItemIntoCargo(item);
13459 }
13460
13462 {
13463
13464
13465
13466
13467 GameInventory attachmentInv = attachment.GetInventory();
13469 {
13470 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
13471 return false;
13472 }
13473
13474 InventoryLocation loc = new InventoryLocation();
13475 attachment.GetInventory().GetCurrentInventoryLocation(loc);
13476 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
13477 return false;
13478
13479 return super.CanReceiveAttachment(attachment, slotId);
13480 }
13481
13483 {
13484 if (!super.CanReleaseAttachment(attachment))
13485 return false;
13486
13487 return GetInventory().AreChildrenAccessible();
13488 }
13489
13490
13491
13492
13493
13494
13495
13496
13497
13498
13499
13500
13501
13502
13503
13504
13505
13506
13507
13508
13509
13511 {
13512 int id = muzzle_owner.GetMuzzleID();
13513 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
13514
13515 if (WPOF_array)
13516 {
13517 for (int i = 0; i < WPOF_array.Count(); i++)
13518 {
13519 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
13520
13521 if (WPOF)
13522 {
13523 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
13524 }
13525 }
13526 }
13527 }
13528
13529
13531 {
13532 int id = muzzle_owner.GetMuzzleID();
13534
13535 if (WPOBE_array)
13536 {
13537 for (int i = 0; i < WPOBE_array.Count(); i++)
13538 {
13539 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
13540
13541 if (WPOBE)
13542 {
13543 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13544 }
13545 }
13546 }
13547 }
13548
13549
13551 {
13552 int id = muzzle_owner.GetMuzzleID();
13553 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13554
13555 if (WPOOH_array)
13556 {
13557 for (int i = 0; i < WPOOH_array.Count(); i++)
13558 {
13559 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13560
13561 if (WPOOH)
13562 {
13563 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13564 }
13565 }
13566 }
13567 }
13568
13569
13571 {
13572 int id = muzzle_owner.GetMuzzleID();
13573 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13574
13575 if (WPOOH_array)
13576 {
13577 for (int i = 0; i < WPOOH_array.Count(); i++)
13578 {
13579 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13580
13581 if (WPOOH)
13582 {
13583 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13584 }
13585 }
13586 }
13587 }
13588
13589
13591 {
13592 int id = muzzle_owner.GetMuzzleID();
13593 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13594
13595 if (WPOOH_array)
13596 {
13597 for (int i = 0; i < WPOOH_array.Count(); i++)
13598 {
13599 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13600
13601 if (WPOOH)
13602 {
13603 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13604 }
13605 }
13606 }
13607 }
13608
13609
13610
13612 {
13614 {
13615 return true;
13616 }
13617
13618 return false;
13619 }
13620
13622 {
13624 {
13625 return true;
13626 }
13627
13628 return false;
13629 }
13630
13632 {
13634 {
13635 return true;
13636 }
13637
13638 return false;
13639 }
13640
13642 {
13643 return false;
13644 }
13645
13648 {
13649 return UATimeSpent.DEFAULT_DEPLOY;
13650 }
13651
13652
13653
13654
13656 {
13658 SetSynchDirty();
13659 }
13660
13662 {
13664 }
13665
13666
13668 {
13669 return false;
13670 }
13671
13674 {
13675 string att_type = "None";
13676
13677 if (ConfigIsExisting("soundAttType"))
13678 {
13679 att_type = ConfigGetString("soundAttType");
13680 }
13681
13683 }
13684
13686 {
13688 }
13689
13690
13691
13692
13693
13697
13699 {
13702
13704 }
13705
13706
13708 {
13710 return;
13711
13713
13716
13719
13720 SoundParameters params = new SoundParameters();
13724 }
13725
13726
13728 {
13730 return;
13731
13733 SetSynchDirty();
13734
13737 }
13738
13739
13741 {
13743 return;
13744
13746 SetSynchDirty();
13747
13750 }
13751
13753 {
13755 }
13756
13758 {
13760 }
13761
13764 {
13765 if (!
GetGame().IsDedicatedServer())
13766 {
13767 if (ConfigIsExisting("attachSoundSet"))
13768 {
13769 string cfg_path = "";
13770 string soundset = "";
13771 string type_name =
GetType();
13772
13775 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13776 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13777
13778 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13779 {
13780 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13781 {
13782 if (cfg_slot_array[i] == slot_type)
13783 {
13784 soundset = cfg_soundset_array[i];
13785 break;
13786 }
13787 }
13788 }
13789
13790 if (soundset != "")
13791 {
13792 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13794 }
13795 }
13796 }
13797 }
13798
13800 {
13801
13802 }
13803
13804 void OnApply(PlayerBase player);
13805
13807 {
13808 return 1.0;
13809 };
13810
13812 {
13814 }
13815
13817 {
13819 }
13820
13822
13824 {
13825 SetDynamicPhysicsLifeTime(0.01);
13827 }
13828
13830 {
13831 array<string> zone_names = new array<string>;
13832 GetDamageZones(zone_names);
13833 for (int i = 0; i < zone_names.Count(); i++)
13834 {
13835 SetHealthMax(zone_names.Get(i),"Health");
13836 }
13837 SetHealthMax("","Health");
13838 }
13839
13842 {
13843 float global_health = GetHealth01("","Health");
13844 array<string> zones = new array<string>;
13845 GetDamageZones(zones);
13846
13847 for (int i = 0; i < zones.Count(); i++)
13848 {
13849 SetHealth01(zones.Get(i),"Health",global_health);
13850 }
13851 }
13852
13855 {
13856 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13857 }
13858
13860 {
13861 if (!hasRootAsPlayer)
13862 {
13863 if (refParentIB)
13864 {
13865
13866 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13867 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13868
13869 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13870 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13871
13874 }
13875 else
13876 {
13877
13880 }
13881 }
13882 }
13883
13885 {
13887 {
13888 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13889 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13890 {
13891 float heatPermCoef = 1.0;
13893 while (ent)
13894 {
13895 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13896 ent = ent.GetHierarchyParent();
13897 }
13898
13899 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13900 }
13901 }
13902 }
13903
13905 {
13906
13907 EntityAI parent = GetHierarchyParent();
13908 if (!parent)
13909 {
13910 hasParent = false;
13911 hasRootAsPlayer = false;
13912 }
13913 else
13914 {
13915 hasParent = true;
13916 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13917 refParentIB =
ItemBase.Cast(parent);
13918 }
13919 }
13920
13921 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13922 {
13923
13924 }
13925
13927 {
13928
13929 return false;
13930 }
13931
13933 {
13934
13935
13936 return false;
13937 }
13938
13940 {
13941
13942 return false;
13943 }
13944
13947 {
13948 return !GetIsFrozen() &&
IsOpen();
13949 }
13950
13952 {
13953 bool hasParent = false, hasRootAsPlayer = false;
13955
13956 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13957 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13958
13959 if (wwtu || foodDecay)
13960 {
13964
13965 if (processWetness || processTemperature || processDecay)
13966 {
13968
13969 if (processWetness)
13970 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13971
13972 if (processTemperature)
13974
13975 if (processDecay)
13976 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13977 }
13978 }
13979 }
13980
13983 {
13985 }
13986
13988 {
13991
13992 return super.GetTemperatureFreezeThreshold();
13993 }
13994
13996 {
13999
14000 return super.GetTemperatureThawThreshold();
14001 }
14002
14004 {
14007
14008 return super.GetItemOverheatThreshold();
14009 }
14010
14012 {
14014 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
14015
14016 return super.GetTemperatureFreezeTime();
14017 }
14018
14020 {
14022 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
14023
14024 return super.GetTemperatureThawTime();
14025 }
14026
14031
14033 {
14034 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
14035 }
14036
14038 {
14039 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
14040 }
14041
14044 {
14046 }
14047
14049 {
14051 }
14052
14054 {
14056 }
14057
14060 {
14061 return null;
14062 }
14063
14066 {
14067 return false;
14068 }
14069
14071 {
14073 {
14076 if (!trg)
14077 {
14079 explosive = this;
14080 }
14081
14082 explosive.PairRemote(trg);
14084
14085 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
14086 trg.SetPersistentPairID(persistentID);
14087 explosive.SetPersistentPairID(persistentID);
14088
14089 return true;
14090 }
14091 return false;
14092 }
14093
14096 {
14097 float ret = 1.0;
14100 ret *= GetHealth01();
14101
14102 return ret;
14103 }
14104
14105 #ifdef DEVELOPER
14106 override void SetDebugItem()
14107 {
14108 super.SetDebugItem();
14109 _itemBase = this;
14110 }
14111
14113 {
14114 string text = super.GetDebugText();
14115
14117 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
14118
14119 return text;
14120 }
14121 #endif
14122
14124 {
14125 return true;
14126 }
14127
14129
14131
14133 {
14136 }
14137
14138
14146
14162}
14163
14165{
14167 if (entity)
14168 {
14169 bool is_item = entity.IsInherited(
ItemBase);
14170 if (is_item && full_quantity)
14171 {
14174 }
14175 }
14176 else
14177 {
14179 return NULL;
14180 }
14181 return entity;
14182}
14183
14185{
14186 if (item)
14187 {
14188 if (health > 0)
14189 item.SetHealth("", "", health);
14190
14191 if (item.CanHaveTemperature())
14192 {
14194 if (item.CanFreeze())
14195 item.SetFrozen(false);
14196 }
14197
14198 if (item.HasEnergyManager())
14199 {
14200 if (quantity >= 0)
14201 {
14202 item.GetCompEM().SetEnergy0To1(quantity);
14203 }
14204 else
14205 {
14207 }
14208 }
14209 else if (item.IsMagazine())
14210 {
14211 Magazine mag = Magazine.Cast(item);
14212 if (quantity >= 0)
14213 {
14214 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
14215 }
14216 else
14217 {
14219 }
14220
14221 }
14222 else
14223 {
14224 if (quantity >= 0)
14225 {
14226 item.SetQuantityNormalized(quantity, false);
14227 }
14228 else
14229 {
14231 }
14232
14233 }
14234 }
14235}
14236
14237#ifdef DEVELOPER
14239#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.