diff --git a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs index 78d921255a..dc2739b7fe 100644 --- a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs +++ b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs @@ -18,32 +18,33 @@ public sealed class WeaponModulesSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(LightModuleOnInsert); - SubscribeLocalEvent(LightModuleOnEject); + SubscribeLocalEvent(LightModuleOnInsert); + SubscribeLocalEvent(LightModuleOnEject); - SubscribeLocalEvent(LaserModuleOnInsert); - SubscribeLocalEvent(LaserModuleOnEject); + SubscribeLocalEvent(LaserModuleOnInsert); + SubscribeLocalEvent(LaserModuleOnEject); - SubscribeLocalEvent(FlameHiderModuleOnInsert); - SubscribeLocalEvent(FlameHiderModuleOnEject); + SubscribeLocalEvent(FlameHiderModuleOnInsert); + SubscribeLocalEvent(FlameHiderModuleOnEject); SubscribeLocalEvent(SilencerModuleOnInsert); SubscribeLocalEvent(SilencerModuleOnEject); - SubscribeLocalEvent(AcceleratorModuleOnInsert); - SubscribeLocalEvent(AcceleratorModuleOnEject); + SubscribeLocalEvent(AcceleratorModuleOnInsert); + SubscribeLocalEvent(AcceleratorModuleOnEject); } #region InsertModules - private void LightModuleOnInsert(EntityUid module, Shared._White.WeaponModules.LightModuleComponent component, EntGotInsertedIntoContainerMessage args) + private void LightModuleOnInsert(EntityUid module, LightModuleComponent component, EntGotInsertedIntoContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(!component.Modules.Contains(module)) - component.Modules.Add(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(!weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Add(module); if(!TryComp(weapon, out var appearanceComponent)) return; @@ -58,15 +59,16 @@ public sealed class WeaponModulesSystem : EntitySystem _lightSystem.SetEnabled(weapon, true, light); } - private void LaserModuleOnInsert(EntityUid module, Shared._White.WeaponModules.LaserModuleComponent component, EntGotInsertedIntoContainerMessage args) + private void LaserModuleOnInsert(EntityUid module, LaserModuleComponent component, EntGotInsertedIntoContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(!component.Modules.Contains(module)) - component.Modules.Add(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(!weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Add(module); if(!TryComp(weapon, out var appearanceComponent)) return; @@ -74,21 +76,22 @@ public sealed class WeaponModulesSystem : EntitySystem _gunSystem.setProjectileSpeed(weapon, 35.5F); } - private void FlameHiderModuleOnInsert(EntityUid module, Shared._White.WeaponModules.FlameHiderModuleComponent component, EntGotInsertedIntoContainerMessage args) + private void FlameHiderModuleOnInsert(EntityUid module, FlameHiderModuleComponent component, EntGotInsertedIntoContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(!component.Modules.Contains(module)) - component.Modules.Add(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(!weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Add(module); if(!TryComp(weapon, out var appearanceComponent)) return; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "flamehider", appearanceComponent); - component.UseEffect = true; - Dirty(module, component); + weaponModulesComponent.UseEffect = true; + Dirty(module, weaponModulesComponent); } private void SilencerModuleOnInsert(EntityUid module, SilencerModuleComponent component, EntGotInsertedIntoContainerMessage args) @@ -96,10 +99,11 @@ public sealed class WeaponModulesSystem : EntitySystem if (ModulesSlot != args.Container.ID) return; - if(!component.Modules.Contains(module)) - component.Modules.Add(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(!weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Add(module); if(!TryComp(weapon, out var appearanceComponent)) return; if (!TryComp(weapon, out var gunComp)) return; @@ -107,21 +111,22 @@ public sealed class WeaponModulesSystem : EntitySystem component.OldSoundGunshot = gunComp.SoundGunshot; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "silencer", appearanceComponent); - component.UseEffect = true; + weaponModulesComponent.UseEffect = true; _gunSystem.setSound(weapon, new SoundPathSpecifier("/Audio/White/Weapons/Modules/silence.ogg")); - Dirty(module, component); + Dirty(module, weaponModulesComponent); } - private void AcceleratorModuleOnInsert(EntityUid module, Shared._White.WeaponModules.AcceleratorModuleComponent component, EntGotInsertedIntoContainerMessage args) + private void AcceleratorModuleOnInsert(EntityUid module, AcceleratorModuleComponent component, EntGotInsertedIntoContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(!component.Modules.Contains(module)) - component.Modules.Add(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(!weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Add(module); if(!TryComp(weapon, out var appearanceComponent)) return; @@ -131,51 +136,58 @@ public sealed class WeaponModulesSystem : EntitySystem #endregion #region EjectModules - private void LightModuleOnEject(EntityUid module, Shared._White.WeaponModules.LightModuleComponent component, EntGotRemovedFromContainerMessage args) + private void LightModuleOnEject(EntityUid module, LightModuleComponent component, EntGotRemovedFromContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(component.Modules.Contains(module)) - component.Modules.Remove(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Remove(module); + if(!TryComp(weapon, out var appearanceComponent)) return; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent); _lightSystem.TryGetLight(weapon, out var light); + _lightSystem.SetRadius(weapon, 0F, light); _lightSystem.SetEnabled(weapon, false, light); } - private void LaserModuleOnEject(EntityUid module, Shared._White.WeaponModules.LaserModuleComponent component, EntGotRemovedFromContainerMessage args) + private void LaserModuleOnEject(EntityUid module, LaserModuleComponent component, EntGotRemovedFromContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(component.Modules.Contains(module)) - component.Modules.Remove(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Remove(module); + if(!TryComp(weapon, out var appearanceComponent)) return; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent); _gunSystem.setProjectileSpeed(weapon, 25F); } - private void FlameHiderModuleOnEject(EntityUid module, Shared._White.WeaponModules.FlameHiderModuleComponent component, EntGotRemovedFromContainerMessage args) + private void FlameHiderModuleOnEject(EntityUid module, FlameHiderModuleComponent component, EntGotRemovedFromContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(component.Modules.Contains(module)) - component.Modules.Remove(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Remove(module); + if(!TryComp(weapon, out var appearanceComponent)) return; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent); - component.UseEffect = false; - Dirty(module, component); + weaponModulesComponent.UseEffect = false; + Dirty(module, weaponModulesComponent); } private void SilencerModuleOnEject(EntityUid module, SilencerModuleComponent component, EntGotRemovedFromContainerMessage args) @@ -183,31 +195,36 @@ public sealed class WeaponModulesSystem : EntitySystem if (ModulesSlot != args.Container.ID) return; - if(component.Modules.Contains(module)) - component.Modules.Remove(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Remove(module); + if(!TryComp(weapon, out var appearanceComponent)) return; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent); - component.UseEffect = false; + weaponModulesComponent.UseEffect = false; _gunSystem.setSound(weapon, component.OldSoundGunshot!); - Dirty(module, component); + Dirty(module, weaponModulesComponent); } - private void AcceleratorModuleOnEject(EntityUid module, Shared._White.WeaponModules.AcceleratorModuleComponent component, EntGotRemovedFromContainerMessage args) + private void AcceleratorModuleOnEject(EntityUid module, AcceleratorModuleComponent component, EntGotRemovedFromContainerMessage args) { if (ModulesSlot != args.Container.ID) return; - if(component.Modules.Contains(module)) - component.Modules.Remove(module); - EntityUid weapon = args.Container.Owner; + if (!TryComp(weapon, out var weaponModulesComponent)) return; + + if(weaponModulesComponent.Modules.Contains(module)) + weaponModulesComponent.Modules.Remove(module); + if(!TryComp(weapon, out var appearanceComponent)) return; _appearanceSystem.SetData(weapon, ModuleVisualState.Module, "none", appearanceComponent); _gunSystem.setFireRate(weapon, component.OldFireRate); + } #endregion } diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index e7c73b328f..01daf57ad6 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Numerics; +using Content.Shared._White.WeaponModules; using Content.Shared.ActionBlocker; using Content.Shared.Actions; using Content.Shared.Administration.Logs; @@ -476,6 +477,9 @@ public abstract partial class SharedGunSystem : EntitySystem protected void MuzzleFlash(EntityUid gun, AmmoComponent component, EntityUid? user = null) { + bool cancelled = TryComp(gun, out var weaponModulesComponent) && weaponModulesComponent.UseEffect; + if(cancelled) return; + var attemptEv = new GunMuzzleFlashAttemptEvent(); RaiseLocalEvent(gun, ref attemptEv); if (attemptEv.Cancelled) diff --git a/Content.Shared/_White/WeaponModules/AcceleratorModuleComponent.cs b/Content.Shared/_White/WeaponModules/AcceleratorModuleComponent.cs index cc83c9fc03..389c84c198 100644 --- a/Content.Shared/_White/WeaponModules/AcceleratorModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/AcceleratorModuleComponent.cs @@ -4,7 +4,7 @@ /// This is used for... /// [RegisterComponent] -public sealed partial class AcceleratorModuleComponent : WeaponModulesComponent +public sealed partial class AcceleratorModuleComponent : BaseModuleComponent { [ViewVariables(VVAccess.ReadWrite), DataField] public float OldFireRate; diff --git a/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs b/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs new file mode 100644 index 0000000000..6ad8040090 --- /dev/null +++ b/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.WeaponModules; + + +[RegisterComponent, NetworkedComponent] +public partial class BaseModuleComponent : Component +{ +} diff --git a/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs b/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs index 81f0c8a279..94c9a9f02b 100644 --- a/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs @@ -4,6 +4,6 @@ /// This is used for... /// [RegisterComponent] -public sealed partial class FlameHiderModuleComponent : WeaponModulesComponent +public sealed partial class FlameHiderModuleComponent : BaseModuleComponent { } diff --git a/Content.Shared/_White/WeaponModules/LaserModuleComponent.cs b/Content.Shared/_White/WeaponModules/LaserModuleComponent.cs index 6a7dd8a9b4..8a398502d0 100644 --- a/Content.Shared/_White/WeaponModules/LaserModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/LaserModuleComponent.cs @@ -4,7 +4,7 @@ /// This is used for... /// [RegisterComponent] -public sealed partial class LaserModuleComponent : WeaponModulesComponent +public sealed partial class LaserModuleComponent : BaseModuleComponent { } diff --git a/Content.Shared/_White/WeaponModules/LightModuleComponent.cs b/Content.Shared/_White/WeaponModules/LightModuleComponent.cs index 51a0c819c6..7f215dd818 100644 --- a/Content.Shared/_White/WeaponModules/LightModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/LightModuleComponent.cs @@ -4,7 +4,7 @@ /// LightModuleComponent /// [RegisterComponent] -public sealed partial class LightModuleComponent : WeaponModulesComponent +public sealed partial class LightModuleComponent : BaseModuleComponent { [ViewVariables(VVAccess.ReadWrite)] public bool Enabled; diff --git a/Content.Shared/_White/WeaponModules/SharedWeaponModulesSystem.cs b/Content.Shared/_White/WeaponModules/SharedWeaponModulesSystem.cs index 2de85a0420..8c46a14130 100644 --- a/Content.Shared/_White/WeaponModules/SharedWeaponModulesSystem.cs +++ b/Content.Shared/_White/WeaponModules/SharedWeaponModulesSystem.cs @@ -6,11 +6,5 @@ public abstract class SharedWeaponModulesSystem : EntitySystem { public override void Initialize() { - SubscribeLocalEvent(OnMuzzleFlashEvent); - } - - private void OnMuzzleFlashEvent(EntityUid weapon, WeaponModulesComponent component, ref GunMuzzleFlashAttemptEvent args) - { - args.Cancelled = component.UseEffect; } } diff --git a/Content.Shared/_White/WeaponModules/SilencerModuleComponent.cs b/Content.Shared/_White/WeaponModules/SilencerModuleComponent.cs index 57ea5b46d0..d16d3104e7 100644 --- a/Content.Shared/_White/WeaponModules/SilencerModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/SilencerModuleComponent.cs @@ -6,7 +6,7 @@ namespace Content.Shared._White.WeaponModules; /// This is used for... /// [RegisterComponent] -public sealed partial class SilencerModuleComponent : WeaponModulesComponent +public sealed partial class SilencerModuleComponent : BaseModuleComponent { [ViewVariables(VVAccess.ReadWrite), DataField] public SoundSpecifier? OldSoundGunshot;