Please disclose if your mod was created primarily 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 LunarAnomalies v1.0.0
plugins/LunarAnomalies/TheWeavers.LunarAnomalies.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.Cryptography; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using LunarAnomalies.MoonsScript; using LunarAnomalies.Patch; using Microsoft.CodeAnalysis; using StaticNetcodeLib; using TheWeavers.LunarAnomalies.NetcodePatcher; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [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("TheWeavers.LunarAnomalies")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+36cbc5b35d19feb2a8ccd9864063ceeb192f8ad2")] [assembly: AssemblyProduct("LunarAnomalies")] [assembly: AssemblyTitle("TheWeavers.LunarAnomalies")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 LunarAnomalies { public class LightupScript : MonoBehaviour { private float duration = 30f; private float targetValue = 0.8f; private float currentValue; public Light light; private void Start() { ((MonoBehaviour)this).StartCoroutine(MoveValueOverTime()); } private IEnumerator MoveValueOverTime() { float elapsedTime = 0f; while (elapsedTime < duration) { light.intensity = Mathf.Lerp(0f, targetValue, elapsedTime / duration); elapsedTime += Time.deltaTime; yield return null; } light.intensity = targetValue; LunarAnomaliesManager.currentMoon.ApplyImmediateEffect(); LunarAnomaliesManager.TellPeopleMoonIsStartingClientRpc(); ((MonoBehaviour)this).InvokeRepeating("MiddleManFunction", 0f, (float)LunarAnomaliesManager.currentMoon.timeBetweenEachCall); } public void MiddleManFunction() { LunarAnomaliesManager.UpdateMoon(); } private void OnDestroy() { MonoBehaviourHelper.Instance.CancelInvokeMoonUpdate(); MonoBehaviour.Internal_CancelInvokeAll((MonoBehaviour)(object)this); } } public class MonoBehaviourHelper : MonoBehaviour { private static MonoBehaviourHelper instance; public static MonoBehaviourHelper Instance { get { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown if ((Object)(object)instance == (Object)null) { instance = Object.FindObjectOfType<MonoBehaviourHelper>(); if ((Object)(object)instance == (Object)null) { GameObject val = new GameObject("MonoBehaviourHelper"); instance = val.AddComponent<MonoBehaviourHelper>(); } } return instance; } } private void Awake() { if ((Object)(object)instance != (Object)null && (Object)(object)instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } instance = this; ((MonoBehaviour)this).InvokeRepeating("Middleman", 0f, 5f); Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } public void InvokeRepeatCallMoon(float x) { ((MonoBehaviour)this).InvokeRepeating("MiddlemanUpdateMoon", 0f, x); } public void CancelInvokeMoonUpdate() { ((MonoBehaviour)this).CancelInvoke("MiddlemanUpdateMoon"); } public void MiddlemanUpdateMoon() { Plugin.Logger.LogInfo((object)"We did do the update"); LunarAnomaliesManager.UpdateMoon(); } private void Middleman() { LunarAnomaliesManager.TryApplyingEffect(); } } [BepInPlugin("TheWeavers.LunarAnomalies", "LunarAnomalies", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger; public static AssetBundle? ModAssets; private readonly Harmony harmony = new Harmony("TheWeavers.LunarAnomalies"); private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; InitializeNetworkBehaviours(); string path = "lunaranomaliesmodassets"; string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), path); Logger.LogInfo((object)("Attempting to load AssetBundle from path: " + text)); if (!File.Exists(text)) { Logger.LogError((object)("AssetBundle file does not exist at path: " + text)); return; } ModAssets = AssetBundle.LoadFromFile(text); if ((Object)(object)ModAssets == (Object)null) { Logger.LogError((object)"Failed to load custom assets."); return; } Logger.LogInfo((object)"AssetBundle loaded successfully."); GameObject goldMoon = ModAssets.LoadAsset<GameObject>("GoldMoon"); GameObject blueMoon = ModAssets.LoadAsset<GameObject>("BlueMoon"); GameObject redMoon = ModAssets.LoadAsset<GameObject>("RedMoon"); LunarAnomaliesManager.SetMoon(delegate(HarvestMoon moon) { moon.Init(goldMoon); }); LunarAnomaliesManager.SetMoon(delegate(DiamondMoon moon) { moon.Init(blueMoon); }); LunarAnomaliesManager.SetMoon(delegate(BloodMoon moon) { moon.Init(redMoon); }); harmony.PatchAll(typeof(StartOfRoundPatch)); harmony.PatchAll(typeof(EntranceTeleport)); Logger.LogInfo((object)"Plugin TheWeavers.LunarAnomalies is loaded!"); } private static void InitializeNetworkBehaviours() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } typeof(EnemyAI).IsAssignableFrom(type); } } } [StaticNetcode] public static class LunarAnomaliesManager { public static GameObject Moon; public static List<Moon> moons = new List<Moon>(); public static Moon currentMoon; private static bool hasAlreadyTried = false; public static GameObject moonGameObject; public static void SetMoon<T>(Action<T> initializationAction) where T : Moon, new() { T val = new T(); initializationAction?.Invoke(val); moons.Add(val); } public static void TryApplyingEffect() { Plugin.Logger.LogInfo((object)RoundManager.Instance.timeScript.globalTime.ToString()); if (RoundManager.Instance.timeScript.globalTime >= 730f) { if (!hasAlreadyTried) { hasAlreadyTried = true; if (((NetworkBehaviour)RoundManager.Instance).IsHost) { ReachedNight(); } } } else { hasAlreadyTried = false; } } public static void ReachedNight() { if (!((Object)(object)moonGameObject == (Object)null)) { return; } moons.Reverse(); foreach (Moon moon in moons) { if (moon.precentageChanceSpawn >= Random.Range(0f, 100f)) { SpawnMoonClientRpc(moon.name); currentMoon = moon; break; } } } [ClientRpc] public static void SpawnMoonClientRpc(string name) { foreach (Moon moon in moons) { if (moon.name == name) { currentMoon = moon; moonGameObject = Object.Instantiate<GameObject>(moon.moonObject); } } } [ClientRpc] public static void TellPeopleMoonIsStartingClientRpc() { HUDManager.Instance.DisplayTip(currentMoon.headerText, currentMoon.messageMoon, true, false, "LC_Tip1"); } public static void StopUpdatingMoon() { Plugin.Logger.LogInfo((object)("Called Moon " + currentMoon.name + " intervale!")); ((MonoBehaviour)MonoBehaviourHelper.Instance).CancelInvoke("UpdateMoon"); } public static void UpdateMoon() { currentMoon.ApplyConstantEffect(); } } [StaticNetcode] public static class MoonsNetworkManageer { [ClientRpc] public static void ExtendDeadlineClientRpc(int days) { float timeUntilDeadline = TimeOfDay.Instance.timeUntilDeadline; TimeOfDay instance = TimeOfDay.Instance; instance.timeUntilDeadline += TimeOfDay.Instance.totalTime * (float)days; TimeOfDay.Instance.UpdateProfitQuotaCurrentTime(); TimeOfDay.Instance.SyncTimeClientRpc(TimeOfDay.Instance.globalTime, (int)TimeOfDay.Instance.timeUntilDeadline); } [ClientRpc] public static void ChangeScrapValueClientRpc() { GameObject[] array = GameObject.FindGameObjectsWithTag("PhysicsProp"); foreach (GameObject val in array) { PhysicsProp component = val.GetComponent<PhysicsProp>(); if ((Object)(object)component != (Object)null && ((GrabbableObject)component).isInFactory) { ((GrabbableObject)component).SetScrapValue(((GrabbableObject)component).scrapValue * 2); } } } [ClientRpc] public static void EndOfRoundClientRpc() { Plugin.Logger.LogInfo((object)"Destroying the moon on all clients!"); if ((Object)(object)LunarAnomaliesManager.moonGameObject != (Object)null) { Plugin.Logger.LogInfo((object)"Current mon found, Attempting destruction"); Object.Destroy((Object)(object)LunarAnomaliesManager.moonGameObject); LunarAnomaliesManager.StopUpdatingMoon(); } else if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<LightupScript>())) { Object.Destroy((Object)(object)((Component)Object.FindObjectOfType<LightupScript>()).gameObject); } } } internal static class P { internal static void Log(object data) { Plugin.Logger.LogInfo(data); } internal static void LogError(object data) { Plugin.Logger.LogError(data); } } public static class PluginInfo { public const string PLUGIN_GUID = "TheWeavers.LunarAnomalies"; public const string PLUGIN_NAME = "LunarAnomalies"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace LunarAnomalies.Patch { [HarmonyPatch(typeof(EntranceTeleport))] public class EntranceTeleport { [HarmonyPatch("TeleportPlayer")] [HarmonyPostfix] private static void PostFixStartFunction(EntranceTeleport __instance) { LightupScript lightupScript = Object.FindObjectOfType<LightupScript>(); if (GameNetworkManager.Instance.localPlayerController.isInsideFactory) { ((Behaviour)lightupScript.light).enabled = false; } else { ((Behaviour)lightupScript.light).enabled = true; } } } [HarmonyPatch(typeof(RoundManager))] internal class StartOfRoundPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void PostFixStartFunction(RoundManager __instance) { MonoBehaviourHelper instance = MonoBehaviourHelper.Instance; } [HarmonyPatch("UnloadSceneObjectsEarly")] [HarmonyPostfix] private static void PostFixStart(RoundManager __instance) { MoonsNetworkManageer.EndOfRoundClientRpc(); } } } namespace LunarAnomalies.MoonsScript { public class BloodMoon : Moon { public string name { get; set; } = "Blood Moon"; public Color color { get; set; } = new Color(224f, 29f, 20f, 255f); public GameObject moonObject { get; set; } public float precentageChanceSpawn { get; set; } = 10f; public int timeBetweenEachCall { get; set; } = 4; public string headerText { get; set; } = "The Blood Moon rises..."; public string messageMoon { get; set; } = "Beware the terrors that come with its crimson glow"; public void Init(GameObject gameObject) { moonObject = gameObject; } public void ApplyImmediateEffect() { } public void ApplyConstantEffect() { //IL_00d7: 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) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)RoundManager.Instance).IsHost || Object.FindObjectsOfType<EnemyAI>().Length > 30) { return; } if (Random.Range(0, 2) == 0) { Plugin.Logger.LogInfo((object)"Spawning Inside enemy"); List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>(); list.AddRange(RoundManager.Instance.currentLevel.Enemies); List<SpawnableEnemyWithRarity> list2 = list.Where((SpawnableEnemyWithRarity x) => !x.enemyType.isOutsideEnemy).ToList(); SpawnableEnemyWithRarity val = null; if (list2.Count > 0) { int index = Random.Range(0, list2.Count); val = list2[index]; RoundManager.Instance.SpawnEnemyGameObject(RoundManager.Instance.GetRandomNavMeshPositionInRadius(((Component)RoundManager.Instance.allEnemyVents[RandomNumberGenerator.GetInt32(RoundManager.Instance.allEnemyVents.Length)]).transform.position, 3f, default(NavMeshHit)), (float)Random.RandomRangeInt(0, 360), RoundManager.Instance.currentLevel.Enemies.IndexOf(val), val.enemyType); } else { Plugin.Logger.LogError((object)"No enemies match the criteria"); } return; } Plugin.Logger.LogInfo((object)"Spawning Outside enemy"); List<SpawnableEnemyWithRarity> list3 = new List<SpawnableEnemyWithRarity>(); list3.AddRange(RoundManager.Instance.currentLevel.OutsideEnemies); List<SpawnableEnemyWithRarity> list4 = list3.Where((SpawnableEnemyWithRarity x) => x.enemyType.isOutsideEnemy).ToList(); SpawnableEnemyWithRarity val2 = null; if (list4.Count > 0) { int index2 = Random.Range(0, list4.Count); val2 = list4[index2]; if (val2 == null) { Plugin.Logger.LogError((object)"Didn't find an Outside enemy"); } else { RoundManager.Instance.SpawnEnemyGameObject(RoundManager.Instance.GetRandomNavMeshPositionInRadius(RoundManager.Instance.outsideAINodes[Random.Range(0, RoundManager.Instance.outsideAINodes.Length)].transform.position, 10f, default(NavMeshHit)), (float)Random.RandomRangeInt(0, 360), RoundManager.Instance.currentLevel.Enemies.IndexOf(val2), val2.enemyType); } } else { Plugin.Logger.LogError((object)"No enemies match the criteria"); } } } public class DiamondMoon : Moon { public string name { get; set; } = "Diamond Moon"; public Color color { get; set; } = new Color(20f, 141f, 224f, 255f); public GameObject moonObject { get; set; } public float precentageChanceSpawn { get; set; } = 10f; public int timeBetweenEachCall { get; set; } = 60; public string headerText { get; set; } = "A Diamond Moon illuminates the night..."; public string messageMoon { get; set; } = "\nTreasures and fortunes await those brave enough to seek them."; public void Init(GameObject gameObject) { moonObject = gameObject; } public void ApplyImmediateEffect() { MoonsNetworkManageer.ChangeScrapValueClientRpc(); } public void ApplyConstantEffect() { } } public class HarvestMoon : Moon { public string name { get; set; } = "Harvest Moon"; public Color color { get; set; } = new Color(218f, 206f, 10f, 255f); public GameObject moonObject { get; set; } public float precentageChanceSpawn { get; set; } = 10f; public int timeBetweenEachCall { get; set; } = 4; public string headerText { get; set; } = "The Harvest Moon casts its golden light..."; public string messageMoon { get; set; } = "\nThe company is feeling generous"; public void Init(GameObject gameObject) { moonObject = gameObject; } public void ApplyImmediateEffect() { MoonsNetworkManageer.ExtendDeadlineClientRpc(1); } public void ApplyConstantEffect() { } } public interface Moon { string name { get; set; } Color color { get; set; } GameObject moonObject { get; set; } float precentageChanceSpawn { get; set; } int timeBetweenEachCall { get; set; } string headerText { get; set; } string messageMoon { get; set; } void Init(GameObject gameObject); void ApplyImmediateEffect(); void ApplyConstantEffect(); } } namespace TheWeavers.LunarAnomalies.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }