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"