port plugin and events

This commit is contained in:
Axwabo 2025-05-01 19:19:02 +02:00
parent 6d39360955
commit 0a1192d5fc
2 changed files with 42 additions and 72 deletions

View File

@ -1,57 +1,54 @@
using System.Collections.Generic; using System;
using Axwabo.Helpers; using LabApi.Events.Arguments.PlayerEvents;
using LabApi.Events.Arguments.ServerEvents;
using LabApi.Events.Handlers;
using LabApi.Loader.Features.Plugins;
using PlayerRoles; using PlayerRoles;
using PlayerRoles.PlayableScps;
using PlayerStatsSystem; using PlayerStatsSystem;
using PluginAPI.Core;
using PluginAPI.Core.Attributes;
using PluginAPI.Enums;
using PluginAPI.Events;
using Respawning;
using Respawning.Waves;
namespace DeathLog; namespace DeathLog;
public sealed class DeathLogPlugin public sealed class DeathLogPlugin : Plugin<DeathLogConfig>
{ {
[PluginEntryPoint("DeathLog", "1.1.0", "DeathLog", "Axwabo")] public override string Name => "DeathLog";
public void OnEnabled() 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); ServerEvents.WaveRespawned += OnTeamRespawn;
WaveManager.OnWaveSpawned += OnTeamRespawn; ServerEvents.RoundStarted += OnRoundStarted;
Log.Info("DeathLog loaded!"); PlayerEvents.Dying += OnPlayerDeath;
PlayerEvents.ChangingRole += OnPlayerLeave;
PlayerEvents.Cuffed += OnDetaining;
PlayerEvents.Uncuffed += OnUnDetaining;
} }
[PluginUnload] public override void Disable()
public void OnDisabled()
{ {
EventManager.UnregisterEvents(this); ServerEvents.WaveRespawned -= OnTeamRespawn;
WaveManager.OnWaveSpawned -= OnTeamRespawn; ServerEvents.RoundStarted -= OnRoundStarted;
Log.Info("DeathLog disabled!"); PlayerEvents.Dying -= OnPlayerDeath;
PlayerEvents.ChangingRole -= OnPlayerLeave;
PlayerEvents.Cuffed -= OnDetaining;
PlayerEvents.Uncuffed -= OnUnDetaining;
} }
[PluginConfig]
public DeathLogConfig Config = new();
private bool _spawnWaveOccurred; private bool _spawnWaveOccurred;
[PluginEvent(ServerEventType.RoundStart)]
private void OnRoundStarted() private void OnRoundStarted()
{ {
_spawnWaveOccurred = false; _spawnWaveOccurred = false;
_lastId = "";
LogHandler.KosIgnoredVictimNetIdList.Clear(); LogHandler.KosIgnoredVictimNetIdList.Clear();
} }
private void OnTeamRespawn(SpawnableWaveBase spawnableWaveBase, List<ReferenceHub> referenceHubs) private void OnTeamRespawn(WaveRespawnedEventArgs ev)
=> _spawnWaveOccurred = Config.IgnoreLeavingAfterSpawnWave; => _spawnWaveOccurred = Config!.IgnoreLeavingAfterSpawnWave;
private static bool IsUnknownCause(DamageHandlerBase handler) => private void OnPlayerDeath(PlayerDyingEventArgs e)
handler is UniversalDamageHandler udh && (udh.TranslationId == 0 ? string.IsNullOrEmpty(udh._logsText) : udh._logsText == DeathTranslations.Unknown.LogLabel);
[PluginEvent(ServerEventType.PlayerDying)]
private void OnPlayerDeath(PlayerDyingEvent e)
{ {
var player = e.Player; var player = e.Player;
var attacker = e.Attacker; 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)) if (player.Role is RoleTypeId.None or RoleTypeId.Scp0492 || string.IsNullOrEmpty(player.ReferenceHub.nicknameSync._myNickSync))
return; return;
if (attacker != null && handler is AttackerDamageHandler adh) if (attacker != null && handler is AttackerDamageHandler adh)
LogHandler.LogAttackerDeathMessage(player, attacker, adh, Config.VisibilityRequirement, Config.KillOnSightPermitted, Config.DefaultFontSizeScalar); LogHandler.LogAttackerDeathMessage(player, attacker, adh, Config!.VisibilityRequirement, Config.KillOnSightPermitted, Config.DefaultFontSizeScalar);
else if (Config.LogSimpleDeaths) else if (Config!.LogSimpleDeaths)
LogHandler.LogSimpleDeathMessage(player, handler, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); 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 OnPlayerLeave(PlayerChangingRoleEventArgs ev)
private void OnDamage(PlayerDamageEvent e)
{ {
var handler = e.DamageHandler; if (ev.NewRole == RoleTypeId.Destroyed && !_spawnWaveOccurred && Config!.LogLeavingScpPlayers)
var player = e.Player; LogHandler.LogLeavingScp(ev.OldRole.RoleName, ev.Player.Health, ev.Player.HumeShield, Config.VisibilityRequirement, Config.DefaultFontSizeScalar);
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<HealthStat>().CurValue;
_lastHumeShield = stats.GetModule<HumeShieldStat>().CurValue;
} }
private string _lastRole = ""; private void OnDetaining(PlayerCuffedEventArgs e)
private float _lastHealth;
private float _lastHumeShield;
private string _lastId;
[PluginEvent(ServerEventType.PlayerLeft)]
private void OnPlayerLeave(Player player)
{ {
if (!_spawnWaveOccurred && Config.LogLeavingScpPlayers && player.UserId == _lastId) if (Config!.LogDetainEvents)
LogHandler.LogLeavingScp(_lastRole, _lastHealth, _lastHumeShield, Config.VisibilityRequirement, Config.DefaultFontSizeScalar);
}
[PluginEvent]
private void OnDetaining(PlayerHandcuffEvent e)
{
if (Config.LogDetainEvents)
LogHandler.LogDetain(e.Target, e.Player, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); LogHandler.LogDetain(e.Target, e.Player, Config.VisibilityRequirement, Config.DefaultFontSizeScalar);
} }
[PluginEvent] private void OnUnDetaining(PlayerUncuffedEventArgs e)
private void OnDetaining(PlayerRemoveHandcuffsEvent e)
{ {
if (Config.LogDetainEvents) if (Config!.LogDetainEvents)
LogHandler.LogUnDetain(e.Target, e.Player, Config.VisibilityRequirement, Config.DefaultFontSizeScalar); LogHandler.LogUnDetain(e.Target, e.Player, Config.VisibilityRequirement, Config.DefaultFontSizeScalar);
} }

View File

@ -2,12 +2,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Axwabo.Helpers; using Axwabo.Helpers;
using LabApi.Features.Wrappers;
using PlayerRoles; using PlayerRoles;
using PlayerRoles.PlayableScps; using PlayerRoles.PlayableScps;
using PlayerRoles.PlayableScps.Scp3114; using PlayerRoles.PlayableScps.Scp3114;
using PlayerRoles.PlayableScps.Scp939; using PlayerRoles.PlayableScps.Scp939;
using PlayerStatsSystem; using PlayerStatsSystem;
using PluginAPI.Core;
using UnityEngine; using UnityEngine;
namespace DeathLog; namespace DeathLog;
@ -20,7 +20,7 @@ public static class LogHandler
private static readonly Color DntColor = new(0.59f, 0.59f, 0.59f); private static readonly Color DntColor = new(0.59f, 0.59f, 0.59f);
public static readonly HashSet<uint> KosIgnoredVictimNetIdList = new(); public static readonly HashSet<uint> KosIgnoredVictimNetIdList = [];
private static bool IsWeapon(ItemType type) => type is ItemType.GunCOM15 private static bool IsWeapon(ItemType type) => type is ItemType.GunCOM15
or ItemType.GunCOM18 or ItemType.GunCOM18
@ -76,7 +76,7 @@ public static class LogHandler
private static void Log(Func<float, string> msg, bool success, PlayerPermissions playerPermissions, float defaultScalar) private static void Log(Func<float, string> 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; var sender = p.ReferenceHub.queryProcessor._sender;
if (!p.RemoteAdminAccess || !PermissionsHandler.IsPermitted(sender.Permissions, playerPermissions) || ToggleLogsCommand.HiddenIdList.Contains(p.UserId)) 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]" _ => "[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.Claw => nameof(Scp939DamageType.Claw),
Scp939DamageType.LungeSecondary => "Lunge Secondary", Scp939DamageType.LungeSecondary => "Lunge Secondary",