diff --git a/DeathLog/DeathLogPlugin.cs b/DeathLog/DeathLogPlugin.cs index 34984d0..6dfceda 100644 --- a/DeathLog/DeathLogPlugin.cs +++ b/DeathLog/DeathLogPlugin.cs @@ -1,57 +1,54 @@ -using System.Collections.Generic; -using Axwabo.Helpers; +using System; +using LabApi.Events.Arguments.PlayerEvents; +using LabApi.Events.Arguments.ServerEvents; +using LabApi.Events.Handlers; +using LabApi.Loader.Features.Plugins; using PlayerRoles; -using PlayerRoles.PlayableScps; using PlayerStatsSystem; -using PluginAPI.Core; -using PluginAPI.Core.Attributes; -using PluginAPI.Enums; -using PluginAPI.Events; -using Respawning; -using Respawning.Waves; namespace DeathLog; -public sealed class DeathLogPlugin +public sealed class DeathLogPlugin : Plugin { - [PluginEntryPoint("DeathLog", "1.1.0", "DeathLog", "Axwabo")] - public void OnEnabled() + public override string Name => "DeathLog"; + public override string Description => "Logs deaths, cuffing and leaving SCPs"; + public override string Author => "Axwabo"; + public override Version Version => GetType().Assembly.GetName().Version; + public override Version RequiredApiVersion { get; } = new(1, 0, 0); + + public override void Enable() { - EventManager.RegisterEvents(this); - WaveManager.OnWaveSpawned += OnTeamRespawn; - Log.Info("DeathLog loaded!"); + ServerEvents.WaveRespawned += OnTeamRespawn; + ServerEvents.RoundStarted += OnRoundStarted; + PlayerEvents.Dying += OnPlayerDeath; + PlayerEvents.ChangingRole += OnPlayerLeave; + PlayerEvents.Cuffed += OnDetaining; + PlayerEvents.Uncuffed += OnUnDetaining; } - [PluginUnload] - public void OnDisabled() + public override void Disable() { - EventManager.UnregisterEvents(this); - WaveManager.OnWaveSpawned -= OnTeamRespawn; - Log.Info("DeathLog disabled!"); + ServerEvents.WaveRespawned -= OnTeamRespawn; + ServerEvents.RoundStarted -= OnRoundStarted; + PlayerEvents.Dying -= OnPlayerDeath; + PlayerEvents.ChangingRole -= OnPlayerLeave; + PlayerEvents.Cuffed -= OnDetaining; + PlayerEvents.Uncuffed -= OnUnDetaining; } - [PluginConfig] - public DeathLogConfig Config = new(); - private bool _spawnWaveOccurred; - [PluginEvent(ServerEventType.RoundStart)] private void OnRoundStarted() { _spawnWaveOccurred = false; - _lastId = ""; LogHandler.KosIgnoredVictimNetIdList.Clear(); } - private void OnTeamRespawn(SpawnableWaveBase spawnableWaveBase, List referenceHubs) - => _spawnWaveOccurred = Config.IgnoreLeavingAfterSpawnWave; + private void OnTeamRespawn(WaveRespawnedEventArgs ev) + => _spawnWaveOccurred = Config!.IgnoreLeavingAfterSpawnWave; - private static bool IsUnknownCause(DamageHandlerBase handler) => - handler is UniversalDamageHandler udh && (udh.TranslationId == 0 ? string.IsNullOrEmpty(udh._logsText) : udh._logsText == DeathTranslations.Unknown.LogLabel); - - [PluginEvent(ServerEventType.PlayerDying)] - private void OnPlayerDeath(PlayerDyingEvent e) + private void OnPlayerDeath(PlayerDyingEventArgs e) { var player = e.Player; var attacker = e.Attacker; @@ -59,53 +56,26 @@ public sealed class DeathLogPlugin if (player.Role is RoleTypeId.None or RoleTypeId.Scp0492 || string.IsNullOrEmpty(player.ReferenceHub.nicknameSync._myNickSync)) return; if (attacker != null && handler is AttackerDamageHandler adh) - LogHandler.LogAttackerDeathMessage(player, attacker, adh, Config.VisibilityRequirement, Config.KillOnSightPermitted, Config.DefaultFontSizeScalar); - else if (Config.LogSimpleDeaths) + LogHandler.LogAttackerDeathMessage(player, attacker, adh, Config!.VisibilityRequirement, Config.KillOnSightPermitted, Config.DefaultFontSizeScalar); + else if (Config!.LogSimpleDeaths) LogHandler.LogSimpleDeathMessage(player, handler, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); - if (!IsUnknownCause(handler) || player.ReferenceHub.roleManager.CurrentRole is not FpcStandardScp scp) - return; - _lastRole = scp.RoleName.Color(scp.RoleColor.ToHex()); - _lastId = player.UserId; } - [PluginEvent(ServerEventType.PlayerDamage)] - private void OnDamage(PlayerDamageEvent e) + private void OnPlayerLeave(PlayerChangingRoleEventArgs ev) { - var handler = e.DamageHandler; - var player = e.Player; - if (player == null - || !player.IsConnected() - || !IsUnknownCause(handler) - || player.ReferenceHub.roleManager.CurrentRole is not FpcStandardScp {RoleTypeId: not RoleTypeId.Scp0492}) - return; - var stats = player.ReferenceHub.playerStats; - _lastHealth = stats.GetModule().CurValue; - _lastHumeShield = stats.GetModule().CurValue; + if (ev.NewRole == RoleTypeId.Destroyed && !_spawnWaveOccurred && Config!.LogLeavingScpPlayers) + LogHandler.LogLeavingScp(ev.OldRole.RoleName, ev.Player.Health, ev.Player.HumeShield, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); } - private string _lastRole = ""; - private float _lastHealth; - private float _lastHumeShield; - private string _lastId; - - [PluginEvent(ServerEventType.PlayerLeft)] - private void OnPlayerLeave(Player player) + private void OnDetaining(PlayerCuffedEventArgs e) { - if (!_spawnWaveOccurred && Config.LogLeavingScpPlayers && player.UserId == _lastId) - LogHandler.LogLeavingScp(_lastRole, _lastHealth, _lastHumeShield, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); - } - - [PluginEvent] - private void OnDetaining(PlayerHandcuffEvent e) - { - if (Config.LogDetainEvents) + if (Config!.LogDetainEvents) LogHandler.LogDetain(e.Target, e.Player, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); } - [PluginEvent] - private void OnDetaining(PlayerRemoveHandcuffsEvent e) + private void OnUnDetaining(PlayerUncuffedEventArgs e) { - if (Config.LogDetainEvents) + if (Config!.LogDetainEvents) LogHandler.LogUnDetain(e.Target, e.Player, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); } diff --git a/DeathLog/LogHandler.cs b/DeathLog/LogHandler.cs index ac3254c..edd3545 100644 --- a/DeathLog/LogHandler.cs +++ b/DeathLog/LogHandler.cs @@ -2,12 +2,12 @@ using System.Collections.Generic; using System.Linq; using Axwabo.Helpers; +using LabApi.Features.Wrappers; using PlayerRoles; using PlayerRoles.PlayableScps; using PlayerRoles.PlayableScps.Scp3114; using PlayerRoles.PlayableScps.Scp939; using PlayerStatsSystem; -using PluginAPI.Core; using UnityEngine; namespace DeathLog; @@ -20,7 +20,7 @@ public static class LogHandler private static readonly Color DntColor = new(0.59f, 0.59f, 0.59f); - public static readonly HashSet KosIgnoredVictimNetIdList = new(); + public static readonly HashSet KosIgnoredVictimNetIdList = []; private static bool IsWeapon(ItemType type) => type is ItemType.GunCOM15 or ItemType.GunCOM18 @@ -76,7 +76,7 @@ public static class LogHandler private static void Log(Func msg, bool success, PlayerPermissions playerPermissions, float defaultScalar) { - foreach (var p in Player.GetPlayers()) + foreach (var p in Player.ReadyList) { var sender = p.ReferenceHub.queryProcessor._sender; if (!p.RemoteAdminAccess || !PermissionsHandler.IsPermitted(sender.Permissions, playerPermissions) || ToggleLogsCommand.HiddenIdList.Contains(p.UserId)) @@ -159,7 +159,7 @@ public static class LogHandler _ => "[an unknown attack type]" }; - private static string GetScp939AttackType(Scp939DamageHandler scp939) => scp939._damageType switch + private static string GetScp939AttackType(Scp939DamageHandler scp939) => scp939.Scp939DamageType switch { Scp939DamageType.Claw => nameof(Scp939DamageType.Claw), Scp939DamageType.LungeSecondary => "Lunge Secondary",