From 43f66370f3e856387cee9b1ed24cc7bddeec8d48 Mon Sep 17 00:00:00 2001 From: code002lover Date: Mon, 14 Jul 2025 09:38:20 +0200 Subject: [PATCH] WIP refactor v3 --- CustomClasses/CustomClasses.cs | 54 ++++++++++++++++++---------- CustomClasses/NegromancerHandler.cs | 12 +------ CustomClasses/SerpentsHandManager.cs | 13 ++----- 3 files changed, 38 insertions(+), 41 deletions(-) diff --git a/CustomClasses/CustomClasses.cs b/CustomClasses/CustomClasses.cs index 64ef050..3ed963a 100644 --- a/CustomClasses/CustomClasses.cs +++ b/CustomClasses/CustomClasses.cs @@ -1,5 +1,4 @@ using System.Diagnostics.CodeAnalysis; -using System.Runtime.Remoting.Messaging; using CustomPlayerEffects; using HintServiceMeow.Core.Models.Hints; using Interactables.Interobjects.DoorUtils; @@ -418,22 +417,13 @@ public class NegromancerShadowHandler : CustomClassHandler { public override void HandleSpawn(Player player, CustomClassConfig config, Random random) { + base.HandleSpawn(player,config,random); + player.MaxHealth = 1000; player.MaxHumeShield = 0; player.HumeShield = 0; player.EnableEffect(10, float.PositiveInfinity); - - const string customInfo = "Shadow"; - if (!Player.ValidateCustomInfo(customInfo, out var reason)) - { - Logger.Error($"Invalid custom info for Shadow: {reason}"); - } - else - { - player.CustomInfo = customInfo; - player.InfoArea |= PlayerInfoArea.CustomInfo; - } } } @@ -453,12 +443,32 @@ public interface ICustomClassHandler public abstract class CustomClassHandler: ICustomClassHandler { - public abstract void HandleSpawn(Player player, CustomClassConfig config, Random random); + public virtual void HandleSpawn(Player player, CustomClassConfig config, Random random) + { + var info = config.FullCustomInfo; - public virtual void HandleEscape(Player player, CustomClassConfig config) + if (!Player.ValidateCustomInfo(info, out var reason)) + { + Logger.Error($"[{GetType().Name}] Invalid custom info: {reason}"); + return; + } + + player.CustomInfo = info; + player.InfoArea |= PlayerInfoArea.CustomInfo; + + SendSpawnMessage(player, config); + } + + protected virtual void HandleEscape(Player player, CustomClassConfig config) { //Intentionally left blank } + + protected virtual void SendSpawnMessage(Player player, CustomClassConfig config) + { + if (config.Name.IsEmpty()) return; + player.SendBroadcast($"You are a {config.FullCustomInfo}!", CustomClasses.BroadcastDuration); + } } public enum JanitorSpawn @@ -617,7 +627,7 @@ public class ShadowStepperHandler : CustomClassHandler player.SendBroadcast("You're a ShadowStepper!", CustomClasses.BroadcastDuration); } - public override void HandleEscape(Player player, CustomClassConfig config) + protected override void HandleEscape(Player player, CustomClassConfig config) { base.HandleEscape(player, config); @@ -638,6 +648,7 @@ public abstract class SimpleAddItemHandler : CustomClassHandler { public override void HandleSpawn(Player player, CustomClassConfig config, Random random) { + base.HandleSpawn(player,config,random); foreach (var spawnItem in config.Items) { player.AddItem(spawnItem, ItemAddReason.StartingItem); @@ -842,6 +853,11 @@ public abstract class CustomClassConfig /// The required role for this class to be considered. /// public virtual RoleTypeId RequiredRole { get; set; } = RoleTypeId.ClassD; + + public virtual string Name { get; init; } = string.Empty; + public virtual string Color { get; init; } = "#FFFFFF"; + + public string FullCustomInfo => $"{Name}"; } /// @@ -932,9 +948,9 @@ public sealed class FlashMasterConfig : CustomClassConfig public sealed class NegromancerConfig : CustomClassConfig { public override double ChancePerPlayer { get; set; } = 0.0; - public override int MaxSpawns { get; set; } = 1; public override RoleTypeId RequiredRole { get; set; } = RoleTypeId.Scp049; - public override ItemType[] Items { get; set; } = []; + public override string Name { get; init; } = "Shadowmancer"; + public override string Color { get; init; } = "#A0A0A0"; } public sealed class NegromancerShadowConfig : CustomClassConfig @@ -942,7 +958,8 @@ public sealed class NegromancerShadowConfig : CustomClassConfig public override double ChancePerPlayer { get; set; } = 0.0; public override int MaxSpawns { get; set; } = int.MaxValue; public override RoleTypeId RequiredRole { get; set; } = RoleTypeId.Scp106; - public override ItemType[] Items { get; set; } = []; + public override string Name { get; init; } = "Shadow"; + public override string Color { get; init; } = "#A0A0A0"; } public sealed class BloodFueledConfig : CustomClassConfig @@ -950,7 +967,6 @@ public sealed class BloodFueledConfig : CustomClassConfig public override double ChancePerPlayer { get; set; } = 1.0; public override int MaxSpawns { get; set; } = int.MaxValue; public override RoleTypeId RequiredRole { get; set; } = RoleTypeId.Scp939; - public override ItemType[] Items { get; set; } = []; } /// diff --git a/CustomClasses/NegromancerHandler.cs b/CustomClasses/NegromancerHandler.cs index 33f77d0..0bc6ded 100644 --- a/CustomClasses/NegromancerHandler.cs +++ b/CustomClasses/NegromancerHandler.cs @@ -12,19 +12,9 @@ namespace CustomClasses; public class NegromancerHandler : CustomClassHandler { - public override void HandleSpawn(Player player, CustomClassConfig config, Random random) + protected override void SendSpawnMessage(Player player, CustomClassConfig config) { player.SendBroadcast("You are the Negromancer! Revived players become your Shadow.", CustomClasses.BroadcastDuration); - const string customInfo = "Shadowmancer"; - if (!Player.ValidateCustomInfo(customInfo, out var reason)) - { - Logger.Error($"Invalid custom info for Negromancer: {reason}"); - } - else - { - player.CustomInfo = customInfo; - player.InfoArea |= PlayerInfoArea.CustomInfo; - } } } diff --git a/CustomClasses/SerpentsHandManager.cs b/CustomClasses/SerpentsHandManager.cs index c383929..db1efb0 100644 --- a/CustomClasses/SerpentsHandManager.cs +++ b/CustomClasses/SerpentsHandManager.cs @@ -10,7 +10,6 @@ using LabApi.Events.Handlers; using LabApi.Features.Permissions; using LabApi.Features.Wrappers; using MEC; -using Mirror; using PlayerRoles; using UnityEngine; using LightSourceToy = LabApi.Features.Wrappers.LightSourceToy; @@ -110,16 +109,6 @@ public class SerpentsHandManager public static void PreSpawn(Player player) { player.SetRole(RoleTypeId.Tutorial, RoleChangeReason.RespawnMiniwave, RoleSpawnFlags.None); - const string customInfo = "SerpentsHand"; - if (!Player.ValidateCustomInfo(customInfo, out var reason)) - { - Logger.Error($"Invalid custom info for Serpents Hand: {reason}"); - } - else - { - player.CustomInfo = customInfo; - player.InfoArea |= PlayerInfoArea.CustomInfo; - } } public IEnumerator UpdateSerpentsHandHint() @@ -244,6 +233,8 @@ public sealed class SerpentsHandConfig : CustomClassConfig public const float BaseChance = 90f; public readonly Vector3[] SpawnLocations = [new(0.22f, 300.96f, -0.31f), new(123.921f, 288.792f, 20.929f)]; + public override string Color { get; init; } = "#32CD32"; + public override string Name { get; init; } = "Serpents Hand"; } public class SerpentsHandHandler : SimpleAddItemHandler