diff --git a/EXILED/Exiled.CustomItems/API/Features/CustomGoggles.cs b/EXILED/Exiled.CustomItems/API/Features/CustomGoggles.cs index ca4fbdd32..60d104622 100644 --- a/EXILED/Exiled.CustomItems/API/Features/CustomGoggles.cs +++ b/EXILED/Exiled.CustomItems/API/Features/CustomGoggles.cs @@ -56,6 +56,7 @@ public override ItemType Type /// protected override void SubscribeEvents() { + InventorySystem.InventoryExtensions.OnInventoryDropped += RemoveSafely; Exiled.Events.Handlers.Player.UsingItem += OnInternalUsingItem; Exiled.Events.Handlers.Player.ItemRemoved += OnInternalItemRemoved; Exiled.Events.Handlers.Scp1344.Deactivating += OnInternalDeactivating; @@ -67,6 +68,7 @@ protected override void SubscribeEvents() /// protected override void UnsubscribeEvents() { + InventorySystem.InventoryExtensions.OnInventoryDropped -= RemoveSafely; Exiled.Events.Handlers.Player.UsingItem -= OnInternalUsingItem; Exiled.Events.Handlers.Player.ItemRemoved -= OnInternalItemRemoved; Exiled.Events.Handlers.Scp1344.Deactivating -= OnInternalDeactivating; @@ -175,11 +177,11 @@ private void InternalEquip(Player player, Scp1344 goggles) private void InternalRemove(Player player, Scp1344 goggles) { - if (!Remove1344Effect) - player.DisableEffect(EffectType.Scp1344); - if (CanBeRemoveSafely) { + if (!Remove1344Effect) + player.DisableEffect(EffectType.Scp1344); + player.DisableEffect(EffectType.Blindness); player.ReferenceHub?.DisableWearables(WearableElements.Scp1344Goggles); } @@ -211,5 +213,29 @@ private void OnInternalChangingStatus(ChangingStatusEventArgs ev) InternalRemove(ev.Player, ev.Scp1344); } + + private void RemoveSafely(ReferenceHub hub) + { + if (!Player.TryGet(hub, out Player owner)) + return; + + foreach (Item item in owner.Items) + { + if (item.Type != ItemType.SCP1344) + continue; + + if (item is not Scp1344 { IsWorn: true } scp1344) + continue; + + if (!Check(item)) + continue; + + if (!CanBeRemoveSafely) + continue; + + scp1344.Status = Scp1344Status.Idle; + InternalRemove(owner, scp1344); + } + } } }