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 0000000..b99842a Binary files /dev/null and b/References/UnityEngine.UnityWebRequestModule.dll differ