Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
LocalBuilder ev = generator.DeclareLocal(typeof(SendingValidCommandEventArgs));

int offset = 2;
int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(ClientCommandHandler), nameof(ClientCommandHandler.TryGetCommand)))) + offset;
int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(CommandHandler), nameof(CommandHandler.TryGetCommand)))) + offset;
Label contlabel = generator.DefineLabel();

offset = -6;
Expand All @@ -57,110 +57,111 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi

newInstructions.InsertRange(
index,
new CodeInstruction[]
new[]
{
// this
new CodeInstruction(OpCodes.Ldarg_0),
new(OpCodes.Ldarg_0),

// this._hub
new CodeInstruction(OpCodes.Ldfld, Field(typeof(QueryProcessor), nameof(QueryProcessor._hub))),
new(OpCodes.Ldfld, Field(typeof(QueryProcessor), nameof(QueryProcessor._hub))),

// Player.Get(Hub)
new CodeInstruction(OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new Type[] { typeof(ReferenceHub) })),
new(OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new[] { typeof(ReferenceHub) })),

// command
new (OpCodes.Ldloc_S, 1),
new (OpCodes.Ldloc_S, 4),

// commandtype client
new CodeInstruction(OpCodes.Ldc_I4_2),
new(OpCodes.Ldc_I4_2),

// query
new CodeInstruction(OpCodes.Ldarg_1),
new(OpCodes.Ldarg_1),

// response
new CodeInstruction(OpCodes.Ldloc_S, 3),
new(OpCodes.Ldloc_S, 6),

// new SendingValidCommandEventArgs
new CodeInstruction(OpCodes.Newobj, GetDeclaredConstructors(typeof(SendingValidCommandEventArgs))[0]),
new CodeInstruction(OpCodes.Dup),
new CodeInstruction(OpCodes.Stloc_S, ev.LocalIndex),
new(OpCodes.Newobj, GetDeclaredConstructors(typeof(SendingValidCommandEventArgs))[0]),
new(OpCodes.Dup),
new(OpCodes.Stloc_S, ev.LocalIndex),

// OnSendingValidCommad(ev)
new CodeInstruction(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnSendingValidCommand))),
new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnSendingValidCommand))),

// if ev.IsAllowed cont
new CodeInstruction(OpCodes.Ldloc_S, ev.LocalIndex),
new CodeInstruction(OpCodes.Callvirt, PropertyGetter(typeof(SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.IsAllowed))),
new CodeInstruction(OpCodes.Brtrue_S, contlabel),
new(OpCodes.Ldloc_S, ev.LocalIndex),
new(OpCodes.Callvirt, PropertyGetter(typeof(SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.IsAllowed))),
new(OpCodes.Brtrue_S, contlabel),

// if ev.Response.IsNullOrEmpty rets
new CodeInstruction(OpCodes.Ldloc_S, ev.LocalIndex),
new CodeInstruction(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new CodeInstruction(OpCodes.Call, Method(typeof(string), nameof(string.IsNullOrEmpty))),
new CodeInstruction(OpCodes.Brtrue_S, setproperresp),
new(OpCodes.Ldloc_S, ev.LocalIndex),
new(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new(OpCodes.Call, Method(typeof(string), nameof(string.IsNullOrEmpty))),
new(OpCodes.Brtrue_S, setproperresp),

// response = ev.Response
new CodeInstruction(OpCodes.Ldloc_S, ev.LocalIndex),
new CodeInstruction(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new CodeInstruction(OpCodes.Stloc_S, 3),
new(OpCodes.Ldloc_S, ev.LocalIndex),
new(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new(OpCodes.Stloc_S, 6),

// goto sendreply
new CodeInstruction(OpCodes.Br, sendreply),
new(OpCodes.Br, sendreply),

// response = "The Command Execution Was Prevented By Plugin."
new CodeInstruction(OpCodes.Ldstr, "The Command Execution Was Prevented By Plugin.").WithLabels(setproperresp),
new CodeInstruction(OpCodes.Stloc_S, 3),
new CodeInstruction(OpCodes.Br, sendreply),
new(OpCodes.Stloc_S, 6),
new(OpCodes.Br, sendreply),
});

offset = -3;
index = newInstructions.FindIndex(instruction => instruction.opcode == OpCodes.Ldstr && (string)instruction.operand == "magenta") + offset;
offset = 2;
index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(Misc), nameof(Misc.CloseAllRichTextTags)))) + offset;
Label skip = generator.DefineLabel();
newInstructions[index].WithLabels(skip);
newInstructions.InsertRange(
index,
new CodeInstruction[]
{
// if ev.Response.IsNullOrEmpty skip
new CodeInstruction(OpCodes.Ldloc_S, ev.LocalIndex),
new CodeInstruction(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new CodeInstruction(OpCodes.Call, Method(typeof(string), nameof(string.IsNullOrEmpty))),
new CodeInstruction(OpCodes.Brtrue_S, skip),
new(OpCodes.Ldloc_S, ev.LocalIndex),
new(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new(OpCodes.Call, Method(typeof(string), nameof(string.IsNullOrEmpty))),
new(OpCodes.Brtrue_S, skip),

// response = ev.Response
new CodeInstruction(OpCodes.Ldloc_S, ev.LocalIndex),
new CodeInstruction(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new CodeInstruction(OpCodes.Stloc_S, 3),
new(OpCodes.Ldloc_S, ev.LocalIndex),
new(OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new(OpCodes.Stloc_S, 6),
});
offset = 0;

offset = 1;
index = newInstructions.FindIndex(instrction => instrction.Calls(Method(typeof(GameConsoleTransmission), nameof(GameConsoleTransmission.SendToClient)))) + offset;
newInstructions.InsertRange(
index,
new CodeInstruction[]
{
// this
new CodeInstruction(OpCodes.Ldarg_0),
new(OpCodes.Ldarg_0),

// this._hub
new CodeInstruction(OpCodes.Ldfld, Field(typeof(QueryProcessor), nameof(QueryProcessor._hub))),
new(OpCodes.Ldfld, Field(typeof(QueryProcessor), nameof(QueryProcessor._hub))),

// Player.Get(Hub)
new CodeInstruction(OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new Type[] { typeof(ReferenceHub) })),
new(OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new Type[] { typeof(ReferenceHub) })),

// command
new CodeInstruction(OpCodes.Ldloc_1),
new(OpCodes.Ldloc_1),

// commandtype CLIENT
new CodeInstruction(OpCodes.Ldc_I4_2),
new(OpCodes.Ldc_I4_2),

// query
new CodeInstruction(OpCodes.Ldarg_1),
new(OpCodes.Ldarg_1),

// response
new CodeInstruction(OpCodes.Ldloc_S, 3),
new(OpCodes.Ldloc_S, 6),

// result
new (OpCodes.Ldloc_S, 2),
new (OpCodes.Ldloc_S, 7),

// new SentValidCommandEventArgs
new (OpCodes.Newobj, GetDeclaredConstructors(typeof(SentValidCommandEventArgs))[0]),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
new (OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new Type[] { typeof(CommandSender) })),

// command
new (OpCodes.Ldloc_1),
new (OpCodes.Ldloc_2),

// commandtype
new (OpCodes.Ldc_I4_4),
Expand All @@ -73,7 +73,7 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
new (OpCodes.Ldarg_0),

// response
new (OpCodes.Ldloc_S, 6),
new (OpCodes.Ldloc_S, 9),

// new SendingValidCommandEventArgs
new (OpCodes.Newobj, GetDeclaredConstructors(typeof(SendingValidCommandEventArgs))[0]),
Expand All @@ -97,14 +97,14 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
// response = ev.Response
new (OpCodes.Ldloc_S, ev.LocalIndex),
new (OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new (OpCodes.Stloc_S, 6),
new (OpCodes.Stloc_S, 9),

// goto sendreply
new (OpCodes.Br, sendreply),

// response = "The Command Execution Was Prevented By Plugin."
new CodeInstruction(OpCodes.Ldstr, "The Command Execution Was Prevented By Plugin.").WithLabels(setptroperresp),
new (OpCodes.Stloc_S, 6),
new (OpCodes.Stloc_S, 9),
new (OpCodes.Br, sendreply),
});
offset = -4;
Expand All @@ -124,10 +124,10 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
// response = ev.Response
new (OpCodes.Ldloc_S, ev.LocalIndex),
new (OpCodes.Callvirt, PropertyGetter(typeof (SendingValidCommandEventArgs), nameof(SendingValidCommandEventArgs.Response))),
new (OpCodes.Stloc_S, 6),
new (OpCodes.Stloc_S, 9),
});

offset = 0;
offset = 1;
index = newInstructions.FindIndex(instrction => instrction.Calls(Method(typeof(CommandSender), nameof(CommandSender.RaReply)))) + offset;
newInstructions.InsertRange(
index,
Expand All @@ -140,7 +140,7 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
new (OpCodes.Call, Method(typeof(Player), nameof(Player.Get), new Type[] { typeof(CommandSender) })),

// command
new (OpCodes.Ldloc_1),
new (OpCodes.Ldloc_2),

// commandtype
new (OpCodes.Ldc_I4_4),
Expand All @@ -149,10 +149,10 @@ private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstructi
new (OpCodes.Ldarg_0),

// response
new (OpCodes.Ldloc_S, 6),
new (OpCodes.Ldloc_S, 9),

// result
new (OpCodes.Ldloc_S, 5),
new (OpCodes.Ldloc_S, 8),

// new SentValidCommandEventArgs
new (OpCodes.Newobj, GetDeclaredConstructors(typeof(SentValidCommandEventArgs))[0]),
Expand Down