Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into 24-03-24-make-emi…
Browse files Browse the repository at this point in the history
…sse-weep
  • Loading branch information
PJB3005 committed Mar 24, 2024
2 parents 512dc99 + f2112e6 commit 68537fd
Show file tree
Hide file tree
Showing 28 changed files with 35,718 additions and 35,169 deletions.
13 changes: 13 additions & 0 deletions .github/workflows/labeler-untriaged.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Labels: Untriaged"

on:
issues:
types: [opened]

jobs:
add_label:
runs-on: ubuntu-latest
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: "Status: Untriaged"
2 changes: 2 additions & 0 deletions Content.Client/Atmos/Overlays/AtmosDebugOverlay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,8 @@ private void DrawTooltip(DrawingHandleScreen handle, Vector2 pos, AtmosDebugOver
handle.DrawString(_font, pos, $"Map: {data.MapAtmosphere}");
pos += offset;
handle.DrawString(_font, pos, $"NoGrid: {data.NoGrid}");
pos += offset;
handle.DrawString(_font, pos, $"Immutable: {data.Immutable}");
}

private void GetGrids(MapId mapId, Box2Rotated box)
Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ private void InputManagerOnFirstChanceOnKeyEvent(KeyEventArgs keyEvent, KeyEvent
Mod1 = mods[0],
Mod2 = mods[1],
Mod3 = mods[2],
Priority = 0,
Priority = _currentlyRebinding.Binding?.Priority ?? 0,
Type = bindType,
CanFocus = key == Keyboard.Key.MouseLeft
|| key == Keyboard.Key.MouseRight
Expand Down
16 changes: 16 additions & 0 deletions Content.Server/Administration/Commands/AdminWhoCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
var adminMgr = IoCManager.Resolve<IAdminManager>();
var afk = IoCManager.Resolve<IAfkManager>();

var seeStealth = true;

// If null it (hopefully) means it is being called from the console.
if (shell.Player != null)
{
var playerData = adminMgr.GetAdminData(shell.Player);

seeStealth = playerData != null && playerData.CanStealth();
}

var sb = new StringBuilder();
var first = true;
foreach (var admin in adminMgr.ActiveAdmins)
Expand All @@ -30,10 +40,16 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
var adminData = adminMgr.GetAdminData(admin)!;
DebugTools.AssertNotNull(adminData);

if (adminData.Stealth && !seeStealth)
continue;

sb.Append(admin.Name);
if (adminData.Title is { } title)
sb.Append($": [{title}]");

if (adminData.Stealth)
sb.Append(" (S)");

if (shell.Player is { } player && adminMgr.HasAdminFlag(player, AdminFlags.Admin))
{
if (afk.IsAfk(admin))
Expand Down
39 changes: 39 additions & 0 deletions Content.Server/Administration/Commands/StealthminCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Content.Server.Administration.Managers;
using Content.Shared.Administration;
using JetBrains.Annotations;
using Robust.Shared.Console;
using Robust.Shared.Utility;

namespace Content.Server.Administration.Commands;

[UsedImplicitly]
[AdminCommand(AdminFlags.Stealth)]
public sealed class StealthminCommand : LocalizedCommands
{
public override string Command => "stealthmin";

public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
var player = shell.Player;
if (player == null)
{
shell.WriteLine(Loc.GetString("cmd-stealthmin-no-console"));
return;
}

var mgr = IoCManager.Resolve<IAdminManager>();

var adminData = mgr.GetAdminData(player);

DebugTools.AssertNotNull(adminData);

if (!adminData!.Stealth)
{
mgr.Stealth(player);
}
else
{
mgr.UnStealth(player);
}
}
}
84 changes: 80 additions & 4 deletions Content.Server/Administration/Managers/AdminManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,44 @@ public void DeAdmin(ICommonSession session)
UpdateAdminStatus(session);
}

public void Stealth(ICommonSession session)
{
if (!_admins.TryGetValue(session, out var reg))
{
throw new ArgumentException($"Player {session} is not an admin");
}

if (reg.Data.Stealth)
return;

var playerData = session.ContentData()!;
playerData.Stealthed = true;
reg.Data.Stealth = true;

_chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message"));
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-de-admin-message", ("exAdminName", session.Name)), AdminFlags.Stealth);
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-enable-stealth", ("stealthAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth);
}

public void UnStealth(ICommonSession session)
{
if (!_admins.TryGetValue(session, out var reg))
{
throw new ArgumentException($"Player {session} is not an admin");
}

if (!reg.Data.Stealth)
return;

var playerData = session.ContentData()!;
playerData.Stealthed = false;
reg.Data.Stealth = false;

_chat.DispatchServerMessage(session, Loc.GetString("admin-manager-unstealthed-message"));
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-re-admin-message", ("newAdminName", session.Name)), flagBlacklist: AdminFlags.Stealth);
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-disable-stealth", ("exStealthAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth);
}

public void ReAdmin(ICommonSession session)
{
if (!_admins.TryGetValue(session, out var reg))
Expand All @@ -116,7 +154,16 @@ public void ReAdmin(ICommonSession session)
plyData.ExplicitlyDeadminned = false;
reg.Data.Active = true;

_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-re-admin-message", ("newAdminName", session.Name)));
if (reg.Data.Stealth)
{
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-re-admin-message", ("newAdminName", session.Name)));
}
else
{
_chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message"));
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-re-admin-message",
("newAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth);
}

SendPermsChangedEvent(session);
UpdateAdminStatus(session);
Expand Down Expand Up @@ -168,6 +215,11 @@ public async void ReloadAdmin(ICommonSession player)

_chat.DispatchServerMessage(player, Loc.GetString("admin-manager-admin-permissions-updated-message"));
}

if (player.ContentData()!.Stealthed)
{
aData.Stealth = true;
}
}

SendPermsChangedEvent(player);
Expand Down Expand Up @@ -290,9 +342,19 @@ private void PlayerStatusChanged(object? sender, SessionStatusEventArgs e)
}
else if (e.NewStatus == SessionStatus.Disconnected)
{
if (_admins.Remove(e.Session) && _cfg.GetCVar(CCVars.AdminAnnounceLogout))
if (_admins.Remove(e.Session, out var reg ) && _cfg.GetCVar(CCVars.AdminAnnounceLogout))
{
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-admin-logout-message", ("name", e.Session.Name)));
if (reg.Data.Stealth)
{
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-admin-logout-message",
("name", e.Session.Name)), flagWhitelist: AdminFlags.Stealth);

}
else
{
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-admin-logout-message",
("name", e.Session.Name)));
}
}
}
}
Expand All @@ -315,13 +377,27 @@ private async void LoginAdminMaybe(ICommonSession session)

_admins.Add(session, reg);

if (session.ContentData()!.Stealthed)
reg.Data.Stealth = true;

if (!session.ContentData()!.ExplicitlyDeadminned)
{
reg.Data.Active = true;

if (_cfg.GetCVar(CCVars.AdminAnnounceLogin))
{
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-admin-login-message", ("name", session.Name)));
if (reg.Data.Stealth)
{

_chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message"));
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-admin-login-message",
("name", session.Name)), flagWhitelist: AdminFlags.Stealth);
}
else
{
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-admin-login-message",
("name", session.Name)));
}
}

SendPermsChangedEvent(session);
Expand Down
10 changes: 10 additions & 0 deletions Content.Server/Administration/Managers/IAdminManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ public interface IAdminManager : ISharedAdminManager
/// </summary>
void ReAdmin(ICommonSession session);

/// <summary>
/// Make admin hidden from adminwho.
/// </summary>
void Stealth(ICommonSession session);

/// <summary>
/// Unhide admin from adminwho.
/// </summary>
void UnStealth(ICommonSession session);

/// <summary>
/// Re-loads the permissions of an player in case their admin data changed DB-side.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e)
tile.ExcitedGroup?.GetHashCode(),
tile.Space,
tile.MapAtmosphere,
tile.NoGridTile);
tile.NoGridTile,
tile.Air?.Immutable ?? false);
}

public override void Update(float frameTime)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,12 @@ private void FixGridAtmosCommand(IConsoleShell shell, string argstr, string[] ar
if (tile == null)
continue;

if (!_mapSystem.TryGetTile(gridComp, indices, out var gTile) || gTile.IsEmpty)
{
gridAtmosphere.Tiles.Remove(indices);
continue;
}

if (tile.Immutable && !IsTileSpace(euid, transform.MapUid, indices, gridComp))
{
tile = new GasMixture(tile.Volume) { Temperature = tile.Temperature };
Expand Down
18 changes: 16 additions & 2 deletions Content.Server/Chat/Managers/ChatManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,23 @@ public void DispatchServerMessage(ICommonSession player, string message, bool su
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server message to {player:Player}: {message}");
}

public void SendAdminAnnouncement(string message)
public void SendAdminAnnouncement(string message, AdminFlags? flagBlacklist, AdminFlags? flagWhitelist)
{
var clients = _adminManager.ActiveAdmins.Select(p => p.Channel);
var clients = _adminManager.ActiveAdmins.Where(p =>
{
var adminData = _adminManager.GetAdminData(p);
DebugTools.AssertNotNull(adminData);
if (adminData == null)
return false;
if (flagBlacklist != null && adminData.HasFlag(flagBlacklist.Value))
return false;
return flagWhitelist == null || adminData.HasFlag(flagWhitelist.Value);
}).Select(p => p.Channel);

var wrappedMessage = Loc.GetString("chat-manager-send-admin-announcement-wrap-message",
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")), ("message", FormattedMessage.EscapeText(message)));
Expand Down
3 changes: 2 additions & 1 deletion Content.Server/Chat/Managers/IChatManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Network;
using Robust.Shared.Player;
Expand All @@ -21,7 +22,7 @@ public interface IChatManager
void TrySendOOCMessage(ICommonSession player, string message, OOCChatType type);

void SendHookOOC(string sender, string message);
void SendAdminAnnouncement(string message);
void SendAdminAnnouncement(string message, AdminFlags? flagBlacklist = null, AdminFlags? flagWhitelist = null);
void SendAdminAlert(string message);
void SendAdminAlert(EntityUid player, string message);

Expand Down
6 changes: 4 additions & 2 deletions Content.Server/Store/Systems/StoreSystem.Ui.cs
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,12 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi
HandleRefundComp(uid, component, upgradeActionId.Value);
}

//broadcast event
if (listing.ProductEvent != null)
{
RaiseLocalEvent(listing.ProductEvent);
if (!listing.RaiseProductEventOnUser)
RaiseLocalEvent(listing.ProductEvent);
else
RaiseLocalEvent(buyer, listing.ProductEvent);
}

//log dat shit.
Expand Down
13 changes: 13 additions & 0 deletions Content.Shared/Administration/AdminData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ public sealed class AdminData
/// </summary>
public bool Active;

/// <summary>
/// Whether the admin is in stealth mode and won't appear in adminwho to admins without the Stealth flag.
/// </summary>
public bool Stealth;

/// <summary>
/// The admin's title.
/// </summary>
Expand Down Expand Up @@ -56,6 +61,14 @@ public bool CanAdminMenu()
return HasFlag(AdminFlags.Admin);
}

/// <summary>
/// Check if this admin can be hidden and see other hidden admins.
/// </summary>
public bool CanStealth()
{
return HasFlag(AdminFlags.Stealth);
}

public bool CanAdminReloadPrototypes()
{
return HasFlag(AdminFlags.Host);
Expand Down
5 changes: 5 additions & 0 deletions Content.Shared/Administration/AdminFlags.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ public enum AdminFlags : uint
/// </summary>
MassBan = 1 << 15,

/// <summary>
/// Allows you to remain hidden from adminwho except to other admins with this flag.
/// </summary>
Stealth = 1 << 16,

/// <summary>
/// Dangerous host permissions like scsi.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public readonly record struct AtmosDebugOverlayData(
int? InExcitedGroup,
bool IsSpace,
bool MapAtmosphere,
bool NoGrid);
bool NoGrid,
bool Immutable);

/// <summary>
/// Invalid tiles for the gas overlay.
Expand Down
Loading

0 comments on commit 68537fd

Please sign in to comment.