WIP refactor v3

This commit is contained in:
2025-07-14 09:38:20 +02:00
parent ccaf44d50b
commit 43f66370f3
3 changed files with 38 additions and 41 deletions
+35 -19
View File
@@ -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<MovementBoost>(10, float.PositiveInfinity);
const string customInfo = "<color=#A0A0A0>Shadow</color>";
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 <color=#000000>ShadowStepper</color>!", 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.
/// </summary>
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 => $"<color={Color}>{Name}</color>";
}
/// <summary>
@@ -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; } = [];
}
/// <summary>