From 20a3234371a45ab9122580b69a68ec14f8a275bf Mon Sep 17 00:00:00 2001 From: Nikita Vilunov Date: Sat, 9 Mar 2024 19:48:17 +0100 Subject: [PATCH] initial version 13.37.1 --- .gitignore | 7 ++ MuzikaGromche.sln | 16 ++++ MuzikaGromche/MuzikaGromche.csproj | 25 ++++++ MuzikaGromche/NuGet.Config | 6 ++ MuzikaGromche/Plugin.cs | 140 +++++++++++++++++++++++++++++ 5 files changed, 194 insertions(+) create mode 100644 .gitignore create mode 100644 MuzikaGromche.sln create mode 100644 MuzikaGromche/MuzikaGromche.csproj create mode 100644 MuzikaGromche/NuGet.Config create mode 100644 MuzikaGromche/Plugin.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..422f944 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ +.idea/ +*.dll diff --git a/MuzikaGromche.sln b/MuzikaGromche.sln new file mode 100644 index 0000000..ddd0b74 --- /dev/null +++ b/MuzikaGromche.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MuzikaGromche", "MuzikaGromche\MuzikaGromche.csproj", "{72633315-F098-4E09-B32B-9224376CD9A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {72633315-F098-4E09-B32B-9224376CD9A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72633315-F098-4E09-B32B-9224376CD9A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72633315-F098-4E09-B32B-9224376CD9A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72633315-F098-4E09-B32B-9224376CD9A5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/MuzikaGromche/MuzikaGromche.csproj b/MuzikaGromche/MuzikaGromche.csproj new file mode 100644 index 0000000..65641fc --- /dev/null +++ b/MuzikaGromche/MuzikaGromche.csproj @@ -0,0 +1,25 @@ + + + + netstandard2.1 + MuzikaGromche + Opa che tut u nas + 1.0.0 + true + latest + + + + + + + + + + + + + + + + diff --git a/MuzikaGromche/NuGet.Config b/MuzikaGromche/NuGet.Config new file mode 100644 index 0000000..fffd918 --- /dev/null +++ b/MuzikaGromche/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + diff --git a/MuzikaGromche/Plugin.cs b/MuzikaGromche/Plugin.cs new file mode 100644 index 0000000..172e3a3 --- /dev/null +++ b/MuzikaGromche/Plugin.cs @@ -0,0 +1,140 @@ +using System.Collections; +using System.Collections.Generic; +using BepInEx; +using HarmonyLib; +using UnityEngine; +using UnityEngine.Networking; + +namespace MuzikaGromche +{ + [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] + public class Plugin : BaseUnityPlugin + { + public static AudioClip AudioStart; + public static AudioClip AudioLoop; + + public static Coroutine JesterLightSwitching; + + private void Awake() + { + string text = Info.Location.TrimEnd((PluginInfo.PLUGIN_NAME + ".dll").ToCharArray()); + UnityWebRequest audioClipStart = UnityWebRequestMultimedia.GetAudioClip("File://" + text + "MuzikaGromcheStart.mp3", AudioType.MPEG); + UnityWebRequest audioClipLoop = UnityWebRequestMultimedia.GetAudioClip("File://" + text + "MuzikaGromcheLoop.mp3", AudioType.MPEG); + audioClipStart.SendWebRequest(); + audioClipLoop.SendWebRequest(); + while (!audioClipStart.isDone || !audioClipLoop.isDone) { } + if (audioClipStart.result == UnityWebRequest.Result.Success && audioClipLoop.result == UnityWebRequest.Result.Success) { + AudioStart = DownloadHandlerAudioClip.GetContent(audioClipStart); + AudioLoop = DownloadHandlerAudioClip.GetContent(audioClipLoop); + new Harmony(PluginInfo.PLUGIN_NAME).PatchAll(typeof(JesterPatch)); + Logger.LogInfo("Muzika gromche, glaza zakryvaj! " + PluginInfo.PLUGIN_VERSION); + } else { + Logger.LogError("Could not load audio file"); + } + } + } + + [HarmonyPatch(typeof(JesterAI))] + internal class JesterPatch + { + [HarmonyPatch("Start")] + [HarmonyPostfix] + public static void AudioPatch(JesterAI __instance) + { + __instance.popGoesTheWeaselTheme = Plugin.AudioStart; + __instance.screamingSFX = Plugin.AudioLoop; + } + + [HarmonyPatch("SetJesterInitialValues")] + [HarmonyPostfix] + public static void ForceTime(JesterAI __instance) + { + __instance.popUpTimer = 46.3f; + } + + [HarmonyPatch("Update")] + [HarmonyPrefix] + public static void DoNotStopTheMusicPrefix(JesterAI __instance, out State __state) + { + __state = new State(); + __state.prevStateindex = __instance.previousState; + if (__instance.currentBehaviourStateIndex is 1 or 2) { + __state.farAudio = __instance.farAudio; + __instance.farAudio = __instance.creatureSFX; + } + } + + static List colors = [Color.magenta, Color.cyan, Color.green, Color.yellow]; + + public static IEnumerator rotateColors() + { + Debug.Log("Starting color rotation"); + var i = 0; + while (true) + { + var color = colors[i]; + Debug.Log("Chose color " + color); + foreach (var light in RoundManager.Instance.allPoweredLights) + { + light.color = color; + } + + i += 1; + if (i >= colors.Count) i = 0; + yield return new WaitForSeconds(0.5f); + } + } + + [HarmonyPatch("Update")] + [HarmonyPostfix] + public static void DoNotStopTheMusic(JesterAI __instance, State __state) + { + if (__state.farAudio != null) + { + __instance.farAudio = __state.farAudio; + } + + if (__instance.currentBehaviourStateIndex is 1 && !__instance.farAudio.isPlaying) + { + __instance.farAudio.PlayOneShot(Plugin.AudioStart); + } + + if (__instance.currentBehaviourStateIndex is 2 && __state.prevStateindex != 2) + { + __instance.creatureVoice.Stop(); + + if (Plugin.JesterLightSwitching != null) { + __instance.StopCoroutine(Plugin.JesterLightSwitching); + Plugin.JesterLightSwitching = null; + } + + + Plugin.JesterLightSwitching = __instance.StartCoroutine(rotateColors()); + } + + if (__instance.currentBehaviourStateIndex != 2 && __state.prevStateindex == 2) + { + if (Plugin.JesterLightSwitching != null) { + __instance.StopCoroutine(Plugin.JesterLightSwitching); + Plugin.JesterLightSwitching = null; + } + foreach (var light in RoundManager.Instance.allPoweredLights) + { + light.color = Color.white; + } + } + + if (__instance.currentBehaviourStateIndex is 2 && !__instance.creatureVoice.isPlaying && !__instance.farAudio.isPlaying) + { + __instance.creatureVoice.clip = Plugin.AudioLoop; + __instance.creatureVoice.Play(); + } + } + } + + internal class State + { + public AudioSource farAudio; + public int prevStateindex; + } +}