Decompiled source of OdinOnDemand v1.0.11
OdinOnDemand.dll
Decompiled 2 weeks 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: <