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 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<DeathLogConfig>
{
[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<ReferenceHub> 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<HealthStat>().CurValue;
_lastHumeShield = stats.GetModule<HumeShieldStat>().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);
}

View File

@ -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<uint> KosIgnoredVictimNetIdList = new();
public static readonly HashSet<uint> 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<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;
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",