From 3af744e4a98839a04da97b608f87b619cd5222cf Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Thu, 18 Apr 2024 02:30:01 -0400 Subject: [PATCH] Flash buff (#25730) * flash buff * oops! * bool * 3 -> 1.5 seconds * okay fix * sluth --- Content.Server/Flash/FlashSystem.cs | 32 +++++++++++-------- .../Rules/RevolutionaryRuleSystem.cs | 1 - .../Flash/Components/FlashComponent.cs | 7 ++++ 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Content.Server/Flash/FlashSystem.cs b/Content.Server/Flash/FlashSystem.cs index b096e2c93f..dd8cdab426 100644 --- a/Content.Server/Flash/FlashSystem.cs +++ b/Content.Server/Flash/FlashSystem.cs @@ -65,7 +65,7 @@ namespace Content.Server.Flash args.Handled = true; foreach (var e in args.HitEntities) { - Flash(e, args.User, uid, comp.FlashDuration, comp.SlowTo, melee: true); + Flash(e, args.User, uid, comp.FlashDuration, comp.SlowTo, melee: true, stunDuration: comp.MeleeStunDuration); } } @@ -115,7 +115,8 @@ namespace Content.Server.Flash float slowTo, bool displayPopup = true, FlashableComponent? flashable = null, - bool melee = false) + bool melee = false, + TimeSpan? stunDuration = null) { if (!Resolve(target, ref flashable, false)) return; @@ -139,43 +140,46 @@ namespace Content.Server.Flash flashable.Duration = flashDuration / 1000f; // TODO: Make this sane... Dirty(target, flashable); - _stun.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true, + if (stunDuration != null) + { + _stun.TryParalyze(target, stunDuration.Value, true); + } + else + { + _stun.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true, slowTo, slowTo); + } if (displayPopup && user != null && target != user && Exists(user.Value)) { _popup.PopupEntity(Loc.GetString("flash-component-user-blinds-you", ("user", Identity.Entity(user.Value, EntityManager))), target, target); } - } - public void FlashArea(EntityUid source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null) + public void FlashArea(Entity source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null) { - var transform = EntityManager.GetComponent(source); + var transform = Transform(source); var mapPosition = _transform.GetMapCoordinates(transform); var flashableQuery = GetEntityQuery(); foreach (var entity in _entityLookup.GetEntitiesInRange(transform.Coordinates, range)) { - if (!flashableQuery.TryGetComponent(entity, out var flashable)) - continue; - if (!_random.Prob(probability)) continue; + if (!flashableQuery.TryGetComponent(entity, out var flashable)) + continue; + // Check for unobstructed entities while ignoring the mobs with flashable components. - if (!_interaction.InRangeUnobstructed(entity, mapPosition, range, flashable.CollisionGroup, (e) => e == source)) + if (!_interaction.InRangeUnobstructed(entity, mapPosition, range, flashable.CollisionGroup, predicate: (e) => flashableQuery.HasComponent(e) || e == source.Owner)) continue; // They shouldn't have flash removed in between right? Flash(entity, user, source, duration, slowTo, displayPopup, flashableQuery.GetComponent(entity)); } - if (sound != null) - { - _audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f)); - } + _audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f)); } private void OnInventoryFlashAttempt(EntityUid uid, InventoryComponent component, FlashAttemptEvent args) diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index 5caa223c9c..ba9fb2ccbc 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -217,7 +217,6 @@ public sealed class RevolutionaryRuleSystem : GameRuleSystem(ev.Target); - _stun.TryParalyze(ev.Target, comp.StunTime, true); if (ev.User != null) { diff --git a/Content.Shared/Flash/Components/FlashComponent.cs b/Content.Shared/Flash/Components/FlashComponent.cs index 6522db3b69..a9098bc85a 100644 --- a/Content.Shared/Flash/Components/FlashComponent.cs +++ b/Content.Shared/Flash/Components/FlashComponent.cs @@ -12,6 +12,13 @@ namespace Content.Shared.Flash.Components [ViewVariables(VVAccess.ReadWrite)] public int FlashDuration { get; set; } = 5000; + /// + /// How long a target is stunned when a melee flash is used. + /// If null, melee flashes will not stun at all + /// + [DataField] + public TimeSpan? MeleeStunDuration = TimeSpan.FromSeconds(1.5); + [DataField("range")] [ViewVariables(VVAccess.ReadWrite)] public float Range { get; set; } = 7f;