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 Rune Magic v1.3.2
RuneMagic.dll
Decompiled 5 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using SoftReferenceableAssets; using Steamworks; using TMPro; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; using UnityEngine; using UnityEngine.Experimental.Rendering; using UnityEngine.Rendering; using UnityEngine.UI; using ValheimMod.External; using ValheimMod.External.MiniJSON; using ValheimMod.Monobehaviours; using ValheimMod.Monobehaviours.Lava; using ValheimMod.Monobehaviours.Runes; using ValheimMod.Patches; using ValheimMod.Profiling; using ValheimMod.ScriptableObjects; using ValheimMod.Setup; using ValheimMod.Utilities; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ValheimMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ValheimMod")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a1efb0fd-0465-47c9-8041-8ba880e78354")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] public class DeferredDecalSystem { private static DeferredDecalSystem m_Instance; internal HashSet<Decal> m_DecalsDiffuse = new HashSet<Decal>(); internal HashSet<Decal> m_DecalsNormals = new HashSet<Decal>(); internal HashSet<Decal> m_DecalsBoth = new HashSet<Decal>(); public static DeferredDecalSystem instance { get { if (m_Instance == null) { m_Instance = new DeferredDecalSystem(); } return m_Instance; } } public void AddDecal(Decal d) { RemoveDecal(d); } public void RemoveDecal(Decal d) { m_DecalsDiffuse.Remove(d); m_DecalsNormals.Remove(d); m_DecalsBoth.Remove(d); } } [ExecuteInEditMode] public class DeferredDecalRenderer : MonoBehaviour { public Mesh m_CubeMesh; private Dictionary<Camera, CommandBuffer> m_Cameras = new Dictionary<Camera, CommandBuffer>(); public void OnDisable() { foreach (KeyValuePair<Camera, CommandBuffer> camera in m_Cameras) { if (Object.op_Implicit((Object)(object)camera.Key)) { camera.Key.RemoveCommandBuffer((CameraEvent)6, camera.Value); } } } public void OnWillRenderObject() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_009a: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0111: 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_0147: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0189: 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_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) if (!((Component)this).gameObject.activeInHierarchy || !((Behaviour)this).enabled) { OnDisable(); return; } Camera current = Camera.current; if (!Object.op_Implicit((Object)(object)current)) { return; } CommandBuffer val = null; if (m_Cameras.ContainsKey(current)) { val = m_Cameras[current]; val.Clear(); } else { val = new CommandBuffer(); val.name = "Deferred decals"; m_Cameras[current] = val; current.AddCommandBuffer((CameraEvent)6, val); } DeferredDecalSystem instance = DeferredDecalSystem.instance; int num = Shader.PropertyToID("_NormalsCopy"); val.GetTemporaryRT(num, -1, -1); val.Blit(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)12), RenderTargetIdentifier.op_Implicit(num)); val.SetRenderTarget(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)10), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2)); foreach (Decal item in instance.m_DecalsDiffuse) { val.DrawMesh(m_CubeMesh, ((Component)item).transform.localToWorldMatrix, item.m_Material); } val.SetRenderTarget(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)12), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2)); foreach (Decal decalsNormal in instance.m_DecalsNormals) { val.DrawMesh(m_CubeMesh, ((Component)decalsNormal).transform.localToWorldMatrix, decalsNormal.m_Material); } RenderTargetIdentifier[] array = (RenderTargetIdentifier[])(object)new RenderTargetIdentifier[2] { RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)10), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)12) }; val.SetRenderTarget(array, RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2)); foreach (Decal item2 in instance.m_DecalsBoth) { val.DrawMesh(m_CubeMesh, ((Component)item2).transform.localToWorldMatrix, item2.m_Material); } val.ReleaseTemporaryRT(num); } } namespace ValheimMod { public class Analytics { private class AnalyticsData { private Dictionary<string, string> data = new Dictionary<string, string>(); public string this[string key] { get { return data[key]; } set { data[key] = value; } } public void Add(string name, string value) { if (data.ContainsKey(name)) { throw new Exception("Attempting to send duplicate key: " + name); } if (name.Contains(",") || value.Contains(",")) { throw new Exception("Entry " + name + ":" + value + " contains commas"); } data.Add(name, value); } public bool ContainsKey(string name) { return data.ContainsKey(name); } public Dictionary<string, string> getDataForPost() { HashSet<string> hashSet = new HashSet<string>(); string text = ""; string text2 = ""; List<string> list = data.Keys.OrderBy((string k) => k).ToList(); foreach (string item in list) { text = text + item + ","; text2 = text2 + data[item] + ","; ValheimMod.DevModeLog(item + ":" + data[item]); } if (text.EndsWith(",")) { text = text.Substring(0, text.Length - 1); text2 = text2.Substring(0, text2.Length - 1); } ValheimMod.DevModeLog("Body size (bytes): " + Encoding.UTF8.GetByteCount(text2)); Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("header", text); dictionary.Add("body", text2); return dictionary; } } private const string PLAYER_PREFS_UUID_KEY = "runemagic-uuid"; private readonly List<string> CONFIG_ENTRIES_TO_SEND = new List<string> { "RepairRune_HealRate", "RepairRune_EffectRadius", "runestoneMaxStoredEnergy", "runestoneSecondsToFullCharge", "runestoneUnlockNewRuneChance", "energyCost_runemagic_passive_WaterWalking-hotWaterCostMultiplier", "energyCost_runemagic_passive_WaterWalking-lavaCostMultiplier" }; private Dictionary<string, int> placedRunes = new Dictionary<string, int>(); private Dictionary<string, int> removedRunes = new Dictionary<string, int>(); private Dictionary<string, List<string>> terminalCommandsRun = new Dictionary<string, List<string>>(); private Dictionary<string, float> passiveRuneActiveTime = new Dictionary<string, float>(); public bool otherPlayersConnected; public bool wasPvpDamageTaken; public HashSet<string> exceptions = new HashSet<string>(); private Dictionary<string, string> uniqueEngravedRunesLoaded = new Dictionary<string, string>(); public Analytics() { foreach (string analyticsPieceName in ValheimMod.getAnalyticsPieceNames()) { if (!placedRunes.ContainsKey(analyticsPieceName)) { placedRunes.Add(analyticsPieceName, 0); } } foreach (string engravedRunePrefabName in ValheimMod.getEngravedRunePrefabNames()) { removedRunes.Add(engravedRunePrefabName, 0); } terminalCommandsRun.Add("discoverRune", new List<string>()); terminalCommandsRun.Add("forgetRune", new List<string>()); foreach (StatusEffect registeredStatusEffect in CustomContentSetupHandler.RegisteredStatusEffects) { passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name, 0f); if (((object)registeredStatusEffect).GetType() == typeof(SE_WaterWalking)) { passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name + "-hot", 0f); passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name + "-cold", 0f); passiveRuneActiveTime.Add(((Object)registeredStatusEffect).name + "-lava", 0f); } } } public void piecePlaced(string name) { if (placedRunes.ContainsKey(name)) { placedRunes[name]++; } } public void engravedRuneRemoved(string name) { if (removedRunes.ContainsKey(name)) { removedRunes[name]++; } } public void registerUniqueRune(string name, ZDO zdo) { uniqueEngravedRunesLoaded[((object)(ZDOID)(ref zdo.m_uid)).ToString()] = name; } public void terminalCommandRun(string command, string args) { if (terminalCommandsRun.ContainsKey(command)) { terminalCommandsRun[command].Add(args.Replace(",", "..")); } } public void updatePassiveRuneTime(StatusEffect se, float dt) { if (passiveRuneActiveTime.ContainsKey(((Object)se).name)) { passiveRuneActiveTime[((Object)se).name] += dt; if (((object)se).GetType() == typeof(SE_WaterWalking)) { bool flag = IceTimedDestruction.anyInstancesActiveForPlayer(Player.m_localPlayer); bool flag2 = se.m_character.InLava(); bool flag3 = SE_WaterWalking.latestHotWaterFactor > 0f && flag; bool flag4 = SE_WaterWalking.latestColdWaterFactor > 0f && flag; passiveRuneActiveTime[((Object)se).name + "-hot"] += (flag3 ? dt : 0f); passiveRuneActiveTime[((Object)se).name + "-cold"] += (flag4 ? dt : 0f); passiveRuneActiveTime[((Object)se).name + "-lava"] += (flag2 ? dt : 0f); } } } public void sendAnalytics() { try { AnalyticsData analyticsData = getAnalyticsData(); postDataAsync(ConfigLoader.getString("analytics_address"), analyticsData.getDataForPost()); } catch (Exception ex) { sendErrorAnalytics(ex); } ValheimMod.analytics = new Analytics(); } private void sendErrorAnalytics(Exception ex) { try { Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("analyticsFailure", getVersion() + " : " + getValheimVersion() + " : " + ex.ToString().Replace(',', '_')); postDataAsync(ConfigLoader.getString("analytics_error_address"), dictionary); } catch (Exception ex2) { ValheimMod.DevModeLog(ex2); } } private void postDataAsync(string address, Dictionary<string, string> data) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; byte[] bytes = FormUrlEncoder.GetContentByteArray(data); request.BeginGetRequestStream(delegate(IAsyncResult ar) { try { Stream stream = request.EndGetRequestStream(ar); stream.Write(bytes, 0, bytes.Length); stream.Close(); using ((HttpWebResponse)request.GetResponse()) { } } catch (Exception) { } }, null); } private AnalyticsData getAnalyticsData() { AnalyticsData analyticsData = new AnalyticsData(); appendPlacedAndRemovedRunes(analyticsData); appendUniqueEngravedRunes(analyticsData); appendConfigEntries(analyticsData); appendPassiveRuneTimes(analyticsData); analyticsData.Add("version", getVersion()); analyticsData.Add("isPTR", toString(isPTRBranch())); analyticsData.Add("valheimVersion", getValheimVersion()); analyticsData.Add("worldUid", getWorldUid()); bool flag = ZNet.instance.IsServer(); analyticsData.Add("isMultiplayerServer", toString(flag && otherPlayersConnected)); analyticsData.Add("isMultiplayerClient", toString(!flag)); analyticsData.Add("pvp", getPVPStatus(Player.m_localPlayer)); analyticsData.Add("numRuneFocus", getRuneFocusCount().ToString()); analyticsData.Add("compShadSupport", toString(SystemInfo.supportsComputeShaders && SystemInfo.supportsAsyncGPUReadback)); analyticsData.Add("uniqueId", getUniqueId()); analyticsData.Add("pvpDmg", toString(wasPvpDamageTaken)); analyticsData.Add("allUnlocked", toString(ConfigLoader.getBool("allRunesStartUnlocked"))); analyticsData.Add("canopyHidden", toString(ConfigLoader.getInt("canopyRune_visualQuality") == 0)); analyticsData.Add("canopyQuality", ConfigLoader.getInt("canopyRune_visualQuality").ToString()); analyticsData.Add("rangeExtensionOff", toString(ConfigLoader.getBool("disableRangeExtensionForLargePieces"))); appendEngravedRunes(analyticsData); analyticsData.Add("exceptions", string.Join(" +++ ", exceptions).Replace("\n", "\\n").Replace("\r", "\\r") .Replace(',', '_')); return analyticsData; } private void appendEngravedRunes(AnalyticsData holder) { foreach (string engravedRunePrefabName in ValheimMod.getEngravedRunePrefabNames()) { List<ZDO> list = new List<ZDO>(); int num = 0; int num2 = -1; try { if (ZDOMan.instance != null) { while (!ZDOMan.instance.GetAllZDOsWithPrefabIterative(engravedRunePrefabName, list, ref num)) { } num2 = list.Count(); } } catch (IndexOutOfRangeException) { } catch (NullReferenceException) { } holder.Add("worldCount-" + engravedRunePrefabName, num2.ToString()); } } private void appendPlacedAndRemovedRunes(AnalyticsData holder) { foreach (string key in placedRunes.Keys) { holder.Add("placed-" + key, placedRunes[key].ToString()); } foreach (string key2 in removedRunes.Keys) { holder.Add("removed-" + key2, removedRunes[key2].ToString()); } } private void appendUniqueEngravedRunes(AnalyticsData holder) { foreach (string engravedRunePrefabName in ValheimMod.getEngravedRunePrefabNames()) { holder.Add("uniqueLoaded-" + engravedRunePrefabName, "0"); } foreach (string key in uniqueEngravedRunesLoaded.Keys) { string text = uniqueEngravedRunesLoaded[key]; string text2 = "uniqueLoaded-" + text; if (holder.ContainsKey(text2)) { holder[text2] = (int.Parse(holder[text2]) + 1).ToString(); } } } private void appendConfigEntries(AnalyticsData holder) { foreach (string key in terminalCommandsRun.Keys) { holder.Add("cmd-" + key, string.Join(":", terminalCommandsRun[key])); } foreach (RunemagicPieceConfig runemagicPieceConfig in ValheimMod.runemagicPieceConfigs) { bool value = runemagicPieceConfig.isEnabled(); holder.Add("enabled-" + runemagicPieceConfig.pieceName, toString(value)); if (ConfigLoader.containsKey("energyCost_" + runemagicPieceConfig.pieceName)) { holder.Add("energyCost-" + runemagicPieceConfig.pieceName, ConfigLoader.getString("energyCost_" + runemagicPieceConfig.pieceName)); } } foreach (string item in CONFIG_ENTRIES_TO_SEND) { holder.Add("cfg-" + item, ConfigLoader.getString(item)); } } private void appendPassiveRuneTimes(AnalyticsData holder) { foreach (string key in passiveRuneActiveTime.Keys) { holder.Add("passiveInUse-" + key, Mathf.RoundToInt(passiveRuneActiveTime[key]).ToString()); } } private string getPVPStatus(Player p) { if ((Object)(object)p == (Object)null) { return "N/A"; } try { return toString(((Character)p).IsPVPEnabled()); } catch (NullReferenceException) { return "N/A"; } } private static string getVersion() { string text = "1.3.2"; if (ValheimMod.PLATFORM == ValheimMod.Platform.NEXUS_MODS) { text += "-NM"; } else if (ValheimMod.PLATFORM == ValheimMod.Platform.THUNDERSTORE) { text += "-TS"; } if (ValheimMod.DEV_MODE) { text += "-devmode"; } return text; } private string getUniqueId() { if (!PlayerPrefs.HasKey("runemagic-uuid")) { PlayerPrefs.SetString("runemagic-uuid", Guid.NewGuid().ToString()); } return PlayerPrefs.GetString("runemagic-uuid"); } private string toString(bool value) { if (!value) { return "f"; } return "t"; } private int getRuneFocusCount() { if ((Object)(object)Player.m_localPlayer == (Object)null || ((Humanoid)Player.m_localPlayer).GetInventory() == null) { return 0; } Inventory inventory = ((Humanoid)Player.m_localPlayer).GetInventory(); return inventory.CountItems("$item_runemagic_runefocus", -1, true); } private string getValheimVersion() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) try { GameVersion currentVersion = Version.CurrentVersion; string text = ((object)(GameVersion)(ref currentVersion)).ToString(); if (isPTRBranch()) { text += "-ptr"; } return text; } catch (Exception ex) { ValheimMod.DevModeLog(ex); } return "unknown"; } private bool isPTRBranch() { try { return getBranch().Equals("public-test"); } catch (Exception) { return false; } } private string getBranch() { try { string result = default(string); if (SteamApps.GetCurrentBetaName(ref result, 512)) { return result; } return ""; } catch (Exception) { return "unknown"; } } private string getWorldUid() { if (ZNetPatch.CurrentWorldUID != 0L) { byte[] bytes = BitConverter.GetBytes(ZNetPatch.CurrentWorldUID); return Convert.ToBase64String(bytes); } return ""; } } internal class BoundingCircle { public Vector2 center; public float radius; public BoundingCircle(Vector2 center, float radius) { //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) this.center = center; this.radius = radius; } public BoundingCircle(float x, float y, float radius) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) center = new Vector2(x, y); this.radius = radius; } public static BoundingCircle minimumCircle(IEnumerable<Vector2> points) { HashSet<Vector2> points2 = new HashSet<Vector2>(points); return welzlInner(points2, new HashSet<Vector2>()); } private static BoundingCircle welzlInner(HashSet<Vector2> points, HashSet<Vector2> boundary) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) //IL_0030: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (points.Count() == 0 || boundary.Count() == 3) { return trivial(boundary); } Vector2 val = points.First(); points.Remove(val); BoundingCircle boundingCircle = welzlInner(points, boundary); if (boundingCircle.contains(val)) { points.Add(val); return boundingCircle; } boundary.Add(val); BoundingCircle result = welzlInner(points, boundary); points.Add(val); boundary.Remove(val); return result; } public bool contains(Vector2 p) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) float num = p.x - center.x; float num2 = p.y - center.y; return num * num + num2 * num2 < radius * radius; } public static BoundingCircle trivial(IEnumerable<Vector2> points) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) List<Vector2> list = new List<Vector2>(points); if (points.Count() == 3) { return trivial3(list[0], list[1], list[2]); } if (points.Count() == 2) { return trivial2(list[0], list[1]); } if (points.Count() == 1) { return new BoundingCircle(list[0], 0f); } if (points.Count() == 0) { return new BoundingCircle(0f, 0f, 0f); } throw new Exception("Can't have a trivial circle with more than 3 points: " + points.Count()); } public static BoundingCircle trivial2(Vector2 a, Vector2 b) { //IL_0002: 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_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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) Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor((a.x + b.x) / 2f, (a.y + b.y) / 2f); float num = a.x - val.x; float num2 = a.y - val.y; float num3 = (float)Math.Sqrt(num * num + num2 * num2); return new BoundingCircle(val, num3); } public static BoundingCircle trivial3(Vector2 a, Vector2 b, Vector2 c) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_002a: 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_0039: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_011a: 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_0126: Unknown result type (might be due to invalid IL or missing references) float num = b.x - a.x; float num2 = b.y - a.y; float num3 = c.x - a.x; float num4 = c.y - a.y; float num5 = num * (a.x + b.x) + num2 * (a.y + b.y); float num6 = num3 * (a.x + c.x) + num4 * (a.y + c.y); float num7 = 2f * (num * (c.y - b.y) - num2 * (c.x - b.x)); float num10; float num11; if ((double)Math.Abs(num7) < 1E-06) { float num8 = Math.Min(a.x, Math.Min(b.x, c.x)); float num9 = Math.Min(a.y, Math.Min(b.y, c.y)); num10 = (Math.Max(a.x, Math.Max(b.x, c.x)) - num8) * 0.5f; num11 = (Math.Max(a.y, Math.Max(b.y, c.y)) - num9) * 0.5f; return new BoundingCircle(num8 + num10, num9 + num11, (float)Math.Sqrt(num10 * num10 + num11 * num11)); } float num12 = (num4 * num5 - num2 * num6) / num7; float num13 = (num * num6 - num3 * num5) / num7; num10 = num12 - a.x; num11 = num13 - a.y; float num14 = (float)Math.Sqrt(num10 * num10 + num11 * num11); return new BoundingCircle(num12, num13, num14); } } public class BoundingSphere { public Vector3 center; public float radius; public BoundingSphere(Vector3 aCenter, float aRadius) { //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) center = aCenter; radius = aRadius; } public static BoundingSphere Calculate(Renderer rend) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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_0018: 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_0026: Unknown result type (might be due to invalid IL or missing references) Bounds bounds = rend.bounds; Vector3 aCenter = ((Bounds)(ref bounds)).center; bounds = rend.bounds; Vector3 extents = ((Bounds)(ref bounds)).extents; float magnitude = ((Vector3)(ref extents)).magnitude; return new BoundingSphere(aCenter, magnitude); } public static BoundingSphere Calculate(GameObject obj) { Renderer[] componentsInChildren = obj.GetComponentsInChildren<Renderer>(true); BoundingSphere boundingSphere = null; Renderer[] array = componentsInChildren; foreach (Renderer rend in array) { if (boundingSphere == null) { boundingSphere = Calculate(rend); continue; } BoundingSphere boundingSphere2 = Calculate(rend); if (boundingSphere2.radius > boundingSphere.radius) { boundingSphere = boundingSphere2; } } return boundingSphere; } public static BoundingSphere Calculate(Transform xform, IEnumerable<Vector3> aPoints) { //IL_0000: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_001f: 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_0025: 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) //IL_0028: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005b: 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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: 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_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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_006d: 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_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0124: 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_0087: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //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_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) Vector3 val2; Vector3 val; Vector3 val3 = (val2 = (val = Vector3.one * float.PositiveInfinity)); Vector3 val5; Vector3 val4; Vector3 val6 = (val5 = (val4 = Vector3.one * float.NegativeInfinity)); foreach (Vector3 aPoint in aPoints) { Vector3 val7 = xform.TransformPoint(aPoint); if (val7.x < val3.x) { val3 = val7; } if (val7.x > val6.x) { val6 = val7; } if (val7.y < val2.y) { val2 = val7; } if (val7.y > val5.y) { val5 = val7; } if (val7.z < val.z) { val = val7; } if (val7.z > val4.z) { val4 = val7; } } Vector3 val8 = val6 - val3; float sqrMagnitude = ((Vector3)(ref val8)).sqrMagnitude; val8 = val5 - val2; float sqrMagnitude2 = ((Vector3)(ref val8)).sqrMagnitude; val8 = val4 - val; float sqrMagnitude3 = ((Vector3)(ref val8)).sqrMagnitude; Vector3 val9 = val3; Vector3 val10 = val6; float num = sqrMagnitude; if (sqrMagnitude2 > num) { num = sqrMagnitude2; val9 = val2; val10 = val5; } if (sqrMagnitude3 > num) { val9 = val; val10 = val4; } Vector3 val11 = (val9 + val10) * 0.5f; val8 = val10 - val11; float num2 = ((Vector3)(ref val8)).sqrMagnitude; float num3 = Mathf.Sqrt(num2); foreach (Vector3 aPoint2 in aPoints) { Vector3 val12 = xform.TransformPoint(aPoint2); val8 = val12 - val11; float sqrMagnitude4 = ((Vector3)(ref val8)).sqrMagnitude; if (sqrMagnitude4 > num2) { float num4 = Mathf.Sqrt(sqrMagnitude4); num3 = (num3 + num4) * 0.5f; num2 = num3 * num3; float num5 = num4 - num3; val11 = (num3 * val11 + num5 * val12) / num4; } } return new BoundingSphere(val11, num3); } } public static class ExtensionMethods { public static TValue GetValueOrDefault<TKey, TValue>(this IDictionary<TKey, TValue> container, TKey key, TValue defaultValue) { if (!container.ContainsKey(key)) { return defaultValue; } return container[key]; } public static void AddToKey<TKey>(this IDictionary<TKey, int> container, TKey key, int toAdd) { container[key] = container.GetValueOrDefault(key, 0) + toAdd; } public static void AddToKey<TKey>(this IDictionary<TKey, float> container, TKey key, float toAdd) { container[key] = container.GetValueOrDefault(key, 0f) + toAdd; } public static void AddToKey<TKey>(this IDictionary<TKey, double> container, TKey key, double toAdd) { container[key] = container.GetValueOrDefault(key, 0.0) + toAdd; } public static bool ContainsRegex(this IList<string> container, string keyRegex) { Regex regex = new Regex(keyRegex); foreach (string item in container) { Match match = regex.Match(item); if (match.Success) { return true; } } return false; } public static void Merge(this IDictionary<string, Measurement> dict, IDictionary<string, Measurement> other) { foreach (string key in other.Keys) { if (!dict.ContainsKey(key)) { dict.Add(key, other[key]); } else { dict[key].Merge(other[key]); } } } public static string RemoveWhitespace(this string str) { return string.Join("", str.Split((string[]?)null, StringSplitOptions.RemoveEmptyEntries)); } public static Vector2 GetXZVector(this Vector3 vec) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return new Vector2(vec.x, vec.z); } public static Vector3 GetXYZVector(this Vector4 vec) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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) return new Vector3(vec.x, vec.y, vec.z); } } public class ColorUtils { private const byte k_MaxByteForOverexposedColor = 191; public static void DecomposeHdrColor(Color linearColorHdr, out Color32 baseLinearColor, out float exposure) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) baseLinearColor = Color32.op_Implicit(linearColorHdr); float maxColorComponent = ((Color)(ref linearColorHdr)).maxColorComponent; if (maxColorComponent == 0f || (maxColorComponent <= 1f && maxColorComponent >= 0.003921569f)) { exposure = 0f; baseLinearColor.r = (byte)Mathf.RoundToInt(linearColorHdr.r * 255f); baseLinearColor.g = (byte)Mathf.RoundToInt(linearColorHdr.g * 255f); baseLinearColor.b = (byte)Mathf.RoundToInt(linearColorHdr.b * 255f); } else { float num = 191f / maxColorComponent; exposure = Mathf.Log(255f / num) / Mathf.Log(2f); baseLinearColor.r = Math.Min((byte)191, (byte)Mathf.CeilToInt(num * linearColorHdr.r)); baseLinearColor.g = Math.Min((byte)191, (byte)Mathf.CeilToInt(num * linearColorHdr.g)); baseLinearColor.b = Math.Min((byte)191, (byte)Mathf.CeilToInt(num * linearColorHdr.b)); } } public static Color fromHSVVector(Vector4 vec, bool zeroToOne) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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) if (!zeroToOne) { vec.x /= 360f; vec.y /= 100f; vec.z /= 100f; vec.w /= 100f; } Color result = Color.HSVToRGB(vec.x, vec.y, vec.z); result.a = vec.w; return result; } public static Color applyIntensity(Color color, float intensity) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Pow(2f, intensity); return color * num; } public static Color fromVec(Vector4 vec) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: 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_0018: Unknown result type (might be due to invalid IL or missing references) return new Color(vec.x, vec.y, vec.z, vec.w); } public static Texture2D duplicateTexture(Texture2D source) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) RenderTexture temporary = RenderTexture.GetTemporary(((Texture)source).width, ((Texture)source).height, 0, (RenderTextureFormat)7, (RenderTextureReadWrite)1); Graphics.Blit((Texture)(object)source, temporary); RenderTexture active = RenderTexture.active; RenderTexture.active = temporary; Texture2D val = new Texture2D(((Texture)source).width, ((Texture)source).height); val.ReadPixels(new Rect(0f, 0f, (float)((Texture)temporary).width, (float)((Texture)temporary).height), 0, 0); RenderTexture.active = active; RenderTexture.ReleaseTemporary(temporary); return val; } public static Texture2D GetRenderTexturePixels(RenderTexture rt) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_002a: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) RenderTexture active = RenderTexture.active; RenderTexture.active = rt; Texture2D val = new Texture2D(((Texture)rt).width, ((Texture)rt).height, GraphicsFormatUtility.GetTextureFormat(rt.graphicsFormat), false); val.ReadPixels(new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), 0, 0); RenderTexture.active = active; return val; } } public class DebugUtils { public static void LogIfNearPlayer(string content, Vector3 pos, float distance = 10f) { //IL_0018: 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) if (!((Object)(object)Player.m_localPlayer == (Object)null) && Utils.DistanceSqr(((Component)Player.m_localPlayer).transform.position, pos) <= distance * distance) { LogUtils.Log(content); } } private static void getDebugObjectDetails() { PlayerRaycast playerRaycast = new PlayerRaycast(Player.m_localPlayer); if (playerRaycast.hit) { if ((Object)(object)((RaycastHit)(ref playerRaycast.hitInfo)).collider != (Object)null) { GameObject gameObject = ((Component)((RaycastHit)(ref playerRaycast.hitInfo)).collider).gameObject; printCompleteGameObject(gameObject); } else { LogUtils.Log("Raycast returned true, but no hit"); } } else { LogUtils.Log("Raycast returned false"); } } public static void printCompleteGameObject(GameObject obj) { while ((Object)(object)obj.transform.parent != (Object)null && !((Object)((Component)obj.transform.parent).gameObject).name.Equals("_NetSceneRoot")) { obj = ((Component)obj.transform.parent).gameObject; } printGameObjectDebugInfoHierarchy(obj, 0); } public static void printGameObjectDebugInfoHierarchy(GameObject obj, int level) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown string text = new string(' ', level * 6); if ((Object)(object)obj == (Object)null) { LogUtils.Log(text + "Gameobject is null"); return; } printGameObjectDebugInfo(text, obj); if (obj.transform.childCount < 100) { foreach (Transform item in obj.transform) { Transform val = item; printGameObjectDebugInfoHierarchy(((Component)val).gameObject, level + 1); } return; } LogUtils.Log($"Too many children: {obj.transform.childCount}"); } public static void printGameObjectDebugInfo(string prefix, GameObject obj) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) LogUtils.Log($"{prefix}Gameobject: {((Object)obj).name}, active {obj.activeInHierarchy}, localPos {obj.transform.localPosition}, worldPos {obj.transform.position}"); LogUtils.Log($"{prefix}Layer: {obj.layer}, name: {LayerMask.LayerToName(obj.layer)}"); Component[] components = obj.GetComponents(typeof(Component)); Component[] array = components; foreach (Component val in array) { if (((object)val).ToString().Contains("(UnityEngine.Transform)")) { continue; } LogUtils.Log(prefix + " Attached component: " + ((object)val).ToString()); Renderer val2 = (Renderer)(object)((val is Renderer) ? val : null); if (val2 != null) { Material[] materials = val2.materials; foreach (Material val3 in materials) { LogUtils.Log(prefix + $"Material {((Object)val3).name} Shader: {((Object)val3.shader).name} ShaderInstId: {((Object)val3.shader).GetInstanceID()}"); } } } } public static void printParticleSystemDebugInfoHierarchy(GameObject obj, int level = 0) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown string text = new string(' ', level * 6); if ((Object)(object)obj == (Object)null) { LogUtils.Log(text + "Gameobject is null"); return; } printParticleSystemDebugInfo(text, obj); if (obj.transform.childCount < 100) { foreach (Transform item in obj.transform) { Transform val = item; printParticleSystemDebugInfoHierarchy(((Component)val).gameObject, level + 1); } return; } LogUtils.Log($"Too many children: {obj.transform.childCount}"); } public static void printParticleSystemDebugInfo(string prefix, GameObject obj) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) LogUtils.Log($"{prefix}Gameobject: {((Object)obj).name}, active {obj.activeInHierarchy}, activeSelf {obj.activeSelf}"); LogUtils.Log($"{prefix} localPos {obj.transform.localPosition}, worldPos {obj.transform.position}"); LogUtils.Log($"{prefix} localRot {obj.transform.localEulerAngles}, worldRot {obj.transform.eulerAngles}"); ParticleSystem[] components = obj.GetComponents<ParticleSystem>(); ParticleSystem[] array = components; foreach (ParticleSystem val in array) { LogUtils.Log($"{prefix} playing {val.isPlaying}, paused {val.isPaused}, stopped {val.isStopped}, emitting {val.isEmitting}, alive {val.IsAlive()}"); MainModule main = val.main; EmissionModule emission = val.emission; object[] obj2 = new object[4] { prefix, ((MainModule)(ref main)).maxParticles, val.particleCount, null }; MinMaxCurve rateOverTime = ((EmissionModule)(ref emission)).rateOverTime; obj2[3] = ((MinMaxCurve)(ref rateOverTime)).constant; LogUtils.Log(string.Format("{0} maxParticles {1}, current# {2}, emission {3}", obj2)); LogUtils.Log($"{prefix} culling {((MainModule)(ref main)).cullingMode} emissionEnabled {((EmissionModule)(ref emission)).enabled}"); CustomDataModule customData = val.customData; if (((CustomDataModule)(ref customData)).enabled) { MinMaxGradient color = ((CustomDataModule)(ref customData)).GetColor((ParticleSystemCustomData)0); MinMaxGradient color2 = ((CustomDataModule)(ref customData)).GetColor((ParticleSystemCustomData)1); LogUtils.Log(prefix + " CustomData: Grad1: " + minMaxGradientToString(color) + " Grad2: " + minMaxGradientToString(color2)); } else { LogUtils.Log(prefix + " CustomData disabled"); } } ParticleSystemRenderer component = obj.GetComponent<ParticleSystemRenderer>(); if ((Object)(object)component == (Object)null) { LogUtils.Log(prefix + " null ParticleSystemRenderer"); return; } List<ParticleSystemVertexStream> list = new List<ParticleSystemVertexStream>(); component.GetActiveVertexStreams(list); foreach (ParticleSystemVertexStream item in list) { ParticleSystemVertexStream current = item; LogUtils.Log(prefix + " VertexData: " + ((object)(ParticleSystemVertexStream)(ref current)).ToString()); } } public static string minMaxGradientToString(MinMaxGradient mmg) { //IL_0002: 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_0028: Invalid comparison between Unknown and I4 //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Invalid comparison between Unknown and I4 //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Invalid comparison between Unknown and I4 if ((int)((MinMaxGradient)(ref mmg)).mode == 0) { return $"MinMaxGradient({((MinMaxGradient)(ref mmg)).color})"; } if ((int)((MinMaxGradient)(ref mmg)).mode == 2) { return $"MinMaxGradient({((MinMaxGradient)(ref mmg)).colorMin}, {((MinMaxGradient)(ref mmg)).colorMax})"; } if ((int)((MinMaxGradient)(ref mmg)).mode == 1) { return "MinMaxGradient(alpha " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradient.alphaKeys.Select((GradientAlphaKey x) => gradientKeyToString(x))) + " : color " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradient.colorKeys.Select((GradientColorKey x) => gradientKeyToString(x))) + ")"; } if ((int)((MinMaxGradient)(ref mmg)).mode == 3) { return "MinMaxGradient(alpha1 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMin.alphaKeys.Select((GradientAlphaKey x) => gradientKeyToString(x))) + " : color1 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMin.colorKeys.Select((GradientColorKey x) => gradientKeyToString(x))) + " : alpha2 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMax.alphaKeys.Select((GradientAlphaKey x) => gradientKeyToString(x))) + " : color2 " + string.Join(",", ((MinMaxGradient)(ref mmg)).gradientMax.colorKeys.Select((GradientColorKey x) => gradientKeyToString(x))) + ")"; } return "MinMaxGradient(RandomColor)"; } public static string gradientKeyToString(GradientAlphaKey key) { //IL_000a: 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) return "{" + $"{key.alpha}:{key.time:0.##}" + "}"; } public static string gradientKeyToString(GradientColorKey key) { //IL_000a: 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) return "{" + $"{key.color}:{key.time:0.##}" + "}"; } public static void deepObjectComparison(object a, object b) { List<string> list = new List<string>(); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(a)) { string name = property.Name; list.Add(name); object value = property.GetValue(a); object value2 = property.GetValue(b); LogUtils.Log($"{name}: {value} | {value2}"); } foreach (PropertyDescriptor property2 in TypeDescriptor.GetProperties(b)) { string name2 = property2.Name; if (!list.Contains(name2)) { object value3 = property2.GetValue(a); object value4 = property2.GetValue(b); LogUtils.Log($"{name2}: {value3} | {value4}"); } } } public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration = 5f) { } public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration = 5f) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (ValheimMod.DEV_MODE) { DrawLine(start, start + dir, color, duration); } } public static void DrawBounds(Bounds bounds, Color color, float duration = 5f) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) DrawBounds(bounds, color, color, color, duration); } public static void DrawBounds(Bounds bounds, Color top, Color bottom, Color sides, float duration = 5f) { } public static void DrawWireSphere(Vector3 center, float radius, Color color, float duration) { } public static void DrawWireDisc(Vector3 center, float radius, Color color, float duration) { } public static GameObject addDebugLocatorVFX(Vector3 position) { //IL_0019: 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_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown if (!ValheimMod.DEV_MODE) { return new GameObject(); } GameObject prefabFromAssetBundle = AssetLoader.GetPrefabFromAssetBundle("vfx_DebugLocator"); return Object.Instantiate<GameObject>(prefabFromAssetBundle, position, Quaternion.identity); } public static RaycastHit debugRaycast(Player player, bool ignoreRigidbody, int layerMask = -1) { //IL_0038: 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) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) if (layerMask == -1) { layerMask = (int)Traverse.Create((object)player).Field("m_placeRayMask").GetValue(); } Transform eye = ((Character)player).m_eye; float maxPlaceDistance = player.m_maxPlaceDistance; RaycastHit result = default(RaycastHit); if (Physics.Raycast(((Component)GameCamera.instance).transform.position, ((Component)GameCamera.instance).transform.forward, ref result, 50f, layerMask) && Object.op_Implicit((Object)(object)((RaycastHit)(ref result)).collider) && (ignoreRigidbody || !Object.op_Implicit((Object)(object)((RaycastHit)(ref result)).collider.attachedRigidbody)) && Vector3.Distance(eye.position, ((RaycastHit)(ref result)).point) < maxPlaceDistance) { return result; } return default(RaycastHit); } } internal class DecalManager { private static Dictionary<Camera, CommandBuffer> bufferMap = new Dictionary<Camera, CommandBuffer>(); public static void registerCamera(Camera cam) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown if (!bufferMap.ContainsKey(cam)) { CommandBuffer val = new CommandBuffer(); val.name = "Deferred decals"; bufferMap[cam] = val; cam.AddCommandBuffer((CameraEvent)20, val); } } public static CommandBuffer getBuffer(Camera cam) { return bufferMap[cam]; } } internal class GameObjectUtils { public static ParticleSystem CopyParticleSystem(ParticleSystem original, GameObject destination) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_003d: 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_004e: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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_00fe: 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_010f: Unknown result type (might be due to invalid IL or missing references) //IL_011a: 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_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) ParticleSystem val = GameObjectUtils.CopyComponent<ParticleSystem>(original, destination); ParticleSystemRenderer val2 = GameObjectUtils.CopyComponent<ParticleSystemRenderer>(((Component)original).gameObject.GetComponent<ParticleSystemRenderer>(), destination); CopyFields<MainModule>(original.main, val.main); CopyFields<EmissionModule>(original.emission, val.emission); CopyFields<ShapeModule>(original.shape, val.shape); CopyFields<VelocityOverLifetimeModule>(original.velocityOverLifetime, val.velocityOverLifetime); CopyFields<LimitVelocityOverLifetimeModule>(original.limitVelocityOverLifetime, val.limitVelocityOverLifetime); CopyFields<InheritVelocityModule>(original.inheritVelocity, val.inheritVelocity); CopyFields<ForceOverLifetimeModule>(original.forceOverLifetime, val.forceOverLifetime); CopyFields<ColorOverLifetimeModule>(original.colorOverLifetime, val.colorOverLifetime); CopyFields<ColorBySpeedModule>(original.colorBySpeed, val.colorBySpeed); CopyFields<SizeOverLifetimeModule>(original.sizeOverLifetime, val.sizeOverLifetime); CopyFields<SizeBySpeedModule>(original.sizeBySpeed, val.sizeBySpeed); CopyFields<RotationOverLifetimeModule>(original.rotationOverLifetime, val.rotationOverLifetime); CopyFields<RotationBySpeedModule>(original.rotationBySpeed, val.rotationBySpeed); CopyFields<ExternalForcesModule>(original.externalForces, val.externalForces); CopyFields<NoiseModule>(original.noise, val.noise); CopyFields<CollisionModule>(original.collision, val.collision); CopyFields<TriggerModule>(original.trigger, val.trigger); CopyFields<TextureSheetAnimationModule>(original.textureSheetAnimation, val.textureSheetAnimation); CopyFields<LightsModule>(original.lights, val.lights); CopyFields<TrailModule>(original.trails, val.trails); CopyParticleCustomDataModule(original.customData, val.customData); return val; } public static T CopyComponent<T>(T original, GameObject destination) where T : Component { Type type = ((object)original).GetType(); Component component = destination.GetComponent(type); T val = (T)(object)((component is T) ? component : null); if (!Object.op_Implicit((Object)(object)val)) { Component obj = destination.AddComponent(type); val = (T)(object)((obj is T) ? obj : null); } CopyFields(original, val); if (original is ParticleSystemRenderer) { object obj2 = original; object original2 = ((obj2 is ParticleSystemRenderer) ? obj2 : null); object obj3 = val; CopyParticleSystemRendererSettings((ParticleSystemRenderer)original2, (ParticleSystemRenderer)((obj3 is ParticleSystemRenderer) ? obj3 : null)); } return val; } public static void CopyFields<T>(T original, T dst) { Type type = original.GetType(); FieldInfo[] fields = type.GetFields(); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { if (!fieldInfo.IsStatic) { fieldInfo.SetValue(dst, fieldInfo.GetValue(original)); } } PropertyInfo[] properties = type.GetProperties(); Dictionary<string, PropertyInfo> dictionary = new Dictionary<string, PropertyInfo>(); PropertyInfo[] array2 = properties; foreach (PropertyInfo propertyInfo in array2) { dictionary[propertyInfo.Name] = propertyInfo; if (propertyInfo.CanWrite && propertyInfo.CanWrite && !(propertyInfo.Name == "name") && !(propertyInfo.Name == "material") && !(propertyInfo.Name == "materials")) { propertyInfo.SetValue(dst, propertyInfo.GetValue(original, null), null); } } if (dictionary.ContainsKey("material") && dictionary.ContainsKey("sharedMaterial")) { LogUtils.Log("Setting material property"); dictionary["material"].SetValue(dst, dictionary["sharedMaterial"].GetValue(original, null), null); } if (dictionary.ContainsKey("materials") && dictionary.ContainsKey("sharedMaterials")) { LogUtils.Log("Setting materials property"); dictionary["materials"].SetValue(dst, dictionary["sharedMaterials"].GetValue(original, null), null); } } public static void CopyParticleCustomDataModule(CustomDataModule original, CustomDataModule dst) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Invalid comparison between Unknown and I4 //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Invalid comparison between Unknown and I4 //IL_0044: 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) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) ((CustomDataModule)(ref dst)).enabled = ((CustomDataModule)(ref original)).enabled; ParticleSystemCustomData[] array = (ParticleSystemCustomData[])(object)new ParticleSystemCustomData[2] { default(ParticleSystemCustomData), (ParticleSystemCustomData)1 }; ParticleSystemCustomData[] array2 = array; foreach (ParticleSystemCustomData val in array2) { ((CustomDataModule)(ref dst)).SetMode(val, ((CustomDataModule)(ref original)).GetMode(val)); ParticleSystemCustomDataMode mode = ((CustomDataModule)(ref original)).GetMode(val); if ((int)mode == 2) { ((CustomDataModule)(ref dst)).SetColor(val, ((CustomDataModule)(ref original)).GetColor(val)); } else if ((int)mode == 1) { int vectorComponentCount = ((CustomDataModule)(ref original)).GetVectorComponentCount(val); ((CustomDataModule)(ref dst)).SetVectorComponentCount(val, vectorComponentCount); for (int j = 0; j < vectorComponentCount; j++) { ((CustomDataModule)(ref dst)).SetVector(val, j, ((CustomDataModule)(ref original)).GetVector(val, j)); } } } } public static void CopyParticleSystemRendererSettings(ParticleSystemRenderer original, ParticleSystemRenderer dst) { List<ParticleSystemVertexStream> list = new List<ParticleSystemVertexStream>(); original.GetActiveVertexStreams(list); dst.SetActiveVertexStreams(list); list.Clear(); original.GetActiveTrailVertexStreams(list); dst.SetActiveTrailVertexStreams(list); } public static GameObject copyGameObjectChain(GameObject root, GameObject leaf, GameObject attachTo = null) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: 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_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_002b: 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) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Expected O, but got Unknown //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_015d: 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) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)root == (Object)(object)leaf) { GameObject val = new GameObject(); val.transform.parent = root.transform; val.transform.localPosition = default(Vector3); val.transform.localRotation = Quaternion.identity; val.transform.localScale = new Vector3(1f, 1f, 1f); val.layer = leaf.layer; return val; } string name = ((Object)leaf).name; GameObject val2 = new GameObject(((Object)leaf).name); GameObject val3 = val2; GameObject val4 = new GameObject(); val3.transform.parent = val4.transform; val3.layer = leaf.layer; val3.transform.localPosition = leaf.transform.localPosition; val3.transform.localRotation = leaf.transform.localRotation; val3.transform.localScale = leaf.transform.localScale; while ((Object)(object)leaf.transform.parent != (Object)null && (Object)(object)((Component)leaf.transform.parent).gameObject != (Object)(object)root) { leaf = ((Component)leaf.transform.parent).gameObject; val3 = val4; val4 = new GameObject(); ((Object)val3).name = ((Object)leaf).name; val3.layer = leaf.layer; val3.transform.parent = val4.transform; val3.transform.localPosition = leaf.transform.localPosition; val3.transform.localRotation = leaf.transform.localRotation; val3.transform.localScale = leaf.transform.localScale; } if ((Object)(object)leaf.transform.parent == (Object)null) { throw new Exception("Leaf " + name + " doesn't have " + ((Object)root).name + " in its hierarchy"); } val4.transform.parent = (attachTo ?? root).transform; val4.layer = (attachTo ?? root).layer; val4.transform.localPosition = default(Vector3); val4.transform.localRotation = Quaternion.identity; val4.transform.localScale = new Vector3(1f, 1f, 1f); return val2; } public static Transform getChildByPath(GameObject root, params string[] path) { if ((Object)(object)root == (Object)null) { return null; } if (path.Length == 0) { return null; } Transform val = root.transform; foreach (string text in path) { val = val.Find(text); if ((Object)(object)val == (Object)null) { return null; } } return val; } } public class GradientUtils { public static void rescaleAlphaTimes(Gradient grad, float minBound, float maxBound) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) GradientAlphaKey[] alphaKeys = grad.alphaKeys; GradientAlphaKey[] array = (GradientAlphaKey[])(object)new GradientAlphaKey[alphaKeys.Length]; for (int i = 0; i < alphaKeys.Length; i++) { array[i] = new GradientAlphaKey(alphaKeys[i].alpha, Mathf.Lerp(minBound, maxBound, alphaKeys[i].time)); } grad.SetKeys(grad.colorKeys, array); } public static Gradient getNormalizedGradient(Material mat, Gradient grad, Color baseColor) { //IL_003d: 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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Expected O, but got Unknown //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: 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_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0421: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0336: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04c4: Unknown result type (might be due to invalid IL or missing references) //IL_04cb: Unknown result type (might be due to invalid IL or missing references) //IL_04d3: Unknown result type (might be due to invalid IL or missing references) //IL_04da: Unknown result type (might be due to invalid IL or missing references) //IL_04e2: Unknown result type (might be due to invalid IL or missing references) //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_04fe: Unknown result type (might be due to invalid IL or missing references) //IL_0508: Unknown result type (might be due to invalid IL or missing references) //IL_0512: Unknown result type (might be due to invalid IL or missing references) //IL_05a6: Unknown result type (might be due to invalid IL or missing references) //IL_05b0: Unknown result type (might be due to invalid IL or missing references) //IL_05ba: Unknown result type (might be due to invalid IL or missing references) //IL_05d0: Unknown result type (might be due to invalid IL or missing references) //IL_05d4: Unknown result type (might be due to invalid IL or missing references) //IL_05e4: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_0540: Unknown result type (might be due to invalid IL or missing references) //IL_054a: Unknown result type (might be due to invalid IL or missing references) //IL_055b: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_056f: Unknown result type (might be due to invalid IL or missing references) //IL_057e: Unknown result type (might be due to invalid IL or missing references) //IL_0585: Unknown result type (might be due to invalid IL or missing references) //IL_0598: Unknown result type (might be due to invalid IL or missing references) GradientColorKey[] colorKeys = grad.colorKeys; GradientAlphaKey[] alphaKeys = grad.alphaKeys; List<GradientColorKey> list = new List<GradientColorKey>(); List<GradientAlphaKey> list2 = new List<GradientAlphaKey>(); StandardShaderUtils.ParticleColorMode particleColorMode = (((Object)(object)mat != (Object)null) ? StandardShaderUtils.getColorMode(mat) : StandardShaderUtils.ParticleColorMode.Multiply); GradientColorKey[] array = colorKeys; foreach (GradientColorKey val in array) { Color color = val.color; switch (particleColorMode) { case StandardShaderUtils.ParticleColorMode.Multiply: color.r *= baseColor.r; color.g *= baseColor.g; color.b *= baseColor.b; break; case StandardShaderUtils.ParticleColorMode.Additive: color.r += baseColor.r; color.g += baseColor.g; color.b += baseColor.b; break; case StandardShaderUtils.ParticleColorMode.Subtractive: color.r = 1f - (baseColor.r - color.r); color.g = 1f - (baseColor.g - color.g); color.b = 1f - (baseColor.b - color.b); break; } list.Add(new GradientColorKey(color, val.time)); } GradientAlphaKey[] array2 = alphaKeys; foreach (GradientAlphaKey val2 in array2) { list2.Add(new GradientAlphaKey(val2.alpha * baseColor.a, val2.time)); } List<GradientAlphaKey> list3 = new List<GradientAlphaKey>(); float num = 0.0001f; if (list.Count > 1) { GradientColorKey item = default(GradientColorKey); GradientColorKey item2 = default(GradientColorKey); for (int k = 0; k < list.Count; k++) { GradientColorKey val3 = list[k]; if (val3.color != Color.black) { list3.Add(new GradientAlphaKey(1f, val3.time)); continue; } if (k == 0) { list.Remove(val3); list.Insert(0, new GradientColorKey(getNonblackAfter(list, val3.time).color, val3.time)); list3.Insert(0, new GradientAlphaKey(0f, val3.time)); continue; } if (k == list.Count - 1) { list.Remove(val3); list.Insert(k, new GradientColorKey(getNonblackBefore(list, val3.time).color, val3.time)); list3.Add(new GradientAlphaKey(0f, val3.time)); continue; } list.Remove(val3); ((GradientColorKey)(ref item))..ctor(getNonblackBefore(list, val3.time).color, Mathf.Max(0f, val3.time - num)); ((GradientColorKey)(ref item2))..ctor(getNonblackAfter(list, val3.time).color, Mathf.Min(1f, val3.time + num)); list.Add(item); list.Add(item2); list3.Add(new GradientAlphaKey(0f, Mathf.Max(0f, val3.time - num))); list3.Add(new GradientAlphaKey(0f, Mathf.Min(1f, val3.time + num))); list.Sort((GradientColorKey x, GradientColorKey y) => x.time.CompareTo(y.time)); k++; } } list2 = combineAlphas(list2, list3); list.Sort((GradientColorKey x, GradientColorKey y) => x.time.CompareTo(y.time)); list2.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); Gradient val4 = new Gradient(); val4.SetKeys(list.ToArray(), list2.ToArray()); HashSet<float> hashSet = new HashSet<float>(); hashSet.Add(0f); hashSet.Add(1f); foreach (GradientColorKey item3 in list) { hashSet.Add(item3.time); } foreach (GradientAlphaKey item4 in list2) { hashSet.Add(item4.time); } List<float> list4 = new List<float>(hashSet); list4.Sort(); List<GradientColorKey> list5 = new List<GradientColorKey>(); List<GradientAlphaKey> list6 = new List<GradientAlphaKey>(); Color val6 = default(Color); Color val7 = default(Color); foreach (float item5 in list4) { Color val5 = val4.Evaluate(item5); ((Color)(ref val6))..ctor(val5.r * val5.a, val5.g * val5.a, val5.b * val5.a); float num2 = Mathf.Max(new float[3] { val6.r, val6.g, val6.b }); float num3 = num2; if (num3 == 0f) { num2 = Mathf.Max(new float[3] { val5.r, val5.g, val5.b }); list5.Add(new GradientColorKey(new Color(val5.r / num2, val5.g / num2, val5.b / num2, 1f), item5)); list6.Add(new GradientAlphaKey(0f, item5)); } else { ((Color)(ref val7))..ctor(val6.r / num3, val6.g / num3, val6.b / num3, 1f); list5.Add(new GradientColorKey(val7, item5)); list6.Add(new GradientAlphaKey(num3, item5)); } } dedupeColorKeys(list5, num * 2f); dedupeAlphaKeys(list6, num * 2f); val4.SetKeys(list5.ToArray(), list6.ToArray()); return val4; } private static List<GradientAlphaKey> combineAlphas(List<GradientAlphaKey> a, List<GradientAlphaKey> b) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_0059: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_0110: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: 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_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0165: 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_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) a.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); b.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); Gradient val = new Gradient(); val.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.black, 0f), new GradientColorKey(Color.black, 1f) }, a.ToArray()); Gradient val2 = new Gradient(); val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.black, 0f), new GradientColorKey(Color.black, 1f) }, b.ToArray()); List<GradientAlphaKey> list = new List<GradientAlphaKey>(); foreach (GradientAlphaKey item in a) { float num = item.alpha * val2.Evaluate(item.time).a; list.Add(new GradientAlphaKey(num, item.time)); } foreach (GradientAlphaKey item2 in b) { float num2 = item2.alpha * val.Evaluate(item2.time).a; list.Add(new GradientAlphaKey(num2, item2.time)); } list.Sort((GradientAlphaKey x, GradientAlphaKey y) => x.time.CompareTo(y.time)); for (int i = 0; i < list.Count - 1; i++) { if (list[i].time == list[i + 1].time) { list.RemoveAt(i); i--; } } return list; } private static void dedupeColorKeys(List<GradientColorKey> keys, float timeEpsilon) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0066: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) while (keys.Count > 1 && approxEqual(keys[0].color, keys[1].color)) { keys.RemoveAt(0); } while (keys.Count > 1 && approxEqual(keys[keys.Count - 1].color, keys[keys.Count - 2].color)) { keys.RemoveAt(keys.Count - 1); } for (int i = 1; i < keys.Count - 1; i++) { if (approxEqual(keys[i - 1].color, keys[i].color) && approxEqual(keys[i].color, keys[i + 1].color)) { keys.RemoveAt(i); i--; } } for (int j = 0; j < keys.Count - 1; j++) { if (approxEqual(keys[j].color, keys[j + 1].color) && Mathf.Abs(keys[j].time - keys[j + 1].time) < timeEpsilon) { keys.RemoveAt(j); j--; } } } private static bool approxEqual(Color a, Color b) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_0036: Unknown result type (might be due to invalid IL or missing references) float num = 0.04f; if (Mathf.Abs(a.r - b.r) < num && Mathf.Abs(a.g - b.g) < num) { return Mathf.Abs(a.b - b.b) < num; } return false; } private static void dedupeAlphaKeys(List<GradientAlphaKey> keys, float timeEpsilon) { //IL_0014: 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) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009f: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) while (keys.Count > 1 && keys[0].alpha == keys[1].alpha) { keys.RemoveAt(0); } while (keys.Count > 1 && keys[keys.Count - 1].alpha == keys[keys.Count - 2].alpha) { keys.RemoveAt(keys.Count - 1); } for (int i = 1; i < keys.Count - 1; i++) { float num = Mathf.Lerp(keys[i - 1].alpha, keys[i + 1].alpha, Mathf.InverseLerp(keys[i - 1].time, keys[i + 1].time, keys[i].time)); if (Mathf.Abs(num - keys[i].alpha) < 0.04f) { keys.RemoveAt(i); i--; } } for (int j = 0; j < keys.Count - 1; j++) { if (keys[j].alpha == keys[j + 1].alpha && Mathf.Abs(keys[j].time - keys[j + 1].time) < timeEpsilon) { keys.RemoveAt(j); j--; } } } private static GradientColorKey getNonblackBefore(List<GradientColorKey> colorKeys, float time) { //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_000c: Unknown result type (might be due to invalid IL or missing references) //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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //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_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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_0053: 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_004f: Unknown result type (might be due to invalid IL or missing references) GradientColorKey val = colorKeys[0]; for (int i = 0; i < colorKeys.Count; i++) { if (val.color == Color.black) { val = colorKeys[i]; } else if (!(colorKeys[i].color == Color.black)) { if (colorKeys[i].time >= time) { return val;