using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Configuration;
using GlobalEnums;
using HarmonyLib;
using HutongGames.PlayMaker.Actions;
using Microsoft.CodeAnalysis;
using Silksong.FsmUtil;
using UnityEngine;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Voicelines")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: AssemblyInformationalVersion("1.2.0+e76383dfe444495319a2691a8820620fd151f8f8")]
[assembly: AssemblyProduct("Voicelines")]
[assembly: AssemblyTitle("Voicelines")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
internal sealed class ConfigurationManagerAttributes
{
public delegate void CustomHotkeyDrawerFunc(ConfigEntryBase setting, ref bool isCurrentlyAcceptingInput);
public bool? ShowRangeAsPercent;
public Action<ConfigEntryBase> CustomDrawer;
public CustomHotkeyDrawerFunc CustomHotkeyDrawer;
public bool? Browsable;
public string Category;
public object DefaultValue;
public bool? HideDefaultButton;
public bool? HideSettingName;
public string Description;
public string DispName;
public int? Order;
public bool? ReadOnly;
public bool? IsAdvanced;
public Func<object, string> ObjToStr;
public Func<string, object> StrToObj;
}
namespace Voicelines
{
public class AcceptableCSV<T> : AcceptableValueList<T> where T : IEquatable<T>
{
public AcceptableCSV(params T[] acceptableValues)
: base(acceptableValues)
{
}
public override bool IsValid(object value)
{
if (value == null)
{
return false;
}
string text = value.ToString();
if (string.IsNullOrWhiteSpace(text))
{
return false;
}
if ((from s in text.Split(',')
select s.Trim() into s
where !string.IsNullOrEmpty(s)
select s).ToArray().Length == 0)
{
return false;
}
return true;
}
public override object Clamp(object value)
{
if (((AcceptableValueBase)this).IsValid(value))
{
return value;
}
return "None";
}
}
public static class MultiselectDrawer
{
private static readonly Dictionary<string, Dictionary<string, bool>> multiSelectionStates = new Dictionary<string, Dictionary<string, bool>>();
private static readonly Dictionary<string, Vector2> scrollPositions = new Dictionary<string, Vector2>();
private static string? currentlyExpanded = null;
public static void Draw(ConfigEntryBase entry, string[] soundOptions)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
string key = entry.Definition.Key;
if (!multiSelectionStates.ContainsKey(key))
{
multiSelectionStates[key] = new Dictionary<string, bool>();
scrollPositions[key] = Vector2.zero;
string[] array = soundOptions;
foreach (string key2 in array)
{
multiSelectionStates[key][key2] = false;
}
}
string[] array2 = (from s in entry.BoxedValue.ToString().Split(',')
select s.Trim() into s
where !string.IsNullOrEmpty(s)
select s).ToArray();
GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
string text = string.Join(", ", array2);
GUIStyle val = ((currentlyExpanded == key) ? GUI.skin.textArea : GUI.skin.button);
if (GUILayout.Button(text, val, (GUILayoutOption[])(object)new GUILayoutOption[2]
{
GUILayout.MaxWidth(300f),
GUILayout.ExpandWidth(true)
}))
{
if (currentlyExpanded == key)
{
currentlyExpanded = null;
}
else
{
currentlyExpanded = key;
string[] array = soundOptions;
foreach (string text2 in array)
{
multiSelectionStates[key][text2] = array2.Contains(text2);
}
}
}
if (currentlyExpanded == key)
{
_ = soundOptions.Length;
float num = 20f;
float num2 = (float)soundOptions.Length * num;
float num3 = 150f;
scrollPositions[key] = GUILayout.BeginScrollView(scrollPositions[key], false, num2 > num3, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUI.skin.box, (GUILayoutOption[])(object)new GUILayoutOption[3]
{
GUILayout.Height(num3),
GUILayout.MaxWidth(300f),
GUILayout.ExpandWidth(true)
});
string[] array = soundOptions;
foreach (string text3 in array)
{
bool flag = multiSelectionStates[key][text3];
bool flag2 = GUILayout.Toggle(flag, text3, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) });
if (flag2 == flag)
{
continue;
}
multiSelectionStates[key][text3] = flag2;
if (flag2 && text3 == "None")
{
foreach (string item in soundOptions.Where((string s) => s != "None"))
{
multiSelectionStates[key][item] = false;
}
}
else if (flag2 && text3 != "None")
{
multiSelectionStates[key]["None"] = false;
}
string[] array3 = (from kvp in multiSelectionStates[key]
where kvp.Value
select kvp.Key).ToArray();
string boxedValue = ((array3.Length == 0) ? "None" : string.Join(", ", array3));
entry.BoxedValue = boxedValue;
}
GUILayout.EndScrollView();
if (GUILayout.Button("Clear All", (GUILayoutOption[])(object)new GUILayoutOption[2]
{
GUILayout.MaxWidth(300f),
GUILayout.ExpandWidth(true)
}))
{
array = soundOptions;
foreach (string key3 in array)
{
multiSelectionStates[key][key3] = false;
}
multiSelectionStates[key]["None"] = true;
entry.BoxedValue = "None";
}
}
GUILayout.EndVertical();
}
}
[BepInPlugin("bergbok.voicelines", "Voicelines", "1.2.0")]
[BepInProcess("Hollow Knight Silksong")]
public class Voicelines : BaseUnityPlugin
{
private class BlockEntry
{
public string ID;
public string Pattern;
public float ExpiryTime;
}
[HarmonyPatch(typeof(HeroController), "Attack")]
private static class HeroController_Attack_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance, ref AttackDirection attackDir)
{
PlayAudio("Attack", AttackSound.Value, "^a");
}
}
[HarmonyPatch(typeof(HeroController), "Die")]
private static class HeroController_Die_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance, ref bool nonLethal, ref bool frostDeath)
{
PlayAudio("Death", DeathSound.Value, "^hero_damage");
}
}
[HarmonyPatch(typeof(HeroController), "DoDoubleJump")]
private static class HeroController_DoDoubleJump_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance)
{
PlayAudio("Faydown Cloak", FaydownCloakSound.Value, "^g");
}
}
[HarmonyPatch(typeof(HeroController), "HeroDamaged")]
private static class HeroController_HeroDamaged_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance)
{
PlayAudio("Hurt", HurtSound.Value, "^hero_damage");
}
}
[HarmonyPatch(typeof(HeroController), "HeroDash")]
private static class HeroController_HeroDash_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance, ref bool startAlreadyDashing)
{
PlayAudio("Swift Step", SwiftStepSound.Value, "^g");
}
}
[HarmonyPatch(typeof(HeroController), "OnHeroJumped")]
private static class HeroController_OnHeroJumped_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance)
{
PlayAudio("Jump", JumpSound.Value, "^g");
}
}
[HarmonyPatch(typeof(HeroController), "Start")]
private static class HeroController_Start_Patch
{
[HarmonyPostfix]
private static void Postfix(HeroController __instance)
{
Instance.playerAudioSource = ((Component)__instance).GetComponent<AudioSource>();
if ((Object)(object)Instance.playerAudioSource == (Object)null)
{
((BaseUnityPlugin)Instance).Logger.LogError((object)"Could not find player AudioSource, audio will not play.");
}
}
}
[HarmonyPatch(typeof(HeroController), "UseLavaBell")]
private static class HeroController_UseLavaBell_Patch
{
[HarmonyPrefix]
private static void Prefix(HeroController __instance)
{
PlayAudio("Lava Bell Hit", LavaBellHitSound.Value);
}
}
[HarmonyPatch(typeof(PlayMakerFSM), "SendEvent")]
private static class PlayMakerFSM_SendEvent_Patch
{
[HarmonyPrefix]
private static void Prefix(PlayMakerFSM __instance, ref string eventName)
{
switch (__instance.FsmName)
{
case "Control":
if (eventName == "HIT")
{
PlayAudio("Warding Bell Hit", WardingBellHitSound.Value, "hornet_warding_bell_bind_break");
}
break;
case "Harpoon Dash":
if (eventName == "DO MOVE")
{
PlayAudio("Clawline", ClawlineSound.Value, "^a|^g");
}
break;
case "Silk Specials":
switch (eventName)
{
case "NEEDLE THROW":
PlayAudio("Silkspear", SilkspearSound.Value, "^Hornet_attack_large");
break;
case "PARRY":
PlayAudio("Cross Stitch", CrossStitchSound.Value, "^a");
break;
case "SILK CHARGE":
PlayAudio("Sharpdart", SharpdartSound.Value, "^Hornet_attack_large");
break;
case "SILK BOMB":
PlayAudio("Rune Rage", RuneRageSound.Value, "^Hornet_attack_large");
break;
case "BOSS NEEDLE":
PlayAudio("Pale Nails", PaleNailsSound.Value);
break;
case "THREAD SPHERE":
PlayAudio("Thread Storm", ThreadStormSound.Value, "^Hornet_attack_large");
break;
}
break;
case "Superjump":
if (eventName == "DO MOVE")
{
PlayAudio("Silk Soar", SilkSoarSound.Value, "hornet_superjump_pt_1_into_position");
}
break;
case "Umbrella Float":
if (eventName == "FLOAT" && __instance.ActiveStateName != "Cooldown")
{
PlayAudio("Drifter's Cloak", DrifersCloakSound.Value, "hornet_umbrella_open");
}
break;
}
}
}
[HarmonyPatch(typeof(PlayMakerFSM), "Start")]
private static class PlayMakerFSM_Start_Patch
{
[HarmonyPostfix]
public static void Postfix(PlayMakerFSM __instance)
{
if (__instance != null && ((Object)__instance).name == "Hero_Hornet(Clone)" && __instance.FsmName == "Silk Specials")
{
RunFSM action = FsmUtil.GetAction<RunFSM>(__instance.Fsm, "Needolin Sub", 2);
FsmUtil.AddLambdaMethod(((action != null) ? action.fsmTemplateControl.RunFsm : null).GetState("Start Needolin"), (Action<Action>)delegate
{
PlayAudio("Needolin", NeedolinSound.Value, "^g");
});
}
}
}
[HarmonyPatch(typeof(RandomAudioClipTable), "CanPlay")]
private static class RandomAudioClipTable_CanPlay_Patch
{
[HarmonyPrefix]
private static void Prefix(RandomAudioClipTable __instance)
{
switch (((Object)__instance).name)
{
case "Attack Heavy Hornet Voice":
PlayAudio("Dash Attack", DashAttackSound.Value, "^a");
break;
case "Attack Needle Art Hornet Voice":
PlayAudio("Nail Art", NailArtSound.Value, "^a");
break;
case "Bind Hornet Voice":
PlayAudio("Bind", BindSound.Value, "^bind|^hornet_bind");
break;
case "Hornet_poshanka":
PlayAudio("Ring Taunt", RingTauntSound.Value, "^Hornet_poshanka");
break;
case "Taunt Hornet Voice":
PlayAudio("Taunt", TauntSound.Value, "^t");
break;
}
}
}
[HarmonyPatch(typeof(AudioSource), "PlayOneShot", new Type[]
{
typeof(AudioClip),
typeof(float)
})]
private static class AudioSource_PlayOneShot_Patch
{
private static bool Prefix(AudioSource __instance, AudioClip clip)
{
AudioClip clip2 = clip;
string name = ((Object)__instance).GetName();
if (!(name == "Audio Player Actor(Clone)") && !(name == "Audio Player Actor 2D(Clone)") && !name.EndsWith("Voice"))
{
return true;
}
if (!PluginEnabled.Value || !ReplaceGameSounds.Value || ClipsToBlock.Count == 0)
{
return true;
}
ClipsToBlock.RemoveAll((BlockEntry entry) => Time.time > entry.ExpiryTime);
List<BlockEntry> list = ClipsToBlock.Where((BlockEntry entry) => Regex.IsMatch(((Object)clip2).name, entry.Pattern)).ToList();
if (list.Any())
{
((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Suppressing clip: " + ((Object)clip2).name + " (matched patterns: " + string.Join(", ", list.Select((BlockEntry e) => e.Pattern)) + ")"));
foreach (BlockEntry item in list)
{
ClipsToBlock.Remove(item);
}
return false;
}
return true;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass38_0
{
public string blockID;
internal bool <CleanupBlockEntry>b__0(BlockEntry e)
{
return e.ID == blockID;
}
}
[CompilerGenerated]
private sealed class <CleanupBlockEntry>d__38 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string blockID;
public float delay;
private <>c__DisplayClass38_0 <>8__1;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <CleanupBlockEntry>d__38(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>8__1 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>8__1 = new <>c__DisplayClass38_0();
<>8__1.blockID = blockID;
<>2__current = (object)new WaitForSeconds(delay);
<>1__state = 1;
return true;
case 1:
{
<>1__state = -1;
BlockEntry blockEntry = ClipsToBlock.FirstOrDefault((BlockEntry e) => e.ID == <>8__1.blockID);
if (blockEntry != null)
{
ClipsToBlock.Remove(blockEntry);
}
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 <LoadAudioClip>d__36 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string filePath;
public Voicelines <>4__this;
public string clipName;
private UnityWebRequest <www>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <LoadAudioClip>d__36(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<www>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Invalid comparison between Unknown and I4
int num = <>1__state;
Voicelines voicelines = <>4__this;
switch (num)
{
default:
return false;
case 0:
{
<>1__state = -1;
string text = "file:///" + filePath.Replace("\\", "/").Replace(" ", "%20");
((BaseUnityPlugin)voicelines).Logger.LogInfo((object)("Loading audio: " + clipName + " from " + text));
<www>5__2 = UnityWebRequestMultimedia.GetAudioClip(text, (AudioType)0);
<>2__current = <www>5__2.SendWebRequest();
<>1__state = 1;
return true;
}
case 1:
<>1__state = -1;
if ((int)<www>5__2.result == 1)
{
AudioClip content = DownloadHandlerAudioClip.GetContent(<www>5__2);
((Object)content).name = clipName;
voicelines.audioClips.Add(clipName, content);
((BaseUnityPlugin)voicelines).Logger.LogInfo((object)("Successfully loaded audio clip: " + clipName));
}
else
{
((BaseUnityPlugin)voicelines).Logger.LogError((object)("Failed to load audio clip " + clipName + ": " + <www>5__2.error));
}
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 static Voicelines Instance;
internal static ConfigEntry<bool> PluginEnabled;
internal static ConfigEntry<bool> ReplaceGameSounds;
internal static ConfigEntry<bool> UseGameVolume;
internal static ConfigEntry<float> AudioVolume;
internal static ConfigEntry<float> TriggerChance;
internal static ConfigEntry<string> AttackSound;
internal static ConfigEntry<string> BindSound;
internal static ConfigEntry<string> WardingBellHitSound;
internal static ConfigEntry<string> CrossStitchSound;
internal static ConfigEntry<string> DashAttackSound;
internal static ConfigEntry<string> DeathSound;
internal static ConfigEntry<string> FaydownCloakSound;
internal static ConfigEntry<string> SwiftStepSound;
internal static ConfigEntry<string> DrifersCloakSound;
internal static ConfigEntry<string> HurtSound;
internal static ConfigEntry<string> JumpSound;
internal static ConfigEntry<string> ClawlineSound;
internal static ConfigEntry<string> LavaBellHitSound;
internal static ConfigEntry<string> NailArtSound;
internal static ConfigEntry<string> NeedolinSound;
internal static ConfigEntry<string> PaleNailsSound;
internal static ConfigEntry<string> RingTauntSound;
internal static ConfigEntry<string> RuneRageSound;
internal static ConfigEntry<string> SharpdartSound;
internal static ConfigEntry<string> SilkspearSound;
internal static ConfigEntry<string> SilkSoarSound;
internal static ConfigEntry<string> TauntSound;
internal static ConfigEntry<string> ThreadStormSound;
private AudioSource playerAudioSource;
private readonly List<string> audioList = new List<string>();
private readonly Dictionary<string, AudioClip> audioClips = new Dictionary<string, AudioClip>();
private static readonly List<BlockEntry> ClipsToBlock = new List<BlockEntry>();
private void Awake()
{
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Expected O, but got Unknown
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Expected O, but got Unknown
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Expected O, but got Unknown
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Expected O, but got Unknown
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Expected O, but got Unknown
//IL_0201: Unknown result type (might be due to invalid IL or missing references)
//IL_020b: Expected O, but got Unknown
//IL_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_0255: Expected O, but got Unknown
//IL_0295: Unknown result type (might be due to invalid IL or missing references)
//IL_029f: Expected O, but got Unknown
//IL_02df: Unknown result type (might be due to invalid IL or missing references)
//IL_02e9: Expected O, but got Unknown
//IL_0329: Unknown result type (might be due to invalid IL or missing references)
//IL_0333: Expected O, but got Unknown
//IL_0373: Unknown result type (might be due to invalid IL or missing references)
//IL_037d: Expected O, but got Unknown
//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
//IL_03c7: Expected O, but got Unknown
//IL_0407: Unknown result type (might be due to invalid IL or missing references)
//IL_0411: Expected O, but got Unknown
//IL_0451: Unknown result type (might be due to invalid IL or missing references)
//IL_045b: Expected O, but got Unknown
//IL_049b: Unknown result type (might be due to invalid IL or missing references)
//IL_04a5: Expected O, but got Unknown
//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
//IL_04ef: Expected O, but got Unknown
//IL_052f: Unknown result type (might be due to invalid IL or missing references)
//IL_0539: Expected O, but got Unknown
//IL_0579: Unknown result type (might be due to invalid IL or missing references)
//IL_0583: Expected O, but got Unknown
//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
//IL_05cd: Expected O, but got Unknown
//IL_060d: Unknown result type (might be due to invalid IL or missing references)
//IL_0617: Expected O, but got Unknown
//IL_0657: Unknown result type (might be due to invalid IL or missing references)
//IL_0661: Expected O, but got Unknown
//IL_06a1: Unknown result type (might be due to invalid IL or missing references)
//IL_06ab: Expected O, but got Unknown
//IL_06eb: Unknown result type (might be due to invalid IL or missing references)
//IL_06f5: Expected O, but got Unknown
//IL_0735: Unknown result type (might be due to invalid IL or missing references)
//IL_073f: Expected O, but got Unknown
//IL_077f: Unknown result type (might be due to invalid IL or missing references)
//IL_0789: Expected O, but got Unknown
//IL_07c9: Unknown result type (might be due to invalid IL or missing references)
//IL_07d3: Expected O, but got Unknown
//IL_0813: Unknown result type (might be due to invalid IL or missing references)
//IL_081d: Expected O, but got Unknown
//IL_085d: Unknown result type (might be due to invalid IL or missing references)
//IL_0867: Expected O, but got Unknown
//IL_0871: Unknown result type (might be due to invalid IL or missing references)
Instance = this;
LoadAudioClips();
string[] soundList = new string[2] { "None", "Random" }.Concat(audioList).ToArray();
AcceptableCSV<string> acceptableCSV = new AcceptableCSV<string>(soundList);
PluginEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, new ConfigDescription("", (AcceptableValueBase)null, new object[1]
{
new ConfigurationManagerAttributes
{
Order = 5
}
}));
ReplaceGameSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Replace Game Sounds", true, new ConfigDescription("", (AcceptableValueBase)null, new object[1]
{
new ConfigurationManagerAttributes
{
Order = 4
}
}));
UseGameVolume = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Use Game Volume", true, new ConfigDescription("", (AcceptableValueBase)null, new object[1]
{
new ConfigurationManagerAttributes
{
Order = 3
}
}));
AudioVolume = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Custom Volume", 0.125f, new ConfigDescription("", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[1]
{
new ConfigurationManagerAttributes
{
Order = 2,
ShowRangeAsPercent = true
}
}));
TriggerChance = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Trigger Chance", 1f, new ConfigDescription("", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[1]
{
new ConfigurationManagerAttributes
{
Order = 1,
ShowRangeAsPercent = true
}
}));
AttackSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Attack", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
BindSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Bind", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
ClawlineSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Clawline", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
CrossStitchSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Cross Stitch", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
DashAttackSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Dash Attack", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
DeathSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Death", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
DrifersCloakSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Drifters Cloak", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
FaydownCloakSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Faydown Cloak", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
HurtSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Hurt", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
JumpSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Jump", "Jump", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
LavaBellHitSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Lava Bell Hit", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
NailArtSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Nail Art", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
NeedolinSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Needolin", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
PaleNailsSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Pale Nails", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
RingTauntSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Ring Taunt", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
RuneRageSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Rune Rage", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
SharpdartSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Sharpdart", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
SilkSoarSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Silk Soar", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
SilkspearSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Silkspear", "ADEENO", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
SwiftStepSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Swift Step", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
TauntSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Taunt", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
ThreadStormSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Thread Storm", "SHAW", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
WardingBellHitSound = ((BaseUnityPlugin)this).Config.Bind<string>("Sound Bindings", "Warding Bell Hit", "None", new ConfigDescription("", (AcceptableValueBase)(object)acceptableCSV, new object[1]
{
new ConfigurationManagerAttributes
{
CustomDrawer = delegate(ConfigEntryBase entry)
{
MultiselectDrawer.Draw(entry, soundList);
}
}
}));
new Harmony("bergbok.voicelines").PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin loaded and initialized.");
}
private void LoadAudioClips()
{
string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "SFX");
if (!Directory.Exists(text))
{
((BaseUnityPlugin)this).Logger.LogError((object)("SFX directory not found at: " + text));
return;
}
string[] files = Directory.GetFiles(text, "*");
foreach (string text2 in files)
{
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text2);
((MonoBehaviour)this).StartCoroutine(LoadAudioClip(text2, fileNameWithoutExtension));
audioList.Add(fileNameWithoutExtension);
}
}
[IteratorStateMachine(typeof(<LoadAudioClip>d__36))]
private IEnumerator LoadAudioClip(string filePath, string clipName)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <LoadAudioClip>d__36(0)
{
<>4__this = this,
filePath = filePath,
clipName = clipName
};
}
public static void PlayAudio(string action, string clipName, string blockPattern = "")
{
if (!PluginEnabled.Value || clipName == "None" || (Object)(object)Instance == (Object)null)
{
return;
}
if (Random.value > TriggerChance.Value)
{
((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Skipping sound for action: " + action + " due to trigger chance"));
return;
}
string[] array = (from s in clipName.Split(',')
select s.Trim() into s
where !string.IsNullOrEmpty(s)
select s).ToArray();
if (array.Length == 0)
{
return;
}
string text;
if (!array.Contains("Random"))
{
text = ((array.Length != 1) ? array[Random.Range(0, array.Length)] : array[0]);
}
else
{
string[] array2 = Instance.audioList.Where((string sound) => sound != "None").ToArray();
if (array2.Length == 0)
{
((BaseUnityPlugin)Instance).Logger.LogError((object)"No sounds available for random selection");
return;
}
text = array2[Random.Range(0, array2.Length)];
}
((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Playing sound: " + text + " for action: " + action));
if (Instance.audioClips.TryGetValue(text, out AudioClip value))
{
if (!string.IsNullOrEmpty(blockPattern) && ReplaceGameSounds.Value)
{
string text2 = Guid.NewGuid().ToString();
BlockEntry item = new BlockEntry
{
ID = text2,
Pattern = blockPattern,
ExpiryTime = Time.time + value.length + 0.2f
};
ClipsToBlock.Add(item);
((MonoBehaviour)Instance).StartCoroutine(CleanupBlockEntry(text2, value.length + 0.2f));
}
if ((Object)(object)Instance.playerAudioSource != (Object)null)
{
if (UseGameVolume.Value)
{
Instance.playerAudioSource.PlayOneShot(value);
}
else
{
Instance.playerAudioSource.PlayOneShot(value, AudioVolume.Value);
}
}
}
else
{
((BaseUnityPlugin)Instance).Logger.LogError((object)("Could not play " + text + " - clip not available"));
}
}
[IteratorStateMachine(typeof(<CleanupBlockEntry>d__38))]
private static IEnumerator CleanupBlockEntry(string blockID, float delay)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <CleanupBlockEntry>d__38(0)
{
blockID = blockID,
delay = delay
};
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "bergbok.voicelines";
public const string PLUGIN_NAME = "Voicelines";
public const string PLUGIN_VERSION = "1.2.0";
}
}