diff --git a/EXILED/Exiled.API/Features/Roles/Role.cs b/EXILED/Exiled.API/Features/Roles/Role.cs index ef6d8dceab..5e4869a728 100644 --- a/EXILED/Exiled.API/Features/Roles/Role.cs +++ b/EXILED/Exiled.API/Features/Roles/Role.cs @@ -27,6 +27,7 @@ namespace Exiled.API.Features.Roles using Scp079GameRole = PlayerRoles.PlayableScps.Scp079.Scp079Role; using Scp096GameRole = PlayerRoles.PlayableScps.Scp096.Scp096Role; using Scp106GameRole = PlayerRoles.PlayableScps.Scp106.Scp106Role; + using Scp1507GameRole = PlayerRoles.PlayableScps.Scp1507.Scp1507Role; using Scp173GameRole = PlayerRoles.PlayableScps.Scp173.Scp173Role; using Scp3114GameRole = PlayerRoles.PlayableScps.Scp3114.Scp3114Role; using Scp939GameRole = PlayerRoles.PlayableScps.Scp939.Scp939Role; @@ -235,7 +236,8 @@ public virtual void Set(RoleTypeId newRole, SpawnReason reason, RoleSpawnFlags s FilmmakerGameRole filmmakerRole => new FilmMakerRole(filmmakerRole), NoneGameRole noneRole => new NoneRole(noneRole), DestroyedGameRole destroyedRole => new DestroyedRole(destroyedRole), - _ => null, + Scp1507GameRole scp1507 => new Scp1507Role(scp1507), + _ => throw new Exception($"Missing role found in Exiled.API.Features.Roles.Role::Create ({role?.RoleTypeId}). Please contact an Exiled developer."), }; } } diff --git a/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs b/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs new file mode 100644 index 0000000000..3bc5807086 --- /dev/null +++ b/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs @@ -0,0 +1,67 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) ExMod Team. All rights reserved. +// Licensed under the CC BY-SA 3.0 license. +// +// ----------------------------------------------------------------------- + +namespace Exiled.API.Features.Roles +{ + using System.Collections.Generic; + + using Exiled.API.Enums; + using Exiled.API.Features.Pools; + + using PlayerRoles; + using PlayerRoles.PlayableScps; + using PlayerRoles.PlayableScps.HumeShield; + using PlayerRoles.PlayableScps.Scp939; + using PlayerRoles.PlayableScps.Scp939.Mimicry; + using PlayerRoles.PlayableScps.Scp939.Ripples; + using PlayerRoles.Subroutines; + + using RelativePositioning; + + using UnityEngine; + + using Scp1507GameRole = PlayerRoles.PlayableScps.Scp1507.Scp1507Role; + + /// + /// Defines a role that represents SCP-1507. + /// + public class Scp1507Role : FpcRole, ISubroutinedScpRole, IHumeShieldRole, ISpawnableScp + { + /// + /// Initializes a new instance of the class. + /// + /// the base . + internal Scp1507Role(Scp1507GameRole baseRole) + : base(baseRole) + { + Base = baseRole; + SubroutineModule = baseRole.SubroutineModule; + HumeShieldModule = baseRole.HumeShieldModule; + } + + /// + public override RoleTypeId Type => Base._roleTypeId; + + /// + public SubroutineManagerModule SubroutineModule { get; } + + /// + public HumeShieldModuleBase HumeShieldModule { get; } + + /// + /// Gets the instance. + /// + public new Scp1507GameRole Base { get; } + + /// + /// Gets the Spawn Chance of SCP-939. + /// + /// The List of Roles already spawned. + /// The Spawn Chance. + public float GetSpawnChance(List alreadySpawned) => Base is ISpawnableScp spawnableScp ? spawnableScp.GetSpawnChance(alreadySpawned) : 0; + } +}