Decompiled source of Last Arbiter v1.0.1

LastArbiter.dll

Decompiled 3 weeks ago
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("LastArbiter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LastArbiter")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("73b670ee-de4d-48bc-85cc-ae24e0cde37d")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("com.slimybonesjones.lastarbiter", "Last Arbiter", "1.0.0")]
public class LastArbiter : BaseUnityPlugin
{
	internal static ManualLogSource Log;

	internal static HealthManager healthManager;

	private void Awake()
	{
		Log = ((BaseUnityPlugin)this).Logger;
		Log.LogInfo((object)"Plugin loaded and initialised");
		Harmony.CreateAndPatchAll(typeof(LastArbiter), (string)null);
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(PlayMakerFSM), "Awake")]
	private static void Postfix(PlayMakerFSM __instance)
	{
		GameObject val = ((__instance != null) ? ((Component)__instance).gameObject : null);
		if ((Object)(object)val == (Object)null || !((Object)val).name.StartsWith("Last Judge", StringComparison.OrdinalIgnoreCase) || !string.Equals(__instance.FsmName, "Control", StringComparison.OrdinalIgnoreCase))
		{
			return;
		}
		FsmState state = __instance.Fsm.GetState("Idle");
		if (state == null)
		{
			Log.LogWarning((object)"No state named Idle");
			return;
		}
		Wait val2 = state.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => ((NamedVariable)a.time).Name == "Idle Time"));
		val2.time = FsmFloat.op_Implicit(0f);
		FsmState state2 = __instance.Fsm.GetState("Init");
		if (state2 == null)
		{
			Log.LogWarning((object)"No state named Init");
			return;
		}
		MultiplyIntByFloat val3 = state2.Actions.OfType<MultiplyIntByFloat>().FirstOrDefault((Func<MultiplyIntByFloat, bool>)((MultiplyIntByFloat a) => ((NamedVariable)a.storeResult).Name == "HP P2"));
		val3.multiplyFloat = FsmFloat.op_Implicit(0.85f);
		MultiplyIntByFloat val4 = state2.Actions.OfType<MultiplyIntByFloat>().FirstOrDefault((Func<MultiplyIntByFloat, bool>)((MultiplyIntByFloat a) => ((NamedVariable)a.storeResult).Name == "HP P3"));
		val4.multiplyFloat = FsmFloat.op_Implicit(0.25f);
		FsmState state3 = __instance.Fsm.GetState("Intro Roar");
		if (state3 == null)
		{
			Log.LogWarning((object)"No state named Intro Roar");
			return;
		}
		DisplayBossTitle val5 = state3.Actions.OfType<DisplayBossTitle>().FirstOrDefault();
		val5.bossTitle = FsmString.op_Implicit("LAST_JUDGE");
		FsmState state4 = __instance.Fsm.GetState("Spinning");
		if (state4 == null)
		{
			Log.LogWarning((object)"No state named Spinning");
			return;
		}
		Wait val6 = state4.Actions.OfType<Wait>().FirstOrDefault();
		val6.time = FsmFloat.op_Implicit(0.5f);
		FsmState state5 = __instance.Fsm.GetState("Rerage?");
		if (state5 == null)
		{
			Log.LogWarning((object)"No state named Rerage?");
			return;
		}
		IntCompare val7 = state5.Actions.OfType<IntCompare>().FirstOrDefault();
		val7.integer2 = FsmInt.op_Implicit(-16);
		FsmState state6 = __instance.Fsm.GetState("Rage End");
		if (state6 == null)
		{
			Log.LogWarning((object)"No state named Rage End");
			return;
		}
		SetFloatValue val8 = state6.Actions.OfType<SetFloatValue>().FirstOrDefault();
		val8.floatValue = FsmFloat.op_Implicit(0.2f);
		FsmState state7 = __instance.Fsm.GetState("Flame Spin Antic L");
		if (state7 == null)
		{
			Log.LogWarning((object)"No state named Flame Spin Antic L");
			return;
		}
		Wait val9 = state7.Actions.OfType<Wait>().FirstOrDefault();
		val9.time = FsmFloat.op_Implicit(0f);
		FsmState state8 = __instance.Fsm.GetState("Flame Dir");
		if (state8 == null)
		{
			Log.LogWarning((object)"No state named Flame Dir");
			return;
		}
		RandomFloat val10 = state8.Actions.OfType<RandomFloat>().FirstOrDefault((Func<RandomFloat, bool>)((RandomFloat a) => ((NamedVariable)a.storeResult).Name == "Speed R"));
		val10.min = FsmFloat.op_Implicit(5f);
		val10.max = FsmFloat.op_Implicit(15f);
		FsmState state9 = __instance.Fsm.GetState("L Flame R");
		if (state9 == null)
		{
			Log.LogWarning((object)"No state named L Flame R");
			return;
		}
		Wait val11 = state9.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.7f));
		val11.time = FsmFloat.op_Implicit(0.7f);
		WaitBool val12 = state9.Actions.OfType<WaitBool>().FirstOrDefault();
		val12.time = FsmFloat.op_Implicit(0.5f);
		SendEventToRegisterDelay val13 = state9.Actions.OfType<SendEventToRegisterDelay>().FirstOrDefault();
		val13.delay = FsmFloat.op_Implicit(0.5f);
		Wait val14 = state9.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.25f));
		val14.time = FsmFloat.op_Implicit(0.5f);
		FsmState state10 = __instance.Fsm.GetState("R Flame L");
		if (state10 == null)
		{
			Log.LogWarning((object)"No state named R Flame L");
			return;
		}
		Wait val15 = state10.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.7f));
		val15.time = FsmFloat.op_Implicit(0.7f);
		WaitBool val16 = state10.Actions.OfType<WaitBool>().FirstOrDefault();
		val16.time = FsmFloat.op_Implicit(0.5f);
		SendEventToRegisterDelay val17 = state10.Actions.OfType<SendEventToRegisterDelay>().FirstOrDefault();
		val13.delay = FsmFloat.op_Implicit(0.5f);
		Wait val18 = state10.Actions.OfType<Wait>().FirstOrDefault((Func<Wait, bool>)((Wait a) => a.time.Value == 1.25f));
		val14.time = FsmFloat.op_Implicit(0.5f);
		FsmState state11 = __instance.Fsm.GetState("Charge");
		if (state11 == null)
		{
			Log.LogWarning((object)"No state named Charge");
			return;
		}
		Wait val19 = state11.Actions.OfType<Wait>().FirstOrDefault();
		val19.time = FsmFloat.op_Implicit(1f);
		FsmState state12 = __instance.Fsm.GetState("Charge Flame");
		if (state12 == null)
		{
			Log.LogWarning((object)"No state named Charge Flame");
			return;
		}
		Wait val20 = state12.Actions.OfType<Wait>().FirstOrDefault();
		val20.time = FsmFloat.op_Implicit(0.2f);
		FsmState state13 = __instance.Fsm.GetState("Charge Antic 2");
		if (state13 == null)
		{
			Log.LogWarning((object)"No state named Charge Antic 2");
			return;
		}
		Wait val21 = state13.Actions.OfType<Wait>().FirstOrDefault();
		val21.time = FsmFloat.op_Implicit(0f);
		FsmState state14 = __instance.Fsm.GetState("Charge Start");
		if (state14 == null)
		{
			Log.LogWarning((object)"No state named Charge Start");
			return;
		}
		SetVelocityByScale val22 = state14.Actions.OfType<SetVelocityByScale>().FirstOrDefault();
		val22.speed = FsmFloat.op_Implicit(-22f);
		FsmState state15 = __instance.Fsm.GetState("Stomp Flame Antic");
		if (state15 == null)
		{
			Log.LogWarning((object)"No state named Stomp Flame Antic");
			return;
		}
		Wait val23 = state15.Actions.OfType<Wait>().FirstOrDefault();
		val23.time = FsmFloat.op_Implicit(0f);
		FsmState state16 = __instance.Fsm.GetState("Stomp Flames");
		if (state16 == null)
		{
			Log.LogWarning((object)"No state named Stomp Flames");
			return;
		}
		Wait val24 = state16.Actions.OfType<Wait>().FirstOrDefault();
		val24.time = FsmFloat.op_Implicit(0.1f);
		FsmState state17 = __instance.Fsm.GetState("Stomp Regular");
		if (state17 == null)
		{
			Log.LogWarning((object)"No state named Stomp Regular");
			return;
		}
		Wait val25 = state17.Actions.OfType<Wait>().FirstOrDefault();
		val25.time = FsmFloat.op_Implicit(0.1f);
		FsmState state18 = __instance.Fsm.GetState("Stomp Rise and Antic");
		if (state18 == null)
		{
			Log.LogWarning((object)"No state named Stomp Rise and Antic");
			return;
		}
		EaseFloat val26 = state18.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
		((EaseFsmAction)val26).time = FsmFloat.op_Implicit(0.2f);
		EaseFloat val27 = state18.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
		((EaseFsmAction)val27).time = FsmFloat.op_Implicit(0.1f);
		ActivateGameObjectDelay val28 = state18.Actions.OfType<ActivateGameObjectDelay>().FirstOrDefault((Func<ActivateGameObjectDelay, bool>)((ActivateGameObjectDelay a) => ((NamedVariable)a.activate).Name == "Flamed Up"));
		val28.delay = FsmFloat.op_Implicit(0.1f);
		FsmState state19 = __instance.Fsm.GetState("Jump Rise");
		if (state19 == null)
		{
			Log.LogWarning((object)"No state named Jump Rise");
			return;
		}
		EaseFloat val29 = state19.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
		((EaseFsmAction)val29).time = FsmFloat.op_Implicit(0.2f);
		EaseFloat val30 = state19.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
		((EaseFsmAction)val30).time = FsmFloat.op_Implicit(0.15f);
		FsmState state20 = __instance.Fsm.GetState("Jump Fall");
		if (state20 == null)
		{
			Log.LogWarning((object)"No state named Jump Fall");
			return;
		}
		EaseFloat val31 = state20.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
		((EaseFsmAction)val31).time = FsmFloat.op_Implicit(0.15f);
		EaseFloat val32 = state20.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
		((EaseFsmAction)val32).time = FsmFloat.op_Implicit(0.2f);
		FsmState state21 = __instance.Fsm.GetState("Dash");
		if (state21 == null)
		{
			Log.LogWarning((object)"No state named Dash");
			return;
		}
		SetVelocityByScale val33 = state21.Actions.OfType<SetVelocityByScale>().FirstOrDefault();
		val33.speed = FsmFloat.op_Implicit(-40f);
		FsmState state22 = __instance.Fsm.GetState("Clamp L");
		if (state22 == null)
		{
			Log.LogWarning((object)"No state named Clamp L");
			return;
		}
		FloatClamp val34 = state22.Actions.OfType<FloatClamp>().FirstOrDefault((Func<FloatClamp, bool>)((FloatClamp a) => ((NamedVariable)a.floatVariable).Name == "X Distance"));
		val34.minValue = FsmFloat.op_Implicit(-24f);
		val34.maxValue = FsmFloat.op_Implicit(-8f);
		FsmState state23 = __instance.Fsm.GetState("Clamp R");
		if (state23 == null)
		{
			Log.LogWarning((object)"No state named Clamp R");
			return;
		}
		FloatClamp val35 = state23.Actions.OfType<FloatClamp>().FirstOrDefault((Func<FloatClamp, bool>)((FloatClamp a) => ((NamedVariable)a.floatVariable).Name == "X Distance"));
		val35.minValue = FsmFloat.op_Implicit(8f);
		val35.maxValue = FsmFloat.op_Implicit(24f);
		FsmState state24 = __instance.Fsm.GetState("Throw Rise");
		if (state24 == null)
		{
			Log.LogWarning((object)"No state named Throw Rise");
			return;
		}
		EaseFloat val36 = state24.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
		((EaseFsmAction)val36).time = FsmFloat.op_Implicit(0.1f);
		EaseFloat val37 = state24.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
		((EaseFsmAction)val37).time = FsmFloat.op_Implicit(0.1f);
		Wait val38 = state24.Actions.OfType<Wait>().FirstOrDefault();
		val38.time = FsmFloat.op_Implicit(0f);
		FsmState state25 = __instance.Fsm.GetState("Throw Fall");
		if (state25 == null)
		{
			Log.LogWarning((object)"No state named Throw Fall");
			return;
		}
		EaseFloat val39 = state25.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween X"));
		((EaseFsmAction)val39).time = FsmFloat.op_Implicit(0.1f);
		EaseFloat val40 = state25.Actions.OfType<EaseFloat>().FirstOrDefault((Func<EaseFloat, bool>)((EaseFloat a) => ((NamedVariable)a.floatVariable).Name == "Tween Y"));
		((EaseFsmAction)val40).time = FsmFloat.op_Implicit(0.1f);
		FsmState state26 = __instance.Fsm.GetState("Slam Type");
		if (state26 == null)
		{
			Log.LogWarning((object)"No state named Slam Type");
			return;
		}
		ConvertBoolToFloat val41 = state26.Actions.OfType<ConvertBoolToFloat>().FirstOrDefault();
		val41.falseValue = FsmFloat.op_Implicit(0f);
		FsmState state27 = __instance.Fsm.GetState("Stun Start");
		if (state27 == null)
		{
			Log.LogWarning((object)"No state named Stun Start");
			return;
		}
		SetFloatValue val42 = state27.Actions.OfType<SetFloatValue>().FirstOrDefault((Func<SetFloatValue, bool>)((SetFloatValue a) => ((NamedVariable)a.floatVariable).Name == "Stun Timer"));
		val42.floatValue = FsmFloat.op_Implicit(1f);
		FsmState state28 = __instance.Fsm.GetState("Close Range");
		if (state28 == null)
		{
			Log.LogWarning((object)"No state named Close Range");
			return;
		}
		SendRandomEventV4 val43 = state28.Actions.OfType<SendRandomEventV4>().FirstOrDefault();
		val43.weights = (FsmFloat[])(object)new FsmFloat[3]
		{
			FsmFloat.op_Implicit(0.25f),
			FsmFloat.op_Implicit(0.4f),
			FsmFloat.op_Implicit(0.35f)
		};
		val43.eventMax = (FsmInt[])(object)new FsmInt[3]
		{
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(2)
		};
		val43.missedMax = (FsmInt[])(object)new FsmInt[3]
		{
			FsmInt.op_Implicit(4),
			FsmInt.op_Implicit(3),
			FsmInt.op_Implicit(3)
		};
		FsmState state29 = __instance.Fsm.GetState("Far Range");
		if (state29 == null)
		{
			Log.LogWarning((object)"No state named Far Range");
			return;
		}
		SendRandomEventV4 val44 = state29.Actions.OfType<SendRandomEventV4>().FirstOrDefault();
		val44.weights = (FsmFloat[])(object)new FsmFloat[4]
		{
			FsmFloat.op_Implicit(0.3f),
			FsmFloat.op_Implicit(0.3f),
			FsmFloat.op_Implicit(0.2f),
			FsmFloat.op_Implicit(0.2f)
		};
		val44.eventMax = (FsmInt[])(object)new FsmInt[4]
		{
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(2)
		};
		val44.missedMax = (FsmInt[])(object)new FsmInt[4]
		{
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(3),
			FsmInt.op_Implicit(2)
		};
		FsmState state30 = __instance.Fsm.GetState("Close Range F");
		if (state30 == null)
		{
			Log.LogWarning((object)"No state named Close Range F");
			return;
		}
		SendRandomEventV3 val45 = state30.Actions.OfType<SendRandomEventV3>().FirstOrDefault();
		val45.weights = (FsmFloat[])(object)new FsmFloat[5]
		{
			FsmFloat.op_Implicit(0.15f),
			FsmFloat.op_Implicit(0.25f),
			FsmFloat.op_Implicit(0.1f),
			FsmFloat.op_Implicit(0.25f),
			FsmFloat.op_Implicit(0.25f)
		};
		val45.eventMax = (FsmInt[])(object)new FsmInt[5]
		{
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(3),
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(3),
			FsmInt.op_Implicit(1)
		};
		val45.missedMax = (FsmInt[])(object)new FsmInt[5]
		{
			FsmInt.op_Implicit(4),
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(999),
			FsmInt.op_Implicit(4),
			FsmInt.op_Implicit(4)
		};
		FsmState state31 = __instance.Fsm.GetState("Far Range F");
		if (state31 == null)
		{
			Log.LogWarning((object)"No state named Far Range F");
			return;
		}
		SendRandomEventV3 val46 = state31.Actions.OfType<SendRandomEventV3>().FirstOrDefault();
		val46.weights = (FsmFloat[])(object)new FsmFloat[5]
		{
			FsmFloat.op_Implicit(0.2f),
			FsmFloat.op_Implicit(0.2f),
			FsmFloat.op_Implicit(0.2f),
			FsmFloat.op_Implicit(0.1f),
			FsmFloat.op_Implicit(0.3f)
		};
		val46.eventMax = (FsmInt[])(object)new FsmInt[5]
		{
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(1),
			FsmInt.op_Implicit(3)
		};
		val46.missedMax = (FsmInt[])(object)new FsmInt[5]
		{
			FsmInt.op_Implicit(2),
			FsmInt.op_Implicit(3),
			FsmInt.op_Implicit(999),
			FsmInt.op_Implicit(4),
			FsmInt.op_Implicit(2)
		};
		healthManager = ((Component)__instance).gameObject.GetComponent<HealthManager>();
		healthManager.hp = 1440;
	}
}