using System.Linq; using Content.Shared.Hands; using Content.Shared.NPC.Components; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Systems; namespace Content.Shared._Sunrise.FactionWeaponBlockerSystem; public sealed class SharedFactionWeaponBlockerSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnShootAttempt); SubscribeLocalEvent(OnMeleeAttempt); SubscribeLocalEvent(OnGotEquippedHand); } private void OnGotEquippedHand(Entity ent, ref GotEquippedHandEvent args) { if (!TryComp(args.User, out var npcFactionMemberComponent)) return; var canUse = npcFactionMemberComponent.Factions .Any(x => ent.Comp.Factions.Contains(x)); // Return when the serialization issues with NpcFactionMemberComponent are fixed // if (ent.Comp.CanUse == canUse) // return; ent.Comp.CanUse = canUse; Dirty(ent); } private void OnMeleeAttempt(Entity ent, ref AttemptMeleeEvent args) { if (ent.Comp.CanUse) return; args.Cancelled = true; args.Message = Loc.GetString(ent.Comp.AlertText); } private void OnShootAttempt(Entity ent, ref AttemptShootEvent args) { if (ent.Comp.CanUse) return; args.Cancelled = true; args.Message = Loc.GetString(ent.Comp.AlertText); } }