[BUGFIX] Fixed revenant malfunction ability not working properly only MediBots and Stasis bed (#38664)

* fixed

* clean up

* orks fix smart

* review fix 1

* more requested changes

* less cursed

* more descriptive description

* better wording
This commit is contained in:
Velken
2025-07-04 02:08:45 -03:00
committed by GitHub
parent a2ac401db3
commit e82064916a
3 changed files with 13 additions and 8 deletions

View File

@@ -35,6 +35,7 @@ namespace Content.Server.Revenant.EntitySystems;
public sealed partial class RevenantSystem public sealed partial class RevenantSystem
{ {
[Dependency] private readonly EmagSystem _emagSystem = default!;
[Dependency] private readonly ThrowingSystem _throwing = default!; [Dependency] private readonly ThrowingSystem _throwing = default!;
[Dependency] private readonly EntityStorageSystem _entityStorage = default!; [Dependency] private readonly EntityStorageSystem _entityStorage = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
@@ -345,8 +346,7 @@ public sealed partial class RevenantSystem
_whitelistSystem.IsBlacklistPass(component.MalfunctionBlacklist, ent)) _whitelistSystem.IsBlacklistPass(component.MalfunctionBlacklist, ent))
continue; continue;
var ev = new GotEmaggedEvent(uid, EmagType.Interaction | EmagType.Access); _emagSystem.TryEmagEffect(uid, uid, ent);
RaiseLocalEvent(ent, ref ev);
} }
} }
} }

View File

@@ -51,9 +51,9 @@ public sealed class EmagSystem : EntitySystem
} }
/// <summary> /// <summary>
/// Does the emag effect on a specified entity /// Does the emag effect on a specified entity with a specified EmagType. The optional field customEmagType can be used to override the emag type defined in the component.
/// </summary> /// </summary>
public bool TryEmagEffect(Entity<EmagComponent?> ent, EntityUid user, EntityUid target) public bool TryEmagEffect(Entity<EmagComponent?> ent, EntityUid user, EntityUid target, EmagType? customEmagType = null)
{ {
if (!Resolve(ent, ref ent.Comp, false)) if (!Resolve(ent, ref ent.Comp, false))
return false; return false;
@@ -68,7 +68,9 @@ public sealed class EmagSystem : EntitySystem
return false; return false;
} }
var emaggedEvent = new GotEmaggedEvent(user, ent.Comp.EmagType); var typeToUse = customEmagType ?? ent.Comp.EmagType;
var emaggedEvent = new GotEmaggedEvent(user, typeToUse);
RaiseLocalEvent(target, ref emaggedEvent); RaiseLocalEvent(target, ref emaggedEvent);
if (!emaggedEvent.Handled) if (!emaggedEvent.Handled)
@@ -78,7 +80,7 @@ public sealed class EmagSystem : EntitySystem
_audio.PlayPredicted(ent.Comp.EmagSound, ent, ent); _audio.PlayPredicted(ent.Comp.EmagSound, ent, ent);
_adminLogger.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(user):player} emagged {ToPrettyString(target):target} with flag(s): {ent.Comp.EmagType}"); _adminLogger.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(user):player} emagged {ToPrettyString(target):target} with flag(s): {typeToUse}");
if (emaggedEvent.Handled) if (emaggedEvent.Handled)
_sharedCharges.TryUseCharge(chargesEnt); _sharedCharges.TryUseCharge(chargesEnt);
@@ -87,7 +89,7 @@ public sealed class EmagSystem : EntitySystem
{ {
EnsureComp<EmaggedComponent>(target, out var emaggedComp); EnsureComp<EmaggedComponent>(target, out var emaggedComp);
emaggedComp.EmagType |= ent.Comp.EmagType; emaggedComp.EmagType |= typeToUse;
Dirty(target, emaggedComp); Dirty(target, emaggedComp);
} }
@@ -129,9 +131,10 @@ public sealed class EmagSystem : EntitySystem
[Flags] [Flags]
[Serializable, NetSerializable] [Serializable, NetSerializable]
public enum EmagType : byte public enum EmagType
{ {
None = 0, None = 0,
All = ~None,
Interaction = 1 << 1, Interaction = 1 << 1,
Access = 1 << 2 Access = 1 << 2
} }

View File

@@ -6,6 +6,8 @@
name: revenant name: revenant
description: A spooky ghostie. description: A spooky ghostie.
components: components:
- type: Emag
emagType: All
- type: Input - type: Input
context: "ghost" context: "ghost"
- type: Spectral - type: Spectral