From 90974a99b2fe3558813937c23c19cd9404400bb5 Mon Sep 17 00:00:00 2001 From: No Elka <125199100+NoElkaTheGod@users.noreply.github.com> Date: Sat, 9 Aug 2025 16:30:19 +0300 Subject: [PATCH] Remove do-after on null fragmentation (#4102) * Change stuff * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix * How did that even get here --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../Abilities/CosmicFragmentationSystem.cs | 47 ++++++------------- .../Locale/en-US/_DV/cosmiccult/abilities.ftl | 2 + 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/Content.Server/_DV/CosmicCult/Abilities/CosmicFragmentationSystem.cs b/Content.Server/_DV/CosmicCult/Abilities/CosmicFragmentationSystem.cs index c36cda56e0..32f2d7db23 100644 --- a/Content.Server/_DV/CosmicCult/Abilities/CosmicFragmentationSystem.cs +++ b/Content.Server/_DV/CosmicCult/Abilities/CosmicFragmentationSystem.cs @@ -1,10 +1,9 @@ using Content.Server._DV.Objectives.Events; using Content.Server.Antag; -using Content.Server.Popups; +using Content.Shared.Popups; using Content.Server.Radio.Components; using Content.Shared._DV.CosmicCult; using Content.Shared._DV.CosmicCult.Components; -using Content.Shared.DoAfter; using Content.Shared.Mind; using Content.Shared.Mobs.Systems; using Content.Shared.NPC; @@ -21,9 +20,8 @@ public sealed class CosmicFragmentationSystem : EntitySystem [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly CosmicCultSystem _cult = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; - [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedContainerSystem _container = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedMindSystem _mind = default!; private ProtoId _cultRadio = "CosmicRadio"; @@ -38,7 +36,6 @@ public sealed class CosmicFragmentationSystem : EntitySystem SubscribeLocalEvent(OnFragmentAi); SubscribeLocalEvent(OnCosmicFragmentation); - SubscribeLocalEvent(OnCosmicFragmentationDoAfter); } private void UnEmpower(Entity ent) @@ -61,43 +58,27 @@ public sealed class CosmicFragmentationSystem : EntitySystem _popup.PopupEntity(Loc.GetString("cosmicability-generic-fail"), ent, ent); return; } - - var doargs = new DoAfterArgs(EntityManager, ent, ent.Comp.CosmicSiphonDelay, new EventCosmicFragmentationDoAfter(), ent, args.Target) - { - DistanceThreshold = 2f, - Hidden = false, - BreakOnHandChange = true, - BreakOnDamage = true, - BreakOnMove = true, - BreakOnDropItem = true, - }; + var evt = new MalignFragmentationEvent(ent, args.Target); + RaiseLocalEvent(args.Target, ref evt); + if (evt.Cancelled) return; args.Handled = true; - _doAfter.TryStartDoAfter(doargs); + _popup.PopupEntity(Loc.GetString("cosmicability-fragmentation-success", ("user", ent), ("target", args.Target)), ent, PopupType.MediumCaution); _cult.MalignEcho(ent); UnEmpower(ent); } - private void OnCosmicFragmentationDoAfter(Entity ent, ref EventCosmicFragmentationDoAfter args) - { - if (args.Args.Target is not { } target) - return; - if (args.Cancelled || args.Handled) - return; - args.Handled = true; - - var evt = new MalignFragmentationEvent(ent, target); - RaiseLocalEvent(target, ref evt); - } - private void OnFragmentBorg(Entity ent, ref MalignFragmentationEvent args) { - if (!_mind.TryGetMind(ent, out var mindId, out var mind)) + if (!_mind.TryGetMind(args.Target, out var mindId, out var mind)) + { + args.Cancelled = true; return; - var wisp = Spawn("CosmicChantryWisp", Transform(ent).Coordinates); - var chantry = Spawn("CosmicBorgChantry", Transform(ent).Coordinates); + } + var wisp = Spawn("CosmicChantryWisp", Transform(args.Target).Coordinates); + var chantry = Spawn("CosmicBorgChantry", Transform(args.Target).Coordinates); EnsureComp(chantry, out var chantryComponent); chantryComponent.InternalVictim = wisp; - chantryComponent.VictimBody = ent; + chantryComponent.VictimBody = args.Target; _mind.TransferTo(mindId, wisp, mind: mind); var mins = chantryComponent.EventTime.Minutes; @@ -134,4 +115,4 @@ public sealed class CosmicFragmentationSystem : EntitySystem } [ByRefEvent] -public record struct MalignFragmentationEvent(Entity User, EntityUid Target); +public record struct MalignFragmentationEvent(Entity User, EntityUid Target, bool Cancelled = false); diff --git a/Resources/Locale/en-US/_DV/cosmiccult/abilities.ftl b/Resources/Locale/en-US/_DV/cosmiccult/abilities.ftl index ccbbcc666e..7caae53acf 100644 --- a/Resources/Locale/en-US/_DV/cosmiccult/abilities.ftl +++ b/Resources/Locale/en-US/_DV/cosmiccult/abilities.ftl @@ -20,3 +20,5 @@ cosmicability-monument-spawn-error-grid = Invalid location! The Monument must be cosmicability-monument-spawn-error-station = Invalid location! The Monument must be beckoned upon the station. cosmicability-monument-spawn-error-intersection = Too crowded! The Monument requires an empty 3x1 area to be beckoned. cosmicability-monument-spawn-error-space = Too close to space! The Monument must be be at least {$DISTANCE}m away. + +cosmicability-fragmentation-success = {CAPITALIZE(THE($user))} pours cosmic energies into {CAPITALIZE(THE($target))}!