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 OdinOnDemand v1.0.11
OdinOnDemand.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.IO.Compression; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using JetBrains.Annotations; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OdinOnDemand.Components; using OdinOnDemand.Dynamic; using OdinOnDemand.Interfaces; using OdinOnDemand.MPlayer; using OdinOnDemand.Utils; using OdinOnDemand.Utils.Config; using OdinOnDemand.Utils.Net; using OdinOnDemand.Utils.Net.Explode; using OdinOnDemand.Utils.UI; using SoundCloudExplode; using SoundCloudExplode.Tracks; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Serialization; using UnityEngine.UI; using UnityEngine.Video; using YoutubeDLSharp; using YoutubeDLSharp.Options; using YoutubeExplode; using YoutubeExplode.Common; using YoutubeExplode.Playlists; using YoutubeExplode.Videos; using YoutubeExplode.Videos.Streams; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace OdinOnDemand { [BepInPlugin("com.valmedia.odinondemand", "OdinOnDemand", "1.0.9")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] internal class OdinOnDemandPlugin : BaseUnityPlugin { public const string PluginGUID = "com.valmedia.odinondemand"; public const string PluginName = "OdinOnDemand"; public const string PluginVersion = "1.0.9"; private static readonly CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); public static readonly RpcHandler RPCHandlers = new RpcHandler(); public static Material MainScreenMat; public static Dictionary<string, Sprite> UISprites; private AssetBundle _valMediaAssets; private static Harmony _harmony; private static string _pieceRecipeFile; private static string _itemRecipeFile; private static readonly string OdinConfigFolder = Paths.ConfigPath + "/OdinOnDemand/"; public static ConfigFile OdinConfig { get; private set; } = new ConfigFile(OdinConfigFolder + "config.cfg", true); public StationManager StationManager { get; private set; } private void Awake() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Expected O, but got Unknown AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs args) { string assemblyName = new AssemblyName(args.Name).Name + ".dll"; string text = Assembly.GetExecutingAssembly().GetManifestResourceNames().FirstOrDefault((string r) => r.EndsWith(assemblyName)); if (text != null) { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(text)) { byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); return Assembly.Load(array); } } return null; }; OODConfig.Bind(OdinConfig); _pieceRecipeFile = OdinConfigFolder + "/recipes.json"; _itemRecipeFile = OdinConfigFolder + "/recipes_item.json"; OODConfig.SyncManager(); RPCHandlers.Create(); GameObject val = new GameObject("OODStationMan"); StationManager = val.AddComponent<StationManager>(); Object.DontDestroyOnLoad((Object)(object)val); AddLocalizations(); LoadAssets(); PrefabManager.OnVanillaPrefabsAvailable += AddCartVariant; ConfigFile val2 = new ConfigFile(Path.Combine(OdinConfigFolder, "com.ood.valmedia.keyconfig.cfg"), true); SynchronizationManager.Instance.RegisterCustomConfig(val2); KeyConfig.SetupKeyConfig(val2); _harmony = new Harmony("Harmony.ValMedia.OOD"); _harmony.PatchAll(); Logger.LogDebug((object)"** OdinOnDemand Initialized **"); } private static void AddCartVariant() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Expected O, but got Unknown PieceConfig val = new PieceConfig(); val.Name = "Bard's Wagon"; val.Description = "A mobile media player on wheels, controlled by a remote."; val.PieceTable = "Hammer"; val.Category = "OOD"; val.AddRequirement(new RequirementConfig("Wood", 26, 0, true)); val.AddRequirement(new RequirementConfig("Bronze", 2, 0, true)); val.AddRequirement(new RequirementConfig("BronzeNails", 14, 0, true)); AssetBundle val2 = AssetUtils.LoadAssetBundleFromResources("videoplayers", typeof(OdinOnDemandPlugin).Assembly); GameObject val3 = val2.LoadAsset<GameObject>("assets/cartplayer_attach.prefab"); val.Icon = val2.LoadAsset<Sprite>("assets/MOD ICONS/cartplayericon.png"); if (PieceManager.Instance.AddPiece(new CustomPiece("cartplayer", "Cart", val))) { GameObject prefab = PrefabManager.Instance.GetPrefab("cartplayer"); Object.Instantiate<GameObject>(val3, prefab.transform, true); ((Component)prefab.transform.Find("cartplayer_attach(Clone)")).gameObject.AddComponent<CartPlayerComponent>(); } val2.Unload(false); PrefabManager.OnVanillaPrefabsAvailable -= AddCartVariant; } private void LoadAssets() { _valMediaAssets = AssetUtils.LoadAssetBundleFromResources("videoplayers", typeof(OdinOnDemandPlugin).Assembly); Logger.LogDebug((object)"Loading OdinOnDemand Assets"); AddRecipes(); MainScreenMat = _valMediaAssets.LoadAsset<Material>("assets/MOD MATS/screenmaterial.mat"); UISprites = new Dictionary<string, Sprite>(); string[] allAssetNames = _valMediaAssets.GetAllAssetNames(); foreach (string text in allAssetNames) { if (text.Contains("modui")) { Sprite val = _valMediaAssets.LoadAsset<Sprite>(text); UISprites.Add(((Object)val).name, val); } } _valMediaAssets.Unload(false); } private void AddRecipes() { if (!File.Exists(_pieceRecipeFile)) { WriteDefaultPieceConfig("default.json"); Logger.LogDebug((object)("Did not find recipe json, loading and writing default recipes to: " + _pieceRecipeFile)); } if (!File.Exists(_itemRecipeFile)) { WriteDefaultItemConfig("default_items.json"); Logger.LogDebug((object)("Did not find item recipe json, loading and writing default recipes to: " + _itemRecipeFile)); } string text = File.ReadAllText(_pieceRecipeFile); if (!IsValidJson(text)) { WriteDefaultPieceConfig("default.json"); Logger.LogWarning((object)"JSON in com.ood.valmedia.recipes.json is invalid. Setting to default recipes. If you wish to edit recipes please use a JSON validator or delete your recipe file and restart the game for a new default file."); } string text2 = File.ReadAllText(_itemRecipeFile); if (!IsValidJson(text2)) { WriteDefaultItemConfig("default_items.json"); Logger.LogWarning((object)"JSON in com.ood.valmedia.recipes_item.json is invalid. Setting to default recipes. If you wish to edit recipes please use a JSON validator or delete your recipe file and restart the game for a new default file."); } if ((!text.Contains("receiver") || !text.Contains("theater") || !text.Contains("speaker")) && OODConfig.AutoUpdateRecipes.Value) { Logger.LogDebug((object)"Old recipe file detected. Updating to new recipes."); List<PieceConfig> oldRecipes = PieceConfig.ListFromJson(text); string newRecipes = FileFromManifest("OdinOnDemand.Assets.default.json"); UpdateRecipeFile(newRecipes, oldRecipes, _pieceRecipeFile); } else if (!OODConfig.AutoUpdateRecipes.Value) { Logger.LogWarning((object)"Auto recipe update disabled. Skipping recipe update."); } LoadPieceConfigList(PieceConfig.ListFromJson(text)); LoadItemConfigList(ItemConfig.ListFromJson(text2)); } private void UpdateRecipeFile(string newRecipes, List<PieceConfig> oldRecipes, string file) { if (newRecipes != "") { List<PieceConfig> recipesToMerge = PieceConfig.ListFromJson(newRecipes); MergeRecipes(oldRecipes, recipesToMerge); try { List<PieceConfigDTO> list = PieceConfigDTO.ToDTOList(oldRecipes); string contents = JsonConvert.SerializeObject((object)list, (Formatting)1); File.WriteAllText(file, contents); return; } catch (Exception ex) { Logger.LogError((object)"Failed to write new recipes to file. Check log for details."); Logger.LogWarning((object)ex); return; } } Logger.LogError((object)"FATAL Failed to load default recipes."); } private static void MergeRecipes(List<PieceConfig> mergeRecipe, List<PieceConfig> recipesToMerge) { foreach (PieceConfig newRecipe in recipesToMerge) { if (!mergeRecipe.Any((PieceConfig r) => r.Name == newRecipe.Name)) { mergeRecipe.Add(newRecipe); } } } private void WriteDefaultPieceConfig(string fileName) { try { string pieceRecipeFile = _pieceRecipeFile; string value = FileFromManifest("OdinOnDemand.Assets." + fileName); StreamWriter streamWriter = File.CreateText(pieceRecipeFile); streamWriter.Write(value); streamWriter.Close(); streamWriter.Dispose(); } catch (Exception ex) { Logger.LogError((object)"Exception when handling default recipe file. Check log for details."); Logger.LogWarning((object)ex); } } private void WriteDefaultItemConfig(string fileName) { try { string itemRecipeFile = _itemRecipeFile; string value = FileFromManifest("OdinOnDemand.Assets." + fileName); StreamWriter streamWriter = File.CreateText(itemRecipeFile); streamWriter.Write(value); streamWriter.Close(); streamWriter.Dispose(); } catch (Exception ex) { Logger.LogError((object)"Exception when handling default recipe file. Check log for details."); Logger.LogWarning((object)ex); } } private static string FileFromManifest(string file) { string result = ""; using Stream stream = typeof(OdinOnDemandPlugin).Assembly.GetManifestResourceStream(file); if (stream != null) { using StreamReader streamReader = new StreamReader(stream); result = streamReader.ReadToEnd(); } return result; } private void LoadPieceConfigList(List<PieceConfig> pieceConfigs) { pieceConfigs.ForEach(delegate(PieceConfig c) { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown string text = LocalizationManager.Instance.TryTranslate(c.Name).ToLower().Replace(" ", "") .Replace("'", ""); Texture2D val = _valMediaAssets.LoadAsset<Texture2D>("assets/MOD ICONS/" + text + "icon.png"); Sprite icon = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero); c.Icon = icon; PieceManager.Instance.AddPiece(new CustomPiece(_valMediaAssets, text, false, c)); }); } private void LoadItemConfigList(List<ItemConfig> itemConfigs) { itemConfigs.ForEach(delegate(ItemConfig c) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown string text = LocalizationManager.Instance.TryTranslate(c.Name).ToLower().Replace(" ", "") .Replace("'", ""); ((BaseUnityPlugin)this).Logger.LogDebug((object)("Adding item: " + text)); ItemManager.Instance.AddItem(new CustomItem(_valMediaAssets, text, false, c)); }); } private void AddLocalizations() { CustomLocalization localization = Localization; string text = "English"; localization.AddTranslation(ref text, new Dictionary<string, string> { { "piece_flatscreen", "Flatscreen" }, { "piece_tabletv", "Table TV" }, { "piece_boombox", "Boombox" }, { "piece_oldtv", "Old TV" }, { "piece_laptop", "Laptop" }, { "piece_monitor", "Monitor" }, { "piece_gramophone", "Gramophone" }, { "piece_theaterscreen", "Theater Screen" }, { "piece_receiver", "Receiver" }, { "piece_studiospeaker", "Studio Speaker" }, { "piece_radio", "Radio" }, { "piece_standingspeaker", "Standing Speaker" }, { "item_remote", "Remote Control" }, { "item_skaldsgirdle", "Skald's Girdle" }, { "remote_usehint", "Use Screen" }, { "remote_linkhint", "Link/Unlink" }, { "skaldsgirdle_hint", "Consult Skald" }, { "remote_changelinkmodehint", "Change Link Mode" }, { "item_remote_description", "Allows you to use media-players from a distance." }, { "item_skaldsgirdle_description", "Allows you to commune with Skald while traveling." } }); } private static bool IsValidJson(string strInput) { //IL_0061: Expected O, but got Unknown if (string.IsNullOrWhiteSpace(strInput)) { return false; } strInput = strInput.Trim(); if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || (strInput.StartsWith("[") && strInput.EndsWith("]"))) { try { JToken val = JToken.Parse(strInput); return true; } catch (JsonReaderException val2) { JsonReaderException val3 = val2; Logger.LogWarning((object)((Exception)(object)val3).Message); return false; } catch (Exception ex) { Logger.LogWarning((object)ex.ToString()); return false; } } return false; } } } namespace OdinOnDemand.MPlayer { public abstract class BasePlayer : MonoBehaviour, IPlayer { [CompilerGenerated] private sealed class <AudioEndEvent>d__135 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public float time; public Action method; public BasePlayer <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <AudioEndEvent>d__135(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(time); <>1__state = 1; return true; case 1: <>1__state = -1; method?.Invoke(); 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 <AudioWebRequest>d__142 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public Uri url; public BasePlayer <>4__this; private DownloadHandlerAudioClip <dh>5__1; private UnityWebRequest <wr>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <AudioWebRequest>d__142(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(); } } <dh>5__1 = null; <wr>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Invalid comparison between Unknown and I4 //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Invalid comparison between Unknown and I4 bool result; try { switch (<>1__state) { default: result = false; break; case 0: <>1__state = -1; <dh>5__1 = new DownloadHandlerAudioClip(url, (AudioType)13) { compressed = false }; <wr>5__2 = new UnityWebRequest(url, "GET", (DownloadHandler)(object)<dh>5__1, (UploadHandler)null); <>1__state = -3; <>2__current = <wr>5__2.SendWebRequest(); <>1__state = 1; result = true; break; case 1: <>1__state = -3; if ((int)<wr>5__2.result == 3 || (int)<wr>5__2.result == 2) { Logger.LogError((object)<wr>5__2.error); } else { <>4__this.mAudio.clip = <dh>5__1.audioClip; <>4__this.mScreen.url = ""; <>4__this.mScreen.Stop(); <>4__this.mAudio.Play(); ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DelayedExecution(0.5f, <>4__this.SendRequestTimeSync_RPC)); <>4__this.PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Audio; <>4__this.PlayerSettings.IsPlaying = true; <>4__this.PlayerSettings.IsPaused = false; if (Object.op_Implicit((Object)(object)<>4__this.Animator)) { <>4__this.Animator.SetBool(PlayerSettings.Playing, true); } if (Object.op_Implicit((Object)(object)<>4__this.WaveParticleSystem) && OODConfig.MobilePlayerVisuals.Value) { <>4__this.WaveParticleSystem.Play(); } if (Object.op_Implicit((Object)(object)<>4__this.ScreenUICanvasObj)) { <>4__this.ScreenUICanvasObj.SetActive(true); } <>4__this.UpdateRadioPanel(); <>4__this.UIController.ResetLoadingIndicator(); } result = false; <>m__Finally1(); break; } } catch { //try-fault ((IDisposable)this).Dispose(); throw; } return result; } 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 (<wr>5__2 != null) { ((IDisposable)<wr>5__2).Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <CreateThumbnailFromURL>d__143 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public Uri url; public BasePlayer <>4__this; private DownloadHandlerTexture <dh>5__1; private UnityWebRequest <wr>5__2; private Texture2D <texture>5__3; private Rect <rect>5__4; private Vector2 <pivot>5__5; private Sprite <sprite>5__6; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <CreateThumbnailFromURL>d__143(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(); } } <dh>5__1 = null; <wr>5__2 = null; <texture>5__3 = null; <sprite>5__6 = null; <>1__state = -2; } private bool MoveNext() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Invalid comparison between Unknown and I4 //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Invalid comparison between Unknown and I4 //IL_00f7: 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_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) bool result; try { switch (<>1__state) { default: result = false; break; case 0: <>1__state = -1; <dh>5__1 = new DownloadHandlerTexture(true); <wr>5__2 = new UnityWebRequest(url, "GET", (DownloadHandler)(object)<dh>5__1, (UploadHandler)null); <>1__state = -3; <>2__current = <wr>5__2.SendWebRequest(); <>1__state = 1; result = true; break; case 1: <>1__state = -3; if ((int)<wr>5__2.result == 3 || (int)<wr>5__2.result == 2) { Logger.LogError((object)("Error downloading image: " + <wr>5__2.error)); } else { <texture>5__3 = DownloadHandlerTexture.GetContent(<wr>5__2); <rect>5__4 = new Rect(0f, 0f, (float)((Texture)<texture>5__3).width, (float)((Texture)<texture>5__3).height); <pivot>5__5 = new Vector2(0.5f, 0.5f); <sprite>5__6 = Sprite.Create(<texture>5__3, <rect>5__4, <pivot>5__5); <>4__this.PlayerSettings.Thumbnail = <sprite>5__6; <texture>5__3 = null; <sprite>5__6 = null; } result = false; <>m__Finally1(); break; } } catch { //try-fault ((IDisposable)this).Dispose(); throw; } return result; } 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 (<wr>5__2 != null) { ((IDisposable)<wr>5__2).Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <CreateYoutubeAudioAndPlay>d__151 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public BasePlayer <>4__this; private DownloadHandlerAudioClip <dh>5__1; private UnityWebRequest <wr>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <CreateYoutubeAudioAndPlay>d__151(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || num == 2) { try { } finally { <>m__Finally1(); } } <dh>5__1 = null; <wr>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Invalid comparison between Unknown and I4 //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Invalid comparison between Unknown and I4 //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Expected O, but got Unknown bool result; try { switch (<>1__state) { default: result = false; break; case 0: <>1__state = -1; if (<>4__this.YoutubeSoundDirectUri == null) { Logger.LogDebug((object)"sound url is null, waiting"); <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; result = true; break; } goto IL_007a; case 1: <>1__state = -1; goto IL_007a; case 2: { <>1__state = -3; if ((int)<wr>5__2.result == 3 || (int)<wr>5__2.result == 2) { Logger.LogWarning((object)<wr>5__2.error); <>4__this.UIController.LoadingIndicatorObj.SetActive(false); } else { <>4__this.mAudio.clip = <dh>5__1.audioClip; if (<>4__this.YoutubeVideoDirectUri != null) { <>4__this.mScreen.url = <>4__this.YoutubeVideoDirectUri.AbsoluteUri; <>4__this.mScreen.Prepare(); if (Object.op_Implicit((Object)(object)<>4__this.ScreenUICanvasObj) && Object.op_Implicit((Object)(object)<>4__this.LoadingCircleObj)) { <>4__this.ScreenUICanvasObj.SetActive(true); <>4__this.LoadingCircleObj.SetActive(true); } <>4__this.UIController.LoadingIndicatorObj.SetActive(false); } else { Logger.LogDebug((object)"nodejs: yt url is null. are you sure want to use nodejs?"); <>4__this.UIController.LoadingIndicatorObj.SetActive(false); } } result = false; <>m__Finally1(); break; } IL_007a: if (<>4__this.YoutubeSoundDirectUri == null) { Logger.LogDebug((object)"sound url is null still, exiting"); result = false; break; } <dh>5__1 = new DownloadHandlerAudioClip(<>4__this.YoutubeSoundDirectUri, (AudioType)0) { compressed = true }; <wr>5__2 = new UnityWebRequest(<>4__this.YoutubeSoundDirectUri, "GET", (DownloadHandler)(object)<dh>5__1, (UploadHandler)null); <>1__state = -3; <>2__current = <wr>5__2.SendWebRequest(); <>1__state = 2; result = true; break; } } catch { //try-fault ((IDisposable)this).Dispose(); throw; } return result; } 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 (<wr>5__2 != null) { ((IDisposable)<wr>5__2).Dispose(); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DelayedExecution>d__160 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public float delay; public Action action; public BasePlayer <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedExecution>d__160(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(delay); <>1__state = 1; return true; case 1: <>1__state = -1; action(); 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 <ResetLoadingIndicatorAfterDelay>d__149 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public BasePlayer <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ResetLoadingIndicatorAfterDelay>d__149(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1.75f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.UIController.ResetLoadingIndicator(); 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 <ShowCenterSphere>d__175 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public BasePlayer <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ShowCenterSphere>d__175(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!Object.op_Implicit((Object)(object)<>4__this.centerAudioSphere)) { return false; } ((Component)<>4__this.centerAudioSphere).gameObject.SetActive(true); <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; ((Component)<>4__this.centerAudioSphere).gameObject.SetActive(false); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <YoutubeNodeQuery>d__150 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public bool isRPC; public BasePlayer <>4__this; private string <url>5__1; private string <nodeUrl>5__2; private string <authCode>5__3; private UnityWebRequest <www>5__4; private string[] <lines>5__5; private Uri <cleanVideoUri>5__6; private Uri <cleanSoundUri>5__7; private int <i>5__8; private string <cleanUrl>5__9; private Uri <cleanVideoUri>5__10; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <YoutubeNodeQuery>d__150(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <url>5__1 = null; <nodeUrl>5__2 = null; <authCode>5__3 = null; <www>5__4 = null; <lines>5__5 = null; <cleanVideoUri>5__6 = null; <cleanSoundUri>5__7 = null; <cleanUrl>5__9 = null; <cleanVideoUri>5__10 = null; <>1__state = -2; } private bool MoveNext() { //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Invalid comparison between Unknown and I4 //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Expected O, but got Unknown //IL_03e7: Unknown result type (might be due to invalid IL or missing references) //IL_03f1: Expected O, but got Unknown //IL_04d2: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Expected O, but got Unknown //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (<>4__this.YoutubeURLNode == null) { Logger.LogDebug((object)"nodejs: error in yt query, youtube url null. are you sure you want use nodejs?"); return false; } <url>5__1 = Uri.EscapeDataString(<>4__this.YoutubeURLNode); <nodeUrl>5__2 = OODConfig.NodeUrl.Value; <authCode>5__3 = OODConfig.YtAuthCode.Value; <www>5__4 = UnityWebRequest.Get(<nodeUrl>5__2 + <url>5__1 + "/" + <authCode>5__3); <www>5__4.timeout = 30; <>4__this.UIController.SetLoadingIndicatorText("Processing"); <>4__this.UIController.LoadingIndicatorObj.SetActive(true); <>2__current = <www>5__4.SendWebRequest(); <>1__state = 1; return true; case 1: <>1__state = -1; if ((int)<www>5__4.result != 1) { Debug.Log((object)<www>5__4.error); <>4__this.UIController.LoadingIndicatorObj.GetComponent<Text>().text = <www>5__4.error; <>2__current = (object)new WaitForSeconds(2f); <>1__state = 2; return true; } if (<www>5__4.downloadHandler.text.Contains("AUTH DENIED")) { <>4__this.UIController.SetLoadingIndicatorText("Invalid Auth"); <>2__current = (object)new WaitForSeconds(2f); <>1__state = 3; return true; } if (<www>5__4.downloadHandler.text.Contains("\\")) { <lines>5__5 = <www>5__4.downloadHandler.text.Split(new string[4] { "\r\n", "\r", "\n", "\\n" }, StringSplitOptions.None); <i>5__8 = 0; while (<i>5__8 < <lines>5__5.Length) { <lines>5__5[<i>5__8] = <lines>5__5[<i>5__8].Replace("\"", ""); <i>5__8++; } if (Uri.TryCreate(<lines>5__5[0], UriKind.Absolute, out <cleanVideoUri>5__6)) { <>4__this.YoutubeVideoDirectUri = <cleanVideoUri>5__6; goto IL_0382; } Logger.LogError((object)("Invalid URI: " + <lines>5__5[0])); <>4__this.UIController.SetLoadingIndicatorText("Invalid URI"); <>2__current = (object)new WaitForSeconds(2f); <>1__state = 4; return true; } <cleanUrl>5__9 = <www>5__4.downloadHandler.text.Replace("\"", ""); if (Uri.TryCreate(<cleanUrl>5__9, UriKind.Absolute, out <cleanVideoUri>5__10)) { <>4__this.YoutubeVideoDirectUri = <cleanVideoUri>5__10; goto IL_0504; } Logger.LogError((object)("Invalid URI: " + <cleanUrl>5__9)); <>4__this.UIController.SetLoadingIndicatorText("Invalid URI"); <>2__current = (object)new WaitForSeconds(2f); <>1__state = 6; return true; case 2: <>1__state = -1; <>4__this.UIController.LoadingIndicatorObj.SetActive(false); break; case 3: <>1__state = -1; <>4__this.UIController.LoadingIndicatorObj.SetActive(false); break; case 4: <>1__state = -1; <>4__this.UIController.LoadingIndicatorObj.SetActive(false); goto IL_0382; case 5: <>1__state = -1; <>4__this.UIController.LoadingIndicatorObj.SetActive(false); goto IL_0419; case 6: { <>1__state = -1; <>4__this.UIController.LoadingIndicatorObj.SetActive(false); goto IL_0504; } IL_0504: <>4__this.mScreen.source = (VideoSource)1; <>4__this.mScreen.url = <>4__this.YoutubeVideoDirectUri.AbsoluteUri; <>4__this.mScreen.Prepare(); if (Object.op_Implicit((Object)(object)<>4__this.ScreenUICanvasObj) && Object.op_Implicit((Object)(object)<>4__this.LoadingCircleObj)) { <>4__this.ScreenUICanvasObj.SetActive(true); <>4__this.LoadingCircleObj.SetActive(true); } <>4__this.UIController.LoadingIndicatorObj.SetActive(false); <cleanUrl>5__9 = null; <cleanVideoUri>5__10 = null; break; IL_0419: ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.CreateYoutubeAudioAndPlay()); <lines>5__5 = null; <cleanVideoUri>5__6 = null; <cleanSoundUri>5__7 = null; break; IL_0382: if (Uri.TryCreate(<lines>5__5[1], UriKind.Absolute, out <cleanSoundUri>5__7)) { <>4__this.YoutubeSoundDirectUri = <cleanSoundUri>5__7; goto IL_0419; } Logger.LogError((object)("Invalid URI: " + <lines>5__5[1])); <>4__this.UIController.SetLoadingIndicatorText("Invalid URI"); <>2__current = (object)new WaitForSeconds(2f); <>1__state = 5; return true; } 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(); } } internal HashSet<SpeakerComponent> mSpeakers = new HashSet<SpeakerComponent>(); private Transform centerAudioSphere; protected SphereCollider triggerCollider; public VideoPlayer mScreen { get; set; } public AudioSource mAudio { get; set; } public Piece mPiece { get; internal set; } public Animator Animator { get; set; } protected GameObject ScreenPlaneObj { get; set; } protected internal GameObject ScreenUICanvasObj { get; set; } protected GameObject RadioPanelObj { get; set; } protected Coroutine DynamicStationCoroutine { get; set; } protected internal GameObject LoadingCircleObj { get; set; } protected Material TargetTexMat { get; set; } public string mName { get; set; } public string MediaPlayerID { get; set; } public string UnparsedURL { get; set; } public Uri DownloadURL { get; set; } public Uri YoutubeSoundDirectUri { get; set; } public Uri YoutubeVideoDirectUri { get; set; } public int PlaylistPosition { get; set; } public string PlaylistString { get; set; } public List<VideoInfo> CurrentPlaylist { get; set; } public List<VideoInfo> PreShufflePlaylist { get; set; } public string PlaylistURL { get; set; } public PlayerSettings PlayerSettings { get; set; } public UIController UIController { get; set; } protected static AudioFader AudioFaderComp { get; set; } protected ParticleSystem WaveParticleSystem { get; set; } public URLGrab URLGrab { get; set; } public DLSharp Ytdl { get; set; } public RpcHandler RPC { get; set; } public ZNetView ZNetView { get; set; } private string YoutubeURLNode { get; set; } public void Awake() { //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Expected O, but got Unknown ComponentLists.MediaComponentLists[((object)this).GetType()].Add(this); UIController = new UIController(this); PlayerSettings = new PlayerSettings(); ZNetView = ((Component)this).GetComponent<ZNetView>(); UIController.Initialize(); RPC = OdinOnDemandPlugin.RPCHandlers; URLGrab = new URLGrab(); ZNetView = ((Component)this).gameObject.GetComponentInParent<ZNetView>(); mScreen = ((Component)this).gameObject.GetComponentInChildren<VideoPlayer>(); mScreen.prepareCompleted += new EventHandler(ScreenPrepareCompleted); mScreen.loopPointReached += new EventHandler(EndReached); SetupAudio(); ((MonoBehaviour)this).InvokeRepeating("UpdateLoadingIndicator", 0.5f, 0.5f); ((MonoBehaviour)this).InvokeRepeating("UpdateChecks", 1f, 1f); ((MonoBehaviour)this).InvokeRepeating("SyncTime", OODConfig.SyncTime.Value + 30f, OODConfig.SyncTime.Value); Ytdl = ((Component)this).gameObject.AddComponent<DLSharp>(); ((MonoBehaviour)this).StartCoroutine(Ytdl.Setup()); ZDO zDO = ZNetView.GetZDO(); if (Object.op_Implicit((Object)(object)ZNetScene.instance) && zDO != null) { if (!zDO.GetString("MediaPlayerID", "").Equals("")) { RequestOwnership(zDO); string text = GenerateUniqueID(); zDO.Set("MediaPlayerID", text); SendUpdateZDO_RPC(); } MediaPlayerID = zDO.GetString("MediaPlayerID", ""); } if (OODConfig.AudioFadeType.Value != OODConfig.FadeType.None && (Object)(object)AudioFader.Instance == (Object)null && (Object)(object)GameObject.Find("OODAudioFader") == (Object)null) { GameObject val = new GameObject("OODAudioFader"); AudioFaderComp = val.AddComponent<AudioFader>(); Object.DontDestroyOnLoad((Object)(object)val); } } public void OnDestroy() { ComponentLists.RemoveComponent(((object)this).GetType(), this); } private void EndReached(VideoPlayer source) { if (PlayerSettings.IsPlayingPlaylist) { if (PlaylistPosition < CurrentPlaylist.Count() - 1) { PlaylistPosition++; SetURL(CurrentPlaylist.ElementAt(PlaylistPosition).Url); } else if (PlayerSettings.IsLooping) { PlaylistPosition = 0; SetURL(CurrentPlaylist.ElementAt(PlaylistPosition).Url); } } if (PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.Radio && Object.op_Implicit((Object)(object)Animator) && (!mScreen.isLooping || !mAudio.loop) && !PlayerSettings.IsPlayingPlaylist) { Animator.SetBool(PlayerSettings.Playing, false); } bool isPlaying = mScreen.isPlaying; PlayerSettings.IsPlaying = isPlaying; } private void ScreenPrepareCompleted(VideoPlayer source) { if (PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.CinemaScreen && Object.op_Implicit((Object)(object)ScreenPlaneObj)) { ScreenPlaneObj.SetActive(true); } if (Object.op_Implicit((Object)(object)WaveParticleSystem) && OODConfig.MobilePlayerVisuals.Value) { WaveParticleSystem.Play(); } if (Object.op_Implicit((Object)(object)UIController.LoadingIndicatorObj)) { UIController.LoadingIndicatorObj.SetActive(false); } if (Object.op_Implicit((Object)(object)ScreenUICanvasObj) && Object.op_Implicit((Object)(object)LoadingCircleObj)) { ScreenUICanvasObj.SetActive(false); LoadingCircleObj.SetActive(false); } float timeZDO = GetTimeZDO(); UpdatePlayerTime(timeZDO); ((MonoBehaviour)this).StartCoroutine(DelayedExecution(0.5f, SendRequestTimeSync_RPC)); if (!PlayerSettings.IsPaused) { if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetBool(PlayerSettings.Playing, true); } if (Object.op_Implicit((Object)(object)WaveParticleSystem) && OODConfig.MobilePlayerVisuals.Value) { WaveParticleSystem.Play(); } PlayerSettings.IsPlaying = true; PlayerSettings.IsPaused = false; source.Play(); mAudio.Play(); } else { PlayerSettings.IsPlaying = true; PlayerSettings.IsPaused = true; source.Pause(); mAudio.Pause(); } } private void UpdateChecks() { float num = default(float); mAudio.outputAudioMixerGroup.audioMixer.GetFloat("MasterVolume", ref num); if (PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.CinemaScreen) { if (num != OODConfig.MasterVolumeScreen.Value) { mAudio.outputAudioMixerGroup.audioMixer.SetFloat("MasterVolume", OODConfig.MasterVolumeScreen.Value); } } else if (PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.BeltPlayer || PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.CartPlayer) { if (num != OODConfig.MasterVolumeTransport.Value) { mAudio.outputAudioMixerGroup.audioMixer.SetFloat("MasterVolume", OODConfig.MasterVolumeTransport.Value); } } else if (num != OODConfig.MasterVolumeMusicplayer.Value) { mAudio.outputAudioMixerGroup.audioMixer.SetFloat("MasterVolume", OODConfig.MasterVolumeMusicplayer.Value); } if (Object.op_Implicit((Object)(object)UIController.URLPanelObj)) { if (PlayerSettings.IsPlayingPlaylist) { UIController.UpdatePlaylistUI(); UIController.PlaylistTrackText.text = PlaylistString; } else { UIController.UpdatePlaylistUI(); } } if (!mAudio.isPlaying && ((Object)(object)mAudio.clip == (Object)null || mAudio.time == 0f) && !mAudio.loop && (Object)(object)Animator != (Object)null) { Animator.SetBool(PlayerSettings.Playing, false); } if (Object.op_Implicit((Object)(object)triggerCollider) && triggerCollider.radius != mAudio.maxDistance) { triggerCollider.radius = mAudio.maxDistance; } } public void SetURL(string url) { //IL_016e: Unknown result type (might be due to invalid IL or missing references) Encoding uTF = Encoding.UTF8; byte[] bytes = uTF.GetBytes(url); url = uTF.GetString(bytes); UnparsedURL = url; mAudio.clip = null; if (UnparsedURL == "") { Stop(isRPC: true); } else { if (!Object.op_Implicit((Object)(object)((IPlayer)this).mScreen) && !Object.op_Implicit((Object)(object)mAudio)) { return; } if (url.Contains("youtube.com/watch?v=") || url.Contains("youtube.com/shorts/") || url.Contains("youtu.be") || url.Contains("youtube.com/playlist")) { UIController.UpdatePlaylistInfo(); if (url.Contains("?list=") || url.Contains("&list=")) { SetPlaylist(UnparsedURL); return; } } mScreen.time = 0.0; if (Object.op_Implicit((Object)(object)mAudio.clip)) { mAudio.time = 0f; } PlayerSettings.IsPaused = false; PlayerSettings.IsPlaying = true; RPC.SendData(0L, CinemaPackage.RPCDataType.SetVideoUrl, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, UnparsedURL, CinemaPackage.PlayerStatus.Playing); SaveZDO(); } } private void SetPlaylist(string url) { ((MonoBehaviour)this).StartCoroutine(URLGrab.GetYouTubePlaylistCoroutine(url, delegate(List<VideoInfo> videoInfos) { if (videoInfos != null) { CurrentPlaylist = videoInfos; PlayerSettings.IsPlayingPlaylist = true; PlaylistPosition = 0; if (OODConfig.DebugEnabled.Value) { Logger.LogDebug((object)"Playlist info"); Logger.LogDebug((object)("Count: " + CurrentPlaylist.Count)); Logger.LogDebug((object)CurrentPlaylist.ToString()); Logger.LogDebug((object)("Playing first url of " + CurrentPlaylist.ElementAt(PlaylistPosition).Url)); } PlaylistURL = url; SetURL(CurrentPlaylist.ElementAt(PlaylistPosition).Url); if (Object.op_Implicit((Object)(object)UIController.URLPanelObj)) { UIController.UpdatePlaylistUI(); UIController.ToggleShuffleObj.GetComponentInChildren<Text>().text = "N"; UIController.ToggleShuffleObj.SetActive(true); UIController.ToggleShuffleTextObj.SetActive(true); } } else { Logger.LogError((object)"Failed to load playlist"); } })); } public void Play(bool isRPC = false) { //IL_00af: 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) if (PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic) { if (PlayerSettings.DynamicStation != null) { RPC.SendData(0L, CinemaPackage.RPCDataType.RequestStation, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, PlayerSettings.DynamicStation.Title); } return; } if (!isRPC) { RPC.SendData(0L, CinemaPackage.RPCDataType.Play, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, GetTime()); PlayerSettings.IsPlaying = true; PlayerSettings.IsPaused = false; SaveZDO(); return; } if (PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.CinemaScreen) { ScreenPlaneObj.SetActive(true); } if (PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Youtube || PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.RelativeVideo || PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Video) { mScreen.Play(); PlayerSettings.IsPlaying = mScreen.isPlaying; PlayerSettings.IsPaused = mScreen.isPaused; if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetBool(PlayerSettings.Playing, true); } if (Object.op_Implicit((Object)(object)WaveParticleSystem) && OODConfig.MobilePlayerVisuals.Value && (mScreen.isPlaying || mScreen.isPrepared || mAudio.isPlaying)) { WaveParticleSystem.Play(); } } else if (PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Audio) { if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetBool(PlayerSettings.Playing, true); } if (Object.op_Implicit((Object)(object)WaveParticleSystem) && OODConfig.MobilePlayerVisuals.Value) { WaveParticleSystem.Play(); } if (PlayerSettings.IsPaused && (Object)(object)mAudio.clip != (Object)null) { mAudio.UnPause(); } else { mAudio.Play(); } bool isPlaying = mAudio.isPlaying; PlayerSettings.IsPaused = !isPlaying; PlayerSettings.IsPlaying = isPlaying; } } public void PlayStation(string stationName) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) DynamicStation station = StationManager.Instance.GetStation(stationName); PlayerSettings.DynamicStation = station; PlayerSettings.IsPlaying = true; PlayerSettings.IsPaused = false; PlayerSettings.CurrentMode = PlayerSettings.PlayerMode.Dynamic; UnparsedURL = PlayerSettings.DynamicStation.Title; RPC.SendData(0L, CinemaPackage.RPCDataType.RequestStation, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, stationName); SaveZDO(); } public void RPC_PlayStation(string dataURL, string trackTitle, float time) { DynamicStation station = StationManager.Instance.GetStation(dataURL); Track track = station?.Tracks.FirstOrDefault((Track x) => x.Title == trackTitle); if (track != null) { station.CurrentTrackIndex = station.Tracks.IndexOf(track); station.Tracks[station.CurrentTrackIndex].CurrentTime = time; PlayerSettings.CurrentMode = PlayerSettings.PlayerMode.Dynamic; PlayerSettings.DynamicStation = station; PlayerSettings.IsPlaying = true; PlayerSettings.IsPaused = false; InitiateDynamicStationPlayback(); ((MonoBehaviour)this).StartCoroutine(DelayedExecution(2f, SendRequestTimeSync_RPC)); } } private void InitiateDynamicStationPlayback() { PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Audio; Track track = PlayerSettings.DynamicStation.Tracks[PlayerSettings.DynamicStation.CurrentTrackIndex]; mAudio.clip = track.AudioClip; mAudio.time = track.CurrentTime; foreach (KeyValuePair<Type, IList> mediaComponentList in ComponentLists.MediaComponentLists) { foreach (BasePlayer item in mediaComponentList.Value) { if (!((Object)(object)item == (Object)(object)this) && Object.op_Implicit((Object)(object)item) && item.PlayerSettings.DynamicStation != null && item.PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic && item.PlayerSettings.DynamicStation.Title == PlayerSettings.DynamicStation.Title && item.PlayerSettings.IsPlaying && !item.PlayerSettings.IsPaused) { item.mAudio.clip = track.AudioClip; item.mAudio.time = track.CurrentTime; } } } mAudio.Play(); PlayerSettings.IsPlaying = true; PlayerSettings.IsPaused = false; PlayerSettings.IsPlayingPlaylist = false; PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Audio; PlayerSettings.CurrentMode = PlayerSettings.PlayerMode.Dynamic; UnparsedURL = PlayerSettings.DynamicStation.Title; float time = track.AudioClip.length - mAudio.time; if (DynamicStationCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(DynamicStationCoroutine); } DynamicStationCoroutine = ((MonoBehaviour)this).StartCoroutine(AudioEndEvent(time, PlayNextDynamicStationTrack)); if (Object.op_Implicit((Object)(object)WaveParticleSystem)) { WaveParticleSystem.Play(); } if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetBool(PlayerSettings.Playing, true); } UpdateRadioPanel(); } private void PlayNextDynamicStationTrack() { if (PlayerSettings.DynamicStation != null) { mAudio.Stop(); mAudio.clip = null; mAudio.time = 0f; ((MonoBehaviour)this).StartCoroutine(DelayedExecution(0.35f, delegate { //IL_002a: Unknown result type (might be due to invalid IL or missing references) RPC.SendData(0L, CinemaPackage.RPCDataType.RequestStation, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, PlayerSettings.DynamicStation.Title); ((MonoBehaviour)this).StartCoroutine(DelayedExecution(2f, SendRequestTimeSync_RPC)); })); } } [IteratorStateMachine(typeof(<AudioEndEvent>d__135))] private IEnumerator AudioEndEvent(float time, Action method) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <AudioEndEvent>d__135(0) { <>4__this = this, time = time, method = method }; } public void UpdateRadioPanel() { if (Object.op_Implicit((Object)(object)RadioPanelObj) && Object.op_Implicit((Object)(object)UIController.RadioPanelThumbnail) && mAudio.isPlaying) { if (Object.op_Implicit((Object)(object)ScreenUICanvasObj)) { ScreenUICanvasObj.SetActive(true); } if (Object.op_Implicit((Object)(object)ScreenPlaneObj)) { ScreenPlaneObj.SetActive(true); } ClearRenderTexture(mScreen.targetTexture); if (PlayerSettings.DynamicStation != null && PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic) { RadioPanelObj.SetActive(true); UIController.RadioPanelThumbnail.sprite = (((Object)(object)PlayerSettings.DynamicStation.Thumbnail != (Object)null) ? PlayerSettings.DynamicStation.Thumbnail : null); } else if (mAudio.isPlaying && PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Audio) { RadioPanelObj.SetActive(true); UIController.RadioPanelThumbnail.sprite = (((Object)(object)PlayerSettings.Thumbnail != (Object)null) ? PlayerSettings.Thumbnail : null); } else if (PlayerSettings.PlayerLinkType != PlayerSettings.LinkType.Audio) { RadioPanelObj.SetActive(false); } } } public void Pause(bool isRPC = false) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (!isRPC) { RPC.SendData(0L, CinemaPackage.RPCDataType.Pause, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, GetTime()); PlayerSettings.IsPaused = true; SaveZDO(); return; } if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetBool(PlayerSettings.Playing, false); } if (Object.op_Implicit((Object)(object)WaveParticleSystem)) { WaveParticleSystem.Stop(); } mScreen.Pause(); mAudio.Pause(); PlayerSettings.IsPaused = true; } private void SetupAudio() { centerAudioSphere = ((Component)this).transform.Find("audio/centerSphere"); mAudio = ((Component)this).gameObject.GetComponentInChildren<AudioSource>(); mAudio.maxDistance = OODConfig.DefaultDistance.Value; PlayerSettings.Volume = OODConfig.DefaultAudioSourceVolume.Value; mAudio.spatialBlend = 1f; mAudio.spatialize = true; mAudio.spatializePostEffects = true; mAudio.volume = PlayerSettings.Volume; if ((Object)(object)mScreen != (Object)null) { mScreen.audioOutputMode = (VideoAudioOutputMode)1; mScreen.SetTargetAudioSource((ushort)0, mAudio); } } protected void SetupRadioPanel() { if (Object.op_Implicit((Object)(object)RadioPanelObj)) { UIController.RadioPanelThumbnail = ((Component)RadioPanelObj.transform.Find("thumbnail")).GetComponent<Image>(); } if (Object.op_Implicit((Object)(object)ScreenUICanvasObj)) { Transform val = ScreenUICanvasObj.transform.Find("mainCanvas/radioPanel/waveformPanel"); if (Object.op_Implicit((Object)(object)val)) { AudioWaveformVisualizer audioWaveformVisualizer = ((Component)val).gameObject.AddComponent<AudioWaveformVisualizer>(); audioWaveformVisualizer.Setup(mAudio); } } if (Object.op_Implicit((Object)(object)UIController.RadioPanelThumbnail)) { if (PlayerSettings.DynamicStation != null && PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic) { UIController.RadioPanelThumbnail.sprite = PlayerSettings.DynamicStation.Thumbnail; } if ((Object)(object)PlayerSettings.Thumbnail != (Object)null) { UIController.RadioPanelThumbnail.sprite = PlayerSettings.Thumbnail; } else { UIController.RadioPanelThumbnail.sprite = null; } } } protected void UpdateLoadingIndicator() { if (URLGrab.LoadingBool && !string.IsNullOrEmpty(UnparsedURL)) { if (Object.op_Implicit((Object)(object)ScreenUICanvasObj) && Object.op_Implicit((Object)(object)LoadingCircleObj) && Object.op_Implicit((Object)(object)RadioPanelObj)) { ScreenUICanvasObj.SetActive(true); RadioPanelObj.SetActive(false); LoadingCircleObj.SetActive(true); } UIController?.SetLoadingIndicatorActive(active: true); int num = PlayerSettings.LoadingCount % 4; if (UIController != null && (Object)(object)UIController.LoadingIndicatorObj != (Object)null) { UIController.LoadingIndicatorObj.GetComponent<Text>().text = UIController.LoadingMessages[num]; } PlayerSettings.LoadingCount++; } else if (!URLGrab.LoadingBool && Object.op_Implicit((Object)(object)UIController.LoadingIndicatorObj) && UIController.LoadingIndicatorObj.activeSelf) { UIController.SetLoadingIndicatorActive(active: false); } } public void Stop(bool isRPC = false) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (!isRPC) { RPC.SendData(0L, CinemaPackage.RPCDataType.Stop, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, GetTime()); return; } if (DynamicStationCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(DynamicStationCoroutine); } PlayerSettings.DynamicStation = null; mScreen.Stop(); mAudio.Stop(); mScreen.url = ""; mAudio.clip = null; mScreen.time = 0.0; if (Object.op_Implicit((Object)(object)mAudio.clip)) { mAudio.time = 0f; } if (PlayerSettings.PlayerType == CinemaPackage.MediaPlayers.CinemaScreen) { ScreenPlaneObj.SetActive(false); if (Object.op_Implicit((Object)(object)ScreenUICanvasObj) && Object.op_Implicit((Object)(object)LoadingCircleObj)) { ScreenUICanvasObj.SetActive(false); LoadingCircleObj.SetActive(false); } } if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetBool(PlayerSettings.Playing, false); } if (Object.op_Implicit((Object)(object)WaveParticleSystem)) { WaveParticleSystem.Stop(); } PlayerSettings.IsPlayingPlaylist = false; PlayerSettings.IsPlaying = false; PlayerSettings.IsPaused = false; CurrentPlaylist = null; URLGrab.Reset(); ClearRenderTexture(mScreen.targetTexture); UnparsedURL = null; DownloadURL = null; YoutubeURLNode = null; YoutubeSoundDirectUri = null; YoutubeVideoDirectUri = null; PlaylistURL = null; PlaylistString = null; PlaylistPosition = 0; UIController.SetInputFieldText(""); UIController.UpdatePlaylistUI(); SaveZDO(); SendUpdateZDO_RPC(); } [IteratorStateMachine(typeof(<AudioWebRequest>d__142))] protected IEnumerator AudioWebRequest(Uri url) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <AudioWebRequest>d__142(0) { <>4__this = this, url = url }; } [IteratorStateMachine(typeof(<CreateThumbnailFromURL>d__143))] private IEnumerator CreateThumbnailFromURL(Uri url) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <CreateThumbnailFromURL>d__143(0) { <>4__this = this, url = url }; } public void PlaySoundcloud(string sentUrl, bool isRPC) { Uri url = URLGrab.CleanUrl(sentUrl); UIController.SetLoadingIndicatorText("Processing"); UIController.SetLoadingIndicatorActive(active: true); if (sentUrl != null) { ((MonoBehaviour)this).StartCoroutine(URLGrab.GetSoundcloudExplodeCoroutine(url, delegate(Uri resultUrl, Uri artworkUri) { if (resultUrl != null) { if (artworkUri != null) { ((MonoBehaviour)this).StartCoroutine(CreateThumbnailFromURL(artworkUri)); } else { PlayerSettings.Thumbnail = null; } ((MonoBehaviour)this).StartCoroutine(AudioWebRequest(resultUrl)); } else { UIController.SetLoadingIndicatorText("Null, check logs"); Logger.LogWarning((object)"Failed to load Soundcloud"); ((MonoBehaviour)this).StartCoroutine(ResetLoadingIndicatorAfterDelay()); } })); } else { string message = "Soundcloud Null"; Logger.LogInfo((object)"Soundcloud Null, check for exceptions"); ((MonoBehaviour)this).StartCoroutine(UIController.UnavailableIndicator(message)); } } public void PlayYoutube(string url) { if (URLGrab.LoadingBool) { return; } if (OODConfig.IsYtEnabled.Value) { if (PlayerSettings.IsLooping) { mScreen.isLooping = true; mAudio.loop = true; } if (OODConfig.YoutubeAPI.Value == OODConfig.YouTubeAPI.YouTubeExplode) { StartYoutubeProcessing(url); return; } YoutubeURLNode = url; ((MonoBehaviour)this).StartCoroutine(YoutubeNodeQuery()); } else { ((MonoBehaviour)this).StartCoroutine(UIController.UnavailableIndicator("YouTube disabled")); } } public void RPC_SetURL(string url, bool isPaused = false, float time = 0f) { if (url == null) { return; } Encoding uTF = Encoding.UTF8; byte[] bytes = uTF.GetBytes(url); url = uTF.GetString(bytes); PlayerSettings.IsPaused = isPaused; ClearRenderTexture(mScreen.targetTexture); if (URLGrab.IsAudioFile(url)) { string relativeURL = URLGrab.GetRelativeURL(url); if (relativeURL != "") { url = relativeURL; PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.RelativeAudio; } else { PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Audio; } DownloadURL = URLGrab.CleanUrl(url); ((MonoBehaviour)this).StartCoroutine(AudioWebRequest(DownloadURL)); } else if (url.Contains("soundcloud.com/")) { PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Soundcloud; PlaySoundcloud(url, isRPC: true); } else { if (!url.Contains("\\") && !url.Contains(".") && !url.Contains("/")) { return; } string relativeURL2 = URLGrab.GetRelativeURL(url); if (relativeURL2 != "") { mScreen.source = (VideoSource)1; mScreen.url = relativeURL2; PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.RelativeVideo; if (OODConfig.DebugEnabled.Value) { Logger.LogDebug((object)("Playing: " + relativeURL2)); } BeginLoadingPrepare(); } if ((url.StartsWith("http://") || url.StartsWith("https://")) && !Path.HasExtension(url) && OODConfig.IsYtEnabled.Value) { if (PlayerSettings.IsLooping && (!mScreen.isLooping || !mAudio.loop)) { mScreen.isLooping = true; mAudio.loop = true; } PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Youtube; PlayYoutube(url); return; } PlayerSettings.PlayerLinkType = PlayerSettings.LinkType.Video; mScreen.source = (VideoSource)1; mScreen.url = url; BeginLoadingPrepare(); if (OODConfig.DebugEnabled.Value) { Logger.LogDebug((object)("Playing: " + url)); } } } private void BeginLoadingPrepare() { mScreen.Prepare(); ClearRenderTexture(mScreen.targetTexture); if (Object.op_Implicit((Object)(object)ScreenUICanvasObj) && Object.op_Implicit((Object)(object)LoadingCircleObj)) { ScreenUICanvasObj.SetActive(true); LoadingCircleObj.SetActive(true); } } public void StartYoutubeProcessing(string url) { if (Object.op_Implicit((Object)(object)UIController.LoadingIndicatorObj)) { UIController.SetLoadingIndicatorText("Processing"); UIController.LoadingIndicatorObj.SetActive(true); } ((MonoBehaviour)this).StartCoroutine(Ytdl.GetVideoUrlWithRetry(url, delegate(string resultUrl) { if (!string.IsNullOrEmpty(resultUrl)) { Logger.LogDebug((object)("Result URL: " + resultUrl)); mScreen.source = (VideoSource)1; mScreen.url = resultUrl; BeginLoadingPrepare(); } else { Logger.LogError((object)"Failed to get video URL"); UIController.SetLoadingIndicatorText("Failed to load video"); Logger.LogWarning((object)"Failed to load video"); ((MonoBehaviour)this).StartCoroutine(ResetLoadingIndicatorAfterDelay()); } })); } [IteratorStateMachine(typeof(<ResetLoadingIndicatorAfterDelay>d__149))] private IEnumerator ResetLoadingIndicatorAfterDelay() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ResetLoadingIndicatorAfterDelay>d__149(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<YoutubeNodeQuery>d__150))] private IEnumerator YoutubeNodeQuery(bool isRPC = false) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <YoutubeNodeQuery>d__150(0) { <>4__this = this, isRPC = isRPC }; } [IteratorStateMachine(typeof(<CreateYoutubeAudioAndPlay>d__151))] private IEnumerator CreateYoutubeAudioAndPlay() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <CreateYoutubeAudioAndPlay>d__151(0) { <>4__this = this }; } public void UpdatePlayerTime(float time) { if (Math.Abs(mScreen.time - (double)time) > 0.05) { mScreen.time = time; } if ((Object)(object)mAudio.clip != (Object)null && (double)Math.Abs(mAudio.time - time) > 0.05) { mAudio.time = time; } } public void SetLock(bool locked) { PlayerSettings.IsLocked = locked; if (Object.op_Implicit((Object)(object)UIController.URLPanelObj)) { if (PlayerSettings.IsLocked) { UIController.LockedIconObj.SetActive(true); UIController.UnlockedIconObj.SetActive(false); } else { UIController.LockedIconObj.SetActive(false); UIController.UnlockedIconObj.SetActive(true); } } } public void SetDynamicStation(DynamicStation station) { PlayerSettings.DynamicStation = station; } public virtual void SaveZDO(bool saveTime = true) { ZDO zDO = ZNetView.GetZDO(); if (zDO != null && !((Object)(object)mAudio == (Object)null)) { RequestOwnership(zDO); zDO.Set("distance", mAudio.maxDistance); zDO.Set("adminOnly", PlayerSettings.AdminOnly); zDO.Set("isLooping", PlayerSettings.IsLooping); zDO.Set("isLocked", PlayerSettings.IsLocked); zDO.Set("isPlaying", PlayerSettings.IsPlaying); zDO.Set("isPaused", PlayerSettings.IsPaused); zDO.Set("currentMode", (int)PlayerSettings.CurrentMode); zDO.Set("url", UnparsedURL ?? ""); if (saveTime) { SaveTimeZDO(); } zDO.Set("speakers", SpeakerHelper.CompressSpeakerList(mSpeakers)); zDO.Set("speakerCount", mSpeakers.Count); } } public void SaveTimeZDO() { ZDO zDO = ZNetView.GetZDO(); if (zDO != null) { if (mScreen.isPlaying) { zDO.Set("time", (float)mScreen.time); } else if (mAudio.isPlaying && Object.op_Implicit((Object)(object)mAudio.clip)) { zDO.Set("time", mAudio.time); } } } public virtual void LoadZDO() { ZDO zDO = ZNetView.GetZDO(); if (zDO == null) { return; } PlayerSettings.AdminOnly = zDO.GetBool("adminOnly", false); float @float = zDO.GetFloat("distance", 0f); if (@float != 0f) { mAudio.maxDistance = @float; } PlayerSettings.IsLocked = zDO.GetBool("isLocked", false); UnparsedURL = zDO.GetString("url", ""); PlayerSettings.IsLooping = zDO.GetBool("isLooping", false); mAudio.loop = PlayerSettings.IsLooping; mScreen.isLooping = PlayerSettings.IsLooping; mSpeakers = SpeakerHelper.DecompressSpeakerList(zDO.GetByteArray("speakers", (byte[])null)); UpdateSpeakerCenter(); PlayerSettings.IsPlaying = zDO.GetBool("isPlaying", false); PlayerSettings.IsPaused = zDO.GetBool("isPaused", false); PlayerSettings.CurrentMode = (PlayerSettings.PlayerMode)zDO.GetInt("currentMode", 0); if (PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic) { PlayerSettings.DynamicStation = StationManager.Instance.GetStation(UnparsedURL); if (PlayerSettings.DynamicStation != null) { ((MonoBehaviour)this).StartCoroutine(DelayedExecution(1f, delegate { //IL_002a: Unknown result type (might be due to invalid IL or missing references) RPC.SendData(0L, CinemaPackage.RPCDataType.RequestStation, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, PlayerSettings.DynamicStation.Title); })); ((MonoBehaviour)this).StartCoroutine(DelayedExecution(2f, SendRequestTimeSync_RPC)); } } else { ((MonoBehaviour)this).StartCoroutine(DelayedExecution(3f, delegate { RPC_SetURL(UnparsedURL, PlayerSettings.IsPaused); })); } } public virtual void UpdateZDO() { ZDO zDO = ZNetView.GetZDO(); if (zDO == null) { return; } PlayerSettings.AdminOnly = zDO.GetBool("adminOnly", false); float @float = zDO.GetFloat("distance", 0f); if (@float != 0f) { mAudio.maxDistance = @float; } PlayerSettings.IsLocked = zDO.GetBool("isLocked", false); PlayerSettings.IsLooping = zDO.GetBool("isLooping", false); mAudio.loop = PlayerSettings.IsLooping; mScreen.isLooping = PlayerSettings.IsLooping; PlayerSettings.CurrentMode = (PlayerSettings.PlayerMode)zDO.GetInt("currentMode", 0); if (zDO.GetString("url", "") != UnparsedURL) { if (string.IsNullOrEmpty(UnparsedURL)) { if (PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic) { ((MonoBehaviour)this).StartCoroutine(DelayedExecution(1f, delegate { //IL_0066: Unknown result type (might be due to invalid IL or missing references) PlayerSettings.DynamicStation = StationManager.Instance.GetStation(UnparsedURL); if (PlayerSettings.DynamicStation?.Title != null) { RPC.SendData(0L, CinemaPackage.RPCDataType.RequestStation, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, PlayerSettings.DynamicStation.Title); } })); ((MonoBehaviour)this).StartCoroutine(DelayedExecution(2f, SendRequestTimeSync_RPC)); } else { RPC_SetURL(UnparsedURL); } } else { Stop(isRPC: true); } } if (zDO.GetInt("speakerCount", 0) != mSpeakers.Count) { mSpeakers = SpeakerHelper.DecompressSpeakerList(zDO.GetByteArray("speakers", (byte[])null)); UpdateSpeakerCenter(); } mSpeakers = SpeakerHelper.DecompressSpeakerList(zDO.GetByteArray("speakers", (byte[])null)); UpdateSpeakerCenter(); if (zDO.GetBool("isPaused", false) != PlayerSettings.IsPaused) { Pause(isRPC: true); } } public async void RPC_UpdateZDO() { await Task.Delay(350); UpdateZDO(); } [IteratorStateMachine(typeof(<DelayedExecution>d__160))] private IEnumerator DelayedExecution(float delay, Action action) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedExecution>d__160(0) { <>4__this = this, delay = delay, action = action }; } internal void SendUpdateZDO_RPC() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) RPC.SendData(0L, CinemaPackage.RPCDataType.UpdateZDO, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, GetTime()); } private void SyncTime() { if (mScreen.isPlaying || mAudio.isPlaying) { BroadcastTime(); } } internal void SendRequestTimeSync_RPC() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) ZDO zDO = ZNetView.GetZDO(); if (zDO != null && (!zDO.IsOwner() || PlayerSettings.CurrentMode == PlayerSettings.PlayerMode.Dynamic)) { RPC.SendData(0L, CinemaPackage.RPCDataType.RequestTime, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, 0f, UnparsedURL); } } public void BroadcastTime() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) ZDO zDO = ZNetView.GetZDO(); if (zDO != null && zDO.IsOwner()) { SaveTimeZDO(); RPC.SendData(0L, CinemaPackage.RPCDataType.SyncTime, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position, GetTime()); } } private string GenerateUniqueID() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) string[] obj = new string[5] { Path.GetRandomFileName().Replace(".", ""), "-", DateTime.Now.Ticks.ToString(), "-", null }; ZDOID zDOID = ((Character)Player.m_localPlayer).GetZDOID(); obj[4] = ((ZDOID)(ref zDOID)).UserID.ToString(); return string.Concat(obj); } public Coroutine StartPlayerCoroutine(IEnumerator routine) { return ((MonoBehaviour)this).StartCoroutine(routine); } public void StopPlayerCoroutine(Coroutine routine) { ((MonoBehaviour)this).StopCoroutine(routine); } public void ClaimOwnership(ZDO zdo) { if (zdo != null && !zdo.IsOwner()) { zdo.SetOwner(ZDOMan.GetSessionID()); } } public void SetOwnership(long peer) { ZDO zDO = ZNetView.GetZDO(); if (zDO != null && zDO.IsOwner()) { BroadcastTime(); zDO.SetOwner(peer); } } public void RequestOwnership(ZDO zdo) { //IL_008e: Unknown result type (might be due to invalid IL or missing references) if (zdo == null || zdo.IsOwner()) { return; } Player val = ((IEnumerable<Player>)Player.s_players).FirstOrDefault((Func<Player, bool>)delegate(Player p) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) int result; if ((Object)(object)p != (Object)null && (Object)(object)((Character)p).m_nview != (Object)null && ((Character)p).m_nview.IsValid()) { ZDOID zDOID = ((Character)p).GetZDOID(); result = ((((ZDOID)(ref zDOID)).UserID == zdo.GetOwner()) ? 1 : 0); } else { result = 0; } return (byte)result != 0; }); if ((Object)(object)val == (Object)null) { ClaimOwnership(zdo); } else { RPC.SendData(0L, CinemaPackage.RPCDataType.RequestOwnership, PlayerSettings.PlayerType, MediaPlayerID, ((Component)this).gameObject.transform.position); } } public bool AddSpeaker(SpeakerComponent sp) { if (mSpeakers.Add(sp)) { SaveZDO(); UpdateSpeakerCenter(); ((MonoBehaviour)this).StartCoroutine(ShowCenterSphere()); SendUpdateZDO_RPC(); return true; } return false; } public void RemoveSpeaker(SpeakerComponent sp) { if (mSpeakers.Remove(sp)) { SaveZDO(); UpdateSpeakerCenter(); ((MonoBehaviour)this).StartCoroutine(ShowCenterSphere()); SendUpdateZDO_RPC(); } } private void UpdateSpeakerCenter() { //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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (mSpeakers.Count == 0) { ((Component)mAudio).transform.position = ((Component)this).transform.position; return; } Vector3 position = SpeakerHelper.CalculateAudioCenter(mSpeakers.ToList()); ((Component)mAudio).transform.position = position; } public void UnlinkAllSpeakers() { mSpeakers.Clear(); UIController.UpdateSpeakerCount(); UpdateSpeakerCenter(); ((MonoBehaviour)this).StartCoroutine(ShowCenterSphere()); SaveZDO(); SendUpdateZDO_RPC(); } [IteratorStateMachine(typeof(<ShowCenterSphere>d__175))] private IEnumerator ShowCenterSphere() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ShowCenterSphere>d__175(0) { <>4__this = this }; } private float GetTime() { if (PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Youtube || PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.RelativeVideo || PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Video) { return (float)mScreen.time; } if (PlayerSettings.PlayerLinkType == PlayerSettings.LinkType.Audio && Object.op_Implicit((Object)(object)mAudio.clip)) { return mAudio.time; } return 0f; } private float GetTimeZDO() { ZDO zDO = ZNetView.GetZDO(); if (zDO != null) { return zDO.GetFloat("time", 0f); } return 0f; } private void ClearRenderTexture(RenderTexture renderTexture) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown //IL_000c: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(1, 1); val.SetPixel(0, 0, Color.black); val.Apply(); RenderTexture active = RenderTexture.active; RenderTexture.active = renderTexture; Graphics.Blit((Texture)(object)val, renderTexture); RenderTexture.active = active; Object.Destroy((Object)(object)val); } GameObject IPlayer.get_gameObject() { return ((Component)this).gameObject; } } public class PlayerSettings { public enum LinkType { Youtube, Soundcloud, Video, Audio, RelativeAudio, RelativeVideo } public enum PlayerMode { URL, Dynamic } public static readonly int Playing = Animator.StringToHash("Playing"); public static readonly int MainTex = Shader.PropertyToID("_MainTex"); public static readonly int EmissiveColorMap = Shader.PropertyToID("_EmissiveColorMap"); internal LinkType PlayerLinkType; public PlayerMode CurrentMode = PlayerMode.URL; public List<AudioClip> CurrentDynamicList = new List<AudioClip>(); public bool IsPaused { get; set; } public bool IsPlaying { get; set; } public int LoadingCount { get; set; } public bool IsGuiActive { get; set; } public bool AdminOnly { get; set; } public bool IsLocked { get; set; } = true; public bool IsLooping { get; set; } public bool IsPlayingPlaylist { get; set; } public bool IsSettingsGuiActive { get; set; } public bool IsShuffling { get; set; } public float MuteVol { get; set; } = 0.5f; public float VerticalDistanceDropoff { get; set; } = 0f; public float DropoffPower { get; set; } = 1.5f; public float Volume { get; set; } = 0.5f; public bool IsLinkedToParent { get; set; } = false; public CinemaPackage.MediaPlayers PlayerType { get; set; } public DynamicStation DynamicStation { get; set; } public Sprite Thumbnail { get; set; } } } namespace OdinOnDemand.Patches { [HarmonyPatch(typeof(Trader), "GetAvailableItems")] public class HaldorCustomPatch { private static void Postfix(ref List<TradeItem> __result) { //IL_0033: 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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown List<TradeItem> list = new List<TradeItem>(); if (OODConfig.SkaldsGirdleEnabled.Value) { GameObject prefab = PrefabManager.Instance.GetPrefab("skaldsgirdle"); if ((Object)(object)prefab != (Object)null) { list.Add(new TradeItem { m_prefab = prefab.GetComponent<ItemDrop>(), m_stack = 1, m_price = OODConfig.SkaldsGirdleCost.Value }); } } __result = __result.Concat(list).ToList(); } } public class PlacePiecePatch { [HarmonyPatch(typeof(Player), "PlacePiece", new Type[] { typeof(Piece), typeof(Vector3), typeof(Quaternion), typeof(bool) })] private static class PlacePiece_Patch { private static bool Prefix(Piece piece, Vector3 pos, Quaternion rot, bool doAttack = true) { if (Pieces.Contains(((Object)((Component)piece).gameObject).name) && OODConfig.VipMode.Value) { RankSystem.PlayerRank rank = RankSystem.GetRank(); if (rank != RankSystem.PlayerRank.Admin && rank != RankSystem.PlayerRank.Vip) { RankSystem.DisplayBlockMenu(); return false; } } return true; } } private static readonly string[] Pieces = new string[9] { "flatscreen", "theaterscreen", "tabletv", "monitor", "oldtv", "laptop", "radio", "boombox", "gramophone" }; } [HarmonyPatch(typeof(Player), "RemovePiece")] public class RemovePiecePatch { private static readonly string[] Pieces = new string[9] { "flatscreen", "theaterscreen", "tabletv", "monitor", "oldtv", "laptop", "radio", "boombox", "gramophone" }; [HarmonyPrefix] public static bool PrefixRemovePiece(ref Player __instance) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) if (!OODConfig.VipMode.Value) { return true; } RaycastHit val = default(RaycastHit); if (!Physics.Raycast(((Component)GameCamera.instance).transform.position, ((Component)GameCamera.instance).transform.forward, ref val, 50f, __instance.m_removeRayMask) || (double)Vector3.Distance(((RaycastHit)(ref val)).point, ((Character)__instance).m_eye.position) >= (double)__instance.m_maxPlaceDistance) { return false; } Piece componentInParent = ((Component)((RaycastHit)(ref val)).collider).GetComponentInParent<Piece>(); if (!Object.op_Implicit((Object)(object)componentInParent) || !componentInParent.m_canBeRemoved) { return false; } if (Pieces.Contains(((Object)((Component)componentInParent).gameObject).name.Replace("(Clone)", "")) && OODConfig.VipMode.Value) { RankSystem.PlayerRank rank = RankSystem.GetRank(); if (rank != RankSystem.PlayerRank.Admin && rank != RankSystem.PlayerRank.Vip) { RankSystem.DisplayBlockMenu(); return false; } } return true; } } } namespace OdinOnDemand.Utils { public class AudioFader : MonoBehaviour { private static MusicMan _musicMan; public static AudioFader Instance { get; set; } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } else { Object.Destroy((Object)(object)((Component)this).gameObject); } } public AudioFader() { _musicMan = MusicMan.m_instance; } public void Update() { if (OODConfig.AudioFadeType.Value == OODConfig.FadeType.Fade) { FadeGameMusic(); } } public void FadeGameMusic() { var (num, basePlayer) = GetDistanceFromMediaplayers(); if (!Object.op_Implicit((Object)(object)basePlayer)) { _musicMan.m_musicVolume = PlayerPrefs.GetFloat("MusicVolume", 1f); return; } float num2 = basePlayer.mAudio.maxDistance / 1.35f; if (num > num2) { _musicMan.m_musicVolume = PlayerPrefs.GetFloat("MusicVolume", 1f); return; } float num3 = Mathf.Clamp01(num / num2); float num4 = 20f * Mathf.Log10(_musicMan.m_musicSource.volume); float num5 = Mathf.Lerp(OODConfig.LowestVolumeDB.Value, num4, num3); _musicMan.m_musicSource.volume = Mathf.Pow(10f, num5 / 20f); } private static (float, BasePlayer) GetDistanceFromMediaplayers() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: 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) if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return (float.MaxValue, null); } Vector3 position = ((Component)Player.m_localPlayer).transform.position; float num = float.MaxValue; BasePlayer item = null; foreach (KeyValuePair<Type, IList> mediaComponentList in ComponentLists.MediaComponentLists) { foreach (BasePlayer item2 in mediaComponentList.Value) { if (Object.op_Implicit((Object)(object)item2) && (item2.mAudio.isPlaying || (Object.op_Implicit((Object)(object)item2.mAudio.clip) && item2.mAudio.time != 0f) || item2.mAudio.loop) && !item2.PlayerSettings.IsPaused && item2.PlayerSettings.IsPlaying) { Vector3 position2 = ((Component)item2).transform.position; float num2 = Vector3.Distance(position, position2); if (num2 < num) { num = num2; item = item2; } } } } return (num, item); } } public class RankSystem : MonoBehaviour { public enum PlayerRank { Player, Vip, Admin } private class CoroutineManager : MonoBehaviour { } [CompilerGenerated] private sealed class <ShowBlockMenu>d__6 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ShowBlockMenu>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (_blockedText.activeSelf) { _blockedText.SetActive(false); return false; } _blockedText.SetActive(true); <>2__current = (object)new WaitForSeconds(3f); <>1__state = 1; return true; case 1: <>1__state = -1; _blockedText.SetActive(false); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static GameObject _blockedText; private static CoroutineManager _coroutineManager; private static Coroutine _blockMenuCoroutine; public static PlayerRank GetRank() { UserInfo localUser = UserInfo.GetLocalUser(); if (ZNet.instance.ListContainsId(ZNet.instance.m_adminList, localUser.UserId.m_userID)) { return PlayerRank.Admin; } if (OODConfig.VipList.Value.Contains(localUser.UserId.m_userID)) { return PlayerRank.Vip; } return PlayerRank.Player; } private static void CreateBlockMenu() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_blockedText)) { if (GUIManager.Instance == null) { Logger.LogDebug((object)"GUIManager instance is null"); return; } if (!Object.op_Implicit((Object)(object)GUIManager.CustomGUIFront)) { Logger.LogDebug((object)"GUIManager CustomGUI is null"); return; } _blockedText = GUIManager.Instance.CreateText(OODConfig.VipMessage.Value, GUIManager.CustomGUIFront.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, -150f), GUIManager.Instance.AveriaSerifBold, 22, GUIManager.Instance.ValheimOrange, true, Color.black, 450f, 40f, false); _blockedText.SetActive(false); } } public static void DisplayBlockMenu() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown if ((Object)(object)_coroutineManager == (Object)null) { GameObject val = new GameObject("CoroutineManager"); _coroutineManager = val.AddComponent<CoroutineManager>(); Object.DontDestroyOnLoad((Object)(object)val); } if (!Object.op_Implicit((Object)(object)_blockedText)) { CreateBlockMenu(); } if (_blockMenuCoroutine != null) { ((MonoBehaviour)_coroutineManager).StopCoroutine(_blockMenuCoroutine); } _blockMenuCoroutine = ((MonoBehaviour)_coroutineManager).StartCoroutine(ShowBlockMenu()); } [IteratorStateMachine(typeof(<ShowBlockMenu>d__6))] private static IEnumerator ShowBlockMenu() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ShowBlockMenu>d__6(0); } } } namespace OdinOnDemand.Utils.UI { public class AudioWaveformVisualizer : MonoBehaviour { public int barCount = 64; public int smoothing = 8; public RectTransform[] bars; public AudioSource audioSource; public Gradient colorGradient; public float spacing = 10f; public float minHeight = 0.001f; public float maxHeight = 10f; public bool enableGlowEffect = true; public bool enableOutlineEffect = true; private bool _initialUpdateDone = false; [SerializeField] private int midStartIndex = 10; [SerializeField] private int midEndIndex = 32; [SerializeField] private float midScalingFactor = OODConfig.VisualizerScaleFactorMid.Value; [SerializeField] private float highScalingFactor = OODConfig.VisualizerScaleFactorHigh.Value; [SerializeField] private float baseScalingFactor = OODConfig.VisualizerScaleFactorBase.Value; public void Setup(AudioSource audio) { audioSource = audio; CreateBars(); CreateGradient(); Update(); } private void CreateGradient() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) colorGradient = new Gradient(); GradientColorKey[] array = (GradientColorKey[])(object)new GradientColorKey[3]; array[0].color = Color.green; array[0].time = 0f; array[1].color = Color.yellow; array[1].time = 0.25f; array[2].color = new Color(255f, 165f, 0f); array[2].time = 1f; GradientAlphaKey[] array2 = (GradientAlphaKey[])(object)new GradientAlphaKey[2]; array2[0].alpha = 1f; array2[0].time = 0f; array2[1].alpha = 1f; array2[1].time = 1f; colorGradient.SetKeys(array, array2); } private void CreateBars() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0087: 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_0094: 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_00c2: 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_00f7: 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_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0156: 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_0189: Expected O, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) bars = (RectTransform[])(object)new RectTransform[barCount]; float num = spacing * (float)(barCount - 1); Rect rect = ((Component)this).GetComponent<RectTransform>().rect; float num2 = (((Rect)(ref rect)).width - num) / (float)barCount; for (int i = 0; i < barCount; i++) { GameObject val = new GameObject("Bar " + i); val.transform.SetParent(((Component)this).transform, false); RectTransform val2 = val.AddComponent<RectTransform>(); rect = ((Component)this).GetComponent<RectTransform>().rect; val2.sizeDelta = new Vector2(num2, ((Rect)(ref rect)).height); val2.anchorMin = new Vector2(0.5f, 0f); val2.anchorMax = new Vector2(0.5f, 1f); val2.pivot = new Vector2(0.5f, 0.5f); float num3 = (num2 + spacing) * (float)i; rect = ((Component)this).GetComponent<RectTransform>().rect; val2.anchoredPosition = new Vector2(num3 - ((Rect)(ref rect)).width / 2f + num2 / 2f, 0f); Image val3 = val.AddComponent<Image>(); val3.sprite = Sprite.Create(Texture2D.whiteTexture, new Rect(0f, 0f, 1f, 1f), new Vector2(0.5f, 0.5f)); if (enableGlowEffect) { ((Graphic)val3).material = new Material(Shader.Find("UI/Default")); ((Graphic)val3).material.EnableKeyword("_EMISSION"); ((Graphic)val3).material.SetColor("_EmissionColor", Color.white); } if (enableOutlineEffect) { Outline val4 = val.AddComponent<Outline>(); ((Shadow)val4).effectColor = Color.black; } bars[i] = val2; } } private void Update() { //IL_004b: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) if (_initialUpdateDone && !audioSource.isPlaying) { return; } float[] array = new float[128]; audioSource.GetSpectrumData(array, 0, (FFTWindow)0); Transform parent = ((Component)this).transform.parent; Rect rect = ((Component)parent).GetComponent<RectTransform>().rect; float num = ((Rect)(ref rect)).height / parent.localScale.y; for (int i = 0; i < bars.Length; i++) { float num2 = 1f; if (i >= midStartIndex && i <= midEndIndex) { num2 = midScalingFactor; } else if (i > midEndIndex) { num2 = highScalingFactor; } if (i >= 0 && i <= 3) { num2 = 0.25f; } float num3 = array[i] * num2 * baseScalingFactor + minHeight; num3 = Mathf.Clamp(num3, minHeight, Mathf.Min(maxHeight, num)); float num4 = Mathf.Lerp(((Transform)bars[i]).localScale.y, num3, Time.deltaTime * (float)smoothing); ((Transform)bars[i]).localScale = new Vector3(1f, num4, 1f); ((Graphic)((Component)bars[i]).GetComponent<Image>()).color = colorGradient.Evaluate(array[i] * num2 * 25f); } _initialUpdateDone = true; } } public class LoadingCircle : MonoBehaviour { private RectTransform rectComponent; private readonly float rotateSpeed = 200f; private void Start() { rectComponent = ((Component)this).GetComponent<RectTransform>(); } private void Update() { if (((Behaviour)this).isActiveAndEnabled) { ((Transform)rectComponent).Rotate(0f, 0f, rotateSpeed * Time.deltaTime); } } } public class ScrollingText : MonoBehaviour { [CompilerGenerated] private sealed class <ScrollText>d__6 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public ScrollingText <>4__this; private int <direction>5__1; private string <scrollText>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ScrollText>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <scrollText>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <direction>5__1 = 1; break; case 1: <