various fixes + new custom class shadowmancer
This commit is contained in:
@@ -11,11 +11,13 @@ using LabApi.Events.Arguments.Scp914Events;
|
||||
using LabApi.Events.Arguments.ServerEvents;
|
||||
using LabApi.Events.Handlers;
|
||||
using LabApi.Features;
|
||||
using LabApi.Features.Enums;
|
||||
using LabApi.Features.Wrappers;
|
||||
using LabApi.Loader.Features.Plugins;
|
||||
using MapGeneration;
|
||||
using MEC;
|
||||
using PlayerRoles;
|
||||
using PlayerRoles.PlayableScps.Scp106;
|
||||
using Scp914.Processors;
|
||||
using UnityEngine;
|
||||
using Logger = LabApi.Features.Console.Logger;
|
||||
@@ -32,6 +34,7 @@ public sealed class CustomClasses : Plugin
|
||||
{
|
||||
public readonly CustomClassManager ClassManager = new();
|
||||
public SerpentsHandManager SerpentsHandManager;
|
||||
public NegromancerManager NegromancerManager;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override string Name => "CustomClasses";
|
||||
@@ -77,6 +80,8 @@ public sealed class CustomClasses : Plugin
|
||||
public ExplosiveMasterConfig ExplosiveMasterConfig { get; private set; } = new();
|
||||
public FlashMasterConfig FlashMasterConfig { get; private set; } = new();
|
||||
public SerpentsHandConfig SerpentsHandConfig { get; private set; } = new();
|
||||
public NegromancerConfig NegromancerConfig { get; private set; } = new();
|
||||
public NegromancerShadowConfig NegromancerShadowConfig { get; private set; } = new();
|
||||
|
||||
internal readonly Dictionary<Player, Hint> Hints = new();
|
||||
|
||||
@@ -142,6 +147,7 @@ public sealed class CustomClasses : Plugin
|
||||
}
|
||||
}
|
||||
|
||||
NegromancerManager = new NegromancerManager(this);
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
@@ -330,6 +336,8 @@ public class CustomClassManager
|
||||
RegisterHandler<ExplosiveMasterConfig>(new ExplosiveMasterHandler());
|
||||
RegisterHandler<FlashMasterConfig>(new FlashMasterHandler());
|
||||
RegisterHandler<SerpentsHandConfig>(new SerpentsHandHandler(), new SerpentsHandState());
|
||||
RegisterHandler<NegromancerConfig>(new NegromancerHandler());
|
||||
RegisterHandler<NegromancerShadowConfig>(new NegromancerShadowHandler());
|
||||
}
|
||||
|
||||
public SpawnState GetSpawnState(Type configType)
|
||||
@@ -420,6 +428,29 @@ public class CustomClassManager
|
||||
}
|
||||
}
|
||||
|
||||
public class NegromancerShadowHandler : CustomClassHandler
|
||||
{
|
||||
public override void HandleSpawn(Player player, CustomClassConfig config, Random 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Interface for custom class spawn handlers.
|
||||
/// </summary>
|
||||
@@ -444,6 +475,15 @@ public abstract class CustomClassHandler: ICustomClassHandler
|
||||
}
|
||||
}
|
||||
|
||||
public enum JanitorSpawn
|
||||
{
|
||||
Lcz173,
|
||||
Lcz914,
|
||||
LczGr18,
|
||||
Lcz330
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Handler for the Janitor custom class.
|
||||
/// </summary>
|
||||
@@ -451,13 +491,51 @@ public class JanitorHandler(CustomClassManager manager) : CustomClassHandler
|
||||
{
|
||||
public override void HandleSpawn(Player player, CustomClassConfig config, Random random)
|
||||
{
|
||||
var scp914 = Map.Rooms.FirstOrDefault(r => r.Name == RoomName.Lcz914);
|
||||
if (scp914 == null)
|
||||
var spawnLocation = (JanitorSpawn)random.Next(0, 4);
|
||||
|
||||
switch (spawnLocation)
|
||||
{
|
||||
Logger.Error("LCZ 914 room not found for Janitor spawn.");
|
||||
return;
|
||||
case JanitorSpawn.Lcz914:
|
||||
var scp914 = Map.Rooms.FirstOrDefault(r => r.Name == RoomName.Lcz914);
|
||||
if (scp914 == null)
|
||||
{
|
||||
Logger.Error("LCZ 914 room not found for Janitor spawn.");
|
||||
return;
|
||||
}
|
||||
manager.TeleportPlayerToAround(player, scp914.Position);
|
||||
break;
|
||||
|
||||
case JanitorSpawn.Lcz173:
|
||||
var lcz173Door = Map.Doors.FirstOrDefault(x => x.DoorName == DoorName.Lcz173Connector);
|
||||
if (lcz173Door == null)
|
||||
{
|
||||
Logger.Error("LCZ 173 connector door not found for Janitor spawn.");
|
||||
return;
|
||||
}
|
||||
manager.TeleportPlayerToAround(player, lcz173Door.Position);
|
||||
break;
|
||||
case JanitorSpawn.LczGr18:
|
||||
var lczGr18Door = Map.Doors.FirstOrDefault(x => x.DoorName == DoorName.LczGr18Inner);
|
||||
if (lczGr18Door == null)
|
||||
{
|
||||
Logger.Error("LCZ Gr18 door not found for Janitor spawn.");
|
||||
return;
|
||||
}
|
||||
manager.TeleportPlayerToAround(player, lczGr18Door.Position);
|
||||
break;
|
||||
case JanitorSpawn.Lcz330:
|
||||
var lcz330Door = Map.Doors.FirstOrDefault(x => x.DoorName == DoorName.Lcz330);
|
||||
if (lcz330Door == null)
|
||||
{
|
||||
Logger.Error("LCZ 330 door not found for Janitor spawn.");
|
||||
return;
|
||||
}
|
||||
manager.TeleportPlayerToAround(player, lcz330Door.Position);
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
manager.TeleportPlayerToAround(player, scp914.Position);
|
||||
|
||||
foreach (var spawnItem in config.Items)
|
||||
{
|
||||
player.AddItem(spawnItem, ItemAddReason.StartingItem);
|
||||
@@ -865,6 +943,22 @@ public sealed class FlashMasterConfig : CustomClassConfig
|
||||
public override ItemType[] Items { get; set; } = [ItemType.GrenadeFlash];
|
||||
}
|
||||
|
||||
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 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; } = [];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tracks the spawn state for a custom class.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user