Skip to content

Commit

Permalink
fix scp173 and adding bug report link to summary class
Browse files Browse the repository at this point in the history
  • Loading branch information
skyfr0676 committed Aug 3, 2024
1 parent bdfef66 commit 866ce48
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 1 deletion.
2 changes: 1 addition & 1 deletion EXILED/Exiled.Events/Patches/Generic/ArmorDropPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace Exiled.Events.Patches.Generic
using static HarmonyLib.AccessTools;

/// <summary>
/// Patches <see cref="BodyArmorUtils.RemoveEverythingExceedingLimits(Inventory, BodyArmor, bool, bool)"/>.
/// Patches <see cref="BodyArmorUtils.RemoveEverythingExceedingLimits(Inventory, BodyArmor, bool, bool)"/> to fix https://git.scpslgame.com/northwood-qa/scpsl-bug-reporting/-/issues/230 bug.
/// </summary>
[HarmonyPatch(typeof(BodyArmorUtils), nameof(BodyArmorUtils.RemoveEverythingExceedingLimits))]
internal static class ArmorDropPatch
Expand Down
55 changes: 55 additions & 0 deletions EXILED/Exiled.Events/Patches/Generic/Scp173FirstKillPatch.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// -----------------------------------------------------------------------
// <copyright file="Scp173FirstKillPatch.cs" company="Exiled Team">
// Copyright (c) Exiled Team. All rights reserved.
// Licensed under the CC BY-SA 3.0 license.
// </copyright>
// -----------------------------------------------------------------------

namespace Exiled.Events.Patches.Generic
{
using System.Collections.Generic;
using System.Reflection.Emit;

using API.Features.Pools;
using CustomPlayerEffects;
using HarmonyLib;
using PlayerRoles.PlayableScps.Scp173;
using UnityEngine;

using static HarmonyLib.AccessTools;

/// <summary>
/// Patches <see cref="Scp173SnapAbility.TryHitTarget(Transform, out ReferenceHub)" /> to fix https://git.scpslgame.com/northwood-qa/scpsl-bug-reporting/-/issues/143 bug.
/// </summary>
[HarmonyPatch(typeof(Scp173SnapAbility), nameof(Scp173SnapAbility.TryHitTarget))]
internal static class Scp173FirstKillPatch
{
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
{
List<CodeInstruction> newInstructions = ListPool<CodeInstruction>.Pool.Get(instructions);

Label continueLabel = generator.DefineLabel();

int index = newInstructions.FindLastIndex(x => x.opcode == OpCodes.Ldc_I4_0);
newInstructions[index].WithLabels(continueLabel);

// TODO: NRE ON LEFT CLICK (KICK PLAYER) - DO NOT PUSH
newInstructions.InsertRange(index, new CodeInstruction[]
{
// if (hub.playerEffectController.GetEffect<SpawnProtected>().IsEnabled) return false;
new(OpCodes.Ldarg_1),
new(OpCodes.Ldfld, Field(typeof(ReferenceHub), nameof(ReferenceHub.playerEffectsController))),
new(OpCodes.Callvirt, Method(typeof(PlayerEffectsController), nameof(PlayerEffectsController.GetEffect), generics: new[] { typeof(SpawnProtected) })),
new(OpCodes.Callvirt, PropertyGetter(typeof(StatusEffectBase), nameof(StatusEffectBase.IsEnabled))),
new(OpCodes.Brfalse_S, continueLabel),
new(OpCodes.Ldc_I4_0),
new(OpCodes.Ret),
});

for (int z = 0; z < newInstructions.Count; z++)
yield return newInstructions[z];

ListPool<CodeInstruction>.Pool.Return(newInstructions);
}
}
}
54 changes: 54 additions & 0 deletions EXILED/Exiled.Events/Patches/Generic/Scp173SecondKillPatch.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// -----------------------------------------------------------------------
// <copyright file="Scp173SecondKillPatch.cs" company="Exiled Team">
// Copyright (c) Exiled Team. All rights reserved.
// Licensed under the CC BY-SA 3.0 license.
// </copyright>
// -----------------------------------------------------------------------

namespace Exiled.Events.Patches.Generic
{
using System.Collections.Generic;
using System.Reflection.Emit;

using API.Features.Pools;
using CustomPlayerEffects;
using HarmonyLib;
using Mirror;
using PlayerRoles.PlayableScps.Scp173;

using static HarmonyLib.AccessTools;

/// <summary>
/// Patches <see cref="Scp173TeleportAbility.ServerProcessCmd(NetworkReader)" /> to fix https://git.scpslgame.com/northwood-qa/scpsl-bug-reporting/-/issues/143 bug.
/// </summary>
[HarmonyPatch(typeof(Scp173TeleportAbility), nameof(Scp173TeleportAbility.ServerProcessCmd))]
internal static class Scp173SecondKillPatch
{
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
{
List<CodeInstruction> newInstructions = ListPool<CodeInstruction>.Pool.Get(instructions);

Label returnLabel = generator.DefineLabel();

newInstructions[newInstructions.Count - 1].WithLabels(returnLabel);

int offset = -5;
int index = newInstructions.FindIndex(x => x.Is(OpCodes.Callvirt, Method(typeof(MovementTracer), nameof(MovementTracer.GenerateBounds)))) + offset;

newInstructions.InsertRange(index, new[]
{
// if (hub.playerEffectController.GetEffect<SpawnProtected>().IsEnabled) return;
new CodeInstruction(OpCodes.Ldloc_S, 5).MoveLabelsFrom(newInstructions[index]),
new(OpCodes.Ldfld, Field(typeof(ReferenceHub), nameof(ReferenceHub.playerEffectsController))),
new(OpCodes.Callvirt, Method(typeof(PlayerEffectsController), nameof(PlayerEffectsController.GetEffect), generics: new[] { typeof(SpawnProtected) })),
new(OpCodes.Callvirt, PropertyGetter(typeof(StatusEffectBase), nameof(StatusEffectBase.IsEnabled))),
new(OpCodes.Brtrue_S, returnLabel),
});

for (int z = 0; z < newInstructions.Count; z++)
yield return newInstructions[z];

ListPool<CodeInstruction>.Pool.Return(newInstructions);
}
}
}

0 comments on commit 866ce48

Please sign in to comment.