8785{
8787 {
8788 return true;
8789 }
8790};
8791
8792
8793
8795{
8799
8801
8804
8805
8806
8807
8808
8817
8823
8828
8833
8854 protected bool m_IsResultOfSplit
8855
8857
8862
8863
8864
8866
8870
8871
8872
8874
8877
8878
8879
8885
8886
8894
8897
8898
8900
8901
8903
8904
8909
8910
8915
8916
8918
8919
8921 {
8926
8927 if (!
GetGame().IsDedicatedServer())
8928 {
8930 {
8932
8934 {
8936 }
8937 }
8938
8941 }
8942
8943 m_OldLocation = null;
8944
8946 {
8948 }
8949
8950 if (ConfigIsExisting("headSelectionsToHide"))
8951 {
8954 }
8955
8957 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8958 {
8960 }
8961
8963
8964 m_IsResultOfSplit = false;
8965
8967 }
8968
8970 {
8971 super.InitItemVariables();
8972
8978 m_Count = ConfigGetInt(
"count");
8979
8982
8987
8990
8995
9007
9011
9012
9015 if (ConfigIsExisting("canBeSplit"))
9016 {
9019 }
9020
9022 if (ConfigIsExisting("itemBehaviour"))
9024
9025
9028 RegisterNetSyncVariableInt("m_VarLiquidType");
9029 RegisterNetSyncVariableInt("m_Cleanness",0,1);
9030
9031 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
9032 RegisterNetSyncVariableFloat("m_ImpactSpeed");
9033 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
9034
9035 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
9036 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
9037 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
9038 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
9039
9040 RegisterNetSyncVariableBool("m_IsBeingPlaced");
9041 RegisterNetSyncVariableBool("m_IsTakeable");
9042 RegisterNetSyncVariableBool("m_IsHologram");
9043
9046 {
9049 }
9050
9052
9054 if (ConfigIsExisting("temperaturePerQuantityWeight"))
9056
9057 }
9058
9060 {
9062 }
9063
9065 {
9068 {
9073 }
9074 }
9075
9076 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
9077 {
9079 {
9082 }
9083
9085 }
9086
9088 {
9094 }
9095
9097
9099 {
9101
9102 if (!action)
9103 {
9104 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
9105 return;
9106 }
9107
9109 if (!ai)
9110 {
9112 return;
9113 }
9114
9116 if (!action_array)
9117 {
9118 action_array = new array<ActionBase_Basic>;
9120 }
9121 if (LogManager.IsActionLogEnable())
9122 {
9123 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9124 }
9125
9126 if (action_array.Find(action) != -1)
9127 {
9128 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9129 }
9130 else
9131 {
9132 action_array.Insert(action);
9133 }
9134 }
9135
9137 {
9139 ActionBase action = player.GetActionManager().GetAction(actionName);
9142
9143 if (action_array)
9144 {
9145 action_array.RemoveItem(action);
9146 }
9147 }
9148
9149
9150
9152 {
9153 ActionOverrideData overrideData = new ActionOverrideData();
9157
9159 if (!actionMap)
9160 {
9163 }
9164
9165 actionMap.Insert(this.
Type(), overrideData);
9166
9167 }
9168
9170
9172
9173
9175 {
9178
9181
9182 string config_to_search = "CfgVehicles";
9183 string muzzle_owner_config;
9184
9186 {
9187 if (IsInherited(Weapon))
9188 config_to_search = "CfgWeapons";
9189
9190 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9191
9192 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9193
9195
9196 if (config_OnFire_subclass_count > 0)
9197 {
9198 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9199
9200 for (int i = 0; i < config_OnFire_subclass_count; i++)
9201 {
9202 string particle_class = "";
9204 string config_OnFire_entry = config_OnFire_class + particle_class;
9205 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9206 WPOF_array.Insert(WPOF);
9207 }
9208
9209
9211 }
9212 }
9213
9215 {
9216 config_to_search = "CfgWeapons";
9217 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9218
9219 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9220
9222
9223 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9224 {
9225 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9226
9227 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9228 {
9229 string particle_class2 = "";
9231 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9232 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9233 WPOBE_array.Insert(WPOBE);
9234 }
9235
9236
9238 }
9239 }
9240 }
9241
9242
9244 {
9247
9249 {
9250 string config_to_search = "CfgVehicles";
9251
9252 if (IsInherited(Weapon))
9253 config_to_search = "CfgWeapons";
9254
9255 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9256 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9257
9258 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9259 {
9260
9262
9264 {
9266 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9268 return;
9269 }
9270
9273
9274
9275
9277 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9278
9279 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9280 {
9281 string particle_class = "";
9283 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9285
9286 if (entry_type == CT_CLASS)
9287 {
9288 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9289 WPOOH_array.Insert(WPOF);
9290 }
9291 }
9292
9293
9295 }
9296 }
9297 }
9298
9300 {
9302 }
9303
9305 {
9307 {
9309
9312
9315
9316 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9317 }
9318 }
9319
9321 {
9323 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9324
9326 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9327
9329 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9330
9332 {
9334 }
9335 }
9336
9338 {
9340 }
9341
9343 {
9346 else
9348
9350 {
9353 }
9354 else
9355 {
9358
9361 }
9362
9364 }
9365
9367 {
9369 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9370 }
9371
9373 {
9375 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9377 }
9378
9380 {
9382 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9383 }
9384
9386 {
9389
9390 OverheatingParticle OP = new OverheatingParticle();
9395
9397 }
9398
9400 {
9403
9404 return -1;
9405 }
9406
9408 {
9410 {
9413
9414 for (int i = count; i > 0; --i)
9415 {
9416 int id = i - 1;
9419
9422
9423 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9424 {
9425 if (p)
9426 {
9429 }
9430 }
9431 }
9432 }
9433 }
9434
9436 {
9438 {
9440 {
9441 int id = i - 1;
9443
9444 if (OP)
9445 {
9447
9448 if (p)
9449 {
9451 }
9452
9453 delete OP;
9454 }
9455 }
9456
9459 }
9460 }
9461
9464 {
9465 return 0.0;
9466 }
9467
9468
9470 {
9471 return 250;
9472 }
9473
9475 {
9476 return 0;
9477 }
9478
9481 {
9483 return true;
9484
9485 return false;
9486 }
9487
9490 {
9493
9495 {
9497 }
9498 else
9499 {
9500
9502 }
9503
9505 }
9506
9513 {
9514 return -1;
9515 }
9516
9517
9518
9519
9521 {
9523 {
9525 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9526
9527 if (r_index >= 0)
9528 {
9529 InventoryLocation r_il = new InventoryLocation;
9530 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9531
9532 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9535 {
9536 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9537 }
9539 {
9540 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9541 }
9542
9543 }
9544
9545 player.GetHumanInventory().ClearUserReservedLocation(this);
9546 }
9547
9550 }
9551
9552
9553
9554
9556 {
9557 return ItemBase.m_DebugActionsMask;
9558 }
9559
9561 {
9562 return ItemBase.m_DebugActionsMask & mask;
9563 }
9564
9566 {
9567 ItemBase.m_DebugActionsMask = mask;
9568 }
9569
9571 {
9572 ItemBase.m_DebugActionsMask |= mask;
9573 }
9574
9576 {
9577 ItemBase.m_DebugActionsMask &= ~mask;
9578 }
9579
9581 {
9583 {
9585 }
9586 else
9587 {
9589 }
9590 }
9591
9592
9594 {
9595 if (GetEconomyProfile())
9596 {
9597 float q_max = GetEconomyProfile().GetQuantityMax();
9598 if (q_max > 0)
9599 {
9600 float q_min = GetEconomyProfile().GetQuantityMin();
9601 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9602
9604 {
9605 ComponentEnergyManager comp = GetCompEM();
9607 {
9609 }
9610 }
9612 {
9614
9615 }
9616
9617 }
9618 }
9619 }
9620
9623 {
9624 EntityAI parent = GetHierarchyParent();
9625
9626 if (parent)
9627 {
9628 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9629 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9630 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9631 }
9632 }
9633
9636 {
9637 EntityAI parent = GetHierarchyParent();
9638
9639 if (parent)
9640 {
9641 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9642 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9643 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9644 }
9645 }
9646
9648 {
9649
9650
9651
9652
9654
9656 {
9657 if (ScriptInputUserData.CanStoreInputUserData())
9658 {
9659 ScriptInputUserData ctx = new ScriptInputUserData;
9665 ctx.
Write(use_stack_max);
9668
9670 {
9671 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9672 }
9673 }
9674 }
9675 else if (!
GetGame().IsMultiplayer())
9676 {
9678 }
9679 }
9680
9682 {
9684 }
9685
9687 {
9689 }
9690
9692 {
9694 }
9695
9697 {
9698
9699 return false;
9700 }
9701
9703 {
9704 return false;
9705 }
9706
9710 {
9711 return false;
9712 }
9713
9715 {
9716 return "";
9717 }
9718
9720
9722 {
9723 return false;
9724 }
9725
9727 {
9728 return true;
9729 }
9730
9731
9732
9734 {
9735 return true;
9736 }
9737
9739 {
9740 return true;
9741 }
9742
9744 {
9745 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9747 }
9748
9750 {
9752 }
9753
9755 {
9757 if (!is_being_placed)
9759 SetSynchDirty();
9760 }
9761
9762
9764
9766 {
9768 }
9769
9771 {
9773 }
9774
9776 {
9777 return 1;
9778 }
9779
9781 {
9782 return false;
9783 }
9784
9786 {
9788 SetSynchDirty();
9789 }
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9826 {
9827 super.OnMovedInsideCargo(container);
9828
9829 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9830 }
9831
9832 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9833 {
9834 super.EEItemLocationChanged(oldLoc,newLoc);
9835
9836 PlayerBase new_player = null;
9837 PlayerBase old_player = null;
9838
9839 if (newLoc.GetParent())
9840 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9841
9842 if (oldLoc.GetParent())
9843 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9844
9846 {
9847 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9848
9849 if (r_index >= 0)
9850 {
9851 InventoryLocation r_il = new InventoryLocation;
9852 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9853
9854 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9857 {
9858 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9859 }
9861 {
9862 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9863 }
9864
9865 }
9866 }
9867
9869 {
9870 if (new_player)
9871 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9872
9873 if (new_player == old_player)
9874 {
9875
9876 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9877 {
9879 {
9880 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9881 {
9882 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9883 }
9884 }
9885 else
9886 {
9887 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9888 }
9889 }
9890
9891 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9892 {
9893 int type = oldLoc.GetType();
9895 {
9896 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9897 }
9899 {
9900 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9901 }
9902 }
9903 if (!m_OldLocation)
9904 {
9905 m_OldLocation = new InventoryLocation;
9906 }
9907 m_OldLocation.Copy(oldLoc);
9908 }
9909 else
9910 {
9911 if (m_OldLocation)
9912 {
9913 m_OldLocation.Reset();
9914 }
9915 }
9916
9918 }
9919 else
9920 {
9921 if (new_player)
9922 {
9923 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9924 if (res_index >= 0)
9925 {
9926 InventoryLocation il = new InventoryLocation;
9927 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9929 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9932 {
9933 il.
GetParent().GetOnReleaseLock().Invoke(it);
9934 }
9936 {
9938 }
9939
9940 }
9941 }
9943 {
9944
9946 }
9947
9948 if (m_OldLocation)
9949 {
9950 m_OldLocation.Reset();
9951 }
9952 }
9953 }
9954
9955 override void EOnContact(IEntity other, Contact extra)
9956 {
9958 {
9959 int liquidType = -1;
9961 if (impactSpeed > 0.0)
9962 {
9964 #ifndef SERVER
9966 #else
9968 SetSynchDirty();
9969 #endif
9971 }
9972 }
9973
9974 #ifdef SERVER
9975 if (GetCompEM() && GetCompEM().IsPlugged())
9976 {
9977 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9978 GetCompEM().UnplugThis();
9979 }
9980 #endif
9981 }
9982
9984
9986 {
9988 }
9989
9991 {
9992
9993 }
9994
9996 {
9997 super.OnItemLocationChanged(old_owner, new_owner);
9998
9999 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
10000 PlayerBase playerNew = PlayerBase.Cast(new_owner);
10001
10002 if (!relatedPlayer && playerNew)
10003 relatedPlayer = playerNew;
10004
10005 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
10006 {
10008 if (actionMgr)
10009 {
10010 ActionBase currentAction = actionMgr.GetRunningAction();
10011 if (currentAction)
10013 }
10014 }
10015
10016 Man ownerPlayerOld = null;
10017 Man ownerPlayerNew = null;
10018
10019 if (old_owner)
10020 {
10021 if (old_owner.
IsMan())
10022 {
10023 ownerPlayerOld = Man.Cast(old_owner);
10024 }
10025 else
10026 {
10027 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
10028 }
10029 }
10030 else
10031 {
10033 {
10035
10036 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
10037 {
10038 GetCompEM().UnplugThis();
10039 }
10040 }
10041 }
10042
10043 if (new_owner)
10044 {
10045 if (new_owner.
IsMan())
10046 {
10047 ownerPlayerNew = Man.Cast(new_owner);
10048 }
10049 else
10050 {
10051 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
10052 }
10053 }
10054
10055 if (ownerPlayerOld != ownerPlayerNew)
10056 {
10057 if (ownerPlayerOld)
10058 {
10059 array<EntityAI> subItemsExit = new array<EntityAI>;
10061 for (int i = 0; i < subItemsExit.Count(); i++)
10062 {
10065 }
10066 }
10067
10068 if (ownerPlayerNew)
10069 {
10070 array<EntityAI> subItemsEnter = new array<EntityAI>;
10072 for (int j = 0; j < subItemsEnter.Count(); j++)
10073 {
10076 }
10077 }
10078 }
10079 else if (ownerPlayerNew != null)
10080 {
10081 PlayerBase nplayer;
10082 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
10083 {
10084 array<EntityAI> subItemsUpdate = new array<EntityAI>;
10086 for (int k = 0; k < subItemsUpdate.Count(); k++)
10087 {
10089 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
10090 }
10091 }
10092 }
10093
10094 if (old_owner)
10095 old_owner.OnChildItemRemoved(this);
10096 if (new_owner)
10097 new_owner.OnChildItemReceived(this);
10098 }
10099
10100
10102 {
10103 super.EEDelete(parent);
10104 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
10105 if (player)
10106 {
10108
10109 if (player.IsAlive())
10110 {
10111 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10112 if (r_index >= 0)
10113 {
10114 InventoryLocation r_il = new InventoryLocation;
10115 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10116
10117 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10120 {
10121 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10122 }
10124 {
10125 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10126 }
10127
10128 }
10129
10130 player.RemoveQuickBarEntityShortcut(this);
10131 }
10132 }
10133 }
10134
10136 {
10137 super.EEKilled(killer);
10138
10141 {
10142 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10143 {
10144 if (IsMagazine())
10145 {
10146 if (Magazine.Cast(this).GetAmmoCount() > 0)
10147 {
10149 }
10150 }
10151 else
10152 {
10154 }
10155 }
10156 }
10157 }
10158
10160 {
10161 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10162
10163 super.OnWasAttached(parent, slot_id);
10164
10167
10169 }
10170
10172 {
10173 super.OnWasDetached(parent, slot_id);
10174
10177 }
10178
10180 {
10181 int idx;
10184
10185 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10186 if (inventory_slots.Count() < 1)
10187 {
10188 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10189 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10190 }
10191 else
10192 {
10193 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10194 }
10195
10196 idx = inventory_slots.Find(slot);
10197 if (idx < 0)
10198 return "";
10199
10200 return attach_types.Get(idx);
10201 }
10202
10204 {
10205 int idx = -1;
10206 string slot;
10207
10210
10211 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10212 if (inventory_slots.Count() < 1)
10213 {
10214 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10215 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10216 }
10217 else
10218 {
10219 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10220 if (detach_types.Count() < 1)
10221 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10222 }
10223
10224 for (int i = 0; i < inventory_slots.Count(); i++)
10225 {
10226 slot = inventory_slots.Get(i);
10227 }
10228
10229 if (slot != "")
10230 {
10231 if (detach_types.Count() == 1)
10232 idx = 0;
10233 else
10234 idx = inventory_slots.Find(slot);
10235 }
10236 if (idx < 0)
10237 return "";
10238
10239 return detach_types.Get(idx);
10240 }
10241
10243 {
10244
10246
10247
10248 float min_time = 1;
10249 float max_time = 3;
10250 float delay = Math.RandomFloat(min_time, max_time);
10251
10252 explode_timer.Run(delay, this, "DoAmmoExplosion");
10253 }
10254
10256 {
10257 Magazine magazine = Magazine.Cast(this);
10258 int pop_sounds_count = 6;
10259 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10260
10261
10262 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10263 string sound_name = pop_sounds[ sound_idx ];
10265
10266
10267 magazine.ServerAddAmmoCount(-1);
10268
10269
10270 float min_temp_to_explode = 100;
10271
10272 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10273 {
10275 }
10276 }
10277
10278
10279 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10280 {
10281 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10282
10283 const int CHANCE_DAMAGE_CARGO = 4;
10284 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10285 const int CHANCE_DAMAGE_NOTHING = 2;
10286
10288 {
10289 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10290 int chances;
10291 int rnd;
10292
10293 if (GetInventory().GetCargo())
10294 {
10295 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10296 rnd = Math.RandomInt(0,chances);
10297
10298 if (rnd < CHANCE_DAMAGE_CARGO)
10299 {
10301 }
10302 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10303 {
10305 }
10306 }
10307 else
10308 {
10309 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10310 rnd = Math.RandomInt(0,chances);
10311
10312 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10313 {
10315 }
10316 }
10317 }
10318 }
10319
10321 {
10322 if (GetInventory().GetCargo())
10323 {
10324 int item_count = GetInventory().GetCargo().GetItemCount();
10325 if (item_count > 0)
10326 {
10327 int random_pick = Math.RandomInt(0, item_count);
10329 if (!item.IsExplosive())
10330 {
10331 item.AddHealth("","",damage);
10332 return true;
10333 }
10334 }
10335 }
10336 return false;
10337 }
10338
10340 {
10341 int attachment_count = GetInventory().AttachmentCount();
10342 if (attachment_count > 0)
10343 {
10344 int random_pick = Math.RandomInt(0, attachment_count);
10345 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10346 if (!attachment.IsExplosive())
10347 {
10348 attachment.AddHealth("","",damage);
10349 return true;
10350 }
10351 }
10352 return false;
10353 }
10354
10356 {
10358 }
10359
10361 {
10363 return GetInventory().CanRemoveEntity();
10364
10365 return false;
10366 }
10367
10369 {
10371 return;
10372
10374 {
10375 if (ScriptInputUserData.CanStoreInputUserData())
10376 {
10377 ScriptInputUserData ctx = new ScriptInputUserData;
10382 ctx.
Write(destination_entity);
10384 ctx.
Write(slot_id);
10386 }
10387 }
10388 else if (!
GetGame().IsMultiplayer())
10389 {
10391 }
10392 }
10393
10395 {
10397 return;
10398
10399 float split_quantity_new;
10403 InventoryLocation loc = new InventoryLocation;
10404
10405 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10406 {
10408 split_quantity_new = stack_max;
10409 else
10411
10412 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10413 if (new_item)
10414 {
10415 new_item.SetResultOfSplit(true);
10416 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10418 new_item.SetQuantity(split_quantity_new);
10419 }
10420 }
10421 else if (destination_entity && slot_id == -1)
10422 {
10423 if (quantity > stack_max)
10424 split_quantity_new = stack_max;
10425 else
10426 split_quantity_new = quantity;
10427
10429 {
10432 }
10433
10434 if (new_item)
10435 {
10436 new_item.SetResultOfSplit(true);
10437 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10439 new_item.SetQuantity(split_quantity_new);
10440 }
10441 }
10442 else
10443 {
10444 if (stack_max != 0)
10445 {
10447 {
10449 }
10450
10451 if (split_quantity_new == 0)
10452 {
10453 if (!
GetGame().IsMultiplayer())
10454 player.PhysicalPredictiveDropItem(this);
10455 else
10456 player.ServerDropEntity(this);
10457 return;
10458 }
10459
10461
10462 if (new_item)
10463 {
10464 new_item.SetResultOfSplit(true);
10465 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10467 new_item.SetQuantity(stack_max);
10468 new_item.PlaceOnSurface();
10469 }
10470 }
10471 }
10472 }
10473
10475 {
10477 return;
10478
10479 float split_quantity_new;
10483 InventoryLocation loc = new InventoryLocation;
10484
10485 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10486 {
10488 split_quantity_new = stack_max;
10489 else
10491
10492 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10493 if (new_item)
10494 {
10495 new_item.SetResultOfSplit(true);
10496 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10498 new_item.SetQuantity(split_quantity_new);
10499 }
10500 }
10501 else if (destination_entity && slot_id == -1)
10502 {
10503 if (quantity > stack_max)
10504 split_quantity_new = stack_max;
10505 else
10506 split_quantity_new = quantity;
10507
10509 {
10512 }
10513
10514 if (new_item)
10515 {
10516 new_item.SetResultOfSplit(true);
10517 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10519 new_item.SetQuantity(split_quantity_new);
10520 }
10521 }
10522 else
10523 {
10524 if (stack_max != 0)
10525 {
10527 {
10529 }
10530
10532
10533 if (new_item)
10534 {
10535 new_item.SetResultOfSplit(true);
10536 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10538 new_item.SetQuantity(stack_max);
10539 new_item.PlaceOnSurface();
10540 }
10541 }
10542 }
10543 }
10544
10546 {
10548 return;
10549
10551 {
10552 if (ScriptInputUserData.CanStoreInputUserData())
10553 {
10554 ScriptInputUserData ctx = new ScriptInputUserData;
10559 dst.WriteToContext(ctx);
10561 }
10562 }
10563 else if (!
GetGame().IsMultiplayer())
10564 {
10566 }
10567 }
10568
10570 {
10572 return;
10573
10575 {
10576 if (ScriptInputUserData.CanStoreInputUserData())
10577 {
10578 ScriptInputUserData ctx = new ScriptInputUserData;
10583 ctx.
Write(destination_entity);
10589 }
10590 }
10591 else if (!
GetGame().IsMultiplayer())
10592 {
10594 }
10595 }
10596
10598 {
10600 }
10601
10603 {
10605 return this;
10606
10608 float split_quantity_new;
10610 if (dst.IsValid())
10611 {
10612 int slot_id = dst.GetSlot();
10614
10615 if (quantity > stack_max)
10616 split_quantity_new = stack_max;
10617 else
10618 split_quantity_new = quantity;
10619
10621
10622 if (new_item)
10623 {
10624 new_item.SetResultOfSplit(true);
10625 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10628 }
10629
10630 return new_item;
10631 }
10632
10633 return null;
10634 }
10635
10637 {
10639 return;
10640
10642 float split_quantity_new;
10644 if (destination_entity)
10645 {
10647 if (quantity > stackable)
10648 split_quantity_new = stackable;
10649 else
10650 split_quantity_new = quantity;
10651
10652 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10653 if (new_item)
10654 {
10655 new_item.SetResultOfSplit(true);
10656 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10658 new_item.SetQuantity(split_quantity_new);
10659 }
10660 }
10661 }
10662
10664 {
10666 return;
10667
10669 {
10670 if (ScriptInputUserData.CanStoreInputUserData())
10671 {
10672 ScriptInputUserData ctx = new ScriptInputUserData;
10677 ItemBase destination_entity =
this;
10678 ctx.
Write(destination_entity);
10682 }
10683 }
10684 else if (!
GetGame().IsMultiplayer())
10685 {
10687 }
10688 }
10689
10691 {
10693 return;
10694
10696 float split_quantity_new;
10698 if (player)
10699 {
10701 if (quantity > stackable)
10702 split_quantity_new = stackable;
10703 else
10704 split_quantity_new = quantity;
10705
10706 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10707 new_item =
ItemBase.Cast(in_hands);
10708 if (new_item)
10709 {
10710 new_item.SetResultOfSplit(true);
10711 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10713 new_item.SetQuantity(split_quantity_new);
10714 }
10715 }
10716 }
10717
10719 {
10721 return;
10722
10724 float split_quantity_new = Math.Floor(quantity * 0.5);
10725
10727
10728 if (new_item)
10729 {
10730 if (new_item.GetQuantityMax() < split_quantity_new)
10731 {
10732 split_quantity_new = new_item.GetQuantityMax();
10733 }
10734
10735 new_item.SetResultOfSplit(true);
10736 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10737
10739 {
10742 }
10743 else
10744 {
10747 }
10748 }
10749 }
10750
10752 {
10754 return;
10755
10757 float split_quantity_new = Math.Floor(quantity / 2);
10758
10759 InventoryLocation invloc = new InventoryLocation;
10761
10763 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10764
10765 if (new_item)
10766 {
10767 if (new_item.GetQuantityMax() < split_quantity_new)
10768 {
10769 split_quantity_new = new_item.GetQuantityMax();
10770 }
10772 {
10775 }
10776 else
10777 {
10780 }
10781 }
10782 }
10783
10786 {
10787 SetWeightDirty();
10789
10790 if (parent)
10791 parent.OnAttachmentQuantityChangedEx(this, delta);
10792
10794 {
10796 {
10798 }
10800 {
10801 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10803 }
10804 }
10805
10806 }
10807
10810 {
10811
10812 }
10813
10816 {
10818 }
10819
10821 {
10822 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10823
10825 {
10826 if (newLevel == GameConstants.STATE_RUINED)
10827 {
10829 EntityAI parent = GetHierarchyParent();
10830 if (parent && parent.IsFireplace())
10831 {
10832 CargoBase cargo = GetInventory().GetCargo();
10833 if (cargo)
10834 {
10836 {
10838 }
10839 }
10840 }
10841 }
10842
10844 {
10845
10847 return;
10848 }
10849
10850 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10851 {
10853 }
10854 }
10855 }
10856
10857
10859 {
10860 super.OnRightClick();
10861
10863 {
10865 {
10866 if (ScriptInputUserData.CanStoreInputUserData())
10867 {
10868 vector m4[4];
10870
10871 EntityAI root = GetHierarchyRoot();
10872
10873 InventoryLocation dst = new InventoryLocation;
10875 {
10876 if (root)
10877 {
10878 root.GetTransform(m4);
10880 }
10881 else
10882 GetInventory().GetCurrentInventoryLocation(dst);
10883 }
10884 else
10885 {
10887
10888
10889 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10890 {
10891 if (root)
10892 {
10893 root.GetTransform(m4);
10895 }
10896 else
10897 GetInventory().GetCurrentInventoryLocation(dst);
10898 }
10899 else
10900 {
10901 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10902 }
10903 }
10904
10905 ScriptInputUserData ctx = new ScriptInputUserData;
10913 }
10914 }
10915 else if (!
GetGame().IsMultiplayer())
10916 {
10918 }
10919 }
10920 }
10921
10922 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10923 {
10924
10925 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10926 return false;
10927
10928 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10929 return false;
10930
10931
10933 return false;
10934
10935
10936 Magazine mag = Magazine.Cast(this);
10937 if (mag)
10938 {
10939 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10940 return false;
10941
10942 if (stack_max_limit)
10943 {
10944 Magazine other_mag = Magazine.Cast(other_item);
10945 if (other_item)
10946 {
10947 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10948 return false;
10949 }
10950
10951 }
10952 }
10953 else
10954 {
10955
10957 return false;
10958
10960 return false;
10961 }
10962
10963 PlayerBase player = null;
10964 if (CastTo(player, GetHierarchyRootPlayer()))
10965 {
10966 if (player.GetInventory().HasAttachment(this))
10967 return false;
10968
10969 if (player.IsItemsToDelete())
10970 return false;
10971 }
10972
10973 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10974 return false;
10975
10976 int slotID;
10978 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10979 return false;
10980
10981 return true;
10982 }
10983
10985 {
10987 }
10988
10990 {
10991 return m_IsResultOfSplit;
10992 }
10993
10995 {
10996 m_IsResultOfSplit = value;
10997 }
10998
11000 {
11002 }
11003
11005 {
11006 float other_item_quantity = other_item.GetQuantity();
11007 float this_free_space;
11008
11010
11012
11013 if (other_item_quantity > this_free_space)
11014 {
11015 return this_free_space;
11016 }
11017 else
11018 {
11019 return other_item_quantity;
11020 }
11021 }
11022
11024 {
11026 }
11027
11029 {
11031 return;
11032
11033 if (!IsMagazine() && other_item)
11034 {
11036 if (quantity_used != 0)
11037 {
11038 float hp1 = GetHealth01("","");
11039 float hp2 = other_item.GetHealth01("","");
11040 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
11041 hpResult = hpResult / (
GetQuantity() + quantity_used);
11042
11043 hpResult *= GetMaxHealth();
11044 Math.Round(hpResult);
11045 SetHealth("", "Health", hpResult);
11046
11048 other_item.AddQuantity(-quantity_used);
11049 }
11050 }
11052 }
11053
11055 {
11056 #ifdef SERVER
11057 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
11058 GetHierarchyParent().IncreaseLifetimeUp();
11059 #endif
11060 };
11061
11063 {
11064 PlayerBase p = PlayerBase.Cast(player);
11065
11066 array<int> recipesIds = p.m_Recipes;
11067 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11068 if (moduleRecipesManager)
11069 {
11070 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
11071 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
11072 }
11073
11074 for (int i = 0;i < recipesIds.Count(); i++)
11075 {
11076 int key = recipesIds.Get(i);
11077 string recipeName = moduleRecipesManager.GetRecipeName(key);
11079 }
11080 }
11081
11082
11083 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
11084 {
11085 super.GetDebugActions(outputList);
11086
11087
11092
11093
11097
11101
11102
11105
11106
11108 {
11111 }
11112
11114
11117
11121 }
11122
11123
11124
11125
11127 {
11128 super.OnAction(action_id, player, ctx);
11129 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11130 {
11131 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11132 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11133 PlayerBase p = PlayerBase.Cast(player);
11134 if (
EActions.RECIPES_RANGE_START < 1000)
11135 {
11136 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11137 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11138 }
11139 }
11140 #ifndef SERVER
11141 else if (action_id ==
EActions.WATCH_PLAYER)
11142 {
11143 PluginDeveloper.SetDeveloperItemClientEx(player);
11144 }
11145 #endif
11147 {
11148 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11149 {
11150 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11151 OnDebugButtonPressServer(id + 1);
11152 }
11153
11154 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11155 {
11156 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11158 }
11159
11160 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11161 {
11162 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11164 }
11165
11166 else if (action_id ==
EActions.ADD_QUANTITY)
11167 {
11168 if (IsMagazine())
11169 {
11170 Magazine mag = Magazine.Cast(this);
11171 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11172 }
11173 else
11174 {
11176 }
11177
11178 if (m_EM)
11179 {
11180 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11181 }
11182
11183 }
11184
11185 else if (action_id ==
EActions.REMOVE_QUANTITY)
11186 {
11187 if (IsMagazine())
11188 {
11189 Magazine mag2 = Magazine.Cast(this);
11190 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11191 }
11192 else
11193 {
11195 }
11196 if (m_EM)
11197 {
11198 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11199 }
11200
11201 }
11202
11203 else if (action_id ==
EActions.SET_QUANTITY_0)
11204 {
11206
11207 if (m_EM)
11208 {
11209 m_EM.SetEnergy(0);
11210 }
11211 }
11212
11213 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11214 {
11216
11217 if (m_EM)
11218 {
11219 m_EM.SetEnergy(m_EM.GetEnergyMax());
11220 }
11221 }
11222
11223 else if (action_id ==
EActions.ADD_HEALTH)
11224 {
11225 AddHealth("","",GetMaxHealth("","Health")/5);
11226 }
11227 else if (action_id ==
EActions.REMOVE_HEALTH)
11228 {
11229 AddHealth("","",-GetMaxHealth("","Health")/5);
11230 }
11231 else if (action_id ==
EActions.DESTROY_HEALTH)
11232 {
11233 SetHealth01("","",0);
11234 }
11235 else if (action_id ==
EActions.WATCH_ITEM)
11236 {
11238 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11239 #ifdef DEVELOPER
11240 SetDebugDeveloper_item(this);
11241 #endif
11242 }
11243
11244 else if (action_id ==
EActions.ADD_TEMPERATURE)
11245 {
11246 AddTemperature(20);
11247
11248 }
11249
11250 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11251 {
11252 AddTemperature(-20);
11253
11254 }
11255
11256 else if (action_id ==
EActions.FLIP_FROZEN)
11257 {
11258 SetFrozen(!GetIsFrozen());
11259
11260 }
11261
11262 else if (action_id ==
EActions.ADD_WETNESS)
11263 {
11265
11266 }
11267
11268 else if (action_id ==
EActions.REMOVE_WETNESS)
11269 {
11271
11272 }
11273
11274 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11275 {
11278
11279
11280 }
11281
11282 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11283 {
11286 }
11287
11288 else if (action_id ==
EActions.MAKE_SPECIAL)
11289 {
11290 auto debugParams = DebugSpawnParams.WithPlayer(player);
11291 OnDebugSpawnEx(debugParams);
11292 }
11293
11294 else if (action_id ==
EActions.DELETE)
11295 {
11296 Delete();
11297 }
11298
11299 }
11300
11301
11302 return false;
11303 }
11304
11305
11306
11307
11311
11314
11315
11316
11318 {
11319 return false;
11320 }
11321
11322
11324 {
11325 return true;
11326 }
11327
11328
11330 {
11331 return true;
11332 }
11333
11334
11335
11337 {
11338 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11340 }
11341
11344 {
11345 return null;
11346 }
11347
11349 {
11350 return false;
11351 }
11352
11354 {
11355 return false;
11356 }
11357
11361
11362
11364 {
11365 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11366 return module_repairing.CanRepair(this, item_repair_kit);
11367 }
11368
11369
11370 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11371 {
11372 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11373 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11374 }
11375
11376
11378 {
11379
11380
11381
11382
11383
11384
11385
11386
11387 return 1;
11388 }
11389
11390
11391
11393 {
11395 }
11396
11397
11398
11400 {
11402 }
11403
11404
11413 {
11414 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11415
11416 if (player)
11417 {
11418 player.MessageStatus(text);
11419 }
11420 }
11421
11422
11431 {
11432 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11433
11434 if (player)
11435 {
11436 player.MessageAction(text);
11437 }
11438 }
11439
11440
11449 {
11450 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11451
11452 if (player)
11453 {
11454 player.MessageFriendly(text);
11455 }
11456 }
11457
11458
11467 {
11468 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11469
11470 if (player)
11471 {
11472 player.MessageImportant(text);
11473 }
11474 }
11475
11477 {
11478 return true;
11479 }
11480
11481
11482 override bool KindOf(
string tag)
11483 {
11484 bool found = false;
11485 string item_name = this.
GetType();
11488
11489 int array_size = item_tag_array.Count();
11490 for (int i = 0; i < array_size; i++)
11491 {
11492 if (item_tag_array.Get(i) == tag)
11493 {
11494 found = true;
11495 break;
11496 }
11497 }
11498 return found;
11499 }
11500
11501
11503 {
11504
11505 super.OnRPC(sender, rpc_type,ctx);
11506
11507
11508 switch (rpc_type)
11509 {
11510 #ifndef SERVER
11511 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11512 Param2<bool, string> p = new Param2<bool, string>(false, "");
11513
11515 return;
11516
11517 bool play = p.param1;
11518 string soundSet = p.param2;
11519
11520 if (play)
11521 {
11523 {
11525 {
11527 }
11528 }
11529 else
11530 {
11532 }
11533 }
11534 else
11535 {
11537 }
11538
11539 break;
11540 #endif
11541
11542 }
11543
11545 {
11547 }
11548 }
11549
11550
11551
11552
11554 {
11555 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11556 return plugin.GetID(
name);
11557 }
11558
11560 {
11561 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11562 return plugin.GetName(id);
11563 }
11564
11567 {
11568
11569
11570 int varFlags;
11571 if (!ctx.
Read(varFlags))
11572 return;
11573
11574 if (varFlags & ItemVariableFlags.FLOAT)
11575 {
11577 }
11578 }
11579
11581 {
11582
11583 super.SerializeNumericalVars(floats_out);
11584
11585
11586
11588 {
11590 }
11591
11593 {
11595 }
11596
11598 {
11600 }
11601
11603 {
11608 }
11609
11611 {
11613 }
11614 }
11615
11617 {
11618
11619 super.DeSerializeNumericalVars(floats);
11620
11621
11622 int index = 0;
11623 int mask = Math.Round(floats.Get(index));
11624
11625 index++;
11626
11628 {
11630 {
11632 }
11633 else
11634 {
11635 float quantity = floats.Get(index);
11636 SetQuantity(quantity,
true,
false,
false,
false);
11637 }
11638 index++;
11639 }
11640
11642 {
11643 float wet = floats.Get(index);
11645 index++;
11646 }
11647
11649 {
11650 int liquidtype = Math.Round(floats.Get(index));
11652 index++;
11653 }
11654
11656 {
11658 index++;
11660 index++;
11662 index++;
11664 index++;
11665 }
11666
11668 {
11669 int cleanness = Math.Round(floats.Get(index));
11671 index++;
11672 }
11673 }
11674
11676 {
11677 super.WriteVarsToCTX(ctx);
11678
11679
11681 {
11683 }
11684
11686 {
11688 }
11689
11691 {
11693 }
11694
11696 {
11697 int r,g,b,a;
11703 }
11704
11706 {
11708 }
11709 }
11710
11712 {
11713 if (!super.ReadVarsFromCTX(ctx,version))
11714 return false;
11715
11716 int intValue;
11717 float value;
11718
11719 if (version < 140)
11720 {
11721 if (!ctx.
Read(intValue))
11722 return false;
11723
11724 m_VariablesMask = intValue;
11725 }
11726
11728 {
11729 if (!ctx.
Read(value))
11730 return false;
11731
11733 {
11735 }
11736 else
11737 {
11739 }
11740 }
11741
11742 if (version < 140)
11743 {
11745 {
11746 if (!ctx.
Read(value))
11747 return false;
11748 SetTemperatureDirect(value);
11749 }
11750 }
11751
11753 {
11754 if (!ctx.
Read(value))
11755 return false;
11757 }
11758
11760 {
11761 if (!ctx.
Read(intValue))
11762 return false;
11764 }
11765
11767 {
11768 int r,g,b,a;
11770 return false;
11772 return false;
11774 return false;
11776 return false;
11777
11779 }
11780
11782 {
11783 if (!ctx.
Read(intValue))
11784 return false;
11786 }
11787
11788 if (version >= 138 && version < 140)
11789 {
11791 {
11792 if (!ctx.
Read(intValue))
11793 return false;
11794 SetFrozen(intValue);
11795 }
11796 }
11797
11798 return true;
11799 }
11800
11801
11803 {
11806 {
11808 }
11809
11810 if (!super.OnStoreLoad(ctx, version))
11811 {
11813 return false;
11814 }
11815
11816 if (version >= 114)
11817 {
11818 bool hasQuickBarIndexSaved;
11819
11820 if (!ctx.
Read(hasQuickBarIndexSaved))
11821 {
11823 return false;
11824 }
11825
11826 if (hasQuickBarIndexSaved)
11827 {
11828 int itmQBIndex;
11829
11830
11831 if (!ctx.
Read(itmQBIndex))
11832 {
11834 return false;
11835 }
11836
11837 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11838 if (itmQBIndex != -1 && parentPlayer)
11839 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11840 }
11841 }
11842 else
11843 {
11844
11845 PlayerBase player;
11846 int itemQBIndex;
11847 if (version ==
int.
MAX)
11848 {
11849 if (!ctx.
Read(itemQBIndex))
11850 {
11852 return false;
11853 }
11854 }
11855 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11856 {
11857
11858 if (!ctx.
Read(itemQBIndex))
11859 {
11861 return false;
11862 }
11863 if (itemQBIndex != -1 && player)
11864 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11865 }
11866 }
11867
11868 if (version < 140)
11869 {
11870
11871 if (!LoadVariables(ctx, version))
11872 {
11874 return false;
11875 }
11876 }
11877
11878
11880 {
11882 return false;
11883 }
11884 if (version >= 132)
11885 {
11887 if (raib)
11888 {
11890 {
11892 return false;
11893 }
11894 }
11895 }
11896
11898 return true;
11899 }
11900
11901
11902
11904 {
11905 super.OnStoreSave(ctx);
11906
11907 PlayerBase player;
11908 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11909 {
11911
11912 int itemQBIndex = -1;
11913 itemQBIndex = player.FindQuickBarEntityIndex(this);
11914 ctx.
Write(itemQBIndex);
11915 }
11916 else
11917 {
11919 }
11920
11922
11924 if (raib)
11925 {
11927 }
11928 }
11929
11930
11932 {
11933 super.AfterStoreLoad();
11934
11936 {
11938 }
11939
11941 {
11944 }
11945 }
11946
11948 {
11949 super.EEOnAfterLoad();
11950
11952 {
11954 }
11955
11958 }
11959
11961 {
11962 return false;
11963 }
11964
11965
11966
11968 {
11970 {
11971 #ifdef PLATFORM_CONSOLE
11972
11974 {
11976 if (menu)
11977 {
11979 }
11980 }
11981 #endif
11982 }
11983
11985 {
11988 }
11989
11991 {
11992 SetWeightDirty();
11994 }
11996 {
11999 }
12000
12002 {
12005 }
12007 {
12010 }
12011
12012 super.OnVariablesSynchronized();
12013 }
12014
12015
12016
12018 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
12019 {
12020 if (!IsServerCheck(allow_client))
12021 return false;
12022
12024 return false;
12025
12028
12029 if (value <= (min + 0.001))
12030 value = min;
12031
12032 if (value == min)
12033 {
12034 if (destroy_config)
12035 {
12036 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
12037 if (dstr)
12038 {
12040 this.Delete();
12041 return true;
12042 }
12043 }
12044 else if (destroy_forced)
12045 {
12047 this.Delete();
12048 return true;
12049 }
12050
12052 }
12053
12056
12058 {
12060
12061 if (delta)
12063 }
12064
12066
12067 return false;
12068 }
12069
12070
12072 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
12073 {
12075 }
12076
12078 {
12081 }
12082
12084 {
12087 }
12088
12091 {
12092 float value_clamped = Math.Clamp(value, 0, 1);
12094 SetQuantity(result, destroy_config, destroy_forced);
12095 }
12096
12097
12100 {
12102 }
12103
12105 {
12107 }
12108
12109
12110
12111
12112
12113
12114
12115
12116
12117
12119 {
12120 int slot = -1;
12121 if (GetInventory())
12122 {
12123 InventoryLocation il = new InventoryLocation;
12124 GetInventory().GetCurrentInventoryLocation(il);
12126 }
12127
12129 }
12130
12132 {
12133 float quantity_max = 0;
12134
12136 {
12137 if (attSlotID != -1)
12138 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12139
12140 if (quantity_max <= 0)
12142 }
12143
12144 if (quantity_max <= 0)
12146
12147 return quantity_max;
12148 }
12149
12151 {
12153 }
12154
12156 {
12158 }
12159
12160
12162 {
12164 }
12165
12167 {
12169 }
12170
12172 {
12174 }
12175
12176
12178 {
12179
12180 float weightEx = GetWeightEx();
12181 float special = GetInventoryAndCargoWeight();
12182 return weightEx - special;
12183 }
12184
12185
12187 {
12189 }
12190
12192 {
12194 {
12195 #ifdef DEVELOPER
12196 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12197 {
12198 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12200 }
12201 #endif
12202
12203 return GetQuantity() * GetConfigWeightModified();
12204 }
12205 else if (HasEnergyManager())
12206 {
12207 #ifdef DEVELOPER
12208 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12209 {
12210 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12211 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12212 }
12213 #endif
12214 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12215 }
12216 else
12217 {
12218 #ifdef DEVELOPER
12219 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12220 {
12221 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12222 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12223 }
12224 #endif
12225 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12226 }
12227 }
12228
12231 {
12232 int item_count = 0;
12234
12235 if (GetInventory().GetCargo() != NULL)
12236 {
12237 item_count = GetInventory().GetCargo().GetItemCount();
12238 }
12239
12240 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12241 {
12242 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12243 if (item)
12244 item_count += item.GetNumberOfItems();
12245 }
12246 return item_count;
12247 }
12248
12251 {
12252 float weight = 0;
12253 float wetness = 1;
12254 if (include_wetness)
12257 {
12258 weight = wetness * m_ConfigWeight;
12259 }
12261 {
12262 weight = 1;
12263 }
12264 return weight;
12265 }
12266
12267
12268
12270 {
12271 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12272 {
12273 GameInventory inv = GetInventory();
12274 array<EntityAI> items = new array<EntityAI>;
12276 for (int i = 0; i < items.Count(); i++)
12277 {
12279 if (item)
12280 {
12282 }
12283 }
12284 }
12285 }
12286
12287
12288
12289
12291 {
12292 float energy = 0;
12293 if (HasEnergyManager())
12294 {
12295 energy = GetCompEM().GetEnergy();
12296 }
12297 return energy;
12298 }
12299
12300
12302 {
12303 super.OnEnergyConsumed();
12304
12306 }
12307
12309 {
12310 super.OnEnergyAdded();
12311
12313 }
12314
12315
12317 {
12318 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12319 {
12321 {
12322 float energy_0to1 = GetCompEM().GetEnergy0To1();
12324 }
12325 }
12326 }
12327
12328
12330 {
12331 return ConfigGetFloat("heatIsolation");
12332 }
12333
12335 {
12337 }
12338
12340 {
12341 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12342 if (
GetGame().ConfigIsExisting(paramPath))
12344
12345 return 0.0;
12346 }
12347
12349 {
12350 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12351 if (
GetGame().ConfigIsExisting(paramPath))
12353
12354 return 0.0;
12355 }
12356
12357 override void SetWet(
float value,
bool allow_client =
false)
12358 {
12359 if (!IsServerCheck(allow_client))
12360 return;
12361
12364
12366
12367 m_VarWet = Math.Clamp(value, min, max);
12368
12370 {
12373 }
12374 }
12375
12376 override void AddWet(
float value)
12377 {
12379 }
12380
12382 {
12384 }
12385
12387 {
12389 }
12390
12392 {
12394 }
12395
12397 {
12399 }
12400
12402 {
12404 }
12405
12406 override void OnWetChanged(
float newVal,
float oldVal)
12407 {
12410 if (newLevel != oldLevel)
12411 {
12413 }
12414 }
12415
12417 {
12418 SetWeightDirty();
12419 }
12420
12422 {
12423 return GetWetLevelInternal(
m_VarWet);
12424 }
12425
12426
12427
12429 {
12431 }
12432
12434 {
12436 }
12437
12439 {
12441 }
12442
12444 {
12446 }
12447
12448
12449
12451 {
12452 if (ConfigIsExisting("itemModelLength"))
12453 {
12454 return ConfigGetFloat("itemModelLength");
12455 }
12456 return 0;
12457 }
12458
12460 {
12461 if (ConfigIsExisting("itemAttachOffset"))
12462 {
12463 return ConfigGetFloat("itemAttachOffset");
12464 }
12465 return 0;
12466 }
12467
12468 override void SetCleanness(
int value,
bool allow_client =
false)
12469 {
12470 if (!IsServerCheck(allow_client))
12471 return;
12472
12474
12476
12479 }
12480
12482 {
12484 }
12485
12487 {
12488 return true;
12489 }
12490
12491
12492
12493
12495 {
12497 }
12498
12500 {
12502 }
12503
12504
12505
12506
12507 override void SetColor(
int r,
int g,
int b,
int a)
12508 {
12514 }
12516 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12517 {
12522 }
12523
12525 {
12527 }
12528
12531 {
12532 int r,g,b,a;
12534 r = r/255;
12535 g = g/255;
12536 b = b/255;
12537 a = a/255;
12538 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12539 }
12540
12541
12542
12543 override void SetLiquidType(
int value,
bool allow_client =
false)
12544 {
12545 if (!IsServerCheck(allow_client))
12546 return;
12547
12552 }
12553
12555 {
12556 return ConfigGetInt("varLiquidTypeInit");
12557 }
12558
12560 {
12562 }
12563
12565 {
12567 SetFrozen(false);
12568 }
12569
12572 {
12573 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12574 }
12575
12576
12579 {
12580 PlayerBase nplayer;
12581 if (PlayerBase.CastTo(nplayer, player))
12582 {
12584
12585 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12586 }
12587 }
12588
12589
12592 {
12593 PlayerBase nplayer;
12594 if (PlayerBase.CastTo(nplayer,player))
12595 {
12596
12597 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12598
12599 }
12600
12601
12602 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12603
12604
12605 if (HasEnergyManager())
12606 {
12607 GetCompEM().UpdatePlugState();
12608 }
12609 }
12610
12611
12613 {
12614 super.OnPlacementStarted(player);
12615
12617 }
12618
12619 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12620 {
12622 {
12623 m_AdminLog.OnPlacementComplete(player,
this);
12624 }
12625
12626 super.OnPlacementComplete(player, position, orientation);
12627 }
12628
12629
12630
12631
12632
12634 {
12636 {
12637 return true;
12638 }
12639 else
12640 {
12641 return false;
12642 }
12643 }
12644
12645
12647 {
12649 {
12651 }
12652 }
12653
12654
12656 {
12658 }
12659
12661 {
12663 }
12664
12665 override void InsertAgent(
int agent,
float count = 1)
12666 {
12667 if (count < 1)
12668 return;
12669
12671 }
12672
12675 {
12677 }
12678
12679
12681 {
12683 }
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12727 {
12729 return false;
12730 return true;
12731 }
12732
12734 {
12735
12737 }
12738
12739
12742 {
12743 super.CheckForRoofLimited(timeTresholdMS);
12744
12746 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12747 {
12748 m_PreviousRoofTestTime = time;
12749 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12750 }
12751 }
12752
12753
12755 {
12757 {
12758 return 0;
12759 }
12760
12761 if (GetInventory().GetAttachmentSlotsCount() != 0)
12762 {
12763 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12764 if (filter)
12765 return filter.GetProtectionLevel(type, false, system);
12766 else
12767 return 0;
12768 }
12769
12770 string subclassPath, entryName;
12771
12772 switch (type)
12773 {
12775 entryName = "biological";
12776 break;
12778 entryName = "chemical";
12779 break;
12780 default:
12781 entryName = "biological";
12782 break;
12783 }
12784
12785 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12786
12788 }
12789
12790
12791
12794 {
12795 if (!IsMagazine())
12797
12799 }
12800
12801
12802
12803
12804
12809 {
12810 return true;
12811 }
12812
12814 {
12816 }
12817
12818
12819
12820
12821
12823 {
12824 if (parent)
12825 {
12826 if (parent.IsInherited(DayZInfected))
12827 return true;
12828
12829 if (!parent.IsRuined())
12830 return true;
12831 }
12832
12833 return true;
12834 }
12835
12837 {
12838 if (!super.CanPutAsAttachment(parent))
12839 {
12840 return false;
12841 }
12842
12843 if (!IsRuined() && !parent.IsRuined())
12844 {
12845 return true;
12846 }
12847
12848 return false;
12849 }
12850
12852 {
12853
12854
12855
12856
12857 return super.CanReceiveItemIntoCargo(item);
12858 }
12859
12861 {
12862
12863
12864
12865
12866 GameInventory attachmentInv = attachment.GetInventory();
12868 {
12869 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12870 return false;
12871 }
12872
12873 InventoryLocation loc = new InventoryLocation();
12874 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12875 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12876 return false;
12877
12878 return super.CanReceiveAttachment(attachment, slotId);
12879 }
12880
12882 {
12883 if (!super.CanReleaseAttachment(attachment))
12884 return false;
12885
12886 return GetInventory().AreChildrenAccessible();
12887 }
12888
12889
12890
12891
12892
12893
12894
12895
12896
12897
12898
12899
12900
12901
12902
12903
12904
12905
12906
12907
12908
12910 {
12911 int id = muzzle_owner.GetMuzzleID();
12912 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12913
12914 if (WPOF_array)
12915 {
12916 for (int i = 0; i < WPOF_array.Count(); i++)
12917 {
12918 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12919
12920 if (WPOF)
12921 {
12922 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12923 }
12924 }
12925 }
12926 }
12927
12928
12930 {
12931 int id = muzzle_owner.GetMuzzleID();
12933
12934 if (WPOBE_array)
12935 {
12936 for (int i = 0; i < WPOBE_array.Count(); i++)
12937 {
12938 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12939
12940 if (WPOBE)
12941 {
12942 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12943 }
12944 }
12945 }
12946 }
12947
12948
12950 {
12951 int id = muzzle_owner.GetMuzzleID();
12952 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12953
12954 if (WPOOH_array)
12955 {
12956 for (int i = 0; i < WPOOH_array.Count(); i++)
12957 {
12958 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12959
12960 if (WPOOH)
12961 {
12962 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12963 }
12964 }
12965 }
12966 }
12967
12968
12970 {
12971 int id = muzzle_owner.GetMuzzleID();
12972 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12973
12974 if (WPOOH_array)
12975 {
12976 for (int i = 0; i < WPOOH_array.Count(); i++)
12977 {
12978 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12979
12980 if (WPOOH)
12981 {
12982 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12983 }
12984 }
12985 }
12986 }
12987
12988
12990 {
12991 int id = muzzle_owner.GetMuzzleID();
12992 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12993
12994 if (WPOOH_array)
12995 {
12996 for (int i = 0; i < WPOOH_array.Count(); i++)
12997 {
12998 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12999
13000 if (WPOOH)
13001 {
13002 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13003 }
13004 }
13005 }
13006 }
13007
13008
13009
13011 {
13013 {
13014 return true;
13015 }
13016
13017 return false;
13018 }
13019
13021 {
13023 {
13024 return true;
13025 }
13026
13027 return false;
13028 }
13029
13031 {
13033 {
13034 return true;
13035 }
13036
13037 return false;
13038 }
13039
13041 {
13042 return false;
13043 }
13044
13047 {
13048 return UATimeSpent.DEFAULT_DEPLOY;
13049 }
13050
13051
13052
13053
13055 {
13057 SetSynchDirty();
13058 }
13059
13061 {
13063 }
13064
13065
13067 {
13068 return false;
13069 }
13070
13073 {
13074 string att_type = "None";
13075
13076 if (ConfigIsExisting("soundAttType"))
13077 {
13078 att_type = ConfigGetString("soundAttType");
13079 }
13080
13082 }
13083
13085 {
13087 }
13088
13089
13090
13091
13092
13096
13098 {
13101
13103 }
13104
13105
13107 {
13109 return;
13110
13112
13115
13118
13119 SoundParameters params = new SoundParameters();
13123 }
13124
13125
13127 {
13129 return;
13130
13132 SetSynchDirty();
13133
13136 }
13137
13138
13140 {
13142 return;
13143
13145 SetSynchDirty();
13146
13149 }
13150
13152 {
13154 }
13155
13157 {
13159 }
13160
13163 {
13164 if (!
GetGame().IsDedicatedServer())
13165 {
13166 if (ConfigIsExisting("attachSoundSet"))
13167 {
13168 string cfg_path = "";
13169 string soundset = "";
13170 string type_name =
GetType();
13171
13174 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13175 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13176
13177 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13178 {
13179 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13180 {
13181 if (cfg_slot_array[i] == slot_type)
13182 {
13183 soundset = cfg_soundset_array[i];
13184 break;
13185 }
13186 }
13187 }
13188
13189 if (soundset != "")
13190 {
13191 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13193 }
13194 }
13195 }
13196 }
13197
13199 {
13200
13201 }
13202
13203 void OnApply(PlayerBase player);
13204
13206 {
13207 return 1.0;
13208 };
13209
13211 {
13213 }
13214
13216 {
13218 }
13219
13221
13223 {
13224 SetDynamicPhysicsLifeTime(0.01);
13226 }
13227
13229 {
13230 array<string> zone_names = new array<string>;
13231 GetDamageZones(zone_names);
13232 for (int i = 0; i < zone_names.Count(); i++)
13233 {
13234 SetHealthMax(zone_names.Get(i),"Health");
13235 }
13236 SetHealthMax("","Health");
13237 }
13238
13241 {
13242 float global_health = GetHealth01("","Health");
13243 array<string> zones = new array<string>;
13244 GetDamageZones(zones);
13245
13246 for (int i = 0; i < zones.Count(); i++)
13247 {
13248 SetHealth01(zones.Get(i),"Health",global_health);
13249 }
13250 }
13251
13254 {
13255 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13256 }
13257
13259 {
13260 if (!hasRootAsPlayer)
13261 {
13262 if (refParentIB)
13263 {
13264
13265 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13266 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13267
13268 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13269 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13270
13273 }
13274 else
13275 {
13276
13279 }
13280 }
13281 }
13282
13284 {
13286 {
13287 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13288 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13289 {
13290 float heatPermCoef = 1.0;
13292 while (ent)
13293 {
13294 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13295 ent = ent.GetHierarchyParent();
13296 }
13297
13298 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13299 }
13300 }
13301 }
13302
13304 {
13305
13306 EntityAI parent = GetHierarchyParent();
13307 if (!parent)
13308 {
13309 hasParent = false;
13310 hasRootAsPlayer = false;
13311 }
13312 else
13313 {
13314 hasParent = true;
13315 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13316 refParentIB =
ItemBase.Cast(parent);
13317 }
13318 }
13319
13320 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13321 {
13322
13323 }
13324
13326 {
13327
13328 return false;
13329 }
13330
13332 {
13333
13334
13335 return false;
13336 }
13337
13339 {
13340
13341 return false;
13342 }
13343
13346 {
13347 return !GetIsFrozen() &&
IsOpen();
13348 }
13349
13351 {
13352 bool hasParent = false, hasRootAsPlayer = false;
13354
13355 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13356 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13357
13358 if (wwtu || foodDecay)
13359 {
13363
13364 if (processWetness || processTemperature || processDecay)
13365 {
13367
13368 if (processWetness)
13369 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13370
13371 if (processTemperature)
13373
13374 if (processDecay)
13375 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13376 }
13377 }
13378 }
13379
13382 {
13384 }
13385
13387 {
13390
13391 return super.GetTemperatureFreezeThreshold();
13392 }
13393
13395 {
13398
13399 return super.GetTemperatureThawThreshold();
13400 }
13401
13403 {
13406
13407 return super.GetItemOverheatThreshold();
13408 }
13409
13411 {
13413 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13414
13415 return super.GetTemperatureFreezeTime();
13416 }
13417
13419 {
13421 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13422
13423 return super.GetTemperatureThawTime();
13424 }
13425
13430
13432 {
13433 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13434 }
13435
13437 {
13438 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13439 }
13440
13443 {
13445 }
13446
13448 {
13450 }
13451
13453 {
13455 }
13456
13459 {
13460 return null;
13461 }
13462
13465 {
13466 return false;
13467 }
13468
13470 {
13472 {
13475 if (!trg)
13476 {
13478 explosive = this;
13479 }
13480
13481 explosive.PairRemote(trg);
13483
13484 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13485 trg.SetPersistentPairID(persistentID);
13486 explosive.SetPersistentPairID(persistentID);
13487
13488 return true;
13489 }
13490 return false;
13491 }
13492
13495 {
13496 float ret = 1.0;
13499 ret *= GetHealth01();
13500
13501 return ret;
13502 }
13503
13504 #ifdef DEVELOPER
13505 override void SetDebugItem()
13506 {
13507 super.SetDebugItem();
13508 _itemBase = this;
13509 }
13510
13512 {
13513 string text = super.GetDebugText();
13514
13516 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13517
13518 return text;
13519 }
13520 #endif
13521
13523 {
13524 return true;
13525 }
13526
13528
13530
13532 {
13535 }
13536
13537
13545
13561}
13562
13564{
13566 if (entity)
13567 {
13568 bool is_item = entity.IsInherited(
ItemBase);
13569 if (is_item && full_quantity)
13570 {
13573 }
13574 }
13575 else
13576 {
13578 return NULL;
13579 }
13580 return entity;
13581}
13582
13584{
13585 if (item)
13586 {
13587 if (health > 0)
13588 item.SetHealth("", "", health);
13589
13590 if (item.CanHaveTemperature())
13591 {
13593 if (item.CanFreeze())
13594 item.SetFrozen(false);
13595 }
13596
13597 if (item.HasEnergyManager())
13598 {
13599 if (quantity >= 0)
13600 {
13601 item.GetCompEM().SetEnergy0To1(quantity);
13602 }
13603 else
13604 {
13606 }
13607 }
13608 else if (item.IsMagazine())
13609 {
13610 Magazine mag = Magazine.Cast(item);
13611 if (quantity >= 0)
13612 {
13613 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13614 }
13615 else
13616 {
13618 }
13619
13620 }
13621 else
13622 {
13623 if (quantity >= 0)
13624 {
13625 item.SetQuantityNormalized(quantity, false);
13626 }
13627 else
13628 {
13630 }
13631
13632 }
13633 }
13634}
13635
13636#ifdef DEVELOPER
13638#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.