Skip to content

Commit 46cf27c

Browse files
authored
fix: custom goggles (#768)
* fix: CustomGoggles * fix: retry for customGoggles This reverts commit 3c6dd7b. * fix: Finally fix and tested * remove useless code
1 parent f4b039f commit 46cf27c

1 file changed

Lines changed: 29 additions & 3 deletions

File tree

EXILED/Exiled.CustomItems/API/Features/CustomGoggles.cs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public override ItemType Type
5656
/// <inheritdoc/>
5757
protected override void SubscribeEvents()
5858
{
59+
InventorySystem.InventoryExtensions.OnInventoryDropped += RemoveSafely;
5960
Exiled.Events.Handlers.Player.UsingItem += OnInternalUsingItem;
6061
Exiled.Events.Handlers.Player.ItemRemoved += OnInternalItemRemoved;
6162
Exiled.Events.Handlers.Scp1344.Deactivating += OnInternalDeactivating;
@@ -67,6 +68,7 @@ protected override void SubscribeEvents()
6768
/// <inheritdoc/>
6869
protected override void UnsubscribeEvents()
6970
{
71+
InventorySystem.InventoryExtensions.OnInventoryDropped -= RemoveSafely;
7072
Exiled.Events.Handlers.Player.UsingItem -= OnInternalUsingItem;
7173
Exiled.Events.Handlers.Player.ItemRemoved -= OnInternalItemRemoved;
7274
Exiled.Events.Handlers.Scp1344.Deactivating -= OnInternalDeactivating;
@@ -175,11 +177,11 @@ private void InternalEquip(Player player, Scp1344 goggles)
175177

176178
private void InternalRemove(Player player, Scp1344 goggles)
177179
{
178-
if (!Remove1344Effect)
179-
player.DisableEffect(EffectType.Scp1344);
180-
181180
if (CanBeRemoveSafely)
182181
{
182+
if (!Remove1344Effect)
183+
player.DisableEffect(EffectType.Scp1344);
184+
183185
player.DisableEffect(EffectType.Blindness);
184186
player.ReferenceHub?.DisableWearables(WearableElements.Scp1344Goggles);
185187
}
@@ -211,5 +213,29 @@ private void OnInternalChangingStatus(ChangingStatusEventArgs ev)
211213

212214
InternalRemove(ev.Player, ev.Scp1344);
213215
}
216+
217+
private void RemoveSafely(ReferenceHub hub)
218+
{
219+
if (!Player.TryGet(hub, out Player owner))
220+
return;
221+
222+
foreach (Item item in owner.Items)
223+
{
224+
if (item.Type != ItemType.SCP1344)
225+
continue;
226+
227+
if (item is not Scp1344 { IsWorn: true } scp1344)
228+
continue;
229+
230+
if (!Check(item))
231+
continue;
232+
233+
if (!CanBeRemoveSafely)
234+
continue;
235+
236+
scp1344.Status = Scp1344Status.Idle;
237+
InternalRemove(owner, scp1344);
238+
}
239+
}
214240
}
215241
}

0 commit comments

Comments
 (0)