Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of BonusJump v1.1.0
plugins/BonusJump/BonusJump.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using IL.RoR2; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour.HookGen; using On.RoR2; using RoR2; using RoR2.ContentManagement; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("BonusJump")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BonusJump")] [assembly: AssemblyTitle("BonusJump")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace TPDespair.BonusJump; public class ServerBonusJumpBehavior : ItemBehavior { private enum JumpState { Cooldown, Waiting, Available } internal static BuffIndex availableBuff = (BuffIndex)(-1); internal static BuffIndex waitingBuff = (BuffIndex)(-1); internal static BuffIndex cooldownBuff = (BuffIndex)(-1); private CharacterMotor motor; private JumpState jumpState = JumpState.Cooldown; private float timer = -1f; private bool cleanseCooldown = false; private bool requestedUsage = false; private float timeSinceLastGrounded = 0.25f; private float groundThreshold = 0.25f; public void Awake() { ((Behaviour)this).enabled = false; } public void OnEnable() { if (Object.op_Implicit((Object)(object)base.body)) { CharacterMotor characterMotor = base.body.characterMotor; if (Object.op_Implicit((Object)(object)characterMotor)) { motor = characterMotor; } jumpState = JumpState.Cooldown; float value = BonusJumpPlugin.JumpCooldown.Value; if (value >= 1f) { timer = value; } groundThreshold = BonusJumpPlugin.GroundThreshold.Value; timeSinceLastGrounded = groundThreshold; ClearDisplayBuffs(); } } public void OnDisable() { if (Object.op_Implicit((Object)(object)base.body)) { ClearDisplayBuffs(); } } public void FixedUpdate() { if (NetworkServer.active && timer >= 0f && Object.op_Implicit((Object)(object)base.body) && Object.op_Implicit((Object)(object)motor)) { UpdateGroundTracking(); UpdateJumpState(); UpdateBuffDisplay(); } } private void UpdateGroundTracking() { float fixedDeltaTime = Time.fixedDeltaTime; if (motor.isGrounded) { timeSinceLastGrounded = 0f; } else { timeSinceLastGrounded += fixedDeltaTime; } if (timeSinceLastGrounded <= groundThreshold) { timer = Mathf.Max(0f, timer - fixedDeltaTime); } } private void UpdateJumpState() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Invalid comparison between Unknown and I4 //IL_00f0: Unknown result type (might be due to invalid IL or missing references) if (jumpState == JumpState.Cooldown && timer <= 0f) { jumpState = JumpState.Available; } if (jumpState == JumpState.Available && requestedUsage) { jumpState = JumpState.Waiting; requestedUsage = false; } if (jumpState == JumpState.Waiting && motor.isGrounded) { if (cleanseCooldown) { jumpState = JumpState.Available; timer = 0f; } else { jumpState = JumpState.Cooldown; float num = BonusJumpPlugin.JumpCooldown.Value; float value = BonusJumpPlugin.CloudCompat.Value; if (value > 0f && (int)BonusJumpPlugin.RainbowCloudItem != -1) { Inventory inventory = base.body.inventory; if (Object.op_Implicit((Object)(object)inventory)) { int itemCount = inventory.GetItemCount(BonusJumpPlugin.RainbowCloudItem); if (itemCount > 0) { num *= 1f - Util.ConvertAmplificationPercentageIntoReductionPercentage(value * 100f * (float)itemCount) / 100f; } } } timer = Mathf.Max(1f, num); } } if (jumpState == JumpState.Cooldown && cleanseCooldown) { jumpState = JumpState.Available; timer = 0f; } if (jumpState != JumpState.Waiting) { cleanseCooldown = false; } } private void ClearDisplayBuffs() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active) { base.body.SetBuffCount(availableBuff, 0); base.body.SetBuffCount(waitingBuff, 0); base.body.SetBuffCount(cooldownBuff, 0); } } private void UpdateBuffDisplay() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) if (jumpState == JumpState.Available) { if (!base.body.HasBuff(availableBuff)) { base.body.SetBuffCount(availableBuff, 1); } if (base.body.HasBuff(waitingBuff)) { base.body.SetBuffCount(waitingBuff, 0); } if (base.body.HasBuff(cooldownBuff)) { base.body.SetBuffCount(cooldownBuff, 0); } return; } if (base.body.HasBuff(availableBuff)) { base.body.SetBuffCount(availableBuff, 0); } if (jumpState == JumpState.Waiting) { if (!base.body.HasBuff(waitingBuff)) { base.body.SetBuffCount(waitingBuff, 1); } if (base.body.HasBuff(cooldownBuff)) { base.body.SetBuffCount(cooldownBuff, 0); } return; } if (base.body.HasBuff(waitingBuff)) { base.body.SetBuffCount(waitingBuff, 0); } int num = Mathf.Max(1, Mathf.CeilToInt(timer)); int buffCount = base.body.GetBuffCount(cooldownBuff); if (buffCount != num) { base.body.SetBuffCount(cooldownBuff, num); } } public void CleanseCooldown() { if (NetworkServer.active) { cleanseCooldown = true; } } public void ApplyUsageRequest() { if (NetworkServer.active) { requestedUsage = true; } } } public class AuthBonusJumpBehavior : ItemBehavior { internal static BuffIndex availableBuff = (BuffIndex)(-1); internal static BuffIndex waitingBuff = (BuffIndex)(-1); private CharacterMotor motor; private bool broadcastedUsage = false; private bool dontConsumeBonus = false; private int prevJumpCount = 0; private float timeSinceLastChanged = 0f; public void Awake() { ((Behaviour)this).enabled = false; } public void OnEnable() { if (Object.op_Implicit((Object)(object)base.body)) { CharacterMotor characterMotor = base.body.characterMotor; if (Object.op_Implicit((Object)(object)characterMotor)) { motor = characterMotor; } } } public void FixedUpdate() { if (IsAuthority() && Object.op_Implicit((Object)(object)base.body) && Object.op_Implicit((Object)(object)motor)) { UpdateJumpTracking(); UpdateJumpState(); } } private void UpdateJumpTracking() { if (motor.jumpCount != prevJumpCount) { dontConsumeBonus = false; if (ReachedMaxJumpCount() && (timeSinceLastChanged <= 0.125f || motor.jumpCount - prevJumpCount > 1)) { dontConsumeBonus = true; } timeSinceLastChanged = 0f; prevJumpCount = motor.jumpCount; } else { timeSinceLastChanged += Time.fixedDeltaTime; } } private void UpdateJumpState() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (base.body.HasBuff(availableBuff) && ReachedMaxJumpCount() && !dontConsumeBonus && !broadcastedUsage) { broadcastedUsage = true; base.body.AddTimedBuffAuthority(waitingBuff, 0f); } if (motor.jumpCount == 0 && broadcastedUsage) { broadcastedUsage = false; } } private bool ReachedMaxJumpCount() { return motor.jumpCount >= base.body.maxJumpCount && base.body.maxJumpCount > 0; } private bool IsAuthority() { return NetworkClient.active && base.body.hasEffectiveAuthority; } public void DontConsume() { if (IsAuthority() && base.body.maxJumpCount > 0) { dontConsumeBonus = true; prevJumpCount = base.body.maxJumpCount; timeSinceLastChanged = 0f; } } } public class BonusJumpContent : IContentPackProvider { public static class Buffs { public static BuffDef JumpAvailable; public static BuffDef JumpWaiting; public static BuffDef JumpCooldown; public static List<BuffDef> buffDefs = new List<BuffDef>(); public static void Create() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) JumpAvailable = ScriptableObject.CreateInstance<BuffDef>(); ((Object)JumpAvailable).name = "BonusJumpAvailable"; JumpAvailable.buffColor = new Color(0.35f, 0.65f, 0.35f); JumpAvailable.canStack = false; JumpAvailable.isDebuff = false; JumpAvailable.iconSprite = Sprites.BonusJumpNormal; buffDefs.Add(JumpAvailable); JumpWaiting = ScriptableObject.CreateInstance<BuffDef>(); ((Object)JumpWaiting).name = "BonusJumpWaiting"; JumpWaiting.buffColor = new Color(0.65f, 0.65f, 0.35f); JumpWaiting.canStack = false; JumpWaiting.isDebuff = false; JumpWaiting.iconSprite = Sprites.BonusJumpShaded; buffDefs.Add(JumpWaiting); JumpCooldown = ScriptableObject.CreateInstance<BuffDef>(); ((Object)JumpCooldown).name = "BonusJumpCooldown"; JumpCooldown.buffColor = new Color(0.65f, 0.35f, 0.35f); JumpCooldown.canStack = true; JumpCooldown.isDebuff = false; JumpCooldown.iconSprite = Sprites.BonusJumpShaded; buffDefs.Add(JumpCooldown); } } public static class Sprites { public static Sprite BonusJumpNormal; public static Sprite BonusJumpShaded; public static void Create() { BonusJumpNormal = BonusJumpPlugin.Assets.LoadAsset<Sprite>("Assets/Icons/texBuffJump.png"); BonusJumpShaded = BonusJumpPlugin.Assets.LoadAsset<Sprite>("Assets/Icons/texBuffJumpShaded.png"); } } public ContentPack contentPack = new ContentPack(); public string identifier => "BonusJumpContent"; public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { BonusJumpPlugin.LoadAssets(); Sprites.Create(); Buffs.Create(); SetInternalRef(); contentPack.buffDefs.Add(Buffs.buffDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } public static void SetInternalRef() { BonusJumpPlugin.availableBuff = Buffs.JumpAvailable; BonusJumpPlugin.waitingBuff = Buffs.JumpWaiting; BonusJumpPlugin.cooldownBuff = Buffs.JumpCooldown; } } [BepInPlugin("com.TPDespair.BonusJump", "BonusJump", "1.1.0")] public class BonusJumpPlugin : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_TokenIsRegistered <>9__30_0; public static hook_GetString_string <>9__30_1; public static Func<Instruction, bool> <>9__34_1; public static Func<Instruction, bool> <>9__34_2; public static Func<Instruction, bool> <>9__34_3; public static Func<CharacterBody, int, int> <>9__34_5; public static Manipulator <>9__34_0; public static hook_Init <>9__35_0; public static hook_CleanseBody <>9__38_0; public static hook_AddTimedBuff_BuffIndex_float <>9__39_0; public static Func<Instruction, bool> <>9__42_0; public static Func<Instruction, bool> <>9__42_1; public static Action<EntityState> <>9__42_2; internal bool <LanguageOverride>b__30_0(orig_TokenIsRegistered orig, Language self, string token) { if (token != null && LangTokens.ContainsKey(token)) { return true; } return orig.Invoke(self, token); } internal string <LanguageOverride>b__30_1(orig_GetString_string orig, string token) { if (token != null && LangTokens.ContainsKey(token)) { return LangTokens[token]; } return orig.Invoke(token); } internal void <JumpCountHook>b__34_0(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass34_0 CS$<>8__locals0 = new <>c__DisplayClass34_0(); ILCursor val = new ILCursor(il); CS$<>8__locals0.index = -1; if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "baseJumpCount"), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref CS$<>8__locals0.index) })) { val.Emit(OpCodes.Ldarg, 0); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.index); val.EmitDelegate<Func<CharacterBody, int, int>>((Func<CharacterBody, int, int>)delegate(CharacterBody self, int value) { if (self.HasBuff(BonusJumpContent.Buffs.JumpAvailable) || self.HasBuff(BonusJumpContent.Buffs.JumpWaiting)) { value++; } return value; }); val.Emit(OpCodes.Stloc, CS$<>8__locals0.index); } else { LogWarn("JumpCountHook Failed"); } } internal bool <JumpCountHook>b__34_1(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <JumpCountHook>b__34_2(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <JumpCountHook>b__34_3(Instruction x) { return ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "baseJumpCount"); } internal int <JumpCountHook>b__34_5(CharacterBody self, int value) { if (self.HasBuff(BonusJumpContent.Buffs.JumpAvailable) || self.HasBuff(BonusJumpContent.Buffs.JumpWaiting)) { value++; } return value; } internal void <IndicatorBuffDisplayHook>b__35_0(orig_Init orig) { orig.Invoke(); HoistIndicatorBuffs(); } internal void <HandleCleanseHook>b__38_0(orig_CleanseBody orig, CharacterBody body, bool debuff, bool buff, bool cooldown, bool dot, bool stun, bool proj) { if (Object.op_Implicit((Object)(object)body) && cooldown) { ServerBonusJumpBehavior component = ((Component)body).GetComponent<ServerBonusJumpBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.CleanseCooldown(); } } orig.Invoke(body, debuff, buff, cooldown, dot, stun, proj); } internal void <UsageRequestedHook>b__39_0(orig_AddTimedBuff_BuffIndex_float orig, CharacterBody body, BuffIndex buff, float duration) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (buff == waitingBuff.buffIndex) { ServerBonusJumpBehavior component = ((Component)body).GetComponent<ServerBonusJumpBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.ApplyUsageRequest(); } } else { orig.Invoke(body, buff, duration); } } internal bool <PaladinAirSlamHook>b__42_0(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_maxJumpCount"); } internal bool <PaladinAirSlamHook>b__42_1(Instruction x) { return ILPatternMatchingExt.MatchStfld<CharacterMotor>(x, "jumpCount"); } internal void <PaladinAirSlamHook>b__42_2(EntityState entityState) { CharacterMotor characterMotor = entityState.characterMotor; CharacterBody characterBody = entityState.characterBody; if (characterMotor.jumpCount < characterBody.maxJumpCount) { AuthBonusJumpBehavior component = ((Component)characterBody).GetComponent<AuthBonusJumpBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.DontConsume(); } } } } [CompilerGenerated] private sealed class <>c__DisplayClass34_0 { public int index; internal bool <JumpCountHook>b__4(Instruction x) { return ILPatternMatchingExt.MatchLdloc(x, ref index); } } public const string ModVer = "1.1.0"; public const string ModName = "BonusJump"; public const string ModGuid = "com.TPDespair.BonusJump"; public static ConfigFile configFile; public static ManualLogSource logSource; public static AssetBundle Assets; public static Dictionary<string, string> LangTokens = new Dictionary<string, string>(); private static readonly BindingFlags Flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; public static BuffDef availableBuff; public static BuffDef waitingBuff; public static BuffDef cooldownBuff; public static ItemIndex RainbowCloudItem = (ItemIndex)(-1); public static ConfigEntry<float> JumpCooldown { get; set; } public static ConfigEntry<float> GroundThreshold { get; set; } public static ConfigEntry<float> CloudCompat { get; set; } public void Awake() { //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Expected O, but got Unknown RoR2Application.isModded = true; NetworkModCompatibilityHelper.networkModList = NetworkModCompatibilityHelper.networkModList.Append("com.TPDespair.BonusJump:1.1.0"); configFile = ((BaseUnityPlugin)this).Config; logSource = ((BaseUnityPlugin)this).Logger; SetupConfig(); LanguageOverride(); if (CloudCompat.Value > 0f) { float num = CloudCompat.Value * 100f; RegisterToken("ITEM_MYSTICSBADITEMS_RAINBOWTRAIL_DESC", "Gain <style=cIsUtility>" + num + "%</style> <style=cStack>(+" + num + "% per stack)</style> <style=cIsUtility>cooldown reduction</style> towards <style=cIsUtility>bonus jump</style>.\nLeave a <link=\"MysticsBadItemsRainbowWavy\">rainbow trail</link> behind."); RegisterToken("ITEM_MYSTICSBADITEMS_RAINBOWTRAIL_PICKUP", "Gain bonus jump cooldown recovery and leave a <link=\"MysticsBadItemsRainbowWavy\">rainbow trail</link> behind."); } ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); JumpCountHook(); IndicatorBuffDisplayHook(); CharacterBody.onBodyInventoryChangedGlobal += HandleItemBehavior; HandleCleanseHook(); UsageRequestedHook(); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(LateSetup)); } private static void LateSetup() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) AllocateBehaviorBuffs(); if (PluginLoaded("com.themysticsword.mysticsbaditems")) { RainbowCloudItem = FindItemIndex("MysticsBadItems_RainbowTrail"); } PaladinCompat(); } private static ItemIndex FindItemIndex(string itemName) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) ItemIndex val = ItemCatalog.FindItemIndex(itemName); if ((int)val == -1) { LogWarn("Could not find ItemIndex for : " + itemName); } return val; } private static void SetupConfig() { JumpCooldown = configFile.Bind<float>("General", "JumpCooldown", 10f, "Cooldown of bonus jump. Cooldown only recovers while grounded."); GroundThreshold = configFile.Bind<float>("General", "GroundThreshold", 0.25f, "Time after not being grounded to still be counted as grounded for cooldown recovery."); CloudCompat = configFile.Bind<float>("General", "CloudCompat", 0.25f, "Bonus jump cooldown reduction per Cloud Nine. Set to 0 to disable."); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)new BonusJumpContent()); } internal static void LoadAssets() { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("TPDespair.BonusJump.bonusjumpbundle"); Assets = AssetBundle.LoadFromStream(stream); } private static void LanguageOverride() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown object obj = <>c.<>9__30_0; if (obj == null) { hook_TokenIsRegistered val = (orig_TokenIsRegistered orig, Language self, string token) => (token != null && LangTokens.ContainsKey(token)) || orig.Invoke(self, token); <>c.<>9__30_0 = val; obj = (object)val; } Language.TokenIsRegistered += (hook_TokenIsRegistered)obj; object obj2 = <>c.<>9__30_1; if (obj2 == null) { hook_GetString_string val2 = (orig_GetString_string orig, string token) => (token != null && LangTokens.ContainsKey(token)) ? LangTokens[token] : orig.Invoke(token); <>c.<>9__30_1 = val2; obj2 = (object)val2; } Language.GetString_string += (hook_GetString_string)obj2; } public static void RegisterToken(string token, string text) { if (!LangTokens.ContainsKey(token)) { LangTokens.Add(token, text); } else { LangTokens[token] = text; } } internal static void LogWarn(object data) { logSource.LogWarning(data); } internal static bool PluginLoaded(string key) { return Chainloader.PluginInfos.ContainsKey(key); } private static void JumpCountHook() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__34_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) ILCursor val2 = new ILCursor(il); int index = -1; if (val2.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "baseJumpCount"), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref index) })) { val2.Emit(OpCodes.Ldarg, 0); val2.Emit(OpCodes.Ldloc, index); val2.EmitDelegate<Func<CharacterBody, int, int>>((Func<CharacterBody, int, int>)delegate(CharacterBody self, int value) { if (self.HasBuff(BonusJumpContent.Buffs.JumpAvailable) || self.HasBuff(BonusJumpContent.Buffs.JumpWaiting)) { value++; } return value; }); val2.Emit(OpCodes.Stloc, index); } else { LogWarn("JumpCountHook Failed"); } }; <>c.<>9__34_0 = val; obj = (object)val; } CharacterBody.RecalculateStats += (Manipulator)obj; } private static void IndicatorBuffDisplayHook() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__35_0; if (obj == null) { hook_Init val = delegate(orig_Init orig) { orig.Invoke(); HoistIndicatorBuffs(); }; <>c.<>9__35_0 = val; obj = (object)val; } BuffCatalog.Init += (hook_Init)obj; } private static void HoistIndicatorBuffs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected I4, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected I4, but got Unknown //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected I4, but got Unknown BuffIndex jumpAvailable = availableBuff.buffIndex; BuffIndex jumpWaiting = waitingBuff.buffIndex; BuffIndex jumpCooldown = cooldownBuff.buffIndex; BuffIndex[] collection = (BuffIndex[])(object)new BuffIndex[3] { (BuffIndex)(int)jumpAvailable, (BuffIndex)(int)jumpWaiting, (BuffIndex)(int)jumpCooldown }; List<BuffIndex> list = new List<BuffIndex>(BuffCatalog.nonHiddenBuffIndices); list.RemoveAll((BuffIndex t) => t == jumpAvailable || t == jumpWaiting || t == jumpCooldown); List<BuffIndex> list2 = new List<BuffIndex>(); list2.AddRange(collection); list2.AddRange(list); BuffCatalog.nonHiddenBuffIndices = list2.ToArray(); } private static void HandleItemBehavior(CharacterBody body) { int num = (body.isPlayerControlled ? 1 : 0); body.AddItemBehavior<AuthBonusJumpBehavior>(num); if (NetworkServer.active) { body.AddItemBehavior<ServerBonusJumpBehavior>(num); } } private static void HandleCleanseHook() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__38_0; if (obj == null) { hook_CleanseBody val = delegate(orig_CleanseBody orig, CharacterBody body, bool debuff, bool buff, bool cooldown, bool dot, bool stun, bool proj) { if (Object.op_Implicit((Object)(object)body) && cooldown) { ServerBonusJumpBehavior component = ((Component)body).GetComponent<ServerBonusJumpBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.CleanseCooldown(); } } orig.Invoke(body, debuff, buff, cooldown, dot, stun, proj); }; <>c.<>9__38_0 = val; obj = (object)val; } Util.CleanseBody += (hook_CleanseBody)obj; } private static void UsageRequestedHook() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__39_0; if (obj == null) { hook_AddTimedBuff_BuffIndex_float val = delegate(orig_AddTimedBuff_BuffIndex_float orig, CharacterBody body, BuffIndex buff, float duration) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (buff == waitingBuff.buffIndex) { ServerBonusJumpBehavior component = ((Component)body).GetComponent<ServerBonusJumpBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.ApplyUsageRequest(); } } else { orig.Invoke(body, buff, duration); } }; <>c.<>9__39_0 = val; obj = (object)val; } CharacterBody.AddTimedBuff_BuffIndex_float += (hook_AddTimedBuff_BuffIndex_float)obj; } private static void AllocateBehaviorBuffs() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) ServerBonusJumpBehavior.availableBuff = availableBuff.buffIndex; ServerBonusJumpBehavior.waitingBuff = waitingBuff.buffIndex; ServerBonusJumpBehavior.cooldownBuff = cooldownBuff.buffIndex; AuthBonusJumpBehavior.availableBuff = availableBuff.buffIndex; AuthBonusJumpBehavior.waitingBuff = waitingBuff.buffIndex; } private static void PaladinCompat() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown if (!PluginLoaded("com.rob.Paladin")) { return; } BaseUnityPlugin instance = Chainloader.PluginInfos["com.rob.Paladin"].Instance; Assembly assembly = Assembly.GetAssembly(((object)instance).GetType()); Type type = Type.GetType("PaladinMod.States.AirSlam, " + assembly.FullName, throwOnError: false); if (type != null) { MethodInfo method = type.GetMethod("OnEnter", Flags); if (method != null) { HookEndpointManager.Modify((MethodBase)method, (Delegate)new Manipulator(PaladinAirSlamHook)); } else { LogWarn("[PaladinAirSlam] - Could Not Find Method : AirSlam.OnEnter"); } } else { LogWarn("[PaladinAirSlam] - Could Not Find Type : PaladinMod.States.AirSlam"); } } private static void PaladinAirSlamHook(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_maxJumpCount"), (Instruction x) => ILPatternMatchingExt.MatchStfld<CharacterMotor>(x, "jumpCount") })) { val.Emit(OpCodes.Ldarg, 0); val.EmitDelegate<Action<EntityState>>((Action<EntityState>)delegate(EntityState entityState) { CharacterMotor characterMotor = entityState.characterMotor; CharacterBody characterBody = entityState.characterBody; if (characterMotor.jumpCount < characterBody.maxJumpCount) { AuthBonusJumpBehavior component = ((Component)characterBody).GetComponent<AuthBonusJumpBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.DontConsume(); } } }); } else { LogWarn("PaladinAirSlamHook Failed"); } } }