Skip to content

Commit 29d093d

Browse files
authored
fix: ChangingDisruptorMode transpiler location (#608)
* Update ChangingDisruptorModeEventArgs.cs * Update ChangingDisruptorMode.cs * Update ChangingDisruptorMode.cs * Update ChangingDisruptorMode.cs * Update ChangingDisruptorMode.cs
1 parent 67f1c44 commit 29d093d

2 files changed

Lines changed: 24 additions & 24 deletions

File tree

EXILED/Exiled.Events/EventArgs/Player/ChangingDisruptorModeEventArgs.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace Exiled.Events.EventArgs.Player
1111
using Exiled.API.Features;
1212
using Exiled.API.Features.Items;
1313
using Exiled.Events.EventArgs.Interfaces;
14+
using InventorySystem.Items;
1415

1516
/// <summary>
1617
/// Contains all information before disruptor's mode is changed.
@@ -22,9 +23,9 @@ public class ChangingDisruptorModeEventArgs : IFirearmEvent
2223
/// </summary>
2324
/// <param name="firearm"><inheritdoc cref="Firearm"/></param>
2425
/// <param name="mode"><inheritdoc cref="NewMode"/></param>
25-
public ChangingDisruptorModeEventArgs(Item firearm, bool mode)
26+
public ChangingDisruptorModeEventArgs(ItemBase firearm, bool mode)
2627
{
27-
Firearm = firearm.As<Firearm>();
28+
Firearm = Item.Get(firearm).As<Firearm>();
2829
NewMode = mode ? DisruptorMode.Disintegrator : DisruptorMode.BurstFire;
2930
}
3031

@@ -42,4 +43,4 @@ public ChangingDisruptorModeEventArgs(Item firearm, bool mode)
4243
/// <inheritdoc />
4344
public Player Player => Item.Owner;
4445
}
45-
}
46+
}
Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// -----------------------------------------------------------------------
1+
// -----------------------------------------------------------------------
22
// <copyright file="ChangingDisruptorMode.cs" company="ExMod Team">
33
// Copyright (c) ExMod Team. All rights reserved.
44
// Licensed under the CC BY-SA 3.0 license.
@@ -8,15 +8,13 @@
88
namespace Exiled.Events.Patches.Events.Player
99
{
1010
using System.Collections.Generic;
11-
using System.Linq;
1211
using System.Reflection.Emit;
1312

14-
using Exiled.API.Features.Items;
1513
using Exiled.API.Features.Pools;
1614
using Exiled.Events.Attributes;
1715
using Exiled.Events.EventArgs.Player;
1816
using HarmonyLib;
19-
using InventorySystem.Items;
17+
2018
using InventorySystem.Items.Firearms.Modules;
2119
using Mirror;
2220

@@ -30,36 +28,37 @@ namespace Exiled.Events.Patches.Events.Player
3028
[HarmonyPatch(typeof(DisruptorModeSelector), nameof(DisruptorModeSelector.ServerProcessCmd))]
3129
internal static class ChangingDisruptorMode
3230
{
33-
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
31+
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
3432
{
3533
List<CodeInstruction> newInstructions = ListPool<CodeInstruction>.Pool.Get(instructions);
3634

37-
int index = newInstructions.FindLastIndex(x => x.opcode == OpCodes.Ldarg_0);
35+
LocalBuilder newMode = generator.DeclareLocal(typeof(bool));
36+
37+
int offset = 2;
38+
int index = newInstructions.FindIndex(x => x.Calls(Method(typeof(NetworkReaderExtensions), nameof(NetworkReaderExtensions.ReadBool))));
3839

39-
newInstructions.InsertRange(index, new CodeInstruction[]
40+
newInstructions.InsertRange(index + offset, new CodeInstruction[]
4041
{
41-
// Item.Get(this.Firearm);
42+
// this.Firearm;
4243
new(OpCodes.Ldarg_0),
4344
new(OpCodes.Callvirt, PropertyGetter(typeof(DisruptorModeSelector), nameof(DisruptorModeSelector.Firearm))),
44-
new(OpCodes.Call, GetDeclaredMethods(typeof(Item)).Find(x => !x.IsGenericMethod && x.GetParameters().FirstOrDefault()?.ParameterType == typeof(ItemBase))),
4545

46-
// reader.ReadBool();
47-
new(OpCodes.Ldarg_1),
48-
new(OpCodes.Call, Method(typeof(NetworkReaderExtensions), nameof(NetworkReaderExtensions.ReadBool))),
46+
// newMode;
47+
new(OpCodes.Ldloc, newMode),
4948

50-
// ChangerDisruptorModeEventArgs ev = new(Item.Get(this.Firearm), reader.ReadBool(), true);
49+
// ChangerDisruptorModeEventArgs ev = new(this.Firearm, newMode);
5150
new(OpCodes.Newobj, GetDeclaredConstructors(typeof(ChangingDisruptorModeEventArgs))[0]),
5251

5352
// Handlers.Player.OnChangingDisruptorMode(ev);
5453
new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnChangingDisruptorMode))),
54+
});
5555

56-
// reader.Position--;
57-
new(OpCodes.Ldarg_1),
58-
new(OpCodes.Ldarg_1),
59-
new(OpCodes.Ldfld, Field(typeof(NetworkReader), nameof(NetworkReader.Position))),
60-
new(OpCodes.Ldc_I4_M1),
61-
new(OpCodes.Add),
62-
new(OpCodes.Stfld, Field(typeof(NetworkReader), nameof(NetworkReader.Position))),
56+
offset = 1;
57+
newInstructions.InsertRange(index + offset, new CodeInstruction[]
58+
{
59+
// bool newMode = reader.ReadBool();
60+
new(OpCodes.Dup),
61+
new(OpCodes.Stloc, newMode),
6362
});
6463

6564
for (int z = 0; z < newInstructions.Count; z++)
@@ -68,4 +67,4 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
6867
ListPool<CodeInstruction>.Pool.Return(newInstructions);
6968
}
7069
}
71-
}
70+
}

0 commit comments

Comments
 (0)