8647{
8649 {
8650 return true;
8651 }
8652};
8653
8654
8655
8657{
8661
8663
8666
8667
8668
8669
8670
8679
8685
8690
8695
8716 protected bool m_IsResultOfSplit
8717
8719
8724
8725
8726
8728
8732
8733
8734
8736
8739
8740
8741
8747
8748
8756
8759
8760
8762
8763
8765
8766
8771
8772
8777
8778
8780
8781
8783 {
8788
8789 if (!
GetGame().IsDedicatedServer())
8790 {
8792 {
8794
8796 {
8798 }
8799 }
8800
8803 }
8804
8805 m_OldLocation = null;
8806
8808 {
8810 }
8811
8812 if (ConfigIsExisting("headSelectionsToHide"))
8813 {
8816 }
8817
8819 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8820 {
8822 }
8823
8825
8826 m_IsResultOfSplit = false;
8827
8829 }
8830
8832 {
8833 super.InitItemVariables();
8834
8840 m_Count = ConfigGetInt(
"count");
8841
8844
8849
8852
8857
8869
8873
8874
8877 if (ConfigIsExisting("canBeSplit"))
8878 {
8881 }
8882
8884 if (ConfigIsExisting("itemBehaviour"))
8886
8887
8890 RegisterNetSyncVariableInt("m_VarLiquidType");
8891 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8892
8893 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8894 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8895 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8896
8897 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8898 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8899 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8900 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8901
8902 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8903 RegisterNetSyncVariableBool("m_IsTakeable");
8904 RegisterNetSyncVariableBool("m_IsHologram");
8905
8908 {
8911 }
8912
8914
8916 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8918
8919 }
8920
8922 {
8924 }
8925
8927 {
8930 {
8935 }
8936 }
8937
8938 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8939 {
8941 {
8944 }
8945
8947 }
8948
8950 {
8956 }
8957
8959
8961 {
8963
8964 if (!action)
8965 {
8966 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8967 return;
8968 }
8969
8971 if (!ai)
8972 {
8974 return;
8975 }
8976
8978 if (!action_array)
8979 {
8980 action_array = new array<ActionBase_Basic>;
8982 }
8983 if (LogManager.IsActionLogEnable())
8984 {
8985 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8986 }
8987
8988 if (action_array.Find(action) != -1)
8989 {
8990 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8991 }
8992 else
8993 {
8994 action_array.Insert(action);
8995 }
8996 }
8997
8999 {
9001 ActionBase action = player.GetActionManager().GetAction(actionName);
9004
9005 if (action_array)
9006 {
9007 action_array.RemoveItem(action);
9008 }
9009 }
9010
9011
9012
9014 {
9015 ActionOverrideData overrideData = new ActionOverrideData();
9019
9021 if (!actionMap)
9022 {
9025 }
9026
9027 actionMap.Insert(this.
Type(), overrideData);
9028
9029 }
9030
9032
9034
9035
9037 {
9040
9043
9044 string config_to_search = "CfgVehicles";
9045 string muzzle_owner_config;
9046
9048 {
9049 if (IsInherited(Weapon))
9050 config_to_search = "CfgWeapons";
9051
9052 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9053
9054 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9055
9057
9058 if (config_OnFire_subclass_count > 0)
9059 {
9060 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9061
9062 for (int i = 0; i < config_OnFire_subclass_count; i++)
9063 {
9064 string particle_class = "";
9066 string config_OnFire_entry = config_OnFire_class + particle_class;
9067 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9068 WPOF_array.Insert(WPOF);
9069 }
9070
9071
9073 }
9074 }
9075
9077 {
9078 config_to_search = "CfgWeapons";
9079 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9080
9081 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9082
9084
9085 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9086 {
9087 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9088
9089 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9090 {
9091 string particle_class2 = "";
9093 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9094 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9095 WPOBE_array.Insert(WPOBE);
9096 }
9097
9098
9100 }
9101 }
9102 }
9103
9104
9106 {
9109
9111 {
9112 string config_to_search = "CfgVehicles";
9113
9114 if (IsInherited(Weapon))
9115 config_to_search = "CfgWeapons";
9116
9117 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9118 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9119
9120 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9121 {
9122
9124
9126 {
9128 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9130 return;
9131 }
9132
9135
9136
9137
9139 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9140
9141 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9142 {
9143 string particle_class = "";
9145 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9147
9148 if (entry_type == CT_CLASS)
9149 {
9150 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9151 WPOOH_array.Insert(WPOF);
9152 }
9153 }
9154
9155
9157 }
9158 }
9159 }
9160
9162 {
9164 }
9165
9167 {
9169 {
9171
9174
9177
9178 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9179 }
9180 }
9181
9183 {
9185 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9186
9188 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9189
9191 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9192
9194 {
9196 }
9197 }
9198
9200 {
9202 }
9203
9205 {
9208 else
9210
9212 {
9215 }
9216 else
9217 {
9220
9223 }
9224
9226 }
9227
9229 {
9231 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9232 }
9233
9235 {
9237 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9239 }
9240
9242 {
9244 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9245 }
9246
9248 {
9251
9252 OverheatingParticle OP = new OverheatingParticle();
9257
9259 }
9260
9262 {
9265
9266 return -1;
9267 }
9268
9270 {
9272 {
9275
9276 for (int i = count; i > 0; --i)
9277 {
9278 int id = i - 1;
9281
9284
9285 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9286 {
9287 if (p)
9288 {
9291 }
9292 }
9293 }
9294 }
9295 }
9296
9298 {
9300 {
9302 {
9303 int id = i - 1;
9305
9306 if (OP)
9307 {
9309
9310 if (p)
9311 {
9313 }
9314
9315 delete OP;
9316 }
9317 }
9318
9321 }
9322 }
9323
9326 {
9327 return 0.0;
9328 }
9329
9330
9332 {
9333 return 250;
9334 }
9335
9337 {
9338 return 0;
9339 }
9340
9343 {
9345 return true;
9346
9347 return false;
9348 }
9349
9352 {
9355
9357 {
9359 }
9360 else
9361 {
9362
9364 }
9365
9367 }
9368
9375 {
9376 return -1;
9377 }
9378
9379
9380
9381
9383 {
9385 {
9387 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9388
9389 if (r_index >= 0)
9390 {
9391 InventoryLocation r_il = new InventoryLocation;
9392 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9393
9394 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9397 {
9398 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9399 }
9401 {
9402 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9403 }
9404
9405 }
9406
9407 player.GetHumanInventory().ClearUserReservedLocation(this);
9408 }
9409
9412 }
9413
9414
9415
9416
9418 {
9419 return ItemBase.m_DebugActionsMask;
9420 }
9421
9423 {
9424 return ItemBase.m_DebugActionsMask & mask;
9425 }
9426
9428 {
9429 ItemBase.m_DebugActionsMask = mask;
9430 }
9431
9433 {
9434 ItemBase.m_DebugActionsMask |= mask;
9435 }
9436
9438 {
9439 ItemBase.m_DebugActionsMask &= ~mask;
9440 }
9441
9443 {
9445 {
9447 }
9448 else
9449 {
9451 }
9452 }
9453
9454
9456 {
9457 if (GetEconomyProfile())
9458 {
9459 float q_max = GetEconomyProfile().GetQuantityMax();
9460 if (q_max > 0)
9461 {
9462 float q_min = GetEconomyProfile().GetQuantityMin();
9463 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9464
9466 {
9467 ComponentEnergyManager comp = GetCompEM();
9469 {
9471 }
9472 }
9474 {
9476
9477 }
9478
9479 }
9480 }
9481 }
9482
9485 {
9486 EntityAI parent = GetHierarchyParent();
9487
9488 if (parent)
9489 {
9490 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9491 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9492 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9493 }
9494 }
9495
9498 {
9499 EntityAI parent = GetHierarchyParent();
9500
9501 if (parent)
9502 {
9503 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9504 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9505 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9506 }
9507 }
9508
9510 {
9511
9512
9513
9514
9516
9518 {
9519 if (ScriptInputUserData.CanStoreInputUserData())
9520 {
9521 ScriptInputUserData ctx = new ScriptInputUserData;
9527 ctx.
Write(use_stack_max);
9530
9532 {
9533 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9534 }
9535 }
9536 }
9537 else if (!
GetGame().IsMultiplayer())
9538 {
9540 }
9541 }
9542
9544 {
9546 }
9547
9549 {
9551 }
9552
9554 {
9556 }
9557
9559 {
9560
9561 return false;
9562 }
9563
9565 {
9566 return false;
9567 }
9568
9572 {
9573 return false;
9574 }
9575
9577 {
9578 return "";
9579 }
9580
9582
9584 {
9585 return false;
9586 }
9587
9589 {
9590 return true;
9591 }
9592
9593
9594
9596 {
9597 return true;
9598 }
9599
9601 {
9602 return true;
9603 }
9604
9606 {
9607 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9609 }
9610
9612 {
9614 }
9615
9617 {
9619 if (!is_being_placed)
9621 SetSynchDirty();
9622 }
9623
9624
9626
9628 {
9630 }
9631
9633 {
9635 }
9636
9638 {
9639 return 1;
9640 }
9641
9643 {
9644 return false;
9645 }
9646
9648 {
9650 SetSynchDirty();
9651 }
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9666
9667
9668
9669
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9688 {
9689 super.OnMovedInsideCargo(container);
9690
9691 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9692 }
9693
9694 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9695 {
9696 super.EEItemLocationChanged(oldLoc,newLoc);
9697
9698 PlayerBase new_player = null;
9699 PlayerBase old_player = null;
9700
9701 if (newLoc.GetParent())
9702 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9703
9704 if (oldLoc.GetParent())
9705 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9706
9708 {
9709 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9710
9711 if (r_index >= 0)
9712 {
9713 InventoryLocation r_il = new InventoryLocation;
9714 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9715
9716 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9719 {
9720 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9721 }
9723 {
9724 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9725 }
9726
9727 }
9728 }
9729
9731 {
9732 if (new_player)
9733 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9734
9735 if (new_player == old_player)
9736 {
9737
9738 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9739 {
9741 {
9742 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9743 {
9744 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9745 }
9746 }
9747 else
9748 {
9749 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9750 }
9751 }
9752
9753 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9754 {
9755 int type = oldLoc.GetType();
9757 {
9758 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9759 }
9761 {
9762 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9763 }
9764 }
9765 if (!m_OldLocation)
9766 {
9767 m_OldLocation = new InventoryLocation;
9768 }
9769 m_OldLocation.Copy(oldLoc);
9770 }
9771 else
9772 {
9773 if (m_OldLocation)
9774 {
9775 m_OldLocation.Reset();
9776 }
9777 }
9778
9780 }
9781 else
9782 {
9783 if (new_player)
9784 {
9785 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9786 if (res_index >= 0)
9787 {
9788 InventoryLocation il = new InventoryLocation;
9789 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9791 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9794 {
9795 il.
GetParent().GetOnReleaseLock().Invoke(it);
9796 }
9798 {
9800 }
9801
9802 }
9803 }
9805 {
9806
9808 }
9809
9810 if (m_OldLocation)
9811 {
9812 m_OldLocation.Reset();
9813 }
9814 }
9815 }
9816
9817 override void EOnContact(IEntity other, Contact extra)
9818 {
9820 {
9821 int liquidType = -1;
9823 if (impactSpeed > 0.0)
9824 {
9826 #ifndef SERVER
9828 #else
9830 SetSynchDirty();
9831 #endif
9833 }
9834 }
9835
9836 #ifdef SERVER
9837 if (GetCompEM() && GetCompEM().IsPlugged())
9838 {
9839 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9840 GetCompEM().UnplugThis();
9841 }
9842 #endif
9843 }
9844
9846
9848 {
9850 }
9851
9853 {
9854
9855 }
9856
9858 {
9859 super.OnItemLocationChanged(old_owner, new_owner);
9860
9861 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9862 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9863
9864 if (!relatedPlayer && playerNew)
9865 relatedPlayer = playerNew;
9866
9867 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9868 {
9870 if (actionMgr)
9871 {
9872 ActionBase currentAction = actionMgr.GetRunningAction();
9873 if (currentAction)
9875 }
9876 }
9877
9878 Man ownerPlayerOld = null;
9879 Man ownerPlayerNew = null;
9880
9881 if (old_owner)
9882 {
9883 if (old_owner.
IsMan())
9884 {
9885 ownerPlayerOld = Man.Cast(old_owner);
9886 }
9887 else
9888 {
9889 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9890 }
9891 }
9892 else
9893 {
9895 {
9897
9898 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9899 {
9900 GetCompEM().UnplugThis();
9901 }
9902 }
9903 }
9904
9905 if (new_owner)
9906 {
9907 if (new_owner.
IsMan())
9908 {
9909 ownerPlayerNew = Man.Cast(new_owner);
9910 }
9911 else
9912 {
9913 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9914 }
9915 }
9916
9917 if (ownerPlayerOld != ownerPlayerNew)
9918 {
9919 if (ownerPlayerOld)
9920 {
9921 array<EntityAI> subItemsExit = new array<EntityAI>;
9923 for (int i = 0; i < subItemsExit.Count(); i++)
9924 {
9927 }
9928 }
9929
9930 if (ownerPlayerNew)
9931 {
9932 array<EntityAI> subItemsEnter = new array<EntityAI>;
9934 for (int j = 0; j < subItemsEnter.Count(); j++)
9935 {
9938 }
9939 }
9940 }
9941 else if (ownerPlayerNew != null)
9942 {
9943 PlayerBase nplayer;
9944 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9945 {
9946 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9948 for (int k = 0; k < subItemsUpdate.Count(); k++)
9949 {
9951 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9952 }
9953 }
9954 }
9955
9956 if (old_owner)
9957 old_owner.OnChildItemRemoved(this);
9958 if (new_owner)
9959 new_owner.OnChildItemReceived(this);
9960 }
9961
9962
9964 {
9965 super.EEDelete(parent);
9966 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9967 if (player)
9968 {
9970
9971 if (player.IsAlive())
9972 {
9973 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9974 if (r_index >= 0)
9975 {
9976 InventoryLocation r_il = new InventoryLocation;
9977 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9978
9979 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9982 {
9983 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9984 }
9986 {
9987 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9988 }
9989
9990 }
9991
9992 player.RemoveQuickBarEntityShortcut(this);
9993 }
9994 }
9995 }
9996
9998 {
9999 super.EEKilled(killer);
10000
10003 {
10004 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10005 {
10006 if (IsMagazine())
10007 {
10008 if (Magazine.Cast(this).GetAmmoCount() > 0)
10009 {
10011 }
10012 }
10013 else
10014 {
10016 }
10017 }
10018 }
10019 }
10020
10022 {
10023 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10024
10025 super.OnWasAttached(parent, slot_id);
10026
10029
10031 }
10032
10034 {
10035 super.OnWasDetached(parent, slot_id);
10036
10039 }
10040
10042 {
10043 int idx;
10046
10047 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10048 if (inventory_slots.Count() < 1)
10049 {
10050 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10051 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10052 }
10053 else
10054 {
10055 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10056 }
10057
10058 idx = inventory_slots.Find(slot);
10059 if (idx < 0)
10060 return "";
10061
10062 return attach_types.Get(idx);
10063 }
10064
10066 {
10067 int idx = -1;
10068 string slot;
10069
10072
10073 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10074 if (inventory_slots.Count() < 1)
10075 {
10076 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10077 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10078 }
10079 else
10080 {
10081 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10082 if (detach_types.Count() < 1)
10083 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10084 }
10085
10086 for (int i = 0; i < inventory_slots.Count(); i++)
10087 {
10088 slot = inventory_slots.Get(i);
10089 }
10090
10091 if (slot != "")
10092 {
10093 if (detach_types.Count() == 1)
10094 idx = 0;
10095 else
10096 idx = inventory_slots.Find(slot);
10097 }
10098 if (idx < 0)
10099 return "";
10100
10101 return detach_types.Get(idx);
10102 }
10103
10105 {
10106
10108
10109
10110 float min_time = 1;
10111 float max_time = 3;
10112 float delay = Math.RandomFloat(min_time, max_time);
10113
10114 explode_timer.Run(delay, this, "DoAmmoExplosion");
10115 }
10116
10118 {
10119 Magazine magazine = Magazine.Cast(this);
10120 int pop_sounds_count = 6;
10121 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10122
10123
10124 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10125 string sound_name = pop_sounds[ sound_idx ];
10127
10128
10129 magazine.ServerAddAmmoCount(-1);
10130
10131
10132 float min_temp_to_explode = 100;
10133
10134 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10135 {
10137 }
10138 }
10139
10140
10141 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10142 {
10143 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10144
10145 const int CHANCE_DAMAGE_CARGO = 4;
10146 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10147 const int CHANCE_DAMAGE_NOTHING = 2;
10148
10150 {
10151 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10152 int chances;
10153 int rnd;
10154
10155 if (GetInventory().GetCargo())
10156 {
10157 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10158 rnd = Math.RandomInt(0,chances);
10159
10160 if (rnd < CHANCE_DAMAGE_CARGO)
10161 {
10163 }
10164 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10165 {
10167 }
10168 }
10169 else
10170 {
10171 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10172 rnd = Math.RandomInt(0,chances);
10173
10174 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10175 {
10177 }
10178 }
10179 }
10180 }
10181
10183 {
10184 if (GetInventory().GetCargo())
10185 {
10186 int item_count = GetInventory().GetCargo().GetItemCount();
10187 if (item_count > 0)
10188 {
10189 int random_pick = Math.RandomInt(0, item_count);
10191 if (!item.IsExplosive())
10192 {
10193 item.AddHealth("","",damage);
10194 return true;
10195 }
10196 }
10197 }
10198 return false;
10199 }
10200
10202 {
10203 int attachment_count = GetInventory().AttachmentCount();
10204 if (attachment_count > 0)
10205 {
10206 int random_pick = Math.RandomInt(0, attachment_count);
10207 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10208 if (!attachment.IsExplosive())
10209 {
10210 attachment.AddHealth("","",damage);
10211 return true;
10212 }
10213 }
10214 return false;
10215 }
10216
10218 {
10220 }
10221
10223 {
10225 return GetInventory().CanRemoveEntity();
10226
10227 return false;
10228 }
10229
10231 {
10233 return;
10234
10236 {
10237 if (ScriptInputUserData.CanStoreInputUserData())
10238 {
10239 ScriptInputUserData ctx = new ScriptInputUserData;
10244 ctx.
Write(destination_entity);
10246 ctx.
Write(slot_id);
10248 }
10249 }
10250 else if (!
GetGame().IsMultiplayer())
10251 {
10253 }
10254 }
10255
10257 {
10259 return;
10260
10261 float split_quantity_new;
10265 InventoryLocation loc = new InventoryLocation;
10266
10267 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10268 {
10270 split_quantity_new = stack_max;
10271 else
10273
10274 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10275 if (new_item)
10276 {
10277 new_item.SetResultOfSplit(true);
10278 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10280 new_item.SetQuantity(split_quantity_new);
10281 }
10282 }
10283 else if (destination_entity && slot_id == -1)
10284 {
10285 if (quantity > stack_max)
10286 split_quantity_new = stack_max;
10287 else
10288 split_quantity_new = quantity;
10289
10291 {
10294 }
10295
10296 if (new_item)
10297 {
10298 new_item.SetResultOfSplit(true);
10299 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10301 new_item.SetQuantity(split_quantity_new);
10302 }
10303 }
10304 else
10305 {
10306 if (stack_max != 0)
10307 {
10309 {
10311 }
10312
10313 if (split_quantity_new == 0)
10314 {
10315 if (!
GetGame().IsMultiplayer())
10316 player.PhysicalPredictiveDropItem(this);
10317 else
10318 player.ServerDropEntity(this);
10319 return;
10320 }
10321
10323
10324 if (new_item)
10325 {
10326 new_item.SetResultOfSplit(true);
10327 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10329 new_item.SetQuantity(stack_max);
10330 new_item.PlaceOnSurface();
10331 }
10332 }
10333 }
10334 }
10335
10337 {
10339 return;
10340
10341 float split_quantity_new;
10345 InventoryLocation loc = new InventoryLocation;
10346
10347 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10348 {
10350 split_quantity_new = stack_max;
10351 else
10353
10354 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10355 if (new_item)
10356 {
10357 new_item.SetResultOfSplit(true);
10358 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10360 new_item.SetQuantity(split_quantity_new);
10361 }
10362 }
10363 else if (destination_entity && slot_id == -1)
10364 {
10365 if (quantity > stack_max)
10366 split_quantity_new = stack_max;
10367 else
10368 split_quantity_new = quantity;
10369
10371 {
10374 }
10375
10376 if (new_item)
10377 {
10378 new_item.SetResultOfSplit(true);
10379 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10381 new_item.SetQuantity(split_quantity_new);
10382 }
10383 }
10384 else
10385 {
10386 if (stack_max != 0)
10387 {
10389 {
10391 }
10392
10394
10395 if (new_item)
10396 {
10397 new_item.SetResultOfSplit(true);
10398 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10400 new_item.SetQuantity(stack_max);
10401 new_item.PlaceOnSurface();
10402 }
10403 }
10404 }
10405 }
10406
10408 {
10410 return;
10411
10413 {
10414 if (ScriptInputUserData.CanStoreInputUserData())
10415 {
10416 ScriptInputUserData ctx = new ScriptInputUserData;
10421 dst.WriteToContext(ctx);
10423 }
10424 }
10425 else if (!
GetGame().IsMultiplayer())
10426 {
10428 }
10429 }
10430
10432 {
10434 return;
10435
10437 {
10438 if (ScriptInputUserData.CanStoreInputUserData())
10439 {
10440 ScriptInputUserData ctx = new ScriptInputUserData;
10445 ctx.
Write(destination_entity);
10451 }
10452 }
10453 else if (!
GetGame().IsMultiplayer())
10454 {
10456 }
10457 }
10458
10460 {
10462 }
10463
10465 {
10467 return this;
10468
10470 float split_quantity_new;
10472 if (dst.IsValid())
10473 {
10474 int slot_id = dst.GetSlot();
10476
10477 if (quantity > stack_max)
10478 split_quantity_new = stack_max;
10479 else
10480 split_quantity_new = quantity;
10481
10483
10484 if (new_item)
10485 {
10486 new_item.SetResultOfSplit(true);
10487 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10490 }
10491
10492 return new_item;
10493 }
10494
10495 return null;
10496 }
10497
10499 {
10501 return;
10502
10504 float split_quantity_new;
10506 if (destination_entity)
10507 {
10509 if (quantity > stackable)
10510 split_quantity_new = stackable;
10511 else
10512 split_quantity_new = quantity;
10513
10514 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10515 if (new_item)
10516 {
10517 new_item.SetResultOfSplit(true);
10518 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10520 new_item.SetQuantity(split_quantity_new);
10521 }
10522 }
10523 }
10524
10526 {
10528 return;
10529
10531 {
10532 if (ScriptInputUserData.CanStoreInputUserData())
10533 {
10534 ScriptInputUserData ctx = new ScriptInputUserData;
10539 ItemBase destination_entity =
this;
10540 ctx.
Write(destination_entity);
10544 }
10545 }
10546 else if (!
GetGame().IsMultiplayer())
10547 {
10549 }
10550 }
10551
10553 {
10555 return;
10556
10558 float split_quantity_new;
10560 if (player)
10561 {
10563 if (quantity > stackable)
10564 split_quantity_new = stackable;
10565 else
10566 split_quantity_new = quantity;
10567
10568 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10569 new_item =
ItemBase.Cast(in_hands);
10570 if (new_item)
10571 {
10572 new_item.SetResultOfSplit(true);
10573 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10575 new_item.SetQuantity(split_quantity_new);
10576 }
10577 }
10578 }
10579
10581 {
10583 return;
10584
10586 float split_quantity_new = Math.Floor(quantity * 0.5);
10587
10589
10590 if (new_item)
10591 {
10592 if (new_item.GetQuantityMax() < split_quantity_new)
10593 {
10594 split_quantity_new = new_item.GetQuantityMax();
10595 }
10596
10597 new_item.SetResultOfSplit(true);
10598 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10599
10601 {
10604 }
10605 else
10606 {
10609 }
10610 }
10611 }
10612
10614 {
10616 return;
10617
10619 float split_quantity_new = Math.Floor(quantity / 2);
10620
10621 InventoryLocation invloc = new InventoryLocation;
10623
10625 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10626
10627 if (new_item)
10628 {
10629 if (new_item.GetQuantityMax() < split_quantity_new)
10630 {
10631 split_quantity_new = new_item.GetQuantityMax();
10632 }
10634 {
10637 }
10638 else
10639 {
10642 }
10643 }
10644 }
10645
10648 {
10649 SetWeightDirty();
10651
10652 if (parent)
10653 parent.OnAttachmentQuantityChangedEx(this, delta);
10654
10656 {
10658 {
10660 }
10662 {
10663 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10665 }
10666 }
10667
10668 }
10669
10672 {
10673
10674 }
10675
10678 {
10680 }
10681
10683 {
10684 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10685
10687 {
10688 if (newLevel == GameConstants.STATE_RUINED)
10689 {
10691 EntityAI parent = GetHierarchyParent();
10692 if (parent && parent.IsFireplace())
10693 {
10694 CargoBase cargo = GetInventory().GetCargo();
10695 if (cargo)
10696 {
10698 {
10700 }
10701 }
10702 }
10703 }
10704
10706 {
10707
10709 return;
10710 }
10711
10712 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10713 {
10715 }
10716 }
10717 }
10718
10719
10721 {
10722 super.OnRightClick();
10723
10725 {
10727 {
10728 if (ScriptInputUserData.CanStoreInputUserData())
10729 {
10730 vector m4[4];
10732
10733 EntityAI root = GetHierarchyRoot();
10734
10735 InventoryLocation dst = new InventoryLocation;
10737 {
10738 if (root)
10739 {
10740 root.GetTransform(m4);
10742 }
10743 else
10744 GetInventory().GetCurrentInventoryLocation(dst);
10745 }
10746 else
10747 {
10749
10750
10751 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10752 {
10753 if (root)
10754 {
10755 root.GetTransform(m4);
10757 }
10758 else
10759 GetInventory().GetCurrentInventoryLocation(dst);
10760 }
10761 else
10762 {
10763 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10764 }
10765 }
10766
10767 ScriptInputUserData ctx = new ScriptInputUserData;
10775 }
10776 }
10777 else if (!
GetGame().IsMultiplayer())
10778 {
10780 }
10781 }
10782 }
10783
10784 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10785 {
10786
10787 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10788 return false;
10789
10790 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10791 return false;
10792
10793
10795 return false;
10796
10797
10798 Magazine mag = Magazine.Cast(this);
10799 if (mag)
10800 {
10801 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10802 return false;
10803
10804 if (stack_max_limit)
10805 {
10806 Magazine other_mag = Magazine.Cast(other_item);
10807 if (other_item)
10808 {
10809 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10810 return false;
10811 }
10812
10813 }
10814 }
10815 else
10816 {
10817
10819 return false;
10820
10822 return false;
10823 }
10824
10825 PlayerBase player = null;
10826 if (CastTo(player, GetHierarchyRootPlayer()))
10827 {
10828 if (player.GetInventory().HasAttachment(this))
10829 return false;
10830
10831 if (player.IsItemsToDelete())
10832 return false;
10833 }
10834
10835 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10836 return false;
10837
10838 int slotID;
10840 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10841 return false;
10842
10843 return true;
10844 }
10845
10847 {
10849 }
10850
10852 {
10853 return m_IsResultOfSplit;
10854 }
10855
10857 {
10858 m_IsResultOfSplit = value;
10859 }
10860
10862 {
10864 }
10865
10867 {
10868 float other_item_quantity = other_item.GetQuantity();
10869 float this_free_space;
10870
10872
10874
10875 if (other_item_quantity > this_free_space)
10876 {
10877 return this_free_space;
10878 }
10879 else
10880 {
10881 return other_item_quantity;
10882 }
10883 }
10884
10886 {
10888 }
10889
10891 {
10893 return;
10894
10895 if (!IsMagazine() && other_item)
10896 {
10898 if (quantity_used != 0)
10899 {
10900 float hp1 = GetHealth01("","");
10901 float hp2 = other_item.GetHealth01("","");
10902 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10903 hpResult = hpResult / (
GetQuantity() + quantity_used);
10904
10905 hpResult *= GetMaxHealth();
10906 Math.Round(hpResult);
10907 SetHealth("", "Health", hpResult);
10908
10910 other_item.AddQuantity(-quantity_used);
10911 }
10912 }
10914 }
10915
10917 {
10918 #ifdef SERVER
10919 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10920 GetHierarchyParent().IncreaseLifetimeUp();
10921 #endif
10922 };
10923
10925 {
10926 PlayerBase p = PlayerBase.Cast(player);
10927
10928 array<int> recipesIds = p.m_Recipes;
10929 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10930 if (moduleRecipesManager)
10931 {
10932 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10933 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10934 }
10935
10936 for (int i = 0;i < recipesIds.Count(); i++)
10937 {
10938 int key = recipesIds.Get(i);
10939 string recipeName = moduleRecipesManager.GetRecipeName(key);
10941 }
10942 }
10943
10944
10945 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10946 {
10947 super.GetDebugActions(outputList);
10948
10949
10954
10955
10959
10963
10964
10967
10968
10970 {
10973 }
10974
10976
10979
10983 }
10984
10985
10986
10987
10989 {
10990 super.OnAction(action_id, player, ctx);
10991 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10992 {
10993 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10994 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10995 PlayerBase p = PlayerBase.Cast(player);
10996 if (
EActions.RECIPES_RANGE_START < 1000)
10997 {
10998 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10999 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11000 }
11001 }
11002 #ifndef SERVER
11003 else if (action_id ==
EActions.WATCH_PLAYER)
11004 {
11005 PluginDeveloper.SetDeveloperItemClientEx(player);
11006 }
11007 #endif
11009 {
11010 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11011 {
11012 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11013 OnDebugButtonPressServer(id + 1);
11014 }
11015
11016 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11017 {
11018 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11020 }
11021
11022 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11023 {
11024 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11026 }
11027
11028 else if (action_id ==
EActions.ADD_QUANTITY)
11029 {
11030 if (IsMagazine())
11031 {
11032 Magazine mag = Magazine.Cast(this);
11033 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11034 }
11035 else
11036 {
11038 }
11039
11040 if (m_EM)
11041 {
11042 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11043 }
11044
11045 }
11046
11047 else if (action_id ==
EActions.REMOVE_QUANTITY)
11048 {
11049 if (IsMagazine())
11050 {
11051 Magazine mag2 = Magazine.Cast(this);
11052 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11053 }
11054 else
11055 {
11057 }
11058 if (m_EM)
11059 {
11060 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11061 }
11062
11063 }
11064
11065 else if (action_id ==
EActions.SET_QUANTITY_0)
11066 {
11068
11069 if (m_EM)
11070 {
11071 m_EM.SetEnergy(0);
11072 }
11073 }
11074
11075 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11076 {
11078
11079 if (m_EM)
11080 {
11081 m_EM.SetEnergy(m_EM.GetEnergyMax());
11082 }
11083 }
11084
11085 else if (action_id ==
EActions.ADD_HEALTH)
11086 {
11087 AddHealth("","",GetMaxHealth("","Health")/5);
11088 }
11089 else if (action_id ==
EActions.REMOVE_HEALTH)
11090 {
11091 AddHealth("","",-GetMaxHealth("","Health")/5);
11092 }
11093 else if (action_id ==
EActions.DESTROY_HEALTH)
11094 {
11095 SetHealth01("","",0);
11096 }
11097 else if (action_id ==
EActions.WATCH_ITEM)
11098 {
11100 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11101 #ifdef DEVELOPER
11102 SetDebugDeveloper_item(this);
11103 #endif
11104 }
11105
11106 else if (action_id ==
EActions.ADD_TEMPERATURE)
11107 {
11108 AddTemperature(20);
11109
11110 }
11111
11112 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11113 {
11114 AddTemperature(-20);
11115
11116 }
11117
11118 else if (action_id ==
EActions.FLIP_FROZEN)
11119 {
11120 SetFrozen(!GetIsFrozen());
11121
11122 }
11123
11124 else if (action_id ==
EActions.ADD_WETNESS)
11125 {
11127
11128 }
11129
11130 else if (action_id ==
EActions.REMOVE_WETNESS)
11131 {
11133
11134 }
11135
11136 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11137 {
11140
11141
11142 }
11143
11144 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11145 {
11148 }
11149
11150 else if (action_id ==
EActions.MAKE_SPECIAL)
11151 {
11152 auto debugParams = DebugSpawnParams.WithPlayer(player);
11153 OnDebugSpawnEx(debugParams);
11154 }
11155
11156 else if (action_id ==
EActions.DELETE)
11157 {
11158 Delete();
11159 }
11160
11161 }
11162
11163
11164 return false;
11165 }
11166
11167
11168
11169
11173
11176
11177
11178
11180 {
11181 return false;
11182 }
11183
11184
11186 {
11187 return true;
11188 }
11189
11190
11192 {
11193 return true;
11194 }
11195
11196
11197
11199 {
11200 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11202 }
11203
11206 {
11207 return null;
11208 }
11209
11211 {
11212 return false;
11213 }
11214
11216 {
11217 return false;
11218 }
11219
11223
11224
11226 {
11227 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11228 return module_repairing.CanRepair(this, item_repair_kit);
11229 }
11230
11231
11232 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11233 {
11234 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11235 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11236 }
11237
11238
11240 {
11241
11242
11243
11244
11245
11246
11247
11248
11249 return 1;
11250 }
11251
11252
11253
11255 {
11257 }
11258
11259
11260
11262 {
11264 }
11265
11266
11275 {
11276 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11277
11278 if (player)
11279 {
11280 player.MessageStatus(text);
11281 }
11282 }
11283
11284
11293 {
11294 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11295
11296 if (player)
11297 {
11298 player.MessageAction(text);
11299 }
11300 }
11301
11302
11311 {
11312 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11313
11314 if (player)
11315 {
11316 player.MessageFriendly(text);
11317 }
11318 }
11319
11320
11329 {
11330 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11331
11332 if (player)
11333 {
11334 player.MessageImportant(text);
11335 }
11336 }
11337
11339 {
11340 return true;
11341 }
11342
11343
11344 override bool KindOf(
string tag)
11345 {
11346 bool found = false;
11347 string item_name = this.
GetType();
11350
11351 int array_size = item_tag_array.Count();
11352 for (int i = 0; i < array_size; i++)
11353 {
11354 if (item_tag_array.Get(i) == tag)
11355 {
11356 found = true;
11357 break;
11358 }
11359 }
11360 return found;
11361 }
11362
11363
11365 {
11366
11367 super.OnRPC(sender, rpc_type,ctx);
11368
11369
11370 switch (rpc_type)
11371 {
11372 #ifndef SERVER
11373 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11374 Param2<bool, string> p = new Param2<bool, string>(false, "");
11375
11377 return;
11378
11379 bool play = p.param1;
11380 string soundSet = p.param2;
11381
11382 if (play)
11383 {
11385 {
11387 {
11389 }
11390 }
11391 else
11392 {
11394 }
11395 }
11396 else
11397 {
11399 }
11400
11401 break;
11402 #endif
11403
11404 }
11405
11407 {
11409 }
11410 }
11411
11412
11413
11414
11416 {
11417 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11418 return plugin.GetID(
name);
11419 }
11420
11422 {
11423 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11424 return plugin.GetName(id);
11425 }
11426
11429 {
11430
11431
11432 int varFlags;
11433 if (!ctx.
Read(varFlags))
11434 return;
11435
11436 if (varFlags & ItemVariableFlags.FLOAT)
11437 {
11439 }
11440 }
11441
11443 {
11444
11445 super.SerializeNumericalVars(floats_out);
11446
11447
11448
11450 {
11452 }
11453
11455 {
11457 }
11458
11460 {
11462 }
11463
11465 {
11470 }
11471
11473 {
11475 }
11476 }
11477
11479 {
11480
11481 super.DeSerializeNumericalVars(floats);
11482
11483
11484 int index = 0;
11485 int mask = Math.Round(floats.Get(index));
11486
11487 index++;
11488
11490 {
11492 {
11494 }
11495 else
11496 {
11497 float quantity = floats.Get(index);
11498 SetQuantity(quantity,
true,
false,
false,
false);
11499 }
11500 index++;
11501 }
11502
11504 {
11505 float wet = floats.Get(index);
11507 index++;
11508 }
11509
11511 {
11512 int liquidtype = Math.Round(floats.Get(index));
11514 index++;
11515 }
11516
11518 {
11520 index++;
11522 index++;
11524 index++;
11526 index++;
11527 }
11528
11530 {
11531 int cleanness = Math.Round(floats.Get(index));
11533 index++;
11534 }
11535 }
11536
11538 {
11539 super.WriteVarsToCTX(ctx);
11540
11541
11543 {
11545 }
11546
11548 {
11550 }
11551
11553 {
11555 }
11556
11558 {
11559 int r,g,b,a;
11565 }
11566
11568 {
11570 }
11571 }
11572
11574 {
11575 if (!super.ReadVarsFromCTX(ctx,version))
11576 return false;
11577
11578 int intValue;
11579 float value;
11580
11581 if (version < 140)
11582 {
11583 if (!ctx.
Read(intValue))
11584 return false;
11585
11586 m_VariablesMask = intValue;
11587 }
11588
11590 {
11591 if (!ctx.
Read(value))
11592 return false;
11593
11595 {
11597 }
11598 else
11599 {
11601 }
11602 }
11603
11604 if (version < 140)
11605 {
11607 {
11608 if (!ctx.
Read(value))
11609 return false;
11610 SetTemperatureDirect(value);
11611 }
11612 }
11613
11615 {
11616 if (!ctx.
Read(value))
11617 return false;
11619 }
11620
11622 {
11623 if (!ctx.
Read(intValue))
11624 return false;
11626 }
11627
11629 {
11630 int r,g,b,a;
11632 return false;
11634 return false;
11636 return false;
11638 return false;
11639
11641 }
11642
11644 {
11645 if (!ctx.
Read(intValue))
11646 return false;
11648 }
11649
11650 if (version >= 138 && version < 140)
11651 {
11653 {
11654 if (!ctx.
Read(intValue))
11655 return false;
11656 SetFrozen(intValue);
11657 }
11658 }
11659
11660 return true;
11661 }
11662
11663
11665 {
11668 {
11670 }
11671
11672 if (!super.OnStoreLoad(ctx, version))
11673 {
11675 return false;
11676 }
11677
11678 if (version >= 114)
11679 {
11680 bool hasQuickBarIndexSaved;
11681
11682 if (!ctx.
Read(hasQuickBarIndexSaved))
11683 {
11685 return false;
11686 }
11687
11688 if (hasQuickBarIndexSaved)
11689 {
11690 int itmQBIndex;
11691
11692
11693 if (!ctx.
Read(itmQBIndex))
11694 {
11696 return false;
11697 }
11698
11699 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11700 if (itmQBIndex != -1 && parentPlayer)
11701 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11702 }
11703 }
11704 else
11705 {
11706
11707 PlayerBase player;
11708 int itemQBIndex;
11709 if (version ==
int.
MAX)
11710 {
11711 if (!ctx.
Read(itemQBIndex))
11712 {
11714 return false;
11715 }
11716 }
11717 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11718 {
11719
11720 if (!ctx.
Read(itemQBIndex))
11721 {
11723 return false;
11724 }
11725 if (itemQBIndex != -1 && player)
11726 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11727 }
11728 }
11729
11730 if (version < 140)
11731 {
11732
11733 if (!LoadVariables(ctx, version))
11734 {
11736 return false;
11737 }
11738 }
11739
11740
11742 {
11744 return false;
11745 }
11746 if (version >= 132)
11747 {
11749 if (raib)
11750 {
11752 {
11754 return false;
11755 }
11756 }
11757 }
11758
11760 return true;
11761 }
11762
11763
11764
11766 {
11767 super.OnStoreSave(ctx);
11768
11769 PlayerBase player;
11770 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11771 {
11773
11774 int itemQBIndex = -1;
11775 itemQBIndex = player.FindQuickBarEntityIndex(this);
11776 ctx.
Write(itemQBIndex);
11777 }
11778 else
11779 {
11781 }
11782
11784
11786 if (raib)
11787 {
11789 }
11790 }
11791
11792
11794 {
11795 super.AfterStoreLoad();
11796
11798 {
11800 }
11801
11803 {
11806 }
11807 }
11808
11810 {
11811 super.EEOnAfterLoad();
11812
11814 {
11816 }
11817
11820 }
11821
11823 {
11824 return false;
11825 }
11826
11827
11828
11830 {
11832 {
11833 #ifdef PLATFORM_CONSOLE
11834
11836 {
11838 if (menu)
11839 {
11841 }
11842 }
11843 #endif
11844 }
11845
11847 {
11850 }
11851
11853 {
11854 SetWeightDirty();
11856 }
11858 {
11861 }
11862
11864 {
11867 }
11869 {
11872 }
11873
11874 super.OnVariablesSynchronized();
11875 }
11876
11877
11878
11880 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11881 {
11882 if (!IsServerCheck(allow_client))
11883 return false;
11884
11886 return false;
11887
11890
11891 if (value <= (min + 0.001))
11892 value = min;
11893
11894 if (value == min)
11895 {
11896 if (destroy_config)
11897 {
11898 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11899 if (dstr)
11900 {
11902 this.Delete();
11903 return true;
11904 }
11905 }
11906 else if (destroy_forced)
11907 {
11909 this.Delete();
11910 return true;
11911 }
11912
11914 }
11915
11918
11920 {
11922
11923 if (delta)
11925 }
11926
11928
11929 return false;
11930 }
11931
11932
11934 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11935 {
11937 }
11938
11940 {
11943 }
11944
11946 {
11949 }
11950
11953 {
11954 float value_clamped = Math.Clamp(value, 0, 1);
11956 SetQuantity(result, destroy_config, destroy_forced);
11957 }
11958
11959
11962 {
11964 }
11965
11967 {
11969 }
11970
11971
11972
11973
11974
11975
11976
11977
11978
11979
11981 {
11982 int slot = -1;
11983 if (GetInventory())
11984 {
11985 InventoryLocation il = new InventoryLocation;
11986 GetInventory().GetCurrentInventoryLocation(il);
11988 }
11989
11991 }
11992
11994 {
11995 float quantity_max = 0;
11996
11998 {
11999 if (attSlotID != -1)
12000 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12001
12002 if (quantity_max <= 0)
12004 }
12005
12006 if (quantity_max <= 0)
12008
12009 return quantity_max;
12010 }
12011
12013 {
12015 }
12016
12018 {
12020 }
12021
12022
12024 {
12026 }
12027
12029 {
12031 }
12032
12034 {
12036 }
12037
12038
12040 {
12041
12042 float weightEx = GetWeightEx();
12043 float special = GetInventoryAndCargoWeight();
12044 return weightEx - special;
12045 }
12046
12047
12049 {
12051 }
12052
12054 {
12056 {
12057 #ifdef DEVELOPER
12058 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12059 {
12060 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12062 }
12063 #endif
12064
12065 return GetQuantity() * GetConfigWeightModified();
12066 }
12067 else if (HasEnergyManager())
12068 {
12069 #ifdef DEVELOPER
12070 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12071 {
12072 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12073 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12074 }
12075 #endif
12076 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12077 }
12078 else
12079 {
12080 #ifdef DEVELOPER
12081 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12082 {
12083 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12084 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12085 }
12086 #endif
12087 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12088 }
12089 }
12090
12093 {
12094 int item_count = 0;
12096
12097 if (GetInventory().GetCargo() != NULL)
12098 {
12099 item_count = GetInventory().GetCargo().GetItemCount();
12100 }
12101
12102 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12103 {
12104 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12105 if (item)
12106 item_count += item.GetNumberOfItems();
12107 }
12108 return item_count;
12109 }
12110
12113 {
12114 float weight = 0;
12115 float wetness = 1;
12116 if (include_wetness)
12119 {
12120 weight = wetness * m_ConfigWeight;
12121 }
12123 {
12124 weight = 1;
12125 }
12126 return weight;
12127 }
12128
12129
12130
12132 {
12133 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12134 {
12135 GameInventory inv = GetInventory();
12136 array<EntityAI> items = new array<EntityAI>;
12138 for (int i = 0; i < items.Count(); i++)
12139 {
12141 if (item)
12142 {
12144 }
12145 }
12146 }
12147 }
12148
12149
12150
12151
12153 {
12154 float energy = 0;
12155 if (HasEnergyManager())
12156 {
12157 energy = GetCompEM().GetEnergy();
12158 }
12159 return energy;
12160 }
12161
12162
12164 {
12165 super.OnEnergyConsumed();
12166
12168 }
12169
12171 {
12172 super.OnEnergyAdded();
12173
12175 }
12176
12177
12179 {
12180 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12181 {
12183 {
12184 float energy_0to1 = GetCompEM().GetEnergy0To1();
12186 }
12187 }
12188 }
12189
12190
12192 {
12193 return ConfigGetFloat("heatIsolation");
12194 }
12195
12197 {
12199 }
12200
12202 {
12203 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12204 if (
GetGame().ConfigIsExisting(paramPath))
12206
12207 return 0.0;
12208 }
12209
12211 {
12212 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12213 if (
GetGame().ConfigIsExisting(paramPath))
12215
12216 return 0.0;
12217 }
12218
12219 override void SetWet(
float value,
bool allow_client =
false)
12220 {
12221 if (!IsServerCheck(allow_client))
12222 return;
12223
12226
12228
12229 m_VarWet = Math.Clamp(value, min, max);
12230
12232 {
12235 }
12236 }
12237
12238 override void AddWet(
float value)
12239 {
12241 }
12242
12244 {
12246 }
12247
12249 {
12251 }
12252
12254 {
12256 }
12257
12259 {
12261 }
12262
12264 {
12266 }
12267
12268 override void OnWetChanged(
float newVal,
float oldVal)
12269 {
12272 if (newLevel != oldLevel)
12273 {
12275 }
12276 }
12277
12279 {
12280 SetWeightDirty();
12281 }
12282
12284 {
12285 return GetWetLevelInternal(
m_VarWet);
12286 }
12287
12288
12289
12291 {
12293 }
12294
12296 {
12298 }
12299
12301 {
12303 }
12304
12306 {
12308 }
12309
12310
12311
12313 {
12314 if (ConfigIsExisting("itemModelLength"))
12315 {
12316 return ConfigGetFloat("itemModelLength");
12317 }
12318 return 0;
12319 }
12320
12322 {
12323 if (ConfigIsExisting("itemAttachOffset"))
12324 {
12325 return ConfigGetFloat("itemAttachOffset");
12326 }
12327 return 0;
12328 }
12329
12330 override void SetCleanness(
int value,
bool allow_client =
false)
12331 {
12332 if (!IsServerCheck(allow_client))
12333 return;
12334
12336
12338
12341 }
12342
12344 {
12346 }
12347
12349 {
12350 return true;
12351 }
12352
12353
12354
12355
12357 {
12359 }
12360
12362 {
12364 }
12365
12366
12367
12368
12369 override void SetColor(
int r,
int g,
int b,
int a)
12370 {
12376 }
12378 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12379 {
12384 }
12385
12387 {
12389 }
12390
12393 {
12394 int r,g,b,a;
12396 r = r/255;
12397 g = g/255;
12398 b = b/255;
12399 a = a/255;
12400 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12401 }
12402
12403
12404
12405 override void SetLiquidType(
int value,
bool allow_client =
false)
12406 {
12407 if (!IsServerCheck(allow_client))
12408 return;
12409
12414 }
12415
12417 {
12418 return ConfigGetInt("varLiquidTypeInit");
12419 }
12420
12422 {
12424 }
12425
12427 {
12429 SetFrozen(false);
12430 }
12431
12434 {
12435 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12436 }
12437
12438
12441 {
12442 PlayerBase nplayer;
12443 if (PlayerBase.CastTo(nplayer, player))
12444 {
12446
12447 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12448 }
12449 }
12450
12451
12454 {
12455 PlayerBase nplayer;
12456 if (PlayerBase.CastTo(nplayer,player))
12457 {
12458
12459 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12460
12461 }
12462
12463
12464 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12465
12466
12467 if (HasEnergyManager())
12468 {
12469 GetCompEM().UpdatePlugState();
12470 }
12471 }
12472
12473
12475 {
12476 super.OnPlacementStarted(player);
12477
12479 }
12480
12481 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12482 {
12484 {
12485 m_AdminLog.OnPlacementComplete(player,
this);
12486 }
12487
12488 super.OnPlacementComplete(player, position, orientation);
12489 }
12490
12491
12492
12493
12494
12496 {
12498 {
12499 return true;
12500 }
12501 else
12502 {
12503 return false;
12504 }
12505 }
12506
12507
12509 {
12511 {
12513 }
12514 }
12515
12516
12518 {
12520 }
12521
12523 {
12525 }
12526
12527 override void InsertAgent(
int agent,
float count = 1)
12528 {
12529 if (count < 1)
12530 return;
12531
12533 }
12534
12537 {
12539 }
12540
12541
12543 {
12545 }
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
12560
12561
12562
12563
12564
12565
12566
12567
12568
12569
12570
12571
12572
12573
12574
12575
12576
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12589 {
12591 return false;
12592 return true;
12593 }
12594
12596 {
12597
12599 }
12600
12601
12604 {
12605 super.CheckForRoofLimited(timeTresholdMS);
12606
12608 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12609 {
12610 m_PreviousRoofTestTime = time;
12611 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12612 }
12613 }
12614
12615
12617 {
12619 {
12620 return 0;
12621 }
12622
12623 if (GetInventory().GetAttachmentSlotsCount() != 0)
12624 {
12625 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12626 if (filter)
12627 return filter.GetProtectionLevel(type, false, system);
12628 else
12629 return 0;
12630 }
12631
12632 string subclassPath, entryName;
12633
12634 switch (type)
12635 {
12637 entryName = "biological";
12638 break;
12640 entryName = "chemical";
12641 break;
12642 default:
12643 entryName = "biological";
12644 break;
12645 }
12646
12647 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12648
12650 }
12651
12652
12653
12656 {
12657 if (!IsMagazine())
12659
12661 }
12662
12663
12664
12665
12666
12671 {
12672 return true;
12673 }
12674
12676 {
12678 }
12679
12680
12681
12682
12683
12685 {
12686 if (parent)
12687 {
12688 if (parent.IsInherited(DayZInfected))
12689 return true;
12690
12691 if (!parent.IsRuined())
12692 return true;
12693 }
12694
12695 return true;
12696 }
12697
12699 {
12700 if (!super.CanPutAsAttachment(parent))
12701 {
12702 return false;
12703 }
12704
12705 if (!IsRuined() && !parent.IsRuined())
12706 {
12707 return true;
12708 }
12709
12710 return false;
12711 }
12712
12714 {
12715
12716
12717
12718
12719 return super.CanReceiveItemIntoCargo(item);
12720 }
12721
12723 {
12724
12725
12726
12727
12728 GameInventory attachmentInv = attachment.GetInventory();
12730 {
12731 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12732 return false;
12733 }
12734
12735 InventoryLocation loc = new InventoryLocation();
12736 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12737 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12738 return false;
12739
12740 return super.CanReceiveAttachment(attachment, slotId);
12741 }
12742
12744 {
12745 if (!super.CanReleaseAttachment(attachment))
12746 return false;
12747
12748 return GetInventory().AreChildrenAccessible();
12749 }
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
12764
12765
12766
12767
12768
12769
12770
12772 {
12773 int id = muzzle_owner.GetMuzzleID();
12774 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12775
12776 if (WPOF_array)
12777 {
12778 for (int i = 0; i < WPOF_array.Count(); i++)
12779 {
12780 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12781
12782 if (WPOF)
12783 {
12784 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12785 }
12786 }
12787 }
12788 }
12789
12790
12792 {
12793 int id = muzzle_owner.GetMuzzleID();
12795
12796 if (WPOBE_array)
12797 {
12798 for (int i = 0; i < WPOBE_array.Count(); i++)
12799 {
12800 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12801
12802 if (WPOBE)
12803 {
12804 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12805 }
12806 }
12807 }
12808 }
12809
12810
12812 {
12813 int id = muzzle_owner.GetMuzzleID();
12814 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12815
12816 if (WPOOH_array)
12817 {
12818 for (int i = 0; i < WPOOH_array.Count(); i++)
12819 {
12820 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12821
12822 if (WPOOH)
12823 {
12824 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12825 }
12826 }
12827 }
12828 }
12829
12830
12832 {
12833 int id = muzzle_owner.GetMuzzleID();
12834 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12835
12836 if (WPOOH_array)
12837 {
12838 for (int i = 0; i < WPOOH_array.Count(); i++)
12839 {
12840 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12841
12842 if (WPOOH)
12843 {
12844 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12845 }
12846 }
12847 }
12848 }
12849
12850
12852 {
12853 int id = muzzle_owner.GetMuzzleID();
12854 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12855
12856 if (WPOOH_array)
12857 {
12858 for (int i = 0; i < WPOOH_array.Count(); i++)
12859 {
12860 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12861
12862 if (WPOOH)
12863 {
12864 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12865 }
12866 }
12867 }
12868 }
12869
12870
12871
12873 {
12875 {
12876 return true;
12877 }
12878
12879 return false;
12880 }
12881
12883 {
12885 {
12886 return true;
12887 }
12888
12889 return false;
12890 }
12891
12893 {
12895 {
12896 return true;
12897 }
12898
12899 return false;
12900 }
12901
12903 {
12904 return false;
12905 }
12906
12909 {
12910 return UATimeSpent.DEFAULT_DEPLOY;
12911 }
12912
12913
12914
12915
12917 {
12919 SetSynchDirty();
12920 }
12921
12923 {
12925 }
12926
12927
12929 {
12930 return false;
12931 }
12932
12935 {
12936 string att_type = "None";
12937
12938 if (ConfigIsExisting("soundAttType"))
12939 {
12940 att_type = ConfigGetString("soundAttType");
12941 }
12942
12944 }
12945
12947 {
12949 }
12950
12951
12952
12953
12954
12958
12960 {
12963
12965 }
12966
12967
12969 {
12971 return;
12972
12974
12977
12980
12981 SoundParameters params = new SoundParameters();
12985 }
12986
12987
12989 {
12991 return;
12992
12994 SetSynchDirty();
12995
12998 }
12999
13000
13002 {
13004 return;
13005
13007 SetSynchDirty();
13008
13011 }
13012
13014 {
13016 }
13017
13019 {
13021 }
13022
13025 {
13026 if (!
GetGame().IsDedicatedServer())
13027 {
13028 if (ConfigIsExisting("attachSoundSet"))
13029 {
13030 string cfg_path = "";
13031 string soundset = "";
13032 string type_name =
GetType();
13033
13036 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13037 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13038
13039 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13040 {
13041 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13042 {
13043 if (cfg_slot_array[i] == slot_type)
13044 {
13045 soundset = cfg_soundset_array[i];
13046 break;
13047 }
13048 }
13049 }
13050
13051 if (soundset != "")
13052 {
13053 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13055 }
13056 }
13057 }
13058 }
13059
13061 {
13062
13063 }
13064
13065 void OnApply(PlayerBase player);
13066
13068 {
13069 return 1.0;
13070 };
13071
13073 {
13075 }
13076
13078 {
13080 }
13081
13083
13085 {
13086 SetDynamicPhysicsLifeTime(0.01);
13088 }
13089
13091 {
13092 array<string> zone_names = new array<string>;
13093 GetDamageZones(zone_names);
13094 for (int i = 0; i < zone_names.Count(); i++)
13095 {
13096 SetHealthMax(zone_names.Get(i),"Health");
13097 }
13098 SetHealthMax("","Health");
13099 }
13100
13103 {
13104 float global_health = GetHealth01("","Health");
13105 array<string> zones = new array<string>;
13106 GetDamageZones(zones);
13107
13108 for (int i = 0; i < zones.Count(); i++)
13109 {
13110 SetHealth01(zones.Get(i),"Health",global_health);
13111 }
13112 }
13113
13116 {
13117 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13118 }
13119
13121 {
13122 if (!hasRootAsPlayer)
13123 {
13124 if (refParentIB)
13125 {
13126
13127 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13128 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13129
13130 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13131 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13132
13135 }
13136 else
13137 {
13138
13141 }
13142 }
13143 }
13144
13146 {
13148 {
13149 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13150 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13151 {
13152 float heatPermCoef = 1.0;
13154 while (ent)
13155 {
13156 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13157 ent = ent.GetHierarchyParent();
13158 }
13159
13160 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13161 }
13162 }
13163 }
13164
13166 {
13167
13168 EntityAI parent = GetHierarchyParent();
13169 if (!parent)
13170 {
13171 hasParent = false;
13172 hasRootAsPlayer = false;
13173 }
13174 else
13175 {
13176 hasParent = true;
13177 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13178 refParentIB =
ItemBase.Cast(parent);
13179 }
13180 }
13181
13182 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13183 {
13184
13185 }
13186
13188 {
13189
13190 return false;
13191 }
13192
13194 {
13195
13196
13197 return false;
13198 }
13199
13201 {
13202
13203 return false;
13204 }
13205
13208 {
13209 return !GetIsFrozen() &&
IsOpen();
13210 }
13211
13213 {
13214 bool hasParent = false, hasRootAsPlayer = false;
13216
13217 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13218 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13219
13220 if (wwtu || foodDecay)
13221 {
13225
13226 if (processWetness || processTemperature || processDecay)
13227 {
13229
13230 if (processWetness)
13231 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13232
13233 if (processTemperature)
13235
13236 if (processDecay)
13237 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13238 }
13239 }
13240 }
13241
13244 {
13246 }
13247
13249 {
13252
13253 return super.GetTemperatureFreezeThreshold();
13254 }
13255
13257 {
13260
13261 return super.GetTemperatureThawThreshold();
13262 }
13263
13265 {
13268
13269 return super.GetItemOverheatThreshold();
13270 }
13271
13273 {
13275 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13276
13277 return super.GetTemperatureFreezeTime();
13278 }
13279
13281 {
13283 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13284
13285 return super.GetTemperatureThawTime();
13286 }
13287
13292
13294 {
13295 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13296 }
13297
13299 {
13300 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13301 }
13302
13305 {
13307 }
13308
13310 {
13312 }
13313
13315 {
13317 }
13318
13321 {
13322 return null;
13323 }
13324
13327 {
13328 return false;
13329 }
13330
13332 {
13334 {
13337 if (!trg)
13338 {
13340 explosive = this;
13341 }
13342
13343 explosive.PairRemote(trg);
13345
13346 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13347 trg.SetPersistentPairID(persistentID);
13348 explosive.SetPersistentPairID(persistentID);
13349
13350 return true;
13351 }
13352 return false;
13353 }
13354
13357 {
13358 float ret = 1.0;
13361 ret *= GetHealth01();
13362
13363 return ret;
13364 }
13365
13366 #ifdef DEVELOPER
13367 override void SetDebugItem()
13368 {
13369 super.SetDebugItem();
13370 _itemBase = this;
13371 }
13372
13374 {
13375 string text = super.GetDebugText();
13376
13378 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13379
13380 return text;
13381 }
13382 #endif
13383
13385 {
13386 return true;
13387 }
13388
13390
13392
13394 {
13397 }
13398
13399
13407
13423}
13424
13426{
13428 if (entity)
13429 {
13430 bool is_item = entity.IsInherited(
ItemBase);
13431 if (is_item && full_quantity)
13432 {
13435 }
13436 }
13437 else
13438 {
13440 return NULL;
13441 }
13442 return entity;
13443}
13444
13446{
13447 if (item)
13448 {
13449 if (health > 0)
13450 item.SetHealth("", "", health);
13451
13452 if (item.CanHaveTemperature())
13453 {
13455 if (item.CanFreeze())
13456 item.SetFrozen(false);
13457 }
13458
13459 if (item.HasEnergyManager())
13460 {
13461 if (quantity >= 0)
13462 {
13463 item.GetCompEM().SetEnergy0To1(quantity);
13464 }
13465 else
13466 {
13468 }
13469 }
13470 else if (item.IsMagazine())
13471 {
13472 Magazine mag = Magazine.Cast(item);
13473 if (quantity >= 0)
13474 {
13475 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13476 }
13477 else
13478 {
13480 }
13481
13482 }
13483 else
13484 {
13485 if (quantity >= 0)
13486 {
13487 item.SetQuantityNormalized(quantity, false);
13488 }
13489 else
13490 {
13492 }
13493
13494 }
13495 }
13496}
13497
13498#ifdef DEVELOPER
13500#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.