class RestrainingToolLocked extends ItemBase { void ~RestrainingToolLocked() { PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer()); if ( player && player.IsRestrained() ) { player.SetRestrained(false); } } override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc, newLoc); if ( GetGame().IsServer() ) { if ( oldLoc.IsValid() && oldLoc.GetParent() ) { PlayerBase old_player = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer()); if (old_player && old_player.IsRestrained()) { old_player.SetRestrained(false); } } } if ( newLoc.IsValid() ) { if (newLoc.GetParent()) { PlayerBase player = PlayerBase.Cast(newLoc.GetParent().GetHierarchyRootPlayer()); if ( player ) { if ( newLoc.GetType() == InventoryLocationType.HANDS ) { if ( !player.IsRestrained() ) { player.SetRestrained(true); player.OnItemInHandsChanged(); } if (player.IsControlledPlayer()) player.OnRestrainStart(); } } } } if ( GetGame().IsServer() ) { if ( newLoc.GetType() != InventoryLocationType.HANDS ) { if (oldLoc.GetParent()) { PlayerBase old_p = PlayerBase.Cast(oldLoc.GetParent().GetHierarchyRootPlayer()); if (old_p) { MiscGameplayFunctions.TransformRestrainItem(this, null, old_p, old_p); return; } } Delete(); } } } override void EEKilled(Object killer) { super.EEKilled(killer); InventoryLocation inventoryLocation = new InventoryLocation(); GetInventory().GetCurrentInventoryLocation(inventoryLocation); if (!inventoryLocation || !inventoryLocation.IsValid()) return; if (inventoryLocation.GetType() == InventoryLocationType.HANDS) { PlayerBase player = PlayerBase.Cast(inventoryLocation.GetParent()); if (player && player.IsRestrained()) { player.SetRestrained(false); MiscGameplayFunctions.TransformRestrainItem(this, null, player, player); } } } override void SetActions() { super.SetActions(); AddAction(ActionUnrestrainSelf); } } class HandcuffsLocked extends RestrainingToolLocked { } class RopeLocked extends RestrainingToolLocked { } class DuctTapeLocked extends RestrainingToolLocked { } class MetalWireLocked extends RestrainingToolLocked { } class BarbedWireLocked extends RestrainingToolLocked { }