diff --git a/EXILED/Exiled.API/Enums/CameraType.cs b/EXILED/Exiled.API/Enums/CameraType.cs
index 1a193d16db..292da90b2d 100644
--- a/EXILED/Exiled.API/Enums/CameraType.cs
+++ b/EXILED/Exiled.API/Enums/CameraType.cs
@@ -161,6 +161,9 @@ public enum CameraType
EzGateBSide,
EzGateAStairwell,
EzGateAUpper,
+ HczLoadingBay,
+ HczLoadingBayRamp,
+ HczLoadingBayStairwell,
#endregion
}
}
diff --git a/EXILED/Exiled.API/Enums/DoorType.cs b/EXILED/Exiled.API/Enums/DoorType.cs
index 87e0de99a5..5863d6e79a 100644
--- a/EXILED/Exiled.API/Enums/DoorType.cs
+++ b/EXILED/Exiled.API/Enums/DoorType.cs
@@ -369,5 +369,10 @@ public enum DoorType
/// Represents the door in the Armory.
///
GateAArmory,
+
+ ///
+ /// Represents the door in .
+ ///
+ HczLoadingBay,
}
}
\ No newline at end of file
diff --git a/EXILED/Exiled.API/Enums/EffectType.cs b/EXILED/Exiled.API/Enums/EffectType.cs
index e70e273e77..4e7c6056d6 100644
--- a/EXILED/Exiled.API/Enums/EffectType.cs
+++ b/EXILED/Exiled.API/Enums/EffectType.cs
@@ -263,25 +263,25 @@ public enum EffectType
///
/// Makes you a flamingo.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
BecomingFlamingo,
///
/// Makes you a Child after eating Cake.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
Scp559,
///
/// Scp956 found you.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
Scp956Target,
///
/// you are snowed.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
Snowed,
///
@@ -390,5 +390,20 @@ public enum EffectType
/// .
///
Scp1509Resurrected,
+
+ ///
+ /// .
+ ///
+ FocusedVision,
+
+ ///
+ /// .
+ ///
+ AnomalousRegeneration,
+
+ ///
+ /// .
+ ///
+ AnomalousTarget,
}
}
diff --git a/EXILED/Exiled.API/Enums/GlassType.cs b/EXILED/Exiled.API/Enums/GlassType.cs
index 85c068108f..fef4d59f44 100644
--- a/EXILED/Exiled.API/Enums/GlassType.cs
+++ b/EXILED/Exiled.API/Enums/GlassType.cs
@@ -84,5 +84,10 @@ public enum GlassType
/// Represents the window in .
///
GateAArmory,
+
+ ///
+ /// Represents the window in
+ ///
+ HczLoadingBay,
}
}
\ No newline at end of file
diff --git a/EXILED/Exiled.API/Enums/PrefabType.cs b/EXILED/Exiled.API/Enums/PrefabType.cs
index 6a52ce7995..43936f1d80 100644
--- a/EXILED/Exiled.API/Enums/PrefabType.cs
+++ b/EXILED/Exiled.API/Enums/PrefabType.cs
@@ -417,5 +417,47 @@ public enum PrefabType
[Prefab(213466224, "SCP-939 Ragdoll Halloween")]
Scp939RagdollHalloween,
+
+ [Prefab(689741320, "SCP-559 Cake")]
+ Scp559Cake,
+
+ [Prefab(2657863153, "SCP-956")]
+ Scp956,
+
+ [Prefab(1205960739, "SCP-2536 Tree")]
+ Scp2536,
+
+ [Prefab(2102014206, "Snowpile")]
+ Snowpile,
+
+ [Prefab(3401975113, "Scp018Projectile Christmas")]
+ Scp018ProjectileChristmas,
+
+ [Prefab(3223468476, "SnowballProjectile")]
+ SnowballProjectile,
+
+ [Prefab(296717882, "CoalPickup")]
+ CoalPickup,
+
+ [Prefab(409273101, "TapePlayerPickup")]
+ Scp1507TapePickup,
+
+ [Prefab(3971391978, "Scp021JPickup")]
+ Scp021JPickup,
+
+ [Prefab(142820664, "CoalProjectile")]
+ CoalProjectile,
+
+ [Prefab(2405470903, "Scp2536Projectile")]
+ Scp2536Projectile,
+
+ [Prefab(1496232901, "SCP-173 Ragdoll Variant")]
+ Scp173RagdollChristmas,
+
+ [Prefab(6069361, "SnowPoop - TantrumObj")]
+ SnowTantrum,
+
+ [Prefab(3654754970, "SCP-1507 Ragdoll")]
+ Scp1507Ragdoll,
}
}
\ No newline at end of file
diff --git a/EXILED/Exiled.API/Enums/ProjectileType.cs b/EXILED/Exiled.API/Enums/ProjectileType.cs
index a8072ed48e..2d95210924 100644
--- a/EXILED/Exiled.API/Enums/ProjectileType.cs
+++ b/EXILED/Exiled.API/Enums/ProjectileType.cs
@@ -51,21 +51,21 @@ public enum ProjectileType
/// Coal.
/// Used by .
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
Coal,
///
/// SpecialCoal.
/// Used by .
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
SpecialCoal,
///
/// Snowball.
/// Used by .
///
- [Obsolete("Only availaible for Christmas.")]
+ // [Obsolete("Only availaible for Christmas.")]
Snowball,
}
}
\ No newline at end of file
diff --git a/EXILED/Exiled.API/Enums/RoomType.cs b/EXILED/Exiled.API/Enums/RoomType.cs
index 0b7737c193..6dceeea6e2 100644
--- a/EXILED/Exiled.API/Enums/RoomType.cs
+++ b/EXILED/Exiled.API/Enums/RoomType.cs
@@ -353,5 +353,10 @@ public enum RoomType
/// Heavy Containment Zone's straight hall room with lava.
///
HczDss12 = HczIncineratorWayside,
+
+ ///
+ /// Heavy Containment Zone's T-intersection with a ramp in it.
+ ///
+ HczLoadingBay,
}
}
\ No newline at end of file
diff --git a/EXILED/Exiled.API/Enums/Side.cs b/EXILED/Exiled.API/Enums/Side.cs
index 5e9c063be7..5accace2f3 100644
--- a/EXILED/Exiled.API/Enums/Side.cs
+++ b/EXILED/Exiled.API/Enums/Side.cs
@@ -52,5 +52,10 @@ public enum Side
/// No team. Same as .
///
None,
+
+ ///
+ /// Contains and . Same as .
+ ///
+ Flamingos,
}
}
\ No newline at end of file
diff --git a/EXILED/Exiled.API/Extensions/EffectTypeExtension.cs b/EXILED/Exiled.API/Extensions/EffectTypeExtension.cs
index c44a32362d..088438e085 100644
--- a/EXILED/Exiled.API/Extensions/EffectTypeExtension.cs
+++ b/EXILED/Exiled.API/Extensions/EffectTypeExtension.cs
@@ -101,6 +101,9 @@ public static class EffectTypeExtension
{ EffectType.TraumatizedByEvil, typeof(TraumatizedByEvil) },
{ EffectType.WhiteCandy, typeof(WhiteCandy) },
{ EffectType.Scp1509Resurrected, typeof(Scp1509Resurrected) },
+ { EffectType.FocusedVision, typeof(FocusedVision) },
+ { EffectType.AnomalousRegeneration, typeof(AnomalousRegeneration) },
+ { EffectType.AnomalousTarget, typeof(AnomalousTarget) },
#pragma warning restore CS0618
});
diff --git a/EXILED/Exiled.API/Extensions/RoleExtensions.cs b/EXILED/Exiled.API/Extensions/RoleExtensions.cs
index 369910654a..db1a7c99a9 100644
--- a/EXILED/Exiled.API/Extensions/RoleExtensions.cs
+++ b/EXILED/Exiled.API/Extensions/RoleExtensions.cs
@@ -70,6 +70,7 @@ public static class RoleExtensions
Team.FoundationForces or Team.Scientists => Side.Mtf,
Team.ChaosInsurgency or Team.ClassD => Side.ChaosInsurgency,
Team.OtherAlive => Side.Tutorial,
+ Team.Flamingos => Side.Flamingos,
_ => Side.None,
};
@@ -80,12 +81,13 @@ public static class RoleExtensions
/// .
public static Team GetTeam(this RoleTypeId roleType) => roleType switch
{
- RoleTypeId.ChaosConscript or RoleTypeId.ChaosMarauder or RoleTypeId.ChaosRepressor or RoleTypeId.ChaosRifleman => Team.ChaosInsurgency,
+ RoleTypeId.ChaosConscript or RoleTypeId.ChaosMarauder or RoleTypeId.ChaosRepressor or RoleTypeId.ChaosRifleman or RoleTypeId.ChaosFlamingo => Team.ChaosInsurgency,
RoleTypeId.Scientist => Team.Scientists,
RoleTypeId.ClassD => Team.ClassD,
- RoleTypeId.Scp049 or RoleTypeId.Scp939 or RoleTypeId.Scp0492 or RoleTypeId.Scp079 or RoleTypeId.Scp096 or RoleTypeId.Scp106 or RoleTypeId.Scp173 or RoleTypeId.Scp3114 => Team.SCPs,
- RoleTypeId.FacilityGuard or RoleTypeId.NtfCaptain or RoleTypeId.NtfPrivate or RoleTypeId.NtfSergeant or RoleTypeId.NtfSpecialist => Team.FoundationForces,
+ RoleTypeId.Scp049 or RoleTypeId.Scp939 or RoleTypeId.Scp0492 or RoleTypeId.Scp079 or RoleTypeId.Scp096 or RoleTypeId.Scp106 or RoleTypeId.Scp173 or RoleTypeId.Scp3114 or RoleTypeId.ZombieFlamingo=> Team.SCPs,
+ RoleTypeId.FacilityGuard or RoleTypeId.NtfCaptain or RoleTypeId.NtfPrivate or RoleTypeId.NtfSergeant or RoleTypeId.NtfSpecialist or RoleTypeId.NtfFlamingo => Team.FoundationForces,
RoleTypeId.Tutorial => Team.OtherAlive,
+ RoleTypeId.Flamingo or RoleTypeId.AlphaFlamingo => Team.Flamingos,
_ => Team.Dead,
};
@@ -131,6 +133,7 @@ public static bool TryGetRoleBase(this RoleTypeId roleType, out T roleBase)
Team.ClassD or Team.ChaosInsurgency => LeadingTeam.ChaosInsurgency,
Team.FoundationForces or Team.Scientists => LeadingTeam.FacilityForces,
Team.SCPs => LeadingTeam.Anomalies,
+ Team.Flamingos => LeadingTeam.Flamingo,
_ => LeadingTeam.Draw,
};
diff --git a/EXILED/Exiled.API/Features/Camera.cs b/EXILED/Exiled.API/Features/Camera.cs
index 4601a5ada1..fa17a77540 100644
--- a/EXILED/Exiled.API/Features/Camera.cs
+++ b/EXILED/Exiled.API/Features/Camera.cs
@@ -145,6 +145,9 @@ public class Camera : IWrapper, IWorldSpace
["GATE B SIDE"] = CameraType.EzGateBSide,
["GATE A STAIRWELL"] = CameraType.EzGateAStairwell,
["GATE A UPPER"] = CameraType.EzGateAUpper,
+ ["LOADING BAY"] = CameraType.HczLoadingBay,
+ ["HCZ LOADING RAMP"] = CameraType.HczLoadingBayRamp,
+ ["STAIRWELL"] = CameraType.HczLoadingBayStairwell,
// CustomCamera
["EZ ARM CAMERA TOY"] = CameraType.EzArmCameraToy,
diff --git a/EXILED/Exiled.API/Features/Doors/Door.cs b/EXILED/Exiled.API/Features/Doors/Door.cs
index 19718900a7..a8163f207c 100644
--- a/EXILED/Exiled.API/Features/Doors/Door.cs
+++ b/EXILED/Exiled.API/Features/Doors/Door.cs
@@ -624,6 +624,7 @@ private DoorType GetDoorType()
RoomType.HczEzCheckpointA => DoorType.CheckpointArmoryA,
RoomType.HczEzCheckpointB => DoorType.CheckpointArmoryB,
RoomType.EzGateA => DoorType.GateAArmory,
+ RoomType.HczLoadingBay => DoorType.HczLoadingBay,
_ => DoorType.UnknownDoor,
},
"Unsecured Pryable GateDoor" => Room?.Type switch
diff --git a/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs b/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs
index a4c9ba78cf..170bda116a 100644
--- a/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs
+++ b/EXILED/Exiled.API/Features/Roles/Scp1507Role.cs
@@ -20,7 +20,7 @@ namespace Exiled.API.Features.Roles
///
/// Defines a role that represents SCP-1507.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class Scp1507Role : FpcRole, ISubroutinedScpRole, IHumeShieldRole, ISpawnableScp
{
///
diff --git a/EXILED/Exiled.API/Features/Room.cs b/EXILED/Exiled.API/Features/Room.cs
index a81a24173f..846a76509c 100644
--- a/EXILED/Exiled.API/Features/Room.cs
+++ b/EXILED/Exiled.API/Features/Room.cs
@@ -506,6 +506,7 @@ private static RoomType FindType(GameObject gameObject)
"HCZ_ChkpB" => RoomType.HczElevatorB,
"HCZ_127" => RoomType.Hcz127,
"HCZ_ServerRoom" => RoomType.HczServerRoom,
+ "HCZ_Intersection_Ramp" => RoomType.HczLoadingBay,
"EZ_GateA" => RoomType.EzGateA,
"EZ_GateB" => RoomType.EzGateB,
"EZ_ThreeWay" => RoomType.EzTCross,
diff --git a/EXILED/Exiled.API/Features/Scp559.cs b/EXILED/Exiled.API/Features/Scp559.cs
index 08fc899047..d05702b351 100644
--- a/EXILED/Exiled.API/Features/Scp559.cs
+++ b/EXILED/Exiled.API/Features/Scp559.cs
@@ -18,7 +18,7 @@ namespace Exiled.API.Features
///
/// Represents a cake.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class Scp559 : IWrapper, IPosition
{
///
@@ -50,20 +50,34 @@ public Scp559(Scp559Cake cakeBase)
///
/// Gets a with spawnpoint in rooms.
///
- public static Dictionary SpawnPositions => Scp559Cake.Spawnpoints;
+ public static Dictionary SpawnPositions { get; } = Scp559Spawnpoint.InstancesPerRoom.ToDictionary(kvp => kvp.Key.Name, kvp =>
+ {
+ Transform roomTransform = kvp.Key.transform;
+ Transform spawnTransform = kvp.Value.transform;
+
+ Vector3 localPos = roomTransform.InverseTransformPoint(spawnTransform.position);
+
+ return new Vector4(localPos.x, localPos.y, localPos.z, spawnTransform.eulerAngles.y);
+ });
///
/// Gets the list of all available spawnpoints.
///
- public static List AvailableSpawnpoints => Scp559Cake.PossiblePositions;
+ public static List AvailableSpawnpoints => Scp559Cake.PossibleSpawnpoints.Select(spawnpoint =>
+ {
+ Transform t = spawnpoint.transform;
+ return new Vector4(t.position.x, t.position.y, t.position.z, t.eulerAngles.y);
+ }).ToList();
///
/// Gets or sets offset for spawning near pedestals.
///
public static Vector3 PedestalOffset
{
- get => Scp559Cake.PedestalOffset;
- set => Scp559Cake.PedestalOffset.Set(value.x, value.y, value.z);
+ get => new(0, -Scp559Spawnpoint.PedestalHeight, 0);
+
+ [Obsolete("Setter no longer works")]
+ set { }
}
///
diff --git a/EXILED/Exiled.API/Features/Window.cs b/EXILED/Exiled.API/Features/Window.cs
index e5a1624e0d..2d327ff0c4 100644
--- a/EXILED/Exiled.API/Features/Window.cs
+++ b/EXILED/Exiled.API/Features/Window.cs
@@ -231,6 +231,7 @@ public void DamageWindow(float amount, DamageHandlerBase handler)
RoomType.HczEzCheckpointB => GlassType.HczEzCheckpointB,
RoomType.EzGateA when Base.name[7] == '5' => GlassType.GateAArmory,
RoomType.EzGateA => GlassType.GateAPit,
+ RoomType.HczLoadingBay => GlassType.HczLoadingBay,
_ => GlassType.Unknown,
},
"Window" => Room?.Type switch
diff --git a/EXILED/Exiled.Events/Commands/TpsCommand.cs b/EXILED/Exiled.Events/Commands/TpsCommand.cs
index 722de3b61e..135ca5d844 100644
--- a/EXILED/Exiled.Events/Commands/TpsCommand.cs
+++ b/EXILED/Exiled.Events/Commands/TpsCommand.cs
@@ -15,7 +15,6 @@ namespace Exiled.Events.Commands
///
/// Command for showing current server TPS.
///
- [CommandHandler(typeof(RemoteAdminCommandHandler))]
[CommandHandler(typeof(GameConsoleCommandHandler))]
public class TpsCommand : ICommand
{
diff --git a/EXILED/Exiled.Events/EventArgs/Interfaces/IScp1507Event.cs b/EXILED/Exiled.Events/EventArgs/Interfaces/IScp1507Event.cs
index 1d6dcf3add..acb2463878 100644
--- a/EXILED/Exiled.Events/EventArgs/Interfaces/IScp1507Event.cs
+++ b/EXILED/Exiled.Events/EventArgs/Interfaces/IScp1507Event.cs
@@ -14,7 +14,7 @@ namespace Exiled.Events.EventArgs.Interfaces
///
/// Event args used for all related events.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public interface IScp1507Event : IPlayerEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Interfaces/IScp559Event.cs b/EXILED/Exiled.Events/EventArgs/Interfaces/IScp559Event.cs
index d8a5537257..fc62383340 100644
--- a/EXILED/Exiled.Events/EventArgs/Interfaces/IScp559Event.cs
+++ b/EXILED/Exiled.Events/EventArgs/Interfaces/IScp559Event.cs
@@ -12,7 +12,7 @@ namespace Exiled.Events.EventArgs.Interfaces
///
/// Defines the base contract for all related events.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public interface IScp559Event : IExiledEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Scp1507/AttackingDoorEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1507/AttackingDoorEventArgs.cs
index c58330e252..c6ea947e55 100644
--- a/EXILED/Exiled.Events/EventArgs/Scp1507/AttackingDoorEventArgs.cs
+++ b/EXILED/Exiled.Events/EventArgs/Scp1507/AttackingDoorEventArgs.cs
@@ -18,7 +18,7 @@ namespace Exiled.Events.EventArgs.Scp1507
///
/// Contains all information before SCP-1507 attacks door.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class AttackingDoorEventArgs : IScp1507Event, IDeniableEvent, IDoorEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Scp1507/ScreamingEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1507/ScreamingEventArgs.cs
index ae5ebb8450..7ab56f98e2 100644
--- a/EXILED/Exiled.Events/EventArgs/Scp1507/ScreamingEventArgs.cs
+++ b/EXILED/Exiled.Events/EventArgs/Scp1507/ScreamingEventArgs.cs
@@ -16,7 +16,7 @@ namespace Exiled.Events.EventArgs.Scp1507
///
/// Contains all information before SCP-1507 screams.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class ScreamingEventArgs : IScp1507Event, IDeniableEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Scp1507/SpawningFlamingosEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1507/SpawningFlamingosEventArgs.cs
index 376eba5abf..5cc50f9352 100644
--- a/EXILED/Exiled.Events/EventArgs/Scp1507/SpawningFlamingosEventArgs.cs
+++ b/EXILED/Exiled.Events/EventArgs/Scp1507/SpawningFlamingosEventArgs.cs
@@ -19,7 +19,7 @@ namespace Exiled.Events.EventArgs.Scp1507
///
/// Contains all information before flamingos get spawned.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class SpawningFlamingosEventArgs : IDeniableEvent, IPlayerEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Scp1507/UsingTapeEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1507/UsingTapeEventArgs.cs
index 0121d02d95..10b713052e 100644
--- a/EXILED/Exiled.Events/EventArgs/Scp1507/UsingTapeEventArgs.cs
+++ b/EXILED/Exiled.Events/EventArgs/Scp1507/UsingTapeEventArgs.cs
@@ -17,7 +17,7 @@ namespace Exiled.Events.EventArgs.Scp1507
///
/// Contains all information before SCP-1507 screams.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class UsingTapeEventArgs : IPlayerEvent, IItemEvent, IDeniableEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Scp559/InteractingScp559EventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp559/InteractingScp559EventArgs.cs
index b8b99f9ac9..c05c444bf0 100644
--- a/EXILED/Exiled.Events/EventArgs/Scp559/InteractingScp559EventArgs.cs
+++ b/EXILED/Exiled.Events/EventArgs/Scp559/InteractingScp559EventArgs.cs
@@ -15,7 +15,7 @@ namespace Exiled.Events.EventArgs.Scp559
///
/// Contains all information before a player interacts with SCP-559.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class InteractingScp559EventArgs : IScp559Event, IDeniableEvent, IPlayerEvent
{
///
diff --git a/EXILED/Exiled.Events/EventArgs/Scp559/SpawningEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp559/SpawningEventArgs.cs
index 6e3a81f06a..c83baddd2c 100644
--- a/EXILED/Exiled.Events/EventArgs/Scp559/SpawningEventArgs.cs
+++ b/EXILED/Exiled.Events/EventArgs/Scp559/SpawningEventArgs.cs
@@ -16,7 +16,7 @@ namespace Exiled.Events.EventArgs.Scp559
///
/// Contains all information before SCP-559 spawns.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public class SpawningEventArgs : IDeniableEvent, IScp559Event
{
///
diff --git a/EXILED/Exiled.Events/Events.cs b/EXILED/Exiled.Events/Events.cs
index 1645fe20a1..c326c66ae5 100644
--- a/EXILED/Exiled.Events/Events.cs
+++ b/EXILED/Exiled.Events/Events.cs
@@ -72,6 +72,7 @@ public override void OnEnabled()
Handlers.Scp049.ActivatingSense += Handlers.Internal.Round.OnActivatingSense;
Handlers.Player.Verified += Handlers.Internal.Round.OnVerified;
Handlers.Map.ChangedIntoGrenade += Handlers.Internal.ExplodingGrenade.OnChangedIntoGrenade;
+ Handlers.Warhead.Detonated += Handlers.Internal.Round.OnWarheadDetonated;
RoleAssigner.OnPlayersSpawned += Handlers.Server.OnAllPlayersSpawned;
CharacterClassManager.OnRoundStarted += Handlers.Server.OnRoundStarted;
diff --git a/EXILED/Exiled.Events/Handlers/Internal/Round.cs b/EXILED/Exiled.Events/Handlers/Internal/Round.cs
index 3ce8660bbe..f7c3b6f4ea 100644
--- a/EXILED/Exiled.Events/Handlers/Internal/Round.cs
+++ b/EXILED/Exiled.Events/Handlers/Internal/Round.cs
@@ -28,6 +28,7 @@ namespace Exiled.Events.Handlers.Internal
using InventorySystem.Items.Firearms.Attachments.Components;
using InventorySystem.Items.Usables;
using InventorySystem.Items.Usables.Scp244.Hypothermia;
+ using InventorySystem.Items.Usables.Scp330;
using PlayerRoles;
using PlayerRoles.FirstPersonControl;
using PlayerRoles.RoleAssign;
@@ -124,6 +125,13 @@ public static void OnVerified(VerifiedEventArgs ev)
}
}
+ ///
+ public static void OnWarheadDetonated()
+ {
+ // fix for black candy
+ CandyBlack.Outcomes.RemoveAll(outcome => outcome is TeleportOutcome);
+ }
+
private static void GenerateAttachments()
{
foreach (FirearmType firearmType in EnumUtils.Values)
diff --git a/EXILED/Exiled.Events/Handlers/Scp1507.cs b/EXILED/Exiled.Events/Handlers/Scp1507.cs
index 63e4536d2c..f36b16d633 100644
--- a/EXILED/Exiled.Events/Handlers/Scp1507.cs
+++ b/EXILED/Exiled.Events/Handlers/Scp1507.cs
@@ -17,7 +17,7 @@ namespace Exiled.Events.Handlers
///
/// SCP-1507 related events.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public static class Scp1507
{
///
diff --git a/EXILED/Exiled.Events/Handlers/Scp559.cs b/EXILED/Exiled.Events/Handlers/Scp559.cs
index b17f520c9d..70d5387520 100644
--- a/EXILED/Exiled.Events/Handlers/Scp559.cs
+++ b/EXILED/Exiled.Events/Handlers/Scp559.cs
@@ -17,7 +17,7 @@ namespace Exiled.Events.Handlers
///
/// All SCP-559 related events.
///
- [Obsolete("Only availaible for Christmas and AprilFools.")]
+ // [Obsolete("Only availaible for Christmas and AprilFools.")]
public static class Scp559
{
///
diff --git a/EXILED/Exiled.Events/Patches/Events/Scp2536/GrantingGift.cs b/EXILED/Exiled.Events/Patches/Events/Scp2536/GrantingGift.cs
index 9389addfa5..855523f1e3 100644
--- a/EXILED/Exiled.Events/Patches/Events/Scp2536/GrantingGift.cs
+++ b/EXILED/Exiled.Events/Patches/Events/Scp2536/GrantingGift.cs
@@ -11,6 +11,7 @@ namespace Exiled.Events.Patches.Events.Scp2536
using System.Reflection.Emit;
using Christmas.Scp2536;
+ using Christmas.Scp2536.Gifts;
using Exiled.API.Features;
using Exiled.API.Features.Pools;
using Exiled.Events.Attributes;
@@ -34,6 +35,7 @@ private static IEnumerable Transpiler(IEnumerable x.LoadsField(Field(typeof(Scp2536GiftBase), nameof(Scp2536GiftBase.ObtainedBy)))) + offset;
@@ -45,7 +47,7 @@ private static IEnumerable Transpiler(IEnumerable Transpiler(IEnumerable instruction.Calls(Method(typeof(Scp2536GiftController), nameof(Scp2536GiftController.ServerGetGift), null, new[] { typeof(Naughty) }))) + offset;
+
+ newInstructions.InsertRange(index, new CodeInstruction[]
+ {
+ // naughty is already on the stack
+ // naughty = this.ServerGetGift();
+ new(OpCodes.Stloc_S, naughty),
+
+ // Player.Get(hub);
+ new(OpCodes.Ldarg_1),
+ new(OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new[] { typeof(ReferenceHub) })),
+
+ // naughty
+ new(OpCodes.Ldloc_S, naughty),
+
+ // true
+ new(OpCodes.Ldc_I4_1),
+
+ // GrantingGiftEventArgs ev = new(Player, Scp2536GiftBase, true);
+ new(OpCodes.Newobj, GetDeclaredConstructors(typeof(GrantingGiftEventArgs))[0]),
+ new(OpCodes.Dup),
+ new(OpCodes.Dup),
+ new(OpCodes.Stloc_S, ev.LocalIndex),
+
+ // Handlers.Scp2536.OnGrantingGift(ev);
+ new(OpCodes.Call, Method(typeof(Handlers.Scp2536), nameof(Handlers.Scp2536.OnGrantingGift))),
+
+ // if (!ev.IsAllowed)
+ // goto retLabel;
+ new(OpCodes.Callvirt, PropertyGetter(typeof(GrantingGiftEventArgs), nameof(GrantingGiftEventArgs.IsAllowed))),
+ new(OpCodes.Brfalse_S, retLabel),
+
+ // load naughty onto stack
+ new(OpCodes.Ldloc_S, ev.LocalIndex),
+ new(OpCodes.Callvirt, PropertyGetter(typeof(GrantingGiftEventArgs), nameof(GrantingGiftEventArgs.Gift))),
});
newInstructions[newInstructions.Count - 1].labels.Add(retLabel);
diff --git a/EXILED/Exiled.Loader/AutoUpdateFiles.cs b/EXILED/Exiled.Loader/AutoUpdateFiles.cs
index 132afb6e22..3ad56c5c95 100644
--- a/EXILED/Exiled.Loader/AutoUpdateFiles.cs
+++ b/EXILED/Exiled.Loader/AutoUpdateFiles.cs
@@ -17,6 +17,6 @@ public static class AutoUpdateFiles
///
/// Gets which SCP: SL version generated Exiled.
///
- public static readonly Version RequiredSCPSLVersion = new(14, 2, 0, 3);
+ public static readonly Version RequiredSCPSLVersion = new(14, 2, 0, 4);
}
}
\ No newline at end of file
diff --git a/EXILED/docs/articles/SCPSLRessources/NW_Documentation.md b/EXILED/docs/articles/SCPSLRessources/NW_Documentation.md
index 12ddd043ad..faeda9462e 100644
--- a/EXILED/docs/articles/SCPSLRessources/NW_Documentation.md
+++ b/EXILED/docs/articles/SCPSLRessources/NW_Documentation.md
@@ -17,7 +17,7 @@
title: NW Documentation
---
-Last Update (14.2.0.3)
+Last Update (14.2.0.4)
### Index
@@ -2772,6 +2772,7 @@ Last Update (14.2.0.3)
[66] = KeycardCustomMetalCase
[67] = MarshmallowItem
[68] = SCP1509
+ [69] = Scp021J
[-1] = None
```
@@ -4080,6 +4081,8 @@ Last Update (14.2.0.3)
[25] = Flamingo
[26] = AlphaFlamingo
[27] = ZombieFlamingo
+ [28] = NtfFlamingo
+ [29] = ChaosFlamingo
[-1] = None
```
@@ -4143,6 +4146,7 @@ Last Update (14.2.0.3)
[38] = Hcz127
[39] = HczAcroamaticAbatement
[40] = HczWaysideIncinerator
+ [41] = HczRampTunnel
```
@@ -5540,6 +5544,8 @@ Last Update (14.2.0.3)
[3] = Two
[4] = Three
[5] = Four
+ [6] = Five
+ [7] = Six
```
@@ -5718,6 +5724,7 @@ Last Update (14.2.0.3)
[5] = Scp127Voice
[6] = Scp3114Voice
[7] = ChaseThemes
+ [8] = SoundEffectsWhileSpectating
```
@@ -5826,9 +5833,11 @@ Last Update (14.2.0.3)
| 22 | Filmmaker | Dead | None | Draw |
| 23 | Scp3114 | SCPs | Scp | Anomalies |
| 24 | Destroyed | Dead | None | Draw |
-| 25 | Flamingo | Dead | None | Draw |
-| 26 | AlphaFlamingo | Dead | None | Draw |
-| 27 | ZombieFlamingo | Dead | None | Draw |
+| 25 | Flamingo | Flamingos | Flamingos | Flamingo |
+| 26 | AlphaFlamingo | Flamingos | Flamingos | Flamingo |
+| 27 | ZombieFlamingo | SCPs | Scp | Anomalies |
+| 28 | NtfFlamingo | FoundationForces | Mtf | FacilityForces |
+| 29 | ChaosFlamingo | ChaosInsurgency | ChaosInsurgency | ChaosInsurgency |
```
@@ -5839,7 +5848,7 @@ Last Update (14.2.0.3)
Damage Handlers
-```md title="Latest Updated: 14.2.0.3"
+```md title="Latest Updated: 14.2.0.4"
All available DamageHandlers
+ Symbol ':' literally means "inherits from"