8746{
8748 {
8749 return true;
8750 }
8751};
8752
8753
8754
8756{
8760
8762
8765
8766
8767
8768
8769
8778
8784
8789
8794
8815 protected bool m_IsResultOfSplit
8816
8818
8823
8824
8825
8827
8831
8832
8833
8835
8838
8839
8840
8846
8847
8855
8858
8859
8861
8862
8864
8865
8870
8871
8876
8877
8879
8880
8882 {
8887
8888 if (!
GetGame().IsDedicatedServer())
8889 {
8891 {
8893
8895 {
8897 }
8898 }
8899
8902 }
8903
8904 m_OldLocation = null;
8905
8907 {
8909 }
8910
8911 if (ConfigIsExisting("headSelectionsToHide"))
8912 {
8915 }
8916
8918 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8919 {
8921 }
8922
8924
8925 m_IsResultOfSplit = false;
8926
8928 }
8929
8931 {
8932 super.InitItemVariables();
8933
8939 m_Count = ConfigGetInt(
"count");
8940
8943
8948
8951
8956
8968
8972
8973
8976 if (ConfigIsExisting("canBeSplit"))
8977 {
8980 }
8981
8983 if (ConfigIsExisting("itemBehaviour"))
8985
8986
8989 RegisterNetSyncVariableInt("m_VarLiquidType");
8990 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8991
8992 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8993 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8994 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8995
8996 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8997 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8998 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8999 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
9000
9001 RegisterNetSyncVariableBool("m_IsBeingPlaced");
9002 RegisterNetSyncVariableBool("m_IsTakeable");
9003 RegisterNetSyncVariableBool("m_IsHologram");
9004
9007 {
9010 }
9011
9013
9015 if (ConfigIsExisting("temperaturePerQuantityWeight"))
9017
9018 }
9019
9021 {
9023 }
9024
9026 {
9029 {
9034 }
9035 }
9036
9037 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
9038 {
9040 {
9043 }
9044
9046 }
9047
9049 {
9055 }
9056
9058
9060 {
9062
9063 if (!action)
9064 {
9065 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
9066 return;
9067 }
9068
9070 if (!ai)
9071 {
9073 return;
9074 }
9075
9077 if (!action_array)
9078 {
9079 action_array = new array<ActionBase_Basic>;
9081 }
9082 if (LogManager.IsActionLogEnable())
9083 {
9084 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9085 }
9086
9087 if (action_array.Find(action) != -1)
9088 {
9089 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9090 }
9091 else
9092 {
9093 action_array.Insert(action);
9094 }
9095 }
9096
9098 {
9100 ActionBase action = player.GetActionManager().GetAction(actionName);
9103
9104 if (action_array)
9105 {
9106 action_array.RemoveItem(action);
9107 }
9108 }
9109
9110
9111
9113 {
9114 ActionOverrideData overrideData = new ActionOverrideData();
9118
9120 if (!actionMap)
9121 {
9124 }
9125
9126 actionMap.Insert(this.
Type(), overrideData);
9127
9128 }
9129
9131
9133
9134
9136 {
9139
9142
9143 string config_to_search = "CfgVehicles";
9144 string muzzle_owner_config;
9145
9147 {
9148 if (IsInherited(Weapon))
9149 config_to_search = "CfgWeapons";
9150
9151 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9152
9153 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9154
9156
9157 if (config_OnFire_subclass_count > 0)
9158 {
9159 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9160
9161 for (int i = 0; i < config_OnFire_subclass_count; i++)
9162 {
9163 string particle_class = "";
9165 string config_OnFire_entry = config_OnFire_class + particle_class;
9166 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9167 WPOF_array.Insert(WPOF);
9168 }
9169
9170
9172 }
9173 }
9174
9176 {
9177 config_to_search = "CfgWeapons";
9178 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9179
9180 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9181
9183
9184 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9185 {
9186 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9187
9188 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9189 {
9190 string particle_class2 = "";
9192 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9193 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9194 WPOBE_array.Insert(WPOBE);
9195 }
9196
9197
9199 }
9200 }
9201 }
9202
9203
9205 {
9208
9210 {
9211 string config_to_search = "CfgVehicles";
9212
9213 if (IsInherited(Weapon))
9214 config_to_search = "CfgWeapons";
9215
9216 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9217 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9218
9219 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9220 {
9221
9223
9225 {
9227 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9229 return;
9230 }
9231
9234
9235
9236
9238 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9239
9240 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9241 {
9242 string particle_class = "";
9244 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9246
9247 if (entry_type == CT_CLASS)
9248 {
9249 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9250 WPOOH_array.Insert(WPOF);
9251 }
9252 }
9253
9254
9256 }
9257 }
9258 }
9259
9261 {
9263 }
9264
9266 {
9268 {
9270
9273
9276
9277 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9278 }
9279 }
9280
9282 {
9284 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9285
9287 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9288
9290 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9291
9293 {
9295 }
9296 }
9297
9299 {
9301 }
9302
9304 {
9307 else
9309
9311 {
9314 }
9315 else
9316 {
9319
9322 }
9323
9325 }
9326
9328 {
9330 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9331 }
9332
9334 {
9336 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9338 }
9339
9341 {
9343 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9344 }
9345
9347 {
9350
9351 OverheatingParticle OP = new OverheatingParticle();
9356
9358 }
9359
9361 {
9364
9365 return -1;
9366 }
9367
9369 {
9371 {
9374
9375 for (int i = count; i > 0; --i)
9376 {
9377 int id = i - 1;
9380
9383
9384 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9385 {
9386 if (p)
9387 {
9390 }
9391 }
9392 }
9393 }
9394 }
9395
9397 {
9399 {
9401 {
9402 int id = i - 1;
9404
9405 if (OP)
9406 {
9408
9409 if (p)
9410 {
9412 }
9413
9414 delete OP;
9415 }
9416 }
9417
9420 }
9421 }
9422
9425 {
9426 return 0.0;
9427 }
9428
9429
9431 {
9432 return 250;
9433 }
9434
9436 {
9437 return 0;
9438 }
9439
9442 {
9444 return true;
9445
9446 return false;
9447 }
9448
9451 {
9454
9456 {
9458 }
9459 else
9460 {
9461
9463 }
9464
9466 }
9467
9474 {
9475 return -1;
9476 }
9477
9478
9479
9480
9482 {
9484 {
9486 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9487
9488 if (r_index >= 0)
9489 {
9490 InventoryLocation r_il = new InventoryLocation;
9491 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9492
9493 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9496 {
9497 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9498 }
9500 {
9501 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9502 }
9503
9504 }
9505
9506 player.GetHumanInventory().ClearUserReservedLocation(this);
9507 }
9508
9511 }
9512
9513
9514
9515
9517 {
9518 return ItemBase.m_DebugActionsMask;
9519 }
9520
9522 {
9523 return ItemBase.m_DebugActionsMask & mask;
9524 }
9525
9527 {
9528 ItemBase.m_DebugActionsMask = mask;
9529 }
9530
9532 {
9533 ItemBase.m_DebugActionsMask |= mask;
9534 }
9535
9537 {
9538 ItemBase.m_DebugActionsMask &= ~mask;
9539 }
9540
9542 {
9544 {
9546 }
9547 else
9548 {
9550 }
9551 }
9552
9553
9555 {
9556 if (GetEconomyProfile())
9557 {
9558 float q_max = GetEconomyProfile().GetQuantityMax();
9559 if (q_max > 0)
9560 {
9561 float q_min = GetEconomyProfile().GetQuantityMin();
9562 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
9563
9565 {
9566 ComponentEnergyManager comp = GetCompEM();
9568 {
9570 }
9571 }
9573 {
9575
9576 }
9577
9578 }
9579 }
9580 }
9581
9584 {
9585 EntityAI parent = GetHierarchyParent();
9586
9587 if (parent)
9588 {
9589 InventoryLocation inventory_location_to_lock = new InventoryLocation;
9590 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
9591 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
9592 }
9593 }
9594
9597 {
9598 EntityAI parent = GetHierarchyParent();
9599
9600 if (parent)
9601 {
9602 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
9603 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
9604 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
9605 }
9606 }
9607
9609 {
9610
9611
9612
9613
9615
9617 {
9618 if (ScriptInputUserData.CanStoreInputUserData())
9619 {
9620 ScriptInputUserData ctx = new ScriptInputUserData;
9626 ctx.
Write(use_stack_max);
9629
9631 {
9632 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
9633 }
9634 }
9635 }
9636 else if (!
GetGame().IsMultiplayer())
9637 {
9639 }
9640 }
9641
9643 {
9645 }
9646
9648 {
9650 }
9651
9653 {
9655 }
9656
9658 {
9659
9660 return false;
9661 }
9662
9664 {
9665 return false;
9666 }
9667
9671 {
9672 return false;
9673 }
9674
9676 {
9677 return "";
9678 }
9679
9681
9683 {
9684 return false;
9685 }
9686
9688 {
9689 return true;
9690 }
9691
9692
9693
9695 {
9696 return true;
9697 }
9698
9700 {
9701 return true;
9702 }
9703
9705 {
9706 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9708 }
9709
9711 {
9713 }
9714
9716 {
9718 if (!is_being_placed)
9720 SetSynchDirty();
9721 }
9722
9723
9725
9727 {
9729 }
9730
9732 {
9734 }
9735
9737 {
9738 return 1;
9739 }
9740
9742 {
9743 return false;
9744 }
9745
9747 {
9749 SetSynchDirty();
9750 }
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9787 {
9788 super.OnMovedInsideCargo(container);
9789
9790 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9791 }
9792
9793 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9794 {
9795 super.EEItemLocationChanged(oldLoc,newLoc);
9796
9797 PlayerBase new_player = null;
9798 PlayerBase old_player = null;
9799
9800 if (newLoc.GetParent())
9801 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9802
9803 if (oldLoc.GetParent())
9804 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9805
9807 {
9808 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9809
9810 if (r_index >= 0)
9811 {
9812 InventoryLocation r_il = new InventoryLocation;
9813 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9814
9815 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9818 {
9819 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9820 }
9822 {
9823 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9824 }
9825
9826 }
9827 }
9828
9830 {
9831 if (new_player)
9832 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9833
9834 if (new_player == old_player)
9835 {
9836
9837 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9838 {
9840 {
9841 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9842 {
9843 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9844 }
9845 }
9846 else
9847 {
9848 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9849 }
9850 }
9851
9852 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9853 {
9854 int type = oldLoc.GetType();
9856 {
9857 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9858 }
9860 {
9861 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9862 }
9863 }
9864 if (!m_OldLocation)
9865 {
9866 m_OldLocation = new InventoryLocation;
9867 }
9868 m_OldLocation.Copy(oldLoc);
9869 }
9870 else
9871 {
9872 if (m_OldLocation)
9873 {
9874 m_OldLocation.Reset();
9875 }
9876 }
9877
9879 }
9880 else
9881 {
9882 if (new_player)
9883 {
9884 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9885 if (res_index >= 0)
9886 {
9887 InventoryLocation il = new InventoryLocation;
9888 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9890 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9893 {
9894 il.
GetParent().GetOnReleaseLock().Invoke(it);
9895 }
9897 {
9899 }
9900
9901 }
9902 }
9904 {
9905
9907 }
9908
9909 if (m_OldLocation)
9910 {
9911 m_OldLocation.Reset();
9912 }
9913 }
9914 }
9915
9916 override void EOnContact(IEntity other, Contact extra)
9917 {
9919 {
9920 int liquidType = -1;
9922 if (impactSpeed > 0.0)
9923 {
9925 #ifndef SERVER
9927 #else
9929 SetSynchDirty();
9930 #endif
9932 }
9933 }
9934
9935 #ifdef SERVER
9936 if (GetCompEM() && GetCompEM().IsPlugged())
9937 {
9938 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9939 GetCompEM().UnplugThis();
9940 }
9941 #endif
9942 }
9943
9945
9947 {
9949 }
9950
9952 {
9953
9954 }
9955
9957 {
9958 super.OnItemLocationChanged(old_owner, new_owner);
9959
9960 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9961 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9962
9963 if (!relatedPlayer && playerNew)
9964 relatedPlayer = playerNew;
9965
9966 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9967 {
9969 if (actionMgr)
9970 {
9971 ActionBase currentAction = actionMgr.GetRunningAction();
9972 if (currentAction)
9974 }
9975 }
9976
9977 Man ownerPlayerOld = null;
9978 Man ownerPlayerNew = null;
9979
9980 if (old_owner)
9981 {
9982 if (old_owner.
IsMan())
9983 {
9984 ownerPlayerOld = Man.Cast(old_owner);
9985 }
9986 else
9987 {
9988 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9989 }
9990 }
9991 else
9992 {
9994 {
9996
9997 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9998 {
9999 GetCompEM().UnplugThis();
10000 }
10001 }
10002 }
10003
10004 if (new_owner)
10005 {
10006 if (new_owner.
IsMan())
10007 {
10008 ownerPlayerNew = Man.Cast(new_owner);
10009 }
10010 else
10011 {
10012 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
10013 }
10014 }
10015
10016 if (ownerPlayerOld != ownerPlayerNew)
10017 {
10018 if (ownerPlayerOld)
10019 {
10020 array<EntityAI> subItemsExit = new array<EntityAI>;
10022 for (int i = 0; i < subItemsExit.Count(); i++)
10023 {
10026 }
10027 }
10028
10029 if (ownerPlayerNew)
10030 {
10031 array<EntityAI> subItemsEnter = new array<EntityAI>;
10033 for (int j = 0; j < subItemsEnter.Count(); j++)
10034 {
10037 }
10038 }
10039 }
10040 else if (ownerPlayerNew != null)
10041 {
10042 PlayerBase nplayer;
10043 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
10044 {
10045 array<EntityAI> subItemsUpdate = new array<EntityAI>;
10047 for (int k = 0; k < subItemsUpdate.Count(); k++)
10048 {
10050 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
10051 }
10052 }
10053 }
10054
10055 if (old_owner)
10056 old_owner.OnChildItemRemoved(this);
10057 if (new_owner)
10058 new_owner.OnChildItemReceived(this);
10059 }
10060
10061
10063 {
10064 super.EEDelete(parent);
10065 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
10066 if (player)
10067 {
10069
10070 if (player.IsAlive())
10071 {
10072 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10073 if (r_index >= 0)
10074 {
10075 InventoryLocation r_il = new InventoryLocation;
10076 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10077
10078 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10081 {
10082 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10083 }
10085 {
10086 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10087 }
10088
10089 }
10090
10091 player.RemoveQuickBarEntityShortcut(this);
10092 }
10093 }
10094 }
10095
10097 {
10098 super.EEKilled(killer);
10099
10102 {
10103 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10104 {
10105 if (IsMagazine())
10106 {
10107 if (Magazine.Cast(this).GetAmmoCount() > 0)
10108 {
10110 }
10111 }
10112 else
10113 {
10115 }
10116 }
10117 }
10118 }
10119
10121 {
10122 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10123
10124 super.OnWasAttached(parent, slot_id);
10125
10128
10130 }
10131
10133 {
10134 super.OnWasDetached(parent, slot_id);
10135
10138 }
10139
10141 {
10142 int idx;
10145
10146 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10147 if (inventory_slots.Count() < 1)
10148 {
10149 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10150 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10151 }
10152 else
10153 {
10154 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10155 }
10156
10157 idx = inventory_slots.Find(slot);
10158 if (idx < 0)
10159 return "";
10160
10161 return attach_types.Get(idx);
10162 }
10163
10165 {
10166 int idx = -1;
10167 string slot;
10168
10171
10172 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10173 if (inventory_slots.Count() < 1)
10174 {
10175 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10176 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10177 }
10178 else
10179 {
10180 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10181 if (detach_types.Count() < 1)
10182 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10183 }
10184
10185 for (int i = 0; i < inventory_slots.Count(); i++)
10186 {
10187 slot = inventory_slots.Get(i);
10188 }
10189
10190 if (slot != "")
10191 {
10192 if (detach_types.Count() == 1)
10193 idx = 0;
10194 else
10195 idx = inventory_slots.Find(slot);
10196 }
10197 if (idx < 0)
10198 return "";
10199
10200 return detach_types.Get(idx);
10201 }
10202
10204 {
10205
10207
10208
10209 float min_time = 1;
10210 float max_time = 3;
10211 float delay = Math.RandomFloat(min_time, max_time);
10212
10213 explode_timer.Run(delay, this, "DoAmmoExplosion");
10214 }
10215
10217 {
10218 Magazine magazine = Magazine.Cast(this);
10219 int pop_sounds_count = 6;
10220 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10221
10222
10223 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10224 string sound_name = pop_sounds[ sound_idx ];
10226
10227
10228 magazine.ServerAddAmmoCount(-1);
10229
10230
10231 float min_temp_to_explode = 100;
10232
10233 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10234 {
10236 }
10237 }
10238
10239
10240 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10241 {
10242 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10243
10244 const int CHANCE_DAMAGE_CARGO = 4;
10245 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10246 const int CHANCE_DAMAGE_NOTHING = 2;
10247
10249 {
10250 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10251 int chances;
10252 int rnd;
10253
10254 if (GetInventory().GetCargo())
10255 {
10256 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10257 rnd = Math.RandomInt(0,chances);
10258
10259 if (rnd < CHANCE_DAMAGE_CARGO)
10260 {
10262 }
10263 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10264 {
10266 }
10267 }
10268 else
10269 {
10270 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10271 rnd = Math.RandomInt(0,chances);
10272
10273 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10274 {
10276 }
10277 }
10278 }
10279 }
10280
10282 {
10283 if (GetInventory().GetCargo())
10284 {
10285 int item_count = GetInventory().GetCargo().GetItemCount();
10286 if (item_count > 0)
10287 {
10288 int random_pick = Math.RandomInt(0, item_count);
10290 if (!item.IsExplosive())
10291 {
10292 item.AddHealth("","",damage);
10293 return true;
10294 }
10295 }
10296 }
10297 return false;
10298 }
10299
10301 {
10302 int attachment_count = GetInventory().AttachmentCount();
10303 if (attachment_count > 0)
10304 {
10305 int random_pick = Math.RandomInt(0, attachment_count);
10306 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10307 if (!attachment.IsExplosive())
10308 {
10309 attachment.AddHealth("","",damage);
10310 return true;
10311 }
10312 }
10313 return false;
10314 }
10315
10317 {
10319 }
10320
10322 {
10324 return GetInventory().CanRemoveEntity();
10325
10326 return false;
10327 }
10328
10330 {
10332 return;
10333
10335 {
10336 if (ScriptInputUserData.CanStoreInputUserData())
10337 {
10338 ScriptInputUserData ctx = new ScriptInputUserData;
10343 ctx.
Write(destination_entity);
10345 ctx.
Write(slot_id);
10347 }
10348 }
10349 else if (!
GetGame().IsMultiplayer())
10350 {
10352 }
10353 }
10354
10356 {
10358 return;
10359
10360 float split_quantity_new;
10364 InventoryLocation loc = new InventoryLocation;
10365
10366 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10367 {
10369 split_quantity_new = stack_max;
10370 else
10372
10373 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10374 if (new_item)
10375 {
10376 new_item.SetResultOfSplit(true);
10377 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10379 new_item.SetQuantity(split_quantity_new);
10380 }
10381 }
10382 else if (destination_entity && slot_id == -1)
10383 {
10384 if (quantity > stack_max)
10385 split_quantity_new = stack_max;
10386 else
10387 split_quantity_new = quantity;
10388
10390 {
10393 }
10394
10395 if (new_item)
10396 {
10397 new_item.SetResultOfSplit(true);
10398 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10400 new_item.SetQuantity(split_quantity_new);
10401 }
10402 }
10403 else
10404 {
10405 if (stack_max != 0)
10406 {
10408 {
10410 }
10411
10412 if (split_quantity_new == 0)
10413 {
10414 if (!
GetGame().IsMultiplayer())
10415 player.PhysicalPredictiveDropItem(this);
10416 else
10417 player.ServerDropEntity(this);
10418 return;
10419 }
10420
10422
10423 if (new_item)
10424 {
10425 new_item.SetResultOfSplit(true);
10426 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10428 new_item.SetQuantity(stack_max);
10429 new_item.PlaceOnSurface();
10430 }
10431 }
10432 }
10433 }
10434
10436 {
10438 return;
10439
10440 float split_quantity_new;
10444 InventoryLocation loc = new InventoryLocation;
10445
10446 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10447 {
10449 split_quantity_new = stack_max;
10450 else
10452
10453 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10454 if (new_item)
10455 {
10456 new_item.SetResultOfSplit(true);
10457 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10459 new_item.SetQuantity(split_quantity_new);
10460 }
10461 }
10462 else if (destination_entity && slot_id == -1)
10463 {
10464 if (quantity > stack_max)
10465 split_quantity_new = stack_max;
10466 else
10467 split_quantity_new = quantity;
10468
10470 {
10473 }
10474
10475 if (new_item)
10476 {
10477 new_item.SetResultOfSplit(true);
10478 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10480 new_item.SetQuantity(split_quantity_new);
10481 }
10482 }
10483 else
10484 {
10485 if (stack_max != 0)
10486 {
10488 {
10490 }
10491
10493
10494 if (new_item)
10495 {
10496 new_item.SetResultOfSplit(true);
10497 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10499 new_item.SetQuantity(stack_max);
10500 new_item.PlaceOnSurface();
10501 }
10502 }
10503 }
10504 }
10505
10507 {
10509 return;
10510
10512 {
10513 if (ScriptInputUserData.CanStoreInputUserData())
10514 {
10515 ScriptInputUserData ctx = new ScriptInputUserData;
10520 dst.WriteToContext(ctx);
10522 }
10523 }
10524 else if (!
GetGame().IsMultiplayer())
10525 {
10527 }
10528 }
10529
10531 {
10533 return;
10534
10536 {
10537 if (ScriptInputUserData.CanStoreInputUserData())
10538 {
10539 ScriptInputUserData ctx = new ScriptInputUserData;
10544 ctx.
Write(destination_entity);
10550 }
10551 }
10552 else if (!
GetGame().IsMultiplayer())
10553 {
10555 }
10556 }
10557
10559 {
10561 }
10562
10564 {
10566 return this;
10567
10569 float split_quantity_new;
10571 if (dst.IsValid())
10572 {
10573 int slot_id = dst.GetSlot();
10575
10576 if (quantity > stack_max)
10577 split_quantity_new = stack_max;
10578 else
10579 split_quantity_new = quantity;
10580
10582
10583 if (new_item)
10584 {
10585 new_item.SetResultOfSplit(true);
10586 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10589 }
10590
10591 return new_item;
10592 }
10593
10594 return null;
10595 }
10596
10598 {
10600 return;
10601
10603 float split_quantity_new;
10605 if (destination_entity)
10606 {
10608 if (quantity > stackable)
10609 split_quantity_new = stackable;
10610 else
10611 split_quantity_new = quantity;
10612
10613 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
10614 if (new_item)
10615 {
10616 new_item.SetResultOfSplit(true);
10617 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10619 new_item.SetQuantity(split_quantity_new);
10620 }
10621 }
10622 }
10623
10625 {
10627 return;
10628
10630 {
10631 if (ScriptInputUserData.CanStoreInputUserData())
10632 {
10633 ScriptInputUserData ctx = new ScriptInputUserData;
10638 ItemBase destination_entity =
this;
10639 ctx.
Write(destination_entity);
10643 }
10644 }
10645 else if (!
GetGame().IsMultiplayer())
10646 {
10648 }
10649 }
10650
10652 {
10654 return;
10655
10657 float split_quantity_new;
10659 if (player)
10660 {
10662 if (quantity > stackable)
10663 split_quantity_new = stackable;
10664 else
10665 split_quantity_new = quantity;
10666
10667 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10668 new_item =
ItemBase.Cast(in_hands);
10669 if (new_item)
10670 {
10671 new_item.SetResultOfSplit(true);
10672 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10674 new_item.SetQuantity(split_quantity_new);
10675 }
10676 }
10677 }
10678
10680 {
10682 return;
10683
10685 float split_quantity_new = Math.Floor(quantity * 0.5);
10686
10688
10689 if (new_item)
10690 {
10691 if (new_item.GetQuantityMax() < split_quantity_new)
10692 {
10693 split_quantity_new = new_item.GetQuantityMax();
10694 }
10695
10696 new_item.SetResultOfSplit(true);
10697 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10698
10700 {
10703 }
10704 else
10705 {
10708 }
10709 }
10710 }
10711
10713 {
10715 return;
10716
10718 float split_quantity_new = Math.Floor(quantity / 2);
10719
10720 InventoryLocation invloc = new InventoryLocation;
10722
10724 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10725
10726 if (new_item)
10727 {
10728 if (new_item.GetQuantityMax() < split_quantity_new)
10729 {
10730 split_quantity_new = new_item.GetQuantityMax();
10731 }
10733 {
10736 }
10737 else
10738 {
10741 }
10742 }
10743 }
10744
10747 {
10748 SetWeightDirty();
10750
10751 if (parent)
10752 parent.OnAttachmentQuantityChangedEx(this, delta);
10753
10755 {
10757 {
10759 }
10761 {
10762 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10764 }
10765 }
10766
10767 }
10768
10771 {
10772
10773 }
10774
10777 {
10779 }
10780
10782 {
10783 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10784
10786 {
10787 if (newLevel == GameConstants.STATE_RUINED)
10788 {
10790 EntityAI parent = GetHierarchyParent();
10791 if (parent && parent.IsFireplace())
10792 {
10793 CargoBase cargo = GetInventory().GetCargo();
10794 if (cargo)
10795 {
10797 {
10799 }
10800 }
10801 }
10802 }
10803
10805 {
10806
10808 return;
10809 }
10810
10811 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10812 {
10814 }
10815 }
10816 }
10817
10818
10820 {
10821 super.OnRightClick();
10822
10824 {
10826 {
10827 if (ScriptInputUserData.CanStoreInputUserData())
10828 {
10829 vector m4[4];
10831
10832 EntityAI root = GetHierarchyRoot();
10833
10834 InventoryLocation dst = new InventoryLocation;
10836 {
10837 if (root)
10838 {
10839 root.GetTransform(m4);
10841 }
10842 else
10843 GetInventory().GetCurrentInventoryLocation(dst);
10844 }
10845 else
10846 {
10848
10849
10850 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10851 {
10852 if (root)
10853 {
10854 root.GetTransform(m4);
10856 }
10857 else
10858 GetInventory().GetCurrentInventoryLocation(dst);
10859 }
10860 else
10861 {
10862 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10863 }
10864 }
10865
10866 ScriptInputUserData ctx = new ScriptInputUserData;
10874 }
10875 }
10876 else if (!
GetGame().IsMultiplayer())
10877 {
10879 }
10880 }
10881 }
10882
10883 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10884 {
10885
10886 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10887 return false;
10888
10889 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10890 return false;
10891
10892
10894 return false;
10895
10896
10897 Magazine mag = Magazine.Cast(this);
10898 if (mag)
10899 {
10900 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10901 return false;
10902
10903 if (stack_max_limit)
10904 {
10905 Magazine other_mag = Magazine.Cast(other_item);
10906 if (other_item)
10907 {
10908 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10909 return false;
10910 }
10911
10912 }
10913 }
10914 else
10915 {
10916
10918 return false;
10919
10921 return false;
10922 }
10923
10924 PlayerBase player = null;
10925 if (CastTo(player, GetHierarchyRootPlayer()))
10926 {
10927 if (player.GetInventory().HasAttachment(this))
10928 return false;
10929
10930 if (player.IsItemsToDelete())
10931 return false;
10932 }
10933
10934 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10935 return false;
10936
10937 int slotID;
10939 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10940 return false;
10941
10942 return true;
10943 }
10944
10946 {
10948 }
10949
10951 {
10952 return m_IsResultOfSplit;
10953 }
10954
10956 {
10957 m_IsResultOfSplit = value;
10958 }
10959
10961 {
10963 }
10964
10966 {
10967 float other_item_quantity = other_item.GetQuantity();
10968 float this_free_space;
10969
10971
10973
10974 if (other_item_quantity > this_free_space)
10975 {
10976 return this_free_space;
10977 }
10978 else
10979 {
10980 return other_item_quantity;
10981 }
10982 }
10983
10985 {
10987 }
10988
10990 {
10992 return;
10993
10994 if (!IsMagazine() && other_item)
10995 {
10997 if (quantity_used != 0)
10998 {
10999 float hp1 = GetHealth01("","");
11000 float hp2 = other_item.GetHealth01("","");
11001 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
11002 hpResult = hpResult / (
GetQuantity() + quantity_used);
11003
11004 hpResult *= GetMaxHealth();
11005 Math.Round(hpResult);
11006 SetHealth("", "Health", hpResult);
11007
11009 other_item.AddQuantity(-quantity_used);
11010 }
11011 }
11013 }
11014
11016 {
11017 #ifdef SERVER
11018 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
11019 GetHierarchyParent().IncreaseLifetimeUp();
11020 #endif
11021 };
11022
11024 {
11025 PlayerBase p = PlayerBase.Cast(player);
11026
11027 array<int> recipesIds = p.m_Recipes;
11028 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11029 if (moduleRecipesManager)
11030 {
11031 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
11032 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
11033 }
11034
11035 for (int i = 0;i < recipesIds.Count(); i++)
11036 {
11037 int key = recipesIds.Get(i);
11038 string recipeName = moduleRecipesManager.GetRecipeName(key);
11040 }
11041 }
11042
11043
11044 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
11045 {
11046 super.GetDebugActions(outputList);
11047
11048
11053
11054
11058
11062
11063
11066
11067
11069 {
11072 }
11073
11075
11078
11082 }
11083
11084
11085
11086
11088 {
11089 super.OnAction(action_id, player, ctx);
11090 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11091 {
11092 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11093 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11094 PlayerBase p = PlayerBase.Cast(player);
11095 if (
EActions.RECIPES_RANGE_START < 1000)
11096 {
11097 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11098 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11099 }
11100 }
11101 #ifndef SERVER
11102 else if (action_id ==
EActions.WATCH_PLAYER)
11103 {
11104 PluginDeveloper.SetDeveloperItemClientEx(player);
11105 }
11106 #endif
11108 {
11109 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11110 {
11111 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11112 OnDebugButtonPressServer(id + 1);
11113 }
11114
11115 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11116 {
11117 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11119 }
11120
11121 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11122 {
11123 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11125 }
11126
11127 else if (action_id ==
EActions.ADD_QUANTITY)
11128 {
11129 if (IsMagazine())
11130 {
11131 Magazine mag = Magazine.Cast(this);
11132 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11133 }
11134 else
11135 {
11137 }
11138
11139 if (m_EM)
11140 {
11141 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11142 }
11143
11144 }
11145
11146 else if (action_id ==
EActions.REMOVE_QUANTITY)
11147 {
11148 if (IsMagazine())
11149 {
11150 Magazine mag2 = Magazine.Cast(this);
11151 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11152 }
11153 else
11154 {
11156 }
11157 if (m_EM)
11158 {
11159 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11160 }
11161
11162 }
11163
11164 else if (action_id ==
EActions.SET_QUANTITY_0)
11165 {
11167
11168 if (m_EM)
11169 {
11170 m_EM.SetEnergy(0);
11171 }
11172 }
11173
11174 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11175 {
11177
11178 if (m_EM)
11179 {
11180 m_EM.SetEnergy(m_EM.GetEnergyMax());
11181 }
11182 }
11183
11184 else if (action_id ==
EActions.ADD_HEALTH)
11185 {
11186 AddHealth("","",GetMaxHealth("","Health")/5);
11187 }
11188 else if (action_id ==
EActions.REMOVE_HEALTH)
11189 {
11190 AddHealth("","",-GetMaxHealth("","Health")/5);
11191 }
11192 else if (action_id ==
EActions.DESTROY_HEALTH)
11193 {
11194 SetHealth01("","",0);
11195 }
11196 else if (action_id ==
EActions.WATCH_ITEM)
11197 {
11199 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11200 #ifdef DEVELOPER
11201 SetDebugDeveloper_item(this);
11202 #endif
11203 }
11204
11205 else if (action_id ==
EActions.ADD_TEMPERATURE)
11206 {
11207 AddTemperature(20);
11208
11209 }
11210
11211 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11212 {
11213 AddTemperature(-20);
11214
11215 }
11216
11217 else if (action_id ==
EActions.FLIP_FROZEN)
11218 {
11219 SetFrozen(!GetIsFrozen());
11220
11221 }
11222
11223 else if (action_id ==
EActions.ADD_WETNESS)
11224 {
11226
11227 }
11228
11229 else if (action_id ==
EActions.REMOVE_WETNESS)
11230 {
11232
11233 }
11234
11235 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11236 {
11239
11240
11241 }
11242
11243 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11244 {
11247 }
11248
11249 else if (action_id ==
EActions.MAKE_SPECIAL)
11250 {
11251 auto debugParams = DebugSpawnParams.WithPlayer(player);
11252 OnDebugSpawnEx(debugParams);
11253 }
11254
11255 else if (action_id ==
EActions.DELETE)
11256 {
11257 Delete();
11258 }
11259
11260 }
11261
11262
11263 return false;
11264 }
11265
11266
11267
11268
11272
11275
11276
11277
11279 {
11280 return false;
11281 }
11282
11283
11285 {
11286 return true;
11287 }
11288
11289
11291 {
11292 return true;
11293 }
11294
11295
11296
11298 {
11299 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11301 }
11302
11305 {
11306 return null;
11307 }
11308
11310 {
11311 return false;
11312 }
11313
11315 {
11316 return false;
11317 }
11318
11322
11323
11325 {
11326 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11327 return module_repairing.CanRepair(this, item_repair_kit);
11328 }
11329
11330
11331 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11332 {
11333 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11334 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11335 }
11336
11337
11339 {
11340
11341
11342
11343
11344
11345
11346
11347
11348 return 1;
11349 }
11350
11351
11352
11354 {
11356 }
11357
11358
11359
11361 {
11363 }
11364
11365
11374 {
11375 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11376
11377 if (player)
11378 {
11379 player.MessageStatus(text);
11380 }
11381 }
11382
11383
11392 {
11393 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11394
11395 if (player)
11396 {
11397 player.MessageAction(text);
11398 }
11399 }
11400
11401
11410 {
11411 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11412
11413 if (player)
11414 {
11415 player.MessageFriendly(text);
11416 }
11417 }
11418
11419
11428 {
11429 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11430
11431 if (player)
11432 {
11433 player.MessageImportant(text);
11434 }
11435 }
11436
11438 {
11439 return true;
11440 }
11441
11442
11443 override bool KindOf(
string tag)
11444 {
11445 bool found = false;
11446 string item_name = this.
GetType();
11449
11450 int array_size = item_tag_array.Count();
11451 for (int i = 0; i < array_size; i++)
11452 {
11453 if (item_tag_array.Get(i) == tag)
11454 {
11455 found = true;
11456 break;
11457 }
11458 }
11459 return found;
11460 }
11461
11462
11464 {
11465
11466 super.OnRPC(sender, rpc_type,ctx);
11467
11468
11469 switch (rpc_type)
11470 {
11471 #ifndef SERVER
11472 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11473 Param2<bool, string> p = new Param2<bool, string>(false, "");
11474
11476 return;
11477
11478 bool play = p.param1;
11479 string soundSet = p.param2;
11480
11481 if (play)
11482 {
11484 {
11486 {
11488 }
11489 }
11490 else
11491 {
11493 }
11494 }
11495 else
11496 {
11498 }
11499
11500 break;
11501 #endif
11502
11503 }
11504
11506 {
11508 }
11509 }
11510
11511
11512
11513
11515 {
11516 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11517 return plugin.GetID(
name);
11518 }
11519
11521 {
11522 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11523 return plugin.GetName(id);
11524 }
11525
11528 {
11529
11530
11531 int varFlags;
11532 if (!ctx.
Read(varFlags))
11533 return;
11534
11535 if (varFlags & ItemVariableFlags.FLOAT)
11536 {
11538 }
11539 }
11540
11542 {
11543
11544 super.SerializeNumericalVars(floats_out);
11545
11546
11547
11549 {
11551 }
11552
11554 {
11556 }
11557
11559 {
11561 }
11562
11564 {
11569 }
11570
11572 {
11574 }
11575 }
11576
11578 {
11579
11580 super.DeSerializeNumericalVars(floats);
11581
11582
11583 int index = 0;
11584 int mask = Math.Round(floats.Get(index));
11585
11586 index++;
11587
11589 {
11591 {
11593 }
11594 else
11595 {
11596 float quantity = floats.Get(index);
11597 SetQuantity(quantity,
true,
false,
false,
false);
11598 }
11599 index++;
11600 }
11601
11603 {
11604 float wet = floats.Get(index);
11606 index++;
11607 }
11608
11610 {
11611 int liquidtype = Math.Round(floats.Get(index));
11613 index++;
11614 }
11615
11617 {
11619 index++;
11621 index++;
11623 index++;
11625 index++;
11626 }
11627
11629 {
11630 int cleanness = Math.Round(floats.Get(index));
11632 index++;
11633 }
11634 }
11635
11637 {
11638 super.WriteVarsToCTX(ctx);
11639
11640
11642 {
11644 }
11645
11647 {
11649 }
11650
11652 {
11654 }
11655
11657 {
11658 int r,g,b,a;
11664 }
11665
11667 {
11669 }
11670 }
11671
11673 {
11674 if (!super.ReadVarsFromCTX(ctx,version))
11675 return false;
11676
11677 int intValue;
11678 float value;
11679
11680 if (version < 140)
11681 {
11682 if (!ctx.
Read(intValue))
11683 return false;
11684
11685 m_VariablesMask = intValue;
11686 }
11687
11689 {
11690 if (!ctx.
Read(value))
11691 return false;
11692
11694 {
11696 }
11697 else
11698 {
11700 }
11701 }
11702
11703 if (version < 140)
11704 {
11706 {
11707 if (!ctx.
Read(value))
11708 return false;
11709 SetTemperatureDirect(value);
11710 }
11711 }
11712
11714 {
11715 if (!ctx.
Read(value))
11716 return false;
11718 }
11719
11721 {
11722 if (!ctx.
Read(intValue))
11723 return false;
11725 }
11726
11728 {
11729 int r,g,b,a;
11731 return false;
11733 return false;
11735 return false;
11737 return false;
11738
11740 }
11741
11743 {
11744 if (!ctx.
Read(intValue))
11745 return false;
11747 }
11748
11749 if (version >= 138 && version < 140)
11750 {
11752 {
11753 if (!ctx.
Read(intValue))
11754 return false;
11755 SetFrozen(intValue);
11756 }
11757 }
11758
11759 return true;
11760 }
11761
11762
11764 {
11767 {
11769 }
11770
11771 if (!super.OnStoreLoad(ctx, version))
11772 {
11774 return false;
11775 }
11776
11777 if (version >= 114)
11778 {
11779 bool hasQuickBarIndexSaved;
11780
11781 if (!ctx.
Read(hasQuickBarIndexSaved))
11782 {
11784 return false;
11785 }
11786
11787 if (hasQuickBarIndexSaved)
11788 {
11789 int itmQBIndex;
11790
11791
11792 if (!ctx.
Read(itmQBIndex))
11793 {
11795 return false;
11796 }
11797
11798 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11799 if (itmQBIndex != -1 && parentPlayer)
11800 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11801 }
11802 }
11803 else
11804 {
11805
11806 PlayerBase player;
11807 int itemQBIndex;
11808 if (version ==
int.
MAX)
11809 {
11810 if (!ctx.
Read(itemQBIndex))
11811 {
11813 return false;
11814 }
11815 }
11816 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11817 {
11818
11819 if (!ctx.
Read(itemQBIndex))
11820 {
11822 return false;
11823 }
11824 if (itemQBIndex != -1 && player)
11825 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11826 }
11827 }
11828
11829 if (version < 140)
11830 {
11831
11832 if (!LoadVariables(ctx, version))
11833 {
11835 return false;
11836 }
11837 }
11838
11839
11841 {
11843 return false;
11844 }
11845 if (version >= 132)
11846 {
11848 if (raib)
11849 {
11851 {
11853 return false;
11854 }
11855 }
11856 }
11857
11859 return true;
11860 }
11861
11862
11863
11865 {
11866 super.OnStoreSave(ctx);
11867
11868 PlayerBase player;
11869 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11870 {
11872
11873 int itemQBIndex = -1;
11874 itemQBIndex = player.FindQuickBarEntityIndex(this);
11875 ctx.
Write(itemQBIndex);
11876 }
11877 else
11878 {
11880 }
11881
11883
11885 if (raib)
11886 {
11888 }
11889 }
11890
11891
11893 {
11894 super.AfterStoreLoad();
11895
11897 {
11899 }
11900
11902 {
11905 }
11906 }
11907
11909 {
11910 super.EEOnAfterLoad();
11911
11913 {
11915 }
11916
11919 }
11920
11922 {
11923 return false;
11924 }
11925
11926
11927
11929 {
11931 {
11932 #ifdef PLATFORM_CONSOLE
11933
11935 {
11937 if (menu)
11938 {
11940 }
11941 }
11942 #endif
11943 }
11944
11946 {
11949 }
11950
11952 {
11953 SetWeightDirty();
11955 }
11957 {
11960 }
11961
11963 {
11966 }
11968 {
11971 }
11972
11973 super.OnVariablesSynchronized();
11974 }
11975
11976
11977
11979 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11980 {
11981 if (!IsServerCheck(allow_client))
11982 return false;
11983
11985 return false;
11986
11989
11990 if (value <= (min + 0.001))
11991 value = min;
11992
11993 if (value == min)
11994 {
11995 if (destroy_config)
11996 {
11997 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11998 if (dstr)
11999 {
12001 this.Delete();
12002 return true;
12003 }
12004 }
12005 else if (destroy_forced)
12006 {
12008 this.Delete();
12009 return true;
12010 }
12011
12013 }
12014
12017
12019 {
12021
12022 if (delta)
12024 }
12025
12027
12028 return false;
12029 }
12030
12031
12033 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
12034 {
12036 }
12037
12039 {
12042 }
12043
12045 {
12048 }
12049
12052 {
12053 float value_clamped = Math.Clamp(value, 0, 1);
12055 SetQuantity(result, destroy_config, destroy_forced);
12056 }
12057
12058
12061 {
12063 }
12064
12066 {
12068 }
12069
12070
12071
12072
12073
12074
12075
12076
12077
12078
12080 {
12081 int slot = -1;
12082 if (GetInventory())
12083 {
12084 InventoryLocation il = new InventoryLocation;
12085 GetInventory().GetCurrentInventoryLocation(il);
12087 }
12088
12090 }
12091
12093 {
12094 float quantity_max = 0;
12095
12097 {
12098 if (attSlotID != -1)
12099 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12100
12101 if (quantity_max <= 0)
12103 }
12104
12105 if (quantity_max <= 0)
12107
12108 return quantity_max;
12109 }
12110
12112 {
12114 }
12115
12117 {
12119 }
12120
12121
12123 {
12125 }
12126
12128 {
12130 }
12131
12133 {
12135 }
12136
12137
12139 {
12140
12141 float weightEx = GetWeightEx();
12142 float special = GetInventoryAndCargoWeight();
12143 return weightEx - special;
12144 }
12145
12146
12148 {
12150 }
12151
12153 {
12155 {
12156 #ifdef DEVELOPER
12157 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12158 {
12159 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12161 }
12162 #endif
12163
12164 return GetQuantity() * GetConfigWeightModified();
12165 }
12166 else if (HasEnergyManager())
12167 {
12168 #ifdef DEVELOPER
12169 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12170 {
12171 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12172 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12173 }
12174 #endif
12175 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12176 }
12177 else
12178 {
12179 #ifdef DEVELOPER
12180 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12181 {
12182 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12183 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12184 }
12185 #endif
12186 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12187 }
12188 }
12189
12192 {
12193 int item_count = 0;
12195
12196 if (GetInventory().GetCargo() != NULL)
12197 {
12198 item_count = GetInventory().GetCargo().GetItemCount();
12199 }
12200
12201 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12202 {
12203 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12204 if (item)
12205 item_count += item.GetNumberOfItems();
12206 }
12207 return item_count;
12208 }
12209
12212 {
12213 float weight = 0;
12214 float wetness = 1;
12215 if (include_wetness)
12218 {
12219 weight = wetness * m_ConfigWeight;
12220 }
12222 {
12223 weight = 1;
12224 }
12225 return weight;
12226 }
12227
12228
12229
12231 {
12232 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12233 {
12234 GameInventory inv = GetInventory();
12235 array<EntityAI> items = new array<EntityAI>;
12237 for (int i = 0; i < items.Count(); i++)
12238 {
12240 if (item)
12241 {
12243 }
12244 }
12245 }
12246 }
12247
12248
12249
12250
12252 {
12253 float energy = 0;
12254 if (HasEnergyManager())
12255 {
12256 energy = GetCompEM().GetEnergy();
12257 }
12258 return energy;
12259 }
12260
12261
12263 {
12264 super.OnEnergyConsumed();
12265
12267 }
12268
12270 {
12271 super.OnEnergyAdded();
12272
12274 }
12275
12276
12278 {
12279 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12280 {
12282 {
12283 float energy_0to1 = GetCompEM().GetEnergy0To1();
12285 }
12286 }
12287 }
12288
12289
12291 {
12292 return ConfigGetFloat("heatIsolation");
12293 }
12294
12296 {
12298 }
12299
12301 {
12302 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12303 if (
GetGame().ConfigIsExisting(paramPath))
12305
12306 return 0.0;
12307 }
12308
12310 {
12311 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12312 if (
GetGame().ConfigIsExisting(paramPath))
12314
12315 return 0.0;
12316 }
12317
12318 override void SetWet(
float value,
bool allow_client =
false)
12319 {
12320 if (!IsServerCheck(allow_client))
12321 return;
12322
12325
12327
12328 m_VarWet = Math.Clamp(value, min, max);
12329
12331 {
12334 }
12335 }
12336
12337 override void AddWet(
float value)
12338 {
12340 }
12341
12343 {
12345 }
12346
12348 {
12350 }
12351
12353 {
12355 }
12356
12358 {
12360 }
12361
12363 {
12365 }
12366
12367 override void OnWetChanged(
float newVal,
float oldVal)
12368 {
12371 if (newLevel != oldLevel)
12372 {
12374 }
12375 }
12376
12378 {
12379 SetWeightDirty();
12380 }
12381
12383 {
12384 return GetWetLevelInternal(
m_VarWet);
12385 }
12386
12387
12388
12390 {
12392 }
12393
12395 {
12397 }
12398
12400 {
12402 }
12403
12405 {
12407 }
12408
12409
12410
12412 {
12413 if (ConfigIsExisting("itemModelLength"))
12414 {
12415 return ConfigGetFloat("itemModelLength");
12416 }
12417 return 0;
12418 }
12419
12421 {
12422 if (ConfigIsExisting("itemAttachOffset"))
12423 {
12424 return ConfigGetFloat("itemAttachOffset");
12425 }
12426 return 0;
12427 }
12428
12429 override void SetCleanness(
int value,
bool allow_client =
false)
12430 {
12431 if (!IsServerCheck(allow_client))
12432 return;
12433
12435
12437
12440 }
12441
12443 {
12445 }
12446
12448 {
12449 return true;
12450 }
12451
12452
12453
12454
12456 {
12458 }
12459
12461 {
12463 }
12464
12465
12466
12467
12468 override void SetColor(
int r,
int g,
int b,
int a)
12469 {
12475 }
12477 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12478 {
12483 }
12484
12486 {
12488 }
12489
12492 {
12493 int r,g,b,a;
12495 r = r/255;
12496 g = g/255;
12497 b = b/255;
12498 a = a/255;
12499 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12500 }
12501
12502
12503
12504 override void SetLiquidType(
int value,
bool allow_client =
false)
12505 {
12506 if (!IsServerCheck(allow_client))
12507 return;
12508
12513 }
12514
12516 {
12517 return ConfigGetInt("varLiquidTypeInit");
12518 }
12519
12521 {
12523 }
12524
12526 {
12528 SetFrozen(false);
12529 }
12530
12533 {
12534 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12535 }
12536
12537
12540 {
12541 PlayerBase nplayer;
12542 if (PlayerBase.CastTo(nplayer, player))
12543 {
12545
12546 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12547 }
12548 }
12549
12550
12553 {
12554 PlayerBase nplayer;
12555 if (PlayerBase.CastTo(nplayer,player))
12556 {
12557
12558 nplayer.SetEnableQuickBarEntityShortcut(this,false);
12559
12560 }
12561
12562
12563 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12564
12565
12566 if (HasEnergyManager())
12567 {
12568 GetCompEM().UpdatePlugState();
12569 }
12570 }
12571
12572
12574 {
12575 super.OnPlacementStarted(player);
12576
12578 }
12579
12580 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
12581 {
12583 {
12584 m_AdminLog.OnPlacementComplete(player,
this);
12585 }
12586
12587 super.OnPlacementComplete(player, position, orientation);
12588 }
12589
12590
12591
12592
12593
12595 {
12597 {
12598 return true;
12599 }
12600 else
12601 {
12602 return false;
12603 }
12604 }
12605
12606
12608 {
12610 {
12612 }
12613 }
12614
12615
12617 {
12619 }
12620
12622 {
12624 }
12625
12626 override void InsertAgent(
int agent,
float count = 1)
12627 {
12628 if (count < 1)
12629 return;
12630
12632 }
12633
12636 {
12638 }
12639
12640
12642 {
12644 }
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662
12663
12664
12665
12666
12667
12668
12669
12670
12671
12672
12673
12674
12675
12676
12677
12678
12679
12680
12681
12682
12683
12684
12685
12686
12688 {
12690 return false;
12691 return true;
12692 }
12693
12695 {
12696
12698 }
12699
12700
12703 {
12704 super.CheckForRoofLimited(timeTresholdMS);
12705
12707 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12708 {
12709 m_PreviousRoofTestTime = time;
12710 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12711 }
12712 }
12713
12714
12716 {
12718 {
12719 return 0;
12720 }
12721
12722 if (GetInventory().GetAttachmentSlotsCount() != 0)
12723 {
12724 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12725 if (filter)
12726 return filter.GetProtectionLevel(type, false, system);
12727 else
12728 return 0;
12729 }
12730
12731 string subclassPath, entryName;
12732
12733 switch (type)
12734 {
12736 entryName = "biological";
12737 break;
12739 entryName = "chemical";
12740 break;
12741 default:
12742 entryName = "biological";
12743 break;
12744 }
12745
12746 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12747
12749 }
12750
12751
12752
12755 {
12756 if (!IsMagazine())
12758
12760 }
12761
12762
12763
12764
12765
12770 {
12771 return true;
12772 }
12773
12775 {
12777 }
12778
12779
12780
12781
12782
12784 {
12785 if (parent)
12786 {
12787 if (parent.IsInherited(DayZInfected))
12788 return true;
12789
12790 if (!parent.IsRuined())
12791 return true;
12792 }
12793
12794 return true;
12795 }
12796
12798 {
12799 if (!super.CanPutAsAttachment(parent))
12800 {
12801 return false;
12802 }
12803
12804 if (!IsRuined() && !parent.IsRuined())
12805 {
12806 return true;
12807 }
12808
12809 return false;
12810 }
12811
12813 {
12814
12815
12816
12817
12818 return super.CanReceiveItemIntoCargo(item);
12819 }
12820
12822 {
12823
12824
12825
12826
12827 GameInventory attachmentInv = attachment.GetInventory();
12829 {
12830 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12831 return false;
12832 }
12833
12834 InventoryLocation loc = new InventoryLocation();
12835 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12836 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12837 return false;
12838
12839 return super.CanReceiveAttachment(attachment, slotId);
12840 }
12841
12843 {
12844 if (!super.CanReleaseAttachment(attachment))
12845 return false;
12846
12847 return GetInventory().AreChildrenAccessible();
12848 }
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12871 {
12872 int id = muzzle_owner.GetMuzzleID();
12873 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12874
12875 if (WPOF_array)
12876 {
12877 for (int i = 0; i < WPOF_array.Count(); i++)
12878 {
12879 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12880
12881 if (WPOF)
12882 {
12883 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12884 }
12885 }
12886 }
12887 }
12888
12889
12891 {
12892 int id = muzzle_owner.GetMuzzleID();
12894
12895 if (WPOBE_array)
12896 {
12897 for (int i = 0; i < WPOBE_array.Count(); i++)
12898 {
12899 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12900
12901 if (WPOBE)
12902 {
12903 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12904 }
12905 }
12906 }
12907 }
12908
12909
12911 {
12912 int id = muzzle_owner.GetMuzzleID();
12913 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12914
12915 if (WPOOH_array)
12916 {
12917 for (int i = 0; i < WPOOH_array.Count(); i++)
12918 {
12919 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12920
12921 if (WPOOH)
12922 {
12923 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12924 }
12925 }
12926 }
12927 }
12928
12929
12931 {
12932 int id = muzzle_owner.GetMuzzleID();
12933 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12934
12935 if (WPOOH_array)
12936 {
12937 for (int i = 0; i < WPOOH_array.Count(); i++)
12938 {
12939 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12940
12941 if (WPOOH)
12942 {
12943 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12944 }
12945 }
12946 }
12947 }
12948
12949
12951 {
12952 int id = muzzle_owner.GetMuzzleID();
12953 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12954
12955 if (WPOOH_array)
12956 {
12957 for (int i = 0; i < WPOOH_array.Count(); i++)
12958 {
12959 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12960
12961 if (WPOOH)
12962 {
12963 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12964 }
12965 }
12966 }
12967 }
12968
12969
12970
12972 {
12974 {
12975 return true;
12976 }
12977
12978 return false;
12979 }
12980
12982 {
12984 {
12985 return true;
12986 }
12987
12988 return false;
12989 }
12990
12992 {
12994 {
12995 return true;
12996 }
12997
12998 return false;
12999 }
13000
13002 {
13003 return false;
13004 }
13005
13008 {
13009 return UATimeSpent.DEFAULT_DEPLOY;
13010 }
13011
13012
13013
13014
13016 {
13018 SetSynchDirty();
13019 }
13020
13022 {
13024 }
13025
13026
13028 {
13029 return false;
13030 }
13031
13034 {
13035 string att_type = "None";
13036
13037 if (ConfigIsExisting("soundAttType"))
13038 {
13039 att_type = ConfigGetString("soundAttType");
13040 }
13041
13043 }
13044
13046 {
13048 }
13049
13050
13051
13052
13053
13057
13059 {
13062
13064 }
13065
13066
13068 {
13070 return;
13071
13073
13076
13079
13080 SoundParameters params = new SoundParameters();
13084 }
13085
13086
13088 {
13090 return;
13091
13093 SetSynchDirty();
13094
13097 }
13098
13099
13101 {
13103 return;
13104
13106 SetSynchDirty();
13107
13110 }
13111
13113 {
13115 }
13116
13118 {
13120 }
13121
13124 {
13125 if (!
GetGame().IsDedicatedServer())
13126 {
13127 if (ConfigIsExisting("attachSoundSet"))
13128 {
13129 string cfg_path = "";
13130 string soundset = "";
13131 string type_name =
GetType();
13132
13135 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13136 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13137
13138 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13139 {
13140 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13141 {
13142 if (cfg_slot_array[i] == slot_type)
13143 {
13144 soundset = cfg_soundset_array[i];
13145 break;
13146 }
13147 }
13148 }
13149
13150 if (soundset != "")
13151 {
13152 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13154 }
13155 }
13156 }
13157 }
13158
13160 {
13161
13162 }
13163
13164 void OnApply(PlayerBase player);
13165
13167 {
13168 return 1.0;
13169 };
13170
13172 {
13174 }
13175
13177 {
13179 }
13180
13182
13184 {
13185 SetDynamicPhysicsLifeTime(0.01);
13187 }
13188
13190 {
13191 array<string> zone_names = new array<string>;
13192 GetDamageZones(zone_names);
13193 for (int i = 0; i < zone_names.Count(); i++)
13194 {
13195 SetHealthMax(zone_names.Get(i),"Health");
13196 }
13197 SetHealthMax("","Health");
13198 }
13199
13202 {
13203 float global_health = GetHealth01("","Health");
13204 array<string> zones = new array<string>;
13205 GetDamageZones(zones);
13206
13207 for (int i = 0; i < zones.Count(); i++)
13208 {
13209 SetHealth01(zones.Get(i),"Health",global_health);
13210 }
13211 }
13212
13215 {
13216 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13217 }
13218
13220 {
13221 if (!hasRootAsPlayer)
13222 {
13223 if (refParentIB)
13224 {
13225
13226 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13227 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13228
13229 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13230 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13231
13234 }
13235 else
13236 {
13237
13240 }
13241 }
13242 }
13243
13245 {
13247 {
13248 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13249 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13250 {
13251 float heatPermCoef = 1.0;
13253 while (ent)
13254 {
13255 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13256 ent = ent.GetHierarchyParent();
13257 }
13258
13259 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13260 }
13261 }
13262 }
13263
13265 {
13266
13267 EntityAI parent = GetHierarchyParent();
13268 if (!parent)
13269 {
13270 hasParent = false;
13271 hasRootAsPlayer = false;
13272 }
13273 else
13274 {
13275 hasParent = true;
13276 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13277 refParentIB =
ItemBase.Cast(parent);
13278 }
13279 }
13280
13281 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13282 {
13283
13284 }
13285
13287 {
13288
13289 return false;
13290 }
13291
13293 {
13294
13295
13296 return false;
13297 }
13298
13300 {
13301
13302 return false;
13303 }
13304
13307 {
13308 return !GetIsFrozen() &&
IsOpen();
13309 }
13310
13312 {
13313 bool hasParent = false, hasRootAsPlayer = false;
13315
13316 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13317 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13318
13319 if (wwtu || foodDecay)
13320 {
13324
13325 if (processWetness || processTemperature || processDecay)
13326 {
13328
13329 if (processWetness)
13330 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13331
13332 if (processTemperature)
13334
13335 if (processDecay)
13336 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13337 }
13338 }
13339 }
13340
13343 {
13345 }
13346
13348 {
13351
13352 return super.GetTemperatureFreezeThreshold();
13353 }
13354
13356 {
13359
13360 return super.GetTemperatureThawThreshold();
13361 }
13362
13364 {
13367
13368 return super.GetItemOverheatThreshold();
13369 }
13370
13372 {
13374 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13375
13376 return super.GetTemperatureFreezeTime();
13377 }
13378
13380 {
13382 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13383
13384 return super.GetTemperatureThawTime();
13385 }
13386
13391
13393 {
13394 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13395 }
13396
13398 {
13399 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13400 }
13401
13404 {
13406 }
13407
13409 {
13411 }
13412
13414 {
13416 }
13417
13420 {
13421 return null;
13422 }
13423
13426 {
13427 return false;
13428 }
13429
13431 {
13433 {
13436 if (!trg)
13437 {
13439 explosive = this;
13440 }
13441
13442 explosive.PairRemote(trg);
13444
13445 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13446 trg.SetPersistentPairID(persistentID);
13447 explosive.SetPersistentPairID(persistentID);
13448
13449 return true;
13450 }
13451 return false;
13452 }
13453
13456 {
13457 float ret = 1.0;
13460 ret *= GetHealth01();
13461
13462 return ret;
13463 }
13464
13465 #ifdef DEVELOPER
13466 override void SetDebugItem()
13467 {
13468 super.SetDebugItem();
13469 _itemBase = this;
13470 }
13471
13473 {
13474 string text = super.GetDebugText();
13475
13477 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13478
13479 return text;
13480 }
13481 #endif
13482
13484 {
13485 return true;
13486 }
13487
13489
13491
13493 {
13496 }
13497
13498
13506
13522}
13523
13525{
13527 if (entity)
13528 {
13529 bool is_item = entity.IsInherited(
ItemBase);
13530 if (is_item && full_quantity)
13531 {
13534 }
13535 }
13536 else
13537 {
13539 return NULL;
13540 }
13541 return entity;
13542}
13543
13545{
13546 if (item)
13547 {
13548 if (health > 0)
13549 item.SetHealth("", "", health);
13550
13551 if (item.CanHaveTemperature())
13552 {
13554 if (item.CanFreeze())
13555 item.SetFrozen(false);
13556 }
13557
13558 if (item.HasEnergyManager())
13559 {
13560 if (quantity >= 0)
13561 {
13562 item.GetCompEM().SetEnergy0To1(quantity);
13563 }
13564 else
13565 {
13567 }
13568 }
13569 else if (item.IsMagazine())
13570 {
13571 Magazine mag = Magazine.Cast(item);
13572 if (quantity >= 0)
13573 {
13574 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13575 }
13576 else
13577 {
13579 }
13580
13581 }
13582 else
13583 {
13584 if (quantity >= 0)
13585 {
13586 item.SetQuantityNormalized(quantity, false);
13587 }
13588 else
13589 {
13591 }
13592
13593 }
13594 }
13595}
13596
13597#ifdef DEVELOPER
13599#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.