Фиксы фиксов педальных фич

This commit is contained in:
Aviu00
2024-01-19 14:38:49 +03:00
parent 3acd057756
commit 0804e37408
7 changed files with 48 additions and 37 deletions

View File

@@ -8,7 +8,6 @@ namespace Content.Client.White.Administration;
public sealed class InvisibilitySystem : SharedInvisibilitySystem public sealed class InvisibilitySystem : SharedInvisibilitySystem
{ {
[Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly IClientConsoleHost _console = default!; [Dependency] private readonly IClientConsoleHost _console = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
@@ -16,19 +15,18 @@ public sealed class InvisibilitySystem : SharedInvisibilitySystem
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<InvisibilityComponent, ComponentInit>(OnInvisibilityInit);
SubscribeLocalEvent<InvisibilityComponent, ComponentRemove>(OnInvisibilityRemove);
SubscribeLocalEvent<InvisibilityComponent, ToggleInvisibilityActionEvent>(OnToggleGhosts); SubscribeLocalEvent<InvisibilityComponent, ToggleInvisibilityActionEvent>(OnToggleGhosts);
SubscribeNetworkEvent<InvisibilityToggleEvent>(OnInvisibilityToggle); SubscribeNetworkEvent<InvisibilityToggleEvent>(OnInvisibilityToggle);
} }
private void OnInvisibilityToggle(InvisibilityToggleEvent ev) private void OnInvisibilityToggle(InvisibilityToggleEvent ev)
{ {
if (!EntityManager.TryGetComponent(ev.Uid, out SpriteComponent? sprite)) var ent = GetEntity(ev.Uid);
if (!EntityManager.TryGetComponent(ent, out SpriteComponent? sprite))
return; return;
var component = EntityManager.EnsureComponent<InvisibilityComponent>(ev.Uid); var component = EntityManager.EnsureComponent<InvisibilityComponent>(ent);
component.Invisible = ev.Invisible; component.Invisible = ev.Invisible;
component.DefaultAlpha ??= sprite.Color.A; component.DefaultAlpha ??= sprite.Color.A;
@@ -36,16 +34,6 @@ public sealed class InvisibilitySystem : SharedInvisibilitySystem
sprite.Color = sprite.Color.WithAlpha(newAlpha); sprite.Color = sprite.Color.WithAlpha(newAlpha);
} }
private void OnInvisibilityInit(EntityUid uid, InvisibilityComponent component, ComponentInit args)
{
_actions.AddAction(uid, component.ToggleInvisibilityAction, null);
}
private void OnInvisibilityRemove(EntityUid uid, InvisibilityComponent component, ComponentRemove args)
{
_actions.RemoveAction(uid, component.ToggleInvisibilityAction);
}
private void OnToggleGhosts(EntityUid uid, InvisibilityComponent component, ToggleInvisibilityActionEvent args) private void OnToggleGhosts(EntityUid uid, InvisibilityComponent component, ToggleInvisibilityActionEvent args)
{ {
if (args.Handled) if (args.Handled)

View File

@@ -453,7 +453,7 @@ namespace Content.Server.Administration.Systems
overrideMsgText = $"{senderSession.Name}: {escapedText}"; // Not an admin, name is not overridden. overrideMsgText = $"{senderSession.Name}: {escapedText}"; // Not an admin, name is not overridden.
} }
RaiseNetworkEvent(new BwoinkTextMessage(message.UserId, senderSession.UserId, overrideMsgText), session.ConnectedClient); RaiseNetworkEvent(new BwoinkTextMessage(message.UserId, senderSession.UserId, overrideMsgText, senderAHelpAdmin), session.ConnectedClient);
} }
else else
RaiseNetworkEvent(msg, session.ConnectedClient); RaiseNetworkEvent(msg, session.ConnectedClient);

View File

@@ -11,6 +11,7 @@ public sealed class InvisibilitySystem : SharedInvisibilitySystem
{ {
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
[Dependency] private readonly FollowerSystem _followerSystem = default!; [Dependency] private readonly FollowerSystem _followerSystem = default!;
[Dependency] private readonly SharedEyeSystem _eyeSystem = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -24,7 +25,7 @@ public sealed class InvisibilitySystem : SharedInvisibilitySystem
{ {
if (EntityManager.TryGetComponent(uid, out EyeComponent? eye)) if (EntityManager.TryGetComponent(uid, out EyeComponent? eye))
{ {
eye.VisibilityMask |= (int) VisibilityFlags.AdminInvisible; _eyeSystem.SetVisibilityMask(uid, eye.VisibilityMask | (int) VisibilityFlags.AdminInvisible, eye);
} }
} }
@@ -37,7 +38,7 @@ public sealed class InvisibilitySystem : SharedInvisibilitySystem
if (EntityManager.TryGetComponent(uid, out EyeComponent? eye)) if (EntityManager.TryGetComponent(uid, out EyeComponent? eye))
{ {
eye.VisibilityMask &= ~(int) VisibilityFlags.AdminInvisible; _eyeSystem.SetVisibilityMask(uid, eye.VisibilityMask & ~(int) VisibilityFlags.AdminInvisible, eye);
} }
} }
@@ -56,6 +57,6 @@ public sealed class InvisibilitySystem : SharedInvisibilitySystem
EntityManager.HasComponent<GhostComponent>(uid) ? VisibilityFlags.Ghost : VisibilityFlags.Normal EntityManager.HasComponent<GhostComponent>(uid) ? VisibilityFlags.Ghost : VisibilityFlags.Normal
)); ));
RaiseNetworkEvent(new InvisibilityToggleEvent(uid, component.Invisible)); RaiseNetworkEvent(new InvisibilityToggleEvent(GetNetEntity(uid), component.Invisible));
} }
} }

View File

@@ -16,7 +16,7 @@ public sealed class StealthCommand : IConsoleCommand
public void Execute(IConsoleShell shell, string argStr, string[] args) public void Execute(IConsoleShell shell, string argStr, string[] args)
{ {
if (shell.Player is not IPlayerSession player) if (shell.Player is not {} player)
{ {
shell.WriteLine("You cannot use this command from the server console."); shell.WriteLine("You cannot use this command from the server console.");
return; return;

View File

@@ -1,30 +1,24 @@
using Content.Shared.Actions; using Content.Shared.Actions;
using Content.Shared.Actions.ActionTypes; using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared.White.Administration; namespace Content.Shared.White.Administration;
[RegisterComponent] [RegisterComponent]
[Access(typeof(SharedInvisibilitySystem))] [Access(typeof(SharedInvisibilitySystem))]
public sealed class InvisibilityComponent : Component public sealed partial class InvisibilityComponent : Component
{ {
[ViewVariables] [ViewVariables]
public bool Invisible; public bool Invisible;
public float? DefaultAlpha; public float? DefaultAlpha;
public readonly InstantAction ToggleInvisibilityAction = new() [DataField]
{ public EntProtoId ToggleInvisibilityAction = "ToggleInvisibilityAction";
Icon = new SpriteSpecifier.Texture(new("White/Icons/transparent-ghost.png")),
DisplayName = "Переключить невидимость", [DataField]
Description = "Переключить невидимость вашего призрака.", public EntityUid? ToggleInvisibilityActionEntity;
ClientExclusive = true,
CheckCanInteract = false,
Priority = -5,
Event = new ToggleInvisibilityActionEvent()
};
} }
public sealed class ToggleInvisibilityActionEvent : InstantActionEvent public sealed partial class ToggleInvisibilityActionEvent : InstantActionEvent
{ {
} }

View File

@@ -1,3 +1,4 @@
using Content.Shared.Actions;
using Content.Shared.Examine; using Content.Shared.Examine;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
@@ -5,11 +6,25 @@ namespace Content.Shared.White.Administration;
public abstract class SharedInvisibilitySystem : EntitySystem public abstract class SharedInvisibilitySystem : EntitySystem
{ {
[Dependency] private readonly SharedActionsSystem _actions = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<InvisibilityComponent, ExaminedEvent>(OnExamined); SubscribeLocalEvent<InvisibilityComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<InvisibilityComponent, MapInitEvent>(OnInvisibilityInit);
SubscribeLocalEvent<InvisibilityComponent, ComponentRemove>(OnInvisibilityRemove);
}
private void OnInvisibilityInit(EntityUid uid, InvisibilityComponent component, MapInitEvent args)
{
_actions.AddAction(uid, ref component.ToggleInvisibilityActionEntity, component.ToggleInvisibilityAction);
}
private void OnInvisibilityRemove(EntityUid uid, InvisibilityComponent component, ComponentRemove args)
{
_actions.RemoveAction(uid, component.ToggleInvisibilityActionEntity);
} }
private void OnExamined(EntityUid uid, InvisibilityComponent component, ExaminedEvent args) private void OnExamined(EntityUid uid, InvisibilityComponent component, ExaminedEvent args)
@@ -22,10 +37,10 @@ public abstract class SharedInvisibilitySystem : EntitySystem
[Serializable, NetSerializable] [Serializable, NetSerializable]
public sealed class InvisibilityToggleEvent : EntityEventArgs public sealed class InvisibilityToggleEvent : EntityEventArgs
{ {
public EntityUid Uid { get; } public NetEntity Uid { get; }
public bool Invisible { get; } public bool Invisible { get; }
public InvisibilityToggleEvent(EntityUid uid, bool invisible) public InvisibilityToggleEvent(NetEntity uid, bool invisible)
{ {
Uid = uid; Uid = uid;
Invisible = invisible; Invisible = invisible;

View File

@@ -167,3 +167,16 @@
keywords: [ "AI", "console", "interface" ] keywords: [ "AI", "console", "interface" ]
priority: -10 priority: -10
event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key }
- type: entity
id: ToggleInvisibilityAction
name: Переключить невидимость
description: Переключить невидимость вашего призрака.
noSpawn: true
components:
- type: InstantAction
icon: "White/Icons/transparent-ghost.png"
checkCanInteract: false
clientExclusive: true
priority: -5
event: !type:ToggleInvisibilityActionEvent