diff --git a/Exiled.API/Features/Badge.cs b/Exiled.API/Features/Badge.cs
index 77ef838934..31a46f0905 100644
--- a/Exiled.API/Features/Badge.cs
+++ b/Exiled.API/Features/Badge.cs
@@ -20,13 +20,11 @@ public struct Badge
///
/// The badge text.
/// The badge color.
- /// The badge type.
/// Indicates whether the badge is global or not.
- public Badge(string text, string color, int type, bool isGlobal = false)
+ public Badge(string text, string color, bool isGlobal = false)
{
Text = text;
Color = color;
- Type = type;
IsGlobal = isGlobal;
}
@@ -40,11 +38,6 @@ public Badge(string text, string color, int type, bool isGlobal = false)
///
public string Color { get; }
- ///
- /// Gets the badge type.
- ///
- public int Type { get; }
-
///
/// Gets a value indicating whether the badge is global or not.
///
@@ -82,6 +75,6 @@ public static bool IsValidColor(string hex, out Misc.PlayerInfoColorTypes? color
/// Returns the Badge in a human-readable format.
///
/// A string containing Badge-related data.
- public override string ToString() => $"{Text} ({Color}) [{Type}] *{IsGlobal}*";
+ public override string ToString() => $"{Text} ({Color}) [{IsGlobal}]";
}
}
\ No newline at end of file
diff --git a/Exiled.API/Features/Npc.cs b/Exiled.API/Features/Npc.cs
index 8a57379d04..dc4a55804a 100644
--- a/Exiled.API/Features/Npc.cs
+++ b/Exiled.API/Features/Npc.cs
@@ -173,7 +173,7 @@ public static Npc Spawn(string name, RoleTypeId role, int id = 0, string userId
NetworkServer.AddPlayerForConnection(fakeConnection, newObject);
try
{
- npc.ReferenceHub.characterClassManager.UserId = string.IsNullOrEmpty(userId) ? $"Dummy@localhost" : userId;
+ npc.ReferenceHub.authManager.UserId = string.IsNullOrEmpty(userId) ? $"Dummy@localhost" : userId;
}
catch (Exception e)
{
diff --git a/Exiled.API/Features/Player.cs b/Exiled.API/Features/Player.cs
index 8d24bc3027..7c12d70585 100644
--- a/Exiled.API/Features/Player.cs
+++ b/Exiled.API/Features/Player.cs
@@ -244,16 +244,13 @@ public int Id
///
/// Gets the player's user id.
///
- public string UserId => referenceHub.characterClassManager.UserId;
+ public string UserId => referenceHub.authManager.UserId;
///
/// Gets or sets the player's custom user id.
///
- public string CustomUserId
- {
- get => ReferenceHub.characterClassManager.UserId2;
- set => ReferenceHub.characterClassManager.UserId2 = value;
- }
+ [Obsolete("Remove by NW", true)]
+ public string CustomUserId { get; set; }
///
/// Gets the player's user id without the authentication.
@@ -263,7 +260,7 @@ public string CustomUserId
///
/// Gets the player's authentication token.
///
- public string AuthenticationToken => ReferenceHub.characterClassManager.AuthToken;
+ public string AuthenticationToken => ReferenceHub.authManager.GetAuthToken();
///
/// Gets the player's authentication type.
@@ -407,7 +404,7 @@ public float InfoViewRange
///
/// Gets a value indicating whether or not the player has Do Not Track (DNT) enabled. If this value is , data about the player unrelated to server security shouldn't be stored.
///
- public bool DoNotTrack => ReferenceHub.serverRoles.DoNotTrack;
+ public bool DoNotTrack => ReferenceHub.authManager.DoNotTrack;
///
/// Gets a value indicating whether the player is fully connected to the server.
@@ -437,7 +434,7 @@ public float InfoViewRange
public bool IsOverwatchEnabled
{
get => ReferenceHub.serverRoles.IsInOverwatch;
- set => ReferenceHub.serverRoles.SetOverwatchStatus((byte)(value ? 1 : 0));
+ set => ReferenceHub.serverRoles.IsInOverwatch = value;
}
///
@@ -935,7 +932,7 @@ public float Stamina
///
/// Gets a value indicating whether or not the staff bypass is enabled.
///
- public bool IsStaffBypassEnabled => ReferenceHub.serverRoles.BypassStaff;
+ public bool IsStaffBypassEnabled => ReferenceHub.authManager.BypassBansFlagSet;
///
/// Gets or sets the player's group name.
@@ -1010,7 +1007,7 @@ public Badge? GlobalBadge
ServerRoles serverRoles = ReferenceHub.serverRoles;
- return new Badge(serverRoles._bgt, serverRoles._bgc, serverRoles.GlobalBadgeType, true);
+ return new Badge(serverRoles._bgt, serverRoles._bgc, true);
}
}
@@ -1023,21 +1020,21 @@ public bool BadgeHidden
set
{
if (value)
- ReferenceHub.characterClassManager.UserCode_CmdRequestHideTag();
+ ReferenceHub.serverRoles.TryHideTag();
else
- ReferenceHub.characterClassManager.UserCode_CmdRequestShowTag__Boolean(false);
+ ReferenceHub.serverRoles.RefreshLocalTag();
}
}
///
/// Gets a value indicating whether or not the player is Northwood staff.
///
- public bool IsNorthwoodStaff => ReferenceHub.serverRoles.Staff;
+ public bool IsNorthwoodStaff => ReferenceHub.authManager.NorthwoodStaff;
///
/// Gets a value indicating whether or not the player is a global moderator.
///
- public bool IsGlobalModerator => ReferenceHub.serverRoles.RaEverywhere;
+ public bool IsGlobalModerator => ReferenceHub.authManager.RemoteAdminGlobalAccess;
///
/// Gets a value indicating whether or not the player is in the pocket dimension.
@@ -1687,13 +1684,13 @@ public void SetRank(string name, UserGroup group)
userGroup.HiddenByDefault = !group.Cover;
userGroup.Cover = group.Cover;
- ReferenceHub.serverRoles.SetGroup(userGroup, false, false, group.Cover);
+ ReferenceHub.serverRoles.SetGroup(userGroup, false, false);
}
else
{
ServerStatic.GetPermissionsHandler()._groups.Add(name, group);
- ReferenceHub.serverRoles.SetGroup(group, false, false, group.Cover);
+ ReferenceHub.serverRoles.SetGroup(group, false, false);
}
if (ServerStatic.GetPermissionsHandler()._members.ContainsKey(UserId))
@@ -1884,7 +1881,7 @@ public int RemoveItem(Func- predicate, bool destroy = true)
///
/// The message to be sent.
/// The message color.
- public void SendConsoleMessage(string message, string color) => ReferenceHub.characterClassManager.ConsolePrint(message, color);
+ public void SendConsoleMessage(string message, string color) => referenceHub.gameConsoleTransmission.SendToClient(message, color);
///
/// Disconnects the player.
diff --git a/Exiled.API/Features/Roles/Scp106Role.cs b/Exiled.API/Features/Roles/Scp106Role.cs
index ffe00dc2ff..cb0b9354f1 100644
--- a/Exiled.API/Features/Roles/Scp106Role.cs
+++ b/Exiled.API/Features/Roles/Scp106Role.cs
@@ -80,9 +80,9 @@ internal Scp106Role(Scp106GameRole baseRole)
public Scp106VigorAbilityBase VigorAbility { get; }
///
- /// Gets the .
+ /// Gets the .
///
- public Scp106Vigor VigorComponent => VigorAbility.Vigor;
+ public VigorStat VigorComponent => VigorAbility.Vigor;
///
/// Gets the .
diff --git a/Exiled.CustomItems/Commands/List/Tracked.cs b/Exiled.CustomItems/Commands/List/Tracked.cs
index 1813335a71..ed826f463e 100644
--- a/Exiled.CustomItems/Commands/List/Tracked.cs
+++ b/Exiled.CustomItems/Commands/List/Tracked.cs
@@ -44,7 +44,7 @@ private Tracked()
///
public bool Execute(ArraySegment arguments, ICommandSender sender, out string response)
{
- if (!sender.CheckPermission("customitems.list.insideinventories") && sender is PlayerCommandSender playerSender && !playerSender.ServerRoles.RaEverywhere)
+ if (!sender.CheckPermission("customitems.list.insideinventories") && sender is PlayerCommandSender playerSender && !playerSender.FullPermissions)
{
response = "Permission Denied, required: customitems.list.insideinventories";
return false;
diff --git a/Exiled.Events/Commands/PluginManager/Disable.cs b/Exiled.Events/Commands/PluginManager/Disable.cs
index 9e9472f254..998a81cdfb 100644
--- a/Exiled.Events/Commands/PluginManager/Disable.cs
+++ b/Exiled.Events/Commands/PluginManager/Disable.cs
@@ -1,4 +1,4 @@
-// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
//
// Copyright (c) Exiled Team. All rights reserved.
// Licensed under the CC BY-SA 3.0 license.
@@ -38,7 +38,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s
{
const string perm = "pm.disable";
- if (!sender.CheckPermission(perm) && sender is PlayerCommandSender playerSender && !playerSender.ServerRoles.RaEverywhere)
+ if (!sender.CheckPermission(perm) && sender is PlayerCommandSender playerSender && !playerSender.FullPermissions)
{
response = $"You can't disable a plugin, you don't have \"{perm}\" permissions.";
return false;
diff --git a/Exiled.Events/Commands/PluginManager/Enable.cs b/Exiled.Events/Commands/PluginManager/Enable.cs
index 345d43b7b0..5c0201b647 100644
--- a/Exiled.Events/Commands/PluginManager/Enable.cs
+++ b/Exiled.Events/Commands/PluginManager/Enable.cs
@@ -1,4 +1,4 @@
-// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
//
// Copyright (c) Exiled Team. All rights reserved.
// Licensed under the CC BY-SA 3.0 license.
@@ -42,7 +42,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s
{
const string perm = "pm.enable";
- if (!sender.CheckPermission(perm) && sender is PlayerCommandSender playerSender && !playerSender.ServerRoles.RaEverywhere)
+ if (!sender.CheckPermission(perm) && sender is PlayerCommandSender playerSender && !playerSender.FullPermissions)
{
response = $"You can't enable a plugin, you don't have \"{perm}\" permissions.";
return false;
diff --git a/Exiled.Events/Commands/PluginManager/Show.cs b/Exiled.Events/Commands/PluginManager/Show.cs
index 071230c584..b703d44fcd 100644
--- a/Exiled.Events/Commands/PluginManager/Show.cs
+++ b/Exiled.Events/Commands/PluginManager/Show.cs
@@ -45,7 +45,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s
{
const string perm = "pm.showplugins";
- if (!sender.CheckPermission(perm) && sender is PlayerCommandSender playerSender && !playerSender.ServerRoles.RaEverywhere)
+ if (!sender.CheckPermission(perm) && sender is PlayerCommandSender playerSender && !playerSender.FullPermissions)
{
response = $"You can't get a list of all plugins, you don't have \"{perm}\" permissions.";
return false;
diff --git a/Exiled.Events/Events.cs b/Exiled.Events/Events.cs
index 707d55beac..46e4d9b7d6 100644
--- a/Exiled.Events/Events.cs
+++ b/Exiled.Events/Events.cs
@@ -12,6 +12,7 @@ namespace Exiled.Events
using API.Enums;
using API.Features;
+ using CentralAuth;
using Exiled.Events.Features;
using HarmonyLib;
using InventorySystem.Items.Pickups;
@@ -55,7 +56,7 @@ public override void OnEnabled()
watch.Stop();
Log.Info($"{(Config.UseDynamicPatching ? "Non-event" : "All")} patches completed in {watch.Elapsed}");
- CharacterClassManager.OnInstanceModeChanged -= RoleAssigner.CheckLateJoin;
+ PlayerAuthenticationManager.OnInstanceModeChanged -= RoleAssigner.CheckLateJoin;
SceneManager.sceneUnloaded += Handlers.Internal.SceneUnloaded.OnSceneUnloaded;
MapGeneration.SeedSynchronizer.OnMapGenerated += Handlers.Internal.MapGenerated.OnMapGenerated;
diff --git a/Exiled.Events/Handlers/Internal/Round.cs b/Exiled.Events/Handlers/Internal/Round.cs
index 29ca9dd6f4..826b2e0363 100644
--- a/Exiled.Events/Handlers/Internal/Round.cs
+++ b/Exiled.Events/Handlers/Internal/Round.cs
@@ -7,6 +7,7 @@
namespace Exiled.Events.Handlers.Internal
{
+ using CentralAuth;
using Exiled.API.Features;
using Exiled.API.Features.Roles;
using Exiled.Events.EventArgs.Player;
diff --git a/Exiled.Events/Patches/Events/Player/ChangingGroup.cs b/Exiled.Events/Patches/Events/Player/ChangingGroup.cs
index d2d57826bf..640af3a71b 100644
--- a/Exiled.Events/Patches/Events/Player/ChangingGroup.cs
+++ b/Exiled.Events/Patches/Events/Player/ChangingGroup.cs
@@ -22,7 +22,7 @@ namespace Exiled.Events.Patches.Events.Player
using static HarmonyLib.AccessTools;
///
- /// Patches .
+ /// Patches .
/// Adds the event.
///
[EventPatch(typeof(Handlers.Player), nameof(Handlers.Player.ChangingGroup))]
diff --git a/Exiled.Events/Patches/Events/Player/TogglingOverwatch.cs b/Exiled.Events/Patches/Events/Player/TogglingOverwatch.cs
index d264722d9c..a77e03790b 100644
--- a/Exiled.Events/Patches/Events/Player/TogglingOverwatch.cs
+++ b/Exiled.Events/Patches/Events/Player/TogglingOverwatch.cs
@@ -11,6 +11,7 @@ namespace Exiled.Events.Patches.Events.Player
using System.Reflection.Emit;
using API.Features.Pools;
+ using CommandSystem.Commands.RemoteAdmin;
using Exiled.Events.Attributes;
using Exiled.Events.EventArgs.Player;
@@ -19,10 +20,10 @@ namespace Exiled.Events.Patches.Events.Player
using static HarmonyLib.AccessTools;
///
- /// patches to add the event.
+ /// patches to add the event.
///
[EventPatch(typeof(Handlers.Player), nameof(Handlers.Player.TogglingOverwatch))]
- [HarmonyPatch(typeof(ServerRoles), nameof(ServerRoles.SetOverwatchStatus), typeof(byte))]
+ [HarmonyPatch(typeof(OverwatchCommand), nameof(OverwatchCommand.SetOverwatchStatus))]
internal static class TogglingOverwatch
{
private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator)
diff --git a/Exiled.Events/Patches/Events/Player/Verified.cs b/Exiled.Events/Patches/Events/Player/Verified.cs
index 90c695402b..25cdedf7c5 100644
--- a/Exiled.Events/Patches/Events/Player/Verified.cs
+++ b/Exiled.Events/Patches/Events/Player/Verified.cs
@@ -8,57 +8,29 @@
namespace Exiled.Events.Patches.Events.Player
{
using System;
- using System.Collections.Generic;
- using System.Reflection.Emit;
using API.Features;
- using API.Features.Pools;
using Exiled.API.Extensions;
using Exiled.Events.EventArgs.Player;
using HarmonyLib;
- using static HarmonyLib.AccessTools;
+#pragma warning disable SA1313 // Parameter names should begin with lower-case letter
///
- /// Patches .
+ /// Patches .
/// Adds the event.
///
- [HarmonyPatch(typeof(ServerRoles), nameof(ServerRoles.UserCode_CmdServerSignatureComplete__String__String__String__Boolean))]
+ [HarmonyPatch(typeof(ServerRoles), nameof(ServerRoles.UserCode_CmdSetLocalTagPreferences__BadgePreferences__BadgeVisibilityPreferences__BadgeVisibilityPreferences__Boolean))]
internal static class Verified
{
- private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator)
+ private static void Postfix(ServerRoles __instance)
{
- List newInstructions = ListPool.Pool.Get(instructions);
+ if (!Player.UnverifiedPlayers.TryGetValue(__instance._hub.gameObject, out Player player))
+ Joined.CallEvent(__instance._hub, out player);
- Label callJoined = generator.DefineLabel();
-
- LocalBuilder player = generator.DeclareLocal(typeof(Player));
-
- const int offset = -2;
- int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(ServerRoles), nameof(ServerRoles.RefreshPermissions)))) + offset;
-
- newInstructions.InsertRange(
- index,
- new[]
- {
- new(OpCodes.Ldarg_0),
- new CodeInstruction(OpCodes.Call, Method(typeof(Verified), nameof(Verified.HandleCmdServerSignature))),
- });
-
- for (int z = 0; z < newInstructions.Count; z++)
- yield return newInstructions[z];
-
- ListPool.Pool.Return(newInstructions);
- }
-
- private static void HandleCmdServerSignature(ServerRoles instance)
- {
- if (!Player.UnverifiedPlayers.TryGetValue(instance._hub.gameObject, out Player player))
- Joined.CallEvent(instance._hub, out player);
-
- Player.Dictionary.Add(instance._hub.gameObject, player);
+ Player.Dictionary.Add(__instance._hub.gameObject, player);
player.IsVerified = true;
player.RawUserId = player.UserId.GetRawUserId();
diff --git a/Exiled.Loader/AutoUpdateFiles.cs b/Exiled.Loader/AutoUpdateFiles.cs
index 799fe6e420..bda484a30a 100644
--- a/Exiled.Loader/AutoUpdateFiles.cs
+++ b/Exiled.Loader/AutoUpdateFiles.cs
@@ -17,6 +17,6 @@ public static class AutoUpdateFiles
///
/// Gets which SCP: SL version generated Exiled.
///
- public static readonly Version RequiredSCPSLVersion = new(13, 2, 0, 0);
+ public static readonly Version RequiredSCPSLVersion = new(13, 2, 0, 2);
}
}
\ No newline at end of file
diff --git a/Exiled.Loader/AutoUpdateFiles.tt b/Exiled.Loader/AutoUpdateFiles.tt
index 3fccefaff9..6c38d3d4c5 100644
--- a/Exiled.Loader/AutoUpdateFiles.tt
+++ b/Exiled.Loader/AutoUpdateFiles.tt
@@ -17,6 +17,6 @@ namespace Exiled.Loader
///
/// Gets which SCP: SL version generated Exiled.
///
- public static readonly Version RequiredSCPSLVersion = new(<#=GameCore.Version.Major#>, <#=GameCore.Version.Minor#>, <#=GameCore.Version.Revision#>, <#=GameCore.Version.BackwardRevision#>);
+ public static readonly Version RequiredSCPSLVersion = new(<#=GameCore.Version.Major#>, <#=GameCore.Version.Minor#>, 0, <#=GameCore.Version.Revision#>);
}
}
\ No newline at end of file
diff --git a/docs/docs/Resources/Intro.md b/docs/docs/Resources/Intro.md
index 53713e86e9..bc425f7099 100644
--- a/docs/docs/Resources/Intro.md
+++ b/docs/docs/Resources/Intro.md
@@ -134,7 +134,7 @@ sidebar_position: 1
Ammo
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] None
[1] Nato556
[2] Nato762
@@ -149,7 +149,7 @@ sidebar_position: 1
Doors
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] UnknownDoor
[1] Scp914Door
[2] GR18Inner
@@ -218,62 +218,61 @@ sidebar_position: 1
Rooms
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] Unknown
[1] LczArmory
[2] LczCurve
[3] LczStraight
-[4] Lcz012
-[5] Lcz914
-[6] LczCrossing
-[7] LczTCross
-[8] LczCafe
-[9] LczPlants
-[10] LczToilets
-[11] LczAirlock
-[12] Lcz173
-[13] LczClassDSpawn
-[14] LczCheckpointB
-[15] LczGlassBox
-[16] LczCheckpointA
-[17] Hcz079
-[18] HczEzCheckpointA
-[19] HczEzCheckpointB
-[20] HczArmory
-[21] Hcz939
-[22] HczHid
-[23] Hcz049
-[24] HczCrossing
-[25] Hcz106
-[26] HczNuke
-[27] HczTesla
-[28] HczServers
-[29] HczTCross
-[30] HczCurve
-[31] Hcz096
-[32] EzVent
-[33] EzIntercom
-[34] EzGateA
-[35] EzDownstairsPcs
-[36] EzCurve
-[37] EzPcs
-[38] EzCrossing
-[39] EzCollapsedTunnel
-[40] EzConference
-[41] EzStraight
-[42] EzCafeteria
-[43] EzUpstairsPcs
-[44] EzGateB
-[45] EzShelter
-[46] Pocket
-[47] Surface
-[48] HczStraight
-[49] EzTCross
-[50] Lcz330
-[51] EzCheckpointHallway
-[52] HczTestRoom
-[53] HczElevatorA
-[54] HczElevatorB
+[4] Lcz914
+[5] LczCrossing
+[6] LczTCross
+[7] LczCafe
+[8] LczPlants
+[9] LczToilets
+[10] LczAirlock
+[11] Lcz173
+[12] LczClassDSpawn
+[13] LczCheckpointB
+[14] LczGlassBox
+[15] LczCheckpointA
+[16] Hcz079
+[17] HczEzCheckpointA
+[18] HczEzCheckpointB
+[19] HczArmory
+[20] Hcz939
+[21] HczHid
+[22] Hcz049
+[23] HczCrossing
+[24] Hcz106
+[25] HczNuke
+[26] HczTesla
+[27] HczServers
+[28] HczTCross
+[29] HczCurve
+[30] Hcz096
+[31] EzVent
+[32] EzIntercom
+[33] EzGateA
+[34] EzDownstairsPcs
+[35] EzCurve
+[36] EzPcs
+[37] EzCrossing
+[38] EzCollapsedTunnel
+[39] EzConference
+[40] EzStraight
+[41] EzCafeteria
+[42] EzUpstairsPcs
+[43] EzGateB
+[44] EzShelter
+[45] Pocket
+[46] Surface
+[47] HczStraight
+[48] EzTCross
+[49] Lcz330
+[50] EzCheckpointHallway
+[51] HczTestRoom
+[52] HczElevatorA
+[53] HczElevatorB
```
@@ -282,7 +281,7 @@ sidebar_position: 1
Elevators
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] Unknown
[1] GateA
[2] GateB
@@ -298,7 +297,7 @@ sidebar_position: 1
DamageType
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] Unknown
[1] Falldown
[2] Warhead
@@ -340,6 +339,8 @@ sidebar_position: 1
[38] CardiacArrest
[39] Com45
[40] Jailbird
+[41] Frmg0
+[42] A7
```
@@ -375,7 +376,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
Effects
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] AmnesiaItems
[1] AmnesiaVision
[2] Asphyxiated
@@ -421,7 +422,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
Keycard Perms
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] None
[1] Checkpoints
[2] ExitGates
@@ -442,7 +443,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
Lock Type
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] None
[1] Regular079
[2] Lockdown079
@@ -477,7 +478,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
Blood
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] Default
[1] Scp106
[2] Spreaded
@@ -490,7 +491,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
GeneratorState
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[1] None
[2] Unlocked
[4] Open
@@ -532,7 +533,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
Attachment Names
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] None
[1] IronSights
[2] DotSight
@@ -587,7 +588,7 @@ PlayerStatsSystem::Scp018DamageHandler : AttackerDamageHandler
Spawn Reasons
-```md title="Latest Updated: 8.0.0.0"
+```md title="Latest Updated: 8.2.1.0"
[0] None
[1] RoundStart
[2] LateJoin