From b7a439a282e044df13cb2c988569fd7c02c03287 Mon Sep 17 00:00:00 2001 From: Rage Date: Tue, 14 Jan 2025 01:42:23 -0500 Subject: [PATCH] Added Interactable Exfils API --- .../BepInEx/plugins/InteractableExfilsAPI.dll | Bin 0 -> 32256 bytes .../JEHREE-InteractableExfilsAPI-LICENSE.txt | 1 + .../JEHREE-InteractableExfilsAPI-README.md | 103 ++++++++++++++++++ mods/Interactable Exfils API/meta.ini | 28 +++++ profiles/Multiplayer/modlist.txt | 1 + profiles/Server/modlist.txt | 1 + 6 files changed, 134 insertions(+) create mode 100644 mods/Interactable Exfils API/BepInEx/plugins/InteractableExfilsAPI.dll create mode 100644 mods/Interactable Exfils API/User/Mods/JEHREE-InteractableExfilsAPI-LICENSE.txt create mode 100644 mods/Interactable Exfils API/User/Mods/JEHREE-InteractableExfilsAPI-README.md create mode 100644 mods/Interactable Exfils API/meta.ini diff --git a/mods/Interactable Exfils API/BepInEx/plugins/InteractableExfilsAPI.dll b/mods/Interactable Exfils API/BepInEx/plugins/InteractableExfilsAPI.dll new file mode 100644 index 0000000000000000000000000000000000000000..6e6f4a9126d8079e047100bda8be35aa54508c78 GIT binary patch literal 32256 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 Gf&T + + $(PathToSPT)\BepInEx\plugins\InteractableExfilsAPI.dll + + +``` + +Then you have to create at least one handler and register it with the instance of the `InteractableExfilsService` + +### Create your custom handler + +```cs +// This example will add an enabled static action to every single extract in the game +public static class Examples +{ + // this static function is an exfil actions handler you can register with the InteractableExfilsService + public static OnActionsAppliedResult SimpleExample(ExfiltrationPoint exfil, CustomExfilTrigger customExfilTrigger, bool exfilIsAvailableToPlayer) + { + // This part of the code is ran everytime the prompt is created/refreshed + // It occurs when: + // 1. the player enter the exfil zone + // 2. the player interact with the prompt (i.e. press the "F" key) + // 3. the player changed a BepInEx config in InteractableExfilsAPI + // 4. the customExfilTrigger.RefreshPrompt() method has been invoked + // 5. the InteractableExfilsService.RefreshPrompt() method has been invoked + + bool isDisabled = false; + + // This represent the definition of 1 prompt item + CustomExfilAction customExfilAction = new CustomExfilAction( + "Example Interaction", + isDisabled, + () => { + // This part of the code is ran when the player interact with this prompt item + NotificationManagerClass.DisplayMessageNotification("Simple Interaction Example Selected!"); + } + ); + + // Here you have control over the ordering of the actions + List actions = [customExfilAction]; + + return new OnActionsAppliedResult(actions); + } +} +``` + +Take a look to the [Examples class](./Examples.cs) for more. + +### Register your actions + +You can do this whenever you want but the recommended way for doing it as early as possible is in the `Start()` method of your plugin class + +```cs +public class Plugin : BaseUnityPlugin { + private void Awake() { + // enable your patches here + } + private void Start() { + // retrieve the interactable exfil singleton service + InteractableExfilsService ieService = InteractableExfilsService.Instance(); + + // register SimpleExample handler + ieService.OnActionsAppliedEvent += Examples.SimpleExample; + } +} +``` + +### Disable vanilla actions +If you don't want to let Interactable Exfils API show the car exfils and labs elevator exfils prompts, it's possible to disable them. Be aware that in this situation your mod should handle the extraction logic by itself otherwise the player couldn't extract. + +```cs +public static void DisableVanillaAction() +{ + // e.g. disable vanilla action (for cars and labs elevator) + InteractableExfilsService.Instance().DisableVanillaActions = true; +} +``` + +### Retrieve all active exfils + +If you need a list of all the active exfils in raid, you can get it via the `InteractableExfilsSession` component + +```cs +public static List ExampleGetExfils() { + InteractableExfilsSession session = InteractableExfilsService.GetSession(); + return session.ActiveExfils; +} +``` + +## Mods that use Interactable Exfils API +If your mod use Interactable Exfils API, please make a PR here so we can point it as an example. + +- [Path To Tarkov](https://hub.sp-tarkov.com/files/file/569-path-to-tarkov/): used in [PTT.Services.ExfilPromptService](https://github.com/guillaumearm/PathToTarkov/blob/cc5a24140ae3acd9e212b9e73729e42b77780a7d/PTT-Plugin/Services/ExfilPromptService.cs) diff --git a/mods/Interactable Exfils API/meta.ini b/mods/Interactable Exfils API/meta.ini new file mode 100644 index 0000000..60e87f7 --- /dev/null +++ b/mods/Interactable Exfils API/meta.ini @@ -0,0 +1,28 @@ +[General] +gameName=spt +modid=0 +version=d2025.1.13.0 +newestVersion= +category="1," +nexusFileStatus=1 +installationFile=Jehree-InteractableExfilsAPI-1.5.1.zip +repository=Nexus +ignoredVersion= +comments= +notes= +nexusDescription= +url= +hasCustomURL=true +lastNexusQuery= +lastNexusUpdate= +nexusLastModified=2025-01-14T06:34:02Z +nexusCategory=0 +converted=false +validated=false +color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0) +tracked=0 + +[installedFiles] +1\modid=0 +1\fileid=0 +size=1 diff --git a/profiles/Multiplayer/modlist.txt b/profiles/Multiplayer/modlist.txt index b0cc076..763b4fc 100644 --- a/profiles/Multiplayer/modlist.txt +++ b/profiles/Multiplayer/modlist.txt @@ -98,6 +98,7 @@ +Performance Improvements -Bug Fixes & Optimizations_separator +Custom Interactions ++Interactable Exfils API +Virtual's Custom Quest Loader +Mod Sync +Waypoints diff --git a/profiles/Server/modlist.txt b/profiles/Server/modlist.txt index 8e57f86..9c39b12 100644 --- a/profiles/Server/modlist.txt +++ b/profiles/Server/modlist.txt @@ -97,6 +97,7 @@ +Performance Improvements +Bug Fixes & Optimizations_separator -Custom Interactions +-Interactable Exfils API +Virtual's Custom Quest Loader +Mod Sync +Waypoints