user id + after spawn wave ignorance config
This commit is contained in:
parent
db884621a9
commit
96f5b28427
@ -1,6 +1,7 @@
|
|||||||
namespace DeathLog;
|
namespace DeathLog;
|
||||||
|
|
||||||
public sealed class DeathLogConfig {
|
public sealed class DeathLogConfig
|
||||||
|
{
|
||||||
|
|
||||||
public bool LogSimpleDeaths { get; set; } = true;
|
public bool LogSimpleDeaths { get; set; } = true;
|
||||||
|
|
||||||
@ -8,6 +9,8 @@ public sealed class DeathLogConfig {
|
|||||||
|
|
||||||
public bool LogLeavingScpPlayers { get; set; } = true;
|
public bool LogLeavingScpPlayers { get; set; } = true;
|
||||||
|
|
||||||
|
public bool IgnoreLeavingAfterSpawnWave { get; set; } = true;
|
||||||
|
|
||||||
public bool KillOnSightPermitted { get; set; } = false;
|
public bool KillOnSightPermitted { get; set; } = false;
|
||||||
|
|
||||||
public float DefaultFontSizeScalar { get; set; } = 1;
|
public float DefaultFontSizeScalar { get; set; } = 1;
|
||||||
|
@ -9,16 +9,19 @@ using Respawning;
|
|||||||
|
|
||||||
namespace DeathLog;
|
namespace DeathLog;
|
||||||
|
|
||||||
public sealed class DeathLogPlugin {
|
public sealed class DeathLogPlugin
|
||||||
|
{
|
||||||
|
|
||||||
[PluginEntryPoint("DeathLog", "1.1.0", "DeathLog", "Axwabo")]
|
[PluginEntryPoint("DeathLog", "1.1.0", "DeathLog", "Axwabo")]
|
||||||
public void OnEnabled() {
|
public void OnEnabled()
|
||||||
|
{
|
||||||
PluginAPI.Events.EventManager.RegisterEvents(this);
|
PluginAPI.Events.EventManager.RegisterEvents(this);
|
||||||
Log.Info("DeathLog loaded!");
|
Log.Info("DeathLog loaded!");
|
||||||
}
|
}
|
||||||
|
|
||||||
[PluginUnload]
|
[PluginUnload]
|
||||||
public void OnDisabled() {
|
public void OnDisabled()
|
||||||
|
{
|
||||||
PluginAPI.Events.EventManager.UnregisterEvents(this);
|
PluginAPI.Events.EventManager.UnregisterEvents(this);
|
||||||
Log.Info("DeathLog disabled!");
|
Log.Info("DeathLog disabled!");
|
||||||
}
|
}
|
||||||
@ -29,20 +32,22 @@ public sealed class DeathLogPlugin {
|
|||||||
private bool _spawnWaveOccurred;
|
private bool _spawnWaveOccurred;
|
||||||
|
|
||||||
[PluginEvent(ServerEventType.RoundStart)]
|
[PluginEvent(ServerEventType.RoundStart)]
|
||||||
private void OnRoundStarted() {
|
private void OnRoundStarted()
|
||||||
|
{
|
||||||
_spawnWaveOccurred = false;
|
_spawnWaveOccurred = false;
|
||||||
_lastId = "";
|
_lastId = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
[PluginEvent(ServerEventType.TeamRespawn)]
|
[PluginEvent(ServerEventType.TeamRespawn)]
|
||||||
private void OnTeamRespawn(SpawnableTeamType team) => _spawnWaveOccurred = true;
|
private void OnTeamRespawn(SpawnableTeamType team) => _spawnWaveOccurred = Config.IgnoreLeavingAfterSpawnWave;
|
||||||
|
|
||||||
private static bool IsUnknownCause(DamageHandlerBase handler) =>
|
private static bool IsUnknownCause(DamageHandlerBase handler) =>
|
||||||
handler is UniversalDamageHandler udh && udh.TranslationId == DeathTranslations.Unknown.Id;
|
handler is UniversalDamageHandler udh && (udh.TranslationId == 0 ? string.IsNullOrEmpty(udh._logsText) : udh._logsText == DeathTranslations.Unknown.LogLabel);
|
||||||
|
|
||||||
[PluginEvent(ServerEventType.PlayerDying)]
|
[PluginEvent(ServerEventType.PlayerDying)]
|
||||||
private void OnPlayerDeath(Player player, Player attacker, DamageHandlerBase handler) {
|
private void OnPlayerDeath(Player player, Player attacker, DamageHandlerBase handler)
|
||||||
if (player.Role == RoleTypeId.None || 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);
|
||||||
@ -55,8 +60,9 @@ public sealed class DeathLogPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[PluginEvent(ServerEventType.PlayerDamage)]
|
[PluginEvent(ServerEventType.PlayerDamage)]
|
||||||
private void OnDamage(Player player, Player attacker, DamageHandlerBase handler) {
|
private void OnDamage(Player player, Player attacker, DamageHandlerBase handler)
|
||||||
if (!IsUnknownCause(handler) || player.ReferenceHub.roleManager.CurrentRole is not FpcStandardScp)
|
{
|
||||||
|
if (!IsUnknownCause(handler) || player.ReferenceHub.roleManager.CurrentRole is not FpcStandardScp {RoleTypeId: not RoleTypeId.Scp0492})
|
||||||
return;
|
return;
|
||||||
var stats = player.ReferenceHub.playerStats;
|
var stats = player.ReferenceHub.playerStats;
|
||||||
_lastHealth = stats.GetModule<HealthStat>().CurValue;
|
_lastHealth = stats.GetModule<HealthStat>().CurValue;
|
||||||
@ -69,7 +75,8 @@ public sealed class DeathLogPlugin {
|
|||||||
private string _lastId;
|
private string _lastId;
|
||||||
|
|
||||||
[PluginEvent(ServerEventType.PlayerLeft)]
|
[PluginEvent(ServerEventType.PlayerLeft)]
|
||||||
private void OnPlayerLeave(Player player) {
|
private void OnPlayerLeave(Player player)
|
||||||
|
{
|
||||||
if (!_spawnWaveOccurred && Config.LogLeavingScpPlayers && player.UserId == _lastId)
|
if (!_spawnWaveOccurred && Config.LogLeavingScpPlayers && player.UserId == _lastId)
|
||||||
LogHandler.LogLeavingScp(_lastRole, _lastHealth, _lastHumeShield, Config.VisibilityRequirement, Config.DefaultFontSizeScalar);
|
LogHandler.LogLeavingScp(_lastRole, _lastHealth, _lastHumeShield, Config.VisibilityRequirement, Config.DefaultFontSizeScalar);
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,8 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace DeathLog;
|
namespace DeathLog;
|
||||||
|
|
||||||
public static class LogHandler {
|
public static class LogHandler
|
||||||
|
{
|
||||||
|
|
||||||
private const string Lime = "#00FF00";
|
private const string Lime = "#00FF00";
|
||||||
private const string Cyan = "#00FFF6";
|
private const string Cyan = "#00FFF6";
|
||||||
@ -38,14 +39,16 @@ public static class LogHandler {
|
|||||||
GetVictimStatus(player, sizeScalar)
|
GetVictimStatus(player, sizeScalar)
|
||||||
), true, permissions, defaultScalar);
|
), true, permissions, defaultScalar);
|
||||||
|
|
||||||
private static string GetDeathMessage(DamageHandlerBase handler, float sizeScalar) => handler switch {
|
private static string GetDeathMessage(DamageHandlerBase handler, float sizeScalar) => handler switch
|
||||||
|
{
|
||||||
CustomReasonDamageHandler custom => $"{{0}} has died: {custom._deathReason.Bold().Color(Lime).Size(30.Scale(sizeScalar))}",
|
CustomReasonDamageHandler custom => $"{{0}} has died: {custom._deathReason.Bold().Color(Lime).Size(30.Scale(sizeScalar))}",
|
||||||
UniversalDamageHandler universal => $"{{0}} has died. Reason: {universal._logsText.TrimEnd('.').Bold().Color(Lime).Size(30.Scale(sizeScalar))}",
|
UniversalDamageHandler universal => $"{{0}} has died. Reason: {universal._logsText.TrimEnd('.').Bold().Color(Lime).Size(30.Scale(sizeScalar))}",
|
||||||
WarheadDamageHandler => $"{{0}} died to {"the Alpha Warhead".Bold().Color(Lime).Size(30.Scale(sizeScalar))}",
|
WarheadDamageHandler => $"{{0}} died to {"the Alpha Warhead".Bold().Color(Lime).Size(30.Scale(sizeScalar))}",
|
||||||
_ => $"{{0}} has died. {"Reason is unknown".Italic().Color(Lime)}"
|
_ => $"{{0}} has died. {"Reason is unknown".Italic().Color(Lime)}"
|
||||||
};
|
};
|
||||||
|
|
||||||
public static void LogAttackerDeathMessage(Player victim, Player attacker, AttackerDamageHandler handler, PlayerPermissions permissions, bool kosPermitted, float defaultScalar) {
|
public static void LogAttackerDeathMessage(Player victim, Player attacker, AttackerDamageHandler handler, PlayerPermissions permissions, bool kosPermitted, float defaultScalar)
|
||||||
|
{
|
||||||
var isCuffed = victim.IsDisarmed;
|
var isCuffed = victim.IsDisarmed;
|
||||||
var inv = victim.ReferenceHub.inventory;
|
var inv = victim.ReferenceHub.inventory;
|
||||||
var hasWeaponEquipped = IsWeapon(inv.CurItem.TypeId);
|
var hasWeaponEquipped = IsWeapon(inv.CurItem.TypeId);
|
||||||
@ -67,22 +70,26 @@ public static class LogHandler {
|
|||||||
|| victimRole == RoleTypeId.Scientist && attackerRole == RoleTypeId.ClassD
|
|| victimRole == RoleTypeId.Scientist && attackerRole == RoleTypeId.ClassD
|
||||||
|| victimRole == RoleTypeId.ClassD && attackerRole is RoleTypeId.FacilityGuard or RoleTypeId.NtfPrivate or RoleTypeId.NtfSergeant or RoleTypeId.NtfSpecialist or RoleTypeId.NtfCaptain;
|
|| victimRole == RoleTypeId.ClassD && attackerRole is RoleTypeId.FacilityGuard or RoleTypeId.NtfPrivate or RoleTypeId.NtfSergeant or RoleTypeId.NtfSpecialist or RoleTypeId.NtfCaptain;
|
||||||
|
|
||||||
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.GetPlayers())
|
||||||
|
{
|
||||||
var sender = p.ReferenceHub.queryProcessor._sender;
|
var sender = p.ReferenceHub.queryProcessor._sender;
|
||||||
if (!p.RemoteAdminAccess || !PermissionsHandler.IsPermitted(sender.Permissions, playerPermissions) || ToggleLogsCommand.HiddenIdList.Contains(sender.SenderId))
|
if (!p.RemoteAdminAccess || !PermissionsHandler.IsPermitted(sender.Permissions, playerPermissions) || ToggleLogsCommand.HiddenIdList.Contains(p.UserId))
|
||||||
continue;
|
continue;
|
||||||
var scalar = ToggleLogsCommand.SizeScalar.TryGetValue(sender.SenderId, out var sizeScalar) ? sizeScalar : defaultScalar;
|
var scalar = ToggleLogsCommand.SizeScalar.TryGetValue(p.UserId, out var sizeScalar) ? sizeScalar : defaultScalar;
|
||||||
sender.RaReply(msg(scalar), success, true, "");
|
sender.RaReply(msg(scalar), success, true, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetIdWithDnt(Player player, float sizeScalar) {
|
private static string GetIdWithDnt(Player player, float sizeScalar)
|
||||||
|
{
|
||||||
var dnt = player.DoNotTrack;
|
var dnt = player.DoNotTrack;
|
||||||
return $"{(dnt ? "(DNT)".Color(DntColor).Size(50.Scale(sizeScalar)) + " " : "")}{player.UserId.Color(Color.magenta)} {player.PlayerId.ToString().Bold().Color("yellow").Size(30.Scale(sizeScalar))}";
|
return $"{(dnt ? "(DNT)".Color(DntColor).Size(50.Scale(sizeScalar)) + " " : "")}{player.UserId.Color(Color.magenta)} {player.PlayerId.ToString().Bold().Color("yellow").Size(30.Scale(sizeScalar))}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object GetKillerStatus(Player attacker, float sizeScalar) {
|
private static object GetKillerStatus(Player attacker, float sizeScalar)
|
||||||
|
{
|
||||||
var role = attacker.Rm().CurrentRole;
|
var role = attacker.Rm().CurrentRole;
|
||||||
return GetIdWithDnt(attacker, sizeScalar)
|
return GetIdWithDnt(attacker, sizeScalar)
|
||||||
+ " "
|
+ " "
|
||||||
@ -90,7 +97,8 @@ public static class LogHandler {
|
|||||||
+ " " + attacker.Nickname.Bold().Size(35.Scale(sizeScalar));
|
+ " " + attacker.Nickname.Bold().Size(35.Scale(sizeScalar));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object GetVictimStatus(Player victim, float sizeScalar) {
|
private static object GetVictimStatus(Player victim, float sizeScalar)
|
||||||
|
{
|
||||||
var role = victim.Rm().CurrentRole;
|
var role = victim.Rm().CurrentRole;
|
||||||
return GetIdWithDnt(victim, sizeScalar).Size(25.Scale(sizeScalar))
|
return GetIdWithDnt(victim, sizeScalar).Size(25.Scale(sizeScalar))
|
||||||
+ " "
|
+ " "
|
||||||
@ -101,7 +109,8 @@ public static class LogHandler {
|
|||||||
private static string GetKillMessage(AttackerDamageHandler handler, bool canBeKos, bool hasWeaponEquipped, bool cuffed, bool carriesWeapon, bool scpAttacker, float sizeScalar) =>
|
private static string GetKillMessage(AttackerDamageHandler handler, bool canBeKos, bool hasWeaponEquipped, bool cuffed, bool carriesWeapon, bool scpAttacker, float sizeScalar) =>
|
||||||
(canBeKos && !hasWeaponEquipped ? "POSSIBLE KOS".Color("red").Size(50.Scale(sizeScalar)) + " " : "")
|
(canBeKos && !hasWeaponEquipped ? "POSSIBLE KOS".Color("red").Size(50.Scale(sizeScalar)) + " " : "")
|
||||||
+ (cuffed && !scpAttacker ? "DETAINED KILL".Color(Cyan).Size(50.Scale(sizeScalar)) + " " : "")
|
+ (cuffed && !scpAttacker ? "DETAINED KILL".Color(Cyan).Size(50.Scale(sizeScalar)) + " " : "")
|
||||||
+ handler switch {
|
+ handler switch
|
||||||
|
{
|
||||||
RecontainmentDamageHandler => $"{{0}} {"recontained".Bold().Color(Lime).Size(35.Scale(sizeScalar))} {{1}}",
|
RecontainmentDamageHandler => $"{{0}} {"recontained".Bold().Color(Lime).Size(35.Scale(sizeScalar))} {{1}}",
|
||||||
FirearmDamageHandler firearm => GetFirearmKillLog(firearm, sizeScalar),
|
FirearmDamageHandler firearm => GetFirearmKillLog(firearm, sizeScalar),
|
||||||
ScpDamageHandler => $"{{0}} killed {{1}} using the {"default SCP attack".Bold().Color(Lime).Size(35.Scale(sizeScalar))}",
|
ScpDamageHandler => $"{{0}} killed {{1}} using the {"default SCP attack".Bold().Color(Lime).Size(35.Scale(sizeScalar))}",
|
||||||
@ -128,7 +137,8 @@ public static class LogHandler {
|
|||||||
private static string GetFirearmKillLog(FirearmDamageHandler firearm, float sizeScalar) =>
|
private static string GetFirearmKillLog(FirearmDamageHandler firearm, float sizeScalar) =>
|
||||||
$"{{0}} shot {{1}} with {firearm.WeaponType.ToString().Bold().Color("red").Size(35.Scale(sizeScalar))} to the hitbox " + firearm.Hitbox.ToString().Color("red").Bold().Size(35.Scale(sizeScalar));
|
$"{{0}} shot {{1}} with {firearm.WeaponType.ToString().Bold().Color("red").Size(35.Scale(sizeScalar))} to the hitbox " + firearm.Hitbox.ToString().Color("red").Bold().Size(35.Scale(sizeScalar));
|
||||||
|
|
||||||
private static string GetScp096AttackType(Scp096DamageHandler scp096) => scp096._attackType switch {
|
private static string GetScp096AttackType(Scp096DamageHandler scp096) => scp096._attackType switch
|
||||||
|
{
|
||||||
Scp096DamageHandler.AttackType.Charge => nameof(Scp096DamageHandler.AttackType.Charge),
|
Scp096DamageHandler.AttackType.Charge => nameof(Scp096DamageHandler.AttackType.Charge),
|
||||||
Scp096DamageHandler.AttackType.SlapLeft => "Left Slap",
|
Scp096DamageHandler.AttackType.SlapLeft => "Left Slap",
|
||||||
Scp096DamageHandler.AttackType.SlapRight => "Right Slap",
|
Scp096DamageHandler.AttackType.SlapRight => "Right Slap",
|
||||||
@ -136,14 +146,16 @@ public static class LogHandler {
|
|||||||
_ => "[an unknown attack type]"
|
_ => "[an unknown attack type]"
|
||||||
};
|
};
|
||||||
|
|
||||||
private static string GetScp049AttackType(Scp049DamageHandler scp049) => scp049.DamageSubType switch {
|
private static string GetScp049AttackType(Scp049DamageHandler scp049) => scp049.DamageSubType switch
|
||||||
|
{
|
||||||
Scp049DamageHandler.AttackType.Instakill => nameof(Scp049DamageHandler.AttackType.Instakill),
|
Scp049DamageHandler.AttackType.Instakill => nameof(Scp049DamageHandler.AttackType.Instakill),
|
||||||
Scp049DamageHandler.AttackType.Scp0492 => "SCP-049-2",
|
Scp049DamageHandler.AttackType.Scp0492 => "SCP-049-2",
|
||||||
Scp049DamageHandler.AttackType.CardiacArrest => "Cardiac Arrest",
|
Scp049DamageHandler.AttackType.CardiacArrest => "Cardiac Arrest",
|
||||||
_ => "[an unknown attack type]"
|
_ => "[an unknown attack type]"
|
||||||
};
|
};
|
||||||
|
|
||||||
private static string GetScp939AttackType(Scp939DamageHandler scp939) => scp939._damageType switch {
|
private static string GetScp939AttackType(Scp939DamageHandler scp939) => scp939._damageType switch
|
||||||
|
{
|
||||||
Scp939DamageType.Claw => nameof(Scp939DamageType.Claw),
|
Scp939DamageType.Claw => nameof(Scp939DamageType.Claw),
|
||||||
Scp939DamageType.LungeSecondary => "Lunge Secondary",
|
Scp939DamageType.LungeSecondary => "Lunge Secondary",
|
||||||
Scp939DamageType.LungeTarget => "Lunge Target",
|
Scp939DamageType.LungeTarget => "Lunge Target",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user