Sets quantity in normalized 0..1 form between the item's Min a Max values as defined by item's config(for Min 0 and Max 5000, setting 0.5 will result in value 2500)
8082{
8084 {
8085 return true;
8086 }
8087};
8088
8089
8090
8092{
8096
8098
8101
8102
8103
8104
8105
8114
8120
8125
8130
8151 protected bool m_IsResultOfSplit
8152
8154
8159
8160
8161
8163
8167
8168
8169
8171
8174
8175
8176
8182
8183
8191
8194
8195
8197
8198
8200
8201
8206
8207
8212
8213
8215
8216
8218 {
8223
8224 if (!
GetGame().IsDedicatedServer())
8225 {
8227 {
8229
8231 {
8233 }
8234 }
8235
8238 }
8239
8240 m_OldLocation = null;
8241
8243 {
8245 }
8246
8247 if (ConfigIsExisting("headSelectionsToHide"))
8248 {
8251 }
8252
8254 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
8255 {
8257 }
8258
8260
8261 m_IsResultOfSplit = false;
8262
8264 }
8265
8267 {
8268 super.InitItemVariables();
8269
8275 m_Count = ConfigGetInt(
"count");
8276
8279
8284
8287
8292
8304
8308
8309
8312 if (ConfigIsExisting("canBeSplit"))
8313 {
8316 }
8317
8319 if (ConfigIsExisting("itemBehaviour"))
8321
8322
8325 RegisterNetSyncVariableInt("m_VarLiquidType");
8326 RegisterNetSyncVariableInt("m_Cleanness",0,1);
8327
8328 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
8329 RegisterNetSyncVariableFloat("m_ImpactSpeed");
8330 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
8331
8332 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
8333 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
8334 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
8335 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
8336
8337 RegisterNetSyncVariableBool("m_IsBeingPlaced");
8338 RegisterNetSyncVariableBool("m_IsTakeable");
8339 RegisterNetSyncVariableBool("m_IsHologram");
8340
8343 {
8346 }
8347
8349
8351 if (ConfigIsExisting("temperaturePerQuantityWeight"))
8353
8354 }
8355
8357 {
8359 }
8360
8362 {
8365 {
8370 }
8371 }
8372
8373 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
8374 {
8376 {
8379 }
8380
8382 }
8383
8385 {
8391 }
8392
8394
8396 {
8398
8399 if (!action)
8400 {
8401 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
8402 return;
8403 }
8404
8406 if (!ai)
8407 {
8409 return;
8410 }
8411
8413 if (!action_array)
8414 {
8415 action_array = new array<ActionBase_Basic>;
8417 }
8418 if (LogManager.IsActionLogEnable())
8419 {
8420 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
8421 }
8422
8423 if (action_array.Find(action) != -1)
8424 {
8425 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
8426 }
8427 else
8428 {
8429 action_array.Insert(action);
8430 }
8431 }
8432
8434 {
8436 ActionBase action = player.GetActionManager().GetAction(actionName);
8439
8440 if (action_array)
8441 {
8442 action_array.RemoveItem(action);
8443 }
8444 }
8445
8446
8447
8449 {
8450 ActionOverrideData overrideData = new ActionOverrideData();
8454
8456 if (!actionMap)
8457 {
8460 }
8461
8462 actionMap.Insert(this.
Type(), overrideData);
8463
8464 }
8465
8467
8469
8470
8472 {
8475
8478
8479 string config_to_search = "CfgVehicles";
8480 string muzzle_owner_config;
8481
8483 {
8484 if (IsInherited(Weapon))
8485 config_to_search = "CfgWeapons";
8486
8487 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8488
8489 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
8490
8492
8493 if (config_OnFire_subclass_count > 0)
8494 {
8495 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
8496
8497 for (int i = 0; i < config_OnFire_subclass_count; i++)
8498 {
8499 string particle_class = "";
8501 string config_OnFire_entry = config_OnFire_class + particle_class;
8502 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
8503 WPOF_array.Insert(WPOF);
8504 }
8505
8506
8508 }
8509 }
8510
8512 {
8513 config_to_search = "CfgWeapons";
8514 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8515
8516 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
8517
8519
8520 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
8521 {
8522 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
8523
8524 for (i = 0; i < config_OnBulletCasingEject_count; i++)
8525 {
8526 string particle_class2 = "";
8528 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
8529 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
8530 WPOBE_array.Insert(WPOBE);
8531 }
8532
8533
8535 }
8536 }
8537 }
8538
8539
8541 {
8544
8546 {
8547 string config_to_search = "CfgVehicles";
8548
8549 if (IsInherited(Weapon))
8550 config_to_search = "CfgWeapons";
8551
8552 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
8553 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
8554
8555 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
8556 {
8557
8559
8561 {
8563 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
8565 return;
8566 }
8567
8570
8571
8572
8574 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
8575
8576 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
8577 {
8578 string particle_class = "";
8580 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
8582
8583 if (entry_type == CT_CLASS)
8584 {
8585 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
8586 WPOOH_array.Insert(WPOF);
8587 }
8588 }
8589
8590
8592 }
8593 }
8594 }
8595
8597 {
8599 }
8600
8602 {
8604 {
8606
8609
8612
8613 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8614 }
8615 }
8616
8618 {
8620 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8621
8623 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8624
8626 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8627
8629 {
8631 }
8632 }
8633
8635 {
8637 }
8638
8640 {
8643 else
8645
8647 {
8650 }
8651 else
8652 {
8655
8658 }
8659
8661 }
8662
8664 {
8666 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
8667 }
8668
8670 {
8672 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
8674 }
8675
8677 {
8679 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
8680 }
8681
8683 {
8686
8687 OverheatingParticle OP = new OverheatingParticle();
8692
8694 }
8695
8697 {
8700
8701 return -1;
8702 }
8703
8705 {
8707 {
8710
8711 for (int i = count; i > 0; --i)
8712 {
8713 int id = i - 1;
8716
8719
8720 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
8721 {
8722 if (p)
8723 {
8726 }
8727 }
8728 }
8729 }
8730 }
8731
8733 {
8735 {
8737 {
8738 int id = i - 1;
8740
8741 if (OP)
8742 {
8744
8745 if (p)
8746 {
8748 }
8749
8750 delete OP;
8751 }
8752 }
8753
8756 }
8757 }
8758
8761 {
8762 return 0.0;
8763 }
8764
8765
8767 {
8768 return 250;
8769 }
8770
8772 {
8773 return 0;
8774 }
8775
8778 {
8780 return true;
8781
8782 return false;
8783 }
8784
8787 {
8790
8792 {
8794 }
8795 else
8796 {
8797
8799 }
8800
8802 }
8803
8810 {
8811 return -1;
8812 }
8813
8814
8815
8816
8818 {
8820 {
8822 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
8823
8824 if (r_index >= 0)
8825 {
8826 InventoryLocation r_il = new InventoryLocation;
8827 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
8828
8829 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
8832 {
8833 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
8834 }
8836 {
8837 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
8838 }
8839
8840 }
8841
8842 player.GetHumanInventory().ClearUserReservedLocation(this);
8843 }
8844
8847 }
8848
8849
8850
8851
8853 {
8854 return ItemBase.m_DebugActionsMask;
8855 }
8856
8858 {
8859 return ItemBase.m_DebugActionsMask & mask;
8860 }
8861
8863 {
8864 ItemBase.m_DebugActionsMask = mask;
8865 }
8866
8868 {
8869 ItemBase.m_DebugActionsMask |= mask;
8870 }
8871
8873 {
8874 ItemBase.m_DebugActionsMask &= ~mask;
8875 }
8876
8878 {
8880 {
8882 }
8883 else
8884 {
8886 }
8887 }
8888
8889
8891 {
8892 if (GetEconomyProfile())
8893 {
8894 float q_max = GetEconomyProfile().GetQuantityMax();
8895 if (q_max > 0)
8896 {
8897 float q_min = GetEconomyProfile().GetQuantityMin();
8898 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
8899
8901 {
8902 ComponentEnergyManager comp = GetCompEM();
8904 {
8906 }
8907 }
8909 {
8911
8912 }
8913
8914 }
8915 }
8916 }
8917
8920 {
8921 EntityAI parent = GetHierarchyParent();
8922
8923 if (parent)
8924 {
8925 InventoryLocation inventory_location_to_lock = new InventoryLocation;
8926 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
8927 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
8928 }
8929 }
8930
8933 {
8934 EntityAI parent = GetHierarchyParent();
8935
8936 if (parent)
8937 {
8938 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
8939 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
8940 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
8941 }
8942 }
8943
8945 {
8946
8947
8948
8949
8951
8953 {
8954 if (ScriptInputUserData.CanStoreInputUserData())
8955 {
8956 ScriptInputUserData ctx = new ScriptInputUserData;
8962 ctx.
Write(use_stack_max);
8965
8967 {
8968 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
8969 }
8970 }
8971 }
8972 else if (!
GetGame().IsMultiplayer())
8973 {
8975 }
8976 }
8977
8979 {
8981 }
8982
8984 {
8986 }
8987
8989 {
8991 }
8992
8994 {
8995
8996 return false;
8997 }
8998
9000 {
9001 return false;
9002 }
9003
9007 {
9008 return false;
9009 }
9010
9012 {
9013 return "";
9014 }
9015
9017
9019 {
9020 return false;
9021 }
9022
9024 {
9025 return true;
9026 }
9027
9028
9029
9031 {
9032 return true;
9033 }
9034
9036 {
9037 return true;
9038 }
9039
9041 {
9042 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
9044 }
9045
9047 {
9049 }
9050
9052 {
9054 if (!is_being_placed)
9056 SetSynchDirty();
9057 }
9058
9059
9061
9063 {
9065 }
9066
9068 {
9070 }
9071
9073 {
9074 return 1;
9075 }
9076
9078 {
9079 return false;
9080 }
9081
9083 {
9085 SetSynchDirty();
9086 }
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9123 {
9124 super.OnMovedInsideCargo(container);
9125
9126 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9127 }
9128
9129 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
9130 {
9131 super.EEItemLocationChanged(oldLoc,newLoc);
9132
9133 PlayerBase new_player = null;
9134 PlayerBase old_player = null;
9135
9136 if (newLoc.GetParent())
9137 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
9138
9139 if (oldLoc.GetParent())
9140 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
9141
9143 {
9144 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
9145
9146 if (r_index >= 0)
9147 {
9148 InventoryLocation r_il = new InventoryLocation;
9149 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9150
9151 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9154 {
9155 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9156 }
9158 {
9159 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9160 }
9161
9162 }
9163 }
9164
9166 {
9167 if (new_player)
9168 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
9169
9170 if (new_player == old_player)
9171 {
9172
9173 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
9174 {
9176 {
9177 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
9178 {
9179 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9180 }
9181 }
9182 else
9183 {
9184 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
9185 }
9186 }
9187
9188 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
9189 {
9190 int type = oldLoc.GetType();
9192 {
9193 oldLoc.GetParent().GetOnSetLock().Invoke(this);
9194 }
9196 {
9197 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
9198 }
9199 }
9200 if (!m_OldLocation)
9201 {
9202 m_OldLocation = new InventoryLocation;
9203 }
9204 m_OldLocation.Copy(oldLoc);
9205 }
9206 else
9207 {
9208 if (m_OldLocation)
9209 {
9210 m_OldLocation.Reset();
9211 }
9212 }
9213
9215 }
9216 else
9217 {
9218 if (new_player)
9219 {
9220 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
9221 if (res_index >= 0)
9222 {
9223 InventoryLocation il = new InventoryLocation;
9224 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
9226 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
9229 {
9230 il.
GetParent().GetOnReleaseLock().Invoke(it);
9231 }
9233 {
9235 }
9236
9237 }
9238 }
9240 {
9241
9243 }
9244
9245 if (m_OldLocation)
9246 {
9247 m_OldLocation.Reset();
9248 }
9249 }
9250 }
9251
9252 override void EOnContact(IEntity other, Contact extra)
9253 {
9255 {
9256 int liquidType = -1;
9258 if (impactSpeed > 0.0)
9259 {
9261 #ifndef SERVER
9263 #else
9265 SetSynchDirty();
9266 #endif
9268 }
9269 }
9270
9271 #ifdef SERVER
9272 if (GetCompEM() && GetCompEM().IsPlugged())
9273 {
9274 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
9275 GetCompEM().UnplugThis();
9276 }
9277 #endif
9278 }
9279
9281
9283 {
9285 }
9286
9288 {
9289
9290 }
9291
9293 {
9294 super.OnItemLocationChanged(old_owner, new_owner);
9295
9296 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
9297 PlayerBase playerNew = PlayerBase.Cast(new_owner);
9298
9299 if (!relatedPlayer && playerNew)
9300 relatedPlayer = playerNew;
9301
9302 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
9303 {
9305 if (actionMgr)
9306 {
9307 ActionBase currentAction = actionMgr.GetRunningAction();
9308 if (currentAction)
9310 }
9311 }
9312
9313 Man ownerPlayerOld = null;
9314 Man ownerPlayerNew = null;
9315
9316 if (old_owner)
9317 {
9318 if (old_owner.
IsMan())
9319 {
9320 ownerPlayerOld = Man.Cast(old_owner);
9321 }
9322 else
9323 {
9324 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
9325 }
9326 }
9327 else
9328 {
9330 {
9332
9333 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
9334 {
9335 GetCompEM().UnplugThis();
9336 }
9337 }
9338 }
9339
9340 if (new_owner)
9341 {
9342 if (new_owner.
IsMan())
9343 {
9344 ownerPlayerNew = Man.Cast(new_owner);
9345 }
9346 else
9347 {
9348 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
9349 }
9350 }
9351
9352 if (ownerPlayerOld != ownerPlayerNew)
9353 {
9354 if (ownerPlayerOld)
9355 {
9356 array<EntityAI> subItemsExit = new array<EntityAI>;
9358 for (int i = 0; i < subItemsExit.Count(); i++)
9359 {
9362 }
9363 }
9364
9365 if (ownerPlayerNew)
9366 {
9367 array<EntityAI> subItemsEnter = new array<EntityAI>;
9369 for (int j = 0; j < subItemsEnter.Count(); j++)
9370 {
9373 }
9374 }
9375 }
9376 else if (ownerPlayerNew != null)
9377 {
9378 PlayerBase nplayer;
9379 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
9380 {
9381 array<EntityAI> subItemsUpdate = new array<EntityAI>;
9383 for (int k = 0; k < subItemsUpdate.Count(); k++)
9384 {
9386 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
9387 }
9388 }
9389 }
9390
9391 if (old_owner)
9392 old_owner.OnChildItemRemoved(this);
9393 if (new_owner)
9394 new_owner.OnChildItemReceived(this);
9395 }
9396
9397
9399 {
9400 super.EEDelete(parent);
9401 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
9402 if (player)
9403 {
9405
9406 if (player.IsAlive())
9407 {
9408 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9409 if (r_index >= 0)
9410 {
9411 InventoryLocation r_il = new InventoryLocation;
9412 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9413
9414 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9417 {
9418 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9419 }
9421 {
9422 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9423 }
9424
9425 }
9426
9427 player.RemoveQuickBarEntityShortcut(this);
9428 }
9429 }
9430 }
9431
9433 {
9434 super.EEKilled(killer);
9435
9438 {
9439 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
9440 {
9441 if (IsMagazine())
9442 {
9443 if (Magazine.Cast(this).GetAmmoCount() > 0)
9444 {
9446 }
9447 }
9448 else
9449 {
9451 }
9452 }
9453 }
9454 }
9455
9457 {
9458 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
9459
9460 super.OnWasAttached(parent, slot_id);
9461
9464
9466 }
9467
9469 {
9470 super.OnWasDetached(parent, slot_id);
9471
9474 }
9475
9477 {
9478 int idx;
9481
9482 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9483 if (inventory_slots.Count() < 1)
9484 {
9485 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
9486 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
9487 }
9488 else
9489 {
9490 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
9491 }
9492
9493 idx = inventory_slots.Find(slot);
9494 if (idx < 0)
9495 return "";
9496
9497 return attach_types.Get(idx);
9498 }
9499
9501 {
9502 int idx = -1;
9503 string slot;
9504
9507
9508 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
9509 if (inventory_slots.Count() < 1)
9510 {
9511 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
9512 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9513 }
9514 else
9515 {
9516 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
9517 if (detach_types.Count() < 1)
9518 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
9519 }
9520
9521 for (int i = 0; i < inventory_slots.Count(); i++)
9522 {
9523 slot = inventory_slots.Get(i);
9524 }
9525
9526 if (slot != "")
9527 {
9528 if (detach_types.Count() == 1)
9529 idx = 0;
9530 else
9531 idx = inventory_slots.Find(slot);
9532 }
9533 if (idx < 0)
9534 return "";
9535
9536 return detach_types.Get(idx);
9537 }
9538
9540 {
9541
9543
9544
9545 float min_time = 1;
9546 float max_time = 3;
9547 float delay = Math.RandomFloat(min_time, max_time);
9548
9549 explode_timer.Run(delay, this, "DoAmmoExplosion");
9550 }
9551
9553 {
9554 Magazine magazine = Magazine.Cast(this);
9555 int pop_sounds_count = 6;
9556 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
9557
9558
9559 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
9560 string sound_name = pop_sounds[ sound_idx ];
9562
9563
9564 magazine.ServerAddAmmoCount(-1);
9565
9566
9567 float min_temp_to_explode = 100;
9568
9569 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
9570 {
9572 }
9573 }
9574
9575
9576 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
9577 {
9578 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
9579
9580 const int CHANCE_DAMAGE_CARGO = 4;
9581 const int CHANCE_DAMAGE_ATTACHMENT = 1;
9582 const int CHANCE_DAMAGE_NOTHING = 2;
9583
9585 {
9586 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
9587 int chances;
9588 int rnd;
9589
9590 if (GetInventory().GetCargo())
9591 {
9592 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
9593 rnd = Math.RandomInt(0,chances);
9594
9595 if (rnd < CHANCE_DAMAGE_CARGO)
9596 {
9598 }
9599 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
9600 {
9602 }
9603 }
9604 else
9605 {
9606 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
9607 rnd = Math.RandomInt(0,chances);
9608
9609 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
9610 {
9612 }
9613 }
9614 }
9615 }
9616
9618 {
9619 if (GetInventory().GetCargo())
9620 {
9621 int item_count = GetInventory().GetCargo().GetItemCount();
9622 if (item_count > 0)
9623 {
9624 int random_pick = Math.RandomInt(0, item_count);
9626 if (!item.IsExplosive())
9627 {
9628 item.AddHealth("","",damage);
9629 return true;
9630 }
9631 }
9632 }
9633 return false;
9634 }
9635
9637 {
9638 int attachment_count = GetInventory().AttachmentCount();
9639 if (attachment_count > 0)
9640 {
9641 int random_pick = Math.RandomInt(0, attachment_count);
9642 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
9643 if (!attachment.IsExplosive())
9644 {
9645 attachment.AddHealth("","",damage);
9646 return true;
9647 }
9648 }
9649 return false;
9650 }
9651
9653 {
9655 }
9656
9658 {
9660 return GetInventory().CanRemoveEntity();
9661
9662 return false;
9663 }
9664
9666 {
9668 return;
9669
9671 {
9672 if (ScriptInputUserData.CanStoreInputUserData())
9673 {
9674 ScriptInputUserData ctx = new ScriptInputUserData;
9679 ctx.
Write(destination_entity);
9683 }
9684 }
9685 else if (!
GetGame().IsMultiplayer())
9686 {
9688 }
9689 }
9690
9692 {
9694 return;
9695
9696 float split_quantity_new;
9700 InventoryLocation loc = new InventoryLocation;
9701
9702 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
9703 {
9705 split_quantity_new = stack_max;
9706 else
9708
9709 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
9710 if (new_item)
9711 {
9712 new_item.SetResultOfSplit(true);
9713 MiscGameplayFunctions.TransferItemProperties(this, new_item);
9715 new_item.SetQuantity(split_quantity_new);
9716 }
9717 }
9718 else if (destination_entity && slot_id == -1)
9719 {
9720 if (quantity > stack_max)
9721 split_quantity_new = stack_max;
9722 else
9723 split_quantity_new = quantity;
9724
9726 {
9729 }
9730
9731 if (new_item)
9732 {
9733 new_item.SetResultOfSplit(true);
9734 MiscGameplayFunctions.TransferItemProperties(this, new_item);
9736 new_item.SetQuantity(split_quantity_new);
9737 }
9738 }
9739 else
9740 {
9741 if (stack_max != 0)
9742 {
9744 {
9746 }
9747
9748 if (split_quantity_new == 0)
9749 {
9750 if (!
GetGame().IsMultiplayer())
9751 player.PhysicalPredictiveDropItem(this);
9752 else
9753 player.ServerDropEntity(this);
9754 return;
9755 }
9756
9758
9759 if (new_item)
9760 {
9761 new_item.SetResultOfSplit(true);
9762 MiscGameplayFunctions.TransferItemProperties(this, new_item);
9764 new_item.SetQuantity(stack_max);
9765 new_item.PlaceOnSurface();
9766 }
9767 }
9768 }
9769 }
9770
9772 {
9774 return;
9775
9776 float split_quantity_new;
9780 InventoryLocation loc = new InventoryLocation;
9781
9782 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
9783 {
9785 split_quantity_new = stack_max;
9786 else
9788
9789 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
9790 if (new_item)
9791 {
9792 new_item.SetResultOfSplit(true);
9793 MiscGameplayFunctions.TransferItemProperties(this, new_item);
9795 new_item.SetQuantity(split_quantity_new);
9796 }
9797 }
9798 else if (destination_entity && slot_id == -1)
9799 {
9800 if (quantity > stack_max)
9801 split_quantity_new = stack_max;
9802 else
9803 split_quantity_new = quantity;
9804
9806 {
9809 }
9810
9811 if (new_item)
9812 {
9813 new_item.SetResultOfSplit(true);
9814 MiscGameplayFunctions.TransferItemProperties(this, new_item);
9816 new_item.SetQuantity(split_quantity_new);
9817 }
9818 }
9819 else
9820 {
9821 if (stack_max != 0)
9822 {
9824 {
9826 }
9827
9829
9830 if (new_item)
9831 {
9832 new_item.SetResultOfSplit(true);
9833 MiscGameplayFunctions.TransferItemProperties(this, new_item);
9835 new_item.SetQuantity(stack_max);
9836 new_item.PlaceOnSurface();
9837 }
9838 }
9839 }
9840 }
9841
9843 {
9845 return;
9846
9848 {
9849 if (ScriptInputUserData.CanStoreInputUserData())
9850 {
9851 ScriptInputUserData ctx = new ScriptInputUserData;
9856 dst.WriteToContext(ctx);
9858 }
9859 }
9860 else if (!
GetGame().IsMultiplayer())
9861 {
9863 }
9864 }
9865
9867 {
9869 return;
9870
9872 {
9873 if (ScriptInputUserData.CanStoreInputUserData())
9874 {
9875 ScriptInputUserData ctx = new ScriptInputUserData;
9880 ctx.
Write(destination_entity);
9886 }
9887 }
9888 else if (!
GetGame().IsMultiplayer())
9889 {
9891 }
9892 }
9893
9895 {
9897 }
9898
9900 {
9902 return this;
9903
9905 float split_quantity_new;
9907 if (dst.IsValid())
9908 {
9909 int slot_id = dst.GetSlot();
9911
9912 if (quantity > stack_max)
9913 split_quantity_new = stack_max;
9914 else
9915 split_quantity_new = quantity;
9916
9918
9919 if (new_item)
9920 {
9921 new_item.SetResultOfSplit(true);
9922 MiscGameplayFunctions.TransferItemProperties(this,new_item);
9925 }
9926
9927 return new_item;
9928 }
9929
9930 return null;
9931 }
9932
9934 {
9936 return;
9937
9939 float split_quantity_new;
9941 if (destination_entity)
9942 {
9944 if (quantity > stackable)
9945 split_quantity_new = stackable;
9946 else
9947 split_quantity_new = quantity;
9948
9949 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
9950 if (new_item)
9951 {
9952 new_item.SetResultOfSplit(true);
9953 MiscGameplayFunctions.TransferItemProperties(this,new_item);
9955 new_item.SetQuantity(split_quantity_new);
9956 }
9957 }
9958 }
9959
9961 {
9963 return;
9964
9966 {
9967 if (ScriptInputUserData.CanStoreInputUserData())
9968 {
9969 ScriptInputUserData ctx = new ScriptInputUserData;
9974 ItemBase destination_entity =
this;
9975 ctx.
Write(destination_entity);
9979 }
9980 }
9981 else if (!
GetGame().IsMultiplayer())
9982 {
9984 }
9985 }
9986
9988 {
9990 return;
9991
9993 float split_quantity_new;
9995 if (player)
9996 {
9998 if (quantity > stackable)
9999 split_quantity_new = stackable;
10000 else
10001 split_quantity_new = quantity;
10002
10003 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
10004 new_item =
ItemBase.Cast(in_hands);
10005 if (new_item)
10006 {
10007 new_item.SetResultOfSplit(true);
10008 MiscGameplayFunctions.TransferItemProperties(this,new_item);
10010 new_item.SetQuantity(split_quantity_new);
10011 }
10012 }
10013 }
10014
10016 {
10018 return;
10019
10021 float split_quantity_new = Math.Floor(quantity * 0.5);
10022
10024
10025 if (new_item)
10026 {
10027 if (new_item.GetQuantityMax() < split_quantity_new)
10028 {
10029 split_quantity_new = new_item.GetQuantityMax();
10030 }
10031
10032 new_item.SetResultOfSplit(true);
10033 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10034
10036 {
10039 }
10040 else
10041 {
10044 }
10045 }
10046 }
10047
10049 {
10051 return;
10052
10054 float split_quantity_new = Math.Floor(quantity / 2);
10055
10056 InventoryLocation invloc = new InventoryLocation;
10058
10060 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10061
10062 if (new_item)
10063 {
10064 if (new_item.GetQuantityMax() < split_quantity_new)
10065 {
10066 split_quantity_new = new_item.GetQuantityMax();
10067 }
10069 {
10072 }
10073 else
10074 {
10077 }
10078 }
10079 }
10080
10083 {
10084 SetWeightDirty();
10086
10087 if (parent)
10088 parent.OnAttachmentQuantityChangedEx(this, delta);
10089
10091 {
10093 {
10095 }
10097 {
10098 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
10100 }
10101 }
10102
10103 }
10104
10107 {
10108
10109 }
10110
10113 {
10115 }
10116
10118 {
10119 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10120
10122 {
10123 if (newLevel == GameConstants.STATE_RUINED)
10124 {
10126 EntityAI parent = GetHierarchyParent();
10127 if (parent && parent.IsFireplace())
10128 {
10129 CargoBase cargo = GetInventory().GetCargo();
10130 if (cargo)
10131 {
10133 {
10135 }
10136 }
10137 }
10138 }
10139
10141 {
10142
10144 return;
10145 }
10146
10147 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
10148 {
10150 }
10151 }
10152 }
10153
10154
10156 {
10157 super.OnRightClick();
10158
10160 {
10162 {
10163 if (ScriptInputUserData.CanStoreInputUserData())
10164 {
10165 vector m4[4];
10167
10168 EntityAI root = GetHierarchyRoot();
10169
10170 InventoryLocation dst = new InventoryLocation;
10172 {
10173 if (root)
10174 {
10175 root.GetTransform(m4);
10177 }
10178 else
10179 GetInventory().GetCurrentInventoryLocation(dst);
10180 }
10181 else
10182 {
10184
10185
10186 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
10187 {
10188 if (root)
10189 {
10190 root.GetTransform(m4);
10192 }
10193 else
10194 GetInventory().GetCurrentInventoryLocation(dst);
10195 }
10196 else
10197 {
10198 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
10199 }
10200 }
10201
10202 ScriptInputUserData ctx = new ScriptInputUserData;
10210 }
10211 }
10212 else if (!
GetGame().IsMultiplayer())
10213 {
10215 }
10216 }
10217 }
10218
10219 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
10220 {
10221
10222 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
10223 return false;
10224
10225 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
10226 return false;
10227
10228
10230 return false;
10231
10232
10233 Magazine mag = Magazine.Cast(this);
10234 if (mag)
10235 {
10236 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10237 return false;
10238
10239 if (stack_max_limit)
10240 {
10241 Magazine other_mag = Magazine.Cast(other_item);
10242 if (other_item)
10243 {
10244 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10245 return false;
10246 }
10247
10248 }
10249 }
10250 else
10251 {
10252
10254 return false;
10255
10257 return false;
10258 }
10259
10260 PlayerBase player = null;
10261 if (CastTo(player, GetHierarchyRootPlayer()))
10262 {
10263 if (player.GetInventory().HasAttachment(this))
10264 return false;
10265
10266 if (player.IsItemsToDelete())
10267 return false;
10268 }
10269
10270 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10271 return false;
10272
10273 int slotID;
10275 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
10276 return false;
10277
10278 return true;
10279 }
10280
10282 {
10284 }
10285
10287 {
10288 return m_IsResultOfSplit;
10289 }
10290
10292 {
10293 m_IsResultOfSplit = value;
10294 }
10295
10297 {
10299 }
10300
10302 {
10303 float other_item_quantity = other_item.GetQuantity();
10304 float this_free_space;
10305
10307
10309
10310 if (other_item_quantity > this_free_space)
10311 {
10312 return this_free_space;
10313 }
10314 else
10315 {
10316 return other_item_quantity;
10317 }
10318 }
10319
10321 {
10323 }
10324
10326 {
10328 return;
10329
10330 if (!IsMagazine() && other_item)
10331 {
10333 if (quantity_used != 0)
10334 {
10335 float hp1 = GetHealth01("","");
10336 float hp2 = other_item.GetHealth01("","");
10337 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
10338 hpResult = hpResult / (
GetQuantity() + quantity_used);
10339
10340 hpResult *= GetMaxHealth();
10341 Math.Round(hpResult);
10342 SetHealth("", "Health", hpResult);
10343
10345 other_item.AddQuantity(-quantity_used);
10346 }
10347 }
10349 }
10350
10352 {
10353 #ifdef SERVER
10354 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10355 GetHierarchyParent().IncreaseLifetimeUp();
10356 #endif
10357 };
10358
10360 {
10361 PlayerBase p = PlayerBase.Cast(player);
10362
10363 array<int> recipesIds = p.m_Recipes;
10364 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10365 if (moduleRecipesManager)
10366 {
10367 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
10368 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
10369 }
10370
10371 for (int i = 0;i < recipesIds.Count(); i++)
10372 {
10373 int key = recipesIds.Get(i);
10374 string recipeName = moduleRecipesManager.GetRecipeName(key);
10376 }
10377 }
10378
10379
10380 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
10381 {
10382 super.GetDebugActions(outputList);
10383
10384
10389
10390
10394
10398
10399
10402
10403
10405 {
10408 }
10409
10411
10414
10418 }
10419
10420
10421
10422
10424 {
10425 super.OnAction(action_id, player, ctx);
10426 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
10427 {
10428 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
10429 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
10430 PlayerBase p = PlayerBase.Cast(player);
10431 if (
EActions.RECIPES_RANGE_START < 1000)
10432 {
10433 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10434 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10435 }
10436 }
10437 #ifndef SERVER
10438 else if (action_id ==
EActions.WATCH_PLAYER)
10439 {
10440 PluginDeveloper.SetDeveloperItemClientEx(player);
10441 }
10442 #endif
10444 {
10445 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
10446 {
10447 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
10448 OnDebugButtonPressServer(id + 1);
10449 }
10450
10451 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
10452 {
10453 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
10455 }
10456
10457 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
10458 {
10459 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
10461 }
10462
10463 else if (action_id ==
EActions.ADD_QUANTITY)
10464 {
10465 if (IsMagazine())
10466 {
10467 Magazine mag = Magazine.Cast(this);
10468 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
10469 }
10470 else
10471 {
10473 }
10474
10475 if (m_EM)
10476 {
10477 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
10478 }
10479
10480 }
10481
10482 else if (action_id ==
EActions.REMOVE_QUANTITY)
10483 {
10484 if (IsMagazine())
10485 {
10486 Magazine mag2 = Magazine.Cast(this);
10487 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
10488 }
10489 else
10490 {
10492 }
10493 if (m_EM)
10494 {
10495 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
10496 }
10497
10498 }
10499
10500 else if (action_id ==
EActions.SET_QUANTITY_0)
10501 {
10503
10504 if (m_EM)
10505 {
10506 m_EM.SetEnergy(0);
10507 }
10508 }
10509
10510 else if (action_id ==
EActions.SET_MAX_QUANTITY)
10511 {
10513
10514 if (m_EM)
10515 {
10516 m_EM.SetEnergy(m_EM.GetEnergyMax());
10517 }
10518 }
10519
10520 else if (action_id ==
EActions.ADD_HEALTH)
10521 {
10522 AddHealth("","",GetMaxHealth("","Health")/5);
10523 }
10524 else if (action_id ==
EActions.REMOVE_HEALTH)
10525 {
10526 AddHealth("","",-GetMaxHealth("","Health")/5);
10527 }
10528 else if (action_id ==
EActions.DESTROY_HEALTH)
10529 {
10530 SetHealth01("","",0);
10531 }
10532 else if (action_id ==
EActions.WATCH_ITEM)
10533 {
10535 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
10536 #ifdef DEVELOPER
10537 SetDebugDeveloper_item(this);
10538 #endif
10539 }
10540
10541 else if (action_id ==
EActions.ADD_TEMPERATURE)
10542 {
10543 AddTemperature(20);
10544
10545 }
10546
10547 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
10548 {
10549 AddTemperature(-20);
10550
10551 }
10552
10553 else if (action_id ==
EActions.FLIP_FROZEN)
10554 {
10555 SetFrozen(!GetIsFrozen());
10556
10557 }
10558
10559 else if (action_id ==
EActions.ADD_WETNESS)
10560 {
10562
10563 }
10564
10565 else if (action_id ==
EActions.REMOVE_WETNESS)
10566 {
10568
10569 }
10570
10571 else if (action_id ==
EActions.LIQUIDTYPE_UP)
10572 {
10575
10576
10577 }
10578
10579 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
10580 {
10583 }
10584
10585 else if (action_id ==
EActions.MAKE_SPECIAL)
10586 {
10587 auto debugParams = DebugSpawnParams.WithPlayer(player);
10588 OnDebugSpawnEx(debugParams);
10589 }
10590
10591 else if (action_id ==
EActions.DELETE)
10592 {
10593 Delete();
10594 }
10595
10596 }
10597
10598
10599 return false;
10600 }
10601
10602
10603
10604
10608
10611
10612
10613
10615 {
10616 return false;
10617 }
10618
10619
10621 {
10622 return true;
10623 }
10624
10625
10627 {
10628 return true;
10629 }
10630
10631
10632
10634 {
10635 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
10637 }
10638
10641 {
10642 return null;
10643 }
10644
10646 {
10647 return false;
10648 }
10649
10651 {
10652 return false;
10653 }
10654
10658
10659
10661 {
10662 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
10663 return module_repairing.CanRepair(this, item_repair_kit);
10664 }
10665
10666
10667 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
10668 {
10669 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
10670 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
10671 }
10672
10673
10675 {
10676
10677
10678
10679
10680
10681
10682
10683
10684 return 1;
10685 }
10686
10687
10688
10690 {
10692 }
10693
10694
10695
10697 {
10699 }
10700
10701
10710 {
10711 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
10712
10713 if (player)
10714 {
10715 player.MessageStatus(text);
10716 }
10717 }
10718
10719
10728 {
10729 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
10730
10731 if (player)
10732 {
10733 player.MessageAction(text);
10734 }
10735 }
10736
10737
10746 {
10747 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
10748
10749 if (player)
10750 {
10751 player.MessageFriendly(text);
10752 }
10753 }
10754
10755
10764 {
10765 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
10766
10767 if (player)
10768 {
10769 player.MessageImportant(text);
10770 }
10771 }
10772
10774 {
10775 return true;
10776 }
10777
10778
10779 override bool KindOf(
string tag)
10780 {
10781 bool found = false;
10782 string item_name = this.
GetType();
10785
10786 int array_size = item_tag_array.Count();
10787 for (int i = 0; i < array_size; i++)
10788 {
10789 if (item_tag_array.Get(i) == tag)
10790 {
10791 found = true;
10792 break;
10793 }
10794 }
10795 return found;
10796 }
10797
10798
10800 {
10801
10802 super.OnRPC(sender, rpc_type,ctx);
10803
10804
10805 switch (rpc_type)
10806 {
10807 #ifndef SERVER
10808 case ERPCs.RPC_SOUND_LOCK_ATTACH:
10809 Param2<bool, string> p = new Param2<bool, string>(false, "");
10810
10812 return;
10813
10814 bool play = p.param1;
10815 string soundSet = p.param2;
10816
10817 if (play)
10818 {
10820 {
10822 {
10824 }
10825 }
10826 else
10827 {
10829 }
10830 }
10831 else
10832 {
10834 }
10835
10836 break;
10837 #endif
10838
10839 }
10840
10842 {
10844 }
10845 }
10846
10847
10848
10849
10851 {
10852 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
10853 return plugin.GetID(
name);
10854 }
10855
10857 {
10858 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
10859 return plugin.GetName(id);
10860 }
10861
10864 {
10865
10866
10867 int varFlags;
10868 if (!ctx.
Read(varFlags))
10869 return;
10870
10871 if (varFlags & ItemVariableFlags.FLOAT)
10872 {
10874 }
10875 }
10876
10878 {
10879
10880 super.SerializeNumericalVars(floats_out);
10881
10882
10883
10885 {
10887 }
10888
10890 {
10892 }
10893
10895 {
10897 }
10898
10900 {
10905 }
10906
10908 {
10910 }
10911 }
10912
10914 {
10915
10916 super.DeSerializeNumericalVars(floats);
10917
10918
10919 int index = 0;
10920 int mask = Math.Round(floats.Get(index));
10921
10922 index++;
10923
10925 {
10927 {
10929 }
10930 else
10931 {
10932 float quantity = floats.Get(index);
10933 SetQuantity(quantity,
true,
false,
false,
false);
10934 }
10935 index++;
10936 }
10937
10939 {
10940 float wet = floats.Get(index);
10942 index++;
10943 }
10944
10946 {
10947 int liquidtype = Math.Round(floats.Get(index));
10949 index++;
10950 }
10951
10953 {
10955 index++;
10957 index++;
10959 index++;
10961 index++;
10962 }
10963
10965 {
10966 int cleanness = Math.Round(floats.Get(index));
10968 index++;
10969 }
10970 }
10971
10973 {
10974 super.WriteVarsToCTX(ctx);
10975
10976
10978 {
10980 }
10981
10983 {
10985 }
10986
10988 {
10990 }
10991
10993 {
10994 int r,g,b,a;
11000 }
11001
11003 {
11005 }
11006 }
11007
11009 {
11010 if (!super.ReadVarsFromCTX(ctx,version))
11011 return false;
11012
11013 int intValue;
11014 float value;
11015
11016 if (version < 140)
11017 {
11018 if (!ctx.
Read(intValue))
11019 return false;
11020
11021 m_VariablesMask = intValue;
11022 }
11023
11025 {
11026 if (!ctx.
Read(value))
11027 return false;
11028
11030 {
11032 }
11033 else
11034 {
11036 }
11037 }
11038
11039 if (version < 140)
11040 {
11042 {
11043 if (!ctx.
Read(value))
11044 return false;
11045 SetTemperatureDirect(value);
11046 }
11047 }
11048
11050 {
11051 if (!ctx.
Read(value))
11052 return false;
11054 }
11055
11057 {
11058 if (!ctx.
Read(intValue))
11059 return false;
11061 }
11062
11064 {
11065 int r,g,b,a;
11067 return false;
11069 return false;
11071 return false;
11073 return false;
11074
11076 }
11077
11079 {
11080 if (!ctx.
Read(intValue))
11081 return false;
11083 }
11084
11085 if (version >= 138 && version < 140)
11086 {
11088 {
11089 if (!ctx.
Read(intValue))
11090 return false;
11091 SetFrozen(intValue);
11092 }
11093 }
11094
11095 return true;
11096 }
11097
11098
11100 {
11103 {
11105 }
11106
11107 if (!super.OnStoreLoad(ctx, version))
11108 {
11110 return false;
11111 }
11112
11113 if (version >= 114)
11114 {
11115 bool hasQuickBarIndexSaved;
11116
11117 if (!ctx.
Read(hasQuickBarIndexSaved))
11118 {
11120 return false;
11121 }
11122
11123 if (hasQuickBarIndexSaved)
11124 {
11125 int itmQBIndex;
11126
11127
11128 if (!ctx.
Read(itmQBIndex))
11129 {
11131 return false;
11132 }
11133
11134 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
11135 if (itmQBIndex != -1 && parentPlayer)
11136 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11137 }
11138 }
11139 else
11140 {
11141
11142 PlayerBase player;
11143 int itemQBIndex;
11144 if (version ==
int.
MAX)
11145 {
11146 if (!ctx.
Read(itemQBIndex))
11147 {
11149 return false;
11150 }
11151 }
11152 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11153 {
11154
11155 if (!ctx.
Read(itemQBIndex))
11156 {
11158 return false;
11159 }
11160 if (itemQBIndex != -1 && player)
11161 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11162 }
11163 }
11164
11165 if (version < 140)
11166 {
11167
11168 if (!LoadVariables(ctx, version))
11169 {
11171 return false;
11172 }
11173 }
11174
11175
11177 {
11179 return false;
11180 }
11181 if (version >= 132)
11182 {
11184 if (raib)
11185 {
11187 {
11189 return false;
11190 }
11191 }
11192 }
11193
11195 return true;
11196 }
11197
11198
11199
11201 {
11202 super.OnStoreSave(ctx);
11203
11204 PlayerBase player;
11205 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11206 {
11208
11209 int itemQBIndex = -1;
11210 itemQBIndex = player.FindQuickBarEntityIndex(this);
11211 ctx.
Write(itemQBIndex);
11212 }
11213 else
11214 {
11216 }
11217
11219
11221 if (raib)
11222 {
11224 }
11225 }
11226
11227
11229 {
11230 super.AfterStoreLoad();
11231
11233 {
11235 }
11236
11238 {
11241 }
11242 }
11243
11245 {
11246 super.EEOnAfterLoad();
11247
11249 {
11251 }
11252
11255 }
11256
11258 {
11259 return false;
11260 }
11261
11262
11263
11265 {
11267 {
11268 #ifdef PLATFORM_CONSOLE
11269
11271 {
11273 if (menu)
11274 {
11276 }
11277 }
11278 #endif
11279 }
11280
11282 {
11285 }
11286
11288 {
11289 SetWeightDirty();
11291 }
11293 {
11296 }
11297
11299 {
11302 }
11304 {
11307 }
11308
11309 super.OnVariablesSynchronized();
11310 }
11311
11312
11313
11315 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
11316 {
11317 if (!IsServerCheck(allow_client))
11318 return false;
11319
11321 return false;
11322
11325
11326 if (value <= (min + 0.001))
11327 value = min;
11328
11329 if (value == min)
11330 {
11331 if (destroy_config)
11332 {
11333 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11334 if (dstr)
11335 {
11337 this.Delete();
11338 return true;
11339 }
11340 }
11341 else if (destroy_forced)
11342 {
11344 this.Delete();
11345 return true;
11346 }
11347
11349 }
11350
11353
11355 {
11357
11358 if (delta)
11360 }
11361
11363
11364 return false;
11365 }
11366
11367
11369 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
11370 {
11372 }
11373
11375 {
11378 }
11379
11381 {
11384 }
11385
11388 {
11389 float value_clamped = Math.Clamp(value, 0, 1);
11391 SetQuantity(result, destroy_config, destroy_forced);
11392 }
11393
11394
11397 {
11399 }
11400
11402 {
11404 }
11405
11406
11407
11408
11409
11410
11411
11412
11413
11414
11416 {
11417 int slot = -1;
11418 if (GetInventory())
11419 {
11420 InventoryLocation il = new InventoryLocation;
11421 GetInventory().GetCurrentInventoryLocation(il);
11423 }
11424
11426 }
11427
11429 {
11430 float quantity_max = 0;
11431
11433 {
11434 if (attSlotID != -1)
11435 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11436
11437 if (quantity_max <= 0)
11439 }
11440
11441 if (quantity_max <= 0)
11443
11444 return quantity_max;
11445 }
11446
11448 {
11450 }
11451
11453 {
11455 }
11456
11457
11459 {
11461 }
11462
11464 {
11466 }
11467
11469 {
11471 }
11472
11473
11475 {
11476
11477 float weightEx = GetWeightEx();
11478 float special = GetInventoryAndCargoWeight();
11479 return weightEx - special;
11480 }
11481
11482
11484 {
11486 }
11487
11489 {
11491 {
11492 #ifdef DEVELOPER
11493 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11494 {
11495 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
11497 }
11498 #endif
11499
11500 return GetQuantity() * GetConfigWeightModified();
11501 }
11502 else if (HasEnergyManager())
11503 {
11504 #ifdef DEVELOPER
11505 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11506 {
11507 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
11508 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
11509 }
11510 #endif
11511 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
11512 }
11513 else
11514 {
11515 #ifdef DEVELOPER
11516 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
11517 {
11518 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
11519 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
11520 }
11521 #endif
11522 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
11523 }
11524 }
11525
11528 {
11529 int item_count = 0;
11531
11532 if (GetInventory().GetCargo() != NULL)
11533 {
11534 item_count = GetInventory().GetCargo().GetItemCount();
11535 }
11536
11537 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
11538 {
11539 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
11540 if (item)
11541 item_count += item.GetNumberOfItems();
11542 }
11543 return item_count;
11544 }
11545
11548 {
11549 float weight = 0;
11550 float wetness = 1;
11551 if (include_wetness)
11554 {
11555 weight = wetness * m_ConfigWeight;
11556 }
11558 {
11559 weight = 1;
11560 }
11561 return weight;
11562 }
11563
11564
11565
11567 {
11568 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
11569 {
11570 GameInventory inv = GetInventory();
11571 array<EntityAI> items = new array<EntityAI>;
11573 for (int i = 0; i < items.Count(); i++)
11574 {
11576 if (item)
11577 {
11579 }
11580 }
11581 }
11582 }
11583
11584
11585
11586
11588 {
11589 float energy = 0;
11590 if (HasEnergyManager())
11591 {
11592 energy = GetCompEM().GetEnergy();
11593 }
11594 return energy;
11595 }
11596
11597
11599 {
11600 super.OnEnergyConsumed();
11601
11603 }
11604
11606 {
11607 super.OnEnergyAdded();
11608
11610 }
11611
11612
11614 {
11615 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
11616 {
11618 {
11619 float energy_0to1 = GetCompEM().GetEnergy0To1();
11621 }
11622 }
11623 }
11624
11625
11627 {
11628 return ConfigGetFloat("heatIsolation");
11629 }
11630
11632 {
11634 }
11635
11637 {
11638 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
11639 if (
GetGame().ConfigIsExisting(paramPath))
11641
11642 return 0.0;
11643 }
11644
11646 {
11647 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
11648 if (
GetGame().ConfigIsExisting(paramPath))
11650
11651 return 0.0;
11652 }
11653
11654 override void SetWet(
float value,
bool allow_client =
false)
11655 {
11656 if (!IsServerCheck(allow_client))
11657 return;
11658
11661
11663
11664 m_VarWet = Math.Clamp(value, min, max);
11665
11667 {
11670 }
11671 }
11672
11673 override void AddWet(
float value)
11674 {
11676 }
11677
11679 {
11681 }
11682
11684 {
11686 }
11687
11689 {
11691 }
11692
11694 {
11696 }
11697
11699 {
11701 }
11702
11703 override void OnWetChanged(
float newVal,
float oldVal)
11704 {
11707 if (newLevel != oldLevel)
11708 {
11710 }
11711 }
11712
11714 {
11715 SetWeightDirty();
11716 }
11717
11719 {
11720 return GetWetLevelInternal(
m_VarWet);
11721 }
11722
11723
11724
11726 {
11728 }
11729
11731 {
11733 }
11734
11736 {
11738 }
11739
11741 {
11743 }
11744
11745
11746
11748 {
11749 if (ConfigIsExisting("itemModelLength"))
11750 {
11751 return ConfigGetFloat("itemModelLength");
11752 }
11753 return 0;
11754 }
11755
11757 {
11758 if (ConfigIsExisting("itemAttachOffset"))
11759 {
11760 return ConfigGetFloat("itemAttachOffset");
11761 }
11762 return 0;
11763 }
11764
11765 override void SetCleanness(
int value,
bool allow_client =
false)
11766 {
11767 if (!IsServerCheck(allow_client))
11768 return;
11769
11771
11773
11776 }
11777
11779 {
11781 }
11782
11784 {
11785 return true;
11786 }
11787
11788
11789
11790
11792 {
11794 }
11795
11797 {
11799 }
11800
11801
11802
11803
11804 override void SetColor(
int r,
int g,
int b,
int a)
11805 {
11811 }
11813 override void GetColor(out
int r,out
int g,out
int b,out
int a)
11814 {
11819 }
11820
11822 {
11824 }
11825
11828 {
11829 int r,g,b,a;
11831 r = r/255;
11832 g = g/255;
11833 b = b/255;
11834 a = a/255;
11835 return MiscGameplayFunctions.GetColorString(r, g, b, a);
11836 }
11837
11838
11839
11840 override void SetLiquidType(
int value,
bool allow_client =
false)
11841 {
11842 if (!IsServerCheck(allow_client))
11843 return;
11844
11849 }
11850
11852 {
11853 return ConfigGetInt("varLiquidTypeInit");
11854 }
11855
11857 {
11859 }
11860
11862 {
11864 SetFrozen(false);
11865 }
11866
11869 {
11870 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
11871 }
11872
11873
11876 {
11877 PlayerBase nplayer;
11878 if (PlayerBase.CastTo(nplayer, player))
11879 {
11881
11882 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
11883 }
11884 }
11885
11886
11889 {
11890 PlayerBase nplayer;
11891 if (PlayerBase.CastTo(nplayer,player))
11892 {
11893
11894 nplayer.SetEnableQuickBarEntityShortcut(this,false);
11895
11896 }
11897
11898
11899 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
11900
11901
11902 if (HasEnergyManager())
11903 {
11904 GetCompEM().UpdatePlugState();
11905 }
11906 }
11907
11908
11910 {
11911 super.OnPlacementStarted(player);
11912
11914 }
11915
11916 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
11917 {
11919 {
11920 m_AdminLog.OnPlacementComplete(player,
this);
11921 }
11922
11923 super.OnPlacementComplete(player, position, orientation);
11924 }
11925
11926
11927
11928
11929
11931 {
11933 {
11934 return true;
11935 }
11936 else
11937 {
11938 return false;
11939 }
11940 }
11941
11942
11944 {
11946 {
11948 }
11949 }
11950
11951
11953 {
11955 }
11956
11958 {
11960 }
11961
11962 override void InsertAgent(
int agent,
float count = 1)
11963 {
11964 if (count < 1)
11965 return;
11966
11968 }
11969
11972 {
11974 }
11975
11976
11978 {
11980 }
11981
11982
11983
11984
11985
11986
11987
11988
11989
11990
11991
11992
11993
11994
11995
11996
11997
11998
11999
12000
12001
12002
12003
12004
12005
12006
12007
12008
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12024 {
12026 return false;
12027 return true;
12028 }
12029
12031 {
12032
12034 }
12035
12036
12039 {
12040 super.CheckForRoofLimited(timeTresholdMS);
12041
12043 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12044 {
12045 m_PreviousRoofTestTime = time;
12046 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12047 }
12048 }
12049
12050
12052 {
12054 {
12055 return 0;
12056 }
12057
12058 if (GetInventory().GetAttachmentSlotsCount() != 0)
12059 {
12060 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
12061 if (filter)
12062 return filter.GetProtectionLevel(type, false, system);
12063 else
12064 return 0;
12065 }
12066
12067 string subclassPath, entryName;
12068
12069 switch (type)
12070 {
12072 entryName = "biological";
12073 break;
12075 entryName = "chemical";
12076 break;
12077 default:
12078 entryName = "biological";
12079 break;
12080 }
12081
12082 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
12083
12085 }
12086
12087
12088
12091 {
12092 if (!IsMagazine())
12094
12096 }
12097
12098
12099
12100
12101
12106 {
12107 return true;
12108 }
12109
12111 {
12113 }
12114
12115
12116
12117
12118
12120 {
12121 if (parent)
12122 {
12123 if (parent.IsInherited(DayZInfected))
12124 return true;
12125
12126 if (!parent.IsRuined())
12127 return true;
12128 }
12129
12130 return true;
12131 }
12132
12134 {
12135 if (!super.CanPutAsAttachment(parent))
12136 {
12137 return false;
12138 }
12139
12140 if (!IsRuined() && !parent.IsRuined())
12141 {
12142 return true;
12143 }
12144
12145 return false;
12146 }
12147
12149 {
12150
12151
12152
12153
12154 return super.CanReceiveItemIntoCargo(item);
12155 }
12156
12158 {
12159
12160
12161
12162
12163 GameInventory attachmentInv = attachment.GetInventory();
12165 {
12166 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12167 return false;
12168 }
12169
12170 InventoryLocation loc = new InventoryLocation();
12171 attachment.GetInventory().GetCurrentInventoryLocation(loc);
12172 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
12173 return false;
12174
12175 return super.CanReceiveAttachment(attachment, slotId);
12176 }
12177
12179 {
12180 if (!super.CanReleaseAttachment(attachment))
12181 return false;
12182
12183 return GetInventory().AreChildrenAccessible();
12184 }
12185
12186
12187
12188
12189
12190
12191
12192
12193
12194
12195
12196
12197
12198
12199
12200
12201
12202
12203
12204
12205
12207 {
12208 int id = muzzle_owner.GetMuzzleID();
12209 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
12210
12211 if (WPOF_array)
12212 {
12213 for (int i = 0; i < WPOF_array.Count(); i++)
12214 {
12215 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12216
12217 if (WPOF)
12218 {
12219 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12220 }
12221 }
12222 }
12223 }
12224
12225
12227 {
12228 int id = muzzle_owner.GetMuzzleID();
12230
12231 if (WPOBE_array)
12232 {
12233 for (int i = 0; i < WPOBE_array.Count(); i++)
12234 {
12235 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12236
12237 if (WPOBE)
12238 {
12239 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12240 }
12241 }
12242 }
12243 }
12244
12245
12247 {
12248 int id = muzzle_owner.GetMuzzleID();
12249 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12250
12251 if (WPOOH_array)
12252 {
12253 for (int i = 0; i < WPOOH_array.Count(); i++)
12254 {
12255 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12256
12257 if (WPOOH)
12258 {
12259 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12260 }
12261 }
12262 }
12263 }
12264
12265
12267 {
12268 int id = muzzle_owner.GetMuzzleID();
12269 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12270
12271 if (WPOOH_array)
12272 {
12273 for (int i = 0; i < WPOOH_array.Count(); i++)
12274 {
12275 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12276
12277 if (WPOOH)
12278 {
12279 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12280 }
12281 }
12282 }
12283 }
12284
12285
12287 {
12288 int id = muzzle_owner.GetMuzzleID();
12289 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12290
12291 if (WPOOH_array)
12292 {
12293 for (int i = 0; i < WPOOH_array.Count(); i++)
12294 {
12295 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12296
12297 if (WPOOH)
12298 {
12299 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12300 }
12301 }
12302 }
12303 }
12304
12305
12306
12308 {
12310 {
12311 return true;
12312 }
12313
12314 return false;
12315 }
12316
12318 {
12320 {
12321 return true;
12322 }
12323
12324 return false;
12325 }
12326
12328 {
12330 {
12331 return true;
12332 }
12333
12334 return false;
12335 }
12336
12338 {
12339 return false;
12340 }
12341
12344 {
12345 return UATimeSpent.DEFAULT_DEPLOY;
12346 }
12347
12348
12349
12350
12352 {
12354 SetSynchDirty();
12355 }
12356
12358 {
12360 }
12361
12362
12364 {
12365 return false;
12366 }
12367
12370 {
12371 string att_type = "None";
12372
12373 if (ConfigIsExisting("soundAttType"))
12374 {
12375 att_type = ConfigGetString("soundAttType");
12376 }
12377
12379 }
12380
12382 {
12384 }
12385
12386
12387
12388
12389
12393
12395 {
12398
12400 }
12401
12402
12404 {
12406 return;
12407
12409
12412
12415
12416 SoundParameters params = new SoundParameters();
12420 }
12421
12422
12424 {
12426 return;
12427
12429 SetSynchDirty();
12430
12433 }
12434
12435
12437 {
12439 return;
12440
12442 SetSynchDirty();
12443
12446 }
12447
12449 {
12451 }
12452
12454 {
12456 }
12457
12460 {
12461 if (!
GetGame().IsDedicatedServer())
12462 {
12463 if (ConfigIsExisting("attachSoundSet"))
12464 {
12465 string cfg_path = "";
12466 string soundset = "";
12467 string type_name =
GetType();
12468
12471 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
12472 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
12473
12474 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
12475 {
12476 for (int i = 0; i < cfg_soundset_array.Count(); i++)
12477 {
12478 if (cfg_slot_array[i] == slot_type)
12479 {
12480 soundset = cfg_soundset_array[i];
12481 break;
12482 }
12483 }
12484 }
12485
12486 if (soundset != "")
12487 {
12488 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
12490 }
12491 }
12492 }
12493 }
12494
12496 {
12497
12498 }
12499
12500 void OnApply(PlayerBase player);
12501
12503 {
12504 return 1.0;
12505 };
12506
12508 {
12510 }
12511
12513 {
12515 }
12516
12518
12520 {
12521 SetDynamicPhysicsLifeTime(0.01);
12523 }
12524
12526 {
12527 array<string> zone_names = new array<string>;
12528 GetDamageZones(zone_names);
12529 for (int i = 0; i < zone_names.Count(); i++)
12530 {
12531 SetHealthMax(zone_names.Get(i),"Health");
12532 }
12533 SetHealthMax("","Health");
12534 }
12535
12538 {
12539 float global_health = GetHealth01("","Health");
12540 array<string> zones = new array<string>;
12541 GetDamageZones(zones);
12542
12543 for (int i = 0; i < zones.Count(); i++)
12544 {
12545 SetHealth01(zones.Get(i),"Health",global_health);
12546 }
12547 }
12548
12551 {
12552 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
12553 }
12554
12556 {
12557 if (!hasRootAsPlayer)
12558 {
12559 if (refParentIB)
12560 {
12561
12562 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
12563 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
12564
12565 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
12566 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
12567
12570 }
12571 else
12572 {
12573
12576 }
12577 }
12578 }
12579
12581 {
12583 {
12584 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
12585 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
12586 {
12587 float heatPermCoef = 1.0;
12589 while (ent)
12590 {
12591 heatPermCoef *= ent.GetHeatPermeabilityCoef();
12592 ent = ent.GetHierarchyParent();
12593 }
12594
12595 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
12596 }
12597 }
12598 }
12599
12601 {
12602
12603 EntityAI parent = GetHierarchyParent();
12604 if (!parent)
12605 {
12606 hasParent = false;
12607 hasRootAsPlayer = false;
12608 }
12609 else
12610 {
12611 hasParent = true;
12612 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
12613 refParentIB =
ItemBase.Cast(parent);
12614 }
12615 }
12616
12617 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
12618 {
12619
12620 }
12621
12623 {
12624
12625 return false;
12626 }
12627
12629 {
12630
12631
12632 return false;
12633 }
12634
12636 {
12637
12638 return false;
12639 }
12640
12643 {
12644 return !GetIsFrozen() &&
IsOpen();
12645 }
12646
12648 {
12649 bool hasParent = false, hasRootAsPlayer = false;
12651
12652 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
12653 bool foodDecay =
g_Game.IsFoodDecayEnabled();
12654
12655 if (wwtu || foodDecay)
12656 {
12660
12661 if (processWetness || processTemperature || processDecay)
12662 {
12664
12665 if (processWetness)
12666 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
12667
12668 if (processTemperature)
12670
12671 if (processDecay)
12672 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
12673 }
12674 }
12675 }
12676
12679 {
12681 }
12682
12684 {
12687
12688 return super.GetTemperatureFreezeThreshold();
12689 }
12690
12692 {
12695
12696 return super.GetTemperatureThawThreshold();
12697 }
12698
12700 {
12703
12704 return super.GetItemOverheatThreshold();
12705 }
12706
12708 {
12710 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
12711
12712 return super.GetTemperatureFreezeTime();
12713 }
12714
12716 {
12718 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
12719
12720 return super.GetTemperatureThawTime();
12721 }
12722
12727
12729 {
12730 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
12731 }
12732
12734 {
12735 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
12736 }
12737
12740 {
12742 }
12743
12745 {
12747 }
12748
12750 {
12752 }
12753
12756 {
12757 return null;
12758 }
12759
12762 {
12763 return false;
12764 }
12765
12767 {
12769 {
12772 if (!trg)
12773 {
12775 explosive = this;
12776 }
12777
12778 explosive.PairRemote(trg);
12780
12781 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
12782 trg.SetPersistentPairID(persistentID);
12783 explosive.SetPersistentPairID(persistentID);
12784
12785 return true;
12786 }
12787 return false;
12788 }
12789
12792 {
12793 float ret = 1.0;
12796 ret *= GetHealth01();
12797
12798 return ret;
12799 }
12800
12801 #ifdef DEVELOPER
12802 override void SetDebugItem()
12803 {
12804 super.SetDebugItem();
12805 _itemBase = this;
12806 }
12807
12809 {
12810 string text = super.GetDebugText();
12811
12813 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
12814
12815 return text;
12816 }
12817 #endif
12818
12820 {
12821 return true;
12822 }
12823
12825
12827
12829 {
12832 }
12833
12834
12842
12858}
12859
12861{
12863 if (entity)
12864 {
12865 bool is_item = entity.IsInherited(
ItemBase);
12866 if (is_item && full_quantity)
12867 {
12870 }
12871 }
12872 else
12873 {
12875 return NULL;
12876 }
12877 return entity;
12878}
12879
12881{
12882 if (item)
12883 {
12884 if (health > 0)
12885 item.SetHealth("", "", health);
12886
12887 if (item.CanHaveTemperature())
12888 {
12890 if (item.CanFreeze())
12891 item.SetFrozen(false);
12892 }
12893
12894 if (item.HasEnergyManager())
12895 {
12896 if (quantity >= 0)
12897 {
12898 item.GetCompEM().SetEnergy0To1(quantity);
12899 }
12900 else
12901 {
12903 }
12904 }
12905 else if (item.IsMagazine())
12906 {
12907 Magazine mag = Magazine.Cast(item);
12908 if (quantity >= 0)
12909 {
12910 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
12911 }
12912 else
12913 {
12915 }
12916
12917 }
12918 else
12919 {
12920 if (quantity >= 0)
12921 {
12922 item.SetQuantityNormalized(quantity, false);
12923 }
12924 else
12925 {
12927 }
12928
12929 }
12930 }
12931}
12932
12933#ifdef DEVELOPER
12935#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.