-<component name="ProjectRunConfigurationManager">
+<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Content Server+Client" type="CompoundRunConfigurationType">
<toRun name="Content.Client" type="DotNetProject" />
<toRun name="Content.Server" type="DotNetProject" />
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Robust.Client.GameObjects;
namespace Content.Client.Explosion;
using System.Numerics;
-using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using JetBrains.Annotations;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
using Robust.Shared.GameStates;
--- /dev/null
+using Content.Shared.Explosion.EntitySystems;
+
+namespace Content.Client.Explosion;
+
+public sealed class SmokeOnTriggerSystem : SharedSmokeOnTriggerSystem
+{
+}
\ No newline at end of file
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
namespace Content.Client.Explosion;
using Content.IntegrationTests.Tests.Interaction;
using Content.Server.Explosion.Components;
+using Content.Shared.Explosion.Components;
using Robust.Shared.Containers;
using Robust.Shared.GameObjects;
using Content.Shared.Database;
using Content.Shared.Defusable;
using Content.Shared.Examine;
+using Content.Shared.Explosion.Components;
+using Content.Shared.Explosion.Components.OnTrigger;
using Content.Shared.Popups;
using Content.Shared.Verbs;
using Content.Shared.Wires;
+++ /dev/null
-using Robust.Shared.Audio;
-
-namespace Content.Server.Explosion.Components;
-
-/// <summary>
-/// Component for tracking active trigger timers. A timers can activated by some other component, e.g. <see cref="OnUseTimerTriggerComponent"/>.
-/// </summary>
-[RegisterComponent]
-public sealed partial class ActiveTimerTriggerComponent : Component
-{
- [DataField("timeRemaining")]
- public float TimeRemaining;
-
- [DataField("user")]
- public EntityUid? User;
-
- [DataField("beepInterval")]
- public float BeepInterval;
-
- [DataField("timeUntilBeep")]
- public float TimeUntilBeep;
-
- [DataField("beepSound")]
- public SoundSpecifier? BeepSound;
-}
using Content.Server.Explosion.EntitySystems;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Content.Shared.Physics;
using Robust.Shared.Physics.Collision.Shapes;
using Robust.Shared.Physics.Components;
using Robust.Shared.Random;
using Content.Server.Weapons.Ranged.Systems;
using System.Numerics;
+using Content.Shared.Explosion.Components;
+using Content.Shared.Flash.Components;
using Robust.Server.Containers;
using Robust.Server.GameObjects;
using System.Numerics;
using Content.Shared.Atmos;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Content.Shared.CCVar;
using Content.Shared.Damage;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Content.Shared.Maps;
using Content.Shared.Physics;
using Content.Shared.Projectiles;
using System.Numerics;
using Content.Shared.Administration;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Robust.Shared.Map;
using Robust.Shared.Physics.Components;
using Robust.Shared.Timing;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
using Robust.Server.GameObjects;
using Robust.Shared.GameStates;
using Robust.Shared.Map;
-using Content.Server.Explosion.Components;
+using Content.Shared.Explosion.Components;
using Content.Server.Fluids.EntitySystems;
using Content.Shared.Chemistry.Components;
using Content.Shared.Coordinates.Helpers;
+using Content.Shared.Explosion.Components.OnTrigger;
+using Content.Shared.Explosion.EntitySystems;
using Content.Shared.Maps;
using Robust.Shared.Map;
/// <summary>
/// Handles creating smoke when <see cref="SmokeOnTriggerComponent"/> is triggered.
/// </summary>
-public sealed class SmokeOnTriggerSystem : EntitySystem
+public sealed class SmokeOnTriggerSystem : SharedSmokeOnTriggerSystem
{
[Dependency] private readonly IMapManager _mapMan = default!;
[Dependency] private readonly SmokeSystem _smoke = default!;
using Content.Server.Explosion.Components;
+using Content.Shared.Explosion.Components;
using Content.Shared.Implants;
using Content.Shared.Interaction.Events;
using Content.Shared.Mobs;
using Content.Server.Explosion.Components;
using Content.Server.Sticky.Events;
using Content.Shared.Examine;
+using Content.Shared.Explosion.Components;
using Content.Shared.Interaction.Events;
using Content.Shared.Popups;
using Content.Shared.Verbs;
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Server.Explosion.Components;
using Content.Server.Flash;
-using Content.Server.Flash.Components;
+using Content.Shared.Flash.Components;
using Content.Server.Radio.EntitySystems;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Components.SolutionManager;
using Content.Shared.Database;
+using Content.Shared.Explosion.Components;
+using Content.Shared.Explosion.Components.OnTrigger;
using Content.Shared.Implants.Components;
using Content.Shared.Interaction;
using Content.Shared.Mobs;
+++ /dev/null
-namespace Content.Server.Flash.Components
-{
- /// <summary>
- /// Upon being triggered will flash in an area around it.
- /// </summary>
- [RegisterComponent]
- internal sealed partial class FlashOnTriggerComponent : Component
- {
- [DataField("range")] internal float Range = 1.0f;
- [DataField("duration")] internal float Duration = 8.0f;
- }
-}
using Content.Shared.Charges.Systems;
using Content.Shared.Eye.Blinding.Components;
using Content.Shared.Flash;
+using Content.Shared.Flash.Components;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction;
using Content.Shared.Interaction.Events;
using Content.Server.Nutrition.Components;
using Content.Server.Popups;
using Content.Shared.Containers.ItemSlots;
+using Content.Shared.Explosion.Components;
using Content.Shared.Interaction;
using Content.Shared.Nutrition.Components;
using Content.Shared.Nutrition.EntitySystems;
using Robust.Shared.Serialization;
using Robust.Shared.Map;
using Content.Shared.Explosion;
+using Content.Shared.Explosion.Components;
namespace Content.Shared.Administration;
--- /dev/null
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Explosion.Components;
+
+/// <summary>
+/// Component for tracking active trigger timers. A timers can activated by some other component, e.g. <see cref="OnUseTimerTriggerComponent"/>.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ActiveTimerTriggerComponent : Component
+{
+ [DataField] public float TimeRemaining;
+
+ [DataField] public EntityUid? User;
+
+ [DataField] public float BeepInterval;
+
+ [DataField] public float TimeUntilBeep;
+
+ [DataField] public SoundSpecifier? BeepSound;
+}
using Robust.Shared.Map;
using Robust.Shared.Serialization;
-namespace Content.Shared.Explosion;
+namespace Content.Shared.Explosion.Components;
/// <summary>
/// Component that is used to send explosion overlay/visual data to an abstract explosion entity.
-namespace Content.Server.Explosion.Components;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Explosion.Components.OnTrigger;
/// <summary>
/// Explode using the entity's <see cref="ExplosiveComponent"/> if Triggered.
/// </summary>
-[RegisterComponent]
+[RegisterComponent, NetworkedComponent]
public sealed partial class ExplodeOnTriggerComponent : Component
{
}
-using Content.Server.Explosion.EntitySystems;
using Content.Shared.Chemistry.Components;
+using Content.Shared.Explosion.EntitySystems;
+using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
-namespace Content.Server.Explosion.Components;
+namespace Content.Shared.Explosion.Components.OnTrigger;
/// <summary>
/// Creates a smoke cloud when triggered, with an optional solution to include in it.
/// No sound is played incase a grenade is stealthy, use <see cref="SoundOnTriggerComponent"/> if you want a sound.
/// </summary>
-[RegisterComponent, Access(typeof(SmokeOnTriggerSystem))]
+[RegisterComponent, NetworkedComponent, Access(typeof(SharedSmokeOnTriggerSystem))]
public sealed partial class SmokeOnTriggerComponent : Component
{
/// <summary>
using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
-namespace Content.Server.Explosion.Components
+namespace Content.Shared.Explosion.Components
{
- [RegisterComponent]
+ [RegisterComponent, NetworkedComponent]
public sealed partial class OnUseTimerTriggerComponent : Component
{
- [DataField("delay")]
- public float Delay = 1f;
+ [DataField] public float Delay = 1f;
/// <summary>
/// If not null, a user can use verbs to configure the delay to one of these options.
/// </summary>
- [DataField("delayOptions")]
- public List<float>? DelayOptions = null;
+ [DataField] public List<float>? DelayOptions = null;
/// <summary>
/// If not null, this timer will periodically play this sound while active.
/// </summary>
- [DataField("beepSound")]
- public SoundSpecifier? BeepSound;
+ [DataField] public SoundSpecifier? BeepSound;
/// <summary>
/// Time before beeping starts. Defaults to a single beep interval. If set to zero, will emit a beep immediately after use.
/// </summary>
- [DataField("initialBeepDelay")]
- public float? InitialBeepDelay;
+ [DataField] public float? InitialBeepDelay;
- [DataField("beepInterval")]
- public float BeepInterval = 1;
+ [DataField] public float BeepInterval = 1;
/// <summary>
/// Whether the timer should instead be activated through a verb in the right-click menu
/// </summary>
- [DataField("useVerbInstead")]
- public bool UseVerbInstead = false;
+ [DataField] public bool UseVerbInstead = false;
/// <summary>
/// Should timer be started when it was stuck to another entity.
/// Used for C4 charges and similar behaviour.
/// </summary>
- [DataField("startOnStick")]
- public bool StartOnStick;
+ [DataField] public bool StartOnStick;
/// <summary>
/// Allows changing the start-on-stick quality.
/// </summary>
- [DataField("canToggleStartOnStick")]
- public bool AllowToggleStartOnStick;
+ [DataField("canToggleStartOnStick")] public bool AllowToggleStartOnStick;
/// <summary>
/// Whether you can examine the item to see its timer or not.
/// </summary>
- [DataField("examinable")]
- public bool Examinable = true;
+ [DataField] public bool Examinable = true;
}
}
using Robust.Shared.Serialization;
-namespace Content.Shared.Explosion
+namespace Content.Shared.Explosion.Components
{
[Serializable, NetSerializable]
public enum ClusterGrenadeVisuals : byte
using Robust.Shared.GameStates;
-namespace Content.Shared.Explosion;
+namespace Content.Shared.Explosion.Components;
[NetworkedComponent]
public abstract partial class SharedTriggerOnProximityComponent : Component
--- /dev/null
+namespace Content.Shared.Explosion.EntitySystems;
+
+public abstract class SharedSmokeOnTriggerSystem : EntitySystem
+{
+
+}
\ No newline at end of file
--- /dev/null
+namespace Content.Shared.Explosion.EntitySystems;
+
+public abstract class SharedTriggerSystem : EntitySystem
+{
+
+}
\ No newline at end of file
+using Content.Shared.Flash;
using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
-namespace Content.Server.Flash.Components
+namespace Content.Shared.Flash.Components
{
- [RegisterComponent, Access(typeof(FlashSystem))]
+ [RegisterComponent, NetworkedComponent, Access(typeof(SharedFlashSystem))]
public sealed partial class FlashComponent : Component
{
--- /dev/null
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Flash.Components;
+
+/// <summary>
+/// Upon being triggered will flash in an area around it.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class FlashOnTriggerComponent : Component
+{
+ [DataField] public float Range = 1.0f;
+ [DataField] public float Duration = 8.0f;
+}
delay: 5
delayOptions: [3, 5, 10, 15, 30]
initialBeepDelay: 0
- beepSound: /Audio/Machines/Nuke/general_beep.ogg
- params:
- volume: -2
+ beepSound:
+ path: /Audio/Machines/Nuke/general_beep.ogg
+ params:
+ volume: -2
- type: StaticPrice
price: 40
- type: OnUseTimerTrigger
delay: 7
initialBeepDelay: 0
- beepSound: /Audio/Machines/Nuke/general_beep.ogg
- params:
- volume: -2
+ beepSound:
+ path: /Audio/Machines/Nuke/general_beep.ogg
+ params:
+ volume: -2
- type: ExplodeOnTrigger
- type: GibOnTrigger
deleteItems: true
- type: OnUseTimerTrigger
useVerbInstead: true
beepInterval: .25
- beepSound: /Audio/Items/Janitor/floor_sign_beep.ogg
- params:
- volume: 1
+ beepSound:
+ path: /Audio/Items/Janitor/floor_sign_beep.ogg
+ params:
+ volume: 1
examinable: false
- type: Tag
tags: # ignore "WhitelistChameleon" tag
Blunt: 5
- type: OnUseTimerTrigger
delay: 120
- beepSound: /Audio/Machines/Nuke/general_beep.ogg
- params:
- volume: -2
+ beepSound:
+ path: /Audio/Machines/Nuke/general_beep.ogg
+ params:
+ volume: -2
- type: ExplodeOnTrigger
- type: Explosive
explosionType: Default
initialBeepDelay: 0
beepSound:
path: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg
- volume: 1
+ params:
+ volume: 1
- type: RandomTimerTrigger
min: 0
max: 60
sound:
path: /Audio/Weapons/flash.ogg
- type: FlashOnTrigger
- repeating: true
range: 3
- type: TriggerOnProximity
enabled: true