using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Networking; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LaserWandMod")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("LaserWandMod")] [assembly: AssemblyTitle("LaserWandMod")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LaserWandMod { public class Class1 { } internal struct WandPartData { public Mesh mesh; public Material[] materials; public Vector3 relPos; public Quaternion relRot; public Vector3 worldScale; } internal static class WandAssets { [CompilerGenerated] private sealed class d__19 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string pluginDir; public ManualLogSource log; private List 5__2; private string[] <>7__wrap2; private int <>7__wrap3; private string 5__5; private UnityWebRequest 5__6; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__19(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || num == 1) { try { } finally { <>m__Finally1(); } } 5__2 = null; <>7__wrap2 = null; 5__5 = null; 5__6 = null; <>1__state = -2; } private bool MoveNext() { //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Invalid comparison between Unknown and I4 try { switch (<>1__state) { default: return false; case 0: { <>1__state = -1; string[] array = new string[3] { "valuable star wand sparkle01.ogg", "valuable star wand sparkle02.ogg", "valuable star wand sparkle03.ogg" }; 5__2 = new List(); <>7__wrap2 = array; <>7__wrap3 = 0; break; } case 1: <>1__state = -3; if ((int)5__6.result == 1) { AudioClip content = DownloadHandlerAudioClip.GetContent(5__6); ((Object)content).name = Path.GetFileNameWithoutExtension(5__5); 5__2.Add(content); } else { log.LogWarning((object)("Could not load sound " + 5__5 + ": " + 5__6.error)); } <>m__Finally1(); 5__6 = null; 5__5 = null; <>7__wrap3++; break; } if (<>7__wrap3 < <>7__wrap2.Length) { 5__5 = <>7__wrap2[<>7__wrap3]; string text = "file:///" + Path.Combine(pluginDir, 5__5).Replace('\\', '/'); 5__6 = UnityWebRequestMultimedia.GetAudioClip(text, (AudioType)14); <>1__state = -3; <>2__current = 5__6.SendWebRequest(); <>1__state = 1; return true; } <>7__wrap2 = null; if (5__2.Count > 0) { Sounds = 5__2.ToArray(); log.LogInfo((object)$"Loaded {5__2.Count} sparkle sounds from disk."); } return false; } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; if (5__6 != null) { ((IDisposable)5__6).Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static List? Parts; public static AudioClip[]? Sounds; public static GameObject? ParticleTemplate; public static Vector3 ParticleTipRelPos; public static Quaternion ParticleTipRelRot; public static Vector3 ParticleTipWorldScale; private static readonly Vector3 DefaultTipRelPos = new Vector3(-0.003f, 0.0405f, 0.739f); private static readonly Quaternion DefaultTipRelRot = new Quaternion(0f, -0.92388f, 0f, 0.38268f); private static readonly Vector3 DefaultTipScale = new Vector3(0.75f, 0.75f, 0.75f); private static readonly Vector3 DefaultMeshRelPos = new Vector3(0f, 0.03975f, 0.031f); private static readonly Quaternion DefaultMeshRelRot = new Quaternion(0.5f, 0.5f, 0.5f, 0.5f); private static readonly Vector3 DefaultMeshScale = new Vector3(0.272872f, 0.272872f, 0.272872f); public static bool Ready { get; private set; } public static void LoadFromDisk(string pluginDir, ManualLogSource log) { //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Expected O, but got Unknown string text = Path.Combine(pluginDir, "WandPrefab.glb"); if (!File.Exists(text)) { log.LogWarning((object)("WandPrefab.glb not found at " + text + " — will use scene fallback.")); return; } if (!TryParseGlb(File.ReadAllBytes(text), out var mesh, out var tex, log)) { log.LogError((object)"Failed to parse WandPrefab.glb."); return; } Material val = new Material(Shader.Find("Unlit/Texture") ?? Shader.Find("Sprites/Default") ?? Shader.Find("Standard") ?? Shader.Find("Diffuse")) { name = "Valuable Star Wand" }; val.mainTexture = (Texture)(object)tex; try { val.SetTexture("_BaseMap", (Texture)(object)tex); } catch { } try { val.SetInt("_Cull", 0); } catch { } List list = new List(); list.Add(new WandPartData { mesh = mesh, materials = (Material[])(object)new Material[1] { val }, relPos = DefaultMeshRelPos, relRot = DefaultMeshRelRot, worldScale = DefaultMeshScale }); Parts = list; ParticleTipRelPos = DefaultTipRelPos; ParticleTipRelRot = DefaultTipRelRot; ParticleTipWorldScale = DefaultTipScale; Ready = true; log.LogInfo((object)$"Wand mesh loaded from disk: {mesh.vertexCount} verts."); } public static void RefineFromScene(Transform wandRoot, ManualLogSource log) { //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: 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_0155: 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_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: 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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) List list = new List(); MeshFilter[] componentsInChildren = ((Component)wandRoot).GetComponentsInChildren(true); foreach (MeshFilter val in componentsInChildren) { if ((Object)(object)val.sharedMesh == (Object)null) { continue; } MeshRenderer component = ((Component)val).GetComponent(); if ((Object)(object)component == (Object)null) { continue; } bool flag = false; Material[] sharedMaterials = ((Renderer)component).sharedMaterials; for (int j = 0; j < sharedMaterials.Length; j++) { if ((Object)(object)sharedMaterials[j] != (Object)null) { flag = true; break; } } if (flag) { list.Add(new WandPartData { mesh = val.sharedMesh, materials = ((Renderer)component).sharedMaterials, relPos = wandRoot.InverseTransformPoint(((Component)val).transform.position), relRot = Quaternion.Inverse(wandRoot.rotation) * ((Component)val).transform.rotation, worldScale = ((Component)val).transform.lossyScale }); } } if (list.Count > 0) { Parts = list; } if ((Object)(object)ParticleTemplate == (Object)null) { Transform val2 = FindChildByName(wandRoot, "Star Particles"); if ((Object)(object)val2 != (Object)null) { ParticleTipRelPos = wandRoot.InverseTransformPoint(val2.position); ParticleTipRelRot = Quaternion.Inverse(wandRoot.rotation) * val2.rotation; ParticleTipWorldScale = val2.lossyScale; ParticleTemplate = Object.Instantiate(((Component)val2).gameObject); Object.DontDestroyOnLoad((Object)(object)ParticleTemplate); ParticleTemplate.SetActive(false); ParticleSystem[] componentsInChildren2 = ParticleTemplate.GetComponentsInChildren(true); foreach (ParticleSystem obj in componentsInChildren2) { MainModule main = obj.main; ((MainModule)(ref main)).loop = false; ((MainModule)(ref main)).playOnAwake = false; obj.Stop(true, (ParticleSystemStopBehavior)0); } log.LogInfo((object)"Particle template captured from scene."); } } Ready = true; log.LogInfo((object)$"Wand assets refined from scene: {list.Count} mesh parts."); } public static void TryCacheSounds() { if (Sounds != null && Sounds.Length != 0) { return; } List list = new List(); AudioClip[] array = Resources.FindObjectsOfTypeAll(); foreach (AudioClip val in array) { string text = ((Object)val).name.ToLower(); if (text.Contains("wand") && text.Contains("sparkle")) { list.Add(val); } } if (list.Count > 0) { Sounds = list.ToArray(); } } [IteratorStateMachine(typeof(d__19))] public static IEnumerator LoadSoundsFromDisk(string pluginDir, ManualLogSource log) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__19(0) { pluginDir = pluginDir, log = log }; } private static bool TryParseGlb(byte[] d, out Mesh mesh, out Texture2D tex, ManualLogSource log) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Expected O, but got Unknown mesh = null; tex = null; try { if (d.Length < 28 || BitConverter.ToUInt32(d, 0) != 1179937895) { log.LogError((object)"Not a valid GLB file."); return false; } int num = (int)BitConverter.ToUInt32(d, 12); int num2 = 28 + num; tex = new Texture2D(2, 2, (TextureFormat)4, false); byte[] array = new byte[38109]; Buffer.BlockCopy(d, num2, array, 0, 38109); ImageConversion.LoadImage(tex, array); int num3 = num2 + 38112; Vector3[] array2 = (Vector3[])(object)new Vector3[306]; Vector3[] array3 = (Vector3[])(object)new Vector3[306]; Vector2[] array4 = (Vector2[])(object)new Vector2[306]; for (int i = 0; i < 306; i++) { int num4 = num3 + i * 48; float num5 = BitConverter.ToSingle(d, num4); float num6 = BitConverter.ToSingle(d, num4 + 4); float num7 = BitConverter.ToSingle(d, num4 + 8); array2[i] = new Vector3(0f - num5, num6, num7); float num8 = BitConverter.ToSingle(d, num4 + 12); float num9 = BitConverter.ToSingle(d, num4 + 16); float num10 = BitConverter.ToSingle(d, num4 + 20); array3[i] = new Vector3(0f - num8, num9, num10); float num11 = BitConverter.ToSingle(d, num4 + 40); float num12 = BitConverter.ToSingle(d, num4 + 44); array4[i] = new Vector2(num11, 1f - num12); } int num13 = num2 + 52800; int[] array5 = new int[528]; for (int j = 0; j < 528; j += 3) { array5[j] = BitConverter.ToUInt16(d, num13 + j * 2); array5[j + 1] = BitConverter.ToUInt16(d, num13 + (j + 2) * 2); array5[j + 2] = BitConverter.ToUInt16(d, num13 + (j + 1) * 2); } mesh = new Mesh { name = "Wand Mesh" }; mesh.vertices = array2; mesh.uv = array4; mesh.triangles = array5; mesh.RecalculateNormals(); mesh.RecalculateBounds(); return true; } catch (Exception ex) { log.LogError((object)("GLB parse error: " + ex.Message)); return false; } } private static Transform? FindChildByName(Transform root, string name) { Transform[] componentsInChildren = ((Component)root).GetComponentsInChildren(true); foreach (Transform val in componentsInChildren) { if (((Object)val).name == name) { return val; } } return null; } } [BepInPlugin("com.merzl.laserwandmod", "LaserWandMod", "1.0.2")] public class Plugin : BaseUnityPlugin { private static GameObject? _updaterGO; private void Awake() { SceneManager.sceneLoaded += OnSceneLoaded; string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); WandAssets.LoadFromDisk(directoryName, ((BaseUnityPlugin)this).Logger); ((MonoBehaviour)this).StartCoroutine(WandAssets.LoadSoundsFromDisk(directoryName, ((BaseUnityPlugin)this).Logger)); ((BaseUnityPlugin)this).Logger.LogInfo((object)("LaserWandMod ready. Disk assets: " + (WandAssets.Ready ? "loaded" : "missing — using scene fallback"))); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!((Object)(object)_updaterGO != (Object)null)) { _updaterGO = new GameObject("LaserWandUpdater"); Object.DontDestroyOnLoad((Object)(object)_updaterGO); _updaterGO.AddComponent().Init(((BaseUnityPlugin)this).Logger); } } } public class MeshReplacer : MonoBehaviour { private ManualLogSource? _log; private float _pollTimer; private readonly HashSet _replaced = new HashSet(); private AudioSource? _audioSource; private ParticleSystem[] _particles = Array.Empty(); private Transform? _gunRoot; private Vector3 _lastGunPos; private float _soundCooldown; private const float MOVE_THRESHOLD = 0.005f; private const float SOUND_INTERVAL_MIN = 0.25f; private const float SOUND_INTERVAL_RAND = 0.3f; public void Init(ManualLogSource log) { _log = log; } private void Update() { _pollTimer += Time.deltaTime; float num = ((WandAssets.Ready && (Object)(object)_gunRoot != (Object)null) ? 10f : 1f); if (_pollTimer >= num) { _pollTimer = 0f; TryReplace(); } UpdateEffects(); } private void UpdateEffects() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_gunRoot == (Object)null || (Object)(object)_audioSource == (Object)null) { return; } _soundCooldown -= Time.deltaTime; float num = Vector3.Distance(_gunRoot.position, _lastGunPos); _lastGunPos = _gunRoot.position; if (!(num > 0.005f)) { return; } ParticleSystem[] particles = _particles; foreach (ParticleSystem val in particles) { if ((Object)(object)val != (Object)null) { val.Emit(1); } } if (!(_soundCooldown <= 0f)) { return; } WandAssets.TryCacheSounds(); AudioClip[] sounds = WandAssets.Sounds; if (sounds != null && sounds.Length != 0) { AudioClip val2 = sounds[Random.Range(0, sounds.Length)]; if ((Object)(object)val2 != (Object)null) { _audioSource.PlayOneShot(val2, 0.15f); _soundCooldown = 0.25f + Random.Range(0f, 0.3f); } } } private void TryReplace() { //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)WandAssets.ParticleTemplate == (Object)null) { Transform val = FindItemRoot("wand"); if ((Object)(object)val != (Object)null) { WandAssets.RefineFromScene(val, _log); } } if (WandAssets.Parts == null || !WandAssets.Ready || (Object)(object)_gunRoot != (Object)null) { return; } Transform val2 = FindGunRoot(); if ((Object)(object)val2 == (Object)null) { return; } int instanceID = ((Object)val2).GetInstanceID(); if (_replaced.Contains(instanceID)) { return; } MeshRenderer[] componentsInChildren = ((Component)val2).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { ((Renderer)componentsInChildren[i]).enabled = false; } foreach (WandPartData part in WandAssets.Parts) { GameObject val3 = new GameObject("WandPart_" + ((Object)part.mesh).name); val3.transform.SetParent(val2, false); val3.transform.localPosition = part.relPos; val3.transform.localRotation = part.relRot; Vector3 lossyScale = val2.lossyScale; Vector3 worldScale = part.worldScale; val3.transform.localScale = new Vector3((lossyScale.x != 0f) ? (worldScale.x / lossyScale.x) : worldScale.x, (lossyScale.y != 0f) ? (worldScale.y / lossyScale.y) : worldScale.y, (lossyScale.z != 0f) ? (worldScale.z / lossyScale.z) : worldScale.z); val3.AddComponent().sharedMesh = part.mesh; ((Renderer)val3.AddComponent()).sharedMaterials = part.materials; } AttachEffects(val2); _replaced.Add(instanceID); ManualLogSource? log = _log; if (log != null) { log.LogInfo((object)$"Gun replaced with wand ({WandAssets.Parts.Count} parts)."); } } private void AttachEffects(Transform gunRoot) { //IL_0062: 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) _audioSource = ((Component)gunRoot).GetComponent() ?? ((Component)gunRoot).gameObject.AddComponent(); _audioSource.spatialBlend = 1f; _audioSource.rolloffMode = (AudioRolloffMode)1; _audioSource.maxDistance = 10f; WandAssets.TryCacheSounds(); _particles = SpawnParticles(gunRoot); _gunRoot = gunRoot; _lastGunPos = gunRoot.position; ManualLogSource? log = _log; if (log != null) { AudioClip[]? sounds = WandAssets.Sounds; log.LogInfo((object)$"Effects attached. Sounds: {((sounds != null) ? sounds.Length : 0)}, Particles: {_particles.Length}"); } } private ParticleSystem[] SpawnParticles(Transform gunRoot) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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_00b5: Unknown result type (might be due to invalid IL or missing references) GameObject val; if ((Object)(object)WandAssets.ParticleTemplate != (Object)null) { val = Object.Instantiate(WandAssets.ParticleTemplate, gunRoot); val.transform.localPosition = WandAssets.ParticleTipRelPos; val.transform.localRotation = WandAssets.ParticleTipRelRot; Vector3 lossyScale = gunRoot.lossyScale; Vector3 particleTipWorldScale = WandAssets.ParticleTipWorldScale; val.transform.localScale = new Vector3((lossyScale.x != 0f) ? (particleTipWorldScale.x / lossyScale.x) : particleTipWorldScale.x, (lossyScale.y != 0f) ? (particleTipWorldScale.y / lossyScale.y) : particleTipWorldScale.y, (lossyScale.z != 0f) ? (particleTipWorldScale.z / lossyScale.z) : particleTipWorldScale.z); val.SetActive(true); } else { val = BuildProceduralSparkles(gunRoot); } ParticleSystem[] componentsInChildren = val.GetComponentsInChildren(true); ParticleSystem[] array = componentsInChildren; foreach (ParticleSystem obj in array) { MainModule main = obj.main; ((MainModule)(ref main)).loop = false; ((MainModule)(ref main)).playOnAwake = false; obj.Stop(true, (ParticleSystemStopBehavior)0); } return componentsInChildren; } private GameObject BuildProceduralSparkles(Transform parent) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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) //IL_0068: 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_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Expected O, but got Unknown GameObject val = new GameObject("WandSparkles"); val.transform.SetParent(parent, false); val.transform.localPosition = WandAssets.ParticleTipRelPos; val.transform.localRotation = WandAssets.ParticleTipRelRot; ParticleSystem obj = val.AddComponent(); MainModule main = obj.main; ((MainModule)(ref main)).loop = false; ((MainModule)(ref main)).playOnAwake = false; ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1; ((MainModule)(ref main)).startLifetime = new MinMaxCurve(0.5f, 1.5f); ((MainModule)(ref main)).startSpeed = new MinMaxCurve(0.2f, 0.6f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.03f, 0.08f); ((MainModule)(ref main)).startColor = new MinMaxGradient(new Color(1f, 0.95f, 0.3f), new Color(1f, 0.55f, 0.05f)); ((MainModule)(ref main)).gravityModifier = MinMaxCurve.op_Implicit(-0.05f); EmissionModule emission = obj.emission; ((EmissionModule)(ref emission)).enabled = false; ShapeModule shape = obj.shape; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)0; ((ShapeModule)(ref shape)).radius = 0.015f; ParticleSystemRenderer component = val.GetComponent(); component.renderMode = (ParticleSystemRenderMode)0; ((Renderer)component).material = BuildSparkMaterial(); return val; } private Material BuildSparkMaterial() { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Expected O, but got Unknown //IL_00c0: Expected O, but got Unknown //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Expected O, but got Unknown //IL_02ef: Expected O, but got Unknown //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Expected O, but got Unknown //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown //IL_015b: Expected O, but got Unknown //IL_025f: Unknown result type (might be due to invalid IL or missing references) Texture2D tex = BuildSparkTexture(); Color color = default(Color); ((Color)(ref color))..ctor(1f, 0.85f, 0.2f, 1f); ParticleSystemRenderer[] array = Resources.FindObjectsOfTypeAll(); foreach (ParticleSystemRenderer val in array) { if ((Object)(object)((Renderer)val).sharedMaterial == (Object)null) { continue; } string text = ((Object)((Component)val).gameObject).name.ToLower(); if (text.Contains("sparkle") || text.Contains("star") || text.Contains("wand")) { ManualLogSource? log = _log; if (log != null) { log.LogInfo((object)("SparkMat: wand particle shader = " + ((Object)((Renderer)val).sharedMaterial.shader).name)); } Material val2 = new Material(((Renderer)val).sharedMaterial); ApplySparkAppearance(val2, tex, color); return val2; } } array = Object.FindObjectsOfType(); foreach (ParticleSystemRenderer val3 in array) { Material sharedMaterial = ((Renderer)val3).sharedMaterial; if ((Object)(object)((sharedMaterial != null) ? sharedMaterial.shader : null) == (Object)null) { continue; } string name = ((Object)((Renderer)val3).sharedMaterial.shader).name; if (!name.Contains("Standard") || name.Contains("Particle")) { ManualLogSource? log2 = _log; if (log2 != null) { log2.LogInfo((object)("SparkMat: scene particle shader = " + name)); } Material val4 = new Material(((Renderer)val3).sharedMaterial); ApplySparkAppearance(val4, tex, color); return val4; } } string[] array2 = new string[5] { "Universal Render Pipeline/Particles/Unlit", "Universal Render Pipeline/Particles/Lit", "Particles/Additive", "Particles/Alpha Blended Premultiply", "Legacy Shaders/Particles/Additive" }; foreach (string text2 in array2) { Shader val5 = Shader.Find(text2); if (!((Object)(object)val5 == (Object)null)) { ManualLogSource? log3 = _log; if (log3 != null) { log3.LogInfo((object)("SparkMat: named shader = " + text2)); } Material val6 = new Material(val5); if (text2.Contains("Universal")) { val6.SetFloat("_Surface", 1f); val6.SetFloat("_Blend", 3f); val6.SetInt("_SrcBlend", 1); val6.SetInt("_DstBlend", 1); val6.SetInt("_ZWrite", 0); val6.EnableKeyword("_SURFACE_TYPE_TRANSPARENT"); val6.EnableKeyword("_BLENDMODE_ADDITIVE"); val6.renderQueue = 3000; } ApplySparkAppearance(val6, tex, color); return val6; } } ManualLogSource? log4 = _log; if (log4 != null) { log4.LogWarning((object)"SparkMat: falling back to Standard transparent."); } Material val7 = new Material(Shader.Find("Standard")); val7.SetFloat("_Mode", 3f); val7.SetInt("_SrcBlend", 5); val7.SetInt("_DstBlend", 10); val7.SetInt("_ZWrite", 0); val7.EnableKeyword("_ALPHABLEND_ON"); val7.renderQueue = 3000; ApplySparkAppearance(val7, tex, color); return val7; } private static void ApplySparkAppearance(Material m, Texture2D tex, Color color) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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) m.mainTexture = (Texture)(object)tex; m.color = color; try { m.SetTexture("_BaseMap", (Texture)(object)tex); } catch { } try { m.SetColor("_BaseColor", color); } catch { } try { m.SetColor("_EmissionColor", color * 0.5f); } catch { } } private static Texture2D BuildSparkTexture() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(64, 64, (TextureFormat)4, false); float num = 31.5f; float num2 = 31.5f; float num3 = 28.16f; float num4 = num3 * 0.4f; Vector2[] array = (Vector2[])(object)new Vector2[10]; for (int i = 0; i < 10; i++) { float num5 = MathF.PI * (float)i / 5f - MathF.PI / 2f; float num6 = ((i % 2 == 0) ? num3 : num4); array[i] = new Vector2(num + num6 * Mathf.Cos(num5), num2 + num6 * Mathf.Sin(num5)); } float num7 = num3 * 0.3f; Color[] array2 = (Color[])(object)new Color[4096]; for (int j = 0; j < 64; j++) { for (int k = 0; k < 64; k++) { float num9; if (IsInsidePolygon(k, j, array)) { float num8 = Mathf.Sqrt(((float)k - num) * ((float)k - num) + ((float)j - num2) * ((float)j - num2)); num9 = Mathf.Lerp(1f, 0.8f, Mathf.Clamp01(num8 / num3)); } else { float num10 = (float)k - num; float num11 = (float)j - num2; float num12 = Mathf.Sqrt(num10 * num10 + num11 * num11); float num13 = Mathf.Max(0f, num12 - num3) / num7; num9 = Mathf.Clamp01(1f - num13) * 0.45f; num9 *= num9; } array2[j * 64 + k] = new Color(1f, 1f, 1f, num9); } } val.SetPixels(array2); val.Apply(); return val; } private static bool IsInsidePolygon(float px, float py, Vector2[] poly) { bool flag = false; int num = poly.Length; int num2 = 0; int num3 = num - 1; while (num2 < num) { float x = poly[num2].x; float y = poly[num2].y; float x2 = poly[num3].x; float y2 = poly[num3].y; if (y > py != y2 > py && px < (x2 - x) * (py - y) / (y2 - y) + x) { flag = !flag; } num3 = num2++; } return flag; } private static Transform? FindItemRoot(string keyword) { MeshFilter[] array = Object.FindObjectsOfType(); foreach (MeshFilter val in array) { if ((Object)(object)val.sharedMesh == (Object)null) { continue; } Transform val2 = ((Component)val).transform; Transform val3 = null; while ((Object)(object)val2 != (Object)null) { if (((Object)val2).name.ToLower().Contains(keyword)) { val3 = val2; } val2 = val2.parent; } if ((Object)(object)val3 != (Object)null) { return val3; } } return null; } private static Transform? FindGunRoot() { MeshFilter[] array = Object.FindObjectsOfType(); foreach (MeshFilter val in array) { if (((Object)((Component)val).gameObject).name != "Laser gun") { continue; } Transform val2 = ((Component)val).transform; while ((Object)(object)val2 != (Object)null) { string text = ((Object)val2).name.ToLower(); if (text.Contains("laser") || text.Contains("photon")) { return ((Component)val).transform.parent ?? ((Component)val).transform; } val2 = val2.parent; } return ((Component)val).transform.parent ?? ((Component)val).transform; } return null; } } }