From 0ff218530b2c3c9bb080b8bfc6b3d60e61ce567a Mon Sep 17 00:00:00 2001 From: Axwabo Date: Sun, 12 Feb 2023 19:47:23 +0100 Subject: [PATCH] toggle command + more weapons + leaving SCP log --- DeathLog/DeathLog.csproj | 4 +++ DeathLog/DeathLogConfig.cs | 2 ++ DeathLog/DeathLogPlugin.cs | 45 ++++++++++++++++++++++++++++++-- DeathLog/LogHandler.cs | 22 +++++++++++----- DeathLog/ToggleLogsCommand.cs | 49 +++++++++++++++++++++++++++++++++++ 5 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 DeathLog/ToggleLogsCommand.cs diff --git a/DeathLog/DeathLog.csproj b/DeathLog/DeathLog.csproj index 7172e7b..03e0e49 100644 --- a/DeathLog/DeathLog.csproj +++ b/DeathLog/DeathLog.csproj @@ -46,6 +46,9 @@ ..\..\assemblies\Axwabo.Helpers.dll + + ..\..\..\pluginz\assemblies\CommandSystem.Core.dll + ..\packages\Microsoft.CodeAnalysis.Common.3.3.1\lib\netstandard2.0\Microsoft.CodeAnalysis.dll @@ -109,6 +112,7 @@ + diff --git a/DeathLog/DeathLogConfig.cs b/DeathLog/DeathLogConfig.cs index acd022d..06d89b8 100644 --- a/DeathLog/DeathLogConfig.cs +++ b/DeathLog/DeathLogConfig.cs @@ -6,4 +6,6 @@ public sealed class DeathLogConfig { public PlayerPermissions VisibilityRequirement { get; set; } = PlayerPermissions.Overwatch; + public bool LogLeavingScpPlayers { get; set; } = true; + } diff --git a/DeathLog/DeathLogPlugin.cs b/DeathLog/DeathLogPlugin.cs index a36f4aa..eb68e1c 100644 --- a/DeathLog/DeathLogPlugin.cs +++ b/DeathLog/DeathLogPlugin.cs @@ -1,7 +1,10 @@ -using PlayerStatsSystem; +using Axwabo.Helpers; +using PlayerRoles.PlayableScps; +using PlayerStatsSystem; using PluginAPI.Core; using PluginAPI.Core.Attributes; using PluginAPI.Enums; +using Respawning; namespace DeathLog; @@ -22,12 +25,50 @@ public sealed class DeathLogPlugin { [PluginConfig] public DeathLogConfig Config = new(); + private bool _spawnWaveOccurred; + + [PluginEvent(ServerEventType.RoundStart)] + private void OnRoundStarted() { + _spawnWaveOccurred = false; + _lastId = ""; + } + + [PluginEvent(ServerEventType.TeamRespawn)] + private void OnTeamRespawn(SpawnableTeamType team) => _spawnWaveOccurred = true; + + private static bool IsUnknownCause(DamageHandlerBase handler) => + handler is UniversalDamageHandler udh && udh.TranslationId == DeathTranslations.Unknown.Id; + [PluginEvent(ServerEventType.PlayerDying)] - public void OnPlayerDeath(Player player, Player attacker, DamageHandlerBase handler) { + private void OnPlayerDeath(Player player, Player attacker, DamageHandlerBase handler) { if (attacker != null && handler is AttackerDamageHandler adh) LogHandler.LogAttackerDeathMessage(player, attacker, adh, Config.VisibilityRequirement); else if (Config.LogSimpleDeaths) LogHandler.LogSimpleDeathMessage(player, handler, Config.VisibilityRequirement); + 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(Player player, Player attacker, DamageHandlerBase handler) { + if (!IsUnknownCause(handler) || player.ReferenceHub.roleManager.CurrentRole is not FpcStandardScp) + return; + var stats = player.ReferenceHub.playerStats; + _lastHealth = stats.GetModule().CurValue; + _lastHumeShield = stats.GetModule().CurValue; + } + + private string _lastRole = ""; + private float _lastHealth; + private float _lastHumeShield; + private string _lastId; + + [PluginEvent(ServerEventType.PlayerLeft)] + private void OnPlayerLeave(Player player) { + if (!_spawnWaveOccurred && Config.LogLeavingScpPlayers && player.UserId == _lastId) + LogHandler.LogLeavingScp(_lastRole, _lastHealth, _lastHumeShield, Config.VisibilityRequirement); } } diff --git a/DeathLog/LogHandler.cs b/DeathLog/LogHandler.cs index c5c7eed..2888010 100644 --- a/DeathLog/LogHandler.cs +++ b/DeathLog/LogHandler.cs @@ -24,7 +24,10 @@ public static class LogHandler { or ItemType.GunShotgun or ItemType.GunLogicer or ItemType.ParticleDisruptor - or ItemType.Jailbird; + or ItemType.Jailbird + or ItemType.GrenadeHE + or ItemType.SCP018 + or ItemType.MicroHID; public static void LogSimpleDeathMessage(Player player, DamageHandlerBase handler, PlayerPermissions permissions) => Log("DEATH LOG" + "#" + string.Format( GetDeathMessage(handler), @@ -32,10 +35,10 @@ public static class LogHandler { ), true, permissions); private static string GetDeathMessage(DamageHandlerBase handler) => handler switch { - CustomReasonDamageHandler custom => $"{{0}} has died: {custom._deathReason.Bold().Color("orange").Size(30)}", - UniversalDamageHandler universal => $"{{0}} has died. Reason: {universal._logsText.TrimEnd('.').Bold().Color("orange").Size(30)}", - WarheadDamageHandler => $"{{0}} died to {"the Alpha Warhead".Bold().Color("orange").Size(30)}", - _ => $"{{0}} has died. {"Reason is unknown".Italic()}" + CustomReasonDamageHandler custom => $"{{0}} has died: {custom._deathReason.Bold().Color("#00FF00").Size(30)}", + UniversalDamageHandler universal => $"{{0}} has died. Reason: {universal._logsText.TrimEnd('.').Bold().Color("#00FF00").Size(30)}", + WarheadDamageHandler => $"{{0}} died to {"the Alpha Warhead".Bold().Color("#00FF00").Size(30)}", + _ => $"{{0}} has died. {"Reason is unknown".Italic().Color("#00FF00")}" }; public static void LogAttackerDeathMessage(Player victim, Player attacker, AttackerDamageHandler handler, PlayerPermissions permissions) { @@ -59,7 +62,7 @@ public static class LogHandler { private static void Log(string msg, bool success, PlayerPermissions playerPermissions) { foreach (var p in Player.GetPlayers()) { var sender = p.ReferenceHub.queryProcessor._sender; - if (p.RemoteAdminAccess && PermissionsHandler.IsPermitted(sender.Permissions, playerPermissions)) + if (p.RemoteAdminAccess && PermissionsHandler.IsPermitted(sender.Permissions, playerPermissions) && !ToggleLogsCommand.HiddenIdList.Contains(sender.SenderId)) sender.RaReply(msg, success, true, ""); } } @@ -117,7 +120,7 @@ public static class LogHandler { }; private static string GetScp049AttackType(Scp049DamageHandler scp049) => scp049.DamageSubType switch { - Scp049DamageHandler.AttackType.Instakill => "SCP-049 Instakill", + Scp049DamageHandler.AttackType.Instakill => "Instakill", Scp049DamageHandler.AttackType.Scp0492 => "SCP-049-2", Scp049DamageHandler.AttackType.CardiacArrest => "Cardiac Arrest", _ => "[an unknown attack type]" @@ -130,4 +133,9 @@ public static class LogHandler { _ => "[an unknown attack type]" }; + public static void LogLeavingScp(string role, float health, float hs, PlayerPermissions permissions) => + Log($"{"SCP Left".Color("red").Bold()}#Please replace {role.Size(40)} as the player has left the game.\n" + + ($"HP: {((int) health).ToString().Color("red")} " + + $"HS: {((int) hs).ToString().Color("purple")}").Size(35), false, permissions); + } diff --git a/DeathLog/ToggleLogsCommand.cs b/DeathLog/ToggleLogsCommand.cs new file mode 100644 index 0000000..499eb48 --- /dev/null +++ b/DeathLog/ToggleLogsCommand.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using CommandSystem; +using RemoteAdmin; + +namespace DeathLog; + +[CommandHandler(typeof(RemoteAdminCommandHandler))] +public sealed class ToggleLogsCommand : ICommand { + + public static readonly HashSet HiddenIdList = new(); + + public string Command => "toggleKillLogs"; + public string[] Aliases { get; } = {"tkl"}; + public string Description => "Toggles the visibility of kill logs for the caller."; + + public bool Execute(ArraySegment arguments, ICommandSender sender, out string response) { + if (sender is not PlayerCommandSender {ReferenceHub.characterClassManager.UserId: var id}) { + response = "You must be a player to use this command."; + return false; + } + + if (arguments.Count < 1) { + if (HiddenIdList.Add(id)) + response = "You will no longer see kill logs."; + else { + HiddenIdList.Remove(id); + response = "You will now see kill logs."; + } + + return true; + } + + switch (arguments.At(0).ToLower()) { + case "on" or "enable" or "true" or "1": + HiddenIdList.Remove(id); + response = "You will now see kill logs."; + return true; + case "off" or "disable" or "false" or "0": + HiddenIdList.Add(id); + response = "You will no longer see kill logs."; + return true; + default: + response = "Invalid argument."; + return false; + } + } + +}