From df0945daf97b80e3473b394f8040cc2979742430 Mon Sep 17 00:00:00 2001 From: SamSWAT Date: Sun, 21 Aug 2022 15:05:26 +0300 Subject: [PATCH] add SixthSense --- Projects/SamSWAT.SixthSense/Plugin.cs | 87 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 36 ++++++++ .../SamSWAT.SixthSense.csproj | 68 ++++++++++++++ .../SamSWAT.SixthSense/SamSWAT.SixthSense.sln | 25 +++++ .../UnityEngine.UnityWebRequestModule.dll | Bin 0 -> 43520 bytes 5 files changed, 216 insertions(+) create mode 100644 Projects/SamSWAT.SixthSense/Plugin.cs create mode 100644 Projects/SamSWAT.SixthSense/Properties/AssemblyInfo.cs create mode 100644 Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.csproj create mode 100644 Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.sln create mode 100644 References/UnityEngine.UnityWebRequestModule.dll diff --git a/Projects/SamSWAT.SixthSense/Plugin.cs b/Projects/SamSWAT.SixthSense/Plugin.cs new file mode 100644 index 0000000..e68aeaf --- /dev/null +++ b/Projects/SamSWAT.SixthSense/Plugin.cs @@ -0,0 +1,87 @@ +using Aki.Reflection.Patching; +using BepInEx; +using BepInEx.Configuration; +using Comfort.Common; +using EFT; +using EFT.UI; +using System.Reflection; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Networking; + +namespace SamSWAT.SixthSense +{ + [BepInPlugin("com.samswat.sixthsense", "SamSWAT.SixthSense", "1.0.0")] + public class Plugin : BaseUnityPlugin + { + internal static AudioClip AudioClip; + internal static ConfigEntry PluginEnabled; + internal static ConfigEntry Cooldown; + async void Awake() + { + PluginEnabled = Config.Bind( + "Main Settings", + "Plugin on/off", + true, + ""); + + Cooldown = Config.Bind( + "Main Settings", + "Sound cooldown", + 5f, + "Time between sound playback in seconds"); + + new Patch().Enable(); + + string uri = "file://" + (BepInEx.Paths.PluginPath + "/SamSWAT.SixthSense/audio.ogg").Replace("\\", "/"); + using (UnityWebRequest web = UnityWebRequestMultimedia.GetAudioClip(uri, AudioType.OGGVORBIS)) + { + var asyncOperation = web.SendWebRequest(); + + while (!asyncOperation.isDone) + await Task.Yield(); + + if (!web.isNetworkError && !web.isHttpError) + { + AudioClip = DownloadHandlerAudioClip.GetContent(web); + } + else + { + Debug.LogError($"Can't load audio at path: '{uri}', error: {web.error}"); + } + } + } + } + + public class Patch : ModulePatch + { + private static float nextTime = 0; + + protected override MethodBase GetTargetMethod() + { + return typeof(BotGroupClass).GetMethod("CalcGoalForBot"); + } + + [PatchPostfix] + public static void PatchPostfix(BotOwner bot) + { + if (Plugin.PluginEnabled.Value && Plugin.AudioClip != null && Time.time > nextTime) + { + //GClass442 goalEnemy = bot.Memory.GoalEnemy; + object goalEnemy = bot.Memory.GetType().GetProperty("GoalEnemy").GetValue(bot.Memory); + + if (goalEnemy != null) + { + IAIDetails person = (IAIDetails)goalEnemy.GetType().GetProperty("Person").GetValue(goalEnemy); + bool isVisible = (bool)goalEnemy.GetType().GetProperty("IsVisible").GetValue(goalEnemy); + + if (person.GetPlayer.IsYourPlayer && isVisible) + { + Singleton.Instance.PlaySound(Plugin.AudioClip); + nextTime = Time.time + Plugin.Cooldown.Value; + } + } + } + } + } +} diff --git a/Projects/SamSWAT.SixthSense/Properties/AssemblyInfo.cs b/Projects/SamSWAT.SixthSense/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fdad075 --- /dev/null +++ b/Projects/SamSWAT.SixthSense/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные со сборкой. +[assembly: AssemblyTitle("SamSWAT.SixthSense")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SamSWAT.SixthSense")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// COM, задайте атрибуту ComVisible значение TRUE для этого типа. +[assembly: ComVisible(false)] + +// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM +[assembly: Guid("8fdfc616-1704-4056-a87e-2783692cc153")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Редакция +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.csproj b/Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.csproj new file mode 100644 index 0000000..b7bd355 --- /dev/null +++ b/Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.csproj @@ -0,0 +1,68 @@ + + + + + Debug + AnyCPU + {8FDFC616-1704-4056-A87E-2783692CC153} + Library + Properties + SamSWAT.SixthSense + SamSWAT.SixthSense + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\References\Aki.Reflection.dll + + + ..\..\References\Assembly-CSharp.dll + + + ..\..\References\BepInEx.dll + + + ..\..\References\Comfort.dll + + + + ..\..\References\UnityEngine.dll + + + ..\..\References\UnityEngine.AudioModule.dll + + + ..\..\References\UnityEngine.CoreModule.dll + + + ..\..\References\UnityEngine.UnityWebRequestAudioModule.dll + + + ..\..\References\UnityEngine.UnityWebRequestModule.dll + + + + + + + + \ No newline at end of file diff --git a/Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.sln b/Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.sln new file mode 100644 index 0000000..5ae9658 --- /dev/null +++ b/Projects/SamSWAT.SixthSense/SamSWAT.SixthSense.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32002.261 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SamSWAT.SixthSense", "SamSWAT.SixthSense.csproj", "{8FDFC616-1704-4056-A87E-2783692CC153}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FDFC616-1704-4056-A87E-2783692CC153}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FDFC616-1704-4056-A87E-2783692CC153}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FDFC616-1704-4056-A87E-2783692CC153}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FDFC616-1704-4056-A87E-2783692CC153}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {37D92541-AB40-4482-8A3E-62C29777D542} + EndGlobalSection +EndGlobal diff --git a/References/UnityEngine.UnityWebRequestModule.dll b/References/UnityEngine.UnityWebRequestModule.dll new file mode 100644 index 0000000000000000000000000000000000000000..b99842a6d3d0edcef260e67432901b1deabdb29e GIT binary patch literal 43520 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 H+w%VlVgWZ` literal 0 HcmV?d00001