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 ValheimDRG v1.0.4
ValheimDRG.dll
Decompiled 8 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("FirstValheimMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("FirstValheimMod")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("489b05db-7afd-43d9-9c7f-b6663f92dbcb")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace FirstValheimMod; public class AssetLoader { private AssetBundle bundle; public void InitAssetBundle(string assetBundleName) { string text = Path.Combine(Path.Combine(Paths.PluginPath, "LrsGroup-ValheimDRG"), assetBundleName); bundle = AssetBundle.LoadFromFile(text); if ((Object)(object)bundle == (Object)null) { MyLogger.Error("Failed to load AssetBundle!"); } } public GameObject LoadAsset(string assetName) { GameObject obj = bundle.LoadAsset<GameObject>(assetName); if ((Object)(object)obj == (Object)null) { MyLogger.Error("Could not load prefab from AssetBundle!"); } return obj; } } public class Flashlight : MonoBehaviour { private AssetLoader loader; private GameObject FlareAsset; private List<PooledFlare> pool = new List<PooledFlare>(); private int poolSize = 20; private int currentIndex; public void Awake() { loader = new AssetLoader(); loader.InitAssetBundle("valheimdrg"); FlareAsset = loader.LoadAsset("Flare"); } public void SpawnFlare(Vector3 spawnPosition, Vector3 direction, float force = 15f) { //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_0070: 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) if (pool.Count == 0) { MyLogger.Error("Pool is null!"); return; } PooledFlare pooledFlare = pool[currentIndex]; if ((Object)(object)pooledFlare.GO == (Object)null) { MyLogger.Error("Pooled flare or its GameObject is null!"); return; } if (pooledFlare.GO.activeSelf) { pooledFlare.GO.SetActive(false); if ((Object)(object)pooledFlare.Rigidbody != (Object)null) { pooledFlare.Rigidbody.velocity = Vector3.zero; pooledFlare.Rigidbody.angularVelocity = Vector3.zero; } } pooledFlare.GO.transform.position = spawnPosition; pooledFlare.GO.transform.rotation = Quaternion.LookRotation(((Vector3)(ref direction)).normalized); pooledFlare.GO.SetActive(true); ((MonoBehaviour)this).StartCoroutine(pooledFlare.Disable()); if ((Object)(object)pooledFlare.Rigidbody != (Object)null) { pooledFlare.Rigidbody.AddForce(((Vector3)(ref direction)).normalized * force, (ForceMode)1); } currentIndex = (currentIndex + 1) % pool.Count; } public void InstantiateFlares(float flareStenght, string flareColor, float flareRange, float flareTimeToDisable) { //IL_010d: 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) MyLogger.Warn($"Flare Info \n Flare Strenght{flareStenght} Flare Color{flareColor} Flare Range{flareRange} Flare Time To Disable{flareTimeToDisable}"); Color color = default(Color); for (int i = 0; i < poolSize; i++) { GameObject val = Object.Instantiate<GameObject>(FlareAsset, ((Component)this).transform); if ((Object)(object)val == (Object)null) { MyLogger.Error("Failed to instantiate flare GameObject!"); continue; } PooledFlare pooledFlare = new PooledFlare(val, flareTimeToDisable); if ((Object)(object)pooledFlare.GO == (Object)null) { MyLogger.Warn("Instantiated Flare does not have a GmaObject"); } if (!ColorUtility.TryParseHtmlString(flareColor, ref color)) { MyLogger.Warn("Invalid flare color: " + flareColor); break; } Renderer component = pooledFlare.GO.GetComponent<Renderer>(); if ((Object)(object)component != (Object)null && component.materials.Length > 1) { Material[] materials = component.materials; materials[1].color = color; component.materials = materials; } if ((Object)(object)pooledFlare.Light != (Object)null) { pooledFlare.Light.intensity = flareStenght; pooledFlare.Light.range = flareRange; pooledFlare.Light.color = color; } MyLogger.Warn("Added a polledFlare to pool"); pool.Add(pooledFlare); } } } public class PooledFlare { [CompilerGenerated] private sealed class <Disable>d__5 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PooledFlare <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Disable>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown int num = <>1__state; PooledFlare pooledFlare = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(pooledFlare.time); <>1__state = 1; return true; case 1: <>1__state = -1; pooledFlare.GO.SetActive(false); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public GameObject GO; public Rigidbody Rigidbody; public Light Light; public float time; public PooledFlare(GameObject go, float timeToDisable) { GO = go; Rigidbody = go.GetComponent<Rigidbody>(); Light = go.GetComponentInChildren<Light>(); time = timeToDisable; GO.SetActive(false); } [IteratorStateMachine(typeof(<Disable>d__5))] public IEnumerator Disable() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Disable>d__5(0) { <>4__this = this }; } } public static class MyLogger { public static ManualLogSource Logger { get; private set; } public static void Init(string name) { Logger = Logger.CreateLogSource(name); } public static void Info(string msg) { ManualLogSource logger = Logger; if (logger != null) { logger.LogInfo((object)msg); } } public static void Warn(string msg) { ManualLogSource logger = Logger; if (logger != null) { logger.LogWarning((object)msg); } } public static void Error(string msg) { ManualLogSource logger = Logger; if (logger != null) { logger.LogError((object)msg); } } } [BepInPlugin("com.lorendos", "DRGFlashlight", "0.0.1")] public class Main : BaseUnityPlugin { private const string pluginGUID = "com.lorendos"; private const string pluginName = "DRGFlashlight"; private const string pluginVersion = "0.0.1"; public static ConfigEntry<KeyboardShortcut> FlareLightTrow; public static ConfigEntry<string> FlareLightColor; public static ConfigEntry<float> FlareLightStrenght; public static ConfigEntry<float> FlareLightRange; public static ConfigEntry<float> FlareLightTimeToDisable; private readonly Harmony HarmonyInstance = new Harmony("com.lorendos"); private GameObject flashlightGO; private Flashlight flashlight; public void Awake() { InitConfigs(); MyLogger.Init("DRGFlashlight"); MyLogger.Info("DRGFlashlight plugin loaded"); SceneManager.sceneLoaded += OnSceneLoaded; HarmonyInstance.PatchAll(Assembly.GetExecutingAssembly()); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (((Scene)(ref scene)).name == "main") { MyLogger.Warn("World scene loaded, creating FlashlightHandler..."); flashlightGO = new GameObject("Flashlight Handler"); SceneManager.MoveGameObjectToScene(flashlightGO, scene); flashlight = flashlightGO.AddComponent<Flashlight>(); flashlight.InstantiateFlares(FlareLightStrenght.Value, FlareLightColor.Value, FlareLightRange.Value, FlareLightTimeToDisable.Value); } } public void Update() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Player.m_localPlayer == (Object)null) && !((Object)(object)flashlight == (Object)null)) { IInputSystem current = UnityInput.Current; KeyboardShortcut value = FlareLightTrow.Value; if (current.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey)) { MyLogger.Info("Flashlight was thrown"); flashlight.SpawnFlare(((Component)Player.m_localPlayer).transform.position + 2f * Vector3.up, ((Component)GameCamera.instance).transform.forward); } } } private void InitConfigs() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) FlareLightTrow = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Flare", "TrowLight", KeyboardShortcut.Deserialize("F"), "Hotkey to throw flashlight"); FlareLightColor = ((BaseUnityPlugin)this).Config.Bind<string>("Flare", "FlareColor", "#FFAA00", "Color of the light"); FlareLightStrenght = ((BaseUnityPlugin)this).Config.Bind<float>("Flare", "FlareLightStrenght", 1.5f, "Strenght of the flare color"); FlareLightRange = ((BaseUnityPlugin)this).Config.Bind<float>("Flare", "FlareLightRange", 10f, "Range of the flare"); FlareLightTimeToDisable = ((BaseUnityPlugin)this).Config.Bind<float>("Flare", "FlareLightTimeToDisable", 20f, "Time before the flare disables itself"); } }