Skip to content

Commit

Permalink
Only disable panicbunker for admins with AdminFlags.Admin (space-wiza…
Browse files Browse the repository at this point in the history
…rds#33879)

* Only disable panicbunker for admins with AdminFlags.Admin

* nicer curly braces
  • Loading branch information
slarticodefast authored Dec 18, 2024
1 parent 6b99493 commit e7294bd
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 15 deletions.
13 changes: 9 additions & 4 deletions Content.Server/Administration/Systems/AdminSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,15 @@ private void OnBabyJailMaxOverallMinutesChanged(int minutes)

private void UpdatePanicBunker()
{
var admins = PanicBunker.CountDeadminnedAdmins
? _adminManager.AllAdmins
: _adminManager.ActiveAdmins;
var hasAdmins = admins.Any();
var hasAdmins = false;
foreach (var admin in _adminManager.AllAdmins)
{
if (_adminManager.HasAdminFlag(admin, AdminFlags.Admin, includeDeAdmin: PanicBunker.CountDeadminnedAdmins))
{
hasAdmins = true;
break;
}
}

// TODO Fix order dependent Cvars
// Please for the sake of my sanity don't make cvars & order dependent.
Expand Down
5 changes: 3 additions & 2 deletions Content.Shared/Administration/AdminData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ public sealed class AdminData
/// Checks whether this admin has an admin flag.
/// </summary>
/// <param name="flag">The flags to check. Multiple flags can be specified, they must all be held.</param>
/// <param name="includeDeAdmin">If true then also count flags even if the admin has de-adminned.</param>
/// <returns>False if this admin is not <see cref="Active"/> or does not have all the flags specified.</returns>
public bool HasFlag(AdminFlags flag)
public bool HasFlag(AdminFlags flag, bool includeDeAdmin = false)
{
return Active && (Flags & flag) == flag;
return (includeDeAdmin || Active) && (Flags & flag) == flag;
}

/// <summary>
Expand Down
24 changes: 15 additions & 9 deletions Content.Shared/Administration/Managers/ISharedAdminManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public interface ISharedAdminManager
/// </param>
/// <returns><see langword="null" /> if the player is not an admin.</returns>
AdminData? GetAdminData(EntityUid uid, bool includeDeAdmin = false);

/// <summary>
/// Gets the admin data for a player, if they are an admin.
/// </summary>
Expand All @@ -37,24 +37,30 @@ public interface ISharedAdminManager
/// <remarks>
/// When used by the client, this only returns accurate results for the player's own entity.
/// </remarks>
/// <param name="includeDeAdmin">
/// Whether to check flags even for admins that are current de-adminned.
/// </param>
/// <returns>True if the player is and admin and has the specified flags.</returns>
bool HasAdminFlag(EntityUid player, AdminFlags flag)
bool HasAdminFlag(EntityUid player, AdminFlags flag, bool includeDeAdmin = false)
{
var data = GetAdminData(player);
return data != null && data.HasFlag(flag);
var data = GetAdminData(player, includeDeAdmin);
return data != null && data.HasFlag(flag, includeDeAdmin);
}

/// <summary>
/// See if a player has an admin flag.
/// </summary>
/// <remarks>
/// When used by the client, this only returns accurate results for the player's own session.
/// </remarks>
/// <param name="includeDeAdmin">
/// Whether to check flags even for admins that are current de-adminned.
/// </param>
/// <returns>True if the player is and admin and has the specified flags.</returns>
bool HasAdminFlag(ICommonSession player, AdminFlags flag)
bool HasAdminFlag(ICommonSession player, AdminFlags flag, bool includeDeAdmin = false)
{
var data = GetAdminData(player);
return data != null && data.HasFlag(flag);
var data = GetAdminData(player, includeDeAdmin);
return data != null && data.HasFlag(flag, includeDeAdmin);
}

/// <summary>
Expand All @@ -71,7 +77,7 @@ bool IsAdmin(EntityUid uid, bool includeDeAdmin = false)
{
return GetAdminData(uid, includeDeAdmin) != null;
}

/// <summary>
/// Checks if a player is an admin.
/// </summary>
Expand Down
1 change: 1 addition & 0 deletions Content.Shared/CCVar/CCVars.Game.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ public static readonly CVarDef<bool>

/// <summary>
/// Whether or not the panic bunker will enable when no admins are online.
/// This counts everyone with the 'Admin' AdminFlag.
/// </summary>
public static readonly CVarDef<bool> PanicBunkerEnableWithoutAdmins =
CVarDef.Create("game.panic_bunker.enable_without_admins", false, CVar.SERVERONLY);
Expand Down

0 comments on commit e7294bd

Please sign in to comment.