Skip to content
Merged

Fixes #1412

Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Content.Client/Administration/AdminNameOverlay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,11 @@ protected override void Draw(in OverlayDrawArgs args)
{
color = Color.GreenYellow;
color.A = alpha;
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, Loc.GetString(playerInfo.StartingJob), uiScale, playerInfo.Connected ? color : colorDisconnected);
args.ScreenHandle.DrawString(_font,
screenCoordinates + currentOffset,
playerInfo.StartingJob, // backmen Loc.GetString(playerInfo.StartingJob) пишется уже локализованным в момент создания PlayerInfo, просто оффы добавили логирование отсутствия при повторной локализации
uiScale,
playerInfo.Connected ? color : colorDisconnected);
currentOffset += lineoffset;
}

Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/Blob/BlobChemSwapMenu.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,7 @@ protected override void ExitedTree()
ClearGrid();
}

[ValidatePrototypeId<EntityPrototype>]
private const string NormalBlobTile = "NormalBlobTile";
private readonly EntProtoId NormalBlobTile = "NormalBlobTile";

private void UpdateGrid()
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/Blob/BlobCoreActionSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ public override void Initialize()
SubscribeNetworkEvent<BlobAttackEvent>(OnBlobAttack);
}

[ValidatePrototypeId<EntityPrototype>]
private const string Animation = "WeaponArcPunch";
private readonly EntProtoId Animation = "WeaponArcPunch";

private void OnBlobAttack(BlobAttackEvent ev)
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/Blob/BlobObserverSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ public override void Initialize()
SubscribeNetworkEvent<RoundRestartCleanupEvent>(RoundRestartCleanup);
}

[ValidatePrototypeId<FactionIconPrototype>]
private const string BlobFaction = "BlobFaction";
private readonly ProtoId<FactionIconPrototype> BlobFaction = "BlobFaction";

private void OnShowBlobIcon<T>(Entity<T> ent, ref GetStatusIconsEvent args) where T : Component
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/Flesh/FleshCultist.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ public override void Initialize()
SubscribeLocalEvent<FleshCultistComponent, GetStatusIconsEvent>(OnShowCultIcon);
}

[ValidatePrototypeId<FactionIconPrototype>]
private const string FleshcultistFaction = "FleshcultistFaction";
private readonly ProtoId<FactionIconPrototype> FleshcultistFaction = "FleshcultistFaction";

private void OnShowCultIcon(Entity<FleshCultistComponent> ent, ref GetStatusIconsEvent args)
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/GhostTheme/GhostThemeSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ private void OnInit(EntityUid uid, GhostThemeComponent component, ref AfterAutoH
Apply(uid, ghostThemePrototype);
}

[ValidatePrototypeId<EntityPrototype>]
private const string MobObserver = "MobObserver";
private readonly EntProtoId MobObserver = "MobObserver";

public void Apply(EntityUid uid, GhostThemePrototype ghostThemePrototype)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public sealed class EtherealOverlay : Overlay
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
private readonly ShaderInstance _shader;

[ValidatePrototypeId<ShaderPrototype>] private const string Ethereal = "Ethereal";
private readonly ProtoId<ShaderPrototype> Ethereal = "Ethereal";

public EtherealOverlay()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Robust.Shared.Network;
using Content.Shared.Tag;
using Content.Shared.Backmen.Traits;
using Robust.Shared.Prototypes;

namespace Content.Client.Backmen.Overlays;
public sealed class NearsightedSystem : EntitySystem
Expand All @@ -19,8 +20,7 @@ public override void Initialize()
_overlay = new Overlays.NearsightedOverlay();
}

[ValidatePrototypeId<TagPrototype>]
private const string TagName = "GlassesNearsight";
private readonly ProtoId<TagPrototype> TagName = "GlassesNearsight";

public override void Update(float frameTime)
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/SponsorManager/UI/SponsorWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ public SponsorWindow()

private List<GhostThemePrototype>? _ghostThemePrototypes;

[ValidatePrototypeId<EntityPrototype>]
private const string ObserverPrototypeName = "MobObserver";
private readonly EntProtoId ObserverPrototypeName = "MobObserver";

protected override void Opened()
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/StationAI/AiEnemySystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ public override void Initialize()
_ghostQuery = GetEntityQuery<GhostComponent>();
}

[ValidatePrototypeId<SecurityIconPrototype>]
private const string AiEnemyStatus = "AiIconEnemyTarget";
private readonly ProtoId<SecurityIconPrototype> AiEnemyStatus = "AiIconEnemyTarget";
private void GetIcon(Entity<AIEnemyNTComponent> target, ref GetStatusIconsEvent args)
{
var ent = _player.LocalSession?.AttachedEntity ?? EntityUid.Invalid;
Expand Down
9 changes: 3 additions & 6 deletions Content.Client/Backmen/Teams/TdmTeamSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,9 @@ protected override void SetTeam(Entity<TdmMemberComponent?> target, StationTeamM
// do nothing on client
}

[ValidatePrototypeId<FactionIconPrototype>]
private const string TeamA = "TeamAFaction";
[ValidatePrototypeId<FactionIconPrototype>]
private const string TeamB = "TeamBFaction";
[ValidatePrototypeId<FactionIconPrototype>]
private const string TeamNoTeam = "Team0Faction";
private readonly ProtoId<FactionIconPrototype> TeamA = "TeamAFaction";
private readonly ProtoId<FactionIconPrototype> TeamB = "TeamBFaction";
private readonly ProtoId<FactionIconPrototype> TeamNoTeam = "Team0Faction";

private void OnGetTeamIcon(Entity<TdmMemberComponent> ent, ref GetStatusIconsEvent args)
{
Expand Down
3 changes: 1 addition & 2 deletions Content.Client/Backmen/Vampiric/BloodSuckerSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ public override void Initialize()
SubscribeLocalEvent<BkmVampireComponent, GetStatusIconsEvent>(OnShowVampireIcon);
}

[ValidatePrototypeId<FactionIconPrototype>]
private const string VampireFaction = "VampireFaction";
private readonly ProtoId<FactionIconPrototype> VampireFaction = "VampireFaction";

private void OnShowVampireIcon(Entity<BkmVampireComponent> ent, ref GetStatusIconsEvent args)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ public sealed partial class HealthAnalyzerWindow : FancyWindow
public event Action<TargetBodyPart?, EntityUid>? OnBodyPartSelected;
private EntityUid _spriteViewEntity;

[ValidatePrototypeId<EntityPrototype>]
private readonly EntProtoId _bodyView = "AlertSpriteView";

private readonly Dictionary<TargetBodyPart, TextureButton> _bodyPartControls;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace Content.Server.Atmos.EntitySystems
{
public sealed partial class AtmosphereSystem
{
[ValidatePrototypeId<EntityPrototype>] private const string _spaceWindProto = "SpaceWindVisual"; // Backmen
private readonly EntProtoId _spaceWindProto = "SpaceWindVisual"; // Backmen
private static readonly ProtoId<SoundCollectionPrototype> DefaultSpaceWindSounds = "SpaceWind";

private const int SpaceWindSoundCooldownCycles = 75;
Expand Down
4 changes: 2 additions & 2 deletions Content.Server/Backmen/Abilities/Felinid/FelinidSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ public override void Update(float frameTime)
}
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionHairball = "ActionHairball";
[ValidatePrototypeId<EntityPrototype>] private const string ActionEatMouse = "ActionEatMouse";
private readonly EntProtoId ActionHairball = "ActionHairball";
private readonly EntProtoId ActionEatMouse = "ActionEatMouse";

private void OnInit(EntityUid uid, FelinidComponent component, ComponentInit args)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DispelPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<DispelPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<DispelPowerActionEvent>(OnPowerUsed);

SubscribeLocalEvent<DispellableComponent, DispelledEvent>(OnDispelled);
Expand All @@ -45,7 +44,7 @@ public override void Initialize()
SubscribeLocalEvent<RevenantComponent, DispelledEvent>(OnRevenantDispelled);
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionDispel = "ActionDispel";
private readonly EntProtoId ActionDispel = "ActionDispel";

private void OnInit(EntityUid uid, DispelPowerComponent component, ComponentInit args)
{
Expand All @@ -59,11 +58,6 @@ private void OnInit(EntityUid uid, DispelPowerComponent component, ComponentInit
psionic.PsionicAbility = component.DispelPowerAction;
}

private void OnShutdown(EntityUid uid, DispelPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.DispelPowerAction);
}

private void OnPowerUsed(DispelPowerActionEvent args)
{
if(args.Handled)
Expand All @@ -79,8 +73,7 @@ private void OnPowerUsed(DispelPowerActionEvent args)
}
}

[ValidatePrototypeId<EntityPrototype>]
private const string Ash = "Ash";
private readonly EntProtoId Ash = "Ash";

private void OnDispelled(EntityUid uid, DispellableComponent component, DispelledEvent args)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MetapsionicPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<MetapsionicPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<MetapsionicPowerComponent, MetapsionicPowerActionEvent>(OnPowerUsed);
SubscribeLocalEvent<MetapsionicVisibleComponent, ComponentStartup>(OnAddCanSeeAll);
SubscribeLocalEvent<MetapsionicVisibleComponent, ComponentShutdown>(OnRemoveCanSeeAll);
Expand Down Expand Up @@ -73,7 +72,7 @@ private void OnAddCanSeeAll(Entity<MetapsionicVisibleComponent> ent, ref Compone
}
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionMetapsionicPulse = "ActionMetapsionicPulse";
private readonly EntProtoId ActionMetapsionicPulse = "ActionMetapsionicPulse";

private void OnInit(EntityUid uid, MetapsionicPowerComponent component, ComponentInit args)
{
Expand All @@ -87,11 +86,6 @@ private void OnInit(EntityUid uid, MetapsionicPowerComponent component, Componen
psionic.PsionicAbility = component.MetapsionicPowerAction;
}

private void OnShutdown(EntityUid uid, MetapsionicPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.MetapsionicPowerAction);
}

private void OnPowerUsed(EntityUid uid, MetapsionicPowerComponent component, MetapsionicPowerActionEvent args)
{
if(args.Handled)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public override void Initialize()
base.Initialize();
_logger = Logger.GetSawmill("mindswap");
SubscribeLocalEvent<MindSwapPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<MindSwapPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<MindSwapPowerActionEvent>(OnPowerUsed);
SubscribeLocalEvent<MindSwappedComponent, MindSwapPowerReturnActionEvent>(OnPowerReturned);
SubscribeLocalEvent<MindSwappedComponent, DispelledEvent>(OnDispelled);
Expand All @@ -55,8 +54,8 @@ public override void Initialize()
SubscribeLocalEvent<MindSwappedComponent, ComponentInit>(OnSwapInit);
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionMindSwap = "ActionMindSwapPsionic";
[ValidatePrototypeId<EntityPrototype>] private const string ActionMindSwapReturn = "ActionMindSwapReturn";
private readonly EntProtoId ActionMindSwap = "ActionMindSwapPsionic";
private readonly EntProtoId ActionMindSwapReturn = "ActionMindSwapReturn";
Comment on lines +57 to +58
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for ActionMindSwap and related action usage
rg -n -C5 --type=cs 'ActionMindSwap|MindSwapPowerAction|MindSwapReturn'

Repository: Rxup/space-station-14

Length of output: 13117


🏁 Script executed:

#!/bin/bash
# First, let's examine the MindSwapPowerSystem.cs file structure
wc -l "Content.Server/Backmen/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs"

Repository: Rxup/space-station-14

Length of output: 143


🏁 Script executed:

#!/bin/bash
# Let's look at the full MindSwapPowerSystem.cs file to understand the current state
cat -n "Content.Server/Backmen/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs"

Repository: Rxup/space-station-14

Length of output: 13764


Потенциальная утечка действий в OnMobStateChanged требует исправления.

Удаление обработчика ComponentShutdown оставило критический пробел в управлении жизненным циклом действий. В методе OnMobStateChanged (строка 139) компонент MindSwappedComponent удаляется без предварительного удаления связанного действия MindSwapReturn. Это приводит к утечке действий, когда поменявшийся телом персонаж умирает.

Рекомендуется добавить удаление действия перед RemComp<MindSwappedComponent>(uid):

if (TryComp<MindSwappedComponent>(uid, out var mindSwappedComp))
    _actions.RemoveAction(uid, mindSwappedComp.MindSwapReturn);
RemComp<MindSwappedComponent>(uid);

Аналогично следует проверить MindSwapPowerComponent — для неё также отсутствует механизм очистки при удалении компонента.

🤖 Prompt for AI Agents
In @Content.Server/Backmen/Abilities/Psionics/Abilities/MindSwapPowerSystem.cs
around lines 57 - 58, In OnMobStateChanged, remove the lingering MindSwapReturn
action before removing the MindSwappedComponent to avoid action leaks: locate
the MindSwappedComponent check in OnMobStateChanged, call
_actions.RemoveAction(uid, mindSwappedComp.MindSwapReturn) (guarded by
TryComp<MindSwappedComponent>) and then call RemComp<MindSwappedComponent>(uid);
also add equivalent cleanup for MindSwapPowerComponent by removing any actions
it registers when that component is removed or when the entity dies.


private void OnInit(EntityUid uid, MindSwapPowerComponent component, ComponentInit args)
{
Expand All @@ -72,11 +71,6 @@ private void OnInit(EntityUid uid, MindSwapPowerComponent component, ComponentIn
psionic.PsionicAbility = component.MindSwapPowerAction;
}

private void OnShutdown(EntityUid uid, MindSwapPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.MindSwapPowerAction);
}

private void OnPowerUsed(MindSwapPowerActionEvent args)
{
if(args.Handled)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,10 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<NoosphericZapPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<NoosphericZapPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<NoosphericZapPowerActionEvent>(OnPowerUsed);
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionNoosphericZap = "ActionNoosphericZap";
private readonly EntProtoId ActionNoosphericZap = "ActionNoosphericZap";

private void OnInit(EntityUid uid, NoosphericZapPowerComponent component, ComponentInit args)
{
Expand All @@ -45,11 +44,6 @@ private void OnInit(EntityUid uid, NoosphericZapPowerComponent component, Compon
psionic.PsionicAbility = component.NoosphericZapPowerAction;
}

private void OnShutdown(EntityUid uid, NoosphericZapPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.NoosphericZapPowerAction);
}

private void OnPowerUsed(NoosphericZapPowerActionEvent args)
{
if(args.Handled)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PsionicInvisibilityPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<PsionicInvisibilityPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PsionicInvisibilityPowerComponent, PsionicInvisibilityPowerActionEvent>(OnPowerUsed);
SubscribeLocalEvent<PsionicInvisibilityPowerOffActionEvent>(OnPowerOff);
SubscribeLocalEvent<PsionicInvisibilityUsedComponent, ComponentInit>(OnStart);
Expand All @@ -50,11 +49,6 @@ private void OnInit(EntityUid uid, PsionicInvisibilityPowerComponent component,
psionic.PsionicAbility = component.PsionicInvisibilityPowerAction;
}

private void OnShutdown(EntityUid uid, PsionicInvisibilityPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.PsionicInvisibilityPowerAction);
}

private void OnPowerUsed(EntityUid uid, PsionicInvisibilityPowerComponent component, PsionicInvisibilityPowerActionEvent args)
{
if(args.Handled)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,13 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PsionicRegenerationPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<PsionicRegenerationPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PsionicRegenerationPowerComponent, PsionicRegenerationPowerActionEvent>(OnPowerUsed);

SubscribeLocalEvent<PsionicRegenerationPowerComponent, DispelledEvent>(OnDispelled);
SubscribeLocalEvent<PsionicRegenerationPowerComponent, PsionicRegenerationDoAfterEvent>(OnDoAfter);
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionPsionicRegeneration = "ActionPsionicRegeneration";
private readonly EntProtoId ActionPsionicRegeneration = "ActionPsionicRegeneration";

private void OnInit(EntityUid uid, PsionicRegenerationPowerComponent component, ComponentInit args)
{
Expand Down Expand Up @@ -80,11 +79,6 @@ private void OnPowerUsed(EntityUid uid, PsionicRegenerationPowerComponent compon
args.Handled = true;
}

private void OnShutdown(EntityUid uid, PsionicRegenerationPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.PsionicRegenerationPowerAction);
}

private void OnDispelled(EntityUid uid, PsionicRegenerationPowerComponent component, DispelledEvent args)
{
if (component.DoAfter == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,10 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PsychokinesisPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<PsychokinesisPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PsychokinesisPowerComponent, PsychokinesisPowerActionEvent>(OnPowerUsed);
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionPsychokinesis = "ActionPsychokinesis";
private readonly EntProtoId ActionPsychokinesis = "ActionPsychokinesis";

private void OnInit(EntityUid uid, PsychokinesisPowerComponent component, ComponentInit args)
{
Expand All @@ -41,10 +40,6 @@ private void OnInit(EntityUid uid, PsychokinesisPowerComponent component, Compon
psionic.PsionicAbility = component.PsychokinesisPowerAction;
}

private void OnShutdown(EntityUid uid, PsychokinesisPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.PsychokinesisPowerAction);
}

private void OnPowerUsed(EntityUid uid ,PsychokinesisPowerComponent comp, PsychokinesisPowerActionEvent args)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@ public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PyrokinesisPowerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<PyrokinesisPowerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PyrokinesisPowerComponent, PyrokinesisPowerActionEvent>(OnPowerUsed);
}

[ValidatePrototypeId<EntityPrototype>] private const string ActionPyrokinesis = "ActionPyrokinesis";
private readonly EntProtoId ActionPyrokinesis = "ActionPyrokinesis";

private void OnInit(EntityUid uid, PyrokinesisPowerComponent component, ComponentInit args)
{
Expand All @@ -43,10 +42,6 @@ private void OnInit(EntityUid uid, PyrokinesisPowerComponent component, Componen
psionic.PsionicAbility = component.PyrokinesisPowerAction;
}

private void OnShutdown(EntityUid uid, PyrokinesisPowerComponent component, ComponentShutdown args)
{
_actions.RemoveAction(uid, component.PyrokinesisPowerAction);
}

private void OnPowerUsed(Entity<PyrokinesisPowerComponent> ent, ref PyrokinesisPowerActionEvent args)
{
Expand All @@ -65,7 +60,7 @@ private void OnPowerUsed(Entity<PyrokinesisPowerComponent> ent, ref PyrokinesisP
_psionics.LogPowerUsed(args.Performer, "pyrokinesis");

args.Handled = true;

if (TryComp<NoosphericZapPowerComponent>(args.Performer, out var powerComponent))
{
var actionEnt = _actions.GetAction(powerComponent.NoosphericZapPowerAction);
Expand Down
Loading
Loading