using Content.Shared._CP14.MagicAttuning; using Content.Shared._CP14.MagicSpellStorage.Components; using Content.Shared.Clothing; using Content.Shared.Clothing.Components; using Content.Shared.Hands; namespace Content.Shared._CP14.MagicSpellStorage; public sealed partial class CP14SpellStorageSystem { private void InitializeAccess() { SubscribeLocalEvent(OnEquippedHand); SubscribeLocalEvent(OnHandAddedAttune); SubscribeLocalEvent(OnClothingAddedAttune); SubscribeLocalEvent(OnClothingEquipped); SubscribeLocalEvent(OnClothingUnequipped); } private void OnEquippedHand(Entity ent, ref GotEquippedHandEvent args) { if (!TryComp(ent, out var spellStorage)) return; TryGrantAccess((ent, spellStorage), args.User); } private void OnHandAddedAttune(Entity ent, ref AddedAttuneToMindEvent args) { if (!TryComp(ent, out var spellStorage)) return; if (args.User is null) return; if (!_hands.IsHolding(args.User.Value, ent)) return; TryGrantAccess((ent, spellStorage), args.User.Value); } private void OnClothingAddedAttune(Entity ent, ref AddedAttuneToMindEvent args) { if (!ent.Comp.Wearing) return; if (!TryComp(ent, out var spellStorage)) return; if (args.User is null) return; if (!TryComp(ent, out var clothing)) return; if (Transform(ent).ParentUid != args.User) return; TryGrantAccess((ent, spellStorage), args.User.Value); } private void OnClothingEquipped(Entity ent, ref ClothingGotEquippedEvent args) { ent.Comp.Wearing = true; if (!TryComp(ent, out var spellStorage)) return; TryGrantAccess((ent, spellStorage), args.Wearer); } private void OnClothingUnequipped(Entity ent, ref ClothingGotUnequippedEvent args) { ent.Comp.Wearing = false; _actions.RemoveProvidedActions(args.Wearer, ent); } }