8540{
 8542    {
 8543        return true;
 8544    }
 8545};
 8546 
 8547
 8548 
 8550{   
 8554    
 8556    
 8559    
 8560    
 8561    
 8562    
 8563    
 8572    
 8578    
 8583    
 8588    
 8609    protected bool m_IsResultOfSplit 
 8610    
 8612    
 8617    
 8618    
 8619    
 8621    
 8625    
 8626    
 8627    
 8629
 8632    
 8633    
 8634    
 8640    
 8641    
 8649    
 8652    
 8653    
 8655    
 8656    
 8658 
 8659    
 8664    
 8665    
 8670    
 8671    
 8673    
 8674    
 8676    {
 8681        
 8682        if (!
GetGame().IsDedicatedServer())
 
 8683        {
 8685            {
 8687                
 8689                {
 8691                }
 8692            }
 8693            
 8696        }
 8697        
 8698        m_OldLocation = null;
 8699        
 8701        {
 8703        }
 8704        
 8705        if (ConfigIsExisting("headSelectionsToHide"))
 8706        {
 8709        }
 8710        
 8712        if (ConfigIsExisting("hideSelectionsByinventorySlot"))
 8713        {
 8715        }
 8716        
 8718 
 8719        m_IsResultOfSplit = false;
 8720        
 8722    }
 8723    
 8725    {
 8726        super.InitItemVariables();
 8727        
 8733        m_Count = ConfigGetInt(
"count");
 
 8734        
 8737        
 8742        
 8745        
 8750        
 8762        
 8766        
 8767        
 8770        if (ConfigIsExisting("canBeSplit"))
 8771        {
 8774        }
 8775        
 8777        if (ConfigIsExisting("itemBehaviour"))
 8779        
 8780        
 8783        RegisterNetSyncVariableInt("m_VarLiquidType");
 8784        RegisterNetSyncVariableInt("m_Cleanness",0,1);
 8785        
 8786        RegisterNetSyncVariableBoolSignal("m_WantPlayImpactSound");
 8787        RegisterNetSyncVariableFloat("m_ImpactSpeed");
 8788        RegisterNetSyncVariableInt("m_ImpactSoundSurfaceHash");
 8789        
 8790        RegisterNetSyncVariableInt("m_ColorComponentR", 0, 255);
 8791        RegisterNetSyncVariableInt("m_ColorComponentG", 0, 255);
 8792        RegisterNetSyncVariableInt("m_ColorComponentB", 0, 255);
 8793        RegisterNetSyncVariableInt("m_ColorComponentA", 0, 255);
 8794        
 8795        RegisterNetSyncVariableBool("m_IsBeingPlaced");
 8796        RegisterNetSyncVariableBool("m_IsTakeable");
 8797        RegisterNetSyncVariableBool("m_IsHologram");
 8798        
 8801        {
 8804        }
 8805        
 8807        
 8809        if (ConfigIsExisting("temperaturePerQuantityWeight"))
 8811            
 8812    }
 8813    
 8815    {
 8817    }
 8818 
 8820    {
 8823        {
 8828        }
 8829    }
 8830    
 8831    override void GetActions(
typename action_input_type, out array<ActionBase_Basic> actions)
 
 8832    {
 8834        {
 8837        }
 8838        
 8840    }
 8841    
 8843    {
 8849    }
 8850    
 8852    
 8854    {
 8856 
 8857        if (!action)
 8858        {
 8859            Debug.LogError(
"Action " + actionName + 
" dosn't exist!");
 
 8860            return;
 8861        }       
 8862        
 8864        if (!ai)
 8865        {
 8867            return;
 8868        }
 8869        
 8871        if (!action_array)
 8872        {
 8873            action_array = new array<ActionBase_Basic>;
 8875        }
 8876        if (LogManager.IsActionLogEnable())
 8877        {
 8878            Debug.ActionLog(action.ToString() + 
" -> " + ai, 
this.ToString() , 
"n/a", 
"Add action");
 
 8879        }
 8880        
 8881        if (action_array.Find(action) != -1)
 8882        {
 8883            Debug.Log(
"Action " + action.Type() + 
" already added to " + 
this + 
", skipping!");
 
 8884        }
 8885        else
 8886        {
 8887            action_array.Insert(action);
 8888        }
 8889    }
 8890    
 8892    {
 8894        ActionBase action = player.GetActionManager().GetAction(actionName);
 8897        
 8898        if (action_array)
 8899        {
 8900            action_array.RemoveItem(action);
 8901        }
 8902    }
 8903    
 8904    
 8905    
 8907    {
 8908        ActionOverrideData overrideData = new ActionOverrideData();
 8912        
 8914        if (!actionMap) 
 8915        {
 8918        }
 8919        
 8920        actionMap.Insert(this.
Type(), overrideData); 
 
 8921        
 8922    }
 8923    
 8925    
 8927    
 8928    
 8930    {
 8933        
 8936        
 8937        string config_to_search = "CfgVehicles";
 8938        string muzzle_owner_config;
 8939        
 8941        {
 8942            if (IsInherited(Weapon))
 8943                config_to_search = "CfgWeapons";    
 8944            
 8945            muzzle_owner_config = config_to_search + 
" " + 
GetType() + 
" ";
 
 8946            
 8947            string config_OnFire_class = muzzle_owner_config + "Particles " + "OnFire ";
 8948            
 8950            
 8951            if (config_OnFire_subclass_count > 0)
 8952            {
 8953                array<ref WeaponParticlesOnFire> WPOF_array = new array<ref WeaponParticlesOnFire>;
 8954                
 8955                for (int i = 0; i < config_OnFire_subclass_count; i++)
 8956                {
 8957                    string particle_class = "";
 8959                    string config_OnFire_entry = config_OnFire_class + particle_class;
 8960                    WeaponParticlesOnFire WPOF = new WeaponParticlesOnFire(this, config_OnFire_entry);
 8961                    WPOF_array.Insert(WPOF);
 8962                }
 8963                
 8964                
 8966            }
 8967        }
 8968        
 8970        {
 8971            config_to_search = "CfgWeapons"; 
 8972            muzzle_owner_config = config_to_search + 
" " + 
GetType() + 
" ";
 
 8973            
 8974            string config_OnBulletCasingEject_class = muzzle_owner_config + "Particles " + "OnBulletCasingEject ";
 8975            
 8977            
 8978            if (config_OnBulletCasingEject_count > 0  &&  IsInherited(Weapon))
 8979            {
 8980                array<ref WeaponParticlesOnBulletCasingEject> WPOBE_array = new array<ref WeaponParticlesOnBulletCasingEject>;
 8981                
 8982                for (i = 0; i < config_OnBulletCasingEject_count; i++)
 8983                {
 8984                    string particle_class2 = "";
 8986                    string config_OnBulletCasingEject_entry = config_OnBulletCasingEject_class + particle_class2;
 8987                    WeaponParticlesOnBulletCasingEject WPOBE = new WeaponParticlesOnBulletCasingEject(this, config_OnBulletCasingEject_entry);
 8988                    WPOBE_array.Insert(WPOBE);
 8989                }
 8990                
 8991                
 8993            }
 8994        }
 8995    }
 8996    
 8997    
 8999    {
 9002        
 9004        {
 9005            string config_to_search = "CfgVehicles";
 9006            
 9007            if (IsInherited(Weapon))
 9008                config_to_search = "CfgWeapons";
 9009            
 9010            string muzzle_owner_config = config_to_search + 
" " + 
GetType() + 
" ";
 
 9011            string config_OnOverheating_class = muzzle_owner_config + "Particles " + "OnOverheating ";
 9012            
 9013            if (
GetGame().ConfigIsExisting(config_OnOverheating_class))
 
 9014            {
 9015                
 9017                
 9019                {
 9021                    string error = 
"Error reading config " + 
GetType() + 
">Particles>OnOverheating - Parameter shotsToStartOverheating is configured wrong or is missing! Its value must be 1 or higher!";
 
 9023                    return;
 9024                }
 9025                
 9028                
 9029                
 9030                
 9032                array<ref WeaponParticlesOnOverheating> WPOOH_array = new array<ref WeaponParticlesOnOverheating>;
 9033                
 9034                for (int i = 0; i < config_OnOverheating_subclass_count; i++)
 9035                {
 9036                    string particle_class = "";
 9038                    string config_OnOverheating_entry = config_OnOverheating_class + particle_class;
 9040                    
 9041                    if (entry_type == CT_CLASS)
 9042                    {
 9043                        WeaponParticlesOnOverheating WPOF = new WeaponParticlesOnOverheating(this, config_OnOverheating_entry);
 9044                        WPOOH_array.Insert(WPOF);
 9045                    }
 9046                }
 9047                
 9048                
 9050            }
 9051        }
 9052    }
 9053    
 9055    {
 9057    }
 9058    
 9060    {
 9062        {
 9064            
 9067            
 9070            
 9071            CheckOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
 
 9072        }
 9073    }
 9074    
 9076    {
 9078            UpdateOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
 
 9079        
 9081            StartOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
 
 9082        
 9084            StopOverheating(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
 
 9085        
 9087        {
 9089        }
 9090    }
 9091    
 9093    {
 9095    }
 9096    
 9098    {
 9101        else
 9103        
 9105        {
 9108        }
 9109        else
 9110        {
 9113            
 9116        }
 9117        
 9119    }
 9120 
 9122    {
 9124        ItemBase.PlayOverheatingParticles(
this, ammoType, 
this, suppressor, 
"CfgWeapons");
 
 9125    }
 9126    
 9128    {
 9130        ItemBase.UpdateOverheatingParticles(
this, ammoType, 
this, suppressor, 
"CfgWeapons");
 
 9132    }
 9133    
 9135    {
 9137        ItemBase.StopOverheatingParticles(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
 
 9138    }
 9139    
 9141    {
 9144        
 9145        OverheatingParticle OP = new OverheatingParticle();
 9150        
 9152    }
 9153    
 9155    {
 9158        
 9159        return -1;
 9160    }
 9161    
 9163    {
 9165        {
 9168            
 9169            for (int i = count; i > 0; --i)
 9170            {
 9171                int id = i - 1;
 9174                
 9177                
 9178                if (overheat_coef < overheat_min  &&  overheat_coef >= overheat_max)
 9179                {
 9180                    if (p)
 9181                    {
 9184                    }
 9185                }
 9186            }
 9187        }
 9188    }
 9189    
 9191    {
 9193        {
 9195            {
 9196                int id = i - 1;
 9198                
 9199                if (OP)
 9200                {
 9202                    
 9203                    if (p)
 9204                    {
 9206                    }
 9207                    
 9208                    delete OP;
 9209                }
 9210            }
 9211            
 9214        }
 9215    }
 9216    
 9219    {
 9220        return 0.0;
 9221    }
 9222    
 9223    
 9225    {
 9226        return 250;
 9227    }
 9228    
 9230    {
 9231        return 0;
 9232    }
 9233    
 9236    {
 9238            return true;
 9239        
 9240        return false;
 9241    }
 9242    
 9245    {
 9248        
 9250        {
 9252        }
 9253        else 
 9254        {
 9255            
 9257        }
 9258        
 9260    }
 9261    
 9268    {
 9269        return -1;
 9270    }
 9271    
 9272    
 9273    
 9274    
 9276    {
 9278        {
 9280            int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
 9281 
 9282            if (r_index >= 0)
 9283            {
 9284                    InventoryLocation r_il = new InventoryLocation;
 9285                    player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
 9286 
 9287                    player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
 9290                    {
 9291                        r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
 
 9292                    }
 9294                    {
 9295                        r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
 
 9296                    }
 9297            
 9298            }
 9299            
 9300            player.GetHumanInventory().ClearUserReservedLocation(this);
 9301        }
 9302        
 9305    }
 9306 
 9307    
 9308    
 9309    
 9311    {
 9312        return ItemBase.m_DebugActionsMask; 
 
 9313    }
 9314    
 9316    {
 9317        return ItemBase.m_DebugActionsMask & mask;  
 
 9318    }
 9319    
 9321    {
 9322        ItemBase.m_DebugActionsMask = mask;
 
 9323    }
 9324    
 9326    {
 9327        ItemBase.m_DebugActionsMask |= mask;
 
 9328    }
 9329    
 9331    {
 9332        ItemBase.m_DebugActionsMask &= ~mask;
 
 9333    }
 9334    
 9336    {
 9338        {
 9340        }
 9341        else
 9342        {
 9344        }
 9345    }
 9346    
 9347    
 9349    {
 9350        if (GetEconomyProfile())
 9351        {
 9352            float q_max = GetEconomyProfile().GetQuantityMax();
 9353            if (q_max > 0)
 9354            {
 9355                float q_min = GetEconomyProfile().GetQuantityMin();
 9356                float quantity_randomized = Math.RandomFloatInclusive(q_min, q_max);
 9357                
 9359                {
 9360                    ComponentEnergyManager comp = GetCompEM();
 9362                    {
 9364                    }
 9365                }
 9367                {
 9369                    
 9370                }
 9371                
 9372            }
 9373        }
 9374    }
 9375    
 9378    {
 9379        EntityAI parent = GetHierarchyParent();
 
 9380        
 9381        if (parent)
 9382        {
 9383            InventoryLocation inventory_location_to_lock = new InventoryLocation;
 9384            GetInventory().GetCurrentInventoryLocation(inventory_location_to_lock);
 9385            parent.GetInventory().SetSlotLock(inventory_location_to_lock.
GetSlot(), 
true);
 
 9386        }
 9387    }
 9388    
 9391    {
 9392        EntityAI parent = GetHierarchyParent();
 
 9393        
 9394        if (parent)
 9395        {
 9396            InventoryLocation inventory_location_to_unlock = new InventoryLocation;
 9397            GetInventory().GetCurrentInventoryLocation(inventory_location_to_unlock);
 9398            parent.GetInventory().SetSlotLock(inventory_location_to_unlock.
GetSlot(), 
false);
 
 9399        }
 9400    }
 9401    
 9403    {
 9404        
 9405
 9406
 9407
 9409        
 9411        {
 9412            if (ScriptInputUserData.CanStoreInputUserData())
 9413            {
 9414                ScriptInputUserData ctx = new ScriptInputUserData;
 9420                ctx.
Write(use_stack_max);
 
 9423                
 9425                {
 9426                    GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(item2,null,GameInventory.c_InventoryReservationTimeoutShortMS);
 
 9427                }
 9428            }
 9429        }
 9430        else if (!
GetGame().IsMultiplayer())
 
 9431        {
 9433        }
 9434    }
 9435    
 9437    {
 9439    }
 9440    
 9442    {
 9444    }
 9445    
 9447    {
 9449    }
 9450    
 9452    {
 9453        
 9454        return false;
 9455    }
 9456    
 9458    {
 9459        return false;
 9460    }
 9461    
 9465    {
 9466        return false;
 9467    }
 9468    
 9470    {
 9471        return "";
 9472    }
 9473    
 9475    
 9477    {
 9478        return false;
 9479    }
 9480    
 9482    {
 9483        return true;
 9484    }
 9485    
 9486    
 9487    
 9489    {
 9490        return true;
 9491    }
 9492    
 9494    {
 9495        return true;
 9496    }
 9497    
 9499    {
 9500        PlayerBase player = PlayerBase.Cast(
g_Game.GetPlayer());
 
 9502    }
 9503    
 9505    {
 9507    }
 9508    
 9510    {
 9512        if (!is_being_placed)
 9514        SetSynchDirty();
 9515    }
 9516    
 9517    
 9519    
 9521    {
 9523    }
 9524    
 9526    {
 9528    }
 9529    
 9531    {
 9532        return 1;
 9533    }
 9534    
 9536    {
 9537        return false;
 9538    }
 9539    
 9541    {
 9543        SetSynchDirty();
 9544    }
 9545    
 9546
 9547
 9548
 9549
 9550
 9551
 9552
 9553
 9554
 9555
 9556
 9557
 9558
 9559
 9560
 9561
 9562
 9563
 9564
 9565
 9566
 9567
 9568
 9569
 9570
 9571
 9572
 9573
 9574 
 9575
 9576
 9577    
 9578    
 9579    
 9581    {
 9582        super.OnMovedInsideCargo(container);
 9583        
 9584        MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
 9585    }
 9586    
 9587    override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
 
 9588    {
 9589        super.EEItemLocationChanged(oldLoc,newLoc);
 9590        
 9591        PlayerBase new_player = null;
 9592        PlayerBase old_player = null;
 9593        
 9594        if (newLoc.GetParent())
 9595            new_player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer());
 9596        
 9597        if (oldLoc.GetParent())
 9598            old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer());
 9599        
 9601        {
 9602            int r_index = old_player.GetHumanInventory().FindUserReservedLocationIndex(this);
 9603 
 9604            if (r_index >= 0)
 9605            {
 9606                    InventoryLocation r_il = new InventoryLocation;
 9607                    old_player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
 9608 
 9609                    old_player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
 9612                    {
 9613                        r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
 
 9614                    }
 9616                    {
 9617                        r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
 
 9618                    }
 9619            
 9620            }
 9621        }
 9622        
 9624        {
 9625            if (new_player)
 9626                new_player.ForceStandUpForHeavyItems(newLoc.GetItem());
 9627            
 9628            if (new_player == old_player)
 9629            {
 9630                
 9631                if (oldLoc.GetParent() && new_player.GetHumanInventory().LocationGetEntity(oldLoc) == NULL)
 9632                {
 9634                    {
 9635                        if (oldLoc.GetParent().GetInventory().TestAddEntityInCargoExLoc(oldLoc, false, false, false, true, false, false))
 9636                        {
 9637                            new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
 9638                        }
 9639                    }
 9640                    else
 9641                    {
 9642                        new_player.GetHumanInventory().SetUserReservedLocation(this,oldLoc);
 9643                    }
 9644                }
 9645                
 9646                if (new_player.GetHumanInventory().FindUserReservedLocationIndex(this) >= 0)
 9647                {
 9648                    int type = oldLoc.GetType();
 9650                    {
 9651                        oldLoc.GetParent().GetOnSetLock().Invoke(this);
 9652                    }
 9654                    {
 9655                        oldLoc.GetParent().GetOnAttachmentSetLock().Invoke(this, oldLoc.GetSlot());
 9656                    }
 9657                }
 9658                if (!m_OldLocation)
 9659                {
 9660                    m_OldLocation = new InventoryLocation;
 9661                }
 9662                m_OldLocation.Copy(oldLoc);
 9663            }
 9664            else
 9665            {
 9666                if (m_OldLocation)
 9667                {
 9668                    m_OldLocation.Reset();
 9669                }
 9670            }
 9671            
 9673        }
 9674        else
 9675        {
 9676            if (new_player)
 9677            {
 9678                int res_index = new_player.GetHumanInventory().FindCollidingUserReservedLocationIndex(this, newLoc);
 9679                if (res_index >= 0)
 9680                {
 9681                    InventoryLocation il = new InventoryLocation;
 9682                    new_player.GetHumanInventory().GetUserReservedLocation(res_index,il);
 9684                    new_player.GetHumanInventory().ClearUserReservedLocationAtIndex(res_index);
 9687                    {
 9688                        il.
GetParent().GetOnReleaseLock().Invoke(it);
 
 9689                    }
 9691                    {
 9693                    }
 9694                    
 9695                }
 9696            }
 9698            {
 9699                
 9701            }
 9702        
 9703            if (m_OldLocation)
 9704            {
 9705                m_OldLocation.Reset();
 9706            }
 9707        }
 9708    }
 9709    
 9710    override void EOnContact(IEntity other, Contact extra)
 
 9711    {
 9713        {
 9714            int liquidType = -1;
 9716            if (impactSpeed > 0.0)
 9717            {
 9719                #ifndef SERVER
 9721                #else
 9723                SetSynchDirty();
 9724                #endif
 9726            }
 9727        }
 9728        
 9729        #ifdef SERVER
 9730        if (GetCompEM() && GetCompEM().IsPlugged())
 9731        {
 9732            if (GetCompEM().GetCordLength() < vector.Distance(
GetPosition(), GetCompEM().GetEnergySource().
GetPosition()))
 
 9733                GetCompEM().UnplugThis();
 9734        }
 9735        #endif
 9736    }
 9737    
 9739    
 9741    {
 9743    }
 9744    
 9746    {
 9747        
 9748    }
 9749    
 9751    {
 9752        super.OnItemLocationChanged(old_owner, new_owner);
 9753                
 9754        PlayerBase relatedPlayer = PlayerBase.Cast(old_owner);
 9755        PlayerBase playerNew = PlayerBase.Cast(new_owner);
 9756        
 9757        if (!relatedPlayer && playerNew)
 9758            relatedPlayer = playerNew;
 9759        
 9760        if (relatedPlayer && relatedPlayer.GetPerformedActionID() != -1)
 9761        {
 9763            if (actionMgr)
 9764            {
 9765                ActionBase currentAction = actionMgr.GetRunningAction();
 9766                if (currentAction)
 9768            }
 9769        }
 9770        
 9771        Man ownerPlayerOld = null;
 9772        Man ownerPlayerNew = null;
 9773            
 9774        if (old_owner)   
 9775        {
 9776            if (old_owner.
IsMan())
 
 9777            {
 9778                ownerPlayerOld = Man.Cast(old_owner);
 9779            }
 9780            else
 9781            {
 9782                ownerPlayerOld = Man.Cast(old_owner.GetHierarchyRootPlayer());
 9783            }
 9784        }
 9785        else 
 9786        {
 9788            {
 9790                
 9791                if (!action || !playerNew || playerNew.GetPerformedActionID() != action.
GetID())
 
 9792                {
 9793                    GetCompEM().UnplugThis();
 9794                }
 9795            }
 9796        }
 9797        
 9798        if (new_owner)
 9799        {
 9800            if (new_owner.
IsMan())
 
 9801            {
 9802                ownerPlayerNew = Man.Cast(new_owner);
 9803            }
 9804            else
 9805            {
 9806                ownerPlayerNew = Man.Cast(new_owner.GetHierarchyRootPlayer());
 9807            }
 9808        }
 9809        
 9810        if (ownerPlayerOld != ownerPlayerNew)
 9811        {
 9812            if (ownerPlayerOld)
 9813            {
 9814                array<EntityAI> subItemsExit = new array<EntityAI>;
 9816                for (int i = 0; i < subItemsExit.Count(); i++)
 9817                {
 9820                }
 9821            }
 9822 
 9823            if (ownerPlayerNew)
 9824            {
 9825                array<EntityAI> subItemsEnter = new array<EntityAI>;
 9827                for (int j = 0; j < subItemsEnter.Count(); j++)
 9828                {
 9831                }
 9832            }
 9833        }
 9834        else if (ownerPlayerNew != null)
 9835        {
 9836            PlayerBase nplayer;
 9837            if (PlayerBase.CastTo(nplayer, ownerPlayerNew))
 9838            {
 9839                array<EntityAI> subItemsUpdate = new array<EntityAI>;
 9841                for (int k = 0; k < subItemsUpdate.Count(); k++)
 9842                {
 9844                    itemUpdate.UpdateQuickbarShortcutVisibility(nplayer);
 9845                }
 9846            }
 9847        }
 9848        
 9849        if (old_owner)
 9850            old_owner.OnChildItemRemoved(this);
 9851        if (new_owner)
 9852            new_owner.OnChildItemReceived(this);
 9853    }
 9854 
 9855    
 9857    {
 9858        super.EEDelete(parent);
 9859        PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
 9860        if (player)
 9861        {
 9863            
 9864            if (player.IsAlive())
 9865            {
 9866                int r_index = player.GetHumanInventory().FindUserReservedLocationIndex(this);
 9867                if (r_index >= 0)
 9868                {           
 9869                    InventoryLocation r_il = new InventoryLocation;
 9870                    player.GetHumanInventory().GetUserReservedLocation(r_index,r_il);
 9871    
 9872                    player.GetHumanInventory().ClearUserReservedLocationAtIndex(r_index);
 9875                    {
 9876                        r_il.
GetParent().GetOnReleaseLock().Invoke(
this);
 
 9877                    }
 9879                    {
 9880                        r_il.
GetParent().GetOnAttachmentReleaseLock().Invoke(
this, r_il.
GetSlot());
 
 9881                    }
 9882                
 9883                }
 9884                
 9885                player.RemoveQuickBarEntityShortcut(this);
 9886            }
 9887        }
 9888    }
 9889    
 9891    {
 9892        super.EEKilled(killer);
 9893
 9896        {
 9897            if (
GetTemperature() >= GameConstants.ITEM_TEMPERATURE_TO_EXPLODE_MIN)
 
 9898            {
 9899                if (IsMagazine())
 9900                {
 9901                    if (Magazine.Cast(this).GetAmmoCount() > 0)
 9902                    {
 9904                    }
 9905                }
 9906                else
 9907                {
 9909                }
 9910            }
 9911        }
 9912    }
 9913    
 9915    {
 9916        MiscGameplayFunctions.RemoveAllAttachedChildrenByTypename(this, {Bolt_Base});
 9917        
 9918        super.OnWasAttached(parent, slot_id);
 9919        
 9922        
 9924    }
 9925    
 9927    {
 9928        super.OnWasDetached(parent, slot_id);
 9929        
 9932    }
 9933    
 9935    {
 9936        int idx;
 9939        
 9940        ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
 9941        if (inventory_slots.Count() < 1) 
 9942        {
 9943            inventory_slots.Insert(ConfigGetString("ChangeInventorySlot"));
 9944            attach_types.Insert(ConfigGetString("ChangeIntoOnAttach"));
 9945        }
 9946        else 
 9947        {
 9948            ConfigGetTextArray("ChangeIntoOnAttach",attach_types);
 9949        }
 9950        
 9951        idx = inventory_slots.Find(slot);
 9952        if (idx < 0)
 9953            return "";
 9954        
 9955        return attach_types.Get(idx);
 9956    }
 9957    
 9959    {
 9960        int idx = -1;
 9961        string slot;
 9962        
 9965        
 9966        this.ConfigGetTextArray("ChangeInventorySlot",inventory_slots);
 9967        if (inventory_slots.Count() < 1) 
 9968        {
 9969            inventory_slots.Insert(this.ConfigGetString("ChangeInventorySlot"));
 9970            detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
 9971        }
 9972        else 
 9973        {
 9974            this.ConfigGetTextArray("ChangeIntoOnDetach",detach_types);
 9975            if (detach_types.Count() < 1)
 9976                detach_types.Insert(this.ConfigGetString("ChangeIntoOnDetach"));
 9977        }
 9978        
 9979        for (int i = 0; i < inventory_slots.Count(); i++)
 9980        {
 9981            slot = inventory_slots.Get(i);
 9982        }
 9983        
 9984        if (slot != "")
 9985        {
 9986            if (detach_types.Count() == 1)
 9987                idx = 0;
 9988            else
 9989                idx = inventory_slots.Find(slot);
 9990        }
 9991        if (idx < 0)
 9992            return "";
 9993    
 9994        return detach_types.Get(idx);
 9995    }
 9996    
 9998    {
 9999        
10001        
10002        
10003        float min_time = 1;
10004        float max_time = 3;
10005        float delay = Math.RandomFloat(min_time, max_time);
10006        
10007        explode_timer.Run(delay, this, "DoAmmoExplosion");
10008    }
10009    
10011    {
10012        Magazine magazine = Magazine.Cast(this);
10013        int pop_sounds_count = 6;
10014        string pop_sounds[ 6 ] = { "ammopops_1","ammopops_2","ammopops_3","ammopops_4","ammopops_5","ammopops_6" };
10015        
10016        
10017        int sound_idx = Math.RandomInt(0, pop_sounds_count - 1);
10018        string sound_name = pop_sounds[ sound_idx ];
10020        
10021        
10022        magazine.ServerAddAmmoCount(-1);
10023        
10024        
10025        float min_temp_to_explode   = 100;      
10026                
10027        if (magazine.GetAmmoCount() > 0 && 
GetTemperature() >= min_temp_to_explode)   
 
10028        {
10030        }
10031    }
10032    
10033    
10034    override void EEHitBy(TotalDamageResult damageResult, 
int damageType, 
EntityAI source, 
int component, 
string dmgZone, 
string ammo, vector modelPos, 
float speedCoef)
 
10035    {
10036        super.EEHitBy(damageResult, damageType, source, 
component, dmgZone, ammo, modelPos, speedCoef);
 
10037        
10038        const int CHANCE_DAMAGE_CARGO = 4;
10039        const int CHANCE_DAMAGE_ATTACHMENT = 1;
10040        const int CHANCE_DAMAGE_NOTHING = 2;
10041        
10043        {
10044            float dmg = damageResult.
GetDamage(
"",
"Health") * -0.5;
 
10045            int chances;
10046            int rnd;
10047            
10048            if (GetInventory().GetCargo())
10049            {
10050                chances = CHANCE_DAMAGE_CARGO + CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10051                rnd = Math.RandomInt(0,chances);
10052                
10053                if (rnd < CHANCE_DAMAGE_CARGO)
10054                {
10056                }
10057                else if (rnd < (chances - CHANCE_DAMAGE_NOTHING))
10058                {
10060                }
10061            }
10062            else
10063            {
10064                chances = CHANCE_DAMAGE_ATTACHMENT + CHANCE_DAMAGE_NOTHING;
10065                rnd = Math.RandomInt(0,chances);
10066                
10067                if (rnd < CHANCE_DAMAGE_ATTACHMENT)
10068                {
10070                }
10071            }
10072        }
10073    }
10074    
10076    {
10077        if (GetInventory().GetCargo())
10078        {
10079            int item_count = GetInventory().GetCargo().GetItemCount();
10080            if (item_count > 0)
10081            {
10082                int random_pick = Math.RandomInt(0, item_count);
10084                if (!item.IsExplosive())
10085                {
10086                    item.AddHealth("","",damage);
10087                    return true;
10088                }
10089            }
10090        }
10091        return false;
10092    }
10093    
10095    {
10096        int attachment_count = GetInventory().AttachmentCount();
10097        if (attachment_count > 0)
10098        {
10099            int random_pick = Math.RandomInt(0, attachment_count);
10100            ItemBase attachment = 
ItemBase.Cast(GetInventory().GetAttachmentFromIndex(random_pick));
 
10101            if (!attachment.IsExplosive())
10102            {
10103                attachment.AddHealth("","",damage);
10104                return true;
10105            }
10106        }
10107        return false;
10108    }
10109    
10111    {
10113    }
10114    
10116    {
10118            return GetInventory().CanRemoveEntity();
10119        
10120        return false;
10121    }
10122 
10124    {
10125        
10127            return false;
10128 
10129        
10131            return false;
10132 
10133        
10134        
10136        if (delta == 0)
10137            return false;
10138 
10139        
10140        return true;
10141    }
10142    
10144    {       
10146        {
10147            if (ScriptInputUserData.CanStoreInputUserData())
10148            {
10149                ScriptInputUserData ctx = new ScriptInputUserData;
10154                ctx.
Write(destination_entity);
 
10156                ctx.
Write(slot_id);
 
10158            }
10159        }
10160        else if (!
GetGame().IsMultiplayer())
 
10161        {
10163        }
10164    }
10165 
10167    {       
10168        float split_quantity_new;
10172        InventoryLocation loc = new InventoryLocation;
10173        
10174        if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10175        {
10177                split_quantity_new = stack_max;
10178            else
10180 
10182            {
10183                new_item = 
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
 
10184                if (new_item)
10185                {
10186                    new_item.SetResultOfSplit(true);
10187                    MiscGameplayFunctions.TransferItemProperties(this, new_item);
10189                    new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10190                }
10191            }
10192        }
10193        else if (destination_entity && slot_id == -1)
10194        {
10195            if (quantity > stack_max)
10196                split_quantity_new = stack_max;
10197            else
10198                split_quantity_new = quantity;
10199            
10201            {
10203                {
10206                }
10207 
10208                if (new_item)
10209                {
10210                    new_item.SetResultOfSplit(true);        
10211                    MiscGameplayFunctions.TransferItemProperties(this, new_item);
10213                    new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10214                }
10215            }
10216        }
10217        else
10218        {
10219            if (stack_max != 0)
10220            {
10222                {
10224                }
10225                
10226                if (split_quantity_new == 0)
10227                {
10228                    if (!
GetGame().IsMultiplayer())
 
10229                        player.PhysicalPredictiveDropItem(this);
10230                    else
10231                        player.ServerDropEntity(this);
10232                    return;
10233                }
10234                
10236                {
10238                    
10239                    if (new_item)
10240                    {
10241                        new_item.SetResultOfSplit(true);
10242                        MiscGameplayFunctions.TransferItemProperties(this, new_item);
10245                        new_item.PlaceOnSurface();
10246                    }
10247                }
10248            }
10249        }
10250    }
10251    
10253    {       
10254        float split_quantity_new;
10258        InventoryLocation loc = new InventoryLocation;
10259        
10260        if (destination_entity && slot_id != -1 && InventorySlots.IsSlotIdValid(slot_id))
10261        {
10263                split_quantity_new = stack_max;
10264            else
10266 
10268            {
10269                new_item = 
ItemBase.Cast(destination_entity.GetInventory().CreateAttachmentEx(
this.GetType(), slot_id));
 
10270                if (new_item)
10271                {
10272                    new_item.SetResultOfSplit(true);
10273                    MiscGameplayFunctions.TransferItemProperties(this, new_item);
10275                    new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10276                }
10277            }
10278        }
10279        else if (destination_entity && slot_id == -1)
10280        {
10281            if (quantity > stack_max)
10282                split_quantity_new = stack_max;
10283            else
10284                split_quantity_new = quantity;
10285            
10287            {
10289                {
10292                }
10293 
10294                if (new_item)
10295                {
10296                    new_item.SetResultOfSplit(true);        
10297                    MiscGameplayFunctions.TransferItemProperties(this, new_item);
10299                    new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10300                }
10301            }
10302        }
10303        else
10304        {
10305            if (stack_max != 0)
10306            {
10308                {
10310                }
10311                
10313                {
10315                    
10316                    if (new_item)
10317                    {
10318                        new_item.SetResultOfSplit(true);
10319                        MiscGameplayFunctions.TransferItemProperties(this, new_item);
10322                        new_item.PlaceOnSurface();
10323                    }
10324                }
10325            }
10326        }
10327    }
10328    
10330    {
10332        {
10333            if (ScriptInputUserData.CanStoreInputUserData())
10334            {
10335                ScriptInputUserData ctx = new ScriptInputUserData;
10340                dst.WriteToContext(ctx);
10342            }
10343        }
10344        else if (!
GetGame().IsMultiplayer())
 
10345        {
10347        }
10348    }
10349    
10351    {
10353        {
10354            if (ScriptInputUserData.CanStoreInputUserData())
10355            {
10356                ScriptInputUserData ctx = new ScriptInputUserData;
10361                ctx.
Write(destination_entity);
 
10367            }
10368        }
10369        else if (!
GetGame().IsMultiplayer())
 
10370        {
10372        }
10373    }
10374 
10376    {
10378    }
10379    
10381    {       
10383        float split_quantity_new;
10385        if (dst.IsValid())
10386        {
10387            int slot_id = dst.GetSlot();
10389            
10390            if (quantity > stack_max)
10391                split_quantity_new = stack_max;
10392            else
10393                split_quantity_new = quantity;
10394 
10396            {
10398                
10399                if (new_item)
10400                {
10401                    new_item.SetResultOfSplit(true);
10402                    MiscGameplayFunctions.TransferItemProperties(this,new_item);
10404                    new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10405                }
10406                
10407                return new_item;
10408            }
10409        }
10410        
10411        return null;
10412    }
10413    
10415    {       
10417        float split_quantity_new;
10419        if (destination_entity)
10420        {
10422            if (quantity > stackable)
10423                split_quantity_new = stackable;
10424            else
10425                split_quantity_new = quantity;
10426            
10428            {
10429                new_item = 
ItemBase.Cast(destination_entity.GetInventory().CreateEntityInCargoEx(
this.GetType(), idx, row, col, 
false));
 
10430                if (new_item)
10431                {
10432                    new_item.SetResultOfSplit(true);    
10433                    MiscGameplayFunctions.TransferItemProperties(this,new_item);
10435                    new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10436                }
10437            }
10438        }
10439    }
10440    
10442    {
10444        {
10445            if (ScriptInputUserData.CanStoreInputUserData())
10446            {
10447                ScriptInputUserData ctx = new ScriptInputUserData;
10452                ItemBase destination_entity = 
this;
 
10453                ctx.
Write(destination_entity);
 
10457            }
10458        }
10459        else if (!
GetGame().IsMultiplayer())
 
10460        {
10462        }
10463    }
10464 
10466    {       
10468        float split_quantity_new;
10470        if (player)
10471        {
10473            if (quantity > stackable)
10474                split_quantity_new = stackable;
10475            else
10476                split_quantity_new = quantity;
10477            
10479            {
10480                EntityAI in_hands = player.GetHumanInventory().CreateInHands(this.
GetType());
 
10481                new_item = 
ItemBase.Cast(in_hands);
 
10482                if (new_item)
10483                {       
10484                    new_item.SetResultOfSplit(true);
10485                    MiscGameplayFunctions.TransferItemProperties(this,new_item);
10487                    new_item.SetQuantity(split_quantity_new, false, true);
10488                }
10489            }
10490        }
10491    }
10492    
10494    {       
10496        float split_quantity_new = Math.Floor(quantity * 0.5);
10497        
10499            return;
10500 
10502 
10503        if (new_item)
10504        {
10505            if (new_item.GetQuantityMax() < split_quantity_new)
10506            {
10507                split_quantity_new = new_item.GetQuantityMax();
10508            }
10509            
10510            new_item.SetResultOfSplit(true);
10511            MiscGameplayFunctions.TransferItemProperties(this, new_item);
10512            
10514            {
10517            }
10518            else
10519            {
10521                new_item.
SetQuantity(split_quantity_new, 
false, 
true);               
 
10522            }
10523        }   
10524    }
10525    
10527    {
10529        float split_quantity_new = Math.Floor(quantity / 2);
10530        
10532            return;
10533        
10534        InventoryLocation invloc = new InventoryLocation;
10536        
10538        new_item = player.CreateCopyOfItemInInventoryOrGroundEx(this, true);
10539        
10540        if (new_item)
10541        {
10542            if (new_item.GetQuantityMax() < split_quantity_new)
10543            {
10544                split_quantity_new = new_item.GetQuantityMax();
10545            }
10547            {
10550            }
10551            else if (split_quantity_new > 1)
10552            {
10554                new_item.
SetQuantity(split_quantity_new, 
false, 
true);
 
10555            }
10556        }
10557    }
10558    
10561    {
10562        SetWeightDirty();
10564        
10565        if (parent)
10566            parent.OnAttachmentQuantityChangedEx(this, delta);
10567        
10569        {
10571            {
10573            }
10575            {
10576                ErrorEx(
"Undefined liquid type quantity changed, please define liquid type first! Using init value.",
ErrorExSeverity.INFO);
 
10578            }
10579        }
10580            
10581    }
10582    
10585    {
10586        
10587    }
10588    
10591    {
10593    }
10594 
10596    {
10597        super.EEHealthLevelChanged(oldLevel,newLevel,zone);
10598        
10600        {
10601            if (newLevel == GameConstants.STATE_RUINED)
10602            {
10604                EntityAI parent = GetHierarchyParent();
 
10605                if (parent && parent.IsFireplace())
10606                {
10607                    CargoBase cargo = GetInventory().GetCargo();
10608                    if (cargo)
10609                    {
10611                        {
10613                        }
10614                    }
10615                }
10616            }
10617            
10619            {
10620                
10622                return;
10623            }
10624 
10625            if (
m_Cleanness != 0 && oldLevel < newLevel && newLevel != 0)
 
10626            {
10628            }
10629        }
10630    }
10631        
10632    
10634    {
10635        super.OnRightClick();
10636        
10638        {
10640            {
10641                if (ScriptInputUserData.CanStoreInputUserData())
10642                {
10643                    EntityAI root = GetHierarchyRoot();
 
10644                    Man playerOwner = GetHierarchyRootPlayer();
10645                    InventoryLocation dst = new InventoryLocation;
10646                    
10647                    
10648                    if (!playerOwner && root && root == this)
10649                    {
10651                    }
10652                    else
10653                    {
10654                        
10655                        GetInventory().GetCurrentInventoryLocation(dst);
10657                        {
10660                            {
10662                            }
10663                            else
10664                            {
10666                                
10667
10668                                if (
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(
this, dst))
 
10669                                {
10671                                }
10672                                else
10673                                {
10674                                    GetGame().
GetPlayer().GetInventory().AddInventoryReservationEx(null, dst, GameInventory.c_InventoryReservationTimeoutShortMS);
 
10675                                }
10676                            }
10677                        }
10678                    }
10679                    
10680                    ScriptInputUserData ctx = new ScriptInputUserData;
10688                }
10689            }
10690            else if (!
GetGame().IsMultiplayer())
 
10691            {
10693            }
10694        }
10695    }
10696        
10698    {
10699        if (root)
10700        {
10701            vector m4[4];
10702            root.GetTransform(m4);
10703            dst.SetGround(this, m4);
10704        }
10705        else
10706        {
10707            GetInventory().GetCurrentInventoryLocation(dst);
10708        }
10709    }
10710    
10711    override bool CanBeCombined(
EntityAI other_item, 
bool reservation_check = 
true, 
bool stack_max_limit = 
false)
 
10712    {
10713        
10714        if (!other_item || 
GetType() != other_item.GetType() || (
IsFullQuantity() && other_item.GetQuantity() > 0) || other_item == 
this)
 
10715            return false;
10716 
10717        if (GetHealthLevel() == GameConstants.STATE_RUINED || other_item.GetHealthLevel() == GameConstants.STATE_RUINED)    
10718            return false;
10719        
10720        
10722            return false;
10723 
10724        
10725        Magazine mag = Magazine.Cast(this);
10726        if (mag)
10727        {
10728            if (mag.GetAmmoCount() >= mag.GetAmmoMax())
10729                return false;
10730            
10731            if (stack_max_limit)
10732            {
10733                Magazine other_mag = Magazine.Cast(other_item);
10734                if (other_item)
10735                {
10736                    if (mag.GetAmmoCount() + other_mag.GetAmmoCount() > mag.GetAmmoMax())
10737                        return false;
10738                }
10739            
10740            }
10741        }
10742        else
10743        {
10744            
10746                return false;
10747            
10749                return false;
10750        }
10751 
10752        PlayerBase player = null;
10753        if (CastTo(player, GetHierarchyRootPlayer())) 
10754        {
10755            if (player.GetInventory().HasAttachment(this))
10756                return false;
10757            
10758            if (player.IsItemsToDelete())
10759                return false;
10760        }
10761 
10762        if (reservation_check && (GetInventory().HasInventoryReservation(this, null) || other_item.GetInventory().HasInventoryReservation(other_item, null)))
10763            return false;
10764        
10765        int slotID;
10767        if (GetInventory().GetCurrentAttachmentSlotInfo(slotID,
slotName) && GetHierarchyParent().GetInventory().GetSlotLock(slotID))
 
10768            return false;
10769 
10770        return true;
10771    }
10772    
10774    {
10776    }
10777    
10779    {
10780        return m_IsResultOfSplit;
10781    }
10782    
10784    {
10785        m_IsResultOfSplit = value;
10786    }
10787    
10789    {
10791    }
10792    
10794    {
10795        float other_item_quantity = other_item.GetQuantity();
10796        float this_free_space;
10797            
10799        
10801            
10802        if (other_item_quantity > this_free_space)
10803        {
10804            return this_free_space;
10805        }
10806        else
10807        {
10808            return other_item_quantity;
10809        }
10810    }
10811    
10813    {
10815    }
10816    
10818    {
10820            return;
10821        
10822        if (!IsMagazine() && other_item)
10823        {
10825            if (quantity_used != 0)
10826            {
10827                float hp1 = GetHealth01("","");
10828                float hp2 = other_item.GetHealth01("","");
10829                float hpResult = ((hp1*
GetQuantity()) + (hp2*quantity_used));
 
10830                hpResult = hpResult / (
GetQuantity() + quantity_used);
 
10831 
10832                hpResult *= GetMaxHealth();
10833                Math.Round(hpResult);
10834                SetHealth("", "Health", hpResult);
10835 
10837                other_item.AddQuantity(-quantity_used);
10838            }
10839        }
10841    }
10842 
10844    {
10845        #ifdef SERVER
10846        if (!GetHierarchyRootPlayer() && GetHierarchyParent())
10847            GetHierarchyParent().IncreaseLifetimeUp();
10848        #endif
10849    };
10850 
10852    {
10853        PlayerBase p = PlayerBase.Cast(player);
10854            
10855        array<int> recipesIds = p.m_Recipes;
10856        PluginRecipesManager moduleRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
 
10857        if (moduleRecipesManager)
10858        {
10859            EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();
 
10860            moduleRecipesManager.GetValidRecipes(
ItemBase.Cast(
this), 
ItemBase.Cast(itemInHands), recipesIds, p);
 
10861        }
10862 
10863        for (int i = 0;i < recipesIds.Count(); i++)
10864        {
10865            int key = recipesIds.Get(i);
10866            string recipeName = moduleRecipesManager.GetRecipeName(key);
10868        }
10869    }
10870    
10871    
10872    override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
 
10873    {
10874        super.GetDebugActions(outputList);
10875            
10876        
10882        
10883        
10888        
10893        
10894        
10898 
10899        
10901        {
10905        }
10906        
10909 
10910        
10914        
10916 
10917        InventoryLocation loc = new InventoryLocation();
10918        GetInventory().GetCurrentInventoryLocation(loc);
10920        {
10921            if (Gizmo_IsSupported())
10924        }
10925 
10927    }
10928    
10929    
10930    
10931    
10933    {
10934        super.OnAction(action_id, player, ctx);
10935 
10937        {
10938            switch (action_id)
10939            {
10942                    return true;
10945                    return true;
10946            }
10947        }
10948 
10950        {
10951            switch (action_id)
10952            {
10954                    Delete();
10955                    return true;
10956            }
10957        }
10958 
10959        if (action_id >= 
EActions.RECIPES_RANGE_START && action_id < 
EActions.RECIPES_RANGE_END)
 
10960        {
10961            PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
 
10962            int idWithoutOffset = action_id - 
EActions.RECIPES_RANGE_START;
 
10963            PlayerBase p = PlayerBase.Cast(player);
10964            if (
EActions.RECIPES_RANGE_START  < 1000)
 
10965            {
10966                float anim_length = plugin_recipes_manager.GetRecipeLengthInSecs(idWithoutOffset);
10967                float specialty_weight = plugin_recipes_manager.GetRecipeSpecialty(idWithoutOffset);
10968            }
10969        }
10970        #ifndef SERVER
10971        else if (action_id == 
EActions.WATCH_PLAYER)
 
10972        {
10973            PluginDeveloper.SetDeveloperItemClientEx(player);
10974        }
10975        #endif
10977        {
10978            if (action_id >= 
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START && action_id < 
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_END)
 
10979            {
10980                int id = action_id - 
EActions.DEBUG_ITEM_WATCH_BUTTON_RANGE_START;
 
10981                OnDebugButtonPressServer(id + 1);
10982            }
10983            
10984            else if (action_id >= 
EActions.DEBUG_AGENTS_RANGE_INJECT_START && action_id < 
EActions.DEBUG_AGENTS_RANGE_INJECT_END)
 
10985            {
10986                int agent_id = action_id - 
EActions.DEBUG_AGENTS_RANGE_INJECT_START;
 
10988            }
10989    
10990            else if (action_id >= 
EActions.DEBUG_AGENTS_RANGE_REMOVE_START && action_id < 
EActions.DEBUG_AGENTS_RANGE_REMOVE_END)
 
10991            {
10992                int agent_id2 = action_id - 
EActions.DEBUG_AGENTS_RANGE_REMOVE_START;
 
10994            }
10995            
10996            else if (action_id == 
EActions.ADD_QUANTITY)
 
10997            {
10998                if (IsMagazine())
10999                {
11000                    Magazine mag = Magazine.Cast(this);
11001                    mag.ServerSetAmmoCount(mag.GetAmmoCount() + mag.GetAmmoMax() * 0.2);
11002                }
11003                else
11004                {
11006                }
11007                
11008                if (m_EM)
11009                {
11010                    m_EM.AddEnergy(m_EM.GetEnergyMax() * 0.2);
11011                }
11012                
11013            }
11014                        
11015            else if (action_id == 
EActions.REMOVE_QUANTITY) 
 
11016            {
11017                if (IsMagazine())
11018                {
11019                    Magazine mag2 = Magazine.Cast(this);
11020                    mag2.ServerSetAmmoCount(mag2.GetAmmoCount() - mag2.GetAmmoMax() * 0.2);
11021                }
11022                else
11023                {
11025                }
11026                if (m_EM)
11027                {
11028                    m_EM.AddEnergy(- m_EM.GetEnergyMax() * 0.2);
11029                }
11030                
11031            }
11032            
11033            else if (action_id == 
EActions.SET_QUANTITY_0) 
 
11034            {
11036                
11037                if (m_EM)
11038                {
11039                    m_EM.SetEnergy(0);
11040                }
11041            }
11042            
11043            else if (action_id == 
EActions.SET_MAX_QUANTITY) 
 
11044            {
11046                
11047                if (m_EM)
11048                {
11049                    m_EM.SetEnergy(m_EM.GetEnergyMax());
11050                }
11051            }
11052    
11053            else if (action_id == 
EActions.ADD_HEALTH) 
 
11054            {
11055                AddHealth("","",GetMaxHealth("","Health")/5);
11056            }
11057            else if (action_id == 
EActions.REMOVE_HEALTH) 
 
11058            {
11059                AddHealth("","",-GetMaxHealth("","Health")/5);
11060            }
11061            else if (action_id == 
EActions.DESTROY_HEALTH) 
 
11062            {
11063                SetHealth01("","",0);
11064            }
11065            else if (action_id == 
EActions.WATCH_ITEM)
 
11066            {
11068                mid.RegisterDebugItem(
ItemBase.Cast(
this), PlayerBase.Cast(player));
 
11069                #ifdef DEVELOPER
11070                SetDebugDeveloper_item(this);
11071                #endif
11072            }
11073            
11074            else if (action_id == 
EActions.ADD_TEMPERATURE)
 
11075            {
11076                AddTemperature(20);
11077                
11078            }
11079            
11080            else if (action_id == 
EActions.REMOVE_TEMPERATURE)
 
11081            {
11082                AddTemperature(-20);
11083                
11084            }
11085            
11086            else if (action_id == 
EActions.FLIP_FROZEN)
 
11087            {
11088                SetFrozen(!GetIsFrozen());
11089                
11090            }
11091            
11092            else if (action_id == 
EActions.ADD_WETNESS)
 
11093            {
11095                
11096            }
11097            
11098            else if (action_id == 
EActions.REMOVE_WETNESS)
 
11099            {
11101                
11102            }
11103    
11104            else if (action_id == 
EActions.LIQUIDTYPE_UP)
 
11105            {
11108                
11109                
11110            }
11111            
11112            else if (action_id == 
EActions.LIQUIDTYPE_DOWN)
 
11113            {
11116            }
11117 
11118            else if (action_id == 
EActions.MAKE_SPECIAL)
 
11119            {
11120                auto debugParams = DebugSpawnParams.WithPlayer(player);
11121                OnDebugSpawnEx(debugParams);
11122            }
11123            
11124        }
11125 
11126        
11127        return false;
11128    }
11129 
11130    
11131    
11132    
11136    
11139 
11140    
11141    
11143    {
11144        return false;
11145    }
11146    
11147    
11149    {
11150        return true;
11151    }
11152    
11153    
11155    {
11156        return true;
11157    }
11158    
11159    
11160    
11162    {
11163        string config_path = 
string.Format(
"CfgVehicles %1 Food FoodStages", 
GetType());
 
11165    }
11166    
11169    {
11170        return null;
11171    }
11172    
11174    {
11175        return false;
11176    }
11177    
11179    {
11180        return false;
11181    }       
11182    
11186    
11187    
11189    {
11190        PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
 
11191        return module_repairing.CanRepair(this, item_repair_kit);
11192    }
11193 
11194    
11195    bool Repair(PlayerBase player, 
ItemBase item_repair_kit, 
float specialty_weight)
 
11196    {
11197        PluginRepairing module_repairing = PluginRepairing.Cast(
GetPlugin(PluginRepairing));
 
11198        return module_repairing.Repair(player, this, item_repair_kit, specialty_weight);
11199    }
11200 
11201    
11203    {
11204        
11205
11206
11207
11208
11209
11210
11211        
11212        return 1;
11213    }
11214    
11215    
11216    
11218    {
11220    }
11221    
11222    
11223    
11225    {
11227    }
11228    
11229    
11238    {
11239        PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11240        
11241        if (player)
11242        {
11243            player.MessageStatus(text);
11244        }
11245    }
11246 
11247    
11256    {
11257        PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11258        
11259        if (player)
11260        {
11261            player.MessageAction(text);
11262        }
11263    }
11264 
11265    
11274    {
11275        PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11276        
11277        if (player)
11278        {
11279            player.MessageFriendly(text);
11280        }
11281    }
11282 
11283    
11292    {
11293        PlayerBase player = PlayerBase.Cast(this.GetHierarchyRootPlayer());
11294        
11295        if (player)
11296        {
11297            player.MessageImportant(text);
11298        }
11299    }
11300 
11302    {
11303        return true;
11304    }
11305 
11306    
11307    override bool KindOf(
string tag)
 
11308    {
11309        bool found = false;
11310        string item_name = this.
GetType();
 
11313        
11314        int array_size = item_tag_array.Count();
11315        for (int i = 0; i < array_size; i++)
11316        {
11317            if (item_tag_array.Get(i) == tag)
11318            {
11319                found = true;
11320                break;
11321            }
11322        }
11323        return found;
11324    }
11325 
11326    
11328    {
11329        
11330        super.OnRPC(sender, rpc_type,ctx);
11331            
11332        
11333        switch (rpc_type)
11334        {
11335            #ifndef SERVER
11336            case ERPCs.RPC_SOUND_LOCK_ATTACH:
 
11337                Param2<bool, string> p = new Param2<bool, string>(false, "");
11338                    
11340                    return;
11341            
11342                bool play = p.param1;
11343                string soundSet = p.param2;
11344                
11345                if (play)
11346                {
11348                    {
11350                        {
11352                        }
11353                    }
11354                    else
11355                    {
11357                    }
11358                }
11359                else
11360                {
11362                }
11363            
11364            break;
11365            #endif
11366        
11367        }
11368        
11370        {
11372        }
11373    }
11374 
11375    
11376    
11377    
11379    {
11380        PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
 
11381        return plugin.GetID(
name);
 
11382    }
11383 
11385    {
11386        PluginVariables plugin = PluginVariables.Cast(
GetPlugin(PluginVariables));
 
11387        return plugin.GetName(id);
11388    }
11389
11392    {
11393        
11394        
11395        int varFlags;
11396        if (!ctx.
Read(varFlags))
 
11397            return;
11398        
11399        if (varFlags & ItemVariableFlags.FLOAT)
11400        {
11402        }
11403    }
11404    
11406    {
11407        
11408        super.SerializeNumericalVars(floats_out);
11409        
11410        
11411        
11413        {
11415        }
11416        
11418        {
11420        }
11421        
11423        {
11425        }
11426        
11428        {
11433        }
11434        
11436        {
11438        }
11439    }
11440    
11442    {
11443        
11444        super.DeSerializeNumericalVars(floats);
11445        
11446        
11447        int index = 0;
11448        int mask = Math.Round(floats.Get(index));
11449        
11450        index++;
11451        
11453        {
11455            {
11457            }
11458            else
11459            {
11460                float quantity = floats.Get(index);
11461                SetQuantity(quantity, 
true, 
false, 
false, 
false);
 
11462            }
11463            index++;
11464        }
11465        
11467        {
11468            float wet = floats.Get(index);
11470            index++;
11471        }
11472        
11474        {
11475            int liquidtype = Math.Round(floats.Get(index));
11477            index++;
11478        }
11479        
11481        {
11483            index++;
11485            index++;
11487            index++;
11489            index++;
11490        }
11491        
11493        {
11494            int cleanness = Math.Round(floats.Get(index));
11496            index++;
11497        }
11498    }
11499    
11501    {
11502        super.WriteVarsToCTX(ctx);
11503 
11504        
11506        {
11508        }
11509        
11511        {
11513        }
11514        
11516        {
11518        }
11519        
11521        {
11522            int r,g,b,a;
11528        }
11529        
11531        {
11533        }
11534    }
11535    
11537    {
11538        if (!super.ReadVarsFromCTX(ctx,version))
11539            return false;
11540        
11541        int intValue;
11542        float value;
11543        
11544        if (version < 140)
11545        {
11546            if (!ctx.
Read(intValue))
 
11547                return false;
11548            
11549            m_VariablesMask = intValue;
11550        }
11551        
11553        {
11554            if (!ctx.
Read(value))
 
11555                return false;
11556            
11558            {
11560            }
11561            else
11562            {
11564            }
11565        }
11566        
11567        if (version < 140)
11568        {
11570            {
11571                if (!ctx.
Read(value))
 
11572                    return false;
11573                SetTemperatureDirect(value);
11574            }
11575        }
11576        
11578        {
11579            if (!ctx.
Read(value))
 
11580                return false;
11582        }
11583        
11585        {
11586            if (!ctx.
Read(intValue))
 
11587                return false;
11589        }
11590        
11592        {
11593            int r,g,b,a;
11595                return false;
11597                return false;
11599                return false;
11601                return false;
11602            
11604        }
11605        
11607        {
11608            if (!ctx.
Read(intValue))
 
11609                return false;
11611        }
11612        
11613        if (version >= 138 && version < 140)
11614        {
11616            {
11617                if (!ctx.
Read(intValue))
 
11618                    return false;
11619                SetFrozen(intValue);
11620            }
11621        }
11622        
11623        return true;
11624    }
11625 
11626    
11628    {
11631        {
11633        }
11634        
11635        if (!super.OnStoreLoad(ctx, version))
11636        {
11638            return false;
11639        }
11640        
11641        if (version >= 114)
11642        {
11643            bool hasQuickBarIndexSaved;
11644            
11645            if (!ctx.
Read(hasQuickBarIndexSaved))
 
11646            {
11648                return false;
11649            }
11650            
11651            if (hasQuickBarIndexSaved)
11652            {
11653                int itmQBIndex;
11654                
11655                
11656                if (!ctx.
Read(itmQBIndex))
 
11657                {
11659                    return false;
11660                }
11661                
11662                PlayerBase parentPlayer = PlayerBase.Cast(GetHierarchyRootPlayer());                
11663                if (itmQBIndex != -1 && parentPlayer)
11664                    parentPlayer.SetLoadedQuickBarItemBind(this, itmQBIndex);
11665            }
11666        }
11667        else
11668        {
11669            
11670            PlayerBase player;
11671            int itemQBIndex;
11672            if (version == 
int.
MAX)
 
11673            {
11674                if (!ctx.
Read(itemQBIndex))
 
11675                {
11677                    return false;
11678                }
11679            }
11680            else if (Class.CastTo(player, GetHierarchyRootPlayer()))
11681            {
11682                
11683                if (!ctx.
Read(itemQBIndex))
 
11684                {
11686                    return false;
11687                }
11688                if (itemQBIndex != -1 && player)
11689                    player.SetLoadedQuickBarItemBind(this,itemQBIndex);
11690            }
11691        }
11692        
11693        if (version < 140)
11694        {
11695            
11696            if (!LoadVariables(ctx, version))
11697            {
11699                return false;
11700            }
11701        }
11702        
11703        
11705        {
11707            return false;
11708        }
11709        if (version >= 132)
11710        {
11712            if (raib)
11713            {
11715                {
11717                    return false;
11718                }
11719            }
11720        }
11721 
11723        return true;
11724    }
11725 
11726    
11727 
11729    {
11730        super.OnStoreSave(ctx);
11731        
11732        PlayerBase player;
11733        if (PlayerBase.CastTo(player,GetHierarchyRootPlayer()))
11734        {
11736            
11737            int itemQBIndex = -1;
11738            itemQBIndex = player.FindQuickBarEntityIndex(this);
11739            ctx.
Write(itemQBIndex);    
 
11740        }
11741        else
11742        {
11744        }
11745        
11747        
11749        if (raib)
11750        {
11752        }
11753    }
11754    
11755 
11757    {   
11758        super.AfterStoreLoad();
11759        
11761        {
11763        }
11764 
11766        {
11769        }
11770    }
11771    
11773    {
11774        super.EEOnAfterLoad();
11775        
11777        {
11779        }
11780        
11783    }
11784    
11786    {
11787        return false;
11788    }
11789    
11790    
11791    
11793    {
11795        {   
11796            #ifdef PLATFORM_CONSOLE
11797            
11799            {
11801                if (menu)
11802                {
11804                }
11805            }
11806            #endif
11807        }
11808                
11810        {
11813        }
11814        
11816        {
11817            SetWeightDirty();
11819        }
11821        {
11824        }
11825        
11827        {
11830        }
11832        {
11835        }
11836            
11837        super.OnVariablesSynchronized();
11838    }
11839 
11840    
11841    
11843    override bool SetQuantity(
float value, 
bool destroy_config = 
true, 
bool destroy_forced = 
false, 
bool allow_client = 
false, 
bool clamp_to_stack_max = 
true)
 
11844    {
11845        if (!IsServerCheck(allow_client))
11846            return false;
11847        
11849            return false;
11850        
11853        
11854        if (value <= (min + 0.001))
11855            value = min;
11856        
11857        if (value == min)
11858        {
11859            if (destroy_config)
11860            {
11861                bool dstr = ConfigGetBool("varQuantityDestroyOnMin");
11862                if (dstr)
11863                {
11865                    this.Delete();
11866                    return true;
11867                }
11868            }
11869            else if (destroy_forced)
11870            {
11872                this.Delete();
11873                return true;
11874            }
11875            
11877        }
11878        
11881        
11883        {
11885            
11886            if (delta)
11888        }
11889        
11891        
11892        return false;
11893    }
11894 
11895    
11897    bool AddQuantity(
float value, 
bool destroy_config = 
true, 
bool destroy_forced = 
false)
 
11898    {   
11900    }
11901    
11903    {
11906    }
11907    
11909    {
11912    }
11913    
11915    override void SetQuantityNormalized(
float value, 
bool destroy_config = 
true, 
bool destroy_forced = 
false)
 
11916    {
11917        float value_clamped = Math.Clamp(value, 0, 1);
11919        SetQuantity(result, destroy_config, destroy_forced);
 
11920    }
11921    
11922    
11925    {
11927    }
11928    
11930    {
11932    }
11933 
11934    
11935
11936
11937
11938
11939
11940
11941
11942    
11944    {
11945        int slot = -1;
11946        if (GetInventory())
11947        {
11948            InventoryLocation il = new InventoryLocation;
11949            GetInventory().GetCurrentInventoryLocation(il);
11951        }
11952        
11954    }
11955    
11957    {
11958        float quantity_max = 0;
11959        
11961        {
11962            if (attSlotID != -1)
11963                quantity_max = InventorySlots.GetStackMaxForSlotId(attSlotID);
11964            
11965            if (quantity_max <= 0)
11967        }
11968        
11969        if (quantity_max <= 0)
11971 
11972        return quantity_max;
11973    }
11974    
11976    {
11978    }
11979    
11981    {
11983    }
11984    
11985    
11987    {
11989    }
11990 
11992    {
11994    }
11995    
11997    {
11999    }
12000    
12001    
12003    {
12004        
12005        float weightEx = GetWeightEx();
12006        float special = GetInventoryAndCargoWeight();
12007        return weightEx - special;
12008    }
12009 
12010    
12012    {
12014    }
12015    
12017    {
12019        {
12020            #ifdef DEVELOPER
12021            if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12022            {
12023                WeightDebugData data1 = WeightDebug.GetWeightDebug(this);
12025            }
12026            #endif
12027            
12028            return GetQuantity() * GetConfigWeightModified();
 
12029        }
12030        else if (HasEnergyManager())
12031        {
12032            #ifdef DEVELOPER
12033            if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12034            {
12035                WeightDebugData data2 = WeightDebug.GetWeightDebug(this);
12036                data2.
SetCalcDetails(
"TIB2: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + GetCompEM().
GetEnergy()+
"(energy) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit)");
 
12037            }
12038            #endif
12039            return super.GetWeightSpecialized(forceRecalc) + (GetCompEM().GetEnergy() * ConfigGetFloat("weightPerQuantityUnit")) + GetConfigWeightModified();
12040        }
12041        else
12042        {
12043            #ifdef DEVELOPER
12044            if (WeightDebug.m_VerbosityFlags & WeightDebugType.RECALC_FORCED)
12045            {
12046                WeightDebugData data3 = WeightDebug.GetWeightDebug(this);
12047                data3.
SetCalcDetails(
"TIB3: "+super.GetWeightSpecialized(forceRecalc)+
"(contents weight) + " + GetConfigWeightModifiedDebugText() +
" + " + 
GetQuantity()+
"(quantity) * " + ConfigGetFloat(
"weightPerQuantityUnit") +
"(weightPerQuantityUnit))");
 
12048            }
12049            #endif
12050            return super.GetWeightSpecialized(forceRecalc) + (
GetQuantity() * ConfigGetFloat(
"weightPerQuantityUnit")) + GetConfigWeightModified();
 
12051        }
12052    }
12053
12056    {
12057        int item_count = 0;
12059        
12060        if (GetInventory().GetCargo() != NULL)
12061        {
12062            item_count = GetInventory().GetCargo().GetItemCount();
12063        }
12064        
12065        for (int i = 0; i < GetInventory().AttachmentCount(); i++)
12066        {
12067            Class.CastTo(item,GetInventory().GetAttachmentFromIndex(i));
12068            if (item)
12069                item_count += item.GetNumberOfItems();
12070        }
12071        return item_count;
12072    }
12073    
12076    {
12077        float weight = 0;
12078        float wetness = 1;
12079        if (include_wetness)
12082        {
12083            weight = wetness * m_ConfigWeight;
12084        }
12086        {
12087            weight = 1;
12088        }
12089        return weight;
12090    }
12091    
12092    
12093    
12095    {
12096        if ((
GetGame().IsServer() || !
GetGame().IsMultiplayer()) && GetInventory())
 
12097        {
12098            GameInventory inv = GetInventory();
12099            array<EntityAI> items = new array<EntityAI>;
12101            for (int i = 0; i < items.Count(); i++)
12102            {
12104                if (item)
12105                {
12107                }
12108            }
12109        }
12110    }
12111    
12112    
12113 
12114    
12116    {
12117        float energy = 0;
12118        if (HasEnergyManager())
12119        {
12120            energy = GetCompEM().GetEnergy();
12121        }
12122        return energy;
12123    }
12124    
12125    
12127    {
12128        super.OnEnergyConsumed();
12129        
12131    }
12132 
12134    {
12135        super.OnEnergyAdded();
12136        
12138    }
12139    
12140    
12142    {
12143        if (
GetGame().IsServer() && HasEnergyManager() && GetCompEM().HasConversionOfEnergyToQuantity())
 
12144        {
12146            {
12147                float energy_0to1 = GetCompEM().GetEnergy0To1();
12149            }
12150        }
12151    }
12152 
12153    
12155    {
12156        return ConfigGetFloat("heatIsolation");
12157    }
12158 
12160    {
12162    }
12163 
12165    {
12166        string paramPath = 
string.Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Drying %2", 
GetType(), pIncrementName);
 
12167        if (
GetGame().ConfigIsExisting(paramPath))
 
12169        
12170        return 0.0;
12171    }
12172    
12174    {
12175        string paramPath = 
string.
Format(
"CfgVehicles %1 EnvironmentWetnessIncrements Soaking %2", 
GetType(), pIncrementName);
 
12176        if (
GetGame().ConfigIsExisting(paramPath))
 
12178        
12179        return 0.0;
12180    }
12181    
12182    override void SetWet(
float value, 
bool allow_client = 
false)
 
12183    {
12184        if (!IsServerCheck(allow_client))
12185            return;
12186        
12189        
12191        
12192        m_VarWet = Math.Clamp(value, min, max);
 
12193        
12195        {
12198        }
12199    }
12200    
12201    override void AddWet(
float value)
 
12202    {
12204    }
12205    
12207    {
12209    }
12210    
12212    {
12214    }
12215    
12217    {
12219    }
12220    
12222    {
12224    }
12225    
12227    {
12229    }
12230    
12231    override void OnWetChanged(
float newVal, 
float oldVal)
 
12232    {
12235        if (newLevel != oldLevel)
12236        {
12238        }
12239    }
12240    
12242    {
12243        SetWeightDirty();
12244    }
12245    
12247    {
12248        return GetWetLevelInternal(
m_VarWet);
 
12249    }
12250 
12251    
12252    
12254    {
12256    }
12257    
12259    {
12261    }
12262    
12264    {
12266    }
12267    
12269    {
12271    }
12272    
12273    
12274    
12276    {
12277        if (ConfigIsExisting("itemModelLength"))
12278        {
12279            return ConfigGetFloat("itemModelLength");
12280        }
12281        return 0;
12282    }
12283    
12285    {
12286        if (ConfigIsExisting("itemAttachOffset"))
12287        {
12288            return ConfigGetFloat("itemAttachOffset");
12289        }
12290        return 0;
12291    }
12292    
12293    override void SetCleanness(
int value, 
bool allow_client = 
false)
 
12294    {
12295        if (!IsServerCheck(allow_client)) 
12296            return;
12297        
12299        
12301        
12304    }
12305    
12307    {
12309    }
12310    
12312    {
12313        return true;
12314    }
12315    
12316    
12317    
12318    
12320    {
12322    }
12323    
12325    {
12327    }
12328 
12329    
12330    
12331    
12332    override void SetColor(
int r, 
int g, 
int b, 
int a)
 
12333    {
12339    }
12341    override void GetColor(out 
int r,out 
int g,out 
int b,out 
int a)
 
12342    {
12347    }
12348    
12350    {
12352    }
12353    
12356    {
12357        int r,g,b,a;
12359        r = r/255;
12360        g = g/255;
12361        b = b/255;
12362        a = a/255;
12363        return MiscGameplayFunctions.GetColorString(r, g, b, a);
12364    }
12365    
12366    
12367 
12368    override void SetLiquidType(
int value, 
bool allow_client = 
false)
 
12369    {
12370        if (!IsServerCheck(allow_client))
12371            return;
12372        
12377    }
12378    
12380    {
12381        return ConfigGetInt("varLiquidTypeInit");
12382    }
12383    
12385    {
12387    }
12388    
12390    {
12392            SetFrozen(false);
12393    }
12394
12397    {
12398        player.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible());
12399    }
12400    
12401    
12404    {
12405        PlayerBase nplayer;
12406        if (PlayerBase.CastTo(nplayer, player))
12407        {
12409            
12410            nplayer.SetEnableQuickBarEntityShortcut(this,!GetHierarchyParent() || GetHierarchyParent().GetInventory().AreChildrenAccessible()); 
12411        }
12412    }
12413    
12414    
12417    {
12418        PlayerBase nplayer;
12419        if (PlayerBase.CastTo(nplayer,player))
12420        {       
12421            
12422            nplayer.SetEnableQuickBarEntityShortcut(this,false);
12423 
12424        }
12425        
12426        
12427        player.GetHumanInventory().ClearUserReservedLocationForContainer(this);
12428        
12429        
12430        if (HasEnergyManager())
12431        {
12432            GetCompEM().UpdatePlugState(); 
12433        }
12434    }
12435 
12436    
12438    {
12439        super.OnPlacementStarted(player);
12440        
12442    }
12443    
12444    override void OnPlacementComplete(Man player, vector position = 
"0 0 0", vector orientation = 
"0 0 0")
 
12445    {
12447        {
12448            m_AdminLog.OnPlacementComplete(player, 
this);
 
12449        }
12450        
12451        super.OnPlacementComplete(player, position, orientation);
12452    }
12453        
12454    
12455    
12456    
12457    
12459    {
12461        {
12462            return true;
12463        }
12464        else
12465        {
12466            return false;
12467        }
12468    }
12469 
12470    
12472    {
12474        {
12476        }
12477    }
12478 
12479    
12481    {
12483    }
12484    
12486    {
12488    }
12489    
12490    override void InsertAgent(
int agent, 
float count = 1)
 
12491    {
12492        if (count < 1)
12493            return;
12494        
12496    }
12497    
12500    {
12502    }
12503    
12504    
12506    {
12508    }
12509    
12510    
12511    
12512
12513
12514
12515
12516
12517
12518
12519
12520
12521
12522
12523
12524
12525
12526
12527
12528
12529
12530
12531
12532
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549    
12550    
12552    {
12554            return false;
12555        return true;
12556    }
12557    
12559    {
12560        
12562    }
12563    
12564    
12567    {
12568        super.CheckForRoofLimited(timeTresholdMS);
12569        
12571        if ((time - m_PreviousRoofTestTime) >= timeTresholdMS)
12572        {
12573            m_PreviousRoofTestTime = time;
12574            SetRoofAbove(MiscGameplayFunctions.IsUnderRoof(this));
12575        }
12576    }
12577    
12578    
12580    {
12582        {
12583            return 0;
12584        }
12585        
12586        if (GetInventory().GetAttachmentSlotsCount() != 0)
12587        {
12588            ItemBase filter = 
ItemBase.Cast(FindAttachmentBySlotName(
"GasMaskFilter"));
 
12589            if (filter)
12590                return filter.GetProtectionLevel(type, false, system);
12591            else
12592                return 0;
12593        }
12594 
12595        string subclassPath, entryName;
12596 
12597        switch (type)
12598        {
12600                entryName = "biological";
12601                break;
12603                entryName = "chemical";
12604                break;  
12605            default:
12606                entryName = "biological";
12607                break;
12608        }
12609        
12610        subclassPath = 
"CfgVehicles " + this.
GetType() + 
" Protection ";
 
12611        
12613    }
12614    
12615    
12616    
12619    {
12620        if (!IsMagazine())
12622 
12624    }
12625    
12626    
12627    
12628    
12629    
12634    {
12635        return true;
12636    }
12637 
12639    {
12641    }
12642    
12643    
12644    
12645    
12646    
12648    {
12649        if (parent)
12650        {
12651            if (parent.IsInherited(DayZInfected))
12652                return true;
12653 
12654            if (!parent.IsRuined())
12655                return true;
12656        }
12657        
12658        return true;
12659    }   
12660    
12662    {
12663        if (!super.CanPutAsAttachment(parent))
12664        {
12665            return false;
12666        }
12667        
12668        if (!IsRuined() && !parent.IsRuined())
12669        {
12670            return true;
12671        }
12672 
12673        return false;
12674    }
12675 
12677    {
12678        
12679        
12680        
12681        
12682        return super.CanReceiveItemIntoCargo(item);
12683    }
12684 
12686    {
12687        
12688        
12689        
12690        
12691        GameInventory attachmentInv = attachment.GetInventory();
12693        {
12694            if (GetHierarchyParent() && !GetHierarchyParent().IsInherited(PlayerBase))
12695                return false;
12696        }
12697        
12698        InventoryLocation loc = new InventoryLocation();
12699        attachment.GetInventory().GetCurrentInventoryLocation(loc);
12700        if (loc && loc.
IsValid() && !GetInventory().AreChildrenAccessible())
 
12701            return false;
12702        
12703        return super.CanReceiveAttachment(attachment, slotId);
12704    }
12705    
12707    {
12708        if (!super.CanReleaseAttachment(attachment))
12709            return false;
12710        
12711        return GetInventory().AreChildrenAccessible();
12712    }
12713    
12714    
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732    
12733    
12735    {
12736        int id = muzzle_owner.GetMuzzleID();
12737        array<ref WeaponParticlesOnFire> WPOF_array = 
m_OnFireEffect.Get(
id);
 
12738        
12739        if (WPOF_array)
12740        {
12741            for (int i = 0; i < WPOF_array.Count(); i++)
12742            {
12743                WeaponParticlesOnFire WPOF = WPOF_array.Get(i);
12744                
12745                if (WPOF)
12746                {
12747                    WPOF.OnActivate(weapon, muzzle_index, ammoType, muzzle_owner, suppressor, config_to_search);
12748                }
12749            }
12750        }
12751    }
12752    
12753    
12755    {
12756        int id = muzzle_owner.GetMuzzleID();
12758        
12759        if (WPOBE_array)
12760        {
12761            for (int i = 0; i < WPOBE_array.Count(); i++)
12762            {
12763                WeaponParticlesOnBulletCasingEject WPOBE = WPOBE_array.Get(i);
12764                
12765                if (WPOBE)
12766                {
12767                    WPOBE.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12768                }
12769            }
12770        }
12771    }
12772    
12773    
12775    {
12776        int id = muzzle_owner.GetMuzzleID();
12777        array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12778        
12779        if (WPOOH_array)
12780        {
12781            for (int i = 0; i < WPOOH_array.Count(); i++)
12782            {
12783                WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12784                
12785                if (WPOOH)
12786                {
12787                    WPOOH.OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
12788                }
12789            }
12790        }
12791    }
12792    
12793    
12795    {
12796        int id = muzzle_owner.GetMuzzleID();
12797        array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12798        
12799        if (WPOOH_array)
12800        {
12801            for (int i = 0; i < WPOOH_array.Count(); i++)
12802            {
12803                WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12804                
12805                if (WPOOH)
12806                {
12807                    WPOOH.OnUpdate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12808                }
12809            }
12810        }
12811    }
12812    
12813    
12815    {
12816        int id = muzzle_owner.GetMuzzleID();
12817        array<ref WeaponParticlesOnOverheating> WPOOH_array = weapon.m_OnOverheatingEffect.Get(id);
12818        
12819        if (WPOOH_array)
12820        {
12821            for (int i = 0; i < WPOOH_array.Count(); i++)
12822            {
12823                WeaponParticlesOnOverheating WPOOH = WPOOH_array.Get(i);
12824                
12825                if (WPOOH)
12826                {
12827                    WPOOH.OnDeactivate(weapon, ammoType, muzzle_owner, suppressor, config_to_search);
12828                }
12829            }
12830        }
12831    }
12832    
12833    
12834    
12836    {
12838        {   
12839            return true;
12840        }
12841        
12842        return false;
12843    }
12844    
12846    {
12848        {
12849            return true;    
12850        }
12851        
12852        return false;
12853    }
12854    
12856    {
12858        {
12859            return true;
12860        }
12861            
12862        return false;
12863    }
12864    
12866    {
12867        return false;
12868    }
12869    
12872    {
12873        return UATimeSpent.DEFAULT_DEPLOY;
12874    }
12875    
12876 
12877    
12878    
12880    {
12882        SetSynchDirty();
12883    }
12884 
12886    {
12888    }
12889    
12890    
12892    {
12893        return false;
12894    }
12895
12898    {
12899        string att_type = "None";
12900 
12901        if (ConfigIsExisting("soundAttType"))
12902        {
12903            att_type = ConfigGetString("soundAttType");
12904        }
12905        
12907    }
12908    
12910    {   
12912    }
12913    
12914    
12915    
12916    
12917    
12923            
12925    {
12928        
12930    }
12931    
12932    
12934    {
12936            return;
12937 
12939 
12942        
12945        
12946        SoundParameters params = new SoundParameters();
12950    }
12951    
12952    
12954    {
12956            return;
12957        
12959        SetSynchDirty();
12960        
12963    }
12964    
12965    
12967    {
12969            return;
12970        
12972        SetSynchDirty();
12973        
12976    }
12977    
12979    {
12981    }
12982    
12984    {
12986    }
12987                
12990    {
12991        if (!
GetGame().IsDedicatedServer())
 
12992        {
12993            if (ConfigIsExisting("attachSoundSet"))
12994            {
12995                string cfg_path = "";
12996                string soundset = "";
12997                string type_name = 
GetType();
 
12998                
13001                ConfigGetTextArray("attachSoundSet",cfg_soundset_array);
13002                ConfigGetTextArray("attachSoundSlot",cfg_slot_array);
13003                
13004                if (cfg_soundset_array.Count() > 0 && cfg_soundset_array.Count() == cfg_slot_array.Count())
13005                {
13006                    for (int i = 0; i < cfg_soundset_array.Count(); i++)
13007                    {
13008                        if (cfg_slot_array[i] == slot_type)
13009                        {
13010                            soundset = cfg_soundset_array[i];
13011                            break;
13012                        }
13013                    }
13014                }
13015                
13016                if (soundset != "")
13017                {
13018                    EffectSound sound = SEffectManager.PlaySound(soundset, 
GetPosition());
 
13020                }
13021            }
13022        }
13023    }
13024    
13026    {
13027        
13028    }
13029    
13030    void OnApply(PlayerBase player);
 
13031    
13033    {
13034        return 1.0;
13035    };
13036    
13038    {
13040    }
13041    
13043    {
13045    }
13046    
13048    
13050    {
13051        SetDynamicPhysicsLifeTime(0.01);
13053    }
13054    
13056    {
13057        array<string> zone_names = new array<string>;
13058        GetDamageZones(zone_names);
13059        for (int i = 0; i < zone_names.Count(); i++)
13060        {
13061            SetHealthMax(zone_names.Get(i),"Health");
13062        }
13063        SetHealthMax("","Health");
13064    }
13065    
13068    {
13069        float global_health = GetHealth01("","Health");
13070        array<string> zones = new array<string>;
13071        GetDamageZones(zones);
13072        
13073        for (int i = 0; i < zones.Count(); i++)
13074        {
13075            SetHealth01(zones.Get(i),"Health",global_health);
13076        }
13077    }
13078    
13081    {
13082        return IsExclusionFlagPresent(PlayerBase.GetFaceCoverageShaveValues());
13083    }
13084    
13086    {
13087        if (!hasRootAsPlayer)
13088        {
13089            if (refParentIB)
13090            {
13091                
13092                if ((refParentIB.GetWet() >= GameConstants.STATE_SOAKING_WET) && (
m_VarWet < 
m_VarWetMax))
 
13093                    AddWet(delta * GameConstants.WETNESS_RATE_WETTING_INSIDE);
 
13094                
13095                else if ((refParentIB.GetLiquidType() != 0) && (refParentIB.GetQuantity() > 0) && (
m_VarWet < 
m_VarWetMax))
 
13096                    AddWet(delta * GameConstants.WETNESS_RATE_WETTING_LIQUID);
 
13097                
13100            }
13101            else
13102            {
13103                
13106            }
13107        }
13108    }
13109    
13111    {
13113        {
13114            float target = 
g_Game.GetMission().GetWorldData().GetBaseEnvTemperatureAtObject(
this);
 
13115            if (
GetTemperature() != target || !IsFreezeThawProgressFinished())
 
13116            {
13117                float heatPermCoef = 1.0;
13119                while (ent)
13120                {
13121                    heatPermCoef *= ent.GetHeatPermeabilityCoef();
13122                    ent = ent.GetHierarchyParent();
13123                }
13124                
13125                SetTemperatureEx(
new TemperatureDataInterpolated(target,
ETemperatureAccessTypes.ACCESS_WORLD,delta,GameConstants.TEMP_COEF_WORLD,heatPermCoef));
 
13126            }
13127        }
13128    }
13129    
13131    {
13132        
13133        EntityAI parent = GetHierarchyParent();
 
13134        if (!parent)
13135        {
13136            hasParent = false;
13137            hasRootAsPlayer = false;
13138        }
13139        else
13140        {
13141            hasParent = true;
13142            hasRootAsPlayer = (GetHierarchyRootPlayer() != null);
13143            refParentIB = 
ItemBase.Cast(parent);
 
13144        }
13145    }
13146    
13147    protected void ProcessDecay(
float delta, 
bool hasRootAsPlayer)
 
13148    {
13149        
13150    }
13151    
13153    {
13154        
13155        return false;
13156    }
13157    
13159    {
13160        
13161        
13162        return false;
13163    }
13164    
13166    {
13167        
13168        return false;
13169    }
13170    
13173    {
13174        return !GetIsFrozen() && 
IsOpen();
 
13175    }
13176    
13178    {
13179        bool hasParent = false, hasRootAsPlayer = false;
13181        
13182        bool wwtu = 
g_Game.IsWorldWetTempUpdateEnabled();
 
13183        bool foodDecay = 
g_Game.IsFoodDecayEnabled();
 
13184        
13185        if (wwtu || foodDecay)
13186        {
13190            
13191            if (processWetness || processTemperature || processDecay)
13192            {
13194            
13195                if (processWetness)
13196                    ProcessItemWetness(m_ElapsedSinceLastUpdate, hasParent, hasRootAsPlayer, refParentIB);                    
 
13197                
13198                if (processTemperature)
13200            
13201                if (processDecay)
13202                    ProcessDecay(m_ElapsedSinceLastUpdate, hasRootAsPlayer);
 
13203            }
13204        }
13205    }
13206    
13209    {
13211    }
13212    
13214    {
13217        
13218        return super.GetTemperatureFreezeThreshold();
13219    }
13220    
13222    {
13225        
13226        return super.GetTemperatureThawThreshold();
13227    }
13228    
13230    {
13233        
13234        return super.GetItemOverheatThreshold();
13235    }
13236    
13238    {
13240            return Math.Lerp(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureFreezeTime()),
GetQuantityNormalized());
 
13241        
13242        return super.GetTemperatureFreezeTime();
13243    }
13244    
13246    {
13248            return Math.Lerp(GameConstants.TEMPERATURE_TIME_THAW_MIN,Math.Max(GameConstants.TEMPERATURE_TIME_FREEZE_MIN,super.GetTemperatureThawTime()),
GetQuantityNormalized());
 
13249        
13250        return super.GetTemperatureThawTime();
13251    }
13252    
13257    
13259    {
13260        return (item.IsKindOf("Cauldron") || item.IsKindOf("Pot") || item.IsKindOf("FryingPan") || item.IsKindOf("SmallProtectorCase") || (item.IsKindOf("PortableGasStove") && item.FindAttachmentBySlotName("CookingEquipment")));
13261    }
13262    
13264    {
13265        MiscGameplayFunctions.TransferItemProperties(oldItem, this);
13266    }
13267    
13270    {
13272    }
13273    
13275    {
13277    }
13278    
13280    {
13282    }
13283    
13286    {
13287        return null;
13288    }
13289    
13292    {
13293        return false;
13294    }
13295    
13297    {
13299        {
13302            if (!trg)
13303            {
13305                explosive = this;
13306            }
13307            
13308            explosive.PairRemote(trg);
13310            
13311            int persistentID = RemotelyActivatedItemBehaviour.GeneratePersistentID();
13312            trg.SetPersistentPairID(persistentID);
13313            explosive.SetPersistentPairID(persistentID);
13314            
13315            return true;
13316        }
13317        return false;
13318    }
13319    
13322    {
13323        float ret = 1.0;
13326        ret *= GetHealth01();
13327        
13328        return ret;
13329    }
13330 
13331    #ifdef DEVELOPER
13332    override void SetDebugItem()
13333    {
13334        super.SetDebugItem();
13335        _itemBase = this;
13336    }
13337    
13339    {
13340        string text = super.GetDebugText();
13341        
13343        text += 
string.
Format(
"Heat isolation(modified): %1\n", MiscGameplayFunctions.GetCurrentItemHeatIsolation(
this));
 
13344 
13345        return text;
13346    }
13347    #endif
13348    
13350    {
13351        return true;
13352    }
13353    
13355    
13357    
13359    {
13362    }
13363    
13364    
13372    
13388}
13389 
13391{
13393    if (entity)
13394    {
13395        bool is_item = entity.IsInherited(
ItemBase);
 
13396        if (is_item && full_quantity)
13397        {
13400        }
13401    }
13402    else
13403    {
13405        return NULL;
13406    }
13407    return entity;
13408}
13409 
13411{
13412    if (item)
13413    {
13414        if (health > 0)
13415            item.SetHealth("", "", health);
13416        
13417        if (item.CanHaveTemperature())
13418        {
13420            if (item.CanFreeze())
13421                item.SetFrozen(false);
13422        }
13423        
13424        if (item.HasEnergyManager())
13425        {
13426            if (quantity >= 0)
13427            {       
13428                item.GetCompEM().SetEnergy0To1(quantity);
13429            }
13430            else
13431            {
13433            }
13434        }
13435        else if (item.IsMagazine())
13436        {
13437            Magazine mag = Magazine.Cast(item);
13438            if (quantity >= 0)
13439            {       
13440                mag.ServerSetAmmoCount(mag.GetAmmoMax() * quantity);
13441            }
13442            else
13443            {       
13445            }
13446            
13447        }
13448        else
13449        {
13450            if (quantity >= 0)
13451            {       
13452                item.SetQuantityNormalized(quantity, false);
13453            }
13454            else
13455            {
13457            }
13458            
13459        }
13460    }
13461}
13462 
13463#ifdef DEVELOPER
13465#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
Open
Implementations only.
override void EEOnCECreate()
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 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)
bool ShouldSplitQuantity(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)
override 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...
bool m_HideSelectionsBySlot
bool IsOverheatingEffectActive()
void SetIsBeingPlaced(bool is_being_placed)
int GetLiquidContainerMask()
void SetInventoryLocationToVicinityOrCurrent(EntityAI root, inout InventoryLocation dst)
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()
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)
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 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 void GizmoSelectObject(Object object)
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 native void GizmoSelectPhysics(Physics physics)
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
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 string GetFoldSoundset()
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 string GetLoopFoldSoundset()
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.