diff --git a/Content.Server/Explosion/Components/TriggerOnSpawnComponent.cs b/Content.Server/Explosion/Components/TriggerOnSpawnComponent.cs new file mode 100644 index 0000000000..704ff410cd --- /dev/null +++ b/Content.Server/Explosion/Components/TriggerOnSpawnComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.Explosion.Components; + +/// +/// calls the trigger when the object is initialized +/// +[RegisterComponent] +public sealed partial class TriggerOnSpawnComponent : Component +{ +} diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index 5bb60abdc9..7b3e0b0e62 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -78,6 +78,7 @@ namespace Content.Server.Explosion.EntitySystems InitializeVoice(); InitializeMobstate(); + SubscribeLocalEvent(OnSpawnTriggered); SubscribeLocalEvent(OnTriggerCollide); SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnImplantTrigger); @@ -193,6 +194,11 @@ namespace Content.Server.Explosion.EntitySystems Trigger(uid); } + private void OnSpawnTriggered(EntityUid uid, TriggerOnSpawnComponent component, MapInitEvent args) + { + Trigger(uid); + } + private void OnActivate(EntityUid uid, TriggerOnActivateComponent component, ActivateInWorldEvent args) { Trigger(uid, args.User); diff --git a/Resources/Prototypes/Entities/Effects/admin_triggers.yml b/Resources/Prototypes/Entities/Effects/admin_triggers.yml new file mode 100644 index 0000000000..e1f366678d --- /dev/null +++ b/Resources/Prototypes/Entities/Effects/admin_triggers.yml @@ -0,0 +1,112 @@ +- type: entity + id: AdminInstantEffectBase + abstract: true + name: instant effect + components: + - type: Sprite + sprite: /Textures/Objects/Fun/goldbikehorn.rsi + visible: false + state: icon + - type: TriggerOnSpawn + - type: TimedDespawn + lifetime: 5 + +- type: entity + id: AdminInstantEffectEMP + suffix: EMP + parent: AdminInstantEffectBase + components: + - type: EmpOnTrigger + range: 4 + energyConsumption: 50000 + +- type: entity + id: AdminInstantEffectFlash + suffix: Flash + parent: AdminInstantEffectBase + components: + - type: FlashOnTrigger + range: 7 + - type: SpawnOnTrigger + proto: GrenadeFlashEffect + +- type: entity + id: AdminInstantEffectSmoke3 + suffix: Smoke (03 sec) + parent: AdminInstantEffectBase + components: + - type: SmokeOnTrigger + duration: 3 + spreadAmount: 1 + - type: SoundOnTrigger + sound: /Audio/Effects/smoke.ogg + - type: TimerTriggerVisuals + primingSound: + path: /Audio/Effects/Smoke-grenade.ogg + +- type: entity + id: AdminInstantEffectSmoke10 + suffix: Smoke (10 sec) + parent: AdminInstantEffectBase + components: + - type: SmokeOnTrigger + duration: 10 + spreadAmount: 30 + - type: SoundOnTrigger + sound: /Audio/Effects/smoke.ogg + - type: TimerTriggerVisuals + primingSound: + path: /Audio/Effects/Smoke-grenade.ogg + +- type: entity + id: AdminInstantEffectSmoke30 + suffix: Smoke (30 sec) + parent: AdminInstantEffectBase + components: + - type: SmokeOnTrigger + duration: 30 + spreadAmount: 50 + - type: SoundOnTrigger + sound: /Audio/Effects/smoke.ogg + - type: TimerTriggerVisuals + primingSound: + path: /Audio/Effects/Smoke-grenade.ogg + +- type: entity + id: AdminInstantEffectTearGas + suffix: Tear Gas + parent: AdminInstantEffectBase + components: + - type: SmokeOnTrigger + duration: 10 + spreadAmount: 30 + solution: + reagents: + - ReagentId: TearGas + Quantity: 50 + +- type: entity + id: AdminInstantEffectGravityWell + suffix: Gravity Well + parent: AdminInstantEffectBase + components: + - type: SoundOnTrigger + removeOnTrigger: true + sound: + path: /Audio/Effects/Grenades/Supermatter/supermatter_start.ogg + volume: 5 + - type: AmbientSound + enabled: true + volume: -5 + range: 14 + sound: + path: /Audio/Effects/Grenades/Supermatter/supermatter_loop.ogg + - type: GravityWell + maxRange: 8 + baseRadialAcceleration: 10 + baseTangentialAcceleration: 0 + gravPulsePeriod: 0.01 + - type: SingularityDistortion + intensity: 10 + falloffPower: 1.5 +