Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of MoonforgedChristmasDecorations v1.0.4
MoonforgedChristmasDecorations.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.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("MoonforgedChristmasDecorations")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MoonforgedChristmasDecorations")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("adf433ef-261d-4339-87a0-3b351c8880a7")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace Moonforged.ChristmasDecorations; [RequireComponent(typeof(LineRenderer))] public class BezierRope : MonoBehaviour { public Transform pointA; public Transform pointB; [Header("Look")] public int segments = 24; public float width = 0.015f; public float sag = 0.25f; public Material material; [Header("Cloth-like motion")] public float windStrength = 0.2f; public float jiggleAmplitude = 0.02f; public float jiggleSpeed = 1f; private LineRenderer _lr; private float _seed; private void Awake() { //IL_0083: 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) _lr = ((Component)this).GetComponent<LineRenderer>(); _lr.useWorldSpace = true; _lr.startWidth = width; _lr.endWidth = width; _lr.numCornerVertices = 3; _lr.numCapVertices = 3; _lr.textureMode = (LineTextureMode)0; ((Renderer)_lr).material = (Material)(((Object)(object)material != (Object)null) ? ((object)material) : ((object)new Material(Shader.Find("Sprites/Default")))); ((Renderer)_lr).material.color = Color.black; _seed = Random.Range(0f, 1000f); } private void LateUpdate() { //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_005f: 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_0065: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_0099: 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_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_0118: 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_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_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_0150: 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_015a: 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_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0170: 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_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_00db: 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) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: 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) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: 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_0245: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024c: 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_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) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)pointA == (Object)null) && !((Object)(object)pointB == (Object)null)) { _lr.startWidth = width; _lr.endWidth = width; Vector3 position = pointA.position; Vector3 position2 = pointB.position; Vector3 val = (position + position2) * 0.5f; Vector3 val2 = Vector3.Lerp(position, val, 0.66f) + Vector3.down * sag; Vector3 val3 = Vector3.Lerp(position2, val, 0.66f) + Vector3.down * sag; Vector3 right = Vector3.right; if ((Object)(object)pointA != (Object)null) { right = pointA.right; } float num = Time.time + _seed; float num2 = Mathf.Sin(num * ((float)Math.PI * 2f) * Mathf.Max(0.01f, jiggleSpeed)) * jiggleAmplitude; val2 += right * windStrength * 0.5f + Vector3.up * num2 * 0.5f; val3 += right * windStrength * 1f + Vector3.down * num2 * 0.5f; int num3 = Mathf.Max(4, segments); _lr.positionCount = num3; float num4 = 1f / (float)(num3 - 1); for (int i = 0; i < num3; i++) { float num5 = (float)i * num4; Vector3 val4 = Mathf.Pow(1f - num5, 3f) * position + 3f * Mathf.Pow(1f - num5, 2f) * num5 * val2 + 3f * (1f - num5) * num5 * num5 * val3 + num5 * num5 * num5 * position2; float num6 = num5 * (1f - num5); Vector3 val5 = position2 - position; val5 = Vector3.Cross(((Vector3)(ref val5)).normalized, Vector3.up); Vector3 normalized = ((Vector3)(ref val5)).normalized; val4 += normalized * num2 * num6; _lr.SetPosition(i, val4); } } } } public class ChildLightsCycler : MonoBehaviour { [CompilerGenerated] private sealed class <Run>d__10 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public ChildLightsCycler <>4__this; private float <delay>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Run>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <delay>5__1 = Mathf.Max(0.05f, <>4__this.stepSeconds); break; case 1: <>1__state = -1; break; } if (<>4__this._mats.Count > 0) { <>4__this.ApplyStep(); } <>2__current = (object)new WaitForSeconds(<delay>5__1); <>1__state = 1; return true; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public string[] lightRendererNames = new string[3] { "Light1", "Light2", "Light3" }; public float stepSeconds = 1f; public float intensity = 4.4f; private readonly List<Material> _mats = new List<Material>(); private static readonly Color[] Palette = (Color[])(object)new Color[3] { Color.red, Color.yellow, Color.blue }; private int _step; private Coroutine _runner; private void Awake() { //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) _mats.Clear(); for (int i = 0; i < lightRendererNames.Length; i++) { Transform val = ((Component)this).transform.Find(lightRendererNames[i]); if ((Object)(object)val == (Object)null) { continue; } Renderer component = ((Component)val).GetComponent<Renderer>(); if (!((Object)(object)component == (Object)null)) { Material sharedMaterial = component.sharedMaterial; if (!((Object)(object)sharedMaterial == (Object)null)) { sharedMaterial.EnableKeyword("_EMISSION"); sharedMaterial.SetColor("_EmissionColor", Palette[i % Palette.Length] * Mathf.LinearToGammaSpace(intensity)); sharedMaterial.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)1; _mats.Add(sharedMaterial); } } } } private void OnEnable() { if (_runner == null && _mats.Count > 0) { _runner = ((MonoBehaviour)this).StartCoroutine(Run()); } } private void OnDisable() { if (_runner != null) { ((MonoBehaviour)this).StopCoroutine(_runner); _runner = null; } } [IteratorStateMachine(typeof(<Run>d__10))] private IEnumerator Run() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Run>d__10(0) { <>4__this = this }; } private void ApplyStep() { //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) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < _mats.Count; i++) { Material val = _mats[i]; if (!((Object)(object)val == (Object)null)) { Color val2 = Palette[(i + _step) % Palette.Length]; val.SetColor("_EmissionColor", val2 * Mathf.LinearToGammaSpace(intensity)); } } _step = (_step + 1) % Palette.Length; } } public class ChristmasLightChaser : MonoBehaviour { public enum AnimationMode { Chase, BlinkAll } [CompilerGenerated] private sealed class <Run>d__20 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public ChristmasLightChaser <>4__this; private WaitForSeconds <poll>5__1; private WaitForSeconds <stepWait>5__2; private bool <hasZdo>5__3; private ZNetView <znv>5__4; private int <n>5__5; private int <i>5__6; private Renderer <r>5__7; private MaterialPropertyBlock <mpb>5__8; private Color <c>5__9; private Color <c>5__10; private int <i>5__11; private Renderer <r>5__12; private MaterialPropertyBlock <mpb>5__13; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Run>d__20(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <poll>5__1 = null; <stepWait>5__2 = null; <znv>5__4 = null; <r>5__7 = null; <mpb>5__8 = null; <r>5__12 = null; <mpb>5__13 = null; <>1__state = -2; } private bool MoveNext() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <poll>5__1 = new WaitForSeconds(0.2f); <stepWait>5__2 = new WaitForSeconds(<>4__this.stepSeconds); break; case 1: <>1__state = -1; break; case 2: <>1__state = -1; <znv>5__4 = null; break; } <hasZdo>5__3 = false; <znv>5__4 = ((Component)<>4__this).GetComponentInParent<ZNetView>(); if ((Object)(object)<znv>5__4 != (Object)null) { <hasZdo>5__3 = <znv>5__4.GetZDO() != null; } if (!<hasZdo>5__3) { <>4__this._liveStarted = false; <>2__current = <poll>5__1; <>1__state = 1; return true; } if (!<>4__this._liveStarted) { <>4__this._liveStarted = true; <>4__this._step = 0; } <n>5__5 = Mathf.Max(1, <>4__this._palette.Length); if (<>4__this.mode == AnimationMode.Chase) { <i>5__6 = 0; while (<i>5__6 < <>4__this.targets.Count) { <r>5__7 = <>4__this.targets[<i>5__6]; if (Object.op_Implicit((Object)(object)<r>5__7)) { <mpb>5__8 = <>4__this._mpbs[<i>5__6]; <c>5__9 = <>4__this._palette[(<i>5__6 + <>4__this._step) % <n>5__5]; if (<>4__this.affectBaseColor) { <mpb>5__8.SetColor(<>4__this._colorId, <c>5__9); } <mpb>5__8.SetColor(<>4__this._emissId, <c>5__9 * Mathf.LinearToGammaSpace(<>4__this.emissionIntensity)); <r>5__7.SetPropertyBlock(<mpb>5__8); <r>5__7 = null; <mpb>5__8 = null; } <i>5__6++; } } else { <c>5__10 = <>4__this._palette[<>4__this._step % <n>5__5]; <i>5__11 = 0; while (<i>5__11 < <>4__this.targets.Count) { <r>5__12 = <>4__this.targets[<i>5__11]; if (Object.op_Implicit((Object)(object)<r>5__12)) { <mpb>5__13 = <>4__this._mpbs[<i>5__11]; if (<>4__this.affectBaseColor) { <mpb>5__13.SetColor(<>4__this._colorId, <c>5__10); } <mpb>5__13.SetColor(<>4__this._emissId, <c>5__10 * Mathf.LinearToGammaSpace(<>4__this.emissionIntensity)); <r>5__12.SetPropertyBlock(<mpb>5__13); <r>5__12 = null; <mpb>5__13 = null; } <i>5__11++; } } <>4__this._step++; <>2__current = <stepWait>5__2; <>1__state = 2; return true; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public bool includeInactive = true; public Color[] defaultPalette = (Color[])(object)new Color[3] { Color.red, Color.yellow, Color.blue }; public Color[] paletteOverride; public AnimationMode mode = AnimationMode.Chase; [Min(0.01f)] public float stepSeconds = 1f; [Min(0f)] public float emissionIntensity = 4.4f; public bool affectBaseColor = false; public string[] ignoreNameContains = new string[2] { "cable", "snap" }; public List<Renderer> targets = new List<Renderer>(); private readonly List<MaterialPropertyBlock> _mpbs = new List<MaterialPropertyBlock>(); private int _colorId; private int _emissId; private int _step; private Coroutine _runner; private bool _liveStarted; private Color[] _palette; private void Awake() { //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Expected O, but got Unknown _palette = ((paletteOverride != null && paletteOverride.Length != 0) ? paletteOverride : defaultPalette); _colorId = Shader.PropertyToID("_Color"); _emissId = Shader.PropertyToID("_EmissionColor"); if (targets.Count == 0) { Renderer[] componentsInChildren = ((Component)this).GetComponentsInChildren<Renderer>(includeInactive); foreach (Renderer val in componentsInChildren) { if (!Object.op_Implicit((Object)(object)val)) { continue; } string text = ((Object)val).name.ToLowerInvariant(); bool flag = false; for (int j = 0; j < ignoreNameContains.Length; j++) { if (text.Contains(ignoreNameContains[j])) { flag = true; break; } } if (!flag) { targets.Add(val); } } } _mpbs.Clear(); foreach (Renderer target in targets) { if (Object.op_Implicit((Object)(object)target)) { MaterialPropertyBlock val2 = new MaterialPropertyBlock(); target.GetPropertyBlock(val2); if (Object.op_Implicit((Object)(object)target.material)) { target.material.EnableKeyword("_EMISSION"); } _mpbs.Add(val2); } } } private void OnEnable() { if (_runner == null) { _runner = ((MonoBehaviour)this).StartCoroutine(Run()); } } private void OnDisable() { if (_runner != null) { ((MonoBehaviour)this).StopCoroutine(_runner); } _runner = null; _liveStarted = false; } [IteratorStateMachine(typeof(<Run>d__20))] private IEnumerator Run() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Run>d__20(0) { <>4__this = this }; } } public static class ChristmasLightChaserInstaller { public static void InstallOn(GameObject prefabRoot, float stepSeconds, float emissionIntensity) { InstallOn(prefabRoot, stepSeconds, emissionIntensity, null, ChristmasLightChaser.AnimationMode.Chase); } public static void InstallOn(GameObject prefabRoot, float stepSeconds, float emissionIntensity, Color[] paletteOverride, ChristmasLightChaser.AnimationMode mode) { if (Object.op_Implicit((Object)(object)prefabRoot)) { ChristmasLightChaser christmasLightChaser = prefabRoot.GetComponent<ChristmasLightChaser>(); if (!Object.op_Implicit((Object)(object)christmasLightChaser)) { christmasLightChaser = prefabRoot.AddComponent<ChristmasLightChaser>(); } christmasLightChaser.includeInactive = true; christmasLightChaser.stepSeconds = stepSeconds; christmasLightChaser.emissionIntensity = emissionIntensity; christmasLightChaser.mode = mode; if (paletteOverride != null && paletteOverride.Length != 0) { christmasLightChaser.paletteOverride = paletteOverride; } christmasLightChaser.targets = CollectBulbRenderers(prefabRoot, new string[1] { "light" }, new string[6] { "cable", "wire", "string", "snap", "garland", "rope" }); } } private static List<Renderer> CollectBulbRenderers(GameObject root, string[] includePrefixes, string[] ignoreContains) { List<Renderer> list = new List<Renderer>(); if (!Object.op_Implicit((Object)(object)root)) { return list; } Renderer[] componentsInChildren = root.GetComponentsInChildren<Renderer>(true); foreach (Renderer val in componentsInChildren) { if (!Object.op_Implicit((Object)(object)val)) { continue; } string text = ((Object)((Component)val).gameObject).name.ToLowerInvariant(); bool flag = false; if (ignoreContains != null) { foreach (string value in ignoreContains) { if (!string.IsNullOrEmpty(value) && text.Contains(value)) { flag = true; break; } } } if (flag) { continue; } bool flag2 = includePrefixes == null || includePrefixes.Length == 0; if (!flag2) { foreach (string value2 in includePrefixes) { if (!string.IsNullOrEmpty(value2) && text.StartsWith(value2)) { flag2 = true; break; } } } if (flag2) { list.Add(val); } } return list; } } public class ChristmasLightsGlow : MonoBehaviour { [Header("Target renderer (child name)")] public string rendererChildName = "Christmas tree.007"; [Header("Choose how to select materials")] public bool useIndices = true; [Tooltip("Material slots that should glow (0-based)")] public int[] glowSlots = new int[3] { 2, 7, 8 }; [Tooltip("Match by material name (contains, case-insensitive)")] public string[] glowNameContains = new string[1] { "vray_Christmas Tree Set3_4.001" }; [Header("Glow settings")] public Color emissionColor = Color.yellow; public float intensity = 3f; public bool animate = false; public float cycleSeconds = 5f; private Renderer _rend; private Material[] _mats; private bool[] _shouldGlow; private void Awake() { //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) Transform val = ((Component)this).transform.Find(rendererChildName); if ((Object)(object)val != (Object)null) { _rend = ((Component)val).GetComponent<Renderer>(); } if ((Object)(object)_rend == (Object)null) { _rend = (from r in ((Component)this).GetComponentsInChildren<Renderer>(true) orderby (r.sharedMaterials != null) ? r.sharedMaterials.Length : 0 descending select r).FirstOrDefault(); } if ((Object)(object)_rend == (Object)null) { return; } _mats = _rend.materials; _shouldGlow = new bool[_mats.Length]; for (int i = 0; i < _mats.Length; i++) { bool flag = false; if (useIndices) { for (int j = 0; j < glowSlots.Length; j++) { if (glowSlots[j] == i) { flag = true; break; } } } else { string text = (((Object)(object)_mats[i] != (Object)null) ? ((Object)_mats[i]).name : ""); for (int k = 0; k < glowNameContains.Length; k++) { if (!string.IsNullOrEmpty(glowNameContains[k]) && text.ToLower().Contains(glowNameContains[k].ToLower())) { flag = true; break; } } } _shouldGlow[i] = flag; if (flag && (Object)(object)_mats[i] != (Object)null) { _mats[i].EnableKeyword("_EMISSION"); Color val2 = emissionColor * Mathf.LinearToGammaSpace(intensity); _mats[i].SetColor("_EmissionColor", val2); _mats[i].globalIlluminationFlags = (MaterialGlobalIlluminationFlags)1; } } _rend.materials = _mats; } private void Update() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009b: 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_00b0: Unknown result type (might be due to invalid IL or missing references) if (!animate || _mats == null) { return; } float num = Mathf.Max(0.01f, cycleSeconds); float num2 = Time.time % num / num; float num3 = 0.5f + 0.5f * Mathf.Sin(num2 * (float)Math.PI * 2f); for (int i = 0; i < _mats.Length; i++) { if (_shouldGlow[i] && (Object)(object)_mats[i] != (Object)null) { Color val = emissionColor * Mathf.LinearToGammaSpace(intensity * (0.5f + num3)); _mats[i].SetColor("_EmissionColor", val); } } } } internal static class WrappingPaperCraftFX { } public class WrappingBoxProxy : MonoBehaviour, Interactable, Hoverable { private WrappingBoxProcessor processor; private void Awake() { processor = ((Component)this).GetComponentInChildren<WrappingBoxProcessor>(true); } public bool Interact(Humanoid user, bool hold, bool alt) { return false; } public bool UseItem(Humanoid user, ItemData item) { return false; } public string GetHoverName() { return "Wrapper"; } public string GetHoverText() { if ((Object)(object)processor != (Object)null && processor.CanWrap()) { return "Wrapper\n[<color=yellow><b>E</b></color>] Open\n<color=orange>Close box to wrap gift</color>"; } return "Wrapper\n[<color=yellow><b>E</b></color>] Open\n(Add 1 gift + 1 item)"; } } public static class WrappedGiftUse { public const string KEY_PREFAB = "wrapped_prefab"; public const string KEY_STACK = "wrapped_stack"; public const string KEY_QUALITY = "wrapped_quality"; public const string KEY_VARIANT = "wrapped_variant"; public const string KEY_DURABILITY = "wrapped_durability"; public static bool OnUse(ItemData gift, Player player) { if (gift == null || (Object)(object)player == (Object)null) { return false; } Inventory inventory = ((Humanoid)player).GetInventory(); if (inventory == null) { return false; } Dictionary<string, string> customData = gift.m_customData; if (customData == null || !customData.TryGetValue("wrapped_prefab", out var value)) { return false; } ZNetScene instance = ZNetScene.instance; GameObject val = ((instance != null) ? instance.GetPrefab(value) : null); if ((Object)(object)val == (Object)null) { return false; } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { return false; } int result = 1; int result2 = 1; int result3 = 0; float result4 = 0f; if (customData.TryGetValue("wrapped_stack", out var value2)) { int.TryParse(value2, out result); } if (customData.TryGetValue("wrapped_quality", out value2)) { int.TryParse(value2, out result2); } if (customData.TryGetValue("wrapped_variant", out value2)) { int.TryParse(value2, out result3); } if (customData.TryGetValue("wrapped_durability", out value2)) { float.TryParse(value2, NumberStyles.Float, CultureInfo.InvariantCulture, out result4); } ItemData val2 = component.m_itemData.Clone(); val2.m_dropPrefab = val; val2.m_stack = Mathf.Max(1, result); val2.m_quality = Mathf.Max(1, result2); val2.m_variant = result3; if (result4 > 0f) { val2.m_durability = result4; } if (!inventory.CanAddItem(val2, -1)) { return false; } inventory.AddItem(val2); inventory.RemoveItem(gift, 1); return true; } public static bool OnUse(ItemData gift) { Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return false; } return OnUse(gift, localPlayer); } } public class WrappingBoxProcessor : MonoBehaviour { [CompilerGenerated] private sealed class <BlinkRoutine>d__12 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public float duration; public WrappingBoxProcessor <>4__this; private Renderer[] <renderers>5__1; private float <t>5__2; private Dictionary<Material, Color> <original>5__3; private Renderer[] <>s__4; private int <>s__5; private Renderer <r>5__6; private float <pulse>5__7; private Renderer[] <>s__8; private int <>s__9; private Renderer <r>5__10; private Dictionary<Material, Color>.Enumerator <>s__11; private KeyValuePair<Material, Color> <kv>5__12; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <BlinkRoutine>d__12(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <renderers>5__1 = null; <original>5__3 = null; <>s__4 = null; <r>5__6 = null; <>s__8 = null; <r>5__10 = null; <>s__11 = default(Dictionary<Material, Color>.Enumerator); <kv>5__12 = default(KeyValuePair<Material, Color>); <>1__state = -2; } private bool MoveNext() { //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <renderers>5__1 = ((Component)<>4__this).GetComponentsInChildren<Renderer>(true); <t>5__2 = 0f; <original>5__3 = new Dictionary<Material, Color>(); <>s__4 = <renderers>5__1; for (<>s__5 = 0; <>s__5 < <>s__4.Length; <>s__5++) { <r>5__6 = <>s__4[<>s__5]; if ((Object)(object)<r>5__6 != (Object)null && (Object)(object)<r>5__6.material != (Object)null && <r>5__6.material.HasProperty("_Color") && !<original>5__3.ContainsKey(<r>5__6.material)) { <original>5__3[<r>5__6.material] = <r>5__6.material.color; } <r>5__6 = null; } <>s__4 = null; break; case 1: <>1__state = -1; break; } if (<t>5__2 < duration) { <pulse>5__7 = Mathf.Sin(Time.time * 10f) * 0.7f + 1.7f; <>s__8 = <renderers>5__1; for (<>s__9 = 0; <>s__9 < <>s__8.Length; <>s__9++) { <r>5__10 = <>s__8[<>s__9]; if ((Object)(object)<r>5__10 != (Object)null && (Object)(object)<r>5__10.material != (Object)null && <r>5__10.material.HasProperty("_Color")) { <r>5__10.material.color = <original>5__3[<r>5__10.material] * <pulse>5__7; } <r>5__10 = null; } <>s__8 = null; <t>5__2 += Time.deltaTime; <>2__current = null; <>1__state = 1; return true; } <>s__11 = <original>5__3.GetEnumerator(); try { while (<>s__11.MoveNext()) { <kv>5__12 = <>s__11.Current; if ((Object)(object)<kv>5__12.Key != (Object)null) { <kv>5__12.Key.color = <kv>5__12.Value; } <kv>5__12 = default(KeyValuePair<Material, Color>); } } finally { ((IDisposable)<>s__11).Dispose(); } <>s__11 = default(Dictionary<Material, Color>.Enumerator); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <WrapSequence>d__10 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public WrappingBoxProcessor <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WrapSequence>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.wrapInProgress = true; <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.BlinkRoutine(3.8f)); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.Wrap(); <>4__this.SpawnBuildSmoke(); <>4__this.SpawnTamedFX(); <>4__this.wrapInProgress = false; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private Container container; private ZNetView nview; private bool wasInUseLastFrame = false; private bool wrapInProgress = false; private const float WRAP_DELAY = 3.8f; private void Awake() { container = ((Component)this).GetComponentInChildren<Container>(true); nview = ((Component)this).GetComponent<ZNetView>(); } private void Update() { if (!((Object)(object)container == (Object)null) && (!((Object)(object)nview != (Object)null) || nview.IsOwner())) { bool flag = container.IsInUse(); if (wasInUseLastFrame && !flag && !wrapInProgress && CanWrap()) { ((MonoBehaviour)this).StartCoroutine(WrapSequence()); } wasInUseLastFrame = flag; } } private bool IsWrappingPaper(ItemData item) { if (item == null || (Object)(object)item.m_dropPrefab == (Object)null) { return false; } return ((Object)item.m_dropPrefab).name.Contains("WrappingPaper"); } private string GetGiftPrefabNameFromPaper(string paperPrefabName) { if (string.IsNullOrEmpty(paperPrefabName)) { return null; } switch (paperPrefabName) { case "M_Gree_Gold_WrappingPaper": return "M_Gree_Gold_Gift"; case "M_WrappingPaper_SnowFlake_Blue": return "M_SnowFlake_Blue"; case "M_WrappingPaper_SnowFlake_Red": return "M_SnowFlake_Red"; default: if (paperPrefabName.StartsWith("M_WrappingPaper_")) { return "M_Gift_" + paperPrefabName.Substring("M_WrappingPaper_".Length); } return paperPrefabName.Replace("WrappingPaper", "Gift"); } } public bool CanWrap() { List<ItemData> allItems = container.GetInventory().GetAllItems(); if (allItems.Count != 2) { return false; } ItemData val = null; ItemData val2 = null; foreach (ItemData item in allItems) { if (IsWrappingPaper(item)) { val = item; } else { val2 = item; } } return val != null && val2 != null; } [IteratorStateMachine(typeof(<WrapSequence>d__10))] private IEnumerator WrapSequence() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WrapSequence>d__10(0) { <>4__this = this }; } private void Wrap() { if ((Object)(object)ZNetScene.instance == (Object)null) { return; } Inventory inventory = container.GetInventory(); ItemData val = null; ItemData val2 = null; foreach (ItemData allItem in inventory.GetAllItems()) { if (IsWrappingPaper(allItem)) { val = allItem; } else { val2 = allItem; } } if (val == null || val2 == null) { return; } string giftPrefabNameFromPaper = GetGiftPrefabNameFromPaper(((Object)val.m_dropPrefab).name); if (string.IsNullOrEmpty(giftPrefabNameFromPaper)) { return; } GameObject prefab = ZNetScene.instance.GetPrefab(giftPrefabNameFromPaper); if (!((Object)(object)prefab == (Object)null)) { Dictionary<string, string> customData = new Dictionary<string, string> { { "wrapped_prefab", ((Object)val2.m_dropPrefab).name }, { "wrapped_stack", val2.m_stack.ToString() }, { "wrapped_quality", val2.m_quality.ToString() }, { "wrapped_variant", val2.m_variant.ToString() }, { "wrapped_durability", val2.m_durability.ToString(CultureInfo.InvariantCulture) } }; inventory.RemoveItem(val2); inventory.RemoveItem(val); ItemDrop component = prefab.GetComponent<ItemDrop>(); if (!((Object)(object)component == (Object)null)) { ItemData val3 = component.m_itemData.Clone(); val3.m_dropPrefab = prefab; val3.m_stack = 1; val3.m_customData = customData; inventory.AddItem(val3); } } } [IteratorStateMachine(typeof(<BlinkRoutine>d__12))] private IEnumerator BlinkRoutine(float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <BlinkRoutine>d__12(0) { <>4__this = this, duration = duration }; } private void SpawnBuildSmoke() { //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_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_0043: Unknown result type (might be due to invalid IL or missing references) ZNetScene instance = ZNetScene.instance; GameObject val = ((instance != null) ? instance.GetPrefab("vfx_PlacePiece") : null); if ((Object)(object)val != (Object)null) { Object.Instantiate<GameObject>(val, ((Component)this).transform.position + Vector3.up * 0.5f, Quaternion.identity); } } private void SpawnTamedFX() { //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_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_0043: Unknown result type (might be due to invalid IL or missing references) ZNetScene instance = ZNetScene.instance; GameObject val = ((instance != null) ? instance.GetPrefab("fx_creature_tamed") : null); if ((Object)(object)val != (Object)null) { Object.Instantiate<GameObject>(val, ((Component)this).transform.position + Vector3.up * 0.5f, Quaternion.identity); } } } public static class WrappedGiftData { public const string KEY_PREFAB = "mf_wrap_prefab"; public const string KEY_STACK = "mf_wrap_stack"; public const string KEY_QUALITY = "mf_wrap_quality"; public const string KEY_VARIANT = "mf_wrap_variant"; public const string KEY_DURABILITY = "mf_wrap_durability"; public static void Write(ZNetView znv, ItemData item) { if (!((Object)(object)znv == (Object)null) && znv.IsValid() && item != null) { ZDO zDO = znv.GetZDO(); if (zDO != null) { zDO.Set("mf_wrap_prefab", ((Object)item.m_dropPrefab).name); zDO.Set("mf_wrap_stack", item.m_stack); zDO.Set("mf_wrap_quality", item.m_quality); zDO.Set("mf_wrap_variant", item.m_variant); zDO.Set("mf_wrap_durability", item.m_durability); } } } public static bool HasData(ZNetView znv) { if ((Object)(object)znv == (Object)null || !znv.IsValid()) { return false; } ZDO zDO = znv.GetZDO(); if (zDO == null) { return false; } return !string.IsNullOrEmpty(zDO.GetString("mf_wrap_prefab", "")); } public static ItemData Read(ZNetView znv) { if (!HasData(znv)) { return null; } ZDO zDO = znv.GetZDO(); string @string = zDO.GetString("mf_wrap_prefab", ""); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(@string); if ((Object)(object)itemPrefab == (Object)null) { return null; } ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { return null; } ItemData val = component.m_itemData.Clone(); val.m_stack = zDO.GetInt("mf_wrap_stack", 1); val.m_quality = zDO.GetInt("mf_wrap_quality", 1); val.m_variant = zDO.GetInt("mf_wrap_variant", 0); val.m_durability = zDO.GetFloat("mf_wrap_durability", val.GetMaxDurability()); return val; } } public static class WrappingPaperRegistrar { private struct PaperDef { public string PrefabName; public string DisplayName; public PaperDef(string prefabName, string displayName) { PrefabName = prefabName; DisplayName = displayName; } } private static bool registered; public static void Register(AssetBundle bundle) { //IL_0177: 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) //IL_0202: Expected O, but got Unknown //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Expected O, but got Unknown //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Expected O, but got Unknown //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Expected O, but got Unknown //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Expected O, but got Unknown if (registered || (Object)(object)bundle == (Object)null) { return; } PaperDef[] array = new PaperDef[7] { new PaperDef("M_WrappingPaper_BlackOrange_Valheim", "Wrapping Paper (Black & Orange)"), new PaperDef("M_WrappingPaper_Red_Blue", "Wrapping Paper (Red & Blue)"), new PaperDef("M_WrappingPaper_Silver_Black", "Wrapping Paper (Silver & Black)"), new PaperDef("M_WrappingPaper_Yellow_Deco", "Wrapping Paper (Yellow Deco)"), new PaperDef("M_WrappingPaper_SnowFlake_Blue", "Wrapping Paper (SnowFlake Blue)"), new PaperDef("M_WrappingPaper_SnowFlake_Red", "Wrapping Paper (SnowFlake Red)"), new PaperDef("M_Gree_Gold_WrappingPaper", "Wrapping Paper (Green & Gold)") }; PaperDef[] array2 = array; for (int i = 0; i < array2.Length; i++) { PaperDef paperDef = array2[i]; GameObject val = bundle.LoadAsset<GameObject>(paperDef.PrefabName); if ((Object)(object)val == (Object)null) { continue; } ((Object)val).name = paperDef.PrefabName; ZNetView val2 = val.GetComponent<ZNetView>() ?? val.AddComponent<ZNetView>(); val2.m_persistent = true; val.layer = LayerMask.NameToLayer("item"); ItemDrop component = val.GetComponent<ItemDrop>(); if (!((Object)(object)component == (Object)null) && component.m_itemData?.m_shared != null) { SharedData shared = component.m_itemData.m_shared; shared.m_itemType = (ItemType)1; shared.m_maxStackSize = 100; shared.m_weight = 0.1f; shared.m_value = 0; shared.m_name = paperDef.DisplayName; shared.m_description = "Festive paper used to wrap gifts."; Sprite val3 = bundle.LoadAsset<Sprite>(paperDef.PrefabName); if ((Object)(object)val3 != (Object)null) { shared.m_icons = (Sprite[])(object)new Sprite[1] { val3 }; } component.m_itemData.m_dropPrefab = val; ItemManager.Instance.AddItem(new CustomItem(val, true)); ItemManager instance = ItemManager.Instance; RecipeConfig val4 = new RecipeConfig(); val4.Item = paperDef.PrefabName; val4.Amount = 1; val4.CraftingStation = "M_Wrapping_Table"; val4.Requirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Dandelion", 1, 0, true) }; instance.AddRecipe(new CustomRecipe(val4)); } } registered = true; } } public static class WrappedGiftItemRegistrar { private static bool registered; private static readonly string[] GiftPrefabs = new string[7] { "M_Gift_BlackOrange_Valheim", "M_Gift_Yellow_Deco", "M_Gift_Red_Blue", "M_Gree_Gold_Gift", "M_SnowFlake_Blue", "M_SnowFlake_Red", "M_Gift_Silver_Black" }; public static void Register(AssetBundle bundle) { //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown if (registered || (Object)(object)bundle == (Object)null) { return; } string[] giftPrefabs = GiftPrefabs; foreach (string text in giftPrefabs) { GameObject val = bundle.LoadAsset<GameObject>(text); if ((Object)(object)val == (Object)null) { continue; } ((Object)val).name = text; ZNetView val2 = val.GetComponent<ZNetView>() ?? val.AddComponent<ZNetView>(); val2.m_persistent = true; val.layer = LayerMask.NameToLayer("item"); ItemDrop component = val.GetComponent<ItemDrop>(); if (!((Object)(object)component == (Object)null) && component.m_itemData?.m_shared != null) { SharedData shared = component.m_itemData.m_shared; shared.m_itemType = (ItemType)2; shared.m_maxStackSize = 1; shared.m_weight = 1f; shared.m_value = 0; shared.m_description = "A wrapped gift. Right-click to open."; Sprite val3 = bundle.LoadAsset<Sprite>(text); if ((Object)(object)val3 != (Object)null) { shared.m_icons = (Sprite[])(object)new Sprite[1] { val3 }; } component.m_itemData.m_dropPrefab = val; ItemManager.Instance.AddItem(new CustomItem(val, true)); } } registered = true; } } public class DeerMarker : MonoBehaviour { public static readonly HashSet<DeerMarker> All = new HashSet<DeerMarker>(); private void OnEnable() { All.Add(this); } private void OnDisable() { All.Remove(this); } } public class IcicleFlow : MonoBehaviour { public enum Axis { Auto, Y, Z } private class Column { public int columnIndex; public int batch; public float cycleLength; public List<Renderer> bulbs = new List<Renderer>(); public List<MaterialPropertyBlock> mpb = new List<MaterialPropertyBlock>(); } [Header("Target naming")] public string columnNamePrefix = "Icicle_Lamp_"; public string bulbNamePrefix = "Light"; [Header("Look")] public Color dripColor = new Color(0.6f, 0.85f, 1f); [Min(0f)] public float emissionIntensity = 4.5f; public bool affectBaseColor = false; [Header("Timing")] [Min(0.01f)] public float dripStepSeconds = 0.15f; [Min(0f)] public float pauseAfterColumn = 0.6f; [Min(1f)] public int batchCount = 3; [Min(0f)] public float batchSpacingSeconds = 4f; [Header("Advanced")] public bool includeInactive = true; public bool autoDetectVerticalAxis = true; public Axis verticalAxis = Axis.Auto; [Header("Performance")] [Min(0.01f)] public float minUpdateInterval = 0.05f; [Min(0f)] public float activeDistance = 60f; private readonly List<Column> _columns = new List<Column>(); private float _gammaIntensity; private int _colorId; private int _emissId; private float _accum; private bool _isActive; private void Awake() { _colorId = Shader.PropertyToID("_Color"); _emissId = Shader.PropertyToID("_EmissionColor"); _gammaIntensity = Mathf.LinearToGammaSpace(Mathf.Max(0f, emissionIntensity)); BuildColumns(); } private void OnEnable() { PrepareMPBs(); } private void Update() { //IL_002b: 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_014a: 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_01ea: Unknown result type (might be due to invalid IL or missing references) if (_columns.Count == 0) { return; } if (activeDistance > 0f && !Player.IsPlayerInRange(((Component)this).transform.position, activeDistance)) { if (_isActive) { for (int i = 0; i < _columns.Count; i++) { SetColumnAll(_columns[i], Color.black); } _isActive = false; } return; } _isActive = true; _accum += Time.deltaTime; if (_accum < minUpdateInterval) { return; } _accum = 0f; float time = Time.time; for (int j = 0; j < _columns.Count; j++) { Column column = _columns[j]; if (column.bulbs.Count == 0) { continue; } float num = (float)column.batch * Mathf.Min(batchSpacingSeconds, column.cycleLength * 0.9f); float num2 = time - num; if (num2 < 0f) { SetColumnAll(column, Color.black); continue; } float num3 = column.cycleLength; if (num3 <= 0.0001f) { num3 = 0.0001f; } float num4 = num2 % num3; int count = column.bulbs.Count; float num5 = (float)count * Mathf.Max(0.01f, dripStepSeconds); if (num4 >= 0f && num4 < num5) { int activeIndex = Mathf.Clamp(Mathf.FloorToInt(num4 / Mathf.Max(0.01f, dripStepSeconds)), 0, count - 1); SetColumnActive(column, activeIndex, dripColor); } else { SetColumnAll(column, Color.black); } } } private void BuildColumns() { //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Expected O, but got Unknown _columns.Clear(); List<Transform> list = new List<Transform>(); Transform[] componentsInChildren = ((Component)this).GetComponentsInChildren<Transform>(includeInactive); foreach (Transform val in componentsInChildren) { if (Object.op_Implicit((Object)(object)val) && (string.IsNullOrEmpty(columnNamePrefix) || ((Object)val).name.StartsWith(columnNamePrefix))) { list.Add(val); } } list.Sort((Transform a, Transform b) => a.localPosition.x.CompareTo(b.localPosition.x)); for (int j = 0; j < list.Count; j++) { Transform val2 = list[j]; Column column = new Column(); column.columnIndex = j; column.batch = ((batchCount > 0) ? (j % batchCount) : 0); Renderer[] componentsInChildren2 = ((Component)val2).GetComponentsInChildren<Renderer>(includeInactive); foreach (Renderer val3 in componentsInChildren2) { if (Object.op_Implicit((Object)(object)val3)) { string text = ((Object)((Component)val3).gameObject).name.ToLowerInvariant(); if (string.IsNullOrEmpty(bulbNamePrefix) || text.StartsWith(bulbNamePrefix.ToLowerInvariant())) { column.bulbs.Add(val3); } } } if (column.bulbs.Count != 0) { Axis axis = ResolveAxis(column.bulbs); column.bulbs.Sort(delegate(Renderer a, Renderer b) { float localAxis = GetLocalAxis(((Component)a).transform, axis); float localAxis2 = GetLocalAxis(((Component)b).transform, axis); return -localAxis.CompareTo(localAxis2); }); for (int l = 0; l < column.bulbs.Count; l++) { column.mpb.Add(new MaterialPropertyBlock()); } column.cycleLength = (float)column.bulbs.Count * Mathf.Max(0.01f, dripStepSeconds) + Mathf.Max(0f, pauseAfterColumn); _columns.Add(column); } } } private Axis ResolveAxis(List<Renderer> bulbs) { //IL_005a: 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_0061: 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_0071: 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_0089: 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_00a1: 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) if (!autoDetectVerticalAxis) { return (verticalAxis == Axis.Auto) ? Axis.Z : verticalAxis; } float num = float.PositiveInfinity; float num2 = float.NegativeInfinity; float num3 = float.PositiveInfinity; float num4 = float.NegativeInfinity; for (int i = 0; i < bulbs.Count; i++) { Transform transform = ((Component)bulbs[i]).transform; Vector3 localPosition = transform.localPosition; if (localPosition.y < num) { num = localPosition.y; } if (localPosition.y > num2) { num2 = localPosition.y; } if (localPosition.z < num3) { num3 = localPosition.z; } if (localPosition.z > num4) { num4 = localPosition.z; } } float num5 = num2 - num; float num6 = num4 - num3; if (num5 >= num6) { return Axis.Y; } return Axis.Z; } private float GetLocalAxis(Transform t, Axis axis) { //IL_0012: 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_002e: Unknown result type (might be due to invalid IL or missing references) return axis switch { Axis.Y => t.localPosition.y, Axis.Z => t.localPosition.z, _ => t.localPosition.z, }; } private void PrepareMPBs() { for (int i = 0; i < _columns.Count; i++) { Column column = _columns[i]; for (int j = 0; j < column.bulbs.Count; j++) { Renderer val = column.bulbs[j]; if (Object.op_Implicit((Object)(object)val)) { Material sharedMaterial = val.sharedMaterial; if ((Object)(object)sharedMaterial != (Object)null) { sharedMaterial.EnableKeyword("_EMISSION"); } val.GetPropertyBlock(column.mpb[j]); } } } } private void SetColumnActive(Column col, int activeIndex, Color onColor) { //IL_0069: 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_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0050: 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) for (int i = 0; i < col.bulbs.Count; i++) { Renderer val = col.bulbs[i]; if (Object.op_Implicit((Object)(object)val)) { MaterialPropertyBlock val2 = col.mpb[i]; if (affectBaseColor) { val2.SetColor(_colorId, (i == activeIndex) ? onColor : Color.black); } val2.SetColor(_emissId, (i == activeIndex) ? (onColor * _gammaIntensity) : Color.black); val.SetPropertyBlock(val2); } } } private void SetColumnAll(Column col, Color c) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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) for (int i = 0; i < col.bulbs.Count; i++) { Renderer val = col.bulbs[i]; if (Object.op_Implicit((Object)(object)val)) { MaterialPropertyBlock val2 = col.mpb[i]; if (affectBaseColor) { val2.SetColor(_colorId, c); } val2.SetColor(_emissId, c * _gammaIntensity); val.SetPropertyBlock(val2); } } } } [BepInPlugin("Moonforged.ChristmasDecorations", "Moonforged Christmas Decorations", "1.0.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class MoonforgedChristmas : BaseUnityPlugin { [CompilerGenerated] private sealed class <DelayedRegister>d__7 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public AssetBundle bundle; public MoonforgedChristmas <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedRegister>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if ((Object)(object)ZNetScene.instance == (Object)null) { <>2__current = null; <>1__state = 1; return true; } RelicRegistrar.RegisterAllRelics(bundle); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public const string PluginGUID = "Moonforged.ChristmasDecorations"; public const string PluginName = "Moonforged Christmas Decorations"; public const string PluginVersion = "1.0.3"; private AssetBundle christmasBundle; private static readonly List<GameObject> placedObjects = new List<GameObject>(); public static ConfigEntry<string> PlayerPreferredCategory; private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) new Harmony("moonforged.christmas.scalingdebug").PatchAll(); string resourcePath = "MoonforgedChristmasDecorations.christmas"; christmasBundle = EmbeddedAssetBundleLoader.LoadBundle(resourcePath); if ((Object)(object)christmasBundle == (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load embedded AssetBundle."); return; } TrackAllPrefabsInBundle(christmasBundle); PlayerPreferredCategory = ((BaseUnityPlugin)this).Config.Bind<string>("General", "CustomHammerTab", "Moonforged Christmas", "Set the hammer tab where this mod's pieces should appear (e.g., Building, Furniture, Moonforged Christmas)"); foreach (string allCategory in RelicRegistrar.GetAllCategories()) { PieceManager.Instance.AddPieceCategory(allCategory); } PrefabManager.OnPrefabsRegistered += delegate { ((MonoBehaviour)this).StartCoroutine(DelayedRegister(christmasBundle)); }; } [IteratorStateMachine(typeof(<DelayedRegister>d__7))] private IEnumerator DelayedRegister(AssetBundle bundle) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedRegister>d__7(0) { <>4__this = this, bundle = bundle }; } public static void TrackAllPrefabsInBundle(AssetBundle bundle) { GameObject[] array = bundle.LoadAllAssets<GameObject>(); foreach (GameObject val in array) { if ((Object)(object)val != (Object)null && (Object)(object)val.GetComponent<PlacementWatcher>() == (Object)null) { val.AddComponent<PlacementWatcher>().RegisterList = placedObjects; } } } } public static class EmbeddedAssetBundleLoader { public static AssetBundle LoadBundle(string resourcePath) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); using Stream stream = executingAssembly.GetManifestResourceStream(resourcePath); if (stream == null) { Debug.LogError((object)("AssetBundle resource not found: " + resourcePath)); return null; } byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); return AssetBundle.LoadFromMemory(array); } } [HarmonyPatch] internal static class WrappedGiftConsumePatch { [HarmonyPatch(typeof(Player), "ConsumeItem")] [HarmonyPrefix] private static bool Player_ConsumeItem_Prefix(Player __instance, Inventory inventory, ItemData item) { if ((Object)(object)__instance == (Object)null || inventory == null || item == null) { return true; } if (!IsGift(item)) { return true; } if (WrappedGiftUse.OnUse(item, __instance)) { return false; } return true; } private static bool IsGift(ItemData item) { if (item == null || (Object)(object)item.m_dropPrefab == (Object)null) { return false; } string name = ((Object)item.m_dropPrefab).name; if (string.IsNullOrEmpty(name)) { return false; } if (name.StartsWith("M_Gift_")) { return true; } if (name.StartsWith("M_SnowFlake_")) { return true; } if (name == "M_Gree_Gold_Gift") { return true; } return false; } } [HarmonyPatch(typeof(Container), "GetHoverName")] internal static class WrappingBoxHoverNamePatch { private static void Postfix(Container __instance, ref string __result) { if (!((Object)(object)__instance == (Object)null)) { WrappingBoxProcessor componentInParent = ((Component)__instance).GetComponentInParent<WrappingBoxProcessor>(); if (!((Object)(object)componentInParent == (Object)null)) { __result = "Wrapper"; } } } } [HarmonyPatch(typeof(Container), "GetHoverText")] internal static class WrappingBoxHoverTextPatch { private static void Postfix(Container __instance, ref string __result) { if ((Object)(object)__instance == (Object)null) { return; } WrappingBoxProcessor componentInParent = ((Component)__instance).GetComponentInParent<WrappingBoxProcessor>(); if (!((Object)(object)componentInParent == (Object)null)) { if (componentInParent.CanWrap()) { __result = "Wrapper\n[<color=yellow><b>E</b></color>] Open\n<color=orange>Close box to wrap gift</color>"; } else { __result = "Wrapper\n[<color=yellow><b>E</b></color>] Open\n(Add 1 gift + 1 item)"; } } } } public class PlacementWatcher : MonoBehaviour { public List<GameObject> RegisterList; private void Start() { if (RegisterList != null && !RegisterList.Contains(((Component)this).gameObject)) { RegisterList.Add(((Component)this).gameObject); } } private void OnDestroy() { if (RegisterList != null) { RegisterList.Remove(((Component)this).gameObject); } } } public class RainbowGlow : MonoBehaviour { public float cycleSeconds = 10f; public float emissionIntensity = 1.5f; public float lightRange = 3f; public float lightIntensity = 1.8f; private bool _active; private Material _matInstance; private Light _light; private void Start() { //IL_0060: 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) _active = (Object)(object)((Component)this).GetComponentInParent<ItemStand>() != (Object)null; if (_active) { Renderer componentInChildren = ((Component)this).GetComponentInChildren<Renderer>(); if ((Object)(object)componentInChildren != (Object)null) { _matInstance = componentInChildren.material; _matInstance.EnableKeyword("_EMISSION"); _matInstance.SetColor("_EmissionColor", Color.white * emissionIntensity); _matInstance.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)1; } _light = ((Component)this).GetComponent<Light>(); if ((Object)(object)_light == (Object)null) { _light = ((Component)this).gameObject.AddComponent<Light>(); _light.type = (LightType)2; _light.range = lightRange; _light.intensity = lightIntensity; _light.shadows = (LightShadows)0; } } } private void Update() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) if (_active && !((Object)(object)_matInstance == (Object)null) && !((Object)(object)_light == (Object)null)) { float num = Mathf.Max(0.01f, cycleSeconds); float num2 = Time.time % num / num; Color val = Color.HSVToRGB(num2, 1f, 1f); _matInstance.SetColor("_EmissionColor", val * emissionIntensity); _light.color = val; } } } public class RelicRegistration { public string PrefabName; public string DisplayName; public RequirementConfig[] Requirements; public string Description; public string Category; public int Comfort; public string CraftingStation; public RelicRegistration(string prefab, string display, RequirementConfig[] reqs, string desc, string cat, int comfort = 0, string craftingStation = "Workbench") { PrefabName = prefab; DisplayName = display; Requirements = reqs; Description = desc; Category = cat; Comfort = comfort; CraftingStation = craftingStation; } } public static class RelicRegistrar { private class ScaleEnforcer : MonoBehaviour { public Vector3 desiredScale = Vector3.one; private void Awake() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.localScale = desiredScale; } } private static bool wasAlreadyRegistered = false; private static bool _starRegistered = false; public static readonly List<RelicRegistration> AllRegistrations = new List<RelicRegistration> { new RelicRegistration("M_Christmas_Tree_1", "Town Square Christmas Tree", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("Wood", 30, 0, true), new RequirementConfig("Raspberry", 20, 0, true), new RequirementConfig("Blueberries", 20, 0, true), new RequirementConfig("Coal", 20, 0, true) }, "Large town square Christmas Tree, craft a Star in the workbench and place it on the top.", "building"), new RelicRegistration("M_Christmas_Tree_Small", "Small Christmas Tree", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("Wood", 10, 0, true), new RequirementConfig("Raspberry", 5, 0, true), new RequirementConfig("Blueberries", 5, 0, true), new RequirementConfig("Coal", 5, 0, true) }, "A small Christmas Tree, craft a Star in the workbench and place it on the top.", "building"), new RelicRegistration("M_Garland", "Green Christmas Garland", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 2, 0, true), new RequirementConfig("Raspberry", 2, 0, true) }, "A traditional Holiday decoration, you can link them with bows.", "building"), new RelicRegistration("M_Garland_White", "White Christmas Garland", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 2, 0, true), new RequirementConfig("Blueberries", 2, 0, true) }, "A traditional Holiday decoration, you can link them with bows.", "building"), new RelicRegistration("M_Garland_Spiral_Green", "Christmas Spiral Garland (Green)", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 5, 0, true), new RequirementConfig("PineCone", 1, 0, true) }, "They can be used arround pillars and poles.", "building"), new RelicRegistration("M_Garland_Spiral_White", "Christmas Spiral Garland (White)", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 5, 0, true), new RequirementConfig("PineCone", 1, 0, true) }, "They can be used arround pillars and poles.", "building"), new RelicRegistration("M_Christmas_Wreath", "Christmas Wreath", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("FineWood", 1, 0, true), new RequirementConfig("FirCone", 4, 0, true), new RequirementConfig("Raspberry", 10, 0, true) }, "Brings a traditional feeling in your homes.", "building"), new RelicRegistration("M_mistletoe", "Christmas Mistletoe", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 1, 0, true), new RequirementConfig("JuteRed", 1, 0, true) }, "Kiss your partner or the troll under it.", "building"), new RelicRegistration("Christmas_Lights1", "Christmas Star Lights", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 5, 0, true) }, "Nice Twinkly Star shaped Lights.", "building"), new RelicRegistration("Christmas_Lights2", "Christmas Snowflake Lights", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 5, 0, true) }, "Nice Twinkly Snowflake shaped Lights", "building"), new RelicRegistration("MChristmas_Lights1", "Christmas Lights", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Raspberry", 5, 0, true), new RequirementConfig("Blueberries", 5, 0, true), new RequirementConfig("Coal", 5, 0, true) }, "Nice Twinkly Lights", "building"), new RelicRegistration("MChristmas_LongLights1", "Christmas Long Lights", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Raspberry", 5, 0, true), new RequirementConfig("Blueberries", 5, 0, true), new RequirementConfig("Coal", 5, 0, true) }, "Nice Twinkly Lights", "building"), new RelicRegistration("M_Icicle_Lamp", "Icicle Christmas Lights", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 5, 0, true) }, "Glowing icicle light string that drips with blue light.", "building"), new RelicRegistration("MultiStar_Light", "Star Lights", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 5, 0, true) }, "Glowing Multi Star lights.", "building"), new RelicRegistration("8Meter_Town_Light", "8 Meter Town Square Light", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 5, 0, true) }, "Town Square Star Light Decoration.", "building"), new RelicRegistration("M_Snowflake", "Christmas Hanging Snowflake Model I", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 1, 0, true) }, "A Shiny Hanging Snowflake.", "building"), new RelicRegistration("M_Snowflake2", "Christmas Hanging Snowflake Model II", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 1, 0, true) }, "A Shiny Hanging Snowflake.", "building"), new RelicRegistration("M_Snowflake3", "Christmas Hanging Snowflake Model III", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 1, 0, true) }, "A Shiny Hanging Snowflake.", "building"), new RelicRegistration("M_Snowflake4", "Christmas Hanging Snowflake Model IV", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 1, 0, true) }, "A Shiny Hanging Snowflake.", "building"), new RelicRegistration("M_BigblueChristmasbow", "Big Blue Christmas Bow", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("LeatherScraps", 2, 0, true), new RequirementConfig("Blueberries", 2, 0, true) }, "A nice Bow to connect your garlands.", "building"), new RelicRegistration("M_BigredChristmasbow", "Big Red Christmas Bow", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("LeatherScraps", 2, 0, true), new RequirementConfig("Bloodbag", 1, 0, true) }, "A nice Bow to connect your garlands.", "building"), new RelicRegistration("M_Cozy_Yule_Cup", "Cozy Yule Hot Cocoa Cup", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "", "building"), new RelicRegistration("M_Cozy_Candy_Cane_Cup", "Hot Cocoa Cup with a Candy Cane", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "", "building"), new RelicRegistration("Christmas_Cups3", "Hot Cocoa Cup with a Chocolate Tree", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "", "building"), new RelicRegistration("M_MilkandCookiesforSanta", "Milk and Cookies for Santa", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Resin", 1, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "", "building"), new RelicRegistration("M_Gingerbread_Man", "Gingerbread Man", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Wood", 1, 0, true) }, "We finaly caught him!", "building"), new RelicRegistration("M_Christmas_Cake", "Christmas Cake on a Plate", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Stone", 1, 0, true), new RequirementConfig("Blueberries", 5, 0, true), new RequirementConfig("BarleyFlour", 1, 0, true) }, "Don`t eat it all, leave some for Santa.", "building"), new RelicRegistration("M_Christmas_Cake2", "Christmas Strawberry Cake on a Plate", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Stone", 1, 0, true), new RequirementConfig("Raspberry", 5, 0, true), new RequirementConfig("BarleyFlour", 1, 0, true) }, "Don`t eat it all, leave some for Santa.", "building"), new RelicRegistration("M_YuleLogCake", "Yule Log Cake", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Raspberry", 5, 0, true), new RequirementConfig("BarleyFlour", 1, 0, true) }, "Is not a poop is a cake.", "building"), new RelicRegistration("M_Christmas_Wine", "Bottle of Wine", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Stone", 1, 0, true), new RequirementConfig("Raspberry", 5, 0, true) }, "Moonforged Christmas Home made Wine for you all.", "building"), new RelicRegistration("M_Red_Candy_Cane_1m", "Red Candy Cane", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Raspberry", 1, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "Candy Cane decorations.", "building"), new RelicRegistration("M_Green_Candy_Cane_1m", "Green Candy Cane", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Dandelion", 1, 0, true) }, "Candy Cane decorations.", "building"), new RelicRegistration("M_RedGreen_Candy_Cane_1m", "Red & Green Candy Cane", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Raspberry", 1, 0, true), new RequirementConfig("Dandelion", 1, 0, true) }, "Candy Cane decorations.", "building"), new RelicRegistration("M_Green_Red_Candy_Cane_1m", "Green & Red Candy Cane", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 1, 0, true), new RequirementConfig("Raspberry", 1, 0, true), new RequirementConfig("Dandelion", 1, 0, true) }, "Candy Cane decorations.", "building"), new RelicRegistration("M_Christmas_Stocking", "Christmas Stocking", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("LeatherScraps", 1, 0, true), new RequirementConfig("Bloodbag", 1, 0, true) }, "", "building"), new RelicRegistration("M_Christmas_Stocking_2", "Large Christmas Stocking", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("LeatherScraps", 2, 0, true), new RequirementConfig("Raspberry", 1, 0, true) }, "", "building"), new RelicRegistration("M_Snowman", "Snowman", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 3, 0, true), new RequirementConfig("Coal", 5, 0, true), new RequirementConfig("Carrot", 1, 0, true) }, "", "building"), new RelicRegistration("M_SantaClaus", "Santa Claus", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("FineWood", 10, 0, true), new RequirementConfig("LeatherScraps", 10, 0, true), new RequirementConfig("Raspberry", 10, 0, true), new RequirementConfig("Coal", 5, 0, true) }, "Saint Nicholas", "building"), new RelicRegistration("M_Small_Santa_Claus", "Small Santa Claus Figurine", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("FineWood", 2, 0, true), new RequirementConfig("LeatherScraps", 3, 0, true), new RequirementConfig("Raspberry", 3, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "He`s always watching, what a creep.", "building"), new RelicRegistration("M_SantaBag", "Santa’s Bag of Gifts", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 2, 0, true), new RequirementConfig("LeatherScraps", 10, 0, true) }, "Wonder whats inside?", "building"), new RelicRegistration("M_boot", "Santa’s Boot of Gifts and Flowers", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 2, 0, true), new RequirementConfig("Raspberry", 2, 0, true) }, "You can put gifts or flowers inside the boot.", "building"), new RelicRegistration("M_Nutcracker", "Nutcracker Figurine", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("FineWood", 1, 0, true) }, "Wooden figurine with a hinged mouth for cracking nuts.", "building"), new RelicRegistration("M_Deer", "Santa’s Reindeers", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("DeerMeat", 4, 0, true), new RequirementConfig("DeerHide", 4, 0, true) }, "Dasher, Dancer, Prancer, Vixen, Comet, Cupid, Donner, Blitzen", "building"), new RelicRegistration("M_Deer_Rudy", "Rudolph the Red-Nosed Reindeer", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("DeerMeat", 4, 0, true), new RequirementConfig("DeerHide", 4, 0, true), new RequirementConfig("Raspberry", 1, 0, true) }, "A very shiny nose. You might even say it glows.", "building"), new RelicRegistration("M_Christmas_Sled", "Santa’s Sled", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("Wood", 40, 0, true), new RequirementConfig("BronzeNails", 20, 0, true), new RequirementConfig("Bronze", 5, 0, true) }, "Sanat`s Christmas Sled, you can sit in it.", "building", 0, "Forge"), new RelicRegistration("M_Christmas_Train", "Christmas Train", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 5, 0, true), new RequirementConfig("Iron", 1, 0, true) }, "A small train that runs around its track and you can ride it round and round.", "building", 0, "Forge"), new RelicRegistration("M_Christmas_Banner_1", "Santa`s Christmas Banner I", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("LeatherScraps", 6, 0, true), new RequirementConfig("FineWood", 2, 0, true), new RequirementConfig("Raspberry", 2, 0, true), new RequirementConfig("Guck", 1, 0, true) }, "Reindeers under the mistletoe", "building"), new RelicRegistration("M_Christmas_Banner_2", "Santa`s Christmas Banner II", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("LeatherScraps", 6, 0, true), new RequirementConfig("FineWood", 2, 0, true), new RequirementConfig("Raspberry", 2, 0, true), new RequirementConfig("Guck", 1, 0, true) }, "Jingle bells", "building"), new RelicRegistration("M_Christmas_Banner_4", "Santa`s Christmas Banner IV", (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig("LeatherScraps", 6, 0, true), new RequirementConfig("FineWood", 2, 0, true), new RequirementConfig("Raspberry", 2, 0, true), new RequirementConfig("Coal", 1, 0, true) }, "Reindeers under the evening star.", "building"), new RelicRegistration("M_Bench", "Santa`s Christmas Bench", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 5, 0, true), new RequirementConfig("Iron", 2, 0, true) }, "", "building", 0, "Forge"), new RelicRegistration("M_Christmas_Throne", "Santa`s Christmas Throne", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("FineWood", 20, 0, true), new RequirementConfig("BronzeNails", 10, 0, true), new RequirementConfig("JuteRed", 2, 0, true) }, "Sit on Santa`s lap and tell him what you want for christmas.", "building", 0, "Forge"), new RelicRegistration("M_Star", "Evening Star", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 2, 0, true) }, "Can be placed on top of the Christmas tree", "building"), new RelicRegistration("Tio_de_Nadal", "Tió de Nadal", (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig("RoundLog", 2, 0, true), new RequirementConfig("LeatherScraps", 2, 0, true), new RequirementConfig("Raspberry", 1, 0, true) }, "", "building"), new RelicRegistration("M_icicles", "An Icicle.", (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Crystal", 1, 0, true) }, "Dripping ice decoration.", "building"), new RelicRegistration("ChirstmasMozaic_1", "Snowman Stained-Glass Window.", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Crystal", 1, 0, true), new RequirementConfig("FineWood", 4, 0, true) }, "", "building"), new RelicRegistration("ChirstmasMozaic_2", "Santa`s Stained-Glass Window.", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Crystal", 1, 0, true), new RequirementConfig("FineWood", 4, 0, true) }, "", "building"), new RelicRegistration("ChristmasHouseMozaic", "Christmas Home Stained-Glass Window.", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Crystal", 1, 0, true), new RequirementConfig("FineWood", 4, 0, true) }, "", "building"), new RelicRegistration("M_Wrapping_Table", "Christmas Wrapping Table.", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Wood", 5, 0, true), new RequirementConfig("FineWood", 5, 0, true) }, "From this table you can create christmas gifts and decorations.", "building", 0, "") }; public static IEnumerable<string> GetAllCategories() { return AllRegistrations.Select((RelicRegistration r) => CategoryToTab(r.Category)).Distinct(); } private static string CategoryToTab(string category) { string text = category.ToLower(); string text2 = text; string text3 = text2; if (text3 == "building") { return MoonforgedChristmas.PlayerPreferredCategory.Value; } return category; } public static void RegisterAllRelics(AssetBundle bundle) { if (wasAlreadyRegistered) { return; } foreach (RelicRegistration allRegistration in AllRegistrations) { RegisterRelic(bundle, allRegistration); } WrappedGiftItemRegistrar.Register(bundle); WrappingPaperRegistrar.Register(bundle); wasAlreadyRegistered = true; } private static void RegisterRelic(AssetBundle bundle, RelicRegistration reg) { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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_00e5: 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_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: 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_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026f: 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_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: 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_0307: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0318: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03ae: Unknown result type (might be due to invalid IL or missing references) //IL_0449: Unknown result type (might be due to invalid IL or missing references) //IL_044e: Unknown result type (might be due to invalid IL or missing references) //IL_0a1b: Unknown result type (might be due to invalid IL or missing references) //IL_0a22: Expected O, but got Unknown //IL_0a39: Unknown result type (might be due to invalid IL or missing references) //IL_0a3e: Unknown result type (might be due to invalid IL or missing references) //IL_0a46: Unknown result type (might be due to invalid IL or missing references) //IL_0a52: Expected O, but got Unknown //IL_0a63: Unknown result type (might be due to invalid IL or missing references) //IL_0a68: Unknown result type (might be due to invalid IL or missing references) //IL_0a70: Unknown result type (might be due to invalid IL or missing references) //IL_0a7c: Expected O, but got Unknown //IL_0ac5: Unknown result type (might be due to invalid IL or missing references) //IL_0acc: Expected O, but got Unknown //IL_0ae3: Unknown result type (might be due to invalid IL or missing references) //IL_0ae8: Unknown result type (might be due to invalid IL or missing references) //IL_0af0: Unknown result type (might be due to invalid IL or missing references) //IL_0afc: Expected O, but got Unknown //IL_0b3e: Unknown result type (might be due to invalid IL or missing references) //IL_0b43: Unknown result type (might be due to invalid IL or missing references) //IL_0b4f: Unknown result type (might be due to invalid IL or missing references) //IL_0b61: Unknown result type (might be due to invalid IL or missing references) //IL_0b6e: Unknown result type (might be due to invalid IL or missing references) //IL_0b7d: Expected O, but got Unknown //IL_0b86: Unknown result type (might be due to invalid IL or missing references) //IL_0b90: Expected O, but got Unknown //IL_0b0d: Unknown result type (might be due to invalid IL or missing references) //IL_0b12: Unknown result type (might be due to invalid IL or missing references) //IL_0b1a: Unknown result type (might be due to invalid IL or missing references) //IL_0b26: Expected O, but got Unknown if ((Object)(object)bundle == (Object)null) { return; } if (reg.PrefabName == "M_Star") { RegisterCraftedStar(bundle, reg); return; } GameObject val = bundle.LoadAsset<GameObject>(reg.PrefabName); if ((Object)(object)val == (Object)null) { return; } ((Object)val).name = reg.PrefabName; if (reg.PrefabName == "M_Wrapping_Table") { val.AddComponent<WrappingBoxProxy>(); } if (reg.PrefabName == "M_Deer" || reg.PrefabName == "M_Deer_Rudy") { val.transform.localScale = Vector3.one * 0.014f; ScaleEnforcer scaleEnforcer = val.GetComponent<ScaleEnforcer>() ?? val.AddComponent<ScaleEnforcer>(); scaleEnforcer.desiredScale = Vector3.one * 0.014f; if (!Object.op_Implicit((Object)(object)val.GetComponent<DeerMarker>())) { val.AddComponent<DeerMarker>(); } } if (reg.PrefabName == "M_Christmas_Tree_1") { ChildLightsCycler childLightsCycler = val.GetComponent<ChildLightsCycler>() ?? val.AddComponent<ChildLightsCycler>(); childLightsCycler.lightRendererNames = new string[3] { "Light1", "Light2", "Light3" }; childLightsCycler.intensity = 4.4f; childLightsCycler.stepSeconds = 1f; } if (reg.PrefabName == "Christmas_Lights1") { ChristmasLightChaserInstaller.InstallOn(val, 1f, 4.4f); } if (reg.PrefabName == "Christmas_Lights2") { ChristmasLightChaserInstaller.InstallOn(val, 0.8f, 4.4f, (Color[])(object)new Color[2] { Color.white, Color.yellow }, ChristmasLightChaser.AnimationMode.BlinkAll); } if (reg.PrefabName == "8Meter_Town_Light") { ChristmasLightChaserInstaller.InstallOn(val, 0.8f, 4.4f, (Color[])(object)new Color[2] { Color.white, Color.yellow }, ChristmasLightChaser.AnimationMode.BlinkAll); } if (reg.PrefabName == "MChristmas_Lights1" || reg.PrefabName == "MChristmas_LongLights1") { ChristmasLightChaserInstaller.InstallOn(val, 1f, 4.4f, (Color[])(object)new Color[3] { Color.red, Color.yellow, Color.blue }, ChristmasLightChaser.AnimationMode.Chase); } if (reg.PrefabName == "M_Garland_Spiral_Green") { ChristmasLightChaserInstaller.InstallOn(val, 1f, 4.4f, (Color[])(object)new Color[3] { Color.red, Color.yellow, Color.blue }, ChristmasLightChaser.AnimationMode.Chase); } if (reg.PrefabName == "M_Garland_Spiral_White") { ChristmasLightChaserInstaller.InstallOn(val, 1f, 4.4f, (Color[])(object)new Color[3] { Color.red, Color.yellow, Color.blue }, ChristmasLightChaser.AnimationMode.Chase); } if (reg.PrefabName == "M_Icicle_Lamp") { IcicleFlow icicleFlow = val.GetComponent<IcicleFlow>() ?? val.AddComponent<IcicleFlow>(); icicleFlow.columnNamePrefix = "Icicle_Lamp_"; icicleFlow.bulbNamePrefix = "Light"; icicleFlow.dripStepSeconds = 0.35f; icicleFlow.pauseAfterColumn = 0.6f; icicleFlow.emissionIntensity = 4.5f; icicleFlow.dripColor = new Color(0.6f, 0.85f, 1f); icicleFlow.batchCount = 4; icicleFlow.batchSpacingSeconds = 4f; icicleFlow.autoDetectVerticalAxis = true; } if (reg.PrefabName == "MultiStar_Light") { IcicleFlow icicleFlow2 = val.GetComponent<IcicleFlow>() ?? val.AddComponent<IcicleFlow>(); icicleFlow2.columnNamePrefix = "MultiStar_Light"; icicleFlow2.bulbNamePrefix = "Light"; icicleFlow2.dripStepSeconds = 0.35f; icicleFlow2.pauseAfterColumn = 0.6f; icicleFlow2.emissionIntensity = 4.5f; icicleFlow2.dripColor = new Color(0.6f, 0.85f, 1f); icicleFlow2.batchCount = 4; icicleFlow2.batchSpacingSeconds = 4f; icicleFlow2.autoDetectVerticalAxis = true; } if (reg.PrefabName == "M_Christmas_Sled") { SledReinsConnector sledReinsConnector = val.GetComponent<SledReinsConnector>() ?? val.AddComponent<SledReinsConnector>(); sledReinsConnector.maxDeer = 9; sledReinsConnector.sledAnchorRootName = "RopeAttach"; sledReinsConnector.deerAnchorName = "ReinAnchor"; sledReinsConnector.useSingleStart = true; sledReinsConnector.verticalLift = 0f; sledReinsConnector.lateralSpacing = 0f; sledReinsConnector.forwardSpacing = 0f; sledReinsConnector.leadExtraForward = 0f; sledReinsConnector.ropeWidth = 0.018f; sledReinsConnector.ropeSag = 0.15f; sledReinsConnector.ropeSegments = 28; sledReinsConnector.windStrength = 0.25f; sledReinsConnector.jiggleAmplitude = 0.03f; sledReinsConnector.jiggleSpeed = 1.1f; } if (reg.PrefabName == "M_Christmas_Train") { InstallTrainOrbit(val, 18f, clockwise: false); } if (reg.PrefabName == "M_Wrapping_Table") { Transform val2 = val.transform.Find("Wrapping_Box"); if ((Object)(object)val2 != (Object)null) { GameObject gameObject = ((Component)val2).gameObject; if ((Object)(object)gameObject.GetComponent<WrappingBoxProcessor>() == (Object)null) { gameObject.AddComponent<WrappingBoxProcessor>(); } } EnsureWrappingTableCraftEffects(val); } ZNetView val3 = val.GetComponent<ZNetView>() ?? val.AddComponent<ZNetView>(); val3.m_persistent = true; val3.m_syncInitialScale = true; if (!Object.op_Implicit((Object)(object)val.GetComponent<ZSyncTransform>())) { val.AddComponent<ZSyncTransform>(); } Piece val4 = val.GetComponent<Piece>() ?? val.AddComponent<Piece>(); val4.m_name = reg.DisplayName; val4.m_description = reg.Description; val4.m_groundOnly = false; Sprite val5 = bundle.LoadAsset<Sprite>(reg.PrefabName); if ((Object)(object)val5 != (Object)null) { val4.m_icon = val5; } HashSet<string> hashSet = new HashSet<string> { "M_Gift_BlackOrange_Valheim", "M_Gift_Yellow_Deco", "M_Gift_Red_Blue", "M_SnowFlake_Blue", "M_SnowFlake_Red", "M_Garland", "M_Garland_White", "M_Garland_Spiral_Green", "M_Garland_Spiral_White", "M_Gingerbread_Man" }; HashSet<string> hashSet2 = new HashSet<string> { "M_Cozy_Yule_Cup", "M_Cozy_Candy_Cane_Cup", "Christmas_Cups3", "M_Christmas_Cake", "M_Christmas_Cake2", "M_icicles", "M_Snowflake", "M_Snowflake2", "M_Snowflake3", "M_Snowflake4", "M_YuleLogCake" }; HashSet<string> hashSet3 = new HashSet<string> { "M_BigredChristmasbow", "M_BigblueChristmasbow", "M_Small_Santa_Claus", "M_Christmas_Wine", "M_MilkandCookiesforSanta", "M_boot", "8Meter_Town_Light", "MultiStar_Light", "Christmas_Lights1", "Christmas_Lights2", "MChristmas_Lights1", "MChristmas_LongLights1", "M_Icicle_Lamp" }; HashSet<string> hashSet4 = new HashSet<string> { "M_Red_Candy_Cane_1m", "M_Green_Candy_Cane_1m", "M_RedGreen_Candy_Cane_1m", "M_Green_Red_Candy_Cane_1m" }; HashSet<string> hashSet5 = new HashSet<string> { "M_Christmas_Sled", "M_Christmas_Train", "M_Bench" }; string prefabName = reg.PrefabName; GameObject val6 = null; ZNetScene instance = ZNetScene.instance; GameObject val7 = ((instance != null) ? instance.GetPrefab("sfx_build_hammer_default") : null); GameObject val8 = null; ZNetScene instance2 = ZNetScene.instance; GameObject val9 = ((instance2 != null) ? instance2.GetPrefab("sfx_wood_destroyed") : null); if (hashSet.Contains(prefabName)) { ZNetScene instance3 = ZNetScene.instance; val7 = ((instance3 != null) ? instance3.GetPrefab("sfx_build_hammer_default") : null); ZNetScene instance4 = ZNetScene.instance; val9 = ((instance4 != null) ? instance4.GetPrefab("sfx_wood_destroyed") : null); } else if (hashSet2.Contains(prefabName) || hashSet3.Contains(prefabName)) { ZNetScene instance5 = ZNetScene.instance; val7 = ((instance5 != null) ? instance5.GetPrefab("sfx_build_hammer_crystal") : null); ZNetScene instance6 = ZNetScene.instance; val9 = ((instance6 != null) ? instance6.GetPrefab("sfx_clay_pot_break") : null); } else if (hashSet4.Contains(prefabName)) { ZNetScene instance7 = ZNetScene.instance; val6 = ((instance7 != null) ? instance7.GetPrefab("vfx_Place_stone") : null); ZNetScene instance8 = ZNetScene.instance; val7 = ((instance8 != null) ? instance8.GetPrefab("sfx_build_hammer_metal") : null); ZNetScene instance9 = ZNetScene.instance; val8 = ((instance9 != null) ? instance9.GetPrefab("vfx_destroyed") : null); ZNetScene instance10 = ZNetScene.instance; val9 = ((instance10 != null) ? instance10.GetPrefab("sfx_metal_blocked") : null); } else if (hashSet5.Contains(prefabName)) { ZNetScene instance11 = ZNetScene.instance; val6 = ((instance11 != null) ? instance11.GetPrefab("vfx_Place_stone") : null); ZNetScene instance12 = ZNetScene.instance; val7 = ((instance12 != null) ? instance12.GetPrefab("sfx_build_hammer_metal") : null); ZNetScene instance13 = ZNetScene.instance; val8 = ((instance13 != null) ? instance13.GetPrefab("vfx_destroyed") : null); ZNetScene instance14 = ZNetScene.instance; val9 = ((instance14 != null) ? instance14.GetPrefab("sfx_metal_blocked") : null); } EffectList val10 = new EffectList(); List<EffectData> list = new List<EffectData>(); if ((Object)(object)val6 != (Object)null) { list.Add(new EffectData { m_prefab = val6, m_enabled = true }); } if ((Object)(object)val7 != (Object)null) { list.Add(new EffectData { m_prefab = val7, m_enabled = true }); } val10.m_effectPrefabs = list.ToArray(); val4.m_placeEffect = val10; WearNTear val11 = val.GetComponent<WearNTear>() ?? val.AddComponent<WearNTear>(); val11.m_health = Mathf.Max(val11.m_health, 1000f); val11.m_noRoofWear = true; EffectList val12 = new EffectList(); List<EffectData> list2 = new List<EffectData>(); if ((Object)(object)val8 != (Object)null) { list2.Add(new EffectData { m_prefab = val8, m_enabled = true }); } if ((Object)(object)val9 != (Object)null) { list2.Add(new EffectData { m_prefab = val9, m_enabled = true }); } val12.m_effectPrefabs = list2.ToArray(); val11.m_destroyedEffect = val12; PieceConfig val13 = new PieceConfig { PieceTable = "Hammer", Category = CategoryToTab(reg.Category), CraftingStation = reg.CraftingStation, Requirements = reg.Requirements }; PieceManager.Instance.AddPiece(new CustomPiece(val, true, val13)); } private static void EnsureWrappingTableCraftEffects(GameObject wrappingTablePrefab) { if (!((Object)(object)wrappingTablePrefab == (Object)null)) { CraftingStation val = wrappingTablePrefab.GetComponent<CraftingStation>() ?? wrappingTablePrefab.AddComponent<CraftingStation>(); val.m_name = "Wrapping Table"; ZNetScene instance = ZNetScene.instance; GameObject sfx = ((instance != null) ? instance.GetPrefab("sfx_gui_craftitem_workbench") : null); ZNetScene instance2 = ZNetScene.instance; GameObject sfx2 = ((instance2 != null) ? instance2.GetPrefab("sfx_gui_craftitem_workbench_end") : null); GameObject vfx = null; GameObject vfx2 = null; EffectList value = MakeEffectList(vfx, sfx); EffectList value2 = MakeEffectList(vfx2, sfx2); TrySetEffectListField(val, "m_craftItemEffects", value); TrySetEffectListField(val, "m_craftItemEffect", value); TrySetEffectListField(val, "m_craftDoneEffects", value2); TrySetEffectListField(val, "m_craftItemDoneEffects", value2); TrySetEffectListField(val, "m_craftItemDoneEffect", value2); TrySetEffectListField(val, "m_repairItemEffects", value); TrySetEffectListField(val, "m_repairItemEffect", value); } } private static void TrySetEffectListField(object target, string fieldName, EffectList value) { if (target != null && !string.IsNullOrEmpty(fieldName) && value != null) { FieldInfo field = target.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(field == null) && !(field.FieldType != typeof(EffectList))) { field.SetValue(target, value); } } } private static EffectList MakeEffectList(GameObject vfx, GameObject sfx) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0019: Unknown resu