9197{
9199 {
9200 return true;
9201 }
9202};
9203
9204
9205
9207{
9211
9213
9216
9217
9218
9219
9220
9229
9235
9240
9245
9266 protected bool m_IsResultOfSplit
9267
9269
9274
9275
9276
9278
9282
9283
9284
9286
9289
9290
9291
9297
9298
9306
9309
9310
9312
9313
9315
9316
9321
9322
9327
9328
9330
9331
9333 {
9338
9339 if (!
GetGame().IsDedicatedServer())
9340 {
9342 {
9344
9346 {
9348 }
9349 }
9350
9353 }
9354
9355 m_OldLocation = null;
9356
9358 {
9360 }
9361
9362 if (ConfigIsExisting("headSelectionsToHide"))
9363 {
9366 }
9367
9369 if (ConfigIsExisting("hideSelectionsByinventorySlot"))
9370 {
9372 }
9373
9375
9376 m_IsResultOfSplit = false;
9377
9379 }
9380
9382 {
9383 super.InitItemVariables();
9384
9390 m_Count = ConfigGetInt(
"count");
9391
9394
9399
9402
9407
9419
9423
9424
9427 if (ConfigIsExisting("canBeSplit"))
9428 {
9431 }
9432
9434 if (ConfigIsExisting("itemBehaviour"))
9436
9437
9440 RegisterNetSyncVariableInt("m_VarLiquidType");
9441 RegisterNetSyncVariableInt("m_Cleanness",0,1);
9442
9443 RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
9444 RegisterNetSyncVariableFloat("m_ImpactSpeed");
9445 RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
9446
9447 RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
9448 RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
9449 RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
9450 RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
9451
9452 RegisterNetSyncVariableBool("m_IsBeingPlaced");
9453 RegisterNetSyncVariableBool("m_IsTakeable");
9454 RegisterNetSyncVariableBool("m_IsHologram");
9455
9458 {
9461 }
9462
9464
9466 if (ConfigIsExisting("temperaturePerQuantityWeight"))
9468
9469 }
9470
9472 {
9474 }
9475
9477 {
9480 {
9485 }
9486 }
9487
9488 override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
9489 {
9491 {
9494 }
9495
9497 }
9498
9500 {
9506 }
9507
9509
9511 {
9513
9514 if (!action)
9515 {
9516 Debug.LogError(
"Action " + actionName +
" dosn't exist!");
9517 return;
9518 }
9519
9521 if (!ai)
9522 {
9524 return;
9525 }
9526
9528 if (!action_array)
9529 {
9530 action_array = new array<ActionBase_Basic>;
9532 }
9533 if (LogManager.IsActionLogEnable())
9534 {
9535 Debug.ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action");
9536 }
9537
9538 if (action_array.Find(action) != -1)
9539 {
9540 Debug.Log(
"Action " + action.Type() +
" already added to " +
this +
", skipping!");
9541 }
9542 else
9543 {
9544 action_array.Insert(action);
9545 }
9546 }
9547
9549 {
9551 ActionBase action = player.GetActionManager().GetAction(actionName);
9554
9555 if (action_array)
9556 {
9557 action_array.RemoveItem(action);
9558 }
9559 }
9560
9561
9562
9564 {
9565 ActionOverrideData overrideData = new ActionOverrideData();
9569
9571 if (!actionMap)
9572 {
9575 }
9576
9577 actionMap.Insert(this.
Type(), overrideData);
9578
9579 }
9580
9582
9584
9585
9587 {
9590
9593
9594 string config_to_search = "CfgVehicles";
9595 string muzzle_owner_config;
9596
9598 {
9599 if (IsInherited(Weapon))
9600 config_to_search = "CfgWeapons";
9601
9602 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9603
9604 string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
9605
9607
9608 if (config_OnFire_subclass_count > 0)
9609 {
9610 array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
9611
9612 for (int i = 0; i < config_OnFire_subclass_count; i++)
9613 {
9614 string particle_class = "";
9616 string config_OnFire_entry = config_OnFire_class + particle_class;
9617 WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
9618 WPOF_array.Insert(WPOF);
9619 }
9620
9621
9623 }
9624 }
9625
9627 {
9628 config_to_search = "CfgWeapons";
9629 muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9630
9631 string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
9632
9634
9635 if (config_OnBulletCasingEject_count > 0 && IsInherited(Weapon))
9636 {
9637 array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
9638
9639 for (i = 0; i < config_OnBulletCasingEject_count; i++)
9640 {
9641 string particle_class2 = "";
9643 string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
9644 WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
9645 WPOBE_array.Insert(WPOBE);
9646 }
9647
9648
9650 }
9651 }
9652 }
9653
9654
9656 {
9659
9661 {
9662 string config_to_search = "CfgVehicles";
9663
9664 if (IsInherited(Weapon))
9665 config_to_search = "CfgWeapons";
9666
9667 string muzzle_owner_config = config_to_search +
" " +
GetType() +
" ";
9668 string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
9669
9670 if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
9671 {
9672
9674
9676 {
9678 string error =
"Error reading config " +
GetType() +
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
9680 return;
9681 }
9682
9685
9686
9687
9689 array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
9690
9691 for (int i = 0; i < config_OnOverheating_subclass_count; i++)
9692 {
9693 string particle_class = "";
9695 string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
9697
9698 if (entry_type == CT_CLASS)
9699 {
9700 WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
9701 WPOOH_array.Insert(WPOF);
9702 }
9703 }
9704
9705
9707 }
9708 }
9709 }
9710
9712 {
9714 }
9715
9717 {
9719 {
9721
9724
9727
9728 CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9729 }
9730 }
9731
9733 {
9735 UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9736
9738 StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9739
9741 StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9742
9744 {
9746 }
9747 }
9748
9750 {
9752 }
9753
9755 {
9758 else
9760
9762 {
9765 }
9766 else
9767 {
9770
9773 }
9774
9776 }
9777
9779 {
9781 ItemBase.PlayOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9782 }
9783
9785 {
9787 ItemBase.UpdateOverheatingParticles(
this, ammoType,
this, suppressor,
"CfgWeapons");
9789 }
9790
9792 {
9794 ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
9795 }
9796
9798 {
9801
9802 OverheatingParticle OP = new OverheatingParticle();
9807
9809 }
9810
9812 {
9815
9816 return -1;
9817 }
9818
9820 {
9822 {
9825
9826 for (int i = count; i > 0; --i)
9827 {
9828 int id = i - 1;
9831
9834
9835 if (overheat_coef < overheat_min && overheat_coef >= overheat_max)
9836 {
9837 if (p)
9838 {
9841 }
9842 }
9843 }
9844 }
9845 }
9846
9848 {
9850 {
9852 {
9853 int id = i - 1;
9855
9856 if (OP)
9857 {
9859
9860 if (p)
9861 {
9863 }
9864
9865 delete OP;
9866 }
9867 }
9868
9871 }
9872 }
9873
9876 {
9877 return 0.0;
9878 }
9879
9880
9882 {
9883 return 250;
9884 }
9885
9887 {
9888 return 0;
9889 }
9890
9893 {
9895 return true;
9896
9897 return false;
9898 }
9899
9902 {
9905
9907 {
9909 }
9910 else
9911 {
9912
9914 }
9915
9917 }
9918
9925 {
9926 return -1;
9927 }
9928
9929
9930
9931
9933 {
9935 {
9937 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
9938
9939 if (r_index >= 0)
9940 {
9941 InventoryLocation r_il = new InventoryLocation;
9942 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
9943
9944 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
9947 {
9948 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
9949 }
9951 {
9952 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
9953 }
9954
9955 }
9956
9957 player.GetHumanInventory().ClearUserReservedLocation(this);
9958 }
9959
9962 }
9963
9964
9965
9966
9968 {
9969 return ItemBase.m_DebugActionsMask;
9970 }
9971
9973 {
9974 return ItemBase.m_DebugActionsMask & mask;
9975 }
9976
9978 {
9979 ItemBase.m_DebugActionsMask = mask;
9980 }
9981
9983 {
9984 ItemBase.m_DebugActionsMask |= mask;
9985 }
9986
9988 {
9989 ItemBase.m_DebugActionsMask &= ~mask;
9990 }
9991
9993 {
9995 {
9997 }
9998 else
9999 {
10001 }
10002 }
10003
10004
10006 {
10007 if (GetEconomyProfile())
10008 {
10009 float q_max = GetEconomyProfile().GetQuantityMax();
10010 if (q_max > 0)
10011 {
10012 float q_min = GetEconomyProfile().GetQuantityMin();
10013 float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
10014
10016 {
10017 ComponentEnergyManager comp = GetCompEM();
10019 {
10021 }
10022 }
10024 {
10026
10027 }
10028
10029 }
10030 }
10031 }
10032
10035 {
10036 EntityAI parent = GetHierarchyParent();
10037
10038 if (parent)
10039 {
10040 InventoryLocation inventory_location_to_lock = new InventoryLocation;
10041 GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
10042 parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(),
true);
10043 }
10044 }
10045
10048 {
10049 EntityAI parent = GetHierarchyParent();
10050
10051 if (parent)
10052 {
10053 InventoryLocation inventory_location_to_unlock = new InventoryLocation;
10054 GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
10055 parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(),
false);
10056 }
10057 }
10058
10060 {
10061
10062
10063
10064
10066
10068 {
10069 if (ScriptInputUserData.CanStoreInputUserData())
10070 {
10071 ScriptInputUserData ctx = new ScriptInputUserData;
10077 ctx.
Write(use_stack_max);
10080
10082 {
10083 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
10084 }
10085 }
10086 }
10087 else if (!
GetGame().IsMultiplayer())
10088 {
10090 }
10091 }
10092
10094 {
10096 }
10097
10099 {
10101 }
10102
10104 {
10106 }
10107
10109 {
10110
10111 return false;
10112 }
10113
10115 {
10116 return false;
10117 }
10118
10122 {
10123 return false;
10124 }
10125
10127 {
10128 return "";
10129 }
10130
10132
10134 {
10135 return false;
10136 }
10137
10139 {
10140 return true;
10141 }
10142
10143
10144
10146 {
10147 return true;
10148 }
10149
10151 {
10152 return true;
10153 }
10154
10156 {
10157 PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
10159 }
10160
10162 {
10164 }
10165
10167 {
10169 if (!is_being_placed)
10171 SetSynchDirty();
10172 }
10173
10174
10176
10178 {
10180 }
10181
10183 {
10185 }
10186
10188 {
10189 return 1;
10190 }
10191
10193 {
10194 return false;
10195 }
10196
10198 {
10200 SetSynchDirty();
10201 }
10202
10203
10204
10205
10206
10207
10208
10209
10210
10211
10212
10213
10214
10215
10216
10217
10218
10219
10220
10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10238 {
10239 super.OnMovedInsideCargo(container);
10240
10241 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10242 }
10243
10244 override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
10245 {
10246 super.EEItemLocationChanged(oldLoc,newLoc);
10247
10248 PlayerBase new_player = null;
10249 PlayerBase old_player = null;
10250
10251 if (newLoc.GetParent())
10252 new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
10253
10254 if (oldLoc.GetParent())
10255 old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
10256
10258 {
10259 int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
10260
10261 if (r_index >= 0)
10262 {
10263 InventoryLocation r_il = new InventoryLocation;
10264 old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10265
10266 old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10269 {
10270 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10271 }
10273 {
10274 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10275 }
10276
10277 }
10278 }
10279
10281 {
10282 if (new_player)
10283 new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
10284
10285 if (new_player == old_player)
10286 {
10287
10288 if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
10289 {
10291 {
10292 if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
10293 {
10294 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10295 }
10296 }
10297 else
10298 {
10299 new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
10300 }
10301 }
10302
10303 if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
10304 {
10305 int type = oldLoc.GetType();
10307 {
10308 oldLoc.GetParent().GetOnSetLock().Invoke(this);
10309 }
10311 {
10312 oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
10313 }
10314 }
10315 if (!m_OldLocation)
10316 {
10317 m_OldLocation = new InventoryLocation;
10318 }
10319 m_OldLocation.Copy(oldLoc);
10320 }
10321 else
10322 {
10323 if (m_OldLocation)
10324 {
10325 m_OldLocation.Reset();
10326 }
10327 }
10328
10330 }
10331 else
10332 {
10333 if (new_player)
10334 {
10335 int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
10336 if (res_index >= 0)
10337 {
10338 InventoryLocation il = new InventoryLocation;
10339 new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
10341 new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
10344 {
10345 il.
GetParent().GetOnReleaseLock().Invoke(it);
10346 }
10348 {
10350 }
10351
10352 }
10353 }
10355 {
10356
10358 }
10359
10360 if (m_OldLocation)
10361 {
10362 m_OldLocation.Reset();
10363 }
10364 }
10365 }
10366
10367 override void EOnContact(IEntity other, Contact extra)
10368 {
10370 {
10371 int liquidType = -1;
10373 if (impactSpeed > 0.0)
10374 {
10376 #ifndef SERVER
10378 #else
10380 SetSynchDirty();
10381 #endif
10383 }
10384 }
10385
10386 #ifdef SERVER
10387 if (GetCompEM() && GetCompEM().IsPlugged())
10388 {
10389 if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
10390 GetCompEM().UnplugThis();
10391 }
10392 #endif
10393 }
10394
10396
10398 {
10400 }
10401
10403 {
10404
10405 }
10406
10408 {
10409 super.OnItemLocationChanged(old_owner, new_owner);
10410
10411 PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
10412 PlayerBase playerNew = PlayerBase.Cast(new_owner);
10413
10414 if (!relatedPlayer && playerNew)
10415 relatedPlayer = playerNew;
10416
10417 if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
10418 {
10420 if (actionMgr)
10421 {
10422 ActionBase currentAction = actionMgr.GetRunningAction();
10423 if (currentAction)
10425 }
10426 }
10427
10428 Man ownerPlayerOld = null;
10429 Man ownerPlayerNew = null;
10430
10431 if (old_owner)
10432 {
10433 if (old_owner.
IsMan())
10434 {
10435 ownerPlayerOld = Man.Cast(old_owner);
10436 }
10437 else
10438 {
10439 ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
10440 }
10441 }
10442 else
10443 {
10445 {
10447
10448 if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
10449 {
10450 GetCompEM().UnplugThis();
10451 }
10452 }
10453 }
10454
10455 if (new_owner)
10456 {
10457 if (new_owner.
IsMan())
10458 {
10459 ownerPlayerNew = Man.Cast(new_owner);
10460 }
10461 else
10462 {
10463 ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
10464 }
10465 }
10466
10467 if (ownerPlayerOld != ownerPlayerNew)
10468 {
10469 if (ownerPlayerOld)
10470 {
10471 array<EntityAI> subItemsExit = new array<EntityAI>;
10473 for (int i = 0; i < subItemsExit.Count(); i++)
10474 {
10477 }
10478 }
10479
10480 if (ownerPlayerNew)
10481 {
10482 array<EntityAI> subItemsEnter = new array<EntityAI>;
10484 for (int j = 0; j < subItemsEnter.Count(); j++)
10485 {
10488 }
10489 }
10490 }
10491 else if (ownerPlayerNew != null)
10492 {
10493 PlayerBase nplayer;
10494 if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
10495 {
10496 array<EntityAI> subItemsUpdate = new array<EntityAI>;
10498 for (int k = 0; k < subItemsUpdate.Count(); k++)
10499 {
10501 itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
10502 }
10503 }
10504 }
10505
10506 if (old_owner)
10507 old_owner.OnChildItemRemoved(this);
10508 if (new_owner)
10509 new_owner.OnChildItemReceived(this);
10510 }
10511
10512
10514 {
10515 super.EEDelete(parent);
10516 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
10517 if (player)
10518 {
10520
10521 if (player.IsAlive())
10522 {
10523 int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
10524 if (r_index >= 0)
10525 {
10526 InventoryLocation r_il = new InventoryLocation;
10527 player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
10528
10529 player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
10532 {
10533 r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
10534 }
10536 {
10537 r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
10538 }
10539
10540 }
10541
10542 player.RemoveQuickBarEntityShortcut(this);
10543 }
10544 }
10545 }
10546
10548 {
10549 super.EEKilled(killer);
10550
10553 {
10554 if (GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
10555 {
10556 if (IsMagazine())
10557 {
10558 if (Magazine.Cast(this).GetAmmoCount() > 0)
10559 {
10561 }
10562 }
10563 else
10564 {
10566 }
10567 }
10568 }
10569 }
10570
10572 {
10573 MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
10574
10575 super.OnWasAttached(parent, slot_id);
10576
10579
10581 }
10582
10584 {
10585 super.OnWasDetached(parent, slot_id);
10586
10589 }
10590
10592 {
10593 int idx;
10596
10597 ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10598 if (inventory_slots.Count() < 1)
10599 {
10600 inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
10601 attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
10602 }
10603 else
10604 {
10605 ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
10606 }
10607
10608 idx = inventory_slots.Find(slot);
10609 if (idx < 0)
10610 return "";
10611
10612 return attach_types.Get(idx);
10613 }
10614
10616 {
10617 int idx = -1;
10618 string slot;
10619
10622
10623 this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
10624 if (inventory_slots.Count() < 1)
10625 {
10626 inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
10627 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10628 }
10629 else
10630 {
10631 this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
10632 if (detach_types.Count() < 1)
10633 detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
10634 }
10635
10636 for (int i = 0; i < inventory_slots.Count(); i++)
10637 {
10638 slot = inventory_slots.Get(i);
10639 }
10640
10641 if (slot != "")
10642 {
10643 if (detach_types.Count() == 1)
10644 idx = 0;
10645 else
10646 idx = inventory_slots.Find(slot);
10647 }
10648 if (idx < 0)
10649 return "";
10650
10651 return detach_types.Get(idx);
10652 }
10653
10655 {
10656
10658
10659
10660 float min_time = 1;
10661 float max_time = 3;
10662 float delay = Math.RandomFloat(min_time, max_time);
10663
10664 explode_timer.Run(delay, this, "DoAmmoExplosion");
10665 }
10666
10668 {
10669 Magazine magazine = Magazine.Cast(this);
10670 int pop_sounds_count = 6;
10671 string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10672
10673
10674 int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10675 string sound_name = pop_sounds[ sound_idx ];
10677
10678
10679 magazine.ServerAddAmmoCount(-1);
10680
10681
10682 float min_temp_to_explode = 100;
10683
10684 if (magazine.GetAmmoCount() > 0 && GetTemperature() >= min_temp_to_explode)
10685 {
10687 }
10688 }
10689
10690
10691 override void EEHitBy(TotalDamageResult damageResult,
int damageType,
EntityAI source,
int component,
string dmgZone,
string ammo, vector modelPos,
float speedCoef)
10692 {
10693 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
10694
10695 const int CHANCE_DAMAGE_CARGO = 4;
10696 const int CHANCE_DAMAGE_ATTACHMENT = 1;
10697 const int CHANCE_DAMAGE_NOTHING = 2;
10698
10700 {
10701 float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
10702 int chances;
10703 int rnd;
10704
10705 if (GetInventory().GetCargo())
10706 {
10707 chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10708 rnd = Math.RandomInt(0,chances);
10709
10710 if (rnd < CHANCE_DAMAGE_CARGO)
10711 {
10713 }
10714 else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10715 {
10717 }
10718 }
10719 else
10720 {
10721 chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10722 rnd = Math.RandomInt(0,chances);
10723
10724 if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10725 {
10727 }
10728 }
10729 }
10730 }
10731
10733 {
10734 if (GetInventory().GetCargo())
10735 {
10736 int item_count = GetInventory().GetCargo().GetItemCount();
10737 if (item_count > 0)
10738 {
10739 int random_pick = Math.RandomInt(0, item_count);
10741 if (!item.IsExplosive())
10742 {
10743 item.AddHealth("","",damage);
10744 return true;
10745 }
10746 }
10747 }
10748 return false;
10749 }
10750
10752 {
10753 int attachment_count = GetInventory().AttachmentCount();
10754 if (attachment_count > 0)
10755 {
10756 int random_pick = Math.RandomInt(0, attachment_count);
10757 ItemBase attachment =
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
10758 if (!attachment.IsExplosive())
10759 {
10760 attachment.AddHealth("","",damage);
10761 return true;
10762 }
10763 }
10764 return false;
10765 }
10766
10768 {
10770 }
10771
10773 {
10775 return GetInventory().CanRemoveEntity();
10776
10777 return false;
10778 }
10779
10781 {
10783 return;
10784
10786 {
10787 if (ScriptInputUserData.CanStoreInputUserData())
10788 {
10789 ScriptInputUserData ctx = new ScriptInputUserData;
10794 ctx.
Write(destination_entity);
10796 ctx.
Write(slot_id);
10798 }
10799 }
10800 else if (!
GetGame().IsMultiplayer())
10801 {
10803 }
10804 }
10805
10807 {
10809 return;
10810
10811 float split_quantity_new;
10815 InventoryLocation loc = new InventoryLocation;
10816
10817 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10818 {
10820 split_quantity_new = stack_max;
10821 else
10823
10824 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10825 if (new_item)
10826 {
10827 new_item.SetResultOfSplit(true);
10828 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10830 new_item.SetQuantity(split_quantity_new);
10831 }
10832 }
10833 else if (destination_entity && slot_id == -1)
10834 {
10835 if (quantity > stack_max)
10836 split_quantity_new = stack_max;
10837 else
10838 split_quantity_new = quantity;
10839
10841 {
10844 }
10845
10846 if (new_item)
10847 {
10848 new_item.SetResultOfSplit(true);
10849 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10851 new_item.SetQuantity(split_quantity_new);
10852 }
10853 }
10854 else
10855 {
10856 if (stack_max != 0)
10857 {
10859 {
10861 }
10862
10863 if (split_quantity_new == 0)
10864 {
10865 if (!
GetGame().IsMultiplayer())
10866 player.PhysicalPredictiveDropItem(this);
10867 else
10868 player.ServerDropEntity(this);
10869 return;
10870 }
10871
10873
10874 if (new_item)
10875 {
10876 new_item.SetResultOfSplit(true);
10877 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10879 new_item.SetQuantity(stack_max);
10880 new_item.PlaceOnSurface();
10881 }
10882 }
10883 }
10884 }
10885
10887 {
10889 return;
10890
10891 float split_quantity_new;
10895 InventoryLocation loc = new InventoryLocation;
10896
10897 if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10898 {
10900 split_quantity_new = stack_max;
10901 else
10903
10904 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
10905 if (new_item)
10906 {
10907 new_item.SetResultOfSplit(true);
10908 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10910 new_item.SetQuantity(split_quantity_new);
10911 }
10912 }
10913 else if (destination_entity && slot_id == -1)
10914 {
10915 if (quantity > stack_max)
10916 split_quantity_new = stack_max;
10917 else
10918 split_quantity_new = quantity;
10919
10921 {
10924 }
10925
10926 if (new_item)
10927 {
10928 new_item.SetResultOfSplit(true);
10929 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10931 new_item.SetQuantity(split_quantity_new);
10932 }
10933 }
10934 else
10935 {
10936 if (stack_max != 0)
10937 {
10939 {
10941 }
10942
10944
10945 if (new_item)
10946 {
10947 new_item.SetResultOfSplit(true);
10948 MiscGameplayFunctions.TransferItemProperties(this, new_item);
10950 new_item.SetQuantity(stack_max);
10951 new_item.PlaceOnSurface();
10952 }
10953 }
10954 }
10955 }
10956
10958 {
10960 return;
10961
10963 {
10964 if (ScriptInputUserData.CanStoreInputUserData())
10965 {
10966 ScriptInputUserData ctx = new ScriptInputUserData;
10971 dst.WriteToContext(ctx);
10973 }
10974 }
10975 else if (!
GetGame().IsMultiplayer())
10976 {
10978 }
10979 }
10980
10982 {
10984 return;
10985
10987 {
10988 if (ScriptInputUserData.CanStoreInputUserData())
10989 {
10990 ScriptInputUserData ctx = new ScriptInputUserData;
10995 ctx.
Write(destination_entity);
11001 }
11002 }
11003 else if (!
GetGame().IsMultiplayer())
11004 {
11006 }
11007 }
11008
11010 {
11012 }
11013
11015 {
11017 return this;
11018
11020 float split_quantity_new;
11022 if (dst.IsValid())
11023 {
11024 int slot_id = dst.GetSlot();
11026
11027 if (quantity > stack_max)
11028 split_quantity_new = stack_max;
11029 else
11030 split_quantity_new = quantity;
11031
11033
11034 if (new_item)
11035 {
11036 new_item.SetResultOfSplit(true);
11037 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11040 }
11041
11042 return new_item;
11043 }
11044
11045 return null;
11046 }
11047
11049 {
11051 return;
11052
11054 float split_quantity_new;
11056 if (destination_entity)
11057 {
11059 if (quantity > stackable)
11060 split_quantity_new = stackable;
11061 else
11062 split_quantity_new = quantity;
11063
11064 new_item =
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col,
false));
11065 if (new_item)
11066 {
11067 new_item.SetResultOfSplit(true);
11068 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11070 new_item.SetQuantity(split_quantity_new);
11071 }
11072 }
11073 }
11074
11076 {
11078 return;
11079
11081 {
11082 if (ScriptInputUserData.CanStoreInputUserData())
11083 {
11084 ScriptInputUserData ctx = new ScriptInputUserData;
11089 ItemBase destination_entity =
this;
11090 ctx.
Write(destination_entity);
11094 }
11095 }
11096 else if (!
GetGame().IsMultiplayer())
11097 {
11099 }
11100 }
11101
11103 {
11105 return;
11106
11108 float split_quantity_new;
11110 if (player)
11111 {
11113 if (quantity > stackable)
11114 split_quantity_new = stackable;
11115 else
11116 split_quantity_new = quantity;
11117
11118 EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
11119 new_item =
ItemBase.Cast(in_hands);
11120 if (new_item)
11121 {
11122 new_item.SetResultOfSplit(true);
11123 MiscGameplayFunctions.TransferItemProperties(this,new_item);
11125 new_item.SetQuantity(split_quantity_new);
11126 }
11127 }
11128 }
11129
11131 {
11133 return;
11134
11136 float split_quantity_new = Math.Floor(quantity * 0.5);
11137
11139
11140 if (new_item)
11141 {
11142 if (new_item.GetQuantityMax() < split_quantity_new)
11143 {
11144 split_quantity_new = new_item.GetQuantityMax();
11145 }
11146
11147 new_item.SetResultOfSplit(true);
11148 MiscGameplayFunctions.TransferItemProperties(this, new_item);
11149
11151 {
11154 }
11155 else
11156 {
11159 }
11160 }
11161 }
11162
11164 {
11166 return;
11167
11169 float split_quantity_new = Math.Floor(quantity / 2);
11170
11171 InventoryLocation invloc = new InventoryLocation;
11173
11175 new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
11176
11177 if (new_item)
11178 {
11179 if (new_item.GetQuantityMax() < split_quantity_new)
11180 {
11181 split_quantity_new = new_item.GetQuantityMax();
11182 }
11184 {
11187 }
11188 else
11189 {
11192 }
11193 }
11194 }
11195
11198 {
11199 SetWeightDirty();
11201
11202 if (parent)
11203 parent.OnAttachmentQuantityChangedEx(this, delta);
11204
11206 {
11208 {
11210 }
11212 {
11213 ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
11215 }
11216 }
11217
11218 }
11219
11222 {
11223
11224 }
11225
11228 {
11230 }
11231
11233 {
11234 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
11235
11237 {
11238 if (newLevel == GameConstants.STATE_RUINED)
11239 {
11241 EntityAI parent = GetHierarchyParent();
11242 if (parent && parent.IsFireplace())
11243 {
11244 CargoBase cargo = GetInventory().GetCargo();
11245 if (cargo)
11246 {
11248 {
11250 }
11251 }
11252 }
11253 }
11254
11256 {
11257
11259 return;
11260 }
11261
11262 if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
11263 {
11265 }
11266 }
11267 }
11268
11269
11271 {
11272 super.OnRightClick();
11273
11275 {
11277 {
11278 if (ScriptInputUserData.CanStoreInputUserData())
11279 {
11280 vector m4[4];
11282
11283 EntityAI root = GetHierarchyRoot();
11284
11285 InventoryLocation dst = new InventoryLocation;
11287 {
11288 if (root)
11289 {
11290 root.GetTransform(m4);
11292 }
11293 else
11294 GetInventory().GetCurrentInventoryLocation(dst);
11295 }
11296 else
11297 {
11299
11300
11301 if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
11302 {
11303 if (root)
11304 {
11305 root.GetTransform(m4);
11307 }
11308 else
11309 GetInventory().GetCurrentInventoryLocation(dst);
11310 }
11311 else
11312 {
11313 GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
11314 }
11315 }
11316
11317 ScriptInputUserData ctx = new ScriptInputUserData;
11325 }
11326 }
11327 else if (!
GetGame().IsMultiplayer())
11328 {
11330 }
11331 }
11332 }
11333
11334 override bool CanBeCombined(
EntityAI other_item,
bool reservation_check =
true,
bool stack_max_limit =
false)
11335 {
11336
11337 if (!other_item ||
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item ==
this)
11338 return false;
11339
11340 if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)
11341 return false;
11342
11343
11345 return false;
11346
11347
11348 Magazine mag = Magazine.Cast(this);
11349 if (mag)
11350 {
11351 if (mag.GetAmmoCount() >= mag.GetAmmoMax())
11352 return false;
11353
11354 if (stack_max_limit)
11355 {
11356 Magazine other_mag = Magazine.Cast(other_item);
11357 if (other_item)
11358 {
11359 if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
11360 return false;
11361 }
11362
11363 }
11364 }
11365 else
11366 {
11367
11369 return false;
11370
11372 return false;
11373 }
11374
11375 PlayerBase player = null;
11376 if (CastTo(player, GetHierarchyRootPlayer()))
11377 {
11378 if (player.GetInventory().HasAttachment(this))
11379 return false;
11380
11381 if (player.IsItemsToDelete())
11382 return false;
11383 }
11384
11385 if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
11386 return false;
11387
11388 int slotID;
11390 if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
11391 return false;
11392
11393 return true;
11394 }
11395
11397 {
11399 }
11400
11402 {
11403 return m_IsResultOfSplit;
11404 }
11405
11407 {
11408 m_IsResultOfSplit = value;
11409 }
11410
11412 {
11414 }
11415
11417 {
11418 float other_item_quantity = other_item.GetQuantity();
11419 float this_free_space;
11420
11422
11424
11425 if (other_item_quantity > this_free_space)
11426 {
11427 return this_free_space;
11428 }
11429 else
11430 {
11431 return other_item_quantity;
11432 }
11433 }
11434
11436 {
11438 }
11439
11441 {
11443 return;
11444
11445 if (!IsMagazine() && other_item)
11446 {
11448 if (quantity_used != 0)
11449 {
11450 float hp1 = GetHealth01("","");
11451 float hp2 = other_item.GetHealth01("","");
11452 float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
11453 hpResult = hpResult / (
GetQuantity() + quantity_used);
11454
11455 hpResult *= GetMaxHealth();
11456 Math.Round(hpResult);
11457 SetHealth("", "Health", hpResult);
11458
11460 other_item.AddQuantity(-quantity_used);
11461 }
11462 }
11464 }
11465
11467 {
11468 #ifdef SERVER
11469 if (!GetHierarchyRootPlayer() && GetHierarchyParent())
11470 GetHierarchyParent().IncreaseLifetimeUp();
11471 #endif
11472 };
11473
11475 {
11476 PlayerBase p = PlayerBase.Cast(player);
11477
11478 array<int> recipesIds = p.m_Recipes;
11479 PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11480 if (moduleRecipesManager)
11481 {
11482 EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
11483 moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this),
ItemBase.Cast(itemInHands), recipesIds, p);
11484 }
11485
11486 for (int i = 0;i < recipesIds.Count(); i++)
11487 {
11488 int key = recipesIds.Get(i);
11489 string recipeName = moduleRecipesManager.GetRecipeName(key);
11491 }
11492 }
11493
11494
11495 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
11496 {
11497 super.GetDebugActions(outputList);
11498
11499
11504
11505
11509
11513
11514
11517
11518
11520 {
11523 }
11524
11526
11529
11533 }
11534
11535
11536
11537
11539 {
11540 super.OnAction(action_id, player, ctx);
11541 if (action_id >=
EActions.RECIPES_RANGE_START && action_id <
EActions.RECIPES_RANGE_END)
11542 {
11543 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
11544 int idWithoutOffset = action_id -
EActions.RECIPES_RANGE_START;
11545 PlayerBase p = PlayerBase.Cast(player);
11546 if (
EActions.RECIPES_RANGE_START < 1000)
11547 {
11548 float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
11549 float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
11550 }
11551 }
11552 #ifndef SERVER
11553 else if (action_id ==
EActions.WATCH_PLAYER)
11554 {
11555 PluginDeveloper.SetDeveloperItemClientEx(player);
11556 }
11557 #endif
11559 {
11560 if (action_id >=
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id <
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
11561 {
11562 int id = action_id -
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
11563 OnDebugButtonPressServer(id + 1);
11564 }
11565
11566 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id <
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
11567 {
11568 int agent_id = action_id -
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
11570 }
11571
11572 else if (action_id >=
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id <
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
11573 {
11574 int agent_id2 = action_id -
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
11576 }
11577
11578 else if (action_id ==
EActions.ADD_QUANTITY)
11579 {
11580 if (IsMagazine())
11581 {
11582 Magazine mag = Magazine.Cast(this);
11583 mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11584 }
11585 else
11586 {
11588 }
11589
11590 if (m_EM)
11591 {
11592 m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11593 }
11594
11595 }
11596
11597 else if (action_id ==
EActions.REMOVE_QUANTITY)
11598 {
11599 if (IsMagazine())
11600 {
11601 Magazine mag2 = Magazine.Cast(this);
11602 mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11603 }
11604 else
11605 {
11607 }
11608 if (m_EM)
11609 {
11610 m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11611 }
11612
11613 }
11614
11615 else if (action_id ==
EActions.SET_QUANTITY_0)
11616 {
11618
11619 if (m_EM)
11620 {
11621 m_EM.SetEnergy(0);
11622 }
11623 }
11624
11625 else if (action_id ==
EActions.SET_MAX_QUANTITY)
11626 {
11628
11629 if (m_EM)
11630 {
11631 m_EM.SetEnergy(m_EM.GetEnergyMax());
11632 }
11633 }
11634
11635 else if (action_id ==
EActions.ADD_HEALTH)
11636 {
11637 AddHealth("","",GetMaxHealth("","Health")/5);
11638 }
11639 else if (action_id ==
EActions.REMOVE_HEALTH)
11640 {
11641 AddHealth("","",-GetMaxHealth("","Health")/5);
11642 }
11643 else if (action_id ==
EActions.DESTROY_HEALTH)
11644 {
11645 SetHealth01("","",0);
11646 }
11647 else if (action_id ==
EActions.WATCH_ITEM)
11648 {
11650 mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
11651 #ifdef DEVELOPER
11652 SetDebugDeveloper_item(this);
11653 #endif
11654 }
11655
11656 else if (action_id ==
EActions.ADD_TEMPERATURE)
11657 {
11658 AddTemperature(20);
11659
11660 }
11661
11662 else if (action_id ==
EActions.REMOVE_TEMPERATURE)
11663 {
11664 AddTemperature(-20);
11665
11666 }
11667
11668 else if (action_id ==
EActions.FLIP_FROZEN)
11669 {
11670 SetFrozen(!GetIsFrozen());
11671
11672 }
11673
11674 else if (action_id ==
EActions.ADD_WETNESS)
11675 {
11677
11678 }
11679
11680 else if (action_id ==
EActions.REMOVE_WETNESS)
11681 {
11683
11684 }
11685
11686 else if (action_id ==
EActions.LIQUIDTYPE_UP)
11687 {
11690
11691
11692 }
11693
11694 else if (action_id ==
EActions.LIQUIDTYPE_DOWN)
11695 {
11698 }
11699
11700 else if (action_id ==
EActions.MAKE_SPECIAL)
11701 {
11702 auto debugParams = DebugSpawnParams.WithPlayer(player);
11703 OnDebugSpawnEx(debugParams);
11704 }
11705
11706 else if (action_id ==
EActions.DELETE)
11707 {
11708 Delete();
11709 }
11710
11711 }
11712
11713
11714 return false;
11715 }
11716
11717
11718
11719
11723
11726
11727
11728
11730 {
11731 return false;
11732 }
11733
11734
11736 {
11737 return true;
11738 }
11739
11740
11742 {
11743 return true;
11744 }
11745
11746
11747
11749 {
11750 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStages",
GetType());
11752 }
11753
11756 {
11757 return null;
11758 }
11759
11761 {
11762 return false;
11763 }
11764
11766 {
11767 return false;
11768 }
11769
11773
11774
11776 {
11777 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11778 return module_repairing.CanRepair(this, item_repair_kit);
11779 }
11780
11781
11782 bool Repair(PlayerBase player,
ItemBase item_repair_kit,
float specialty_weight)
11783 {
11784 PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
11785 return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11786 }
11787
11788
11790 {
11791
11792
11793
11794
11795
11796
11797
11798
11799 return 1;
11800 }
11801
11802
11803
11805 {
11807 }
11808
11809
11810
11812 {
11814 }
11815
11816
11825 {
11826 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11827
11828 if (player)
11829 {
11830 player.MessageStatus(text);
11831 }
11832 }
11833
11834
11843 {
11844 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11845
11846 if (player)
11847 {
11848 player.MessageAction(text);
11849 }
11850 }
11851
11852
11861 {
11862 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11863
11864 if (player)
11865 {
11866 player.MessageFriendly(text);
11867 }
11868 }
11869
11870
11879 {
11880 PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11881
11882 if (player)
11883 {
11884 player.MessageImportant(text);
11885 }
11886 }
11887
11889 {
11890 return true;
11891 }
11892
11893
11894 override bool KindOf(
string tag)
11895 {
11896 bool found = false;
11897 string item_name = this.
GetType();
11900
11901 int array_size = item_tag_array.Count();
11902 for (int i = 0; i < array_size; i++)
11903 {
11904 if (item_tag_array.Get(i) == tag)
11905 {
11906 found = true;
11907 break;
11908 }
11909 }
11910 return found;
11911 }
11912
11913
11915 {
11916
11917 super.OnRPC(sender, rpc_type,ctx);
11918
11919
11920 switch (rpc_type)
11921 {
11922 #ifndef SERVER
11923 case ERPCs.RPC_SOUND_LOCK_ATTACH:
11924 Param2<bool, string> p = new Param2<bool, string>(false, "");
11925
11927 return;
11928
11929 bool play = p.param1;
11930 string soundSet = p.param2;
11931
11932 if (play)
11933 {
11935 {
11937 {
11939 }
11940 }
11941 else
11942 {
11944 }
11945 }
11946 else
11947 {
11949 }
11950
11951 break;
11952 #endif
11953
11954 }
11955
11957 {
11959 }
11960 }
11961
11962
11963
11964
11966 {
11967 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11968 return plugin.GetID(
name);
11969 }
11970
11972 {
11973 PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
11974 return plugin.GetName(id);
11975 }
11976
11979 {
11980
11981
11982 int varFlags;
11983 if (!ctx.
Read(varFlags))
11984 return;
11985
11986 if (varFlags & ItemVariableFlags.FLOAT)
11987 {
11989 }
11990 }
11991
11993 {
11994
11995 super.SerializeNumericalVars(floats_out);
11996
11997
11998
12000 {
12002 }
12003
12005 {
12007 }
12008
12010 {
12012 }
12013
12015 {
12020 }
12021
12023 {
12025 }
12026 }
12027
12029 {
12030
12031 super.DeSerializeNumericalVars(floats);
12032
12033
12034 int index = 0;
12035 int mask = Math.Round(floats.Get(index));
12036
12037 index++;
12038
12040 {
12042 {
12044 }
12045 else
12046 {
12047 float quantity = floats.Get(index);
12048 SetQuantity(quantity,
true,
false,
false,
false);
12049 }
12050 index++;
12051 }
12052
12054 {
12055 float wet = floats.Get(index);
12057 index++;
12058 }
12059
12061 {
12062 int liquidtype = Math.Round(floats.Get(index));
12064 index++;
12065 }
12066
12068 {
12070 index++;
12072 index++;
12074 index++;
12076 index++;
12077 }
12078
12080 {
12081 int cleanness = Math.Round(floats.Get(index));
12083 index++;
12084 }
12085 }
12086
12088 {
12089 super.WriteVarsToCTX(ctx);
12090
12091
12093 {
12095 }
12096
12098 {
12100 }
12101
12103 {
12105 }
12106
12108 {
12109 int r,g,b,a;
12115 }
12116
12118 {
12120 }
12121 }
12122
12124 {
12125 if (!super.ReadVarsFromCTX(ctx,version))
12126 return false;
12127
12128 int intValue;
12129 float value;
12130
12131 if (version < 140)
12132 {
12133 if (!ctx.
Read(intValue))
12134 return false;
12135
12136 m_VariablesMask = intValue;
12137 }
12138
12140 {
12141 if (!ctx.
Read(value))
12142 return false;
12143
12145 {
12147 }
12148 else
12149 {
12151 }
12152 }
12153
12154 if (version < 140)
12155 {
12157 {
12158 if (!ctx.
Read(value))
12159 return false;
12160 SetTemperatureDirect(value);
12161 }
12162 }
12163
12165 {
12166 if (!ctx.
Read(value))
12167 return false;
12169 }
12170
12172 {
12173 if (!ctx.
Read(intValue))
12174 return false;
12176 }
12177
12179 {
12180 int r,g,b,a;
12182 return false;
12184 return false;
12186 return false;
12188 return false;
12189
12191 }
12192
12194 {
12195 if (!ctx.
Read(intValue))
12196 return false;
12198 }
12199
12200 if (version >= 138 && version < 140)
12201 {
12203 {
12204 if (!ctx.
Read(intValue))
12205 return false;
12206 SetFrozen(intValue);
12207 }
12208 }
12209
12210 return true;
12211 }
12212
12213
12215 {
12218 {
12220 }
12221
12222 if (!super.OnStoreLoad(ctx, version))
12223 {
12225 return false;
12226 }
12227
12228 if (version >= 114)
12229 {
12230 bool hasQuickBarIndexSaved;
12231
12232 if (!ctx.
Read(hasQuickBarIndexSaved))
12233 {
12235 return false;
12236 }
12237
12238 if (hasQuickBarIndexSaved)
12239 {
12240 int itmQBIndex;
12241
12242
12243 if (!ctx.
Read(itmQBIndex))
12244 {
12246 return false;
12247 }
12248
12249 PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());
12250 if (itmQBIndex != -1 && parentPlayer)
12251 parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
12252 }
12253 }
12254 else
12255 {
12256
12257 PlayerBase player;
12258 int itemQBIndex;
12259 if (version ==
int.
MAX)
12260 {
12261 if (!ctx.
Read(itemQBIndex))
12262 {
12264 return false;
12265 }
12266 }
12267 else if (Class.CastTo(player, GetHierarchyRootPlayer()))
12268 {
12269
12270 if (!ctx.
Read(itemQBIndex))
12271 {
12273 return false;
12274 }
12275 if (itemQBIndex != -1 && player)
12276 player.SetLoadedQuickBarItemBind(this,itemQBIndex);
12277 }
12278 }
12279
12280 if (version < 140)
12281 {
12282
12283 if (!LoadVariables(ctx, version))
12284 {
12286 return false;
12287 }
12288 }
12289
12290
12292 {
12294 return false;
12295 }
12296 if (version >= 132)
12297 {
12299 if (raib)
12300 {
12302 {
12304 return false;
12305 }
12306 }
12307 }
12308
12310 return true;
12311 }
12312
12313
12314
12316 {
12317 super.OnStoreSave(ctx);
12318
12319 PlayerBase player;
12320 if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
12321 {
12323
12324 int itemQBIndex = -1;
12325 itemQBIndex = player.FindQuickBarEntityIndex(this);
12326 ctx.
Write(itemQBIndex);
12327 }
12328 else
12329 {
12331 }
12332
12334
12336 if (raib)
12337 {
12339 }
12340 }
12341
12342
12344 {
12345 super.AfterStoreLoad();
12346
12348 {
12350 }
12351
12353 {
12356 }
12357 }
12358
12360 {
12361 super.EEOnAfterLoad();
12362
12364 {
12366 }
12367
12370 }
12371
12373 {
12374 return false;
12375 }
12376
12377
12378
12380 {
12382 {
12383 #ifdef PLATFORM_CONSOLE
12384
12386 {
12388 if (menu)
12389 {
12391 }
12392 }
12393 #endif
12394 }
12395
12397 {
12400 }
12401
12403 {
12404 SetWeightDirty();
12406 }
12408 {
12411 }
12412
12414 {
12417 }
12419 {
12422 }
12423
12424 super.OnVariablesSynchronized();
12425 }
12426
12427
12428
12430 override bool SetQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false,
bool allow_client =
false,
bool clamp_to_stack_max =
true)
12431 {
12432 if (!IsServerCheck(allow_client))
12433 return false;
12434
12436 return false;
12437
12440
12441 if (value <= (min + 0.001))
12442 value = min;
12443
12444 if (value == min)
12445 {
12446 if (destroy_config)
12447 {
12448 bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
12449 if (dstr)
12450 {
12452 this.Delete();
12453 return true;
12454 }
12455 }
12456 else if (destroy_forced)
12457 {
12459 this.Delete();
12460 return true;
12461 }
12462
12464 }
12465
12468
12470 {
12472
12473 if (delta)
12475 }
12476
12478
12479 return false;
12480 }
12481
12482
12484 bool AddQuantity(
float value,
bool destroy_config =
true,
bool destroy_forced =
false)
12485 {
12487 }
12488
12490 {
12493 }
12494
12496 {
12499 }
12500
12503 {
12504 float value_clamped = Math.Clamp(value, 0, 1);
12506 SetQuantity(result, destroy_config, destroy_forced);
12507 }
12508
12509
12512 {
12514 }
12515
12517 {
12519 }
12520
12521
12522
12523
12524
12525
12526
12527
12528
12529
12531 {
12532 int slot = -1;
12533 if (GetInventory())
12534 {
12535 InventoryLocation il = new InventoryLocation;
12536 GetInventory().GetCurrentInventoryLocation(il);
12538 }
12539
12541 }
12542
12544 {
12545 float quantity_max = 0;
12546
12548 {
12549 if (attSlotID != -1)
12550 quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
12551
12552 if (quantity_max <= 0)
12554 }
12555
12556 if (quantity_max <= 0)
12558
12559 return quantity_max;
12560 }
12561
12563 {
12565 }
12566
12568 {
12570 }
12571
12572
12574 {
12576 }
12577
12579 {
12581 }
12582
12584 {
12586 }
12587
12588
12590 {
12591
12592 float weightEx = GetWeightEx();
12593 float special = GetInventoryAndCargoWeight();
12594 return weightEx - special;
12595 }
12596
12597
12599 {
12601 }
12602
12604 {
12606 {
12607 #ifdef DEVELOPER
12608 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12609 {
12610 WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12612 }
12613 #endif
12614
12615 return GetQuantity() * GetConfigWeightModified();
12616 }
12617 else if (HasEnergyManager())
12618 {
12619 #ifdef DEVELOPER
12620 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12621 {
12622 WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12623 data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
12624 }
12625 #endif
12626 return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified());
12627 }
12628 else
12629 {
12630 #ifdef DEVELOPER
12631 if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12632 {
12633 WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12634 data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " +
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
12635 }
12636 #endif
12637 return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified());
12638 }
12639 }
12640
12643 {
12644 int item_count = 0;
12646
12647 if (GetInventory().GetCargo() != NULL)
12648 {
12649 item_count = GetInventory().GetCargo().GetItemCount();
12650 }
12651
12652 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12653 {
12654 Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12655 if (item)
12656 item_count += item.GetNumberOfItems();
12657 }
12658 return item_count;
12659 }
12660
12663 {
12664 float weight = 0;
12665 float wetness = 1;
12666 if (include_wetness)
12669 {
12670 weight = wetness * m_ConfigWeight;
12671 }
12673 {
12674 weight = 1;
12675 }
12676 return weight;
12677 }
12678
12679
12680
12682 {
12683 if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
12684 {
12685 GameInventory inv = GetInventory();
12686 array<EntityAI> items = new array<EntityAI>;
12688 for (int i = 0; i < items.Count(); i++)
12689 {
12691 if (item)
12692 {
12694 }
12695 }
12696 }
12697 }
12698
12699
12700
12701
12703 {
12704 float energy = 0;
12705 if (HasEnergyManager())
12706 {
12707 energy = GetCompEM().GetEnergy();
12708 }
12709 return energy;
12710 }
12711
12712
12714 {
12715 super.OnEnergyConsumed();
12716
12718 }
12719
12721 {
12722 super.OnEnergyAdded();
12723
12725 }
12726
12727
12729 {
12730 if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
12731 {
12733 {
12734 float energy_0to1 = GetCompEM().GetEnergy0To1();
12736 }
12737 }
12738 }
12739
12740
12742 {
12743 return ConfigGetFloat("heatIsolation");
12744 }
12745
12747 {
12749 }
12750
12752 {
12753 string paramPath =
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2",
GetType(), pIncrementName);
12754 if (
GetGame().ConfigIsExisting(paramPath))
12756
12757 return 0.0;
12758 }
12759
12761 {
12762 string paramPath =
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2",
GetType(), pIncrementName);
12763 if (
GetGame().ConfigIsExisting(paramPath))
12765
12766 return 0.0;
12767 }
12768
12769 override void SetWet(
float value,
bool allow_client =
false)
12770 {
12771 if (!IsServerCheck(allow_client))
12772 return;
12773
12776
12778
12779 m_VarWet = Math.Clamp(value, min, max);
12780
12782 {
12785 }
12786 }
12787
12788 override void AddWet(
float value)
12789 {
12791 }
12792
12794 {
12796 }
12797
12799 {
12801 }
12802
12804 {
12806 }
12807
12809 {
12811 }
12812
12814 {
12816 }
12817
12818 override void OnWetChanged(
float newVal,
float oldVal)
12819 {
12822 if (newLevel != oldLevel)
12823 {
12825 }
12826 }
12827
12829 {
12830 SetWeightDirty();
12831 }
12832
12834 {
12835 return GetWetLevelInternal(
m_VarWet);
12836 }
12837
12838
12839
12841 {
12843 }
12844
12846 {
12848 }
12849
12851 {
12853 }
12854
12856 {
12858 }
12859
12860
12861
12863 {
12864 if (ConfigIsExisting("itemModelLength"))
12865 {
12866 return ConfigGetFloat("itemModelLength");
12867 }
12868 return 0;
12869 }
12870
12872 {
12873 if (ConfigIsExisting("itemAttachOffset"))
12874 {
12875 return ConfigGetFloat("itemAttachOffset");
12876 }
12877 return 0;
12878 }
12879
12880 override void SetCleanness(
int value,
bool allow_client =
false)
12881 {
12882 if (!IsServerCheck(allow_client))
12883 return;
12884
12886
12888
12891 }
12892
12894 {
12896 }
12897
12899 {
12900 return true;
12901 }
12902
12903
12904
12905
12907 {
12909 }
12910
12912 {
12914 }
12915
12916
12917
12918
12919 override void SetColor(
int r,
int g,
int b,
int a)
12920 {
12926 }
12928 override void GetColor(out
int r,out
int g,out
int b,out
int a)
12929 {
12934 }
12935
12937 {
12939 }
12940
12943 {
12944 int r,g,b,a;
12946 r = r/255;
12947 g = g/255;
12948 b = b/255;
12949 a = a/255;
12950 return MiscGameplayFunctions.GetColorString(r, g, b, a);
12951 }
12952
12953
12954
12955 override void SetLiquidType(
int value,
bool allow_client =
false)
12956 {
12957 if (!IsServerCheck(allow_client))
12958 return;
12959
12964 }
12965
12967 {
12968 return ConfigGetInt("varLiquidTypeInit");
12969 }
12970
12972 {
12974 }
12975
12977 {
12979 SetFrozen(false);
12980 }
12981
12984 {
12985 player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12986 }
12987
12988
12991 {
12992 PlayerBase nplayer;
12993 if (PlayerBase.CastTo(nplayer, player))
12994 {
12996
12997 nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12998 }
12999 }
13000
13001
13004 {
13005 PlayerBase nplayer;
13006 if (PlayerBase.CastTo(nplayer,player))
13007 {
13008
13009 nplayer.SetEnableQuickBarEntityShortcut(this,false);
13010
13011 }
13012
13013
13014 player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
13015
13016
13017 if (HasEnergyManager())
13018 {
13019 GetCompEM().UpdatePlugState();
13020 }
13021 }
13022
13023
13025 {
13026 super.OnPlacementStarted(player);
13027
13029 }
13030
13031 override void OnPlacementComplete(Man player, vector position =
"0 0 0", vector orientation =
"0 0 0")
13032 {
13034 {
13035 m_AdminLog.OnPlacementComplete(player,
this);
13036 }
13037
13038 super.OnPlacementComplete(player, position, orientation);
13039 }
13040
13041
13042
13043
13044
13046 {
13048 {
13049 return true;
13050 }
13051 else
13052 {
13053 return false;
13054 }
13055 }
13056
13057
13059 {
13061 {
13063 }
13064 }
13065
13066
13068 {
13070 }
13071
13073 {
13075 }
13076
13077 override void InsertAgent(
int agent,
float count = 1)
13078 {
13079 if (count < 1)
13080 return;
13081
13083 }
13084
13087 {
13089 }
13090
13091
13093 {
13095 }
13096
13097
13098
13099
13100
13101
13102
13103
13104
13105
13106
13107
13108
13109
13110
13111
13112
13113
13114
13115
13116
13117
13118
13119
13120
13121
13122
13123
13124
13125
13126
13127
13128
13129
13130
13131
13132
13133
13134
13135
13136
13137
13139 {
13141 return false;
13142 return true;
13143 }
13144
13146 {
13147
13149 }
13150
13151
13154 {
13155 super.CheckForRoofLimited(timeTresholdMS);
13156
13158 if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
13159 {
13160 m_PreviousRoofTestTime = time;
13161 SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
13162 }
13163 }
13164
13165
13167 {
13169 {
13170 return 0;
13171 }
13172
13173 if (GetInventory().GetAttachmentSlotsCount() != 0)
13174 {
13175 ItemBase filter =
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
13176 if (filter)
13177 return filter.GetProtectionLevel(type, false, system);
13178 else
13179 return 0;
13180 }
13181
13182 string subclassPath, entryName;
13183
13184 switch (type)
13185 {
13187 entryName = "biological";
13188 break;
13190 entryName = "chemical";
13191 break;
13192 default:
13193 entryName = "biological";
13194 break;
13195 }
13196
13197 subclassPath =
"CfgVehicles " + this.
GetType() +
" Protection ";
13198
13200 }
13201
13202
13203
13206 {
13207 if (!IsMagazine())
13209
13211 }
13212
13213
13214
13215
13216
13221 {
13222 return true;
13223 }
13224
13226 {
13228 }
13229
13230
13231
13232
13233
13235 {
13236 if (parent)
13237 {
13238 if (parent.IsInherited(DayZInfected))
13239 return true;
13240
13241 if (!parent.IsRuined())
13242 return true;
13243 }
13244
13245 return true;
13246 }
13247
13249 {
13250 if (!super.CanPutAsAttachment(parent))
13251 {
13252 return false;
13253 }
13254
13255 if (!IsRuined() && !parent.IsRuined())
13256 {
13257 return true;
13258 }
13259
13260 return false;
13261 }
13262
13264 {
13265
13266
13267
13268
13269 return super.CanReceiveItemIntoCargo(item);
13270 }
13271
13273 {
13274
13275
13276
13277
13278 GameInventory attachmentInv = attachment.GetInventory();
13280 {
13281 if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
13282 return false;
13283 }
13284
13285 InventoryLocation loc = new InventoryLocation();
13286 attachment.GetInventory().GetCurrentInventoryLocation(loc);
13287 if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
13288 return false;
13289
13290 return super.CanReceiveAttachment(attachment, slotId);
13291 }
13292
13294 {
13295 if (!super.CanReleaseAttachment(attachment))
13296 return false;
13297
13298 return GetInventory().AreChildrenAccessible();
13299 }
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309
13310
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13322 {
13323 int id = muzzle_owner.GetMuzzleID();
13324 array<ref WeaponParticlesOnFire> WPOF_array =
m_OnFireEffect.Get(
id);
13325
13326 if (WPOF_array)
13327 {
13328 for (int i = 0; i < WPOF_array.Count(); i++)
13329 {
13330 WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
13331
13332 if (WPOF)
13333 {
13334 WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
13335 }
13336 }
13337 }
13338 }
13339
13340
13342 {
13343 int id = muzzle_owner.GetMuzzleID();
13345
13346 if (WPOBE_array)
13347 {
13348 for (int i = 0; i < WPOBE_array.Count(); i++)
13349 {
13350 WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
13351
13352 if (WPOBE)
13353 {
13354 WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13355 }
13356 }
13357 }
13358 }
13359
13360
13362 {
13363 int id = muzzle_owner.GetMuzzleID();
13364 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13365
13366 if (WPOOH_array)
13367 {
13368 for (int i = 0; i < WPOOH_array.Count(); i++)
13369 {
13370 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13371
13372 if (WPOOH)
13373 {
13374 WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
13375 }
13376 }
13377 }
13378 }
13379
13380
13382 {
13383 int id = muzzle_owner.GetMuzzleID();
13384 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13385
13386 if (WPOOH_array)
13387 {
13388 for (int i = 0; i < WPOOH_array.Count(); i++)
13389 {
13390 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13391
13392 if (WPOOH)
13393 {
13394 WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13395 }
13396 }
13397 }
13398 }
13399
13400
13402 {
13403 int id = muzzle_owner.GetMuzzleID();
13404 array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
13405
13406 if (WPOOH_array)
13407 {
13408 for (int i = 0; i < WPOOH_array.Count(); i++)
13409 {
13410 WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
13411
13412 if (WPOOH)
13413 {
13414 WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
13415 }
13416 }
13417 }
13418 }
13419
13420
13421
13423 {
13425 {
13426 return true;
13427 }
13428
13429 return false;
13430 }
13431
13433 {
13435 {
13436 return true;
13437 }
13438
13439 return false;
13440 }
13441
13443 {
13445 {
13446 return true;
13447 }
13448
13449 return false;
13450 }
13451
13453 {
13454 return false;
13455 }
13456
13459 {
13460 return UATimeSpent.DEFAULT_DEPLOY;
13461 }
13462
13463
13464
13465
13467 {
13469 SetSynchDirty();
13470 }
13471
13473 {
13475 }
13476
13477
13479 {
13480 return false;
13481 }
13482
13485 {
13486 string att_type = "None";
13487
13488 if (ConfigIsExisting("soundAttType"))
13489 {
13490 att_type = ConfigGetString("soundAttType");
13491 }
13492
13494 }
13495
13497 {
13499 }
13500
13501
13502
13503
13504
13508
13510 {
13513
13515 }
13516
13517
13519 {
13521 return;
13522
13524
13527
13530
13531 SoundParameters params = new SoundParameters();
13535 }
13536
13537
13539 {
13541 return;
13542
13544 SetSynchDirty();
13545
13548 }
13549
13550
13552 {
13554 return;
13555
13557 SetSynchDirty();
13558
13561 }
13562
13564 {
13566 }
13567
13569 {
13571 }
13572
13575 {
13576 if (!
GetGame().IsDedicatedServer())
13577 {
13578 if (ConfigIsExisting("attachSoundSet"))
13579 {
13580 string cfg_path = "";
13581 string soundset = "";
13582 string type_name =
GetType();
13583
13586 ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13587 ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13588
13589 if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13590 {
13591 for (int i = 0; i < cfg_soundset_array.Count(); i++)
13592 {
13593 if (cfg_slot_array[i] == slot_type)
13594 {
13595 soundset = cfg_soundset_array[i];
13596 break;
13597 }
13598 }
13599 }
13600
13601 if (soundset != "")
13602 {
13603 EffectSound sound = SEffectManager.PlaySound(soundset,
GetPosition());
13605 }
13606 }
13607 }
13608 }
13609
13611 {
13612
13613 }
13614
13615 void OnApply(PlayerBase player);
13616
13618 {
13619 return 1.0;
13620 };
13621
13623 {
13625 }
13626
13628 {
13630 }
13631
13633
13635 {
13636 SetDynamicPhysicsLifeTime(0.01);
13638 }
13639
13641 {
13642 array<string> zone_names = new array<string>;
13643 GetDamageZones(zone_names);
13644 for (int i = 0; i < zone_names.Count(); i++)
13645 {
13646 SetHealthMax(zone_names.Get(i),"Health");
13647 }
13648 SetHealthMax("","Health");
13649 }
13650
13653 {
13654 float global_health = GetHealth01("","Health");
13655 array<string> zones = new array<string>;
13656 GetDamageZones(zones);
13657
13658 for (int i = 0; i < zones.Count(); i++)
13659 {
13660 SetHealth01(zones.Get(i),"Health",global_health);
13661 }
13662 }
13663
13666 {
13667 return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13668 }
13669
13671 {
13672 if (!hasRootAsPlayer)
13673 {
13674 if (refParentIB)
13675 {
13676
13677 if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet <
m_VarWetMax))
13678 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
13679
13680 else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet <
m_VarWetMax))
13681 AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
13682
13685 }
13686 else
13687 {
13688
13691 }
13692 }
13693 }
13694
13696 {
13698 {
13699 float target =
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
13700 if (GetTemperature() != target || !IsFreezeThawProgressFinished())
13701 {
13702 float heatPermCoef = 1.0;
13704 while (ent)
13705 {
13706 heatPermCoef *= ent.GetHeatPermeabilityCoef();
13707 ent = ent.GetHierarchyParent();
13708 }
13709
13710 SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
13711 }
13712 }
13713 }
13714
13716 {
13717
13718 EntityAI parent = GetHierarchyParent();
13719 if (!parent)
13720 {
13721 hasParent = false;
13722 hasRootAsPlayer = false;
13723 }
13724 else
13725 {
13726 hasParent = true;
13727 hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13728 refParentIB =
ItemBase.Cast(parent);
13729 }
13730 }
13731
13732 protected void ProcessDecay(
float delta,
bool hasRootAsPlayer)
13733 {
13734
13735 }
13736
13738 {
13739
13740 return false;
13741 }
13742
13744 {
13745
13746
13747 return false;
13748 }
13749
13751 {
13752
13753 return false;
13754 }
13755
13758 {
13759 return !GetIsFrozen() &&
IsOpen();
13760 }
13761
13763 {
13764 bool hasParent = false, hasRootAsPlayer = false;
13766
13767 bool wwtu =
g_Game.IsWorldWetTempUpdateEnabled();
13768 bool foodDecay =
g_Game.IsFoodDecayEnabled();
13769
13770 if (wwtu || foodDecay)
13771 {
13775
13776 if (processWetness || processTemperature || processDecay)
13777 {
13779
13780 if (processWetness)
13781 ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);
13782
13783 if (processTemperature)
13785
13786 if (processDecay)
13787 ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
13788 }
13789 }
13790 }
13791
13794 {
13796 }
13797
13799 {
13802
13803 return super.GetTemperatureFreezeThreshold();
13804 }
13805
13807 {
13810
13811 return super.GetTemperatureThawThreshold();
13812 }
13813
13815 {
13818
13819 return super.GetItemOverheatThreshold();
13820 }
13821
13823 {
13825 return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
13826
13827 return super.GetTemperatureFreezeTime();
13828 }
13829
13831 {
13833 return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
13834
13835 return super.GetTemperatureThawTime();
13836 }
13837
13842
13844 {
13845 return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13846 }
13847
13849 {
13850 MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13851 }
13852
13855 {
13857 }
13858
13860 {
13862 }
13863
13865 {
13867 }
13868
13871 {
13872 return null;
13873 }
13874
13877 {
13878 return false;
13879 }
13880
13882 {
13884 {
13887 if (!trg)
13888 {
13890 explosive = this;
13891 }
13892
13893 explosive.PairRemote(trg);
13895
13896 int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13897 trg.SetPersistentPairID(persistentID);
13898 explosive.SetPersistentPairID(persistentID);
13899
13900 return true;
13901 }
13902 return false;
13903 }
13904
13907 {
13908 float ret = 1.0;
13911 ret *= GetHealth01();
13912
13913 return ret;
13914 }
13915
13916 #ifdef DEVELOPER
13917 override void SetDebugItem()
13918 {
13919 super.SetDebugItem();
13920 _itemBase = this;
13921 }
13922
13924 {
13925 string text = super.GetDebugText();
13926
13928 text +=
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
13929
13930 return text;
13931 }
13932 #endif
13933
13935 {
13936 return true;
13937 }
13938
13940
13942
13944 {
13947 }
13948
13949
13957
13973}
13974
13976{
13978 if (entity)
13979 {
13980 bool is_item = entity.IsInherited(
ItemBase);
13981 if (is_item && full_quantity)
13982 {
13985 }
13986 }
13987 else
13988 {
13990 return NULL;
13991 }
13992 return entity;
13993}
13994
13996{
13997 if (item)
13998 {
13999 if (health > 0)
14000 item.SetHealth("", "", health);
14001
14002 if (item.CanHaveTemperature())
14003 {
14005 if (item.CanFreeze())
14006 item.SetFrozen(false);
14007 }
14008
14009 if (item.HasEnergyManager())
14010 {
14011 if (quantity >= 0)
14012 {
14013 item.GetCompEM().SetEnergy0To1(quantity);
14014 }
14015 else
14016 {
14018 }
14019 }
14020 else if (item.IsMagazine())
14021 {
14022 Magazine mag = Magazine.Cast(item);
14023 if (quantity >= 0)
14024 {
14025 mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
14026 }
14027 else
14028 {
14030 }
14031
14032 }
14033 else
14034 {
14035 if (quantity >= 0)
14036 {
14037 item.SetQuantityNormalized(quantity, false);
14038 }
14039 else
14040 {
14042 }
14043
14044 }
14045 }
14046}
14047
14048#ifdef DEVELOPER
14050#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.