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 BetterChefPrimary v1.0.3
plugins/BetterChefPrimary.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using EntityStates; using EntityStates.Chef; using HG; using Microsoft.CodeAnalysis; using R2API; using RoR2; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BetterChefPrimary")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+1514424c7430c41a18cbef101d1c691e59f00f2f")] [assembly: AssemblyProduct("BetterChefPrimary")] [assembly: AssemblyTitle("BetterChefPrimary")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BetterChefPrimary { public class AddCleaverToTracker : MonoBehaviour { public void Start() { EntityStateMachine val = EntityStateMachine.FindByCustomName(((Component)this).GetComponent<ProjectileController>().owner, "IDEATHHD_BETTERCHEFPRIMARY_ESM"); if (Object.op_Implicit((Object)(object)val) && val.state != null && val.state is BetterDiceMainStateMachine betterDiceMainStateMachine && ((EntityState)betterDiceMainStateMachine).isAuthority) { betterDiceMainStateMachine.AddCleaver(((Component)this).GetComponent<CleaverProjectile>()); } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("iDeathHD.BetterChefPrimary", "BetterChefPrimary", "1.0.3")] public class BetterChefPrimary : BaseUnityPlugin { public const string PluginGUID = "iDeathHD.BetterChefPrimary"; public const string PluginAuthor = "iDeathHD"; public const string PluginName = "BetterChefPrimary"; public const string PluginVersion = "1.0.3"; internal static void AddBetterPrimary() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Expected O, but got Unknown //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefBody.prefab").WaitForCompletion(); LanguageAPI.Add("IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE", "Better Dice"); LanguageAPI.Add("IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE_DESC", "Throw a cleaver through enemies for <style=cIsDamage>250% damage</style>. Dealing <style=cIsDamage>375% damage</style> on the return trip."); SkillLocator component = obj.GetComponent<SkillLocator>(); SkillDef val = Object.Instantiate<SkillDef>(component.primary.skillFamily.variants[0].skillDef); val.mustKeyPress = false; val.hideStockCount = true; val.stockToConsume = 0; val.baseMaxStock = 1; val.dontAllowPastMaxStocks = true; val.rechargeStock = 0; val.requiredStock = 0; val.skillNameToken = "IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE"; ((Object)val).name = val.skillNameToken; val.skillDescriptionToken = "IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE_DESC"; val.activationState = new SerializableEntityStateType(typeof(BetterDice)); ContentAddition.AddSkillDef(val); bool flag = default(bool); ContentAddition.AddEntityState(typeof(BetterDice), ref flag); BetterDice.BoostedCleaverPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefDiceEnhanced.prefab").WaitForCompletion(); BetterDice.BoostedCleaverPrefab.AddComponent<AddCleaverToTracker>(); BetterDice.CleaverPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefCleaver.prefab").WaitForCompletion(); BetterDice.CleaverPrefab.AddComponent<AddCleaverToTracker>(); ref Variant[] variants = ref component.primary.skillFamily.variants; Variant val2 = new Variant { skillDef = val }; ((Variant)(ref val2)).viewableNode = new Node(val.skillNameToken, false, (Node)null); ArrayUtils.ArrayAppend<Variant>(ref variants, ref val2); BetterDiceMainStateMachine.ChefSkillDefs.BetterPrimary = val; EntityStateMachine val3 = obj.AddComponent<EntityStateMachine>(); val3.customName = "IDEATHHD_BETTERCHEFPRIMARY_ESM"; val3.initialStateType = new SerializableEntityStateType(typeof(BetterDiceMainStateMachine)); val3.mainStateType = new SerializableEntityStateType(typeof(BetterDiceMainStateMachine)); ContentAddition.AddEntityState(typeof(BetterDiceMainStateMachine), ref flag); ArrayUtils.ArrayAppend<EntityStateMachine>(ref obj.GetComponent<NetworkStateMachine>().stateMachines, ref val3); } public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); AddBetterPrimary(); } } public class BetterDice : BaseState { public static GameObject CleaverPrefab; public static GameObject BoostedCleaverPrefab; public GameObject effectPrefab; public GameObject effectEnhancedPrefab; public float baseDuration = 2f; public float damageCoefficient = 1.2f; public float boostedDamageCoefficient = 1.2f; public float force = 20f; public string attackString; public static string returnString; public string yesChefAttackString; public static string yesChefReturnString; public float recoilAmplitude; public float bloom; public float recallAnimationTransitionTime = 0.2f; public float approximateCleaverDistance = 80f; internal float duration; internal ChefController chefController; internal bool hasBoost; internal void CacheOriginalFields() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown Dice val = new Dice(); effectPrefab = val.effectPrefab; effectEnhancedPrefab = val.effectEnhancedPrefab; baseDuration = val.baseDuration; damageCoefficient = val.damageCoefficient; boostedDamageCoefficient = val.boostedDamageCoefficient; force = val.force; attackString = val.attackString; returnString = val.returnString; yesChefAttackString = val.yesChefAttackString; yesChefReturnString = val.yesChefReturnString; recoilAmplitude = val.recoilAmplitude; bloom = val.bloom; recallAnimationTransitionTime = val.recallAnimationTransitionTime; approximateCleaverDistance = val.approximateCleaverDistance; } internal void FireCleaverProjectile(Ray aimRay) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) if (!((EntityState)this).isAuthority) { return; } GameObject projectilePrefab; int[] array; if (hasBoost) { projectilePrefab = BoostedCleaverPrefab; array = new int[3] { 8, 4, 4 }; } else { projectilePrefab = CleaverPrefab; array = new int[1] { 1 }; } int num = array.Length; for (int i = 0; i < num; i++) { int num2 = array[i]; float num3 = (float)(i % 2) * (0.5f / (float)num2); for (int j = 0; j < num2; j++) { FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = projectilePrefab; val.position = ((Ray)(ref aimRay)).origin; float num4 = (num3 + (float)j / (float)num2) * MathF.PI * 2f; float num5 = Mathf.Acos(0.02f + (float)i / (float)num); float num6 = Mathf.Sin(num5) * Mathf.Sin(num4); float num7 = Mathf.Cos(num5); float num8 = Mathf.Sin(num5) * Mathf.Cos(num4); Quaternion val2 = Quaternion.LookRotation(new Vector3(num6, num7, num8)); val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction) * val2; val.owner = ((EntityState)this).gameObject; val.damage = base.damageStat * damageCoefficient; val.damageTypeOverride = DamageTypeCombo.GenericPrimary; val.force = force; val.crit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master); if (!NetworkServer.active && Object.op_Implicit((Object)(object)chefController)) { chefController.CacheCleaverProjectileFireInfo(val); } ProjectileManager.instance.FireProjectile(val); } } } public override void OnEnter() { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) CacheOriginalFields(); ((BaseState)this).OnEnter(); if (!Object.op_Implicit((Object)(object)chefController)) { chefController = ((EntityState)this).GetComponent<ChefController>(); } chefController.characterBody = ((EntityState)this).characterBody; chefController.spreadBloom = bloom; hasBoost = ((EntityState)this).characterBody.HasBuff(Buffs.Boosted); if (hasBoost) { damageCoefficient = boostedDamageCoefficient; if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.Boosted); } } chefController.NetworkcatchDirtied = false; chefController.recallCleaver = false; Ray aimRay = ((BaseState)this).GetAimRay(); TrajectoryAimAssist.ApplyTrajectoryAimAssist(ref aimRay, approximateCleaverDistance, ((EntityState)this).gameObject, 1f); duration = baseDuration / base.attackSpeedStat; ((BaseState)this).StartAimMode(duration + 2f, false); PlayThrowCleaverAnimation(); ((BaseState)this).AddRecoil(-1f * recoilAmplitude, -1.5f * recoilAmplitude, -0.25f * recoilAmplitude, 0.25f * recoilAmplitude); DoMouthMuzzle(); FireCleaverProjectile(aimRay); } internal void PlayThrowCleaverAnimation() { if (hasBoost) { ((EntityState)this).PlayAnimation("Gesture, Override", "FireSliceAndDice", "FireSliceAndDice.playbackRate", duration, 0f); ((EntityState)this).PlayAnimation("Gesture, Additive", "FireSliceAndDice", "FireSliceAndDice.playbackRate", duration, 0f); Util.PlaySound(yesChefAttackString, ((EntityState)this).gameObject); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "FireDice", "FireDice.playbackRate", duration, 0f); ((EntityState)this).PlayAnimation("Gesture, Additive", "FireDice", "FireDice.playbackRate", duration, 0f); Util.PlaySound(attackString, ((EntityState)this).gameObject); } } internal void DoMouthMuzzle() { GameObject val = (hasBoost ? effectEnhancedPrefab : effectPrefab); if (Object.op_Implicit((Object)(object)val)) { EffectManager.SimpleMuzzleFlash(val, ((Component)((EntityState)this).characterBody.aimOriginTransform).gameObject, "MouthMuzzle", false); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge > duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { chefController.SetYesChefHeatState(false); if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.boostedFireEffect); } if (((EntityState)this).isAuthority) { chefController.ClearSkillOverrides(); } ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } } public class BetterDiceMainStateMachine : BaseState { public static class ChefSkillDefs { public static SkillDef BetterPrimary; } public const string EntityStateMachineCustomName = "IDEATHHD_BETTERCHEFPRIMARY_ESM"; private List<CleaverProjectile> _activeCleavers = new List<CleaverProjectile>(); public void AddCleaver(CleaverProjectile cleaverProjectile) { _activeCleavers.Add(cleaverProjectile); } public override void FixedUpdate() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 ((EntityState)this).FixedUpdate(); if ((Object)(object)((EntityState)this).skillLocator.primary.skillDef != (Object)(object)ChefSkillDefs.BetterPrimary) { return; } for (int num = _activeCleavers.Count - 1; num >= 0; num--) { CleaverProjectile val = _activeCleavers[num]; if (Object.op_Implicit((Object)(object)val) && (int)val.NetworkboomerangState == 3) { val.NetworkboomerangState = (BoomerangState)2; _activeCleavers.RemoveAt(num); } } } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } }