Decompiled source of MusicSwap v1.1.1

MusicSwap.dll

Decompiled 4 days ago
using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: AssemblyVersion("0.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 MusicSwap
{
	[BepInPlugin("frank.valheim.musicswap", "Music Swap", "1.1.0")]
	public class MusicSwapPlugin : BaseUnityPlugin
	{
		public const string PluginGuid = "frank.valheim.musicswap";

		public const string PluginName = "Music Swap";

		public const string PluginVersion = "1.1.0";

		internal static ConfigEntry<string> TargetTracks;

		internal static ConfigEntry<string> AudioFile;

		internal static ConfigEntry<bool> LogTrackNames;

		internal static AudioClip CustomClip;

		internal static ManualLogSource Log;

		private void Awake()
		{
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			Log = ((BaseUnityPlugin)this).Logger;
			TargetTracks = ((BaseUnityPlugin)this).Config.Bind<string>("General", "TargetTracks", "meadows", "Nombres de las pistas del juego que se sustituyen (campo m_name de MusicMan), separados por comas. Ejemplo: meadows,morning. Activa LogTrackNames para ver todos los nombres en el log.");
			AudioFile = ((BaseUnityPlugin)this).Config.Bind<string>("General", "AudioFile", "honeywood.mp3", "Archivo de audio dentro de la carpeta 'music' (junto a la DLL). Admite .mp3, .ogg y .wav.");
			LogTrackNames = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "LogTrackNames", true, "Escribe en el log los nombres de todas las pistas de MusicMan.");
			new Harmony("frank.valheim.musicswap").PatchAll();
			((MonoBehaviour)this).StartCoroutine(LoadClip());
		}

		private IEnumerator LoadClip()
		{
			string path = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "music");
			string path2 = Path.Combine(path, AudioFile.Value);
			if (!File.Exists(path2))
			{
				Log.LogError((object)("No se encuentra el archivo de audio: " + path2));
				yield break;
			}
			AudioType val = (AudioType)0;
			switch (Path.GetExtension(path2).ToLowerInvariant())
			{
			case ".mp3":
				val = (AudioType)13;
				break;
			case ".ogg":
				val = (AudioType)14;
				break;
			case ".wav":
				val = (AudioType)20;
				break;
			}
			string absoluteUri = new Uri(path2).AbsoluteUri;
			UnityWebRequest req = UnityWebRequestMultimedia.GetAudioClip(absoluteUri, val);
			try
			{
				yield return req.SendWebRequest();
				if ((int)req.result != 1)
				{
					Log.LogError((object)("Error cargando el audio: " + req.error));
					yield break;
				}
				CustomClip = DownloadHandlerAudioClip.GetContent(req);
				((Object)CustomClip).name = Path.GetFileNameWithoutExtension(path2);
				Log.LogInfo((object)("Audio cargado: " + ((Object)CustomClip).name + " (" + CustomClip.length.ToString("F1") + " s)"));
			}
			finally
			{
				((IDisposable)req)?.Dispose();
			}
			Apply();
		}

		internal static void Apply()
		{
			if ((Object)(object)CustomClip == (Object)null || (Object)(object)MusicMan.instance == (Object)null)
			{
				return;
			}
			if (LogTrackNames.Value)
			{
				foreach (NamedMusic item in MusicMan.instance.m_music)
				{
					Log.LogInfo((object)("Pista en MusicMan: " + item.m_name));
				}
			}
			string[] array = TargetTracks.Value.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries);
			for (int i = 0; i < array.Length; i++)
			{
				string text = array[i].Trim();
				bool flag = false;
				foreach (NamedMusic item2 in MusicMan.instance.m_music)
				{
					if (string.Equals(item2.m_name, text, StringComparison.OrdinalIgnoreCase))
					{
						item2.m_clips = (AudioClip[])(object)new AudioClip[1] { CustomClip };
						flag = true;
						Log.LogInfo((object)("Pista '" + item2.m_name + "' sustituida por '" + ((Object)CustomClip).name + "'"));
					}
				}
				if (!flag)
				{
					Log.LogWarning((object)("No existe ninguna pista llamada '" + text + "'. Revisa los nombres del log."));
				}
			}
		}
	}
	[HarmonyPatch(typeof(MusicMan), "Awake")]
	internal static class MusicMan_Awake_Patch
	{
		private static void Postfix()
		{
			MusicSwapPlugin.Apply();
		}
	}
}